diff --git a/dist/lightwallet.js b/dist/lightwallet.js index de7ba554..c98b81f9 100644 --- a/dist/lightwallet.js +++ b/dist/lightwallet.js @@ -168,15 +168,13 @@ module.exports = { }; }).call(this,require("buffer").Buffer) -},{"buffer":99,"ethereumjs-util":384,"tweetnacl":421}],3:[function(require,module,exports){ +},{"buffer":147,"ethereumjs-util":214,"tweetnacl":293}],3:[function(require,module,exports){ (function (Buffer){ -var CryptoJS = require('crypto-js'); +var EthUtil = require('ethereumjs-util'); var Transaction = require('ethereumjs-tx'); var EC = require('elliptic').ec; var ec = new EC('secp256k1'); var bitcore = require('bitcore-lib'); -var Random = bitcore.crypto.Random; -var Hash = bitcore.crypto.Hash; var Mnemonic = require('bitcore-mnemonic'); var nacl = require('tweetnacl'); var scrypt = require('scrypt-async'); @@ -323,11 +321,10 @@ KeyStore._computeAddressFromPrivKey = function (privKey) { keyPair._importPrivate(privKey, 'hex'); var compact = false; var pubKey = keyPair.getPublic(compact, 'hex').slice(2); - var pubKeyWordArray = CryptoJS.enc.Hex.parse(pubKey); - var hash = CryptoJS.SHA3(pubKeyWordArray, { outputLength: 256 }); - var address = hash.toString(CryptoJS.enc.Hex).slice(24); + var pubKeyWordArray = new Buffer(pubKey, 'hex'); + var hash = EthUtil.sha3(pubKeyWordArray).toString('hex'); - return address; + return hash.slice(24); }; KeyStore._computePubkeyFromPrivKey = function (privKey, curve) { @@ -394,7 +391,7 @@ KeyStore.prototype._generatePrivKeys = function(pwDerivedKey, n, hdPathString) { for (var i = 0; i < n; i++){ var hdprivkey = new bitcore.HDPrivateKey(hdRoot).derive(this.ksData[hdPathString].hdIndex++); var privkeyBuf = hdprivkey.privateKey.toBuffer(); - + var privkeyHex = privkeyBuf.toString('hex'); if (privkeyBuf.length < 16) { // Way too small key, something must have gone wrong @@ -431,7 +428,7 @@ KeyStore._concatAndSha256 = function(entropyBuf0, entropyBuf1) { throw new Error('generateRandomSeed: Logic error! Concatenation of entropy sources failed.') } - var hashedEnt = Hash.sha256(totalEnt); + var hashedEnt = EthUtil.sha256(totalEnt); return hashedEnt; } @@ -456,7 +453,7 @@ KeyStore.generateRandomSeed = function(extraEntropy) { } else if (typeof extraEntropy === 'string') { var entBuf = new Buffer(extraEntropy); - var randBuf = Random.getRandomBuffer(256 / 8); + var randBuf = nacl.randomBytes(256 / 8); var hashedEnt = this._concatAndSha256(randBuf, entBuf).slice(0, 128 / 8); seed = new Mnemonic(hashedEnt, Mnemonic.Words.ENGLISH); } @@ -479,7 +476,7 @@ KeyStore.prototype.isDerivedKeyCorrect = function(pwDerivedKey) { } return false; - + }; // Takes keystore serialized as string and returns an instance of KeyStore @@ -700,7 +697,7 @@ KeyStore.prototype.signTransaction = function (txParams, callback) { module.exports = KeyStore; }).call(this,require("buffer").Buffer) -},{"./encryption":2,"./signing":4,"bitcore-lib":7,"bitcore-mnemonic":86,"buffer":99,"crypto-js":330,"elliptic":356,"ethereumjs-tx":379,"scrypt-async":420,"tweetnacl":421}],4:[function(require,module,exports){ +},{"./encryption":2,"./signing":4,"bitcore-lib":9,"bitcore-mnemonic":88,"buffer":147,"elliptic":197,"ethereumjs-tx":213,"ethereumjs-util":214,"scrypt-async":259,"tweetnacl":293}],4:[function(require,module,exports){ (function (Buffer){ var Transaction = require("ethereumjs-tx") @@ -728,12 +725,12 @@ signTx = function (keystore, pwDerivedKey, rawTx, signingAddress, hdPathString) module.exports.signTx = signTx; }).call(this,require("buffer").Buffer) -},{"buffer":99,"ethereumjs-tx":379,"ethereumjs-util":384}],5:[function(require,module,exports){ +},{"buffer":147,"ethereumjs-tx":213,"ethereumjs-util":214}],5:[function(require,module,exports){ (function (Buffer){ var Transaction = require('ethereumjs-tx'); +var EthUtil = require('ethereumjs-util'); var coder = require('web3/lib/solidity/coder'); -var rlp = require('rlp'); -var CryptoJS = require('crypto-js'); +var rlp = EthUtil.rlp; function add0x (input) { if (typeof(input) !== 'string') { @@ -750,7 +747,7 @@ function add0x (input) { function _encodeFunctionTxData (functionName, types, args) { var fullName = functionName + '(' + types.join() + ')'; - var signature = CryptoJS.SHA3(fullName, { outputLength: 256 }).toString(CryptoJS.enc.Hex).slice(0, 8); + var signature = EthUtil.sha3(fullName).toString('hex').slice(0, 8); var dataHex = signature + coder.encodeParams(types, args); return dataHex; @@ -789,9 +786,8 @@ function functionTx (abi, functionName, args, txObject) { } function createdContractAddress (fromAddress, nonce) { - var rlpEncodedHex = rlp.encode([new Buffer(fromAddress, 'hex'), nonce]).toString('hex'); - var rlpEncodedWordArray = CryptoJS.enc.Hex.parse(rlpEncodedHex); - var hash = CryptoJS.SHA3(rlpEncodedWordArray, {outputLength: 256}).toString(CryptoJS.enc.Hex); + var rlpEncoded = rlp.encode([new Buffer(fromAddress, 'hex'), nonce]); + var hash = EthUtil.sha3(rlpEncoded).toString('hex'); return hash.slice(24); } @@ -838,8 +834,12 @@ module.exports = { }; }).call(this,require("buffer").Buffer) -},{"buffer":99,"crypto-js":330,"ethereumjs-tx":379,"rlp":419,"web3/lib/solidity/coder":425}],6:[function(require,module,exports){ -var CryptoJS = require('crypto-js'); +},{"buffer":147,"ethereumjs-tx":213,"ethereumjs-util":214,"web3/lib/solidity/coder":302}],6:[function(require,module,exports){ +(function (Buffer){ +var AES = require('crypto-js/aes'); +var PBKDF2 = require('crypto-js/pbkdf2'); +var SHA3 = require('crypto-js/sha3'); +var EthUtil = require('ethereumjs-util'); var keystore = require('./keystore'); var Transaction = require('ethereumjs-tx'); @@ -852,14 +852,15 @@ var Mnemonic = require('bitcore-mnemonic'); var nacl = require('tweetnacl'); var scrypt = require('scrypt-async'); + legacyDecryptString = function (encryptedStr, password) { - var decryptedStr = CryptoJS.AES.decrypt(encryptedStr.encStr, password, {'iv': encryptedStr.iv, 'salt': encryptedStr.salt }); - return decryptedStr.toString(CryptoJS.enc.Latin1); + var decryptedStr = AES.decrypt(encryptedStr.encStr, password, {'iv': encryptedStr.iv, 'salt': encryptedStr.salt }); + return new Buffer(decryptedStr.toString(),'hex').toString(); }; legacyGenerateEncKey = function(password, salt, keyHash) { - var encKey = CryptoJS.PBKDF2(password, salt, { keySize: 512 / 32, iterations: 150 }).toString(); - var hash = CryptoJS.SHA3(encKey).toString(); + var encKey = PBKDF2(password, salt, { keySize: 512 / 32, iterations: 150 }).toString(); + var hash = SHA3(encKey).toString(); if (keyHash !== hash){ throw new Error('Invalid Password'); } @@ -871,7 +872,7 @@ upgradeOldSerialized = function (oldSerialized, password, callback) { // Upgrades old serialized version of the keystore // to the latest version var oldKS = JSON.parse(oldSerialized); - + if (oldKS.version === undefined || oldKS.version === 1) { var derivedKey = legacyGenerateEncKey(password, oldKS.salt, oldKS.keyHash); @@ -892,7 +893,495 @@ upgradeOldSerialized = function (oldSerialized, password, callback) { module.exports.upgradeOldSerialized = upgradeOldSerialized; -},{"./keystore":3,"bitcore-lib":7,"bitcore-mnemonic":86,"crypto-js":330,"elliptic":356,"ethereumjs-tx":379,"scrypt-async":420,"tweetnacl":421}],7:[function(require,module,exports){ +}).call(this,require("buffer").Buffer) +},{"./keystore":3,"bitcore-lib":9,"bitcore-mnemonic":88,"buffer":147,"crypto-js/aes":175,"crypto-js/pbkdf2":182,"crypto-js/sha3":184,"elliptic":197,"ethereumjs-tx":213,"ethereumjs-util":214,"scrypt-async":259,"tweetnacl":293}],7:[function(require,module,exports){ +// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 +// +// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! +// +// Originally from narwhal.js (http://narwhaljs.org) +// Copyright (c) 2009 Thomas Robinson <280north.com> +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the 'Software'), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// when used in node, this will actually load the util module we depend on +// versus loading the builtin util module as happens otherwise +// this is a bug in node module loading as far as I am concerned +var util = require('util/'); + +var pSlice = Array.prototype.slice; +var hasOwn = Object.prototype.hasOwnProperty; + +// 1. The assert module provides functions that throw +// AssertionError's when particular conditions are not met. The +// assert module must conform to the following interface. + +var assert = module.exports = ok; + +// 2. The AssertionError is defined in assert. +// new assert.AssertionError({ message: message, +// actual: actual, +// expected: expected }) + +assert.AssertionError = function AssertionError(options) { + this.name = 'AssertionError'; + this.actual = options.actual; + this.expected = options.expected; + this.operator = options.operator; + if (options.message) { + this.message = options.message; + this.generatedMessage = false; + } else { + this.message = getMessage(this); + this.generatedMessage = true; + } + var stackStartFunction = options.stackStartFunction || fail; + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, stackStartFunction); + } + else { + // non v8 browsers so we can have a stacktrace + var err = new Error(); + if (err.stack) { + var out = err.stack; + + // try to strip useless frames + var fn_name = stackStartFunction.name; + var idx = out.indexOf('\n' + fn_name); + if (idx >= 0) { + // once we have located the function frame + // we need to strip out everything before it (and its line) + var next_line = out.indexOf('\n', idx + 1); + out = out.substring(next_line + 1); + } + + this.stack = out; + } + } +}; + +// assert.AssertionError instanceof Error +util.inherits(assert.AssertionError, Error); + +function replacer(key, value) { + if (util.isUndefined(value)) { + return '' + value; + } + if (util.isNumber(value) && !isFinite(value)) { + return value.toString(); + } + if (util.isFunction(value) || util.isRegExp(value)) { + return value.toString(); + } + return value; +} + +function truncate(s, n) { + if (util.isString(s)) { + return s.length < n ? s : s.slice(0, n); + } else { + return s; + } +} + +function getMessage(self) { + return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + + self.operator + ' ' + + truncate(JSON.stringify(self.expected, replacer), 128); +} + +// At present only the three keys mentioned above are used and +// understood by the spec. Implementations or sub modules can pass +// other keys to the AssertionError's constructor - they will be +// ignored. + +// 3. All of the following functions must throw an AssertionError +// when a corresponding condition is not met, with a message that +// may be undefined if not provided. All assertion methods provide +// both the actual and expected values to the assertion error for +// display purposes. + +function fail(actual, expected, message, operator, stackStartFunction) { + throw new assert.AssertionError({ + message: message, + actual: actual, + expected: expected, + operator: operator, + stackStartFunction: stackStartFunction + }); +} + +// EXTENSION! allows for well behaved errors defined elsewhere. +assert.fail = fail; + +// 4. Pure assertion tests whether a value is truthy, as determined +// by !!guard. +// assert.ok(guard, message_opt); +// This statement is equivalent to assert.equal(true, !!guard, +// message_opt);. To test strictly for the value true, use +// assert.strictEqual(true, guard, message_opt);. + +function ok(value, message) { + if (!value) fail(value, true, message, '==', assert.ok); +} +assert.ok = ok; + +// 5. The equality assertion tests shallow, coercive equality with +// ==. +// assert.equal(actual, expected, message_opt); + +assert.equal = function equal(actual, expected, message) { + if (actual != expected) fail(actual, expected, message, '==', assert.equal); +}; + +// 6. The non-equality assertion tests for whether two objects are not equal +// with != assert.notEqual(actual, expected, message_opt); + +assert.notEqual = function notEqual(actual, expected, message) { + if (actual == expected) { + fail(actual, expected, message, '!=', assert.notEqual); + } +}; + +// 7. The equivalence assertion tests a deep equality relation. +// assert.deepEqual(actual, expected, message_opt); + +assert.deepEqual = function deepEqual(actual, expected, message) { + if (!_deepEqual(actual, expected)) { + fail(actual, expected, message, 'deepEqual', assert.deepEqual); + } +}; + +function _deepEqual(actual, expected) { + // 7.1. All identical values are equivalent, as determined by ===. + if (actual === expected) { + return true; + + } else if (util.isBuffer(actual) && util.isBuffer(expected)) { + if (actual.length != expected.length) return false; + + for (var i = 0; i < actual.length; i++) { + if (actual[i] !== expected[i]) return false; + } + + return true; + + // 7.2. If the expected value is a Date object, the actual value is + // equivalent if it is also a Date object that refers to the same time. + } else if (util.isDate(actual) && util.isDate(expected)) { + return actual.getTime() === expected.getTime(); + + // 7.3 If the expected value is a RegExp object, the actual value is + // equivalent if it is also a RegExp object with the same source and + // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). + } else if (util.isRegExp(actual) && util.isRegExp(expected)) { + return actual.source === expected.source && + actual.global === expected.global && + actual.multiline === expected.multiline && + actual.lastIndex === expected.lastIndex && + actual.ignoreCase === expected.ignoreCase; + + // 7.4. Other pairs that do not both pass typeof value == 'object', + // equivalence is determined by ==. + } else if (!util.isObject(actual) && !util.isObject(expected)) { + return actual == expected; + + // 7.5 For all other Object pairs, including Array objects, equivalence is + // determined by having the same number of owned properties (as verified + // with Object.prototype.hasOwnProperty.call), the same set of keys + // (although not necessarily the same order), equivalent values for every + // corresponding key, and an identical 'prototype' property. Note: this + // accounts for both named and indexed properties on Arrays. + } else { + return objEquiv(actual, expected); + } +} + +function isArguments(object) { + return Object.prototype.toString.call(object) == '[object Arguments]'; +} + +function objEquiv(a, b) { + if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) + return false; + // an identical 'prototype' property. + if (a.prototype !== b.prototype) return false; + // if one is a primitive, the other must be same + if (util.isPrimitive(a) || util.isPrimitive(b)) { + return a === b; + } + var aIsArgs = isArguments(a), + bIsArgs = isArguments(b); + if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) + return false; + if (aIsArgs) { + a = pSlice.call(a); + b = pSlice.call(b); + return _deepEqual(a, b); + } + var ka = objectKeys(a), + kb = objectKeys(b), + key, i; + // having the same number of owned properties (keys incorporates + // hasOwnProperty) + if (ka.length != kb.length) + return false; + //the same set of keys (although not necessarily the same order), + ka.sort(); + kb.sort(); + //~~~cheap key test + for (i = ka.length - 1; i >= 0; i--) { + if (ka[i] != kb[i]) + return false; + } + //equivalent values for every corresponding key, and + //~~~possibly expensive deep test + for (i = ka.length - 1; i >= 0; i--) { + key = ka[i]; + if (!_deepEqual(a[key], b[key])) return false; + } + return true; +} + +// 8. The non-equivalence assertion tests for any deep inequality. +// assert.notDeepEqual(actual, expected, message_opt); + +assert.notDeepEqual = function notDeepEqual(actual, expected, message) { + if (_deepEqual(actual, expected)) { + fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); + } +}; + +// 9. The strict equality assertion tests strict equality, as determined by ===. +// assert.strictEqual(actual, expected, message_opt); + +assert.strictEqual = function strictEqual(actual, expected, message) { + if (actual !== expected) { + fail(actual, expected, message, '===', assert.strictEqual); + } +}; + +// 10. The strict non-equality assertion tests for strict inequality, as +// determined by !==. assert.notStrictEqual(actual, expected, message_opt); + +assert.notStrictEqual = function notStrictEqual(actual, expected, message) { + if (actual === expected) { + fail(actual, expected, message, '!==', assert.notStrictEqual); + } +}; + +function expectedException(actual, expected) { + if (!actual || !expected) { + return false; + } + + if (Object.prototype.toString.call(expected) == '[object RegExp]') { + return expected.test(actual); + } else if (actual instanceof expected) { + return true; + } else if (expected.call({}, actual) === true) { + return true; + } + + return false; +} + +function _throws(shouldThrow, block, expected, message) { + var actual; + + if (util.isString(expected)) { + message = expected; + expected = null; + } + + try { + block(); + } catch (e) { + actual = e; + } + + message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + + (message ? ' ' + message : '.'); + + if (shouldThrow && !actual) { + fail(actual, expected, 'Missing expected exception' + message); + } + + if (!shouldThrow && expectedException(actual, expected)) { + fail(actual, expected, 'Got unwanted exception' + message); + } + + if ((shouldThrow && actual && expected && + !expectedException(actual, expected)) || (!shouldThrow && actual)) { + throw actual; + } +} + +// 11. Expected to throw an error: +// assert.throws(block, Error_opt, message_opt); + +assert.throws = function(block, /*optional*/error, /*optional*/message) { + _throws.apply(this, [true].concat(pSlice.call(arguments))); +}; + +// EXTENSION! This is annoying to write outside this module. +assert.doesNotThrow = function(block, /*optional*/message) { + _throws.apply(this, [false].concat(pSlice.call(arguments))); +}; + +assert.ifError = function(err) { if (err) {throw err;}}; + +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + if (hasOwn.call(obj, key)) keys.push(key); + } + return keys; +}; + +},{"util/":298}],8:[function(require,module,exports){ +var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + +;(function (exports) { + 'use strict'; + + var Arr = (typeof Uint8Array !== 'undefined') + ? Uint8Array + : Array + + var PLUS = '+'.charCodeAt(0) + var SLASH = '/'.charCodeAt(0) + var NUMBER = '0'.charCodeAt(0) + var LOWER = 'a'.charCodeAt(0) + var UPPER = 'A'.charCodeAt(0) + var PLUS_URL_SAFE = '-'.charCodeAt(0) + var SLASH_URL_SAFE = '_'.charCodeAt(0) + + function decode (elt) { + var code = elt.charCodeAt(0) + if (code === PLUS || + code === PLUS_URL_SAFE) + return 62 // '+' + if (code === SLASH || + code === SLASH_URL_SAFE) + return 63 // '/' + if (code < NUMBER) + return -1 //no match + if (code < NUMBER + 10) + return code - NUMBER + 26 + 26 + if (code < UPPER + 26) + return code - UPPER + if (code < LOWER + 26) + return code - LOWER + 26 + } + + function b64ToByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + + if (b64.length % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + var len = b64.length + placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 + + // base64 is 4/3 + up to two characters of the original data + arr = new Arr(b64.length * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? b64.length - 4 : b64.length + + var L = 0 + + function push (v) { + arr[L++] = v + } + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) + push((tmp & 0xFF0000) >> 16) + push((tmp & 0xFF00) >> 8) + push(tmp & 0xFF) + } + + if (placeHolders === 2) { + tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) + push(tmp & 0xFF) + } else if (placeHolders === 1) { + tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) + push((tmp >> 8) & 0xFF) + push(tmp & 0xFF) + } + + return arr + } + + function uint8ToBase64 (uint8) { + var i, + extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes + output = "", + temp, length + + function encode (num) { + return lookup.charAt(num) + } + + function tripletToBase64 (num) { + return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) + } + + // go through the array every three bytes, we'll deal with trailing stuff later + for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { + temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output += tripletToBase64(temp) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + switch (extraBytes) { + case 1: + temp = uint8[uint8.length - 1] + output += encode(temp >> 2) + output += encode((temp << 4) & 0x3F) + output += '==' + break + case 2: + temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) + output += encode(temp >> 10) + output += encode((temp >> 4) & 0x3F) + output += encode((temp << 2) & 0x3F) + output += '=' + break + } + + return output + } + + exports.toByteArray = b64ToByteArray + exports.fromByteArray = uint8ToBase64 +}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) + +},{}],9:[function(require,module,exports){ (function (global,Buffer){ 'use strict'; @@ -966,7 +1455,7 @@ bitcore._HDKeyCache = require('./lib/hdkeycache'); bitcore.Transaction.sighash = require('./lib/transaction/sighash'); }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"./lib/address":8,"./lib/block":11,"./lib/block/blockheader":10,"./lib/block/merkleblock":12,"./lib/crypto/bn":13,"./lib/crypto/ecdsa":14,"./lib/crypto/hash":15,"./lib/crypto/point":16,"./lib/crypto/random":17,"./lib/crypto/signature":18,"./lib/encoding/base58":19,"./lib/encoding/base58check":20,"./lib/encoding/bufferreader":21,"./lib/encoding/bufferwriter":22,"./lib/encoding/varint":23,"./lib/errors":24,"./lib/hdkeycache":26,"./lib/hdprivatekey.js":27,"./lib/hdpublickey.js":28,"./lib/networks":29,"./lib/opcode":30,"./lib/privatekey":31,"./lib/publickey":32,"./lib/script":33,"./lib/transaction":36,"./lib/transaction/sighash":44,"./lib/unit":48,"./lib/uri":49,"./lib/util/buffer":50,"./lib/util/js":51,"./lib/util/preconditions":52,"./package.json":85,"bn.js":53,"bs58":54,"buffer":99,"elliptic":56,"lodash":78}],8:[function(require,module,exports){ +},{"./lib/address":10,"./lib/block":13,"./lib/block/blockheader":12,"./lib/block/merkleblock":14,"./lib/crypto/bn":15,"./lib/crypto/ecdsa":16,"./lib/crypto/hash":17,"./lib/crypto/point":18,"./lib/crypto/random":19,"./lib/crypto/signature":20,"./lib/encoding/base58":21,"./lib/encoding/base58check":22,"./lib/encoding/bufferreader":23,"./lib/encoding/bufferwriter":24,"./lib/encoding/varint":25,"./lib/errors":26,"./lib/hdkeycache":28,"./lib/hdprivatekey.js":29,"./lib/hdpublickey.js":30,"./lib/networks":31,"./lib/opcode":32,"./lib/privatekey":33,"./lib/publickey":34,"./lib/script":35,"./lib/transaction":38,"./lib/transaction/sighash":46,"./lib/unit":50,"./lib/uri":51,"./lib/util/buffer":52,"./lib/util/js":53,"./lib/util/preconditions":54,"./package.json":87,"bn.js":55,"bs58":56,"buffer":147,"elliptic":58,"lodash":80}],10:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -1468,7 +1957,7 @@ module.exports = Address; var Script = require('./script'); }).call(this,require("buffer").Buffer) -},{"./crypto/hash":15,"./encoding/base58check":20,"./errors":24,"./networks":29,"./publickey":32,"./script":33,"./util/js":51,"./util/preconditions":52,"buffer":99,"lodash":78}],9:[function(require,module,exports){ +},{"./crypto/hash":17,"./encoding/base58check":22,"./errors":26,"./networks":31,"./publickey":34,"./script":35,"./util/js":53,"./util/preconditions":54,"buffer":147,"lodash":80}],11:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -1753,7 +2242,7 @@ Block.Values = { module.exports = Block; }).call(this,require("buffer").Buffer) -},{"../crypto/bn":13,"../crypto/hash":15,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../transaction":36,"../util/buffer":50,"../util/preconditions":52,"./blockheader":10,"buffer":99,"lodash":78}],10:[function(require,module,exports){ +},{"../crypto/bn":15,"../crypto/hash":17,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../transaction":38,"../util/buffer":52,"../util/preconditions":54,"./blockheader":12,"buffer":147,"lodash":80}],12:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -2053,13 +2542,13 @@ BlockHeader.Constants = { module.exports = BlockHeader; }).call(this,require("buffer").Buffer) -},{"../crypto/bn":13,"../crypto/hash":15,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,"buffer":99,"lodash":78}],11:[function(require,module,exports){ +},{"../crypto/bn":15,"../crypto/hash":17,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,"buffer":147,"lodash":80}],13:[function(require,module,exports){ module.exports = require('./block'); module.exports.BlockHeader = require('./blockheader'); module.exports.MerkleBlock = require('./merkleblock'); -},{"./block":9,"./blockheader":10,"./merkleblock":12}],12:[function(require,module,exports){ +},{"./block":11,"./blockheader":12,"./merkleblock":14}],14:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -2335,7 +2824,7 @@ MerkleBlock.fromObject = function fromObject(obj) { module.exports = MerkleBlock; }).call(this,require("buffer").Buffer) -},{"../crypto/hash":15,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../transaction":36,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,"./blockheader":10,"buffer":99,"lodash":78}],13:[function(require,module,exports){ +},{"../crypto/hash":17,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../transaction":38,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,"./blockheader":12,"buffer":147,"lodash":80}],15:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -2541,7 +3030,7 @@ BN.pad = function(buf, natlen, size) { module.exports = BN; }).call(this,require("buffer").Buffer) -},{"../util/preconditions":52,"bn.js":53,"buffer":99,"lodash":78}],14:[function(require,module,exports){ +},{"../util/preconditions":54,"bn.js":55,"buffer":147,"lodash":80}],16:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -2840,7 +3329,7 @@ ECDSA.verify = function(hashbuf, sig, pubkey, endian) { module.exports = ECDSA; }).call(this,require("buffer").Buffer) -},{"../publickey":32,"../util/buffer":50,"../util/preconditions":52,"./bn":13,"./hash":15,"./point":16,"./random":17,"./signature":18,"buffer":99,"lodash":78}],15:[function(require,module,exports){ +},{"../publickey":34,"../util/buffer":52,"../util/preconditions":54,"./bn":15,"./hash":17,"./point":18,"./random":19,"./signature":20,"buffer":147,"lodash":80}],17:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -2931,7 +3420,7 @@ Hash.sha512hmac = function(data, key) { }; }).call(this,require("buffer").Buffer) -},{"../util/buffer":50,"../util/preconditions":52,"buffer":99,"crypto":103,"sha512":81}],16:[function(require,module,exports){ +},{"../util/buffer":52,"../util/preconditions":54,"buffer":147,"crypto":174,"sha512":83}],18:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -3080,7 +3569,7 @@ Point.pointToCompressed = function pointToCompressed(point) { module.exports = Point; }).call(this,require("buffer").Buffer) -},{"../util/buffer":50,"./bn":13,"buffer":99,"elliptic":56}],17:[function(require,module,exports){ +},{"../util/buffer":52,"./bn":15,"buffer":147,"elliptic":58}],19:[function(require,module,exports){ (function (process,Buffer){ 'use strict'; @@ -3141,7 +3630,7 @@ Random.getPseudoRandomBuffer = function(size) { module.exports = Random; }).call(this,require('_process'),require("buffer").Buffer) -},{"_process":299,"buffer":99,"crypto":103}],18:[function(require,module,exports){ +},{"_process":235,"buffer":147,"crypto":174}],20:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -3457,7 +3946,7 @@ Signature.SIGHASH_ANYONECANPAY = 0x80; module.exports = Signature; }).call(this,require("buffer").Buffer) -},{"../util/buffer":50,"../util/js":51,"../util/preconditions":52,"./bn":13,"buffer":99,"lodash":78}],19:[function(require,module,exports){ +},{"../util/buffer":52,"../util/js":53,"../util/preconditions":54,"./bn":15,"buffer":147,"lodash":80}],21:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -3531,7 +4020,7 @@ Base58.prototype.toString = function() { module.exports = Base58; }).call(this,require("buffer").Buffer) -},{"bs58":54,"buffer":99,"lodash":78}],20:[function(require,module,exports){ +},{"bs58":56,"buffer":147,"lodash":80}],22:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -3630,7 +4119,7 @@ Base58Check.prototype.toString = function() { module.exports = Base58Check; }).call(this,require("buffer").Buffer) -},{"../crypto/hash":15,"./base58":19,"buffer":99,"lodash":78}],21:[function(require,module,exports){ +},{"../crypto/hash":17,"./base58":21,"buffer":147,"lodash":80}],23:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -3826,7 +4315,7 @@ BufferReader.prototype.readReverse = function(len) { module.exports = BufferReader; }).call(this,require("buffer").Buffer) -},{"../crypto/bn":13,"../util/buffer":50,"../util/preconditions":52,"buffer":99,"lodash":78}],22:[function(require,module,exports){ +},{"../crypto/bn":15,"../util/buffer":52,"../util/preconditions":54,"buffer":147,"lodash":80}],24:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -3981,7 +4470,7 @@ BufferWriter.varintBufBN = function(bn) { module.exports = BufferWriter; }).call(this,require("buffer").Buffer) -},{"../util/buffer":50,"assert":97,"buffer":99}],23:[function(require,module,exports){ +},{"../util/buffer":52,"assert":7,"buffer":147}],25:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -4057,7 +4546,7 @@ Varint.prototype.toNumber = function() { module.exports = Varint; }).call(this,require("buffer").Buffer) -},{"../crypto/bn":13,"./bufferreader":21,"./bufferwriter":22,"buffer":99}],24:[function(require,module,exports){ +},{"../crypto/bn":15,"./bufferreader":23,"./bufferwriter":24,"buffer":147}],26:[function(require,module,exports){ 'use strict'; var _ = require('lodash'); @@ -4120,7 +4609,7 @@ module.exports.extend = function(spec) { return traverseNode(bitcore.Error, spec); }; -},{"./spec":25,"lodash":78}],25:[function(require,module,exports){ +},{"./spec":27,"lodash":80}],27:[function(require,module,exports){ 'use strict'; var docsURL = 'http://bitcore.io/'; @@ -4299,7 +4788,7 @@ module.exports = [{ }] }]; -},{}],26:[function(require,module,exports){ +},{}],28:[function(require,module,exports){ 'use strict'; module.exports = { @@ -4346,7 +4835,7 @@ module.exports = { } }; -},{}],27:[function(require,module,exports){ +},{}],29:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -4927,7 +5416,7 @@ assert(HDPrivateKey.ChecksumEnd === HDPrivateKey.SerializedByteSize); module.exports = HDPrivateKey; }).call(this,require("buffer").Buffer) -},{"./crypto/bn":13,"./crypto/hash":15,"./crypto/point":16,"./crypto/random":17,"./encoding/base58":19,"./encoding/base58check":20,"./errors":24,"./hdkeycache":26,"./hdpublickey":28,"./networks":29,"./privatekey":31,"./util/buffer":50,"./util/js":51,"./util/preconditions":52,"assert":97,"buffer":99,"lodash":78}],28:[function(require,module,exports){ +},{"./crypto/bn":15,"./crypto/hash":17,"./crypto/point":18,"./crypto/random":19,"./encoding/base58":21,"./encoding/base58check":22,"./errors":26,"./hdkeycache":28,"./hdpublickey":30,"./networks":31,"./privatekey":33,"./util/buffer":52,"./util/js":53,"./util/preconditions":54,"assert":7,"buffer":147,"lodash":80}],30:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -5395,7 +5884,7 @@ assert(HDPublicKey.ChecksumEnd === HDPublicKey.SerializedByteSize); module.exports = HDPublicKey; }).call(this,require("buffer").Buffer) -},{"./crypto/bn":13,"./crypto/hash":15,"./crypto/point":16,"./encoding/base58":19,"./encoding/base58check":20,"./errors":24,"./hdkeycache":26,"./hdprivatekey":27,"./networks":29,"./publickey":32,"./util/buffer":50,"./util/js":51,"./util/preconditions":52,"assert":97,"buffer":99,"lodash":78}],29:[function(require,module,exports){ +},{"./crypto/bn":15,"./crypto/hash":17,"./crypto/point":18,"./encoding/base58":21,"./encoding/base58check":22,"./errors":26,"./hdkeycache":28,"./hdprivatekey":29,"./networks":31,"./publickey":34,"./util/buffer":52,"./util/js":53,"./util/preconditions":54,"assert":7,"buffer":147,"lodash":80}],31:[function(require,module,exports){ 'use strict'; var _ = require('lodash'); @@ -5666,7 +6155,7 @@ module.exports = { disableRegtest: disableRegtest }; -},{"./util/buffer":50,"./util/js":51,"lodash":78}],30:[function(require,module,exports){ +},{"./util/buffer":52,"./util/js":53,"lodash":80}],32:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -5918,7 +6407,7 @@ Opcode.prototype.inspect = function() { module.exports = Opcode; }).call(this,require("buffer").Buffer) -},{"./util/buffer":50,"./util/js":51,"./util/preconditions":52,"buffer":99,"lodash":78}],31:[function(require,module,exports){ +},{"./util/buffer":52,"./util/js":53,"./util/preconditions":54,"buffer":147,"lodash":80}],33:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -6309,7 +6798,7 @@ PrivateKey.prototype.inspect = function() { module.exports = PrivateKey; }).call(this,require("buffer").Buffer) -},{"./address":8,"./crypto/bn":13,"./crypto/point":16,"./crypto/random":17,"./encoding/base58check":20,"./networks":29,"./publickey":32,"./util/js":51,"./util/preconditions":52,"buffer":99,"lodash":78}],32:[function(require,module,exports){ +},{"./address":10,"./crypto/bn":15,"./crypto/point":18,"./crypto/random":19,"./encoding/base58check":22,"./networks":31,"./publickey":34,"./util/js":53,"./util/preconditions":54,"buffer":147,"lodash":80}],34:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -6706,12 +7195,12 @@ PublicKey.prototype.inspect = function() { module.exports = PublicKey; }).call(this,require("buffer").Buffer) -},{"./address":8,"./crypto/bn":13,"./crypto/hash":15,"./crypto/point":16,"./networks":29,"./privatekey":31,"./util/js":51,"./util/preconditions":52,"buffer":99,"lodash":78}],33:[function(require,module,exports){ +},{"./address":10,"./crypto/bn":15,"./crypto/hash":17,"./crypto/point":18,"./networks":31,"./privatekey":33,"./util/js":53,"./util/preconditions":54,"buffer":147,"lodash":80}],35:[function(require,module,exports){ module.exports = require('./script'); module.exports.Interpreter = require('./interpreter'); -},{"./interpreter":34,"./script":35}],34:[function(require,module,exports){ +},{"./interpreter":36,"./script":37}],36:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -7980,7 +8469,7 @@ Interpreter.prototype.step = function() { }).call(this,require("buffer").Buffer) -},{"../crypto/bn":13,"../crypto/hash":15,"../crypto/signature":18,"../opcode":30,"../publickey":32,"../transaction":36,"./script":35,"buffer":99,"lodash":78}],35:[function(require,module,exports){ +},{"../crypto/bn":15,"../crypto/hash":17,"../crypto/signature":20,"../opcode":32,"../publickey":34,"../transaction":38,"./script":37,"buffer":147,"lodash":80}],37:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -9038,7 +9527,7 @@ Script.prototype.getSignatureOperationsCount = function(accurate) { module.exports = Script; }).call(this,require("buffer").Buffer) -},{"../address":8,"../crypto/hash":15,"../crypto/signature":18,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../errors":24,"../networks":29,"../opcode":30,"../publickey":32,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,"buffer":99,"lodash":78}],36:[function(require,module,exports){ +},{"../address":10,"../crypto/hash":17,"../crypto/signature":20,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../errors":26,"../networks":31,"../opcode":32,"../publickey":34,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,"buffer":147,"lodash":80}],38:[function(require,module,exports){ module.exports = require('./transaction'); module.exports.Input = require('./input'); @@ -9047,7 +9536,7 @@ module.exports.UnspentOutput = require('./unspentoutput'); module.exports.Signature = require('./signature'); module.exports.Sighash = require('./sighash'); -},{"./input":37,"./output":43,"./sighash":44,"./signature":45,"./transaction":46,"./unspentoutput":47}],37:[function(require,module,exports){ +},{"./input":39,"./output":45,"./sighash":46,"./signature":47,"./transaction":48,"./unspentoutput":49}],39:[function(require,module,exports){ module.exports = require('./input'); module.exports.PublicKey = require('./publickey'); @@ -9055,7 +9544,7 @@ module.exports.PublicKeyHash = require('./publickeyhash'); module.exports.MultiSig = require('./multisig.js'); module.exports.MultiSigScriptHash = require('./multisigscripthash.js'); -},{"./input":38,"./multisig.js":39,"./multisigscripthash.js":40,"./publickey":41,"./publickeyhash":42}],38:[function(require,module,exports){ +},{"./input":40,"./multisig.js":41,"./multisigscripthash.js":42,"./publickey":43,"./publickeyhash":44}],40:[function(require,module,exports){ 'use strict'; var _ = require('lodash'); @@ -9250,7 +9739,7 @@ Input.prototype._estimateSize = function() { module.exports = Input; -},{"../../encoding/bufferwriter":22,"../../errors":24,"../../script":33,"../../util/buffer":50,"../../util/js":51,"../../util/preconditions":52,"../output":43,"../sighash":44,"buffer":99,"lodash":78}],39:[function(require,module,exports){ +},{"../../encoding/bufferwriter":24,"../../errors":26,"../../script":35,"../../util/buffer":52,"../../util/js":53,"../../util/preconditions":54,"../output":45,"../sighash":46,"buffer":147,"lodash":80}],41:[function(require,module,exports){ 'use strict'; var _ = require('lodash'); @@ -9463,7 +9952,7 @@ MultiSigInput.prototype._estimateSize = function() { module.exports = MultiSigInput; -},{"../../crypto/signature":18,"../../publickey":32,"../../script":33,"../../util/buffer":50,"../../util/preconditions":52,"../output":43,"../sighash":44,"../signature":45,"../transaction":46,"./input":38,"inherits":77,"lodash":78}],40:[function(require,module,exports){ +},{"../../crypto/signature":20,"../../publickey":34,"../../script":35,"../../util/buffer":52,"../../util/preconditions":54,"../output":45,"../sighash":46,"../signature":47,"../transaction":48,"./input":40,"inherits":79,"lodash":80}],42:[function(require,module,exports){ 'use strict'; var _ = require('lodash'); @@ -9631,7 +10120,7 @@ MultiSigScriptHashInput.prototype._estimateSize = function() { module.exports = MultiSigScriptHashInput; -},{"../../crypto/signature":18,"../../publickey":32,"../../script":33,"../../util/buffer":50,"../../util/preconditions":52,"../output":43,"../sighash":44,"../signature":45,"./input":38,"inherits":77,"lodash":78}],41:[function(require,module,exports){ +},{"../../crypto/signature":20,"../../publickey":34,"../../script":35,"../../util/buffer":52,"../../util/preconditions":54,"../output":45,"../sighash":46,"../signature":47,"./input":40,"inherits":79,"lodash":80}],43:[function(require,module,exports){ 'use strict'; var inherits = require('inherits'); @@ -9722,7 +10211,7 @@ PublicKeyInput.prototype._estimateSize = function() { module.exports = PublicKeyInput; -},{"../../crypto/signature":18,"../../script":33,"../../util/buffer":50,"../../util/preconditions":52,"../output":43,"../sighash":44,"../signature":45,"./input":38,"inherits":77}],42:[function(require,module,exports){ +},{"../../crypto/signature":20,"../../script":35,"../../util/buffer":52,"../../util/preconditions":54,"../output":45,"../sighash":46,"../signature":47,"./input":40,"inherits":79}],44:[function(require,module,exports){ 'use strict'; var inherits = require('inherits'); @@ -9819,7 +10308,7 @@ PublicKeyHashInput.prototype._estimateSize = function() { module.exports = PublicKeyHashInput; -},{"../../crypto/hash":15,"../../crypto/signature":18,"../../script":33,"../../util/buffer":50,"../../util/preconditions":52,"../output":43,"../sighash":44,"../signature":45,"./input":38,"inherits":77}],43:[function(require,module,exports){ +},{"../../crypto/hash":17,"../../crypto/signature":20,"../../script":35,"../../util/buffer":52,"../../util/preconditions":54,"../output":45,"../sighash":46,"../signature":47,"./input":40,"inherits":79}],45:[function(require,module,exports){ 'use strict'; var _ = require('lodash'); @@ -9989,7 +10478,7 @@ Output.prototype.toBufferWriter = function(writer) { module.exports = Output; -},{"../crypto/bn":13,"../encoding/bufferwriter":22,"../errors":24,"../script":33,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,"buffer":99,"lodash":78}],44:[function(require,module,exports){ +},{"../crypto/bn":15,"../encoding/bufferwriter":24,"../errors":26,"../script":35,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,"buffer":147,"lodash":80}],46:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -10129,7 +10618,7 @@ module.exports = { }; }).call(this,require("buffer").Buffer) -},{"../crypto/bn":13,"../crypto/ecdsa":14,"../crypto/hash":15,"../crypto/signature":18,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../script":33,"../util/preconditions":52,"./input":37,"./output":43,"./transaction":46,"buffer":99,"lodash":78}],45:[function(require,module,exports){ +},{"../crypto/bn":15,"../crypto/ecdsa":16,"../crypto/hash":17,"../crypto/signature":20,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../script":35,"../util/preconditions":54,"./input":39,"./output":45,"./transaction":48,"buffer":147,"lodash":80}],47:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -10222,7 +10711,7 @@ TransactionSignature.fromObject = function(object) { module.exports = TransactionSignature; }).call(this,require("buffer").Buffer) -},{"../crypto/signature":18,"../errors":24,"../publickey":32,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,"buffer":99,"inherits":77,"lodash":78}],46:[function(require,module,exports){ +},{"../crypto/signature":20,"../errors":26,"../publickey":34,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,"buffer":147,"inherits":79,"lodash":80}],48:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -11427,7 +11916,7 @@ Transaction.prototype.isCoinbase = function() { module.exports = Transaction; }).call(this,require("buffer").Buffer) -},{"../address":8,"../crypto/bn":13,"../crypto/hash":15,"../crypto/signature":18,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../errors":24,"../privatekey":31,"../script":33,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,"./input":37,"./output":43,"./sighash":44,"./unspentoutput":47,"buffer":99,"buffer-compare":55,"lodash":78}],47:[function(require,module,exports){ +},{"../address":10,"../crypto/bn":15,"../crypto/hash":17,"../crypto/signature":20,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../errors":26,"../privatekey":33,"../script":35,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,"./input":39,"./output":45,"./sighash":46,"./unspentoutput":49,"buffer":147,"buffer-compare":57,"lodash":80}],49:[function(require,module,exports){ 'use strict'; var _ = require('lodash'); @@ -11529,7 +12018,7 @@ UnspentOutput.prototype.toObject = UnspentOutput.prototype.toJSON = function toO module.exports = UnspentOutput; -},{"../address":8,"../script":33,"../unit":48,"../util/js":51,"../util/preconditions":52,"lodash":78}],48:[function(require,module,exports){ +},{"../address":10,"../script":35,"../unit":50,"../util/js":53,"../util/preconditions":54,"lodash":80}],50:[function(require,module,exports){ 'use strict'; var _ = require('lodash'); @@ -11769,7 +12258,7 @@ Unit.prototype.inspect = function() { module.exports = Unit; -},{"./errors":24,"./util/preconditions":52,"lodash":78}],49:[function(require,module,exports){ +},{"./errors":26,"./util/preconditions":54,"lodash":80}],51:[function(require,module,exports){ 'use strict'; var _ = require('lodash'); @@ -11994,7 +12483,7 @@ URI.prototype.inspect = function() { module.exports = URI; -},{"./address":8,"./unit":48,"lodash":78,"url":317}],50:[function(require,module,exports){ +},{"./address":10,"./unit":50,"lodash":80,"url":295}],52:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -12175,7 +12664,7 @@ module.exports.NULL_HASH = module.exports.fill(new Buffer(32), 0); module.exports.EMPTY_BUFFER = new Buffer(0); }).call(this,require("buffer").Buffer) -},{"./js":51,"./preconditions":52,"assert":97,"buffer":99}],51:[function(require,module,exports){ +},{"./js":53,"./preconditions":54,"assert":7,"buffer":147}],53:[function(require,module,exports){ 'use strict'; var _ = require('lodash'); @@ -12261,7 +12750,7 @@ module.exports = { } }; -},{"lodash":78}],52:[function(require,module,exports){ +},{"lodash":80}],54:[function(require,module,exports){ 'use strict'; var errors = require('../errors'); @@ -12297,7 +12786,7 @@ module.exports = { } }; -},{"../errors":24,"./buffer":50,"lodash":78}],53:[function(require,module,exports){ +},{"../errors":26,"./buffer":52,"lodash":80}],55:[function(require,module,exports){ (function (module, exports) { 'use strict'; @@ -14585,7 +15074,7 @@ Mont.prototype.invm = function invm(a) { })(typeof module === 'undefined' || module, this); -},{}],54:[function(require,module,exports){ +},{}],56:[function(require,module,exports){ // Base58 encoding/decoding // Originally written by Mike Hearn for BitcoinJ // Copyright (c) 2011 Google Inc @@ -14667,7 +15156,7 @@ module.exports = { decode: decode } -},{}],55:[function(require,module,exports){ +},{}],57:[function(require,module,exports){ module.exports = function(cmp,to){ @@ -14685,7 +15174,7 @@ module.exports = function(cmp,to){ } -},{}],56:[function(require,module,exports){ +},{}],58:[function(require,module,exports){ 'use strict'; var elliptic = exports; @@ -14700,7 +15189,7 @@ elliptic.curves = require('./elliptic/curves'); // Protocols elliptic.ec = require('./elliptic/ec'); -},{"../package.json":76,"./elliptic/curve":59,"./elliptic/curves":62,"./elliptic/ec":63,"./elliptic/hmac-drbg":66,"./elliptic/utils":68,"brorand":69}],57:[function(require,module,exports){ +},{"../package.json":78,"./elliptic/curve":61,"./elliptic/curves":64,"./elliptic/ec":65,"./elliptic/hmac-drbg":68,"./elliptic/utils":70,"brorand":71}],59:[function(require,module,exports){ 'use strict'; var bn = require('bn.js'); @@ -15005,7 +15494,7 @@ BasePoint.prototype.dblp = function dblp(k) { return r; }; -},{"../../elliptic":56,"bn.js":53}],58:[function(require,module,exports){ +},{"../../elliptic":58,"bn.js":55}],60:[function(require,module,exports){ 'use strict'; var curve = require('../curve'); @@ -15378,7 +15867,7 @@ Point.prototype.getY = function getY() { Point.prototype.toP = Point.prototype.normalize; Point.prototype.mixedAdd = Point.prototype.add; -},{"../../elliptic":56,"../curve":59,"bn.js":53,"inherits":77}],59:[function(require,module,exports){ +},{"../../elliptic":58,"../curve":61,"bn.js":55,"inherits":79}],61:[function(require,module,exports){ 'use strict'; var curve = exports; @@ -15388,7 +15877,7 @@ curve.short = require('./short'); curve.mont = require('./mont'); curve.edwards = require('./edwards'); -},{"./base":57,"./edwards":58,"./mont":60,"./short":61}],60:[function(require,module,exports){ +},{"./base":59,"./edwards":60,"./mont":62,"./short":63}],62:[function(require,module,exports){ 'use strict'; var curve = require('../curve'); @@ -15551,7 +16040,7 @@ Point.prototype.getX = function getX() { return this.x.fromRed(); }; -},{"../curve":59,"bn.js":53,"inherits":77}],61:[function(require,module,exports){ +},{"../curve":61,"bn.js":55,"inherits":79}],63:[function(require,module,exports){ 'use strict'; var curve = require('../curve'); @@ -16460,7 +16949,7 @@ JPoint.prototype.isInfinity = function isInfinity() { return this.z.cmpn(0) === 0; }; -},{"../../elliptic":56,"../curve":59,"bn.js":53,"inherits":77}],62:[function(require,module,exports){ +},{"../../elliptic":58,"../curve":61,"bn.js":55,"inherits":79}],64:[function(require,module,exports){ 'use strict'; var curves = exports; @@ -16619,7 +17108,7 @@ defineCurve('secp256k1', { ] }); -},{"../elliptic":56,"./precomputed/secp256k1":67,"hash.js":70}],63:[function(require,module,exports){ +},{"../elliptic":58,"./precomputed/secp256k1":69,"hash.js":72}],65:[function(require,module,exports){ 'use strict'; var bn = require('bn.js'); @@ -16787,7 +17276,7 @@ EC.prototype.verify = function verify(msg, signature, key, enc) { return p.getX().mod(this.n).cmp(r) === 0; }; -},{"../../elliptic":56,"./key":64,"./signature":65,"bn.js":53}],64:[function(require,module,exports){ +},{"../../elliptic":58,"./key":66,"./signature":67,"bn.js":55}],66:[function(require,module,exports){ 'use strict'; var bn = require('bn.js'); @@ -16939,7 +17428,7 @@ KeyPair.prototype.inspect = function inspect() { ' pub: ' + (this.pub && this.pub.inspect()) + ' >'; }; -},{"../../elliptic":56,"bn.js":53}],65:[function(require,module,exports){ +},{"../../elliptic":58,"bn.js":55}],67:[function(require,module,exports){ 'use strict'; var bn = require('bn.js'); @@ -17006,7 +17495,7 @@ Signature.prototype.toDER = function toDER(enc) { return utils.encode(res, enc); }; -},{"../../elliptic":56,"bn.js":53}],66:[function(require,module,exports){ +},{"../../elliptic":58,"bn.js":55}],68:[function(require,module,exports){ 'use strict'; var hash = require('hash.js'); @@ -17122,7 +17611,7 @@ HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { return utils.encode(res, enc); }; -},{"../elliptic":56,"hash.js":70}],67:[function(require,module,exports){ +},{"../elliptic":58,"hash.js":72}],69:[function(require,module,exports){ module.exports = { doubles: { step: 4, @@ -17904,7 +18393,7 @@ module.exports = { } }; -},{}],68:[function(require,module,exports){ +},{}],70:[function(require,module,exports){ 'use strict'; var utils = exports; @@ -18056,7 +18545,7 @@ function getJSF(k1, k2) { } utils.getJSF = getJSF; -},{}],69:[function(require,module,exports){ +},{}],71:[function(require,module,exports){ var r; module.exports = function rand(len) { @@ -18115,7 +18604,7 @@ if (typeof window === 'object') { } } -},{}],70:[function(require,module,exports){ +},{}],72:[function(require,module,exports){ var hash = exports; hash.utils = require('./hash/utils'); @@ -18132,7 +18621,7 @@ hash.sha384 = hash.sha.sha384; hash.sha512 = hash.sha.sha512; hash.ripemd160 = hash.ripemd.ripemd160; -},{"./hash/common":71,"./hash/hmac":72,"./hash/ripemd":73,"./hash/sha":74,"./hash/utils":75}],71:[function(require,module,exports){ +},{"./hash/common":73,"./hash/hmac":74,"./hash/ripemd":75,"./hash/sha":76,"./hash/utils":77}],73:[function(require,module,exports){ var hash = require('../hash'); var utils = hash.utils; var assert = utils.assert; @@ -18225,7 +18714,7 @@ BlockHash.prototype._pad = function pad() { return res; }; -},{"../hash":70}],72:[function(require,module,exports){ +},{"../hash":72}],74:[function(require,module,exports){ var hmac = exports; var hash = require('../hash'); @@ -18275,7 +18764,7 @@ Hmac.prototype.digest = function digest(enc) { return this.outer.digest(enc); }; -},{"../hash":70}],73:[function(require,module,exports){ +},{"../hash":72}],75:[function(require,module,exports){ var hash = require('../hash'); var utils = hash.utils; @@ -18421,7 +18910,7 @@ var sh = [ 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]; -},{"../hash":70}],74:[function(require,module,exports){ +},{"../hash":72}],76:[function(require,module,exports){ var hash = require('../hash'); var utils = hash.utils; var assert = utils.assert; @@ -18987,7 +19476,7 @@ function g1_512_lo(xh, xl) { return r; } -},{"../hash":70}],75:[function(require,module,exports){ +},{"../hash":72}],77:[function(require,module,exports){ var utils = exports; var inherits = require('inherits'); @@ -19246,34 +19735,51 @@ function shr64_lo(ah, al, num) { }; exports.shr64_lo = shr64_lo; -},{"inherits":77}],76:[function(require,module,exports){ +},{"inherits":79}],78:[function(require,module,exports){ module.exports={ - "name": "elliptic", - "version": "3.0.3", - "description": "EC cryptography", - "main": "lib/elliptic.js", - "scripts": { - "test": "make lint && mocha --reporter=spec test/*-test.js" + "_args": [ + [ + "elliptic@https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz", + "/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/bitcore-lib" + ] + ], + "_from": "elliptic@=3.0.3", + "_id": "elliptic@3.0.3", + "_inCache": true, + "_location": "/bitcore-lib/elliptic", + "_phantomChildren": { + "inherits": "2.0.1" }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/elliptic.git" + "_requested": { + "name": "elliptic", + "raw": "elliptic@https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz", + "rawSpec": "https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz", + "scope": null, + "spec": "https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz", + "type": "remote" }, - "keywords": [ - "EC", - "Elliptic", - "curve", - "Cryptography" + "_requiredBy": [ + "/bitcore-lib" ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz", + "_shasum": "865c9b420bfbe55006b9f969f97a0d2c44966595", + "_shrinkwrap": null, + "_spec": "elliptic@https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz", + "_where": "/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/bitcore-lib", "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" + "email": "fedor@indutny.com", + "name": "Fedor Indutny" }, - "license": "MIT", "bugs": { "url": "https://github.com/indutny/elliptic/issues" }, - "homepage": "https://github.com/indutny/elliptic", + "dependencies": { + "bn.js": "^2.0.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" + }, + "description": "EC cryptography", "devDependencies": { "browserify": "^3.44.2", "jscs": "^1.11.3", @@ -19281,21 +19787,30 @@ module.exports={ "mocha": "^2.1.0", "uglify-js": "^2.4.13" }, - "dependencies": { - "bn.js": "^2.0.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - }, + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "Cryptography", + "EC", + "Elliptic", + "curve" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "name": "elliptic", + "optionalDependencies": {}, "readme": "# Elliptic [![Build Status](https://secure.travis-ci.org/indutny/elliptic.png)](http://travis-ci.org/indutny/elliptic)\n\nFast elliptic-curve cryptography in a plain javascript implementation.\n\nNOTE: Please take a look at http://safecurves.cr.yp.to/ before choosing a curve\nfor your cryptography operations.\n\n## Incentive\n\nECC is much slower than regular RSA cryptography, the JS implementations are\neven more slower.\n\n## Benchmarks\n\n```bash\n$ node benchmarks/index.js\nBenchmarking: sign\nelliptic#sign x 262 ops/sec ±0.51% (177 runs sampled)\neccjs#sign x 55.91 ops/sec ±0.90% (144 runs sampled)\n------------------------\nFastest is elliptic#sign\n========================\nBenchmarking: verify\nelliptic#verify x 113 ops/sec ±0.50% (166 runs sampled)\neccjs#verify x 48.56 ops/sec ±0.36% (125 runs sampled)\n------------------------\nFastest is elliptic#verify\n========================\nBenchmarking: gen\nelliptic#gen x 294 ops/sec ±0.43% (176 runs sampled)\neccjs#gen x 62.25 ops/sec ±0.63% (129 runs sampled)\n------------------------\nFastest is elliptic#gen\n========================\nBenchmarking: ecdh\nelliptic#ecdh x 136 ops/sec ±0.85% (156 runs sampled)\n------------------------\nFastest is elliptic#ecdh\n========================\n```\n\n## API\n\n### ECDSA\n\n```javascript\nvar EC = require('elliptic').ec;\n\n// Create and initialize EC context\n// (better do it once and reuse it)\nvar ec = new EC('secp256k1');\n\n// Generate keys\nvar key = ec.genKeyPair();\n\n// Sign message (must be an array, or it'll be treated as a hex sequence)\nvar msg = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];\nvar signature = key.sign(msg);\n\n// Export DER encoded signature in Array\nvar derSign = signature.toDER();\n\n// Verify signature\nconsole.log(key.verify(msg, derSign));\n```\n\n### ECDH\n\n```javascript\n// Generate keys\nvar key1 = ec.genKeyPair();\nvar key2 = ec.genKeyPair();\n\nvar shared1 = key1.derive(key2.getPublic());\nvar shared2 = key2.derive(key1.getPublic());\n\nconsole.log('Both shared secrets are BN instances');\nconsole.log(shared1.toString(16));\nconsole.log(shared2.toString(16));\n```\n\nNOTE: `.derive()` returns a [BN][1] instance.\n\n## Supported curves\n\nElliptic.js support following curve types:\n\n* Short Weierstrass\n* Montgomery\n* Edwards\n* Twisted Edwards\n\nFollowing curve 'presets' are embedded into the library:\n\n* `secp256k1`\n* `p192`\n* `p224`\n* `p256`\n* `curve25519`\n* `ed25519`\n\nNOTE: That `curve25519` could not be used for ECDSA, use `ed25519` instead.\n\n### Implementation details\n\nECDSA is using deterministic `k` value generation as per [RFC6979][0]. Most of\nthe curve operations are performed on non-affine coordinates (either projective\nor extended), various windowing techniques are used for different cases.\n\nAll operations are performed in reduction context using [bn.js][1], hashing is\nprovided by [hash.js][2]\n\n### Related projects\n\n* [eccrypto][3]: isomorphic implementation of ECDSA, ECDH and ECIES for both\n browserify and node (uses `elliptic` for browser and [secp256k1-node][4] for\n node)\n\n#### LICENSE\n\nThis software is licensed under the MIT License.\n\nCopyright Fedor Indutny, 2014.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n\n[0]: http://tools.ietf.org/html/rfc6979\n[1]: https://github.com/indutny/bn.js\n[2]: https://github.com/indutny/hash.js\n[3]: https://github.com/bitchan/eccrypto\n[4]: https://github.com/wanderer/secp256k1-node\n", "readmeFilename": "README.md", - "_id": "elliptic@3.0.3", - "_shasum": "865c9b420bfbe55006b9f969f97a0d2c44966595", - "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz", - "_from": "https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz" + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" + }, + "scripts": { + "test": "make lint && mocha --reporter=spec test/*-test.js" + }, + "version": "3.0.3" } -},{}],77:[function(require,module,exports){ +},{}],79:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { @@ -19320,7 +19835,7 @@ if (typeof Object.create === 'function') { } } -},{}],78:[function(require,module,exports){ +},{}],80:[function(require,module,exports){ (function (global){ /** * @license @@ -31675,7 +32190,7 @@ if (typeof Object.create === 'function') { }.call(this)); }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],79:[function(require,module,exports){ +},{}],81:[function(require,module,exports){ (function (Buffer){ var WordArray = require('./word-array') @@ -31987,7 +32502,7 @@ module.exports.Hasher = Hasher }).call(this,require("buffer").Buffer) -},{"./word-array":83,"buffer":99}],80:[function(require,module,exports){ +},{"./word-array":85,"buffer":147}],82:[function(require,module,exports){ (function (Buffer){ var sha512 = require('./sha512').sha512 var WordArray = require('./word-array') @@ -32083,10 +32598,10 @@ HMAC.prototype.finalize = function (messageUpdate) { module.exports = HMAC }).call(this,require("buffer").Buffer) -},{"./sha512":82,"./word-array":83,"buffer":99}],81:[function(require,module,exports){ +},{"./sha512":84,"./word-array":85,"buffer":147}],83:[function(require,module,exports){ module.exports = require('./sha512') module.exports.hmac = require('./hmac') -},{"./hmac":80,"./sha512":82}],82:[function(require,module,exports){ +},{"./hmac":82,"./sha512":84}],84:[function(require,module,exports){ var Hasher = require('./cryptojs').Hasher @@ -32329,7 +32844,7 @@ module.exports = Hasher._createHelper(SHA512); module.exports.sha512 = SHA512 -},{"./cryptojs":79,"./x64":84}],83:[function(require,module,exports){ +},{"./cryptojs":81,"./x64":86}],85:[function(require,module,exports){ (function (process,Buffer){ module.exports = WordArray @@ -32448,7 +32963,7 @@ WordArray.fromBuffer = function(buf) { }).call(this,require('_process'),require("buffer").Buffer) -},{"_process":299,"buffer":99}],84:[function(require,module,exports){ +},{"_process":235,"buffer":147}],86:[function(require,module,exports){ var X32WordArray = require('./word-array') @@ -32486,30 +33001,117 @@ module.exports.Word = X64Word module.exports.WordArray = X64WordArray -},{"./word-array":83}],85:[function(require,module,exports){ +},{"./word-array":85}],87:[function(require,module,exports){ module.exports={ - "name": "bitcore-lib", - "version": "0.13.13", - "description": "A pure and powerful JavaScript Bitcoin library.", + "_args": [ + [ + "bitcore-lib@^0.13.7", + "/Users/pelleb/code/clients/consensys/eth-lightwallet" + ] + ], + "_from": "bitcore-lib@>=0.13.7 <0.14.0", + "_id": "bitcore-lib@0.13.13", + "_inCache": true, + "_installable": true, + "_location": "/bitcore-lib", + "_nodeVersion": "4.2.1", + "_npmOperationalInternal": { + "host": "packages-5-east.internal.npmjs.com", + "tmp": "tmp/bitcore-lib-0.13.13.tgz_1454685054368_0.7489039490465075" + }, + "_npmUser": { + "email": "braydon@bitpay.com", + "name": "braydonf" + }, + "_npmVersion": "2.14.7", + "_phantomChildren": {}, + "_requested": { + "name": "bitcore-lib", + "raw": "bitcore-lib@^0.13.7", + "rawSpec": "^0.13.7", + "scope": null, + "spec": ">=0.13.7 <0.14.0", + "type": "range" + }, + "_requiredBy": [ + "/", + "/bitcore-mnemonic" + ], + "_resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.13.13.tgz", + "_shasum": "fa63f4e3b1b52ab706815799da77936231354c9d", + "_shrinkwrap": { + "dependencies": { + "bn.js": { + "from": "bn.js@=2.0.4", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-2.0.4.tgz", + "version": "2.0.4" + }, + "bs58": { + "from": "bs58@=2.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-2.0.0.tgz", + "version": "2.0.0" + }, + "buffer-compare": { + "from": "buffer-compare@=1.0.0", + "resolved": "https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.0.0.tgz", + "version": "1.0.0" + }, + "elliptic": { + "dependencies": { + "brorand": { + "from": "brorand@^1.0.1", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.0.5.tgz", + "version": "1.0.5" + }, + "hash.js": { + "from": "hash.js@=1.0.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.0.3.tgz", + "version": "1.0.3" + } + }, + "from": "elliptic@=3.0.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz", + "version": "3.0.3" + }, + "inherits": { + "from": "inherits@=2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "version": "2.0.1" + }, + "lodash": { + "from": "lodash@=3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "version": "3.10.1" + }, + "sha512": { + "from": "sha512@=0.0.1", + "resolved": "https://registry.npmjs.org/sha512/-/sha512-0.0.1.tgz", + "version": "0.0.1" + } + }, + "name": "bitcore", + "version": "0.13.12" + }, + "_spec": "bitcore-lib@^0.13.7", + "_where": "/Users/pelleb/code/clients/consensys/eth-lightwallet", "author": { - "name": "BitPay", - "email": "dev@bitpay.com" + "email": "dev@bitpay.com", + "name": "BitPay" }, - "main": "index.js", - "scripts": { - "lint": "gulp lint", - "test": "gulp test", - "coverage": "gulp coverage", - "build": "gulp" + "browser": { + "request": "browser-request" + }, + "bugs": { + "url": "https://github.com/bitpay/bitcore-lib/issues" }, "contributors": [ { - "name": "Daniel Cousens", - "email": "bitcoin@dcousens.com" + "name": "Manuel Araoz", + "email": "manuelaraoz@gmail.com" }, { - "name": "Esteban Ordano", - "email": "eordano@gmail.com" + "name": "Daniel Cousens", + "email": "bitcoin@dcousens.com" }, { "name": "Gordon Hall", @@ -32524,8 +33126,8 @@ module.exports={ "email": "kyle@kyledrake.net" }, { - "name": "Manuel Araoz", - "email": "manuelaraoz@gmail.com" + "name": "Esteban Ordano", + "email": "eordano@gmail.com" }, { "name": "Matias Alejo Garcia", @@ -32548,29 +33150,6 @@ module.exports={ "email": "luwei.here@gmail.com" } ], - "keywords": [ - "bitcoin", - "transaction", - "address", - "p2p", - "ecies", - "cryptocurrency", - "blockchain", - "payment", - "bip21", - "bip32", - "bip37", - "bip69", - "bip70", - "multisig" - ], - "repository": { - "type": "git", - "url": "git+https://github.com/bitpay/bitcore-lib.git" - }, - "browser": { - "request": "browser-request" - }, "dependencies": { "bn.js": "=2.0.4", "bs58": "=2.0.0", @@ -32580,6 +33159,7 @@ module.exports={ "lodash": "=3.10.1", "sha512": "=0.0.1" }, + "description": "A pure and powerful JavaScript Bitcoin library.", "devDependencies": { "bitcore-build": "github:bitpay/bitcore-build", "brfs": "^1.2.0", @@ -32587,21 +33167,31 @@ module.exports={ "gulp": "^3.8.10", "sinon": "^1.13.0" }, - "license": "MIT", - "gitHead": "00b693d658cd1a8d9c4f68b0e587b60b298b79cb", - "bugs": { - "url": "https://github.com/bitpay/bitcore-lib/issues" + "directories": {}, + "dist": { + "shasum": "fa63f4e3b1b52ab706815799da77936231354c9d", + "tarball": "http://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.13.13.tgz" }, + "gitHead": "00b693d658cd1a8d9c4f68b0e587b60b298b79cb", "homepage": "https://github.com/bitpay/bitcore-lib#readme", - "_id": "bitcore-lib@0.13.13", - "_shasum": "fa63f4e3b1b52ab706815799da77936231354c9d", - "_from": "bitcore-lib@>=0.13.13 <0.14.0", - "_npmVersion": "2.14.7", - "_nodeVersion": "4.2.1", - "_npmUser": { - "name": "braydonf", - "email": "braydon@bitpay.com" - }, + "keywords": [ + "address", + "bip21", + "bip32", + "bip37", + "bip69", + "bip70", + "bitcoin", + "blockchain", + "cryptocurrency", + "ecies", + "multisig", + "p2p", + "payment", + "transaction" + ], + "license": "MIT", + "main": "index.js", "maintainers": [ { "name": "braydonf", @@ -32620,23 +33210,26 @@ module.exports={ "email": "patrick@bitpay.com" } ], - "dist": { - "shasum": "fa63f4e3b1b52ab706815799da77936231354c9d", - "tarball": "http://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.13.13.tgz" + "name": "bitcore-lib", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+https://github.com/bitpay/bitcore-lib.git" }, - "_npmOperationalInternal": { - "host": "packages-5-east.internal.npmjs.com", - "tmp": "tmp/bitcore-lib-0.13.13.tgz_1454685054368_0.7489039490465075" + "scripts": { + "build": "gulp", + "coverage": "gulp coverage", + "lint": "gulp lint", + "test": "gulp test" }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.13.13.tgz", - "readme": "ERROR: No README data found!" + "version": "0.13.13" } -},{}],86:[function(require,module,exports){ +},{}],88:[function(require,module,exports){ module.exports = require('./lib/mnemonic'); -},{"./lib/mnemonic":88}],87:[function(require,module,exports){ +},{"./lib/mnemonic":90}],89:[function(require,module,exports){ 'use strict'; var spec = { @@ -32656,7 +33249,7 @@ var spec = { module.exports = require('bitcore-lib').errors.extend(spec); -},{"bitcore-lib":7}],88:[function(require,module,exports){ +},{"bitcore-lib":9}],90:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -32955,7 +33548,7 @@ Mnemonic._entropyChecksum = function(entropy) { module.exports = Mnemonic; }).call(this,require("buffer").Buffer) -},{"./errors":87,"./pbkdf2":89,"./words":93,"bitcore-lib":7,"buffer":99,"unorm":96}],89:[function(require,module,exports){ +},{"./errors":89,"./pbkdf2":91,"./words":95,"bitcore-lib":9,"buffer":147,"unorm":294}],91:[function(require,module,exports){ (function (Buffer){ 'use strict'; @@ -33030,25 +33623,25 @@ function pbkdf2(key, salt, iterations, dkLen) { module.exports = pbkdf2; }).call(this,require("buffer").Buffer) -},{"buffer":99,"crypto":103}],90:[function(require,module,exports){ +},{"buffer":147,"crypto":174}],92:[function(require,module,exports){ 'use strict'; var chinese = ['的', '一', '是', '在', '不', '了', '有', '和', '人', '这', '中', '大', '为', '上', '个', '国', '我', '以', '要', '他', '时', '来', '用', '们', '生', '到', '作', '地', '于', '出', '就', '分', '对', '成', '会', '可', '主', '发', '年', '动', '同', '工', '也', '能', '下', '过', '子', '说', '产', '种', '面', '而', '方', '后', '多', '定', '行', '学', '法', '所', '民', '得', '经', '十', '三', '之', '进', '着', '等', '部', '度', '家', '电', '力', '里', '如', '水', '化', '高', '自', '二', '理', '起', '小', '物', '现', '实', '加', '量', '都', '两', '体', '制', '机', '当', '使', '点', '从', '业', '本', '去', '把', '性', '好', '应', '开', '它', '合', '还', '因', '由', '其', '些', '然', '前', '外', '天', '政', '四', '日', '那', '社', '义', '事', '平', '形', '相', '全', '表', '间', '样', '与', '关', '各', '重', '新', '线', '内', '数', '正', '心', '反', '你', '明', '看', '原', '又', '么', '利', '比', '或', '但', '质', '气', '第', '向', '道', '命', '此', '变', '条', '只', '没', '结', '解', '问', '意', '建', '月', '公', '无', '系', '军', '很', '情', '者', '最', '立', '代', '想', '已', '通', '并', '提', '直', '题', '党', '程', '展', '五', '果', '料', '象', '员', '革', '位', '入', '常', '文', '总', '次', '品', '式', '活', '设', '及', '管', '特', '件', '长', '求', '老', '头', '基', '资', '边', '流', '路', '级', '少', '图', '山', '统', '接', '知', '较', '将', '组', '见', '计', '别', '她', '手', '角', '期', '根', '论', '运', '农', '指', '几', '九', '区', '强', '放', '决', '西', '被', '干', '做', '必', '战', '先', '回', '则', '任', '取', '据', '处', '队', '南', '给', '色', '光', '门', '即', '保', '治', '北', '造', '百', '规', '热', '领', '七', '海', '口', '东', '导', '器', '压', '志', '世', '金', '增', '争', '济', '阶', '油', '思', '术', '极', '交', '受', '联', '什', '认', '六', '共', '权', '收', '证', '改', '清', '美', '再', '采', '转', '更', '单', '风', '切', '打', '白', '教', '速', '花', '带', '安', '场', '身', '车', '例', '真', '务', '具', '万', '每', '目', '至', '达', '走', '积', '示', '议', '声', '报', '斗', '完', '类', '八', '离', '华', '名', '确', '才', '科', '张', '信', '马', '节', '话', '米', '整', '空', '元', '况', '今', '集', '温', '传', '土', '许', '步', '群', '广', '石', '记', '需', '段', '研', '界', '拉', '林', '律', '叫', '且', '究', '观', '越', '织', '装', '影', '算', '低', '持', '音', '众', '书', '布', '复', '容', '儿', '须', '际', '商', '非', '验', '连', '断', '深', '难', '近', '矿', '千', '周', '委', '素', '技', '备', '半', '办', '青', '省', '列', '习', '响', '约', '支', '般', '史', '感', '劳', '便', '团', '往', '酸', '历', '市', '克', '何', '除', '消', '构', '府', '称', '太', '准', '精', '值', '号', '率', '族', '维', '划', '选', '标', '写', '存', '候', '毛', '亲', '快', '效', '斯', '院', '查', '江', '型', '眼', '王', '按', '格', '养', '易', '置', '派', '层', '片', '始', '却', '专', '状', '育', '厂', '京', '识', '适', '属', '圆', '包', '火', '住', '调', '满', '县', '局', '照', '参', '红', '细', '引', '听', '该', '铁', '价', '严', '首', '底', '液', '官', '德', '随', '病', '苏', '失', '尔', '死', '讲', '配', '女', '黄', '推', '显', '谈', '罪', '神', '艺', '呢', '席', '含', '企', '望', '密', '批', '营', '项', '防', '举', '球', '英', '氧', '势', '告', '李', '台', '落', '木', '帮', '轮', '破', '亚', '师', '围', '注', '远', '字', '材', '排', '供', '河', '态', '封', '另', '施', '减', '树', '溶', '怎', '止', '案', '言', '士', '均', '武', '固', '叶', '鱼', '波', '视', '仅', '费', '紧', '爱', '左', '章', '早', '朝', '害', '续', '轻', '服', '试', '食', '充', '兵', '源', '判', '护', '司', '足', '某', '练', '差', '致', '板', '田', '降', '黑', '犯', '负', '击', '范', '继', '兴', '似', '余', '坚', '曲', '输', '修', '故', '城', '夫', '够', '送', '笔', '船', '占', '右', '财', '吃', '富', '春', '职', '觉', '汉', '画', '功', '巴', '跟', '虽', '杂', '飞', '检', '吸', '助', '升', '阳', '互', '初', '创', '抗', '考', '投', '坏', '策', '古', '径', '换', '未', '跑', '留', '钢', '曾', '端', '责', '站', '简', '述', '钱', '副', '尽', '帝', '射', '草', '冲', '承', '独', '令', '限', '阿', '宣', '环', '双', '请', '超', '微', '让', '控', '州', '良', '轴', '找', '否', '纪', '益', '依', '优', '顶', '础', '载', '倒', '房', '突', '坐', '粉', '敌', '略', '客', '袁', '冷', '胜', '绝', '析', '块', '剂', '测', '丝', '协', '诉', '念', '陈', '仍', '罗', '盐', '友', '洋', '错', '苦', '夜', '刑', '移', '频', '逐', '靠', '混', '母', '短', '皮', '终', '聚', '汽', '村', '云', '哪', '既', '距', '卫', '停', '烈', '央', '察', '烧', '迅', '境', '若', '印', '洲', '刻', '括', '激', '孔', '搞', '甚', '室', '待', '核', '校', '散', '侵', '吧', '甲', '游', '久', '菜', '味', '旧', '模', '湖', '货', '损', '预', '阻', '毫', '普', '稳', '乙', '妈', '植', '息', '扩', '银', '语', '挥', '酒', '守', '拿', '序', '纸', '医', '缺', '雨', '吗', '针', '刘', '啊', '急', '唱', '误', '训', '愿', '审', '附', '获', '茶', '鲜', '粮', '斤', '孩', '脱', '硫', '肥', '善', '龙', '演', '父', '渐', '血', '欢', '械', '掌', '歌', '沙', '刚', '攻', '谓', '盾', '讨', '晚', '粒', '乱', '燃', '矛', '乎', '杀', '药', '宁', '鲁', '贵', '钟', '煤', '读', '班', '伯', '香', '介', '迫', '句', '丰', '培', '握', '兰', '担', '弦', '蛋', '沉', '假', '穿', '执', '答', '乐', '谁', '顺', '烟', '缩', '征', '脸', '喜', '松', '脚', '困', '异', '免', '背', '星', '福', '买', '染', '井', '概', '慢', '怕', '磁', '倍', '祖', '皇', '促', '静', '补', '评', '翻', '肉', '践', '尼', '衣', '宽', '扬', '棉', '希', '伤', '操', '垂', '秋', '宜', '氢', '套', '督', '振', '架', '亮', '末', '宪', '庆', '编', '牛', '触', '映', '雷', '销', '诗', '座', '居', '抓', '裂', '胞', '呼', '娘', '景', '威', '绿', '晶', '厚', '盟', '衡', '鸡', '孙', '延', '危', '胶', '屋', '乡', '临', '陆', '顾', '掉', '呀', '灯', '岁', '措', '束', '耐', '剧', '玉', '赵', '跳', '哥', '季', '课', '凯', '胡', '额', '款', '绍', '卷', '齐', '伟', '蒸', '殖', '永', '宗', '苗', '川', '炉', '岩', '弱', '零', '杨', '奏', '沿', '露', '杆', '探', '滑', '镇', '饭', '浓', '航', '怀', '赶', '库', '夺', '伊', '灵', '税', '途', '灭', '赛', '归', '召', '鼓', '播', '盘', '裁', '险', '康', '唯', '录', '菌', '纯', '借', '糖', '盖', '横', '符', '私', '努', '堂', '域', '枪', '润', '幅', '哈', '竟', '熟', '虫', '泽', '脑', '壤', '碳', '欧', '遍', '侧', '寨', '敢', '彻', '虑', '斜', '薄', '庭', '纳', '弹', '饲', '伸', '折', '麦', '湿', '暗', '荷', '瓦', '塞', '床', '筑', '恶', '户', '访', '塔', '奇', '透', '梁', '刀', '旋', '迹', '卡', '氯', '遇', '份', '毒', '泥', '退', '洗', '摆', '灰', '彩', '卖', '耗', '夏', '择', '忙', '铜', '献', '硬', '予', '繁', '圈', '雪', '函', '亦', '抽', '篇', '阵', '阴', '丁', '尺', '追', '堆', '雄', '迎', '泛', '爸', '楼', '避', '谋', '吨', '野', '猪', '旗', '累', '偏', '典', '馆', '索', '秦', '脂', '潮', '爷', '豆', '忽', '托', '惊', '塑', '遗', '愈', '朱', '替', '纤', '粗', '倾', '尚', '痛', '楚', '谢', '奋', '购', '磨', '君', '池', '旁', '碎', '骨', '监', '捕', '弟', '暴', '割', '贯', '殊', '释', '词', '亡', '壁', '顿', '宝', '午', '尘', '闻', '揭', '炮', '残', '冬', '桥', '妇', '警', '综', '招', '吴', '付', '浮', '遭', '徐', '您', '摇', '谷', '赞', '箱', '隔', '订', '男', '吹', '园', '纷', '唐', '败', '宋', '玻', '巨', '耕', '坦', '荣', '闭', '湾', '键', '凡', '驻', '锅', '救', '恩', '剥', '凝', '碱', '齿', '截', '炼', '麻', '纺', '禁', '废', '盛', '版', '缓', '净', '睛', '昌', '婚', '涉', '筒', '嘴', '插', '岸', '朗', '庄', '街', '藏', '姑', '贸', '腐', '奴', '啦', '惯', '乘', '伙', '恢', '匀', '纱', '扎', '辩', '耳', '彪', '臣', '亿', '璃', '抵', '脉', '秀', '萨', '俄', '网', '舞', '店', '喷', '纵', '寸', '汗', '挂', '洪', '贺', '闪', '柬', '爆', '烯', '津', '稻', '墙', '软', '勇', '像', '滚', '厘', '蒙', '芳', '肯', '坡', '柱', '荡', '腿', '仪', '旅', '尾', '轧', '冰', '贡', '登', '黎', '削', '钻', '勒', '逃', '障', '氨', '郭', '峰', '币', '港', '伏', '轨', '亩', '毕', '擦', '莫', '刺', '浪', '秘', '援', '株', '健', '售', '股', '岛', '甘', '泡', '睡', '童', '铸', '汤', '阀', '休', '汇', '舍', '牧', '绕', '炸', '哲', '磷', '绩', '朋', '淡', '尖', '启', '陷', '柴', '呈', '徒', '颜', '泪', '稍', '忘', '泵', '蓝', '拖', '洞', '授', '镜', '辛', '壮', '锋', '贫', '虚', '弯', '摩', '泰', '幼', '廷', '尊', '窗', '纲', '弄', '隶', '疑', '氏', '宫', '姐', '震', '瑞', '怪', '尤', '琴', '循', '描', '膜', '违', '夹', '腰', '缘', '珠', '穷', '森', '枝', '竹', '沟', '催', '绳', '忆', '邦', '剩', '幸', '浆', '栏', '拥', '牙', '贮', '礼', '滤', '钠', '纹', '罢', '拍', '咱', '喊', '袖', '埃', '勤', '罚', '焦', '潜', '伍', '墨', '欲', '缝', '姓', '刊', '饱', '仿', '奖', '铝', '鬼', '丽', '跨', '默', '挖', '链', '扫', '喝', '袋', '炭', '污', '幕', '诸', '弧', '励', '梅', '奶', '洁', '灾', '舟', '鉴', '苯', '讼', '抱', '毁', '懂', '寒', '智', '埔', '寄', '届', '跃', '渡', '挑', '丹', '艰', '贝', '碰', '拔', '爹', '戴', '码', '梦', '芽', '熔', '赤', '渔', '哭', '敬', '颗', '奔', '铅', '仲', '虎', '稀', '妹', '乏', '珍', '申', '桌', '遵', '允', '隆', '螺', '仓', '魏', '锐', '晓', '氮', '兼', '隐', '碍', '赫', '拨', '忠', '肃', '缸', '牵', '抢', '博', '巧', '壳', '兄', '杜', '讯', '诚', '碧', '祥', '柯', '页', '巡', '矩', '悲', '灌', '龄', '伦', '票', '寻', '桂', '铺', '圣', '恐', '恰', '郑', '趣', '抬', '荒', '腾', '贴', '柔', '滴', '猛', '阔', '辆', '妻', '填', '撤', '储', '签', '闹', '扰', '紫', '砂', '递', '戏', '吊', '陶', '伐', '喂', '疗', '瓶', '婆', '抚', '臂', '摸', '忍', '虾', '蜡', '邻', '胸', '巩', '挤', '偶', '弃', '槽', '劲', '乳', '邓', '吉', '仁', '烂', '砖', '租', '乌', '舰', '伴', '瓜', '浅', '丙', '暂', '燥', '橡', '柳', '迷', '暖', '牌', '秧', '胆', '详', '簧', '踏', '瓷', '谱', '呆', '宾', '糊', '洛', '辉', '愤', '竞', '隙', '怒', '粘', '乃', '绪', '肩', '籍', '敏', '涂', '熙', '皆', '侦', '悬', '掘', '享', '纠', '醒', '狂', '锁', '淀', '恨', '牲', '霸', '爬', '赏', '逆', '玩', '陵', '祝', '秒', '浙', '貌', '役', '彼', '悉', '鸭', '趋', '凤', '晨', '畜', '辈', '秩', '卵', '署', '梯', '炎', '滩', '棋', '驱', '筛', '峡', '冒', '啥', '寿', '译', '浸', '泉', '帽', '迟', '硅', '疆', '贷', '漏', '稿', '冠', '嫩', '胁', '芯', '牢', '叛', '蚀', '奥', '鸣', '岭', '羊', '凭', '串', '塘', '绘', '酵', '融', '盆', '锡', '庙', '筹', '冻', '辅', '摄', '袭', '筋', '拒', '僚', '旱', '钾', '鸟', '漆', '沈', '眉', '疏', '添', '棒', '穗', '硝', '韩', '逼', '扭', '侨', '凉', '挺', '碗', '栽', '炒', '杯', '患', '馏', '劝', '豪', '辽', '勃', '鸿', '旦', '吏', '拜', '狗', '埋', '辊', '掩', '饮', '搬', '骂', '辞', '勾', '扣', '估', '蒋', '绒', '雾', '丈', '朵', '姆', '拟', '宇', '辑', '陕', '雕', '偿', '蓄', '崇', '剪', '倡', '厅', '咬', '驶', '薯', '刷', '斥', '番', '赋', '奉', '佛', '浇', '漫', '曼', '扇', '钙', '桃', '扶', '仔', '返', '俗', '亏', '腔', '鞋', '棱', '覆', '框', '悄', '叔', '撞', '骗', '勘', '旺', '沸', '孤', '吐', '孟', '渠', '屈', '疾', '妙', '惜', '仰', '狠', '胀', '谐', '抛', '霉', '桑', '岗', '嘛', '衰', '盗', '渗', '脏', '赖', '涌', '甜', '曹', '阅', '肌', '哩', '厉', '烃', '纬', '毅', '昨', '伪', '症', '煮', '叹', '钉', '搭', '茎', '笼', '酷', '偷', '弓', '锥', '恒', '杰', '坑', '鼻', '翼', '纶', '叙', '狱', '逮', '罐', '络', '棚', '抑', '膨', '蔬', '寺', '骤', '穆', '冶', '枯', '册', '尸', '凸', '绅', '坯', '牺', '焰', '轰', '欣', '晋', '瘦', '御', '锭', '锦', '丧', '旬', '锻', '垄', '搜', '扑', '邀', '亭', '酯', '迈', '舒', '脆', '酶', '闲', '忧', '酚', '顽', '羽', '涨', '卸', '仗', '陪', '辟', '惩', '杭', '姚', '肚', '捉', '飘', '漂', '昆', '欺', '吾', '郎', '烷', '汁', '呵', '饰', '萧', '雅', '邮', '迁', '燕', '撒', '姻', '赴', '宴', '烦', '债', '帐', '斑', '铃', '旨', '醇', '董', '饼', '雏', '姿', '拌', '傅', '腹', '妥', '揉', '贤', '拆', '歪', '葡', '胺', '丢', '浩', '徽', '昂', '垫', '挡', '览', '贪', '慰', '缴', '汪', '慌', '冯', '诺', '姜', '谊', '凶', '劣', '诬', '耀', '昏', '躺', '盈', '骑', '乔', '溪', '丛', '卢', '抹', '闷', '咨', '刮', '驾', '缆', '悟', '摘', '铒', '掷', '颇', '幻', '柄', '惠', '惨', '佳', '仇', '腊', '窝', '涤', '剑', '瞧', '堡', '泼', '葱', '罩', '霍', '捞', '胎', '苍', '滨', '俩', '捅', '湘', '砍', '霞', '邵', '萄', '疯', '淮', '遂', '熊', '粪', '烘', '宿', '档', '戈', '驳', '嫂', '裕', '徙', '箭', '捐', '肠', '撑', '晒', '辨', '殿', '莲', '摊', '搅', '酱', '屏', '疫', '哀', '蔡', '堵', '沫', '皱', '畅', '叠', '阁', '莱', '敲', '辖', '钩', '痕', '坝', '巷', '饿', '祸', '丘', '玄', '溜', '曰', '逻', '彭', '尝', '卿', '妨', '艇', '吞', '韦', '怨', '矮', '歇']; module.exports = chinese; -},{}],91:[function(require,module,exports){ +},{}],93:[function(require,module,exports){ 'use strict'; var english = ['abandon', 'ability', 'able', 'about', 'above', 'absent', 'absorb', 'abstract', 'absurd', 'abuse', 'access', 'accident', 'account', 'accuse', 'achieve', 'acid', 'acoustic', 'acquire', 'across', 'act', 'action', 'actor', 'actress', 'actual', 'adapt', 'add', 'addict', 'address', 'adjust', 'admit', 'adult', 'advance', 'advice', 'aerobic', 'affair', 'afford', 'afraid', 'again', 'age', 'agent', 'agree', 'ahead', 'aim', 'air', 'airport', 'aisle', 'alarm', 'album', 'alcohol', 'alert', 'alien', 'all', 'alley', 'allow', 'almost', 'alone', 'alpha', 'already', 'also', 'alter', 'always', 'amateur', 'amazing', 'among', 'amount', 'amused', 'analyst', 'anchor', 'ancient', 'anger', 'angle', 'angry', 'animal', 'ankle', 'announce', 'annual', 'another', 'answer', 'antenna', 'antique', 'anxiety', 'any', 'apart', 'apology', 'appear', 'apple', 'approve', 'april', 'arch', 'arctic', 'area', 'arena', 'argue', 'arm', 'armed', 'armor', 'army', 'around', 'arrange', 'arrest', 'arrive', 'arrow', 'art', 'artefact', 'artist', 'artwork', 'ask', 'aspect', 'assault', 'asset', 'assist', 'assume', 'asthma', 'athlete', 'atom', 'attack', 'attend', 'attitude', 'attract', 'auction', 'audit', 'august', 'aunt', 'author', 'auto', 'autumn', 'average', 'avocado', 'avoid', 'awake', 'aware', 'away', 'awesome', 'awful', 'awkward', 'axis', 'baby', 'bachelor', 'bacon', 'badge', 'bag', 'balance', 'balcony', 'ball', 'bamboo', 'banana', 'banner', 'bar', 'barely', 'bargain', 'barrel', 'base', 'basic', 'basket', 'battle', 'beach', 'bean', 'beauty', 'because', 'become', 'beef', 'before', 'begin', 'behave', 'behind', 'believe', 'below', 'belt', 'bench', 'benefit', 'best', 'betray', 'better', 'between', 'beyond', 'bicycle', 'bid', 'bike', 'bind', 'biology', 'bird', 'birth', 'bitter', 'black', 'blade', 'blame', 'blanket', 'blast', 'bleak', 'bless', 'blind', 'blood', 'blossom', 'blouse', 'blue', 'blur', 'blush', 'board', 'boat', 'body', 'boil', 'bomb', 'bone', 'bonus', 'book', 'boost', 'border', 'boring', 'borrow', 'boss', 'bottom', 'bounce', 'box', 'boy', 'bracket', 'brain', 'brand', 'brass', 'brave', 'bread', 'breeze', 'brick', 'bridge', 'brief', 'bright', 'bring', 'brisk', 'broccoli', 'broken', 'bronze', 'broom', 'brother', 'brown', 'brush', 'bubble', 'buddy', 'budget', 'buffalo', 'build', 'bulb', 'bulk', 'bullet', 'bundle', 'bunker', 'burden', 'burger', 'burst', 'bus', 'business', 'busy', 'butter', 'buyer', 'buzz', 'cabbage', 'cabin', 'cable', 'cactus', 'cage', 'cake', 'call', 'calm', 'camera', 'camp', 'can', 'canal', 'cancel', 'candy', 'cannon', 'canoe', 'canvas', 'canyon', 'capable', 'capital', 'captain', 'car', 'carbon', 'card', 'cargo', 'carpet', 'carry', 'cart', 'case', 'cash', 'casino', 'castle', 'casual', 'cat', 'catalog', 'catch', 'category', 'cattle', 'caught', 'cause', 'caution', 'cave', 'ceiling', 'celery', 'cement', 'census', 'century', 'cereal', 'certain', 'chair', 'chalk', 'champion', 'change', 'chaos', 'chapter', 'charge', 'chase', 'chat', 'cheap', 'check', 'cheese', 'chef', 'cherry', 'chest', 'chicken', 'chief', 'child', 'chimney', 'choice', 'choose', 'chronic', 'chuckle', 'chunk', 'churn', 'cigar', 'cinnamon', 'circle', 'citizen', 'city', 'civil', 'claim', 'clap', 'clarify', 'claw', 'clay', 'clean', 'clerk', 'clever', 'click', 'client', 'cliff', 'climb', 'clinic', 'clip', 'clock', 'clog', 'close', 'cloth', 'cloud', 'clown', 'club', 'clump', 'cluster', 'clutch', 'coach', 'coast', 'coconut', 'code', 'coffee', 'coil', 'coin', 'collect', 'color', 'column', 'combine', 'come', 'comfort', 'comic', 'common', 'company', 'concert', 'conduct', 'confirm', 'congress', 'connect', 'consider', 'control', 'convince', 'cook', 'cool', 'copper', 'copy', 'coral', 'core', 'corn', 'correct', 'cost', 'cotton', 'couch', 'country', 'couple', 'course', 'cousin', 'cover', 'coyote', 'crack', 'cradle', 'craft', 'cram', 'crane', 'crash', 'crater', 'crawl', 'crazy', 'cream', 'credit', 'creek', 'crew', 'cricket', 'crime', 'crisp', 'critic', 'crop', 'cross', 'crouch', 'crowd', 'crucial', 'cruel', 'cruise', 'crumble', 'crunch', 'crush', 'cry', 'crystal', 'cube', 'culture', 'cup', 'cupboard', 'curious', 'current', 'curtain', 'curve', 'cushion', 'custom', 'cute', 'cycle', 'dad', 'damage', 'damp', 'dance', 'danger', 'daring', 'dash', 'daughter', 'dawn', 'day', 'deal', 'debate', 'debris', 'decade', 'december', 'decide', 'decline', 'decorate', 'decrease', 'deer', 'defense', 'define', 'defy', 'degree', 'delay', 'deliver', 'demand', 'demise', 'denial', 'dentist', 'deny', 'depart', 'depend', 'deposit', 'depth', 'deputy', 'derive', 'describe', 'desert', 'design', 'desk', 'despair', 'destroy', 'detail', 'detect', 'develop', 'device', 'devote', 'diagram', 'dial', 'diamond', 'diary', 'dice', 'diesel', 'diet', 'differ', 'digital', 'dignity', 'dilemma', 'dinner', 'dinosaur', 'direct', 'dirt', 'disagree', 'discover', 'disease', 'dish', 'dismiss', 'disorder', 'display', 'distance', 'divert', 'divide', 'divorce', 'dizzy', 'doctor', 'document', 'dog', 'doll', 'dolphin', 'domain', 'donate', 'donkey', 'donor', 'door', 'dose', 'double', 'dove', 'draft', 'dragon', 'drama', 'drastic', 'draw', 'dream', 'dress', 'drift', 'drill', 'drink', 'drip', 'drive', 'drop', 'drum', 'dry', 'duck', 'dumb', 'dune', 'during', 'dust', 'dutch', 'duty', 'dwarf', 'dynamic', 'eager', 'eagle', 'early', 'earn', 'earth', 'easily', 'east', 'easy', 'echo', 'ecology', 'economy', 'edge', 'edit', 'educate', 'effort', 'egg', 'eight', 'either', 'elbow', 'elder', 'electric', 'elegant', 'element', 'elephant', 'elevator', 'elite', 'else', 'embark', 'embody', 'embrace', 'emerge', 'emotion', 'employ', 'empower', 'empty', 'enable', 'enact', 'end', 'endless', 'endorse', 'enemy', 'energy', 'enforce', 'engage', 'engine', 'enhance', 'enjoy', 'enlist', 'enough', 'enrich', 'enroll', 'ensure', 'enter', 'entire', 'entry', 'envelope', 'episode', 'equal', 'equip', 'era', 'erase', 'erode', 'erosion', 'error', 'erupt', 'escape', 'essay', 'essence', 'estate', 'eternal', 'ethics', 'evidence', 'evil', 'evoke', 'evolve', 'exact', 'example', 'excess', 'exchange', 'excite', 'exclude', 'excuse', 'execute', 'exercise', 'exhaust', 'exhibit', 'exile', 'exist', 'exit', 'exotic', 'expand', 'expect', 'expire', 'explain', 'expose', 'express', 'extend', 'extra', 'eye', 'eyebrow', 'fabric', 'face', 'faculty', 'fade', 'faint', 'faith', 'fall', 'false', 'fame', 'family', 'famous', 'fan', 'fancy', 'fantasy', 'farm', 'fashion', 'fat', 'fatal', 'father', 'fatigue', 'fault', 'favorite', 'feature', 'february', 'federal', 'fee', 'feed', 'feel', 'female', 'fence', 'festival', 'fetch', 'fever', 'few', 'fiber', 'fiction', 'field', 'figure', 'file', 'film', 'filter', 'final', 'find', 'fine', 'finger', 'finish', 'fire', 'firm', 'first', 'fiscal', 'fish', 'fit', 'fitness', 'fix', 'flag', 'flame', 'flash', 'flat', 'flavor', 'flee', 'flight', 'flip', 'float', 'flock', 'floor', 'flower', 'fluid', 'flush', 'fly', 'foam', 'focus', 'fog', 'foil', 'fold', 'follow', 'food', 'foot', 'force', 'forest', 'forget', 'fork', 'fortune', 'forum', 'forward', 'fossil', 'foster', 'found', 'fox', 'fragile', 'frame', 'frequent', 'fresh', 'friend', 'fringe', 'frog', 'front', 'frost', 'frown', 'frozen', 'fruit', 'fuel', 'fun', 'funny', 'furnace', 'fury', 'future', 'gadget', 'gain', 'galaxy', 'gallery', 'game', 'gap', 'garage', 'garbage', 'garden', 'garlic', 'garment', 'gas', 'gasp', 'gate', 'gather', 'gauge', 'gaze', 'general', 'genius', 'genre', 'gentle', 'genuine', 'gesture', 'ghost', 'giant', 'gift', 'giggle', 'ginger', 'giraffe', 'girl', 'give', 'glad', 'glance', 'glare', 'glass', 'glide', 'glimpse', 'globe', 'gloom', 'glory', 'glove', 'glow', 'glue', 'goat', 'goddess', 'gold', 'good', 'goose', 'gorilla', 'gospel', 'gossip', 'govern', 'gown', 'grab', 'grace', 'grain', 'grant', 'grape', 'grass', 'gravity', 'great', 'green', 'grid', 'grief', 'grit', 'grocery', 'group', 'grow', 'grunt', 'guard', 'guess', 'guide', 'guilt', 'guitar', 'gun', 'gym', 'habit', 'hair', 'half', 'hammer', 'hamster', 'hand', 'happy', 'harbor', 'hard', 'harsh', 'harvest', 'hat', 'have', 'hawk', 'hazard', 'head', 'health', 'heart', 'heavy', 'hedgehog', 'height', 'hello', 'helmet', 'help', 'hen', 'hero', 'hidden', 'high', 'hill', 'hint', 'hip', 'hire', 'history', 'hobby', 'hockey', 'hold', 'hole', 'holiday', 'hollow', 'home', 'honey', 'hood', 'hope', 'horn', 'horror', 'horse', 'hospital', 'host', 'hotel', 'hour', 'hover', 'hub', 'huge', 'human', 'humble', 'humor', 'hundred', 'hungry', 'hunt', 'hurdle', 'hurry', 'hurt', 'husband', 'hybrid', 'ice', 'icon', 'idea', 'identify', 'idle', 'ignore', 'ill', 'illegal', 'illness', 'image', 'imitate', 'immense', 'immune', 'impact', 'impose', 'improve', 'impulse', 'inch', 'include', 'income', 'increase', 'index', 'indicate', 'indoor', 'industry', 'infant', 'inflict', 'inform', 'inhale', 'inherit', 'initial', 'inject', 'injury', 'inmate', 'inner', 'innocent', 'input', 'inquiry', 'insane', 'insect', 'inside', 'inspire', 'install', 'intact', 'interest', 'into', 'invest', 'invite', 'involve', 'iron', 'island', 'isolate', 'issue', 'item', 'ivory', 'jacket', 'jaguar', 'jar', 'jazz', 'jealous', 'jeans', 'jelly', 'jewel', 'job', 'join', 'joke', 'journey', 'joy', 'judge', 'juice', 'jump', 'jungle', 'junior', 'junk', 'just', 'kangaroo', 'keen', 'keep', 'ketchup', 'key', 'kick', 'kid', 'kidney', 'kind', 'kingdom', 'kiss', 'kit', 'kitchen', 'kite', 'kitten', 'kiwi', 'knee', 'knife', 'knock', 'know', 'lab', 'label', 'labor', 'ladder', 'lady', 'lake', 'lamp', 'language', 'laptop', 'large', 'later', 'latin', 'laugh', 'laundry', 'lava', 'law', 'lawn', 'lawsuit', 'layer', 'lazy', 'leader', 'leaf', 'learn', 'leave', 'lecture', 'left', 'leg', 'legal', 'legend', 'leisure', 'lemon', 'lend', 'length', 'lens', 'leopard', 'lesson', 'letter', 'level', 'liar', 'liberty', 'library', 'license', 'life', 'lift', 'light', 'like', 'limb', 'limit', 'link', 'lion', 'liquid', 'list', 'little', 'live', 'lizard', 'load', 'loan', 'lobster', 'local', 'lock', 'logic', 'lonely', 'long', 'loop', 'lottery', 'loud', 'lounge', 'love', 'loyal', 'lucky', 'luggage', 'lumber', 'lunar', 'lunch', 'luxury', 'lyrics', 'machine', 'mad', 'magic', 'magnet', 'maid', 'mail', 'main', 'major', 'make', 'mammal', 'man', 'manage', 'mandate', 'mango', 'mansion', 'manual', 'maple', 'marble', 'march', 'margin', 'marine', 'market', 'marriage', 'mask', 'mass', 'master', 'match', 'material', 'math', 'matrix', 'matter', 'maximum', 'maze', 'meadow', 'mean', 'measure', 'meat', 'mechanic', 'medal', 'media', 'melody', 'melt', 'member', 'memory', 'mention', 'menu', 'mercy', 'merge', 'merit', 'merry', 'mesh', 'message', 'metal', 'method', 'middle', 'midnight', 'milk', 'million', 'mimic', 'mind', 'minimum', 'minor', 'minute', 'miracle', 'mirror', 'misery', 'miss', 'mistake', 'mix', 'mixed', 'mixture', 'mobile', 'model', 'modify', 'mom', 'moment', 'monitor', 'monkey', 'monster', 'month', 'moon', 'moral', 'more', 'morning', 'mosquito', 'mother', 'motion', 'motor', 'mountain', 'mouse', 'move', 'movie', 'much', 'muffin', 'mule', 'multiply', 'muscle', 'museum', 'mushroom', 'music', 'must', 'mutual', 'myself', 'mystery', 'myth', 'naive', 'name', 'napkin', 'narrow', 'nasty', 'nation', 'nature', 'near', 'neck', 'need', 'negative', 'neglect', 'neither', 'nephew', 'nerve', 'nest', 'net', 'network', 'neutral', 'never', 'news', 'next', 'nice', 'night', 'noble', 'noise', 'nominee', 'noodle', 'normal', 'north', 'nose', 'notable', 'note', 'nothing', 'notice', 'novel', 'now', 'nuclear', 'number', 'nurse', 'nut', 'oak', 'obey', 'object', 'oblige', 'obscure', 'observe', 'obtain', 'obvious', 'occur', 'ocean', 'october', 'odor', 'off', 'offer', 'office', 'often', 'oil', 'okay', 'old', 'olive', 'olympic', 'omit', 'once', 'one', 'onion', 'online', 'only', 'open', 'opera', 'opinion', 'oppose', 'option', 'orange', 'orbit', 'orchard', 'order', 'ordinary', 'organ', 'orient', 'original', 'orphan', 'ostrich', 'other', 'outdoor', 'outer', 'output', 'outside', 'oval', 'oven', 'over', 'own', 'owner', 'oxygen', 'oyster', 'ozone', 'pact', 'paddle', 'page', 'pair', 'palace', 'palm', 'panda', 'panel', 'panic', 'panther', 'paper', 'parade', 'parent', 'park', 'parrot', 'party', 'pass', 'patch', 'path', 'patient', 'patrol', 'pattern', 'pause', 'pave', 'payment', 'peace', 'peanut', 'pear', 'peasant', 'pelican', 'pen', 'penalty', 'pencil', 'people', 'pepper', 'perfect', 'permit', 'person', 'pet', 'phone', 'photo', 'phrase', 'physical', 'piano', 'picnic', 'picture', 'piece', 'pig', 'pigeon', 'pill', 'pilot', 'pink', 'pioneer', 'pipe', 'pistol', 'pitch', 'pizza', 'place', 'planet', 'plastic', 'plate', 'play', 'please', 'pledge', 'pluck', 'plug', 'plunge', 'poem', 'poet', 'point', 'polar', 'pole', 'police', 'pond', 'pony', 'pool', 'popular', 'portion', 'position', 'possible', 'post', 'potato', 'pottery', 'poverty', 'powder', 'power', 'practice', 'praise', 'predict', 'prefer', 'prepare', 'present', 'pretty', 'prevent', 'price', 'pride', 'primary', 'print', 'priority', 'prison', 'private', 'prize', 'problem', 'process', 'produce', 'profit', 'program', 'project', 'promote', 'proof', 'property', 'prosper', 'protect', 'proud', 'provide', 'public', 'pudding', 'pull', 'pulp', 'pulse', 'pumpkin', 'punch', 'pupil', 'puppy', 'purchase', 'purity', 'purpose', 'purse', 'push', 'put', 'puzzle', 'pyramid', 'quality', 'quantum', 'quarter', 'question', 'quick', 'quit', 'quiz', 'quote', 'rabbit', 'raccoon', 'race', 'rack', 'radar', 'radio', 'rail', 'rain', 'raise', 'rally', 'ramp', 'ranch', 'random', 'range', 'rapid', 'rare', 'rate', 'rather', 'raven', 'raw', 'razor', 'ready', 'real', 'reason', 'rebel', 'rebuild', 'recall', 'receive', 'recipe', 'record', 'recycle', 'reduce', 'reflect', 'reform', 'refuse', 'region', 'regret', 'regular', 'reject', 'relax', 'release', 'relief', 'rely', 'remain', 'remember', 'remind', 'remove', 'render', 'renew', 'rent', 'reopen', 'repair', 'repeat', 'replace', 'report', 'require', 'rescue', 'resemble', 'resist', 'resource', 'response', 'result', 'retire', 'retreat', 'return', 'reunion', 'reveal', 'review', 'reward', 'rhythm', 'rib', 'ribbon', 'rice', 'rich', 'ride', 'ridge', 'rifle', 'right', 'rigid', 'ring', 'riot', 'ripple', 'risk', 'ritual', 'rival', 'river', 'road', 'roast', 'robot', 'robust', 'rocket', 'romance', 'roof', 'rookie', 'room', 'rose', 'rotate', 'rough', 'round', 'route', 'royal', 'rubber', 'rude', 'rug', 'rule', 'run', 'runway', 'rural', 'sad', 'saddle', 'sadness', 'safe', 'sail', 'salad', 'salmon', 'salon', 'salt', 'salute', 'same', 'sample', 'sand', 'satisfy', 'satoshi', 'sauce', 'sausage', 'save', 'say', 'scale', 'scan', 'scare', 'scatter', 'scene', 'scheme', 'school', 'science', 'scissors', 'scorpion', 'scout', 'scrap', 'screen', 'script', 'scrub', 'sea', 'search', 'season', 'seat', 'second', 'secret', 'section', 'security', 'seed', 'seek', 'segment', 'select', 'sell', 'seminar', 'senior', 'sense', 'sentence', 'series', 'service', 'session', 'settle', 'setup', 'seven', 'shadow', 'shaft', 'shallow', 'share', 'shed', 'shell', 'sheriff', 'shield', 'shift', 'shine', 'ship', 'shiver', 'shock', 'shoe', 'shoot', 'shop', 'short', 'shoulder', 'shove', 'shrimp', 'shrug', 'shuffle', 'shy', 'sibling', 'sick', 'side', 'siege', 'sight', 'sign', 'silent', 'silk', 'silly', 'silver', 'similar', 'simple', 'since', 'sing', 'siren', 'sister', 'situate', 'six', 'size', 'skate', 'sketch', 'ski', 'skill', 'skin', 'skirt', 'skull', 'slab', 'slam', 'sleep', 'slender', 'slice', 'slide', 'slight', 'slim', 'slogan', 'slot', 'slow', 'slush', 'small', 'smart', 'smile', 'smoke', 'smooth', 'snack', 'snake', 'snap', 'sniff', 'snow', 'soap', 'soccer', 'social', 'sock', 'soda', 'soft', 'solar', 'soldier', 'solid', 'solution', 'solve', 'someone', 'song', 'soon', 'sorry', 'sort', 'soul', 'sound', 'soup', 'source', 'south', 'space', 'spare', 'spatial', 'spawn', 'speak', 'special', 'speed', 'spell', 'spend', 'sphere', 'spice', 'spider', 'spike', 'spin', 'spirit', 'split', 'spoil', 'sponsor', 'spoon', 'sport', 'spot', 'spray', 'spread', 'spring', 'spy', 'square', 'squeeze', 'squirrel', 'stable', 'stadium', 'staff', 'stage', 'stairs', 'stamp', 'stand', 'start', 'state', 'stay', 'steak', 'steel', 'stem', 'step', 'stereo', 'stick', 'still', 'sting', 'stock', 'stomach', 'stone', 'stool', 'story', 'stove', 'strategy', 'street', 'strike', 'strong', 'struggle', 'student', 'stuff', 'stumble', 'style', 'subject', 'submit', 'subway', 'success', 'such', 'sudden', 'suffer', 'sugar', 'suggest', 'suit', 'summer', 'sun', 'sunny', 'sunset', 'super', 'supply', 'supreme', 'sure', 'surface', 'surge', 'surprise', 'surround', 'survey', 'suspect', 'sustain', 'swallow', 'swamp', 'swap', 'swarm', 'swear', 'sweet', 'swift', 'swim', 'swing', 'switch', 'sword', 'symbol', 'symptom', 'syrup', 'system', 'table', 'tackle', 'tag', 'tail', 'talent', 'talk', 'tank', 'tape', 'target', 'task', 'taste', 'tattoo', 'taxi', 'teach', 'team', 'tell', 'ten', 'tenant', 'tennis', 'tent', 'term', 'test', 'text', 'thank', 'that', 'theme', 'then', 'theory', 'there', 'they', 'thing', 'this', 'thought', 'three', 'thrive', 'throw', 'thumb', 'thunder', 'ticket', 'tide', 'tiger', 'tilt', 'timber', 'time', 'tiny', 'tip', 'tired', 'tissue', 'title', 'toast', 'tobacco', 'today', 'toddler', 'toe', 'together', 'toilet', 'token', 'tomato', 'tomorrow', 'tone', 'tongue', 'tonight', 'tool', 'tooth', 'top', 'topic', 'topple', 'torch', 'tornado', 'tortoise', 'toss', 'total', 'tourist', 'toward', 'tower', 'town', 'toy', 'track', 'trade', 'traffic', 'tragic', 'train', 'transfer', 'trap', 'trash', 'travel', 'tray', 'treat', 'tree', 'trend', 'trial', 'tribe', 'trick', 'trigger', 'trim', 'trip', 'trophy', 'trouble', 'truck', 'true', 'truly', 'trumpet', 'trust', 'truth', 'try', 'tube', 'tuition', 'tumble', 'tuna', 'tunnel', 'turkey', 'turn', 'turtle', 'twelve', 'twenty', 'twice', 'twin', 'twist', 'two', 'type', 'typical', 'ugly', 'umbrella', 'unable', 'unaware', 'uncle', 'uncover', 'under', 'undo', 'unfair', 'unfold', 'unhappy', 'uniform', 'unique', 'unit', 'universe', 'unknown', 'unlock', 'until', 'unusual', 'unveil', 'update', 'upgrade', 'uphold', 'upon', 'upper', 'upset', 'urban', 'urge', 'usage', 'use', 'used', 'useful', 'useless', 'usual', 'utility', 'vacant', 'vacuum', 'vague', 'valid', 'valley', 'valve', 'van', 'vanish', 'vapor', 'various', 'vast', 'vault', 'vehicle', 'velvet', 'vendor', 'venture', 'venue', 'verb', 'verify', 'version', 'very', 'vessel', 'veteran', 'viable', 'vibrant', 'vicious', 'victory', 'video', 'view', 'village', 'vintage', 'violin', 'virtual', 'virus', 'visa', 'visit', 'visual', 'vital', 'vivid', 'vocal', 'voice', 'void', 'volcano', 'volume', 'vote', 'voyage', 'wage', 'wagon', 'wait', 'walk', 'wall', 'walnut', 'want', 'warfare', 'warm', 'warrior', 'wash', 'wasp', 'waste', 'water', 'wave', 'way', 'wealth', 'weapon', 'wear', 'weasel', 'weather', 'web', 'wedding', 'weekend', 'weird', 'welcome', 'west', 'wet', 'whale', 'what', 'wheat', 'wheel', 'when', 'where', 'whip', 'whisper', 'wide', 'width', 'wife', 'wild', 'will', 'win', 'window', 'wine', 'wing', 'wink', 'winner', 'winter', 'wire', 'wisdom', 'wise', 'wish', 'witness', 'wolf', 'woman', 'wonder', 'wood', 'wool', 'word', 'work', 'world', 'worry', 'worth', 'wrap', 'wreck', 'wrestle', 'wrist', 'write', 'wrong', 'yard', 'year', 'yellow', 'you', 'young', 'youth', 'zebra', 'zero', 'zone', 'zoo']; module.exports = english; -},{}],92:[function(require,module,exports){ +},{}],94:[function(require,module,exports){ 'use string'; var french = ['abaisser', 'abandon', 'abdiquer', 'abeille', 'abolir', 'aborder', 'aboutir', 'aboyer', 'abrasif', 'abreuver', 'abriter', 'abroger', 'abrupt', 'absence', 'absolu', 'absurde', 'abusif', 'abyssal', 'académie', 'acajou', 'acarien', 'accabler', 'accepter', 'acclamer', 'accolade', 'accroche', 'accuser', 'acerbe', 'achat', 'acheter', 'aciduler', 'acier', 'acompte', 'acquérir', 'acronyme', 'acteur', 'actif', 'actuel', 'adepte', 'adéquat', 'adhésif', 'adjectif', 'adjuger', 'admettre', 'admirer', 'adopter', 'adorer', 'adoucir', 'adresse', 'adroit', 'adulte', 'adverbe', 'aérer', 'aéronef', 'affaire', 'affecter', 'affiche', 'affreux', 'affubler', 'agacer', 'agencer', 'agile', 'agiter', 'agrafer', 'agréable', 'agrume', 'aider', 'aiguille', 'ailier', 'aimable', 'aisance', 'ajouter', 'ajuster', 'alarmer', 'alchimie', 'alerte', 'algèbre', 'algue', 'aliéner', 'aliment', 'alléger', 'alliage', 'allouer', 'allumer', 'alourdir', 'alpaga', 'altesse', 'alvéole', 'amateur', 'ambigu', 'ambre', 'aménager', 'amertume', 'amidon', 'amiral', 'amorcer', 'amour', 'amovible', 'amphibie', 'ampleur', 'amusant', 'analyse', 'anaphore', 'anarchie', 'anatomie', 'ancien', 'anéantir', 'angle', 'angoisse', 'anguleux', 'animal', 'annexer', 'annonce', 'annuel', 'anodin', 'anomalie', 'anonyme', 'anormal', 'antenne', 'antidote', 'anxieux', 'apaiser', 'apéritif', 'aplanir', 'apologie', 'appareil', 'appeler', 'apporter', 'appuyer', 'aquarium', 'aqueduc', 'arbitre', 'arbuste', 'ardeur', 'ardoise', 'argent', 'arlequin', 'armature', 'armement', 'armoire', 'armure', 'arpenter', 'arracher', 'arriver', 'arroser', 'arsenic', 'artériel', 'article', 'aspect', 'asphalte', 'aspirer', 'assaut', 'asservir', 'assiette', 'associer', 'assurer', 'asticot', 'astre', 'astuce', 'atelier', 'atome', 'atrium', 'atroce', 'attaque', 'attentif', 'attirer', 'attraper', 'aubaine', 'auberge', 'audace', 'audible', 'augurer', 'aurore', 'automne', 'autruche', 'avaler', 'avancer', 'avarice', 'avenir', 'averse', 'aveugle', 'aviateur', 'avide', 'avion', 'aviser', 'avoine', 'avouer', 'avril', 'axial', 'axiome', 'badge', 'bafouer', 'bagage', 'baguette', 'baignade', 'balancer', 'balcon', 'baleine', 'balisage', 'bambin', 'bancaire', 'bandage', 'banlieue', 'bannière', 'banquier', 'barbier', 'baril', 'baron', 'barque', 'barrage', 'bassin', 'bastion', 'bataille', 'bateau', 'batterie', 'baudrier', 'bavarder', 'belette', 'bélier', 'belote', 'bénéfice', 'berceau', 'berger', 'berline', 'bermuda', 'besace', 'besogne', 'bétail', 'beurre', 'biberon', 'bicycle', 'bidule', 'bijou', 'bilan', 'bilingue', 'billard', 'binaire', 'biologie', 'biopsie', 'biotype', 'biscuit', 'bison', 'bistouri', 'bitume', 'bizarre', 'blafard', 'blague', 'blanchir', 'blessant', 'blinder', 'blond', 'bloquer', 'blouson', 'bobard', 'bobine', 'boire', 'boiser', 'bolide', 'bonbon', 'bondir', 'bonheur', 'bonifier', 'bonus', 'bordure', 'borne', 'botte', 'boucle', 'boueux', 'bougie', 'boulon', 'bouquin', 'bourse', 'boussole', 'boutique', 'boxeur', 'branche', 'brasier', 'brave', 'brebis', 'brèche', 'breuvage', 'bricoler', 'brigade', 'brillant', 'brioche', 'brique', 'brochure', 'broder', 'bronzer', 'brousse', 'broyeur', 'brume', 'brusque', 'brutal', 'bruyant', 'buffle', 'buisson', 'bulletin', 'bureau', 'burin', 'bustier', 'butiner', 'butoir', 'buvable', 'buvette', 'cabanon', 'cabine', 'cachette', 'cadeau', 'cadre', 'caféine', 'caillou', 'caisson', 'calculer', 'calepin', 'calibre', 'calmer', 'calomnie', 'calvaire', 'camarade', 'caméra', 'camion', 'campagne', 'canal', 'caneton', 'canon', 'cantine', 'canular', 'capable', 'caporal', 'caprice', 'capsule', 'capter', 'capuche', 'carabine', 'carbone', 'caresser', 'caribou', 'carnage', 'carotte', 'carreau', 'carton', 'cascade', 'casier', 'casque', 'cassure', 'causer', 'caution', 'cavalier', 'caverne', 'caviar', 'cédille', 'ceinture', 'céleste', 'cellule', 'cendrier', 'censurer', 'central', 'cercle', 'cérébral', 'cerise', 'cerner', 'cerveau', 'cesser', 'chagrin', 'chaise', 'chaleur', 'chambre', 'chance', 'chapitre', 'charbon', 'chasseur', 'chaton', 'chausson', 'chavirer', 'chemise', 'chenille', 'chéquier', 'chercher', 'cheval', 'chien', 'chiffre', 'chignon', 'chimère', 'chiot', 'chlorure', 'chocolat', 'choisir', 'chose', 'chouette', 'chrome', 'chute', 'cigare', 'cigogne', 'cimenter', 'cinéma', 'cintrer', 'circuler', 'cirer', 'cirque', 'citerne', 'citoyen', 'citron', 'civil', 'clairon', 'clameur', 'claquer', 'classe', 'clavier', 'client', 'cligner', 'climat', 'clivage', 'cloche', 'clonage', 'cloporte', 'cobalt', 'cobra', 'cocasse', 'cocotier', 'coder', 'codifier', 'coffre', 'cogner', 'cohésion', 'coiffer', 'coincer', 'colère', 'colibri', 'colline', 'colmater', 'colonel', 'combat', 'comédie', 'commande', 'compact', 'concert', 'conduire', 'confier', 'congeler', 'connoter', 'consonne', 'contact', 'convexe', 'copain', 'copie', 'corail', 'corbeau', 'cordage', 'corniche', 'corpus', 'correct', 'cortège', 'cosmique', 'costume', 'coton', 'coude', 'coupure', 'courage', 'couteau', 'couvrir', 'coyote', 'crabe', 'crainte', 'cravate', 'crayon', 'créature', 'créditer', 'crémeux', 'creuser', 'crevette', 'cribler', 'crier', 'cristal', 'critère', 'croire', 'croquer', 'crotale', 'crucial', 'cruel', 'crypter', 'cubique', 'cueillir', 'cuillère', 'cuisine', 'cuivre', 'culminer', 'cultiver', 'cumuler', 'cupide', 'curatif', 'curseur', 'cyanure', 'cycle', 'cylindre', 'cynique', 'daigner', 'damier', 'danger', 'danseur', 'dauphin', 'débattre', 'débiter', 'déborder', 'débrider', 'débutant', 'décaler', 'décembre', 'déchirer', 'décider', 'déclarer', 'décorer', 'décrire', 'décupler', 'dédale', 'déductif', 'déesse', 'défensif', 'défiler', 'défrayer', 'dégager', 'dégivrer', 'déglutir', 'dégrafer', 'déjeuner', 'délice', 'déloger', 'demander', 'demeurer', 'démolir', 'dénicher', 'dénouer', 'dentelle', 'dénuder', 'départ', 'dépenser', 'déphaser', 'déplacer', 'déposer', 'déranger', 'dérober', 'désastre', 'descente', 'désert', 'désigner', 'désobéir', 'dessiner', 'destrier', 'détacher', 'détester', 'détourer', 'détresse', 'devancer', 'devenir', 'deviner', 'devoir', 'diable', 'dialogue', 'diamant', 'dicter', 'différer', 'digérer', 'digital', 'digne', 'diluer', 'dimanche', 'diminuer', 'dioxyde', 'directif', 'diriger', 'discuter', 'disposer', 'dissiper', 'distance', 'divertir', 'diviser', 'docile', 'docteur', 'dogme', 'doigt', 'domaine', 'domicile', 'dompter', 'donateur', 'donjon', 'donner', 'dopamine', 'dortoir', 'dorure', 'dosage', 'doseur', 'dossier', 'dotation', 'douanier', 'double', 'douceur', 'douter', 'doyen', 'dragon', 'draper', 'dresser', 'dribbler', 'droiture', 'duperie', 'duplexe', 'durable', 'durcir', 'dynastie', 'éblouir', 'écarter', 'écharpe', 'échelle', 'éclairer', 'éclipse', 'éclore', 'écluse', 'école', 'économie', 'écorce', 'écouter', 'écraser', 'écrémer', 'écrivain', 'écrou', 'écume', 'écureuil', 'édifier', 'éduquer', 'effacer', 'effectif', 'effigie', 'effort', 'effrayer', 'effusion', 'égaliser', 'égarer', 'éjecter', 'élaborer', 'élargir', 'électron', 'élégant', 'éléphant', 'élève', 'éligible', 'élitisme', 'éloge', 'élucider', 'éluder', 'emballer', 'embellir', 'embryon', 'émeraude', 'émission', 'emmener', 'émotion', 'émouvoir', 'empereur', 'employer', 'emporter', 'emprise', 'émulsion', 'encadrer', 'enchère', 'enclave', 'encoche', 'endiguer', 'endosser', 'endroit', 'enduire', 'énergie', 'enfance', 'enfermer', 'enfouir', 'engager', 'engin', 'englober', 'énigme', 'enjamber', 'enjeu', 'enlever', 'ennemi', 'ennuyeux', 'enrichir', 'enrobage', 'enseigne', 'entasser', 'entendre', 'entier', 'entourer', 'entraver', 'énumérer', 'envahir', 'enviable', 'envoyer', 'enzyme', 'éolien', 'épaissir', 'épargne', 'épatant', 'épaule', 'épicerie', 'épidémie', 'épier', 'épilogue', 'épine', 'épisode', 'épitaphe', 'époque', 'épreuve', 'éprouver', 'épuisant', 'équerre', 'équipe', 'ériger', 'érosion', 'erreur', 'éruption', 'escalier', 'espadon', 'espèce', 'espiègle', 'espoir', 'esprit', 'esquiver', 'essayer', 'essence', 'essieu', 'essorer', 'estime', 'estomac', 'estrade', 'étagère', 'étaler', 'étanche', 'étatique', 'éteindre', 'étendoir', 'éternel', 'éthanol', 'éthique', 'ethnie', 'étirer', 'étoffer', 'étoile', 'étonnant', 'étourdir', 'étrange', 'étroit', 'étude', 'euphorie', 'évaluer', 'évasion', 'éventail', 'évidence', 'éviter', 'évolutif', 'évoquer', 'exact', 'exagérer', 'exaucer', 'exceller', 'excitant', 'exclusif', 'excuse', 'exécuter', 'exemple', 'exercer', 'exhaler', 'exhorter', 'exigence', 'exiler', 'exister', 'exotique', 'expédier', 'explorer', 'exposer', 'exprimer', 'exquis', 'extensif', 'extraire', 'exulter', 'fable', 'fabuleux', 'facette', 'facile', 'facture', 'faiblir', 'falaise', 'fameux', 'famille', 'farceur', 'farfelu', 'farine', 'farouche', 'fasciner', 'fatal', 'fatigue', 'faucon', 'fautif', 'faveur', 'favori', 'fébrile', 'féconder', 'fédérer', 'félin', 'femme', 'fémur', 'fendoir', 'féodal', 'fermer', 'féroce', 'ferveur', 'festival', 'feuille', 'feutre', 'février', 'fiasco', 'ficeler', 'fictif', 'fidèle', 'figure', 'filature', 'filetage', 'filière', 'filleul', 'filmer', 'filou', 'filtrer', 'financer', 'finir', 'fiole', 'firme', 'fissure', 'fixer', 'flairer', 'flamme', 'flasque', 'flatteur', 'fléau', 'flèche', 'fleur', 'flexion', 'flocon', 'flore', 'fluctuer', 'fluide', 'fluvial', 'folie', 'fonderie', 'fongible', 'fontaine', 'forcer', 'forgeron', 'formuler', 'fortune', 'fossile', 'foudre', 'fougère', 'fouiller', 'foulure', 'fourmi', 'fragile', 'fraise', 'franchir', 'frapper', 'frayeur', 'frégate', 'freiner', 'frelon', 'frémir', 'frénésie', 'frère', 'friable', 'friction', 'frisson', 'frivole', 'froid', 'fromage', 'frontal', 'frotter', 'fruit', 'fugitif', 'fuite', 'fureur', 'furieux', 'furtif', 'fusion', 'futur', 'gagner', 'galaxie', 'galerie', 'gambader', 'garantir', 'gardien', 'garnir', 'garrigue', 'gazelle', 'gazon', 'géant', 'gélatine', 'gélule', 'gendarme', 'général', 'génie', 'genou', 'gentil', 'géologie', 'géomètre', 'géranium', 'germe', 'gestuel', 'geyser', 'gibier', 'gicler', 'girafe', 'givre', 'glace', 'glaive', 'glisser', 'globe', 'gloire', 'glorieux', 'golfeur', 'gomme', 'gonfler', 'gorge', 'gorille', 'goudron', 'gouffre', 'goulot', 'goupille', 'gourmand', 'goutte', 'graduel', 'graffiti', 'graine', 'grand', 'grappin', 'gratuit', 'gravir', 'grenat', 'griffure', 'griller', 'grimper', 'grogner', 'gronder', 'grotte', 'groupe', 'gruger', 'grutier', 'gruyère', 'guépard', 'guerrier', 'guide', 'guimauve', 'guitare', 'gustatif', 'gymnaste', 'gyrostat', 'habitude', 'hachoir', 'halte', 'hameau', 'hangar', 'hanneton', 'haricot', 'harmonie', 'harpon', 'hasard', 'hélium', 'hématome', 'herbe', 'hérisson', 'hermine', 'héron', 'hésiter', 'heureux', 'hiberner', 'hibou', 'hilarant', 'histoire', 'hiver', 'homard', 'hommage', 'homogène', 'honneur', 'honorer', 'honteux', 'horde', 'horizon', 'horloge', 'hormone', 'horrible', 'houleux', 'housse', 'hublot', 'huileux', 'humain', 'humble', 'humide', 'humour', 'hurler', 'hydromel', 'hygiène', 'hymne', 'hypnose', 'idylle', 'ignorer', 'iguane', 'illicite', 'illusion', 'image', 'imbiber', 'imiter', 'immense', 'immobile', 'immuable', 'impact', 'impérial', 'implorer', 'imposer', 'imprimer', 'imputer', 'incarner', 'incendie', 'incident', 'incliner', 'incolore', 'indexer', 'indice', 'inductif', 'inédit', 'ineptie', 'inexact', 'infini', 'infliger', 'informer', 'infusion', 'ingérer', 'inhaler', 'inhiber', 'injecter', 'injure', 'innocent', 'inoculer', 'inonder', 'inscrire', 'insecte', 'insigne', 'insolite', 'inspirer', 'instinct', 'insulter', 'intact', 'intense', 'intime', 'intrigue', 'intuitif', 'inutile', 'invasion', 'inventer', 'inviter', 'invoquer', 'ironique', 'irradier', 'irréel', 'irriter', 'isoler', 'ivoire', 'ivresse', 'jaguar', 'jaillir', 'jambe', 'janvier', 'jardin', 'jauger', 'jaune', 'javelot', 'jetable', 'jeton', 'jeudi', 'jeunesse', 'joindre', 'joncher', 'jongler', 'joueur', 'jouissif', 'journal', 'jovial', 'joyau', 'joyeux', 'jubiler', 'jugement', 'junior', 'jupon', 'juriste', 'justice', 'juteux', 'juvénile', 'kayak', 'kimono', 'kiosque', 'label', 'labial', 'labourer', 'lacérer', 'lactose', 'lagune', 'laine', 'laisser', 'laitier', 'lambeau', 'lamelle', 'lampe', 'lanceur', 'langage', 'lanterne', 'lapin', 'largeur', 'larme', 'laurier', 'lavabo', 'lavoir', 'lecture', 'légal', 'léger', 'légume', 'lessive', 'lettre', 'levier', 'lexique', 'lézard', 'liasse', 'libérer', 'libre', 'licence', 'licorne', 'liège', 'lièvre', 'ligature', 'ligoter', 'ligue', 'limer', 'limite', 'limonade', 'limpide', 'linéaire', 'lingot', 'lionceau', 'liquide', 'lisière', 'lister', 'lithium', 'litige', 'littoral', 'livreur', 'logique', 'lointain', 'loisir', 'lombric', 'loterie', 'louer', 'lourd', 'loutre', 'louve', 'loyal', 'lubie', 'lucide', 'lucratif', 'lueur', 'lugubre', 'luisant', 'lumière', 'lunaire', 'lundi', 'luron', 'lutter', 'luxueux', 'machine', 'magasin', 'magenta', 'magique', 'maigre', 'maillon', 'maintien', 'mairie', 'maison', 'majorer', 'malaxer', 'maléfice', 'malheur', 'malice', 'mallette', 'mammouth', 'mandater', 'maniable', 'manquant', 'manteau', 'manuel', 'marathon', 'marbre', 'marchand', 'mardi', 'maritime', 'marqueur', 'marron', 'marteler', 'mascotte', 'massif', 'matériel', 'matière', 'matraque', 'maudire', 'maussade', 'mauve', 'maximal', 'méchant', 'méconnu', 'médaille', 'médecin', 'méditer', 'méduse', 'meilleur', 'mélange', 'mélodie', 'membre', 'mémoire', 'menacer', 'mener', 'menhir', 'mensonge', 'mentor', 'mercredi', 'mérite', 'merle', 'messager', 'mesure', 'métal', 'météore', 'méthode', 'métier', 'meuble', 'miauler', 'microbe', 'miette', 'mignon', 'migrer', 'milieu', 'million', 'mimique', 'mince', 'minéral', 'minimal', 'minorer', 'minute', 'miracle', 'miroiter', 'missile', 'mixte', 'mobile', 'moderne', 'moelleux', 'mondial', 'moniteur', 'monnaie', 'monotone', 'monstre', 'montagne', 'monument', 'moqueur', 'morceau', 'morsure', 'mortier', 'moteur', 'motif', 'mouche', 'moufle', 'moulin', 'mousson', 'mouton', 'mouvant', 'multiple', 'munition', 'muraille', 'murène', 'murmure', 'muscle', 'muséum', 'musicien', 'mutation', 'muter', 'mutuel', 'myriade', 'myrtille', 'mystère', 'mythique', 'nageur', 'nappe', 'narquois', 'narrer', 'natation', 'nation', 'nature', 'naufrage', 'nautique', 'navire', 'nébuleux', 'nectar', 'néfaste', 'négation', 'négliger', 'négocier', 'neige', 'nerveux', 'nettoyer', 'neurone', 'neutron', 'neveu', 'niche', 'nickel', 'nitrate', 'niveau', 'noble', 'nocif', 'nocturne', 'noirceur', 'noisette', 'nomade', 'nombreux', 'nommer', 'normatif', 'notable', 'notifier', 'notoire', 'nourrir', 'nouveau', 'novateur', 'novembre', 'novice', 'nuage', 'nuancer', 'nuire', 'nuisible', 'numéro', 'nuptial', 'nuque', 'nutritif', 'obéir', 'objectif', 'obliger', 'obscur', 'observer', 'obstacle', 'obtenir', 'obturer', 'occasion', 'occuper', 'océan', 'octobre', 'octroyer', 'octupler', 'oculaire', 'odeur', 'odorant', 'offenser', 'officier', 'offrir', 'ogive', 'oiseau', 'oisillon', 'olfactif', 'olivier', 'ombrage', 'omettre', 'onctueux', 'onduler', 'onéreux', 'onirique', 'opale', 'opaque', 'opérer', 'opinion', 'opportun', 'opprimer', 'opter', 'optique', 'orageux', 'orange', 'orbite', 'ordonner', 'oreille', 'organe', 'orgueil', 'orifice', 'ornement', 'orque', 'ortie', 'osciller', 'osmose', 'ossature', 'otarie', 'ouragan', 'ourson', 'outil', 'outrager', 'ouvrage', 'ovation', 'oxyde', 'oxygène', 'ozone', 'paisible', 'palace', 'palmarès', 'palourde', 'palper', 'panache', 'panda', 'pangolin', 'paniquer', 'panneau', 'panorama', 'pantalon', 'papaye', 'papier', 'papoter', 'papyrus', 'paradoxe', 'parcelle', 'paresse', 'parfumer', 'parler', 'parole', 'parrain', 'parsemer', 'partager', 'parure', 'parvenir', 'passion', 'pastèque', 'paternel', 'patience', 'patron', 'pavillon', 'pavoiser', 'payer', 'paysage', 'peigne', 'peintre', 'pelage', 'pélican', 'pelle', 'pelouse', 'peluche', 'pendule', 'pénétrer', 'pénible', 'pensif', 'pénurie', 'pépite', 'péplum', 'perdrix', 'perforer', 'période', 'permuter', 'perplexe', 'persil', 'perte', 'peser', 'pétale', 'petit', 'pétrir', 'peuple', 'pharaon', 'phobie', 'phoque', 'photon', 'phrase', 'physique', 'piano', 'pictural', 'pièce', 'pierre', 'pieuvre', 'pilote', 'pinceau', 'pipette', 'piquer', 'pirogue', 'piscine', 'piston', 'pivoter', 'pixel', 'pizza', 'placard', 'plafond', 'plaisir', 'planer', 'plaque', 'plastron', 'plateau', 'pleurer', 'plexus', 'pliage', 'plomb', 'plonger', 'pluie', 'plumage', 'pochette', 'poésie', 'poète', 'pointe', 'poirier', 'poisson', 'poivre', 'polaire', 'policier', 'pollen', 'polygone', 'pommade', 'pompier', 'ponctuel', 'pondérer', 'poney', 'portique', 'position', 'posséder', 'posture', 'potager', 'poteau', 'potion', 'pouce', 'poulain', 'poumon', 'pourpre', 'poussin', 'pouvoir', 'prairie', 'pratique', 'précieux', 'prédire', 'préfixe', 'prélude', 'prénom', 'présence', 'prétexte', 'prévoir', 'primitif', 'prince', 'prison', 'priver', 'problème', 'procéder', 'prodige', 'profond', 'progrès', 'proie', 'projeter', 'prologue', 'promener', 'propre', 'prospère', 'protéger', 'prouesse', 'proverbe', 'prudence', 'pruneau', 'psychose', 'public', 'puceron', 'puiser', 'pulpe', 'pulsar', 'punaise', 'punitif', 'pupitre', 'purifier', 'puzzle', 'pyramide', 'quasar', 'querelle', 'question', 'quiétude', 'quitter', 'quotient', 'racine', 'raconter', 'radieux', 'ragondin', 'raideur', 'raisin', 'ralentir', 'rallonge', 'ramasser', 'rapide', 'rasage', 'ratisser', 'ravager', 'ravin', 'rayonner', 'réactif', 'réagir', 'réaliser', 'réanimer', 'recevoir', 'réciter', 'réclamer', 'récolter', 'recruter', 'reculer', 'recycler', 'rédiger', 'redouter', 'refaire', 'réflexe', 'réformer', 'refrain', 'refuge', 'régalien', 'région', 'réglage', 'régulier', 'réitérer', 'rejeter', 'rejouer', 'relatif', 'relever', 'relief', 'remarque', 'remède', 'remise', 'remonter', 'remplir', 'remuer', 'renard', 'renfort', 'renifler', 'renoncer', 'rentrer', 'renvoi', 'replier', 'reporter', 'reprise', 'reptile', 'requin', 'réserve', 'résineux', 'résoudre', 'respect', 'rester', 'résultat', 'rétablir', 'retenir', 'réticule', 'retomber', 'retracer', 'réunion', 'réussir', 'revanche', 'revivre', 'révolte', 'révulsif', 'richesse', 'rideau', 'rieur', 'rigide', 'rigoler', 'rincer', 'riposter', 'risible', 'risque', 'rituel', 'rival', 'rivière', 'rocheux', 'romance', 'rompre', 'ronce', 'rondin', 'roseau', 'rosier', 'rotatif', 'rotor', 'rotule', 'rouge', 'rouille', 'rouleau', 'routine', 'royaume', 'ruban', 'rubis', 'ruche', 'ruelle', 'rugueux', 'ruiner', 'ruisseau', 'ruser', 'rustique', 'rythme', 'sabler', 'saboter', 'sabre', 'sacoche', 'safari', 'sagesse', 'saisir', 'salade', 'salive', 'salon', 'saluer', 'samedi', 'sanction', 'sanglier', 'sarcasme', 'sardine', 'saturer', 'saugrenu', 'saumon', 'sauter', 'sauvage', 'savant', 'savonner', 'scalpel', 'scandale', 'scélérat', 'scénario', 'sceptre', 'schéma', 'science', 'scinder', 'score', 'scrutin', 'sculpter', 'séance', 'sécable', 'sécher', 'secouer', 'sécréter', 'sédatif', 'séduire', 'seigneur', 'séjour', 'sélectif', 'semaine', 'sembler', 'semence', 'séminal', 'sénateur', 'sensible', 'sentence', 'séparer', 'séquence', 'serein', 'sergent', 'sérieux', 'serrure', 'sérum', 'service', 'sésame', 'sévir', 'sevrage', 'sextuple', 'sidéral', 'siècle', 'siéger', 'siffler', 'sigle', 'signal', 'silence', 'silicium', 'simple', 'sincère', 'sinistre', 'siphon', 'sirop', 'sismique', 'situer', 'skier', 'social', 'socle', 'sodium', 'soigneux', 'soldat', 'soleil', 'solitude', 'soluble', 'sombre', 'sommeil', 'somnoler', 'sonde', 'songeur', 'sonnette', 'sonore', 'sorcier', 'sortir', 'sosie', 'sottise', 'soucieux', 'soudure', 'souffle', 'soulever', 'soupape', 'source', 'soutirer', 'souvenir', 'spacieux', 'spatial', 'spécial', 'sphère', 'spiral', 'stable', 'station', 'sternum', 'stimulus', 'stipuler', 'strict', 'studieux', 'stupeur', 'styliste', 'sublime', 'substrat', 'subtil', 'subvenir', 'succès', 'sucre', 'suffixe', 'suggérer', 'suiveur', 'sulfate', 'superbe', 'supplier', 'surface', 'suricate', 'surmener', 'surprise', 'sursaut', 'survie', 'suspect', 'syllabe', 'symbole', 'symétrie', 'synapse', 'syntaxe', 'système', 'tabac', 'tablier', 'tactile', 'tailler', 'talent', 'talisman', 'talonner', 'tambour', 'tamiser', 'tangible', 'tapis', 'taquiner', 'tarder', 'tarif', 'tartine', 'tasse', 'tatami', 'tatouage', 'taupe', 'taureau', 'taxer', 'témoin', 'temporel', 'tenaille', 'tendre', 'teneur', 'tenir', 'tension', 'terminer', 'terne', 'terrible', 'tétine', 'texte', 'thème', 'théorie', 'thérapie', 'thorax', 'tibia', 'tiède', 'timide', 'tirelire', 'tiroir', 'tissu', 'titane', 'titre', 'tituber', 'toboggan', 'tolérant', 'tomate', 'tonique', 'tonneau', 'toponyme', 'torche', 'tordre', 'tornade', 'torpille', 'torrent', 'torse', 'tortue', 'totem', 'toucher', 'tournage', 'tousser', 'toxine', 'traction', 'trafic', 'tragique', 'trahir', 'train', 'trancher', 'travail', 'trèfle', 'tremper', 'trésor', 'treuil', 'triage', 'tribunal', 'tricoter', 'trilogie', 'triomphe', 'tripler', 'triturer', 'trivial', 'trombone', 'tronc', 'tropical', 'troupeau', 'tuile', 'tulipe', 'tumulte', 'tunnel', 'turbine', 'tuteur', 'tutoyer', 'tuyau', 'tympan', 'typhon', 'typique', 'tyran', 'ubuesque', 'ultime', 'ultrason', 'unanime', 'unifier', 'union', 'unique', 'unitaire', 'univers', 'uranium', 'urbain', 'urticant', 'usage', 'usine', 'usuel', 'usure', 'utile', 'utopie', 'vacarme', 'vaccin', 'vagabond', 'vague', 'vaillant', 'vaincre', 'vaisseau', 'valable', 'valise', 'vallon', 'valve', 'vampire', 'vanille', 'vapeur', 'varier', 'vaseux', 'vassal', 'vaste', 'vecteur', 'vedette', 'végétal', 'véhicule', 'veinard', 'véloce', 'vendredi', 'vénérer', 'venger', 'venimeux', 'ventouse', 'verdure', 'vérin', 'vernir', 'verrou', 'verser', 'vertu', 'veston', 'vétéran', 'vétuste', 'vexant', 'vexer', 'viaduc', 'viande', 'victoire', 'vidange', 'vidéo', 'vignette', 'vigueur', 'vilain', 'village', 'vinaigre', 'violon', 'vipère', 'virement', 'virtuose', 'virus', 'visage', 'viseur', 'vision', 'visqueux', 'visuel', 'vital', 'vitesse', 'viticole', 'vitrine', 'vivace', 'vivipare', 'vocation', 'voguer', 'voile', 'voisin', 'voiture', 'volaille', 'volcan', 'voltiger', 'volume', 'vorace', 'vortex', 'voter', 'vouloir', 'voyage', 'voyelle', 'wagon', 'xénon', 'yacht', 'zèbre', 'zénith', 'zeste', 'zoologie']; module.exports = french; -},{}],93:[function(require,module,exports){ +},{}],95:[function(require,module,exports){ module.exports = { 'CHINESE': require('./chinese'), 'ENGLISH': require('./english'), @@ -33057,2753 +33650,2345 @@ module.exports = { 'SPANISH': require('./spanish') }; -},{"./chinese":90,"./english":91,"./french":92,"./japanese":94,"./spanish":95}],94:[function(require,module,exports){ +},{"./chinese":92,"./english":93,"./french":94,"./japanese":96,"./spanish":97}],96:[function(require,module,exports){ 'use strict'; var japanese = ['あいこくしん', 'あいさつ', 'あいだ', 'あおぞら', 'あかちゃん', 'あきる', 'あけがた', 'あける', 'あこがれる', 'あさい', 'あさひ', 'あしあと', 'あじわう', 'あずかる', 'あずき', 'あそぶ', 'あたえる', 'あたためる', 'あたりまえ', 'あたる', 'あつい', 'あつかう', 'あっしゅく', 'あつまり', 'あつめる', 'あてな', 'あてはまる', 'あひる', 'あぶら', 'あぶる', 'あふれる', 'あまい', 'あまど', 'あまやかす', 'あまり', 'あみもの', 'あめりか', 'あやまる', 'あゆむ', 'あらいぐま', 'あらし', 'あらすじ', 'あらためる', 'あらゆる', 'あらわす', 'ありがとう', 'あわせる', 'あわてる', 'あんい', 'あんがい', 'あんこ', 'あんぜん', 'あんてい', 'あんない', 'あんまり', 'いいだす', 'いおん', 'いがい', 'いがく', 'いきおい', 'いきなり', 'いきもの', 'いきる', 'いくじ', 'いくぶん', 'いけばな', 'いけん', 'いこう', 'いこく', 'いこつ', 'いさましい', 'いさん', 'いしき', 'いじゅう', 'いじょう', 'いじわる', 'いずみ', 'いずれ', 'いせい', 'いせえび', 'いせかい', 'いせき', 'いぜん', 'いそうろう', 'いそがしい', 'いだい', 'いだく', 'いたずら', 'いたみ', 'いたりあ', 'いちおう', 'いちじ', 'いちど', 'いちば', 'いちぶ', 'いちりゅう', 'いつか', 'いっしゅん', 'いっせい', 'いっそう', 'いったん', 'いっち', 'いってい', 'いっぽう', 'いてざ', 'いてん', 'いどう', 'いとこ', 'いない', 'いなか', 'いねむり', 'いのち', 'いのる', 'いはつ', 'いばる', 'いはん', 'いびき', 'いひん', 'いふく', 'いへん', 'いほう', 'いみん', 'いもうと', 'いもたれ', 'いもり', 'いやがる', 'いやす', 'いよかん', 'いよく', 'いらい', 'いらすと', 'いりぐち', 'いりょう', 'いれい', 'いれもの', 'いれる', 'いろえんぴつ', 'いわい', 'いわう', 'いわかん', 'いわば', 'いわゆる', 'いんげんまめ', 'いんさつ', 'いんしょう', 'いんよう', 'うえき', 'うえる', 'うおざ', 'うがい', 'うかぶ', 'うかべる', 'うきわ', 'うくらいな', 'うくれれ', 'うけたまわる', 'うけつけ', 'うけとる', 'うけもつ', 'うける', 'うごかす', 'うごく', 'うこん', 'うさぎ', 'うしなう', 'うしろがみ', 'うすい', 'うすぎ', 'うすぐらい', 'うすめる', 'うせつ', 'うちあわせ', 'うちがわ', 'うちき', 'うちゅう', 'うっかり', 'うつくしい', 'うったえる', 'うつる', 'うどん', 'うなぎ', 'うなじ', 'うなずく', 'うなる', 'うねる', 'うのう', 'うぶげ', 'うぶごえ', 'うまれる', 'うめる', 'うもう', 'うやまう', 'うよく', 'うらがえす', 'うらぐち', 'うらない', 'うりあげ', 'うりきれ', 'うるさい', 'うれしい', 'うれゆき', 'うれる', 'うろこ', 'うわき', 'うわさ', 'うんこう', 'うんちん', 'うんてん', 'うんどう', 'えいえん', 'えいが', 'えいきょう', 'えいご', 'えいせい', 'えいぶん', 'えいよう', 'えいわ', 'えおり', 'えがお', 'えがく', 'えきたい', 'えくせる', 'えしゃく', 'えすて', 'えつらん', 'えのぐ', 'えほうまき', 'えほん', 'えまき', 'えもじ', 'えもの', 'えらい', 'えらぶ', 'えりあ', 'えんえん', 'えんかい', 'えんぎ', 'えんげき', 'えんしゅう', 'えんぜつ', 'えんそく', 'えんちょう', 'えんとつ', 'おいかける', 'おいこす', 'おいしい', 'おいつく', 'おうえん', 'おうさま', 'おうじ', 'おうせつ', 'おうたい', 'おうふく', 'おうべい', 'おうよう', 'おえる', 'おおい', 'おおう', 'おおどおり', 'おおや', 'おおよそ', 'おかえり', 'おかず', 'おがむ', 'おかわり', 'おぎなう', 'おきる', 'おくさま', 'おくじょう', 'おくりがな', 'おくる', 'おくれる', 'おこす', 'おこなう', 'おこる', 'おさえる', 'おさない', 'おさめる', 'おしいれ', 'おしえる', 'おじぎ', 'おじさん', 'おしゃれ', 'おそらく', 'おそわる', 'おたがい', 'おたく', 'おだやか', 'おちつく', 'おっと', 'おつり', 'おでかけ', 'おとしもの', 'おとなしい', 'おどり', 'おどろかす', 'おばさん', 'おまいり', 'おめでとう', 'おもいで', 'おもう', 'おもたい', 'おもちゃ', 'おやつ', 'おやゆび', 'およぼす', 'おらんだ', 'おろす', 'おんがく', 'おんけい', 'おんしゃ', 'おんせん', 'おんだん', 'おんちゅう', 'おんどけい', 'かあつ', 'かいが', 'がいき', 'がいけん', 'がいこう', 'かいさつ', 'かいしゃ', 'かいすいよく', 'かいぜん', 'かいぞうど', 'かいつう', 'かいてん', 'かいとう', 'かいふく', 'がいへき', 'かいほう', 'かいよう', 'がいらい', 'かいわ', 'かえる', 'かおり', 'かかえる', 'かがく', 'かがし', 'かがみ', 'かくご', 'かくとく', 'かざる', 'がぞう', 'かたい', 'かたち', 'がちょう', 'がっきゅう', 'がっこう', 'がっさん', 'がっしょう', 'かなざわし', 'かのう', 'がはく', 'かぶか', 'かほう', 'かほご', 'かまう', 'かまぼこ', 'かめれおん', 'かゆい', 'かようび', 'からい', 'かるい', 'かろう', 'かわく', 'かわら', 'がんか', 'かんけい', 'かんこう', 'かんしゃ', 'かんそう', 'かんたん', 'かんち', 'がんばる', 'きあい', 'きあつ', 'きいろ', 'ぎいん', 'きうい', 'きうん', 'きえる', 'きおう', 'きおく', 'きおち', 'きおん', 'きかい', 'きかく', 'きかんしゃ', 'ききて', 'きくばり', 'きくらげ', 'きけんせい', 'きこう', 'きこえる', 'きこく', 'きさい', 'きさく', 'きさま', 'きさらぎ', 'ぎじかがく', 'ぎしき', 'ぎじたいけん', 'ぎじにってい', 'ぎじゅつしゃ', 'きすう', 'きせい', 'きせき', 'きせつ', 'きそう', 'きぞく', 'きぞん', 'きたえる', 'きちょう', 'きつえん', 'ぎっちり', 'きつつき', 'きつね', 'きてい', 'きどう', 'きどく', 'きない', 'きなが', 'きなこ', 'きぬごし', 'きねん', 'きのう', 'きのした', 'きはく', 'きびしい', 'きひん', 'きふく', 'きぶん', 'きぼう', 'きほん', 'きまる', 'きみつ', 'きむずかしい', 'きめる', 'きもだめし', 'きもち', 'きもの', 'きゃく', 'きやく', 'ぎゅうにく', 'きよう', 'きょうりゅう', 'きらい', 'きらく', 'きりん', 'きれい', 'きれつ', 'きろく', 'ぎろん', 'きわめる', 'ぎんいろ', 'きんかくじ', 'きんじょ', 'きんようび', 'ぐあい', 'くいず', 'くうかん', 'くうき', 'くうぐん', 'くうこう', 'ぐうせい', 'くうそう', 'ぐうたら', 'くうふく', 'くうぼ', 'くかん', 'くきょう', 'くげん', 'ぐこう', 'くさい', 'くさき', 'くさばな', 'くさる', 'くしゃみ', 'くしょう', 'くすのき', 'くすりゆび', 'くせげ', 'くせん', 'ぐたいてき', 'くださる', 'くたびれる', 'くちこみ', 'くちさき', 'くつした', 'ぐっすり', 'くつろぐ', 'くとうてん', 'くどく', 'くなん', 'くねくね', 'くのう', 'くふう', 'くみあわせ', 'くみたてる', 'くめる', 'くやくしょ', 'くらす', 'くらべる', 'くるま', 'くれる', 'くろう', 'くわしい', 'ぐんかん', 'ぐんしょく', 'ぐんたい', 'ぐんて', 'けあな', 'けいかく', 'けいけん', 'けいこ', 'けいさつ', 'げいじゅつ', 'けいたい', 'げいのうじん', 'けいれき', 'けいろ', 'けおとす', 'けおりもの', 'げきか', 'げきげん', 'げきだん', 'げきちん', 'げきとつ', 'げきは', 'げきやく', 'げこう', 'げこくじょう', 'げざい', 'けさき', 'げざん', 'けしき', 'けしごむ', 'けしょう', 'げすと', 'けたば', 'けちゃっぷ', 'けちらす', 'けつあつ', 'けつい', 'けつえき', 'けっこん', 'けつじょ', 'けっせき', 'けってい', 'けつまつ', 'げつようび', 'げつれい', 'けつろん', 'げどく', 'けとばす', 'けとる', 'けなげ', 'けなす', 'けなみ', 'けぬき', 'げねつ', 'けねん', 'けはい', 'げひん', 'けぶかい', 'げぼく', 'けまり', 'けみかる', 'けむし', 'けむり', 'けもの', 'けらい', 'けろけろ', 'けわしい', 'けんい', 'けんえつ', 'けんお', 'けんか', 'げんき', 'けんげん', 'けんこう', 'けんさく', 'けんしゅう', 'けんすう', 'げんそう', 'けんちく', 'けんてい', 'けんとう', 'けんない', 'けんにん', 'げんぶつ', 'けんま', 'けんみん', 'けんめい', 'けんらん', 'けんり', 'こあくま', 'こいぬ', 'こいびと', 'ごうい', 'こうえん', 'こうおん', 'こうかん', 'ごうきゅう', 'ごうけい', 'こうこう', 'こうさい', 'こうじ', 'こうすい', 'ごうせい', 'こうそく', 'こうたい', 'こうちゃ', 'こうつう', 'こうてい', 'こうどう', 'こうない', 'こうはい', 'ごうほう', 'ごうまん', 'こうもく', 'こうりつ', 'こえる', 'こおり', 'ごかい', 'ごがつ', 'ごかん', 'こくご', 'こくさい', 'こくとう', 'こくない', 'こくはく', 'こぐま', 'こけい', 'こける', 'ここのか', 'こころ', 'こさめ', 'こしつ', 'こすう', 'こせい', 'こせき', 'こぜん', 'こそだて', 'こたい', 'こたえる', 'こたつ', 'こちょう', 'こっか', 'こつこつ', 'こつばん', 'こつぶ', 'こてい', 'こてん', 'ことがら', 'ことし', 'ことば', 'ことり', 'こなごな', 'こねこね', 'このまま', 'このみ', 'このよ', 'ごはん', 'こひつじ', 'こふう', 'こふん', 'こぼれる', 'ごまあぶら', 'こまかい', 'ごますり', 'こまつな', 'こまる', 'こむぎこ', 'こもじ', 'こもち', 'こもの', 'こもん', 'こやく', 'こやま', 'こゆう', 'こゆび', 'こよい', 'こよう', 'こりる', 'これくしょん', 'ころっけ', 'こわもて', 'こわれる', 'こんいん', 'こんかい', 'こんき', 'こんしゅう', 'こんすい', 'こんだて', 'こんとん', 'こんなん', 'こんびに', 'こんぽん', 'こんまけ', 'こんや', 'こんれい', 'こんわく', 'ざいえき', 'さいかい', 'さいきん', 'ざいげん', 'ざいこ', 'さいしょ', 'さいせい', 'ざいたく', 'ざいちゅう', 'さいてき', 'ざいりょう', 'さうな', 'さかいし', 'さがす', 'さかな', 'さかみち', 'さがる', 'さぎょう', 'さくし', 'さくひん', 'さくら', 'さこく', 'さこつ', 'さずかる', 'ざせき', 'さたん', 'さつえい', 'ざつおん', 'ざっか', 'ざつがく', 'さっきょく', 'ざっし', 'さつじん', 'ざっそう', 'さつたば', 'さつまいも', 'さてい', 'さといも', 'さとう', 'さとおや', 'さとし', 'さとる', 'さのう', 'さばく', 'さびしい', 'さべつ', 'さほう', 'さほど', 'さます', 'さみしい', 'さみだれ', 'さむけ', 'さめる', 'さやえんどう', 'さゆう', 'さよう', 'さよく', 'さらだ', 'ざるそば', 'さわやか', 'さわる', 'さんいん', 'さんか', 'さんきゃく', 'さんこう', 'さんさい', 'ざんしょ', 'さんすう', 'さんせい', 'さんそ', 'さんち', 'さんま', 'さんみ', 'さんらん', 'しあい', 'しあげ', 'しあさって', 'しあわせ', 'しいく', 'しいん', 'しうち', 'しえい', 'しおけ', 'しかい', 'しかく', 'じかん', 'しごと', 'しすう', 'じだい', 'したうけ', 'したぎ', 'したて', 'したみ', 'しちょう', 'しちりん', 'しっかり', 'しつじ', 'しつもん', 'してい', 'してき', 'してつ', 'じてん', 'じどう', 'しなぎれ', 'しなもの', 'しなん', 'しねま', 'しねん', 'しのぐ', 'しのぶ', 'しはい', 'しばかり', 'しはつ', 'しはらい', 'しはん', 'しひょう', 'しふく', 'じぶん', 'しへい', 'しほう', 'しほん', 'しまう', 'しまる', 'しみん', 'しむける', 'じむしょ', 'しめい', 'しめる', 'しもん', 'しゃいん', 'しゃうん', 'しゃおん', 'じゃがいも', 'しやくしょ', 'しゃくほう', 'しゃけん', 'しゃこ', 'しゃざい', 'しゃしん', 'しゃせん', 'しゃそう', 'しゃたい', 'しゃちょう', 'しゃっきん', 'じゃま', 'しゃりん', 'しゃれい', 'じゆう', 'じゅうしょ', 'しゅくはく', 'じゅしん', 'しゅっせき', 'しゅみ', 'しゅらば', 'じゅんばん', 'しょうかい', 'しょくたく', 'しょっけん', 'しょどう', 'しょもつ', 'しらせる', 'しらべる', 'しんか', 'しんこう', 'じんじゃ', 'しんせいじ', 'しんちく', 'しんりん', 'すあげ', 'すあし', 'すあな', 'ずあん', 'すいえい', 'すいか', 'すいとう', 'ずいぶん', 'すいようび', 'すうがく', 'すうじつ', 'すうせん', 'すおどり', 'すきま', 'すくう', 'すくない', 'すける', 'すごい', 'すこし', 'ずさん', 'すずしい', 'すすむ', 'すすめる', 'すっかり', 'ずっしり', 'ずっと', 'すてき', 'すてる', 'すねる', 'すのこ', 'すはだ', 'すばらしい', 'ずひょう', 'ずぶぬれ', 'すぶり', 'すふれ', 'すべて', 'すべる', 'ずほう', 'すぼん', 'すまい', 'すめし', 'すもう', 'すやき', 'すらすら', 'するめ', 'すれちがう', 'すろっと', 'すわる', 'すんぜん', 'すんぽう', 'せあぶら', 'せいかつ', 'せいげん', 'せいじ', 'せいよう', 'せおう', 'せかいかん', 'せきにん', 'せきむ', 'せきゆ', 'せきらんうん', 'せけん', 'せこう', 'せすじ', 'せたい', 'せたけ', 'せっかく', 'せっきゃく', 'ぜっく', 'せっけん', 'せっこつ', 'せっさたくま', 'せつぞく', 'せつだん', 'せつでん', 'せっぱん', 'せつび', 'せつぶん', 'せつめい', 'せつりつ', 'せなか', 'せのび', 'せはば', 'せびろ', 'せぼね', 'せまい', 'せまる', 'せめる', 'せもたれ', 'せりふ', 'ぜんあく', 'せんい', 'せんえい', 'せんか', 'せんきょ', 'せんく', 'せんげん', 'ぜんご', 'せんさい', 'せんしゅ', 'せんすい', 'せんせい', 'せんぞ', 'せんたく', 'せんちょう', 'せんてい', 'せんとう', 'せんぬき', 'せんねん', 'せんぱい', 'ぜんぶ', 'ぜんぽう', 'せんむ', 'せんめんじょ', 'せんもん', 'せんやく', 'せんゆう', 'せんよう', 'ぜんら', 'ぜんりゃく', 'せんれい', 'せんろ', 'そあく', 'そいとげる', 'そいね', 'そうがんきょう', 'そうき', 'そうご', 'そうしん', 'そうだん', 'そうなん', 'そうび', 'そうめん', 'そうり', 'そえもの', 'そえん', 'そがい', 'そげき', 'そこう', 'そこそこ', 'そざい', 'そしな', 'そせい', 'そせん', 'そそぐ', 'そだてる', 'そつう', 'そつえん', 'そっかん', 'そつぎょう', 'そっけつ', 'そっこう', 'そっせん', 'そっと', 'そとがわ', 'そとづら', 'そなえる', 'そなた', 'そふぼ', 'そぼく', 'そぼろ', 'そまつ', 'そまる', 'そむく', 'そむりえ', 'そめる', 'そもそも', 'そよかぜ', 'そらまめ', 'そろう', 'そんかい', 'そんけい', 'そんざい', 'そんしつ', 'そんぞく', 'そんちょう', 'ぞんび', 'ぞんぶん', 'そんみん', 'たあい', 'たいいん', 'たいうん', 'たいえき', 'たいおう', 'だいがく', 'たいき', 'たいぐう', 'たいけん', 'たいこ', 'たいざい', 'だいじょうぶ', 'だいすき', 'たいせつ', 'たいそう', 'だいたい', 'たいちょう', 'たいてい', 'だいどころ', 'たいない', 'たいねつ', 'たいのう', 'たいはん', 'だいひょう', 'たいふう', 'たいへん', 'たいほ', 'たいまつばな', 'たいみんぐ', 'たいむ', 'たいめん', 'たいやき', 'たいよう', 'たいら', 'たいりょく', 'たいる', 'たいわん', 'たうえ', 'たえる', 'たおす', 'たおる', 'たおれる', 'たかい', 'たかね', 'たきび', 'たくさん', 'たこく', 'たこやき', 'たさい', 'たしざん', 'だじゃれ', 'たすける', 'たずさわる', 'たそがれ', 'たたかう', 'たたく', 'ただしい', 'たたみ', 'たちばな', 'だっかい', 'だっきゃく', 'だっこ', 'だっしゅつ', 'だったい', 'たてる', 'たとえる', 'たなばた', 'たにん', 'たぬき', 'たのしみ', 'たはつ', 'たぶん', 'たべる', 'たぼう', 'たまご', 'たまる', 'だむる', 'ためいき', 'ためす', 'ためる', 'たもつ', 'たやすい', 'たよる', 'たらす', 'たりきほんがん', 'たりょう', 'たりる', 'たると', 'たれる', 'たれんと', 'たろっと', 'たわむれる', 'だんあつ', 'たんい', 'たんおん', 'たんか', 'たんき', 'たんけん', 'たんご', 'たんさん', 'たんじょうび', 'だんせい', 'たんそく', 'たんたい', 'だんち', 'たんてい', 'たんとう', 'だんな', 'たんにん', 'だんねつ', 'たんのう', 'たんぴん', 'だんぼう', 'たんまつ', 'たんめい', 'だんれつ', 'だんろ', 'だんわ', 'ちあい', 'ちあん', 'ちいき', 'ちいさい', 'ちえん', 'ちかい', 'ちから', 'ちきゅう', 'ちきん', 'ちけいず', 'ちけん', 'ちこく', 'ちさい', 'ちしき', 'ちしりょう', 'ちせい', 'ちそう', 'ちたい', 'ちたん', 'ちちおや', 'ちつじょ', 'ちてき', 'ちてん', 'ちぬき', 'ちぬり', 'ちのう', 'ちひょう', 'ちへいせん', 'ちほう', 'ちまた', 'ちみつ', 'ちみどろ', 'ちめいど', 'ちゃんこなべ', 'ちゅうい', 'ちゆりょく', 'ちょうし', 'ちょさくけん', 'ちらし', 'ちらみ', 'ちりがみ', 'ちりょう', 'ちるど', 'ちわわ', 'ちんたい', 'ちんもく', 'ついか', 'ついたち', 'つうか', 'つうじょう', 'つうはん', 'つうわ', 'つかう', 'つかれる', 'つくね', 'つくる', 'つけね', 'つける', 'つごう', 'つたえる', 'つづく', 'つつじ', 'つつむ', 'つとめる', 'つながる', 'つなみ', 'つねづね', 'つのる', 'つぶす', 'つまらない', 'つまる', 'つみき', 'つめたい', 'つもり', 'つもる', 'つよい', 'つるぼ', 'つるみく', 'つわもの', 'つわり', 'てあし', 'てあて', 'てあみ', 'ていおん', 'ていか', 'ていき', 'ていけい', 'ていこく', 'ていさつ', 'ていし', 'ていせい', 'ていたい', 'ていど', 'ていねい', 'ていひょう', 'ていへん', 'ていぼう', 'てうち', 'ておくれ', 'てきとう', 'てくび', 'でこぼこ', 'てさぎょう', 'てさげ', 'てすり', 'てそう', 'てちがい', 'てちょう', 'てつがく', 'てつづき', 'でっぱ', 'てつぼう', 'てつや', 'でぬかえ', 'てぬき', 'てぬぐい', 'てのひら', 'てはい', 'てぶくろ', 'てふだ', 'てほどき', 'てほん', 'てまえ', 'てまきずし', 'てみじか', 'てみやげ', 'てらす', 'てれび', 'てわけ', 'てわたし', 'でんあつ', 'てんいん', 'てんかい', 'てんき', 'てんぐ', 'てんけん', 'てんごく', 'てんさい', 'てんし', 'てんすう', 'でんち', 'てんてき', 'てんとう', 'てんない', 'てんぷら', 'てんぼうだい', 'てんめつ', 'てんらんかい', 'でんりょく', 'でんわ', 'どあい', 'といれ', 'どうかん', 'とうきゅう', 'どうぐ', 'とうし', 'とうむぎ', 'とおい', 'とおか', 'とおく', 'とおす', 'とおる', 'とかい', 'とかす', 'ときおり', 'ときどき', 'とくい', 'とくしゅう', 'とくてん', 'とくに', 'とくべつ', 'とけい', 'とける', 'とこや', 'とさか', 'としょかん', 'とそう', 'とたん', 'とちゅう', 'とっきゅう', 'とっくん', 'とつぜん', 'とつにゅう', 'とどける', 'ととのえる', 'とない', 'となえる', 'となり', 'とのさま', 'とばす', 'どぶがわ', 'とほう', 'とまる', 'とめる', 'ともだち', 'ともる', 'どようび', 'とらえる', 'とんかつ', 'どんぶり', 'ないかく', 'ないこう', 'ないしょ', 'ないす', 'ないせん', 'ないそう', 'なおす', 'ながい', 'なくす', 'なげる', 'なこうど', 'なさけ', 'なたでここ', 'なっとう', 'なつやすみ', 'ななおし', 'なにごと', 'なにもの', 'なにわ', 'なのか', 'なふだ', 'なまいき', 'なまえ', 'なまみ', 'なみだ', 'なめらか', 'なめる', 'なやむ', 'ならう', 'ならび', 'ならぶ', 'なれる', 'なわとび', 'なわばり', 'にあう', 'にいがた', 'にうけ', 'におい', 'にかい', 'にがて', 'にきび', 'にくしみ', 'にくまん', 'にげる', 'にさんかたんそ', 'にしき', 'にせもの', 'にちじょう', 'にちようび', 'にっか', 'にっき', 'にっけい', 'にっこう', 'にっさん', 'にっしょく', 'にっすう', 'にっせき', 'にってい', 'になう', 'にほん', 'にまめ', 'にもつ', 'にやり', 'にゅういん', 'にりんしゃ', 'にわとり', 'にんい', 'にんか', 'にんき', 'にんげん', 'にんしき', 'にんずう', 'にんそう', 'にんたい', 'にんち', 'にんてい', 'にんにく', 'にんぷ', 'にんまり', 'にんむ', 'にんめい', 'にんよう', 'ぬいくぎ', 'ぬかす', 'ぬぐいとる', 'ぬぐう', 'ぬくもり', 'ぬすむ', 'ぬまえび', 'ぬめり', 'ぬらす', 'ぬんちゃく', 'ねあげ', 'ねいき', 'ねいる', 'ねいろ', 'ねぐせ', 'ねくたい', 'ねくら', 'ねこぜ', 'ねこむ', 'ねさげ', 'ねすごす', 'ねそべる', 'ねだん', 'ねつい', 'ねっしん', 'ねつぞう', 'ねったいぎょ', 'ねぶそく', 'ねふだ', 'ねぼう', 'ねほりはほり', 'ねまき', 'ねまわし', 'ねみみ', 'ねむい', 'ねむたい', 'ねもと', 'ねらう', 'ねわざ', 'ねんいり', 'ねんおし', 'ねんかん', 'ねんきん', 'ねんぐ', 'ねんざ', 'ねんし', 'ねんちゃく', 'ねんど', 'ねんぴ', 'ねんぶつ', 'ねんまつ', 'ねんりょう', 'ねんれい', 'のいず', 'のおづま', 'のがす', 'のきなみ', 'のこぎり', 'のこす', 'のこる', 'のせる', 'のぞく', 'のぞむ', 'のたまう', 'のちほど', 'のっく', 'のばす', 'のはら', 'のべる', 'のぼる', 'のみもの', 'のやま', 'のらいぬ', 'のらねこ', 'のりもの', 'のりゆき', 'のれん', 'のんき', 'ばあい', 'はあく', 'ばあさん', 'ばいか', 'ばいく', 'はいけん', 'はいご', 'はいしん', 'はいすい', 'はいせん', 'はいそう', 'はいち', 'ばいばい', 'はいれつ', 'はえる', 'はおる', 'はかい', 'ばかり', 'はかる', 'はくしゅ', 'はけん', 'はこぶ', 'はさみ', 'はさん', 'はしご', 'ばしょ', 'はしる', 'はせる', 'ぱそこん', 'はそん', 'はたん', 'はちみつ', 'はつおん', 'はっかく', 'はづき', 'はっきり', 'はっくつ', 'はっけん', 'はっこう', 'はっさん', 'はっしん', 'はったつ', 'はっちゅう', 'はってん', 'はっぴょう', 'はっぽう', 'はなす', 'はなび', 'はにかむ', 'はぶらし', 'はみがき', 'はむかう', 'はめつ', 'はやい', 'はやし', 'はらう', 'はろうぃん', 'はわい', 'はんい', 'はんえい', 'はんおん', 'はんかく', 'はんきょう', 'ばんぐみ', 'はんこ', 'はんしゃ', 'はんすう', 'はんだん', 'ぱんち', 'ぱんつ', 'はんてい', 'はんとし', 'はんのう', 'はんぱ', 'はんぶん', 'はんぺん', 'はんぼうき', 'はんめい', 'はんらん', 'はんろん', 'ひいき', 'ひうん', 'ひえる', 'ひかく', 'ひかり', 'ひかる', 'ひかん', 'ひくい', 'ひけつ', 'ひこうき', 'ひこく', 'ひさい', 'ひさしぶり', 'ひさん', 'びじゅつかん', 'ひしょ', 'ひそか', 'ひそむ', 'ひたむき', 'ひだり', 'ひたる', 'ひつぎ', 'ひっこし', 'ひっし', 'ひつじゅひん', 'ひっす', 'ひつぜん', 'ぴったり', 'ぴっちり', 'ひつよう', 'ひてい', 'ひとごみ', 'ひなまつり', 'ひなん', 'ひねる', 'ひはん', 'ひびく', 'ひひょう', 'ひほう', 'ひまわり', 'ひまん', 'ひみつ', 'ひめい', 'ひめじし', 'ひやけ', 'ひやす', 'ひよう', 'びょうき', 'ひらがな', 'ひらく', 'ひりつ', 'ひりょう', 'ひるま', 'ひるやすみ', 'ひれい', 'ひろい', 'ひろう', 'ひろき', 'ひろゆき', 'ひんかく', 'ひんけつ', 'ひんこん', 'ひんしゅ', 'ひんそう', 'ぴんち', 'ひんぱん', 'びんぼう', 'ふあん', 'ふいうち', 'ふうけい', 'ふうせん', 'ぷうたろう', 'ふうとう', 'ふうふ', 'ふえる', 'ふおん', 'ふかい', 'ふきん', 'ふくざつ', 'ふくぶくろ', 'ふこう', 'ふさい', 'ふしぎ', 'ふじみ', 'ふすま', 'ふせい', 'ふせぐ', 'ふそく', 'ぶたにく', 'ふたん', 'ふちょう', 'ふつう', 'ふつか', 'ふっかつ', 'ふっき', 'ふっこく', 'ぶどう', 'ふとる', 'ふとん', 'ふのう', 'ふはい', 'ふひょう', 'ふへん', 'ふまん', 'ふみん', 'ふめつ', 'ふめん', 'ふよう', 'ふりこ', 'ふりる', 'ふるい', 'ふんいき', 'ぶんがく', 'ぶんぐ', 'ふんしつ', 'ぶんせき', 'ふんそう', 'ぶんぽう', 'へいあん', 'へいおん', 'へいがい', 'へいき', 'へいげん', 'へいこう', 'へいさ', 'へいしゃ', 'へいせつ', 'へいそ', 'へいたく', 'へいてん', 'へいねつ', 'へいわ', 'へきが', 'へこむ', 'べにいろ', 'べにしょうが', 'へらす', 'へんかん', 'べんきょう', 'べんごし', 'へんさい', 'へんたい', 'べんり', 'ほあん', 'ほいく', 'ぼうぎょ', 'ほうこく', 'ほうそう', 'ほうほう', 'ほうもん', 'ほうりつ', 'ほえる', 'ほおん', 'ほかん', 'ほきょう', 'ぼきん', 'ほくろ', 'ほけつ', 'ほけん', 'ほこう', 'ほこる', 'ほしい', 'ほしつ', 'ほしゅ', 'ほしょう', 'ほせい', 'ほそい', 'ほそく', 'ほたて', 'ほたる', 'ぽちぶくろ', 'ほっきょく', 'ほっさ', 'ほったん', 'ほとんど', 'ほめる', 'ほんい', 'ほんき', 'ほんけ', 'ほんしつ', 'ほんやく', 'まいにち', 'まかい', 'まかせる', 'まがる', 'まける', 'まこと', 'まさつ', 'まじめ', 'ますく', 'まぜる', 'まつり', 'まとめ', 'まなぶ', 'まぬけ', 'まねく', 'まほう', 'まもる', 'まゆげ', 'まよう', 'まろやか', 'まわす', 'まわり', 'まわる', 'まんが', 'まんきつ', 'まんぞく', 'まんなか', 'みいら', 'みうち', 'みえる', 'みがく', 'みかた', 'みかん', 'みけん', 'みこん', 'みじかい', 'みすい', 'みすえる', 'みせる', 'みっか', 'みつかる', 'みつける', 'みてい', 'みとめる', 'みなと', 'みなみかさい', 'みねらる', 'みのう', 'みのがす', 'みほん', 'みもと', 'みやげ', 'みらい', 'みりょく', 'みわく', 'みんか', 'みんぞく', 'むいか', 'むえき', 'むえん', 'むかい', 'むかう', 'むかえ', 'むかし', 'むぎちゃ', 'むける', 'むげん', 'むさぼる', 'むしあつい', 'むしば', 'むじゅん', 'むしろ', 'むすう', 'むすこ', 'むすぶ', 'むすめ', 'むせる', 'むせん', 'むちゅう', 'むなしい', 'むのう', 'むやみ', 'むよう', 'むらさき', 'むりょう', 'むろん', 'めいあん', 'めいうん', 'めいえん', 'めいかく', 'めいきょく', 'めいさい', 'めいし', 'めいそう', 'めいぶつ', 'めいれい', 'めいわく', 'めぐまれる', 'めざす', 'めした', 'めずらしい', 'めだつ', 'めまい', 'めやす', 'めんきょ', 'めんせき', 'めんどう', 'もうしあげる', 'もうどうけん', 'もえる', 'もくし', 'もくてき', 'もくようび', 'もちろん', 'もどる', 'もらう', 'もんく', 'もんだい', 'やおや', 'やける', 'やさい', 'やさしい', 'やすい', 'やすたろう', 'やすみ', 'やせる', 'やそう', 'やたい', 'やちん', 'やっと', 'やっぱり', 'やぶる', 'やめる', 'ややこしい', 'やよい', 'やわらかい', 'ゆうき', 'ゆうびんきょく', 'ゆうべ', 'ゆうめい', 'ゆけつ', 'ゆしゅつ', 'ゆせん', 'ゆそう', 'ゆたか', 'ゆちゃく', 'ゆでる', 'ゆにゅう', 'ゆびわ', 'ゆらい', 'ゆれる', 'ようい', 'ようか', 'ようきゅう', 'ようじ', 'ようす', 'ようちえん', 'よかぜ', 'よかん', 'よきん', 'よくせい', 'よくぼう', 'よけい', 'よごれる', 'よさん', 'よしゅう', 'よそう', 'よそく', 'よっか', 'よてい', 'よどがわく', 'よねつ', 'よやく', 'よゆう', 'よろこぶ', 'よろしい', 'らいう', 'らくがき', 'らくご', 'らくさつ', 'らくだ', 'らしんばん', 'らせん', 'らぞく', 'らたい', 'らっか', 'られつ', 'りえき', 'りかい', 'りきさく', 'りきせつ', 'りくぐん', 'りくつ', 'りけん', 'りこう', 'りせい', 'りそう', 'りそく', 'りてん', 'りねん', 'りゆう', 'りゅうがく', 'りよう', 'りょうり', 'りょかん', 'りょくちゃ', 'りょこう', 'りりく', 'りれき', 'りろん', 'りんご', 'るいけい', 'るいさい', 'るいじ', 'るいせき', 'るすばん', 'るりがわら', 'れいかん', 'れいぎ', 'れいせい', 'れいぞうこ', 'れいとう', 'れいぼう', 'れきし', 'れきだい', 'れんあい', 'れんけい', 'れんこん', 'れんさい', 'れんしゅう', 'れんぞく', 'れんらく', 'ろうか', 'ろうご', 'ろうじん', 'ろうそく', 'ろくが', 'ろこつ', 'ろじうら', 'ろしゅつ', 'ろせん', 'ろてん', 'ろめん', 'ろれつ', 'ろんぎ', 'ろんぱ', 'ろんぶん', 'ろんり', 'わかす', 'わかめ', 'わかやま', 'わかれる', 'わしつ', 'わじまし', 'わすれもの', 'わらう', 'われる']; module.exports = japanese; -},{}],95:[function(require,module,exports){ +},{}],97:[function(require,module,exports){ 'use strict'; var spanish = ['ábaco', 'abdomen', 'abeja', 'abierto', 'abogado', 'abono', 'aborto', 'abrazo', 'abrir', 'abuelo', 'abuso', 'acabar', 'academia', 'acceso', 'acción', 'aceite', 'acelga', 'acento', 'aceptar', 'ácido', 'aclarar', 'acné', 'acoger', 'acoso', 'activo', 'acto', 'actriz', 'actuar', 'acudir', 'acuerdo', 'acusar', 'adicto', 'admitir', 'adoptar', 'adorno', 'aduana', 'adulto', 'aéreo', 'afectar', 'afición', 'afinar', 'afirmar', 'ágil', 'agitar', 'agonía', 'agosto', 'agotar', 'agregar', 'agrio', 'agua', 'agudo', 'águila', 'aguja', 'ahogo', 'ahorro', 'aire', 'aislar', 'ajedrez', 'ajeno', 'ajuste', 'alacrán', 'alambre', 'alarma', 'alba', 'álbum', 'alcalde', 'aldea', 'alegre', 'alejar', 'alerta', 'aleta', 'alfiler', 'alga', 'algodón', 'aliado', 'aliento', 'alivio', 'alma', 'almeja', 'almíbar', 'altar', 'alteza', 'altivo', 'alto', 'altura', 'alumno', 'alzar', 'amable', 'amante', 'amapola', 'amargo', 'amasar', 'ámbar', 'ámbito', 'ameno', 'amigo', 'amistad', 'amor', 'amparo', 'amplio', 'ancho', 'anciano', 'ancla', 'andar', 'andén', 'anemia', 'ángulo', 'anillo', 'ánimo', 'anís', 'anotar', 'antena', 'antiguo', 'antojo', 'anual', 'anular', 'anuncio', 'añadir', 'añejo', 'año', 'apagar', 'aparato', 'apetito', 'apio', 'aplicar', 'apodo', 'aporte', 'apoyo', 'aprender', 'aprobar', 'apuesta', 'apuro', 'arado', 'araña', 'arar', 'árbitro', 'árbol', 'arbusto', 'archivo', 'arco', 'arder', 'ardilla', 'arduo', 'área', 'árido', 'aries', 'armonía', 'arnés', 'aroma', 'arpa', 'arpón', 'arreglo', 'arroz', 'arruga', 'arte', 'artista', 'asa', 'asado', 'asalto', 'ascenso', 'asegurar', 'aseo', 'asesor', 'asiento', 'asilo', 'asistir', 'asno', 'asombro', 'áspero', 'astilla', 'astro', 'astuto', 'asumir', 'asunto', 'atajo', 'ataque', 'atar', 'atento', 'ateo', 'ático', 'atleta', 'átomo', 'atraer', 'atroz', 'atún', 'audaz', 'audio', 'auge', 'aula', 'aumento', 'ausente', 'autor', 'aval', 'avance', 'avaro', 'ave', 'avellana', 'avena', 'avestruz', 'avión', 'aviso', 'ayer', 'ayuda', 'ayuno', 'azafrán', 'azar', 'azote', 'azúcar', 'azufre', 'azul', 'baba', 'babor', 'bache', 'bahía', 'baile', 'bajar', 'balanza', 'balcón', 'balde', 'bambú', 'banco', 'banda', 'baño', 'barba', 'barco', 'barniz', 'barro', 'báscula', 'bastón', 'basura', 'batalla', 'batería', 'batir', 'batuta', 'baúl', 'bazar', 'bebé', 'bebida', 'bello', 'besar', 'beso', 'bestia', 'bicho', 'bien', 'bingo', 'blanco', 'bloque', 'blusa', 'boa', 'bobina', 'bobo', 'boca', 'bocina', 'boda', 'bodega', 'boina', 'bola', 'bolero', 'bolsa', 'bomba', 'bondad', 'bonito', 'bono', 'bonsái', 'borde', 'borrar', 'bosque', 'bote', 'botín', 'bóveda', 'bozal', 'bravo', 'brazo', 'brecha', 'breve', 'brillo', 'brinco', 'brisa', 'broca', 'broma', 'bronce', 'brote', 'bruja', 'brusco', 'bruto', 'buceo', 'bucle', 'bueno', 'buey', 'bufanda', 'bufón', 'búho', 'buitre', 'bulto', 'burbuja', 'burla', 'burro', 'buscar', 'butaca', 'buzón', 'caballo', 'cabeza', 'cabina', 'cabra', 'cacao', 'cadáver', 'cadena', 'caer', 'café', 'caída', 'caimán', 'caja', 'cajón', 'cal', 'calamar', 'calcio', 'caldo', 'calidad', 'calle', 'calma', 'calor', 'calvo', 'cama', 'cambio', 'camello', 'camino', 'campo', 'cáncer', 'candil', 'canela', 'canguro', 'canica', 'canto', 'caña', 'cañón', 'caoba', 'caos', 'capaz', 'capitán', 'capote', 'captar', 'capucha', 'cara', 'carbón', 'cárcel', 'careta', 'carga', 'cariño', 'carne', 'carpeta', 'carro', 'carta', 'casa', 'casco', 'casero', 'caspa', 'castor', 'catorce', 'catre', 'caudal', 'causa', 'cazo', 'cebolla', 'ceder', 'cedro', 'celda', 'célebre', 'celoso', 'célula', 'cemento', 'ceniza', 'centro', 'cerca', 'cerdo', 'cereza', 'cero', 'cerrar', 'certeza', 'césped', 'cetro', 'chacal', 'chaleco', 'champú', 'chancla', 'chapa', 'charla', 'chico', 'chiste', 'chivo', 'choque', 'choza', 'chuleta', 'chupar', 'ciclón', 'ciego', 'cielo', 'cien', 'cierto', 'cifra', 'cigarro', 'cima', 'cinco', 'cine', 'cinta', 'ciprés', 'circo', 'ciruela', 'cisne', 'cita', 'ciudad', 'clamor', 'clan', 'claro', 'clase', 'clave', 'cliente', 'clima', 'clínica', 'cobre', 'cocción', 'cochino', 'cocina', 'coco', 'código', 'codo', 'cofre', 'coger', 'cohete', 'cojín', 'cojo', 'cola', 'colcha', 'colegio', 'colgar', 'colina', 'collar', 'colmo', 'columna', 'combate', 'comer', 'comida', 'cómodo', 'compra', 'conde', 'conejo', 'conga', 'conocer', 'consejo', 'contar', 'copa', 'copia', 'corazón', 'corbata', 'corcho', 'cordón', 'corona', 'correr', 'coser', 'cosmos', 'costa', 'cráneo', 'cráter', 'crear', 'crecer', 'creído', 'crema', 'cría', 'crimen', 'cripta', 'crisis', 'cromo', 'crónica', 'croqueta', 'crudo', 'cruz', 'cuadro', 'cuarto', 'cuatro', 'cubo', 'cubrir', 'cuchara', 'cuello', 'cuento', 'cuerda', 'cuesta', 'cueva', 'cuidar', 'culebra', 'culpa', 'culto', 'cumbre', 'cumplir', 'cuna', 'cuneta', 'cuota', 'cupón', 'cúpula', 'curar', 'curioso', 'curso', 'curva', 'cutis', 'dama', 'danza', 'dar', 'dardo', 'dátil', 'deber', 'débil', 'década', 'decir', 'dedo', 'defensa', 'definir', 'dejar', 'delfín', 'delgado', 'delito', 'demora', 'denso', 'dental', 'deporte', 'derecho', 'derrota', 'desayuno', 'deseo', 'desfile', 'desnudo', 'destino', 'desvío', 'detalle', 'detener', 'deuda', 'día', 'diablo', 'diadema', 'diamante', 'diana', 'diario', 'dibujo', 'dictar', 'diente', 'dieta', 'diez', 'difícil', 'digno', 'dilema', 'diluir', 'dinero', 'directo', 'dirigir', 'disco', 'diseño', 'disfraz', 'diva', 'divino', 'doble', 'doce', 'dolor', 'domingo', 'don', 'donar', 'dorado', 'dormir', 'dorso', 'dos', 'dosis', 'dragón', 'droga', 'ducha', 'duda', 'duelo', 'dueño', 'dulce', 'dúo', 'duque', 'durar', 'dureza', 'duro', 'ébano', 'ebrio', 'echar', 'eco', 'ecuador', 'edad', 'edición', 'edificio', 'editor', 'educar', 'efecto', 'eficaz', 'eje', 'ejemplo', 'elefante', 'elegir', 'elemento', 'elevar', 'elipse', 'élite', 'elixir', 'elogio', 'eludir', 'embudo', 'emitir', 'emoción', 'empate', 'empeño', 'empleo', 'empresa', 'enano', 'encargo', 'enchufe', 'encía', 'enemigo', 'enero', 'enfado', 'enfermo', 'engaño', 'enigma', 'enlace', 'enorme', 'enredo', 'ensayo', 'enseñar', 'entero', 'entrar', 'envase', 'envío', 'época', 'equipo', 'erizo', 'escala', 'escena', 'escolar', 'escribir', 'escudo', 'esencia', 'esfera', 'esfuerzo', 'espada', 'espejo', 'espía', 'esposa', 'espuma', 'esquí', 'estar', 'este', 'estilo', 'estufa', 'etapa', 'eterno', 'ética', 'etnia', 'evadir', 'evaluar', 'evento', 'evitar', 'exacto', 'examen', 'exceso', 'excusa', 'exento', 'exigir', 'exilio', 'existir', 'éxito', 'experto', 'explicar', 'exponer', 'extremo', 'fábrica', 'fábula', 'fachada', 'fácil', 'factor', 'faena', 'faja', 'falda', 'fallo', 'falso', 'faltar', 'fama', 'familia', 'famoso', 'faraón', 'farmacia', 'farol', 'farsa', 'fase', 'fatiga', 'fauna', 'favor', 'fax', 'febrero', 'fecha', 'feliz', 'feo', 'feria', 'feroz', 'fértil', 'fervor', 'festín', 'fiable', 'fianza', 'fiar', 'fibra', 'ficción', 'ficha', 'fideo', 'fiebre', 'fiel', 'fiera', 'fiesta', 'figura', 'fijar', 'fijo', 'fila', 'filete', 'filial', 'filtro', 'fin', 'finca', 'fingir', 'finito', 'firma', 'flaco', 'flauta', 'flecha', 'flor', 'flota', 'fluir', 'flujo', 'flúor', 'fobia', 'foca', 'fogata', 'fogón', 'folio', 'folleto', 'fondo', 'forma', 'forro', 'fortuna', 'forzar', 'fosa', 'foto', 'fracaso', 'frágil', 'franja', 'frase', 'fraude', 'freír', 'freno', 'fresa', 'frío', 'frito', 'fruta', 'fuego', 'fuente', 'fuerza', 'fuga', 'fumar', 'función', 'funda', 'furgón', 'furia', 'fusil', 'fútbol', 'futuro', 'gacela', 'gafas', 'gaita', 'gajo', 'gala', 'galería', 'gallo', 'gamba', 'ganar', 'gancho', 'ganga', 'ganso', 'garaje', 'garza', 'gasolina', 'gastar', 'gato', 'gavilán', 'gemelo', 'gemir', 'gen', 'género', 'genio', 'gente', 'geranio', 'gerente', 'germen', 'gesto', 'gigante', 'gimnasio', 'girar', 'giro', 'glaciar', 'globo', 'gloria', 'gol', 'golfo', 'goloso', 'golpe', 'goma', 'gordo', 'gorila', 'gorra', 'gota', 'goteo', 'gozar', 'grada', 'gráfico', 'grano', 'grasa', 'gratis', 'grave', 'grieta', 'grillo', 'gripe', 'gris', 'grito', 'grosor', 'grúa', 'grueso', 'grumo', 'grupo', 'guante', 'guapo', 'guardia', 'guerra', 'guía', 'guiño', 'guion', 'guiso', 'guitarra', 'gusano', 'gustar', 'haber', 'hábil', 'hablar', 'hacer', 'hacha', 'hada', 'hallar', 'hamaca', 'harina', 'haz', 'hazaña', 'hebilla', 'hebra', 'hecho', 'helado', 'helio', 'hembra', 'herir', 'hermano', 'héroe', 'hervir', 'hielo', 'hierro', 'hígado', 'higiene', 'hijo', 'himno', 'historia', 'hocico', 'hogar', 'hoguera', 'hoja', 'hombre', 'hongo', 'honor', 'honra', 'hora', 'hormiga', 'horno', 'hostil', 'hoyo', 'hueco', 'huelga', 'huerta', 'hueso', 'huevo', 'huida', 'huir', 'humano', 'húmedo', 'humilde', 'humo', 'hundir', 'huracán', 'hurto', 'icono', 'ideal', 'idioma', 'ídolo', 'iglesia', 'iglú', 'igual', 'ilegal', 'ilusión', 'imagen', 'imán', 'imitar', 'impar', 'imperio', 'imponer', 'impulso', 'incapaz', 'índice', 'inerte', 'infiel', 'informe', 'ingenio', 'inicio', 'inmenso', 'inmune', 'innato', 'insecto', 'instante', 'interés', 'íntimo', 'intuir', 'inútil', 'invierno', 'ira', 'iris', 'ironía', 'isla', 'islote', 'jabalí', 'jabón', 'jamón', 'jarabe', 'jardín', 'jarra', 'jaula', 'jazmín', 'jefe', 'jeringa', 'jinete', 'jornada', 'joroba', 'joven', 'joya', 'juerga', 'jueves', 'juez', 'jugador', 'jugo', 'juguete', 'juicio', 'junco', 'jungla', 'junio', 'juntar', 'júpiter', 'jurar', 'justo', 'juvenil', 'juzgar', 'kilo', 'koala', 'labio', 'lacio', 'lacra', 'lado', 'ladrón', 'lagarto', 'lágrima', 'laguna', 'laico', 'lamer', 'lámina', 'lámpara', 'lana', 'lancha', 'langosta', 'lanza', 'lápiz', 'largo', 'larva', 'lástima', 'lata', 'látex', 'latir', 'laurel', 'lavar', 'lazo', 'leal', 'lección', 'leche', 'lector', 'leer', 'legión', 'legumbre', 'lejano', 'lengua', 'lento', 'leña', 'león', 'leopardo', 'lesión', 'letal', 'letra', 'leve', 'leyenda', 'libertad', 'libro', 'licor', 'líder', 'lidiar', 'lienzo', 'liga', 'ligero', 'lima', 'límite', 'limón', 'limpio', 'lince', 'lindo', 'línea', 'lingote', 'lino', 'linterna', 'líquido', 'liso', 'lista', 'litera', 'litio', 'litro', 'llaga', 'llama', 'llanto', 'llave', 'llegar', 'llenar', 'llevar', 'llorar', 'llover', 'lluvia', 'lobo', 'loción', 'loco', 'locura', 'lógica', 'logro', 'lombriz', 'lomo', 'lonja', 'lote', 'lucha', 'lucir', 'lugar', 'lujo', 'luna', 'lunes', 'lupa', 'lustro', 'luto', 'luz', 'maceta', 'macho', 'madera', 'madre', 'maduro', 'maestro', 'mafia', 'magia', 'mago', 'maíz', 'maldad', 'maleta', 'malla', 'malo', 'mamá', 'mambo', 'mamut', 'manco', 'mando', 'manejar', 'manga', 'maniquí', 'manjar', 'mano', 'manso', 'manta', 'mañana', 'mapa', 'máquina', 'mar', 'marco', 'marea', 'marfil', 'margen', 'marido', 'mármol', 'marrón', 'martes', 'marzo', 'masa', 'máscara', 'masivo', 'matar', 'materia', 'matiz', 'matriz', 'máximo', 'mayor', 'mazorca', 'mecha', 'medalla', 'medio', 'médula', 'mejilla', 'mejor', 'melena', 'melón', 'memoria', 'menor', 'mensaje', 'mente', 'menú', 'mercado', 'merengue', 'mérito', 'mes', 'mesón', 'meta', 'meter', 'método', 'metro', 'mezcla', 'miedo', 'miel', 'miembro', 'miga', 'mil', 'milagro', 'militar', 'millón', 'mimo', 'mina', 'minero', 'mínimo', 'minuto', 'miope', 'mirar', 'misa', 'miseria', 'misil', 'mismo', 'mitad', 'mito', 'mochila', 'moción', 'moda', 'modelo', 'moho', 'mojar', 'molde', 'moler', 'molino', 'momento', 'momia', 'monarca', 'moneda', 'monja', 'monto', 'moño', 'morada', 'morder', 'moreno', 'morir', 'morro', 'morsa', 'mortal', 'mosca', 'mostrar', 'motivo', 'mover', 'móvil', 'mozo', 'mucho', 'mudar', 'mueble', 'muela', 'muerte', 'muestra', 'mugre', 'mujer', 'mula', 'muleta', 'multa', 'mundo', 'muñeca', 'mural', 'muro', 'músculo', 'museo', 'musgo', 'música', 'muslo', 'nácar', 'nación', 'nadar', 'naipe', 'naranja', 'nariz', 'narrar', 'nasal', 'natal', 'nativo', 'natural', 'náusea', 'naval', 'nave', 'navidad', 'necio', 'néctar', 'negar', 'negocio', 'negro', 'neón', 'nervio', 'neto', 'neutro', 'nevar', 'nevera', 'nicho', 'nido', 'niebla', 'nieto', 'niñez', 'niño', 'nítido', 'nivel', 'nobleza', 'noche', 'nómina', 'noria', 'norma', 'norte', 'nota', 'noticia', 'novato', 'novela', 'novio', 'nube', 'nuca', 'núcleo', 'nudillo', 'nudo', 'nuera', 'nueve', 'nuez', 'nulo', 'número', 'nutria', 'oasis', 'obeso', 'obispo', 'objeto', 'obra', 'obrero', 'observar', 'obtener', 'obvio', 'oca', 'ocaso', 'océano', 'ochenta', 'ocho', 'ocio', 'ocre', 'octavo', 'octubre', 'oculto', 'ocupar', 'ocurrir', 'odiar', 'odio', 'odisea', 'oeste', 'ofensa', 'oferta', 'oficio', 'ofrecer', 'ogro', 'oído', 'oír', 'ojo', 'ola', 'oleada', 'olfato', 'olivo', 'olla', 'olmo', 'olor', 'olvido', 'ombligo', 'onda', 'onza', 'opaco', 'opción', 'ópera', 'opinar', 'oponer', 'optar', 'óptica', 'opuesto', 'oración', 'orador', 'oral', 'órbita', 'orca', 'orden', 'oreja', 'órgano', 'orgía', 'orgullo', 'oriente', 'origen', 'orilla', 'oro', 'orquesta', 'oruga', 'osadía', 'oscuro', 'osezno', 'oso', 'ostra', 'otoño', 'otro', 'oveja', 'óvulo', 'óxido', 'oxígeno', 'oyente', 'ozono', 'pacto', 'padre', 'paella', 'página', 'pago', 'país', 'pájaro', 'palabra', 'palco', 'paleta', 'pálido', 'palma', 'paloma', 'palpar', 'pan', 'panal', 'pánico', 'pantera', 'pañuelo', 'papá', 'papel', 'papilla', 'paquete', 'parar', 'parcela', 'pared', 'parir', 'paro', 'párpado', 'parque', 'párrafo', 'parte', 'pasar', 'paseo', 'pasión', 'paso', 'pasta', 'pata', 'patio', 'patria', 'pausa', 'pauta', 'pavo', 'payaso', 'peatón', 'pecado', 'pecera', 'pecho', 'pedal', 'pedir', 'pegar', 'peine', 'pelar', 'peldaño', 'pelea', 'peligro', 'pellejo', 'pelo', 'peluca', 'pena', 'pensar', 'peñón', 'peón', 'peor', 'pepino', 'pequeño', 'pera', 'percha', 'perder', 'pereza', 'perfil', 'perico', 'perla', 'permiso', 'perro', 'persona', 'pesa', 'pesca', 'pésimo', 'pestaña', 'pétalo', 'petróleo', 'pez', 'pezuña', 'picar', 'pichón', 'pie', 'piedra', 'pierna', 'pieza', 'pijama', 'pilar', 'piloto', 'pimienta', 'pino', 'pintor', 'pinza', 'piña', 'piojo', 'pipa', 'pirata', 'pisar', 'piscina', 'piso', 'pista', 'pitón', 'pizca', 'placa', 'plan', 'plata', 'playa', 'plaza', 'pleito', 'pleno', 'plomo', 'pluma', 'plural', 'pobre', 'poco', 'poder', 'podio', 'poema', 'poesía', 'poeta', 'polen', 'policía', 'pollo', 'polvo', 'pomada', 'pomelo', 'pomo', 'pompa', 'poner', 'porción', 'portal', 'posada', 'poseer', 'posible', 'poste', 'potencia', 'potro', 'pozo', 'prado', 'precoz', 'pregunta', 'premio', 'prensa', 'preso', 'previo', 'primo', 'príncipe', 'prisión', 'privar', 'proa', 'probar', 'proceso', 'producto', 'proeza', 'profesor', 'programa', 'prole', 'promesa', 'pronto', 'propio', 'próximo', 'prueba', 'público', 'puchero', 'pudor', 'pueblo', 'puerta', 'puesto', 'pulga', 'pulir', 'pulmón', 'pulpo', 'pulso', 'puma', 'punto', 'puñal', 'puño', 'pupa', 'pupila', 'puré', 'quedar', 'queja', 'quemar', 'querer', 'queso', 'quieto', 'química', 'quince', 'quitar', 'rábano', 'rabia', 'rabo', 'ración', 'radical', 'raíz', 'rama', 'rampa', 'rancho', 'rango', 'rapaz', 'rápido', 'rapto', 'rasgo', 'raspa', 'rato', 'rayo', 'raza', 'razón', 'reacción', 'realidad', 'rebaño', 'rebote', 'recaer', 'receta', 'rechazo', 'recoger', 'recreo', 'recto', 'recurso', 'red', 'redondo', 'reducir', 'reflejo', 'reforma', 'refrán', 'refugio', 'regalo', 'regir', 'regla', 'regreso', 'rehén', 'reino', 'reír', 'reja', 'relato', 'relevo', 'relieve', 'relleno', 'reloj', 'remar', 'remedio', 'remo', 'rencor', 'rendir', 'renta', 'reparto', 'repetir', 'reposo', 'reptil', 'res', 'rescate', 'resina', 'respeto', 'resto', 'resumen', 'retiro', 'retorno', 'retrato', 'reunir', 'revés', 'revista', 'rey', 'rezar', 'rico', 'riego', 'rienda', 'riesgo', 'rifa', 'rígido', 'rigor', 'rincón', 'riñón', 'río', 'riqueza', 'risa', 'ritmo', 'rito', 'rizo', 'roble', 'roce', 'rociar', 'rodar', 'rodeo', 'rodilla', 'roer', 'rojizo', 'rojo', 'romero', 'romper', 'ron', 'ronco', 'ronda', 'ropa', 'ropero', 'rosa', 'rosca', 'rostro', 'rotar', 'rubí', 'rubor', 'rudo', 'rueda', 'rugir', 'ruido', 'ruina', 'ruleta', 'rulo', 'rumbo', 'rumor', 'ruptura', 'ruta', 'rutina', 'sábado', 'saber', 'sabio', 'sable', 'sacar', 'sagaz', 'sagrado', 'sala', 'saldo', 'salero', 'salir', 'salmón', 'salón', 'salsa', 'salto', 'salud', 'salvar', 'samba', 'sanción', 'sandía', 'sanear', 'sangre', 'sanidad', 'sano', 'santo', 'sapo', 'saque', 'sardina', 'sartén', 'sastre', 'satán', 'sauna', 'saxofón', 'sección', 'seco', 'secreto', 'secta', 'sed', 'seguir', 'seis', 'sello', 'selva', 'semana', 'semilla', 'senda', 'sensor', 'señal', 'señor', 'separar', 'sepia', 'sequía', 'ser', 'serie', 'sermón', 'servir', 'sesenta', 'sesión', 'seta', 'setenta', 'severo', 'sexo', 'sexto', 'sidra', 'siesta', 'siete', 'siglo', 'signo', 'sílaba', 'silbar', 'silencio', 'silla', 'símbolo', 'simio', 'sirena', 'sistema', 'sitio', 'situar', 'sobre', 'socio', 'sodio', 'sol', 'solapa', 'soldado', 'soledad', 'sólido', 'soltar', 'solución', 'sombra', 'sondeo', 'sonido', 'sonoro', 'sonrisa', 'sopa', 'soplar', 'soporte', 'sordo', 'sorpresa', 'sorteo', 'sostén', 'sótano', 'suave', 'subir', 'suceso', 'sudor', 'suegra', 'suelo', 'sueño', 'suerte', 'sufrir', 'sujeto', 'sultán', 'sumar', 'superar', 'suplir', 'suponer', 'supremo', 'sur', 'surco', 'sureño', 'surgir', 'susto', 'sutil', 'tabaco', 'tabique', 'tabla', 'tabú', 'taco', 'tacto', 'tajo', 'talar', 'talco', 'talento', 'talla', 'talón', 'tamaño', 'tambor', 'tango', 'tanque', 'tapa', 'tapete', 'tapia', 'tapón', 'taquilla', 'tarde', 'tarea', 'tarifa', 'tarjeta', 'tarot', 'tarro', 'tarta', 'tatuaje', 'tauro', 'taza', 'tazón', 'teatro', 'techo', 'tecla', 'técnica', 'tejado', 'tejer', 'tejido', 'tela', 'teléfono', 'tema', 'temor', 'templo', 'tenaz', 'tender', 'tener', 'tenis', 'tenso', 'teoría', 'terapia', 'terco', 'término', 'ternura', 'terror', 'tesis', 'tesoro', 'testigo', 'tetera', 'texto', 'tez', 'tibio', 'tiburón', 'tiempo', 'tienda', 'tierra', 'tieso', 'tigre', 'tijera', 'tilde', 'timbre', 'tímido', 'timo', 'tinta', 'tío', 'típico', 'tipo', 'tira', 'tirón', 'titán', 'títere', 'título', 'tiza', 'toalla', 'tobillo', 'tocar', 'tocino', 'todo', 'toga', 'toldo', 'tomar', 'tono', 'tonto', 'topar', 'tope', 'toque', 'tórax', 'torero', 'tormenta', 'torneo', 'toro', 'torpedo', 'torre', 'torso', 'tortuga', 'tos', 'tosco', 'toser', 'tóxico', 'trabajo', 'tractor', 'traer', 'tráfico', 'trago', 'traje', 'tramo', 'trance', 'trato', 'trauma', 'trazar', 'trébol', 'tregua', 'treinta', 'tren', 'trepar', 'tres', 'tribu', 'trigo', 'tripa', 'triste', 'triunfo', 'trofeo', 'trompa', 'tronco', 'tropa', 'trote', 'trozo', 'truco', 'trueno', 'trufa', 'tubería', 'tubo', 'tuerto', 'tumba', 'tumor', 'túnel', 'túnica', 'turbina', 'turismo', 'turno', 'tutor', 'ubicar', 'úlcera', 'umbral', 'unidad', 'unir', 'universo', 'uno', 'untar', 'uña', 'urbano', 'urbe', 'urgente', 'urna', 'usar', 'usuario', 'útil', 'utopía', 'uva', 'vaca', 'vacío', 'vacuna', 'vagar', 'vago', 'vaina', 'vajilla', 'vale', 'válido', 'valle', 'valor', 'válvula', 'vampiro', 'vara', 'variar', 'varón', 'vaso', 'vecino', 'vector', 'vehículo', 'veinte', 'vejez', 'vela', 'velero', 'veloz', 'vena', 'vencer', 'venda', 'veneno', 'vengar', 'venir', 'venta', 'venus', 'ver', 'verano', 'verbo', 'verde', 'vereda', 'verja', 'verso', 'verter', 'vía', 'viaje', 'vibrar', 'vicio', 'víctima', 'vida', 'vídeo', 'vidrio', 'viejo', 'viernes', 'vigor', 'vil', 'villa', 'vinagre', 'vino', 'viñedo', 'violín', 'viral', 'virgo', 'virtud', 'visor', 'víspera', 'vista', 'vitamina', 'viudo', 'vivaz', 'vivero', 'vivir', 'vivo', 'volcán', 'volumen', 'volver', 'voraz', 'votar', 'voto', 'voz', 'vuelo', 'vulgar', 'yacer', 'yate', 'yegua', 'yema', 'yerno', 'yeso', 'yodo', 'yoga', 'yogur', 'zafiro', 'zanja', 'zapato', 'zarza', 'zona', 'zorro', 'zumo', 'zurdo']; module.exports = spanish; -},{}],96:[function(require,module,exports){ -(function (root) { - "use strict"; +},{}],98:[function(require,module,exports){ +(function (module, exports) { -/***** unorm.js *****/ +'use strict'; -/* - * UnicodeNormalizer 1.0.0 - * Copyright (c) 2008 Matsuza - * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. - * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $ - * $Rev: 13309 $ - */ +// Utils - var DEFAULT_FEATURE = [null, 0, {}]; - var CACHE_THRESHOLD = 10; - var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28; - var NCount = VCount * TCount; // 588 - var SCount = LCount * NCount; // 11172 +function assert(val, msg) { + if (!val) + throw new Error(msg || 'Assertion failed'); +} - var UChar = function(cp, feature){ - this.codepoint = cp; - this.feature = feature; - }; +// Could use `inherits` module, but don't want to move from single file +// architecture yet. +function inherits(ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; +} - // Strategies - var cache = {}; - var cacheCounter = []; - for (var i = 0; i <= 0xFF; ++i){ - cacheCounter[i] = 0; - } +// BN - function fromCache(next, cp, needFeature){ - var ret = cache[cp]; - if(!ret){ - ret = next(cp, needFeature); - if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){ - cache[cp] = ret; - } - } - return ret; - } +function BN(number, base, endian) { + // May be `new BN(bn)` ? + if (number !== null && + typeof number === 'object' && + Array.isArray(number.words)) { + return number; + } - function fromData(next, cp, needFeature){ - var hash = cp & 0xFF00; - var dunit = UChar.udata[hash] || {}; - var f = dunit[cp]; - return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE); - } - function fromCpOnly(next, cp, needFeature){ - return !!needFeature ? next(cp, needFeature) : new UChar(cp, null); - } - function fromRuleBasedJamo(next, cp, needFeature){ - var j; - if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){ - return next(cp, needFeature); - } - if(LBase <= cp && cp < LBase + LCount){ - var c = {}; - var base = (cp - LBase) * VCount; - for (j = 0; j < VCount; ++j){ - c[VBase + j] = SBase + TCount * (j + base); - } - return new UChar(cp, [,,c]); - } + this.sign = false; + this.words = null; + this.length = 0; - var SIndex = cp - SBase; - var TIndex = SIndex % TCount; - var feature = []; - if(TIndex !== 0){ - feature[0] = [SBase + SIndex - TIndex, TBase + TIndex]; - } else { - feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)]; - feature[2] = {}; - for (j = 1; j < TCount; ++j){ - feature[2][TBase + j] = cp + j; - } - } - return new UChar(cp, feature); - } - function fromCpFilter(next, cp, needFeature){ - return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature); - } + // Reduction context + this.red = null; - var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData]; + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } - UChar.fromCharCode = strategies.reduceRight(function (next, strategy) { - return function (cp, needFeature) { - return strategy(next, cp, needFeature); - }; - }, null); + if (number !== null) + this._init(number || 0, base || 10, endian || 'be'); +} +if (typeof module === 'object') + module.exports = BN; +else + exports.BN = BN; - UChar.isHighSurrogate = function(cp){ - return cp >= 0xD800 && cp <= 0xDBFF; - }; - UChar.isLowSurrogate = function(cp){ - return cp >= 0xDC00 && cp <= 0xDFFF; - }; +BN.BN = BN; +BN.wordSize = 26; - UChar.prototype.prepFeature = function(){ - if(!this.feature){ - this.feature = UChar.fromCharCode(this.codepoint, true).feature; - } - }; +BN.prototype._init = function init(number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } else if (typeof number === 'object') { + return this._initArray(number, base, endian); + } + if (base === 'hex') + base = 16; + assert(base === (base | 0) && base >= 2 && base <= 36); - UChar.prototype.toString = function(){ - if(this.codepoint < 0x10000){ - return String.fromCharCode(this.codepoint); - } else { - var x = this.codepoint - 0x10000; - return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00); - } - }; + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') + start++; - UChar.prototype.getDecomp = function(){ - this.prepFeature(); - return this.feature[0] || null; - }; + if (base === 16) + this._parseHex(number, start); + else + this._parseBase(number, base, start); - UChar.prototype.isCompatibility = function(){ - this.prepFeature(); - return !!this.feature[1] && (this.feature[1] & (1 << 8)); - }; - UChar.prototype.isExclude = function(){ - this.prepFeature(); - return !!this.feature[1] && (this.feature[1] & (1 << 9)); - }; - UChar.prototype.getCanonicalClass = function(){ - this.prepFeature(); - return !!this.feature[1] ? (this.feature[1] & 0xff) : 0; - }; - UChar.prototype.getComposite = function(following){ - this.prepFeature(); - if(!this.feature[2]){ - return null; - } - var cp = this.feature[2][following.codepoint]; - return cp ? UChar.fromCharCode(cp) : null; - }; + if (number[0] === '-') + this.sign = true; - var UCharIterator = function(str){ - this.str = str; - this.cursor = 0; - }; - UCharIterator.prototype.next = function(){ - if(!!this.str && this.cursor < this.str.length){ - var cp = this.str.charCodeAt(this.cursor++); - var d; - if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){ - cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000; - ++this.cursor; - } - return UChar.fromCharCode(cp); - } else { - this.str = null; - return null; - } - }; + this.strip(); - var RecursDecompIterator = function(it, cano){ - this.it = it; - this.canonical = cano; - this.resBuf = []; - }; + if (endian !== 'le') + return; - RecursDecompIterator.prototype.next = function(){ - function recursiveDecomp(cano, uchar){ - var decomp = uchar.getDecomp(); - if(!!decomp && !(cano && uchar.isCompatibility())){ - var ret = []; - for(var i = 0; i < decomp.length; ++i){ - var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i])); - ret = ret.concat(a); - } - return ret; - } else { - return [uchar]; - } - } - if(this.resBuf.length === 0){ - var uchar = this.it.next(); - if(!uchar){ - return null; - } - this.resBuf = recursiveDecomp(this.canonical, uchar); - } - return this.resBuf.shift(); - }; + this._initArray(this.toArray(), base, endian); +}; - var DecompIterator = function(it){ - this.it = it; - this.resBuf = []; - }; +BN.prototype._initNumber = function _initNumber(number, base, endian) { + if (number < 0) { + this.sign = true; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } - DecompIterator.prototype.next = function(){ - var cc; - if(this.resBuf.length === 0){ - do{ - var uchar = this.it.next(); - if(!uchar){ - break; - } - cc = uchar.getCanonicalClass(); - var inspt = this.resBuf.length; - if(cc !== 0){ - for(; inspt > 0; --inspt){ - var uchar2 = this.resBuf[inspt - 1]; - var cc2 = uchar2.getCanonicalClass(); - if(cc2 <= cc){ - break; - } - } - } - this.resBuf.splice(inspt, 0, uchar); - } while(cc !== 0); - } - return this.resBuf.shift(); - }; + if (endian !== 'le') + return; - var CompIterator = function(it){ - this.it = it; - this.procBuf = []; - this.resBuf = []; - this.lastClass = null; - }; + // Reverse the bytes + this._initArray(this.toArray(), base, endian); +}; - CompIterator.prototype.next = function(){ - while(this.resBuf.length === 0){ - var uchar = this.it.next(); - if(!uchar){ - this.resBuf = this.procBuf; - this.procBuf = []; - break; - } - if(this.procBuf.length === 0){ - this.lastClass = uchar.getCanonicalClass(); - this.procBuf.push(uchar); - } else { - var starter = this.procBuf[0]; - var composite = starter.getComposite(uchar); - var cc = uchar.getCanonicalClass(); - if(!!composite && (this.lastClass < cc || this.lastClass === 0)){ - this.procBuf[0] = composite; - } else { - if(cc === 0){ - this.resBuf = this.procBuf; - this.procBuf = []; - } - this.lastClass = cc; - this.procBuf.push(uchar); - } - } - } - return this.resBuf.shift(); - }; +BN.prototype._initArray = function _initArray(number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } - var createIterator = function(mode, str){ - switch(mode){ - case "NFD": - return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)); - case "NFKD": - return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)); - case "NFC": - return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true))); - case "NFKC": - return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false))); + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) + this.words[i] = 0; + + var off = 0; + if (endian === 'be') { + for (var i = number.length - 1, j = 0; i >= 0; i -= 3) { + var w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - throw mode + " is invalid"; - }; - var normalize = function(mode, str){ - var it = createIterator(mode, str); - var ret = ""; - var uchar; - while(!!(uchar = it.next())){ - ret += uchar.toString(); + } + } else if (endian === 'le') { + for (var i = 0, j = 0; i < number.length; i += 3) { + var w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } - return ret; - }; - - /* API functions */ - function nfd(str){ - return normalize("NFD", str); - } - - function nfkd(str){ - return normalize("NFKD", str); - } - - function nfc(str){ - return normalize("NFC", str); - } - - function nfkc(str){ - return normalize("NFKC", str); - } - -/* Unicode data */ -UChar.udata={ -0:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]}, -256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]}, -512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]}, -768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]}, -1024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]}, -1280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]}, -1536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]}, -1792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]}, -2048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]}, -2304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]}, -2560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]}, -2816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]}, -3072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]}, -3328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]}, -3584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]}, -3840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]}, -4096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]}, -4352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]}, -4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]}, -4864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]}, -5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]}, -5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]}, -5632:{71231:[,9],71350:[,9],71351:[,7]}, -5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]}, -6144:{6313:[,228]}, -6400:{6457:[,222],6458:[,230],6459:[,220]}, -6656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]}, -6912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]}, -7168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]}, -7424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]}, -7680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]}, -7936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]}, -8192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]}, -8448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]}, -8704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]}, -8960:{9001:[[12296]],9002:[[12297]]}, -9216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]}, -10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]}, -11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]}, -11520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]}, -11776:{11935:[[27597],256],12019:[[40863],256]}, -12032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]}, -12288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]}, -12544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]}, -12800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]}, -13056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]}, -27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]}, -27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]}, -42496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]}, -42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]}, -43008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]}, -43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]}, -43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]}, -43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]}, -48128:{113822:[,1]}, -53504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]}, -53760:{119362:[,230],119363:[,230],119364:[,230]}, -54272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]}, -54528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]}, -54784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]}, -55040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]}, -59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]}, -60928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]}, -61696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]}, -61952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]}, -63488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]}, -63744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]}, -64000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]}, -64256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]}, -64512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]}, -64768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]}, -65024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]}, -65280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]} - + } + } + return this.strip(); }; - /***** Module to export */ - var unorm = { - nfc: nfc, - nfd: nfd, - nfkc: nfkc, - nfkd: nfkd - }; - - /*globals module:true,define:true*/ - - // CommonJS - if (typeof module === "object") { - module.exports = unorm; - - // AMD - } else if (typeof define === "function" && define.amd) { - define("unorm", function () { - return unorm; - }); - - // Global - } else { - root.unorm = unorm; - } - - /***** Export as shim for String::normalize method *****/ - /* - http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21 - - 21.1.3.12 String.prototype.normalize(form="NFC") - When the normalize method is called with one argument form, the following steps are taken: - - 1. Let O be CheckObjectCoercible(this value). - 2. Let S be ToString(O). - 3. ReturnIfAbrupt(S). - 4. If form is not provided or undefined let form be "NFC". - 5. Let f be ToString(form). - 6. ReturnIfAbrupt(f). - 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception. - 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms. - 9. Return ns. - - The length property of the normalize method is 0. - - *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method. - */ - unorm.shimApplied = false; - - if (!String.prototype.normalize) { - String.prototype.normalize = function(form) { - var str = "" + this; - form = form === undefined ? "NFC" : form; - - if (form === "NFC") { - return unorm.nfc(str); - } else if (form === "NFD") { - return unorm.nfd(str); - } else if (form === "NFKC") { - return unorm.nfkc(str); - } else if (form === "NFKD") { - return unorm.nfkd(str); - } else { - throw new RangeError("Invalid normalization form: " + form); - } - }; - - unorm.shimApplied = true; - } -}(this)); - -},{}],97:[function(require,module,exports){ -// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 -// -// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! -// -// Originally from narwhal.js (http://narwhaljs.org) -// Copyright (c) 2009 Thomas Robinson <280north.com> -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the 'Software'), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -// when used in node, this will actually load the util module we depend on -// versus loading the builtin util module as happens otherwise -// this is a bug in node module loading as far as I am concerned -var util = require('util/'); - -var pSlice = Array.prototype.slice; -var hasOwn = Object.prototype.hasOwnProperty; - -// 1. The assert module provides functions that throw -// AssertionError's when particular conditions are not met. The -// assert module must conform to the following interface. +function parseHex(str, start, end) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; -var assert = module.exports = ok; + r <<= 4; -// 2. The AssertionError is defined in assert. -// new assert.AssertionError({ message: message, -// actual: actual, -// expected: expected }) + // 'a' - 'f' + if (c >= 49 && c <= 54) + r |= c - 49 + 0xa; -assert.AssertionError = function AssertionError(options) { - this.name = 'AssertionError'; - this.actual = options.actual; - this.expected = options.expected; - this.operator = options.operator; - if (options.message) { - this.message = options.message; - this.generatedMessage = false; - } else { - this.message = getMessage(this); - this.generatedMessage = true; - } - var stackStartFunction = options.stackStartFunction || fail; + // 'A' - 'F' + else if (c >= 17 && c <= 22) + r |= c - 17 + 0xa; - if (Error.captureStackTrace) { - Error.captureStackTrace(this, stackStartFunction); + // '0' - '9' + else + r |= c & 0xf; } - else { - // non v8 browsers so we can have a stacktrace - var err = new Error(); - if (err.stack) { - var out = err.stack; + return r; +} - // try to strip useless frames - var fn_name = stackStartFunction.name; - var idx = out.indexOf('\n' + fn_name); - if (idx >= 0) { - // once we have located the function frame - // we need to strip out everything before it (and its line) - var next_line = out.indexOf('\n', idx + 1); - out = out.substring(next_line + 1); - } +BN.prototype._parseHex = function _parseHex(number, start) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) + this.words[i] = 0; - this.stack = out; + // Scan 24-bit chunks and add them to the number + var off = 0; + for (var i = number.length - 6, j = 0; i >= start; i -= 6) { + var w = parseHex(number, i, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; } } + if (i + 6 !== start) { + var w = parseHex(number, start, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + } + this.strip(); }; -// assert.AssertionError instanceof Error -util.inherits(assert.AssertionError, Error); +function parseBase(str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; -function replacer(key, value) { - if (util.isUndefined(value)) { - return '' + value; - } - if (util.isNumber(value) && !isFinite(value)) { - return value.toString(); - } - if (util.isFunction(value) || util.isRegExp(value)) { - return value.toString(); - } - return value; -} + r *= mul; -function truncate(s, n) { - if (util.isString(s)) { - return s.length < n ? s : s.slice(0, n); - } else { - return s; - } -} + // 'a' + if (c >= 49) + r += c - 49 + 0xa; -function getMessage(self) { - return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' + - self.operator + ' ' + - truncate(JSON.stringify(self.expected, replacer), 128); -} + // 'A' + else if (c >= 17) + r += c - 17 + 0xa; -// At present only the three keys mentioned above are used and -// understood by the spec. Implementations or sub modules can pass -// other keys to the AssertionError's constructor - they will be -// ignored. + // '0' - '9' + else + r += c; + } + return r; +} -// 3. All of the following functions must throw an AssertionError -// when a corresponding condition is not met, with a message that -// may be undefined if not provided. All assertion methods provide -// both the actual and expected values to the assertion error for -// display purposes. +BN.prototype._parseBase = function _parseBase(number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; -function fail(actual, expected, message, operator, stackStartFunction) { - throw new assert.AssertionError({ - message: message, - actual: actual, - expected: expected, - operator: operator, - stackStartFunction: stackStartFunction - }); -} + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) + limbLen++; + limbLen--; + limbPow = (limbPow / base) | 0; -// EXTENSION! allows for well behaved errors defined elsewhere. -assert.fail = fail; + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; -// 4. Pure assertion tests whether a value is truthy, as determined -// by !!guard. -// assert.ok(guard, message_opt); -// This statement is equivalent to assert.equal(true, !!guard, -// message_opt);. To test strictly for the value true, use -// assert.strictEqual(true, guard, message_opt);. + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); -function ok(value, message) { - if (!value) fail(value, true, message, '==', assert.ok); -} -assert.ok = ok; + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) + this.words[0] += word; + else + this._iaddn(word); + } -// 5. The equality assertion tests shallow, coercive equality with -// ==. -// assert.equal(actual, expected, message_opt); + if (mod !== 0) { + var pow = 1; + var word = parseBase(number, i, number.length, base); -assert.equal = function equal(actual, expected, message) { - if (actual != expected) fail(actual, expected, message, '==', assert.equal); + for (var i = 0; i < mod; i++) + pow *= base; + this.imuln(pow); + if (this.words[0] + word < 0x4000000) + this.words[0] += word; + else + this._iaddn(word); + } }; -// 6. The non-equality assertion tests for whether two objects are not equal -// with != assert.notEqual(actual, expected, message_opt); +BN.prototype.copy = function copy(dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) + dest.words[i] = this.words[i]; + dest.length = this.length; + dest.sign = this.sign; + dest.red = this.red; +}; -assert.notEqual = function notEqual(actual, expected, message) { - if (actual == expected) { - fail(actual, expected, message, '!=', assert.notEqual); - } +BN.prototype.clone = function clone() { + var r = new BN(null); + this.copy(r); + return r; }; -// 7. The equivalence assertion tests a deep equality relation. -// assert.deepEqual(actual, expected, message_opt); +// Remove leading `0` from `this` +BN.prototype.strip = function strip() { + while (this.length > 1 && this.words[this.length - 1] === 0) + this.length--; + return this._normSign(); +}; -assert.deepEqual = function deepEqual(actual, expected, message) { - if (!_deepEqual(actual, expected)) { - fail(actual, expected, message, 'deepEqual', assert.deepEqual); - } +BN.prototype._normSign = function _normSign() { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) + this.sign = false; + return this; }; -function _deepEqual(actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; +BN.prototype.inspect = function inspect() { + return (this.red ? ''; +}; - } else if (util.isBuffer(actual) && util.isBuffer(expected)) { - if (actual.length != expected.length) return false; +/* - for (var i = 0; i < actual.length; i++) { - if (actual[i] !== expected[i]) return false; - } +var zeros = []; +var groupSizes = []; +var groupBases = []; - return true; +var s = ''; +var i = -1; +while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; +} +groupSizes[0] = 0; +groupSizes[1] = 0; +groupBases[0] = 0; +groupBases[1] = 0; +var base = 2 - 1; +while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; +} - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (util.isDate(actual) && util.isDate(expected)) { - return actual.getTime() === expected.getTime(); +*/ - // 7.3 If the expected value is a RegExp object, the actual value is - // equivalent if it is also a RegExp object with the same source and - // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`). - } else if (util.isRegExp(actual) && util.isRegExp(expected)) { - return actual.source === expected.source && - actual.global === expected.global && - actual.multiline === expected.multiline && - actual.lastIndex === expected.lastIndex && - actual.ignoreCase === expected.ignoreCase; - - // 7.4. Other pairs that do not both pass typeof value == 'object', - // equivalence is determined by ==. - } else if (!util.isObject(actual) && !util.isObject(expected)) { - return actual == expected; - - // 7.5 For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical 'prototype' property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } -} +var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' +]; -function isArguments(object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; -} +var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 +]; -function objEquiv(a, b) { - if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b)) - return false; - // an identical 'prototype' property. - if (a.prototype !== b.prototype) return false; - // if one is a primitive, the other must be same - if (util.isPrimitive(a) || util.isPrimitive(b)) { - return a === b; - } - var aIsArgs = isArguments(a), - bIsArgs = isArguments(b); - if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) - return false; - if (aIsArgs) { - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b); - } - var ka = objectKeys(a), - kb = objectKeys(b), - key, i; - // having the same number of owned properties (keys incorporates - // hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key])) return false; - } - return true; -} +var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 +]; -// 8. The non-equivalence assertion tests for any deep inequality. -// assert.notDeepEqual(actual, expected, message_opt); +BN.prototype.toString = function toString(base, padding) { + base = base || 10; + if (base === 16 || base === 'hex') { + var out = ''; + var off = 0; + var padding = padding | 0 || 1; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) + out = zeros[6 - word.length] + word + out; + else + out = word + out; + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + } + if (carry !== 0) + out = carry.toString(16) + out; + while (out.length % padding !== 0) + out = '0' + out; + if (this.sign) + out = '-' + out; + return out; + } else if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + var out = ''; + var c = this.clone(); + c.sign = false; + while (c.cmpn(0) !== 0) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); -assert.notDeepEqual = function notDeepEqual(actual, expected, message) { - if (_deepEqual(actual, expected)) { - fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); + if (c.cmpn(0) !== 0) + out = zeros[groupSize - r.length] + r + out; + else + out = r + out; + } + if (this.cmpn(0) === 0) + out = '0' + out; + if (this.sign) + out = '-' + out; + return out; + } else { + assert(false, 'Base should be between 2 and 36'); } }; -// 9. The strict equality assertion tests strict equality, as determined by ===. -// assert.strictEqual(actual, expected, message_opt); - -assert.strictEqual = function strictEqual(actual, expected, message) { - if (actual !== expected) { - fail(actual, expected, message, '===', assert.strictEqual); - } +BN.prototype.toJSON = function toJSON() { + return this.toString(16); }; -// 10. The strict non-equality assertion tests for strict inequality, as -// determined by !==. assert.notStrictEqual(actual, expected, message_opt); +BN.prototype.toArray = function toArray(endian) { + this.strip(); + var res = new Array(this.byteLength()); + res[0] = 0; -assert.notStrictEqual = function notStrictEqual(actual, expected, message) { - if (actual === expected) { - fail(actual, expected, message, '!==', assert.notStrictEqual); - } -}; + var q = this.clone(); + if (endian !== 'le') { + // Assume big-endian + for (var i = 0; q.cmpn(0) !== 0; i++) { + var b = q.andln(0xff); + q.ishrn(8); -function expectedException(actual, expected) { - if (!actual || !expected) { - return false; - } + res[res.length - i - 1] = b; + } + } else { + // Assume little-endian + for (var i = 0; q.cmpn(0) !== 0; i++) { + var b = q.andln(0xff); + q.ishrn(8); - if (Object.prototype.toString.call(expected) == '[object RegExp]') { - return expected.test(actual); - } else if (actual instanceof expected) { - return true; - } else if (expected.call({}, actual) === true) { - return true; + res[i] = b; + } } - return false; + return res; +}; + +if (Math.clz32) { + BN.prototype._countBits = function _countBits(w) { + return 32 - Math.clz32(w); + }; +} else { + BN.prototype._countBits = function _countBits(w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; } -function _throws(shouldThrow, block, expected, message) { - var actual; +BN.prototype._zeroBits = function _zeroBits(w) { + // Short-cut + if (w === 0) + return 26; - if (util.isString(expected)) { - message = expected; - expected = null; + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; } - - try { - block(); - } catch (e) { - actual = e; + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; } - - message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + - (message ? ' ' + message : '.'); - - if (shouldThrow && !actual) { - fail(actual, expected, 'Missing expected exception' + message); + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; } - - if (!shouldThrow && expectedException(actual, expected)) { - fail(actual, expected, 'Got unwanted exception' + message); + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; } + if ((t & 0x1) === 0) + r++; + return r; +}; - if ((shouldThrow && actual && expected && - !expectedException(actual, expected)) || (!shouldThrow && actual)) { - throw actual; - } -} +// Return number of used bits in a BN +BN.prototype.bitLength = function bitLength() { + var hi = 0; + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; +}; -// 11. Expected to throw an error: -// assert.throws(block, Error_opt, message_opt); +// Number of trailing zero bits +BN.prototype.zeroBits = function zeroBits() { + if (this.cmpn(0) === 0) + return 0; -assert.throws = function(block, /*optional*/error, /*optional*/message) { - _throws.apply(this, [true].concat(pSlice.call(arguments))); + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) + break; + } + return r; }; -// EXTENSION! This is annoying to write outside this module. -assert.doesNotThrow = function(block, /*optional*/message) { - _throws.apply(this, [false].concat(pSlice.call(arguments))); +BN.prototype.byteLength = function byteLength() { + return Math.ceil(this.bitLength() / 8); }; -assert.ifError = function(err) { if (err) {throw err;}}; +// Return negative clone of `this` +BN.prototype.neg = function neg() { + if (this.cmpn(0) === 0) + return this.clone(); -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - if (hasOwn.call(obj, key)) keys.push(key); - } - return keys; + var r = this.clone(); + r.sign = !this.sign; + return r; }; -},{"util/":319}],98:[function(require,module,exports){ -},{}],99:[function(require,module,exports){ -(function (global){ -/*! - * The buffer module from node.js, for the browser. - * - * @author Feross Aboukhadijeh - * @license MIT - */ -/* eslint-disable no-proto */ +// Or `num` with `this` in-place +BN.prototype.ior = function ior(num) { + this.sign = this.sign || num.sign; -'use strict' + while (this.length < num.length) + this.words[this.length++] = 0; -var base64 = require('base64-js') -var ieee754 = require('ieee754') -var isArray = require('isarray') + for (var i = 0; i < num.length; i++) + this.words[i] = this.words[i] | num.words[i]; -exports.Buffer = Buffer -exports.SlowBuffer = SlowBuffer -exports.INSPECT_MAX_BYTES = 50 -Buffer.poolSize = 8192 // not used by this implementation + return this.strip(); +}; -var rootParent = {} -/** - * If `Buffer.TYPED_ARRAY_SUPPORT`: - * === true Use Uint8Array implementation (fastest) - * === false Use Object implementation (most compatible, even IE6) - * - * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, - * Opera 11.6+, iOS 4.2+. - * - * Due to various browser bugs, sometimes the Object implementation will be used even - * when the browser supports typed arrays. - * - * Note: - * - * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, - * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. - * - * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property - * on objects. - * - * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. - * - * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of - * incorrect length in some situations. +// Or `num` with `this` +BN.prototype.or = function or(num) { + if (this.length > num.length) + return this.clone().ior(num); + else + return num.clone().ior(this); +}; - * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they - * get the Object implementation, which is slower but behaves correctly. - */ -Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined - ? global.TYPED_ARRAY_SUPPORT - : typedArraySupport() -function typedArraySupport () { - function Bar () {} - try { - var arr = new Uint8Array(1) - arr.foo = function () { return 42 } - arr.constructor = Bar - return arr.foo() === 42 && // typed array instances can be augmented - arr.constructor === Bar && // constructor can be set - typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` - arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` - } catch (e) { - return false - } -} +// And `num` with `this` in-place +BN.prototype.iand = function iand(num) { + this.sign = this.sign && num.sign; -function kMaxLength () { - return Buffer.TYPED_ARRAY_SUPPORT - ? 0x7fffffff - : 0x3fffffff -} + // b = min-length(num, this) + var b; + if (this.length > num.length) + b = num; + else + b = this; -/** - * Class: Buffer - * ============= - * - * The Buffer constructor returns instances of `Uint8Array` that are augmented - * with function properties for all the node `Buffer` API functions. We use - * `Uint8Array` so that square bracket notation works as expected -- it returns - * a single octet. - * - * By augmenting the instances, we can avoid modifying the `Uint8Array` - * prototype. - */ -function Buffer (arg) { - if (!(this instanceof Buffer)) { - // Avoid going through an ArgumentsAdaptorTrampoline in the common case. - if (arguments.length > 1) return new Buffer(arg, arguments[1]) - return new Buffer(arg) - } + for (var i = 0; i < b.length; i++) + this.words[i] = this.words[i] & num.words[i]; - if (!Buffer.TYPED_ARRAY_SUPPORT) { - this.length = 0 - this.parent = undefined - } + this.length = b.length; - // Common case. - if (typeof arg === 'number') { - return fromNumber(this, arg) - } + return this.strip(); +}; - // Slightly less common case. - if (typeof arg === 'string') { - return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8') - } - // Unusual. - return fromObject(this, arg) -} +// And `num` with `this` +BN.prototype.and = function and(num) { + if (this.length > num.length) + return this.clone().iand(num); + else + return num.clone().iand(this); +}; -function fromNumber (that, length) { - that = allocate(that, length < 0 ? 0 : checked(length) | 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) { - for (var i = 0; i < length; i++) { - that[i] = 0 - } - } - return that -} -function fromString (that, string, encoding) { - if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8' +// Xor `num` with `this` in-place +BN.prototype.ixor = function ixor(num) { + this.sign = this.sign || num.sign; - // Assumption: byteLength() return value is always < kMaxLength. - var length = byteLength(string, encoding) | 0 - that = allocate(that, length) + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } - that.write(string, encoding) - return that -} + for (var i = 0; i < b.length; i++) + this.words[i] = a.words[i] ^ b.words[i]; -function fromObject (that, object) { - if (Buffer.isBuffer(object)) return fromBuffer(that, object) + if (this !== a) + for (; i < a.length; i++) + this.words[i] = a.words[i]; - if (isArray(object)) return fromArray(that, object) + this.length = a.length; - if (object == null) { - throw new TypeError('must start with number, buffer, array or string') - } + return this.strip(); +}; - if (typeof ArrayBuffer !== 'undefined') { - if (object.buffer instanceof ArrayBuffer) { - return fromTypedArray(that, object) - } - if (object instanceof ArrayBuffer) { - return fromArrayBuffer(that, object) - } - } - if (object.length) return fromArrayLike(that, object) +// Xor `num` with `this` +BN.prototype.xor = function xor(num) { + if (this.length > num.length) + return this.clone().ixor(num); + else + return num.clone().ixor(this); +}; - return fromJsonObject(that, object) -} -function fromBuffer (that, buffer) { - var length = checked(buffer.length) | 0 - that = allocate(that, length) - buffer.copy(that, 0, 0, length) - return that -} +// Set `bit` of `this` +BN.prototype.setn = function setn(bit, val) { + assert(typeof bit === 'number' && bit >= 0); -function fromArray (that, array) { - var length = checked(array.length) | 0 - that = allocate(that, length) - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 - } - return that -} + var off = (bit / 26) | 0; + var wbit = bit % 26; -// Duplicate of fromArray() to keep fromArray() monomorphic. -function fromTypedArray (that, array) { - var length = checked(array.length) | 0 - that = allocate(that, length) - // Truncating the elements is probably not what people expect from typed - // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior - // of the old Buffer constructor. - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 + while (this.length <= off) + this.words[this.length++] = 0; + + if (val) + this.words[off] = this.words[off] | (1 << wbit); + else + this.words[off] = this.words[off] & ~(1 << wbit); + + return this.strip(); +}; + + +// Add `num` to `this` in-place +BN.prototype.iadd = function iadd(num) { + // negative + positive + if (this.sign && !num.sign) { + this.sign = false; + var r = this.isub(num); + this.sign = !this.sign; + return this._normSign(); + + // positive + negative + } else if (!this.sign && num.sign) { + num.sign = false; + var r = this.isub(num); + num.sign = true; + return r._normSign(); } - return that -} -function fromArrayBuffer (that, array) { - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - array.byteLength - that = Buffer._augment(new Uint8Array(array)) + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; } else { - // Fallback: Return an object instance of the Buffer class - that = fromTypedArray(that, new Uint8Array(array)) + a = num; + b = this; } - return that -} -function fromArrayLike (that, array) { - var length = checked(array.length) | 0 - that = allocate(that, length) - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 + var carry = 0; + for (var i = 0; i < b.length; i++) { + var r = a.words[i] + b.words[i] + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; } - return that -} - -// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object. -// Returns a zero-length buffer for inputs that don't conform to the spec. -function fromJsonObject (that, object) { - var array - var length = 0 - - if (object.type === 'Buffer' && isArray(object.data)) { - array = object.data - length = checked(array.length) | 0 + for (; carry !== 0 && i < a.length; i++) { + var r = a.words[i] + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; } - that = allocate(that, length) - for (var i = 0; i < length; i += 1) { - that[i] = array[i] & 255 + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) + this.words[i] = a.words[i]; } - return that -} -if (Buffer.TYPED_ARRAY_SUPPORT) { - Buffer.prototype.__proto__ = Uint8Array.prototype - Buffer.__proto__ = Uint8Array -} else { - // pre-set for values that may exist in the future - Buffer.prototype.length = undefined - Buffer.prototype.parent = undefined -} + return this; +}; -function allocate (that, length) { - if (Buffer.TYPED_ARRAY_SUPPORT) { - // Return an augmented `Uint8Array` instance, for best performance - that = Buffer._augment(new Uint8Array(length)) - that.__proto__ = Buffer.prototype - } else { - // Fallback: Return an object instance of the Buffer class - that.length = length - that._isBuffer = true +// Add `num` to `this` +BN.prototype.add = function add(num) { + if (num.sign && !this.sign) { + num.sign = false; + var res = this.sub(num); + num.sign = true; + return res; + } else if (!num.sign && this.sign) { + this.sign = false; + var res = num.sub(this); + this.sign = true; + return res; } - var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1 - if (fromPool) that.parent = rootParent + if (this.length > num.length) + return this.clone().iadd(num); + else + return num.clone().iadd(this); +}; - return that -} +// Subtract `num` from `this` in-place +BN.prototype.isub = function isub(num) { + // this - (-num) = this + num + if (num.sign) { + num.sign = false; + var r = this.iadd(num); + num.sign = true; + return r._normSign(); -function checked (length) { - // Note: cannot use `length < kMaxLength` here because that fails when - // length is NaN (which is otherwise coerced to zero.) - if (length >= kMaxLength()) { - throw new RangeError('Attempt to allocate Buffer larger than maximum ' + - 'size: 0x' + kMaxLength().toString(16) + ' bytes') + // -this - num = -(this + num) + } else if (this.sign) { + this.sign = false; + this.iadd(num); + this.sign = true; + return this._normSign(); } - return length | 0 -} -function SlowBuffer (subject, encoding) { - if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding) + // At this point both numbers are positive + var cmp = this.cmp(num); - var buf = new Buffer(subject, encoding) - delete buf.parent - return buf -} + // Optimization - zeroify + if (cmp === 0) { + this.sign = false; + this.length = 1; + this.words[0] = 0; + return this; + } -Buffer.isBuffer = function isBuffer (b) { - return !!(b != null && b._isBuffer) -} + // a > b + var a; + var b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } -Buffer.compare = function compare (a, b) { - if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { - throw new TypeError('Arguments must be Buffers') + var carry = 0; + for (var i = 0; i < b.length; i++) { + var r = a.words[i] - b.words[i] + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + var r = a.words[i] + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; } - if (a === b) return 0 + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) + for (; i < a.length; i++) + this.words[i] = a.words[i]; + this.length = Math.max(this.length, i); - var x = a.length - var y = b.length + if (a !== this) + this.sign = true; - var i = 0 - var len = Math.min(x, y) - while (i < len) { - if (a[i] !== b[i]) break + return this.strip(); +}; - ++i - } +// Subtract `num` from `this` +BN.prototype.sub = function sub(num) { + return this.clone().isub(num); +}; - if (i !== len) { - x = a[i] - y = b[i] - } +/* +// NOTE: This could be potentionally used to generate loop-less multiplications +function _genCombMulTo(alen, blen) { + var len = alen + blen - 1; + var src = [ + 'var a = this.words, b = num.words, o = out.words, c = 0, w, ' + + 'mask = 0x3ffffff, shift = 0x4000000;', + 'out.length = ' + len + ';' + ]; + for (var k = 0; k < len; k++) { + var minJ = Math.max(0, k - alen + 1); + var maxJ = Math.min(k, blen - 1); - if (x < y) return -1 - if (y < x) return 1 - return 0 -} + for (var j = minJ; j <= maxJ; j++) { + var i = k - j; + var mul = 'a[' + i + '] * b[' + j + ']'; -Buffer.isEncoding = function isEncoding (encoding) { - switch (String(encoding).toLowerCase()) { - case 'hex': - case 'utf8': - case 'utf-8': - case 'ascii': - case 'binary': - case 'base64': - case 'raw': - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return true - default: - return false + if (j === minJ) { + src.push('w = ' + mul + ' + c;'); + src.push('c = (w / shift) | 0;'); + } else { + src.push('w += ' + mul + ';'); + src.push('c += (w / shift) | 0;'); + } + src.push('w &= mask;'); + } + src.push('o[' + k + '] = w;'); } + src.push('if (c !== 0) {', + ' o[' + k + '] = c;', + ' out.length++;', + '}', + 'return out;'); + + return src.join('\n'); } +*/ -Buffer.concat = function concat (list, length) { - if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.') +BN.prototype._smallMulTo = function _smallMulTo(num, out) { + out.sign = num.sign !== this.sign; + out.length = this.length + num.length; - if (list.length === 0) { - return new Buffer(0) - } + var carry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - this.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = this.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; - var i - if (length === undefined) { - length = 0 - for (i = 0; i < list.length; i++) { - length += list[i].length + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; } + out.words[k] = rword; + carry = ncarry; } - - var buf = new Buffer(length) - var pos = 0 - for (i = 0; i < list.length; i++) { - var item = list[i] - item.copy(buf, pos) - pos += item.length + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; } - return buf -} -function byteLength (string, encoding) { - if (typeof string !== 'string') string = '' + string + return out.strip(); +}; - var len = string.length - if (len === 0) return 0 +BN.prototype._bigMulTo = function _bigMulTo(num, out) { + out.sign = num.sign !== this.sign; + out.length = this.length + num.length; - // Use a for loop to avoid recursion - var loweredCase = false - for (;;) { - switch (encoding) { - case 'ascii': - case 'binary': - // Deprecated - case 'raw': - case 'raws': - return len - case 'utf8': - case 'utf-8': - return utf8ToBytes(string).length - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return len * 2 - case 'hex': - return len >>> 1 - case 'base64': - return base64ToBytes(string).length - default: - if (loweredCase) return utf8ToBytes(string).length // assume utf8 - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } - } -} -Buffer.byteLength = byteLength + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - this.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = this.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; -function slowToString (encoding, start, end) { - var loweredCase = false + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; - start = start | 0 - end = end === undefined || end === Infinity ? this.length : end | 0 + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } - if (!encoding) encoding = 'utf8' - if (start < 0) start = 0 - if (end > this.length) end = this.length - if (end <= start) return '' + return out.strip(); +}; - while (true) { - switch (encoding) { - case 'hex': - return hexSlice(this, start, end) +BN.prototype.mulTo = function mulTo(num, out) { + var res; + if (this.length + num.length < 63) + res = this._smallMulTo(num, out); + else + res = this._bigMulTo(num, out); + return res; +}; - case 'utf8': - case 'utf-8': - return utf8Slice(this, start, end) +// Multiply `this` by `num` +BN.prototype.mul = function mul(num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); +}; - case 'ascii': - return asciiSlice(this, start, end) +// In-place Multiplication +BN.prototype.imul = function imul(num) { + if (this.cmpn(0) === 0 || num.cmpn(0) === 0) { + this.words[0] = 0; + this.length = 1; + return this; + } - case 'binary': - return binarySlice(this, start, end) + var tlen = this.length; + var nlen = num.length; - case 'base64': - return base64Slice(this, start, end) + this.sign = num.sign !== this.sign; + this.length = this.length + num.length; + this.words[this.length - 1] = 0; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return utf16leSlice(this, start, end) + for (var k = this.length - 2; k >= 0; k--) { + // Sum all words with the same `i + j = k` and accumulate `carry`, + // note that carry could be >= 0x3ffffff + var carry = 0; + var rword = 0; + var maxJ = Math.min(k, nlen - 1); + for (var j = Math.max(0, k - tlen + 1); j <= maxJ; j++) { + var i = k - j; + var a = this.words[i]; + var b = num.words[j]; + var r = a * b; - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = (encoding + '').toLowerCase() - loweredCase = true + var lo = r & 0x3ffffff; + carry += (r / 0x4000000) | 0; + lo += rword; + rword = lo & 0x3ffffff; + carry += lo >>> 26; } + this.words[k] = rword; + this.words[k + 1] += carry; + carry = 0; } -} - -Buffer.prototype.toString = function toString () { - var length = this.length | 0 - if (length === 0) return '' - if (arguments.length === 0) return utf8Slice(this, 0, length) - return slowToString.apply(this, arguments) -} -Buffer.prototype.equals = function equals (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return true - return Buffer.compare(this, b) === 0 -} - -Buffer.prototype.inspect = function inspect () { - var str = '' - var max = exports.INSPECT_MAX_BYTES - if (this.length > 0) { - str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') - if (this.length > max) str += ' ... ' + // Propagate overflows + var carry = 0; + for (var i = 1; i < this.length; i++) { + var w = this.words[i] + carry; + this.words[i] = w & 0x3ffffff; + carry = w >>> 26; } - return '' -} - -Buffer.prototype.compare = function compare (b) { - if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') - if (this === b) return 0 - return Buffer.compare(this, b) -} -Buffer.prototype.indexOf = function indexOf (val, byteOffset) { - if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff - else if (byteOffset < -0x80000000) byteOffset = -0x80000000 - byteOffset >>= 0 - - if (this.length === 0) return -1 - if (byteOffset >= this.length) return -1 + return this.strip(); +}; - // Negative offsets start from the end of the buffer - if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0) +BN.prototype.imuln = function imuln(num) { + assert(typeof num === 'number'); - if (typeof val === 'string') { - if (val.length === 0) return -1 // special case: looking for empty string always fails - return String.prototype.indexOf.call(this, val, byteOffset) - } - if (Buffer.isBuffer(val)) { - return arrayIndexOf(this, val, byteOffset) - } - if (typeof val === 'number') { - if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') { - return Uint8Array.prototype.indexOf.call(this, val, byteOffset) - } - return arrayIndexOf(this, [ val ], byteOffset) + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i] * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; } - function arrayIndexOf (arr, val, byteOffset) { - var foundIndex = -1 - for (var i = 0; byteOffset + i < arr.length; i++) { - if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) { - if (foundIndex === -1) foundIndex = i - if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex - } else { - foundIndex = -1 - } - } - return -1 + if (carry !== 0) { + this.words[i] = carry; + this.length++; } - throw new TypeError('val must be string, number or Buffer') -} + return this; +}; -// `get` is deprecated -Buffer.prototype.get = function get (offset) { - console.log('.get() is deprecated. Access using array indexes instead.') - return this.readUInt8(offset) -} +BN.prototype.muln = function muln(num) { + return this.clone().imuln(num); +}; -// `set` is deprecated -Buffer.prototype.set = function set (v, offset) { - console.log('.set() is deprecated. Access using array indexes instead.') - return this.writeUInt8(v, offset) -} +// `this` * `this` +BN.prototype.sqr = function sqr() { + return this.mul(this); +}; -function hexWrite (buf, string, offset, length) { - offset = Number(offset) || 0 - var remaining = buf.length - offset - if (!length) { - length = remaining - } else { - length = Number(length) - if (length > remaining) { - length = remaining - } - } +// `this` * `this` in-place +BN.prototype.isqr = function isqr() { + return this.mul(this); +}; - // must be an even number of digits - var strLen = string.length - if (strLen % 2 !== 0) throw new Error('Invalid hex string') +// Shift-left in-place +BN.prototype.ishln = function ishln(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - if (length > strLen / 2) { - length = strLen / 2 + if (r !== 0) { + var carry = 0; + for (var i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = (this.words[i] - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } + if (carry) { + this.words[i] = carry; + this.length++; + } } - for (var i = 0; i < length; i++) { - var parsed = parseInt(string.substr(i * 2, 2), 16) - if (isNaN(parsed)) throw new Error('Invalid hex string') - buf[offset + i] = parsed + + if (s !== 0) { + for (var i = this.length - 1; i >= 0; i--) + this.words[i + s] = this.words[i]; + for (var i = 0; i < s; i++) + this.words[i] = 0; + this.length += s; } - return i -} -function utf8Write (buf, string, offset, length) { - return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) -} + return this.strip(); +}; -function asciiWrite (buf, string, offset, length) { - return blitBuffer(asciiToBytes(string), buf, offset, length) -} +// Shift-right in-place +// NOTE: `hint` is a lowest bit before trailing zeroes +// NOTE: if `extended` is present - it will be filled with destroyed bits +BN.prototype.ishrn = function ishrn(bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) + h = (hint - (hint % 26)) / 26; + else + h = 0; -function binaryWrite (buf, string, offset, length) { - return asciiWrite(buf, string, offset, length) -} + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; -function base64Write (buf, string, offset, length) { - return blitBuffer(base64ToBytes(string), buf, offset, length) -} + h -= s; + h = Math.max(0, h); -function ucs2Write (buf, string, offset, length) { - return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) -} + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) + maskedWords.words[i] = this.words[i]; + maskedWords.length = s; + } -Buffer.prototype.write = function write (string, offset, length, encoding) { - // Buffer#write(string) - if (offset === undefined) { - encoding = 'utf8' - length = this.length - offset = 0 - // Buffer#write(string, encoding) - } else if (length === undefined && typeof offset === 'string') { - encoding = offset - length = this.length - offset = 0 - // Buffer#write(string, offset[, length][, encoding]) - } else if (isFinite(offset)) { - offset = offset | 0 - if (isFinite(length)) { - length = length | 0 - if (encoding === undefined) encoding = 'utf8' - } else { - encoding = length - length = undefined - } - // legacy write(string, encoding, offset, length) - remove in v0.13 + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (var i = 0; i < this.length; i++) + this.words[i] = this.words[i + s]; } else { - var swap = encoding - encoding = offset - offset = length | 0 - length = swap + this.words[0] = 0; + this.length = 1; } - var remaining = this.length - offset - if (length === undefined || length > remaining) length = remaining - - if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { - throw new RangeError('attempt to write outside buffer bounds') + var carry = 0; + for (var i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i]; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; } - if (!encoding) encoding = 'utf8' + // Push carried bits as a mask + if (maskedWords && carry !== 0) + maskedWords.words[maskedWords.length++] = carry; - var loweredCase = false - for (;;) { - switch (encoding) { - case 'hex': - return hexWrite(this, string, offset, length) + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } - case 'utf8': - case 'utf-8': - return utf8Write(this, string, offset, length) + this.strip(); - case 'ascii': - return asciiWrite(this, string, offset, length) + return this; +}; - case 'binary': - return binaryWrite(this, string, offset, length) +// Shift-left +BN.prototype.shln = function shln(bits) { + return this.clone().ishln(bits); +}; - case 'base64': - // Warning: maxLength not taken into account in base64Write - return base64Write(this, string, offset, length) +// Shift-right +BN.prototype.shrn = function shrn(bits) { + return this.clone().ishrn(bits); +}; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return ucs2Write(this, string, offset, length) +// Test if n bit is set +BN.prototype.testn = function testn(bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; - default: - if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) - encoding = ('' + encoding).toLowerCase() - loweredCase = true - } + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + return false; } -} -Buffer.prototype.toJSON = function toJSON () { - return { - type: 'Buffer', - data: Array.prototype.slice.call(this._arr || this, 0) - } -} + // Check bit and return + var w = this.words[s]; -function base64Slice (buf, start, end) { - if (start === 0 && end === buf.length) { - return base64.fromByteArray(buf) - } else { - return base64.fromByteArray(buf.slice(start, end)) - } -} + return !!(w & q); +}; -function utf8Slice (buf, start, end) { - end = Math.min(buf.length, end) - var res = [] +// Return only lowers bits of number (in-place) +BN.prototype.imaskn = function imaskn(bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; - var i = start - while (i < end) { - var firstByte = buf[i] - var codePoint = null - var bytesPerSequence = (firstByte > 0xEF) ? 4 - : (firstByte > 0xDF) ? 3 - : (firstByte > 0xBF) ? 2 - : 1 + assert(!this.sign, 'imaskn works only with positive numbers'); - if (i + bytesPerSequence <= end) { - var secondByte, thirdByte, fourthByte, tempCodePoint + if (r !== 0) + s++; + this.length = Math.min(s, this.length); - switch (bytesPerSequence) { - case 1: - if (firstByte < 0x80) { - codePoint = firstByte - } - break - case 2: - secondByte = buf[i + 1] - if ((secondByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) - if (tempCodePoint > 0x7F) { - codePoint = tempCodePoint - } - } - break - case 3: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) - if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { - codePoint = tempCodePoint - } - } - break - case 4: - secondByte = buf[i + 1] - thirdByte = buf[i + 2] - fourthByte = buf[i + 3] - if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { - tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) - if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { - codePoint = tempCodePoint - } - } - } - } + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } - if (codePoint === null) { - // we did not generate a valid codePoint so insert a - // replacement char (U+FFFD) and advance only 1 byte - codePoint = 0xFFFD - bytesPerSequence = 1 - } else if (codePoint > 0xFFFF) { - // encode to utf16 (surrogate pair dance) - codePoint -= 0x10000 - res.push(codePoint >>> 10 & 0x3FF | 0xD800) - codePoint = 0xDC00 | codePoint & 0x3FF - } + return this.strip(); +}; - res.push(codePoint) - i += bytesPerSequence - } +// Return only lowers bits of number +BN.prototype.maskn = function maskn(bits) { + return this.clone().imaskn(bits); +}; - return decodeCodePointsArray(res) -} +// Add plain number `num` to `this` +BN.prototype.iaddn = function iaddn(num) { + assert(typeof num === 'number'); + if (num < 0) + return this.isubn(-num); -// Based on http://stackoverflow.com/a/22747272/680742, the browser with -// the lowest limit is Chrome, with 0x10000 args. -// We go 1 magnitude less, for safety -var MAX_ARGUMENTS_LENGTH = 0x1000 + // Possible sign change + if (this.sign) { + if (this.length === 1 && this.words[0] < num) { + this.words[0] = num - this.words[0]; + this.sign = false; + return this; + } -function decodeCodePointsArray (codePoints) { - var len = codePoints.length - if (len <= MAX_ARGUMENTS_LENGTH) { - return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + this.sign = false; + this.isubn(num); + this.sign = true; + return this; } - // Decode in chunks to avoid "call stack size exceeded". - var res = '' - var i = 0 - while (i < len) { - res += String.fromCharCode.apply( - String, - codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) - ) - } - return res -} + // Add without checks + return this._iaddn(num); +}; -function asciiSlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) +BN.prototype._iaddn = function _iaddn(num) { + this.words[0] += num; - for (var i = start; i < end; i++) { - ret += String.fromCharCode(buf[i] & 0x7F) + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) + this.words[i + 1] = 1; + else + this.words[i + 1]++; } - return ret -} + this.length = Math.max(this.length, i + 1); -function binarySlice (buf, start, end) { - var ret = '' - end = Math.min(buf.length, end) + return this; +}; - for (var i = start; i < end; i++) { - ret += String.fromCharCode(buf[i]) - } - return ret -} +// Subtract plain number `num` from `this` +BN.prototype.isubn = function isubn(num) { + assert(typeof num === 'number'); + if (num < 0) + return this.iaddn(-num); -function hexSlice (buf, start, end) { - var len = buf.length + if (this.sign) { + this.sign = false; + this.iaddn(num); + this.sign = true; + return this; + } - if (!start || start < 0) start = 0 - if (!end || end < 0 || end > len) end = len + this.words[0] -= num; - var out = '' - for (var i = start; i < end; i++) { - out += toHex(buf[i]) + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; } - return out -} -function utf16leSlice (buf, start, end) { - var bytes = buf.slice(start, end) - var res = '' - for (var i = 0; i < bytes.length; i += 2) { - res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) - } - return res -} + return this.strip(); +}; -Buffer.prototype.slice = function slice (start, end) { - var len = this.length - start = ~~start - end = end === undefined ? len : ~~end +BN.prototype.addn = function addn(num) { + return this.clone().iaddn(num); +}; - if (start < 0) { - start += len - if (start < 0) start = 0 - } else if (start > len) { - start = len - } +BN.prototype.subn = function subn(num) { + return this.clone().isubn(num); +}; - if (end < 0) { - end += len - if (end < 0) end = 0 - } else if (end > len) { - end = len - } +BN.prototype.iabs = function iabs() { + this.sign = false; - if (end < start) end = start + return this; +}; - var newBuf - if (Buffer.TYPED_ARRAY_SUPPORT) { - newBuf = Buffer._augment(this.subarray(start, end)) +BN.prototype.abs = function abs() { + return this.clone().iabs(); +}; + +BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) { + // Bigger storage is needed + var len = num.length + shift; + var i; + if (this.words.length < len) { + var t = new Array(len); + for (var i = 0; i < this.length; i++) + t[i] = this.words[i]; + this.words = t; } else { - var sliceLen = end - start - newBuf = new Buffer(sliceLen, undefined) - for (var i = 0; i < sliceLen; i++) { - newBuf[i] = this[i + start] - } + i = this.length; } - if (newBuf.length) newBuf.parent = this.parent || this - - return newBuf -} - -/* - * Need to make sure that buffer isn't trying to write out of bounds. - */ -function checkOffset (offset, ext, length) { - if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') - if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') -} - -Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) + // Zeroify rest + this.length = Math.max(this.length, len); + for (; i < this.length; i++) + this.words[i] = 0; - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul + var carry = 0; + for (var i = 0; i < num.length; i++) { + var w = this.words[i + shift] + carry; + var right = num.words[i] * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; } - - return val -} - -Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) { - checkOffset(offset, byteLength, this.length) + for (; i < this.length - shift; i++) { + var w = this.words[i + shift] + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; } - var val = this[offset + --byteLength] - var mul = 1 - while (byteLength > 0 && (mul *= 0x100)) { - val += this[offset + --byteLength] * mul + if (carry === 0) + return this.strip(); + + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (var i = 0; i < this.length; i++) { + var w = -this.words[i] + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; } + this.sign = true; - return val -} + return this.strip(); +}; -Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - return this[offset] -} +BN.prototype._wordDiv = function _wordDiv(num, mode) { + var shift = this.length - num.length; -Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return this[offset] | (this[offset + 1] << 8) -} + var a = this.clone(); + var b = num; -Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - return (this[offset] << 8) | this[offset + 1] -} + // Normalize + var bhi = b.words[b.length - 1]; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.shln(shift); + a.ishln(shift); + bhi = b.words[b.length - 1]; + } -Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) + // Initialize quotient + var m = a.length - b.length; + var q; - return ((this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16)) + - (this[offset + 3] * 0x1000000) -} + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) + q.words[i] = 0; + } -Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (!diff.sign) { + a = diff; + if (q) + q.words[m] = 1; + } - return (this[offset] * 0x1000000) + - ((this[offset + 1] << 16) | - (this[offset + 2] << 8) | - this[offset + 3]) -} + for (var j = m - 1; j >= 0; j--) { + var qj = a.words[b.length + j] * 0x4000000 + a.words[b.length + j - 1]; -Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); - var val = this[offset] - var mul = 1 - var i = 0 - while (++i < byteLength && (mul *= 0x100)) { - val += this[offset + i] * mul + a._ishlnsubmul(b, qj, j); + while (a.sign) { + qj--; + a.sign = false; + a._ishlnsubmul(b, 1, j); + if (a.cmpn(0) !== 0) + a.sign = !a.sign; + } + if (q) + q.words[j] = qj; } - mul *= 0x80 - - if (val >= mul) val -= Math.pow(2, 8 * byteLength) + if (q) + q.strip(); + a.strip(); - return val -} + // Denormalize + if (mode !== 'div' && shift !== 0) + a.ishrn(shift); + return { div: q ? q : null, mod: a }; +}; -Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkOffset(offset, byteLength, this.length) +BN.prototype.divmod = function divmod(num, mode) { + assert(num.cmpn(0) !== 0); - var i = byteLength - var mul = 1 - var val = this[offset + --i] - while (i > 0 && (mul *= 0x100)) { - val += this[offset + --i] * mul + if (this.sign && !num.sign) { + var res = this.neg().divmod(num, mode); + var div; + var mod; + if (mode !== 'mod') + div = res.div.neg(); + if (mode !== 'div') + mod = res.mod.cmpn(0) === 0 ? res.mod : num.sub(res.mod); + return { + div: div, + mod: mod + }; + } else if (!this.sign && num.sign) { + var res = this.divmod(num.neg(), mode); + var div; + if (mode !== 'mod') + div = res.div.neg(); + return { div: div, mod: res.mod }; + } else if (this.sign && num.sign) { + return this.neg().divmod(num.neg(), mode); } - mul *= 0x80 - if (val >= mul) val -= Math.pow(2, 8 * byteLength) + // Both numbers are positive at this point - return val -} + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) + return { div: new BN(0), mod: this }; -Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { - if (!noAssert) checkOffset(offset, 1, this.length) - if (!(this[offset] & 0x80)) return (this[offset]) - return ((0xff - this[offset] + 1) * -1) -} + // Very short reduction + if (num.length === 1) { + if (mode === 'div') + return { div: this.divn(num.words[0]), mod: null }; + else if (mode === 'mod') + return { div: null, mod: new BN(this.modn(num.words[0])) }; + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } -Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset] | (this[offset + 1] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} + return this._wordDiv(num, mode); +}; -Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 2, this.length) - var val = this[offset + 1] | (this[offset] << 8) - return (val & 0x8000) ? val | 0xFFFF0000 : val -} +// Find `this` / `num` +BN.prototype.div = function div(num) { + return this.divmod(num, 'div').div; +}; -Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) +// Find `this` % `num` +BN.prototype.mod = function mod(num) { + return this.divmod(num, 'mod').mod; +}; - return (this[offset]) | - (this[offset + 1] << 8) | - (this[offset + 2] << 16) | - (this[offset + 3] << 24) -} +// Find Round(`this` / `num`) +BN.prototype.divRound = function divRound(num) { + var dm = this.divmod(num); -Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) + // Fast case - exact division + if (dm.mod.cmpn(0) === 0) + return dm.div; - return (this[offset] << 24) | - (this[offset + 1] << 16) | - (this[offset + 2] << 8) | - (this[offset + 3]) -} + var mod = dm.div.sign ? dm.mod.isub(num) : dm.mod; -Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, true, 23, 4) -} + var half = num.shrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); -Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 4, this.length) - return ieee754.read(this, offset, false, 23, 4) -} + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) + return dm.div; -Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, true, 52, 8) -} + // Round up + return dm.div.sign ? dm.div.isubn(1) : dm.div.iaddn(1); +}; -Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { - if (!noAssert) checkOffset(offset, 8, this.length) - return ieee754.read(this, offset, false, 52, 8) -} +BN.prototype.modn = function modn(num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; -function checkInt (buf, value, offset, ext, max, min) { - if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') - if (value > max || value < min) throw new RangeError('value is out of bounds') - if (offset + ext > buf.length) throw new RangeError('index out of range') -} + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) + acc = (p * acc + this.words[i]) % num; -Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + return acc; +}; - var mul = 1 - var i = 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } +// In-place division by number +BN.prototype.idivn = function idivn(num) { + assert(num <= 0x3ffffff); - return offset + byteLength -} + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = this.words[i] + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } -Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - byteLength = byteLength | 0 - if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) + return this.strip(); +}; - var i = byteLength - 1 - var mul = 1 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = (value / mul) & 0xFF - } +BN.prototype.divn = function divn(num) { + return this.clone().idivn(num); +}; - return offset + byteLength -} +BN.prototype.egcd = function egcd(p) { + assert(!p.sign); + assert(p.cmpn(0) !== 0); -Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - this[offset] = (value & 0xff) - return offset + 1 -} + var x = this; + var y = p.clone(); -function objectWriteUInt16 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) { - buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> - (littleEndian ? i : 1 - i) * 8 - } -} + if (x.sign) + x = x.mod(p); + else + x = x.clone(); -Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) - } - return offset + 2 -} + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); -Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); -function objectWriteUInt32 (buf, value, offset, littleEndian) { - if (value < 0) value = 0xffffffff + value + 1 - for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) { - buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff - } -} + var g = 0; -Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset + 3] = (value >>> 24) - this[offset + 2] = (value >>> 16) - this[offset + 1] = (value >>> 8) - this[offset] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, true) + while (x.isEven() && y.isEven()) { + x.ishrn(1); + y.ishrn(1); + ++g; } - return offset + 4 -} -Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, false) - } - return offset + 4 -} + var yp = y.clone(); + var xp = x.clone(); -Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) + while (x.cmpn(0) !== 0) { + while (x.isEven()) { + x.ishrn(1); + if (A.isEven() && B.isEven()) { + A.ishrn(1); + B.ishrn(1); + } else { + A.iadd(yp).ishrn(1); + B.isub(xp).ishrn(1); + } + } - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } + while (y.isEven()) { + y.ishrn(1); + if (C.isEven() && D.isEven()) { + C.ishrn(1); + D.ishrn(1); + } else { + C.iadd(yp).ishrn(1); + D.isub(xp).ishrn(1); + } + } - var i = 0 - var mul = 1 - var sub = value < 0 ? 1 : 0 - this[offset] = value & 0xFF - while (++i < byteLength && (mul *= 0x100)) { - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } } - return offset + byteLength -} + return { + a: C, + b: D, + gcd: y.ishln(g) + }; +}; -Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) { - var limit = Math.pow(2, 8 * byteLength - 1) +// This is reduced incarnation of the binary EEA +// above, designated to invert members of the +// _prime_ fields F(p) at a maximal speed +BN.prototype._invmp = function _invmp(p) { + assert(!p.sign); + assert(p.cmpn(0) !== 0); - checkInt(this, value, offset, byteLength, limit - 1, -limit) - } + var a = this; + var b = p.clone(); - var i = byteLength - 1 - var mul = 1 - var sub = value < 0 ? 1 : 0 - this[offset + i] = value & 0xFF - while (--i >= 0 && (mul *= 0x100)) { - this[offset + i] = ((value / mul) >> 0) - sub & 0xFF - } + if (a.sign) + a = a.mod(p); + else + a = a.clone(); - return offset + byteLength -} + var x1 = new BN(1); + var x2 = new BN(0); -Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) - if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) - if (value < 0) value = 0xff + value + 1 - this[offset] = (value & 0xff) - return offset + 1 -} + var delta = b.clone(); -Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - } else { - objectWriteUInt16(this, value, offset, true) + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + while (a.isEven()) { + a.ishrn(1); + if (x1.isEven()) + x1.ishrn(1); + else + x1.iadd(delta).ishrn(1); + } + while (b.isEven()) { + b.ishrn(1); + if (x2.isEven()) + x2.ishrn(1); + else + x2.iadd(delta).ishrn(1); + } + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } } - return offset + 2 -} + if (a.cmpn(1) === 0) + return x1; + else + return x2; +}; -Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 8) - this[offset + 1] = (value & 0xff) - } else { - objectWriteUInt16(this, value, offset, false) - } - return offset + 2 -} +BN.prototype.gcd = function gcd(num) { + if (this.cmpn(0) === 0) + return num.clone(); + if (num.cmpn(0) === 0) + return this.clone(); -Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value & 0xff) - this[offset + 1] = (value >>> 8) - this[offset + 2] = (value >>> 16) - this[offset + 3] = (value >>> 24) - } else { - objectWriteUInt32(this, value, offset, true) - } - return offset + 4 -} + var a = this.clone(); + var b = num.clone(); + a.sign = false; + b.sign = false; -Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { - value = +value - offset = offset | 0 - if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) - if (value < 0) value = 0xffffffff + value + 1 - if (Buffer.TYPED_ARRAY_SUPPORT) { - this[offset] = (value >>> 24) - this[offset + 1] = (value >>> 16) - this[offset + 2] = (value >>> 8) - this[offset + 3] = (value & 0xff) - } else { - objectWriteUInt32(this, value, offset, false) + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.ishrn(1); + b.ishrn(1); } - return offset + 4 -} -function checkIEEE754 (buf, value, offset, ext, max, min) { - if (value > max || value < min) throw new RangeError('value is out of bounds') - if (offset + ext > buf.length) throw new RangeError('index out of range') - if (offset < 0) throw new RangeError('index out of range') -} + do { + while (a.isEven()) + a.ishrn(1); + while (b.isEven()) + b.ishrn(1); -function writeFloat (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) - } - ieee754.write(buf, value, offset, littleEndian, 23, 4) - return offset + 4 -} + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } -Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { - return writeFloat(this, value, offset, true, noAssert) -} + a.isub(b); + } while (true); -Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { - return writeFloat(this, value, offset, false, noAssert) -} + return b.ishln(shift); +}; -function writeDouble (buf, value, offset, littleEndian, noAssert) { - if (!noAssert) { - checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) - } - ieee754.write(buf, value, offset, littleEndian, 52, 8) - return offset + 8 -} +// Invert number in the field F(num) +BN.prototype.invm = function invm(num) { + return this.egcd(num).a.mod(num); +}; -Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { - return writeDouble(this, value, offset, true, noAssert) -} +BN.prototype.isEven = function isEven() { + return (this.words[0] & 1) === 0; +}; -Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { - return writeDouble(this, value, offset, false, noAssert) -} +BN.prototype.isOdd = function isOdd() { + return (this.words[0] & 1) === 1; +}; -// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) -Buffer.prototype.copy = function copy (target, targetStart, start, end) { - if (!start) start = 0 - if (!end && end !== 0) end = this.length - if (targetStart >= target.length) targetStart = target.length - if (!targetStart) targetStart = 0 - if (end > 0 && end < start) end = start +// And first word and num +BN.prototype.andln = function andln(num) { + return this.words[0] & num; +}; - // Copy 0 bytes; we're done - if (end === start) return 0 - if (target.length === 0 || this.length === 0) return 0 +// Increment at the bit position in-line +BN.prototype.bincn = function bincn(bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; - // Fatal error conditions - if (targetStart < 0) { - throw new RangeError('targetStart out of bounds') + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + for (var i = this.length; i < s + 1; i++) + this.words[i] = 0; + this.words[s] |= q; + this.length = s + 1; + return this; } - if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') - if (end < 0) throw new RangeError('sourceEnd out of bounds') - // Are we oob? - if (end > this.length) end = this.length - if (target.length - targetStart < end - start) { - end = target.length - targetStart + start + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i]; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; } - - var len = end - start - var i - - if (this === target && start < targetStart && targetStart < end) { - // descending copy from end - for (i = len - 1; i >= 0; i--) { - target[i + targetStart] = this[i + start] - } - } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { - // ascending copy from start - for (i = 0; i < len; i++) { - target[i + targetStart] = this[i + start] - } - } else { - target._set(this.subarray(start, start + len), targetStart) + if (carry !== 0) { + this.words[i] = carry; + this.length++; } + return this; +}; - return len -} - -// fill(value, start=0, end=buffer.length) -Buffer.prototype.fill = function fill (value, start, end) { - if (!value) value = 0 - if (!start) start = 0 - if (!end) end = this.length - - if (end < start) throw new RangeError('end < start') +BN.prototype.cmpn = function cmpn(num) { + var sign = num < 0; + if (sign) + num = -num; - // Fill 0 bytes; we're done - if (end === start) return - if (this.length === 0) return + if (this.sign && !sign) + return -1; + else if (!this.sign && sign) + return 1; - if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') - if (end < 0 || end > this.length) throw new RangeError('end out of bounds') + num &= 0x3ffffff; + this.strip(); - var i - if (typeof value === 'number') { - for (i = start; i < end; i++) { - this[i] = value - } + var res; + if (this.length > 1) { + res = 1; } else { - var bytes = utf8ToBytes(value.toString()) - var len = bytes.length - for (i = start; i < end; i++) { - this[i] = bytes[i % len] - } + var w = this.words[0]; + res = w === num ? 0 : w < num ? -1 : 1; } + if (this.sign) + res = -res; + return res; +}; - return this -} +// Compare two numbers and return: +// 1 - if `this` > `num` +// 0 - if `this` == `num` +// -1 - if `this` < `num` +BN.prototype.cmp = function cmp(num) { + if (this.sign && !num.sign) + return -1; + else if (!this.sign && num.sign) + return 1; -/** - * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. - * Added in Node 0.12. Only available in browsers that support ArrayBuffer. - */ -Buffer.prototype.toArrayBuffer = function toArrayBuffer () { - if (typeof Uint8Array !== 'undefined') { - if (Buffer.TYPED_ARRAY_SUPPORT) { - return (new Buffer(this)).buffer - } else { - var buf = new Uint8Array(this.length) - for (var i = 0, len = buf.length; i < len; i += 1) { - buf[i] = this[i] - } - return buf.buffer - } - } else { - throw new TypeError('Buffer.toArrayBuffer not supported in this browser') - } -} + var res = this.ucmp(num); + if (this.sign) + return -res; + else + return res; +}; -// HELPER FUNCTIONS -// ================ +// Unsigned comparison +BN.prototype.ucmp = function ucmp(num) { + // At this point both numbers have the same sign + if (this.length > num.length) + return 1; + else if (this.length < num.length) + return -1; -var BP = Buffer.prototype + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i]; + var b = num.words[i]; -/** - * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods - */ -Buffer._augment = function _augment (arr) { - arr.constructor = Buffer - arr._isBuffer = true + if (a === b) + continue; + if (a < b) + res = -1; + else if (a > b) + res = 1; + break; + } + return res; +}; - // save reference to original Uint8Array set method before overwriting - arr._set = arr.set +// +// A reduce context, could be using montgomery or something better, depending +// on the `m` itself. +// +BN.red = function red(num) { + return new Red(num); +}; - // deprecated - arr.get = BP.get - arr.set = BP.set +BN.prototype.toRed = function toRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(!this.sign, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); +}; - arr.write = BP.write - arr.toString = BP.toString - arr.toLocaleString = BP.toString - arr.toJSON = BP.toJSON - arr.equals = BP.equals - arr.compare = BP.compare - arr.indexOf = BP.indexOf - arr.copy = BP.copy - arr.slice = BP.slice - arr.readUIntLE = BP.readUIntLE - arr.readUIntBE = BP.readUIntBE - arr.readUInt8 = BP.readUInt8 - arr.readUInt16LE = BP.readUInt16LE - arr.readUInt16BE = BP.readUInt16BE - arr.readUInt32LE = BP.readUInt32LE - arr.readUInt32BE = BP.readUInt32BE - arr.readIntLE = BP.readIntLE - arr.readIntBE = BP.readIntBE - arr.readInt8 = BP.readInt8 - arr.readInt16LE = BP.readInt16LE - arr.readInt16BE = BP.readInt16BE - arr.readInt32LE = BP.readInt32LE - arr.readInt32BE = BP.readInt32BE - arr.readFloatLE = BP.readFloatLE - arr.readFloatBE = BP.readFloatBE - arr.readDoubleLE = BP.readDoubleLE - arr.readDoubleBE = BP.readDoubleBE - arr.writeUInt8 = BP.writeUInt8 - arr.writeUIntLE = BP.writeUIntLE - arr.writeUIntBE = BP.writeUIntBE - arr.writeUInt16LE = BP.writeUInt16LE - arr.writeUInt16BE = BP.writeUInt16BE - arr.writeUInt32LE = BP.writeUInt32LE - arr.writeUInt32BE = BP.writeUInt32BE - arr.writeIntLE = BP.writeIntLE - arr.writeIntBE = BP.writeIntBE - arr.writeInt8 = BP.writeInt8 - arr.writeInt16LE = BP.writeInt16LE - arr.writeInt16BE = BP.writeInt16BE - arr.writeInt32LE = BP.writeInt32LE - arr.writeInt32BE = BP.writeInt32BE - arr.writeFloatLE = BP.writeFloatLE - arr.writeFloatBE = BP.writeFloatBE - arr.writeDoubleLE = BP.writeDoubleLE - arr.writeDoubleBE = BP.writeDoubleBE - arr.fill = BP.fill - arr.inspect = BP.inspect - arr.toArrayBuffer = BP.toArrayBuffer +BN.prototype.fromRed = function fromRed() { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); +}; - return arr -} +BN.prototype._forceRed = function _forceRed(ctx) { + this.red = ctx; + return this; +}; -var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g +BN.prototype.forceRed = function forceRed(ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); +}; -function base64clean (str) { - // Node strips out invalid characters like \n and \t from the string, base64-js does not - str = stringtrim(str).replace(INVALID_BASE64_RE, '') - // Node converts strings with length < 2 to '' - if (str.length < 2) return '' - // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not - while (str.length % 4 !== 0) { - str = str + '=' - } - return str -} +BN.prototype.redAdd = function redAdd(num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); +}; -function stringtrim (str) { - if (str.trim) return str.trim() - return str.replace(/^\s+|\s+$/g, '') -} +BN.prototype.redIAdd = function redIAdd(num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); +}; -function toHex (n) { - if (n < 16) return '0' + n.toString(16) - return n.toString(16) -} +BN.prototype.redSub = function redSub(num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); +}; -function utf8ToBytes (string, units) { - units = units || Infinity - var codePoint - var length = string.length - var leadSurrogate = null - var bytes = [] +BN.prototype.redISub = function redISub(num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); +}; - for (var i = 0; i < length; i++) { - codePoint = string.charCodeAt(i) +BN.prototype.redShl = function redShl(num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.shl(this, num); +}; - // is surrogate component - if (codePoint > 0xD7FF && codePoint < 0xE000) { - // last char was a lead - if (!leadSurrogate) { - // no lead yet - if (codePoint > 0xDBFF) { - // unexpected trail - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } else if (i + 1 === length) { - // unpaired lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - continue - } +BN.prototype.redMul = function redMul(num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); +}; - // valid lead - leadSurrogate = codePoint +BN.prototype.redIMul = function redIMul(num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); +}; - continue - } +BN.prototype.redSqr = function redSqr() { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); +}; - // 2 leads in a row - if (codePoint < 0xDC00) { - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - leadSurrogate = codePoint - continue - } - - // valid surrogate pair - codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 - } else if (leadSurrogate) { - // valid bmp char, but last char was a lead - if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) - } - - leadSurrogate = null - - // encode utf8 - if (codePoint < 0x80) { - if ((units -= 1) < 0) break - bytes.push(codePoint) - } else if (codePoint < 0x800) { - if ((units -= 2) < 0) break - bytes.push( - codePoint >> 0x6 | 0xC0, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x10000) { - if ((units -= 3) < 0) break - bytes.push( - codePoint >> 0xC | 0xE0, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else if (codePoint < 0x110000) { - if ((units -= 4) < 0) break - bytes.push( - codePoint >> 0x12 | 0xF0, - codePoint >> 0xC & 0x3F | 0x80, - codePoint >> 0x6 & 0x3F | 0x80, - codePoint & 0x3F | 0x80 - ) - } else { - throw new Error('Invalid code point') - } - } +BN.prototype.redISqr = function redISqr() { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); +}; - return bytes -} +// Square root over p +BN.prototype.redSqrt = function redSqrt() { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); +}; -function asciiToBytes (str) { - var byteArray = [] - for (var i = 0; i < str.length; i++) { - // Node's code seems to be doing this and not & 0x7F.. - byteArray.push(str.charCodeAt(i) & 0xFF) - } - return byteArray -} +BN.prototype.redInvm = function redInvm() { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); +}; -function utf16leToBytes (str, units) { - var c, hi, lo - var byteArray = [] - for (var i = 0; i < str.length; i++) { - if ((units -= 2) < 0) break +// Return negative clone of `this` % `red modulo` +BN.prototype.redNeg = function redNeg() { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); +}; - c = str.charCodeAt(i) - hi = c >> 8 - lo = c % 256 - byteArray.push(lo) - byteArray.push(hi) - } +BN.prototype.redPow = function redPow(num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); +}; - return byteArray -} +// Prime numbers with efficient reduction +var primes = { + k256: null, + p224: null, + p192: null, + p25519: null +}; -function base64ToBytes (str) { - return base64.toByteArray(base64clean(str)) -} +// Pseudo-Mersenne prime +function MPrime(name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).ishln(this.n).isub(this.p); -function blitBuffer (src, dst, offset, length) { - for (var i = 0; i < length; i++) { - if ((i + offset >= dst.length) || (i >= src.length)) break - dst[i + offset] = src[i] - } - return i + this.tmp = this._tmp(); } -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"base64-js":100,"ieee754":101,"isarray":102}],100:[function(require,module,exports){ -var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; +MPrime.prototype._tmp = function _tmp() { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; +}; -;(function (exports) { - 'use strict'; +MPrime.prototype.ireduce = function ireduce(num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; - var Arr = (typeof Uint8Array !== 'undefined') - ? Uint8Array - : Array + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); - var PLUS = '+'.charCodeAt(0) - var SLASH = '/'.charCodeAt(0) - var NUMBER = '0'.charCodeAt(0) - var LOWER = 'a'.charCodeAt(0) - var UPPER = 'A'.charCodeAt(0) - var PLUS_URL_SAFE = '-'.charCodeAt(0) - var SLASH_URL_SAFE = '_'.charCodeAt(0) + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + r.strip(); + } - function decode (elt) { - var code = elt.charCodeAt(0) - if (code === PLUS || - code === PLUS_URL_SAFE) - return 62 // '+' - if (code === SLASH || - code === SLASH_URL_SAFE) - return 63 // '/' - if (code < NUMBER) - return -1 //no match - if (code < NUMBER + 10) - return code - NUMBER + 26 + 26 - if (code < UPPER + 26) - return code - UPPER - if (code < LOWER + 26) - return code - LOWER + 26 - } + return r; +}; - function b64ToByteArray (b64) { - var i, j, l, tmp, placeHolders, arr +MPrime.prototype.split = function split(input, out) { + input.ishrn(this.n, 0, out); +}; - if (b64.length % 4 > 0) { - throw new Error('Invalid string. Length must be a multiple of 4') - } +MPrime.prototype.imulK = function imulK(num) { + return num.imul(this.k); +}; - // the number of equal signs (place holders) - // if there are two placeholders, than the two characters before it - // represent one byte - // if there is only one, then the three characters before it represent 2 bytes - // this is just a cheap hack to not do indexOf twice - var len = b64.length - placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0 +function K256() { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); +} +inherits(K256, MPrime); - // base64 is 4/3 + up to two characters of the original data - arr = new Arr(b64.length * 3 / 4 - placeHolders) +K256.prototype.split = function split(input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; - // if there are placeholders, only get up to the last complete 4 chars - l = placeHolders > 0 ? b64.length - 4 : b64.length + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) + output.words[i] = input.words[i]; + output.length = outLen; - var L = 0 + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } - function push (v) { - arr[L++] = v - } + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; - for (i = 0, j = 0; i < l; i += 4, j += 3) { - tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3)) - push((tmp & 0xFF0000) >> 16) - push((tmp & 0xFF00) >> 8) - push(tmp & 0xFF) - } + for (var i = 10; i < input.length; i++) { + var next = input.words[i]; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + input.words[i - 10] = prev >>> 22; + input.length -= 9; +}; - if (placeHolders === 2) { - tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4) - push(tmp & 0xFF) - } else if (placeHolders === 1) { - tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2) - push((tmp >> 8) & 0xFF) - push(tmp & 0xFF) - } +K256.prototype.imulK = function imulK(num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; - return arr - } + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var hi; + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i]; + hi = w * 0x40; + lo += w * 0x3d1; + hi += (lo / 0x4000000) | 0; + lo &= 0x3ffffff; - function uint8ToBase64 (uint8) { - var i, - extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes - output = "", - temp, length + num.words[i] = lo; - function encode (num) { - return lookup.charAt(num) - } + lo = hi; + } - function tripletToBase64 (num) { - return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F) - } + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) + num.length--; + } + return num; +}; - // go through the array every three bytes, we'll deal with trailing stuff later - for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) { - temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) - output += tripletToBase64(temp) - } +function P224() { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); +} +inherits(P224, MPrime); - // pad the end with zeros, but make sure to not forget the extra bytes - switch (extraBytes) { - case 1: - temp = uint8[uint8.length - 1] - output += encode(temp >> 2) - output += encode((temp << 4) & 0x3F) - output += '==' - break - case 2: - temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1]) - output += encode(temp >> 10) - output += encode((temp >> 4) & 0x3F) - output += encode((temp << 2) & 0x3F) - output += '=' - break - } +function P192() { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); +} +inherits(P192, MPrime); - return output - } +function P25519() { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); +} +inherits(P25519, MPrime); - exports.toByteArray = b64ToByteArray - exports.fromByteArray = uint8ToBase64 -}(typeof exports === 'undefined' ? (this.base64js = {}) : exports)) +P25519.prototype.imulK = function imulK(num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = num.words[i] * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; -},{}],101:[function(require,module,exports){ -exports.read = function (buffer, offset, isLE, mLen, nBytes) { - var e, m - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var nBits = -7 - var i = isLE ? (nBytes - 1) : 0 - var d = isLE ? -1 : 1 - var s = buffer[offset + i] + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) + num.words[num.length++] = carry; + return num; +}; - i += d +// Exported mostly for testing purposes, use plain name instead +BN._prime = function prime(name) { + // Cached version of prime + if (primes[name]) + return primes[name]; - e = s & ((1 << (-nBits)) - 1) - s >>= (-nBits) - nBits += eLen - for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + var prime; + if (name === 'k256') + prime = new K256(); + else if (name === 'p224') + prime = new P224(); + else if (name === 'p192') + prime = new P192(); + else if (name === 'p25519') + prime = new P25519(); + else + throw new Error('Unknown prime ' + name); + primes[name] = prime; - m = e & ((1 << (-nBits)) - 1) - e >>= (-nBits) - nBits += mLen - for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + return prime; +}; - if (e === 0) { - e = 1 - eBias - } else if (e === eMax) { - return m ? NaN : ((s ? -1 : 1) * Infinity) +// +// Base reduction engine +// +function Red(m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; } else { - m = m + Math.pow(2, mLen) - e = e - eBias + this.m = m; + this.prime = null; } - return (s ? -1 : 1) * m * Math.pow(2, e - mLen) } -exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { - var e, m, c - var eLen = nBytes * 8 - mLen - 1 - var eMax = (1 << eLen) - 1 - var eBias = eMax >> 1 - var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) - var i = isLE ? 0 : (nBytes - 1) - var d = isLE ? 1 : -1 - var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - - value = Math.abs(value) +Red.prototype._verify1 = function _verify1(a) { + assert(!a.sign, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); +}; - if (isNaN(value) || value === Infinity) { - m = isNaN(value) ? 1 : 0 - e = eMax - } else { - e = Math.floor(Math.log(value) / Math.LN2) - if (value * (c = Math.pow(2, -e)) < 1) { - e-- - c *= 2 - } - if (e + eBias >= 1) { - value += rt / c - } else { - value += rt * Math.pow(2, 1 - eBias) - } - if (value * c >= 2) { - e++ - c /= 2 - } +Red.prototype._verify2 = function _verify2(a, b) { + assert(!a.sign && !b.sign, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); +}; - if (e + eBias >= eMax) { - m = 0 - e = eMax - } else if (e + eBias >= 1) { - m = (value * c - 1) * Math.pow(2, mLen) - e = e + eBias - } else { - m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) - e = 0 - } - } +Red.prototype.imod = function imod(a) { + if (this.prime) + return this.prime.ireduce(a)._forceRed(this); + return a.mod(this.m)._forceRed(this); +}; - for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} +Red.prototype.neg = function neg(a) { + var r = a.clone(); + r.sign = !r.sign; + return r.iadd(this.m)._forceRed(this); +}; - e = (e << mLen) | m - eLen += mLen - for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} +Red.prototype.add = function add(a, b) { + this._verify2(a, b); - buffer[offset + i - d] |= s * 128 -} + var res = a.add(b); + if (res.cmp(this.m) >= 0) + res.isub(this.m); + return res._forceRed(this); +}; -},{}],102:[function(require,module,exports){ -var toString = {}.toString; +Red.prototype.iadd = function iadd(a, b) { + this._verify2(a, b); -module.exports = Array.isArray || function (arr) { - return toString.call(arr) == '[object Array]'; + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) + res.isub(this.m); + return res; }; -},{}],103:[function(require,module,exports){ -'use strict' +Red.prototype.sub = function sub(a, b) { + this._verify2(a, b); -exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') -exports.createHash = exports.Hash = require('create-hash') -exports.createHmac = exports.Hmac = require('create-hmac') + var res = a.sub(b); + if (res.cmpn(0) < 0) + res.iadd(this.m); + return res._forceRed(this); +}; -var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(Object.keys(require('browserify-sign/algos'))) -exports.getHashes = function () { - return hashes -} +Red.prototype.isub = function isub(a, b) { + this._verify2(a, b); -var p = require('pbkdf2') -exports.pbkdf2 = p.pbkdf2 -exports.pbkdf2Sync = p.pbkdf2Sync + var res = a.isub(b); + if (res.cmpn(0) < 0) + res.iadd(this.m); + return res; +}; -var aes = require('browserify-cipher') -;[ - 'Cipher', - 'createCipher', - 'Cipheriv', - 'createCipheriv', - 'Decipher', - 'createDecipher', - 'Decipheriv', - 'createDecipheriv', - 'getCiphers', - 'listCiphers' -].forEach(function (key) { - exports[key] = aes[key] -}) +Red.prototype.shl = function shl(a, num) { + this._verify1(a); + return this.imod(a.shln(num)); +}; -var dh = require('diffie-hellman') -;[ - 'DiffieHellmanGroup', - 'createDiffieHellmanGroup', - 'getDiffieHellman', - 'createDiffieHellman', - 'DiffieHellman' -].forEach(function (key) { - exports[key] = dh[key] -}) +Red.prototype.imul = function imul(a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); +}; -var sign = require('browserify-sign') -;[ - 'createSign', - 'Sign', - 'createVerify', - 'Verify' -].forEach(function (key) { - exports[key] = sign[key] -}) +Red.prototype.mul = function mul(a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); +}; -exports.createECDH = require('create-ecdh') +Red.prototype.isqr = function isqr(a) { + return this.imul(a, a); +}; -var publicEncrypt = require('public-encrypt') +Red.prototype.sqr = function sqr(a) { + return this.mul(a, a); +}; -;[ - 'publicEncrypt', - 'privateEncrypt', - 'publicDecrypt', - 'privateDecrypt' -].forEach(function (key) { - exports[key] = publicEncrypt[key] -}) +Red.prototype.sqrt = function sqrt(a) { + if (a.cmpn(0) === 0) + return a.clone(); -// the least I can do is make error messages for the rest of the node.js/crypto api. -;[ - 'createCredentials' -].forEach(function (name) { - exports[name] = function () { - throw new Error([ - 'sorry, ' + name + ' is not implemented yet', - 'we accept pull requests', - 'https://github.com/crypto-browserify/crypto-browserify' - ].join('\n')) + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); + + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).ishrn(2); + var r = this.pow(a, pow); + return r; } -}) -},{"browserify-cipher":104,"browserify-sign":134,"browserify-sign/algos":133,"create-ecdh":201,"create-hash":227,"create-hmac":240,"diffie-hellman":241,"pbkdf2":248,"public-encrypt":249,"randombytes":294}],104:[function(require,module,exports){ -var ebtk = require('evp_bytestokey') -var aes = require('browserify-aes/browser') -var DES = require('browserify-des') -var desModes = require('browserify-des/modes') -var aesModes = require('browserify-aes/modes') -function createCipher (suite, password) { - var keyLen, ivLen - suite = suite.toLowerCase() - if (aesModes[suite]) { - keyLen = aesModes[suite].key - ivLen = aesModes[suite].iv - } else if (desModes[suite]) { - keyLen = desModes[suite].key * 8 - ivLen = desModes[suite].iv - } else { - throw new TypeError('invalid suite type') + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (q.cmpn(0) !== 0 && q.andln(1) === 0) { + s++; + q.ishrn(1); } - var keys = ebtk(password, false, keyLen, ivLen) - return createCipheriv(suite, keys.key, keys.iv) -} -function createDecipher (suite, password) { - var keyLen, ivLen - suite = suite.toLowerCase() - if (aesModes[suite]) { - keyLen = aesModes[suite].key - ivLen = aesModes[suite].iv - } else if (desModes[suite]) { - keyLen = desModes[suite].key * 8 - ivLen = desModes[suite].iv - } else { - throw new TypeError('invalid suite type') + assert(q.cmpn(0) !== 0); + + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); + + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).ishrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); + while (this.pow(z, lpow).cmp(nOne) !== 0) + z.redIAdd(nOne); + + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).ishrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) + tmp = tmp.redSqr(); + assert(i < m); + var b = this.pow(c, new BN(1).ishln(m - i - 1)); + + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; } - var keys = ebtk(password, false, keyLen, ivLen) - return createDecipheriv(suite, keys.key, keys.iv) -} -function createCipheriv (suite, key, iv) { - suite = suite.toLowerCase() - if (aesModes[suite]) { - return aes.createCipheriv(suite, key, iv) - } else if (desModes[suite]) { - return new DES({ - key: key, - iv: iv, - mode: suite - }) + return r; +}; + +Red.prototype.invm = function invm(a) { + var inv = a._invmp(this.m); + if (inv.sign) { + inv.sign = false; + return this.imod(inv).redNeg(); } else { - throw new TypeError('invalid suite type') + return this.imod(inv); } -} -function createDecipheriv (suite, key, iv) { - suite = suite.toLowerCase() - if (aesModes[suite]) { - return aes.createDecipheriv(suite, key, iv) - } else if (desModes[suite]) { - return new DES({ - key: key, - iv: iv, - mode: suite, - decrypt: true - }) - } else { - throw new TypeError('invalid suite type') +}; + +Red.prototype.pow = function pow(a, num) { + var w = []; + + if (num.cmpn(0) === 0) + return new BN(1); + + var q = num.clone(); + + while (q.cmpn(0) !== 0) { + w.push(q.andln(1)); + q.ishrn(1); } + + // Skip leading zeroes + var res = a; + for (var i = 0; i < w.length; i++, res = this.sqr(res)) + if (w[i] !== 0) + break; + + if (++i < w.length) { + for (var q = this.sqr(res); i < w.length; i++, q = this.sqr(q)) { + if (w[i] === 0) + continue; + res = this.mul(res, q); + } + } + + return res; +}; + +Red.prototype.convertTo = function convertTo(num) { + var r = num.mod(this.m); + if (r === num) + return r.clone(); + else + return r; +}; + +Red.prototype.convertFrom = function convertFrom(num) { + var res = num.clone(); + res.red = null; + return res; +}; + +// +// Montgomery method engine +// + +BN.mont = function mont(num) { + return new Mont(num); +}; + +function Mont(m) { + Red.call(this, m); + + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) + this.shift += 26 - (this.shift % 26); + this.r = new BN(1).ishln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); + + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv.sign = true; + this.minv = this.minv.mod(this.r); } -exports.createCipher = exports.Cipher = createCipher -exports.createCipheriv = exports.Cipheriv = createCipheriv -exports.createDecipher = exports.Decipher = createDecipher -exports.createDecipheriv = exports.Decipheriv = createDecipheriv -function getCiphers () { - return Object.keys(desModes).concat(aes.getCiphers()) -} -exports.listCiphers = exports.getCiphers = getCiphers +inherits(Mont, Red); + +Mont.prototype.convertTo = function convertTo(num) { + return this.imod(num.shln(this.shift)); +}; + +Mont.prototype.convertFrom = function convertFrom(num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; +}; + +Mont.prototype.imul = function imul(a, b) { + if (a.cmpn(0) === 0 || b.cmpn(0) === 0) { + a.words[0] = 0; + a.length = 1; + return a; + } + + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).ishrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) + res = u.isub(this.m); + else if (u.cmpn(0) < 0) + res = u.iadd(this.m); + + return res._forceRed(this); +}; + +Mont.prototype.mul = function mul(a, b) { + if (a.cmpn(0) === 0 || b.cmpn(0) === 0) + return new BN(0)._forceRed(this); -},{"browserify-aes/browser":107,"browserify-aes/modes":111,"browserify-des":122,"browserify-des/modes":123,"evp_bytestokey":132}],105:[function(require,module,exports){ + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).ishrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) + res = u.isub(this.m); + else if (u.cmpn(0) < 0) + res = u.iadd(this.m); + + return res._forceRed(this); +}; + +Mont.prototype.invm = function invm(a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); +}; + +})(typeof module === 'undefined' || module, this); + +},{}],99:[function(require,module,exports){ +arguments[4][71][0].apply(exports,arguments) +},{"dup":71}],100:[function(require,module,exports){ + +},{}],101:[function(require,module,exports){ (function (Buffer){ // based on the aes implimentation in triple sec // https://github.com/keybase/triplesec @@ -35984,7 +36169,7 @@ AES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) { exports.AES = AES }).call(this,require("buffer").Buffer) -},{"buffer":99}],106:[function(require,module,exports){ +},{"buffer":147}],102:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -36085,7 +36270,7 @@ function xorTest (a, b) { } }).call(this,require("buffer").Buffer) -},{"./aes":105,"./ghash":110,"buffer":99,"buffer-xor":119,"cipher-base":120,"inherits":296}],107:[function(require,module,exports){ +},{"./aes":101,"./ghash":106,"buffer":147,"buffer-xor":146,"cipher-base":149,"inherits":226}],103:[function(require,module,exports){ var ciphers = require('./encrypter') exports.createCipher = exports.Cipher = ciphers.createCipher exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv @@ -36098,7 +36283,7 @@ function getCiphers () { } exports.listCiphers = exports.getCiphers = getCiphers -},{"./decrypter":108,"./encrypter":109,"./modes":111}],108:[function(require,module,exports){ +},{"./decrypter":104,"./encrypter":105,"./modes":107}],104:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -36239,7 +36424,7 @@ exports.createDecipher = createDecipher exports.createDecipheriv = createDecipheriv }).call(this,require("buffer").Buffer) -},{"./aes":105,"./authCipher":106,"./modes":111,"./modes/cbc":112,"./modes/cfb":113,"./modes/cfb1":114,"./modes/cfb8":115,"./modes/ctr":116,"./modes/ecb":117,"./modes/ofb":118,"./streamCipher":121,"buffer":99,"cipher-base":120,"evp_bytestokey":132,"inherits":296}],109:[function(require,module,exports){ +},{"./aes":101,"./authCipher":102,"./modes":107,"./modes/cbc":108,"./modes/cfb":109,"./modes/cfb1":110,"./modes/cfb8":111,"./modes/ctr":112,"./modes/ecb":113,"./modes/ofb":114,"./streamCipher":115,"buffer":147,"cipher-base":149,"evp_bytestokey":218,"inherits":226}],105:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -36365,7 +36550,7 @@ exports.createCipheriv = createCipheriv exports.createCipher = createCipher }).call(this,require("buffer").Buffer) -},{"./aes":105,"./authCipher":106,"./modes":111,"./modes/cbc":112,"./modes/cfb":113,"./modes/cfb1":114,"./modes/cfb8":115,"./modes/ctr":116,"./modes/ecb":117,"./modes/ofb":118,"./streamCipher":121,"buffer":99,"cipher-base":120,"evp_bytestokey":132,"inherits":296}],110:[function(require,module,exports){ +},{"./aes":101,"./authCipher":102,"./modes":107,"./modes/cbc":108,"./modes/cfb":109,"./modes/cfb1":110,"./modes/cfb8":111,"./modes/ctr":112,"./modes/ecb":113,"./modes/ofb":114,"./streamCipher":115,"buffer":147,"cipher-base":149,"evp_bytestokey":218,"inherits":226}],106:[function(require,module,exports){ (function (Buffer){ var zeros = new Buffer(16) zeros.fill(0) @@ -36467,7 +36652,7 @@ function xor (a, b) { } }).call(this,require("buffer").Buffer) -},{"buffer":99}],111:[function(require,module,exports){ +},{"buffer":147}],107:[function(require,module,exports){ exports['aes-128-ecb'] = { cipher: 'AES', key: 128, @@ -36640,7 +36825,7 @@ exports['aes-256-gcm'] = { type: 'auth' } -},{}],112:[function(require,module,exports){ +},{}],108:[function(require,module,exports){ var xor = require('buffer-xor') exports.encrypt = function (self, block) { @@ -36659,7 +36844,7 @@ exports.decrypt = function (self, block) { return xor(out, pad) } -},{"buffer-xor":119}],113:[function(require,module,exports){ +},{"buffer-xor":146}],109:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') @@ -36694,7 +36879,7 @@ function encryptStart (self, data, decrypt) { } }).call(this,require("buffer").Buffer) -},{"buffer":99,"buffer-xor":119}],114:[function(require,module,exports){ +},{"buffer":147,"buffer-xor":146}],110:[function(require,module,exports){ (function (Buffer){ function encryptByte (self, byteParam, decrypt) { var pad @@ -36732,7 +36917,7 @@ function shiftIn (buffer, value) { } }).call(this,require("buffer").Buffer) -},{"buffer":99}],115:[function(require,module,exports){ +},{"buffer":147}],111:[function(require,module,exports){ (function (Buffer){ function encryptByte (self, byteParam, decrypt) { var pad = self._cipher.encryptBlock(self._prev) @@ -36751,7 +36936,7 @@ exports.encrypt = function (self, chunk, decrypt) { } }).call(this,require("buffer").Buffer) -},{"buffer":99}],116:[function(require,module,exports){ +},{"buffer":147}],112:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') @@ -36786,7 +36971,7 @@ exports.encrypt = function (self, chunk) { } }).call(this,require("buffer").Buffer) -},{"buffer":99,"buffer-xor":119}],117:[function(require,module,exports){ +},{"buffer":147,"buffer-xor":146}],113:[function(require,module,exports){ exports.encrypt = function (self, block) { return self._cipher.encryptBlock(block) } @@ -36794,7 +36979,7 @@ exports.decrypt = function (self, block) { return self._cipher.decryptBlock(block) } -},{}],118:[function(require,module,exports){ +},{}],114:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') @@ -36814,115 +36999,7 @@ exports.encrypt = function (self, chunk) { } }).call(this,require("buffer").Buffer) -},{"buffer":99,"buffer-xor":119}],119:[function(require,module,exports){ -(function (Buffer){ -module.exports = function xor (a, b) { - var length = Math.min(a.length, b.length) - var buffer = new Buffer(length) - - for (var i = 0; i < length; ++i) { - buffer[i] = a[i] ^ b[i] - } - - return buffer -} - -}).call(this,require("buffer").Buffer) -},{"buffer":99}],120:[function(require,module,exports){ -(function (Buffer){ -var Transform = require('stream').Transform -var inherits = require('inherits') -var StringDecoder = require('string_decoder').StringDecoder -module.exports = CipherBase -inherits(CipherBase, Transform) -function CipherBase (hashMode) { - Transform.call(this) - this.hashMode = typeof hashMode === 'string' - if (this.hashMode) { - this[hashMode] = this._finalOrDigest - } else { - this.final = this._finalOrDigest - } - this._decoder = null - this._encoding = null -} -CipherBase.prototype.update = function (data, inputEnc, outputEnc) { - if (typeof data === 'string') { - data = new Buffer(data, inputEnc) - } - var outData = this._update(data) - if (this.hashMode) { - return this - } - if (outputEnc) { - outData = this._toString(outData, outputEnc) - } - return outData -} - -CipherBase.prototype.setAutoPadding = function () {} - -CipherBase.prototype.getAuthTag = function () { - throw new Error('trying to get auth tag in unsupported state') -} - -CipherBase.prototype.setAuthTag = function () { - throw new Error('trying to set auth tag in unsupported state') -} - -CipherBase.prototype.setAAD = function () { - throw new Error('trying to set aad in unsupported state') -} - -CipherBase.prototype._transform = function (data, _, next) { - var err - try { - if (this.hashMode) { - this._update(data) - } else { - this.push(this._update(data)) - } - } catch (e) { - err = e - } finally { - next(err) - } -} -CipherBase.prototype._flush = function (done) { - var err - try { - this.push(this._final()) - } catch (e) { - err = e - } finally { - done(err) - } -} -CipherBase.prototype._finalOrDigest = function (outputEnc) { - var outData = this._final() || new Buffer('') - if (outputEnc) { - outData = this._toString(outData, outputEnc, true) - } - return outData -} - -CipherBase.prototype._toString = function (value, enc, final) { - if (!this._decoder) { - this._decoder = new StringDecoder(enc) - this._encoding = enc - } - if (this._encoding !== enc) { - throw new Error('can\'t switch encodings') - } - var out = this._decoder.write(value) - if (final) { - out += this._decoder.end() - } - return out -} - -}).call(this,require("buffer").Buffer) -},{"buffer":99,"inherits":296,"stream":315,"string_decoder":316}],121:[function(require,module,exports){ +},{"buffer":147,"buffer-xor":146}],115:[function(require,module,exports){ (function (Buffer){ var aes = require('./aes') var Transform = require('cipher-base') @@ -36951,7 +37028,82 @@ StreamCipher.prototype._final = function () { } }).call(this,require("buffer").Buffer) -},{"./aes":105,"buffer":99,"cipher-base":120,"inherits":296}],122:[function(require,module,exports){ +},{"./aes":101,"buffer":147,"cipher-base":149,"inherits":226}],116:[function(require,module,exports){ +var ebtk = require('evp_bytestokey') +var aes = require('browserify-aes/browser') +var DES = require('browserify-des') +var desModes = require('browserify-des/modes') +var aesModes = require('browserify-aes/modes') +function createCipher (suite, password) { + var keyLen, ivLen + suite = suite.toLowerCase() + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + var keys = ebtk(password, false, keyLen, ivLen) + return createCipheriv(suite, keys.key, keys.iv) +} +function createDecipher (suite, password) { + var keyLen, ivLen + suite = suite.toLowerCase() + if (aesModes[suite]) { + keyLen = aesModes[suite].key + ivLen = aesModes[suite].iv + } else if (desModes[suite]) { + keyLen = desModes[suite].key * 8 + ivLen = desModes[suite].iv + } else { + throw new TypeError('invalid suite type') + } + var keys = ebtk(password, false, keyLen, ivLen) + return createDecipheriv(suite, keys.key, keys.iv) +} + +function createCipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) { + return aes.createCipheriv(suite, key, iv) + } else if (desModes[suite]) { + return new DES({ + key: key, + iv: iv, + mode: suite + }) + } else { + throw new TypeError('invalid suite type') + } +} +function createDecipheriv (suite, key, iv) { + suite = suite.toLowerCase() + if (aesModes[suite]) { + return aes.createDecipheriv(suite, key, iv) + } else if (desModes[suite]) { + return new DES({ + key: key, + iv: iv, + mode: suite, + decrypt: true + }) + } else { + throw new TypeError('invalid suite type') + } +} +exports.createCipher = exports.Cipher = createCipher +exports.createCipheriv = exports.Cipheriv = createCipheriv +exports.createDecipher = exports.Decipher = createDecipher +exports.createDecipheriv = exports.Decipheriv = createDecipheriv +function getCiphers () { + return Object.keys(desModes).concat(aes.getCiphers()) +} +exports.listCiphers = exports.getCiphers = getCiphers + +},{"browserify-aes/browser":103,"browserify-aes/modes":107,"browserify-des":117,"browserify-des/modes":118,"evp_bytestokey":218}],117:[function(require,module,exports){ (function (Buffer){ var CipherBase = require('cipher-base') var des = require('des.js') @@ -36998,7 +37150,7 @@ DES.prototype._final = function () { } }).call(this,require("buffer").Buffer) -},{"buffer":99,"cipher-base":124,"des.js":125,"inherits":296}],123:[function(require,module,exports){ +},{"buffer":147,"cipher-base":149,"des.js":186,"inherits":226}],118:[function(require,module,exports){ exports['des-ecb'] = { key: 8, iv: 0 @@ -37024,9577 +37176,6839 @@ exports['des-ede'] = { iv: 0 } -},{}],124:[function(require,module,exports){ -arguments[4][120][0].apply(exports,arguments) -},{"buffer":99,"dup":120,"inherits":296,"stream":315,"string_decoder":316}],125:[function(require,module,exports){ -'use strict'; - -exports.utils = require('./des/utils'); -exports.Cipher = require('./des/cipher'); -exports.DES = require('./des/des'); -exports.CBC = require('./des/cbc'); -exports.EDE = require('./des/ede'); - -},{"./des/cbc":126,"./des/cipher":127,"./des/des":128,"./des/ede":129,"./des/utils":130}],126:[function(require,module,exports){ -'use strict'; - -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); - -var proto = {}; - -function CBCState(iv) { - assert.equal(iv.length, 8, 'Invalid IV length'); - - this.iv = new Array(8); - for (var i = 0; i < this.iv.length; i++) - this.iv[i] = iv[i]; +},{}],119:[function(require,module,exports){ +(function (Buffer){ +var bn = require('bn.js'); +var randomBytes = require('randombytes'); +module.exports = crt; +function blind(priv) { + var r = getr(priv); + var blinder = r.toRed(bn.mont(priv.modulus)) + .redPow(new bn(priv.publicExponent)).fromRed(); + return { + blinder: blinder, + unblinder:r.invm(priv.modulus) + }; } - -function instantiate(Base) { - function CBC(options) { - Base.call(this, options); - this._cbcInit(); +function crt(msg, priv) { + var blinds = blind(priv); + var len = priv.modulus.byteLength(); + var mod = bn.mont(priv.modulus); + var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus); + var c1 = blinded.toRed(bn.mont(priv.prime1)); + var c2 = blinded.toRed(bn.mont(priv.prime2)); + var qinv = priv.coefficient; + var p = priv.prime1; + var q = priv.prime2; + var m1 = c1.redPow(priv.exponent1); + var m2 = c2.redPow(priv.exponent2); + m1 = m1.fromRed(); + m2 = m2.fromRed(); + var h = m1.isub(m2).imul(qinv).umod(p); + h.imul(q); + m2.iadd(h); + return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len)); +} +crt.getr = getr; +function getr(priv) { + var len = priv.modulus.byteLength(); + var r = new bn(randomBytes(len)); + while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) { + r = new bn(randomBytes(len)); } - inherits(CBC, Base); + return r; +} - var keys = Object.keys(proto); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - CBC.prototype[key] = proto[key]; - } +}).call(this,require("buffer").Buffer) +},{"bn.js":120,"buffer":147,"randombytes":247}],120:[function(require,module,exports){ +(function (module, exports) { + 'use strict'; - CBC.create = function create(options) { - return new CBC(options); - }; + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } - return CBC; -} + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } -exports.instantiate = instantiate; + // BN -proto._cbcInit = function _cbcInit() { - var state = new CBCState(this.options.iv); - this._cbcState = state; -}; + function BN (number, base, endian) { + // May be `new BN(bn)` ? + if (number !== null && + typeof number === 'object' && + Array.isArray(number.words)) { + return number; + } -proto._update = function _update(inp, inOff, out, outOff) { - var state = this._cbcState; - var superProto = this.constructor.super_.prototype; + this.negative = 0; + this.words = null; + this.length = 0; - var iv = state.iv; - if (this.type === 'encrypt') { - for (var i = 0; i < this.blockSize; i++) - iv[i] ^= inp[inOff + i]; + // Reduction context + this.red = null; - superProto._update.call(this, iv, 0, out, outOff); + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } - for (var i = 0; i < this.blockSize; i++) - iv[i] = out[outOff + i]; + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; } else { - superProto._update.call(this, inp, inOff, out, outOff); + exports.BN = BN; + } - for (var i = 0; i < this.blockSize; i++) - out[outOff + i] ^= iv[i]; + BN.BN = BN; + BN.wordSize = 26; - for (var i = 0; i < this.blockSize; i++) - iv[i] = inp[inOff + i]; + var Buffer; + try { + Buffer = require('buf' + 'fer').Buffer; + } catch (e) { } -}; - -},{"inherits":296,"minimalistic-assert":131}],127:[function(require,module,exports){ -'use strict'; -var assert = require('minimalistic-assert'); + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; -function Cipher(options) { - this.options = options; + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; - this.type = this.options.type; - this.blockSize = 8; - this._init(); + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } - this.buffer = new Array(this.blockSize); - this.bufferOff = 0; -} -module.exports = Cipher; + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } -Cipher.prototype._init = function _init() { - // Might be overrided -}; + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); -Cipher.prototype.update = function update(data) { - if (data.length === 0) - return []; + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + } - if (this.type === 'decrypt') - return this._updateDecrypt(data); - else - return this._updateEncrypt(data); -}; + if (base === 16) { + this._parseHex(number, start); + } else { + this._parseBase(number, base, start); + } -Cipher.prototype._buffer = function _buffer(data, off) { - // Append data to buffer - var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); - for (var i = 0; i < min; i++) - this.buffer[this.bufferOff + i] = data[off + i]; - this.bufferOff += min; + if (number[0] === '-') { + this.negative = 1; + } - // Shift next - return min; -}; + this.strip(); -Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { - this._update(this.buffer, 0, out, off); - this.bufferOff = 0; - return this.blockSize; -}; + if (endian !== 'le') return; -Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { - var inputOff = 0; - var outputOff = 0; + this._initArray(this.toArray(), base, endian); + }; - var count = ((this.bufferOff + data.length) / this.blockSize) | 0; - var out = new Array(count * this.blockSize); + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } - if (this.bufferOff !== 0) { - inputOff += this._buffer(data, inputOff); + if (endian !== 'le') return; - if (this.bufferOff === this.buffer.length) - outputOff += this._flushBuffer(out, outputOff); - } + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; - // Write blocks - var max = data.length - ((data.length - inputOff) % this.blockSize); - for (; inputOff < max; inputOff += this.blockSize) { - this._update(data, inputOff, out, outputOff); - outputOff += this.blockSize; - } + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } - // Queue rest - for (; inputOff < data.length; inputOff++, this.bufferOff++) - this.buffer[this.bufferOff] = data[inputOff]; + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } - return out; -}; + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this.strip(); + }; -Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { - var inputOff = 0; - var outputOff = 0; + function parseHex (str, start, end) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; - var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; - var out = new Array(count * this.blockSize); + r <<= 4; - // TODO(indutny): optimize it, this is far from optimal - for (; count > 0; count--) { - inputOff += this._buffer(data, inputOff); - outputOff += this._flushBuffer(out, outputOff); - } + // 'a' - 'f' + if (c >= 49 && c <= 54) { + r |= c - 49 + 0xa; - // Buffer rest of the input - inputOff += this._buffer(data, inputOff); + // 'A' - 'F' + } else if (c >= 17 && c <= 22) { + r |= c - 17 + 0xa; - return out; -}; - -Cipher.prototype.final = function final(buffer) { - var first; - if (buffer) - first = this.update(buffer); + // '0' - '9' + } else { + r |= c & 0xf; + } + } + return r; + } - var last; - if (this.type === 'encrypt') - last = this._finalEncrypt(); - else - last = this._finalDecrypt(); + BN.prototype._parseHex = function _parseHex (number, start) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } - if (first) - return first.concat(last); - else - return last; -}; + var j, w; + // Scan 24-bit chunks and add them to the number + var off = 0; + for (i = number.length - 6, j = 0; i >= start; i -= 6) { + w = parseHex(number, i, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + if (i + 6 !== start) { + w = parseHex(number, start, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + } + this.strip(); + }; -Cipher.prototype._pad = function _pad(buffer, off) { - if (off === 0) - return false; + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; - while (off < buffer.length) - buffer[off++] = 0; + r *= mul; - return true; -}; + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; -Cipher.prototype._finalEncrypt = function _finalEncrypt() { - if (!this._pad(this.buffer, this.bufferOff)) - return []; + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; - var out = new Array(this.blockSize); - this._update(this.buffer, 0, out, 0); - return out; -}; + // '0' - '9' + } else { + r += c; + } + } + return r; + } -Cipher.prototype._unpad = function _unpad(buffer) { - return buffer; -}; + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; -Cipher.prototype._finalDecrypt = function _finalDecrypt() { - assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); - var out = new Array(this.blockSize); - this._flushBuffer(out, 0); + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; - return this._unpad(out); -}; + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; -},{"minimalistic-assert":131}],128:[function(require,module,exports){ -'use strict'; + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } -var des = require('../des'); -var utils = des.utils; -var Cipher = des.Cipher; + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); -function DESState() { - this.tmp = new Array(2); - this.keys = null; -} + for (i = 0; i < mod; i++) { + pow *= base; + } -function DES(options) { - Cipher.call(this, options); + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + }; - var state = new DESState(); - this._desState = state; + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; - this.deriveKeys(state, options.key); -} -inherits(DES, Cipher); -module.exports = DES; + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; -DES.create = function create(options) { - return new DES(options); -}; + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; -var shiftTable = [ - 1, 1, 2, 2, 2, 2, 2, 2, - 1, 2, 2, 2, 2, 2, 2, 1 -]; + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; -DES.prototype.deriveKeys = function deriveKeys(state, key) { - state.keys = new Array(16 * 2); + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; - assert.equal(key.length, this.blockSize, 'Invalid key length'); + /* - var kL = utils.readUInt32BE(key, 0); - var kR = utils.readUInt32BE(key, 4); + var zeros = []; + var groupSizes = []; + var groupBases = []; - utils.pc1(kL, kR, state.tmp, 0); - kL = state.tmp[0]; - kR = state.tmp[1]; - for (var i = 0; i < state.keys.length; i += 2) { - var shift = shiftTable[i >>> 1]; - kL = utils.r28shl(kL, shift); - kR = utils.r28shl(kR, shift); - utils.pc2(kL, kR, state.keys, i); + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; } -}; - -DES.prototype._update = function _update(inp, inOff, out, outOff) { - var state = this._desState; - - var l = utils.readUInt32BE(inp, inOff); - var r = utils.readUInt32BE(inp, inOff + 4); - - // Initial Permutation - utils.ip(l, r, state.tmp, 0); - l = state.tmp[0]; - r = state.tmp[1]; - - if (this.type === 'encrypt') - this._encrypt(state, l, r, state.tmp, 0); - else - this._decrypt(state, l, r, state.tmp, 0); - - l = state.tmp[0]; - r = state.tmp[1]; - - utils.writeUInt32BE(out, l, outOff); - utils.writeUInt32BE(out, r, outOff + 4); -}; -DES.prototype._pad = function _pad(buffer, off) { - var value = buffer.length - off; - for (var i = off; i < buffer.length; i++) - buffer[i] = value; + */ - return true; -}; + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; -DES.prototype._unpad = function _unpad(buffer) { - var pad = buffer[buffer.length - 1]; - for (var i = buffer.length - pad; i < buffer.length; i++) - assert.equal(buffer[i], pad); + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; - return buffer.slice(0, buffer.length - pad); -}; + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; -DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { - var l = lStart; - var r = rStart; + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; - // Apply f() x16 times - for (var i = 0; i < state.keys.length; i += 2) { - var keyL = state.keys[i]; - var keyR = state.keys[i + 1]; + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } - // f(r, k) - utils.expand(r, state.tmp, 0); + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); - keyL ^= state.tmp[0]; - keyR ^= state.tmp[1]; - var s = utils.substitute(keyL, keyR); - var f = utils.permute(s); + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } - var t = r; - r = (l ^ f) >>> 0; - l = t; - } + assert(false, 'Base should be between 2 and 36'); + }; - // Reverse Initial Permutation - utils.rip(r, l, out, off); -}; + BN.prototype.toNumber = function toNumber () { + var length = this.bitLength(); + var ret; + if (length <= 26) { + ret = this.words[0]; + } else if (length <= 52) { + ret = (this.words[1] * 0x4000000) + this.words[0]; + } else if (length === 53) { + // NOTE: at this stage it is known that the top bit is set + ret = 0x10000000000000 + (this.words[1] * 0x4000000) + this.words[0]; + } else { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; -DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { - var l = rStart; - var r = lStart; + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; - // Apply f() x16 times - for (var i = state.keys.length - 2; i >= 0; i -= 2) { - var keyL = state.keys[i]; - var keyR = state.keys[i + 1]; + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; - // f(r, k) - utils.expand(l, state.tmp, 0); + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; - keyL ^= state.tmp[0]; - keyR ^= state.tmp[1]; - var s = utils.substitute(keyL, keyR); - var f = utils.permute(s); + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); - var t = l; - l = (r ^ f) >>> 0; - r = t; - } + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); - // Reverse Initial Permutation - utils.rip(l, r, out, off); -}; + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } -},{"../des":125,"inherits":296,"minimalistic-assert":131}],129:[function(require,module,exports){ -'use strict'; + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); -var assert = require('minimalistic-assert'); -var inherits = require('inherits'); + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); -var des = require('../des'); -var Cipher = des.Cipher; -var DES = des.DES; + res[i] = b; + } -function EDEState(type, key) { - assert.equal(key.length, 24, 'Invalid key length'); + for (; i < reqLength; i++) { + res[i] = 0; + } + } - var k1 = key.slice(0, 8); - var k2 = key.slice(8, 16); - var k3 = key.slice(16, 24); + return res; + }; - if (type === 'encrypt') { - this.ciphers = [ - DES.create({ type: 'encrypt', key: k1 }), - DES.create({ type: 'decrypt', key: k2 }), - DES.create({ type: 'encrypt', key: k3 }) - ]; + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; } else { - this.ciphers = [ - DES.create({ type: 'decrypt', key: k3 }), - DES.create({ type: 'encrypt', key: k2 }), - DES.create({ type: 'decrypt', key: k1 }) - ]; + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; } -} -function EDE(options) { - Cipher.call(this, options); + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; - var state = new EDEState(this.type, this.options.key); - this._edeState = state; -} -inherits(EDE, Cipher); + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; -module.exports = EDE; + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; -EDE.create = function create(options) { - return new EDE(options); -}; + function toBitArray (num) { + var w = new Array(num.bitLength()); -EDE.prototype._update = function _update(inp, inOff, out, outOff) { - var state = this._edeState; + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; - state.ciphers[0]._update(inp, inOff, out, outOff); - state.ciphers[1]._update(out, outOff, out, outOff); - state.ciphers[2]._update(out, outOff, out, outOff); -}; + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } -EDE.prototype._pad = DES.prototype._pad; -EDE.prototype._unpad = DES.prototype._unpad; + return w; + } -},{"../des":125,"inherits":296,"minimalistic-assert":131}],130:[function(require,module,exports){ -'use strict'; + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; -exports.readUInt32BE = function readUInt32BE(bytes, off) { - var res = (bytes[0 + off] << 24) | - (bytes[1 + off] << 16) | - (bytes[2 + off] << 8) | - bytes[3 + off]; - return res >>> 0; -}; + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; -exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { - bytes[0 + off] = value >>> 24; - bytes[1 + off] = (value >>> 16) & 0xff; - bytes[2 + off] = (value >>> 8) & 0xff; - bytes[3 + off] = value & 0xff; -}; + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; -exports.ip = function ip(inL, inR, out, off) { - var outL = 0; - var outR = 0; + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; - for (var i = 6; i >= 0; i -= 2) { - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >>> (j + i)) & 1; + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inL >>> (j + i)) & 1; + return this.clone(); + }; + + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; + + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; + + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; } - } - for (var i = 6; i >= 0; i -= 2) { - for (var j = 1; j <= 25; j += 8) { - outR <<= 1; - outR |= (inR >>> (j + i)) & 1; + return this; + }; + + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; } - for (var j = 1; j <= 25; j += 8) { - outR <<= 1; - outR |= (inL >>> (j + i)) & 1; + + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; } - } - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; + return this.strip(); + }; -exports.rip = function rip(inL, inR, out, off) { - var outL = 0; - var outR = 0; + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; - for (var i = 0; i < 4; i++) { - for (var j = 24; j >= 0; j -= 8) { - outL <<= 1; - outL |= (inR >>> (j + i)) & 1; - outL <<= 1; - outL |= (inL >>> (j + i)) & 1; + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; + + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; } - } - for (var i = 4; i < 8; i++) { - for (var j = 24; j >= 0; j -= 8) { - outR <<= 1; - outR |= (inR >>> (j + i)) & 1; - outR <<= 1; - outR |= (inL >>> (j + i)) & 1; + + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; } - } - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; + this.length = b.length; -exports.pc1 = function pc1(inL, inR, out, off) { - var outL = 0; - var outR = 0; + return this.strip(); + }; - // 7, 15, 23, 31, 39, 47, 55, 63 - // 6, 14, 22, 30, 39, 47, 55, 63 - // 5, 13, 21, 29, 39, 47, 55, 63 - // 4, 12, 20, 28 - for (var i = 7; i >= 5; i--) { - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >> (j + i)) & 1; - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inL >> (j + i)) & 1; + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; + + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; + + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; + + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; } - } - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= (inR >> (j + i)) & 1; - } - // 1, 9, 17, 25, 33, 41, 49, 57 - // 2, 10, 18, 26, 34, 42, 50, 58 - // 3, 11, 19, 27, 35, 43, 51, 59 - // 36, 44, 52, 60 - for (var i = 1; i <= 3; i++) { - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inR >> (j + i)) & 1; + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; } - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inL >> (j + i)) & 1; + + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } } - } - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= (inL >> (j + i)) & 1; - } - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; + this.length = a.length; -exports.r28shl = function r28shl(num, shift) { - return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); -}; + return this.strip(); + }; -var pc2table = [ - // inL => outL - 14, 11, 17, 4, 27, 23, 25, 0, - 13, 22, 7, 18, 5, 9, 16, 24, - 2, 20, 12, 21, 1, 8, 15, 26, + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; - // inR => outR - 15, 4, 25, 19, 9, 1, 26, 16, - 5, 11, 23, 8, 12, 7, 17, 0, - 22, 3, 10, 14, 6, 20, 27, 24 -]; + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; -exports.pc2 = function pc2(inL, inR, out, off) { - var outL = 0; - var outR = 0; + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; - var len = pc2table.length >>> 1; - for (var i = 0; i < len; i++) { - outL <<= 1; - outL |= (inL >>> pc2table[i]) & 0x1; - } - for (var i = len; i < pc2table.length; i++) { - outR <<= 1; - outR |= (inR >>> pc2table[i]) & 0x1; - } + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; -exports.expand = function expand(r, out, off) { - var outL = 0; - var outR = 0; + // Extend the buffer with leading zeroes + while (this.length < bytesNeeded) { + this.words[this.length++] = 0; + } - outL = ((r & 1) << 5) | (r >>> 27); - for (var i = 23; i >= 15; i -= 4) { - outL <<= 6; - outL |= (r >>> i) & 0x3f; - } - for (var i = 11; i >= 3; i -= 4) { - outR |= (r >>> i) & 0x3f; - outR <<= 6; - } - outR |= ((r & 0x1f) << 1) | (r >>> 31); + if (bitsLeft > 0) { + bytesNeeded--; + } - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; -}; + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } -var sTable = [ - 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, - 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, - 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, - 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } - 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, - 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, - 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, - 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, + // And remove leading zeroes + return this.strip(); + }; - 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, - 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, - 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, - 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; - 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, - 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, - 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, - 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); - 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, - 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, - 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, - 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, + var off = (bit / 26) | 0; + var wbit = bit % 26; - 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, - 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, - 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, - 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, + while (this.length <= off) { + this.words[this.length++] = 0; + } - 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, - 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, - 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, - 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } - 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, - 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, - 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, - 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 -]; + return this.strip(); + }; -exports.substitute = function substitute(inL, inR) { - var out = 0; - for (var i = 0; i < 4; i++) { - var b = (inL >>> (18 - i * 6)) & 0x3f; - var sb = sTable[i * 0x40 + b]; + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; - out <<= 4; - out |= sb; - } - for (var i = 0; i < 4; i++) { - var b = (inR >>> (18 - i * 6)) & 0x3f; - var sb = sTable[4 * 0x40 + i * 0x40 + b]; + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); - out <<= 4; - out |= sb; - } - return out >>> 0; -}; + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } -var permuteTable = [ - 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, - 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 -]; + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } -exports.permute = function permute(num) { - var out = 0; - for (var i = 0; i < permuteTable.length; i++) { - out <<= 1; - out |= (num >>> permuteTable[i]) & 0x1; - } - return out >>> 0; -}; + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } -exports.padSplit = function padSplit(num, size, group) { - var str = num.toString(2); - while (str.length < size) - str = '0' + str; + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } - var out = []; - for (var i = 0; i < size; i += group) - out.push(str.slice(i, i + group)); - return out.join(' '); -}; + return this; + }; -},{}],131:[function(require,module,exports){ -module.exports = assert; + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } -function assert(val, msg) { - if (!val) - throw new Error(msg || 'Assertion failed'); -} + if (this.length > num.length) return this.clone().iadd(num); -assert.equal = function assertEqual(l, r, msg) { - if (l != r) - throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); -}; + return num.clone().iadd(this); + }; -},{}],132:[function(require,module,exports){ -(function (Buffer){ -var md5 = require('create-hash/md5') -module.exports = EVP_BytesToKey -function EVP_BytesToKey (password, salt, keyLen, ivLen) { - if (!Buffer.isBuffer(password)) { - password = new Buffer(password, 'binary') - } - if (salt && !Buffer.isBuffer(salt)) { - salt = new Buffer(salt, 'binary') - } - keyLen = keyLen / 8 - ivLen = ivLen || 0 - var ki = 0 - var ii = 0 - var key = new Buffer(keyLen) - var iv = new Buffer(ivLen) - var addmd = 0 - var md_buf - var i - var bufs = [] - while (true) { - if (addmd++ > 0) { - bufs.push(md_buf) - } - bufs.push(password) - if (salt) { - bufs.push(salt) - } - md_buf = md5(Buffer.concat(bufs)) - bufs = [] - i = 0 - if (keyLen > 0) { - while (true) { - if (keyLen === 0) { - break - } - if (i === md_buf.length) { - break - } - key[ki++] = md_buf[i] - keyLen-- - i++ - } - } - if (ivLen > 0 && i !== md_buf.length) { - while (true) { - if (ivLen === 0) { - break - } - if (i === md_buf.length) { - break - } - iv[ii++] = md_buf[i] - ivLen-- - i++ - } - } - if (keyLen === 0 && ivLen === 0) { - break - } - } - for (i = 0; i < md_buf.length; i++) { - md_buf[i] = 0 - } - return { - key: key, - iv: iv - } -} - -}).call(this,require("buffer").Buffer) -},{"buffer":99,"create-hash/md5":229}],133:[function(require,module,exports){ -(function (Buffer){ -'use strict' -exports['RSA-SHA224'] = exports.sha224WithRSAEncryption = { - sign: 'rsa', - hash: 'sha224', - id: new Buffer('302d300d06096086480165030402040500041c', 'hex') -} -exports['RSA-SHA256'] = exports.sha256WithRSAEncryption = { - sign: 'rsa', - hash: 'sha256', - id: new Buffer('3031300d060960864801650304020105000420', 'hex') -} -exports['RSA-SHA384'] = exports.sha384WithRSAEncryption = { - sign: 'rsa', - hash: 'sha384', - id: new Buffer('3041300d060960864801650304020205000430', 'hex') -} -exports['RSA-SHA512'] = exports.sha512WithRSAEncryption = { - sign: 'rsa', - hash: 'sha512', - id: new Buffer('3051300d060960864801650304020305000440', 'hex') -} -exports['RSA-SHA1'] = { - sign: 'rsa', - hash: 'sha1', - id: new Buffer('3021300906052b0e03021a05000414', 'hex') -} -exports['ecdsa-with-SHA1'] = { - sign: 'ecdsa', - hash: 'sha1', - id: new Buffer('', 'hex') -} - -exports.DSA = exports['DSA-SHA1'] = exports['DSA-SHA'] = { - sign: 'dsa', - hash: 'sha1', - id: new Buffer('', 'hex') -} -exports['DSA-SHA224'] = exports['DSA-WITH-SHA224'] = { - sign: 'dsa', - hash: 'sha224', - id: new Buffer('', 'hex') -} -exports['DSA-SHA256'] = exports['DSA-WITH-SHA256'] = { - sign: 'dsa', - hash: 'sha256', - id: new Buffer('', 'hex') -} -exports['DSA-SHA384'] = exports['DSA-WITH-SHA384'] = { - sign: 'dsa', - hash: 'sha384', - id: new Buffer('', 'hex') -} -exports['DSA-SHA512'] = exports['DSA-WITH-SHA512'] = { - sign: 'dsa', - hash: 'sha512', - id: new Buffer('', 'hex') -} -exports['DSA-RIPEMD160'] = { - sign: 'dsa', - hash: 'rmd160', - id: new Buffer('', 'hex') -} -exports['RSA-RIPEMD160'] = exports.ripemd160WithRSA = { - sign: 'rsa', - hash: 'rmd160', - id: new Buffer('3021300906052b2403020105000414', 'hex') -} -exports['RSA-MD5'] = exports.md5WithRSAEncryption = { - sign: 'rsa', - hash: 'md5', - id: new Buffer('3020300c06082a864886f70d020505000410', 'hex') -} - -}).call(this,require("buffer").Buffer) -},{"buffer":99}],134:[function(require,module,exports){ -(function (Buffer){ -var _algos = require('./algos') -var createHash = require('create-hash') -var inherits = require('inherits') -var sign = require('./sign') -var stream = require('stream') -var verify = require('./verify') - -var algos = {} -Object.keys(_algos).forEach(function (key) { - algos[key] = algos[key.toLowerCase()] = _algos[key] -}) - -function Sign (algorithm) { - stream.Writable.call(this) - - var data = algos[algorithm] - if (!data) { - throw new Error('Unknown message digest') - } - - this._hashType = data.hash - this._hash = createHash(data.hash) - this._tag = data.id - this._signType = data.sign -} -inherits(Sign, stream.Writable) - -Sign.prototype._write = function _write (data, _, done) { - this._hash.update(data) - done() -} - -Sign.prototype.update = function update (data, enc) { - if (typeof data === 'string') { - data = new Buffer(data, enc) - } - - this._hash.update(data) - return this -} - -Sign.prototype.sign = function signMethod (key, enc) { - this.end() - var hash = this._hash.digest() - var sig = sign(Buffer.concat([this._tag, hash]), key, this._hashType, this._signType) - - return enc ? sig.toString(enc) : sig -} - -function Verify (algorithm) { - stream.Writable.call(this) - - var data = algos[algorithm] - if (!data) { - throw new Error('Unknown message digest') - } - - this._hash = createHash(data.hash) - this._tag = data.id - this._signType = data.sign -} -inherits(Verify, stream.Writable) - -Verify.prototype._write = function _write (data, _, done) { - this._hash.update(data) - - done() -} - -Verify.prototype.update = function update (data, enc) { - if (typeof data === 'string') { - data = new Buffer(data, enc) - } - - this._hash.update(data) - return this -} - -Verify.prototype.verify = function verifyMethod (key, sig, enc) { - if (typeof sig === 'string') { - sig = new Buffer(sig, enc) - } - - this.end() - var hash = this._hash.digest() - - return verify(sig, Buffer.concat([this._tag, hash]), key, this._signType) -} - -function createSign (algorithm) { - return new Sign(algorithm) -} - -function createVerify (algorithm) { - return new Verify(algorithm) -} - -module.exports = { - Sign: createSign, - Verify: createVerify, - createSign: createSign, - createVerify: createVerify -} - -}).call(this,require("buffer").Buffer) -},{"./algos":133,"./sign":199,"./verify":200,"buffer":99,"create-hash":227,"inherits":296,"stream":315}],135:[function(require,module,exports){ -'use strict' -exports['1.3.132.0.10'] = 'secp256k1' - -exports['1.3.132.0.33'] = 'p224' - -exports['1.2.840.10045.3.1.1'] = 'p192' - -exports['1.2.840.10045.3.1.7'] = 'p256' - -exports['1.3.132.0.34'] = 'p384' - -exports['1.3.132.0.35'] = 'p521' - -},{}],136:[function(require,module,exports){ -(function (module, exports) { - 'use strict'; - - // Utils - function assert (val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - // Could use `inherits` module, but don't want to move from single file - // architecture yet. - function inherits (ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - - // BN + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); - function BN (number, base, endian) { - // May be `new BN(bn)` ? - if (number !== null && - typeof number === 'object' && - Array.isArray(number.words)) { - return number; + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); } - this.negative = 0; - this.words = null; - this.length = 0; - - // Reduction context - this.red = null; - - if (number !== null) { - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } + // At this point both numbers are positive + var cmp = this.cmp(num); - this._init(number || 0, base || 10, endian || 'be'); + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; } - } - if (typeof module === 'object') { - module.exports = BN; - } else { - exports.BN = BN; - } - - BN.BN = BN; - BN.wordSize = 26; - - var Buffer; - try { - Buffer = require('buf' + 'fer').Buffer; - } catch (e) { - } - - BN.max = function max (left, right) { - if (left.cmp(right) > 0) return left; - return right; - }; - - BN.min = function min (left, right) { - if (left.cmp(right) < 0) return left; - return right; - }; - BN.prototype._init = function init (number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; } - if (typeof number === 'object') { - return this._initArray(number, base, endian); + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; } - - if (base === 'hex') { - base = 16; + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; } - assert(base === (base | 0) && base >= 2 && base <= 36); - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') { - start++; + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } } - if (base === 16) { - this._parseHex(number, start); - } else { - this._parseBase(number, base, start); - } + this.length = Math.max(this.length, i); - if (number[0] === '-') { + if (a !== this) { this.negative = 1; } - this.strip(); - - if (endian !== 'le') return; - - this._initArray(this.toArray(), base, endian); + return this.strip(); }; - BN.prototype._initNumber = function _initNumber (number, base, endian) { - if (number < 0) { - this.negative = 1; - number = -number; - } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; - } - - if (endian !== 'le') return; - - // Reverse the bytes - this._initArray(this.toArray(), base, endian); + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); }; - BN.prototype._initArray = function _initArray (number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; - var j, w; - var off = 0; - if (endian === 'be') { - for (i = number.length - 1, j = 0; i >= 0; i -= 3) { - w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (i = 0, j = 0; i < number.length; i += 3) { - w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; + + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; } - return this.strip(); - }; - - function parseHex (str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - r <<= 4; + return out.strip(); + } - // 'a' - 'f' - if (c >= 49 && c <= 54) { - r |= c - 49 + 0xa; - - // 'A' - 'F' - } else if (c >= 17 && c <= 22) { - r |= c - 17 + 0xa; - - // '0' - '9' - } else { - r |= c & 0xf; - } - } - return r; - } - - BN.prototype._parseHex = function _parseHex (number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - this.words[i] = 0; - } - - var j, w; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (i = number.length - 6, j = 0; i >= start; i -= 6) { - w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); - }; - - function parseBase (str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; - - r *= mul; - - // 'a' - if (c >= 49) { - r += c - 49 + 0xa; - - // 'A' - } else if (c >= 17) { - r += c - 17 + 0xa; - - // '0' - '9' - } else { - r += c; - } - } - return r; - } - - BN.prototype._parseBase = function _parseBase (number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { - limbLen++; - } - limbLen--; - limbPow = (limbPow / base) | 0; - - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; - - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); - - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - - if (mod !== 0) { - var pow = 1; - word = parseBase(number, i, number.length, base); - - for (i = 0; i < mod; i++) { - pow *= base; - } - - this.imuln(pow); - if (this.words[0] + word < 0x4000000) { - this.words[0] += word; - } else { - this._iaddn(word); - } - } - }; - - BN.prototype.copy = function copy (dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) { - dest.words[i] = this.words[i]; - } - dest.length = this.length; - dest.negative = this.negative; - dest.red = this.red; - }; - - BN.prototype.clone = function clone () { - var r = new BN(null); - this.copy(r); - return r; - }; - - // Remove leading `0` from `this` - BN.prototype.strip = function strip () { - while (this.length > 1 && this.words[this.length - 1] === 0) { - this.length--; - } - return this._normSign(); - }; - - BN.prototype._normSign = function _normSign () { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) { - this.negative = 0; - } - return this; - }; - - BN.prototype.inspect = function inspect () { - return (this.red ? ''; - }; - - /* - - var zeros = []; - var groupSizes = []; - var groupBases = []; - - var s = ''; - var i = -1; - while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; - } - groupSizes[0] = 0; - groupSizes[1] = 0; - groupBases[0] = 0; - groupBases[1] = 0; - var base = 2 - 1; - while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; - } - - */ - - var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' - ]; - - var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 - ]; - - var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 - ]; - - BN.prototype.toString = function toString (base, padding) { - base = base || 10; - padding = padding | 0 || 1; - - var out; - if (base === 16 || base === 'hex') { - out = ''; - var off = 0; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) { - out = zeros[6 - word.length] + word + out; - } else { - out = word + out; - } - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) { - out = carry.toString(16) + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - out = ''; - var c = this.clone(); - c.negative = 0; - while (!c.isZero()) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); - - if (!c.isZero()) { - out = zeros[groupSize - r.length] + r + out; - } else { - out = r + out; - } - } - if (this.isZero()) { - out = '0' + out; - } - while (out.length % padding !== 0) { - out = '0' + out; - } - if (this.negative !== 0) { - out = '-' + out; - } - return out; - } - - assert(false, 'Base should be between 2 and 36'); - }; - - BN.prototype.toNumber = function toNumber () { - var length = this.bitLength(); - var ret; - if (length <= 26) { - ret = this.words[0]; - } else if (length <= 52) { - ret = (this.words[1] * 0x4000000) + this.words[0]; - } else if (length === 53) { - // NOTE: at this stage it is known that the top bit is set - ret = 0x10000000000000 + (this.words[1] * 0x4000000) + this.words[0]; - } else { - assert(false, 'Number can only safely store up to 53 bits'); - } - return (this.negative !== 0) ? -ret : ret; - }; - - BN.prototype.toJSON = function toJSON () { - return this.toString(16); - }; - - BN.prototype.toBuffer = function toBuffer (endian, length) { - assert(typeof Buffer !== 'undefined'); - return this.toArrayLike(Buffer, endian, length); - }; - - BN.prototype.toArray = function toArray (endian, length) { - return this.toArrayLike(Array, endian, length); - }; - - BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { - var byteLength = this.byteLength(); - var reqLength = length || Math.max(1, byteLength); - assert(byteLength <= reqLength, 'byte array longer than desired length'); - assert(reqLength > 0, 'Requested array length <= 0'); - - this.strip(); - var littleEndian = endian === 'le'; - var res = new ArrayType(reqLength); - - var b, i; - var q = this.clone(); - if (!littleEndian) { - // Assume big-endian - for (i = 0; i < reqLength - byteLength; i++) { - res[i] = 0; - } - - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[reqLength - i - 1] = b; - } - } else { - for (i = 0; !q.isZero(); i++) { - b = q.andln(0xff); - q.iushrn(8); - - res[i] = b; - } - - for (; i < reqLength; i++) { - res[i] = 0; - } - } - - return res; - }; - - if (Math.clz32) { - BN.prototype._countBits = function _countBits (w) { - return 32 - Math.clz32(w); - }; - } else { - BN.prototype._countBits = function _countBits (w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; - } - - BN.prototype._zeroBits = function _zeroBits (w) { - // Short-cut - if (w === 0) return 26; - - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) { - r++; - } - return r; - }; - - // Return number of used bits in a BN - BN.prototype.bitLength = function bitLength () { - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; - }; - - function toBitArray (num) { - var w = new Array(num.bitLength()); - - for (var bit = 0; bit < w.length; bit++) { - var off = (bit / 26) | 0; - var wbit = bit % 26; - - w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; - } - - return w; - } - - // Number of trailing zero bits - BN.prototype.zeroBits = function zeroBits () { - if (this.isZero()) return 0; - - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) break; - } - return r; - }; - - BN.prototype.byteLength = function byteLength () { - return Math.ceil(this.bitLength() / 8); - }; - - BN.prototype.toTwos = function toTwos (width) { - if (this.negative !== 0) { - return this.abs().inotn(width).iaddn(1); - } - return this.clone(); - }; - - BN.prototype.fromTwos = function fromTwos (width) { - if (this.testn(width - 1)) { - return this.notn(width).iaddn(1).ineg(); - } - return this.clone(); - }; - - BN.prototype.isNeg = function isNeg () { - return this.negative !== 0; - }; - - // Return negative clone of `this` - BN.prototype.neg = function neg () { - return this.clone().ineg(); - }; - - BN.prototype.ineg = function ineg () { - if (!this.isZero()) { - this.negative ^= 1; - } - - return this; - }; - - // Or `num` with `this` in-place - BN.prototype.iuor = function iuor (num) { - while (this.length < num.length) { - this.words[this.length++] = 0; - } - - for (var i = 0; i < num.length; i++) { - this.words[i] = this.words[i] | num.words[i]; - } - - return this.strip(); - }; - - BN.prototype.ior = function ior (num) { - assert((this.negative | num.negative) === 0); - return this.iuor(num); - }; - - // Or `num` with `this` - BN.prototype.or = function or (num) { - if (this.length > num.length) return this.clone().ior(num); - return num.clone().ior(this); - }; - - BN.prototype.uor = function uor (num) { - if (this.length > num.length) return this.clone().iuor(num); - return num.clone().iuor(this); - }; - - // And `num` with `this` in-place - BN.prototype.iuand = function iuand (num) { - // b = min-length(num, this) - var b; - if (this.length > num.length) { - b = num; - } else { - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = this.words[i] & num.words[i]; - } - - this.length = b.length; - - return this.strip(); - }; - - BN.prototype.iand = function iand (num) { - assert((this.negative | num.negative) === 0); - return this.iuand(num); - }; - - // And `num` with `this` - BN.prototype.and = function and (num) { - if (this.length > num.length) return this.clone().iand(num); - return num.clone().iand(this); - }; - - BN.prototype.uand = function uand (num) { - if (this.length > num.length) return this.clone().iuand(num); - return num.clone().iuand(this); - }; - - // Xor `num` with `this` in-place - BN.prototype.iuxor = function iuxor (num) { - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - for (var i = 0; i < b.length; i++) { - this.words[i] = a.words[i] ^ b.words[i]; - } - - if (this !== a) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = a.length; - - return this.strip(); - }; - - BN.prototype.ixor = function ixor (num) { - assert((this.negative | num.negative) === 0); - return this.iuxor(num); - }; - - // Xor `num` with `this` - BN.prototype.xor = function xor (num) { - if (this.length > num.length) return this.clone().ixor(num); - return num.clone().ixor(this); - }; - - BN.prototype.uxor = function uxor (num) { - if (this.length > num.length) return this.clone().iuxor(num); - return num.clone().iuxor(this); - }; - - // Not ``this`` with ``width`` bitwidth - BN.prototype.inotn = function inotn (width) { - assert(typeof width === 'number' && width >= 0); - - var bytesNeeded = Math.ceil(width / 26) | 0; - var bitsLeft = width % 26; - - // Extend the buffer with leading zeroes - while (this.length < bytesNeeded) { - this.words[this.length++] = 0; - } - - if (bitsLeft > 0) { - bytesNeeded--; - } - - // Handle complete words - for (var i = 0; i < bytesNeeded; i++) { - this.words[i] = ~this.words[i] & 0x3ffffff; - } - - // Handle the residue - if (bitsLeft > 0) { - this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); - } - - // And remove leading zeroes - return this.strip(); - }; - - BN.prototype.notn = function notn (width) { - return this.clone().inotn(width); - }; - - // Set `bit` of `this` - BN.prototype.setn = function setn (bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; - - while (this.length <= off) { - this.words[this.length++] = 0; - } - - if (val) { - this.words[off] = this.words[off] | (1 << wbit); - } else { - this.words[off] = this.words[off] & ~(1 << wbit); - } - - return this.strip(); - }; - - // Add `num` to `this` in-place - BN.prototype.iadd = function iadd (num) { - var r; - - // negative + positive - if (this.negative !== 0 && num.negative === 0) { - this.negative = 0; - r = this.isub(num); - this.negative ^= 1; - return this._normSign(); - - // positive + negative - } else if (this.negative === 0 && num.negative !== 0) { - num.negative = 0; - r = this.isub(num); - num.negative = 1; - return r._normSign(); - } - - // a.length > b.length - var a, b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) + (b.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - return this; - }; - - // Add `num` to `this` - BN.prototype.add = function add (num) { - var res; - if (num.negative !== 0 && this.negative === 0) { - num.negative = 0; - res = this.sub(num); - num.negative ^= 1; - return res; - } else if (num.negative === 0 && this.negative !== 0) { - this.negative = 0; - res = num.sub(this); - this.negative = 1; - return res; - } - - if (this.length > num.length) return this.clone().iadd(num); - - return num.clone().iadd(this); - }; - - // Subtract `num` from `this` in-place - BN.prototype.isub = function isub (num) { - // this - (-num) = this + num - if (num.negative !== 0) { - num.negative = 0; - var r = this.iadd(num); - num.negative = 1; - return r._normSign(); - - // -this - num = -(this + num) - } else if (this.negative !== 0) { - this.negative = 0; - this.iadd(num); - this.negative = 1; - return this._normSign(); - } - - // At this point both numbers are positive - var cmp = this.cmp(num); - - // Optimization - zeroify - if (cmp === 0) { - this.negative = 0; - this.length = 1; - this.words[0] = 0; - return this; - } - - // a > b - var a, b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } - - var carry = 0; - for (var i = 0; i < b.length; i++) { - r = (a.words[i] | 0) - (b.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - r = (a.words[i] | 0) + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) { - for (; i < a.length; i++) { - this.words[i] = a.words[i]; - } - } - - this.length = Math.max(this.length, i); - - if (a !== this) { - this.negative = 1; - } - - return this.strip(); - }; - - // Subtract `num` from `this` - BN.prototype.sub = function sub (num) { - return this.clone().isub(num); - }; - - function smallMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - var len = (self.length + num.length) | 0; - out.length = len; - len = (len - 1) | 0; - - // Peel one iteration (compiler can't do it, because of code complexity) - var a = self.words[0] | 0; - var b = num.words[0] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - var carry = (r / 0x4000000) | 0; - out.words[0] = lo; - - for (var k = 1; k < len; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = (k - j) | 0; - a = self.words[i] | 0; - b = num.words[j] | 0; - r = a * b + rword; - ncarry += (r / 0x4000000) | 0; - rword = r & 0x3ffffff; - } - out.words[k] = rword | 0; - carry = ncarry | 0; - } - if (carry !== 0) { - out.words[k] = carry | 0; - } else { - out.length--; - } - - return out.strip(); - } - - // TODO(indutny): it may be reasonable to omit it for users who don't need - // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit - // multiplication (like elliptic secp256k1). - var comb10MulTo = function comb10MulTo (self, num, out) { - var a = self.words; - var b = num.words; - var o = out.words; - var c = 0; - var lo; - var mid; - var hi; - var a0 = a[0] | 0; - var al0 = a0 & 0x1fff; - var ah0 = a0 >>> 13; - var a1 = a[1] | 0; - var al1 = a1 & 0x1fff; - var ah1 = a1 >>> 13; - var a2 = a[2] | 0; - var al2 = a2 & 0x1fff; - var ah2 = a2 >>> 13; - var a3 = a[3] | 0; - var al3 = a3 & 0x1fff; - var ah3 = a3 >>> 13; - var a4 = a[4] | 0; - var al4 = a4 & 0x1fff; - var ah4 = a4 >>> 13; - var a5 = a[5] | 0; - var al5 = a5 & 0x1fff; - var ah5 = a5 >>> 13; - var a6 = a[6] | 0; - var al6 = a6 & 0x1fff; - var ah6 = a6 >>> 13; - var a7 = a[7] | 0; - var al7 = a7 & 0x1fff; - var ah7 = a7 >>> 13; - var a8 = a[8] | 0; - var al8 = a8 & 0x1fff; - var ah8 = a8 >>> 13; - var a9 = a[9] | 0; - var al9 = a9 & 0x1fff; - var ah9 = a9 >>> 13; - var b0 = b[0] | 0; - var bl0 = b0 & 0x1fff; - var bh0 = b0 >>> 13; - var b1 = b[1] | 0; - var bl1 = b1 & 0x1fff; - var bh1 = b1 >>> 13; - var b2 = b[2] | 0; - var bl2 = b2 & 0x1fff; - var bh2 = b2 >>> 13; - var b3 = b[3] | 0; - var bl3 = b3 & 0x1fff; - var bh3 = b3 >>> 13; - var b4 = b[4] | 0; - var bl4 = b4 & 0x1fff; - var bh4 = b4 >>> 13; - var b5 = b[5] | 0; - var bl5 = b5 & 0x1fff; - var bh5 = b5 >>> 13; - var b6 = b[6] | 0; - var bl6 = b6 & 0x1fff; - var bh6 = b6 >>> 13; - var b7 = b[7] | 0; - var bl7 = b7 & 0x1fff; - var bh7 = b7 >>> 13; - var b8 = b[8] | 0; - var bl8 = b8 & 0x1fff; - var bh8 = b8 >>> 13; - var b9 = b[9] | 0; - var bl9 = b9 & 0x1fff; - var bh9 = b9 >>> 13; - - out.negative = self.negative ^ num.negative; - out.length = 19; - /* k = 0 */ - lo = Math.imul(al0, bl0); - mid = Math.imul(al0, bh0); - mid += Math.imul(ah0, bl0); - hi = Math.imul(ah0, bh0); - var w0 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w0 >>> 26); - w0 &= 0x3ffffff; - /* k = 1 */ - lo = Math.imul(al1, bl0); - mid = Math.imul(al1, bh0); - mid += Math.imul(ah1, bl0); - hi = Math.imul(ah1, bh0); - lo += Math.imul(al0, bl1); - mid += Math.imul(al0, bh1); - mid += Math.imul(ah0, bl1); - hi += Math.imul(ah0, bh1); - var w1 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w1 >>> 26); - w1 &= 0x3ffffff; - /* k = 2 */ - lo = Math.imul(al2, bl0); - mid = Math.imul(al2, bh0); - mid += Math.imul(ah2, bl0); - hi = Math.imul(ah2, bh0); - lo += Math.imul(al1, bl1); - mid += Math.imul(al1, bh1); - mid += Math.imul(ah1, bl1); - hi += Math.imul(ah1, bh1); - lo += Math.imul(al0, bl2); - mid += Math.imul(al0, bh2); - mid += Math.imul(ah0, bl2); - hi += Math.imul(ah0, bh2); - var w2 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w2 >>> 26); - w2 &= 0x3ffffff; - /* k = 3 */ - lo = Math.imul(al3, bl0); - mid = Math.imul(al3, bh0); - mid += Math.imul(ah3, bl0); - hi = Math.imul(ah3, bh0); - lo += Math.imul(al2, bl1); - mid += Math.imul(al2, bh1); - mid += Math.imul(ah2, bl1); - hi += Math.imul(ah2, bh1); - lo += Math.imul(al1, bl2); - mid += Math.imul(al1, bh2); - mid += Math.imul(ah1, bl2); - hi += Math.imul(ah1, bh2); - lo += Math.imul(al0, bl3); - mid += Math.imul(al0, bh3); - mid += Math.imul(ah0, bl3); - hi += Math.imul(ah0, bh3); - var w3 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w3 >>> 26); - w3 &= 0x3ffffff; - /* k = 4 */ - lo = Math.imul(al4, bl0); - mid = Math.imul(al4, bh0); - mid += Math.imul(ah4, bl0); - hi = Math.imul(ah4, bh0); - lo += Math.imul(al3, bl1); - mid += Math.imul(al3, bh1); - mid += Math.imul(ah3, bl1); - hi += Math.imul(ah3, bh1); - lo += Math.imul(al2, bl2); - mid += Math.imul(al2, bh2); - mid += Math.imul(ah2, bl2); - hi += Math.imul(ah2, bh2); - lo += Math.imul(al1, bl3); - mid += Math.imul(al1, bh3); - mid += Math.imul(ah1, bl3); - hi += Math.imul(ah1, bh3); - lo += Math.imul(al0, bl4); - mid += Math.imul(al0, bh4); - mid += Math.imul(ah0, bl4); - hi += Math.imul(ah0, bh4); - var w4 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w4 >>> 26); - w4 &= 0x3ffffff; - /* k = 5 */ - lo = Math.imul(al5, bl0); - mid = Math.imul(al5, bh0); - mid += Math.imul(ah5, bl0); - hi = Math.imul(ah5, bh0); - lo += Math.imul(al4, bl1); - mid += Math.imul(al4, bh1); - mid += Math.imul(ah4, bl1); - hi += Math.imul(ah4, bh1); - lo += Math.imul(al3, bl2); - mid += Math.imul(al3, bh2); - mid += Math.imul(ah3, bl2); - hi += Math.imul(ah3, bh2); - lo += Math.imul(al2, bl3); - mid += Math.imul(al2, bh3); - mid += Math.imul(ah2, bl3); - hi += Math.imul(ah2, bh3); - lo += Math.imul(al1, bl4); - mid += Math.imul(al1, bh4); - mid += Math.imul(ah1, bl4); - hi += Math.imul(ah1, bh4); - lo += Math.imul(al0, bl5); - mid += Math.imul(al0, bh5); - mid += Math.imul(ah0, bl5); - hi += Math.imul(ah0, bh5); - var w5 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w5 >>> 26); - w5 &= 0x3ffffff; - /* k = 6 */ - lo = Math.imul(al6, bl0); - mid = Math.imul(al6, bh0); - mid += Math.imul(ah6, bl0); - hi = Math.imul(ah6, bh0); - lo += Math.imul(al5, bl1); - mid += Math.imul(al5, bh1); - mid += Math.imul(ah5, bl1); - hi += Math.imul(ah5, bh1); - lo += Math.imul(al4, bl2); - mid += Math.imul(al4, bh2); - mid += Math.imul(ah4, bl2); - hi += Math.imul(ah4, bh2); - lo += Math.imul(al3, bl3); - mid += Math.imul(al3, bh3); - mid += Math.imul(ah3, bl3); - hi += Math.imul(ah3, bh3); - lo += Math.imul(al2, bl4); - mid += Math.imul(al2, bh4); - mid += Math.imul(ah2, bl4); - hi += Math.imul(ah2, bh4); - lo += Math.imul(al1, bl5); - mid += Math.imul(al1, bh5); - mid += Math.imul(ah1, bl5); - hi += Math.imul(ah1, bh5); - lo += Math.imul(al0, bl6); - mid += Math.imul(al0, bh6); - mid += Math.imul(ah0, bl6); - hi += Math.imul(ah0, bh6); - var w6 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w6 >>> 26); - w6 &= 0x3ffffff; - /* k = 7 */ - lo = Math.imul(al7, bl0); - mid = Math.imul(al7, bh0); - mid += Math.imul(ah7, bl0); - hi = Math.imul(ah7, bh0); - lo += Math.imul(al6, bl1); - mid += Math.imul(al6, bh1); - mid += Math.imul(ah6, bl1); - hi += Math.imul(ah6, bh1); - lo += Math.imul(al5, bl2); - mid += Math.imul(al5, bh2); - mid += Math.imul(ah5, bl2); - hi += Math.imul(ah5, bh2); - lo += Math.imul(al4, bl3); - mid += Math.imul(al4, bh3); - mid += Math.imul(ah4, bl3); - hi += Math.imul(ah4, bh3); - lo += Math.imul(al3, bl4); - mid += Math.imul(al3, bh4); - mid += Math.imul(ah3, bl4); - hi += Math.imul(ah3, bh4); - lo += Math.imul(al2, bl5); - mid += Math.imul(al2, bh5); - mid += Math.imul(ah2, bl5); - hi += Math.imul(ah2, bh5); - lo += Math.imul(al1, bl6); - mid += Math.imul(al1, bh6); - mid += Math.imul(ah1, bl6); - hi += Math.imul(ah1, bh6); - lo += Math.imul(al0, bl7); - mid += Math.imul(al0, bh7); - mid += Math.imul(ah0, bl7); - hi += Math.imul(ah0, bh7); - var w7 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w7 >>> 26); - w7 &= 0x3ffffff; - /* k = 8 */ - lo = Math.imul(al8, bl0); - mid = Math.imul(al8, bh0); - mid += Math.imul(ah8, bl0); - hi = Math.imul(ah8, bh0); - lo += Math.imul(al7, bl1); - mid += Math.imul(al7, bh1); - mid += Math.imul(ah7, bl1); - hi += Math.imul(ah7, bh1); - lo += Math.imul(al6, bl2); - mid += Math.imul(al6, bh2); - mid += Math.imul(ah6, bl2); - hi += Math.imul(ah6, bh2); - lo += Math.imul(al5, bl3); - mid += Math.imul(al5, bh3); - mid += Math.imul(ah5, bl3); - hi += Math.imul(ah5, bh3); - lo += Math.imul(al4, bl4); - mid += Math.imul(al4, bh4); - mid += Math.imul(ah4, bl4); - hi += Math.imul(ah4, bh4); - lo += Math.imul(al3, bl5); - mid += Math.imul(al3, bh5); - mid += Math.imul(ah3, bl5); - hi += Math.imul(ah3, bh5); - lo += Math.imul(al2, bl6); - mid += Math.imul(al2, bh6); - mid += Math.imul(ah2, bl6); - hi += Math.imul(ah2, bh6); - lo += Math.imul(al1, bl7); - mid += Math.imul(al1, bh7); - mid += Math.imul(ah1, bl7); - hi += Math.imul(ah1, bh7); - lo += Math.imul(al0, bl8); - mid += Math.imul(al0, bh8); - mid += Math.imul(ah0, bl8); - hi += Math.imul(ah0, bh8); - var w8 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w8 >>> 26); - w8 &= 0x3ffffff; - /* k = 9 */ - lo = Math.imul(al9, bl0); - mid = Math.imul(al9, bh0); - mid += Math.imul(ah9, bl0); - hi = Math.imul(ah9, bh0); - lo += Math.imul(al8, bl1); - mid += Math.imul(al8, bh1); - mid += Math.imul(ah8, bl1); - hi += Math.imul(ah8, bh1); - lo += Math.imul(al7, bl2); - mid += Math.imul(al7, bh2); - mid += Math.imul(ah7, bl2); - hi += Math.imul(ah7, bh2); - lo += Math.imul(al6, bl3); - mid += Math.imul(al6, bh3); - mid += Math.imul(ah6, bl3); - hi += Math.imul(ah6, bh3); - lo += Math.imul(al5, bl4); - mid += Math.imul(al5, bh4); - mid += Math.imul(ah5, bl4); - hi += Math.imul(ah5, bh4); - lo += Math.imul(al4, bl5); - mid += Math.imul(al4, bh5); - mid += Math.imul(ah4, bl5); - hi += Math.imul(ah4, bh5); - lo += Math.imul(al3, bl6); - mid += Math.imul(al3, bh6); - mid += Math.imul(ah3, bl6); - hi += Math.imul(ah3, bh6); - lo += Math.imul(al2, bl7); - mid += Math.imul(al2, bh7); - mid += Math.imul(ah2, bl7); - hi += Math.imul(ah2, bh7); - lo += Math.imul(al1, bl8); - mid += Math.imul(al1, bh8); - mid += Math.imul(ah1, bl8); - hi += Math.imul(ah1, bh8); - lo += Math.imul(al0, bl9); - mid += Math.imul(al0, bh9); - mid += Math.imul(ah0, bl9); - hi += Math.imul(ah0, bh9); - var w9 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w9 >>> 26); - w9 &= 0x3ffffff; - /* k = 10 */ - lo = Math.imul(al9, bl1); - mid = Math.imul(al9, bh1); - mid += Math.imul(ah9, bl1); - hi = Math.imul(ah9, bh1); - lo += Math.imul(al8, bl2); - mid += Math.imul(al8, bh2); - mid += Math.imul(ah8, bl2); - hi += Math.imul(ah8, bh2); - lo += Math.imul(al7, bl3); - mid += Math.imul(al7, bh3); - mid += Math.imul(ah7, bl3); - hi += Math.imul(ah7, bh3); - lo += Math.imul(al6, bl4); - mid += Math.imul(al6, bh4); - mid += Math.imul(ah6, bl4); - hi += Math.imul(ah6, bh4); - lo += Math.imul(al5, bl5); - mid += Math.imul(al5, bh5); - mid += Math.imul(ah5, bl5); - hi += Math.imul(ah5, bh5); - lo += Math.imul(al4, bl6); - mid += Math.imul(al4, bh6); - mid += Math.imul(ah4, bl6); - hi += Math.imul(ah4, bh6); - lo += Math.imul(al3, bl7); - mid += Math.imul(al3, bh7); - mid += Math.imul(ah3, bl7); - hi += Math.imul(ah3, bh7); - lo += Math.imul(al2, bl8); - mid += Math.imul(al2, bh8); - mid += Math.imul(ah2, bl8); - hi += Math.imul(ah2, bh8); - lo += Math.imul(al1, bl9); - mid += Math.imul(al1, bh9); - mid += Math.imul(ah1, bl9); - hi += Math.imul(ah1, bh9); - var w10 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w10 >>> 26); - w10 &= 0x3ffffff; - /* k = 11 */ - lo = Math.imul(al9, bl2); - mid = Math.imul(al9, bh2); - mid += Math.imul(ah9, bl2); - hi = Math.imul(ah9, bh2); - lo += Math.imul(al8, bl3); - mid += Math.imul(al8, bh3); - mid += Math.imul(ah8, bl3); - hi += Math.imul(ah8, bh3); - lo += Math.imul(al7, bl4); - mid += Math.imul(al7, bh4); - mid += Math.imul(ah7, bl4); - hi += Math.imul(ah7, bh4); - lo += Math.imul(al6, bl5); - mid += Math.imul(al6, bh5); - mid += Math.imul(ah6, bl5); - hi += Math.imul(ah6, bh5); - lo += Math.imul(al5, bl6); - mid += Math.imul(al5, bh6); - mid += Math.imul(ah5, bl6); - hi += Math.imul(ah5, bh6); - lo += Math.imul(al4, bl7); - mid += Math.imul(al4, bh7); - mid += Math.imul(ah4, bl7); - hi += Math.imul(ah4, bh7); - lo += Math.imul(al3, bl8); - mid += Math.imul(al3, bh8); - mid += Math.imul(ah3, bl8); - hi += Math.imul(ah3, bh8); - lo += Math.imul(al2, bl9); - mid += Math.imul(al2, bh9); - mid += Math.imul(ah2, bl9); - hi += Math.imul(ah2, bh9); - var w11 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w11 >>> 26); - w11 &= 0x3ffffff; - /* k = 12 */ - lo = Math.imul(al9, bl3); - mid = Math.imul(al9, bh3); - mid += Math.imul(ah9, bl3); - hi = Math.imul(ah9, bh3); - lo += Math.imul(al8, bl4); - mid += Math.imul(al8, bh4); - mid += Math.imul(ah8, bl4); - hi += Math.imul(ah8, bh4); - lo += Math.imul(al7, bl5); - mid += Math.imul(al7, bh5); - mid += Math.imul(ah7, bl5); - hi += Math.imul(ah7, bh5); - lo += Math.imul(al6, bl6); - mid += Math.imul(al6, bh6); - mid += Math.imul(ah6, bl6); - hi += Math.imul(ah6, bh6); - lo += Math.imul(al5, bl7); - mid += Math.imul(al5, bh7); - mid += Math.imul(ah5, bl7); - hi += Math.imul(ah5, bh7); - lo += Math.imul(al4, bl8); - mid += Math.imul(al4, bh8); - mid += Math.imul(ah4, bl8); - hi += Math.imul(ah4, bh8); - lo += Math.imul(al3, bl9); - mid += Math.imul(al3, bh9); - mid += Math.imul(ah3, bl9); - hi += Math.imul(ah3, bh9); - var w12 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w12 >>> 26); - w12 &= 0x3ffffff; - /* k = 13 */ - lo = Math.imul(al9, bl4); - mid = Math.imul(al9, bh4); - mid += Math.imul(ah9, bl4); - hi = Math.imul(ah9, bh4); - lo += Math.imul(al8, bl5); - mid += Math.imul(al8, bh5); - mid += Math.imul(ah8, bl5); - hi += Math.imul(ah8, bh5); - lo += Math.imul(al7, bl6); - mid += Math.imul(al7, bh6); - mid += Math.imul(ah7, bl6); - hi += Math.imul(ah7, bh6); - lo += Math.imul(al6, bl7); - mid += Math.imul(al6, bh7); - mid += Math.imul(ah6, bl7); - hi += Math.imul(ah6, bh7); - lo += Math.imul(al5, bl8); - mid += Math.imul(al5, bh8); - mid += Math.imul(ah5, bl8); - hi += Math.imul(ah5, bh8); - lo += Math.imul(al4, bl9); - mid += Math.imul(al4, bh9); - mid += Math.imul(ah4, bl9); - hi += Math.imul(ah4, bh9); - var w13 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w13 >>> 26); - w13 &= 0x3ffffff; - /* k = 14 */ - lo = Math.imul(al9, bl5); - mid = Math.imul(al9, bh5); - mid += Math.imul(ah9, bl5); - hi = Math.imul(ah9, bh5); - lo += Math.imul(al8, bl6); - mid += Math.imul(al8, bh6); - mid += Math.imul(ah8, bl6); - hi += Math.imul(ah8, bh6); - lo += Math.imul(al7, bl7); - mid += Math.imul(al7, bh7); - mid += Math.imul(ah7, bl7); - hi += Math.imul(ah7, bh7); - lo += Math.imul(al6, bl8); - mid += Math.imul(al6, bh8); - mid += Math.imul(ah6, bl8); - hi += Math.imul(ah6, bh8); - lo += Math.imul(al5, bl9); - mid += Math.imul(al5, bh9); - mid += Math.imul(ah5, bl9); - hi += Math.imul(ah5, bh9); - var w14 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w14 >>> 26); - w14 &= 0x3ffffff; - /* k = 15 */ - lo = Math.imul(al9, bl6); - mid = Math.imul(al9, bh6); - mid += Math.imul(ah9, bl6); - hi = Math.imul(ah9, bh6); - lo += Math.imul(al8, bl7); - mid += Math.imul(al8, bh7); - mid += Math.imul(ah8, bl7); - hi += Math.imul(ah8, bh7); - lo += Math.imul(al7, bl8); - mid += Math.imul(al7, bh8); - mid += Math.imul(ah7, bl8); - hi += Math.imul(ah7, bh8); - lo += Math.imul(al6, bl9); - mid += Math.imul(al6, bh9); - mid += Math.imul(ah6, bl9); - hi += Math.imul(ah6, bh9); - var w15 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w15 >>> 26); - w15 &= 0x3ffffff; - /* k = 16 */ - lo = Math.imul(al9, bl7); - mid = Math.imul(al9, bh7); - mid += Math.imul(ah9, bl7); - hi = Math.imul(ah9, bh7); - lo += Math.imul(al8, bl8); - mid += Math.imul(al8, bh8); - mid += Math.imul(ah8, bl8); - hi += Math.imul(ah8, bh8); - lo += Math.imul(al7, bl9); - mid += Math.imul(al7, bh9); - mid += Math.imul(ah7, bl9); - hi += Math.imul(ah7, bh9); - var w16 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w16 >>> 26); - w16 &= 0x3ffffff; - /* k = 17 */ - lo = Math.imul(al9, bl8); - mid = Math.imul(al9, bh8); - mid += Math.imul(ah9, bl8); - hi = Math.imul(ah9, bh8); - lo += Math.imul(al8, bl9); - mid += Math.imul(al8, bh9); - mid += Math.imul(ah8, bl9); - hi += Math.imul(ah8, bh9); - var w17 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w17 >>> 26); - w17 &= 0x3ffffff; - /* k = 18 */ - lo = Math.imul(al9, bl9); - mid = Math.imul(al9, bh9); - mid += Math.imul(ah9, bl9); - hi = Math.imul(ah9, bh9); - var w18 = c + lo + ((mid & 0x1fff) << 13); - c = hi + (mid >>> 13) + (w18 >>> 26); - w18 &= 0x3ffffff; - o[0] = w0; - o[1] = w1; - o[2] = w2; - o[3] = w3; - o[4] = w4; - o[5] = w5; - o[6] = w6; - o[7] = w7; - o[8] = w8; - o[9] = w9; - o[10] = w10; - o[11] = w11; - o[12] = w12; - o[13] = w13; - o[14] = w14; - o[15] = w15; - o[16] = w16; - o[17] = w17; - o[18] = w18; - if (c !== 0) { - o[19] = c; - out.length++; - } - return out; - }; - - // Polyfill comb - if (!Math.imul) { - comb10MulTo = smallMulTo; - } - - function bigMulTo (self, num, out) { - out.negative = num.negative ^ self.negative; - out.length = self.length + num.length; - - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = self.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; - - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; - } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; - } - - return out.strip(); - } - - function jumboMulTo (self, num, out) { - var fftm = new FFTM(); - return fftm.mulp(self, num, out); - } - - BN.prototype.mulTo = function mulTo (num, out) { - var res; - var len = this.length + num.length; - if (this.length === 10 && num.length === 10) { - res = comb10MulTo(this, num, out); - } else if (len < 63) { - res = smallMulTo(this, num, out); - } else if (len < 1024) { - res = bigMulTo(this, num, out); - } else { - res = jumboMulTo(this, num, out); - } - - return res; - }; - - // Cooley-Tukey algorithm for FFT - // slightly revisited to rely on looping instead of recursion - - function FFTM (x, y) { - this.x = x; - this.y = y; - } - - FFTM.prototype.makeRBT = function makeRBT (N) { - var t = new Array(N); - var l = BN.prototype._countBits(N) - 1; - for (var i = 0; i < N; i++) { - t[i] = this.revBin(i, l, N); - } - - return t; - }; - - // Returns binary-reversed representation of `x` - FFTM.prototype.revBin = function revBin (x, l, N) { - if (x === 0 || x === N - 1) return x; - - var rb = 0; - for (var i = 0; i < l; i++) { - rb |= (x & 1) << (l - i - 1); - x >>= 1; - } - - return rb; - }; - - // Performs "tweedling" phase, therefore 'emulating' - // behaviour of the recursive algorithm - FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { - for (var i = 0; i < N; i++) { - rtws[i] = rws[rbt[i]]; - itws[i] = iws[rbt[i]]; - } - }; - - FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { - this.permute(rbt, rws, iws, rtws, itws, N); - - for (var s = 1; s < N; s <<= 1) { - var l = s << 1; - - var rtwdf = Math.cos(2 * Math.PI / l); - var itwdf = Math.sin(2 * Math.PI / l); - - for (var p = 0; p < N; p += l) { - var rtwdf_ = rtwdf; - var itwdf_ = itwdf; - - for (var j = 0; j < s; j++) { - var re = rtws[p + j]; - var ie = itws[p + j]; - - var ro = rtws[p + j + s]; - var io = itws[p + j + s]; - - var rx = rtwdf_ * ro - itwdf_ * io; - - io = rtwdf_ * io + itwdf_ * ro; - ro = rx; - - rtws[p + j] = re + ro; - itws[p + j] = ie + io; - - rtws[p + j + s] = re - ro; - itws[p + j + s] = ie - io; - - /* jshint maxdepth : false */ - if (j !== l) { - rx = rtwdf * rtwdf_ - itwdf * itwdf_; - - itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; - rtwdf_ = rx; - } - } - } - } - }; - - FFTM.prototype.guessLen13b = function guessLen13b (n, m) { - var N = Math.max(m, n) | 1; - var odd = N & 1; - var i = 0; - for (N = N / 2 | 0; N; N = N >>> 1) { - i++; - } - - return 1 << i + 1 + odd; - }; - - FFTM.prototype.conjugate = function conjugate (rws, iws, N) { - if (N <= 1) return; - - for (var i = 0; i < N / 2; i++) { - var t = rws[i]; - - rws[i] = rws[N - i - 1]; - rws[N - i - 1] = t; - - t = iws[i]; - - iws[i] = -iws[N - i - 1]; - iws[N - i - 1] = -t; - } - }; - - FFTM.prototype.normalize13b = function normalize13b (ws, N) { - var carry = 0; - for (var i = 0; i < N / 2; i++) { - var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + - Math.round(ws[2 * i] / N) + - carry; - - ws[i] = w & 0x3ffffff; - - if (w < 0x4000000) { - carry = 0; - } else { - carry = w / 0x4000000 | 0; - } - } - - return ws; - }; - - FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { - var carry = 0; - for (var i = 0; i < len; i++) { - carry = carry + (ws[i] | 0); - - rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; - rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; - } - - // Pad with zeroes - for (i = 2 * len; i < N; ++i) { - rws[i] = 0; - } - - assert(carry === 0); - assert((carry & ~0x1fff) === 0); - }; - - FFTM.prototype.stub = function stub (N) { - var ph = new Array(N); - for (var i = 0; i < N; i++) { - ph[i] = 0; - } - - return ph; - }; - - FFTM.prototype.mulp = function mulp (x, y, out) { - var N = 2 * this.guessLen13b(x.length, y.length); - - var rbt = this.makeRBT(N); - - var _ = this.stub(N); - - var rws = new Array(N); - var rwst = new Array(N); - var iwst = new Array(N); - - var nrws = new Array(N); - var nrwst = new Array(N); - var niwst = new Array(N); - - var rmws = out.words; - rmws.length = N; - - this.convert13b(x.words, x.length, rws, N); - this.convert13b(y.words, y.length, nrws, N); - - this.transform(rws, _, rwst, iwst, N, rbt); - this.transform(nrws, _, nrwst, niwst, N, rbt); - - for (var i = 0; i < N; i++) { - var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; - iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; - rwst[i] = rx; - } - - this.conjugate(rwst, iwst, N); - this.transform(rwst, iwst, rmws, _, N, rbt); - this.conjugate(rmws, _, N); - this.normalize13b(rmws, N); - - out.negative = x.negative ^ y.negative; - out.length = x.length + y.length; - return out.strip(); - }; - - // Multiply `this` by `num` - BN.prototype.mul = function mul (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); - }; - - // Multiply employing FFT - BN.prototype.mulf = function mulf (num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return jumboMulTo(this, num, out); - }; - - // In-place Multiplication - BN.prototype.imul = function imul (num) { - return this.clone().mulTo(num, this); - }; - - BN.prototype.imuln = function imuln (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = (this.words[i] | 0) * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } - - if (carry !== 0) { - this.words[i] = carry; - this.length++; - } - - return this; - }; - - BN.prototype.muln = function muln (num) { - return this.clone().imuln(num); - }; - - // `this` * `this` - BN.prototype.sqr = function sqr () { - return this.mul(this); - }; - - // `this` * `this` in-place - BN.prototype.isqr = function isqr () { - return this.imul(this.clone()); - }; - - // Math.pow(`this`, `num`) - BN.prototype.pow = function pow (num) { - var w = toBitArray(num); - if (w.length === 0) return new BN(1); - - // Skip leading zeroes - var res = this; - for (var i = 0; i < w.length; i++, res = res.sqr()) { - if (w[i] !== 0) break; - } - - if (++i < w.length) { - for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { - if (w[i] === 0) continue; - - res = res.mul(q); - } - } - - return res; - }; - - // Shift-left in-place - BN.prototype.iushln = function iushln (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); - var i; - - if (r !== 0) { - var carry = 0; - - for (i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = ((this.words[i] | 0) - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); - } - - if (carry) { - this.words[i] = carry; - this.length++; - } - } - - if (s !== 0) { - for (i = this.length - 1; i >= 0; i--) { - this.words[i + s] = this.words[i]; - } - - for (i = 0; i < s; i++) { - this.words[i] = 0; - } - - this.length += s; - } - - return this.strip(); - }; - - BN.prototype.ishln = function ishln (bits) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushln(bits); - }; - - // Shift-right in-place - // NOTE: `hint` is a lowest bit before trailing zeroes - // NOTE: if `extended` is present - it will be filled with destroyed bits - BN.prototype.iushrn = function iushrn (bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) { - h = (hint - (hint % 26)) / 26; - } else { - h = 0; - } - - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; - - h -= s; - h = Math.max(0, h); - - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) { - maskedWords.words[i] = this.words[i]; - } - maskedWords.length = s; - } - - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (i = 0; i < this.length; i++) { - this.words[i] = this.words[i + s]; - } - } else { - this.words[0] = 0; - this.length = 1; - } - - var carry = 0; - for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i] | 0; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } - - // Push carried bits as a mask - if (maskedWords && carry !== 0) { - maskedWords.words[maskedWords.length++] = carry; - } - - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; - } - - return this.strip(); - }; - - BN.prototype.ishrn = function ishrn (bits, hint, extended) { - // TODO(indutny): implement me - assert(this.negative === 0); - return this.iushrn(bits, hint, extended); - }; - - // Shift-left - BN.prototype.shln = function shln (bits) { - return this.clone().ishln(bits); - }; - - BN.prototype.ushln = function ushln (bits) { - return this.clone().iushln(bits); - }; - - // Shift-right - BN.prototype.shrn = function shrn (bits) { - return this.clone().ishrn(bits); - }; - - BN.prototype.ushrn = function ushrn (bits) { - return this.clone().iushrn(bits); - }; - - // Test if n bit is set - BN.prototype.testn = function testn (bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; - - // Fast case: bit is much higher than all existing words - if (this.length <= s) return false; - - // Check bit and return - var w = this.words[s]; - - return !!(w & q); - }; - - // Return only lowers bits of number (in-place) - BN.prototype.imaskn = function imaskn (bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - - assert(this.negative === 0, 'imaskn works only with positive numbers'); - - if (r !== 0) { - s++; - } - this.length = Math.min(s, this.length); - - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } - - return this.strip(); - }; - - // Return only lowers bits of number - BN.prototype.maskn = function maskn (bits) { - return this.clone().imaskn(bits); - }; - - // Add plain number `num` to `this` - BN.prototype.iaddn = function iaddn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.isubn(-num); - - // Possible sign change - if (this.negative !== 0) { - if (this.length === 1 && (this.words[0] | 0) < num) { - this.words[0] = num - (this.words[0] | 0); - this.negative = 0; - return this; - } - - this.negative = 0; - this.isubn(num); - this.negative = 1; - return this; - } - - // Add without checks - return this._iaddn(num); - }; - - BN.prototype._iaddn = function _iaddn (num) { - this.words[0] += num; - - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) { - this.words[i + 1] = 1; - } else { - this.words[i + 1]++; - } - } - this.length = Math.max(this.length, i + 1); - - return this; - }; - - // Subtract plain number `num` from `this` - BN.prototype.isubn = function isubn (num) { - assert(typeof num === 'number'); - assert(num < 0x4000000); - if (num < 0) return this.iaddn(-num); - - if (this.negative !== 0) { - this.negative = 0; - this.iaddn(num); - this.negative = 1; - return this; - } - - this.words[0] -= num; - - if (this.length === 1 && this.words[0] < 0) { - this.words[0] = -this.words[0]; - this.negative = 1; - } else { - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; - } - } - - return this.strip(); - }; - - BN.prototype.addn = function addn (num) { - return this.clone().iaddn(num); - }; - - BN.prototype.subn = function subn (num) { - return this.clone().isubn(num); - }; - - BN.prototype.iabs = function iabs () { - this.negative = 0; - - return this; - }; - - BN.prototype.abs = function abs () { - return this.clone().iabs(); - }; - - BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { - // Bigger storage is needed - var len = num.length + shift; - var i; - if (this.words.length < len) { - var t = new Array(len); - for (i = 0; i < this.length; i++) { - t[i] = this.words[i]; - } - this.words = t; - } else { - i = this.length; - } - - // Zeroify rest - this.length = Math.max(this.length, len); - for (; i < this.length; i++) { - this.words[i] = 0; - } - - var w; - var carry = 0; - for (i = 0; i < num.length; i++) { - w = (this.words[i + shift] | 0) + carry; - var right = (num.words[i] | 0) * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - w = (this.words[i + shift] | 0) + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } - - if (carry === 0) return this.strip(); - - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (i = 0; i < this.length; i++) { - w = -(this.words[i] | 0) + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.negative = 1; - - return this.strip(); - }; - - BN.prototype._wordDiv = function _wordDiv (num, mode) { - var shift = this.length - num.length; - - var a = this.clone(); - var b = num; - - // Normalize - var bhi = b.words[b.length - 1] | 0; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.ushln(shift); - a.iushln(shift); - bhi = b.words[b.length - 1] | 0; - } - - // Initialize quotient - var m = a.length - b.length; - var q; - - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) { - q.words[i] = 0; - } - } - - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (diff.negative === 0) { - a = diff; - if (q) { - q.words[m] = 1; - } - } - - for (var j = m - 1; j >= 0; j--) { - var qj = (a.words[b.length + j] | 0) * 0x4000000 + - (a.words[b.length + j - 1] | 0); - - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); - - a._ishlnsubmul(b, qj, j); - while (a.negative !== 0) { - qj--; - a.negative = 0; - a._ishlnsubmul(b, 1, j); - if (!a.isZero()) { - a.negative ^= 1; - } - } - if (q) { - q.words[j] = qj; - } - } - if (q) { - q.strip(); - } - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) { - a.iushrn(shift); - } - - return { - div: q || null, - mod: a - }; - }; - - // NOTE: 1) `mode` can be set to `mod` to request mod only, - // to `div` to request div only, or be absent to - // request both div & mod - // 2) `positive` is true if unsigned mod is requested - BN.prototype.divmod = function divmod (num, mode, positive) { - assert(!num.isZero()); - - if (this.isZero()) { - return { - div: new BN(0), - mod: new BN(0) - }; - } - - var div, mod, res; - if (this.negative !== 0 && num.negative === 0) { - res = this.neg().divmod(num, mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.iadd(num); - } - } - - return { - div: div, - mod: mod - }; - } - - if (this.negative === 0 && num.negative !== 0) { - res = this.divmod(num.neg(), mode); - - if (mode !== 'mod') { - div = res.div.neg(); - } - - return { - div: div, - mod: res.mod - }; - } - - if ((this.negative & num.negative) !== 0) { - res = this.neg().divmod(num.neg(), mode); - - if (mode !== 'div') { - mod = res.mod.neg(); - if (positive && mod.negative !== 0) { - mod.isub(num); - } - } - - return { - div: res.div, - mod: mod - }; - } - - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) { - return { - div: new BN(0), - mod: this - }; - } - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') { - return { - div: this.divn(num.words[0]), - mod: null - }; - } - - if (mode === 'mod') { - return { - div: null, - mod: new BN(this.modn(num.words[0])) - }; - } - - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; - } - - return this._wordDiv(num, mode); - }; - - // Find `this` / `num` - BN.prototype.div = function div (num) { - return this.divmod(num, 'div', false).div; - }; - - // Find `this` % `num` - BN.prototype.mod = function mod (num) { - return this.divmod(num, 'mod', false).mod; - }; - - BN.prototype.umod = function umod (num) { - return this.divmod(num, 'mod', true).mod; - }; - - // Find Round(`this` / `num`) - BN.prototype.divRound = function divRound (num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.isZero()) return dm.div; - - var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - - var half = num.ushrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - - // Round up - return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); - }; - - BN.prototype.modn = function modn (num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; - - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) { - acc = (p * acc + (this.words[i] | 0)) % num; - } - - return acc; - }; - - // In-place division by number - BN.prototype.idivn = function idivn (num) { - assert(num <= 0x3ffffff); + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = (this.words[i] | 0) + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid += Math.imul(ah0, bl0); + hi = Math.imul(ah0, bh0); + var w0 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w0 >>> 26); + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid += Math.imul(ah1, bl0); + hi = Math.imul(ah1, bh0); + lo += Math.imul(al0, bl1); + mid += Math.imul(al0, bh1); + mid += Math.imul(ah0, bl1); + hi += Math.imul(ah0, bh1); + var w1 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w1 >>> 26); + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid += Math.imul(ah2, bl0); + hi = Math.imul(ah2, bh0); + lo += Math.imul(al1, bl1); + mid += Math.imul(al1, bh1); + mid += Math.imul(ah1, bl1); + hi += Math.imul(ah1, bh1); + lo += Math.imul(al0, bl2); + mid += Math.imul(al0, bh2); + mid += Math.imul(ah0, bl2); + hi += Math.imul(ah0, bh2); + var w2 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w2 >>> 26); + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid += Math.imul(ah3, bl0); + hi = Math.imul(ah3, bh0); + lo += Math.imul(al2, bl1); + mid += Math.imul(al2, bh1); + mid += Math.imul(ah2, bl1); + hi += Math.imul(ah2, bh1); + lo += Math.imul(al1, bl2); + mid += Math.imul(al1, bh2); + mid += Math.imul(ah1, bl2); + hi += Math.imul(ah1, bh2); + lo += Math.imul(al0, bl3); + mid += Math.imul(al0, bh3); + mid += Math.imul(ah0, bl3); + hi += Math.imul(ah0, bh3); + var w3 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w3 >>> 26); + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid += Math.imul(ah4, bl0); + hi = Math.imul(ah4, bh0); + lo += Math.imul(al3, bl1); + mid += Math.imul(al3, bh1); + mid += Math.imul(ah3, bl1); + hi += Math.imul(ah3, bh1); + lo += Math.imul(al2, bl2); + mid += Math.imul(al2, bh2); + mid += Math.imul(ah2, bl2); + hi += Math.imul(ah2, bh2); + lo += Math.imul(al1, bl3); + mid += Math.imul(al1, bh3); + mid += Math.imul(ah1, bl3); + hi += Math.imul(ah1, bh3); + lo += Math.imul(al0, bl4); + mid += Math.imul(al0, bh4); + mid += Math.imul(ah0, bl4); + hi += Math.imul(ah0, bh4); + var w4 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w4 >>> 26); + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid += Math.imul(ah5, bl0); + hi = Math.imul(ah5, bh0); + lo += Math.imul(al4, bl1); + mid += Math.imul(al4, bh1); + mid += Math.imul(ah4, bl1); + hi += Math.imul(ah4, bh1); + lo += Math.imul(al3, bl2); + mid += Math.imul(al3, bh2); + mid += Math.imul(ah3, bl2); + hi += Math.imul(ah3, bh2); + lo += Math.imul(al2, bl3); + mid += Math.imul(al2, bh3); + mid += Math.imul(ah2, bl3); + hi += Math.imul(ah2, bh3); + lo += Math.imul(al1, bl4); + mid += Math.imul(al1, bh4); + mid += Math.imul(ah1, bl4); + hi += Math.imul(ah1, bh4); + lo += Math.imul(al0, bl5); + mid += Math.imul(al0, bh5); + mid += Math.imul(ah0, bl5); + hi += Math.imul(ah0, bh5); + var w5 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w5 >>> 26); + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid += Math.imul(ah6, bl0); + hi = Math.imul(ah6, bh0); + lo += Math.imul(al5, bl1); + mid += Math.imul(al5, bh1); + mid += Math.imul(ah5, bl1); + hi += Math.imul(ah5, bh1); + lo += Math.imul(al4, bl2); + mid += Math.imul(al4, bh2); + mid += Math.imul(ah4, bl2); + hi += Math.imul(ah4, bh2); + lo += Math.imul(al3, bl3); + mid += Math.imul(al3, bh3); + mid += Math.imul(ah3, bl3); + hi += Math.imul(ah3, bh3); + lo += Math.imul(al2, bl4); + mid += Math.imul(al2, bh4); + mid += Math.imul(ah2, bl4); + hi += Math.imul(ah2, bh4); + lo += Math.imul(al1, bl5); + mid += Math.imul(al1, bh5); + mid += Math.imul(ah1, bl5); + hi += Math.imul(ah1, bh5); + lo += Math.imul(al0, bl6); + mid += Math.imul(al0, bh6); + mid += Math.imul(ah0, bl6); + hi += Math.imul(ah0, bh6); + var w6 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w6 >>> 26); + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid += Math.imul(ah7, bl0); + hi = Math.imul(ah7, bh0); + lo += Math.imul(al6, bl1); + mid += Math.imul(al6, bh1); + mid += Math.imul(ah6, bl1); + hi += Math.imul(ah6, bh1); + lo += Math.imul(al5, bl2); + mid += Math.imul(al5, bh2); + mid += Math.imul(ah5, bl2); + hi += Math.imul(ah5, bh2); + lo += Math.imul(al4, bl3); + mid += Math.imul(al4, bh3); + mid += Math.imul(ah4, bl3); + hi += Math.imul(ah4, bh3); + lo += Math.imul(al3, bl4); + mid += Math.imul(al3, bh4); + mid += Math.imul(ah3, bl4); + hi += Math.imul(ah3, bh4); + lo += Math.imul(al2, bl5); + mid += Math.imul(al2, bh5); + mid += Math.imul(ah2, bl5); + hi += Math.imul(ah2, bh5); + lo += Math.imul(al1, bl6); + mid += Math.imul(al1, bh6); + mid += Math.imul(ah1, bl6); + hi += Math.imul(ah1, bh6); + lo += Math.imul(al0, bl7); + mid += Math.imul(al0, bh7); + mid += Math.imul(ah0, bl7); + hi += Math.imul(ah0, bh7); + var w7 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w7 >>> 26); + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid += Math.imul(ah8, bl0); + hi = Math.imul(ah8, bh0); + lo += Math.imul(al7, bl1); + mid += Math.imul(al7, bh1); + mid += Math.imul(ah7, bl1); + hi += Math.imul(ah7, bh1); + lo += Math.imul(al6, bl2); + mid += Math.imul(al6, bh2); + mid += Math.imul(ah6, bl2); + hi += Math.imul(ah6, bh2); + lo += Math.imul(al5, bl3); + mid += Math.imul(al5, bh3); + mid += Math.imul(ah5, bl3); + hi += Math.imul(ah5, bh3); + lo += Math.imul(al4, bl4); + mid += Math.imul(al4, bh4); + mid += Math.imul(ah4, bl4); + hi += Math.imul(ah4, bh4); + lo += Math.imul(al3, bl5); + mid += Math.imul(al3, bh5); + mid += Math.imul(ah3, bl5); + hi += Math.imul(ah3, bh5); + lo += Math.imul(al2, bl6); + mid += Math.imul(al2, bh6); + mid += Math.imul(ah2, bl6); + hi += Math.imul(ah2, bh6); + lo += Math.imul(al1, bl7); + mid += Math.imul(al1, bh7); + mid += Math.imul(ah1, bl7); + hi += Math.imul(ah1, bh7); + lo += Math.imul(al0, bl8); + mid += Math.imul(al0, bh8); + mid += Math.imul(ah0, bl8); + hi += Math.imul(ah0, bh8); + var w8 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w8 >>> 26); + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid += Math.imul(ah9, bl0); + hi = Math.imul(ah9, bh0); + lo += Math.imul(al8, bl1); + mid += Math.imul(al8, bh1); + mid += Math.imul(ah8, bl1); + hi += Math.imul(ah8, bh1); + lo += Math.imul(al7, bl2); + mid += Math.imul(al7, bh2); + mid += Math.imul(ah7, bl2); + hi += Math.imul(ah7, bh2); + lo += Math.imul(al6, bl3); + mid += Math.imul(al6, bh3); + mid += Math.imul(ah6, bl3); + hi += Math.imul(ah6, bh3); + lo += Math.imul(al5, bl4); + mid += Math.imul(al5, bh4); + mid += Math.imul(ah5, bl4); + hi += Math.imul(ah5, bh4); + lo += Math.imul(al4, bl5); + mid += Math.imul(al4, bh5); + mid += Math.imul(ah4, bl5); + hi += Math.imul(ah4, bh5); + lo += Math.imul(al3, bl6); + mid += Math.imul(al3, bh6); + mid += Math.imul(ah3, bl6); + hi += Math.imul(ah3, bh6); + lo += Math.imul(al2, bl7); + mid += Math.imul(al2, bh7); + mid += Math.imul(ah2, bl7); + hi += Math.imul(ah2, bh7); + lo += Math.imul(al1, bl8); + mid += Math.imul(al1, bh8); + mid += Math.imul(ah1, bl8); + hi += Math.imul(ah1, bh8); + lo += Math.imul(al0, bl9); + mid += Math.imul(al0, bh9); + mid += Math.imul(ah0, bl9); + hi += Math.imul(ah0, bh9); + var w9 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w9 >>> 26); + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid += Math.imul(ah9, bl1); + hi = Math.imul(ah9, bh1); + lo += Math.imul(al8, bl2); + mid += Math.imul(al8, bh2); + mid += Math.imul(ah8, bl2); + hi += Math.imul(ah8, bh2); + lo += Math.imul(al7, bl3); + mid += Math.imul(al7, bh3); + mid += Math.imul(ah7, bl3); + hi += Math.imul(ah7, bh3); + lo += Math.imul(al6, bl4); + mid += Math.imul(al6, bh4); + mid += Math.imul(ah6, bl4); + hi += Math.imul(ah6, bh4); + lo += Math.imul(al5, bl5); + mid += Math.imul(al5, bh5); + mid += Math.imul(ah5, bl5); + hi += Math.imul(ah5, bh5); + lo += Math.imul(al4, bl6); + mid += Math.imul(al4, bh6); + mid += Math.imul(ah4, bl6); + hi += Math.imul(ah4, bh6); + lo += Math.imul(al3, bl7); + mid += Math.imul(al3, bh7); + mid += Math.imul(ah3, bl7); + hi += Math.imul(ah3, bh7); + lo += Math.imul(al2, bl8); + mid += Math.imul(al2, bh8); + mid += Math.imul(ah2, bl8); + hi += Math.imul(ah2, bh8); + lo += Math.imul(al1, bl9); + mid += Math.imul(al1, bh9); + mid += Math.imul(ah1, bl9); + hi += Math.imul(ah1, bh9); + var w10 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w10 >>> 26); + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid += Math.imul(ah9, bl2); + hi = Math.imul(ah9, bh2); + lo += Math.imul(al8, bl3); + mid += Math.imul(al8, bh3); + mid += Math.imul(ah8, bl3); + hi += Math.imul(ah8, bh3); + lo += Math.imul(al7, bl4); + mid += Math.imul(al7, bh4); + mid += Math.imul(ah7, bl4); + hi += Math.imul(ah7, bh4); + lo += Math.imul(al6, bl5); + mid += Math.imul(al6, bh5); + mid += Math.imul(ah6, bl5); + hi += Math.imul(ah6, bh5); + lo += Math.imul(al5, bl6); + mid += Math.imul(al5, bh6); + mid += Math.imul(ah5, bl6); + hi += Math.imul(ah5, bh6); + lo += Math.imul(al4, bl7); + mid += Math.imul(al4, bh7); + mid += Math.imul(ah4, bl7); + hi += Math.imul(ah4, bh7); + lo += Math.imul(al3, bl8); + mid += Math.imul(al3, bh8); + mid += Math.imul(ah3, bl8); + hi += Math.imul(ah3, bh8); + lo += Math.imul(al2, bl9); + mid += Math.imul(al2, bh9); + mid += Math.imul(ah2, bl9); + hi += Math.imul(ah2, bh9); + var w11 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w11 >>> 26); + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid += Math.imul(ah9, bl3); + hi = Math.imul(ah9, bh3); + lo += Math.imul(al8, bl4); + mid += Math.imul(al8, bh4); + mid += Math.imul(ah8, bl4); + hi += Math.imul(ah8, bh4); + lo += Math.imul(al7, bl5); + mid += Math.imul(al7, bh5); + mid += Math.imul(ah7, bl5); + hi += Math.imul(ah7, bh5); + lo += Math.imul(al6, bl6); + mid += Math.imul(al6, bh6); + mid += Math.imul(ah6, bl6); + hi += Math.imul(ah6, bh6); + lo += Math.imul(al5, bl7); + mid += Math.imul(al5, bh7); + mid += Math.imul(ah5, bl7); + hi += Math.imul(ah5, bh7); + lo += Math.imul(al4, bl8); + mid += Math.imul(al4, bh8); + mid += Math.imul(ah4, bl8); + hi += Math.imul(ah4, bh8); + lo += Math.imul(al3, bl9); + mid += Math.imul(al3, bh9); + mid += Math.imul(ah3, bl9); + hi += Math.imul(ah3, bh9); + var w12 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w12 >>> 26); + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid += Math.imul(ah9, bl4); + hi = Math.imul(ah9, bh4); + lo += Math.imul(al8, bl5); + mid += Math.imul(al8, bh5); + mid += Math.imul(ah8, bl5); + hi += Math.imul(ah8, bh5); + lo += Math.imul(al7, bl6); + mid += Math.imul(al7, bh6); + mid += Math.imul(ah7, bl6); + hi += Math.imul(ah7, bh6); + lo += Math.imul(al6, bl7); + mid += Math.imul(al6, bh7); + mid += Math.imul(ah6, bl7); + hi += Math.imul(ah6, bh7); + lo += Math.imul(al5, bl8); + mid += Math.imul(al5, bh8); + mid += Math.imul(ah5, bl8); + hi += Math.imul(ah5, bh8); + lo += Math.imul(al4, bl9); + mid += Math.imul(al4, bh9); + mid += Math.imul(ah4, bl9); + hi += Math.imul(ah4, bh9); + var w13 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w13 >>> 26); + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid += Math.imul(ah9, bl5); + hi = Math.imul(ah9, bh5); + lo += Math.imul(al8, bl6); + mid += Math.imul(al8, bh6); + mid += Math.imul(ah8, bl6); + hi += Math.imul(ah8, bh6); + lo += Math.imul(al7, bl7); + mid += Math.imul(al7, bh7); + mid += Math.imul(ah7, bl7); + hi += Math.imul(ah7, bh7); + lo += Math.imul(al6, bl8); + mid += Math.imul(al6, bh8); + mid += Math.imul(ah6, bl8); + hi += Math.imul(ah6, bh8); + lo += Math.imul(al5, bl9); + mid += Math.imul(al5, bh9); + mid += Math.imul(ah5, bl9); + hi += Math.imul(ah5, bh9); + var w14 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w14 >>> 26); + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid += Math.imul(ah9, bl6); + hi = Math.imul(ah9, bh6); + lo += Math.imul(al8, bl7); + mid += Math.imul(al8, bh7); + mid += Math.imul(ah8, bl7); + hi += Math.imul(ah8, bh7); + lo += Math.imul(al7, bl8); + mid += Math.imul(al7, bh8); + mid += Math.imul(ah7, bl8); + hi += Math.imul(ah7, bh8); + lo += Math.imul(al6, bl9); + mid += Math.imul(al6, bh9); + mid += Math.imul(ah6, bl9); + hi += Math.imul(ah6, bh9); + var w15 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w15 >>> 26); + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid += Math.imul(ah9, bl7); + hi = Math.imul(ah9, bh7); + lo += Math.imul(al8, bl8); + mid += Math.imul(al8, bh8); + mid += Math.imul(ah8, bl8); + hi += Math.imul(ah8, bh8); + lo += Math.imul(al7, bl9); + mid += Math.imul(al7, bh9); + mid += Math.imul(ah7, bl9); + hi += Math.imul(ah7, bh9); + var w16 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w16 >>> 26); + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid += Math.imul(ah9, bl8); + hi = Math.imul(ah9, bh8); + lo += Math.imul(al8, bl9); + mid += Math.imul(al8, bh9); + mid += Math.imul(ah8, bl9); + hi += Math.imul(ah8, bh9); + var w17 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w17 >>> 26); + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid += Math.imul(ah9, bl9); + hi = Math.imul(ah9, bh9); + var w18 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w18 >>> 26); + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; } - - return this.strip(); - }; - - BN.prototype.divn = function divn (num) { - return this.clone().idivn(num); + return out; }; - BN.prototype.egcd = function egcd (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var x = this; - var y = p.clone(); - - if (x.negative !== 0) { - x = x.umod(p); - } else { - x = x.clone(); - } - - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); - - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); - - var g = 0; - - while (x.isEven() && y.isEven()) { - x.iushrn(1); - y.iushrn(1); - ++g; - } - - var yp = y.clone(); - var xp = x.clone(); - - while (!x.isZero()) { - for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - x.iushrn(i); - while (i-- > 0) { - if (A.isOdd() || B.isOdd()) { - A.iadd(yp); - B.isub(xp); - } + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } - A.iushrn(1); - B.iushrn(1); - } - } + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; - for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - y.iushrn(j); - while (j-- > 0) { - if (C.isOdd() || D.isOdd()) { - C.iadd(yp); - D.isub(xp); - } + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; - C.iushrn(1); - D.iushrn(1); - } - } + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; } - - return { - a: C, - b: D, - gcd: y.iushln(g) - }; - }; - - // This is reduced incarnation of the binary EEA - // above, designated to invert members of the - // _prime_ fields F(p) at a maximal speed - BN.prototype._invmp = function _invmp (p) { - assert(p.negative === 0); - assert(!p.isZero()); - - var a = this; - var b = p.clone(); - - if (a.negative !== 0) { - a = a.umod(p); + if (carry !== 0) { + out.words[k] = carry; } else { - a = a.clone(); + out.length--; } - var x1 = new BN(1); - var x2 = new BN(0); - - var delta = b.clone(); - - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); - if (i > 0) { - a.iushrn(i); - while (i-- > 0) { - if (x1.isOdd()) { - x1.iadd(delta); - } - - x1.iushrn(1); - } - } - - for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); - if (j > 0) { - b.iushrn(j); - while (j-- > 0) { - if (x2.isOdd()) { - x2.iadd(delta); - } - - x2.iushrn(1); - } - } + return out.strip(); + } - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } - } + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } + BN.prototype.mulTo = function mulTo (num, out) { var res; - if (a.cmpn(1) === 0) { - res = x1; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); } else { - res = x2; - } - - if (res.cmpn(0) < 0) { - res.iadd(p); + res = jumboMulTo(this, num, out); } return res; }; - BN.prototype.gcd = function gcd (num) { - if (this.isZero()) return num.abs(); - if (num.isZero()) return this.abs(); - - var a = this.clone(); - var b = num.clone(); - a.negative = 0; - b.negative = 0; - - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.iushrn(1); - b.iushrn(1); - } - - do { - while (a.isEven()) { - a.iushrn(1); - } - while (b.isEven()) { - b.iushrn(1); - } - - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } - - a.isub(b); - } while (true); - - return b.iushln(shift); - }; - - // Invert number in the field F(num) - BN.prototype.invm = function invm (num) { - return this.egcd(num).a.umod(num); - }; - - BN.prototype.isEven = function isEven () { - return (this.words[0] & 1) === 0; - }; - - BN.prototype.isOdd = function isOdd () { - return (this.words[0] & 1) === 1; - }; - - // And first word and num - BN.prototype.andln = function andln (num) { - return this.words[0] & num; - }; - - // Increment at the bit position in-line - BN.prototype.bincn = function bincn (bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - for (var i = this.length; i < s + 1; i++) { - this.words[i] = 0; - } - this.words[s] |= q; - this.length = s + 1; - return this; - } + function FFTM (x, y) { + this.x = x; + this.y = y; + } - // Add bit and propagate, if needed - var carry = q; - for (i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i] | 0; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; - } - if (carry !== 0) { - this.words[i] = carry; - this.length++; + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); } - return this; - }; - BN.prototype.isZero = function isZero () { - return this.length === 1 && this.words[0] === 0; + return t; }; - BN.prototype.cmpn = function cmpn (num) { - var negative = num < 0; - - if (this.negative !== 0 && !negative) return -1; - if (this.negative === 0 && negative) return 1; - - this.strip(); - - var res; - if (this.length > 1) { - res = 1; - } else { - if (negative) { - num = -num; - } - - assert(num <= 0x3ffffff, 'Number is too big'); + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; - var w = this.words[0] | 0; - res = w === num ? 0 : w < num ? -1 : 1; - } - if (this.negative !== 0) { - res = -res; + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; } - return res; - }; - - // Compare two numbers and return: - // 1 - if `this` > `num` - // 0 - if `this` == `num` - // -1 - if `this` < `num` - BN.prototype.cmp = function cmp (num) { - if (this.negative !== 0 && num.negative === 0) return -1; - if (this.negative === 0 && num.negative !== 0) return 1; - - var res = this.ucmp(num); - if (this.negative !== 0) return -res; - return res; + return rb; }; - // Unsigned comparison - BN.prototype.ucmp = function ucmp (num) { - // At this point both numbers have the same sign - if (this.length > num.length) return 1; - if (this.length < num.length) return -1; - - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i] | 0; - var b = num.words[i] | 0; - - if (a === b) continue; - if (a < b) { - res = -1; - } else if (a > b) { - res = 1; - } - break; + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; } - return res; - }; - - BN.prototype.gtn = function gtn (num) { - return this.cmpn(num) === 1; - }; - - BN.prototype.gt = function gt (num) { - return this.cmp(num) === 1; - }; - - BN.prototype.gten = function gten (num) { - return this.cmpn(num) >= 0; - }; - - BN.prototype.gte = function gte (num) { - return this.cmp(num) >= 0; - }; - - BN.prototype.ltn = function ltn (num) { - return this.cmpn(num) === -1; }; - BN.prototype.lt = function lt (num) { - return this.cmp(num) === -1; - }; - - BN.prototype.lten = function lten (num) { - return this.cmpn(num) <= 0; - }; - - BN.prototype.lte = function lte (num) { - return this.cmp(num) <= 0; - }; - - BN.prototype.eqn = function eqn (num) { - return this.cmpn(num) === 0; - }; - - BN.prototype.eq = function eq (num) { - return this.cmp(num) === 0; - }; + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); - // - // A reduce context, could be using montgomery or something better, depending - // on the `m` itself. - // - BN.red = function red (num) { - return new Red(num); - }; + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; - BN.prototype.toRed = function toRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(this.negative === 0, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); - }; + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); - BN.prototype.fromRed = function fromRed () { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); - }; + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; - BN.prototype._forceRed = function _forceRed (ctx) { - this.red = ctx; - return this; - }; + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; - BN.prototype.forceRed = function forceRed (ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); - }; + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; - BN.prototype.redAdd = function redAdd (num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); - }; + var rx = rtwdf_ * ro - itwdf_ * io; - BN.prototype.redIAdd = function redIAdd (num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); - }; + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; - BN.prototype.redSub = function redSub (num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); - }; + rtws[p + j] = re + ro; + itws[p + j] = ie + io; - BN.prototype.redISub = function redISub (num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); - }; + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; - BN.prototype.redShl = function redShl (num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.ushl(this, num); - }; + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; - BN.prototype.redMul = function redMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } }; - BN.prototype.redIMul = function redIMul (num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); - }; + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } - BN.prototype.redSqr = function redSqr () { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); + return 1 << i + 1 + odd; }; - BN.prototype.redISqr = function redISqr () { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); - }; + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; - // Square root over p - BN.prototype.redSqrt = function redSqrt () { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); - }; + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; - BN.prototype.redInvm = function redInvm () { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); - }; + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; - // Return negative clone of `this` % `red modulo` - BN.prototype.redNeg = function redNeg () { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); - }; + t = iws[i]; - BN.prototype.redPow = function redPow (num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } }; - // Prime numbers with efficient reduction - var primes = { - k256: null, - p224: null, - p192: null, - p25519: null - }; + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; - // Pseudo-Mersenne prime - function MPrime (name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).iushln(this.n).isub(this.p); + ws[i] = w & 0x3ffffff; - this.tmp = this._tmp(); - } + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } - MPrime.prototype._tmp = function _tmp () { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; + return ws; }; - MPrime.prototype.ireduce = function ireduce (num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; } - return r; + assert(carry === 0); + assert((carry & ~0x1fff) === 0); }; - MPrime.prototype.split = function split (input, out) { - input.iushrn(this.n, 0, out); - }; + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } - MPrime.prototype.imulK = function imulK (num) { - return num.imul(this.k); + return ph; }; - function K256 () { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); - } - inherits(K256, MPrime); + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); - K256.prototype.split = function split (input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; + var rbt = this.makeRBT(N); - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) { - output.words[i] = input.words[i]; - } - output.length = outLen; + var _ = this.stub(N); - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; - } + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); - for (i = 10; i < input.length; i++) { - var next = input.words[i] | 0; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; - } - prev >>>= 22; - input.words[i - 10] = prev; - if (prev === 0 && input.length > 10) { - input.length -= 10; - } else { - input.length -= 9; - } - }; + var rmws = out.words; + rmws.length = N; - K256.prototype.imulK = function imulK (num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i] | 0; - lo += w * 0x3d1; - num.words[i] = lo & 0x3ffffff; - lo = w * 0x40 + ((lo / 0x4000000) | 0); - } + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) { - num.length--; - } + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; } - return num; - }; - function P224 () { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); - } - inherits(P224, MPrime); + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); - function P192 () { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); - } - inherits(P192, MPrime); + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; - function P25519 () { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); - } - inherits(P25519, MPrime); + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; - P25519.prototype.imulK = function imulK (num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = (num.words[i] | 0) * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; - num.words[i] = lo; - carry = hi; - } - if (carry !== 0) { - num.words[num.length++] = carry; - } - return num; + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); }; - // Exported mostly for testing purposes, use plain name instead - BN._prime = function prime (name) { - // Cached version of prime - if (primes[name]) return primes[name]; + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); - var prime; - if (name === 'k256') { - prime = new K256(); - } else if (name === 'p224') { - prime = new P224(); - } else if (name === 'p192') { - prime = new P192(); - } else if (name === 'p25519') { - prime = new P25519(); - } else { - throw new Error('Unknown prime ' + name); + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; } - primes[name] = prime; - return prime; - }; - - // - // Base reduction engine - // - function Red (m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - this.m = m; - this.prime = null; + if (carry !== 0) { + this.words[i] = carry; + this.length++; } - } - Red.prototype._verify1 = function _verify1 (a) { - assert(a.negative === 0, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); + return this; }; - Red.prototype._verify2 = function _verify2 (a, b) { - assert((a.negative | b.negative) === 0, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); }; - Red.prototype.imod = function imod (a) { - if (this.prime) return this.prime.ireduce(a)._forceRed(this); - return a.umod(this.m)._forceRed(this); + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); }; - Red.prototype.neg = function neg (a) { - if (a.isZero()) { - return a.clone(); - } - - return this.m.sub(a)._forceRed(this); + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); }; - Red.prototype.add = function add (a, b) { - this._verify2(a, b); + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); - var res = a.add(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; } - return res._forceRed(this); - }; - Red.prototype.iadd = function iadd (a, b) { - this._verify2(a, b); + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) { - res.isub(this.m); + res = res.mul(q); + } } + return res; }; - Red.prototype.sub = function sub (a, b) { - this._verify2(a, b); + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; - var res = a.sub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); - } - return res._forceRed(this); - }; + if (r !== 0) { + var carry = 0; - Red.prototype.isub = function isub (a, b) { - this._verify2(a, b); + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } - var res = a.isub(b); - if (res.cmpn(0) < 0) { - res.iadd(this.m); + if (carry) { + this.words[i] = carry; + this.length++; + } } - return res; - }; - Red.prototype.shl = function shl (a, num) { - this._verify1(a); - return this.imod(a.ushln(num)); - }; + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } - Red.prototype.imul = function imul (a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); - }; + for (i = 0; i < s; i++) { + this.words[i] = 0; + } - Red.prototype.mul = function mul (a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); - }; + this.length += s; + } - Red.prototype.isqr = function isqr (a) { - return this.imul(a, a.clone()); + return this.strip(); }; - Red.prototype.sqr = function sqr (a) { - return this.mul(a, a); + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); }; - Red.prototype.sqrt = function sqrt (a) { - if (a.isZero()) return a.clone(); - - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); - - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).iushrn(2); - return this.pow(a, pow); - } - - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (!q.isZero() && q.andln(1) === 0) { - s++; - q.iushrn(1); + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; } - assert(!q.isZero()); - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); - - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).iushrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; - while (this.pow(z, lpow).cmp(nOne) !== 0) { - z.redIAdd(nOne); - } + h -= s; + h = Math.max(0, h); - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).iushrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) { - tmp = tmp.redSqr(); + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; } - assert(i < m); - var b = this.pow(c, new BN(1).iushln(m - i - 1)); - - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; + maskedWords.length = s; } - return r; - }; - - Red.prototype.invm = function invm (a) { - var inv = a._invmp(this.m); - if (inv.negative !== 0) { - inv.negative = 0; - return this.imod(inv).redNeg(); + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } } else { - return this.imod(inv); + this.words[0] = 0; + this.length = 1; } - }; - - Red.prototype.pow = function pow (a, num) { - if (num.isZero()) return new BN(1); - if (num.cmpn(1) === 0) return a.clone(); - var windowSize = 4; - var wnd = new Array(1 << windowSize); - wnd[0] = new BN(1).toRed(this); - wnd[1] = a; - for (var i = 2; i < wnd.length; i++) { - wnd[i] = this.mul(wnd[i - 1], a); + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; } - var res = wnd[0]; - var current = 0; - var currentLen = 0; - var start = num.bitLength() % 26; - if (start === 0) { - start = 26; + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; } - for (i = num.length - 1; i >= 0; i--) { - var word = num.words[i]; - for (var j = start - 1; j >= 0; j--) { - var bit = (word >> j) & 1; - if (res !== wnd[0]) { - res = this.sqr(res); - } - - if (bit === 0 && current === 0) { - currentLen = 0; - continue; - } + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } - current <<= 1; - current |= bit; - currentLen++; - if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + return this.strip(); + }; - res = this.mul(res, wnd[current]); - currentLen = 0; - current = 0; - } - start = 26; - } + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; - return res; + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); }; - Red.prototype.convertTo = function convertTo (num) { - var r = num.umod(this.m); + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; - return r === num ? r.clone() : r; + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); }; - Red.prototype.convertFrom = function convertFrom (num) { - var res = num.clone(); - res.red = null; - return res; + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); }; - // - // Montgomery method engine - // + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; - BN.mont = function mont (num) { - return new Mont(num); + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; + + // Check bit and return + var w = this.words[s]; + + return !!(w & q); }; - function Mont (m) { - Red.call(this, m); + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) { - this.shift += 26 - (this.shift % 26); - } + assert(this.negative === 0, 'imaskn works only with positive numbers'); - this.r = new BN(1).iushln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv = this.minv.umod(this.r); - this.minv = this.r.sub(this.minv); - } - inherits(Mont, Red); + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } - Mont.prototype.convertTo = function convertTo (num) { - return this.imod(num.ushln(this.shift)); + return this.strip(); }; - Mont.prototype.convertFrom = function convertFrom (num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); }; - Mont.prototype.imul = function imul (a, b) { - if (a.isZero() || b.isZero()) { - a.words[0] = 0; - a.length = 1; - return a; + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); + + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } + + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; } - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; + // Add without checks + return this._iaddn(num); + }; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; + + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } } + this.length = Math.max(this.length, i + 1); - return res._forceRed(this); + return this; }; - Mont.prototype.mul = function mul (a, b) { - if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).iushrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) { - res = u.isub(this.m); - } else if (u.cmpn(0) < 0) { - res = u.iadd(this.m); + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; } - return res._forceRed(this); + this.words[0] -= num; + + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + + return this.strip(); }; - Mont.prototype.invm = function invm (a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); }; -})(typeof module === 'undefined' || module, this); -},{}],137:[function(require,module,exports){ -(function (Buffer){ -var bn = require('bn.js'); -var randomBytes = require('randombytes'); -module.exports = crt; -function blind(priv) { - var r = getr(priv); - var blinder = r.toRed(bn.mont(priv.modulus)) - .redPow(new bn(priv.publicExponent)).fromRed(); - return { - blinder: blinder, - unblinder:r.invm(priv.modulus) + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); }; -} -function crt(msg, priv) { - var blinds = blind(priv); - var len = priv.modulus.byteLength(); - var mod = bn.mont(priv.modulus); - var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus); - var c1 = blinded.toRed(bn.mont(priv.prime1)); - var c2 = blinded.toRed(bn.mont(priv.prime2)); - var qinv = priv.coefficient; - var p = priv.prime1; - var q = priv.prime2; - var m1 = c1.redPow(priv.exponent1); - var m2 = c2.redPow(priv.exponent2); - m1 = m1.fromRed(); - m2 = m2.fromRed(); - var h = m1.isub(m2).imul(qinv).umod(p); - h.imul(q); - m2.iadd(h); - return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len)); -} -crt.getr = getr; -function getr(priv) { - var len = priv.modulus.byteLength(); - var r = new bn(randomBytes(len)); - while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) { - r = new bn(randomBytes(len)); - } - return r; -} -}).call(this,require("buffer").Buffer) -},{"bn.js":136,"buffer":99,"randombytes":294}],138:[function(require,module,exports){ -'use strict'; + BN.prototype.iabs = function iabs () { + this.negative = 0; -var elliptic = exports; + return this; + }; -elliptic.version = require('../package.json').version; -elliptic.utils = require('./elliptic/utils'); -elliptic.rand = require('brorand'); -elliptic.hmacDRBG = require('./elliptic/hmac-drbg'); -elliptic.curve = require('./elliptic/curve'); -elliptic.curves = require('./elliptic/curves'); + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; -// Protocols -elliptic.ec = require('./elliptic/ec'); -elliptic.eddsa = require('./elliptic/eddsa'); + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + // Bigger storage is needed + var len = num.length + shift; + var i; + if (this.words.length < len) { + var t = new Array(len); + for (i = 0; i < this.length; i++) { + t[i] = this.words[i]; + } + this.words = t; + } else { + i = this.length; + } -},{"../package.json":161,"./elliptic/curve":141,"./elliptic/curves":144,"./elliptic/ec":145,"./elliptic/eddsa":148,"./elliptic/hmac-drbg":151,"./elliptic/utils":153,"brorand":154}],139:[function(require,module,exports){ -'use strict'; + // Zeroify rest + this.length = Math.max(this.length, len); + for (; i < this.length; i++) { + this.words[i] = 0; + } -var BN = require('bn.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var getNAF = utils.getNAF; -var getJSF = utils.getJSF; -var assert = utils.assert; + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } -function BaseCurve(type, conf) { - this.type = type; - this.p = new BN(conf.p, 16); + if (carry === 0) return this.strip(); - // Use Montgomery, when there is no fast reduction for the prime - this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; - // Useful for many curves - this.zero = new BN(0).toRed(this.red); - this.one = new BN(1).toRed(this.red); - this.two = new BN(2).toRed(this.red); + return this.strip(); + }; - // Curve configuration, optional - this.n = conf.n && new BN(conf.n, 16); - this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; - // Temporary arrays - this._wnafT1 = new Array(4); - this._wnafT2 = new Array(4); - this._wnafT3 = new Array(4); - this._wnafT4 = new Array(4); -} -module.exports = BaseCurve; + var a = this.clone(); + var b = num; -BaseCurve.prototype.point = function point() { - throw new Error('Not implemented'); -}; + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } -BaseCurve.prototype.validate = function validate() { - throw new Error('Not implemented'); -}; + // Initialize quotient + var m = a.length - b.length; + var q; -BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { - assert(p.precomputed); - var doubles = p._getDoubles(); + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } - var naf = getNAF(k, 1); - var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); - I /= 3; + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } - // Translate into more windowed form - var repr = []; - for (var j = 0; j < naf.length; j += doubles.step) { - var nafW = 0; - for (var k = j + doubles.step - 1; k >= j; k--) - nafW = (nafW << 1) + naf[k]; - repr.push(nafW); - } + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); - var a = this.jpoint(null, null, null); - var b = this.jpoint(null, null, null); - for (var i = I; i > 0; i--) { - for (var j = 0; j < repr.length; j++) { - var nafW = repr[j]; - if (nafW === i) - b = b.mixedAdd(doubles.points[j]); - else if (nafW === -i) - b = b.mixedAdd(doubles.points[j].neg()); + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); + + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } } - a = a.add(b); - } - return a.toP(); -}; + if (q) { + q.strip(); + } + a.strip(); -BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { - var w = 4; + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } - // Precompute window - var nafPoints = p._getNAFPoints(w); - w = nafPoints.wnd; - var wnd = nafPoints.points; + return { + div: q || null, + mod: a + }; + }; - // Get NAF form - var naf = getNAF(k, w); + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); - // Add `this`*(N+1) for every w-NAF index - var acc = this.jpoint(null, null, null); - for (var i = naf.length - 1; i >= 0; i--) { - // Count zeroes - for (var k = 0; i >= 0 && naf[i] === 0; i--) - k++; - if (i >= 0) - k++; - acc = acc.dblp(k); + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } - if (i < 0) - break; - var z = naf[i]; - assert(z !== 0); - if (p.type === 'affine') { - // J +- P - if (z > 0) - acc = acc.mixedAdd(wnd[(z - 1) >> 1]); - else - acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); - } else { - // J +- J - if (z > 0) - acc = acc.add(wnd[(z - 1) >> 1]); - else - acc = acc.add(wnd[(-z - 1) >> 1].neg()); + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); + + if (mode !== 'mod') { + div = res.div.neg(); + } + + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } + + return { + div: div, + mod: mod + }; } - } - return p.type === 'affine' ? acc.toP() : acc; -}; -BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, - points, - coeffs, - len) { - var wndWidth = this._wnafT1; - var wnd = this._wnafT2; - var naf = this._wnafT3; + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); - // Fill all arrays - var max = 0; - for (var i = 0; i < len; i++) { - var p = points[i]; - var nafPoints = p._getNAFPoints(defW); - wndWidth[i] = nafPoints.wnd; - wnd[i] = nafPoints.points; - } + if (mode !== 'mod') { + div = res.div.neg(); + } - // Comb small window NAFs - for (var i = len - 1; i >= 1; i -= 2) { - var a = i - 1; - var b = i; - if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { - naf[a] = getNAF(coeffs[a], wndWidth[a]); - naf[b] = getNAF(coeffs[b], wndWidth[b]); - max = Math.max(naf[a].length, max); - max = Math.max(naf[b].length, max); - continue; + return { + div: div, + mod: res.mod + }; } - var comb = [ - points[a], /* 1 */ - null, /* 3 */ - null, /* 5 */ - points[b] /* 7 */ - ]; + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); - // Try to avoid Projective points, if possible - if (points[a].y.cmp(points[b].y) === 0) { - comb[1] = points[a].add(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].add(points[b].neg()); - } else { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } - var index = [ - -3, /* -1 -1 */ - -1, /* -1 0 */ - -5, /* -1 1 */ - -7, /* 0 -1 */ - 0, /* 0 0 */ - 7, /* 0 1 */ - 5, /* 1 -1 */ - 1, /* 1 0 */ - 3 /* 1 1 */ - ]; + return { + div: res.div, + mod: mod + }; + } - var jsf = getJSF(coeffs[a], coeffs[b]); - max = Math.max(jsf[0].length, max); - naf[a] = new Array(max); - naf[b] = new Array(max); - for (var j = 0; j < max; j++) { - var ja = jsf[0][j] | 0; - var jb = jsf[1][j] | 0; + // Both numbers are positive at this point - naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; - naf[b][j] = 0; - wnd[a] = comb; + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; } - } - var acc = this.jpoint(null, null, null); - var tmp = this._wnafT4; - for (var i = max; i >= 0; i--) { - var k = 0; + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } - while (i >= 0) { - var zero = true; - for (var j = 0; j < len; j++) { - tmp[j] = naf[j][i] | 0; - if (tmp[j] !== 0) - zero = false; + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; } - if (!zero) - break; - k++; - i--; + + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; } - if (i >= 0) - k++; - acc = acc.dblp(k); - if (i < 0) - break; - for (var j = 0; j < len; j++) { - var z = tmp[j]; - var p; - if (z === 0) - continue; - else if (z > 0) - p = wnd[j][(z - 1) >> 1]; - else if (z < 0) - p = wnd[j][(-z - 1) >> 1].neg(); + return this._wordDiv(num, mode); + }; - if (p.type === 'affine') - acc = acc.mixedAdd(p); - else - acc = acc.add(p); - } - } - // Zeroify references - for (var i = 0; i < len; i++) - wnd[i] = null; - return acc.toP(); -}; + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; -function BasePoint(curve, type) { - this.curve = curve; - this.type = type; - this.precomputed = null; -} -BaseCurve.BasePoint = BasePoint; + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; -BasePoint.prototype.eq = function eq(/*other*/) { - throw new Error('Not implemented'); -}; + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; -BasePoint.prototype.validate = function validate() { - return this.curve.validate(this); -}; + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); -BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - bytes = utils.toArray(bytes, enc); + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; - var len = this.p.byteLength(); - if (bytes[0] === 0x04 && bytes.length - 1 === 2 * len) { - return this.point(bytes.slice(1, 1 + len), - bytes.slice(1 + len, 1 + 2 * len)); - } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && - bytes.length - 1 === len) { - return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); - } - throw new Error('Unknown point format'); -}; + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; -BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { - return this.encode(enc, true); -}; + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); -BasePoint.prototype._encode = function _encode(compact) { - var len = this.curve.p.byteLength(); - var x = this.getX().toArray('be', len); + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - if (compact) - return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; - return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; -}; + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; -BasePoint.prototype.encode = function encode(enc, compact) { - return utils.encode(this._encode(compact), enc); -}; + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } -BasePoint.prototype.precompute = function precompute(power) { - if (this.precomputed) - return this; + return acc; + }; - var precomputed = { - doubles: null, - naf: null, - beta: null + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); + + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } + + return this.strip(); }; - precomputed.naf = this._getNAFPoints(8); - precomputed.doubles = this._getDoubles(4, power); - precomputed.beta = this._getBeta(); - this.precomputed = precomputed; - return this; -}; + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; -BasePoint.prototype._hasDoubles = function _hasDoubles(k) { - if (!this.precomputed) - return false; + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); - var doubles = this.precomputed.doubles; - if (!doubles) - return false; + var x = this; + var y = p.clone(); - return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); -}; + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } -BasePoint.prototype._getDoubles = function _getDoubles(step, power) { - if (this.precomputed && this.precomputed.doubles) - return this.precomputed.doubles; + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); - var doubles = [ this ]; - var acc = this; - for (var i = 0; i < power; i += step) { - for (var j = 0; j < step; j++) - acc = acc.dbl(); - doubles.push(acc); - } - return { - step: step, - points: doubles - }; -}; + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); -BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { - if (this.precomputed && this.precomputed.naf) - return this.precomputed.naf; + var g = 0; - var res = [ this ]; - var max = (1 << wnd) - 1; - var dbl = max === 1 ? null : this.dbl(); - for (var i = 1; i < max; i++) - res[i] = res[i - 1].add(dbl); - return { - wnd: wnd, - points: res - }; -}; + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } -BasePoint.prototype._getBeta = function _getBeta() { - return null; -}; + var yp = y.clone(); + var xp = x.clone(); -BasePoint.prototype.dblp = function dblp(k) { - var r = this; - for (var i = 0; i < k; i++) - r = r.dbl(); - return r; -}; + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } -},{"../../elliptic":138,"bn.js":136}],140:[function(require,module,exports){ -'use strict'; + A.iushrn(1); + B.iushrn(1); + } + } -var curve = require('../curve'); -var elliptic = require('../../elliptic'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = curve.base; + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } -var assert = elliptic.utils.assert; + C.iushrn(1); + D.iushrn(1); + } + } -function EdwardsCurve(conf) { - // NOTE: Important as we are creating point in Base.call() - this.twisted = (conf.a | 0) !== 1; - this.mOneA = this.twisted && (conf.a | 0) === -1; - this.extended = this.mOneA; + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } - Base.call(this, 'edwards', conf); + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; - this.a = new BN(conf.a, 16).umod(this.red.m); - this.a = this.a.toRed(this.red); - this.c = new BN(conf.c, 16).toRed(this.red); - this.c2 = this.c.redSqr(); - this.d = new BN(conf.d, 16).toRed(this.red); - this.dd = this.d.redAdd(this.d); + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); - assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); - this.oneC = (conf.c | 0) === 1; -} -inherits(EdwardsCurve, Base); -module.exports = EdwardsCurve; + var a = this; + var b = p.clone(); -EdwardsCurve.prototype._mulA = function _mulA(num) { - if (this.mOneA) - return num.redNeg(); - else - return this.a.redMul(num); -}; + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } -EdwardsCurve.prototype._mulC = function _mulC(num) { - if (this.oneC) - return num; - else - return this.c.redMul(num); -}; + var x1 = new BN(1); + var x2 = new BN(0); -// Just for compatibility with Short curve -EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { - return this.point(x, y, z, t); -}; + var delta = b.clone(); -EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } - var x2 = x.redSqr(); - var rhs = this.c2.redSub(this.a.redMul(x2)); - var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + x1.iushrn(1); + } + } - var y2 = rhs.redMul(lhs.redInvm()); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); + x2.iushrn(1); + } + } - return this.point(x, y); -}; + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } -EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { - y = new BN(y, 16); - if (!y.red) - y = y.toRed(this.red); + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } - // x^2 = (y^2 - 1) / (d y^2 + 1) - var y2 = y.redSqr(); - var lhs = y2.redSub(this.one); - var rhs = y2.redMul(this.d).redAdd(this.one); - var x2 = lhs.redMul(rhs.redInvm()); + if (res.cmpn(0) < 0) { + res.iadd(p); + } - if (x2.cmp(this.zero) === 0) { - if (odd) - throw new Error('invalid point'); - else - return this.point(this.zero, y); - } + return res; + }; - var x = x2.redSqrt(); - if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) - throw new Error('invalid point'); + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); + + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; + + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } - if (x.isOdd() !== odd) - x = x.redNeg(); + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } - return this.point(x, y); -}; + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } -EdwardsCurve.prototype.validate = function validate(point) { - if (point.isInfinity()) - return true; + a.isub(b); + } while (true); - // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) - point.normalize(); + return b.iushln(shift); + }; - var x2 = point.x.redSqr(); - var y2 = point.y.redSqr(); - var lhs = x2.redMul(this.a).redAdd(y2); - var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; - return lhs.cmp(rhs) === 0; -}; + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; -function Point(curve, x, y, z, t) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && y === null && z === null) { - this.x = this.curve.zero; - this.y = this.curve.one; - this.z = this.curve.one; - this.t = this.curve.zero; - this.zOne = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = z ? new BN(z, 16) : this.curve.one; - this.t = t && new BN(t, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - if (this.t && !this.t.red) - this.t = this.t.toRed(this.curve.red); - this.zOne = this.z === this.curve.one; + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; - // Use extended coordinates - if (this.curve.extended && !this.t) { - this.t = this.x.redMul(this.y); - if (!this.zOne) - this.t = this.t.redMul(this.z.redInvm()); - } - } -} -inherits(Point, Base.BasePoint); + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; -EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; -EdwardsCurve.prototype.point = function point(x, y, z, t) { - return new Point(this, x, y, z, t); -}; + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + for (var i = this.length; i < s + 1; i++) { + this.words[i] = 0; + } + this.words[s] |= q; + this.length = s + 1; + return this; + } -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1], obj[2]); -}; + // Add bit and propagate, if needed + var carry = q; + for (i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.x.cmpn(0) === 0 && - this.y.cmp(this.z) === 0; -}; + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; -Point.prototype._extDbl = function _extDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #doubling-dbl-2008-hwcd - // 4M + 4S + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = 2 * Z1^2 - var c = this.z.redSqr(); - c = c.redIAdd(c); - // D = a * A - var d = this.curve._mulA(a); - // E = (X1 + Y1)^2 - A - B - var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); - // G = D + B - var g = d.redAdd(b); - // F = G - C - var f = g.redSub(c); - // H = D - B - var h = d.redSub(b); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; + this.strip(); -Point.prototype._projDbl = function _projDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #doubling-dbl-2008-bbjlp - // #doubling-dbl-2007-bl - // and others - // Generally 3M + 4S or 2M + 4S + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } - // B = (X1 + Y1)^2 - var b = this.x.redAdd(this.y).redSqr(); - // C = X1^2 - var c = this.x.redSqr(); - // D = Y1^2 - var d = this.y.redSqr(); + assert(num <= 0x3ffffff, 'Number is too big'); - var nx; - var ny; - var nz; - if (this.curve.twisted) { - // E = a * C - var e = this.curve._mulA(c); - // F = E + D - var f = e.redAdd(d); - if (this.zOne) { - // X3 = (B - C - D) * (F - 2) - nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F^2 - 2 * F - nz = f.redSqr().redSub(f).redSub(f); - } else { - // H = Z1^2 - var h = this.z.redSqr(); - // J = F - 2 * H - var j = f.redSub(h).redISub(h); - // X3 = (B-C-D)*J - nx = b.redSub(c).redISub(d).redMul(j); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F * J - nz = f.redMul(j); + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; } - } else { - // E = C + D - var e = c.redAdd(d); - // H = (c * Z1)^2 - var h = this.curve._mulC(this.c.redMul(this.z)).redSqr(); - // J = E - 2 * H - var j = e.redSub(h).redSub(h); - // X3 = c * (B - E) * J - nx = this.curve._mulC(b.redISub(e)).redMul(j); - // Y3 = c * E * (C - D) - ny = this.curve._mulC(e).redMul(c.redISub(d)); - // Z3 = E * J - nz = e.redMul(j); - } - return this.curve.point(nx, ny, nz); -}; - -Point.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; + if (this.negative !== 0) { + res = -res; + } + return res; + }; - // Double in extended coordinates - if (this.curve.extended) - return this._extDbl(); - else - return this._projDbl(); -}; + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; -Point.prototype._extAdd = function _extAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #addition-add-2008-hwcd-3 - // 8M + var res = this.ucmp(num); + if (this.negative !== 0) return -res; - // A = (Y1 - X1) * (Y2 - X2) - var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); - // B = (Y1 + X1) * (Y2 + X2) - var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); - // C = T1 * k * T2 - var c = this.t.redMul(this.curve.dd).redMul(p.t); - // D = Z1 * 2 * Z2 - var d = this.z.redMul(p.z.redAdd(p.z)); - // E = B - A - var e = b.redSub(a); - // F = D - C - var f = d.redSub(c); - // G = D + C - var g = d.redAdd(c); - // H = B + A - var h = b.redAdd(a); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; + return res; + }; -Point.prototype._projAdd = function _projAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #addition-add-2008-bbjlp - // #addition-add-2007-bl - // 10M + 1S + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; - // A = Z1 * Z2 - var a = this.z.redMul(p.z); - // B = A^2 - var b = a.redSqr(); - // C = X1 * X2 - var c = this.x.redMul(p.x); - // D = Y1 * Y2 - var d = this.y.redMul(p.y); - // E = d * C * D - var e = this.curve.d.redMul(c).redMul(d); - // F = B - E - var f = b.redSub(e); - // G = B + E - var g = b.redAdd(e); - // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) - var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); - var nx = a.redMul(f).redMul(tmp); - var ny; - var nz; - if (this.curve.twisted) { - // Y3 = A * G * (D - a * C) - ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); - // Z3 = F * G - nz = f.redMul(g); - } else { - // Y3 = A * G * (D - C) - ny = a.redMul(g).redMul(d.redSub(c)); - // Z3 = c * F * G - nz = this.curve._mulC(f).redMul(g); - } - return this.curve.point(nx, ny, nz); -}; + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; -Point.prototype.add = function add(p) { - if (this.isInfinity()) - return p; - if (p.isInfinity()) - return this; + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; - if (this.curve.extended) - return this._extAdd(p); - else - return this._projAdd(p); -}; + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; -Point.prototype.mul = function mul(k) { - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else - return this.curve._wnafMul(this, k); -}; + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; -Point.prototype.mulAdd = function mulAdd(k1, p, k2) { - return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2); -}; + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; -Point.prototype.normalize = function normalize() { - if (this.zOne) - return this; + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; - // Normalize coordinates - var zi = this.z.redInvm(); - this.x = this.x.redMul(zi); - this.y = this.y.redMul(zi); - if (this.t) - this.t = this.t.redMul(zi); - this.z = this.curve.one; - this.zOne = true; - return this; -}; + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; -Point.prototype.neg = function neg() { - return this.curve.point(this.x.redNeg(), - this.y, - this.z, - this.t && this.t.redNeg()); -}; + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; -Point.prototype.getX = function getX() { - this.normalize(); - return this.x.fromRed(); -}; + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; -Point.prototype.getY = function getY() { - this.normalize(); - return this.y.fromRed(); -}; + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; -Point.prototype.eq = function eq(other) { - return this === other || - this.getX().cmp(other.getX()) === 0 && - this.getY().cmp(other.getY()) === 0; -}; + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; -// Compatibility with BaseCurve -Point.prototype.toP = Point.prototype.normalize; -Point.prototype.mixedAdd = Point.prototype.add; + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; -},{"../../elliptic":138,"../curve":141,"bn.js":136,"inherits":296}],141:[function(require,module,exports){ -arguments[4][59][0].apply(exports,arguments) -},{"./base":139,"./edwards":140,"./mont":142,"./short":143,"dup":59}],142:[function(require,module,exports){ -'use strict'; + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; -var curve = require('../curve'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = curve.base; + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; -function MontCurve(conf) { - Base.call(this, 'mont', conf); + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.i4 = new BN(4).toRed(this.red).redInvm(); - this.two = new BN(2).toRed(this.red); - this.a24 = this.i4.redMul(this.a.redAdd(this.two)); -} -inherits(MontCurve, Base); -module.exports = MontCurve; + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; -MontCurve.prototype.validate = function validate(point) { - var x = point.normalize().x; - var x2 = x.redSqr(); - var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); - var y = rhs.redSqrt(); + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; - return y.redSqr().cmp(rhs) === 0; -}; + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; -function Point(curve, x, z) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && z === null) { - this.x = this.curve.one; - this.z = this.curve.zero; - } else { - this.x = new BN(x, 16); - this.z = new BN(z, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - } -} -inherits(Point, Base.BasePoint); + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; -MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { - return this.point(utils.toArray(bytes, enc), 1); -}; + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; -MontCurve.prototype.point = function point(x, z) { - return new Point(this, x, z); -}; + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.ushl(this, num); + }; -MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; -Point.prototype.precompute = function precompute() { - // No-op -}; + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; -Point.prototype._encode = function _encode() { - return this.getX().toArray('be', this.curve.p.byteLength()); -}; + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1] || curve.one); -}; + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; -Point.prototype.dbl = function dbl() { - // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 - // 2M + 2S + 4A + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; - // A = X1 + Z1 - var a = this.x.redAdd(this.z); - // AA = A^2 - var aa = a.redSqr(); - // B = X1 - Z1 - var b = this.x.redSub(this.z); - // BB = B^2 - var bb = b.redSqr(); - // C = AA - BB - var c = aa.redSub(bb); - // X3 = AA * BB - var nx = aa.redMul(bb); - // Z3 = C * (BB + A24 * C) - var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); - return this.curve.point(nx, nz); -}; + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; -Point.prototype.add = function add() { - throw new Error('Not supported on Montgomery curve'); -}; + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; -Point.prototype.diffAdd = function diffAdd(p, diff) { - // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 - // 4M + 2S + 6A + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); - // A = X2 + Z2 - var a = this.x.redAdd(this.z); - // B = X2 - Z2 - var b = this.x.redSub(this.z); - // C = X3 + Z3 - var c = p.x.redAdd(p.z); - // D = X3 - Z3 - var d = p.x.redSub(p.z); - // DA = D * A - var da = d.redMul(a); - // CB = C * B - var cb = c.redMul(b); - // X5 = Z1 * (DA + CB)^2 - var nx = diff.z.redMul(da.redAdd(cb).redSqr()); - // Z5 = X1 * (DA - CB)^2 - var nz = diff.x.redMul(da.redISub(cb).redSqr()); - return this.curve.point(nx, nz); -}; + this.tmp = this._tmp(); + } -Point.prototype.mul = function mul(k) { - var t = k.clone(); - var a = this; // (N / 2) * Q + Q - var b = this.curve.point(null, null); // (N / 2) * Q - var c = this; // Q + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; - for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) - bits.push(t.andln(1)); + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; - for (var i = bits.length - 1; i >= 0; i--) { - if (bits[i] === 0) { - // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q - a = a.diffAdd(b, c); - // N * Q = 2 * ((N / 2) * Q + Q)) - b = b.dbl(); + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); + + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); } else { - // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) - b = a.diffAdd(b, c); - // N * Q + Q = 2 * ((N / 2) * Q + Q) - a = a.dbl(); + r.strip(); } - } - return b; -}; - -Point.prototype.mulAdd = function mulAdd() { - throw new Error('Not supported on Montgomery curve'); -}; -Point.prototype.eq = function eq(other) { - return this.getX().cmp(other.getX()) === 0; -}; + return r; + }; -Point.prototype.normalize = function normalize() { - this.x = this.x.redMul(this.z.redInvm()); - this.z = this.curve.one; - return this; -}; + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; -Point.prototype.getX = function getX() { - // Normalize coordinates - this.normalize(); + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; - return this.x.fromRed(); -}; + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); -},{"../../elliptic":138,"../curve":141,"bn.js":136,"inherits":296}],143:[function(require,module,exports){ -'use strict'; + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; -var curve = require('../curve'); -var elliptic = require('../../elliptic'); -var BN = require('bn.js'); -var inherits = require('inherits'); -var Base = curve.base; + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; -var assert = elliptic.utils.assert; + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } -function ShortCurve(conf) { - Base.call(this, 'short', conf); + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; - this.a = new BN(conf.a, 16).toRed(this.red); - this.b = new BN(conf.b, 16).toRed(this.red); - this.tinv = this.two.redInvm(); + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; - this.zeroA = this.a.fromRed().cmpn(0) === 0; - this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; - // If the curve is endomorphic, precalculate beta and lambda - this.endo = this._getEndomorphism(conf); - this._endoWnafT1 = new Array(4); - this._endoWnafT2 = new Array(4); -} -inherits(ShortCurve, Base); -module.exports = ShortCurve; + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } -ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { - // No efficient endomorphism - if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) - return; + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; - // Compute beta and lambda, that lambda * P = (beta * Px; Py) - var beta; - var lambda; - if (conf.beta) { - beta = new BN(conf.beta, 16).toRed(this.red); - } else { - var betas = this._getEndoRoots(this.p); - // Choose the smallest beta - beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; - beta = beta.toRed(this.red); + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); } - if (conf.lambda) { - lambda = new BN(conf.lambda, 16); - } else { - // Choose the lambda that is matching selected beta - var lambdas = this._getEndoRoots(this.n); - if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { - lambda = lambdas[0]; - } else { - lambda = lambdas[1]; - assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); - } + inherits(P224, MPrime); + + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); } + inherits(P192, MPrime); - // Get basis vectors, used for balanced length-two representation - var basis; - if (conf.basis) { - basis = conf.basis.map(function(vec) { - return { - a: new BN(vec.a, 16), - b: new BN(vec.b, 16) - }; - }); - } else { - basis = this._getEndoBasis(lambda); + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); } + inherits(P25519, MPrime); - return { - beta: beta, - lambda: lambda, - basis: basis + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; + + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; }; -}; -ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { - // Find roots of for x^2 + x + 1 in F - // Root = (-1 +- Sqrt(-3)) / 2 - // - var red = num === this.p ? this.red : BN.mont(num); - var tinv = new BN(2).toRed(red).redInvm(); - var ntinv = tinv.redNeg(); + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; - var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; - var l1 = ntinv.redAdd(s).fromRed(); - var l2 = ntinv.redSub(s).fromRed(); - return [ l1, l2 ]; -}; + return prime; + }; -ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { - // aprxSqrt >= sqrt(this.n) - var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + this.m = m; + this.prime = null; + } + } - // 3.74 - // Run EGCD, until r(L + 1) < aprxSqrt - var u = lambda; - var v = this.n.clone(); - var x1 = new BN(1); - var y1 = new BN(0); - var x2 = new BN(0); - var y2 = new BN(1); + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; - // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) - var a0; - var b0; - // First vector - var a1; - var b1; - // Second vector - var a2; - var b2; + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; - var prevR; - var i = 0; - var r; - var x; - while (u.cmpn(0) !== 0) { - var q = v.div(u); - r = v.sub(q.mul(u)); - x = x2.sub(q.mul(x1)); - var y = y2.sub(q.mul(y1)); + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; - if (!a1 && r.cmp(aprxSqrt) < 0) { - a0 = prevR.neg(); - b0 = x1; - a1 = r.neg(); - b1 = x; - } else if (a1 && ++i === 2) { - break; + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); } - prevR = r; - v = u; - u = r; - x2 = x1; - x1 = x; - y2 = y1; - y1 = y; - } - a2 = r.neg(); - b2 = x; + return this.m.sub(a)._forceRed(this); + }; - var len1 = a1.sqr().add(b1.sqr()); - var len2 = a2.sqr().add(b2.sqr()); - if (len2.cmp(len1) >= 0) { - a2 = a0; - b2 = b0; - } + Red.prototype.add = function add (a, b) { + this._verify2(a, b); - // Normalize signs - if (a1.negative) { - a1 = a1.neg(); - b1 = b1.neg(); - } - if (a2.negative) { - a2 = a2.neg(); - b2 = b2.neg(); - } + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; - return [ - { a: a1, b: b1 }, - { a: a2, b: b2 } - ]; -}; + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); -ShortCurve.prototype._endoSplit = function _endoSplit(k) { - var basis = this.endo.basis; - var v1 = basis[0]; - var v2 = basis[1]; + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; - var c1 = v2.b.mul(k).divRound(this.n); - var c2 = v1.b.neg().mul(k).divRound(this.n); + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); - var p1 = c1.mul(v1.a); - var p2 = c2.mul(v2.a); - var q1 = c1.mul(v1.b); - var q2 = c2.mul(v2.b); + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; - // Calculate answer - var k1 = k.sub(p1).sub(p2); - var k2 = q1.add(q2).neg(); - return { k1: k1, k2: k2 }; -}; + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); -ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { - x = new BN(x, 16); - if (!x.red) - x = x.toRed(this.red); + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; - var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); - var y = y2.redSqrt(); - if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) - throw new Error('invalid point'); + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; - // XXX Is there any way to tell if the number is odd without converting it - // to non-red form? - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; - return this.point(x, y); -}; + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; -ShortCurve.prototype.validate = function validate(point) { - if (point.inf) - return true; + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; - var x = point.x; - var y = point.y; + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; - var ax = this.a.redMul(x); - var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); - return y.redSqr().redISub(rhs).cmpn(0) === 0; -}; + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); -ShortCurve.prototype._endoWnafMulAdd = - function _endoWnafMulAdd(points, coeffs) { - var npoints = this._endoWnafT1; - var ncoeffs = this._endoWnafT2; - for (var i = 0; i < points.length; i++) { - var split = this._endoSplit(coeffs[i]); - var p = points[i]; - var beta = p._getBeta(); + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); - if (split.k1.negative) { - split.k1.ineg(); - p = p.neg(true); + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); } - if (split.k2.negative) { - split.k2.ineg(); - beta = beta.neg(true); + + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); } + assert(!q.isZero()); - npoints[i * 2] = p; - npoints[i * 2 + 1] = beta; - ncoeffs[i * 2] = split.k1; - ncoeffs[i * 2 + 1] = split.k2; - } - var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2); + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); - // Clean-up references to points and coefficients - for (var j = 0; j < i * 2; j++) { - npoints[j] = null; - ncoeffs[j] = null; - } - return res; -}; + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); -function Point(curve, x, y, isRed) { - Base.BasePoint.call(this, curve, 'affine'); - if (x === null && y === null) { - this.x = null; - this.y = null; - this.inf = true; - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - // Force redgomery representation when loading from JSON - if (isRed) { - this.x.forceRed(this.curve.red); - this.y.forceRed(this.curve.red); + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - this.inf = false; - } -} -inherits(Point, Base.BasePoint); -ShortCurve.prototype.point = function point(x, y, isRed) { - return new Point(this, x, y, isRed); -}; + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); -ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { - return Point.fromJSON(this, obj, red); -}; + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } -Point.prototype._getBeta = function _getBeta() { - if (!this.curve.endo) - return; + return r; + }; - var pre = this.precomputed; - if (pre && pre.beta) - return pre.beta; + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; - var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); - if (pre) { - var curve = this.curve; - var endoMul = function(p) { - return curve.point(p.x.redMul(curve.endo.beta), p.y); - }; - pre.beta = beta; - beta.precomputed = { - beta: null, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(endoMul) - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(endoMul) - } - }; - } - return beta; -}; + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1); + if (num.cmpn(1) === 0) return a.clone(); -Point.prototype.toJSON = function toJSON() { - if (!this.precomputed) - return [ this.x, this.y ]; + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } - return [ this.x, this.y, this.precomputed && { - doubles: this.precomputed.doubles && { - step: this.precomputed.doubles.step, - points: this.precomputed.doubles.points.slice(1) - }, - naf: this.precomputed.naf && { - wnd: this.precomputed.naf.wnd, - points: this.precomputed.naf.points.slice(1) + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; } - } ]; -}; -Point.fromJSON = function fromJSON(curve, obj, red) { - if (typeof obj === 'string') - obj = JSON.parse(obj); - var res = curve.point(obj[0], obj[1], red); - if (!obj[2]) - return res; + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } - function obj2point(obj) { - return curve.point(obj[0], obj[1], red); - } + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } - var pre = obj[2]; - res.precomputed = { - beta: null, - doubles: pre.doubles && { - step: pre.doubles.step, - points: [ res ].concat(pre.doubles.points.map(obj2point)) - }, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: [ res ].concat(pre.naf.points.map(obj2point)) + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; + + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; } + + return res; }; - return res; -}; -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); -Point.prototype.isInfinity = function isInfinity() { - return this.inf; -}; + return r === num ? r.clone() : r; + }; -Point.prototype.add = function add(p) { - // O + P = P - if (this.inf) - return p; + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; - // P + O = P - if (p.inf) - return this; + // + // Montgomery method engine + // - // P + P = 2P - if (this.eq(p)) - return this.dbl(); + BN.mont = function mont (num) { + return new Mont(num); + }; - // P + (-P) = O - if (this.neg().eq(p)) - return this.curve.point(null, null); + function Mont (m) { + Red.call(this, m); - // P + Q = O - if (this.x.cmp(p.x) === 0) - return this.curve.point(null, null); + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } - var c = this.y.redSub(p.y); - if (c.cmpn(0) !== 0) - c = c.redMul(this.x.redSub(p.x).redInvm()); - var nx = c.redSqr().redISub(this.x).redISub(p.x); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); -Point.prototype.dbl = function dbl() { - if (this.inf) - return this; + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); - // 2P = O - var ys1 = this.y.redAdd(this.y); - if (ys1.cmpn(0) === 0) - return this.curve.point(null, null); + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; - var a = this.curve.a; + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; - var x2 = this.x.redSqr(); - var dyinv = ys1.redInvm(); - var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } - var nx = c.redSqr().redISub(this.x.redAdd(this.x)); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; -Point.prototype.getX = function getX() { - return this.x.fromRed(); -}; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } -Point.prototype.getY = function getY() { - return this.y.fromRed(); -}; + return res._forceRed(this); + }; -Point.prototype.mul = function mul(k) { - k = new BN(k, 16); + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else if (this.curve.endo) - return this.curve._endoWnafMulAdd([ this ], [ k ]); - else - return this.curve._wnafMul(this, k); -}; + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } -Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2); -}; + return res._forceRed(this); + }; -Point.prototype.eq = function eq(p) { - return this === p || - this.inf === p.inf && - (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); -}; + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})(typeof module === 'undefined' || module, this); -Point.prototype.neg = function neg(_precompute) { - if (this.inf) - return this; +},{}],121:[function(require,module,exports){ +(function (Buffer){ +const Sha3 = require('js-sha3') - var res = this.curve.point(this.x, this.y.redNeg()); - if (_precompute && this.precomputed) { - var pre = this.precomputed; - var negate = function(p) { - return p.neg(); - }; - res.precomputed = { - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(negate) - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(negate) - } - }; - } - return res; -}; +const hashLengths = [ 224, 256, 384, 512 ] -Point.prototype.toJ = function toJ() { - if (this.inf) - return this.curve.jpoint(null, null, null); +var hash = function (bitcount) { + if (bitcount !== undefined && hashLengths.indexOf(bitcount) == -1) + throw new Error('Unsupported hash length') + this.content = [] + this.bitcount = bitcount ? 'keccak_' + bitcount : 'keccak_512' +} - var res = this.curve.jpoint(this.x, this.y, this.curve.one); - return res; -}; +hash.prototype.update = function (i) { + if (Buffer.isBuffer(i)) + this.content.push(i) + else if (typeof i === 'string') + this.content.push(new Buffer(i)) + else + throw new Error('Unsupported argument to update') + return this +} -function JPoint(curve, x, y, z) { - Base.BasePoint.call(this, curve, 'jacobian'); - if (x === null && y === null && z === null) { - this.x = this.curve.one; - this.y = this.curve.one; - this.z = new BN(0); - } else { - this.x = new BN(x, 16); - this.y = new BN(y, 16); - this.z = new BN(z, 16); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); +hash.prototype.digest = function (encoding) { + var result = Sha3[this.bitcount](Buffer.concat(this.content)) + if (encoding === 'hex') + return result + else if (encoding === 'binary' || encoding === undefined) + return new Buffer(result, 'hex').toString('binary') + else + throw new Error('Unsupported encoding for digest: ' + encoding) +} - this.zOne = this.z === this.curve.one; +module.exports = { + SHA3Hash: hash +} + +}).call(this,require("buffer").Buffer) +},{"buffer":147,"js-sha3":229}],122:[function(require,module,exports){ +(function (Buffer){ +'use strict' +exports['RSA-SHA224'] = exports.sha224WithRSAEncryption = { + sign: 'rsa', + hash: 'sha224', + id: new Buffer('302d300d06096086480165030402040500041c', 'hex') +} +exports['RSA-SHA256'] = exports.sha256WithRSAEncryption = { + sign: 'rsa', + hash: 'sha256', + id: new Buffer('3031300d060960864801650304020105000420', 'hex') +} +exports['RSA-SHA384'] = exports.sha384WithRSAEncryption = { + sign: 'rsa', + hash: 'sha384', + id: new Buffer('3041300d060960864801650304020205000430', 'hex') +} +exports['RSA-SHA512'] = exports.sha512WithRSAEncryption = { + sign: 'rsa', + hash: 'sha512', + id: new Buffer('3051300d060960864801650304020305000440', 'hex') +} +exports['RSA-SHA1'] = { + sign: 'rsa', + hash: 'sha1', + id: new Buffer('3021300906052b0e03021a05000414', 'hex') +} +exports['ecdsa-with-SHA1'] = { + sign: 'ecdsa', + hash: 'sha1', + id: new Buffer('', 'hex') } -inherits(JPoint, Base.BasePoint); - -ShortCurve.prototype.jpoint = function jpoint(x, y, z) { - return new JPoint(this, x, y, z); -}; -JPoint.prototype.toP = function toP() { - if (this.isInfinity()) - return this.curve.point(null, null); +exports.DSA = exports['DSA-SHA1'] = exports['DSA-SHA'] = { + sign: 'dsa', + hash: 'sha1', + id: new Buffer('', 'hex') +} +exports['DSA-SHA224'] = exports['DSA-WITH-SHA224'] = { + sign: 'dsa', + hash: 'sha224', + id: new Buffer('', 'hex') +} +exports['DSA-SHA256'] = exports['DSA-WITH-SHA256'] = { + sign: 'dsa', + hash: 'sha256', + id: new Buffer('', 'hex') +} +exports['DSA-SHA384'] = exports['DSA-WITH-SHA384'] = { + sign: 'dsa', + hash: 'sha384', + id: new Buffer('', 'hex') +} +exports['DSA-SHA512'] = exports['DSA-WITH-SHA512'] = { + sign: 'dsa', + hash: 'sha512', + id: new Buffer('', 'hex') +} +exports['DSA-RIPEMD160'] = { + sign: 'dsa', + hash: 'rmd160', + id: new Buffer('', 'hex') +} +exports['RSA-RIPEMD160'] = exports.ripemd160WithRSA = { + sign: 'rsa', + hash: 'rmd160', + id: new Buffer('3021300906052b2403020105000414', 'hex') +} +exports['RSA-MD5'] = exports.md5WithRSAEncryption = { + sign: 'rsa', + hash: 'md5', + id: new Buffer('3020300c06082a864886f70d020505000410', 'hex') +} - var zinv = this.z.redInvm(); - var zinv2 = zinv.redSqr(); - var ax = this.x.redMul(zinv2); - var ay = this.y.redMul(zinv2).redMul(zinv); +}).call(this,require("buffer").Buffer) +},{"buffer":147}],123:[function(require,module,exports){ +(function (Buffer){ +var _algos = require('./algos') +var createHash = require('create-hash') +var inherits = require('inherits') +var sign = require('./sign') +var stream = require('stream') +var verify = require('./verify') - return this.curve.point(ax, ay); -}; +var algos = {} +Object.keys(_algos).forEach(function (key) { + algos[key] = algos[key.toLowerCase()] = _algos[key] +}) -JPoint.prototype.neg = function neg() { - return this.curve.jpoint(this.x, this.y.redNeg(), this.z); -}; +function Sign (algorithm) { + stream.Writable.call(this) -JPoint.prototype.add = function add(p) { - // O + P = P - if (this.isInfinity()) - return p; + var data = algos[algorithm] + if (!data) { + throw new Error('Unknown message digest') + } - // P + O = P - if (p.isInfinity()) - return this; + this._hashType = data.hash + this._hash = createHash(data.hash) + this._tag = data.id + this._signType = data.sign +} +inherits(Sign, stream.Writable) - // 12M + 4S + 7A - var pz2 = p.z.redSqr(); - var z2 = this.z.redSqr(); - var u1 = this.x.redMul(pz2); - var u2 = p.x.redMul(z2); - var s1 = this.y.redMul(pz2.redMul(p.z)); - var s2 = p.y.redMul(z2.redMul(this.z)); +Sign.prototype._write = function _write (data, _, done) { + this._hash.update(data) + done() +} - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); +Sign.prototype.update = function update (data, enc) { + if (typeof data === 'string') { + data = new Buffer(data, enc) } - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(p.z).redMul(h); - - return this.curve.jpoint(nx, ny, nz); -}; + this._hash.update(data) + return this +} -JPoint.prototype.mixedAdd = function mixedAdd(p) { - // O + P = P - if (this.isInfinity()) - return p.toJ(); +Sign.prototype.sign = function signMethod (key, enc) { + this.end() + var hash = this._hash.digest() + var sig = sign(Buffer.concat([this._tag, hash]), key, this._hashType, this._signType) - // P + O = P - if (p.isInfinity()) - return this; + return enc ? sig.toString(enc) : sig +} - // 8M + 3S + 7A - var z2 = this.z.redSqr(); - var u1 = this.x; - var u2 = p.x.redMul(z2); - var s1 = this.y; - var s2 = p.y.redMul(z2).redMul(this.z); +function Verify (algorithm) { + stream.Writable.call(this) - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); + var data = algos[algorithm] + if (!data) { + throw new Error('Unknown message digest') } - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(h); + this._hash = createHash(data.hash) + this._tag = data.id + this._signType = data.sign +} +inherits(Verify, stream.Writable) - return this.curve.jpoint(nx, ny, nz); -}; +Verify.prototype._write = function _write (data, _, done) { + this._hash.update(data) -JPoint.prototype.dblp = function dblp(pow) { - if (pow === 0) - return this; - if (this.isInfinity()) - return this; - if (!pow) - return this.dbl(); + done() +} - if (this.curve.zeroA || this.curve.threeA) { - var r = this; - for (var i = 0; i < pow; i++) - r = r.dbl(); - return r; +Verify.prototype.update = function update (data, enc) { + if (typeof data === 'string') { + data = new Buffer(data, enc) } - // 1M + 2S + 1A + N * (4S + 5M + 8A) - // N = 1 => 6M + 6S + 9A - var a = this.curve.a; - var tinv = this.curve.tinv; - - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); + this._hash.update(data) + return this +} - // Reuse results - var jyd = jy.redAdd(jy); - for (var i = 0; i < pow; i++) { - var jx2 = jx.redSqr(); - var jyd2 = jyd.redSqr(); - var jyd4 = jyd2.redSqr(); - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); +Verify.prototype.verify = function verifyMethod (key, sig, enc) { + if (typeof sig === 'string') { + sig = new Buffer(sig, enc) + } - var t1 = jx.redMul(jyd2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - var dny = c.redMul(t2); - dny = dny.redIAdd(dny).redISub(jyd4); - var nz = jyd.redMul(jz); - if (i + 1 < pow) - jz4 = jz4.redMul(jyd4); + this.end() + var hash = this._hash.digest() - jx = nx; - jz = nz; - jyd = dny; - } + return verify(sig, Buffer.concat([this._tag, hash]), key, this._signType) +} - return this.curve.jpoint(jx, jyd.redMul(tinv), jz); -}; +function createSign (algorithm) { + return new Sign(algorithm) +} -JPoint.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; +function createVerify (algorithm) { + return new Verify(algorithm) +} - if (this.curve.zeroA) - return this._zeroDbl(); - else if (this.curve.threeA) - return this._threeDbl(); - else - return this._dbl(); -}; +module.exports = { + Sign: createSign, + Verify: createVerify, + createSign: createSign, + createVerify: createVerify +} -JPoint.prototype._zeroDbl = function _zeroDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 14A +}).call(this,require("buffer").Buffer) +},{"./algos":122,"./sign":143,"./verify":144,"buffer":147,"create-hash":170,"inherits":226,"stream":291}],124:[function(require,module,exports){ +'use strict' +exports['1.3.132.0.10'] = 'secp256k1' - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // T = M ^ 2 - 2*S - var t = m.redSqr().redISub(s).redISub(s); +exports['1.3.132.0.33'] = 'p224' - // 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); +exports['1.2.840.10045.3.1.1'] = 'p192' - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2*Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-dbl-2009-l - // 2M + 5S + 13A +exports['1.2.840.10045.3.1.7'] = 'p256' - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = B^2 - var c = b.redSqr(); - // D = 2 * ((X1 + B)^2 - A - C) - var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); - d = d.redIAdd(d); - // E = 3 * A - var e = a.redAdd(a).redIAdd(a); - // F = E^2 - var f = e.redSqr(); +exports['1.3.132.0.34'] = 'p384' - // 8 * C - var c8 = c.redIAdd(c); - c8 = c8.redIAdd(c8); - c8 = c8.redIAdd(c8); +exports['1.3.132.0.35'] = 'p521' - // X3 = F - 2 * D - nx = f.redISub(d).redISub(d); - // Y3 = E * (D - X3) - 8 * C - ny = e.redMul(d.redISub(nx)).redISub(c8); - // Z3 = 2 * Y1 * Z1 - nz = this.y.redMul(this.z); - nz = nz.redIAdd(nz); - } +},{}],125:[function(require,module,exports){ +arguments[4][120][0].apply(exports,arguments) +},{"dup":120}],126:[function(require,module,exports){ +'use strict'; - return this.curve.jpoint(nx, ny, nz); -}; +var elliptic = exports; -JPoint.prototype._threeDbl = function _threeDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 15A +elliptic.version = require('../package.json').version; +elliptic.utils = require('./elliptic/utils'); +elliptic.rand = require('brorand'); +elliptic.hmacDRBG = require('./elliptic/hmac-drbg'); +elliptic.curve = require('./elliptic/curve'); +elliptic.curves = require('./elliptic/curves'); - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a - var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); - // T = M^2 - 2 * S - var t = m.redSqr().redISub(s).redISub(s); - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2 * Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b - // 3M + 5S +// Protocols +elliptic.ec = require('./elliptic/ec'); +elliptic.eddsa = require('./elliptic/eddsa'); - // delta = Z1^2 - var delta = this.z.redSqr(); - // gamma = Y1^2 - var gamma = this.y.redSqr(); - // beta = X1 * gamma - var beta = this.x.redMul(gamma); - // alpha = 3 * (X1 - delta) * (X1 + delta) - var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); - alpha = alpha.redAdd(alpha).redIAdd(alpha); - // X3 = alpha^2 - 8 * beta - var beta4 = beta.redIAdd(beta); - beta4 = beta4.redIAdd(beta4); - var beta8 = beta4.redAdd(beta4); - nx = alpha.redSqr().redISub(beta8); - // Z3 = (Y1 + Z1)^2 - gamma - delta - nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); - // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 - var ggamma8 = gamma.redSqr(); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); - } +},{"../package.json":142,"./elliptic/curve":129,"./elliptic/curves":132,"./elliptic/ec":133,"./elliptic/eddsa":136,"./elliptic/hmac-drbg":139,"./elliptic/utils":141,"brorand":99}],127:[function(require,module,exports){ +'use strict'; - return this.curve.jpoint(nx, ny, nz); -}; +var BN = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var getNAF = utils.getNAF; +var getJSF = utils.getJSF; +var assert = utils.assert; -JPoint.prototype._dbl = function _dbl() { - var a = this.curve.a; +function BaseCurve(type, conf) { + this.type = type; + this.p = new BN(conf.p, 16); - // 4M + 6S + 10A - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); + // Use Montgomery, when there is no fast reduction for the prime + this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); - var jx2 = jx.redSqr(); - var jy2 = jy.redSqr(); + // Useful for many curves + this.zero = new BN(0).toRed(this.red); + this.one = new BN(1).toRed(this.red); + this.two = new BN(2).toRed(this.red); - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + // Curve configuration, optional + this.n = conf.n && new BN(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); - var jxd4 = jx.redAdd(jx); - jxd4 = jxd4.redIAdd(jxd4); - var t1 = jxd4.redMul(jy2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); + // Temporary arrays + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); +} +module.exports = BaseCurve; - var jyd8 = jy2.redSqr(); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - var ny = c.redMul(t2).redISub(jyd8); - var nz = jy.redAdd(jy).redMul(jz); +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; - return this.curve.jpoint(nx, ny, nz); +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); }; -JPoint.prototype.trpl = function trpl() { - if (!this.curve.zeroA) - return this.dbl().add(this); +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + var doubles = p._getDoubles(); - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl - // 5M + 10S + ... + var naf = getNAF(k, 1); + var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // ZZ = Z1^2 - var zz = this.z.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // M = 3 * XX + a * ZZ2; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // MM = M^2 - var mm = m.redSqr(); - // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM - var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - e = e.redIAdd(e); - e = e.redAdd(e).redIAdd(e); - e = e.redISub(mm); - // EE = E^2 - var ee = e.redSqr(); - // T = 16*YYYY - var t = yyyy.redIAdd(yyyy); - t = t.redIAdd(t); - t = t.redIAdd(t); - t = t.redIAdd(t); - // U = (M + E)^2 - MM - EE - T - var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); - // X3 = 4 * (X1 * EE - 4 * YY * U) - var yyu4 = yy.redMul(u); - yyu4 = yyu4.redIAdd(yyu4); - yyu4 = yyu4.redIAdd(yyu4); - var nx = this.x.redMul(ee).redISub(yyu4); - nx = nx.redIAdd(nx); - nx = nx.redIAdd(nx); - // Y3 = 8 * Y1 * (U * (T - U) - E * EE) - var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - // Z3 = (Z1 + E)^2 - ZZ - EE - var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + // Translate into more windowed form + var repr = []; + for (var j = 0; j < naf.length; j += doubles.step) { + var nafW = 0; + for (var k = j + doubles.step - 1; k >= j; k--) + nafW = (nafW << 1) + naf[k]; + repr.push(nafW); + } - return this.curve.jpoint(nx, ny, nz); + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + for (var i = I; i > 0; i--) { + for (var j = 0; j < repr.length; j++) { + var nafW = repr[j]; + if (nafW === i) + b = b.mixedAdd(doubles.points[j]); + else if (nafW === -i) + b = b.mixedAdd(doubles.points[j].neg()); + } + a = a.add(b); + } + return a.toP(); }; -JPoint.prototype.mul = function mul(k, kbase) { - k = new BN(k, kbase); - - return this.curve._wnafMul(this, k); -}; +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; -JPoint.prototype.eq = function eq(p) { - if (p.type === 'affine') - return this.eq(p.toJ()); + // Precompute window + var nafPoints = p._getNAFPoints(w); + w = nafPoints.wnd; + var wnd = nafPoints.points; - if (this === p) - return true; + // Get NAF form + var naf = getNAF(k, w); - // x1 * z2^2 == x2 * z1^2 - var z2 = this.z.redSqr(); - var pz2 = p.z.redSqr(); - if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) - return false; + // Add `this`*(N+1) for every w-NAF index + var acc = this.jpoint(null, null, null); + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var k = 0; i >= 0 && naf[i] === 0; i--) + k++; + if (i >= 0) + k++; + acc = acc.dblp(k); - // y1 * z2^3 == y2 * z1^3 - var z3 = z2.redMul(this.z); - var pz3 = pz2.redMul(p.z); - return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; + if (i < 0) + break; + var z = naf[i]; + assert(z !== 0); + if (p.type === 'affine') { + // J +- P + if (z > 0) + acc = acc.mixedAdd(wnd[(z - 1) >> 1]); + else + acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); + } else { + // J +- J + if (z > 0) + acc = acc.add(wnd[(z - 1) >> 1]); + else + acc = acc.add(wnd[(-z - 1) >> 1].neg()); + } + } + return p.type === 'affine' ? acc.toP() : acc; }; -JPoint.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, + points, + coeffs, + len) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; -JPoint.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; + // Fill all arrays + var max = 0; + for (var i = 0; i < len; i++) { + var p = points[i]; + var nafPoints = p._getNAFPoints(defW); + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; + } -},{"../../elliptic":138,"../curve":141,"bn.js":136,"inherits":296}],144:[function(require,module,exports){ -'use strict'; + // Comb small window NAFs + for (var i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a]); + naf[b] = getNAF(coeffs[b], wndWidth[b]); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } -var curves = exports; + var comb = [ + points[a], /* 1 */ + null, /* 3 */ + null, /* 5 */ + points[b] /* 7 */ + ]; -var hash = require('hash.js'); -var elliptic = require('../elliptic'); + // Try to avoid Projective points, if possible + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } -var assert = elliptic.utils.assert; + var index = [ + -3, /* -1 -1 */ + -1, /* -1 0 */ + -5, /* -1 1 */ + -7, /* 0 -1 */ + 0, /* 0 0 */ + 7, /* 0 1 */ + 5, /* 1 -1 */ + 1, /* 1 0 */ + 3 /* 1 1 */ + ]; -function PresetCurve(options) { - if (options.type === 'short') - this.curve = new elliptic.curve.short(options); - else if (options.type === 'edwards') - this.curve = new elliptic.curve.edwards(options); - else - this.curve = new elliptic.curve.mont(options); - this.g = this.curve.g; - this.n = this.curve.n; - this.hash = options.hash; + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + for (var j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; - assert(this.g.validate(), 'Invalid curve'); - assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); -} -curves.PresetCurve = PresetCurve; + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; + } + } -function defineCurve(name, options) { - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - get: function() { - var curve = new PresetCurve(options); - Object.defineProperty(curves, name, { - configurable: true, - enumerable: true, - value: curve - }); - return curve; + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + for (var i = max; i >= 0; i--) { + var k = 0; + + while (i >= 0) { + var zero = true; + for (var j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) + zero = false; + } + if (!zero) + break; + k++; + i--; } - }); -} + if (i >= 0) + k++; + acc = acc.dblp(k); + if (i < 0) + break; -defineCurve('p192', { - type: 'short', - prime: 'p192', - p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', - b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', - n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', - hash: hash.sha256, - gRed: false, - g: [ - '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', - '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811' - ] -}); + for (var j = 0; j < len; j++) { + var z = tmp[j]; + var p; + if (z === 0) + continue; + else if (z > 0) + p = wnd[j][(z - 1) >> 1]; + else if (z < 0) + p = wnd[j][(-z - 1) >> 1].neg(); -defineCurve('p224', { - type: 'short', - prime: 'p224', - p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', - a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', - b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', - n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', - hash: hash.sha256, - gRed: false, - g: [ - 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', - 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34' - ] -}); + if (p.type === 'affine') + acc = acc.mixedAdd(p); + else + acc = acc.add(p); + } + } + // Zeroify references + for (var i = 0; i < len; i++) + wnd[i] = null; + return acc.toP(); +}; -defineCurve('p256', { - type: 'short', - prime: null, - p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', - a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', - b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', - n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', - hash: hash.sha256, - gRed: false, - g: [ - '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', - '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5' - ] -}); +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} +BaseCurve.BasePoint = BasePoint; -defineCurve('p384', { - type: 'short', - prime: null, - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 ffffffff', - a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'fffffffe ffffffff 00000000 00000000 fffffffc', - b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + - '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', - n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + - 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', - hash: hash.sha384, - gRed: false, - g: [ - 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + - '5502f25d bf55296c 3a545e38 72760ab7', - '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + - '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' - ] -}); +BasePoint.prototype.eq = function eq(/*other*/) { + throw new Error('Not implemented'); +}; -defineCurve('p521', { - type: 'short', - prime: null, - p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff', - a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff ffffffff ffffffff fffffffc', - b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + - '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + - '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', - n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + - 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + - 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', - hash: hash.sha512, - gRed: false, - g: [ - '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + - '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + - 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', - '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + - '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + - '3fad0761 353c7086 a272c240 88be9476 9fd16650' - ] -}); +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; -defineCurve('curve25519', { - type: 'mont', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '76d06', - b: '0', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '9' - ] -}); +BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + bytes = utils.toArray(bytes, enc); -defineCurve('ed25519', { - type: 'edwards', - prime: 'p25519', - p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', - a: '-1', - c: '1', - // -121665 * (121666^(-1)) (mod P) - d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', - n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', - hash: hash.sha256, - gRed: false, - g: [ - '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', + var len = this.p.byteLength(); + if (bytes[0] === 0x04 && bytes.length - 1 === 2 * len) { + return this.point(bytes.slice(1, 1 + len), + bytes.slice(1 + len, 1 + 2 * len)); + } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && + bytes.length - 1 === len) { + return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); + } + throw new Error('Unknown point format'); +}; - // 4/5 - '6666666666666666666666666666666666666666666666666666666666666658' - ] -}); +BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { + return this.encode(enc, true); +}; -var pre; -try { - pre = require('./precomputed/secp256k1'); -} catch (e) { - pre = undefined; -} +BasePoint.prototype._encode = function _encode(compact) { + var len = this.curve.p.byteLength(); + var x = this.getX().toArray('be', len); -defineCurve('secp256k1', { - type: 'short', - prime: 'k256', - p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', - a: '0', - b: '7', - n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', - h: '1', - hash: hash.sha256, + if (compact) + return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); - // Precomputed endomorphism - beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', - lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', - basis: [ - { - a: '3086d221a7d46bcde86c90e49284eb15', - b: '-e4437ed6010e88286f547fa90abfe4c3' - }, - { - a: '114ca50f7a8e2f3f657c1108d9d44cfd8', - b: '3086d221a7d46bcde86c90e49284eb15' - } - ], + return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; +}; - gRed: false, - g: [ - '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', - '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', - pre - ] -}); +BasePoint.prototype.encode = function encode(enc, compact) { + return utils.encode(this._encode(compact), enc); +}; -},{"../elliptic":138,"./precomputed/secp256k1":152,"hash.js":155}],145:[function(require,module,exports){ -'use strict'; +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) + return this; -var BN = require('bn.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; + var precomputed = { + doubles: null, + naf: null, + beta: null + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; -var KeyPair = require('./key'); -var Signature = require('./signature'); + return this; +}; -function EC(options) { - if (!(this instanceof EC)) - return new EC(options); +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) + return false; - // Shortcut `elliptic.ec(curve-name)` - if (typeof options === 'string') { - assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options); + var doubles = this.precomputed.doubles; + if (!doubles) + return false; - options = elliptic.curves[options]; - } + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; - // Shortcut for `elliptic.ec(elliptic.curves.curveName)` - if (options instanceof elliptic.curves.PresetCurve) - options = { curve: options }; +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) + return this.precomputed.doubles; - this.curve = options.curve.curve; - this.n = this.curve.n; - this.nh = this.n.ushrn(1); - this.g = this.curve.g; + var doubles = [ this ]; + var acc = this; + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) + acc = acc.dbl(); + doubles.push(acc); + } + return { + step: step, + points: doubles + }; +}; - // Point on curve - this.g = options.curve.g; - this.g.precompute(options.curve.n.bitLength() + 1); +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) + return this.precomputed.naf; - // Hash for function for DRBG - this.hash = options.hash || options.curve.hash; -} -module.exports = EC; + var res = [ this ]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + for (var i = 1; i < max; i++) + res[i] = res[i - 1].add(dbl); + return { + wnd: wnd, + points: res + }; +}; -EC.prototype.keyPair = function keyPair(options) { - return new KeyPair(this, options); +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; + +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + for (var i = 0; i < k; i++) + r = r.dbl(); + return r; }; -EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { - return KeyPair.fromPrivate(this, priv, enc); -}; +},{"../../elliptic":126,"bn.js":125}],128:[function(require,module,exports){ +'use strict'; + +var curve = require('../curve'); +var elliptic = require('../../elliptic'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; + +var assert = elliptic.utils.assert; -EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { - return KeyPair.fromPublic(this, pub, enc); -}; +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; -EC.prototype.genKeyPair = function genKeyPair(options) { - if (!options) - options = {}; + Base.call(this, 'edwards', conf); - // Instantiate Hmac_DRBG - var drbg = new elliptic.hmacDRBG({ - hash: this.hash, - pers: options.pers, - entropy: options.entropy || elliptic.rand(this.hash.hmacStrength), - nonce: this.n.toArray() - }); + this.a = new BN(conf.a, 16).umod(this.red.m); + this.a = this.a.toRed(this.red); + this.c = new BN(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new BN(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); - var bytes = this.n.byteLength(); - var ns2 = this.n.sub(new BN(2)); - do { - var priv = new BN(drbg.generate(bytes)); - if (priv.cmp(ns2) > 0) - continue; + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; - priv.iaddn(1); - return this.keyFromPrivate(priv); - } while (true); +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) + return num.redNeg(); + else + return this.a.redMul(num); }; -EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { - var delta = msg.byteLength() * 8 - this.n.bitLength(); - if (delta > 0) - msg = msg.ushrn(delta); - if (!truncOnly && msg.cmp(this.n) >= 0) - return msg.sub(this.n); +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) + return num; else - return msg; + return this.c.redMul(num); }; -EC.prototype.sign = function sign(msg, key, enc, options) { - if (typeof enc === 'object') { - options = enc; - enc = null; - } - if (!options) - options = {}; - - key = this.keyFromPrivate(key, enc); - msg = this._truncateToN(new BN(msg, 16)); +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; - // Zero-extend key to provide enough entropy - var bytes = this.n.byteLength(); - var bkey = key.getPrivate().toArray('be', bytes); +EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); - // Zero-extend nonce to have the same byte size as N - var nonce = msg.toArray('be', bytes); + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); - // Instantiate Hmac_DRBG - var drbg = new elliptic.hmacDRBG({ - hash: this.hash, - entropy: bkey, - nonce: nonce, - pers: options.pers, - persEnc: options.persEnc - }); + var y2 = rhs.redMul(lhs.redInvm()); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); - // Number of bytes to generate - var ns1 = this.n.sub(new BN(1)); + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); - for (var iter = 0; true; iter++) { - var k = options.k ? - options.k(iter) : - new BN(drbg.generate(this.n.byteLength())); - k = this._truncateToN(k, true); - if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) - continue; + return this.point(x, y); +}; - var kp = this.g.mul(k); - if (kp.isInfinity()) - continue; +EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { + y = new BN(y, 16); + if (!y.red) + y = y.toRed(this.red); - var kpX = kp.getX(); - var r = kpX.umod(this.n); - if (r.cmpn(0) === 0) - continue; + // x^2 = (y^2 - 1) / (d y^2 + 1) + var y2 = y.redSqr(); + var lhs = y2.redSub(this.one); + var rhs = y2.redMul(this.d).redAdd(this.one); + var x2 = lhs.redMul(rhs.redInvm()); - var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); - s = s.umod(this.n); - if (s.cmpn(0) === 0) - continue; + if (x2.cmp(this.zero) === 0) { + if (odd) + throw new Error('invalid point'); + else + return this.point(this.zero, y); + } - var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | - (kpX.cmp(r) !== 0 ? 2 : 0); + var x = x2.redSqrt(); + if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) + throw new Error('invalid point'); - // Use complement of `s`, if it is > `n / 2` - if (options.canonical && s.cmp(this.nh) > 0) { - s = this.n.sub(s); - recoveryParam ^= 1; - } + if (x.isOdd() !== odd) + x = x.redNeg(); - return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); - } + return this.point(x, y); }; -EC.prototype.verify = function verify(msg, signature, key, enc) { - msg = this._truncateToN(new BN(msg, 16)); - key = this.keyFromPublic(key, enc); - signature = new Signature(signature, 'hex'); - - // Perform primitive values validation - var r = signature.r; - var s = signature.s; - if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) - return false; - if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) - return false; +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) + return true; - // Validate signature - var sinv = s.invm(this.n); - var u1 = sinv.mul(msg).umod(this.n); - var u2 = sinv.mul(r).umod(this.n); + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); - var p = this.g.mulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); - return p.getX().umod(this.n).cmp(r) === 0; + return lhs.cmp(rhs) === 0; }; -EC.prototype.recoverPubKey = function(msg, signature, j, enc) { - assert((3 & j) === j, 'The recovery param is more than two bits'); - signature = new Signature(signature, enc); - - var n = this.n; - var e = new BN(msg); - var r = signature.r; - var s = signature.s; - - // A set LSB signifies that the y-coordinate is odd - var isYOdd = j & 1; - var isSecondKey = j >> 1; - if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) - throw new Error('Unable to find sencond key candinate'); - - // 1.1. Let x = r + jn. - if (isSecondKey) - r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); - else - r = this.curve.pointFromX(r, isYOdd); +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = z ? new BN(z, 16) : this.curve.one; + this.t = t && new BN(t, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) + this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; - var eNeg = n.sub(e); + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) + this.t = this.t.redMul(this.z.redInvm()); + } + } +} +inherits(Point, Base.BasePoint); - // 1.6.1 Compute Q = r^-1 (sR - eG) - // Q = r^-1 (sR + -eG) - var rInv = signature.r.invm(n); - return this.g.mulAdd(eNeg, r, s).mul(rInv); +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); }; -EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { - signature = new Signature(signature, enc); - if (signature.recoveryParam !== null) - return signature.recoveryParam; +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; - for (var i = 0; i < 4; i++) { - var Qprime; - try { - Qprime = this.recoverPubKey(e, signature, i); - } catch (e) { - continue; - } +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; - if (Qprime.eq(Q)) - return i; - } - throw new Error('Unable to find valid recovery factor'); +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; }; -},{"../../elliptic":138,"./key":146,"./signature":147,"bn.js":136}],146:[function(require,module,exports){ -'use strict'; +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && + this.y.cmp(this.z) === 0; +}; -var BN = require('bn.js'); +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S -function KeyPair(ec, options) { - this.ec = ec; - this.priv = null; - this.pub = null; + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; - // KeyPair(ec, { priv: ..., pub: ... }) - if (options.priv) - this._importPrivate(options.priv, options.privEnc); - if (options.pub) - this._importPublic(options.pub, options.pubEnc); -} -module.exports = KeyPair; +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S -KeyPair.fromPublic = function fromPublic(ec, pub, enc) { - if (pub instanceof KeyPair) - return pub; + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); - return new KeyPair(ec, { - pub: pub, - pubEnc: enc - }); + var nx; + var ny; + var nz; + if (this.curve.twisted) { + // E = a * C + var e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + var h = this.z.redSqr(); + // J = F - 2 * H + var j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + var e = c.redAdd(d); + // H = (c * Z1)^2 + var h = this.curve._mulC(this.c.redMul(this.z)).redSqr(); + // J = E - 2 * H + var j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); }; -KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { - if (priv instanceof KeyPair) - return priv; +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; - return new KeyPair(ec, { - priv: priv, - privEnc: enc - }); + // Double in extended coordinates + if (this.curve.extended) + return this._extDbl(); + else + return this._projDbl(); }; -KeyPair.prototype.validate = function validate() { - var pub = this.getPublic(); - - if (pub.isInfinity()) - return { result: false, reason: 'Invalid public key' }; - if (!pub.validate()) - return { result: false, reason: 'Public key is not a point' }; - if (!pub.mul(this.ec.curve.n).isInfinity()) - return { result: false, reason: 'Public key * N != O' }; +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M - return { result: true, reason: null }; + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); }; -KeyPair.prototype.getPublic = function getPublic(compact, enc) { - // compact is optional argument - if (typeof compact === 'string') { - enc = compact; - compact = null; - } +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S - if (!this.pub) - this.pub = this.ec.g.mul(this.priv); + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); + } + return this.curve.point(nx, ny, nz); +}; - if (!enc) - return this.pub; +Point.prototype.add = function add(p) { + if (this.isInfinity()) + return p; + if (p.isInfinity()) + return this; - return this.pub.encode(enc, compact); + if (this.curve.extended) + return this._extAdd(p); + else + return this._projAdd(p); }; -KeyPair.prototype.getPrivate = function getPrivate(enc) { - if (enc === 'hex') - return this.priv.toString(16, 2); +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); else - return this.priv; + return this.curve._wnafMul(this, k); }; -KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { - this.priv = new BN(key, enc || 16); +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2); +}; - // Ensure that the priv won't be bigger than n, otherwise we may fail - // in fixed multiplication method - this.priv = this.priv.umod(this.ec.curve.n); +Point.prototype.normalize = function normalize() { + if (this.zOne) + return this; + + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) + this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; }; -KeyPair.prototype._importPublic = function _importPublic(key, enc) { - if (key.x || key.y) { - this.pub = this.ec.curve.point(key.x, key.y); - return; - } - this.pub = this.ec.curve.decodePoint(key, enc); +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), + this.y, + this.z, + this.t && this.t.redNeg()); }; -// ECDH -KeyPair.prototype.derive = function derive(pub) { - return pub.mul(this.priv).getX(); +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); }; -// ECDSA -KeyPair.prototype.sign = function sign(msg, enc, options) { - return this.ec.sign(msg, this, enc, options); +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); }; -KeyPair.prototype.verify = function verify(msg, signature) { - return this.ec.verify(msg, signature, this); +Point.prototype.eq = function eq(other) { + return this === other || + this.getX().cmp(other.getX()) === 0 && + this.getY().cmp(other.getY()) === 0; }; -KeyPair.prototype.inspect = function inspect() { - return ''; -}; +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; -},{"bn.js":136}],147:[function(require,module,exports){ +},{"../../elliptic":126,"../curve":129,"bn.js":125,"inherits":226}],129:[function(require,module,exports){ +arguments[4][61][0].apply(exports,arguments) +},{"./base":127,"./edwards":128,"./mont":130,"./short":131,"dup":61}],130:[function(require,module,exports){ 'use strict'; +var curve = require('../curve'); var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; var elliptic = require('../../elliptic'); var utils = elliptic.utils; -var assert = utils.assert; - -function Signature(options, enc) { - if (options instanceof Signature) - return options; - - if (this._importDER(options, enc)) - return; - - assert(options.r && options.s, 'Signature without r or s'); - this.r = new BN(options.r, 16); - this.s = new BN(options.s, 16); - if (options.recoveryParam === undefined) - this.recoveryParam = null; - else - this.recoveryParam = options.recoveryParam; -} -module.exports = Signature; - -function Position() { - this.place = 0; -} -function getLength(buf, p) { - var initial = buf[p.place++]; - if (!(initial & 0x80)) { - return initial; - } - var octetLen = initial & 0xf; - var val = 0; - for (var i = 0, off = p.place; i < octetLen; i++, off++) { - val <<= 8; - val |= buf[off]; - } - p.place = off; - return val; -} +function MontCurve(conf) { + Base.call(this, 'mont', conf); -function rmPadding(buf) { - var i = 0; - var len = buf.length - 1; - while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { - i++; - } - if (i === 0) { - return buf; - } - return buf.slice(i); + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.i4 = new BN(4).toRed(this.red).redInvm(); + this.two = new BN(2).toRed(this.red); + this.a24 = this.i4.redMul(this.a.redAdd(this.two)); } +inherits(MontCurve, Base); +module.exports = MontCurve; -Signature.prototype._importDER = function _importDER(data, enc) { - data = utils.toArray(data, enc); - var p = new Position(); - if (data[p.place++] !== 0x30) { - return false; - } - var len = getLength(data, p); - if ((len + p.place) !== data.length) { - return false; - } - if (data[p.place++] !== 0x02) { - return false; - } - var rlen = getLength(data, p); - var r = data.slice(p.place, rlen + p.place); - p.place += rlen; - if (data[p.place++] !== 0x02) { - return false; - } - var slen = getLength(data, p); - if (data.length !== slen + p.place) { - return false; - } - var s = data.slice(p.place, slen + p.place); - if (r[0] === 0 && (r[1] & 0x80)) { - r = r.slice(1); - } - if (s[0] === 0 && (s[1] & 0x80)) { - s = s.slice(1); - } - - this.r = new BN(r); - this.s = new BN(s); - this.recoveryParam = null; +MontCurve.prototype.validate = function validate(point) { + var x = point.normalize().x; + var x2 = x.redSqr(); + var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); + var y = rhs.redSqrt(); - return true; + return y.redSqr().cmp(rhs) === 0; }; -function constructLength(arr, len) { - if (len < 0x80) { - arr.push(len); - return; - } - var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); - arr.push(octets | 0x80); - while (--octets) { - arr.push((len >>> (octets << 3)) & 0xff); +function Point(curve, x, z) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && z === null) { + this.x = this.curve.one; + this.z = this.curve.zero; + } else { + this.x = new BN(x, 16); + this.z = new BN(z, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); } - arr.push(len); } +inherits(Point, Base.BasePoint); -Signature.prototype.toDER = function toDER(enc) { - var r = this.r.toArray(); - var s = this.s.toArray(); - - // Pad values - if (r[0] & 0x80) - r = [ 0 ].concat(r); - // Pad values - if (s[0] & 0x80) - s = [ 0 ].concat(s); - - r = rmPadding(r); - s = rmPadding(s); - - while (!s[0] && !(s[1] & 0x80)) { - s = s.slice(1); - } - var arr = [ 0x02 ]; - constructLength(arr, r.length); - arr = arr.concat(r); - arr.push(0x02); - constructLength(arr, s.length); - var backHalf = arr.concat(s); - var res = [ 0x30 ]; - constructLength(res, backHalf.length); - res = res.concat(backHalf); - return utils.encode(res, enc); +MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { + return this.point(utils.toArray(bytes, enc), 1); }; -},{"../../elliptic":138,"bn.js":136}],148:[function(require,module,exports){ -'use strict'; - -var hash = require('hash.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; -var parseBytes = utils.parseBytes; -var KeyPair = require('./key'); -var Signature = require('./signature'); - -function EDDSA(curve) { - assert(curve === 'ed25519', 'only tested with ed25519 so far'); - - if (!(this instanceof EDDSA)) - return new EDDSA(curve); - - var curve = elliptic.curves[curve].curve; - this.curve = curve; - this.g = curve.g; - this.g.precompute(curve.n.bitLength() + 1); +MontCurve.prototype.point = function point(x, z) { + return new Point(this, x, z); +}; - this.pointClass = curve.point().constructor; - this.encodingLength = Math.ceil(curve.n.bitLength() / 8); - this.hash = hash.sha512; -} +MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; -module.exports = EDDSA; +Point.prototype.precompute = function precompute() { + // No-op +}; -/** -* @param {Array|String} message - message bytes -* @param {Array|String|KeyPair} secret - secret bytes or a keypair -* @returns {Signature} - signature -*/ -EDDSA.prototype.sign = function sign(message, secret) { - message = parseBytes(message); - var key = this.keyFromSecret(secret); - var r = this.hashInt(key.messagePrefix(), message); - var R = this.g.mul(r); - var Rencoded = this.encodePoint(R); - var s_ = this.hashInt(Rencoded, key.pubBytes(), message) - .mul(key.priv()); - var S = r.add(s_).umod(this.curve.n); - return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); +Point.prototype._encode = function _encode() { + return this.getX().toArray('be', this.curve.p.byteLength()); }; -/** -* @param {Array} message - message bytes -* @param {Array|String|Signature} sig - sig bytes -* @param {Array|String|Point|KeyPair} pub - public key -* @returns {Boolean} - true if public key matches sig of message -*/ -EDDSA.prototype.verify = function verify(message, sig, pub) { - message = parseBytes(message); - sig = this.makeSignature(sig); - var key = this.keyFromPublic(pub); - var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); - var SG = this.g.mul(sig.S()); - var RplusAh = sig.R().add(key.pub().mul(h)); - return RplusAh.eq(SG); +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1] || curve.one); }; -EDDSA.prototype.hashInt = function hashInt() { - var hash = this.hash(); - for (var i = 0; i < arguments.length; i++) - hash.update(arguments[i]); - return utils.intFromLE(hash.digest()).umod(this.curve.n); +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; }; -EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { - return KeyPair.fromPublic(this, pub); +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; }; -EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { - return KeyPair.fromSecret(this, secret); +Point.prototype.dbl = function dbl() { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 + // 2M + 2S + 4A + + // A = X1 + Z1 + var a = this.x.redAdd(this.z); + // AA = A^2 + var aa = a.redSqr(); + // B = X1 - Z1 + var b = this.x.redSub(this.z); + // BB = B^2 + var bb = b.redSqr(); + // C = AA - BB + var c = aa.redSub(bb); + // X3 = AA * BB + var nx = aa.redMul(bb); + // Z3 = C * (BB + A24 * C) + var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); + return this.curve.point(nx, nz); }; -EDDSA.prototype.makeSignature = function makeSignature(sig) { - if (sig instanceof Signature) - return sig; - return new Signature(this, sig); +Point.prototype.add = function add() { + throw new Error('Not supported on Montgomery curve'); }; -/** -* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 -* -* EDDSA defines methods for encoding and decoding points and integers. These are -* helper convenience methods, that pass along to utility functions implied -* parameters. -* -*/ -EDDSA.prototype.encodePoint = function encodePoint(point) { - var enc = point.getY().toArray('le', this.encodingLength); - enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; - return enc; +Point.prototype.diffAdd = function diffAdd(p, diff) { + // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 + // 4M + 2S + 6A + + // A = X2 + Z2 + var a = this.x.redAdd(this.z); + // B = X2 - Z2 + var b = this.x.redSub(this.z); + // C = X3 + Z3 + var c = p.x.redAdd(p.z); + // D = X3 - Z3 + var d = p.x.redSub(p.z); + // DA = D * A + var da = d.redMul(a); + // CB = C * B + var cb = c.redMul(b); + // X5 = Z1 * (DA + CB)^2 + var nx = diff.z.redMul(da.redAdd(cb).redSqr()); + // Z5 = X1 * (DA - CB)^2 + var nz = diff.x.redMul(da.redISub(cb).redSqr()); + return this.curve.point(nx, nz); }; -EDDSA.prototype.decodePoint = function decodePoint(bytes) { - bytes = utils.parseBytes(bytes); +Point.prototype.mul = function mul(k) { + var t = k.clone(); + var a = this; // (N / 2) * Q + Q + var b = this.curve.point(null, null); // (N / 2) * Q + var c = this; // Q - var lastIx = bytes.length - 1; - var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); - var xIsOdd = (bytes[lastIx] & 0x80) !== 0; + for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) + bits.push(t.andln(1)); - var y = utils.intFromLE(normed); - return this.curve.pointFromY(y, xIsOdd); + for (var i = bits.length - 1; i >= 0; i--) { + if (bits[i] === 0) { + // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q + a = a.diffAdd(b, c); + // N * Q = 2 * ((N / 2) * Q + Q)) + b = b.dbl(); + } else { + // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) + b = a.diffAdd(b, c); + // N * Q + Q = 2 * ((N / 2) * Q + Q) + a = a.dbl(); + } + } + return b; }; -EDDSA.prototype.encodeInt = function encodeInt(num) { - return num.toArray('le', this.encodingLength); +Point.prototype.mulAdd = function mulAdd() { + throw new Error('Not supported on Montgomery curve'); }; -EDDSA.prototype.decodeInt = function decodeInt(bytes) { - return utils.intFromLE(bytes); +Point.prototype.eq = function eq(other) { + return this.getX().cmp(other.getX()) === 0; }; -EDDSA.prototype.isPoint = function isPoint(val) { - return val instanceof this.pointClass; +Point.prototype.normalize = function normalize() { + this.x = this.x.redMul(this.z.redInvm()); + this.z = this.curve.one; + return this; }; -},{"../../elliptic":138,"./key":149,"./signature":150,"hash.js":155}],149:[function(require,module,exports){ -'use strict'; - -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; -var parseBytes = utils.parseBytes; -var cachedProperty = utils.cachedProperty; - -/** -* @param {EDDSA} eddsa - instance -* @param {Object} params - public/private key parameters -* -* @param {Array} [params.secret] - secret seed bytes -* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) -* @param {Array} [params.pub] - public key point encoded as bytes -* -*/ -function KeyPair(eddsa, params) { - this.eddsa = eddsa; - this._secret = parseBytes(params.secret); - if (eddsa.isPoint(params.pub)) - this._pub = params.pub; - else - this._pubBytes = parseBytes(params.pub); -} +Point.prototype.getX = function getX() { + // Normalize coordinates + this.normalize(); -KeyPair.fromPublic = function fromPublic(eddsa, pub) { - if (pub instanceof KeyPair) - return pub; - return new KeyPair(eddsa, { pub: pub }); + return this.x.fromRed(); }; -KeyPair.fromSecret = function fromSecret(eddsa, secret) { - if (secret instanceof KeyPair) - return secret; - return new KeyPair(eddsa, { secret: secret }); -}; +},{"../../elliptic":126,"../curve":129,"bn.js":125,"inherits":226}],131:[function(require,module,exports){ +'use strict'; -KeyPair.prototype.secret = function secret() { - return this._secret; -}; +var curve = require('../curve'); +var elliptic = require('../../elliptic'); +var BN = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; -cachedProperty(KeyPair, function pubBytes() { - return this.eddsa.encodePoint(this.pub()); -}); +var assert = elliptic.utils.assert; -cachedProperty(KeyPair, function pub() { - if (this._pubBytes) - return this.eddsa.decodePoint(this._pubBytes); - return this.eddsa.g.mul(this.priv()); -}); +function ShortCurve(conf) { + Base.call(this, 'short', conf); -cachedProperty(KeyPair, function privBytes() { - var eddsa = this.eddsa; - var hash = this.hash(); - var lastIx = eddsa.encodingLength - 1; + this.a = new BN(conf.a, 16).toRed(this.red); + this.b = new BN(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); - var a = hash.slice(0, eddsa.encodingLength); - a[0] &= 248; - a[lastIx] &= 127; - a[lastIx] |= 64; + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; - return a; -}); + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; -cachedProperty(KeyPair, function priv() { - return this.eddsa.decodeInt(this.privBytes()); -}); +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) + return; -cachedProperty(KeyPair, function hash() { - return this.eddsa.hash().update(this.secret()).digest(); -}); + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new BN(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); + } + if (conf.lambda) { + lambda = new BN(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); + } + } -cachedProperty(KeyPair, function messagePrefix() { - return this.hash().slice(this.eddsa.encodingLength); -}); + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function(vec) { + return { + a: new BN(vec.a, 16), + b: new BN(vec.b, 16) + }; + }); + } else { + basis = this._getEndoBasis(lambda); + } -KeyPair.prototype.sign = function sign(message) { - assert(this._secret, 'KeyPair can only verify'); - return this.eddsa.sign(message, this); + return { + beta: beta, + lambda: lambda, + basis: basis + }; }; -KeyPair.prototype.verify = function verify(message, sig) { - return this.eddsa.verify(message, sig, this); -}; +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : BN.mont(num); + var tinv = new BN(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); -KeyPair.prototype.getSecret = function getSecret(enc) { - assert(this._secret, 'KeyPair is public only'); - return utils.encode(this.secret(), enc); -}; + var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); -KeyPair.prototype.getPublic = function getPublic(enc) { - return utils.encode(this.pubBytes(), enc); + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [ l1, l2 ]; }; -module.exports = KeyPair; +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); -},{"../../elliptic":138}],150:[function(require,module,exports){ -'use strict'; + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new BN(1); + var y1 = new BN(0); + var x2 = new BN(0); + var y2 = new BN(1); -var BN = require('bn.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; -var cachedProperty = utils.cachedProperty; -var parseBytes = utils.parseBytes; + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; -/** -* @param {EDDSA} eddsa - eddsa instance -* @param {Array|Object} sig - -* @param {Array|Point} [sig.R] - R point as Point or bytes -* @param {Array|bn} [sig.S] - S scalar as bn or bytes -* @param {Array} [sig.Rencoded] - R point encoded -* @param {Array} [sig.Sencoded] - S scalar encoded -*/ -function Signature(eddsa, sig) { - this.eddsa = eddsa; + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); - if (typeof sig !== 'object') - sig = parseBytes(sig); + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; - if (Array.isArray(sig)) { - sig = { - R: sig.slice(0, eddsa.encodingLength), - S: sig.slice(eddsa.encodingLength) - }; + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; } + a2 = r.neg(); + b2 = x; - assert(sig.R && sig.S, 'Signature without R or S'); - - if (eddsa.isPoint(sig.R)) - this._R = sig.R; - if (sig.S instanceof BN) - this._S = sig.S; + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } - this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; - this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; -} + // Normalize signs + if (a1.negative) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.negative) { + a2 = a2.neg(); + b2 = b2.neg(); + } -cachedProperty(Signature, function S() { - return this.eddsa.decodeInt(this.Sencoded()); -}); + return [ + { a: a1, b: b1 }, + { a: a2, b: b2 } + ]; +}; -cachedProperty(Signature, function R() { - return this.eddsa.decodePoint(this.Rencoded()); -}); +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; -cachedProperty(Signature, function Rencoded() { - return this.eddsa.encodePoint(this.R()); -}); + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); -cachedProperty(Signature, function Sencoded() { - return this.eddsa.encodeInt(this.S()); -}); + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); -Signature.prototype.toBytes = function toBytes() { - return this.Rencoded().concat(this.Sencoded()); + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { k1: k1, k2: k2 }; }; -Signature.prototype.toHex = function toHex() { - return utils.encode(this.toBytes(), 'hex').toUpperCase(); -}; +ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { + x = new BN(x, 16); + if (!x.red) + x = x.toRed(this.red); -module.exports = Signature; + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); + if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) + throw new Error('invalid point'); -},{"../../elliptic":138,"bn.js":136}],151:[function(require,module,exports){ -arguments[4][66][0].apply(exports,arguments) -},{"../elliptic":138,"dup":66,"hash.js":155}],152:[function(require,module,exports){ -arguments[4][67][0].apply(exports,arguments) -},{"dup":67}],153:[function(require,module,exports){ -'use strict'; + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); -var utils = exports; -var BN = require('bn.js'); + return this.point(x, y); +}; -utils.assert = function assert(val, msg) { - if (!val) - throw new Error(msg || 'Assertion failed'); +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) + return true; + + var x = point.x; + var y = point.y; + + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; }; -function toArray(msg, enc) { - if (Array.isArray(msg)) - return msg.slice(); - if (!msg) - return []; - var res = []; - if (typeof msg !== 'string') { - for (var i = 0; i < msg.length; i++) - res[i] = msg[i] | 0; - return res; - } - if (!enc) { - for (var i = 0; i < msg.length; i++) { - var c = msg.charCodeAt(i); - var hi = c >> 8; - var lo = c & 0xff; - if (hi) - res.push(hi, lo); - else - res.push(lo); +ShortCurve.prototype._endoWnafMulAdd = + function _endoWnafMulAdd(points, coeffs) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + + if (split.k1.negative) { + split.k1.ineg(); + p = p.neg(true); + } + if (split.k2.negative) { + split.k2.ineg(); + beta = beta.neg(true); } - } else if (enc === 'hex') { - msg = msg.replace(/[^a-z0-9]+/ig, ''); - if (msg.length % 2 !== 0) - msg = '0' + msg; - for (var i = 0; i < msg.length; i += 2) - res.push(parseInt(msg[i] + msg[i + 1], 16)); - } - return res; -} -utils.toArray = toArray; -function zero2(word) { - if (word.length === 1) - return '0' + word; - else - return word; -} -utils.zero2 = zero2; + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; + } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2); -function toHex(msg) { - var res = ''; - for (var i = 0; i < msg.length; i++) - res += zero2(msg[i].toString(16)); + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; + } return res; -} -utils.toHex = toHex; - -utils.encode = function encode(arr, enc) { - if (enc === 'hex') - return toHex(arr); - else - return arr; }; -// Represent num in a w-NAF form -function getNAF(num, w) { - var naf = []; - var ws = 1 << (w + 1); - var k = num.clone(); - while (k.cmpn(1) >= 0) { - var z; - if (k.isOdd()) { - var mod = k.andln(ws - 1); - if (mod > (ws >> 1) - 1) - z = (ws >> 1) - mod; - else - z = mod; - k.isubn(z); - } else { - z = 0; +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); } - naf.push(z); - - // Optimization, shift by word if possible - var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; - for (var i = 1; i < shift; i++) - naf.push(0); - k.iushrn(shift); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + this.inf = false; } - - return naf; } -utils.getNAF = getNAF; +inherits(Point, Base.BasePoint); -// Represent k1, k2 in a Joint Sparse Form -function getJSF(k1, k2) { - var jsf = [ - [], - [] - ]; +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; - k1 = k1.clone(); - k2 = k2.clone(); - var d1 = 0; - var d2 = 0; - while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; - // First phase - var m14 = (k1.andln(3) + d1) & 3; - var m24 = (k2.andln(3) + d2) & 3; - if (m14 === 3) - m14 = -1; - if (m24 === 3) - m24 = -1; - var u1; - if ((m14 & 1) === 0) { - u1 = 0; - } else { - var m8 = (k1.andln(7) + d1) & 7; - if ((m8 === 3 || m8 === 5) && m24 === 2) - u1 = -m14; - else - u1 = m14; - } - jsf[0].push(u1); +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) + return; - var u2; - if ((m24 & 1) === 0) { - u2 = 0; - } else { - var m8 = (k2.andln(7) + d2) & 7; - if ((m8 === 3 || m8 === 5) && m14 === 2) - u2 = -m24; - else - u2 = m24; - } - jsf[1].push(u2); + var pre = this.precomputed; + if (pre && pre.beta) + return pre.beta; - // Second phase - if (2 * d1 === u1 + 1) - d1 = 1 - d1; - if (2 * d2 === u2 + 1) - d2 = 1 - d2; - k1.iushrn(1); - k2.iushrn(1); + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function(p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul) + } + }; } + return beta; +}; - return jsf; -} -utils.getJSF = getJSF; - -function cachedProperty(obj, computer) { - var name = computer.name; - var key = '_' + name; - obj.prototype[name] = function cachedProperty() { - return this[key] !== undefined ? this[key] : - this[key] = computer.call(this); - }; -} -utils.cachedProperty = cachedProperty; +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) + return [ this.x, this.y ]; -function parseBytes(bytes) { - return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : - bytes; -} -utils.parseBytes = parseBytes; + return [ this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1) + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1) + } + } ]; +}; -function intFromLE(bytes) { - return new BN(bytes, 'hex', 'le'); -} -utils.intFromLE = intFromLE; +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') + obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) + return res; + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); + } -},{"bn.js":136}],154:[function(require,module,exports){ -arguments[4][69][0].apply(exports,arguments) -},{"dup":69}],155:[function(require,module,exports){ -arguments[4][70][0].apply(exports,arguments) -},{"./hash/common":156,"./hash/hmac":157,"./hash/ripemd":158,"./hash/sha":159,"./hash/utils":160,"dup":70}],156:[function(require,module,exports){ -arguments[4][71][0].apply(exports,arguments) -},{"../hash":155,"dup":71}],157:[function(require,module,exports){ -arguments[4][72][0].apply(exports,arguments) -},{"../hash":155,"dup":72}],158:[function(require,module,exports){ -arguments[4][73][0].apply(exports,arguments) -},{"../hash":155,"dup":73}],159:[function(require,module,exports){ -arguments[4][74][0].apply(exports,arguments) -},{"../hash":155,"dup":74}],160:[function(require,module,exports){ -arguments[4][75][0].apply(exports,arguments) -},{"dup":75,"inherits":296}],161:[function(require,module,exports){ -module.exports={ - "name": "elliptic", - "version": "6.2.3", - "description": "EC cryptography", - "main": "lib/elliptic.js", - "files": [ - "lib" - ], - "scripts": { - "coverage": "npm run unit --coverage", - "coveralls": "npm run coverage && cat ./coverage/lcov.info | coveralls", - "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", - "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", - "lint": "npm run jscs && npm run jshint", - "test": "npm run lint && npm run unit", - "unit": "istanbul test _mocha --reporter=spec test/*-test.js" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/elliptic.git" - }, - "keywords": [ - "EC", - "Elliptic", - "curve", - "Cryptography" - ], - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/indutny/elliptic/issues" - }, - "homepage": "https://github.com/indutny/elliptic", - "devDependencies": { - "coveralls": "^2.11.3", - "istanbul": "^0.4.2", - "jscs": "^2.9.0", - "jshint": "^2.6.0", - "mocha": "^2.1.0" - }, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - }, - "gitHead": "c32f20b22b420eb6af3c6dda28963deb7facf823", - "_id": "elliptic@6.2.3", - "_shasum": "18e46d7306b0951275a2d42063270a14b74ebe99", - "_from": "elliptic@>=6.0.0 <7.0.0", - "_npmVersion": "3.3.12", - "_nodeVersion": "5.4.1", - "_npmUser": { - "name": "indutny", - "email": "fedor@indutny.com" - }, - "dist": { - "shasum": "18e46d7306b0951275a2d42063270a14b74ebe99", - "tarball": "http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz" - }, - "maintainers": [ - { - "name": "indutny", - "email": "fedor@indutny.com" + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [ res ].concat(pre.doubles.points.map(obj2point)) + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [ res ].concat(pre.naf.points.map(obj2point)) } - ], - "directories": {}, - "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz", - "readme": "ERROR: No README data found!" -} - -},{}],162:[function(require,module,exports){ -module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb", -"2.16.840.1.101.3.4.1.2": "aes-128-cbc", -"2.16.840.1.101.3.4.1.3": "aes-128-ofb", -"2.16.840.1.101.3.4.1.4": "aes-128-cfb", -"2.16.840.1.101.3.4.1.21": "aes-192-ecb", -"2.16.840.1.101.3.4.1.22": "aes-192-cbc", -"2.16.840.1.101.3.4.1.23": "aes-192-ofb", -"2.16.840.1.101.3.4.1.24": "aes-192-cfb", -"2.16.840.1.101.3.4.1.41": "aes-256-ecb", -"2.16.840.1.101.3.4.1.42": "aes-256-cbc", -"2.16.840.1.101.3.4.1.43": "aes-256-ofb", -"2.16.840.1.101.3.4.1.44": "aes-256-cfb" -} -},{}],163:[function(require,module,exports){ -// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js -// Fedor, you are amazing. - -var asn1 = require('asn1.js') - -var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { - this.seq().obj( - this.key('version').int(), - this.key('modulus').int(), - this.key('publicExponent').int(), - this.key('privateExponent').int(), - this.key('prime1').int(), - this.key('prime2').int(), - this.key('exponent1').int(), - this.key('exponent2').int(), - this.key('coefficient').int() - ) -}) -exports.RSAPrivateKey = RSAPrivateKey + }; + return res; +}; -var RSAPublicKey = asn1.define('RSAPublicKey', function () { - this.seq().obj( - this.key('modulus').int(), - this.key('publicExponent').int() - ) -}) -exports.RSAPublicKey = RSAPublicKey +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; -var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { - this.seq().obj( - this.key('algorithm').use(AlgorithmIdentifier), - this.key('subjectPublicKey').bitstr() - ) -}) -exports.PublicKey = PublicKey - -var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { - this.seq().obj( - this.key('algorithm').objid(), - this.key('none').null_().optional(), - this.key('curve').objid().optional(), - this.key('params').seq().obj( - this.key('p').int(), - this.key('q').int(), - this.key('g').int() - ).optional() - ) -}) +Point.prototype.isInfinity = function isInfinity() { + return this.inf; +}; -var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { - this.seq().obj( - this.key('version').int(), - this.key('algorithm').use(AlgorithmIdentifier), - this.key('subjectPrivateKey').octstr() - ) -}) -exports.PrivateKey = PrivateKeyInfo -var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { - this.seq().obj( - this.key('algorithm').seq().obj( - this.key('id').objid(), - this.key('decrypt').seq().obj( - this.key('kde').seq().obj( - this.key('id').objid(), - this.key('kdeparams').seq().obj( - this.key('salt').octstr(), - this.key('iters').int() - ) - ), - this.key('cipher').seq().obj( - this.key('algo').objid(), - this.key('iv').octstr() - ) - ) - ), - this.key('subjectPrivateKey').octstr() - ) -}) +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) + return p; -exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo + // P + O = P + if (p.inf) + return this; -var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { - this.seq().obj( - this.key('version').int(), - this.key('p').int(), - this.key('q').int(), - this.key('g').int(), - this.key('pub_key').int(), - this.key('priv_key').int() - ) -}) -exports.DSAPrivateKey = DSAPrivateKey + // P + P = 2P + if (this.eq(p)) + return this.dbl(); -exports.DSAparam = asn1.define('DSAparam', function () { - this.int() -}) -var ECPrivateKey = asn1.define('ECPrivateKey', function () { - this.seq().obj( - this.key('version').int(), - this.key('privateKey').octstr(), - this.key('parameters').optional().explicit(0).use(ECParameters), - this.key('publicKey').optional().explicit(1).bitstr() - ) -}) -exports.ECPrivateKey = ECPrivateKey -var ECParameters = asn1.define('ECParameters', function () { - this.choice({ - namedCurve: this.objid() - }) -}) + // P + (-P) = O + if (this.neg().eq(p)) + return this.curve.point(null, null); -exports.signature = asn1.define('signature', function () { - this.seq().obj( - this.key('r').int(), - this.key('s').int() - ) -}) + // P + Q = O + if (this.x.cmp(p.x) === 0) + return this.curve.point(null, null); -},{"asn1.js":166}],164:[function(require,module,exports){ -(function (Buffer){ -// adapted from https://github.com/apatil/pemstrip -var findProc = /Proc-Type: 4,ENCRYPTED\r?\nDEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\r?\n\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n/m -var startRegex = /^-----BEGIN (.*) KEY-----\r?\n/m -var fullRegex = /^-----BEGIN (.*) KEY-----\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n-----END \1 KEY-----$/m -var evp = require('evp_bytestokey') -var ciphers = require('browserify-aes') -module.exports = function (okey, password) { - var key = okey.toString() - var match = key.match(findProc) - var decrypted - if (!match) { - var match2 = key.match(fullRegex) - decrypted = new Buffer(match2[2].replace(/\r?\n/g, ''), 'base64') - } else { - var suite = 'aes' + match[1] - var iv = new Buffer(match[2], 'hex') - var cipherText = new Buffer(match[3].replace(/\r?\n/g, ''), 'base64') - var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key - var out = [] - var cipher = ciphers.createDecipheriv(suite, cipherKey, iv) - out.push(cipher.update(cipherText)) - out.push(cipher.final()) - decrypted = Buffer.concat(out) - } - var tag = key.match(startRegex)[1] + ' KEY' - return { - tag: tag, - data: decrypted - } -} + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) + c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; -}).call(this,require("buffer").Buffer) -},{"browserify-aes":183,"buffer":99,"evp_bytestokey":198}],165:[function(require,module,exports){ -(function (Buffer){ -var asn1 = require('./asn1') -var aesid = require('./aesid.json') -var fixProc = require('./fixProc') -var ciphers = require('browserify-aes') -var compat = require('pbkdf2') -module.exports = parseKeys - -function parseKeys (buffer) { - var password - if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) { - password = buffer.passphrase - buffer = buffer.key - } - if (typeof buffer === 'string') { - buffer = new Buffer(buffer) - } - - var stripped = fixProc(buffer, password) - - var type = stripped.tag - var data = stripped.data - var subtype, ndata - switch (type) { - case 'PUBLIC KEY': - ndata = asn1.PublicKey.decode(data, 'der') - subtype = ndata.algorithm.algorithm.join('.') - switch (subtype) { - case '1.2.840.113549.1.1.1': - return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der') - case '1.2.840.10045.2.1': - ndata.subjectPrivateKey = ndata.subjectPublicKey - return { - type: 'ec', - data: ndata - } - case '1.2.840.10040.4.1': - ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der') - return { - type: 'dsa', - data: ndata.algorithm.params - } - default: throw new Error('unknown key id ' + subtype) - } - throw new Error('unknown key type ' + type) - case 'ENCRYPTED PRIVATE KEY': - data = asn1.EncryptedPrivateKey.decode(data, 'der') - data = decrypt(data, password) - // falls through - case 'PRIVATE KEY': - ndata = asn1.PrivateKey.decode(data, 'der') - subtype = ndata.algorithm.algorithm.join('.') - switch (subtype) { - case '1.2.840.113549.1.1.1': - return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der') - case '1.2.840.10045.2.1': - return { - curve: ndata.algorithm.curve, - privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey - } - case '1.2.840.10040.4.1': - ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der') - return { - type: 'dsa', - params: ndata.algorithm.params - } - default: throw new Error('unknown key id ' + subtype) - } - throw new Error('unknown key type ' + type) - case 'RSA PUBLIC KEY': - return asn1.RSAPublicKey.decode(data, 'der') - case 'RSA PRIVATE KEY': - return asn1.RSAPrivateKey.decode(data, 'der') - case 'DSA PRIVATE KEY': - return { - type: 'dsa', - params: asn1.DSAPrivateKey.decode(data, 'der') - } - case 'EC PRIVATE KEY': - data = asn1.ECPrivateKey.decode(data, 'der') - return { - curve: data.parameters.value, - privateKey: data.privateKey - } - default: throw new Error('unknown key type ' + type) - } -} -parseKeys.signature = asn1.signature -function decrypt (data, password) { - var salt = data.algorithm.decrypt.kde.kdeparams.salt - var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10) - var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')] - var iv = data.algorithm.decrypt.cipher.iv - var cipherText = data.subjectPrivateKey - var keylen = parseInt(algo.split('-')[1], 10) / 8 - var key = compat.pbkdf2Sync(password, salt, iters, keylen) - var cipher = ciphers.createDecipheriv(algo, key, iv) - var out = [] - out.push(cipher.update(cipherText)) - out.push(cipher.final()) - return Buffer.concat(out) -} +Point.prototype.dbl = function dbl() { + if (this.inf) + return this; -}).call(this,require("buffer").Buffer) -},{"./aesid.json":162,"./asn1":163,"./fixProc":164,"browserify-aes":183,"buffer":99,"pbkdf2":248}],166:[function(require,module,exports){ -var asn1 = exports; + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) + return this.curve.point(null, null); -asn1.bignum = require('bn.js'); + var a = this.curve.a; -asn1.define = require('./asn1/api').define; -asn1.base = require('./asn1/base'); -asn1.constants = require('./asn1/constants'); -asn1.decoders = require('./asn1/decoders'); -asn1.encoders = require('./asn1/encoders'); + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); -},{"./asn1/api":167,"./asn1/base":169,"./asn1/constants":173,"./asn1/decoders":175,"./asn1/encoders":178,"bn.js":136}],167:[function(require,module,exports){ -var asn1 = require('../asn1'); -var inherits = require('inherits'); + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; -var api = exports; +Point.prototype.getX = function getX() { + return this.x.fromRed(); +}; -api.define = function define(name, body) { - return new Entity(name, body); +Point.prototype.getY = function getY() { + return this.y.fromRed(); }; -function Entity(name, body) { - this.name = name; - this.body = body; +Point.prototype.mul = function mul(k) { + k = new BN(k, 16); - this.decoders = {}; - this.encoders = {}; + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else if (this.curve.endo) + return this.curve._endoWnafMulAdd([ this ], [ k ]); + else + return this.curve._wnafMul(this, k); }; -Entity.prototype._createNamed = function createNamed(base) { - var named; - try { - named = require('vm').runInThisContext( - '(function ' + this.name + '(entity) {\n' + - ' this._initNamed(entity);\n' + - '})' - ); - } catch (e) { - named = function (entity) { - this._initNamed(entity); +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; + +Point.prototype.eq = function eq(p) { + return this === p || + this.inf === p.inf && + (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; + +Point.prototype.neg = function neg(_precompute) { + if (this.inf) + return this; + + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function(p) { + return p.neg(); + }; + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate) + } }; } - inherits(named, base); - named.prototype._initNamed = function initnamed(entity) { - base.call(this, entity); - }; - - return new named(this); + return res; }; -Entity.prototype._getDecoder = function _getDecoder(enc) { - // Lazily create decoder - if (!this.decoders.hasOwnProperty(enc)) - this.decoders[enc] = this._createNamed(asn1.decoders[enc]); - return this.decoders[enc]; +Point.prototype.toJ = function toJ() { + if (this.inf) + return this.curve.jpoint(null, null, null); + + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; }; -Entity.prototype.decode = function decode(data, enc, options) { - return this._getDecoder(enc).decode(data, options); +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new BN(0); + } else { + this.x = new BN(x, 16); + this.y = new BN(y, 16); + this.z = new BN(z, 16); + } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + + this.zOne = this.z === this.curve.one; +} +inherits(JPoint, Base.BasePoint); + +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); }; -Entity.prototype._getEncoder = function _getEncoder(enc) { - // Lazily create encoder - if (!this.encoders.hasOwnProperty(enc)) - this.encoders[enc] = this._createNamed(asn1.encoders[enc]); - return this.encoders[enc]; +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) + return this.curve.point(null, null); + + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + + return this.curve.point(ax, ay); }; -Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { - return this._getEncoder(enc).encode(data, reporter); +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); }; -},{"../asn1":166,"inherits":296,"vm":320}],168:[function(require,module,exports){ -var inherits = require('inherits'); -var Reporter = require('../base').Reporter; -var Buffer = require('buffer').Buffer; +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) + return p; -function DecoderBuffer(base, options) { - Reporter.call(this, options); - if (!Buffer.isBuffer(base)) { - this.error('Input not Buffer'); - return; + // P + O = P + if (p.isInfinity()) + return this; + + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); } - this.base = base; - this.offset = 0; - this.length = base.length; -} -inherits(DecoderBuffer, Reporter); -exports.DecoderBuffer = DecoderBuffer; + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); -DecoderBuffer.prototype.save = function save() { - return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; + return this.curve.jpoint(nx, ny, nz); }; -DecoderBuffer.prototype.restore = function restore(save) { - // Return skipped data - var res = new DecoderBuffer(this.base); - res.offset = save.offset; - res.length = this.offset; +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) + return p.toJ(); + + // P + O = P + if (p.isInfinity()) + return this; - this.offset = save.offset; - Reporter.prototype.restore.call(this, save.reporter); + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); - return res; + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } + + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); + + return this.curve.jpoint(nx, ny, nz); }; -DecoderBuffer.prototype.isEmpty = function isEmpty() { - return this.offset === this.length; +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) + return this; + if (this.isInfinity()) + return this; + if (!pow) + return this.dbl(); + + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (var i = 0; i < pow; i++) + r = r.dbl(); + return r; + } + + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; + + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + // Reuse results + var jyd = jy.redAdd(jy); + for (var i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) + jz4 = jz4.redMul(jyd4); + + jx = nx; + jz = nz; + jyd = dny; + } + + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); }; -DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { - if (this.offset + 1 <= this.length) - return this.base.readUInt8(this.offset++, true); +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; + + if (this.curve.zeroA) + return this._zeroDbl(); + else if (this.curve.threeA) + return this._threeDbl(); else - return this.error(fail || 'DecoderBuffer overrun'); -} + return this._dbl(); +}; + +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A -DecoderBuffer.prototype.skip = function skip(bytes, fail) { - if (!(this.offset + bytes <= this.length)) - return this.error(fail || 'DecoderBuffer overrun'); + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); - var res = new DecoderBuffer(this.base); + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); - // Share reporter state - res._reporterState = this._reporterState; + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A - res.offset = this.offset; - res.length = this.offset + bytes; - this.offset += bytes; - return res; -} + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); -DecoderBuffer.prototype.raw = function raw(save) { - return this.base.slice(save ? save.offset : this.offset, this.length); -} + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); -function EncoderBuffer(value, reporter) { - if (Array.isArray(value)) { - this.length = 0; - this.value = value.map(function(item) { - if (!(item instanceof EncoderBuffer)) - item = new EncoderBuffer(item, reporter); - this.length += item.length; - return item; - }, this); - } else if (typeof value === 'number') { - if (!(0 <= value && value <= 0xff)) - return reporter.error('non-byte EncoderBuffer value'); - this.value = value; - this.length = 1; - } else if (typeof value === 'string') { - this.value = value; - this.length = Buffer.byteLength(value); - } else if (Buffer.isBuffer(value)) { - this.value = value; - this.length = value.length; - } else { - return reporter.error('Unsupported type: ' + typeof value); + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); } -} -exports.EncoderBuffer = EncoderBuffer; -EncoderBuffer.prototype.join = function join(out, offset) { - if (!out) - out = new Buffer(this.length); - if (!offset) - offset = 0; + return this.curve.jpoint(nx, ny, nz); +}; - if (this.length === 0) - return out; +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A - if (Array.isArray(this.value)) { - this.value.forEach(function(item) { - item.join(out, offset); - offset += item.length; - }); + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); } else { - if (typeof this.value === 'number') - out[offset] = this.value; - else if (typeof this.value === 'string') - out.write(this.value, offset); - else if (Buffer.isBuffer(this.value)) - this.value.copy(out, offset); - offset += this.length; + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S + + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); } - return out; + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); + + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) + return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + + return this.curve.jpoint(nx, ny, nz); }; -},{"../base":169,"buffer":99,"inherits":296}],169:[function(require,module,exports){ -var base = exports; - -base.Reporter = require('./reporter').Reporter; -base.DecoderBuffer = require('./buffer').DecoderBuffer; -base.EncoderBuffer = require('./buffer').EncoderBuffer; -base.Node = require('./node'); - -},{"./buffer":168,"./node":170,"./reporter":171}],170:[function(require,module,exports){ -var Reporter = require('../base').Reporter; -var EncoderBuffer = require('../base').EncoderBuffer; -var DecoderBuffer = require('../base').DecoderBuffer; -var assert = require('minimalistic-assert'); +JPoint.prototype.mul = function mul(k, kbase) { + k = new BN(k, kbase); -// Supported tags -var tags = [ - 'seq', 'seqof', 'set', 'setof', 'octstr', 'bitstr', 'objid', 'bool', - 'gentime', 'utctime', 'null_', 'enum', 'int', 'ia5str', 'utf8str', 'bmpstr', - 'numstr', 'printstr' -]; + return this.curve._wnafMul(this, k); +}; -// Public methods list -var methods = [ - 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', - 'any', 'contains' -].concat(tags); +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') + return this.eq(p.toJ()); -// Overrided methods list -var overrided = [ - '_peekTag', '_decodeTag', '_use', - '_decodeStr', '_decodeObjid', '_decodeTime', - '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', + if (this === p) + return true; - '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', - '_encodeNull', '_encodeInt', '_encodeBool' -]; + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) + return false; -function Node(enc, parent) { - var state = {}; - this._baseState = state; - - state.enc = enc; - - state.parent = parent || null; - state.children = null; - - // State - state.tag = null; - state.args = null; - state.reverseArgs = null; - state.choice = null; - state.optional = false; - state.any = false; - state.obj = false; - state.use = null; - state.useDecoder = null; - state.key = null; - state['default'] = null; - state.explicit = null; - state.implicit = null; - state.contains = null; - - // Should create new instance on each method - if (!state.parent) { - state.children = []; - this._wrap(); - } -} -module.exports = Node; - -var stateProps = [ - 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', - 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', - 'implicit' -]; + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; -Node.prototype.clone = function clone() { - var state = this._baseState; - var cstate = {}; - stateProps.forEach(function(prop) { - cstate[prop] = state[prop]; - }); - var res = new this.constructor(cstate.parent); - res._baseState = cstate; - return res; +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; }; -Node.prototype._wrap = function wrap() { - var state = this._baseState; - methods.forEach(function(method) { - this[method] = function _wrappedMethod() { - var clone = new this.constructor(this); - state.children.push(clone); - return clone[method].apply(clone, arguments); - }; - }, this); +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; }; -Node.prototype._init = function init(body) { - var state = this._baseState; +},{"../../elliptic":126,"../curve":129,"bn.js":125,"inherits":226}],132:[function(require,module,exports){ +'use strict'; - assert(state.parent === null); - body.call(this); +var curves = exports; - // Filter children - state.children = state.children.filter(function(child) { - return child._baseState.parent === this; - }, this); - assert.equal(state.children.length, 1, 'Root node can have only one child'); -}; +var hash = require('hash.js'); +var elliptic = require('../elliptic'); -Node.prototype._useArgs = function useArgs(args) { - var state = this._baseState; +var assert = elliptic.utils.assert; - // Filter children and args - var children = args.filter(function(arg) { - return arg instanceof this.constructor; - }, this); - args = args.filter(function(arg) { - return !(arg instanceof this.constructor); - }, this); +function PresetCurve(options) { + if (options.type === 'short') + this.curve = new elliptic.curve.short(options); + else if (options.type === 'edwards') + this.curve = new elliptic.curve.edwards(options); + else + this.curve = new elliptic.curve.mont(options); + this.g = this.curve.g; + this.n = this.curve.n; + this.hash = options.hash; - if (children.length !== 0) { - assert(state.children === null); - state.children = children; - - // Replace parent to maintain backward link - children.forEach(function(child) { - child._baseState.parent = this; - }, this); - } - if (args.length !== 0) { - assert(state.args === null); - state.args = args; - state.reverseArgs = args.map(function(arg) { - if (typeof arg !== 'object' || arg.constructor !== Object) - return arg; - - var res = {}; - Object.keys(arg).forEach(function(key) { - if (key == (key | 0)) - key |= 0; - var value = arg[key]; - res[value] = key; - }); - return res; - }); - } -}; + assert(this.g.validate(), 'Invalid curve'); + assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); +} +curves.PresetCurve = PresetCurve; -// -// Overrided methods -// +function defineCurve(name, options) { + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + get: function() { + var curve = new PresetCurve(options); + Object.defineProperty(curves, name, { + configurable: true, + enumerable: true, + value: curve + }); + return curve; + } + }); +} -overrided.forEach(function(method) { - Node.prototype[method] = function _overrided() { - var state = this._baseState; - throw new Error(method + ' not implemented for encoding: ' + state.enc); - }; +defineCurve('p192', { + type: 'short', + prime: 'p192', + p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', + b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', + n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', + hash: hash.sha256, + gRed: false, + g: [ + '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', + '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811' + ] }); -// -// Public methods -// - -tags.forEach(function(tag) { - Node.prototype[tag] = function _tagMethod() { - var state = this._baseState; - var args = Array.prototype.slice.call(arguments); - - assert(state.tag === null); - state.tag = tag; +defineCurve('p224', { + type: 'short', + prime: 'p224', + p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', + a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', + b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', + n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', + hash: hash.sha256, + gRed: false, + g: [ + 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', + 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34' + ] +}); - this._useArgs(args); +defineCurve('p256', { + type: 'short', + prime: null, + p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', + a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', + b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', + n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', + hash: hash.sha256, + gRed: false, + g: [ + '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', + '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5' + ] +}); - return this; - }; +defineCurve('p384', { + type: 'short', + prime: null, + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 ffffffff', + a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'fffffffe ffffffff 00000000 00000000 fffffffc', + b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', + n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', + hash: hash.sha384, + gRed: false, + g: [ + 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + + '5502f25d bf55296c 3a545e38 72760ab7', + '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' + ] }); -Node.prototype.use = function use(item) { - var state = this._baseState; +defineCurve('p521', { + type: 'short', + prime: null, + p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff', + a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff ffffffff ffffffff fffffffc', + b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', + n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', + hash: hash.sha512, + gRed: false, + g: [ + '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', + '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + + '3fad0761 353c7086 a272c240 88be9476 9fd16650' + ] +}); - assert(state.use === null); - state.use = item; +defineCurve('curve25519', { + type: 'mont', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '76d06', + b: '0', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '9' + ] +}); - return this; -}; +defineCurve('ed25519', { + type: 'edwards', + prime: 'p25519', + p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', + a: '-1', + c: '1', + // -121665 * (121666^(-1)) (mod P) + d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', + n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', + hash: hash.sha256, + gRed: false, + g: [ + '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', -Node.prototype.optional = function optional() { - var state = this._baseState; + // 4/5 + '6666666666666666666666666666666666666666666666666666666666666658' + ] +}); - state.optional = true; +var pre; +try { + pre = require('./precomputed/secp256k1'); +} catch (e) { + pre = undefined; +} - return this; -}; +defineCurve('secp256k1', { + type: 'short', + prime: 'k256', + p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', + a: '0', + b: '7', + n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', + h: '1', + hash: hash.sha256, -Node.prototype.def = function def(val) { - var state = this._baseState; + // Precomputed endomorphism + beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', + lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', + basis: [ + { + a: '3086d221a7d46bcde86c90e49284eb15', + b: '-e4437ed6010e88286f547fa90abfe4c3' + }, + { + a: '114ca50f7a8e2f3f657c1108d9d44cfd8', + b: '3086d221a7d46bcde86c90e49284eb15' + } + ], - assert(state['default'] === null); - state['default'] = val; - state.optional = true; + gRed: false, + g: [ + '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', + '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', + pre + ] +}); - return this; -}; +},{"../elliptic":126,"./precomputed/secp256k1":140,"hash.js":219}],133:[function(require,module,exports){ +'use strict'; -Node.prototype.explicit = function explicit(num) { - var state = this._baseState; +var BN = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; - assert(state.explicit === null && state.implicit === null); - state.explicit = num; +var KeyPair = require('./key'); +var Signature = require('./signature'); - return this; -}; +function EC(options) { + if (!(this instanceof EC)) + return new EC(options); -Node.prototype.implicit = function implicit(num) { - var state = this._baseState; + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options); - assert(state.explicit === null && state.implicit === null); - state.implicit = num; + options = elliptic.curves[options]; + } - return this; -}; + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof elliptic.curves.PresetCurve) + options = { curve: options }; -Node.prototype.obj = function obj() { - var state = this._baseState; - var args = Array.prototype.slice.call(arguments); + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.ushrn(1); + this.g = this.curve.g; - state.obj = true; + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); - if (args.length !== 0) - this._useArgs(args); + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; +} +module.exports = EC; - return this; +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); }; -Node.prototype.key = function key(newKey) { - var state = this._baseState; - - assert(state.key === null); - state.key = newKey; - - return this; +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); }; -Node.prototype.any = function any() { - var state = this._baseState; - - state.any = true; - - return this; +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); }; -Node.prototype.choice = function choice(obj) { - var state = this._baseState; - - assert(state.choice === null); - state.choice = obj; - this._useArgs(Object.keys(obj).map(function(key) { - return obj[key]; - })); - - return this; -}; +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) + options = {}; -Node.prototype.contains = function contains(item) { - var state = this._baseState; + // Instantiate Hmac_DRBG + var drbg = new elliptic.hmacDRBG({ + hash: this.hash, + pers: options.pers, + entropy: options.entropy || elliptic.rand(this.hash.hmacStrength), + nonce: this.n.toArray() + }); - assert(state.use === null); - state.contains = item; + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new BN(2)); + do { + var priv = new BN(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) + continue; - return this; + priv.iaddn(1); + return this.keyFromPrivate(priv); + } while (true); }; -// -// Decoding -// - -Node.prototype._decode = function decode(input) { - var state = this._baseState; - - // Decode root node - if (state.parent === null) - return input.wrapResult(state.children[0]._decode(input)); - - var result = state['default']; - var present = true; - - var prevKey; - if (state.key !== null) - prevKey = input.enterKey(state.key); - - // Check if tag is there - if (state.optional) { - var tag = null; - if (state.explicit !== null) - tag = state.explicit; - else if (state.implicit !== null) - tag = state.implicit; - else if (state.tag !== null) - tag = state.tag; - - if (tag === null && !state.any) { - // Trial and Error - var save = input.save(); - try { - if (state.choice === null) - this._decodeGeneric(state.tag, input); - else - this._decodeChoice(input); - present = true; - } catch (e) { - present = false; - } - input.restore(save); - } else { - present = this._peekTag(input, tag, state.any); - - if (input.isError(present)) - return present; - } - } - - // Push object on stack - var prevObj; - if (state.obj && present) - prevObj = input.enterObject(); - - if (present) { - // Unwrap explicit values - if (state.explicit !== null) { - var explicit = this._decodeTag(input, state.explicit); - if (input.isError(explicit)) - return explicit; - input = explicit; - } - - // Unwrap implicit and normal values - if (state.use === null && state.choice === null) { - if (state.any) - var save = input.save(); - var body = this._decodeTag( - input, - state.implicit !== null ? state.implicit : state.tag, - state.any - ); - if (input.isError(body)) - return body; - - if (state.any) - result = input.raw(save); - else - input = body; - } - - // Select proper method for tag - if (state.any) - result = result; - else if (state.choice === null) - result = this._decodeGeneric(state.tag, input); - else - result = this._decodeChoice(input); - - if (input.isError(result)) - return result; - - // Decode children - if (!state.any && state.choice === null && state.children !== null) { - var fail = state.children.some(function decodeChildren(child) { - // NOTE: We are ignoring errors here, to let parser continue with other - // parts of encoded data - child._decode(input); - }); - if (fail) - return err; - } +EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) + msg = msg.ushrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) + return msg.sub(this.n); + else + return msg; +}; - // Decode contained/encoded by schema, only in bit or octet strings - if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { - var data = new DecoderBuffer(result); - result = this._getUse(state.contains, input._reporterState.obj)._decode(data); - } +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; } + if (!options) + options = {}; - // Pop object - if (state.obj && present) - result = input.leaveObject(prevObj); + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new BN(msg, 16)); - // Set key - if (state.key !== null && (result !== null || present === true)) - input.leaveKey(prevKey, state.key, result); + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray('be', bytes); - return result; -}; + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray('be', bytes); -Node.prototype._decodeGeneric = function decodeGeneric(tag, input) { - var state = this._baseState; + // Instantiate Hmac_DRBG + var drbg = new elliptic.hmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce, + pers: options.pers, + persEnc: options.persEnc + }); - if (tag === 'seq' || tag === 'set') - return null; - if (tag === 'seqof' || tag === 'setof') - return this._decodeList(input, tag, state.args[0]); - else if (tag === 'octstr' || tag === 'bitstr') - return this._decodeStr(input, tag); - else if (tag === 'ia5str' || tag === 'utf8str' || tag === 'bmpstr') - return this._decodeStr(input, tag); - else if (tag === 'numstr' || tag === 'printstr') - return this._decodeStr(input, tag); - else if (tag === 'objid' && state.args) - return this._decodeObjid(input, state.args[0], state.args[1]); - else if (tag === 'objid') - return this._decodeObjid(input, null, null); - else if (tag === 'gentime' || tag === 'utctime') - return this._decodeTime(input, tag); - else if (tag === 'null_') - return this._decodeNull(input); - else if (tag === 'bool') - return this._decodeBool(input); - else if (tag === 'int' || tag === 'enum') - return this._decodeInt(input, state.args && state.args[0]); - else if (state.use !== null) - return this._getUse(state.use, input._reporterState.obj)._decode(input); - else - return input.error('unknown tag: ' + tag); + // Number of bytes to generate + var ns1 = this.n.sub(new BN(1)); - return null; -}; + for (var iter = 0; true; iter++) { + var k = options.k ? + options.k(iter) : + new BN(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) + continue; -Node.prototype._getUse = function _getUse(entity, obj) { + var kp = this.g.mul(k); + if (kp.isInfinity()) + continue; - var state = this._baseState; - // Create altered use decoder if implicit is set - state.useDecoder = this._use(entity, obj); - assert(state.useDecoder._baseState.parent === null); - state.useDecoder = state.useDecoder._baseState.children[0]; - if (state.implicit !== state.useDecoder._baseState.implicit) { - state.useDecoder = state.useDecoder.clone(); - state.useDecoder._baseState.implicit = state.implicit; - } - return state.useDecoder; -}; + var kpX = kp.getX(); + var r = kpX.umod(this.n); + if (r.cmpn(0) === 0) + continue; -Node.prototype._decodeChoice = function decodeChoice(input) { - var state = this._baseState; - var result = null; - var match = false; + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); + s = s.umod(this.n); + if (s.cmpn(0) === 0) + continue; - Object.keys(state.choice).some(function(key) { - var save = input.save(); - var node = state.choice[key]; - try { - var value = node._decode(input); - if (input.isError(value)) - return false; + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | + (kpX.cmp(r) !== 0 ? 2 : 0); - result = { type: key, value: value }; - match = true; - } catch (e) { - input.restore(save); - return false; + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) { + s = this.n.sub(s); + recoveryParam ^= 1; } - return true; - }, this); - if (!match) - return input.error('Choice not matched'); - - return result; + return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); + } }; -// -// Encoding -// - -Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { - return new EncoderBuffer(data, this.reporter); -}; +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new BN(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); -Node.prototype._encode = function encode(data, reporter, parent) { - var state = this._baseState; - if (state['default'] !== null && state['default'] === data) - return; + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) + return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) + return false; - var result = this._encodeValue(data, reporter, parent); - if (result === undefined) - return; + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).umod(this.n); + var u2 = sinv.mul(r).umod(this.n); - if (this._skipDefault(result, reporter, parent)) - return; + var p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; - return result; + return p.getX().umod(this.n).cmp(r) === 0; }; -Node.prototype._encodeValue = function encode(data, reporter, parent) { - var state = this._baseState; - - // Decode root node - if (state.parent === null) - return state.children[0]._encode(data, reporter || new Reporter()); - - var result = null; - var present = true; - - // Set reporter to share it with a child class - this.reporter = reporter; - - // Check if data is there - if (state.optional && data === undefined) { - if (state['default'] !== null) - data = state['default'] - else - return; - } - - // For error reporting - var prevKey; - - // Encode children first - var content = null; - var primitive = false; - if (state.any) { - // Anything that was given is translated to buffer - result = this._createEncoderBuffer(data); - } else if (state.choice) { - result = this._encodeChoice(data, reporter); - } else if (state.contains) { - content = this._getUse(state.contains, parent)._encode(data, reporter); - primitive = true; - } else if (state.children) { - content = state.children.map(function(child) { - if (child._baseState.tag === 'null_') - return child._encode(null, reporter, data); - - if (child._baseState.key === null) - return reporter.error('Child should have a key'); - var prevKey = reporter.enterKey(child._baseState.key); - - if (typeof data !== 'object') - return reporter.error('Child expected, but input is not object'); - - var res = child._encode(data[child._baseState.key], reporter, data); - reporter.leaveKey(prevKey); +EC.prototype.recoverPubKey = function(msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); - return res; - }, this).filter(function(child) { - return child; - }); - content = this._createEncoderBuffer(content); - } else { - if (state.tag === 'seqof' || state.tag === 'setof') { - // TODO(indutny): this should be thrown on DSL level - if (!(state.args && state.args.length === 1)) - return reporter.error('Too many args for : ' + state.tag); - - if (!Array.isArray(data)) - return reporter.error('seqof/setof, but data is not Array'); - - var child = this.clone(); - child._baseState.implicit = null; - content = this._createEncoderBuffer(data.map(function(item) { - var state = this._baseState; - - return this._getUse(state.args[0], data)._encode(item, reporter); - }, child)); - } else if (state.use !== null) { - result = this._getUse(state.use, parent)._encode(data, reporter); - } else { - content = this._encodePrimitive(state.tag, data); - primitive = true; - } - } + var n = this.n; + var e = new BN(msg); + var r = signature.r; + var s = signature.s; - // Encode data itself - var result; - if (!state.any && state.choice === null) { - var tag = state.implicit !== null ? state.implicit : state.tag; - var cls = state.implicit === null ? 'universal' : 'context'; + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) + throw new Error('Unable to find sencond key candinate'); - if (tag === null) { - if (state.use === null) - reporter.error('Tag could be ommited only for .use()'); - } else { - if (state.use === null) - result = this._encodeComposite(tag, primitive, cls, content); - } - } + // 1.1. Let x = r + jn. + if (isSecondKey) + r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); + else + r = this.curve.pointFromX(r, isYOdd); - // Wrap in explicit - if (state.explicit !== null) - result = this._encodeComposite(state.explicit, false, 'context', result); + var eNeg = n.sub(e); - return result; + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + var rInv = signature.r.invm(n); + return this.g.mulAdd(eNeg, r, s).mul(rInv); }; -Node.prototype._encodeChoice = function encodeChoice(data, reporter) { - var state = this._baseState; +EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) + return signature.recoveryParam; - var node = state.choice[data.type]; - if (!node) { - assert( - false, - data.type + ' not found in ' + - JSON.stringify(Object.keys(state.choice))); - } - return node._encode(data.value, reporter); -}; - -Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { - var state = this._baseState; - - if (tag === 'octstr' || tag === 'bitstr' || tag === 'ia5str') - return this._encodeStr(data, tag); - else if (tag === 'utf8str' || tag === 'bmpstr') - return this._encodeStr(data, tag); - else if (tag === 'numstr' || tag === 'printstr') - return this._encodeStr(data, tag); - else if (tag === 'objid' && state.args) - return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); - else if (tag === 'objid') - return this._encodeObjid(data, null, null); - else if (tag === 'gentime' || tag === 'utctime') - return this._encodeTime(data, tag); - else if (tag === 'null_') - return this._encodeNull(); - else if (tag === 'int' || tag === 'enum') - return this._encodeInt(data, state.args && state.reverseArgs[0]); - else if (tag === 'bool') - return this._encodeBool(data); - else - throw new Error('Unsupported tag: ' + tag); -}; + for (var i = 0; i < 4; i++) { + var Qprime; + try { + Qprime = this.recoverPubKey(e, signature, i); + } catch (e) { + continue; + } -Node.prototype._isNumstr = function isNumstr(str) { - return /^[0-9 ]*$/.test(str); + if (Qprime.eq(Q)) + return i; + } + throw new Error('Unable to find valid recovery factor'); }; -Node.prototype._isPrintstr = function isPrintstr(str) { - return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); -}; +},{"../../elliptic":126,"./key":134,"./signature":135,"bn.js":125}],134:[function(require,module,exports){ +'use strict'; -},{"../base":169,"minimalistic-assert":180}],171:[function(require,module,exports){ -var inherits = require('inherits'); +var BN = require('bn.js'); -function Reporter(options) { - this._reporterState = { - obj: null, - path: [], - options: options || {}, - errors: [] - }; -} -exports.Reporter = Reporter; +function KeyPair(ec, options) { + this.ec = ec; + this.priv = null; + this.pub = null; -Reporter.prototype.isError = function isError(obj) { - return obj instanceof ReporterError; -}; + // KeyPair(ec, { priv: ..., pub: ... }) + if (options.priv) + this._importPrivate(options.priv, options.privEnc); + if (options.pub) + this._importPublic(options.pub, options.pubEnc); +} +module.exports = KeyPair; -Reporter.prototype.save = function save() { - var state = this._reporterState; +KeyPair.fromPublic = function fromPublic(ec, pub, enc) { + if (pub instanceof KeyPair) + return pub; - return { obj: state.obj, pathLen: state.path.length }; + return new KeyPair(ec, { + pub: pub, + pubEnc: enc + }); }; -Reporter.prototype.restore = function restore(data) { - var state = this._reporterState; +KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { + if (priv instanceof KeyPair) + return priv; - state.obj = data.obj; - state.path = state.path.slice(0, data.pathLen); + return new KeyPair(ec, { + priv: priv, + privEnc: enc + }); }; -Reporter.prototype.enterKey = function enterKey(key) { - return this._reporterState.path.push(key); -}; +KeyPair.prototype.validate = function validate() { + var pub = this.getPublic(); -Reporter.prototype.leaveKey = function leaveKey(index, key, value) { - var state = this._reporterState; + if (pub.isInfinity()) + return { result: false, reason: 'Invalid public key' }; + if (!pub.validate()) + return { result: false, reason: 'Public key is not a point' }; + if (!pub.mul(this.ec.curve.n).isInfinity()) + return { result: false, reason: 'Public key * N != O' }; - state.path = state.path.slice(0, index - 1); - if (state.obj !== null) - state.obj[key] = value; + return { result: true, reason: null }; }; -Reporter.prototype.enterObject = function enterObject() { - var state = this._reporterState; +KeyPair.prototype.getPublic = function getPublic(compact, enc) { + // compact is optional argument + if (typeof compact === 'string') { + enc = compact; + compact = null; + } - var prev = state.obj; - state.obj = {}; - return prev; -}; + if (!this.pub) + this.pub = this.ec.g.mul(this.priv); -Reporter.prototype.leaveObject = function leaveObject(prev) { - var state = this._reporterState; + if (!enc) + return this.pub; - var now = state.obj; - state.obj = prev; - return now; + return this.pub.encode(enc, compact); }; -Reporter.prototype.error = function error(msg) { - var err; - var state = this._reporterState; - - var inherited = msg instanceof ReporterError; - if (inherited) { - err = msg; - } else { - err = new ReporterError(state.path.map(function(elem) { - return '[' + JSON.stringify(elem) + ']'; - }).join(''), msg.message || msg, msg.stack); - } - - if (!state.options.partial) - throw err; - - if (!inherited) - state.errors.push(err); - - return err; +KeyPair.prototype.getPrivate = function getPrivate(enc) { + if (enc === 'hex') + return this.priv.toString(16, 2); + else + return this.priv; }; -Reporter.prototype.wrapResult = function wrapResult(result) { - var state = this._reporterState; - if (!state.options.partial) - return result; +KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { + this.priv = new BN(key, enc || 16); - return { - result: this.isError(result) ? null : result, - errors: state.errors - }; + // Ensure that the priv won't be bigger than n, otherwise we may fail + // in fixed multiplication method + this.priv = this.priv.umod(this.ec.curve.n); }; -function ReporterError(path, msg) { - this.path = path; - this.rethrow(msg); +KeyPair.prototype._importPublic = function _importPublic(key, enc) { + if (key.x || key.y) { + this.pub = this.ec.curve.point(key.x, key.y); + return; + } + this.pub = this.ec.curve.decodePoint(key, enc); }; -inherits(ReporterError, Error); -ReporterError.prototype.rethrow = function rethrow(msg) { - this.message = msg + ' at: ' + (this.path || '(shallow)'); - Error.captureStackTrace(this, ReporterError); - - return this; +// ECDH +KeyPair.prototype.derive = function derive(pub) { + return pub.mul(this.priv).getX(); }; -},{"inherits":296}],172:[function(require,module,exports){ -var constants = require('../constants'); - -exports.tagClass = { - 0: 'universal', - 1: 'application', - 2: 'context', - 3: 'private' -}; -exports.tagClassByName = constants._reverse(exports.tagClass); - -exports.tag = { - 0x00: 'end', - 0x01: 'bool', - 0x02: 'int', - 0x03: 'bitstr', - 0x04: 'octstr', - 0x05: 'null_', - 0x06: 'objid', - 0x07: 'objDesc', - 0x08: 'external', - 0x09: 'real', - 0x0a: 'enum', - 0x0b: 'embed', - 0x0c: 'utf8str', - 0x0d: 'relativeOid', - 0x10: 'seq', - 0x11: 'set', - 0x12: 'numstr', - 0x13: 'printstr', - 0x14: 't61str', - 0x15: 'videostr', - 0x16: 'ia5str', - 0x17: 'utctime', - 0x18: 'gentime', - 0x19: 'graphstr', - 0x1a: 'iso646str', - 0x1b: 'genstr', - 0x1c: 'unistr', - 0x1d: 'charstr', - 0x1e: 'bmpstr' -}; -exports.tagByName = constants._reverse(exports.tag); - -},{"../constants":173}],173:[function(require,module,exports){ -var constants = exports; - -// Helper -constants._reverse = function reverse(map) { - var res = {}; - - Object.keys(map).forEach(function(key) { - // Convert key to integer if it is stringified - if ((key | 0) == key) - key = key | 0; - - var value = map[key]; - res[value] = key; - }); - - return res; +// ECDSA +KeyPair.prototype.sign = function sign(msg, enc, options) { + return this.ec.sign(msg, this, enc, options); }; -constants.der = require('./der'); - -},{"./der":172}],174:[function(require,module,exports){ -var inherits = require('inherits'); - -var asn1 = require('../../asn1'); -var base = asn1.base; -var bignum = asn1.bignum; - -// Import DER constants -var der = asn1.constants.der; - -function DERDecoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; - - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); +KeyPair.prototype.verify = function verify(msg, signature) { + return this.ec.verify(msg, signature, this); }; -module.exports = DERDecoder; - -DERDecoder.prototype.decode = function decode(data, options) { - if (!(data instanceof base.DecoderBuffer)) - data = new base.DecoderBuffer(data, options); - return this.tree._decode(data, options); +KeyPair.prototype.inspect = function inspect() { + return ''; }; -// Tree methods - -function DERNode(parent) { - base.Node.call(this, 'der', parent); -} -inherits(DERNode, base.Node); +},{"bn.js":125}],135:[function(require,module,exports){ +'use strict'; -DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { - if (buffer.isEmpty()) - return false; +var BN = require('bn.js'); - var state = buffer.save(); - var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; - buffer.restore(state); +function Signature(options, enc) { + if (options instanceof Signature) + return options; - return decodedTag.tag === tag || decodedTag.tagStr === tag || any; -}; + if (this._importDER(options, enc)) + return; -DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { - var decodedTag = derDecodeTag(buffer, - 'Failed to decode tag of "' + tag + '"'); - if (buffer.isError(decodedTag)) - return decodedTag; + assert(options.r && options.s, 'Signature without r or s'); + this.r = new BN(options.r, 16); + this.s = new BN(options.s, 16); + if (options.recoveryParam === undefined) + this.recoveryParam = null; + else + this.recoveryParam = options.recoveryParam; +} +module.exports = Signature; - var len = derDecodeLen(buffer, - decodedTag.primitive, - 'Failed to get length of "' + tag + '"'); +function Position() { + this.place = 0; +} - // Failure - if (buffer.isError(len)) - return len; +function getLength(buf, p) { + var initial = buf[p.place++]; + if (!(initial & 0x80)) { + return initial; + } + var octetLen = initial & 0xf; + var val = 0; + for (var i = 0, off = p.place; i < octetLen; i++, off++) { + val <<= 8; + val |= buf[off]; + } + p.place = off; + return val; +} - if (!any && - decodedTag.tag !== tag && - decodedTag.tagStr !== tag && - decodedTag.tagStr + 'of' !== tag) { - return buffer.error('Failed to match tag: "' + tag + '"'); +function rmPadding(buf) { + var i = 0; + var len = buf.length - 1; + while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { + i++; } + if (i === 0) { + return buf; + } + return buf.slice(i); +} - if (decodedTag.primitive || len !== null) - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + var p = new Position(); + if (data[p.place++] !== 0x30) { + return false; + } + var len = getLength(data, p); + if ((len + p.place) !== data.length) { + return false; + } + if (data[p.place++] !== 0x02) { + return false; + } + var rlen = getLength(data, p); + var r = data.slice(p.place, rlen + p.place); + p.place += rlen; + if (data[p.place++] !== 0x02) { + return false; + } + var slen = getLength(data, p); + if (data.length !== slen + p.place) { + return false; + } + var s = data.slice(p.place, slen + p.place); + if (r[0] === 0 && (r[1] & 0x80)) { + r = r.slice(1); + } + if (s[0] === 0 && (s[1] & 0x80)) { + s = s.slice(1); + } - // Indefinite length... find END tag - var state = buffer.save(); - var res = this._skipUntilEnd( - buffer, - 'Failed to skip indefinite length body: "' + this.tag + '"'); - if (buffer.isError(res)) - return res; + this.r = new BN(r); + this.s = new BN(s); + this.recoveryParam = null; - len = buffer.offset - state.offset; - buffer.restore(state); - return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); + return true; }; -DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { - while (true) { - var tag = derDecodeTag(buffer, fail); - if (buffer.isError(tag)) - return tag; - var len = derDecodeLen(buffer, tag.primitive, fail); - if (buffer.isError(len)) - return len; - - var res; - if (tag.primitive || len !== null) - res = buffer.skip(len) - else - res = this._skipUntilEnd(buffer, fail); - - // Failure - if (buffer.isError(res)) - return res; - - if (tag.tagStr === 'end') - break; +function constructLength(arr, len) { + if (len < 0x80) { + arr.push(len); + return; } -}; - -DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder) { - var result = []; - while (!buffer.isEmpty()) { - var possibleEnd = this._peekTag(buffer, 'end'); - if (buffer.isError(possibleEnd)) - return possibleEnd; - - var res = decoder.decode(buffer, 'der'); - if (buffer.isError(res) && possibleEnd) - break; - result.push(res); + var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); + arr.push(octets | 0x80); + while (--octets) { + arr.push((len >>> (octets << 3)) & 0xff); } - return result; -}; - -DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { - if (tag === 'octstr') { - return buffer.raw(); - } else if (tag === 'bitstr') { - var unused = buffer.readUInt8(); - if (buffer.isError(unused)) - return unused; + arr.push(len); +} - return { unused: unused, data: buffer.raw() }; - } else if (tag === 'ia5str' || tag === 'utf8str') { - return buffer.raw().toString(); - } else if(tag === 'numstr') { - var numstr = buffer.raw().toString('ascii'); - if (!this._isNumstr(numstr)) { - return buffer.error('Decoding of string type: ' + - 'numstr unsupported characters'); - } +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); - return numstr; - } else if (tag === 'printstr') { - var printstr = buffer.raw().toString('ascii'); - if (!this._isPrintstr(printstr)) { - return buffer.error('Decoding of string type: ' + - 'printstr unsupported characters'); - } + // Pad values + if (r[0] & 0x80) + r = [ 0 ].concat(r); + // Pad values + if (s[0] & 0x80) + s = [ 0 ].concat(s); - return printstr; - } else if(tag === 'bmpstr') { - var raw = buffer.raw(); - if (raw.length % 2 === 1) - return buffer.error('Decoding of string type: bmpstr length mismatch'); + r = rmPadding(r); + s = rmPadding(s); - var str = ''; - for (var i = 0; i < raw.length / 2; i++) { - str += String.fromCharCode(raw.readUInt16BE(i * 2)); - } - return str; - } else { - return buffer.error('Decoding of string type: ' + tag + ' unsupported'); + while (!s[0] && !(s[1] & 0x80)) { + s = s.slice(1); } + var arr = [ 0x02 ]; + constructLength(arr, r.length); + arr = arr.concat(r); + arr.push(0x02); + constructLength(arr, s.length); + var backHalf = arr.concat(s); + var res = [ 0x30 ]; + constructLength(res, backHalf.length); + res = res.concat(backHalf); + return utils.encode(res, enc); }; -DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { - var result; - var identifiers = []; - var ident = 0; - while (!buffer.isEmpty()) { - var subident = buffer.readUInt8(); - ident <<= 7; - ident |= subident & 0x7f; - if ((subident & 0x80) === 0) { - identifiers.push(ident); - ident = 0; - } - } - if (subident & 0x80) - identifiers.push(ident); +},{"../../elliptic":126,"bn.js":125}],136:[function(require,module,exports){ +'use strict'; - var first = (identifiers[0] / 40) | 0; - var second = identifiers[0] % 40; +var hash = require('hash.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var KeyPair = require('./key'); +var Signature = require('./signature'); - if (relative) - result = identifiers; - else - result = [first, second].concat(identifiers.slice(1)); +function EDDSA(curve) { + assert(curve === 'ed25519', 'only tested with ed25519 so far'); - if (values) { - var tmp = values[result.join(' ')]; - if (tmp === undefined) - tmp = values[result.join('.')]; - if (tmp !== undefined) - result = tmp; - } + if (!(this instanceof EDDSA)) + return new EDDSA(curve); - return result; -}; + var curve = elliptic.curves[curve].curve; + this.curve = curve; + this.g = curve.g; + this.g.precompute(curve.n.bitLength() + 1); -DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { - var str = buffer.raw().toString(); - if (tag === 'gentime') { - var year = str.slice(0, 4) | 0; - var mon = str.slice(4, 6) | 0; - var day = str.slice(6, 8) | 0; - var hour = str.slice(8, 10) | 0; - var min = str.slice(10, 12) | 0; - var sec = str.slice(12, 14) | 0; - } else if (tag === 'utctime') { - var year = str.slice(0, 2) | 0; - var mon = str.slice(2, 4) | 0; - var day = str.slice(4, 6) | 0; - var hour = str.slice(6, 8) | 0; - var min = str.slice(8, 10) | 0; - var sec = str.slice(10, 12) | 0; - if (year < 70) - year = 2000 + year; - else - year = 1900 + year; - } else { - return buffer.error('Decoding ' + tag + ' time is not supported yet'); - } + this.pointClass = curve.point().constructor; + this.encodingLength = Math.ceil(curve.n.bitLength() / 8); + this.hash = hash.sha512; +} - return Date.UTC(year, mon - 1, day, hour, min, sec, 0); -}; +module.exports = EDDSA; -DERNode.prototype._decodeNull = function decodeNull(buffer) { - return null; +/** +* @param {Array|String} message - message bytes +* @param {Array|String|KeyPair} secret - secret bytes or a keypair +* @returns {Signature} - signature +*/ +EDDSA.prototype.sign = function sign(message, secret) { + message = parseBytes(message); + var key = this.keyFromSecret(secret); + var r = this.hashInt(key.messagePrefix(), message); + var R = this.g.mul(r); + var Rencoded = this.encodePoint(R); + var s_ = this.hashInt(Rencoded, key.pubBytes(), message) + .mul(key.priv()); + var S = r.add(s_).umod(this.curve.n); + return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); }; -DERNode.prototype._decodeBool = function decodeBool(buffer) { - var res = buffer.readUInt8(); - if (buffer.isError(res)) - return res; - else - return res !== 0; +/** +* @param {Array} message - message bytes +* @param {Array|String|Signature} sig - sig bytes +* @param {Array|String|Point|KeyPair} pub - public key +* @returns {Boolean} - true if public key matches sig of message +*/ +EDDSA.prototype.verify = function verify(message, sig, pub) { + message = parseBytes(message); + sig = this.makeSignature(sig); + var key = this.keyFromPublic(pub); + var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); + var SG = this.g.mul(sig.S()); + var RplusAh = sig.R().add(key.pub().mul(h)); + return RplusAh.eq(SG); }; -DERNode.prototype._decodeInt = function decodeInt(buffer, values) { - // Bigint, return as it is (assume big endian) - var raw = buffer.raw(); - var res = new bignum(raw); - - if (values) - res = values[res.toString(10)] || res; - - return res; +EDDSA.prototype.hashInt = function hashInt() { + var hash = this.hash(); + for (var i = 0; i < arguments.length; i++) + hash.update(arguments[i]); + return utils.intFromLE(hash.digest()).umod(this.curve.n); }; -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getDecoder('der').tree; +EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { + return KeyPair.fromPublic(this, pub); }; -// Utility methods +EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { + return KeyPair.fromSecret(this, secret); +}; -function derDecodeTag(buf, fail) { - var tag = buf.readUInt8(fail); - if (buf.isError(tag)) - return tag; +EDDSA.prototype.makeSignature = function makeSignature(sig) { + if (sig instanceof Signature) + return sig; + return new Signature(this, sig); +}; - var cls = der.tagClass[tag >> 6]; - var primitive = (tag & 0x20) === 0; +/** +* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 +* +* EDDSA defines methods for encoding and decoding points and integers. These are +* helper convenience methods, that pass along to utility functions implied +* parameters. +* +*/ +EDDSA.prototype.encodePoint = function encodePoint(point) { + var enc = point.getY().toArray('le', this.encodingLength); + enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; + return enc; +}; - // Multi-octet tag - load - if ((tag & 0x1f) === 0x1f) { - var oct = tag; - tag = 0; - while ((oct & 0x80) === 0x80) { - oct = buf.readUInt8(fail); - if (buf.isError(oct)) - return oct; +EDDSA.prototype.decodePoint = function decodePoint(bytes) { + bytes = utils.parseBytes(bytes); - tag <<= 7; - tag |= oct & 0x7f; - } - } else { - tag &= 0x1f; - } - var tagStr = der.tag[tag]; + var lastIx = bytes.length - 1; + var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); + var xIsOdd = (bytes[lastIx] & 0x80) !== 0; - return { - cls: cls, - primitive: primitive, - tag: tag, - tagStr: tagStr - }; -} + var y = utils.intFromLE(normed); + return this.curve.pointFromY(y, xIsOdd); +}; -function derDecodeLen(buf, primitive, fail) { - var len = buf.readUInt8(fail); - if (buf.isError(len)) - return len; +EDDSA.prototype.encodeInt = function encodeInt(num) { + return num.toArray('le', this.encodingLength); +}; - // Indefinite form - if (!primitive && len === 0x80) - return null; +EDDSA.prototype.decodeInt = function decodeInt(bytes) { + return utils.intFromLE(bytes); +}; - // Definite form - if ((len & 0x80) === 0) { - // Short form - return len; - } +EDDSA.prototype.isPoint = function isPoint(val) { + return val instanceof this.pointClass; +}; - // Long form - var num = len & 0x7f; - if (num >= 4) - return buf.error('length octect is too long'); +},{"../../elliptic":126,"./key":137,"./signature":138,"hash.js":219}],137:[function(require,module,exports){ +'use strict'; - len = 0; - for (var i = 0; i < num; i++) { - len <<= 8; - var j = buf.readUInt8(fail); - if (buf.isError(j)) - return j; - len |= j; - } +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; +var parseBytes = utils.parseBytes; +var cachedProperty = utils.cachedProperty; - return len; +/** +* @param {EDDSA} eddsa - instance +* @param {Object} params - public/private key parameters +* +* @param {Array} [params.secret] - secret seed bytes +* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) +* @param {Array} [params.pub] - public key point encoded as bytes +* +*/ +function KeyPair(eddsa, params) { + this.eddsa = eddsa; + this._secret = parseBytes(params.secret); + if (eddsa.isPoint(params.pub)) + this._pub = params.pub; + else + this._pubBytes = parseBytes(params.pub); } -},{"../../asn1":166,"inherits":296}],175:[function(require,module,exports){ -var decoders = exports; - -decoders.der = require('./der'); -decoders.pem = require('./pem'); - -},{"./der":174,"./pem":176}],176:[function(require,module,exports){ -var inherits = require('inherits'); -var Buffer = require('buffer').Buffer; - -var asn1 = require('../../asn1'); -var DERDecoder = require('./der'); - -function PEMDecoder(entity) { - DERDecoder.call(this, entity); - this.enc = 'pem'; +KeyPair.fromPublic = function fromPublic(eddsa, pub) { + if (pub instanceof KeyPair) + return pub; + return new KeyPair(eddsa, { pub: pub }); }; -inherits(PEMDecoder, DERDecoder); -module.exports = PEMDecoder; - -PEMDecoder.prototype.decode = function decode(data, options) { - var lines = data.toString().split(/[\r\n]+/g); - var label = options.label.toUpperCase(); +KeyPair.fromSecret = function fromSecret(eddsa, secret) { + if (secret instanceof KeyPair) + return secret; + return new KeyPair(eddsa, { secret: secret }); +}; - var re = /^-----(BEGIN|END) ([^-]+)-----$/; - var start = -1; - var end = -1; - for (var i = 0; i < lines.length; i++) { - var match = lines[i].match(re); - if (match === null) - continue; +KeyPair.prototype.secret = function secret() { + return this._secret; +}; - if (match[2] !== label) - continue; +cachedProperty(KeyPair, function pubBytes() { + return this.eddsa.encodePoint(this.pub()); +}); - if (start === -1) { - if (match[1] !== 'BEGIN') - break; - start = i; - } else { - if (match[1] !== 'END') - break; - end = i; - break; - } - } - if (start === -1 || end === -1) - throw new Error('PEM section not found for: ' + label); +cachedProperty(KeyPair, function pub() { + if (this._pubBytes) + return this.eddsa.decodePoint(this._pubBytes); + return this.eddsa.g.mul(this.priv()); +}); - var base64 = lines.slice(start + 1, end).join(''); - // Remove excessive symbols - base64.replace(/[^a-z0-9\+\/=]+/gi, ''); +cachedProperty(KeyPair, function privBytes() { + var eddsa = this.eddsa; + var hash = this.hash(); + var lastIx = eddsa.encodingLength - 1; - var input = new Buffer(base64, 'base64'); - return DERDecoder.prototype.decode.call(this, input, options); -}; + var a = hash.slice(0, eddsa.encodingLength); + a[0] &= 248; + a[lastIx] &= 127; + a[lastIx] |= 64; -},{"../../asn1":166,"./der":174,"buffer":99,"inherits":296}],177:[function(require,module,exports){ -var inherits = require('inherits'); -var Buffer = require('buffer').Buffer; + return a; +}); -var asn1 = require('../../asn1'); -var base = asn1.base; -var bignum = asn1.bignum; +cachedProperty(KeyPair, function priv() { + return this.eddsa.decodeInt(this.privBytes()); +}); -// Import DER constants -var der = asn1.constants.der; +cachedProperty(KeyPair, function hash() { + return this.eddsa.hash().update(this.secret()).digest(); +}); -function DEREncoder(entity) { - this.enc = 'der'; - this.name = entity.name; - this.entity = entity; +cachedProperty(KeyPair, function messagePrefix() { + return this.hash().slice(this.eddsa.encodingLength); +}); - // Construct base tree - this.tree = new DERNode(); - this.tree._init(entity.body); +KeyPair.prototype.sign = function sign(message) { + assert(this._secret, 'KeyPair can only verify'); + return this.eddsa.sign(message, this); }; -module.exports = DEREncoder; -DEREncoder.prototype.encode = function encode(data, reporter) { - return this.tree._encode(data, reporter).join(); +KeyPair.prototype.verify = function verify(message, sig) { + return this.eddsa.verify(message, sig, this); }; -// Tree methods - -function DERNode(parent) { - base.Node.call(this, 'der', parent); -} -inherits(DERNode, base.Node); - -DERNode.prototype._encodeComposite = function encodeComposite(tag, - primitive, - cls, - content) { - var encodedTag = encodeTag(tag, primitive, cls, this.reporter); - - // Short form - if (content.length < 0x80) { - var header = new Buffer(2); - header[0] = encodedTag; - header[1] = content.length; - return this._createEncoderBuffer([ header, content ]); - } - - // Long form - // Count octets required to store length - var lenOctets = 1; - for (var i = content.length; i >= 0x100; i >>= 8) - lenOctets++; +KeyPair.prototype.getSecret = function getSecret(enc) { + assert(this._secret, 'KeyPair is public only'); + return utils.encode(this.secret(), enc); +}; - var header = new Buffer(1 + 1 + lenOctets); - header[0] = encodedTag; - header[1] = 0x80 | lenOctets; +KeyPair.prototype.getPublic = function getPublic(enc) { + return utils.encode(this.pubBytes(), enc); +}; - for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) - header[i] = j & 0xff; +module.exports = KeyPair; - return this._createEncoderBuffer([ header, content ]); -}; +},{"../../elliptic":126}],138:[function(require,module,exports){ +'use strict'; -DERNode.prototype._encodeStr = function encodeStr(str, tag) { - if (tag === 'octstr') { - return this._createEncoderBuffer(str); - } else if (tag === 'bitstr') { - return this._createEncoderBuffer([ str.unused | 0, str.data ]); - } else if (tag === 'ia5str' || tag === 'utf8str') { - return this._createEncoderBuffer(str); - } else if (tag === 'bmpstr') { - var buf = new Buffer(str.length * 2); - for (var i = 0; i < str.length; i++) { - buf.writeUInt16BE(str.charCodeAt(i), i * 2); - } - return this._createEncoderBuffer(buf); - } else if (tag === 'numstr') { - if (!this._isNumstr(str)) { - return this.reporter.error('Encoding of string type: numstr supports ' + - 'only digits and space'); - } +var BN = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; +var cachedProperty = utils.cachedProperty; +var parseBytes = utils.parseBytes; - return this._createEncoderBuffer(str); - } else if (tag === 'printstr') { - if (!this._isPrintstr(str)) { - return this.reporter.error('Encoding of string type: printstr supports ' + - 'only latin upper and lower case letters, ' + - 'digits, space, apostrophe, left and rigth ' + - 'parenthesis, plus sign, comma, hyphen, ' + - 'dot, slash, colon, equal sign, ' + - 'question mark'); - } +/** +* @param {EDDSA} eddsa - eddsa instance +* @param {Array|Object} sig - +* @param {Array|Point} [sig.R] - R point as Point or bytes +* @param {Array|bn} [sig.S] - S scalar as bn or bytes +* @param {Array} [sig.Rencoded] - R point encoded +* @param {Array} [sig.Sencoded] - S scalar encoded +*/ +function Signature(eddsa, sig) { + this.eddsa = eddsa; - return this._createEncoderBuffer(str); - } else { - return this.reporter.error('Encoding of string type: ' + tag + - ' unsupported'); - } -}; + if (typeof sig !== 'object') + sig = parseBytes(sig); -DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { - if (typeof id === 'string') { - if (!values) - return this.reporter.error('string objid given, but no values map found'); - if (!values.hasOwnProperty(id)) - return this.reporter.error('objid not found in values map'); - id = values[id].split(/[\s\.]+/g); - for (var i = 0; i < id.length; i++) - id[i] |= 0; - } else if (Array.isArray(id)) { - id = id.slice(); - for (var i = 0; i < id.length; i++) - id[i] |= 0; + if (Array.isArray(sig)) { + sig = { + R: sig.slice(0, eddsa.encodingLength), + S: sig.slice(eddsa.encodingLength) + }; } - if (!Array.isArray(id)) { - return this.reporter.error('objid() should be either array or string, ' + - 'got: ' + JSON.stringify(id)); - } + assert(sig.R && sig.S, 'Signature without R or S'); - if (!relative) { - if (id[1] >= 40) - return this.reporter.error('Second objid identifier OOB'); - id.splice(0, 2, id[0] * 40 + id[1]); - } + if (eddsa.isPoint(sig.R)) + this._R = sig.R; + if (sig.S instanceof BN) + this._S = sig.S; - // Count number of octets - var size = 0; - for (var i = 0; i < id.length; i++) { - var ident = id[i]; - for (size++; ident >= 0x80; ident >>= 7) - size++; - } + this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; + this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; +} - var objid = new Buffer(size); - var offset = objid.length - 1; - for (var i = id.length - 1; i >= 0; i--) { - var ident = id[i]; - objid[offset--] = ident & 0x7f; - while ((ident >>= 7) > 0) - objid[offset--] = 0x80 | (ident & 0x7f); - } +cachedProperty(Signature, function S() { + return this.eddsa.decodeInt(this.Sencoded()); +}); - return this._createEncoderBuffer(objid); -}; +cachedProperty(Signature, function R() { + return this.eddsa.decodePoint(this.Rencoded()); +}); -function two(num) { - if (num < 10) - return '0' + num; - else - return num; -} +cachedProperty(Signature, function Rencoded() { + return this.eddsa.encodePoint(this.R()); +}); -DERNode.prototype._encodeTime = function encodeTime(time, tag) { - var str; - var date = new Date(time); - - if (tag === 'gentime') { - str = [ - two(date.getFullYear()), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else if (tag === 'utctime') { - str = [ - two(date.getFullYear() % 100), - two(date.getUTCMonth() + 1), - two(date.getUTCDate()), - two(date.getUTCHours()), - two(date.getUTCMinutes()), - two(date.getUTCSeconds()), - 'Z' - ].join(''); - } else { - this.reporter.error('Encoding ' + tag + ' time is not supported yet'); - } +cachedProperty(Signature, function Sencoded() { + return this.eddsa.encodeInt(this.S()); +}); - return this._encodeStr(str, 'octstr'); +Signature.prototype.toBytes = function toBytes() { + return this.Rencoded().concat(this.Sencoded()); }; -DERNode.prototype._encodeNull = function encodeNull() { - return this._createEncoderBuffer(''); +Signature.prototype.toHex = function toHex() { + return utils.encode(this.toBytes(), 'hex').toUpperCase(); }; -DERNode.prototype._encodeInt = function encodeInt(num, values) { - if (typeof num === 'string') { - if (!values) - return this.reporter.error('String int or enum given, but no values map'); - if (!values.hasOwnProperty(num)) { - return this.reporter.error('Values map doesn\'t contain: ' + - JSON.stringify(num)); - } - num = values[num]; - } - - // Bignum, assume big endian - if (typeof num !== 'number' && !Buffer.isBuffer(num)) { - var numArray = num.toArray(); - if (!num.sign && numArray[0] & 0x80) { - numArray.unshift(0); - } - num = new Buffer(numArray); - } - - if (Buffer.isBuffer(num)) { - var size = num.length; - if (num.length === 0) - size++; - - var out = new Buffer(size); - num.copy(out); - if (num.length === 0) - out[0] = 0 - return this._createEncoderBuffer(out); - } +module.exports = Signature; - if (num < 0x80) - return this._createEncoderBuffer(num); +},{"../../elliptic":126,"bn.js":125}],139:[function(require,module,exports){ +arguments[4][68][0].apply(exports,arguments) +},{"../elliptic":126,"dup":68,"hash.js":219}],140:[function(require,module,exports){ +arguments[4][69][0].apply(exports,arguments) +},{"dup":69}],141:[function(require,module,exports){ +'use strict'; - if (num < 0x100) - return this._createEncoderBuffer([0, num]); +var utils = exports; +var BN = require('bn.js'); - var size = 1; - for (var i = num; i >= 0x100; i >>= 8) - size++; +utils.assert = function assert(val, msg) { + if (!val) + throw new Error(msg || 'Assertion failed'); +}; - var out = new Array(size); - for (var i = out.length - 1; i >= 0; i--) { - out[i] = num & 0xff; - num >>= 8; +function toArray(msg, enc) { + if (Array.isArray(msg)) + return msg.slice(); + if (!msg) + return []; + var res = []; + if (typeof msg !== 'string') { + for (var i = 0; i < msg.length; i++) + res[i] = msg[i] | 0; + return res; } - if(out[0] & 0x80) { - out.unshift(0); + if (!enc) { + for (var i = 0; i < msg.length; i++) { + var c = msg.charCodeAt(i); + var hi = c >> 8; + var lo = c & 0xff; + if (hi) + res.push(hi, lo); + else + res.push(lo); + } + } else if (enc === 'hex') { + msg = msg.replace(/[^a-z0-9]+/ig, ''); + if (msg.length % 2 !== 0) + msg = '0' + msg; + for (var i = 0; i < msg.length; i += 2) + res.push(parseInt(msg[i] + msg[i + 1], 16)); } + return res; +} +utils.toArray = toArray; - return this._createEncoderBuffer(new Buffer(out)); -}; +function zero2(word) { + if (word.length === 1) + return '0' + word; + else + return word; +} +utils.zero2 = zero2; -DERNode.prototype._encodeBool = function encodeBool(value) { - return this._createEncoderBuffer(value ? 0xff : 0); -}; +function toHex(msg) { + var res = ''; + for (var i = 0; i < msg.length; i++) + res += zero2(msg[i].toString(16)); + return res; +} +utils.toHex = toHex; -DERNode.prototype._use = function use(entity, obj) { - if (typeof entity === 'function') - entity = entity(obj); - return entity._getEncoder('der').tree; +utils.encode = function encode(arr, enc) { + if (enc === 'hex') + return toHex(arr); + else + return arr; }; -DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { - var state = this._baseState; - var i; - if (state['default'] === null) - return false; - - var data = dataBuffer.join(); - if (state.defaultBuffer === undefined) - state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); - - if (data.length !== state.defaultBuffer.length) - return false; - - for (i=0; i < data.length; i++) - if (data[i] !== state.defaultBuffer[i]) - return false; - - return true; -}; +// Represent num in a w-NAF form +function getNAF(num, w) { + var naf = []; + var ws = 1 << (w + 1); + var k = num.clone(); + while (k.cmpn(1) >= 0) { + var z; + if (k.isOdd()) { + var mod = k.andln(ws - 1); + if (mod > (ws >> 1) - 1) + z = (ws >> 1) - mod; + else + z = mod; + k.isubn(z); + } else { + z = 0; + } + naf.push(z); -// Utility methods + // Optimization, shift by word if possible + var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; + for (var i = 1; i < shift; i++) + naf.push(0); + k.iushrn(shift); + } -function encodeTag(tag, primitive, cls, reporter) { - var res; + return naf; +} +utils.getNAF = getNAF; - if (tag === 'seqof') - tag = 'seq'; - else if (tag === 'setof') - tag = 'set'; +// Represent k1, k2 in a Joint Sparse Form +function getJSF(k1, k2) { + var jsf = [ + [], + [] + ]; - if (der.tagByName.hasOwnProperty(tag)) - res = der.tagByName[tag]; - else if (typeof tag === 'number' && (tag | 0) === tag) - res = tag; - else - return reporter.error('Unknown tag: ' + tag); + k1 = k1.clone(); + k2 = k2.clone(); + var d1 = 0; + var d2 = 0; + while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { - if (res >= 0x1f) - return reporter.error('Multi-octet tag encoding unsupported'); + // First phase + var m14 = (k1.andln(3) + d1) & 3; + var m24 = (k2.andln(3) + d2) & 3; + if (m14 === 3) + m14 = -1; + if (m24 === 3) + m24 = -1; + var u1; + if ((m14 & 1) === 0) { + u1 = 0; + } else { + var m8 = (k1.andln(7) + d1) & 7; + if ((m8 === 3 || m8 === 5) && m24 === 2) + u1 = -m14; + else + u1 = m14; + } + jsf[0].push(u1); - if (!primitive) - res |= 0x20; + var u2; + if ((m24 & 1) === 0) { + u2 = 0; + } else { + var m8 = (k2.andln(7) + d2) & 7; + if ((m8 === 3 || m8 === 5) && m14 === 2) + u2 = -m24; + else + u2 = m24; + } + jsf[1].push(u2); - res |= (der.tagClassByName[cls || 'universal'] << 6); + // Second phase + if (2 * d1 === u1 + 1) + d1 = 1 - d1; + if (2 * d2 === u2 + 1) + d2 = 1 - d2; + k1.iushrn(1); + k2.iushrn(1); + } - return res; + return jsf; } +utils.getJSF = getJSF; -},{"../../asn1":166,"buffer":99,"inherits":296}],178:[function(require,module,exports){ -var encoders = exports; - -encoders.der = require('./der'); -encoders.pem = require('./pem'); - -},{"./der":177,"./pem":179}],179:[function(require,module,exports){ -var inherits = require('inherits'); -var Buffer = require('buffer').Buffer; +function cachedProperty(obj, computer) { + var name = computer.name; + var key = '_' + name; + obj.prototype[name] = function cachedProperty() { + return this[key] !== undefined ? this[key] : + this[key] = computer.call(this); + }; +} +utils.cachedProperty = cachedProperty; -var asn1 = require('../../asn1'); -var DEREncoder = require('./der'); +function parseBytes(bytes) { + return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : + bytes; +} +utils.parseBytes = parseBytes; -function PEMEncoder(entity) { - DEREncoder.call(this, entity); - this.enc = 'pem'; -}; -inherits(PEMEncoder, DEREncoder); -module.exports = PEMEncoder; +function intFromLE(bytes) { + return new BN(bytes, 'hex', 'le'); +} +utils.intFromLE = intFromLE; -PEMEncoder.prototype.encode = function encode(data, options) { - var buf = DEREncoder.prototype.encode.call(this, data); - var p = buf.toString('base64'); - var out = [ '-----BEGIN ' + options.label + '-----' ]; - for (var i = 0; i < p.length; i += 64) - out.push(p.slice(i, i + 64)); - out.push('-----END ' + options.label + '-----'); - return out.join('\n'); -}; +},{"bn.js":125}],142:[function(require,module,exports){ +module.exports={ + "_args": [ + [ + "elliptic@^6.0.0", + "/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/browserify-sign" + ] + ], + "_from": "elliptic@>=6.0.0 <7.0.0", + "_id": "elliptic@6.2.3", + "_inCache": true, + "_installable": true, + "_location": "/browserify-sign/elliptic", + "_nodeVersion": "5.4.1", + "_npmUser": { + "email": "fedor@indutny.com", + "name": "indutny" + }, + "_npmVersion": "3.3.12", + "_phantomChildren": {}, + "_requested": { + "name": "elliptic", + "raw": "elliptic@^6.0.0", + "rawSpec": "^6.0.0", + "scope": null, + "spec": ">=6.0.0 <7.0.0", + "type": "range" + }, + "_requiredBy": [ + "/browserify-sign" + ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz", + "_shasum": "18e46d7306b0951275a2d42063270a14b74ebe99", + "_shrinkwrap": null, + "_spec": "elliptic@^6.0.0", + "_where": "/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/browserify-sign", + "author": { + "email": "fedor@indutny.com", + "name": "Fedor Indutny" + }, + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" + }, + "description": "EC cryptography", + "devDependencies": { + "coveralls": "^2.11.3", + "istanbul": "^0.4.2", + "jscs": "^2.9.0", + "jshint": "^2.6.0", + "mocha": "^2.1.0" + }, + "directories": {}, + "dist": { + "shasum": "18e46d7306b0951275a2d42063270a14b74ebe99", + "tarball": "http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz" + }, + "files": [ + "lib" + ], + "gitHead": "c32f20b22b420eb6af3c6dda28963deb7facf823", + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "Cryptography", + "EC", + "Elliptic", + "curve" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "maintainers": [ + { + "name": "indutny", + "email": "fedor@indutny.com" + } + ], + "name": "elliptic", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" + }, + "scripts": { + "coverage": "npm run unit --coverage", + "coveralls": "npm run coverage && cat ./coverage/lcov.info | coveralls", + "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", + "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", + "lint": "npm run jscs && npm run jshint", + "test": "npm run lint && npm run unit", + "unit": "istanbul test _mocha --reporter=spec test/*-test.js" + }, + "version": "6.2.3" +} -},{"../../asn1":166,"./der":177,"buffer":99,"inherits":296}],180:[function(require,module,exports){ -arguments[4][131][0].apply(exports,arguments) -},{"dup":131}],181:[function(require,module,exports){ -arguments[4][105][0].apply(exports,arguments) -},{"buffer":99,"dup":105}],182:[function(require,module,exports){ -arguments[4][106][0].apply(exports,arguments) -},{"./aes":181,"./ghash":186,"buffer":99,"buffer-xor":195,"cipher-base":196,"dup":106,"inherits":296}],183:[function(require,module,exports){ -arguments[4][107][0].apply(exports,arguments) -},{"./decrypter":184,"./encrypter":185,"./modes":187,"dup":107}],184:[function(require,module,exports){ -arguments[4][108][0].apply(exports,arguments) -},{"./aes":181,"./authCipher":182,"./modes":187,"./modes/cbc":188,"./modes/cfb":189,"./modes/cfb1":190,"./modes/cfb8":191,"./modes/ctr":192,"./modes/ecb":193,"./modes/ofb":194,"./streamCipher":197,"buffer":99,"cipher-base":196,"dup":108,"evp_bytestokey":198,"inherits":296}],185:[function(require,module,exports){ -arguments[4][109][0].apply(exports,arguments) -},{"./aes":181,"./authCipher":182,"./modes":187,"./modes/cbc":188,"./modes/cfb":189,"./modes/cfb1":190,"./modes/cfb8":191,"./modes/ctr":192,"./modes/ecb":193,"./modes/ofb":194,"./streamCipher":197,"buffer":99,"cipher-base":196,"dup":109,"evp_bytestokey":198,"inherits":296}],186:[function(require,module,exports){ -arguments[4][110][0].apply(exports,arguments) -},{"buffer":99,"dup":110}],187:[function(require,module,exports){ -arguments[4][111][0].apply(exports,arguments) -},{"dup":111}],188:[function(require,module,exports){ -arguments[4][112][0].apply(exports,arguments) -},{"buffer-xor":195,"dup":112}],189:[function(require,module,exports){ -arguments[4][113][0].apply(exports,arguments) -},{"buffer":99,"buffer-xor":195,"dup":113}],190:[function(require,module,exports){ -arguments[4][114][0].apply(exports,arguments) -},{"buffer":99,"dup":114}],191:[function(require,module,exports){ -arguments[4][115][0].apply(exports,arguments) -},{"buffer":99,"dup":115}],192:[function(require,module,exports){ -arguments[4][116][0].apply(exports,arguments) -},{"buffer":99,"buffer-xor":195,"dup":116}],193:[function(require,module,exports){ -arguments[4][117][0].apply(exports,arguments) -},{"dup":117}],194:[function(require,module,exports){ -arguments[4][118][0].apply(exports,arguments) -},{"buffer":99,"buffer-xor":195,"dup":118}],195:[function(require,module,exports){ -arguments[4][119][0].apply(exports,arguments) -},{"buffer":99,"dup":119}],196:[function(require,module,exports){ -arguments[4][120][0].apply(exports,arguments) -},{"buffer":99,"dup":120,"inherits":296,"stream":315,"string_decoder":316}],197:[function(require,module,exports){ -arguments[4][121][0].apply(exports,arguments) -},{"./aes":181,"buffer":99,"cipher-base":196,"dup":121,"inherits":296}],198:[function(require,module,exports){ -arguments[4][132][0].apply(exports,arguments) -},{"buffer":99,"create-hash/md5":229,"dup":132}],199:[function(require,module,exports){ +},{}],143:[function(require,module,exports){ (function (Buffer){ // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js var createHmac = require('create-hmac') @@ -46771,33052 +44185,25250 @@ function makeKey (q, kv, algo) { .digest() } while (k.cmp(q) !== -1) - return k + return k +} + +function makeR (g, k, p, q) { + return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q) +} + +module.exports = sign +module.exports.getKey = getKey +module.exports.makeKey = makeKey + +}).call(this,require("buffer").Buffer) +},{"./curves":124,"bn.js":125,"browserify-rsa":119,"buffer":147,"create-hmac":173,"elliptic":126,"parse-asn1":145}],144:[function(require,module,exports){ +(function (Buffer){ +// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js +var curves = require('./curves') +var elliptic = require('elliptic') +var parseKeys = require('parse-asn1') + +var BN = require('bn.js') +var EC = elliptic.ec + +function verify (sig, hash, key, signType) { + var pub = parseKeys(key) + if (pub.type === 'ec') { + if (signType !== 'ecdsa') { + throw new Error('wrong public key type') + } + return ecVerify(sig, hash, pub) + } else if (pub.type === 'dsa') { + if (signType !== 'dsa') { + throw new Error('wrong public key type') + } + return dsaVerify(sig, hash, pub) + } else { + if (signType !== 'rsa') { + throw new Error('wrong public key type') + } + } + var len = pub.modulus.byteLength() + var pad = [ 1 ] + var padNum = 0 + while (hash.length + pad.length + 2 < len) { + pad.push(0xff) + padNum++ + } + pad.push(0x00) + var i = -1 + while (++i < hash.length) { + pad.push(hash[i]) + } + pad = new Buffer(pad) + var red = BN.mont(pub.modulus) + sig = new BN(sig).toRed(red) + + sig = sig.redPow(new BN(pub.publicExponent)) + + sig = new Buffer(sig.fromRed().toArray()) + var out = 0 + if (padNum < 8) { + out = 1 + } + len = Math.min(sig.length, pad.length) + if (sig.length !== pad.length) { + out = 1 + } + + i = -1 + while (++i < len) { + out |= (sig[i] ^ pad[i]) + } + return out === 0 +} + +function ecVerify (sig, hash, pub) { + var curveId = curves[pub.data.algorithm.curve.join('.')] + if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')) + + var curve = new EC(curveId) + var pubkey = pub.data.subjectPrivateKey.data + + return curve.verify(hash, sig, pubkey) +} + +function dsaVerify (sig, hash, pub) { + var p = pub.data.p + var q = pub.data.q + var g = pub.data.g + var y = pub.data.pub_key + var unpacked = parseKeys.signature.decode(sig, 'der') + var s = unpacked.s + var r = unpacked.r + checkValue(s, q) + checkValue(r, q) + var montp = BN.mont(p) + var w = s.invm(q) + var v = g.toRed(montp) + .redPow(new BN(hash).mul(w).mod(q)) + .fromRed() + .mul( + y.toRed(montp) + .redPow(r.mul(w).mod(q)) + .fromRed() + ).mod(p).mod(q) + return !v.cmp(r) +} + +function checkValue (b, q) { + if (b.cmpn(0) <= 0) { + throw new Error('invalid sig') + } + if (b.cmp(q) >= q) { + throw new Error('invalid sig') + } +} + +module.exports = verify + +}).call(this,require("buffer").Buffer) +},{"./curves":124,"bn.js":125,"buffer":147,"elliptic":126,"parse-asn1":145}],145:[function(require,module,exports){ +arguments[4][100][0].apply(exports,arguments) +},{"dup":100}],146:[function(require,module,exports){ +(function (Buffer){ +module.exports = function xor (a, b) { + var length = Math.min(a.length, b.length) + var buffer = new Buffer(length) + + for (var i = 0; i < length; ++i) { + buffer[i] = a[i] ^ b[i] + } + + return buffer +} + +}).call(this,require("buffer").Buffer) +},{"buffer":147}],147:[function(require,module,exports){ +(function (global){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict' + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var isArray = require('isarray') + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 +Buffer.poolSize = 8192 // not used by this implementation + +var rootParent = {} + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property + * on objects. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ +Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined + ? global.TYPED_ARRAY_SUPPORT + : typedArraySupport() + +function typedArraySupport () { + function Bar () {} + try { + var arr = new Uint8Array(1) + arr.foo = function () { return 42 } + arr.constructor = Bar + return arr.foo() === 42 && // typed array instances can be augmented + arr.constructor === Bar && // constructor can be set + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } +} + +function kMaxLength () { + return Buffer.TYPED_ARRAY_SUPPORT + ? 0x7fffffff + : 0x3fffffff +} + +/** + * Class: Buffer + * ============= + * + * The Buffer constructor returns instances of `Uint8Array` that are augmented + * with function properties for all the node `Buffer` API functions. We use + * `Uint8Array` so that square bracket notation works as expected -- it returns + * a single octet. + * + * By augmenting the instances, we can avoid modifying the `Uint8Array` + * prototype. + */ +function Buffer (arg) { + if (!(this instanceof Buffer)) { + // Avoid going through an ArgumentsAdaptorTrampoline in the common case. + if (arguments.length > 1) return new Buffer(arg, arguments[1]) + return new Buffer(arg) + } + + if (!Buffer.TYPED_ARRAY_SUPPORT) { + this.length = 0 + this.parent = undefined + } + + // Common case. + if (typeof arg === 'number') { + return fromNumber(this, arg) + } + + // Slightly less common case. + if (typeof arg === 'string') { + return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8') + } + + // Unusual. + return fromObject(this, arg) +} + +function fromNumber (that, length) { + that = allocate(that, length < 0 ? 0 : checked(length) | 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < length; i++) { + that[i] = 0 + } + } + return that } -function makeR (g, k, p, q) { - return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q) +function fromString (that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8' + + // Assumption: byteLength() return value is always < kMaxLength. + var length = byteLength(string, encoding) | 0 + that = allocate(that, length) + + that.write(string, encoding) + return that } -module.exports = sign -module.exports.getKey = getKey -module.exports.makeKey = makeKey +function fromObject (that, object) { + if (Buffer.isBuffer(object)) return fromBuffer(that, object) -}).call(this,require("buffer").Buffer) -},{"./curves":135,"bn.js":136,"browserify-rsa":137,"buffer":99,"create-hmac":240,"elliptic":138,"parse-asn1":165}],200:[function(require,module,exports){ -(function (Buffer){ -// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js -var curves = require('./curves') -var elliptic = require('elliptic') -var parseKeys = require('parse-asn1') + if (isArray(object)) return fromArray(that, object) -var BN = require('bn.js') -var EC = elliptic.ec + if (object == null) { + throw new TypeError('must start with number, buffer, array or string') + } -function verify (sig, hash, key, signType) { - var pub = parseKeys(key) - if (pub.type === 'ec') { - if (signType !== 'ecdsa') { - throw new Error('wrong public key type') - } - return ecVerify(sig, hash, pub) - } else if (pub.type === 'dsa') { - if (signType !== 'dsa') { - throw new Error('wrong public key type') + if (typeof ArrayBuffer !== 'undefined') { + if (object.buffer instanceof ArrayBuffer) { + return fromTypedArray(that, object) } - return dsaVerify(sig, hash, pub) - } else { - if (signType !== 'rsa') { - throw new Error('wrong public key type') + if (object instanceof ArrayBuffer) { + return fromArrayBuffer(that, object) } } - var len = pub.modulus.byteLength() - var pad = [ 1 ] - var padNum = 0 - while (hash.length + pad.length + 2 < len) { - pad.push(0xff) - padNum++ - } - pad.push(0x00) - var i = -1 - while (++i < hash.length) { - pad.push(hash[i]) - } - pad = new Buffer(pad) - var red = BN.mont(pub.modulus) - sig = new BN(sig).toRed(red) - sig = sig.redPow(new BN(pub.publicExponent)) + if (object.length) return fromArrayLike(that, object) - sig = new Buffer(sig.fromRed().toArray()) - var out = 0 - if (padNum < 8) { - out = 1 + return fromJsonObject(that, object) +} + +function fromBuffer (that, buffer) { + var length = checked(buffer.length) | 0 + that = allocate(that, length) + buffer.copy(that, 0, 0, length) + return that +} + +function fromArray (that, array) { + var length = checked(array.length) | 0 + that = allocate(that, length) + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 } - len = Math.min(sig.length, pad.length) - if (sig.length !== pad.length) { - out = 1 + return that +} + +// Duplicate of fromArray() to keep fromArray() monomorphic. +function fromTypedArray (that, array) { + var length = checked(array.length) | 0 + that = allocate(that, length) + // Truncating the elements is probably not what people expect from typed + // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior + // of the old Buffer constructor. + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 } + return that +} - i = -1 - while (++i < len) { - out |= (sig[i] ^ pad[i]) +function fromArrayBuffer (that, array) { + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + array.byteLength + that = Buffer._augment(new Uint8Array(array)) + } else { + // Fallback: Return an object instance of the Buffer class + that = fromTypedArray(that, new Uint8Array(array)) } - return out === 0 + return that } -function ecVerify (sig, hash, pub) { - var curveId = curves[pub.data.algorithm.curve.join('.')] - if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')) +function fromArrayLike (that, array) { + var length = checked(array.length) | 0 + that = allocate(that, length) + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} - var curve = new EC(curveId) - var pubkey = pub.data.subjectPrivateKey.data +// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object. +// Returns a zero-length buffer for inputs that don't conform to the spec. +function fromJsonObject (that, object) { + var array + var length = 0 - return curve.verify(hash, sig, pubkey) + if (object.type === 'Buffer' && isArray(object.data)) { + array = object.data + length = checked(array.length) | 0 + } + that = allocate(that, length) + + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that } -function dsaVerify (sig, hash, pub) { - var p = pub.data.p - var q = pub.data.q - var g = pub.data.g - var y = pub.data.pub_key - var unpacked = parseKeys.signature.decode(sig, 'der') - var s = unpacked.s - var r = unpacked.r - checkValue(s, q) - checkValue(r, q) - var montp = BN.mont(p) - var w = s.invm(q) - var v = g.toRed(montp) - .redPow(new BN(hash).mul(w).mod(q)) - .fromRed() - .mul( - y.toRed(montp) - .redPow(r.mul(w).mod(q)) - .fromRed() - ).mod(p).mod(q) - return !v.cmp(r) +if (Buffer.TYPED_ARRAY_SUPPORT) { + Buffer.prototype.__proto__ = Uint8Array.prototype + Buffer.__proto__ = Uint8Array +} else { + // pre-set for values that may exist in the future + Buffer.prototype.length = undefined + Buffer.prototype.parent = undefined } -function checkValue (b, q) { - if (b.cmpn(0) <= 0) { - throw new Error('invalid sig') - } - if (b.cmp(q) >= q) { - throw new Error('invalid sig') +function allocate (that, length) { + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = Buffer._augment(new Uint8Array(length)) + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + that.length = length + that._isBuffer = true } -} -module.exports = verify + var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1 + if (fromPool) that.parent = rootParent -}).call(this,require("buffer").Buffer) -},{"./curves":135,"bn.js":136,"buffer":99,"elliptic":138,"parse-asn1":165}],201:[function(require,module,exports){ -(function (Buffer){ -var elliptic = require('elliptic'); -var BN = require('bn.js'); + return that +} -module.exports = function createECDH(curve) { - return new ECDH(curve); -}; +function checked (length) { + // Note: cannot use `length < kMaxLength` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + kMaxLength().toString(16) + ' bytes') + } + return length | 0 +} -var aliases = { - secp256k1: { - name: 'secp256k1', - byteLength: 32 - }, - secp224r1: { - name: 'p224', - byteLength: 28 - }, - prime256v1: { - name: 'p256', - byteLength: 32 - }, - prime192v1: { - name: 'p192', - byteLength: 24 - }, - ed25519: { - name: 'ed25519', - byteLength: 32 - }, - secp384r1: { - name: 'p384', - byteLength: 48 - }, - secp521r1: { - name: 'p521', - byteLength: 66 - } -}; +function SlowBuffer (subject, encoding) { + if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding) -aliases.p224 = aliases.secp224r1; -aliases.p256 = aliases.secp256r1 = aliases.prime256v1; -aliases.p192 = aliases.secp192r1 = aliases.prime192v1; -aliases.p384 = aliases.secp384r1; -aliases.p521 = aliases.secp521r1; + var buf = new Buffer(subject, encoding) + delete buf.parent + return buf +} -function ECDH(curve) { - this.curveType = aliases[curve]; - if (!this.curveType ) { - this.curveType = { - name: curve - }; - } - this.curve = new elliptic.ec(this.curveType.name); - this.keys = void 0; +Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) } -ECDH.prototype.generateKeys = function (enc, format) { - this.keys = this.curve.genKeyPair(); - return this.getPublicKey(enc, format); -}; +Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } -ECDH.prototype.computeSecret = function (other, inenc, enc) { - inenc = inenc || 'utf8'; - if (!Buffer.isBuffer(other)) { - other = new Buffer(other, inenc); - } - var otherPub = this.curve.keyFromPublic(other).getPublic(); - var out = otherPub.mul(this.keys.getPrivate()).getX(); - return formatReturnValue(out, enc, this.curveType.byteLength); -}; + if (a === b) return 0 -ECDH.prototype.getPublicKey = function (enc, format) { - var key = this.keys.getPublic(format === 'compressed', true); - if (format === 'hybrid') { - if (key[key.length - 1] % 2) { - key[0] = 7; - } else { - key [0] = 6; - } - } - return formatReturnValue(key, enc); -}; + var x = a.length + var y = b.length -ECDH.prototype.getPrivateKey = function (enc) { - return formatReturnValue(this.keys.getPrivate(), enc); -}; + var i = 0 + var len = Math.min(x, y) + while (i < len) { + if (a[i] !== b[i]) break -ECDH.prototype.setPublicKey = function (pub, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(pub)) { - pub = new Buffer(pub, enc); - } - this.keys._importPublic(pub); - return this; -}; + ++i + } -ECDH.prototype.setPrivateKey = function (priv, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(priv)) { - priv = new Buffer(priv, enc); - } - var _priv = new BN(priv); - _priv = _priv.toString(16); - this.keys._importPrivate(_priv); - return this; -}; + if (i !== len) { + x = a[i] + y = b[i] + } -function formatReturnValue(bn, enc, len) { - if (!Array.isArray(bn)) { - bn = bn.toArray(); - } - var buf = new Buffer(bn); - if (len && buf.length < len) { - var zeros = new Buffer(len - buf.length); - zeros.fill(0); - buf = Buffer.concat([zeros, buf]); - } - if (!enc) { - return buf; - } else { - return buf.toString(enc); - } + if (x < y) return -1 + if (y < x) return 1 + return 0 } -}).call(this,require("buffer").Buffer) -},{"bn.js":202,"buffer":99,"elliptic":203}],202:[function(require,module,exports){ -arguments[4][136][0].apply(exports,arguments) -},{"dup":136}],203:[function(require,module,exports){ -arguments[4][138][0].apply(exports,arguments) -},{"../package.json":226,"./elliptic/curve":206,"./elliptic/curves":209,"./elliptic/ec":210,"./elliptic/eddsa":213,"./elliptic/hmac-drbg":216,"./elliptic/utils":218,"brorand":219,"dup":138}],204:[function(require,module,exports){ -arguments[4][139][0].apply(exports,arguments) -},{"../../elliptic":203,"bn.js":202,"dup":139}],205:[function(require,module,exports){ -arguments[4][140][0].apply(exports,arguments) -},{"../../elliptic":203,"../curve":206,"bn.js":202,"dup":140,"inherits":296}],206:[function(require,module,exports){ -arguments[4][59][0].apply(exports,arguments) -},{"./base":204,"./edwards":205,"./mont":207,"./short":208,"dup":59}],207:[function(require,module,exports){ -arguments[4][142][0].apply(exports,arguments) -},{"../../elliptic":203,"../curve":206,"bn.js":202,"dup":142,"inherits":296}],208:[function(require,module,exports){ -arguments[4][143][0].apply(exports,arguments) -},{"../../elliptic":203,"../curve":206,"bn.js":202,"dup":143,"inherits":296}],209:[function(require,module,exports){ -arguments[4][144][0].apply(exports,arguments) -},{"../elliptic":203,"./precomputed/secp256k1":217,"dup":144,"hash.js":220}],210:[function(require,module,exports){ -arguments[4][145][0].apply(exports,arguments) -},{"../../elliptic":203,"./key":211,"./signature":212,"bn.js":202,"dup":145}],211:[function(require,module,exports){ -arguments[4][146][0].apply(exports,arguments) -},{"bn.js":202,"dup":146}],212:[function(require,module,exports){ -arguments[4][147][0].apply(exports,arguments) -},{"../../elliptic":203,"bn.js":202,"dup":147}],213:[function(require,module,exports){ -arguments[4][148][0].apply(exports,arguments) -},{"../../elliptic":203,"./key":214,"./signature":215,"dup":148,"hash.js":220}],214:[function(require,module,exports){ -arguments[4][149][0].apply(exports,arguments) -},{"../../elliptic":203,"dup":149}],215:[function(require,module,exports){ -arguments[4][150][0].apply(exports,arguments) -},{"../../elliptic":203,"bn.js":202,"dup":150}],216:[function(require,module,exports){ -arguments[4][66][0].apply(exports,arguments) -},{"../elliptic":203,"dup":66,"hash.js":220}],217:[function(require,module,exports){ -arguments[4][67][0].apply(exports,arguments) -},{"dup":67}],218:[function(require,module,exports){ -arguments[4][153][0].apply(exports,arguments) -},{"bn.js":202,"dup":153}],219:[function(require,module,exports){ -arguments[4][69][0].apply(exports,arguments) -},{"dup":69}],220:[function(require,module,exports){ -arguments[4][70][0].apply(exports,arguments) -},{"./hash/common":221,"./hash/hmac":222,"./hash/ripemd":223,"./hash/sha":224,"./hash/utils":225,"dup":70}],221:[function(require,module,exports){ -arguments[4][71][0].apply(exports,arguments) -},{"../hash":220,"dup":71}],222:[function(require,module,exports){ -arguments[4][72][0].apply(exports,arguments) -},{"../hash":220,"dup":72}],223:[function(require,module,exports){ -arguments[4][73][0].apply(exports,arguments) -},{"../hash":220,"dup":73}],224:[function(require,module,exports){ -arguments[4][74][0].apply(exports,arguments) -},{"../hash":220,"dup":74}],225:[function(require,module,exports){ -arguments[4][75][0].apply(exports,arguments) -},{"dup":75,"inherits":296}],226:[function(require,module,exports){ -arguments[4][161][0].apply(exports,arguments) -},{"dup":161}],227:[function(require,module,exports){ -(function (Buffer){ -'use strict'; -var inherits = require('inherits') -var md5 = require('./md5') -var rmd160 = require('ripemd160') -var sha = require('sha.js') - -var Base = require('cipher-base') +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'binary': + case 'base64': + case 'raw': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} -function HashNoConstructor(hash) { - Base.call(this, 'digest') +Buffer.concat = function concat (list, length) { + if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.') - this._hash = hash - this.buffers = [] -} + if (list.length === 0) { + return new Buffer(0) + } -inherits(HashNoConstructor, Base) + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; i++) { + length += list[i].length + } + } -HashNoConstructor.prototype._update = function (data) { - this.buffers.push(data) + var buf = new Buffer(length) + var pos = 0 + for (i = 0; i < list.length; i++) { + var item = list[i] + item.copy(buf, pos) + pos += item.length + } + return buf } -HashNoConstructor.prototype._final = function () { - var buf = Buffer.concat(this.buffers) - var r = this._hash(buf) - this.buffers = null +function byteLength (string, encoding) { + if (typeof string !== 'string') string = '' + string - return r + var len = string.length + if (len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'binary': + // Deprecated + case 'raw': + case 'raws': + return len + case 'utf8': + case 'utf-8': + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) return utf8ToBytes(string).length // assume utf8 + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } } +Buffer.byteLength = byteLength -function Hash(hash) { - Base.call(this, 'digest') +function slowToString (encoding, start, end) { + var loweredCase = false - this._hash = hash -} + start = start | 0 + end = end === undefined || end === Infinity ? this.length : end | 0 -inherits(Hash, Base) + if (!encoding) encoding = 'utf8' + if (start < 0) start = 0 + if (end > this.length) end = this.length + if (end <= start) return '' -Hash.prototype._update = function (data) { - this._hash.update(data) -} + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) -Hash.prototype._final = function () { - return this._hash.digest() -} + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) -module.exports = function createHash (alg) { - alg = alg.toLowerCase() - if ('md5' === alg) return new HashNoConstructor(md5) - if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160) + case 'ascii': + return asciiSlice(this, start, end) - return new Hash(sha(alg)) -} + case 'binary': + return binarySlice(this, start, end) -}).call(this,require("buffer").Buffer) -},{"./md5":229,"buffer":99,"cipher-base":230,"inherits":296,"ripemd160":231,"sha.js":233}],228:[function(require,module,exports){ -(function (Buffer){ -'use strict'; -var intSize = 4; -var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0); -var chrsz = 8; + case 'base64': + return base64Slice(this, start, end) -function toArray(buf, bigEndian) { - if ((buf.length % intSize) !== 0) { - var len = buf.length + (intSize - (buf.length % intSize)); - buf = Buffer.concat([buf, zeroBuffer], len); + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } } +} - var arr = []; - var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE; - for (var i = 0; i < buf.length; i += intSize) { - arr.push(fn.call(buf, i)); - } - return arr; +Buffer.prototype.toString = function toString () { + var length = this.length | 0 + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) } -function toBuffer(arr, size, bigEndian) { - var buf = new Buffer(size); - var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE; - for (var i = 0; i < arr.length; i++) { - fn.call(buf, arr[i], i * 4, true); +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' } - return buf; + return '' } -function hash(buf, fn, hashSize, bigEndian) { - if (!Buffer.isBuffer(buf)) buf = new Buffer(buf); - var arr = fn(toArray(buf, bigEndian), buf.length * chrsz); - return toBuffer(arr, hashSize, bigEndian); +Buffer.prototype.compare = function compare (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return 0 + return Buffer.compare(this, b) } -exports.hash = hash; -}).call(this,require("buffer").Buffer) -},{"buffer":99}],229:[function(require,module,exports){ -'use strict'; -/* - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for more info. - */ -var helpers = require('./helpers'); +Buffer.prototype.indexOf = function indexOf (val, byteOffset) { + if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff + else if (byteOffset < -0x80000000) byteOffset = -0x80000000 + byteOffset >>= 0 -/* - * Calculate the MD5 of an array of little-endian words, and a bit length - */ -function core_md5(x, len) -{ - /* append padding */ - x[len >> 5] |= 0x80 << ((len) % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; + if (this.length === 0) return -1 + if (byteOffset >= this.length) return -1 - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - var d = 271733878; + // Negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0) - for(var i = 0; i < x.length; i += 16) - { - var olda = a; - var oldb = b; - var oldc = c; - var oldd = d; + if (typeof val === 'string') { + if (val.length === 0) return -1 // special case: looking for empty string always fails + return String.prototype.indexOf.call(this, val, byteOffset) + } + if (Buffer.isBuffer(val)) { + return arrayIndexOf(this, val, byteOffset) + } + if (typeof val === 'number') { + if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') { + return Uint8Array.prototype.indexOf.call(this, val, byteOffset) + } + return arrayIndexOf(this, [ val ], byteOffset) + } - a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); - d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); - c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); - b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); - a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); - d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); - c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); - b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); - a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); - d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); - c = md5_ff(c, d, a, b, x[i+10], 17, -42063); - b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); - a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); - d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); - c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); - b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); + function arrayIndexOf (arr, val, byteOffset) { + var foundIndex = -1 + for (var i = 0; byteOffset + i < arr.length; i++) { + if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex + } else { + foundIndex = -1 + } + } + return -1 + } - a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); - d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); - c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); - b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); - a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); - d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); - c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); - b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); - a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); - d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); - c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); - b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); - a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); - d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); - c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); - b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); + throw new TypeError('val must be string, number or Buffer') +} - a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); - d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); - c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); - b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); - a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); - d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); - c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); - b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); - a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); - d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); - c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); - b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); - a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); - d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); - c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); - b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); +// `get` is deprecated +Buffer.prototype.get = function get (offset) { + console.log('.get() is deprecated. Access using array indexes instead.') + return this.readUInt8(offset) +} - a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); - d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); - c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); - b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); - a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); - d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); - c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); - b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); - a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); - d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); - c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); - b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); - a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); - d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); - c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); - b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); +// `set` is deprecated +Buffer.prototype.set = function set (v, offset) { + console.log('.set() is deprecated. Access using array indexes instead.') + return this.writeUInt8(v, offset) +} - a = safe_add(a, olda); - b = safe_add(b, oldb); - c = safe_add(c, oldc); - d = safe_add(d, oldd); +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } } - return Array(a, b, c, d); -} + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new Error('Invalid hex string') -/* - * These functions implement the four basic operations the algorithm uses. - */ -function md5_cmn(q, a, b, x, s, t) -{ - return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); -} -function md5_ff(a, b, c, d, x, s, t) -{ - return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; i++) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) throw new Error('Invalid hex string') + buf[offset + i] = parsed + } + return i } -function md5_gg(a, b, c, d, x, s, t) -{ - return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) } -function md5_hh(a, b, c, d, x, s, t) -{ - return md5_cmn(b ^ c ^ d, a, b, x, s, t); + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) } -function md5_ii(a, b, c, d, x, s, t) -{ - return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); + +function binaryWrite (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) } -/* - * Add integers, wrapping at 2^32. This uses 16-bit operations internally - * to work around bugs in some JS interpreters. - */ -function safe_add(x, y) -{ - var lsw = (x & 0xFFFF) + (y & 0xFFFF); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) } -/* - * Bitwise rotate a 32-bit number to the left. - */ -function bit_rol(num, cnt) -{ - return (num << cnt) | (num >>> (32 - cnt)); +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) } -module.exports = function md5(buf) { - return helpers.hash(buf, core_md5, 16); -}; -},{"./helpers":228}],230:[function(require,module,exports){ -arguments[4][120][0].apply(exports,arguments) -},{"buffer":99,"dup":120,"inherits":296,"stream":315,"string_decoder":316}],231:[function(require,module,exports){ -(function (Buffer){ -/* -CryptoJS v3.1.2 -code.google.com/p/crypto-js -(c) 2009-2013 by Jeff Mott. All rights reserved. -code.google.com/p/crypto-js/wiki/License -*/ -/** @preserve -(c) 2012 by Cédric Mesnil. All rights reserved. +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0 + if (isFinite(length)) { + length = length | 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + // legacy write(string, encoding, offset, length) - remove in v0.13 + } else { + var swap = encoding + encoding = offset + offset = length | 0 + length = swap + } -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('attempt to write outside buffer bounds') + } -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ + if (!encoding) encoding = 'utf8' -// constants table -var zl = [ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 -] + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) -var zr = [ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 -] + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) -var sl = [ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 -] + case 'ascii': + return asciiWrite(this, string, offset, length) -var sr = [ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 -] + case 'binary': + return binaryWrite(this, string, offset, length) -var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E] -var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000] + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) -function bytesToWords (bytes) { - var words = [] - for (var i = 0, b = 0; i < bytes.length; i++, b += 8) { - words[b >>> 5] |= bytes[i] << (24 - b % 32) + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } } - return words } -function wordsToBytes (words) { - var bytes = [] - for (var b = 0; b < words.length * 32; b += 8) { - bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF) +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) } - return bytes } -function processBlock (H, M, offset) { - // swap endian - for (var i = 0; i < 16; i++) { - var offset_i = offset + i - var M_offset_i = M[offset_i] - - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ) +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) } +} - // Working variables - var al, bl, cl, dl, el - var ar, br, cr, dr, er +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] - ar = al = H[0] - br = bl = H[1] - cr = cl = H[2] - dr = dl = H[3] - er = el = H[4] + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 - // computation - var t - for (i = 0; i < 80; i += 1) { - t = (al + M[offset + zl[i]]) | 0 - if (i < 16) { - t += f1(bl, cl, dl) + hl[0] - } else if (i < 32) { - t += f2(bl, cl, dl) + hl[1] - } else if (i < 48) { - t += f3(bl, cl, dl) + hl[2] - } else if (i < 64) { - t += f4(bl, cl, dl) + hl[3] - } else {// if (i<80) { - t += f5(bl, cl, dl) + hl[4] + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } } - t = t | 0 - t = rotl(t, sl[i]) - t = (t + el) | 0 - al = el - el = dl - dl = rotl(cl, 10) - cl = bl - bl = t - t = (ar + M[offset + zr[i]]) | 0 - if (i < 16) { - t += f5(br, cr, dr) + hr[0] - } else if (i < 32) { - t += f4(br, cr, dr) + hr[1] - } else if (i < 48) { - t += f3(br, cr, dr) + hr[2] - } else if (i < 64) { - t += f2(br, cr, dr) + hr[3] - } else {// if (i<80) { - t += f1(br, cr, dr) + hr[4] + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF } - t = t | 0 - t = rotl(t, sr[i]) - t = (t + er) | 0 - ar = er - er = dr - dr = rotl(cr, 10) - cr = br - br = t + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() } - // intermediate hash value - t = (H[1] + cl + dr) | 0 - H[1] = (H[2] + dl + er) | 0 - H[2] = (H[3] + el + ar) | 0 - H[3] = (H[4] + al + br) | 0 - H[4] = (H[0] + bl + cr) | 0 - H[0] = t + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res } -function f1 (x, y, z) { - return ((x) ^ (y) ^ (z)) -} +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) -function f2 (x, y, z) { - return (((x) & (y)) | ((~x) & (z))) + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret } -function f3 (x, y, z) { - return (((x) | (~(y))) ^ (z)) -} +function binarySlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) -function f4 (x, y, z) { - return (((x) & (z)) | ((y) & (~(z)))) + for (var i = start; i < end; i++) { + ret += String.fromCharCode(buf[i]) + } + return ret } -function f5 (x, y, z) { - return ((x) ^ ((y) | (~(z)))) +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; i++) { + out += toHex(buf[i]) + } + return out } -function rotl (x, n) { - return (x << n) | (x >>> (32 - n)) +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res } -function ripemd160 (message) { - var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0] +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end - if (typeof message === 'string') { - message = new Buffer(message, 'utf8') + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len } - var m = bytesToWords(message) - - var nBitsLeft = message.length * 8 - var nBitsTotal = message.length * 8 + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } - // Add padding - m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32) - m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ) + if (end < start) end = start - for (var i = 0; i < m.length; i += 16) { - processBlock(H, m, i) + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = Buffer._augment(this.subarray(start, end)) + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined) + for (var i = 0; i < sliceLen; i++) { + newBuf[i] = this[i + start] + } } - // swap endian - for (i = 0; i < 5; i++) { - // shortcut - var H_i = H[i] + if (newBuf.length) newBuf.parent = this.parent || this - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00) - } + return newBuf +} - var digestbytes = wordsToBytes(H) - return new Buffer(digestbytes) +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') } -module.exports = ripemd160 +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) -}).call(this,require("buffer").Buffer) -},{"buffer":99}],232:[function(require,module,exports){ -(function (Buffer){ -// prototype class for hash functions -function Hash (blockSize, finalSize) { - this._block = new Buffer(blockSize) - this._finalSize = finalSize - this._blockSize = blockSize - this._len = 0 - this._s = 0 + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val } -Hash.prototype.update = function (data, enc) { - if (typeof data === 'string') { - enc = enc || 'utf8' - data = new Buffer(data, enc) +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) } - var l = this._len += data.length - var s = this._s || 0 - var f = 0 - var buffer = this._block + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } - while (s < l) { - var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize)) - var ch = (t - f) + return val +} - for (var i = 0; i < ch; i++) { - buffer[(s % this._blockSize) + i] = data[i + f] - } +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} - s += ch - f += ch +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} - if ((s % this._blockSize) === 0) { - this._update(buffer) - } - } - this._s = s +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} - return this +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) } -Hash.prototype.digest = function (enc) { - // Suppose the length of the message M, in bits, is l - var l = this._len * 8 +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) - // Append the bit 1 to the end of the message - this._block[this._len % this._blockSize] = 0x80 + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} - // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize - this._block.fill(0, this._len % this._blockSize + 1) +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) - if (l % (this._blockSize * 8) >= this._finalSize * 8) { - this._update(this._block) - this._block.fill(0) + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul } + mul *= 0x80 - // to this append the block which is equal to the number l written in binary - // TODO: handle case where l is > Math.pow(2, 29) - this._block.writeInt32BE(l, this._blockSize - 4) - - var hash = this._update(this._block) || this._hash() + if (val >= mul) val -= Math.pow(2, 8 * byteLength) - return enc ? hash.toString(enc) : hash + return val } -Hash.prototype._update = function () { - throw new Error('_update must be implemented by subclass') -} +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) -module.exports = Hash + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 -}).call(this,require("buffer").Buffer) -},{"buffer":99}],233:[function(require,module,exports){ -var exports = module.exports = function SHA (algorithm) { - algorithm = algorithm.toLowerCase() + if (val >= mul) val -= Math.pow(2, 8 * byteLength) - var Algorithm = exports[algorithm] - if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') + return val +} - return new Algorithm() +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) } -exports.sha = require('./sha') -exports.sha1 = require('./sha1') -exports.sha224 = require('./sha224') -exports.sha256 = require('./sha256') -exports.sha384 = require('./sha384') -exports.sha512 = require('./sha512') +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} -},{"./sha":234,"./sha1":235,"./sha224":236,"./sha256":237,"./sha384":238,"./sha512":239}],234:[function(require,module,exports){ -(function (Buffer){ -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined - * in FIPS PUB 180-1 - * This source code is derived from sha1.js of the same repository. - * The difference between SHA-0 and SHA-1 is just a bitwise rotate left - * operation was added. - */ +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} -var inherits = require('inherits') -var Hash = require('./hash') +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) -var W = new Array(80) + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} -function Sha () { - this.init() - this._w = W +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) - Hash.call(this, 64, 56) + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) } -inherits(Sha, Hash) +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} -Sha.prototype.init = function () { - this._a = 0x67452301 | 0 - this._b = 0xefcdab89 | 0 - this._c = 0x98badcfe | 0 - this._d = 0x10325476 | 0 - this._e = 0xc3d2e1f0 | 0 +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} - return this +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) } -/* - * Bitwise rotate a 32-bit number to the left. - */ -function rol (num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)) +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) } -Sha.prototype._update = function (M) { - var W = this._w +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance') + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') +} - var a = this._a - var b = this._b - var c = this._c - var d = this._d - var e = this._e +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) - var j = 0 - var k + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } - /* - * SHA-1 has a bitwise rotate left operation. But, SHA is not - * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) } - */ - function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] } - function loop (w, f) { - W[j] = w + return offset + byteLength +} - var t = rol(a, 5) + f + e + w + k +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0) - e = d - d = c - c = rol(b, 30) - b = a - a = t - j++ + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF } - k = 1518500249 - while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d)) - while (j < 20) loop(calcW(), (b & c) | ((~b) & d)) - k = 1859775393 - while (j < 40) loop(calcW(), b ^ c ^ d) - k = -1894007588 - while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d)) - k = -899497514 - while (j < 80) loop(calcW(), b ^ c ^ d) + return offset + byteLength +} - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = (value & 0xff) + return offset + 1 } -Sha.prototype._hash = function () { - var H = new Buffer(20) +function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } +} - H.writeInt32BE(this._a | 0, 0) - H.writeInt32BE(this._b | 0, 4) - H.writeInt32BE(this._c | 0, 8) - H.writeInt32BE(this._d | 0, 12) - H.writeInt32BE(this._e | 0, 16) +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} - return H +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 } -module.exports = Sha +function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } +} +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} -}).call(this,require("buffer").Buffer) -},{"./hash":232,"buffer":99,"inherits":296}],235:[function(require,module,exports){ -(function (Buffer){ -/* - * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined - * in FIPS PUB 180-1 - * Version 2.1a Copyright Paul Johnston 2000 - 2002. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for details. - */ +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} -var inherits = require('inherits') -var Hash = require('./hash') +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) -var W = new Array(80) + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } -function Sha1 () { - this.init() - this._w = W + var i = 0 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } - Hash.call(this, 64, 56) + return offset + byteLength } -inherits(Sha1, Hash) +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) -Sha1.prototype.init = function () { - this._a = 0x67452301 | 0 - this._b = 0xefcdab89 | 0 - this._c = 0x98badcfe | 0 - this._d = 0x10325476 | 0 - this._e = 0xc3d2e1f0 | 0 + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } - return this + var i = byteLength - 1 + var mul = 1 + var sub = value < 0 ? 1 : 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength } -/* - * Bitwise rotate a 32-bit number to the left. - */ -function rol (num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)) +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 } -Sha1.prototype._update = function (M) { - var W = this._w +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} - var a = this._a - var b = this._b - var c = this._c - var d = this._d - var e = this._e +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} - var j = 0 - var k +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} - function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) } - function loop (w, f) { - W[j] = w +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} - var t = rol(a, 5) + f + e + w + k +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (value > max || value < min) throw new RangeError('value is out of bounds') + if (offset + ext > buf.length) throw new RangeError('index out of range') + if (offset < 0) throw new RangeError('index out of range') +} - e = d - d = c - c = rol(b, 30) - b = a - a = t - j++ +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} - k = 1518500249 - while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d)) - while (j < 20) loop(calcW(), (b & c) | ((~b) & d)) - k = 1859775393 - while (j < 40) loop(calcW(), b ^ c ^ d) - k = -1894007588 - while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d)) - k = -899497514 - while (j < 80) loop(calcW(), b ^ c ^ d) +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) } -Sha1.prototype._hash = function () { - var H = new Buffer(20) +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} - H.writeInt32BE(this._a | 0, 0) - H.writeInt32BE(this._b | 0, 4) - H.writeInt32BE(this._c | 0, 8) - H.writeInt32BE(this._d | 0, 12) - H.writeInt32BE(this._e | 0, 16) +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} - return H +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) } -module.exports = Sha1 +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start -}).call(this,require("buffer").Buffer) -},{"./hash":232,"buffer":99,"inherits":296}],236:[function(require,module,exports){ -(function (Buffer){ -/** - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined - * in FIPS 180-2 - * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * - */ + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 -var inherits = require('inherits') -var Sha256 = require('./sha256') -var Hash = require('./hash') + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') -var W = new Array(64) + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } -function Sha224 () { - this.init() + var len = end - start + var i - this._w = W // new Array(64) + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; i--) { + target[i + targetStart] = this[i + start] + } + } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; i++) { + target[i + targetStart] = this[i + start] + } + } else { + target._set(this.subarray(start, start + len), targetStart) + } - Hash.call(this, 64, 56) + return len } -inherits(Sha224, Sha256) +// fill(value, start=0, end=buffer.length) +Buffer.prototype.fill = function fill (value, start, end) { + if (!value) value = 0 + if (!start) start = 0 + if (!end) end = this.length -Sha224.prototype.init = function () { - this._a = 0xc1059ed8 | 0 - this._b = 0x367cd507 | 0 - this._c = 0x3070dd17 | 0 - this._d = 0xf70e5939 | 0 - this._e = 0xffc00b31 | 0 - this._f = 0x68581511 | 0 - this._g = 0x64f98fa7 | 0 - this._h = 0xbefa4fa4 | 0 + if (end < start) throw new RangeError('end < start') - return this -} + // Fill 0 bytes; we're done + if (end === start) return + if (this.length === 0) return -Sha224.prototype._hash = function () { - var H = new Buffer(28) + if (start < 0 || start >= this.length) throw new RangeError('start out of bounds') + if (end < 0 || end > this.length) throw new RangeError('end out of bounds') - H.writeInt32BE(this._a, 0) - H.writeInt32BE(this._b, 4) - H.writeInt32BE(this._c, 8) - H.writeInt32BE(this._d, 12) - H.writeInt32BE(this._e, 16) - H.writeInt32BE(this._f, 20) - H.writeInt32BE(this._g, 24) + var i + if (typeof value === 'number') { + for (i = start; i < end; i++) { + this[i] = value + } + } else { + var bytes = utf8ToBytes(value.toString()) + var len = bytes.length + for (i = start; i < end; i++) { + this[i] = bytes[i % len] + } + } - return H + return this } -module.exports = Sha224 - -}).call(this,require("buffer").Buffer) -},{"./hash":232,"./sha256":237,"buffer":99,"inherits":296}],237:[function(require,module,exports){ -(function (Buffer){ /** - * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined - * in FIPS 180-2 - * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * + * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance. + * Added in Node 0.12. Only available in browsers that support ArrayBuffer. */ +Buffer.prototype.toArrayBuffer = function toArrayBuffer () { + if (typeof Uint8Array !== 'undefined') { + if (Buffer.TYPED_ARRAY_SUPPORT) { + return (new Buffer(this)).buffer + } else { + var buf = new Uint8Array(this.length) + for (var i = 0, len = buf.length; i < len; i += 1) { + buf[i] = this[i] + } + return buf.buffer + } + } else { + throw new TypeError('Buffer.toArrayBuffer not supported in this browser') + } +} -var inherits = require('inherits') -var Hash = require('./hash') - -var K = [ - 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, - 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, - 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, - 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, - 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, - 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, - 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, - 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, - 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, - 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, - 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, - 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, - 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, - 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, - 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, - 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 -] - -var W = new Array(64) +// HELPER FUNCTIONS +// ================ -function Sha256 () { - this.init() +var BP = Buffer.prototype - this._w = W // new Array(64) +/** + * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods + */ +Buffer._augment = function _augment (arr) { + arr.constructor = Buffer + arr._isBuffer = true - Hash.call(this, 64, 56) -} + // save reference to original Uint8Array set method before overwriting + arr._set = arr.set -inherits(Sha256, Hash) + // deprecated + arr.get = BP.get + arr.set = BP.set -Sha256.prototype.init = function () { - this._a = 0x6a09e667 | 0 - this._b = 0xbb67ae85 | 0 - this._c = 0x3c6ef372 | 0 - this._d = 0xa54ff53a | 0 - this._e = 0x510e527f | 0 - this._f = 0x9b05688c | 0 - this._g = 0x1f83d9ab | 0 - this._h = 0x5be0cd19 | 0 + arr.write = BP.write + arr.toString = BP.toString + arr.toLocaleString = BP.toString + arr.toJSON = BP.toJSON + arr.equals = BP.equals + arr.compare = BP.compare + arr.indexOf = BP.indexOf + arr.copy = BP.copy + arr.slice = BP.slice + arr.readUIntLE = BP.readUIntLE + arr.readUIntBE = BP.readUIntBE + arr.readUInt8 = BP.readUInt8 + arr.readUInt16LE = BP.readUInt16LE + arr.readUInt16BE = BP.readUInt16BE + arr.readUInt32LE = BP.readUInt32LE + arr.readUInt32BE = BP.readUInt32BE + arr.readIntLE = BP.readIntLE + arr.readIntBE = BP.readIntBE + arr.readInt8 = BP.readInt8 + arr.readInt16LE = BP.readInt16LE + arr.readInt16BE = BP.readInt16BE + arr.readInt32LE = BP.readInt32LE + arr.readInt32BE = BP.readInt32BE + arr.readFloatLE = BP.readFloatLE + arr.readFloatBE = BP.readFloatBE + arr.readDoubleLE = BP.readDoubleLE + arr.readDoubleBE = BP.readDoubleBE + arr.writeUInt8 = BP.writeUInt8 + arr.writeUIntLE = BP.writeUIntLE + arr.writeUIntBE = BP.writeUIntBE + arr.writeUInt16LE = BP.writeUInt16LE + arr.writeUInt16BE = BP.writeUInt16BE + arr.writeUInt32LE = BP.writeUInt32LE + arr.writeUInt32BE = BP.writeUInt32BE + arr.writeIntLE = BP.writeIntLE + arr.writeIntBE = BP.writeIntBE + arr.writeInt8 = BP.writeInt8 + arr.writeInt16LE = BP.writeInt16LE + arr.writeInt16BE = BP.writeInt16BE + arr.writeInt32LE = BP.writeInt32LE + arr.writeInt32BE = BP.writeInt32BE + arr.writeFloatLE = BP.writeFloatLE + arr.writeFloatBE = BP.writeFloatBE + arr.writeDoubleLE = BP.writeDoubleLE + arr.writeDoubleBE = BP.writeDoubleBE + arr.fill = BP.fill + arr.inspect = BP.inspect + arr.toArrayBuffer = BP.toArrayBuffer - return this + return arr } -function Ch (x, y, z) { - return z ^ (x & (y ^ z)) -} +var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g -function Maj (x, y, z) { - return (x & y) | (z & (x | y)) +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str } -function Sigma0 (x) { - return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') } -function Sigma1 (x) { - return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) } -function Gamma0 (x) { - return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) -} +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] -function Gamma1 (x) { - return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) -} + for (var i = 0; i < length; i++) { + codePoint = string.charCodeAt(i) -Sha256.prototype._update = function (M) { - var W = this._w + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - var f = this._f | 0 - var g = this._g | 0 - var h = this._h | 0 + // valid lead + leadSurrogate = codePoint - var j = 0 + continue + } - function calcW () { return Gamma1(W[j - 2]) + W[j - 7] + Gamma0(W[j - 15]) + W[j - 16] } - function loop (w) { - W[j] = w + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } - var T1 = h + Sigma1(e) + Ch(e, f, g) + K[j] + w - var T2 = Sigma0(a) + Maj(a, b, c) + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } - h = g - g = f - f = e - e = d + T1 - d = c - c = b - b = a - a = T1 + T2 + leadSurrogate = null - j++ + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } } - while (j < 16) loop(M.readInt32BE(j * 4)) - while (j < 64) loop(calcW()) + return bytes +} - this._a = (a + this._a) | 0 - this._b = (b + this._b) | 0 - this._c = (c + this._c) | 0 - this._d = (d + this._d) | 0 - this._e = (e + this._e) | 0 - this._f = (f + this._f) | 0 - this._g = (g + this._g) | 0 - this._h = (h + this._h) | 0 +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; i++) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray } -Sha256.prototype._hash = function () { - var H = new Buffer(32) +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; i++) { + if ((units -= 2) < 0) break - H.writeInt32BE(this._a, 0) - H.writeInt32BE(this._b, 4) - H.writeInt32BE(this._c, 8) - H.writeInt32BE(this._d, 12) - H.writeInt32BE(this._e, 16) - H.writeInt32BE(this._f, 20) - H.writeInt32BE(this._g, 24) - H.writeInt32BE(this._h, 28) + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } - return H + return byteArray } -module.exports = Sha256 +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} -}).call(this,require("buffer").Buffer) -},{"./hash":232,"buffer":99,"inherits":296}],238:[function(require,module,exports){ -(function (Buffer){ -var inherits = require('inherits') -var SHA512 = require('./sha512') -var Hash = require('./hash') +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; i++) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} -var W = new Array(160) +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"base64-js":8,"ieee754":225,"isarray":148}],148:[function(require,module,exports){ +var toString = {}.toString; -function Sha384 () { - this.init() - this._w = W +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; - Hash.call(this, 128, 112) +},{}],149:[function(require,module,exports){ +(function (Buffer){ +var Transform = require('stream').Transform +var inherits = require('inherits') +var StringDecoder = require('string_decoder').StringDecoder +module.exports = CipherBase +inherits(CipherBase, Transform) +function CipherBase (hashMode) { + Transform.call(this) + this.hashMode = typeof hashMode === 'string' + if (this.hashMode) { + this[hashMode] = this._finalOrDigest + } else { + this.final = this._finalOrDigest + } + this._decoder = null + this._encoding = null +} +CipherBase.prototype.update = function (data, inputEnc, outputEnc) { + if (typeof data === 'string') { + data = new Buffer(data, inputEnc) + } + var outData = this._update(data) + if (this.hashMode) { + return this + } + if (outputEnc) { + outData = this._toString(outData, outputEnc) + } + return outData } -inherits(Sha384, SHA512) - -Sha384.prototype.init = function () { - this._a = 0xcbbb9d5d | 0 - this._b = 0x629a292a | 0 - this._c = 0x9159015a | 0 - this._d = 0x152fecd8 | 0 - this._e = 0x67332667 | 0 - this._f = 0x8eb44a87 | 0 - this._g = 0xdb0c2e0d | 0 - this._h = 0x47b5481d | 0 +CipherBase.prototype.setAutoPadding = function () {} - this._al = 0xc1059ed8 | 0 - this._bl = 0x367cd507 | 0 - this._cl = 0x3070dd17 | 0 - this._dl = 0xf70e5939 | 0 - this._el = 0xffc00b31 | 0 - this._fl = 0x68581511 | 0 - this._gl = 0x64f98fa7 | 0 - this._hl = 0xbefa4fa4 | 0 +CipherBase.prototype.getAuthTag = function () { + throw new Error('trying to get auth tag in unsupported state') +} - return this +CipherBase.prototype.setAuthTag = function () { + throw new Error('trying to set auth tag in unsupported state') } -Sha384.prototype._hash = function () { - var H = new Buffer(48) +CipherBase.prototype.setAAD = function () { + throw new Error('trying to set aad in unsupported state') +} - function writeInt64BE (h, l, offset) { - H.writeInt32BE(h, offset) - H.writeInt32BE(l, offset + 4) +CipherBase.prototype._transform = function (data, _, next) { + var err + try { + if (this.hashMode) { + this._update(data) + } else { + this.push(this._update(data)) + } + } catch (e) { + err = e + } finally { + next(err) } - - writeInt64BE(this._a, this._al, 0) - writeInt64BE(this._b, this._bl, 8) - writeInt64BE(this._c, this._cl, 16) - writeInt64BE(this._d, this._dl, 24) - writeInt64BE(this._e, this._el, 32) - writeInt64BE(this._f, this._fl, 40) - - return H +} +CipherBase.prototype._flush = function (done) { + var err + try { + this.push(this._final()) + } catch (e) { + err = e + } finally { + done(err) + } +} +CipherBase.prototype._finalOrDigest = function (outputEnc) { + var outData = this._final() || new Buffer('') + if (outputEnc) { + outData = this._toString(outData, outputEnc, true) + } + return outData } -module.exports = Sha384 +CipherBase.prototype._toString = function (value, enc, final) { + if (!this._decoder) { + this._decoder = new StringDecoder(enc) + this._encoding = enc + } + if (this._encoding !== enc) { + throw new Error('can\'t switch encodings') + } + var out = this._decoder.write(value) + if (final) { + out += this._decoder.end() + } + return out +} }).call(this,require("buffer").Buffer) -},{"./hash":232,"./sha512":239,"buffer":99,"inherits":296}],239:[function(require,module,exports){ +},{"buffer":147,"inherits":226,"stream":291,"string_decoder":292}],150:[function(require,module,exports){ (function (Buffer){ -var inherits = require('inherits') -var Hash = require('./hash') - -var K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -] - -var W = new Array(160) +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. -function Sha512 () { - this.init() - this._w = W +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. - Hash.call(this, 128, 112) +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; } +exports.isArray = isArray; -inherits(Sha512, Hash) - -Sha512.prototype.init = function () { - this._a = 0x6a09e667 | 0 - this._b = 0xbb67ae85 | 0 - this._c = 0x3c6ef372 | 0 - this._d = 0xa54ff53a | 0 - this._e = 0x510e527f | 0 - this._f = 0x9b05688c | 0 - this._g = 0x1f83d9ab | 0 - this._h = 0x5be0cd19 | 0 - - this._al = 0xf3bcc908 | 0 - this._bl = 0x84caa73b | 0 - this._cl = 0xfe94f82b | 0 - this._dl = 0x5f1d36f1 | 0 - this._el = 0xade682d1 | 0 - this._fl = 0x2b3e6c1f | 0 - this._gl = 0xfb41bd6b | 0 - this._hl = 0x137e2179 | 0 - - return this +function isBoolean(arg) { + return typeof arg === 'boolean'; } +exports.isBoolean = isBoolean; -function Ch (x, y, z) { - return z ^ (x & (y ^ z)) +function isNull(arg) { + return arg === null; } +exports.isNull = isNull; -function Maj (x, y, z) { - return (x & y) | (z & (x | y)) +function isNullOrUndefined(arg) { + return arg == null; } +exports.isNullOrUndefined = isNullOrUndefined; -function Sigma0 (x, xl) { - return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) +function isNumber(arg) { + return typeof arg === 'number'; } +exports.isNumber = isNumber; -function Sigma1 (x, xl) { - return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) +function isString(arg) { + return typeof arg === 'string'; } +exports.isString = isString; -function Gamma0 (x, xl) { - return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) +function isSymbol(arg) { + return typeof arg === 'symbol'; } +exports.isSymbol = isSymbol; -function Gamma0l (x, xl) { - return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) +function isUndefined(arg) { + return arg === void 0; } +exports.isUndefined = isUndefined; -function Gamma1 (x, xl) { - return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; } +exports.isRegExp = isRegExp; -function Gamma1l (x, xl) { - return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) +function isObject(arg) { + return typeof arg === 'object' && arg !== null; } +exports.isObject = isObject; -Sha512.prototype._update = function (M) { - var W = this._w - - var a = this._a | 0 - var b = this._b | 0 - var c = this._c | 0 - var d = this._d | 0 - var e = this._e | 0 - var f = this._f | 0 - var g = this._g | 0 - var h = this._h | 0 - - var al = this._al | 0 - var bl = this._bl | 0 - var cl = this._cl | 0 - var dl = this._dl | 0 - var el = this._el | 0 - var fl = this._fl | 0 - var gl = this._gl | 0 - var hl = this._hl | 0 - - var i = 0 - var j = 0 - var Wi, Wil - function calcW () { - var x = W[j - 15 * 2] - var xl = W[j - 15 * 2 + 1] - var gamma0 = Gamma0(x, xl) - var gamma0l = Gamma0l(xl, x) - - x = W[j - 2 * 2] - xl = W[j - 2 * 2 + 1] - var gamma1 = Gamma1(x, xl) - var gamma1l = Gamma1l(xl, x) - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[j - 7 * 2] - var Wi7l = W[j - 7 * 2 + 1] - - var Wi16 = W[j - 16 * 2] - var Wi16l = W[j - 16 * 2 + 1] - - Wil = gamma0l + Wi7l - Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0) - Wil = Wil + gamma1l - Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0) - Wil = Wil + Wi16l - Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0) - } - - function loop () { - W[j] = Wi - W[j + 1] = Wil - - var maj = Maj(a, b, c) - var majl = Maj(al, bl, cl) +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; - var sigma0h = Sigma0(a, al) - var sigma0l = Sigma0(al, a) - var sigma1h = Sigma1(e, el) - var sigma1l = Sigma1(el, e) +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[j] - var Kil = K[j + 1] +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; - var ch = Ch(e, f, g) - var chl = Ch(el, fl, gl) +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; - var t1l = hl + sigma1l - var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0) - t1l = t1l + chl - t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0) - t1l = t1l + Kil - t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0) - t1l = t1l + Wil - t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0) +exports.isBuffer = Buffer.isBuffer; - // t2 = sigma0 + maj - var t2l = sigma0l + majl - var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0) +function objectToString(o) { + return Object.prototype.toString.call(o); +} - h = g - hl = gl - g = f - gl = fl - f = e - fl = el - el = (dl + t1l) | 0 - e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0 - d = c - dl = cl - c = b - cl = bl - b = a - bl = al - al = (t1l + t2l) | 0 - a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0 +}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) +},{"../../is-buffer/index.js":227}],151:[function(require,module,exports){ +(function (Buffer){ +var elliptic = require('elliptic'); +var BN = require('bn.js'); - i++ - j += 2 - } +module.exports = function createECDH(curve) { + return new ECDH(curve); +}; - while (i < 16) { - Wi = M.readInt32BE(j * 4) - Wil = M.readInt32BE(j * 4 + 4) +var aliases = { + secp256k1: { + name: 'secp256k1', + byteLength: 32 + }, + secp224r1: { + name: 'p224', + byteLength: 28 + }, + prime256v1: { + name: 'p256', + byteLength: 32 + }, + prime192v1: { + name: 'p192', + byteLength: 24 + }, + ed25519: { + name: 'ed25519', + byteLength: 32 + }, + secp384r1: { + name: 'p384', + byteLength: 48 + }, + secp521r1: { + name: 'p521', + byteLength: 66 + } +}; - loop() - } +aliases.p224 = aliases.secp224r1; +aliases.p256 = aliases.secp256r1 = aliases.prime256v1; +aliases.p192 = aliases.secp192r1 = aliases.prime192v1; +aliases.p384 = aliases.secp384r1; +aliases.p521 = aliases.secp521r1; - while (i < 80) { - calcW() - loop() - } +function ECDH(curve) { + this.curveType = aliases[curve]; + if (!this.curveType ) { + this.curveType = { + name: curve + }; + } + this.curve = new elliptic.ec(this.curveType.name); + this.keys = void 0; +} - this._al = (this._al + al) | 0 - this._bl = (this._bl + bl) | 0 - this._cl = (this._cl + cl) | 0 - this._dl = (this._dl + dl) | 0 - this._el = (this._el + el) | 0 - this._fl = (this._fl + fl) | 0 - this._gl = (this._gl + gl) | 0 - this._hl = (this._hl + hl) | 0 +ECDH.prototype.generateKeys = function (enc, format) { + this.keys = this.curve.genKeyPair(); + return this.getPublicKey(enc, format); +}; - this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0 - this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0 - this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0 - this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0 - this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0 - this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0 - this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0 - this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0 -} +ECDH.prototype.computeSecret = function (other, inenc, enc) { + inenc = inenc || 'utf8'; + if (!Buffer.isBuffer(other)) { + other = new Buffer(other, inenc); + } + var otherPub = this.curve.keyFromPublic(other).getPublic(); + var out = otherPub.mul(this.keys.getPrivate()).getX(); + return formatReturnValue(out, enc, this.curveType.byteLength); +}; -Sha512.prototype._hash = function () { - var H = new Buffer(64) +ECDH.prototype.getPublicKey = function (enc, format) { + var key = this.keys.getPublic(format === 'compressed', true); + if (format === 'hybrid') { + if (key[key.length - 1] % 2) { + key[0] = 7; + } else { + key [0] = 6; + } + } + return formatReturnValue(key, enc); +}; - function writeInt64BE (h, l, offset) { - H.writeInt32BE(h, offset) - H.writeInt32BE(l, offset + 4) - } +ECDH.prototype.getPrivateKey = function (enc) { + return formatReturnValue(this.keys.getPrivate(), enc); +}; - writeInt64BE(this._a, this._al, 0) - writeInt64BE(this._b, this._bl, 8) - writeInt64BE(this._c, this._cl, 16) - writeInt64BE(this._d, this._dl, 24) - writeInt64BE(this._e, this._el, 32) - writeInt64BE(this._f, this._fl, 40) - writeInt64BE(this._g, this._gl, 48) - writeInt64BE(this._h, this._hl, 56) +ECDH.prototype.setPublicKey = function (pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); + } + this.keys._importPublic(pub); + return this; +}; - return H -} +ECDH.prototype.setPrivateKey = function (priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); + } + var _priv = new BN(priv); + _priv = _priv.toString(16); + this.keys._importPrivate(_priv); + return this; +}; -module.exports = Sha512 +function formatReturnValue(bn, enc, len) { + if (!Array.isArray(bn)) { + bn = bn.toArray(); + } + var buf = new Buffer(bn); + if (len && buf.length < len) { + var zeros = new Buffer(len - buf.length); + zeros.fill(0); + buf = Buffer.concat([zeros, buf]); + } + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } +} }).call(this,require("buffer").Buffer) -},{"./hash":232,"buffer":99,"inherits":296}],240:[function(require,module,exports){ +},{"bn.js":152,"buffer":147,"elliptic":153}],152:[function(require,module,exports){ +arguments[4][120][0].apply(exports,arguments) +},{"dup":120}],153:[function(require,module,exports){ +arguments[4][126][0].apply(exports,arguments) +},{"../package.json":169,"./elliptic/curve":156,"./elliptic/curves":159,"./elliptic/ec":160,"./elliptic/eddsa":163,"./elliptic/hmac-drbg":166,"./elliptic/utils":168,"brorand":99,"dup":126}],154:[function(require,module,exports){ +arguments[4][127][0].apply(exports,arguments) +},{"../../elliptic":153,"bn.js":152,"dup":127}],155:[function(require,module,exports){ +arguments[4][128][0].apply(exports,arguments) +},{"../../elliptic":153,"../curve":156,"bn.js":152,"dup":128,"inherits":226}],156:[function(require,module,exports){ +arguments[4][61][0].apply(exports,arguments) +},{"./base":154,"./edwards":155,"./mont":157,"./short":158,"dup":61}],157:[function(require,module,exports){ +arguments[4][130][0].apply(exports,arguments) +},{"../../elliptic":153,"../curve":156,"bn.js":152,"dup":130,"inherits":226}],158:[function(require,module,exports){ +arguments[4][131][0].apply(exports,arguments) +},{"../../elliptic":153,"../curve":156,"bn.js":152,"dup":131,"inherits":226}],159:[function(require,module,exports){ +arguments[4][132][0].apply(exports,arguments) +},{"../elliptic":153,"./precomputed/secp256k1":167,"dup":132,"hash.js":219}],160:[function(require,module,exports){ +arguments[4][133][0].apply(exports,arguments) +},{"../../elliptic":153,"./key":161,"./signature":162,"bn.js":152,"dup":133}],161:[function(require,module,exports){ +arguments[4][134][0].apply(exports,arguments) +},{"bn.js":152,"dup":134}],162:[function(require,module,exports){ +arguments[4][135][0].apply(exports,arguments) +},{"../../elliptic":153,"bn.js":152,"dup":135}],163:[function(require,module,exports){ +arguments[4][136][0].apply(exports,arguments) +},{"../../elliptic":153,"./key":164,"./signature":165,"dup":136,"hash.js":219}],164:[function(require,module,exports){ +arguments[4][137][0].apply(exports,arguments) +},{"../../elliptic":153,"dup":137}],165:[function(require,module,exports){ +arguments[4][138][0].apply(exports,arguments) +},{"../../elliptic":153,"bn.js":152,"dup":138}],166:[function(require,module,exports){ +arguments[4][68][0].apply(exports,arguments) +},{"../elliptic":153,"dup":68,"hash.js":219}],167:[function(require,module,exports){ +arguments[4][69][0].apply(exports,arguments) +},{"dup":69}],168:[function(require,module,exports){ +arguments[4][141][0].apply(exports,arguments) +},{"bn.js":152,"dup":141}],169:[function(require,module,exports){ +module.exports={ + "_args": [ + [ + "elliptic@^6.0.0", + "/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/create-ecdh" + ] + ], + "_from": "elliptic@>=6.0.0 <7.0.0", + "_id": "elliptic@6.2.3", + "_inCache": true, + "_installable": true, + "_location": "/create-ecdh/elliptic", + "_nodeVersion": "5.4.1", + "_npmUser": { + "email": "fedor@indutny.com", + "name": "indutny" + }, + "_npmVersion": "3.3.12", + "_phantomChildren": {}, + "_requested": { + "name": "elliptic", + "raw": "elliptic@^6.0.0", + "rawSpec": "^6.0.0", + "scope": null, + "spec": ">=6.0.0 <7.0.0", + "type": "range" + }, + "_requiredBy": [ + "/create-ecdh" + ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz", + "_shasum": "18e46d7306b0951275a2d42063270a14b74ebe99", + "_shrinkwrap": null, + "_spec": "elliptic@^6.0.0", + "_where": "/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/create-ecdh", + "author": { + "email": "fedor@indutny.com", + "name": "Fedor Indutny" + }, + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" + }, + "description": "EC cryptography", + "devDependencies": { + "coveralls": "^2.11.3", + "istanbul": "^0.4.2", + "jscs": "^2.9.0", + "jshint": "^2.6.0", + "mocha": "^2.1.0" + }, + "directories": {}, + "dist": { + "shasum": "18e46d7306b0951275a2d42063270a14b74ebe99", + "tarball": "http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz" + }, + "files": [ + "lib" + ], + "gitHead": "c32f20b22b420eb6af3c6dda28963deb7facf823", + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "Cryptography", + "EC", + "Elliptic", + "curve" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "maintainers": [ + { + "name": "indutny", + "email": "fedor@indutny.com" + } + ], + "name": "elliptic", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" + }, + "scripts": { + "coverage": "npm run unit --coverage", + "coveralls": "npm run coverage && cat ./coverage/lcov.info | coveralls", + "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", + "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", + "lint": "npm run jscs && npm run jshint", + "test": "npm run lint && npm run unit", + "unit": "istanbul test _mocha --reporter=spec test/*-test.js" + }, + "version": "6.2.3" +} + +},{}],170:[function(require,module,exports){ (function (Buffer){ 'use strict'; -var createHash = require('create-hash/browser'); var inherits = require('inherits') +var md5 = require('./md5') +var rmd160 = require('ripemd160') +var sha = require('sha.js') -var Transform = require('stream').Transform - -var ZEROS = new Buffer(128) -ZEROS.fill(0) - -function Hmac(alg, key) { - Transform.call(this) - alg = alg.toLowerCase() - if (typeof key === 'string') { - key = new Buffer(key) - } - - var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 - - this._alg = alg - this._key = key - - if (key.length > blocksize) { - key = createHash(alg).update(key).digest() +var Base = require('cipher-base') - } else if (key.length < blocksize) { - key = Buffer.concat([key, ZEROS], blocksize) - } +function HashNoConstructor(hash) { + Base.call(this, 'digest') - var ipad = this._ipad = new Buffer(blocksize) - var opad = this._opad = new Buffer(blocksize) + this._hash = hash + this.buffers = [] +} - for (var i = 0; i < blocksize; i++) { - ipad[i] = key[i] ^ 0x36 - opad[i] = key[i] ^ 0x5C - } +inherits(HashNoConstructor, Base) - this._hash = createHash(alg).update(ipad) +HashNoConstructor.prototype._update = function (data) { + this.buffers.push(data) } -inherits(Hmac, Transform) - -Hmac.prototype.update = function (data, enc) { - this._hash.update(data, enc) +HashNoConstructor.prototype._final = function () { + var buf = Buffer.concat(this.buffers) + var r = this._hash(buf) + this.buffers = null - return this + return r } -Hmac.prototype._transform = function (data, _, next) { - this._hash.update(data) +function Hash(hash) { + Base.call(this, 'digest') - next() + this._hash = hash } -Hmac.prototype._flush = function (next) { - this.push(this.digest()) +inherits(Hash, Base) - next() +Hash.prototype._update = function (data) { + this._hash.update(data) } -Hmac.prototype.digest = function (enc) { - var h = this._hash.digest() - - return createHash(this._alg).update(this._opad).update(h).digest(enc) +Hash.prototype._final = function () { + return this._hash.digest() } -module.exports = function createHmac(alg, key) { - return new Hmac(alg, key) +module.exports = function createHash (alg) { + alg = alg.toLowerCase() + if ('md5' === alg) return new HashNoConstructor(md5) + if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160) + + return new Hash(sha(alg)) } }).call(this,require("buffer").Buffer) -},{"buffer":99,"create-hash/browser":227,"inherits":296,"stream":315}],241:[function(require,module,exports){ +},{"./md5":172,"buffer":147,"cipher-base":149,"inherits":226,"ripemd160":258,"sha.js":284}],171:[function(require,module,exports){ (function (Buffer){ -var generatePrime = require('./lib/generatePrime') -var primes = require('./lib/primes.json') +'use strict'; +var intSize = 4; +var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0); +var chrsz = 8; -var DH = require('./lib/dh') +function toArray(buf, bigEndian) { + if ((buf.length % intSize) !== 0) { + var len = buf.length + (intSize - (buf.length % intSize)); + buf = Buffer.concat([buf, zeroBuffer], len); + } -function getDiffieHellman (mod) { - var prime = new Buffer(primes[mod].prime, 'hex') - var gen = new Buffer(primes[mod].gen, 'hex') + var arr = []; + var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE; + for (var i = 0; i < buf.length; i += intSize) { + arr.push(fn.call(buf, i)); + } + return arr; +} - return new DH(prime, gen) +function toBuffer(arr, size, bigEndian) { + var buf = new Buffer(size); + var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE; + for (var i = 0; i < arr.length; i++) { + fn.call(buf, arr[i], i * 4, true); + } + return buf; } -var ENCODINGS = { - 'binary': true, 'hex': true, 'base64': true +function hash(buf, fn, hashSize, bigEndian) { + if (!Buffer.isBuffer(buf)) buf = new Buffer(buf); + var arr = fn(toArray(buf, bigEndian), buf.length * chrsz); + return toBuffer(arr, hashSize, bigEndian); } +exports.hash = hash; +}).call(this,require("buffer").Buffer) +},{"buffer":147}],172:[function(require,module,exports){ +'use strict'; +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ -function createDiffieHellman (prime, enc, generator, genc) { - if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { - return createDiffieHellman(prime, 'binary', enc, generator) - } +var helpers = require('./helpers'); - enc = enc || 'binary' - genc = genc || 'binary' - generator = generator || new Buffer([2]) +/* + * Calculate the MD5 of an array of little-endian words, and a bit length + */ +function core_md5(x, len) +{ + /* append padding */ + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; - if (!Buffer.isBuffer(generator)) { - generator = new Buffer(generator, genc) - } + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; - if (typeof prime === 'number') { - return new DH(generatePrime(prime, generator), generator, true) - } + for(var i = 0; i < x.length; i += 16) + { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; - if (!Buffer.isBuffer(prime)) { - prime = new Buffer(prime, enc) - } + a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); + d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); + d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); + d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i+10], 17, -42063); + b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); + d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); - return new DH(prime, generator, true) -} + a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); + d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); + c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); + d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); + c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); + d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); + c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); + d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); + c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); -exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman -exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman + a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); + d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); + d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); + d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); + d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); -}).call(this,require("buffer").Buffer) -},{"./lib/dh":242,"./lib/generatePrime":243,"./lib/primes.json":244,"buffer":99}],242:[function(require,module,exports){ -(function (Buffer){ -var BN = require('bn.js'); -var MillerRabin = require('miller-rabin'); -var millerRabin = new MillerRabin(); -var TWENTYFOUR = new BN(24); -var ELEVEN = new BN(11); -var TEN = new BN(10); -var THREE = new BN(3); -var SEVEN = new BN(7); -var primes = require('./generatePrime'); -var randomBytes = require('randombytes'); -module.exports = DH; + a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); + d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); + d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); + d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); + d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); -function setPublicKey(pub, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(pub)) { - pub = new Buffer(pub, enc); + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); } - this._pub = new BN(pub); - return this; -} + return Array(a, b, c, d); -function setPrivateKey(priv, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(priv)) { - priv = new Buffer(priv, enc); - } - this._priv = new BN(priv); - return this; } -var primeCache = {}; -function checkPrime(prime, generator) { - var gen = generator.toString('hex'); - var hex = [gen, prime.toString(16)].join('_'); - if (hex in primeCache) { - return primeCache[hex]; - } - var error = 0; - - if (prime.isEven() || - !primes.simpleSieve || - !primes.fermatTest(prime) || - !millerRabin.test(prime)) { - //not a prime so +1 - error += 1; - - if (gen === '02' || gen === '05') { - // we'd be able to check the generator - // it would fail so +8 - error += 8; - } else { - //we wouldn't be able to test the generator - // so +4 - error += 4; - } - primeCache[hex] = error; - return error; - } - if (!millerRabin.test(prime.shrn(1))) { - //not a safe prime - error += 2; - } - var rem; - switch (gen) { - case '02': - if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { - // unsuidable generator - error += 8; - } - break; - case '05': - rem = prime.mod(TEN); - if (rem.cmp(THREE) && rem.cmp(SEVEN)) { - // prime mod 10 needs to equal 3 or 7 - error += 8; - } - break; - default: - error += 4; - } - primeCache[hex] = error; - return error; +/* + * These functions implement the four basic operations the algorithm uses. + */ +function md5_cmn(q, a, b, x, s, t) +{ + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); } - -function DH(prime, generator, malleable) { - this.setGenerator(generator); - this.__prime = new BN(prime); - this._prime = BN.mont(this.__prime); - this._primeLen = prime.length; - this._pub = undefined; - this._priv = undefined; - this._primeCode = undefined; - if (malleable) { - this.setPublicKey = setPublicKey; - this.setPrivateKey = setPrivateKey; - } else { - this._primeCode = 8; - } +function md5_ff(a, b, c, d, x, s, t) +{ + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5_gg(a, b, c, d, x, s, t) +{ + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5_hh(a, b, c, d, x, s, t) +{ + return md5_cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5_ii(a, b, c, d, x, s, t) +{ + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); } -Object.defineProperty(DH.prototype, 'verifyError', { - enumerable: true, - get: function () { - if (typeof this._primeCode !== 'number') { - this._primeCode = checkPrime(this.__prime, this.__gen); - } - return this._primeCode; - } -}); -DH.prototype.generateKeys = function () { - if (!this._priv) { - this._priv = new BN(randomBytes(this._primeLen)); - } - this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); - return this.getPublicKey(); -}; -DH.prototype.computeSecret = function (other) { - other = new BN(other); - other = other.toRed(this._prime); - var secret = other.redPow(this._priv).fromRed(); - var out = new Buffer(secret.toArray()); - var prime = this.getPrime(); - if (out.length < prime.length) { - var front = new Buffer(prime.length - out.length); - front.fill(0); - out = Buffer.concat([front, out]); - } - return out; -}; +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +function safe_add(x, y) +{ + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} -DH.prototype.getPublicKey = function getPublicKey(enc) { - return formatReturnValue(this._pub, enc); -}; +/* + * Bitwise rotate a 32-bit number to the left. + */ +function bit_rol(num, cnt) +{ + return (num << cnt) | (num >>> (32 - cnt)); +} -DH.prototype.getPrivateKey = function getPrivateKey(enc) { - return formatReturnValue(this._priv, enc); +module.exports = function md5(buf) { + return helpers.hash(buf, core_md5, 16); }; +},{"./helpers":171}],173:[function(require,module,exports){ +(function (Buffer){ +'use strict'; +var createHash = require('create-hash/browser'); +var inherits = require('inherits') -DH.prototype.getPrime = function (enc) { - return formatReturnValue(this.__prime, enc); -}; +var Transform = require('stream').Transform -DH.prototype.getGenerator = function (enc) { - return formatReturnValue(this._gen, enc); -}; +var ZEROS = new Buffer(128) +ZEROS.fill(0) -DH.prototype.setGenerator = function (gen, enc) { - enc = enc || 'utf8'; - if (!Buffer.isBuffer(gen)) { - gen = new Buffer(gen, enc); +function Hmac(alg, key) { + Transform.call(this) + alg = alg.toLowerCase() + if (typeof key === 'string') { + key = new Buffer(key) } - this.__gen = gen; - this._gen = new BN(gen); - return this; -}; -function formatReturnValue(bn, enc) { - var buf = new Buffer(bn.toArray()); - if (!enc) { - return buf; - } else { - return buf.toString(enc); - } -} + var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 -}).call(this,require("buffer").Buffer) -},{"./generatePrime":243,"bn.js":245,"buffer":99,"miller-rabin":246,"randombytes":294}],243:[function(require,module,exports){ -var randomBytes = require('randombytes'); -module.exports = findPrime; -findPrime.simpleSieve = simpleSieve; -findPrime.fermatTest = fermatTest; -var BN = require('bn.js'); -var TWENTYFOUR = new BN(24); -var MillerRabin = require('miller-rabin'); -var millerRabin = new MillerRabin(); -var ONE = new BN(1); -var TWO = new BN(2); -var FIVE = new BN(5); -var SIXTEEN = new BN(16); -var EIGHT = new BN(8); -var TEN = new BN(10); -var THREE = new BN(3); -var SEVEN = new BN(7); -var ELEVEN = new BN(11); -var FOUR = new BN(4); -var TWELVE = new BN(12); -var primes = null; + this._alg = alg + this._key = key -function _getPrimes() { - if (primes !== null) - return primes; + if (key.length > blocksize) { + key = createHash(alg).update(key).digest() - var limit = 0x100000; - var res = []; - res[0] = 2; - for (var i = 1, k = 3; k < limit; k += 2) { - var sqrt = Math.ceil(Math.sqrt(k)); - for (var j = 0; j < i && res[j] <= sqrt; j++) - if (k % res[j] === 0) - break; + } else if (key.length < blocksize) { + key = Buffer.concat([key, ZEROS], blocksize) + } - if (i !== j && res[j] <= sqrt) - continue; + var ipad = this._ipad = new Buffer(blocksize) + var opad = this._opad = new Buffer(blocksize) - res[i++] = k; + for (var i = 0; i < blocksize; i++) { + ipad[i] = key[i] ^ 0x36 + opad[i] = key[i] ^ 0x5C } - primes = res; - return res; + + this._hash = createHash(alg).update(ipad) } -function simpleSieve(p) { - var primes = _getPrimes(); +inherits(Hmac, Transform) - for (var i = 0; i < primes.length; i++) - if (p.modn(primes[i]) === 0) { - if (p.cmpn(primes[i]) === 0) { - return true; - } else { - return false; - } - } +Hmac.prototype.update = function (data, enc) { + this._hash.update(data, enc) - return true; + return this } -function fermatTest(p) { - var red = BN.mont(p); - return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; +Hmac.prototype._transform = function (data, _, next) { + this._hash.update(data) + + next() } -function findPrime(bits, gen) { - if (bits < 16) { - // this is what openssl does - if (gen === 2 || gen === 5) { - return new BN([0x8c, 0x7b]); - } else { - return new BN([0x8c, 0x27]); - } - } - gen = new BN(gen); +Hmac.prototype._flush = function (next) { + this.push(this.digest()) - var num, n2; + next() +} - while (true) { - num = new BN(randomBytes(Math.ceil(bits / 8))); - while (num.bitLength() > bits) { - num.ishrn(1); - } - if (num.isEven()) { - num.iadd(ONE); - } - if (!num.testn(1)) { - num.iadd(TWO); - } - if (!gen.cmp(TWO)) { - while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { - num.iadd(FOUR); - } - } else if (!gen.cmp(FIVE)) { - while (num.mod(TEN).cmp(THREE)) { - num.iadd(FOUR); - } - } - n2 = num.shrn(1); - if (simpleSieve(n2) && simpleSieve(num) && - fermatTest(n2) && fermatTest(num) && - millerRabin.test(n2) && millerRabin.test(num)) { - return num; - } - } +Hmac.prototype.digest = function (enc) { + var h = this._hash.digest() + return createHash(this._alg).update(this._opad).update(h).digest(enc) } -},{"bn.js":245,"miller-rabin":246,"randombytes":294}],244:[function(require,module,exports){ -module.exports={ - "modp1": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" - }, - "modp2": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" - }, - "modp5": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" - }, - "modp14": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" - }, - "modp15": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" - }, - "modp16": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" - }, - "modp17": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" - }, - "modp18": { - "gen": "02", - "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" - } +module.exports = function createHmac(alg, key) { + return new Hmac(alg, key) } -},{}],245:[function(require,module,exports){ -arguments[4][136][0].apply(exports,arguments) -},{"dup":136}],246:[function(require,module,exports){ -var bn = require('bn.js'); -var brorand = require('brorand'); -function MillerRabin(rand) { - this.rand = rand || new brorand.Rand(); +}).call(this,require("buffer").Buffer) +},{"buffer":147,"create-hash/browser":170,"inherits":226,"stream":291}],174:[function(require,module,exports){ +'use strict' + +exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') +exports.createHash = exports.Hash = require('create-hash') +exports.createHmac = exports.Hmac = require('create-hmac') + +var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(Object.keys(require('browserify-sign/algos'))) +exports.getHashes = function () { + return hashes } -module.exports = MillerRabin; -MillerRabin.create = function create(rand) { - return new MillerRabin(rand); -}; +var p = require('pbkdf2') +exports.pbkdf2 = p.pbkdf2 +exports.pbkdf2Sync = p.pbkdf2Sync -MillerRabin.prototype._rand = function _rand(n) { - var len = n.bitLength(); - var buf = this.rand.generate(Math.ceil(len / 8)); +var aes = require('browserify-cipher') +;[ + 'Cipher', + 'createCipher', + 'Cipheriv', + 'createCipheriv', + 'Decipher', + 'createDecipher', + 'Decipheriv', + 'createDecipheriv', + 'getCiphers', + 'listCiphers' +].forEach(function (key) { + exports[key] = aes[key] +}) - // Set low bits - buf[0] |= 3; +var dh = require('diffie-hellman') +;[ + 'DiffieHellmanGroup', + 'createDiffieHellmanGroup', + 'getDiffieHellman', + 'createDiffieHellman', + 'DiffieHellman' +].forEach(function (key) { + exports[key] = dh[key] +}) - // Mask high bits - var mask = len & 0x7; - if (mask !== 0) - buf[buf.length - 1] >>= 7 - mask; +var sign = require('browserify-sign') +;[ + 'createSign', + 'Sign', + 'createVerify', + 'Verify' +].forEach(function (key) { + exports[key] = sign[key] +}) - return new bn(buf); -} +exports.createECDH = require('create-ecdh') -MillerRabin.prototype.test = function test(n, k, cb) { - var len = n.bitLength(); - var red = bn.mont(n); - var rone = new bn(1).toRed(red); +var publicEncrypt = require('public-encrypt') - if (!k) - k = Math.max(1, (len / 48) | 0); +;[ + 'publicEncrypt', + 'privateEncrypt', + 'publicDecrypt', + 'privateDecrypt' +].forEach(function (key) { + exports[key] = publicEncrypt[key] +}) - // Find d and s, (n - 1) = (2 ^ s) * d; - var n1 = n.subn(1); - var n2 = n1.subn(1); - for (var s = 0; !n1.testn(s); s++) {} - var d = n.shrn(s); +// the least I can do is make error messages for the rest of the node.js/crypto api. +;[ + 'createCredentials' +].forEach(function (name) { + exports[name] = function () { + throw new Error([ + 'sorry, ' + name + ' is not implemented yet', + 'we accept pull requests', + 'https://github.com/crypto-browserify/crypto-browserify' + ].join('\n')) + } +}) - var rn1 = n1.toRed(red); +},{"browserify-cipher":116,"browserify-sign":123,"browserify-sign/algos":122,"create-ecdh":151,"create-hash":170,"create-hmac":173,"diffie-hellman":192,"pbkdf2":234,"public-encrypt":236,"randombytes":247}],175:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { - var prime = true; - for (; k > 0; k--) { - var a = this._rand(n2); - if (cb) - cb(a); + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var BlockCipher = C_lib.BlockCipher; + var C_algo = C.algo; - var x = a.toRed(red).redPow(d); - if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) - continue; + // Lookup tables + var SBOX = []; + var INV_SBOX = []; + var SUB_MIX_0 = []; + var SUB_MIX_1 = []; + var SUB_MIX_2 = []; + var SUB_MIX_3 = []; + var INV_SUB_MIX_0 = []; + var INV_SUB_MIX_1 = []; + var INV_SUB_MIX_2 = []; + var INV_SUB_MIX_3 = []; - for (var i = 1; i < s; i++) { - x = x.redSqr(); + // Compute lookup tables + (function () { + // Compute double table + var d = []; + for (var i = 0; i < 256; i++) { + if (i < 128) { + d[i] = i << 1; + } else { + d[i] = (i << 1) ^ 0x11b; + } + } - if (x.cmp(rone) === 0) - return false; - if (x.cmp(rn1) === 0) - break; - } + // Walk GF(2^8) + var x = 0; + var xi = 0; + for (var i = 0; i < 256; i++) { + // Compute sbox + var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); + sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; + SBOX[x] = sx; + INV_SBOX[sx] = x; - if (i === s) - return false; - } + // Compute multiplication + var x2 = d[x]; + var x4 = d[x2]; + var x8 = d[x4]; - return prime; -}; + // Compute sub bytes, mix columns tables + var t = (d[sx] * 0x101) ^ (sx * 0x1010100); + SUB_MIX_0[x] = (t << 24) | (t >>> 8); + SUB_MIX_1[x] = (t << 16) | (t >>> 16); + SUB_MIX_2[x] = (t << 8) | (t >>> 24); + SUB_MIX_3[x] = t; -MillerRabin.prototype.getDivisor = function getDivisor(n, k) { - var len = n.bitLength(); - var red = bn.mont(n); - var rone = new bn(1).toRed(red); + // Compute inv sub bytes, inv mix columns tables + var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); + INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); + INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); + INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); + INV_SUB_MIX_3[sx] = t; - if (!k) - k = Math.max(1, (len / 48) | 0); + // Compute next counter + if (!x) { + x = xi = 1; + } else { + x = x2 ^ d[d[d[x8 ^ x2]]]; + xi ^= d[d[xi]]; + } + } + }()); - // Find d and s, (n - 1) = (2 ^ s) * d; - var n1 = n.subn(1); - var n2 = n1.subn(1); - for (var s = 0; !n1.testn(s); s++) {} - var d = n.shrn(s); + // Precomputed Rcon lookup + var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + + /** + * AES block cipher algorithm. + */ + var AES = C_algo.AES = BlockCipher.extend({ + _doReset: function () { + // Shortcuts + var key = this._key; + var keyWords = key.words; + var keySize = key.sigBytes / 4; + + // Compute number of rounds + var nRounds = this._nRounds = keySize + 6 + + // Compute number of key schedule rows + var ksRows = (nRounds + 1) * 4; + + // Compute key schedule + var keySchedule = this._keySchedule = []; + for (var ksRow = 0; ksRow < ksRows; ksRow++) { + if (ksRow < keySize) { + keySchedule[ksRow] = keyWords[ksRow]; + } else { + var t = keySchedule[ksRow - 1]; + + if (!(ksRow % keySize)) { + // Rot word + t = (t << 8) | (t >>> 24); + + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + + // Mix Rcon + t ^= RCON[(ksRow / keySize) | 0] << 24; + } else if (keySize > 6 && ksRow % keySize == 4) { + // Sub word + t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + } + + keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; + } + } + + // Compute inv key schedule + var invKeySchedule = this._invKeySchedule = []; + for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { + var ksRow = ksRows - invKsRow; + + if (invKsRow % 4) { + var t = keySchedule[ksRow]; + } else { + var t = keySchedule[ksRow - 4]; + } - var rn1 = n1.toRed(red); + if (invKsRow < 4 || ksRow <= 4) { + invKeySchedule[invKsRow] = t; + } else { + invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ + INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; + } + } + }, - for (; k > 0; k--) { - var a = this._rand(n2); + encryptBlock: function (M, offset) { + this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); + }, - var g = n.gcd(a); - if (g.cmpn(1) !== 0) - return g; + decryptBlock: function (M, offset) { + // Swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; - var x = a.toRed(red).redPow(d); - if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) - continue; + this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); - for (var i = 1; i < s; i++) { - x = x.redSqr(); + // Inv swap 2nd and 4th rows + var t = M[offset + 1]; + M[offset + 1] = M[offset + 3]; + M[offset + 3] = t; + }, - if (x.cmp(rone) === 0) - return x.fromRed().subn(1).gcd(n); - if (x.cmp(rn1) === 0) - break; - } + _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { + // Shortcut + var nRounds = this._nRounds; - if (i === s) { - x = x.redSqr(); - return x.fromRed().subn(1).gcd(n); - } - } + // Get input, add round key + var s0 = M[offset] ^ keySchedule[0]; + var s1 = M[offset + 1] ^ keySchedule[1]; + var s2 = M[offset + 2] ^ keySchedule[2]; + var s3 = M[offset + 3] ^ keySchedule[3]; - return false; -}; + // Key schedule row counter + var ksRow = 4; -},{"bn.js":245,"brorand":247}],247:[function(require,module,exports){ -arguments[4][69][0].apply(exports,arguments) -},{"dup":69}],248:[function(require,module,exports){ -(function (Buffer){ -var createHmac = require('create-hmac') -var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs + // Rounds + for (var round = 1; round < nRounds; round++) { + // Shift rows, sub bytes, mix columns, add round key + var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; + var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; + var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; + var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; -exports.pbkdf2 = pbkdf2 -function pbkdf2 (password, salt, iterations, keylen, digest, callback) { - if (typeof digest === 'function') { - callback = digest - digest = undefined - } + // Update state + s0 = t0; + s1 = t1; + s2 = t2; + s3 = t3; + } - if (typeof callback !== 'function') { - throw new Error('No callback provided to pbkdf2') - } + // Shift rows, sub bytes, add round key + var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; + var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; + var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; + var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; - var result = pbkdf2Sync(password, salt, iterations, keylen, digest) - setTimeout(function () { - callback(undefined, result) - }) -} + // Set output + M[offset] = t0; + M[offset + 1] = t1; + M[offset + 2] = t2; + M[offset + 3] = t3; + }, -exports.pbkdf2Sync = pbkdf2Sync -function pbkdf2Sync (password, salt, iterations, keylen, digest) { - if (typeof iterations !== 'number') { - throw new TypeError('Iterations not a number') - } + keySize: 256/32 + }); - if (iterations < 0) { - throw new TypeError('Bad iterations') - } + /** + * Shortcut functions to the cipher's object interface. + * + * @example + * + * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); + * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); + */ + C.AES = BlockCipher._createHelper(AES); + }()); - if (typeof keylen !== 'number') { - throw new TypeError('Key length not a number') - } - if (keylen < 0 || keylen > MAX_ALLOC) { - throw new TypeError('Bad key length') - } + return CryptoJS.AES; - digest = digest || 'sha1' +})); +},{"./cipher-core":176,"./core":177,"./enc-base64":178,"./evpkdf":179,"./md5":181}],176:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { - if (!Buffer.isBuffer(password)) password = new Buffer(password, 'binary') - if (!Buffer.isBuffer(salt)) salt = new Buffer(salt, 'binary') + /** + * Cipher core components. + */ + CryptoJS.lib.Cipher || (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var Base64 = C_enc.Base64; + var C_algo = C.algo; + var EvpKDF = C_algo.EvpKDF; - var hLen - var l = 1 - var DK = new Buffer(keylen) - var block1 = new Buffer(salt.length + 4) - salt.copy(block1, 0, 0, salt.length) + /** + * Abstract base cipher template. + * + * @property {number} keySize This cipher's key size. Default: 4 (128 bits) + * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) + * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. + * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. + */ + var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + * + * @property {WordArray} iv The IV to use for this operation. + */ + cfg: Base.extend(), - var r - var T + /** + * Creates this cipher in encryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); + */ + createEncryptor: function (key, cfg) { + return this.create(this._ENC_XFORM_MODE, key, cfg); + }, - for (var i = 1; i <= l; i++) { - block1.writeUInt32BE(i, salt.length) - var U = createHmac(digest, password).update(block1).digest() + /** + * Creates this cipher in decryption mode. + * + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {Cipher} A cipher instance. + * + * @static + * + * @example + * + * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); + */ + createDecryptor: function (key, cfg) { + return this.create(this._DEC_XFORM_MODE, key, cfg); + }, - if (!hLen) { - hLen = U.length - T = new Buffer(hLen) - l = Math.ceil(keylen / hLen) - r = keylen - (l - 1) * hLen - } + /** + * Initializes a newly created cipher. + * + * @param {number} xformMode Either the encryption or decryption transormation mode constant. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @example + * + * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); + */ + init: function (xformMode, key, cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); - U.copy(T, 0, 0, hLen) + // Store transform mode and key + this._xformMode = xformMode; + this._key = key; - for (var j = 1; j < iterations; j++) { - U = createHmac(digest, password).update(U).digest() + // Set initial values + this.reset(); + }, - for (var k = 0; k < hLen; k++) { - T[k] ^= U[k] - } - } + /** + * Resets this cipher to its initial state. + * + * @example + * + * cipher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); - var destPos = (i - 1) * hLen - var len = (i === l ? r : hLen) - T.copy(DK, destPos, 0, len) - } + // Perform concrete-cipher logic + this._doReset(); + }, - return DK -} + /** + * Adds data to be encrypted or decrypted. + * + * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. + * + * @return {WordArray} The data after processing. + * + * @example + * + * var encrypted = cipher.process('data'); + * var encrypted = cipher.process(wordArray); + */ + process: function (dataUpdate) { + // Append + this._append(dataUpdate); -}).call(this,require("buffer").Buffer) -},{"buffer":99,"create-hmac":240}],249:[function(require,module,exports){ -exports.publicEncrypt = require('./publicEncrypt'); -exports.privateDecrypt = require('./privateDecrypt'); + // Process available blocks + return this._process(); + }, -exports.privateEncrypt = function privateEncrypt(key, buf) { - return exports.publicEncrypt(key, buf, true); -}; + /** + * Finalizes the encryption or decryption process. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. + * + * @return {WordArray} The data after final processing. + * + * @example + * + * var encrypted = cipher.finalize(); + * var encrypted = cipher.finalize('data'); + * var encrypted = cipher.finalize(wordArray); + */ + finalize: function (dataUpdate) { + // Final data update + if (dataUpdate) { + this._append(dataUpdate); + } -exports.publicDecrypt = function publicDecrypt(key, buf) { - return exports.privateDecrypt(key, buf, true); -}; -},{"./privateDecrypt":290,"./publicEncrypt":291}],250:[function(require,module,exports){ -(function (Buffer){ -var createHash = require('create-hash'); -module.exports = function (seed, len) { - var t = new Buffer(''); - var i = 0, c; - while (t.length < len) { - c = i2ops(i++); - t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]); - } - return t.slice(0, len); -}; + // Perform concrete-cipher logic + var finalProcessedData = this._doFinalize(); -function i2ops(c) { - var out = new Buffer(4); - out.writeUInt32BE(c,0); - return out; -} -}).call(this,require("buffer").Buffer) -},{"buffer":99,"create-hash":227}],251:[function(require,module,exports){ -arguments[4][136][0].apply(exports,arguments) -},{"dup":136}],252:[function(require,module,exports){ -arguments[4][137][0].apply(exports,arguments) -},{"bn.js":251,"buffer":99,"dup":137,"randombytes":294}],253:[function(require,module,exports){ -arguments[4][162][0].apply(exports,arguments) -},{"dup":162}],254:[function(require,module,exports){ -arguments[4][163][0].apply(exports,arguments) -},{"asn1.js":257,"dup":163}],255:[function(require,module,exports){ -arguments[4][164][0].apply(exports,arguments) -},{"browserify-aes":274,"buffer":99,"dup":164,"evp_bytestokey":289}],256:[function(require,module,exports){ -arguments[4][165][0].apply(exports,arguments) -},{"./aesid.json":253,"./asn1":254,"./fixProc":255,"browserify-aes":274,"buffer":99,"dup":165,"pbkdf2":248}],257:[function(require,module,exports){ -arguments[4][166][0].apply(exports,arguments) -},{"./asn1/api":258,"./asn1/base":260,"./asn1/constants":264,"./asn1/decoders":266,"./asn1/encoders":269,"bn.js":251,"dup":166}],258:[function(require,module,exports){ -arguments[4][167][0].apply(exports,arguments) -},{"../asn1":257,"dup":167,"inherits":296,"vm":320}],259:[function(require,module,exports){ -arguments[4][168][0].apply(exports,arguments) -},{"../base":260,"buffer":99,"dup":168,"inherits":296}],260:[function(require,module,exports){ -arguments[4][169][0].apply(exports,arguments) -},{"./buffer":259,"./node":261,"./reporter":262,"dup":169}],261:[function(require,module,exports){ -arguments[4][170][0].apply(exports,arguments) -},{"../base":260,"dup":170,"minimalistic-assert":271}],262:[function(require,module,exports){ -arguments[4][171][0].apply(exports,arguments) -},{"dup":171,"inherits":296}],263:[function(require,module,exports){ -arguments[4][172][0].apply(exports,arguments) -},{"../constants":264,"dup":172}],264:[function(require,module,exports){ -arguments[4][173][0].apply(exports,arguments) -},{"./der":263,"dup":173}],265:[function(require,module,exports){ -arguments[4][174][0].apply(exports,arguments) -},{"../../asn1":257,"dup":174,"inherits":296}],266:[function(require,module,exports){ -arguments[4][175][0].apply(exports,arguments) -},{"./der":265,"./pem":267,"dup":175}],267:[function(require,module,exports){ -arguments[4][176][0].apply(exports,arguments) -},{"../../asn1":257,"./der":265,"buffer":99,"dup":176,"inherits":296}],268:[function(require,module,exports){ -arguments[4][177][0].apply(exports,arguments) -},{"../../asn1":257,"buffer":99,"dup":177,"inherits":296}],269:[function(require,module,exports){ -arguments[4][178][0].apply(exports,arguments) -},{"./der":268,"./pem":270,"dup":178}],270:[function(require,module,exports){ -arguments[4][179][0].apply(exports,arguments) -},{"../../asn1":257,"./der":268,"buffer":99,"dup":179,"inherits":296}],271:[function(require,module,exports){ -arguments[4][131][0].apply(exports,arguments) -},{"dup":131}],272:[function(require,module,exports){ -arguments[4][105][0].apply(exports,arguments) -},{"buffer":99,"dup":105}],273:[function(require,module,exports){ -arguments[4][106][0].apply(exports,arguments) -},{"./aes":272,"./ghash":277,"buffer":99,"buffer-xor":286,"cipher-base":287,"dup":106,"inherits":296}],274:[function(require,module,exports){ -arguments[4][107][0].apply(exports,arguments) -},{"./decrypter":275,"./encrypter":276,"./modes":278,"dup":107}],275:[function(require,module,exports){ -arguments[4][108][0].apply(exports,arguments) -},{"./aes":272,"./authCipher":273,"./modes":278,"./modes/cbc":279,"./modes/cfb":280,"./modes/cfb1":281,"./modes/cfb8":282,"./modes/ctr":283,"./modes/ecb":284,"./modes/ofb":285,"./streamCipher":288,"buffer":99,"cipher-base":287,"dup":108,"evp_bytestokey":289,"inherits":296}],276:[function(require,module,exports){ -arguments[4][109][0].apply(exports,arguments) -},{"./aes":272,"./authCipher":273,"./modes":278,"./modes/cbc":279,"./modes/cfb":280,"./modes/cfb1":281,"./modes/cfb8":282,"./modes/ctr":283,"./modes/ecb":284,"./modes/ofb":285,"./streamCipher":288,"buffer":99,"cipher-base":287,"dup":109,"evp_bytestokey":289,"inherits":296}],277:[function(require,module,exports){ -arguments[4][110][0].apply(exports,arguments) -},{"buffer":99,"dup":110}],278:[function(require,module,exports){ -arguments[4][111][0].apply(exports,arguments) -},{"dup":111}],279:[function(require,module,exports){ -arguments[4][112][0].apply(exports,arguments) -},{"buffer-xor":286,"dup":112}],280:[function(require,module,exports){ -arguments[4][113][0].apply(exports,arguments) -},{"buffer":99,"buffer-xor":286,"dup":113}],281:[function(require,module,exports){ -arguments[4][114][0].apply(exports,arguments) -},{"buffer":99,"dup":114}],282:[function(require,module,exports){ -arguments[4][115][0].apply(exports,arguments) -},{"buffer":99,"dup":115}],283:[function(require,module,exports){ -arguments[4][116][0].apply(exports,arguments) -},{"buffer":99,"buffer-xor":286,"dup":116}],284:[function(require,module,exports){ -arguments[4][117][0].apply(exports,arguments) -},{"dup":117}],285:[function(require,module,exports){ -arguments[4][118][0].apply(exports,arguments) -},{"buffer":99,"buffer-xor":286,"dup":118}],286:[function(require,module,exports){ -arguments[4][119][0].apply(exports,arguments) -},{"buffer":99,"dup":119}],287:[function(require,module,exports){ -arguments[4][120][0].apply(exports,arguments) -},{"buffer":99,"dup":120,"inherits":296,"stream":315,"string_decoder":316}],288:[function(require,module,exports){ -arguments[4][121][0].apply(exports,arguments) -},{"./aes":272,"buffer":99,"cipher-base":287,"dup":121,"inherits":296}],289:[function(require,module,exports){ -arguments[4][132][0].apply(exports,arguments) -},{"buffer":99,"create-hash/md5":229,"dup":132}],290:[function(require,module,exports){ -(function (Buffer){ -var parseKeys = require('parse-asn1'); -var mgf = require('./mgf'); -var xor = require('./xor'); -var bn = require('bn.js'); -var crt = require('browserify-rsa'); -var createHash = require('create-hash'); -var withPublic = require('./withPublic'); -module.exports = function privateDecrypt(private_key, enc, reverse) { - var padding; - if (private_key.padding) { - padding = private_key.padding; - } else if (reverse) { - padding = 1; - } else { - padding = 4; - } - - var key = parseKeys(private_key); - var k = key.modulus.byteLength(); - if (enc.length > k || new bn(enc).cmp(key.modulus) >= 0) { - throw new Error('decryption error'); - } - var msg; - if (reverse) { - msg = withPublic(new bn(enc), key); - } else { - msg = crt(enc, key); - } - var zBuffer = new Buffer(k - msg.length); - zBuffer.fill(0); - msg = Buffer.concat([zBuffer, msg], k); - if (padding === 4) { - return oaep(key, msg); - } else if (padding === 1) { - return pkcs1(key, msg, reverse); - } else if (padding === 3) { - return msg; - } else { - throw new Error('unknown padding'); - } -}; + return finalProcessedData; + }, -function oaep(key, msg){ - var n = key.modulus; - var k = key.modulus.byteLength(); - var mLen = msg.length; - var iHash = createHash('sha1').update(new Buffer('')).digest(); - var hLen = iHash.length; - var hLen2 = 2 * hLen; - if (msg[0] !== 0) { - throw new Error('decryption error'); - } - var maskedSeed = msg.slice(1, hLen + 1); - var maskedDb = msg.slice(hLen + 1); - var seed = xor(maskedSeed, mgf(maskedDb, hLen)); - var db = xor(maskedDb, mgf(seed, k - hLen - 1)); - if (compare(iHash, db.slice(0, hLen))) { - throw new Error('decryption error'); - } - var i = hLen; - while (db[i] === 0) { - i++; - } - if (db[i++] !== 1) { - throw new Error('decryption error'); - } - return db.slice(i); -} + keySize: 128/32, -function pkcs1(key, msg, reverse){ - var p1 = msg.slice(0, 2); - var i = 2; - var status = 0; - while (msg[i++] !== 0) { - if (i >= msg.length) { - status++; - break; - } - } - var ps = msg.slice(2, i - 1); - var p2 = msg.slice(i - 1, i); + ivSize: 128/32, - if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)){ - status++; - } - if (ps.length < 8) { - status++; - } - if (status) { - throw new Error('decryption error'); - } - return msg.slice(i); -} -function compare(a, b){ - a = new Buffer(a); - b = new Buffer(b); - var dif = 0; - var len = a.length; - if (a.length !== b.length) { - dif++; - len = Math.min(a.length, b.length); - } - var i = -1; - while (++i < len) { - dif += (a[i] ^ b[i]); - } - return dif; -} -}).call(this,require("buffer").Buffer) -},{"./mgf":250,"./withPublic":292,"./xor":293,"bn.js":251,"browserify-rsa":252,"buffer":99,"create-hash":227,"parse-asn1":256}],291:[function(require,module,exports){ -(function (Buffer){ -var parseKeys = require('parse-asn1'); -var randomBytes = require('randombytes'); -var createHash = require('create-hash'); -var mgf = require('./mgf'); -var xor = require('./xor'); -var bn = require('bn.js'); -var withPublic = require('./withPublic'); -var crt = require('browserify-rsa'); + _ENC_XFORM_MODE: 1, -var constants = { - RSA_PKCS1_OAEP_PADDING: 4, - RSA_PKCS1_PADDIN: 1, - RSA_NO_PADDING: 3 -}; + _DEC_XFORM_MODE: 2, -module.exports = function publicEncrypt(public_key, msg, reverse) { - var padding; - if (public_key.padding) { - padding = public_key.padding; - } else if (reverse) { - padding = 1; - } else { - padding = 4; - } - var key = parseKeys(public_key); - var paddedMsg; - if (padding === 4) { - paddedMsg = oaep(key, msg); - } else if (padding === 1) { - paddedMsg = pkcs1(key, msg, reverse); - } else if (padding === 3) { - paddedMsg = new bn(msg); - if (paddedMsg.cmp(key.modulus) >= 0) { - throw new Error('data too long for modulus'); - } - } else { - throw new Error('unknown padding'); - } - if (reverse) { - return crt(paddedMsg, key); - } else { - return withPublic(paddedMsg, key); - } -}; + /** + * Creates shortcut functions to a cipher's object interface. + * + * @param {Cipher} cipher The cipher to create a helper for. + * + * @return {Object} An object with encrypt and decrypt shortcut functions. + * + * @static + * + * @example + * + * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); + */ + _createHelper: (function () { + function selectCipherStrategy(key) { + if (typeof key == 'string') { + return PasswordBasedCipher; + } else { + return SerializableCipher; + } + } -function oaep(key, msg){ - var k = key.modulus.byteLength(); - var mLen = msg.length; - var iHash = createHash('sha1').update(new Buffer('')).digest(); - var hLen = iHash.length; - var hLen2 = 2 * hLen; - if (mLen > k - hLen2 - 2) { - throw new Error('message too long'); - } - var ps = new Buffer(k - mLen - hLen2 - 2); - ps.fill(0); - var dblen = k - hLen - 1; - var seed = randomBytes(hLen); - var maskedDb = xor(Buffer.concat([iHash, ps, new Buffer([1]), msg], dblen), mgf(seed, dblen)); - var maskedSeed = xor(seed, mgf(maskedDb, hLen)); - return new bn(Buffer.concat([new Buffer([0]), maskedSeed, maskedDb], k)); -} -function pkcs1(key, msg, reverse){ - var mLen = msg.length; - var k = key.modulus.byteLength(); - if (mLen > k - 11) { - throw new Error('message too long'); - } - var ps; - if (reverse) { - ps = new Buffer(k - mLen - 3); - ps.fill(0xff); - } else { - ps = nonZero(k - mLen - 3); - } - return new bn(Buffer.concat([new Buffer([0, reverse?1:2]), ps, new Buffer([0]), msg], k)); -} -function nonZero(len, crypto) { - var out = new Buffer(len); - var i = 0; - var cache = randomBytes(len*2); - var cur = 0; - var num; - while (i < len) { - if (cur === cache.length) { - cache = randomBytes(len*2); - cur = 0; - } - num = cache[cur++]; - if (num) { - out[i++] = num; - } - } - return out; -} -}).call(this,require("buffer").Buffer) -},{"./mgf":250,"./withPublic":292,"./xor":293,"bn.js":251,"browserify-rsa":252,"buffer":99,"create-hash":227,"parse-asn1":256,"randombytes":294}],292:[function(require,module,exports){ -(function (Buffer){ -var bn = require('bn.js'); -function withPublic(paddedMsg, key) { - return new Buffer(paddedMsg - .toRed(bn.mont(key.modulus)) - .redPow(new bn(key.publicExponent)) - .fromRed() - .toArray()); -} + return function (cipher) { + return { + encrypt: function (message, key, cfg) { + return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); + }, -module.exports = withPublic; -}).call(this,require("buffer").Buffer) -},{"bn.js":251,"buffer":99}],293:[function(require,module,exports){ -module.exports = function xor(a, b) { - var len = a.length; - var i = -1; - while (++i < len) { - a[i] ^= b[i]; - } - return a -}; -},{}],294:[function(require,module,exports){ -(function (process,global,Buffer){ -'use strict' + decrypt: function (ciphertext, key, cfg) { + return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); + } + }; + }; + }()) + }); -function oldBrowser () { - throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') -} + /** + * Abstract base stream cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) + */ + var StreamCipher = C_lib.StreamCipher = Cipher.extend({ + _doFinalize: function () { + // Process partial blocks + var finalProcessedBlocks = this._process(!!'flush'); -var crypto = global.crypto || global.msCrypto + return finalProcessedBlocks; + }, -if (crypto && crypto.getRandomValues) { - module.exports = randomBytes -} else { - module.exports = oldBrowser -} + blockSize: 1 + }); -function randomBytes (size, cb) { - // phantomjs needs to throw - if (size > 65536) throw new Error('requested too many random bytes') - // in case browserify isn't using the Uint8Array version - var rawBytes = new global.Uint8Array(size) + /** + * Mode namespace. + */ + var C_mode = C.mode = {}; - // This will not work in older browsers. - // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues - crypto.getRandomValues(rawBytes) + /** + * Abstract base block cipher mode template. + */ + var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ + /** + * Creates this mode for encryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); + */ + createEncryptor: function (cipher, iv) { + return this.Encryptor.create(cipher, iv); + }, - // phantomjs doesn't like a buffer being passed here - var bytes = new Buffer(rawBytes.buffer) + /** + * Creates this mode for decryption. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @static + * + * @example + * + * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); + */ + createDecryptor: function (cipher, iv) { + return this.Decryptor.create(cipher, iv); + }, - if (typeof cb === 'function') { - return process.nextTick(function () { - cb(null, bytes) - }) - } + /** + * Initializes a newly created mode. + * + * @param {Cipher} cipher A block cipher instance. + * @param {Array} iv The IV words. + * + * @example + * + * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); + */ + init: function (cipher, iv) { + this._cipher = cipher; + this._iv = iv; + } + }); - return bytes -} + /** + * Cipher Block Chaining mode. + */ + var CBC = C_mode.CBC = (function () { + /** + * Abstract base CBC mode. + */ + var CBC = BlockCipherMode.extend(); -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"_process":299,"buffer":99}],295:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + /** + * CBC encryptor. + */ + CBC.Encryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; -function EventEmitter() { - this._events = this._events || {}; - this._maxListeners = this._maxListeners || undefined; -} -module.exports = EventEmitter; + // XOR and encrypt + xorBlock.call(this, words, offset, blockSize); + cipher.encryptBlock(words, offset); -// Backwards-compat with node 0.10.x -EventEmitter.EventEmitter = EventEmitter; + // Remember this block to use with next block + this._prevBlock = words.slice(offset, offset + blockSize); + } + }); -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._maxListeners = undefined; + /** + * CBC decryptor. + */ + CBC.Decryptor = CBC.extend({ + /** + * Processes the data block at offset. + * + * @param {Array} words The data words to operate on. + * @param {number} offset The offset where the block starts. + * + * @example + * + * mode.processBlock(data.words, offset); + */ + processBlock: function (words, offset) { + // Shortcuts + var cipher = this._cipher; + var blockSize = cipher.blockSize; -// By default EventEmitters will print a warning if more than 10 listeners are -// added to it. This is a useful default which helps finding memory leaks. -EventEmitter.defaultMaxListeners = 10; + // Remember this block to use with next block + var thisBlock = words.slice(offset, offset + blockSize); -// Obviously not all Emitters should be limited to 10. This function allows -// that to be increased. Set to zero for unlimited. -EventEmitter.prototype.setMaxListeners = function(n) { - if (!isNumber(n) || n < 0 || isNaN(n)) - throw TypeError('n must be a positive number'); - this._maxListeners = n; - return this; -}; + // Decrypt and XOR + cipher.decryptBlock(words, offset); + xorBlock.call(this, words, offset, blockSize); -EventEmitter.prototype.emit = function(type) { - var er, handler, len, args, i, listeners; + // This block becomes the previous block + this._prevBlock = thisBlock; + } + }); - if (!this._events) - this._events = {}; + function xorBlock(words, offset, blockSize) { + // Shortcut + var iv = this._iv; - // If there is no 'error' event listener then throw. - if (type === 'error') { - if (!this._events.error || - (isObject(this._events.error) && !this._events.error.length)) { - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } - throw TypeError('Uncaught, unspecified "error" event.'); - } - } + // Choose mixing block + if (iv) { + var block = iv; - handler = this._events[type]; + // Remove IV for subsequent blocks + this._iv = undefined; + } else { + var block = this._prevBlock; + } - if (isUndefined(handler)) - return false; + // XOR blocks + for (var i = 0; i < blockSize; i++) { + words[offset + i] ^= block[i]; + } + } - if (isFunction(handler)) { - switch (arguments.length) { - // fast cases - case 1: - handler.call(this); - break; - case 2: - handler.call(this, arguments[1]); - break; - case 3: - handler.call(this, arguments[1], arguments[2]); - break; - // slower - default: - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - handler.apply(this, args); - } - } else if (isObject(handler)) { - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; + return CBC; + }()); - listeners = handler.slice(); - len = listeners.length; - for (i = 0; i < len; i++) - listeners[i].apply(this, args); - } + /** + * Padding namespace. + */ + var C_pad = C.pad = {}; - return true; -}; + /** + * PKCS #5/7 padding strategy. + */ + var Pkcs7 = C_pad.Pkcs7 = { + /** + * Pads data using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to pad. + * @param {number} blockSize The multiple that the data should be padded to. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.pad(wordArray, 4); + */ + pad: function (data, blockSize) { + // Shortcut + var blockSizeBytes = blockSize * 4; -EventEmitter.prototype.addListener = function(type, listener) { - var m; + // Count padding bytes + var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; - if (!isFunction(listener)) - throw TypeError('listener must be a function'); + // Create padding word + var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; - if (!this._events) - this._events = {}; + // Create padding + var paddingWords = []; + for (var i = 0; i < nPaddingBytes; i += 4) { + paddingWords.push(paddingWord); + } + var padding = WordArray.create(paddingWords, nPaddingBytes); - // To avoid recursion in the case that type === "newListener"! Before - // adding it to the listeners, first emit "newListener". - if (this._events.newListener) - this.emit('newListener', type, - isFunction(listener.listener) ? - listener.listener : listener); + // Add padding + data.concat(padding); + }, - if (!this._events[type]) - // Optimize the case of one listener. Don't need the extra array object. - this._events[type] = listener; - else if (isObject(this._events[type])) - // If we've already got an array, just append. - this._events[type].push(listener); - else - // Adding the second element, need to change to array. - this._events[type] = [this._events[type], listener]; + /** + * Unpads data that had been padded using the algorithm defined in PKCS #5/7. + * + * @param {WordArray} data The data to unpad. + * + * @static + * + * @example + * + * CryptoJS.pad.Pkcs7.unpad(wordArray); + */ + unpad: function (data) { + // Get number of padding bytes from last byte + var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - // Check for listener leak - if (isObject(this._events[type]) && !this._events[type].warned) { - var m; - if (!isUndefined(this._maxListeners)) { - m = this._maxListeners; - } else { - m = EventEmitter.defaultMaxListeners; - } + // Remove padding + data.sigBytes -= nPaddingBytes; + } + }; - if (m && m > 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + - 'leak detected. %d listeners added. ' + - 'Use emitter.setMaxListeners() to increase limit.', - this._events[type].length); - if (typeof console.trace === 'function') { - // not supported in IE 10 - console.trace(); - } - } - } + /** + * Abstract base block cipher template. + * + * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) + */ + var BlockCipher = C_lib.BlockCipher = Cipher.extend({ + /** + * Configuration options. + * + * @property {Mode} mode The block mode to use. Default: CBC + * @property {Padding} padding The padding strategy to use. Default: Pkcs7 + */ + cfg: Cipher.cfg.extend({ + mode: CBC, + padding: Pkcs7 + }), - return this; -}; + reset: function () { + // Reset cipher + Cipher.reset.call(this); -EventEmitter.prototype.on = EventEmitter.prototype.addListener; + // Shortcuts + var cfg = this.cfg; + var iv = cfg.iv; + var mode = cfg.mode; -EventEmitter.prototype.once = function(type, listener) { - if (!isFunction(listener)) - throw TypeError('listener must be a function'); + // Reset block mode + if (this._xformMode == this._ENC_XFORM_MODE) { + var modeCreator = mode.createEncryptor; + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + var modeCreator = mode.createDecryptor; - var fired = false; + // Keep at least one block in the buffer for unpadding + this._minBufferSize = 1; + } + this._mode = modeCreator.call(mode, this, iv && iv.words); + }, - function g() { - this.removeListener(type, g); + _doProcessBlock: function (words, offset) { + this._mode.processBlock(words, offset); + }, - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } + _doFinalize: function () { + // Shortcut + var padding = this.cfg.padding; + + // Finalize + if (this._xformMode == this._ENC_XFORM_MODE) { + // Pad data + padding.pad(this._data, this.blockSize); + + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { + // Process final blocks + var finalProcessedBlocks = this._process(!!'flush'); + + // Unpad data + padding.unpad(finalProcessedBlocks); + } - g.listener = listener; - this.on(type, g); + return finalProcessedBlocks; + }, - return this; -}; + blockSize: 128/32 + }); -// emits a 'removeListener' event iff the listener was removed -EventEmitter.prototype.removeListener = function(type, listener) { - var list, position, length, i; + /** + * A collection of cipher parameters. + * + * @property {WordArray} ciphertext The raw ciphertext. + * @property {WordArray} key The key to this ciphertext. + * @property {WordArray} iv The IV used in the ciphering operation. + * @property {WordArray} salt The salt used with a key derivation function. + * @property {Cipher} algorithm The cipher algorithm. + * @property {Mode} mode The block mode used in the ciphering operation. + * @property {Padding} padding The padding scheme used in the ciphering operation. + * @property {number} blockSize The block size of the cipher. + * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. + */ + var CipherParams = C_lib.CipherParams = Base.extend({ + /** + * Initializes a newly created cipher params object. + * + * @param {Object} cipherParams An object with any of the possible cipher parameters. + * + * @example + * + * var cipherParams = CryptoJS.lib.CipherParams.create({ + * ciphertext: ciphertextWordArray, + * key: keyWordArray, + * iv: ivWordArray, + * salt: saltWordArray, + * algorithm: CryptoJS.algo.AES, + * mode: CryptoJS.mode.CBC, + * padding: CryptoJS.pad.PKCS7, + * blockSize: 4, + * formatter: CryptoJS.format.OpenSSL + * }); + */ + init: function (cipherParams) { + this.mixIn(cipherParams); + }, - if (!isFunction(listener)) - throw TypeError('listener must be a function'); + /** + * Converts this cipher params object to a string. + * + * @param {Format} formatter (Optional) The formatting strategy to use. + * + * @return {string} The stringified cipher params. + * + * @throws Error If neither the formatter nor the default formatter is set. + * + * @example + * + * var string = cipherParams + ''; + * var string = cipherParams.toString(); + * var string = cipherParams.toString(CryptoJS.format.OpenSSL); + */ + toString: function (formatter) { + return (formatter || this.formatter).stringify(this); + } + }); - if (!this._events || !this._events[type]) - return this; + /** + * Format namespace. + */ + var C_format = C.format = {}; - list = this._events[type]; - length = list.length; - position = -1; + /** + * OpenSSL formatting strategy. + */ + var OpenSSLFormatter = C_format.OpenSSL = { + /** + * Converts a cipher params object to an OpenSSL-compatible string. + * + * @param {CipherParams} cipherParams The cipher params object. + * + * @return {string} The OpenSSL-compatible string. + * + * @static + * + * @example + * + * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); + */ + stringify: function (cipherParams) { + // Shortcuts + var ciphertext = cipherParams.ciphertext; + var salt = cipherParams.salt; - if (list === listener || - (isFunction(list.listener) && list.listener === listener)) { - delete this._events[type]; - if (this._events.removeListener) - this.emit('removeListener', type, listener); + // Format + if (salt) { + var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); + } else { + var wordArray = ciphertext; + } - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || - (list[i].listener && list[i].listener === listener)) { - position = i; - break; - } - } + return wordArray.toString(Base64); + }, - if (position < 0) - return this; + /** + * Converts an OpenSSL-compatible string to a cipher params object. + * + * @param {string} openSSLStr The OpenSSL-compatible string. + * + * @return {CipherParams} The cipher params object. + * + * @static + * + * @example + * + * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); + */ + parse: function (openSSLStr) { + // Parse base64 + var ciphertext = Base64.parse(openSSLStr); - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } + // Shortcut + var ciphertextWords = ciphertext.words; - if (this._events.removeListener) - this.emit('removeListener', type, listener); - } + // Test for salt + if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { + // Extract salt + var salt = WordArray.create(ciphertextWords.slice(2, 4)); - return this; -}; + // Remove salt from ciphertext + ciphertextWords.splice(0, 4); + ciphertext.sigBytes -= 16; + } -EventEmitter.prototype.removeAllListeners = function(type) { - var key, listeners; + return CipherParams.create({ ciphertext: ciphertext, salt: salt }); + } + }; - if (!this._events) - return this; + /** + * A cipher wrapper that returns ciphertext as a serializable cipher params object. + */ + var SerializableCipher = C_lib.SerializableCipher = Base.extend({ + /** + * Configuration options. + * + * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL + */ + cfg: Base.extend({ + format: OpenSSLFormatter + }), - // not listening for removeListener, no need to emit - if (!this._events.removeListener) { - if (arguments.length === 0) - this._events = {}; - else if (this._events[type]) - delete this._events[type]; - return this; - } + /** + * Encrypts a message. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); + * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); - // emit removeListener for all listeners on all events - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } + // Encrypt + var encryptor = cipher.createEncryptor(key, cfg); + var ciphertext = encryptor.finalize(message); - listeners = this._events[type]; + // Shortcut + var cipherCfg = encryptor.cfg; - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else { - // LIFO order - while (listeners.length) - this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; + // Create and return serializable cipher params + return CipherParams.create({ + ciphertext: ciphertext, + key: key, + iv: cipherCfg.iv, + algorithm: cipher, + mode: cipherCfg.mode, + padding: cipherCfg.padding, + blockSize: cipher.blockSize, + formatter: cfg.format + }); + }, - return this; -}; + /** + * Decrypts serialized ciphertext. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {WordArray} key The key. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, key, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); -EventEmitter.prototype.listeners = function(type) { - var ret; - if (!this._events || !this._events[type]) - ret = []; - else if (isFunction(this._events[type])) - ret = [this._events[type]]; - else - ret = this._events[type].slice(); - return ret; -}; + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); -EventEmitter.listenerCount = function(emitter, type) { - var ret; - if (!emitter._events || !emitter._events[type]) - ret = 0; - else if (isFunction(emitter._events[type])) - ret = 1; - else - ret = emitter._events[type].length; - return ret; -}; + // Decrypt + var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); -function isFunction(arg) { - return typeof arg === 'function'; -} + return plaintext; + }, -function isNumber(arg) { - return typeof arg === 'number'; -} + /** + * Converts serialized ciphertext to CipherParams, + * else assumed CipherParams already and returns ciphertext unchanged. + * + * @param {CipherParams|string} ciphertext The ciphertext. + * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. + * + * @return {CipherParams} The unserialized ciphertext. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); + */ + _parse: function (ciphertext, format) { + if (typeof ciphertext == 'string') { + return format.parse(ciphertext, this); + } else { + return ciphertext; + } + } + }); -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} + /** + * Key derivation function namespace. + */ + var C_kdf = C.kdf = {}; -function isUndefined(arg) { - return arg === void 0; -} + /** + * OpenSSL key derivation function. + */ + var OpenSSLKdf = C_kdf.OpenSSL = { + /** + * Derives a key and IV from a password. + * + * @param {string} password The password to derive from. + * @param {number} keySize The size in words of the key to generate. + * @param {number} ivSize The size in words of the IV to generate. + * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. + * + * @return {CipherParams} A cipher params object with the key, IV, and salt. + * + * @static + * + * @example + * + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); + * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); + */ + execute: function (password, keySize, ivSize, salt) { + // Generate random salt + if (!salt) { + salt = WordArray.random(64/8); + } -},{}],296:[function(require,module,exports){ -arguments[4][77][0].apply(exports,arguments) -},{"dup":77}],297:[function(require,module,exports){ -/** - * Determine if an object is Buffer - * - * Author: Feross Aboukhadijeh - * License: MIT - * - * `npm install is-buffer` - */ + // Derive key and IV + var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); -module.exports = function (obj) { - return !!(obj != null && - (obj._isBuffer || // For Safari 5-7 (missing Object.prototype.constructor) - (obj.constructor && - typeof obj.constructor.isBuffer === 'function' && - obj.constructor.isBuffer(obj)) - )) -} + // Separate key and IV + var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); + key.sigBytes = keySize * 4; -},{}],298:[function(require,module,exports){ -module.exports = Array.isArray || function (arr) { - return Object.prototype.toString.call(arr) == '[object Array]'; -}; + // Return params + return CipherParams.create({ key: key, iv: iv, salt: salt }); + } + }; -},{}],299:[function(require,module,exports){ -// shim for using process in browser + /** + * A serializable cipher wrapper that derives the key from a password, + * and returns ciphertext as a serializable cipher params object. + */ + var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ + /** + * Configuration options. + * + * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL + */ + cfg: SerializableCipher.cfg.extend({ + kdf: OpenSSLKdf + }), -var process = module.exports = {}; -var queue = []; -var draining = false; -var currentQueue; -var queueIndex = -1; + /** + * Encrypts a message using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {WordArray|string} message The message to encrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {CipherParams} A cipher params object. + * + * @static + * + * @example + * + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); + * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); + */ + encrypt: function (cipher, message, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); -function cleanUpNextTick() { - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } -} + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); -function drainQueue() { - if (draining) { - return; - } - var timeout = setTimeout(cleanUpNextTick); - draining = true; + // Add IV to config + cfg.iv = derivedParams.iv; - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - clearTimeout(timeout); -} + // Encrypt + var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); -process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - setTimeout(drainQueue, 0); - } -}; + // Mix in derived params + ciphertext.mixIn(derivedParams); -// v8 likes predictible objects -function Item(fun, array) { - this.fun = fun; - this.array = array; -} -Item.prototype.run = function () { - this.fun.apply(null, this.array); -}; -process.title = 'browser'; -process.browser = true; -process.env = {}; -process.argv = []; -process.version = ''; // empty string to avoid regexp issues -process.versions = {}; + return ciphertext; + }, + + /** + * Decrypts serialized ciphertext using a password. + * + * @param {Cipher} cipher The cipher algorithm to use. + * @param {CipherParams|string} ciphertext The ciphertext to decrypt. + * @param {string} password The password. + * @param {Object} cfg (Optional) The configuration options to use for this operation. + * + * @return {WordArray} The plaintext. + * + * @static + * + * @example + * + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); + * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); + */ + decrypt: function (cipher, ciphertext, password, cfg) { + // Apply config defaults + cfg = this.cfg.extend(cfg); -function noop() {} + // Convert string to CipherParams + ciphertext = this._parse(ciphertext, cfg.format); -process.on = noop; -process.addListener = noop; -process.once = noop; -process.off = noop; -process.removeListener = noop; -process.removeAllListeners = noop; -process.emit = noop; + // Derive key and other params + var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); -process.binding = function (name) { - throw new Error('process.binding is not supported'); -}; + // Add IV to config + cfg.iv = derivedParams.iv; -process.cwd = function () { return '/' }; -process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); -}; -process.umask = function() { return 0; }; + // Decrypt + var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); -},{}],300:[function(require,module,exports){ -(function (global){ -/*! https://mths.be/punycode v1.4.0 by @mathias */ -;(function(root) { + return plaintext; + } + }); + }()); - /** Detect free variables */ - var freeExports = typeof exports == 'object' && exports && - !exports.nodeType && exports; - var freeModule = typeof module == 'object' && module && - !module.nodeType && module; - var freeGlobal = typeof global == 'object' && global; - if ( - freeGlobal.global === freeGlobal || - freeGlobal.window === freeGlobal || - freeGlobal.self === freeGlobal - ) { - root = freeGlobal; + +})); +},{"./core":177}],177:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(); + } + else if (typeof define === "function" && define.amd) { + // AMD + define([], factory); + } + else { + // Global (browser) + root.CryptoJS = factory(); } +}(this, function () { /** - * The `punycode` object. - * @name punycode - * @type Object + * CryptoJS core components. */ - var punycode, + var CryptoJS = CryptoJS || (function (Math, undefined) { + /** + * CryptoJS namespace. + */ + var C = {}; - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 + /** + * Library namespace. + */ + var C_lib = C.lib = {}; - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' + /** + * Base object for prototypal inheritance. + */ + var Base = C_lib.Base = (function () { + function F() {} - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators + return { + /** + * Creates a new object that inherits from this object. + * + * @param {Object} overrides Properties to copy into the new object. + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * field: 'value', + * + * method: function () { + * } + * }); + */ + extend: function (overrides) { + // Spawn + F.prototype = this; + var subtype = new F(); - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, + // Augment + if (overrides) { + subtype.mixIn(overrides); + } - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, + // Create default initializer + if (!subtype.hasOwnProperty('init')) { + subtype.init = function () { + subtype.$super.init.apply(this, arguments); + }; + } - /** Temporary variable */ - key; + // Initializer's prototype is the subtype object + subtype.init.prototype = subtype; - /*--------------------------------------------------------------------------*/ + // Reference supertype + subtype.$super = this; - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw new RangeError(errors[type]); - } + return subtype; + }, - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - var result = []; - while (length--) { - result[length] = fn(array[length]); - } - return result; - } + /** + * Extends this object and runs the init method. + * Arguments to create() will be passed to init(). + * + * @return {Object} The new object. + * + * @static + * + * @example + * + * var instance = MyType.create(); + */ + create: function () { + var instance = this.extend(); + instance.init.apply(instance, arguments); - /** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; - } + return instance; + }, - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } + /** + * Initializes a newly created object. + * Override this method to add some logic when your objects are created. + * + * @example + * + * var MyType = CryptoJS.lib.Base.extend({ + * init: function () { + * // ... + * } + * }); + */ + init: function () { + }, - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } + /** + * Copies properties into this object. + * + * @param {Object} properties The properties to mix in. + * + * @example + * + * MyType.mixIn({ + * field: 'value' + * }); + */ + mixIn: function (properties) { + for (var propertyName in properties) { + if (properties.hasOwnProperty(propertyName)) { + this[propertyName] = properties[propertyName]; + } + } - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } + // IE won't copy toString using the loop above + if (properties.hasOwnProperty('toString')) { + this.toString = properties.toString; + } + }, - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = instance.clone(); + */ + clone: function () { + return this.init.prototype.extend(this); + } + }; + }()); - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } + /** + * An array of 32-bit words. + * + * @property {Array} words The array of 32-bit words. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var WordArray = C_lib.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of 32-bit words. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.create(); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); + * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); + */ + init: function (words, sigBytes) { + words = this.words = words || []; - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - /** Cached calculation results */ - baseMinusT; + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 4; + } + }, + + /** + * Converts this word array to a string. + * + * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex + * + * @return {string} The stringified word array. + * + * @example + * + * var string = wordArray + ''; + * var string = wordArray.toString(); + * var string = wordArray.toString(CryptoJS.enc.Utf8); + */ + toString: function (encoder) { + return (encoder || Hex).stringify(this); + }, + + /** + * Concatenates a word array to this word array. + * + * @param {WordArray} wordArray The word array to append. + * + * @return {WordArray} This word array. + * + * @example + * + * wordArray1.concat(wordArray2); + */ + concat: function (wordArray) { + // Shortcuts + var thisWords = this.words; + var thatWords = wordArray.words; + var thisSigBytes = this.sigBytes; + var thatSigBytes = wordArray.sigBytes; + + // Clamp excess bits + this.clamp(); + + // Concat + if (thisSigBytes % 4) { + // Copy one byte at a time + for (var i = 0; i < thatSigBytes; i++) { + var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); + } + } else { + // Copy one word at a time + for (var i = 0; i < thatSigBytes; i += 4) { + thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; + } + } + this.sigBytes += thatSigBytes; + + // Chainable + return this; + }, + + /** + * Removes insignificant bits. + * + * @example + * + * wordArray.clamp(); + */ + clamp: function () { + // Shortcuts + var words = this.words; + var sigBytes = this.sigBytes; + + // Clamp + words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); + words.length = Math.ceil(sigBytes / 4); + }, + + /** + * Creates a copy of this word array. + * + * @return {WordArray} The clone. + * + * @example + * + * var clone = wordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone.words = this.words.slice(0); - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. + return clone; + }, - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } + /** + * Creates a word array filled with random bytes. + * + * @param {number} nBytes The number of random bytes to generate. + * + * @return {WordArray} The random word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.lib.WordArray.random(16); + */ + random: function (nBytes) { + var words = []; - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } + var r = (function (m_w) { + var m_w = m_w; + var m_z = 0x3ade68b1; + var mask = 0xffffffff; - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. + return function () { + m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; + m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; + var result = ((m_z << 0x10) + m_w) & mask; + result /= 0x100000000; + result += 0.5; + return result * (Math.random() > .5 ? 1 : -1); + } + }); - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { + for (var i = 0, rcache; i < nBytes; i += 4) { + var _r = r((rcache || Math.random()) * 0x100000000); - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { + rcache = _r() * 0x3ade67b7; + words.push((_r() * 0x100000000) | 0); + } - if (index >= inputLength) { - error('invalid-input'); - } + return new WordArray.init(words, nBytes); + } + }); - digit = basicToDigit(input.charCodeAt(index++)); + /** + * Encoder namespace. + */ + var C_enc = C.enc = {}; - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } + /** + * Hex encoding strategy. + */ + var Hex = C_enc.Hex = { + /** + * Converts a word array to a hex string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The hex string. + * + * @static + * + * @example + * + * var hexString = CryptoJS.enc.Hex.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + // Convert + var hexChars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + hexChars.push((bite >>> 4).toString(16)); + hexChars.push((bite & 0x0f).toString(16)); + } - if (digit < t) { - break; - } + return hexChars.join(''); + }, - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } + /** + * Converts a hex string to a word array. + * + * @param {string} hexStr The hex string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Hex.parse(hexString); + */ + parse: function (hexStr) { + // Shortcut + var hexStrLength = hexStr.length; - w *= baseMinusT; + // Convert + var words = []; + for (var i = 0; i < hexStrLength; i += 2) { + words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); + } - } + return new WordArray.init(words, hexStrLength / 2); + } + }; - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); + /** + * Latin1 encoding strategy. + */ + var Latin1 = C_enc.Latin1 = { + /** + * Converts a word array to a Latin1 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Latin1 string. + * + * @static + * + * @example + * + * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } + // Convert + var latin1Chars = []; + for (var i = 0; i < sigBytes; i++) { + var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + latin1Chars.push(String.fromCharCode(bite)); + } - n += floor(i / out); - i %= out; + return latin1Chars.join(''); + }, - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); + /** + * Converts a Latin1 string to a word array. + * + * @param {string} latin1Str The Latin1 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); + */ + parse: function (latin1Str) { + // Shortcut + var latin1StrLength = latin1Str.length; - } + // Convert + var words = []; + for (var i = 0; i < latin1StrLength; i++) { + words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); + } - return ucs2encode(output); - } + return new WordArray.init(words, latin1StrLength); + } + }; - /** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; + /** + * UTF-8 encoding strategy. + */ + var Utf8 = C_enc.Utf8 = { + /** + * Converts a word array to a UTF-8 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The UTF-8 string. + * + * @static + * + * @example + * + * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); + */ + stringify: function (wordArray) { + try { + return decodeURIComponent(escape(Latin1.stringify(wordArray))); + } catch (e) { + throw new Error('Malformed UTF-8 data'); + } + }, - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); + /** + * Converts a UTF-8 string to a word array. + * + * @param {string} utf8Str The UTF-8 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); + */ + parse: function (utf8Str) { + return Latin1.parse(unescape(encodeURIComponent(utf8Str))); + } + }; - // Cache the length - inputLength = input.length; + /** + * Abstract buffered block algorithm template. + * + * The property blockSize must be implemented in a concrete subtype. + * + * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 + */ + var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ + /** + * Resets this block algorithm's data buffer to its initial state. + * + * @example + * + * bufferedBlockAlgorithm.reset(); + */ + reset: function () { + // Initial values + this._data = new WordArray.init(); + this._nDataBytes = 0; + }, - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; + /** + * Adds new data to this block algorithm's buffer. + * + * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. + * + * @example + * + * bufferedBlockAlgorithm._append('data'); + * bufferedBlockAlgorithm._append(wordArray); + */ + _append: function (data) { + // Convert string to WordArray, else assume WordArray already + if (typeof data == 'string') { + data = Utf8.parse(data); + } - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } + // Append + this._data.concat(data); + this._nDataBytes += data.sigBytes; + }, - handledCPCount = basicLength = output.length; + /** + * Processes available data blocks. + * + * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. + * + * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. + * + * @return {WordArray} The processed data. + * + * @example + * + * var processedData = bufferedBlockAlgorithm._process(); + * var processedData = bufferedBlockAlgorithm._process(!!'flush'); + */ + _process: function (doFlush) { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var dataSigBytes = data.sigBytes; + var blockSize = this.blockSize; + var blockSizeBytes = blockSize * 4; - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. + // Count blocks ready + var nBlocksReady = dataSigBytes / blockSizeBytes; + if (doFlush) { + // Round up to include partial blocks + nBlocksReady = Math.ceil(nBlocksReady); + } else { + // Round down to include only full blocks, + // less the number of blocks that must remain in the buffer + nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); + } - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } + // Count words ready + var nWordsReady = nBlocksReady * blockSize; - // Main encoding loop: - while (handledCPCount < inputLength) { + // Count bytes ready + var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } + // Process blocks + if (nWordsReady) { + for (var offset = 0; offset < nWordsReady; offset += blockSize) { + // Perform concrete-algorithm logic + this._doProcessBlock(dataWords, offset); + } - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } + // Remove processed words + var processedWords = dataWords.splice(0, nWordsReady); + data.sigBytes -= nBytesReady; + } - delta += (m - n) * handledCPCountPlusOne; - n = m; + // Return processed words + return new WordArray.init(processedWords, nBytesReady); + }, - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; + /** + * Creates a copy of this object. + * + * @return {Object} The clone. + * + * @example + * + * var clone = bufferedBlockAlgorithm.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); + clone._data = this._data.clone(); - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } + return clone; + }, - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } + _minBufferSize: 0 + }); - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } + /** + * Abstract hasher template. + * + * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) + */ + var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ + /** + * Configuration options. + */ + cfg: Base.extend(), - ++delta; - ++n; + /** + * Initializes a newly created hasher. + * + * @param {Object} cfg (Optional) The configuration options to use for this hash computation. + * + * @example + * + * var hasher = CryptoJS.algo.SHA256.create(); + */ + init: function (cfg) { + // Apply config defaults + this.cfg = this.cfg.extend(cfg); - } - return output.join(''); - } + // Set initial values + this.reset(); + }, - /** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } + /** + * Resets this hasher to its initial state. + * + * @example + * + * hasher.reset(); + */ + reset: function () { + // Reset data buffer + BufferedBlockAlgorithm.reset.call(this); + + // Perform concrete-hasher logic + this._doReset(); + }, + + /** + * Updates this hasher with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {Hasher} This hasher. + * + * @example + * + * hasher.update('message'); + * hasher.update(wordArray); + */ + update: function (messageUpdate) { + // Append + this._append(messageUpdate); - /** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ - function toASCII(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } + // Update the hash + this._process(); - /*--------------------------------------------------------------------------*/ + // Chainable + return this; + }, - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.3.2', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; + /** + * Finalizes the hash computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The hash. + * + * @example + * + * var hash = hasher.finalize(); + * var hash = hasher.finalize('message'); + * var hash = hasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Final message update + if (messageUpdate) { + this._append(messageUpdate); + } - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define('punycode', function() { - return punycode; - }); - } else if (freeExports && freeModule) { - if (module.exports == freeExports) { - // in Node.js, io.js, or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { - // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { - // in Rhino or a web browser - root.punycode = punycode; - } + // Perform concrete-hasher logic + var hash = this._doFinalize(); -}(this)); + return hash; + }, -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],301:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + blockSize: 512/32, -'use strict'; + /** + * Creates a shortcut function to a hasher's object interface. + * + * @param {Hasher} hasher The hasher to create a helper for. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); + */ + _createHelper: function (hasher) { + return function (message, cfg) { + return new hasher.init(cfg).finalize(message); + }; + }, -// If obj.hasOwnProperty has been overridden, then calling -// obj.hasOwnProperty(prop) will break. -// See: https://github.com/joyent/node/issues/1707 -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} + /** + * Creates a shortcut function to the HMAC's object interface. + * + * @param {Hasher} hasher The hasher to use in this HMAC helper. + * + * @return {Function} The shortcut function. + * + * @static + * + * @example + * + * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); + */ + _createHmacHelper: function (hasher) { + return function (message, key) { + return new C_algo.HMAC.init(hasher, key).finalize(message); + }; + } + }); -module.exports = function(qs, sep, eq, options) { - sep = sep || '&'; - eq = eq || '='; - var obj = {}; + /** + * Algorithm namespace. + */ + var C_algo = C.algo = {}; - if (typeof qs !== 'string' || qs.length === 0) { - return obj; - } + return C; + }(Math)); - var regexp = /\+/g; - qs = qs.split(sep); - var maxKeys = 1000; - if (options && typeof options.maxKeys === 'number') { - maxKeys = options.maxKeys; - } + return CryptoJS; - var len = qs.length; - // maxKeys <= 0 means that we should not limit keys count - if (maxKeys > 0 && len > maxKeys) { - len = maxKeys; - } +})); +},{}],178:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { - for (var i = 0; i < len; ++i) { - var x = qs[i].replace(regexp, '%20'), - idx = x.indexOf(eq), - kstr, vstr, k, v; + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var C_enc = C.enc; - if (idx >= 0) { - kstr = x.substr(0, idx); - vstr = x.substr(idx + 1); - } else { - kstr = x; - vstr = ''; - } + /** + * Base64 encoding strategy. + */ + var Base64 = C_enc.Base64 = { + /** + * Converts a word array to a Base64 string. + * + * @param {WordArray} wordArray The word array. + * + * @return {string} The Base64 string. + * + * @static + * + * @example + * + * var base64String = CryptoJS.enc.Base64.stringify(wordArray); + */ + stringify: function (wordArray) { + // Shortcuts + var words = wordArray.words; + var sigBytes = wordArray.sigBytes; + var map = this._map; - k = decodeURIComponent(kstr); - v = decodeURIComponent(vstr); + // Clamp excess bits + wordArray.clamp(); - if (!hasOwnProperty(obj, k)) { - obj[k] = v; - } else if (isArray(obj[k])) { - obj[k].push(v); - } else { - obj[k] = [obj[k], v]; - } - } + // Convert + var base64Chars = []; + for (var i = 0; i < sigBytes; i += 3) { + var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; + var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; + var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; - return obj; -}; + var triplet = (byte1 << 16) | (byte2 << 8) | byte3; -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; + for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { + base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); + } + } -},{}],302:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + // Add padding + var paddingChar = map.charAt(64); + if (paddingChar) { + while (base64Chars.length % 4) { + base64Chars.push(paddingChar); + } + } -'use strict'; + return base64Chars.join(''); + }, -var stringifyPrimitive = function(v) { - switch (typeof v) { - case 'string': - return v; + /** + * Converts a Base64 string to a word array. + * + * @param {string} base64Str The Base64 string. + * + * @return {WordArray} The word array. + * + * @static + * + * @example + * + * var wordArray = CryptoJS.enc.Base64.parse(base64String); + */ + parse: function (base64Str) { + // Shortcuts + var base64StrLength = base64Str.length; + var map = this._map; - case 'boolean': - return v ? 'true' : 'false'; + // Ignore padding + var paddingChar = map.charAt(64); + if (paddingChar) { + var paddingIndex = base64Str.indexOf(paddingChar); + if (paddingIndex != -1) { + base64StrLength = paddingIndex; + } + } - case 'number': - return isFinite(v) ? v : ''; + // Convert + var words = []; + var nBytes = 0; + for (var i = 0; i < base64StrLength; i++) { + if (i % 4) { + var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); + var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); + var bitsCombined = bits1 | bits2; + words[nBytes >>> 2] |= (bitsCombined) << (24 - (nBytes % 4) * 8); + nBytes++; + } + } - default: - return ''; - } -}; + return WordArray.create(words, nBytes); + }, -module.exports = function(obj, sep, eq, name) { - sep = sep || '&'; - eq = eq || '='; - if (obj === null) { - obj = undefined; - } + _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + }; + }()); - if (typeof obj === 'object') { - return map(objectKeys(obj), function(k) { - var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; - if (isArray(obj[k])) { - return map(obj[k], function(v) { - return ks + encodeURIComponent(stringifyPrimitive(v)); - }).join(sep); - } else { - return ks + encodeURIComponent(stringifyPrimitive(obj[k])); - } - }).join(sep); - } + return CryptoJS.enc.Base64; - if (!name) return ''; - return encodeURIComponent(stringifyPrimitive(name)) + eq + - encodeURIComponent(stringifyPrimitive(obj)); -}; +})); +},{"./core":177}],179:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./sha1", "./hmac"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var MD5 = C_algo.MD5; -function map (xs, f) { - if (xs.map) return xs.map(f); - var res = []; - for (var i = 0; i < xs.length; i++) { - res.push(f(xs[i], i)); - } - return res; -} + /** + * This key derivation function is meant to conform with EVP_BytesToKey. + * www.openssl.org/docs/crypto/EVP_BytesToKey.html + */ + var EvpKDF = C_algo.EvpKDF = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hash algorithm to use. Default: MD5 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: MD5, + iterations: 1 + }), -var objectKeys = Object.keys || function (obj) { - var res = []; - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); - } - return res; -}; + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.EvpKDF.create(); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, -},{}],303:[function(require,module,exports){ -'use strict'; + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; -exports.decode = exports.parse = require('./decode'); -exports.encode = exports.stringify = require('./encode'); + // Init hasher + var hasher = cfg.hasher.create(); -},{"./decode":301,"./encode":302}],304:[function(require,module,exports){ -module.exports = require("./lib/_stream_duplex.js") + // Initial values + var derivedKey = WordArray.create(); -},{"./lib/_stream_duplex.js":305}],305:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + // Shortcuts + var derivedKeyWords = derivedKey.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; + + // Generate key + while (derivedKeyWords.length < keySize) { + if (block) { + hasher.update(block); + } + var block = hasher.update(password).finalize(salt); + hasher.reset(); + + // Iterations + for (var i = 1; i < iterations; i++) { + block = hasher.finalize(block); + hasher.reset(); + } -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. + derivedKey.concat(block); + } + derivedKey.sigBytes = keySize * 4; -module.exports = Duplex; + return derivedKey; + } + }); -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; -} -/**/ + /** + * Derives a key from a password. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.EvpKDF(password, salt); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); + * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.EvpKDF = function (password, salt, cfg) { + return EvpKDF.create(cfg).compute(password, salt); + }; + }()); -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ + return CryptoJS.EvpKDF; -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); +})); +},{"./core":177,"./hmac":180,"./sha1":183}],180:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { -util.inherits(Duplex, Readable); + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var C_enc = C.enc; + var Utf8 = C_enc.Utf8; + var C_algo = C.algo; -forEach(objectKeys(Writable.prototype), function(method) { - if (!Duplex.prototype[method]) - Duplex.prototype[method] = Writable.prototype[method]; -}); + /** + * HMAC algorithm. + */ + var HMAC = C_algo.HMAC = Base.extend({ + /** + * Initializes a newly created HMAC. + * + * @param {Hasher} hasher The hash algorithm to use. + * @param {WordArray|string} key The secret key. + * + * @example + * + * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); + */ + init: function (hasher, key) { + // Init hasher + hasher = this._hasher = new hasher.init(); -function Duplex(options) { - if (!(this instanceof Duplex)) - return new Duplex(options); + // Convert string to WordArray, else assume WordArray already + if (typeof key == 'string') { + key = Utf8.parse(key); + } - Readable.call(this, options); - Writable.call(this, options); + // Shortcuts + var hasherBlockSize = hasher.blockSize; + var hasherBlockSizeBytes = hasherBlockSize * 4; - if (options && options.readable === false) - this.readable = false; + // Allow arbitrary length keys + if (key.sigBytes > hasherBlockSizeBytes) { + key = hasher.finalize(key); + } - if (options && options.writable === false) - this.writable = false; + // Clamp excess bits + key.clamp(); - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) - this.allowHalfOpen = false; + // Clone key for inner and outer pads + var oKey = this._oKey = key.clone(); + var iKey = this._iKey = key.clone(); - this.once('end', onend); -} + // Shortcuts + var oKeyWords = oKey.words; + var iKeyWords = iKey.words; -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) - return; + // XOR keys with pad constants + for (var i = 0; i < hasherBlockSize; i++) { + oKeyWords[i] ^= 0x5c5c5c5c; + iKeyWords[i] ^= 0x36363636; + } + oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; - // no more data can be written. - // But allow more writes to happen in this tick. - process.nextTick(this.end.bind(this)); -} + // Set initial values + this.reset(); + }, -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); - } -} + /** + * Resets this HMAC to its initial state. + * + * @example + * + * hmacHasher.reset(); + */ + reset: function () { + // Shortcut + var hasher = this._hasher; -}).call(this,require('_process')) -},{"./_stream_readable":307,"./_stream_writable":309,"_process":299,"core-util-is":310,"inherits":296}],306:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + // Reset + hasher.reset(); + hasher.update(this._iKey); + }, -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. + /** + * Updates this HMAC with a message. + * + * @param {WordArray|string} messageUpdate The message to append. + * + * @return {HMAC} This HMAC instance. + * + * @example + * + * hmacHasher.update('message'); + * hmacHasher.update(wordArray); + */ + update: function (messageUpdate) { + this._hasher.update(messageUpdate); -module.exports = PassThrough; + // Chainable + return this; + }, -var Transform = require('./_stream_transform'); + /** + * Finalizes the HMAC computation. + * Note that the finalize operation is effectively a destructive, read-once operation. + * + * @param {WordArray|string} messageUpdate (Optional) A final message update. + * + * @return {WordArray} The HMAC. + * + * @example + * + * var hmac = hmacHasher.finalize(); + * var hmac = hmacHasher.finalize('message'); + * var hmac = hmacHasher.finalize(wordArray); + */ + finalize: function (messageUpdate) { + // Shortcut + var hasher = this._hasher; -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ + // Compute HMAC + var innerHash = hasher.finalize(messageUpdate); + hasher.reset(); + var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); -util.inherits(PassThrough, Transform); + return hmac; + } + }); + }()); -function PassThrough(options) { - if (!(this instanceof PassThrough)) - return new PassThrough(options); - Transform.call(this, options); -} +})); +},{"./core":177}],181:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { -PassThrough.prototype._transform = function(chunk, encoding, cb) { - cb(null, chunk); -}; + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; -},{"./_stream_transform":308,"core-util-is":310,"inherits":296}],307:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + // Constants table + var T = []; -module.exports = Readable; + // Compute constants + (function () { + for (var i = 0; i < 64; i++) { + T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; + } + }()); -/**/ -var isArray = require('isarray'); -/**/ + /** + * MD5 hash algorithm. + */ + var MD5 = C_algo.MD5 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476 + ]); + }, + _doProcessBlock: function (M, offset) { + // Swap endian + for (var i = 0; i < 16; i++) { + // Shortcuts + var offset_i = offset + i; + var M_offset_i = M[offset_i]; -/**/ -var Buffer = require('buffer').Buffer; -/**/ + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ); + } -Readable.ReadableState = ReadableState; + // Shortcuts + var H = this._hash.words; -var EE = require('events').EventEmitter; + var M_offset_0 = M[offset + 0]; + var M_offset_1 = M[offset + 1]; + var M_offset_2 = M[offset + 2]; + var M_offset_3 = M[offset + 3]; + var M_offset_4 = M[offset + 4]; + var M_offset_5 = M[offset + 5]; + var M_offset_6 = M[offset + 6]; + var M_offset_7 = M[offset + 7]; + var M_offset_8 = M[offset + 8]; + var M_offset_9 = M[offset + 9]; + var M_offset_10 = M[offset + 10]; + var M_offset_11 = M[offset + 11]; + var M_offset_12 = M[offset + 12]; + var M_offset_13 = M[offset + 13]; + var M_offset_14 = M[offset + 14]; + var M_offset_15 = M[offset + 15]; -/**/ -if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { - return emitter.listeners(type).length; -}; -/**/ + // Working varialbes + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; -var Stream = require('stream'); + // Computation + a = FF(a, b, c, d, M_offset_0, 7, T[0]); + d = FF(d, a, b, c, M_offset_1, 12, T[1]); + c = FF(c, d, a, b, M_offset_2, 17, T[2]); + b = FF(b, c, d, a, M_offset_3, 22, T[3]); + a = FF(a, b, c, d, M_offset_4, 7, T[4]); + d = FF(d, a, b, c, M_offset_5, 12, T[5]); + c = FF(c, d, a, b, M_offset_6, 17, T[6]); + b = FF(b, c, d, a, M_offset_7, 22, T[7]); + a = FF(a, b, c, d, M_offset_8, 7, T[8]); + d = FF(d, a, b, c, M_offset_9, 12, T[9]); + c = FF(c, d, a, b, M_offset_10, 17, T[10]); + b = FF(b, c, d, a, M_offset_11, 22, T[11]); + a = FF(a, b, c, d, M_offset_12, 7, T[12]); + d = FF(d, a, b, c, M_offset_13, 12, T[13]); + c = FF(c, d, a, b, M_offset_14, 17, T[14]); + b = FF(b, c, d, a, M_offset_15, 22, T[15]); -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ + a = GG(a, b, c, d, M_offset_1, 5, T[16]); + d = GG(d, a, b, c, M_offset_6, 9, T[17]); + c = GG(c, d, a, b, M_offset_11, 14, T[18]); + b = GG(b, c, d, a, M_offset_0, 20, T[19]); + a = GG(a, b, c, d, M_offset_5, 5, T[20]); + d = GG(d, a, b, c, M_offset_10, 9, T[21]); + c = GG(c, d, a, b, M_offset_15, 14, T[22]); + b = GG(b, c, d, a, M_offset_4, 20, T[23]); + a = GG(a, b, c, d, M_offset_9, 5, T[24]); + d = GG(d, a, b, c, M_offset_14, 9, T[25]); + c = GG(c, d, a, b, M_offset_3, 14, T[26]); + b = GG(b, c, d, a, M_offset_8, 20, T[27]); + a = GG(a, b, c, d, M_offset_13, 5, T[28]); + d = GG(d, a, b, c, M_offset_2, 9, T[29]); + c = GG(c, d, a, b, M_offset_7, 14, T[30]); + b = GG(b, c, d, a, M_offset_12, 20, T[31]); -var StringDecoder; + a = HH(a, b, c, d, M_offset_5, 4, T[32]); + d = HH(d, a, b, c, M_offset_8, 11, T[33]); + c = HH(c, d, a, b, M_offset_11, 16, T[34]); + b = HH(b, c, d, a, M_offset_14, 23, T[35]); + a = HH(a, b, c, d, M_offset_1, 4, T[36]); + d = HH(d, a, b, c, M_offset_4, 11, T[37]); + c = HH(c, d, a, b, M_offset_7, 16, T[38]); + b = HH(b, c, d, a, M_offset_10, 23, T[39]); + a = HH(a, b, c, d, M_offset_13, 4, T[40]); + d = HH(d, a, b, c, M_offset_0, 11, T[41]); + c = HH(c, d, a, b, M_offset_3, 16, T[42]); + b = HH(b, c, d, a, M_offset_6, 23, T[43]); + a = HH(a, b, c, d, M_offset_9, 4, T[44]); + d = HH(d, a, b, c, M_offset_12, 11, T[45]); + c = HH(c, d, a, b, M_offset_15, 16, T[46]); + b = HH(b, c, d, a, M_offset_2, 23, T[47]); + a = II(a, b, c, d, M_offset_0, 6, T[48]); + d = II(d, a, b, c, M_offset_7, 10, T[49]); + c = II(c, d, a, b, M_offset_14, 15, T[50]); + b = II(b, c, d, a, M_offset_5, 21, T[51]); + a = II(a, b, c, d, M_offset_12, 6, T[52]); + d = II(d, a, b, c, M_offset_3, 10, T[53]); + c = II(c, d, a, b, M_offset_10, 15, T[54]); + b = II(b, c, d, a, M_offset_1, 21, T[55]); + a = II(a, b, c, d, M_offset_8, 6, T[56]); + d = II(d, a, b, c, M_offset_15, 10, T[57]); + c = II(c, d, a, b, M_offset_6, 15, T[58]); + b = II(b, c, d, a, M_offset_13, 21, T[59]); + a = II(a, b, c, d, M_offset_4, 6, T[60]); + d = II(d, a, b, c, M_offset_11, 10, T[61]); + c = II(c, d, a, b, M_offset_2, 15, T[62]); + b = II(b, c, d, a, M_offset_9, 21, T[63]); -/**/ -var debug = require('util'); -if (debug && debug.debuglog) { - debug = debug.debuglog('stream'); -} else { - debug = function () {}; -} -/**/ + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + }, + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; -util.inherits(Readable, Stream); + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; -function ReadableState(options, stream) { - var Duplex = require('./_stream_duplex'); + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - options = options || {}; + var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); + var nBitsTotalL = nBitsTotal; + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( + (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | + (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) + ); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | + (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) + ); - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var defaultHwm = options.objectMode ? 16 : 16 * 1024; - this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; + data.sigBytes = (dataWords.length + 1) * 4; - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; + // Hash final blocks + this._process(); - this.buffer = []; - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; + // Shortcuts + var hash = this._hash; + var H = hash.words; - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; + // Swap endian + for (var i = 0; i < 4; i++) { + // Shortcut + var H_i = H[i]; - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); + } + + // Return final computed hash + return hash; + }, + + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); + return clone; + } + }); - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; + function FF(a, b, c, d, x, s, t) { + var n = a + ((b & c) | (~b & d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } - if (stream instanceof Duplex) - this.objectMode = this.objectMode || !!options.readableObjectMode; + function GG(a, b, c, d, x, s, t) { + var n = a + ((b & d) | (c & ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; + function HH(a, b, c, d, x, s, t) { + var n = a + (b ^ c ^ d) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } - // when piping, we only care about 'readable' events that happen - // after read()ing all the bytes and not getting any pushback. - this.ranOut = false; + function II(a, b, c, d, x, s, t) { + var n = a + (c ^ (b | ~d)) + x + t; + return ((n << s) | (n >>> (32 - s))) + b; + } - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.MD5('message'); + * var hash = CryptoJS.MD5(wordArray); + */ + C.MD5 = Hasher._createHelper(MD5); - // if true, a maybeReadMore has been scheduled - this.readingMore = false; + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacMD5(message, key); + */ + C.HmacMD5 = Hasher._createHmacHelper(MD5); + }(Math)); - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) - StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} -function Readable(options) { - var Duplex = require('./_stream_duplex'); + return CryptoJS.MD5; - if (!(this instanceof Readable)) - return new Readable(options); +})); +},{"./core":177}],182:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./sha1", "./hmac"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { - this._readableState = new ReadableState(options, this); + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var WordArray = C_lib.WordArray; + var C_algo = C.algo; + var SHA1 = C_algo.SHA1; + var HMAC = C_algo.HMAC; - // legacy - this.readable = true; + /** + * Password-Based Key Derivation Function 2 algorithm. + */ + var PBKDF2 = C_algo.PBKDF2 = Base.extend({ + /** + * Configuration options. + * + * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) + * @property {Hasher} hasher The hasher to use. Default: SHA1 + * @property {number} iterations The number of iterations to perform. Default: 1 + */ + cfg: Base.extend({ + keySize: 128/32, + hasher: SHA1, + iterations: 1 + }), - Stream.call(this); -} + /** + * Initializes a newly created key derivation function. + * + * @param {Object} cfg (Optional) The configuration options to use for the derivation. + * + * @example + * + * var kdf = CryptoJS.algo.PBKDF2.create(); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); + * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); + */ + init: function (cfg) { + this.cfg = this.cfg.extend(cfg); + }, -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function(chunk, encoding) { - var state = this._readableState; + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * + * @return {WordArray} The derived key. + * + * @example + * + * var key = kdf.compute(password, salt); + */ + compute: function (password, salt) { + // Shortcut + var cfg = this.cfg; - if (util.isString(chunk) && !state.objectMode) { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = new Buffer(chunk, encoding); - encoding = ''; - } - } + // Init HMAC + var hmac = HMAC.create(cfg.hasher, password); - return readableAddChunk(this, state, chunk, encoding, false); -}; + // Initial values + var derivedKey = WordArray.create(); + var blockIndex = WordArray.create([0x00000001]); -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function(chunk) { - var state = this._readableState; - return readableAddChunk(this, state, chunk, '', true); -}; + // Shortcuts + var derivedKeyWords = derivedKey.words; + var blockIndexWords = blockIndex.words; + var keySize = cfg.keySize; + var iterations = cfg.iterations; -function readableAddChunk(stream, state, chunk, encoding, addToFront) { - var er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (util.isNullOrUndefined(chunk)) { - state.reading = false; - if (!state.ended) - onEofChunk(stream, state); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (state.ended && !addToFront) { - var e = new Error('stream.push() after EOF'); - stream.emit('error', e); - } else if (state.endEmitted && addToFront) { - var e = new Error('stream.unshift() after end event'); - stream.emit('error', e); - } else { - if (state.decoder && !addToFront && !encoding) - chunk = state.decoder.write(chunk); + // Generate key + while (derivedKeyWords.length < keySize) { + var block = hmac.update(salt).finalize(blockIndex); + hmac.reset(); - if (!addToFront) - state.reading = false; + // Shortcuts + var blockWords = block.words; + var blockWordsLength = blockWords.length; - // if we want the data now, just emit it. - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) - state.buffer.unshift(chunk); - else - state.buffer.push(chunk); + // Iterations + var intermediate = block; + for (var i = 1; i < iterations; i++) { + intermediate = hmac.finalize(intermediate); + hmac.reset(); - if (state.needReadable) - emitReadable(stream); - } + // Shortcut + var intermediateWords = intermediate.words; - maybeReadMore(stream, state); - } - } else if (!addToFront) { - state.reading = false; - } + // XOR intermediate with block + for (var j = 0; j < blockWordsLength; j++) { + blockWords[j] ^= intermediateWords[j]; + } + } - return needMoreData(state); -} + derivedKey.concat(block); + blockIndexWords[0]++; + } + derivedKey.sigBytes = keySize * 4; + return derivedKey; + } + }); + /** + * Computes the Password-Based Key Derivation Function 2. + * + * @param {WordArray|string} password The password. + * @param {WordArray|string} salt A salt. + * @param {Object} cfg (Optional) The configuration options to use for this computation. + * + * @return {WordArray} The derived key. + * + * @static + * + * @example + * + * var key = CryptoJS.PBKDF2(password, salt); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); + * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); + */ + C.PBKDF2 = function (password, salt, cfg) { + return PBKDF2.create(cfg).compute(password, salt); + }; + }()); -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && - (state.needReadable || - state.length < state.highWaterMark || - state.length === 0); -} -// backwards compatibility. -Readable.prototype.setEncoding = function(enc) { - if (!StringDecoder) - StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; -}; + return CryptoJS.PBKDF2; -// Don't raise the hwm > 128MB -var MAX_HWM = 0x800000; -function roundUpToNextPowerOf2(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 - n--; - for (var p = 1; p < 32; p <<= 1) n |= n >> p; - n++; - } - return n; -} +})); +},{"./core":177,"./hmac":180,"./sha1":183}],183:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { -function howMuchToRead(n, state) { - if (state.length === 0 && state.ended) - return 0; + (function () { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_algo = C.algo; - if (state.objectMode) - return n === 0 ? 0 : 1; + // Reusable object + var W = []; - if (isNaN(n) || util.isNull(n)) { - // only flow one buffer at a time - if (state.flowing && state.buffer.length) - return state.buffer[0].length; - else - return state.length; - } + /** + * SHA-1 hash algorithm. + */ + var SHA1 = C_algo.SHA1 = Hasher.extend({ + _doReset: function () { + this._hash = new WordArray.init([ + 0x67452301, 0xefcdab89, + 0x98badcfe, 0x10325476, + 0xc3d2e1f0 + ]); + }, - if (n <= 0) - return 0; + _doProcessBlock: function (M, offset) { + // Shortcut + var H = this._hash.words; - // If we're asking for more than the target buffer level, - // then raise the water mark. Bump up to the next highest - // power of 2, to prevent increasing it excessively in tiny - // amounts. - if (n > state.highWaterMark) - state.highWaterMark = roundUpToNextPowerOf2(n); + // Working variables + var a = H[0]; + var b = H[1]; + var c = H[2]; + var d = H[3]; + var e = H[4]; - // don't have that much. return null, unless we've ended. - if (n > state.length) { - if (!state.ended) { - state.needReadable = true; - return 0; - } else - return state.length; - } + // Computation + for (var i = 0; i < 80; i++) { + if (i < 16) { + W[i] = M[offset + i] | 0; + } else { + var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; + W[i] = (n << 1) | (n >>> 31); + } - return n; -} + var t = ((a << 5) | (a >>> 27)) + e + W[i]; + if (i < 20) { + t += ((b & c) | (~b & d)) + 0x5a827999; + } else if (i < 40) { + t += (b ^ c ^ d) + 0x6ed9eba1; + } else if (i < 60) { + t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; + } else /* if (i < 80) */ { + t += (b ^ c ^ d) - 0x359d3e2a; + } -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function(n) { - debug('read', n); - var state = this._readableState; - var nOrig = n; + e = d; + d = c; + c = (b << 30) | (b >>> 2); + b = a; + a = t; + } - if (!util.isNumber(n) || n > 0) - state.emittedReadable = false; + // Intermediate hash value + H[0] = (H[0] + a) | 0; + H[1] = (H[1] + b) | 0; + H[2] = (H[2] + c) | 0; + H[3] = (H[3] + d) | 0; + H[4] = (H[4] + e) | 0; + }, - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && - state.needReadable && - (state.length >= state.highWaterMark || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) - endReadable(this); - else - emitReadable(this); - return null; - } + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; - n = howMuchToRead(n, state); + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) - endReadable(this); - return null; - } + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); + dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; + data.sigBytes = dataWords.length * 4; - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. + // Hash final blocks + this._process(); - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); + // Return final computed hash + return this._hash; + }, - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } + clone: function () { + var clone = Hasher.clone.call(this); + clone._hash = this._hash.clone(); - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } + return clone; + } + }); - if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) - state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - } + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA1('message'); + * var hash = CryptoJS.SHA1(wordArray); + */ + C.SHA1 = Hasher._createHelper(SHA1); - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (doRead && !state.reading) - n = howMuchToRead(nOrig, state); + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA1(message, key); + */ + C.HmacSHA1 = Hasher._createHmacHelper(SHA1); + }()); - var ret; - if (n > 0) - ret = fromList(n, state); - else - ret = null; - if (util.isNull(ret)) { - state.needReadable = true; - n = 0; - } + return CryptoJS.SHA1; - state.length -= n; +})); +},{"./core":177}],184:[function(require,module,exports){ +;(function (root, factory, undef) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core"), require("./x64-core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core", "./x64-core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (state.length === 0 && !state.ended) - state.needReadable = true; + (function (Math) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var WordArray = C_lib.WordArray; + var Hasher = C_lib.Hasher; + var C_x64 = C.x64; + var X64Word = C_x64.Word; + var C_algo = C.algo; - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended && state.length === 0) - endReadable(this); + // Constants tables + var RHO_OFFSETS = []; + var PI_INDEXES = []; + var ROUND_CONSTANTS = []; - if (!util.isNull(ret)) - this.emit('data', ret); + // Compute Constants + (function () { + // Compute rho offset constants + var x = 1, y = 0; + for (var t = 0; t < 24; t++) { + RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; - return ret; -}; + var newX = y % 5; + var newY = (2 * x + 3 * y) % 5; + x = newX; + y = newY; + } -function chunkInvalid(state, chunk) { - var er = null; - if (!util.isBuffer(chunk) && - !util.isString(chunk) && - !util.isNullOrUndefined(chunk) && - !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} + // Compute pi index constants + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; + } + } + // Compute round constants + var LFSR = 0x01; + for (var i = 0; i < 24; i++) { + var roundConstantMsw = 0; + var roundConstantLsw = 0; -function onEofChunk(stream, state) { - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; + for (var j = 0; j < 7; j++) { + if (LFSR & 0x01) { + var bitPosition = (1 << j) - 1; + if (bitPosition < 32) { + roundConstantLsw ^= 1 << bitPosition; + } else /* if (bitPosition >= 32) */ { + roundConstantMsw ^= 1 << (bitPosition - 32); + } + } - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} + // Compute next LFSR + if (LFSR & 0x80) { + // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 + LFSR = (LFSR << 1) ^ 0x71; + } else { + LFSR <<= 1; + } + } -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) - process.nextTick(function() { - emitReadable_(stream); - }); - else - emitReadable_(stream); - } -} + ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); + } + }()); -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} + // Reusable objects for temporary values + var T = []; + (function () { + for (var i = 0; i < 25; i++) { + T[i] = X64Word.create(); + } + }()); + /** + * SHA-3 hash algorithm. + */ + var SHA3 = C_algo.SHA3 = Hasher.extend({ + /** + * Configuration options. + * + * @property {number} outputLength + * The desired number of bits in the output hash. + * Only values permitted are: 224, 256, 384, 512. + * Default: 512 + */ + cfg: Hasher.cfg.extend({ + outputLength: 512 + }), -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - process.nextTick(function() { - maybeReadMore_(stream, state); - }); - } -} + _doReset: function () { + var state = this._state = [] + for (var i = 0; i < 25; i++) { + state[i] = new X64Word.init(); + } -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && - state.length < state.highWaterMark) { - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break; - else - len = state.length; - } - state.readingMore = false; -} + this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; + }, -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function(n) { - this.emit('error', new Error('not implemented')); -}; + _doProcessBlock: function (M, offset) { + // Shortcuts + var state = this._state; + var nBlockSizeLanes = this.blockSize / 2; -Readable.prototype.pipe = function(dest, pipeOpts) { - var src = this; - var state = this._readableState; + // Absorb + for (var i = 0; i < nBlockSizeLanes; i++) { + // Shortcuts + var M2i = M[offset + 2 * i]; + var M2i1 = M[offset + 2 * i + 1]; - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + // Swap endian + M2i = ( + (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | + (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) + ); + M2i1 = ( + (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | + (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) + ); - var doEnd = (!pipeOpts || pipeOpts.end !== false) && - dest !== process.stdout && - dest !== process.stderr; + // Absorb message into state + var lane = state[i]; + lane.high ^= M2i1; + lane.low ^= M2i; + } - var endFn = doEnd ? onend : cleanup; - if (state.endEmitted) - process.nextTick(endFn); - else - src.once('end', endFn); + // Rounds + for (var round = 0; round < 24; round++) { + // Theta + for (var x = 0; x < 5; x++) { + // Mix column lanes + var tMsw = 0, tLsw = 0; + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + tMsw ^= lane.high; + tLsw ^= lane.low; + } - dest.on('unpipe', onunpipe); - function onunpipe(readable) { - debug('onunpipe'); - if (readable === src) { - cleanup(); - } - } + // Temporary values + var Tx = T[x]; + Tx.high = tMsw; + Tx.low = tLsw; + } + for (var x = 0; x < 5; x++) { + // Shortcuts + var Tx4 = T[(x + 4) % 5]; + var Tx1 = T[(x + 1) % 5]; + var Tx1Msw = Tx1.high; + var Tx1Lsw = Tx1.low; - function onend() { - debug('onend'); - dest.end(); - } + // Mix surrounding columns + var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); + var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); + for (var y = 0; y < 5; y++) { + var lane = state[x + 5 * y]; + lane.high ^= tMsw; + lane.low ^= tLsw; + } + } - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); + // Rho Pi + for (var laneIndex = 1; laneIndex < 25; laneIndex++) { + // Shortcuts + var lane = state[laneIndex]; + var laneMsw = lane.high; + var laneLsw = lane.low; + var rhoOffset = RHO_OFFSETS[laneIndex]; - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', cleanup); - src.removeListener('data', ondata); + // Rotate lanes + if (rhoOffset < 32) { + var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); + var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); + } else /* if (rhoOffset >= 32) */ { + var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); + var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); + } - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && - (!dest._writableState || dest._writableState.needDrain)) - ondrain(); - } + // Transpose lanes + var TPiLane = T[PI_INDEXES[laneIndex]]; + TPiLane.high = tMsw; + TPiLane.low = tLsw; + } - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - var ret = dest.write(chunk); - if (false === ret) { - debug('false write response, pause', - src._readableState.awaitDrain); - src._readableState.awaitDrain++; - src.pause(); - } - } + // Rho pi at x = y = 0 + var T0 = T[0]; + var state0 = state[0]; + T0.high = state0.high; + T0.low = state0.low; - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EE.listenerCount(dest, 'error') === 0) - dest.emit('error', er); - } - // This is a brutally ugly hack to make sure that our error handler - // is attached before any userland ones. NEVER DO THIS. - if (!dest._events || !dest._events.error) - dest.on('error', onerror); - else if (isArray(dest._events.error)) - dest._events.error.unshift(onerror); - else - dest._events.error = [onerror, dest._events.error]; + // Chi + for (var x = 0; x < 5; x++) { + for (var y = 0; y < 5; y++) { + // Shortcuts + var laneIndex = x + 5 * y; + var lane = state[laneIndex]; + var TLane = T[laneIndex]; + var Tx1Lane = T[((x + 1) % 5) + 5 * y]; + var Tx2Lane = T[((x + 2) % 5) + 5 * y]; + // Mix rows + lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); + lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); + } + } + // Iota + var lane = state[0]; + var roundConstant = ROUND_CONSTANTS[round]; + lane.high ^= roundConstant.high; + lane.low ^= roundConstant.low;; + } + }, - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); + _doFinalize: function () { + // Shortcuts + var data = this._data; + var dataWords = data.words; + var nBitsTotal = this._nDataBytes * 8; + var nBitsLeft = data.sigBytes * 8; + var blockSizeBits = this.blockSize * 32; - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } + // Add padding + dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); + dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; + data.sigBytes = dataWords.length * 4; - // tell the dest that it's being piped to - dest.emit('pipe', src); + // Hash final blocks + this._process(); - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } + // Shortcuts + var state = this._state; + var outputLengthBytes = this.cfg.outputLength / 8; + var outputLengthLanes = outputLengthBytes / 8; - return dest; -}; + // Squeeze + var hashWords = []; + for (var i = 0; i < outputLengthLanes; i++) { + // Shortcuts + var lane = state[i]; + var laneMsw = lane.high; + var laneLsw = lane.low; -function pipeOnDrain(src) { - return function() { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) - state.awaitDrain--; - if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} + // Swap endian + laneMsw = ( + (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | + (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) + ); + laneLsw = ( + (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | + (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) + ); + // Squeeze state to retrieve hash + hashWords.push(laneLsw); + hashWords.push(laneMsw); + } -Readable.prototype.unpipe = function(dest) { - var state = this._readableState; + // Return final computed hash + return new WordArray.init(hashWords, outputLengthBytes); + }, - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) - return this; + clone: function () { + var clone = Hasher.clone.call(this); - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) - return this; + var state = clone._state = this._state.slice(0); + for (var i = 0; i < 25; i++) { + state[i] = state[i].clone(); + } + + return clone; + } + }); - if (!dest) - dest = state.pipes; + /** + * Shortcut function to the hasher's object interface. + * + * @param {WordArray|string} message The message to hash. + * + * @return {WordArray} The hash. + * + * @static + * + * @example + * + * var hash = CryptoJS.SHA3('message'); + * var hash = CryptoJS.SHA3(wordArray); + */ + C.SHA3 = Hasher._createHelper(SHA3); - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) - dest.emit('unpipe', this); - return this; - } + /** + * Shortcut function to the HMAC's object interface. + * + * @param {WordArray|string} message The message to hash. + * @param {WordArray|string} key The secret key. + * + * @return {WordArray} The HMAC. + * + * @static + * + * @example + * + * var hmac = CryptoJS.HmacSHA3(message, key); + */ + C.HmacSHA3 = Hasher._createHmacHelper(SHA3); + }(Math)); - // slow case. multiple pipe destinations. - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; + return CryptoJS.SHA3; - for (var i = 0; i < len; i++) - dests[i].emit('unpipe', this); - return this; - } +})); +},{"./core":177,"./x64-core":185}],185:[function(require,module,exports){ +;(function (root, factory) { + if (typeof exports === "object") { + // CommonJS + module.exports = exports = factory(require("./core")); + } + else if (typeof define === "function" && define.amd) { + // AMD + define(["./core"], factory); + } + else { + // Global (browser) + factory(root.CryptoJS); + } +}(this, function (CryptoJS) { - // try to find the right one. - var i = indexOf(state.pipes, dest); - if (i === -1) - return this; + (function (undefined) { + // Shortcuts + var C = CryptoJS; + var C_lib = C.lib; + var Base = C_lib.Base; + var X32WordArray = C_lib.WordArray; - state.pipes.splice(i, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) - state.pipes = state.pipes[0]; + /** + * x64 namespace. + */ + var C_x64 = C.x64 = {}; - dest.emit('unpipe', this); + /** + * A 64-bit word. + */ + var X64Word = C_x64.Word = Base.extend({ + /** + * Initializes a newly created 64-bit word. + * + * @param {number} high The high 32 bits. + * @param {number} low The low 32 bits. + * + * @example + * + * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); + */ + init: function (high, low) { + this.high = high; + this.low = low; + } - return this; -}; + /** + * Bitwise NOTs this word. + * + * @return {X64Word} A new x64-Word object after negating. + * + * @example + * + * var negated = x64Word.not(); + */ + // not: function () { + // var high = ~this.high; + // var low = ~this.low; -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function(ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); + // return X64Word.create(high, low); + // }, - // If listening to data, and it has not explicitly been paused, - // then call resume to start the flow of data on the next tick. - if (ev === 'data' && false !== this._readableState.flowing) { - this.resume(); - } + /** + * Bitwise ANDs this word with the passed word. + * + * @param {X64Word} word The x64-Word to AND with this word. + * + * @return {X64Word} A new x64-Word object after ANDing. + * + * @example + * + * var anded = x64Word.and(anotherX64Word); + */ + // and: function (word) { + // var high = this.high & word.high; + // var low = this.low & word.low; - if (ev === 'readable' && this.readable) { - var state = this._readableState; - if (!state.readableListening) { - state.readableListening = true; - state.emittedReadable = false; - state.needReadable = true; - if (!state.reading) { - var self = this; - process.nextTick(function() { - debug('readable nexttick read 0'); - self.read(0); - }); - } else if (state.length) { - emitReadable(this, state); - } - } - } + // return X64Word.create(high, low); + // }, - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; + /** + * Bitwise ORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to OR with this word. + * + * @return {X64Word} A new x64-Word object after ORing. + * + * @example + * + * var ored = x64Word.or(anotherX64Word); + */ + // or: function (word) { + // var high = this.high | word.high; + // var low = this.low | word.low; -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function() { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - if (!state.reading) { - debug('resume read 0'); - this.read(0); - } - resume(this, state); - } - return this; -}; + // return X64Word.create(high, low); + // }, -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - process.nextTick(function() { - resume_(stream, state); - }); - } -} + /** + * Bitwise XORs this word with the passed word. + * + * @param {X64Word} word The x64-Word to XOR with this word. + * + * @return {X64Word} A new x64-Word object after XORing. + * + * @example + * + * var xored = x64Word.xor(anotherX64Word); + */ + // xor: function (word) { + // var high = this.high ^ word.high; + // var low = this.low ^ word.low; -function resume_(stream, state) { - state.resumeScheduled = false; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) - stream.read(0); -} + // return X64Word.create(high, low); + // }, -Readable.prototype.pause = function() { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - return this; -}; + /** + * Shifts this word n bits to the left. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftL(25); + */ + // shiftL: function (n) { + // if (n < 32) { + // var high = (this.high << n) | (this.low >>> (32 - n)); + // var low = this.low << n; + // } else { + // var high = this.low << (n - 32); + // var low = 0; + // } -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - if (state.flowing) { - do { - var chunk = stream.read(); - } while (null !== chunk && state.flowing); - } -} + // return X64Word.create(high, low); + // }, -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function(stream) { - var state = this._readableState; - var paused = false; + /** + * Shifts this word n bits to the right. + * + * @param {number} n The number of bits to shift. + * + * @return {X64Word} A new x64-Word object after shifting. + * + * @example + * + * var shifted = x64Word.shiftR(7); + */ + // shiftR: function (n) { + // if (n < 32) { + // var low = (this.low >>> n) | (this.high << (32 - n)); + // var high = this.high >>> n; + // } else { + // var low = this.high >>> (n - 32); + // var high = 0; + // } - var self = this; - stream.on('end', function() { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) - self.push(chunk); - } + // return X64Word.create(high, low); + // }, - self.push(null); - }); + /** + * Rotates this word n bits to the left. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotL(25); + */ + // rotL: function (n) { + // return this.shiftL(n).or(this.shiftR(64 - n)); + // }, - stream.on('data', function(chunk) { - debug('wrapped data'); - if (state.decoder) - chunk = state.decoder.write(chunk); - if (!chunk || !state.objectMode && !chunk.length) - return; + /** + * Rotates this word n bits to the right. + * + * @param {number} n The number of bits to rotate. + * + * @return {X64Word} A new x64-Word object after rotating. + * + * @example + * + * var rotated = x64Word.rotR(7); + */ + // rotR: function (n) { + // return this.shiftR(n).or(this.shiftL(64 - n)); + // }, - var ret = self.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); + /** + * Adds this word with the passed word. + * + * @param {X64Word} word The x64-Word to add with this word. + * + * @return {X64Word} A new x64-Word object after adding. + * + * @example + * + * var added = x64Word.add(anotherX64Word); + */ + // add: function (word) { + // var low = (this.low + word.low) | 0; + // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; + // var high = (this.high + word.high + carry) | 0; - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (util.isFunction(stream[i]) && util.isUndefined(this[i])) { - this[i] = function(method) { return function() { - return stream[method].apply(stream, arguments); - }}(i); - } - } + // return X64Word.create(high, low); + // } + }); - // proxy certain important events. - var events = ['error', 'close', 'destroy', 'pause', 'resume']; - forEach(events, function(ev) { - stream.on(ev, self.emit.bind(self, ev)); - }); + /** + * An array of 64-bit words. + * + * @property {Array} words The array of CryptoJS.x64.Word objects. + * @property {number} sigBytes The number of significant bytes in this word array. + */ + var X64WordArray = C_x64.WordArray = Base.extend({ + /** + * Initializes a newly created word array. + * + * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. + * @param {number} sigBytes (Optional) The number of significant bytes in the words. + * + * @example + * + * var wordArray = CryptoJS.x64.WordArray.create(); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ]); + * + * var wordArray = CryptoJS.x64.WordArray.create([ + * CryptoJS.x64.Word.create(0x00010203, 0x04050607), + * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) + * ], 10); + */ + init: function (words, sigBytes) { + words = this.words = words || []; - // when we try to consume some more bytes, simply unpause the - // underlying stream. - self._read = function(n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; + if (sigBytes != undefined) { + this.sigBytes = sigBytes; + } else { + this.sigBytes = words.length * 8; + } + }, - return self; -}; + /** + * Converts this 64-bit word array to a 32-bit word array. + * + * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. + * + * @example + * + * var x32WordArray = x64WordArray.toX32(); + */ + toX32: function () { + // Shortcuts + var x64Words = this.words; + var x64WordsLength = x64Words.length; + // Convert + var x32Words = []; + for (var i = 0; i < x64WordsLength; i++) { + var x64Word = x64Words[i]; + x32Words.push(x64Word.high); + x32Words.push(x64Word.low); + } + return X32WordArray.create(x32Words, this.sigBytes); + }, -// exposed for testing purposes only. -Readable._fromList = fromList; + /** + * Creates a copy of this word array. + * + * @return {X64WordArray} The clone. + * + * @example + * + * var clone = x64WordArray.clone(); + */ + clone: function () { + var clone = Base.clone.call(this); -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -function fromList(n, state) { - var list = state.buffer; - var length = state.length; - var stringMode = !!state.decoder; - var objectMode = !!state.objectMode; - var ret; + // Clone "words" array + var words = clone.words = this.words.slice(0); - // nothing in the list, definitely empty. - if (list.length === 0) - return null; + // Clone each X64Word object + var wordsLength = words.length; + for (var i = 0; i < wordsLength; i++) { + words[i] = words[i].clone(); + } + + return clone; + } + }); + }()); - if (length === 0) - ret = null; - else if (objectMode) - ret = list.shift(); - else if (!n || n >= length) { - // read it all, truncate the array. - if (stringMode) - ret = list.join(''); - else - ret = Buffer.concat(list, length); - list.length = 0; - } else { - // read just some of it. - if (n < list[0].length) { - // just take a part of the first list item. - // slice is the same for buffers and strings. - var buf = list[0]; - ret = buf.slice(0, n); - list[0] = buf.slice(n); - } else if (n === list[0].length) { - // first list is a perfect match - ret = list.shift(); - } else { - // complex case. - // we have enough to cover it, but it spans past the first buffer. - if (stringMode) - ret = ''; - else - ret = new Buffer(n); - var c = 0; - for (var i = 0, l = list.length; i < l && c < n; i++) { - var buf = list[0]; - var cpy = Math.min(n - c, buf.length); + return CryptoJS; - if (stringMode) - ret += buf.slice(0, cpy); - else - buf.copy(ret, c, 0, cpy); +})); +},{"./core":177}],186:[function(require,module,exports){ +'use strict'; - if (cpy < buf.length) - list[0] = buf.slice(cpy); - else - list.shift(); +exports.utils = require('./des/utils'); +exports.Cipher = require('./des/cipher'); +exports.DES = require('./des/des'); +exports.CBC = require('./des/cbc'); +exports.EDE = require('./des/ede'); - c += cpy; - } - } - } +},{"./des/cbc":187,"./des/cipher":188,"./des/des":189,"./des/ede":190,"./des/utils":191}],187:[function(require,module,exports){ +'use strict'; - return ret; -} +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); -function endReadable(stream) { - var state = stream._readableState; +var proto = {}; - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) - throw new Error('endReadable called on non-empty stream'); +function CBCState(iv) { + assert.equal(iv.length, 8, 'Invalid IV length'); - if (!state.endEmitted) { - state.ended = true; - process.nextTick(function() { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } - }); - } + this.iv = new Array(8); + for (var i = 0; i < this.iv.length; i++) + this.iv[i] = iv[i]; } -function forEach (xs, f) { - for (var i = 0, l = xs.length; i < l; i++) { - f(xs[i], i); +function instantiate(Base) { + function CBC(options) { + Base.call(this, options); + this._cbcInit(); } -} + inherits(CBC, Base); -function indexOf (xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; + var keys = Object.keys(proto); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + CBC.prototype[key] = proto[key]; } - return -1; + + CBC.create = function create(options) { + return new CBC(options); + }; + + return CBC; } -}).call(this,require('_process')) -},{"./_stream_duplex":305,"_process":299,"buffer":99,"core-util-is":310,"events":295,"inherits":296,"isarray":298,"stream":315,"string_decoder/":316,"util":98}],308:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +exports.instantiate = instantiate; +proto._cbcInit = function _cbcInit() { + var state = new CBCState(this.options.iv); + this._cbcState = state; +}; -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. +proto._update = function _update(inp, inOff, out, outOff) { + var state = this._cbcState; + var superProto = this.constructor.super_.prototype; -module.exports = Transform; + var iv = state.iv; + if (this.type === 'encrypt') { + for (var i = 0; i < this.blockSize; i++) + iv[i] ^= inp[inOff + i]; -var Duplex = require('./_stream_duplex'); + superProto._update.call(this, iv, 0, out, outOff); -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ + for (var i = 0; i < this.blockSize; i++) + iv[i] = out[outOff + i]; + } else { + superProto._update.call(this, inp, inOff, out, outOff); -util.inherits(Transform, Duplex); + for (var i = 0; i < this.blockSize; i++) + out[outOff + i] ^= iv[i]; + for (var i = 0; i < this.blockSize; i++) + iv[i] = inp[inOff + i]; + } +}; -function TransformState(options, stream) { - this.afterTransform = function(er, data) { - return afterTransform(stream, er, data); - }; +},{"inherits":226,"minimalistic-assert":233}],188:[function(require,module,exports){ +'use strict'; - this.needTransform = false; - this.transforming = false; - this.writecb = null; - this.writechunk = null; +var assert = require('minimalistic-assert'); + +function Cipher(options) { + this.options = options; + + this.type = this.options.type; + this.blockSize = 8; + this._init(); + + this.buffer = new Array(this.blockSize); + this.bufferOff = 0; } +module.exports = Cipher; -function afterTransform(stream, er, data) { - var ts = stream._transformState; - ts.transforming = false; +Cipher.prototype._init = function _init() { + // Might be overrided +}; - var cb = ts.writecb; +Cipher.prototype.update = function update(data) { + if (data.length === 0) + return []; - if (!cb) - return stream.emit('error', new Error('no writecb in Transform class')); + if (this.type === 'decrypt') + return this._updateDecrypt(data); + else + return this._updateEncrypt(data); +}; - ts.writechunk = null; - ts.writecb = null; +Cipher.prototype._buffer = function _buffer(data, off) { + // Append data to buffer + var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); + for (var i = 0; i < min; i++) + this.buffer[this.bufferOff + i] = data[off + i]; + this.bufferOff += min; - if (!util.isNullOrUndefined(data)) - stream.push(data); + // Shift next + return min; +}; - if (cb) - cb(er); +Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { + this._update(this.buffer, 0, out, off); + this.bufferOff = 0; + return this.blockSize; +}; - var rs = stream._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - stream._read(rs.highWaterMark); +Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { + var inputOff = 0; + var outputOff = 0; + + var count = ((this.bufferOff + data.length) / this.blockSize) | 0; + var out = new Array(count * this.blockSize); + + if (this.bufferOff !== 0) { + inputOff += this._buffer(data, inputOff); + + if (this.bufferOff === this.buffer.length) + outputOff += this._flushBuffer(out, outputOff); } -} + // Write blocks + var max = data.length - ((data.length - inputOff) % this.blockSize); + for (; inputOff < max; inputOff += this.blockSize) { + this._update(data, inputOff, out, outputOff); + outputOff += this.blockSize; + } -function Transform(options) { - if (!(this instanceof Transform)) - return new Transform(options); + // Queue rest + for (; inputOff < data.length; inputOff++, this.bufferOff++) + this.buffer[this.bufferOff] = data[inputOff]; - Duplex.call(this, options); + return out; +}; - this._transformState = new TransformState(options, this); +Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { + var inputOff = 0; + var outputOff = 0; - // when the writable side finishes, then flush out anything remaining. - var stream = this; + var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; + var out = new Array(count * this.blockSize); - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; + // TODO(indutny): optimize it, this is far from optimal + for (; count > 0; count--) { + inputOff += this._buffer(data, inputOff); + outputOff += this._flushBuffer(out, outputOff); + } - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; + // Buffer rest of the input + inputOff += this._buffer(data, inputOff); - this.once('prefinish', function() { - if (util.isFunction(this._flush)) - this._flush(function(er) { - done(stream, er); - }); - else - done(stream); - }); -} + return out; +}; -Transform.prototype.push = function(chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); +Cipher.prototype.final = function final(buffer) { + var first; + if (buffer) + first = this.update(buffer); + + var last; + if (this.type === 'encrypt') + last = this._finalEncrypt(); + else + last = this._finalDecrypt(); + + if (first) + return first.concat(last); + else + return last; }; -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function(chunk, encoding, cb) { - throw new Error('not implemented'); +Cipher.prototype._pad = function _pad(buffer, off) { + if (off === 0) + return false; + + while (off < buffer.length) + buffer[off++] = 0; + + return true; }; -Transform.prototype._write = function(chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || - rs.needReadable || - rs.length < rs.highWaterMark) - this._read(rs.highWaterMark); - } +Cipher.prototype._finalEncrypt = function _finalEncrypt() { + if (!this._pad(this.buffer, this.bufferOff)) + return []; + + var out = new Array(this.blockSize); + this._update(this.buffer, 0, out, 0); + return out; }; -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function(n) { - var ts = this._transformState; +Cipher.prototype._unpad = function _unpad(buffer) { + return buffer; +}; - if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } +Cipher.prototype._finalDecrypt = function _finalDecrypt() { + assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); + var out = new Array(this.blockSize); + this._flushBuffer(out, 0); + + return this._unpad(out); }; +},{"minimalistic-assert":233}],189:[function(require,module,exports){ +'use strict'; -function done(stream, er) { - if (er) - return stream.emit('error', er); +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - var ws = stream._writableState; - var ts = stream._transformState; +var des = require('../des'); +var utils = des.utils; +var Cipher = des.Cipher; - if (ws.length) - throw new Error('calling transform done when ws.length != 0'); +function DESState() { + this.tmp = new Array(2); + this.keys = null; +} - if (ts.transforming) - throw new Error('calling transform done when still transforming'); +function DES(options) { + Cipher.call(this, options); - return stream.push(null); + var state = new DESState(); + this._desState = state; + + this.deriveKeys(state, options.key); } +inherits(DES, Cipher); +module.exports = DES; -},{"./_stream_duplex":305,"core-util-is":310,"inherits":296}],309:[function(require,module,exports){ -(function (process){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +DES.create = function create(options) { + return new DES(options); +}; -// A bit simpler than readable streams. -// Implement an async ._write(chunk, cb), and it'll handle all -// the drain event emission and buffering. +var shiftTable = [ + 1, 1, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 1 +]; -module.exports = Writable; +DES.prototype.deriveKeys = function deriveKeys(state, key) { + state.keys = new Array(16 * 2); -/**/ -var Buffer = require('buffer').Buffer; -/**/ + assert.equal(key.length, this.blockSize, 'Invalid key length'); -Writable.WritableState = WritableState; + var kL = utils.readUInt32BE(key, 0); + var kR = utils.readUInt32BE(key, 4); + + utils.pc1(kL, kR, state.tmp, 0); + kL = state.tmp[0]; + kR = state.tmp[1]; + for (var i = 0; i < state.keys.length; i += 2) { + var shift = shiftTable[i >>> 1]; + kL = utils.r28shl(kL, shift); + kR = utils.r28shl(kR, shift); + utils.pc2(kL, kR, state.keys, i); + } +}; +DES.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._desState; -/**/ -var util = require('core-util-is'); -util.inherits = require('inherits'); -/**/ + var l = utils.readUInt32BE(inp, inOff); + var r = utils.readUInt32BE(inp, inOff + 4); -var Stream = require('stream'); + // Initial Permutation + utils.ip(l, r, state.tmp, 0); + l = state.tmp[0]; + r = state.tmp[1]; -util.inherits(Writable, Stream); + if (this.type === 'encrypt') + this._encrypt(state, l, r, state.tmp, 0); + else + this._decrypt(state, l, r, state.tmp, 0); -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; -} + l = state.tmp[0]; + r = state.tmp[1]; -function WritableState(options, stream) { - var Duplex = require('./_stream_duplex'); + utils.writeUInt32BE(out, l, outOff); + utils.writeUInt32BE(out, r, outOff + 4); +}; - options = options || {}; +DES.prototype._pad = function _pad(buffer, off) { + var value = buffer.length - off; + for (var i = off; i < buffer.length; i++) + buffer[i] = value; - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - var defaultHwm = options.objectMode ? 16 : 16 * 1024; - this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; + return true; +}; - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; +DES.prototype._unpad = function _unpad(buffer) { + var pad = buffer[buffer.length - 1]; + for (var i = buffer.length - pad; i < buffer.length; i++) + assert.equal(buffer[i], pad); - if (stream instanceof Duplex) - this.objectMode = this.objectMode || !!options.writableObjectMode; + return buffer.slice(0, buffer.length - pad); +}; + +DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { + var l = lStart; + var r = rStart; + + // Apply f() x16 times + for (var i = 0; i < state.keys.length; i += 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; - // cast to ints. - this.highWaterMark = ~~this.highWaterMark; + // f(r, k) + utils.expand(r, state.tmp, 0); - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; + var t = r; + r = (l ^ f) >>> 0; + l = t; + } - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; + // Reverse Initial Permutation + utils.rip(r, l, out, off); +}; - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; +DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { + var l = rStart; + var r = lStart; - // a flag to see when we're in the middle of a write. - this.writing = false; + // Apply f() x16 times + for (var i = state.keys.length - 2; i >= 0; i -= 2) { + var keyL = state.keys[i]; + var keyR = state.keys[i + 1]; - // when true all writes will be buffered until .uncork() call - this.corked = 0; + // f(r, k) + utils.expand(l, state.tmp, 0); - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; + keyL ^= state.tmp[0]; + keyR ^= state.tmp[1]; + var s = utils.substitute(keyL, keyR); + var f = utils.permute(s); - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; + var t = l; + l = (r ^ f) >>> 0; + r = t; + } - // the callback that's passed to _write(chunk,cb) - this.onwrite = function(er) { - onwrite(stream, er); - }; + // Reverse Initial Permutation + utils.rip(l, r, out, off); +}; - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; +},{"../des":186,"inherits":226,"minimalistic-assert":233}],190:[function(require,module,exports){ +'use strict'; - // the amount that is being written when _write is called. - this.writelen = 0; +var assert = require('minimalistic-assert'); +var inherits = require('inherits'); - this.buffer = []; +var des = require('../des'); +var Cipher = des.Cipher; +var DES = des.DES; - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; +function EDEState(type, key) { + assert.equal(key.length, 24, 'Invalid key length'); - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; + var k1 = key.slice(0, 8); + var k2 = key.slice(8, 16); + var k3 = key.slice(16, 24); - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; + if (type === 'encrypt') { + this.ciphers = [ + DES.create({ type: 'encrypt', key: k1 }), + DES.create({ type: 'decrypt', key: k2 }), + DES.create({ type: 'encrypt', key: k3 }) + ]; + } else { + this.ciphers = [ + DES.create({ type: 'decrypt', key: k3 }), + DES.create({ type: 'encrypt', key: k2 }), + DES.create({ type: 'decrypt', key: k1 }) + ]; + } } -function Writable(options) { - var Duplex = require('./_stream_duplex'); +function EDE(options) { + Cipher.call(this, options); - // Writable ctor is applied to Duplexes, though they're not - // instanceof Writable, they're instanceof Readable. - if (!(this instanceof Writable) && !(this instanceof Duplex)) - return new Writable(options); + var state = new EDEState(this.type, this.options.key); + this._edeState = state; +} +inherits(EDE, Cipher); - this._writableState = new WritableState(options, this); +module.exports = EDE; - // legacy. - this.writable = true; +EDE.create = function create(options) { + return new EDE(options); +}; - Stream.call(this); -} +EDE.prototype._update = function _update(inp, inOff, out, outOff) { + var state = this._edeState; -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function() { - this.emit('error', new Error('Cannot pipe. Not readable.')); + state.ciphers[0]._update(inp, inOff, out, outOff); + state.ciphers[1]._update(out, outOff, out, outOff); + state.ciphers[2]._update(out, outOff, out, outOff); }; +EDE.prototype._pad = DES.prototype._pad; +EDE.prototype._unpad = DES.prototype._unpad; -function writeAfterEnd(stream, state, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - process.nextTick(function() { - cb(er); - }); -} - -// If we get something that is not a buffer, string, null, or undefined, -// and we're not in objectMode, then that's an error. -// Otherwise stream chunks are all considered to be of length=1, and the -// watermarks determine how many objects to keep in the buffer, rather than -// how many bytes or characters. -function validChunk(stream, state, chunk, cb) { - var valid = true; - if (!util.isBuffer(chunk) && - !util.isString(chunk) && - !util.isNullOrUndefined(chunk) && - !state.objectMode) { - var er = new TypeError('Invalid non-string/buffer chunk'); - stream.emit('error', er); - process.nextTick(function() { - cb(er); - }); - valid = false; - } - return valid; -} +},{"../des":186,"inherits":226,"minimalistic-assert":233}],191:[function(require,module,exports){ +'use strict'; -Writable.prototype.write = function(chunk, encoding, cb) { - var state = this._writableState; - var ret = false; +exports.readUInt32BE = function readUInt32BE(bytes, off) { + var res = (bytes[0 + off] << 24) | + (bytes[1 + off] << 16) | + (bytes[2 + off] << 8) | + bytes[3 + off]; + return res >>> 0; +}; - if (util.isFunction(encoding)) { - cb = encoding; - encoding = null; - } +exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { + bytes[0 + off] = value >>> 24; + bytes[1 + off] = (value >>> 16) & 0xff; + bytes[2 + off] = (value >>> 8) & 0xff; + bytes[3 + off] = value & 0xff; +}; - if (util.isBuffer(chunk)) - encoding = 'buffer'; - else if (!encoding) - encoding = state.defaultEncoding; +exports.ip = function ip(inL, inR, out, off) { + var outL = 0; + var outR = 0; - if (!util.isFunction(cb)) - cb = function() {}; + for (var i = 6; i >= 0; i -= 2) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } - if (state.ended) - writeAfterEnd(this, state, cb); - else if (validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, chunk, encoding, cb); + for (var i = 6; i >= 0; i -= 2) { + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + } + for (var j = 1; j <= 25; j += 8) { + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } } - return ret; + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; }; -Writable.prototype.cork = function() { - var state = this._writableState; +exports.rip = function rip(inL, inR, out, off) { + var outL = 0; + var outR = 0; - state.corked++; -}; + for (var i = 0; i < 4; i++) { + for (var j = 24; j >= 0; j -= 8) { + outL <<= 1; + outL |= (inR >>> (j + i)) & 1; + outL <<= 1; + outL |= (inL >>> (j + i)) & 1; + } + } + for (var i = 4; i < 8; i++) { + for (var j = 24; j >= 0; j -= 8) { + outR <<= 1; + outR |= (inR >>> (j + i)) & 1; + outR <<= 1; + outR |= (inL >>> (j + i)) & 1; + } + } -Writable.prototype.uncork = function() { - var state = this._writableState; + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; - if (state.corked) { - state.corked--; +exports.pc1 = function pc1(inL, inR, out, off) { + var outL = 0; + var outR = 0; - if (!state.writing && - !state.corked && - !state.finished && - !state.bufferProcessing && - state.buffer.length) - clearBuffer(this, state); + // 7, 15, 23, 31, 39, 47, 55, 63 + // 6, 14, 22, 30, 39, 47, 55, 63 + // 5, 13, 21, 29, 39, 47, 55, 63 + // 4, 12, 20, 28 + for (var i = 7; i >= 5; i--) { + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inL >> (j + i)) & 1; + } } -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && - state.decodeStrings !== false && - util.isString(chunk)) { - chunk = new Buffer(chunk, encoding); + for (var j = 0; j <= 24; j += 8) { + outL <<= 1; + outL |= (inR >> (j + i)) & 1; } - return chunk; -} -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, chunk, encoding, cb) { - chunk = decodeChunk(state, chunk, encoding); - if (util.isBuffer(chunk)) - encoding = 'buffer'; - var len = state.objectMode ? 1 : chunk.length; + // 1, 9, 17, 25, 33, 41, 49, 57 + // 2, 10, 18, 26, 34, 42, 50, 58 + // 3, 11, 19, 27, 35, 43, 51, 59 + // 36, 44, 52, 60 + for (var i = 1; i <= 3; i++) { + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inR >> (j + i)) & 1; + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } + } + for (var j = 0; j <= 24; j += 8) { + outR <<= 1; + outR |= (inL >> (j + i)) & 1; + } - state.length += len; + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) - state.needDrain = true; +exports.r28shl = function r28shl(num, shift) { + return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); +}; - if (state.writing || state.corked) - state.buffer.push(new WriteReq(chunk, encoding, cb)); - else - doWrite(stream, state, false, len, chunk, encoding, cb); +var pc2table = [ + // inL => outL + 14, 11, 17, 4, 27, 23, 25, 0, + 13, 22, 7, 18, 5, 9, 16, 24, + 2, 20, 12, 21, 1, 8, 15, 26, - return ret; -} + // inR => outR + 15, 4, 25, 19, 9, 1, 26, 16, + 5, 11, 23, 8, 12, 7, 17, 0, + 22, 3, 10, 14, 6, 20, 27, 24 +]; -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) - stream._writev(chunk, state.onwrite); - else - stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} +exports.pc2 = function pc2(inL, inR, out, off) { + var outL = 0; + var outR = 0; -function onwriteError(stream, state, sync, er, cb) { - if (sync) - process.nextTick(function() { - state.pendingcb--; - cb(er); - }); - else { - state.pendingcb--; - cb(er); + var len = pc2table.length >>> 1; + for (var i = 0; i < len; i++) { + outL <<= 1; + outL |= (inL >>> pc2table[i]) & 0x1; + } + for (var i = len; i < pc2table.length; i++) { + outR <<= 1; + outR |= (inR >>> pc2table[i]) & 0x1; } - stream._writableState.errorEmitted = true; - stream.emit('error', er); -} + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} +exports.expand = function expand(r, out, off) { + var outL = 0; + var outR = 0; -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; + outL = ((r & 1) << 5) | (r >>> 27); + for (var i = 23; i >= 15; i -= 4) { + outL <<= 6; + outL |= (r >>> i) & 0x3f; + } + for (var i = 11; i >= 3; i -= 4) { + outR |= (r >>> i) & 0x3f; + outR <<= 6; + } + outR |= ((r & 0x1f) << 1) | (r >>> 31); - onwriteStateUpdate(state); + out[off + 0] = outL >>> 0; + out[off + 1] = outR >>> 0; +}; - if (er) - onwriteError(stream, state, sync, er, cb); - else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(stream, state); +var sTable = [ + 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, + 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, + 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, + 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, - if (!finished && - !state.corked && - !state.bufferProcessing && - state.buffer.length) { - clearBuffer(stream, state); - } + 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, + 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, + 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, + 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, - if (sync) { - process.nextTick(function() { - afterWrite(stream, state, finished, cb); - }); - } else { - afterWrite(stream, state, finished, cb); - } - } -} + 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, + 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, + 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, + 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, -function afterWrite(stream, state, finished, cb) { - if (!finished) - onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} + 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, + 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, + 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, + 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} + 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, + 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, + 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, + 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, + 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, + 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, + 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, + 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; + 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, + 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, + 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, + 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, - if (stream._writev && state.buffer.length > 1) { - // Fast case, write everything using _writev() - var cbs = []; - for (var c = 0; c < state.buffer.length; c++) - cbs.push(state.buffer[c].callback); + 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, + 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, + 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, + 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 +]; - // count the one we are adding, as well. - // TODO(isaacs) clean this up - state.pendingcb++; - doWrite(stream, state, true, state.length, state.buffer, '', function(err) { - for (var i = 0; i < cbs.length; i++) { - state.pendingcb--; - cbs[i](err); - } - }); +exports.substitute = function substitute(inL, inR) { + var out = 0; + for (var i = 0; i < 4; i++) { + var b = (inL >>> (18 - i * 6)) & 0x3f; + var sb = sTable[i * 0x40 + b]; - // Clear buffer - state.buffer = []; - } else { - // Slow case, write chunks one-by-one - for (var c = 0; c < state.buffer.length; c++) { - var entry = state.buffer[c]; - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; + out <<= 4; + out |= sb; + } + for (var i = 0; i < 4; i++) { + var b = (inR >>> (18 - i * 6)) & 0x3f; + var sb = sTable[4 * 0x40 + i * 0x40 + b]; - doWrite(stream, state, false, len, chunk, encoding, cb); + out <<= 4; + out |= sb; + } + return out >>> 0; +}; - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - c++; - break; - } - } +var permuteTable = [ + 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, + 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 +]; - if (c < state.buffer.length) - state.buffer = state.buffer.slice(c); - else - state.buffer.length = 0; +exports.permute = function permute(num) { + var out = 0; + for (var i = 0; i < permuteTable.length; i++) { + out <<= 1; + out |= (num >>> permuteTable[i]) & 0x1; } + return out >>> 0; +}; - state.bufferProcessing = false; -} - -Writable.prototype._write = function(chunk, encoding, cb) { - cb(new Error('not implemented')); +exports.padSplit = function padSplit(num, size, group) { + var str = num.toString(2); + while (str.length < size) + str = '0' + str; + var out = []; + for (var i = 0; i < size; i += group) + out.push(str.slice(i, i + group)); + return out.join(' '); }; -Writable.prototype._writev = null; +},{}],192:[function(require,module,exports){ +(function (Buffer){ +var generatePrime = require('./lib/generatePrime') +var primes = require('./lib/primes.json') -Writable.prototype.end = function(chunk, encoding, cb) { - var state = this._writableState; +var DH = require('./lib/dh') - if (util.isFunction(chunk)) { - cb = chunk; - chunk = null; - encoding = null; - } else if (util.isFunction(encoding)) { - cb = encoding; - encoding = null; - } +function getDiffieHellman (mod) { + var prime = new Buffer(primes[mod].prime, 'hex') + var gen = new Buffer(primes[mod].gen, 'hex') - if (!util.isNullOrUndefined(chunk)) - this.write(chunk, encoding); + return new DH(prime, gen) +} - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); +var ENCODINGS = { + 'binary': true, 'hex': true, 'base64': true +} + +function createDiffieHellman (prime, enc, generator, genc) { + if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { + return createDiffieHellman(prime, 'binary', enc, generator) } - // ignore unnecessary end() calls. - if (!state.ending && !state.finished) - endWritable(this, state, cb); -}; + enc = enc || 'binary' + genc = genc || 'binary' + generator = generator || new Buffer([2]) + if (!Buffer.isBuffer(generator)) { + generator = new Buffer(generator, genc) + } -function needFinish(stream, state) { - return (state.ending && - state.length === 0 && - !state.finished && - !state.writing); -} + if (typeof prime === 'number') { + return new DH(generatePrime(prime, generator), generator, true) + } -function prefinish(stream, state) { - if (!state.prefinished) { - state.prefinished = true; - stream.emit('prefinish'); + if (!Buffer.isBuffer(prime)) { + prime = new Buffer(prime, enc) } + + return new DH(prime, generator, true) } -function finishMaybe(stream, state) { - var need = needFinish(stream, state); - if (need) { - if (state.pendingcb === 0) { - prefinish(stream, state); - state.finished = true; - stream.emit('finish'); - } else - prefinish(stream, state); +exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman +exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman + +}).call(this,require("buffer").Buffer) +},{"./lib/dh":193,"./lib/generatePrime":194,"./lib/primes.json":195,"buffer":147}],193:[function(require,module,exports){ +(function (Buffer){ +var BN = require('bn.js'); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var TWENTYFOUR = new BN(24); +var ELEVEN = new BN(11); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var primes = require('./generatePrime'); +var randomBytes = require('randombytes'); +module.exports = DH; + +function setPublicKey(pub, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(pub)) { + pub = new Buffer(pub, enc); } - return need; + this._pub = new BN(pub); + return this; } -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) - process.nextTick(cb); - else - stream.once('finish', cb); +function setPrivateKey(priv, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(priv)) { + priv = new Buffer(priv, enc); } - state.ended = true; + this._priv = new BN(priv); + return this; } -}).call(this,require('_process')) -},{"./_stream_duplex":305,"_process":299,"buffer":99,"core-util-is":310,"inherits":296,"stream":315}],310:[function(require,module,exports){ -(function (Buffer){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +var primeCache = {}; +function checkPrime(prime, generator) { + var gen = generator.toString('hex'); + var hex = [gen, prime.toString(16)].join('_'); + if (hex in primeCache) { + return primeCache[hex]; + } + var error = 0; -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. + if (prime.isEven() || + !primes.simpleSieve || + !primes.fermatTest(prime) || + !millerRabin.test(prime)) { + //not a prime so +1 + error += 1; -function isArray(arg) { - if (Array.isArray) { - return Array.isArray(arg); + if (gen === '02' || gen === '05') { + // we'd be able to check the generator + // it would fail so +8 + error += 8; + } else { + //we wouldn't be able to test the generator + // so +4 + error += 4; + } + primeCache[hex] = error; + return error; } - return objectToString(arg) === '[object Array]'; + if (!millerRabin.test(prime.shrn(1))) { + //not a safe prime + error += 2; + } + var rem; + switch (gen) { + case '02': + if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { + // unsuidable generator + error += 8; + } + break; + case '05': + rem = prime.mod(TEN); + if (rem.cmp(THREE) && rem.cmp(SEVEN)) { + // prime mod 10 needs to equal 3 or 7 + error += 8; + } + break; + default: + error += 4; + } + primeCache[hex] = error; + return error; } -exports.isArray = isArray; -function isBoolean(arg) { - return typeof arg === 'boolean'; +function DH(prime, generator, malleable) { + this.setGenerator(generator); + this.__prime = new BN(prime); + this._prime = BN.mont(this.__prime); + this._primeLen = prime.length; + this._pub = undefined; + this._priv = undefined; + this._primeCode = undefined; + if (malleable) { + this.setPublicKey = setPublicKey; + this.setPrivateKey = setPrivateKey; + } else { + this._primeCode = 8; + } } -exports.isBoolean = isBoolean; +Object.defineProperty(DH.prototype, 'verifyError', { + enumerable: true, + get: function () { + if (typeof this._primeCode !== 'number') { + this._primeCode = checkPrime(this.__prime, this.__gen); + } + return this._primeCode; + } +}); +DH.prototype.generateKeys = function () { + if (!this._priv) { + this._priv = new BN(randomBytes(this._primeLen)); + } + this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); + return this.getPublicKey(); +}; -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; +DH.prototype.computeSecret = function (other) { + other = new BN(other); + other = other.toRed(this._prime); + var secret = other.redPow(this._priv).fromRed(); + var out = new Buffer(secret.toArray()); + var prime = this.getPrime(); + if (out.length < prime.length) { + var front = new Buffer(prime.length - out.length); + front.fill(0); + out = Buffer.concat([front, out]); + } + return out; +}; -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; +DH.prototype.getPublicKey = function getPublicKey(enc) { + return formatReturnValue(this._pub, enc); +}; -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; +DH.prototype.getPrivateKey = function getPrivateKey(enc) { + return formatReturnValue(this._priv, enc); +}; -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; +DH.prototype.getPrime = function (enc) { + return formatReturnValue(this.__prime, enc); +}; -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; +DH.prototype.getGenerator = function (enc) { + return formatReturnValue(this._gen, enc); +}; -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; +DH.prototype.setGenerator = function (gen, enc) { + enc = enc || 'utf8'; + if (!Buffer.isBuffer(gen)) { + gen = new Buffer(gen, enc); + } + this.__gen = gen; + this._gen = new BN(gen); + return this; +}; -function isRegExp(re) { - return objectToString(re) === '[object RegExp]'; +function formatReturnValue(bn, enc) { + var buf = new Buffer(bn.toArray()); + if (!enc) { + return buf; + } else { + return buf.toString(enc); + } } -exports.isRegExp = isRegExp; -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; +}).call(this,require("buffer").Buffer) +},{"./generatePrime":194,"bn.js":196,"buffer":147,"miller-rabin":231,"randombytes":247}],194:[function(require,module,exports){ +var randomBytes = require('randombytes'); +module.exports = findPrime; +findPrime.simpleSieve = simpleSieve; +findPrime.fermatTest = fermatTest; +var BN = require('bn.js'); +var TWENTYFOUR = new BN(24); +var MillerRabin = require('miller-rabin'); +var millerRabin = new MillerRabin(); +var ONE = new BN(1); +var TWO = new BN(2); +var FIVE = new BN(5); +var SIXTEEN = new BN(16); +var EIGHT = new BN(8); +var TEN = new BN(10); +var THREE = new BN(3); +var SEVEN = new BN(7); +var ELEVEN = new BN(11); +var FOUR = new BN(4); +var TWELVE = new BN(12); +var primes = null; -function isDate(d) { - return objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; +function _getPrimes() { + if (primes !== null) + return primes; -function isError(e) { - return (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; + var limit = 0x100000; + var res = []; + res[0] = 2; + for (var i = 1, k = 3; k < limit; k += 2) { + var sqrt = Math.ceil(Math.sqrt(k)); + for (var j = 0; j < i && res[j] <= sqrt; j++) + if (k % res[j] === 0) + break; -function isFunction(arg) { - return typeof arg === 'function'; -} -exports.isFunction = isFunction; + if (i !== j && res[j] <= sqrt) + continue; -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; + res[i++] = k; + } + primes = res; + return res; } -exports.isPrimitive = isPrimitive; -exports.isBuffer = Buffer.isBuffer; +function simpleSieve(p) { + var primes = _getPrimes(); -function objectToString(o) { - return Object.prototype.toString.call(o); + for (var i = 0; i < primes.length; i++) + if (p.modn(primes[i]) === 0) { + if (p.cmpn(primes[i]) === 0) { + return true; + } else { + return false; + } + } + + return true; } -}).call(this,{"isBuffer":require("../../../../insert-module-globals/node_modules/is-buffer/index.js")}) -},{"../../../../insert-module-globals/node_modules/is-buffer/index.js":297}],311:[function(require,module,exports){ -module.exports = require("./lib/_stream_passthrough.js") +function fermatTest(p) { + var red = BN.mont(p); + return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; +} -},{"./lib/_stream_passthrough.js":306}],312:[function(require,module,exports){ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = require('stream'); -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); +function findPrime(bits, gen) { + if (bits < 16) { + // this is what openssl does + if (gen === 2 || gen === 5) { + return new BN([0x8c, 0x7b]); + } else { + return new BN([0x8c, 0x27]); + } + } + gen = new BN(gen); -},{"./lib/_stream_duplex.js":305,"./lib/_stream_passthrough.js":306,"./lib/_stream_readable.js":307,"./lib/_stream_transform.js":308,"./lib/_stream_writable.js":309,"stream":315}],313:[function(require,module,exports){ -module.exports = require("./lib/_stream_transform.js") + var num, n2; -},{"./lib/_stream_transform.js":308}],314:[function(require,module,exports){ -module.exports = require("./lib/_stream_writable.js") + while (true) { + num = new BN(randomBytes(Math.ceil(bits / 8))); + while (num.bitLength() > bits) { + num.ishrn(1); + } + if (num.isEven()) { + num.iadd(ONE); + } + if (!num.testn(1)) { + num.iadd(TWO); + } + if (!gen.cmp(TWO)) { + while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { + num.iadd(FOUR); + } + } else if (!gen.cmp(FIVE)) { + while (num.mod(TEN).cmp(THREE)) { + num.iadd(FOUR); + } + } + n2 = num.shrn(1); + if (simpleSieve(n2) && simpleSieve(num) && + fermatTest(n2) && fermatTest(num) && + millerRabin.test(n2) && millerRabin.test(num)) { + return num; + } + } -},{"./lib/_stream_writable.js":309}],315:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. +} -module.exports = Stream; +},{"bn.js":196,"miller-rabin":231,"randombytes":247}],195:[function(require,module,exports){ +module.exports={ + "modp1": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" + }, + "modp2": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" + }, + "modp5": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" + }, + "modp14": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" + }, + "modp15": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" + }, + "modp16": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" + }, + "modp17": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" + }, + "modp18": { + "gen": "02", + "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" + } +} +},{}],196:[function(require,module,exports){ +arguments[4][120][0].apply(exports,arguments) +},{"dup":120}],197:[function(require,module,exports){ +arguments[4][58][0].apply(exports,arguments) +},{"../package.json":210,"./elliptic/curve":200,"./elliptic/curves":203,"./elliptic/ec":204,"./elliptic/hmac-drbg":207,"./elliptic/utils":209,"brorand":99,"dup":58}],198:[function(require,module,exports){ +'use strict'; -var EE = require('events').EventEmitter; -var inherits = require('inherits'); +var bn = require('bn.js'); +var elliptic = require('../../elliptic'); -inherits(Stream, EE); -Stream.Readable = require('readable-stream/readable.js'); -Stream.Writable = require('readable-stream/writable.js'); -Stream.Duplex = require('readable-stream/duplex.js'); -Stream.Transform = require('readable-stream/transform.js'); -Stream.PassThrough = require('readable-stream/passthrough.js'); +var getNAF = elliptic.utils.getNAF; +var getJSF = elliptic.utils.getJSF; +var assert = elliptic.utils.assert; -// Backwards-compat with node 0.4.x -Stream.Stream = Stream; +function BaseCurve(type, conf) { + this.type = type; + this.p = new bn(conf.p, 16); + // Use Montgomery, when there is no fast reduction for the prime + this.red = conf.prime ? bn.red(conf.prime) : bn.mont(this.p); + // Useful for many curves + this.zero = new bn(0).toRed(this.red); + this.one = new bn(1).toRed(this.red); + this.two = new bn(2).toRed(this.red); -// old-style streams. Note that the pipe method (the only relevant -// part of this class) is overridden in the Readable class. + // Curve configuration, optional + this.n = conf.n && new bn(conf.n, 16); + this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); -function Stream() { - EE.call(this); + // Temporary arrays + this._wnafT1 = new Array(4); + this._wnafT2 = new Array(4); + this._wnafT3 = new Array(4); + this._wnafT4 = new Array(4); } +module.exports = BaseCurve; -Stream.prototype.pipe = function(dest, options) { - var source = this; +BaseCurve.prototype.point = function point() { + throw new Error('Not implemented'); +}; - function ondata(chunk) { - if (dest.writable) { - if (false === dest.write(chunk) && source.pause) { - source.pause(); - } +BaseCurve.prototype.validate = function validate() { + throw new Error('Not implemented'); +}; + +BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { + assert(p.precomputed); + var doubles = p._getDoubles(); + + var naf = getNAF(k, 1); + var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); + I /= 3; + + // Translate into more windowed form + var repr = []; + for (var j = 0; j < naf.length; j += doubles.step) { + var nafW = 0; + for (var k = j + doubles.step - 1; k >= j; k--) + nafW = (nafW << 1) + naf[k]; + repr.push(nafW); + } + + var a = this.jpoint(null, null, null); + var b = this.jpoint(null, null, null); + for (var i = I; i > 0; i--) { + for (var j = 0; j < repr.length; j++) { + var nafW = repr[j]; + if (nafW === i) + b = b.mixedAdd(doubles.points[j]); + else if (nafW === -i) + b = b.mixedAdd(doubles.points[j].neg()); } + a = a.add(b); } + return a.toP(); +}; - source.on('data', ondata); +BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { + var w = 4; - function ondrain() { - if (source.readable && source.resume) { - source.resume(); + // Precompute window + var nafPoints = p._getNAFPoints(w); + w = nafPoints.wnd; + var wnd = nafPoints.points; + + // Get NAF form + var naf = getNAF(k, w); + + // Add `this`*(N+1) for every w-NAF index + var acc = this.jpoint(null, null, null); + for (var i = naf.length - 1; i >= 0; i--) { + // Count zeroes + for (var k = 0; i >= 0 && naf[i] === 0; i--) + k++; + if (i >= 0) + k++; + acc = acc.dblp(k); + + if (i < 0) + break; + var z = naf[i]; + assert(z !== 0); + if (p.type === 'affine') { + // J +- P + if (z > 0) + acc = acc.mixedAdd(wnd[(z - 1) >> 1]); + else + acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); + } else { + // J +- J + if (z > 0) + acc = acc.add(wnd[(z - 1) >> 1]); + else + acc = acc.add(wnd[(-z - 1) >> 1].neg()); } } + return p.type === 'affine' ? acc.toP() : acc; +}; - dest.on('drain', ondrain); +BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, + points, + coeffs, + len) { + var wndWidth = this._wnafT1; + var wnd = this._wnafT2; + var naf = this._wnafT3; - // If the 'end' option is not supplied, dest.end() will be called when - // source gets the 'end' or 'close' events. Only dest.end() once. - if (!dest._isStdio && (!options || options.end !== false)) { - source.on('end', onend); - source.on('close', onclose); + // Fill all arrays + var max = 0; + for (var i = 0; i < len; i++) { + var p = points[i]; + var nafPoints = p._getNAFPoints(defW); + wndWidth[i] = nafPoints.wnd; + wnd[i] = nafPoints.points; } - var didOnEnd = false; - function onend() { - if (didOnEnd) return; - didOnEnd = true; + // Comb small window NAFs + for (var i = len - 1; i >= 1; i -= 2) { + var a = i - 1; + var b = i; + if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { + naf[a] = getNAF(coeffs[a], wndWidth[a]); + naf[b] = getNAF(coeffs[b], wndWidth[b]); + max = Math.max(naf[a].length, max); + max = Math.max(naf[b].length, max); + continue; + } - dest.end(); - } + var comb = [ + points[a], /* 1 */ + null, /* 3 */ + null, /* 5 */ + points[b] /* 7 */ + ]; + // Try to avoid Projective points, if possible + if (points[a].y.cmp(points[b].y) === 0) { + comb[1] = points[a].add(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].add(points[b].neg()); + } else { + comb[1] = points[a].toJ().mixedAdd(points[b]); + comb[2] = points[a].toJ().mixedAdd(points[b].neg()); + } - function onclose() { - if (didOnEnd) return; - didOnEnd = true; + var index = [ + -3, /* -1 -1 */ + -1, /* -1 0 */ + -5, /* -1 1 */ + -7, /* 0 -1 */ + 0, /* 0 0 */ + 7, /* 0 1 */ + 5, /* 1 -1 */ + 1, /* 1 0 */ + 3 /* 1 1 */ + ]; - if (typeof dest.destroy === 'function') dest.destroy(); - } + var jsf = getJSF(coeffs[a], coeffs[b]); + max = Math.max(jsf[0].length, max); + naf[a] = new Array(max); + naf[b] = new Array(max); + for (var j = 0; j < max; j++) { + var ja = jsf[0][j] | 0; + var jb = jsf[1][j] | 0; - // don't leave dangling pipes when there are errors. - function onerror(er) { - cleanup(); - if (EE.listenerCount(this, 'error') === 0) { - throw er; // Unhandled stream error in pipe. + naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; + naf[b][j] = 0; + wnd[a] = comb; } } - source.on('error', onerror); - dest.on('error', onerror); - - // remove all the event listeners that were added. - function cleanup() { - source.removeListener('data', ondata); - dest.removeListener('drain', ondrain); - - source.removeListener('end', onend); - source.removeListener('close', onclose); + var acc = this.jpoint(null, null, null); + var tmp = this._wnafT4; + for (var i = max; i >= 0; i--) { + var k = 0; - source.removeListener('error', onerror); - dest.removeListener('error', onerror); + while (i >= 0) { + var zero = true; + for (var j = 0; j < len; j++) { + tmp[j] = naf[j][i] | 0; + if (tmp[j] !== 0) + zero = false; + } + if (!zero) + break; + k++; + i--; + } + if (i >= 0) + k++; + acc = acc.dblp(k); + if (i < 0) + break; - source.removeListener('end', cleanup); - source.removeListener('close', cleanup); + for (var j = 0; j < len; j++) { + var z = tmp[j]; + var p; + if (z === 0) + continue; + else if (z > 0) + p = wnd[j][(z - 1) >> 1]; + else if (z < 0) + p = wnd[j][(-z - 1) >> 1].neg(); - dest.removeListener('close', cleanup); + if (p.type === 'affine') + acc = acc.mixedAdd(p); + else + acc = acc.add(p); + } } + // Zeroify references + for (var i = 0; i < len; i++) + wnd[i] = null; + return acc.toP(); +}; - source.on('end', cleanup); - source.on('close', cleanup); +function BasePoint(curve, type) { + this.curve = curve; + this.type = type; + this.precomputed = null; +} +BaseCurve.BasePoint = BasePoint; - dest.on('close', cleanup); +BasePoint.prototype.validate = function validate() { + return this.curve.validate(this); +}; - dest.emit('pipe', source); +BasePoint.prototype.precompute = function precompute(power) { + if (this.precomputed) + return this; - // Allow for unix-like usage: A.pipe(B).pipe(C) - return dest; -}; + var precomputed = { + doubles: null, + naf: null, + beta: null + }; + precomputed.naf = this._getNAFPoints(8); + precomputed.doubles = this._getDoubles(4, power); + precomputed.beta = this._getBeta(); + this.precomputed = precomputed; -},{"events":295,"inherits":296,"readable-stream/duplex.js":304,"readable-stream/passthrough.js":311,"readable-stream/readable.js":312,"readable-stream/transform.js":313,"readable-stream/writable.js":314}],316:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + return this; +}; -var Buffer = require('buffer').Buffer; +BasePoint.prototype._hasDoubles = function _hasDoubles(k) { + if (!this.precomputed) + return false; -var isBufferEncoding = Buffer.isEncoding - || function(encoding) { - switch (encoding && encoding.toLowerCase()) { - case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true; - default: return false; - } - } + var doubles = this.precomputed.doubles; + if (!doubles) + return false; + return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); +}; -function assertEncoding(encoding) { - if (encoding && !isBufferEncoding(encoding)) { - throw new Error('Unknown encoding: ' + encoding); - } -} +BasePoint.prototype._getDoubles = function _getDoubles(step, power) { + if (this.precomputed && this.precomputed.doubles) + return this.precomputed.doubles; -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. CESU-8 is handled as part of the UTF-8 encoding. -// -// @TODO Handling all encodings inside a single object makes it very difficult -// to reason about this code, so it should be split up in the future. -// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code -// points as used by CESU-8. -var StringDecoder = exports.StringDecoder = function(encoding) { - this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); - assertEncoding(encoding); - switch (this.encoding) { - case 'utf8': - // CESU-8 represents each of Surrogate Pair by 3-bytes - this.surrogateSize = 3; - break; - case 'ucs2': - case 'utf16le': - // UTF-16 represents each of Surrogate Pair by 2-bytes - this.surrogateSize = 2; - this.detectIncompleteChar = utf16DetectIncompleteChar; - break; - case 'base64': - // Base-64 stores 3 bytes in 4 chars, and pads the remainder. - this.surrogateSize = 3; - this.detectIncompleteChar = base64DetectIncompleteChar; - break; - default: - this.write = passThroughWrite; - return; + var doubles = [ this ]; + var acc = this; + for (var i = 0; i < power; i += step) { + for (var j = 0; j < step; j++) + acc = acc.dbl(); + doubles.push(acc); } - - // Enough space to store all bytes of a single character. UTF-8 needs 4 - // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate). - this.charBuffer = new Buffer(6); - // Number of bytes received for the current incomplete multi-byte character. - this.charReceived = 0; - // Number of bytes expected for the current incomplete multi-byte character. - this.charLength = 0; + return { + step: step, + points: doubles + }; }; +BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { + if (this.precomputed && this.precomputed.naf) + return this.precomputed.naf; -// write decodes the given buffer and returns it as JS string that is -// guaranteed to not contain any partial multi-byte characters. Any partial -// character found at the end of the buffer is buffered up, and will be -// returned when calling write again with the remaining bytes. -// -// Note: Converting a Buffer containing an orphan surrogate to a String -// currently works, but converting a String to a Buffer (via `new Buffer`, or -// Buffer#write) will replace incomplete surrogates with the unicode -// replacement character. See https://codereview.chromium.org/121173009/ . -StringDecoder.prototype.write = function(buffer) { - var charStr = ''; - // if our last write ended with an incomplete multibyte character - while (this.charLength) { - // determine how many remaining bytes this buffer has to offer for this char - var available = (buffer.length >= this.charLength - this.charReceived) ? - this.charLength - this.charReceived : - buffer.length; + var res = [ this ]; + var max = (1 << wnd) - 1; + var dbl = max === 1 ? null : this.dbl(); + for (var i = 1; i < max; i++) + res[i] = res[i - 1].add(dbl); + return { + wnd: wnd, + points: res + }; +}; - // add the new bytes to the char buffer - buffer.copy(this.charBuffer, this.charReceived, 0, available); - this.charReceived += available; +BasePoint.prototype._getBeta = function _getBeta() { + return null; +}; - if (this.charReceived < this.charLength) { - // still not enough chars in this buffer? wait for more ... - return ''; - } +BasePoint.prototype.dblp = function dblp(k) { + var r = this; + for (var i = 0; i < k; i++) + r = r.dbl(); + return r; +}; - // remove bytes belonging to the current character from the buffer - buffer = buffer.slice(available, buffer.length); +},{"../../elliptic":197,"bn.js":98}],199:[function(require,module,exports){ +'use strict'; - // get the character that was split - charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); +var curve = require('../curve'); +var elliptic = require('../../elliptic'); +var bn = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; - // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character - var charCode = charStr.charCodeAt(charStr.length - 1); - if (charCode >= 0xD800 && charCode <= 0xDBFF) { - this.charLength += this.surrogateSize; - charStr = ''; - continue; - } - this.charReceived = this.charLength = 0; +var assert = elliptic.utils.assert; - // if there are no more bytes in this buffer, just emit our char - if (buffer.length === 0) { - return charStr; - } - break; - } +function EdwardsCurve(conf) { + // NOTE: Important as we are creating point in Base.call() + this.twisted = (conf.a | 0) !== 1; + this.mOneA = this.twisted && (conf.a | 0) === -1; + this.extended = this.mOneA; - // determine and set charLength / charReceived - this.detectIncompleteChar(buffer); + Base.call(this, 'edwards', conf); - var end = buffer.length; - if (this.charLength) { - // buffer the incomplete character bytes we got - buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end); - end -= this.charReceived; - } + this.a = new bn(conf.a, 16).mod(this.red.m).toRed(this.red); + this.c = new bn(conf.c, 16).toRed(this.red); + this.c2 = this.c.redSqr(); + this.d = new bn(conf.d, 16).toRed(this.red); + this.dd = this.d.redAdd(this.d); - charStr += buffer.toString(this.encoding, 0, end); + assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); + this.oneC = (conf.c | 0) === 1; +} +inherits(EdwardsCurve, Base); +module.exports = EdwardsCurve; - var end = charStr.length - 1; - var charCode = charStr.charCodeAt(end); - // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character - if (charCode >= 0xD800 && charCode <= 0xDBFF) { - var size = this.surrogateSize; - this.charLength += size; - this.charReceived += size; - this.charBuffer.copy(this.charBuffer, size, 0, size); - buffer.copy(this.charBuffer, 0, 0, size); - return charStr.substring(0, end); - } +EdwardsCurve.prototype._mulA = function _mulA(num) { + if (this.mOneA) + return num.redNeg(); + else + return this.a.redMul(num); +}; - // or just emit the charStr - return charStr; +EdwardsCurve.prototype._mulC = function _mulC(num) { + if (this.oneC) + return num; + else + return this.c.redMul(num); }; -// detectIncompleteChar determines if there is an incomplete UTF-8 character at -// the end of the given buffer. If so, it sets this.charLength to the byte -// length that character, and sets this.charReceived to the number of bytes -// that are available for this character. -StringDecoder.prototype.detectIncompleteChar = function(buffer) { - // determine how many bytes we have to check at the end of this buffer - var i = (buffer.length >= 3) ? 3 : buffer.length; - - // Figure out if one of the last i bytes of our buffer announces an - // incomplete char. - for (; i > 0; i--) { - var c = buffer[buffer.length - i]; +// Just for compatibility with Short curve +EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { + return this.point(x, y, z, t); +}; - // See http://en.wikipedia.org/wiki/UTF-8#Description +EdwardsCurve.prototype.pointFromX = function pointFromX(odd, x) { + x = new bn(x, 16); + if (!x.red) + x = x.toRed(this.red); - // 110XXXXX - if (i == 1 && c >> 5 == 0x06) { - this.charLength = 2; - break; - } + var x2 = x.redSqr(); + var rhs = this.c2.redSub(this.a.redMul(x2)); + var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); - // 1110XXXX - if (i <= 2 && c >> 4 == 0x0E) { - this.charLength = 3; - break; - } + var y = rhs.redMul(lhs.redInvm()).redSqrt(); + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); - // 11110XXX - if (i <= 3 && c >> 3 == 0x1E) { - this.charLength = 4; - break; - } - } - this.charReceived = i; + return this.point(x, y, curve.one); }; -StringDecoder.prototype.end = function(buffer) { - var res = ''; - if (buffer && buffer.length) - res = this.write(buffer); +EdwardsCurve.prototype.validate = function validate(point) { + if (point.isInfinity()) + return true; - if (this.charReceived) { - var cr = this.charReceived; - var buf = this.charBuffer; - var enc = this.encoding; - res += buf.slice(0, cr).toString(enc); - } + // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) + point.normalize(); - return res; -}; + var x2 = point.x.redSqr(); + var y2 = point.y.redSqr(); + var lhs = x2.redMul(this.a).redAdd(y2); + var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); -function passThroughWrite(buffer) { - return buffer.toString(this.encoding); -} + return lhs.cmp(rhs) === 0; +}; -function utf16DetectIncompleteChar(buffer) { - this.charReceived = buffer.length % 2; - this.charLength = this.charReceived ? 2 : 0; -} +function Point(curve, x, y, z, t) { + Base.BasePoint.call(this, curve, 'projective'); + if (x === null && y === null && z === null) { + this.x = this.curve.zero; + this.y = this.curve.one; + this.z = this.curve.one; + this.t = this.curve.zero; + this.zOne = true; + } else { + this.x = new bn(x, 16); + this.y = new bn(y, 16); + this.z = z ? new bn(z, 16) : this.curve.one; + this.t = t && new bn(t, 16); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + if (this.t && !this.t.red) + this.t = this.t.toRed(this.curve.red); + this.zOne = this.z === this.curve.one; -function base64DetectIncompleteChar(buffer) { - this.charReceived = buffer.length % 3; - this.charLength = this.charReceived ? 3 : 0; + // Use extended coordinates + if (this.curve.extended && !this.t) { + this.t = this.x.redMul(this.y); + if (!this.zOne) + this.t = this.t.redMul(this.z.redInvm()); + } + } } +inherits(Point, Base.BasePoint); -},{"buffer":99}],317:[function(require,module,exports){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var punycode = require('punycode'); +EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { + return Point.fromJSON(this, obj); +}; -exports.parse = urlParse; -exports.resolve = urlResolve; -exports.resolveObject = urlResolveObject; -exports.format = urlFormat; +EdwardsCurve.prototype.point = function point(x, y, z, t) { + return new Point(this, x, y, z, t); +}; -exports.Url = Url; +Point.fromJSON = function fromJSON(curve, obj) { + return new Point(curve, obj[0], obj[1], obj[2]); +}; -function Url() { - this.protocol = null; - this.slashes = null; - this.auth = null; - this.host = null; - this.port = null; - this.hostname = null; - this.hash = null; - this.search = null; - this.query = null; - this.pathname = null; - this.path = null; - this.href = null; -} +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; -// Reference: RFC 3986, RFC 1808, RFC 2396 +Point.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.x.cmpn(0) === 0 && + this.y.cmp(this.z) === 0; +}; -// define these here so at least they only have to be -// compiled once on the first module load. -var protocolPattern = /^([a-z0-9.+-]+:)/i, - portPattern = /:[0-9]*$/, +Point.prototype._extDbl = function _extDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #doubling-dbl-2008-hwcd + // 4M + 4S - // RFC 2396: characters reserved for delimiting URLs. - // We actually just auto-escape these. - delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = 2 * Z1^2 + var c = this.z.redSqr(); + c = c.redIAdd(c); + // D = a * A + var d = this.curve._mulA(a); + // E = (X1 + Y1)^2 - A - B + var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); + // G = D + B + var g = d.redAdd(b); + // F = G - C + var f = g.redSub(c); + // H = D - B + var h = d.redSub(b); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; - // RFC 2396: characters not allowed for various reasons. - unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), +Point.prototype._projDbl = function _projDbl() { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #doubling-dbl-2008-bbjlp + // #doubling-dbl-2007-bl + // and others + // Generally 3M + 4S or 2M + 4S - // Allowed by RFCs, but cause of XSS attacks. Always escape these. - autoEscape = ['\''].concat(unwise), - // Characters that are never ever allowed in a hostname. - // Note that any invalid chars are also handled, but these - // are the ones that are *expected* to be seen, so we fast-path - // them. - nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), - hostEndingChars = ['/', '?', '#'], - hostnameMaxLen = 255, - hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/, - hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/, - // protocols that can allow "unsafe" and "unwise" chars. - unsafeProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that never have a hostname. - hostlessProtocol = { - 'javascript': true, - 'javascript:': true - }, - // protocols that always contain a // bit. - slashedProtocol = { - 'http': true, - 'https': true, - 'ftp': true, - 'gopher': true, - 'file': true, - 'http:': true, - 'https:': true, - 'ftp:': true, - 'gopher:': true, - 'file:': true - }, - querystring = require('querystring'); + // B = (X1 + Y1)^2 + var b = this.x.redAdd(this.y).redSqr(); + // C = X1^2 + var c = this.x.redSqr(); + // D = Y1^2 + var d = this.y.redSqr(); -function urlParse(url, parseQueryString, slashesDenoteHost) { - if (url && isObject(url) && url instanceof Url) return url; + var nx; + var ny; + var nz; + if (this.curve.twisted) { + // E = a * C + var e = this.curve._mulA(c); + // F = E + D + var f = e.redAdd(d); + if (this.zOne) { + // X3 = (B - C - D) * (F - 2) + nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F^2 - 2 * F + nz = f.redSqr().redSub(f).redSub(f); + } else { + // H = Z1^2 + var h = this.z.redSqr(); + // J = F - 2 * H + var j = f.redSub(h).redISub(h); + // X3 = (B-C-D)*J + nx = b.redSub(c).redISub(d).redMul(j); + // Y3 = F * (E - D) + ny = f.redMul(e.redSub(d)); + // Z3 = F * J + nz = f.redMul(j); + } + } else { + // E = C + D + var e = c.redAdd(d); + // H = (c * Z1)^2 + var h = this.curve._mulC(this.c.redMul(this.z)).redSqr(); + // J = E - 2 * H + var j = e.redSub(h).redSub(h); + // X3 = c * (B - E) * J + nx = this.curve._mulC(b.redISub(e)).redMul(j); + // Y3 = c * E * (C - D) + ny = this.curve._mulC(e).redMul(c.redISub(d)); + // Z3 = E * J + nz = e.redMul(j); + } + return this.curve.point(nx, ny, nz); +}; - var u = new Url; - u.parse(url, parseQueryString, slashesDenoteHost); - return u; -} +Point.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; -Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { - if (!isString(url)) { - throw new TypeError("Parameter 'url' must be a string, not " + typeof url); - } + // Double in extended coordinates + if (this.curve.extended) + return this._extDbl(); + else + return this._projDbl(); +}; - var rest = url; +Point.prototype._extAdd = function _extAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html + // #addition-add-2008-hwcd-3 + // 8M - // trim before proceeding. - // This is to support parse stuff like " http://foo.com \n" - rest = rest.trim(); + // A = (Y1 - X1) * (Y2 - X2) + var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); + // B = (Y1 + X1) * (Y2 + X2) + var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); + // C = T1 * k * T2 + var c = this.t.redMul(this.curve.dd).redMul(p.t); + // D = Z1 * 2 * Z2 + var d = this.z.redMul(p.z.redAdd(p.z)); + // E = B - A + var e = b.redSub(a); + // F = D - C + var f = d.redSub(c); + // G = D + C + var g = d.redAdd(c); + // H = B + A + var h = b.redAdd(a); + // X3 = E * F + var nx = e.redMul(f); + // Y3 = G * H + var ny = g.redMul(h); + // T3 = E * H + var nt = e.redMul(h); + // Z3 = F * G + var nz = f.redMul(g); + return this.curve.point(nx, ny, nz, nt); +}; - var proto = protocolPattern.exec(rest); - if (proto) { - proto = proto[0]; - var lowerProto = proto.toLowerCase(); - this.protocol = lowerProto; - rest = rest.substr(proto.length); - } +Point.prototype._projAdd = function _projAdd(p) { + // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html + // #addition-add-2008-bbjlp + // #addition-add-2007-bl + // 10M + 1S - // figure out if it's got a host - // user@server is *always* interpreted as a hostname, and url - // resolution will treat //foo/bar as host=foo,path=bar because that's - // how the browser resolves relative URLs. - if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { - var slashes = rest.substr(0, 2) === '//'; - if (slashes && !(proto && hostlessProtocol[proto])) { - rest = rest.substr(2); - this.slashes = true; - } + // A = Z1 * Z2 + var a = this.z.redMul(p.z); + // B = A^2 + var b = a.redSqr(); + // C = X1 * X2 + var c = this.x.redMul(p.x); + // D = Y1 * Y2 + var d = this.y.redMul(p.y); + // E = d * C * D + var e = this.curve.d.redMul(c).redMul(d); + // F = B - E + var f = b.redSub(e); + // G = B + E + var g = b.redAdd(e); + // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) + var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); + var nx = a.redMul(f).redMul(tmp); + var ny; + var nz; + if (this.curve.twisted) { + // Y3 = A * G * (D - a * C) + ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); + // Z3 = F * G + nz = f.redMul(g); + } else { + // Y3 = A * G * (D - C) + ny = a.redMul(g).redMul(d.redSub(c)); + // Z3 = c * F * G + nz = this.curve._mulC(f).redMul(g); } + return this.curve.point(nx, ny, nz); +}; - if (!hostlessProtocol[proto] && - (slashes || (proto && !slashedProtocol[proto]))) { - - // there's a hostname. - // the first instance of /, ?, ;, or # ends the host. - // - // If there is an @ in the hostname, then non-host chars *are* allowed - // to the left of the last @ sign, unless some host-ending character - // comes *before* the @-sign. - // URLs are obnoxious. - // - // ex: - // http://a@b@c/ => user:a@b host:c - // http://a@b?@c => user:a host:c path:/?@c +Point.prototype.add = function add(p) { + if (this.isInfinity()) + return p; + if (p.isInfinity()) + return this; - // v0.12 TODO(isaacs): This is not quite how Chrome does things. - // Review our test case against browsers more comprehensively. + if (this.curve.extended) + return this._extAdd(p); + else + return this._projAdd(p); +}; - // find the first instance of any hostEndingChars - var hostEnd = -1; - for (var i = 0; i < hostEndingChars.length; i++) { - var hec = rest.indexOf(hostEndingChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) - hostEnd = hec; - } +Point.prototype.mul = function mul(k) { + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else + return this.curve._wnafMul(this, k); +}; - // at this point, either we have an explicit point where the - // auth portion cannot go past, or the last @ char is the decider. - var auth, atSign; - if (hostEnd === -1) { - // atSign can be anywhere. - atSign = rest.lastIndexOf('@'); - } else { - // atSign must be in auth portion. - // http://a@b/c@d => host:b auth:a path:/c@d - atSign = rest.lastIndexOf('@', hostEnd); - } +Point.prototype.mulAdd = function mulAdd(k1, p, k2) { + return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2); +}; - // Now we have a portion which is definitely the auth. - // Pull that off. - if (atSign !== -1) { - auth = rest.slice(0, atSign); - rest = rest.slice(atSign + 1); - this.auth = decodeURIComponent(auth); - } +Point.prototype.normalize = function normalize() { + if (this.zOne) + return this; - // the host is the remaining to the left of the first non-host char - hostEnd = -1; - for (var i = 0; i < nonHostChars.length; i++) { - var hec = rest.indexOf(nonHostChars[i]); - if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) - hostEnd = hec; - } - // if we still have not hit it, then the entire thing is a host. - if (hostEnd === -1) - hostEnd = rest.length; + // Normalize coordinates + var zi = this.z.redInvm(); + this.x = this.x.redMul(zi); + this.y = this.y.redMul(zi); + if (this.t) + this.t = this.t.redMul(zi); + this.z = this.curve.one; + this.zOne = true; + return this; +}; - this.host = rest.slice(0, hostEnd); - rest = rest.slice(hostEnd); +Point.prototype.neg = function neg() { + return this.curve.point(this.x.redNeg(), + this.y, + this.z, + this.t && this.t.redNeg()); +}; - // pull out port. - this.parseHost(); +Point.prototype.getX = function getX() { + this.normalize(); + return this.x.fromRed(); +}; - // we've indicated that there is a hostname, - // so even if it's empty, it has to be present. - this.hostname = this.hostname || ''; +Point.prototype.getY = function getY() { + this.normalize(); + return this.y.fromRed(); +}; - // if hostname begins with [ and ends with ] - // assume that it's an IPv6 address. - var ipv6Hostname = this.hostname[0] === '[' && - this.hostname[this.hostname.length - 1] === ']'; +// Compatibility with BaseCurve +Point.prototype.toP = Point.prototype.normalize; +Point.prototype.mixedAdd = Point.prototype.add; - // validate a little. - if (!ipv6Hostname) { - var hostparts = this.hostname.split(/\./); - for (var i = 0, l = hostparts.length; i < l; i++) { - var part = hostparts[i]; - if (!part) continue; - if (!part.match(hostnamePartPattern)) { - var newpart = ''; - for (var j = 0, k = part.length; j < k; j++) { - if (part.charCodeAt(j) > 127) { - // we replace non-ASCII char with a temporary placeholder - // we need this to make sure size of hostname is not - // broken by replacing non-ASCII by nothing - newpart += 'x'; - } else { - newpart += part[j]; - } - } - // we test again with ASCII char only - if (!newpart.match(hostnamePartPattern)) { - var validParts = hostparts.slice(0, i); - var notHost = hostparts.slice(i + 1); - var bit = part.match(hostnamePartStart); - if (bit) { - validParts.push(bit[1]); - notHost.unshift(bit[2]); - } - if (notHost.length) { - rest = '/' + notHost.join('.') + rest; - } - this.hostname = validParts.join('.'); - break; - } - } - } - } +},{"../../elliptic":197,"../curve":200,"bn.js":98,"inherits":226}],200:[function(require,module,exports){ +arguments[4][61][0].apply(exports,arguments) +},{"./base":198,"./edwards":199,"./mont":201,"./short":202,"dup":61}],201:[function(require,module,exports){ +arguments[4][62][0].apply(exports,arguments) +},{"../curve":200,"bn.js":98,"dup":62,"inherits":226}],202:[function(require,module,exports){ +'use strict'; - if (this.hostname.length > hostnameMaxLen) { - this.hostname = ''; - } else { - // hostnames are always lower case. - this.hostname = this.hostname.toLowerCase(); - } +var curve = require('../curve'); +var elliptic = require('../../elliptic'); +var bn = require('bn.js'); +var inherits = require('inherits'); +var Base = curve.base; - if (!ipv6Hostname) { - // IDNA Support: Returns a puny coded representation of "domain". - // It only converts the part of the domain name that - // has non ASCII characters. I.e. it dosent matter if - // you call it with a domain that already is in ASCII. - var domainArray = this.hostname.split('.'); - var newOut = []; - for (var i = 0; i < domainArray.length; ++i) { - var s = domainArray[i]; - newOut.push(s.match(/[^A-Za-z0-9_-]/) ? - 'xn--' + punycode.encode(s) : s); - } - this.hostname = newOut.join('.'); - } +var assert = elliptic.utils.assert; - var p = this.port ? ':' + this.port : ''; - var h = this.hostname || ''; - this.host = h + p; - this.href += this.host; +function ShortCurve(conf) { + Base.call(this, 'short', conf); - // strip [ and ] from the hostname - // the host field still retains them, though - if (ipv6Hostname) { - this.hostname = this.hostname.substr(1, this.hostname.length - 2); - if (rest[0] !== '/') { - rest = '/' + rest; - } - } - } + this.a = new bn(conf.a, 16).toRed(this.red); + this.b = new bn(conf.b, 16).toRed(this.red); + this.tinv = this.two.redInvm(); - // now rest is set to the post-host stuff. - // chop off any delim chars. - if (!unsafeProtocol[lowerProto]) { + this.zeroA = this.a.fromRed().cmpn(0) === 0; + this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; - // First, make 100% sure that any "autoEscape" chars get - // escaped, even if encodeURIComponent doesn't think they - // need to be. - for (var i = 0, l = autoEscape.length; i < l; i++) { - var ae = autoEscape[i]; - var esc = encodeURIComponent(ae); - if (esc === ae) { - esc = escape(ae); - } - rest = rest.split(ae).join(esc); - } - } + // If the curve is endomorphic, precalculate beta and lambda + this.endo = this._getEndomorphism(conf); + this._endoWnafT1 = new Array(4); + this._endoWnafT2 = new Array(4); +} +inherits(ShortCurve, Base); +module.exports = ShortCurve; +ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { + // No efficient endomorphism + if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) + return; - // chop off from the tail first. - var hash = rest.indexOf('#'); - if (hash !== -1) { - // got a fragment string. - this.hash = rest.substr(hash); - rest = rest.slice(0, hash); + // Compute beta and lambda, that lambda * P = (beta * Px; Py) + var beta; + var lambda; + if (conf.beta) { + beta = new bn(conf.beta, 16).toRed(this.red); + } else { + var betas = this._getEndoRoots(this.p); + // Choose the smallest beta + beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; + beta = beta.toRed(this.red); } - var qm = rest.indexOf('?'); - if (qm !== -1) { - this.search = rest.substr(qm); - this.query = rest.substr(qm + 1); - if (parseQueryString) { - this.query = querystring.parse(this.query); + if (conf.lambda) { + lambda = new bn(conf.lambda, 16); + } else { + // Choose the lambda that is matching selected beta + var lambdas = this._getEndoRoots(this.n); + if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { + lambda = lambdas[0]; + } else { + lambda = lambdas[1]; + assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); } - rest = rest.slice(0, qm); - } else if (parseQueryString) { - // no query string, but parseQueryString still requested - this.search = ''; - this.query = {}; - } - if (rest) this.pathname = rest; - if (slashedProtocol[lowerProto] && - this.hostname && !this.pathname) { - this.pathname = '/'; } - //to support http.request - if (this.pathname || this.search) { - var p = this.pathname || ''; - var s = this.search || ''; - this.path = p + s; + // Get basis vectors, used for balanced length-two representation + var basis; + if (conf.basis) { + basis = conf.basis.map(function(vec) { + return { + a: new bn(vec.a, 16), + b: new bn(vec.b, 16) + }; + }); + } else { + basis = this._getEndoBasis(lambda); } - // finally, reconstruct the href based on what has been validated. - this.href = this.format(); - return this; + return { + beta: beta, + lambda: lambda, + basis: basis + }; }; -// format a parsed object into a url string -function urlFormat(obj) { - // ensure it's an object, and not a string url. - // If it's an obj, this is a no-op. - // this way, you can call url_format() on strings - // to clean up potentially wonky urls. - if (isString(obj)) obj = urlParse(obj); - if (!(obj instanceof Url)) return Url.prototype.format.call(obj); - return obj.format(); -} - -Url.prototype.format = function() { - var auth = this.auth || ''; - if (auth) { - auth = encodeURIComponent(auth); - auth = auth.replace(/%3A/i, ':'); - auth += '@'; - } +ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { + // Find roots of for x^2 + x + 1 in F + // Root = (-1 +- Sqrt(-3)) / 2 + // + var red = num === this.p ? this.red : bn.mont(num); + var tinv = new bn(2).toRed(red).redInvm(); + var ntinv = tinv.redNeg(); - var protocol = this.protocol || '', - pathname = this.pathname || '', - hash = this.hash || '', - host = false, - query = ''; + var s = new bn(3).toRed(red).redNeg().redSqrt().redMul(tinv); - if (this.host) { - host = auth + this.host; - } else if (this.hostname) { - host = auth + (this.hostname.indexOf(':') === -1 ? - this.hostname : - '[' + this.hostname + ']'); - if (this.port) { - host += ':' + this.port; - } - } + var l1 = ntinv.redAdd(s).fromRed(); + var l2 = ntinv.redSub(s).fromRed(); + return [ l1, l2 ]; +}; - if (this.query && - isObject(this.query) && - Object.keys(this.query).length) { - query = querystring.stringify(this.query); - } +ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { + // aprxSqrt >= sqrt(this.n) + var aprxSqrt = this.n.shrn(Math.floor(this.n.bitLength() / 2)); - var search = this.search || (query && ('?' + query)) || ''; + // 3.74 + // Run EGCD, until r(L + 1) < aprxSqrt + var u = lambda; + var v = this.n.clone(); + var x1 = new bn(1); + var y1 = new bn(0); + var x2 = new bn(0); + var y2 = new bn(1); - if (protocol && protocol.substr(-1) !== ':') protocol += ':'; + // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) + var a0; + var b0; + // First vector + var a1; + var b1; + // Second vector + var a2; + var b2; - // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. - // unless they had them to begin with. - if (this.slashes || - (!protocol || slashedProtocol[protocol]) && host !== false) { - host = '//' + (host || ''); - if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; - } else if (!host) { - host = ''; - } + var prevR; + var i = 0; + var r; + var x; + while (u.cmpn(0) !== 0) { + var q = v.div(u); + r = v.sub(q.mul(u)); + x = x2.sub(q.mul(x1)); + var y = y2.sub(q.mul(y1)); - if (hash && hash.charAt(0) !== '#') hash = '#' + hash; - if (search && search.charAt(0) !== '?') search = '?' + search; + if (!a1 && r.cmp(aprxSqrt) < 0) { + a0 = prevR.neg(); + b0 = x1; + a1 = r.neg(); + b1 = x; + } else if (a1 && ++i === 2) { + break; + } + prevR = r; - pathname = pathname.replace(/[?#]/g, function(match) { - return encodeURIComponent(match); - }); - search = search.replace('#', '%23'); + v = u; + u = r; + x2 = x1; + x1 = x; + y2 = y1; + y1 = y; + } + a2 = r.neg(); + b2 = x; - return protocol + host + pathname + search + hash; -}; + var len1 = a1.sqr().add(b1.sqr()); + var len2 = a2.sqr().add(b2.sqr()); + if (len2.cmp(len1) >= 0) { + a2 = a0; + b2 = b0; + } -function urlResolve(source, relative) { - return urlParse(source, false, true).resolve(relative); -} + // Normalize signs + if (a1.sign) { + a1 = a1.neg(); + b1 = b1.neg(); + } + if (a2.sign) { + a2 = a2.neg(); + b2 = b2.neg(); + } -Url.prototype.resolve = function(relative) { - return this.resolveObject(urlParse(relative, false, true)).format(); + return [ + { a: a1, b: b1 }, + { a: a2, b: b2 } + ]; }; -function urlResolveObject(source, relative) { - if (!source) return relative; - return urlParse(source, false, true).resolveObject(relative); -} - -Url.prototype.resolveObject = function(relative) { - if (isString(relative)) { - var rel = new Url(); - rel.parse(relative, false, true); - relative = rel; - } - - var result = new Url(); - Object.keys(this).forEach(function(k) { - result[k] = this[k]; - }, this); +ShortCurve.prototype._endoSplit = function _endoSplit(k) { + var basis = this.endo.basis; + var v1 = basis[0]; + var v2 = basis[1]; - // hash is always overridden, no matter what. - // even href="" will remove it. - result.hash = relative.hash; + var c1 = v2.b.mul(k).divRound(this.n); + var c2 = v1.b.neg().mul(k).divRound(this.n); - // if the relative url is empty, then there's nothing left to do here. - if (relative.href === '') { - result.href = result.format(); - return result; - } + var p1 = c1.mul(v1.a); + var p2 = c2.mul(v2.a); + var q1 = c1.mul(v1.b); + var q2 = c2.mul(v2.b); - // hrefs like //foo/bar always cut to the protocol. - if (relative.slashes && !relative.protocol) { - // take everything except the protocol from relative - Object.keys(relative).forEach(function(k) { - if (k !== 'protocol') - result[k] = relative[k]; - }); + // Calculate answer + var k1 = k.sub(p1).sub(p2); + var k2 = q1.add(q2).neg(); + return { k1: k1, k2: k2 }; +}; - //urlParse appends trailing / to urls like http://www.example.com - if (slashedProtocol[result.protocol] && - result.hostname && !result.pathname) { - result.path = result.pathname = '/'; - } +ShortCurve.prototype.pointFromX = function pointFromX(odd, x) { + x = new bn(x, 16); + if (!x.red) + x = x.toRed(this.red); - result.href = result.format(); - return result; - } + var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); + var y = y2.redSqrt(); - if (relative.protocol && relative.protocol !== result.protocol) { - // if it's a known url protocol, then changing - // the protocol does weird things - // first, if it's not file:, then we MUST have a host, - // and if there was a path - // to begin with, then we MUST have a path. - // if it is file:, then the host is dropped, - // because that's known to be hostless. - // anything else is assumed to be absolute. - if (!slashedProtocol[relative.protocol]) { - Object.keys(relative).forEach(function(k) { - result[k] = relative[k]; - }); - result.href = result.format(); - return result; - } + // XXX Is there any way to tell if the number is odd without converting it + // to non-red form? + var isOdd = y.fromRed().isOdd(); + if (odd && !isOdd || !odd && isOdd) + y = y.redNeg(); - result.protocol = relative.protocol; - if (!relative.host && !hostlessProtocol[relative.protocol]) { - var relPath = (relative.pathname || '').split('/'); - while (relPath.length && !(relative.host = relPath.shift())); - if (!relative.host) relative.host = ''; - if (!relative.hostname) relative.hostname = ''; - if (relPath[0] !== '') relPath.unshift(''); - if (relPath.length < 2) relPath.unshift(''); - result.pathname = relPath.join('/'); - } else { - result.pathname = relative.pathname; - } - result.search = relative.search; - result.query = relative.query; - result.host = relative.host || ''; - result.auth = relative.auth; - result.hostname = relative.hostname || relative.host; - result.port = relative.port; - // to support http.request - if (result.pathname || result.search) { - var p = result.pathname || ''; - var s = result.search || ''; - result.path = p + s; - } - result.slashes = result.slashes || relative.slashes; - result.href = result.format(); - return result; - } + return this.point(x, y); +}; - var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), - isRelAbs = ( - relative.host || - relative.pathname && relative.pathname.charAt(0) === '/' - ), - mustEndAbs = (isRelAbs || isSourceAbs || - (result.host && relative.pathname)), - removeAllDots = mustEndAbs, - srcPath = result.pathname && result.pathname.split('/') || [], - relPath = relative.pathname && relative.pathname.split('/') || [], - psychotic = result.protocol && !slashedProtocol[result.protocol]; +ShortCurve.prototype.validate = function validate(point) { + if (point.inf) + return true; - // if the url is a non-slashed url, then relative - // links like ../.. should be able - // to crawl up to the hostname, as well. This is strange. - // result.protocol has already been set by now. - // Later on, put the first path part into the host field. - if (psychotic) { - result.hostname = ''; - result.port = null; - if (result.host) { - if (srcPath[0] === '') srcPath[0] = result.host; - else srcPath.unshift(result.host); - } - result.host = ''; - if (relative.protocol) { - relative.hostname = null; - relative.port = null; - if (relative.host) { - if (relPath[0] === '') relPath[0] = relative.host; - else relPath.unshift(relative.host); - } - relative.host = null; - } - mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); - } + var x = point.x; + var y = point.y; - if (isRelAbs) { - // it's absolute. - result.host = (relative.host || relative.host === '') ? - relative.host : result.host; - result.hostname = (relative.hostname || relative.hostname === '') ? - relative.hostname : result.hostname; - result.search = relative.search; - result.query = relative.query; - srcPath = relPath; - // fall through to the dot-handling below. - } else if (relPath.length) { - // it's relative - // throw away the existing file, and take the new path instead. - if (!srcPath) srcPath = []; - srcPath.pop(); - srcPath = srcPath.concat(relPath); - result.search = relative.search; - result.query = relative.query; - } else if (!isNullOrUndefined(relative.search)) { - // just pull out the search. - // like href='?foo'. - // Put this after the other two cases because it simplifies the booleans - if (psychotic) { - result.hostname = result.host = srcPath.shift(); - //occationaly the auth can get stuck only in host - //this especialy happens in cases like - //url.resolveObject('mailto:local1@domain1', 'local2@domain2') - var authInHost = result.host && result.host.indexOf('@') > 0 ? - result.host.split('@') : false; - if (authInHost) { - result.auth = authInHost.shift(); - result.host = result.hostname = authInHost.shift(); - } + var ax = this.a.redMul(x); + var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); + return y.redSqr().redISub(rhs).cmpn(0) === 0; +}; + +ShortCurve.prototype._endoWnafMulAdd = + function _endoWnafMulAdd(points, coeffs) { + var npoints = this._endoWnafT1; + var ncoeffs = this._endoWnafT2; + for (var i = 0; i < points.length; i++) { + var split = this._endoSplit(coeffs[i]); + var p = points[i]; + var beta = p._getBeta(); + + if (split.k1.sign) { + split.k1.sign = !split.k1.sign; + p = p.neg(true); } - result.search = relative.search; - result.query = relative.query; - //to support http.request - if (!isNull(result.pathname) || !isNull(result.search)) { - result.path = (result.pathname ? result.pathname : '') + - (result.search ? result.search : ''); + if (split.k2.sign) { + split.k2.sign = !split.k2.sign; + beta = beta.neg(true); } - result.href = result.format(); - return result; - } - if (!srcPath.length) { - // no path at all. easy. - // we've already handled the other stuff above. - result.pathname = null; - //to support http.request - if (result.search) { - result.path = '/' + result.search; - } else { - result.path = null; - } - result.href = result.format(); - return result; + npoints[i * 2] = p; + npoints[i * 2 + 1] = beta; + ncoeffs[i * 2] = split.k1; + ncoeffs[i * 2 + 1] = split.k2; } + var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2); - // if a url ENDs in . or .., then it must get a trailing slash. - // however, if it ends in anything else non-slashy, - // then it must NOT get a trailing slash. - var last = srcPath.slice(-1)[0]; - var hasTrailingSlash = ( - (result.host || relative.host) && (last === '.' || last === '..') || - last === ''); - - // strip single dots, resolve double dots to parent dir - // if the path tries to go above the root, `up` ends up > 0 - var up = 0; - for (var i = srcPath.length; i >= 0; i--) { - last = srcPath[i]; - if (last == '.') { - srcPath.splice(i, 1); - } else if (last === '..') { - srcPath.splice(i, 1); - up++; - } else if (up) { - srcPath.splice(i, 1); - up--; - } + // Clean-up references to points and coefficients + for (var j = 0; j < i * 2; j++) { + npoints[j] = null; + ncoeffs[j] = null; } + return res; +}; - // if the path is allowed to go above the root, restore leading ..s - if (!mustEndAbs && !removeAllDots) { - for (; up--; up) { - srcPath.unshift('..'); +function Point(curve, x, y, isRed) { + Base.BasePoint.call(this, curve, 'affine'); + if (x === null && y === null) { + this.x = null; + this.y = null; + this.inf = true; + } else { + this.x = new bn(x, 16); + this.y = new bn(y, 16); + // Force redgomery representation when loading from JSON + if (isRed) { + this.x.forceRed(this.curve.red); + this.y.forceRed(this.curve.red); } + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + this.inf = false; } +} +inherits(Point, Base.BasePoint); - if (mustEndAbs && srcPath[0] !== '' && - (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { - srcPath.unshift(''); - } +ShortCurve.prototype.point = function point(x, y, isRed) { + return new Point(this, x, y, isRed); +}; - if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { - srcPath.push(''); +ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { + return Point.fromJSON(this, obj, red); +}; + +Point.prototype._getBeta = function _getBeta() { + if (!this.curve.endo) + return; + + var pre = this.precomputed; + if (pre && pre.beta) + return pre.beta; + + var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); + if (pre) { + var curve = this.curve; + var endoMul = function(p) { + return curve.point(p.x.redMul(curve.endo.beta), p.y); + }; + pre.beta = beta; + beta.precomputed = { + beta: null, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(endoMul) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(endoMul) + } + }; } + return beta; +}; - var isAbsolute = srcPath[0] === '' || - (srcPath[0] && srcPath[0].charAt(0) === '/'); +Point.prototype.toJSON = function toJSON() { + if (!this.precomputed) + return [ this.x, this.y ]; - // put the host back - if (psychotic) { - result.hostname = result.host = isAbsolute ? '' : - srcPath.length ? srcPath.shift() : ''; - //occationaly the auth can get stuck only in host - //this especialy happens in cases like - //url.resolveObject('mailto:local1@domain1', 'local2@domain2') - var authInHost = result.host && result.host.indexOf('@') > 0 ? - result.host.split('@') : false; - if (authInHost) { - result.auth = authInHost.shift(); - result.host = result.hostname = authInHost.shift(); + return [ this.x, this.y, this.precomputed && { + doubles: this.precomputed.doubles && { + step: this.precomputed.doubles.step, + points: this.precomputed.doubles.points.slice(1) + }, + naf: this.precomputed.naf && { + wnd: this.precomputed.naf.wnd, + points: this.precomputed.naf.points.slice(1) } - } + } ]; +}; - mustEndAbs = mustEndAbs || (result.host && srcPath.length); +Point.fromJSON = function fromJSON(curve, obj, red) { + if (typeof obj === 'string') + obj = JSON.parse(obj); + var res = curve.point(obj[0], obj[1], red); + if (!obj[2]) + return res; - if (mustEndAbs && !isAbsolute) { - srcPath.unshift(''); + function obj2point(obj) { + return curve.point(obj[0], obj[1], red); } - if (!srcPath.length) { - result.pathname = null; - result.path = null; - } else { - result.pathname = srcPath.join('/'); - } + var pre = obj[2]; + res.precomputed = { + beta: null, + doubles: pre.doubles && { + step: pre.doubles.step, + points: [ res ].concat(pre.doubles.points.map(obj2point)) + }, + naf: pre.naf && { + wnd: pre.naf.wnd, + points: [ res ].concat(pre.naf.points.map(obj2point)) + } + }; + return res; +}; - //to support request.http - if (!isNull(result.pathname) || !isNull(result.search)) { - result.path = (result.pathname ? result.pathname : '') + - (result.search ? result.search : ''); - } - result.auth = relative.auth || result.auth; - result.slashes = result.slashes || relative.slashes; - result.href = result.format(); - return result; +Point.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; }; -Url.prototype.parseHost = function() { - var host = this.host; - var port = portPattern.exec(host); - if (port) { - port = port[0]; - if (port !== ':') { - this.port = port.substr(1); - } - host = host.substr(0, host.length - port.length); - } - if (host) this.hostname = host; +Point.prototype.isInfinity = function isInfinity() { + return this.inf; }; -function isString(arg) { - return typeof arg === "string"; -} +Point.prototype.add = function add(p) { + // O + P = P + if (this.inf) + return p; -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} + // P + O = P + if (p.inf) + return this; -function isNull(arg) { - return arg === null; -} -function isNullOrUndefined(arg) { - return arg == null; -} + // P + P = 2P + if (this.eq(p)) + return this.dbl(); -},{"punycode":300,"querystring":303}],318:[function(require,module,exports){ -module.exports = function isBuffer(arg) { - return arg && typeof arg === 'object' - && typeof arg.copy === 'function' - && typeof arg.fill === 'function' - && typeof arg.readUInt8 === 'function'; -} -},{}],319:[function(require,module,exports){ -(function (process,global){ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. + // P + (-P) = O + if (this.neg().eq(p)) + return this.curve.point(null, null); -var formatRegExp = /%[sdj%]/g; -exports.format = function(f) { - if (!isString(f)) { - var objects = []; - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - return objects.join(' '); - } + // P + Q = O + if (this.x.cmp(p.x) === 0) + return this.curve.point(null, null); - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function(x) { - if (x === '%%') return '%'; - if (i >= len) return x; - switch (x) { - case '%s': return String(args[i++]); - case '%d': return Number(args[i++]); - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - default: - return x; - } - }); - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - return str; + var c = this.y.redSub(p.y); + if (c.cmpn(0) !== 0) + c = c.redMul(this.x.redSub(p.x).redInvm()); + var nx = c.redSqr().redISub(this.x).redISub(p.x); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); }; +Point.prototype.dbl = function dbl() { + if (this.inf) + return this; + + // 2P = O + var ys1 = this.y.redAdd(this.y); + if (ys1.cmpn(0) === 0) + return this.curve.point(null, null); -// Mark that a method should not be used. -// Returns a modified function which warns once by default. -// If --no-deprecation is set, then it is a no-op. -exports.deprecate = function(fn, msg) { - // Allow for deprecating things in the process of starting up. - if (isUndefined(global.process)) { - return function() { - return exports.deprecate(fn, msg).apply(this, arguments); - }; - } + var a = this.curve.a; - if (process.noDeprecation === true) { - return fn; - } + var x2 = this.x.redSqr(); + var dyinv = ys1.redInvm(); + var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); - var warned = false; - function deprecated() { - if (!warned) { - if (process.throwDeprecation) { - throw new Error(msg); - } else if (process.traceDeprecation) { - console.trace(msg); - } else { - console.error(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } + var nx = c.redSqr().redISub(this.x.redAdd(this.x)); + var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); + return this.curve.point(nx, ny); +}; - return deprecated; +Point.prototype.getX = function getX() { + return this.x.fromRed(); }; +Point.prototype.getY = function getY() { + return this.y.fromRed(); +}; -var debugs = {}; -var debugEnviron; -exports.debuglog = function(set) { - if (isUndefined(debugEnviron)) - debugEnviron = process.env.NODE_DEBUG || ''; - set = set.toUpperCase(); - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = process.pid; - debugs[set] = function() { - var msg = exports.format.apply(exports, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function() {}; - } +Point.prototype.mul = function mul(k) { + k = new bn(k, 16); + + if (this._hasDoubles(k)) + return this.curve._fixedNafMul(this, k); + else if (this.curve.endo) + return this.curve._endoWnafMulAdd([ this ], [ k ]); + else + return this.curve._wnafMul(this, k); +}; + +Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { + var points = [ this, p2 ]; + var coeffs = [ k1, k2 ]; + if (this.curve.endo) + return this.curve._endoWnafMulAdd(points, coeffs); + else + return this.curve._wnafMulAdd(1, points, coeffs, 2); +}; + +Point.prototype.eq = function eq(p) { + return this === p || + this.inf === p.inf && + (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); +}; + +Point.prototype.neg = function neg(_precompute) { + if (this.inf) + return this; + + var res = this.curve.point(this.x, this.y.redNeg()); + if (_precompute && this.precomputed) { + var pre = this.precomputed; + var negate = function(p) { + return p.neg(); + }; + res.precomputed = { + naf: pre.naf && { + wnd: pre.naf.wnd, + points: pre.naf.points.map(negate) + }, + doubles: pre.doubles && { + step: pre.doubles.step, + points: pre.doubles.points.map(negate) + } + }; } - return debugs[set]; + return res; }; +Point.prototype.toJ = function toJ() { + if (this.inf) + return this.curve.jpoint(null, null, null); -/** - * Echos the value of a value. Trys to print the value out - * in the best way possible given the different types. - * - * @param {Object} obj The object to print out. - * @param {Object} opts Optional options object that alters the output. - */ -/* legacy: obj, showHidden, depth, colors*/ -function inspect(obj, opts) { - // default options - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - // legacy... - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - if (isBoolean(opts)) { - // legacy... - ctx.showHidden = opts; - } else if (opts) { - // got an "options" object - exports._extend(ctx, opts); + var res = this.curve.jpoint(this.x, this.y, this.curve.one); + return res; +}; + +function JPoint(curve, x, y, z) { + Base.BasePoint.call(this, curve, 'jacobian'); + if (x === null && y === null && z === null) { + this.x = this.curve.one; + this.y = this.curve.one; + this.z = new bn(0); + } else { + this.x = new bn(x, 16); + this.y = new bn(y, 16); + this.z = new bn(z, 16); } - // set default options - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); + if (!this.x.red) + this.x = this.x.toRed(this.curve.red); + if (!this.y.red) + this.y = this.y.toRed(this.curve.red); + if (!this.z.red) + this.z = this.z.toRed(this.curve.red); + + this.zOne = this.z === this.curve.one; } -exports.inspect = inspect; +inherits(JPoint, Base.BasePoint); +ShortCurve.prototype.jpoint = function jpoint(x, y, z) { + return new JPoint(this, x, y, z); +}; -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics -inspect.colors = { - 'bold' : [1, 22], - 'italic' : [3, 23], - 'underline' : [4, 24], - 'inverse' : [7, 27], - 'white' : [37, 39], - 'grey' : [90, 39], - 'black' : [30, 39], - 'blue' : [34, 39], - 'cyan' : [36, 39], - 'green' : [32, 39], - 'magenta' : [35, 39], - 'red' : [31, 39], - 'yellow' : [33, 39] +JPoint.prototype.toP = function toP() { + if (this.isInfinity()) + return this.curve.point(null, null); + + var zinv = this.z.redInvm(); + var zinv2 = zinv.redSqr(); + var ax = this.x.redMul(zinv2); + var ay = this.y.redMul(zinv2).redMul(zinv); + + return this.curve.point(ax, ay); }; -// Don't use 'blue' not visible on cmd.exe -inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - // "name": intentionally not styling - 'regexp': 'red' +JPoint.prototype.neg = function neg() { + return this.curve.jpoint(this.x, this.y.redNeg(), this.z); }; +JPoint.prototype.add = function add(p) { + // O + P = P + if (this.isInfinity()) + return p; -function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; + // P + O = P + if (p.isInfinity()) + return this; - if (style) { - return '\u001b[' + inspect.colors[style][0] + 'm' + str + - '\u001b[' + inspect.colors[style][1] + 'm'; - } else { - return str; - } -} + // 12M + 4S + 7A + var pz2 = p.z.redSqr(); + var z2 = this.z.redSqr(); + var u1 = this.x.redMul(pz2); + var u2 = p.x.redMul(z2); + var s1 = this.y.redMul(pz2.redMul(p.z)); + var s2 = p.y.redMul(z2.redMul(this.z)); + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); + } -function stylizeNoColor(str, styleType) { - return str; -} + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(p.z).redMul(h); -function arrayToHash(array) { - var hash = {}; + return this.curve.jpoint(nx, ny, nz); +}; - array.forEach(function(val, idx) { - hash[val] = true; - }); +JPoint.prototype.mixedAdd = function mixedAdd(p) { + // O + P = P + if (this.isInfinity()) + return p.toJ(); - return hash; -} + // P + O = P + if (p.isInfinity()) + return this; + // 8M + 3S + 7A + var z2 = this.z.redSqr(); + var u1 = this.x; + var u2 = p.x.redMul(z2); + var s1 = this.y; + var s2 = p.y.redMul(z2).redMul(this.z); -function formatValue(ctx, value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (ctx.customInspect && - value && - isFunction(value.inspect) && - // Filter out the util module, it's inspect function is special - value.inspect !== exports.inspect && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - return ret; + var h = u1.redSub(u2); + var r = s1.redSub(s2); + if (h.cmpn(0) === 0) { + if (r.cmpn(0) !== 0) + return this.curve.jpoint(null, null, null); + else + return this.dbl(); } - // Primitive types cannot have properties - var primitive = formatPrimitive(ctx, value); - if (primitive) { - return primitive; - } + var h2 = h.redSqr(); + var h3 = h2.redMul(h); + var v = u1.redMul(h2); - // Look up the keys of the object. - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); + var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); + var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); + var nz = this.z.redMul(h); - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } + return this.curve.jpoint(nx, ny, nz); +}; - // IE doesn't make error fields non-enumerable - // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx - if (isError(value) - && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } +JPoint.prototype.dblp = function dblp(pow) { + if (pow === 0) + return this; + if (this.isInfinity()) + return this; + if (!pow) + return this.dbl(); - // Some type of object without properties can be shortcutted. - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - if (isError(value)) { - return formatError(value); - } + if (this.curve.zeroA || this.curve.threeA) { + var r = this; + for (var i = 0; i < pow; i++) + r = r.dbl(); + return r; } - var base = '', array = false, braces = ['{', '}']; + // 1M + 2S + 1A + N * (4S + 5M + 8A) + // N = 1 => 6M + 6S + 9A + var a = this.curve.a; + var tinv = this.curve.tinv; - // Make Array say that they are Array - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); - // Make functions say that they are functions - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } + // Reuse results + var jyd = jy.redAdd(jy); + for (var i = 0; i < pow; i++) { + var jx2 = jx.redSqr(); + var jyd2 = jyd.redSqr(); + var jyd4 = jyd2.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); - // Make RegExps say that they are RegExps - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } + var t1 = jx.redMul(jyd2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + var dny = c.redMul(t2); + dny = dny.redIAdd(dny).redISub(jyd4); + var nz = jyd.redMul(jz); + if (i + 1 < pow) + jz4 = jz4.redMul(jyd4); - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); + jx = nx; + jz = nz; + jyd = dny; } - // Make error with message first say the error - if (isError(value)) { - base = ' ' + formatError(value); - } + return this.curve.jpoint(jx, jyd.redMul(tinv), jz); +}; - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } +JPoint.prototype.dbl = function dbl() { + if (this.isInfinity()) + return this; - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } + if (this.curve.zeroA) + return this._zeroDbl(); + else if (this.curve.threeA) + return this._threeDbl(); + else + return this._dbl(); +}; - ctx.seen.push(value); +JPoint.prototype._zeroDbl = function _zeroDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 14A - var output; - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // T = M ^ 2 - 2*S + var t = m.redSqr().redISub(s).redISub(s); + + // 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2*Y1 + nz = this.y.redAdd(this.y); } else { - output = keys.map(function(key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html + // #doubling-dbl-2009-l + // 2M + 5S + 13A + + // A = X1^2 + var a = this.x.redSqr(); + // B = Y1^2 + var b = this.y.redSqr(); + // C = B^2 + var c = b.redSqr(); + // D = 2 * ((X1 + B)^2 - A - C) + var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); + d = d.redIAdd(d); + // E = 3 * A + var e = a.redAdd(a).redIAdd(a); + // F = E^2 + var f = e.redSqr(); + + // 8 * C + var c8 = c.redIAdd(c); + c8 = c8.redIAdd(c8); + c8 = c8.redIAdd(c8); + + // X3 = F - 2 * D + nx = f.redISub(d).redISub(d); + // Y3 = E * (D - X3) - 8 * C + ny = e.redMul(d.redISub(nx)).redISub(c8); + // Z3 = 2 * Y1 * Z1 + nz = this.y.redMul(this.z); + nz = nz.redIAdd(nz); } - ctx.seen.pop(); + return this.curve.jpoint(nx, ny, nz); +}; - return reduceToSingleString(output, base, braces); -} +JPoint.prototype._threeDbl = function _threeDbl() { + var nx; + var ny; + var nz; + // Z = 1 + if (this.zOne) { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html + // #doubling-mdbl-2007-bl + // 1M + 5S + 15A + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // S = 2 * ((X1 + YY)^2 - XX - YYYY) + var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + s = s.redIAdd(s); + // M = 3 * XX + a + var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); + // T = M^2 - 2 * S + var t = m.redSqr().redISub(s).redISub(s); + // X3 = T + nx = t; + // Y3 = M * (S - T) - 8 * YYYY + var yyyy8 = yyyy.redIAdd(yyyy); + yyyy8 = yyyy8.redIAdd(yyyy8); + yyyy8 = yyyy8.redIAdd(yyyy8); + ny = m.redMul(s.redISub(t)).redISub(yyyy8); + // Z3 = 2 * Y1 + nz = this.y.redAdd(this.y); + } else { + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b + // 3M + 5S -function formatPrimitive(ctx, value) { - if (isUndefined(value)) - return ctx.stylize('undefined', 'undefined'); - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); + // delta = Z1^2 + var delta = this.z.redSqr(); + // gamma = Y1^2 + var gamma = this.y.redSqr(); + // beta = X1 * gamma + var beta = this.x.redMul(gamma); + // alpha = 3 * (X1 - delta) * (X1 + delta) + var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); + alpha = alpha.redAdd(alpha).redIAdd(alpha); + // X3 = alpha^2 - 8 * beta + var beta4 = beta.redIAdd(beta); + beta4 = beta4.redIAdd(beta4); + var beta8 = beta4.redAdd(beta4); + nx = alpha.redSqr().redISub(beta8); + // Z3 = (Y1 + Z1)^2 - gamma - delta + nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); + // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 + var ggamma8 = gamma.redSqr(); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ggamma8 = ggamma8.redIAdd(ggamma8); + ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); } - if (isNumber(value)) - return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) - return ctx.stylize('' + value, 'boolean'); - // For some reason typeof null is "object", so special case here. - if (isNull(value)) - return ctx.stylize('null', 'null'); -} + return this.curve.jpoint(nx, ny, nz); +}; -function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; -} +JPoint.prototype._dbl = function _dbl() { + var a = this.curve.a; + // 4M + 6S + 10A + var jx = this.x; + var jy = this.y; + var jz = this.z; + var jz4 = jz.redSqr().redSqr(); -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - String(i), true)); - } else { - output.push(''); - } - } - keys.forEach(function(key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, - key, true)); - } - }); - return output; -} + var jx2 = jx.redSqr(); + var jy2 = jy.redSqr(); + var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function(line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - name = JSON.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } + var jxd4 = jx.redAdd(jx); + jxd4 = jxd4.redIAdd(jxd4); + var t1 = jxd4.redMul(jy2); + var nx = c.redSqr().redISub(t1.redAdd(t1)); + var t2 = t1.redISub(nx); + + var jyd8 = jy2.redSqr(); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + jyd8 = jyd8.redIAdd(jyd8); + var ny = c.redMul(t2).redISub(jyd8); + var nz = jy.redAdd(jy).redMul(jz); + + return this.curve.jpoint(nx, ny, nz); +}; + +JPoint.prototype.trpl = function trpl() { + if (!this.curve.zeroA) + return this.dbl().add(this); + + // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl + // 5M + 10S + ... + + // XX = X1^2 + var xx = this.x.redSqr(); + // YY = Y1^2 + var yy = this.y.redSqr(); + // ZZ = Z1^2 + var zz = this.z.redSqr(); + // YYYY = YY^2 + var yyyy = yy.redSqr(); + // M = 3 * XX + a * ZZ2; a = 0 + var m = xx.redAdd(xx).redIAdd(xx); + // MM = M^2 + var mm = m.redSqr(); + // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM + var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); + e = e.redIAdd(e); + e = e.redAdd(e).redIAdd(e); + e = e.redISub(mm); + // EE = E^2 + var ee = e.redSqr(); + // T = 16*YYYY + var t = yyyy.redIAdd(yyyy); + t = t.redIAdd(t); + t = t.redIAdd(t); + t = t.redIAdd(t); + // U = (M + E)^2 - MM - EE - T + var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); + // X3 = 4 * (X1 * EE - 4 * YY * U) + var yyu4 = yy.redMul(u); + yyu4 = yyu4.redIAdd(yyu4); + yyu4 = yyu4.redIAdd(yyu4); + var nx = this.x.redMul(ee).redISub(yyu4); + nx = nx.redIAdd(nx); + nx = nx.redIAdd(nx); + // Y3 = 8 * Y1 * (U * (T - U) - E * EE) + var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + ny = ny.redIAdd(ny); + // Z3 = (Z1 + E)^2 - ZZ - EE + var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); - return name + ': ' + str; -} + return this.curve.jpoint(nx, ny, nz); +}; +JPoint.prototype.mul = function mul(k, kbase) { + k = new bn(k, kbase); -function reduceToSingleString(output, base, braces) { - var numLinesEst = 0; - var length = output.reduce(function(prev, cur) { - numLinesEst++; - if (cur.indexOf('\n') >= 0) numLinesEst++; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); + return this.curve._wnafMul(this, k); +}; - if (length > 60) { - return braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - } +JPoint.prototype.eq = function eq(p) { + if (p.type === 'affine') + return this.eq(p.toJ()); - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; -} + if (this === p) + return true; + // x1 * z2^2 == x2 * z1^2 + var z2 = this.z.redSqr(); + var pz2 = p.z.redSqr(); + if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) + return false; -// NOTE: These type checking functions intentionally don't use `instanceof` -// because it is fragile and can be easily faked with `Object.create()`. -function isArray(ar) { - return Array.isArray(ar); -} -exports.isArray = isArray; + // y1 * z2^3 == y2 * z1^3 + var z3 = z2.redMul(this.z); + var pz3 = pz2.redMul(p.z); + return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; +}; -function isBoolean(arg) { - return typeof arg === 'boolean'; -} -exports.isBoolean = isBoolean; +JPoint.prototype.inspect = function inspect() { + if (this.isInfinity()) + return ''; + return ''; +}; -function isNull(arg) { - return arg === null; -} -exports.isNull = isNull; +JPoint.prototype.isInfinity = function isInfinity() { + // XXX This code assumes that zero is always zero in red + return this.z.cmpn(0) === 0; +}; -function isNullOrUndefined(arg) { - return arg == null; -} -exports.isNullOrUndefined = isNullOrUndefined; +},{"../../elliptic":197,"../curve":200,"bn.js":98,"inherits":226}],203:[function(require,module,exports){ +arguments[4][64][0].apply(exports,arguments) +},{"../elliptic":197,"./precomputed/secp256k1":208,"dup":64,"hash.js":219}],204:[function(require,module,exports){ +'use strict'; -function isNumber(arg) { - return typeof arg === 'number'; -} -exports.isNumber = isNumber; +var bn = require('bn.js'); +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; -function isString(arg) { - return typeof arg === 'string'; -} -exports.isString = isString; +var KeyPair = require('./key'); +var Signature = require('./signature'); -function isSymbol(arg) { - return typeof arg === 'symbol'; -} -exports.isSymbol = isSymbol; +function EC(options) { + if (!(this instanceof EC)) + return new EC(options); -function isUndefined(arg) { - return arg === void 0; -} -exports.isUndefined = isUndefined; + // Shortcut `elliptic.ec(curve-name)` + if (typeof options === 'string') { + assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options); -function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; -} -exports.isRegExp = isRegExp; + options = elliptic.curves[options]; + } -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} -exports.isObject = isObject; + // Shortcut for `elliptic.ec(elliptic.curves.curveName)` + if (options instanceof elliptic.curves.PresetCurve) + options = { curve: options }; -function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; -} -exports.isDate = isDate; + this.curve = options.curve.curve; + this.n = this.curve.n; + this.nh = this.n.shrn(1); + this.g = this.curve.g; -function isError(e) { - return isObject(e) && - (objectToString(e) === '[object Error]' || e instanceof Error); -} -exports.isError = isError; + // Point on curve + this.g = options.curve.g; + this.g.precompute(options.curve.n.bitLength() + 1); -function isFunction(arg) { - return typeof arg === 'function'; + // Hash for function for DRBG + this.hash = options.hash || options.curve.hash; } -exports.isFunction = isFunction; +module.exports = EC; -function isPrimitive(arg) { - return arg === null || - typeof arg === 'boolean' || - typeof arg === 'number' || - typeof arg === 'string' || - typeof arg === 'symbol' || // ES6 symbol - typeof arg === 'undefined'; -} -exports.isPrimitive = isPrimitive; +EC.prototype.keyPair = function keyPair(options) { + return new KeyPair(this, options); +}; -exports.isBuffer = require('./support/isBuffer'); +EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { + return KeyPair.fromPrivate(this, priv, enc); +}; -function objectToString(o) { - return Object.prototype.toString.call(o); -} +EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { + return KeyPair.fromPublic(this, pub, enc); +}; +EC.prototype.genKeyPair = function genKeyPair(options) { + if (!options) + options = {}; -function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); -} + // Instantiate Hmac_DRBG + var drbg = new elliptic.hmacDRBG({ + hash: this.hash, + pers: options.pers, + entropy: options.entropy || elliptic.rand(this.hash.hmacStrength), + nonce: this.n.toArray() + }); + var bytes = this.n.byteLength(); + var ns2 = this.n.sub(new bn(2)); + do { + var priv = new bn(drbg.generate(bytes)); + if (priv.cmp(ns2) > 0) + continue; -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', - 'Oct', 'Nov', 'Dec']; + priv.iaddn(1); + return this.keyFromPrivate(priv); + } while (true); +}; -// 26 Feb 16:19:34 -function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), - pad(d.getMinutes()), - pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); -} +EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { + var delta = msg.byteLength() * 8 - this.n.bitLength(); + if (delta > 0) + msg = msg.shrn(delta); + if (!truncOnly && msg.cmp(this.n) >= 0) + return msg.sub(this.n); + else + return msg; +}; +EC.prototype.sign = function sign(msg, key, enc, options) { + if (typeof enc === 'object') { + options = enc; + enc = null; + } + if (!options) + options = {}; -// log is just a thin wrapper to console.log that prepends a timestamp -exports.log = function() { - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); -}; + key = this.keyFromPrivate(key, enc); + msg = this._truncateToN(new bn(msg, 16)); + // Zero-extend key to provide enough entropy + var bytes = this.n.byteLength(); + var bkey = key.getPrivate().toArray(); + for (var i = bkey.length; i < 21; i++) + bkey.unshift(0); -/** - * Inherit the prototype methods from one constructor into another. - * - * The Function.prototype.inherits from lang.js rewritten as a standalone - * function (not on Function.prototype). NOTE: If this file is to be loaded - * during bootstrapping this function needs to be rewritten using some native - * functions as prototype setup using normal JavaScript does not work as - * expected during bootstrapping (see mirror.js in r114903). - * - * @param {function} ctor Constructor function which needs to inherit the - * prototype. - * @param {function} superCtor Constructor function to inherit prototype from. - */ -exports.inherits = require('inherits'); + // Zero-extend nonce to have the same byte size as N + var nonce = msg.toArray(); + for (var i = nonce.length; i < bytes; i++) + nonce.unshift(0); -exports._extend = function(origin, add) { - // Don't do anything if add isn't an object - if (!add || !isObject(add)) return origin; + // Instantiate Hmac_DRBG + var drbg = new elliptic.hmacDRBG({ + hash: this.hash, + entropy: bkey, + nonce: nonce + }); - var keys = Object.keys(add); - var i = keys.length; - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - return origin; -}; + // Number of bytes to generate + var ns1 = this.n.sub(new bn(1)); + do { + var k = new bn(drbg.generate(this.n.byteLength())); + k = this._truncateToN(k, true); + if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) + continue; -function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} + var kp = this.g.mul(k); + if (kp.isInfinity()) + continue; -}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"./support/isBuffer":318,"_process":299,"inherits":296}],320:[function(require,module,exports){ -var indexOf = require('indexof'); + var kpX = kp.getX(); + var r = kpX.mod(this.n); + if (r.cmpn(0) === 0) + continue; -var Object_keys = function (obj) { - if (Object.keys) return Object.keys(obj) - else { - var res = []; - for (var key in obj) res.push(key) - return res; - } -}; + var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)).mod(this.n); + if (s.cmpn(0) === 0) + continue; -var forEach = function (xs, fn) { - if (xs.forEach) return xs.forEach(fn) - else for (var i = 0; i < xs.length; i++) { - fn(xs[i], i, xs); - } + // Use complement of `s`, if it is > `n / 2` + if (options.canonical && s.cmp(this.nh) > 0) + s = this.n.sub(s); + + var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | + (kpX.cmp(r) !== 0 ? 2 : 0); + + return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); + } while (true); }; -var defineProp = (function() { - try { - Object.defineProperty({}, '_', {}); - return function(obj, name, value) { - Object.defineProperty(obj, name, { - writable: true, - enumerable: false, - configurable: true, - value: value - }) - }; - } catch(e) { - return function(obj, name, value) { - obj[name] = value; - }; - } -}()); +EC.prototype.verify = function verify(msg, signature, key, enc) { + msg = this._truncateToN(new bn(msg, 16)); + key = this.keyFromPublic(key, enc); + signature = new Signature(signature, 'hex'); + + // Perform primitive values validation + var r = signature.r; + var s = signature.s; + if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) + return false; + if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) + return false; -var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', -'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', -'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', -'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', -'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; + // Validate signature + var sinv = s.invm(this.n); + var u1 = sinv.mul(msg).mod(this.n); + var u2 = sinv.mul(r).mod(this.n); -function Context() {} -Context.prototype = {}; + var p = this.g.mulAdd(u1, key.getPublic(), u2); + if (p.isInfinity()) + return false; -var Script = exports.Script = function NodeScript (code) { - if (!(this instanceof Script)) return new Script(code); - this.code = code; + return p.getX().mod(this.n).cmp(r) === 0; }; -Script.prototype.runInContext = function (context) { - if (!(context instanceof Context)) { - throw new TypeError("needs a 'context' argument."); - } - - var iframe = document.createElement('iframe'); - if (!iframe.style) iframe.style = {}; - iframe.style.display = 'none'; - - document.body.appendChild(iframe); - - var win = iframe.contentWindow; - var wEval = win.eval, wExecScript = win.execScript; +EC.prototype.recoverPubKey = function(msg, signature, j, enc) { + assert((3 & j) === j, 'The recovery param is more than two bits'); + signature = new Signature(signature, enc); - if (!wEval && wExecScript) { - // win.eval() magically appears when this is called in IE: - wExecScript.call(win, 'null'); - wEval = win.eval; - } - - forEach(Object_keys(context), function (key) { - win[key] = context[key]; - }); - forEach(globals, function (key) { - if (context[key]) { - win[key] = context[key]; - } - }); - - var winKeys = Object_keys(win); + var n = this.n; + var e = new bn(msg); + var r = signature.r; + var s = signature.s; - var res = wEval.call(win, this.code); - - forEach(Object_keys(win), function (key) { - // Avoid copying circular objects like `top` and `window` by only - // updating existing context properties or new properties in the `win` - // that was only introduced after the eval. - if (key in context || indexOf(winKeys, key) === -1) { - context[key] = win[key]; - } - }); + // A set LSB signifies that the y-coordinate is odd + var isYOdd = j & 1; + var isSecondKey = j >> 1; + if (r.cmp(this.curve.p.mod(this.curve.n)) >= 0 && isSecondKey) + throw new Error('Unable to find sencond key candinate'); - forEach(globals, function (key) { - if (!(key in context)) { - defineProp(context, key, win[key]); - } - }); - - document.body.removeChild(iframe); - - return res; -}; + // 1.1. Let x = r + jn. + r = this.curve.pointFromX(isYOdd, r); + var eNeg = e.neg().mod(n); -Script.prototype.runInThisContext = function () { - return eval(this.code); // maybe... + // 1.6.1 Compute Q = r^-1 (sR - eG) + // Q = r^-1 (sR + -eG) + var rInv = signature.r.invm(n); + return r.mul(s).add(this.g.mul(eNeg)).mul(rInv); }; -Script.prototype.runInNewContext = function (context) { - var ctx = Script.createContext(context); - var res = this.runInContext(ctx); +EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { + signature = new Signature(signature, enc); + if (signature.recoveryParam !== null) + return signature.recoveryParam; - forEach(Object_keys(ctx), function (key) { - context[key] = ctx[key]; - }); + for (var i = 0; i < 4; i++) { + var Qprime = this.recoverPubKey(e, signature, i); - return res; + if (Qprime.eq(Q)) + return i; + } + throw new Error('Unable to find valid recovery factor'); }; -forEach(Object_keys(Script.prototype), function (name) { - exports[name] = Script[name] = function (code) { - var s = Script(code); - return s[name].apply(s, [].slice.call(arguments, 1)); - }; -}); +},{"../../elliptic":197,"./key":205,"./signature":206,"bn.js":98}],205:[function(require,module,exports){ +arguments[4][66][0].apply(exports,arguments) +},{"../../elliptic":197,"bn.js":98,"dup":66}],206:[function(require,module,exports){ +'use strict'; -exports.createScript = function (code) { - return exports.Script(code); -}; +var bn = require('bn.js'); -exports.createContext = Script.createContext = function (context) { - var copy = new Context(); - if(typeof context === 'object') { - forEach(Object_keys(context), function (key) { - copy[key] = context[key]; - }); - } - return copy; -}; +var elliptic = require('../../elliptic'); +var utils = elliptic.utils; +var assert = utils.assert; + +function Signature(options, enc) { + if (options instanceof Signature) + return options; -},{"indexof":321}],321:[function(require,module,exports){ + if (this._importDER(options, enc)) + return; -var indexOf = [].indexOf; + assert(options.r && options.s, 'Signature without r or s'); + this.r = new bn(options.r, 16); + this.s = new bn(options.s, 16); + if (options.recoveryParam !== null) + this.recoveryParam = options.recoveryParam; + else + this.recoveryParam = null; +} +module.exports = Signature; -module.exports = function(arr, obj){ - if (indexOf) return arr.indexOf(obj); - for (var i = 0; i < arr.length; ++i) { - if (arr[i] === obj) return i; - } - return -1; -}; -},{}],322:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { +Signature.prototype._importDER = function _importDER(data, enc) { + data = utils.toArray(data, enc); + if (data.length < 6 || data[0] !== 0x30 || data[2] !== 0x02) + return false; + var total = data[1]; + if (1 + total > data.length) + return false; + var rlen = data[3]; + // Short length notation + if (rlen >= 0x80) + return false; + if (4 + rlen + 2 >= data.length) + return false; + if (data[4 + rlen] !== 0x02) + return false; + var slen = data[5 + rlen]; + // Short length notation + if (slen >= 0x80) + return false; + if (4 + rlen + 2 + slen > data.length) + return false; - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; + this.r = new bn(data.slice(4, 4 + rlen)); + this.s = new bn(data.slice(4 + rlen + 2, 4 + rlen + 2 + slen)); + this.recoveryParam = null; - // Lookup tables - var SBOX = []; - var INV_SBOX = []; - var SUB_MIX_0 = []; - var SUB_MIX_1 = []; - var SUB_MIX_2 = []; - var SUB_MIX_3 = []; - var INV_SUB_MIX_0 = []; - var INV_SUB_MIX_1 = []; - var INV_SUB_MIX_2 = []; - var INV_SUB_MIX_3 = []; + return true; +}; - // Compute lookup tables - (function () { - // Compute double table - var d = []; - for (var i = 0; i < 256; i++) { - if (i < 128) { - d[i] = i << 1; - } else { - d[i] = (i << 1) ^ 0x11b; - } - } +Signature.prototype.toDER = function toDER(enc) { + var r = this.r.toArray(); + var s = this.s.toArray(); - // Walk GF(2^8) - var x = 0; - var xi = 0; - for (var i = 0; i < 256; i++) { - // Compute sbox - var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4); - sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63; - SBOX[x] = sx; - INV_SBOX[sx] = x; + // Pad values + if (r[0] & 0x80) + r = [ 0 ].concat(r); + // Pad values + if (s[0] & 0x80) + s = [ 0 ].concat(s); - // Compute multiplication - var x2 = d[x]; - var x4 = d[x2]; - var x8 = d[x4]; + var total = r.length + s.length + 4; + var res = [ 0x30, total, 0x02, r.length ]; + res = res.concat(r, [ 0x02, s.length ], s); + return utils.encode(res, enc); +}; - // Compute sub bytes, mix columns tables - var t = (d[sx] * 0x101) ^ (sx * 0x1010100); - SUB_MIX_0[x] = (t << 24) | (t >>> 8); - SUB_MIX_1[x] = (t << 16) | (t >>> 16); - SUB_MIX_2[x] = (t << 8) | (t >>> 24); - SUB_MIX_3[x] = t; +},{"../../elliptic":197,"bn.js":98}],207:[function(require,module,exports){ +arguments[4][68][0].apply(exports,arguments) +},{"../elliptic":197,"dup":68,"hash.js":219}],208:[function(require,module,exports){ +arguments[4][69][0].apply(exports,arguments) +},{"dup":69}],209:[function(require,module,exports){ +arguments[4][70][0].apply(exports,arguments) +},{"dup":70}],210:[function(require,module,exports){ +module.exports={ + "_args": [ + [ + "elliptic@^3.1.0", + "/Users/pelleb/code/clients/consensys/eth-lightwallet" + ] + ], + "_from": "elliptic@>=3.1.0 <4.0.0", + "_id": "elliptic@3.1.0", + "_inCache": true, + "_installable": true, + "_location": "/elliptic", + "_nodeVersion": "2.2.1", + "_npmUser": { + "email": "fedor@indutny.com", + "name": "indutny" + }, + "_npmVersion": "2.11.0", + "_phantomChildren": {}, + "_requested": { + "name": "elliptic", + "raw": "elliptic@^3.1.0", + "rawSpec": "^3.1.0", + "scope": null, + "spec": ">=3.1.0 <4.0.0", + "type": "range" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-3.1.0.tgz", + "_shasum": "c21682ef762769b56a74201609105da11d5f60cc", + "_shrinkwrap": null, + "_spec": "elliptic@^3.1.0", + "_where": "/Users/pelleb/code/clients/consensys/eth-lightwallet", + "author": { + "email": "fedor@indutny.com", + "name": "Fedor Indutny" + }, + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" + }, + "dependencies": { + "bn.js": "^2.0.3", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" + }, + "description": "EC cryptography", + "devDependencies": { + "browserify": "^3.44.2", + "jscs": "^1.11.3", + "jshint": "^2.6.0", + "mocha": "^2.1.0", + "uglify-js": "^2.4.13" + }, + "directories": {}, + "dist": { + "shasum": "c21682ef762769b56a74201609105da11d5f60cc", + "tarball": "http://registry.npmjs.org/elliptic/-/elliptic-3.1.0.tgz" + }, + "gitHead": "d86cd2a8178f7e7cecbd6dd92eea084e2ab44c13", + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "Cryptography", + "EC", + "Elliptic", + "curve" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "maintainers": [ + { + "name": "indutny", + "email": "fedor@indutny.com" + } + ], + "name": "elliptic", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" + }, + "scripts": { + "test": "make lint && mocha --reporter=spec test/*-test.js" + }, + "version": "3.1.0" +} - // Compute inv sub bytes, inv mix columns tables - var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100); - INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8); - INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16); - INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24); - INV_SUB_MIX_3[sx] = t; +},{}],211:[function(require,module,exports){ +module.exports={ + "genesisGasLimit": { + "v": 5000, + "d": "Gas limit of the Genesis block." + }, + "genesisDifficulty": { + "v": 17179869184, + "d": "Difficulty of the Genesis block." + }, + "genesisNonce": { + "v": "0x0000000000000042", + "d": "the geneis nonce" + }, + "genesisExtraData": { + "v": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "d": "extra data " + }, + "genesisHash": { + "v": "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3", + "d": "genesis hash" + }, + "genesisStateRoot": { + "v": "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544", + "d": "the genesis state root" + }, + "minGasLimit": { + "v": 5000, + "d": "Minimum the gas limit may ever be." + }, + "gasLimitBoundDivisor": { + "v": 1024, + "d": "The bound divisor of the gas limit, used in update calculations." + }, + "minimumDifficulty": { + "v": 131072, + "d": "The minimum that the difficulty may ever be." + }, + "difficultyBoundDivisor": { + "v": 2048, + "d": "The bound divisor of the difficulty, used in the update calculations." + }, + "durationLimit": { + "v": 13, + "d": "The decision boundary on the blocktime duration used to determine whether difficulty should go up or not." + }, + "maximumExtraDataSize": { + "v": 32, + "d": "Maximum size extra data may be after Genesis." + }, + "epochDuration": { + "v": 30000, + "d": "Duration between proof-of-work epochs." + }, + "stackLimit": { + "v": 1024, + "d": "Maximum size of VM stack allowed." + }, + "callCreateDepth": { + "v": 1024, + "d": "Maximum depth of call/create stack." + }, - // Compute next counter - if (!x) { - x = xi = 1; - } else { - x = x2 ^ d[d[d[x8 ^ x2]]]; - xi ^= d[d[xi]]; - } - } - }()); + "tierStepGas": { + "v": [0, 2, 3, 5, 8, 10, 20], + "d": "Once per operation, for a selection of them." + }, + "expGas": { + "v": 10, + "d": "Once per EXP instuction." + }, + "expByteGas": { + "v": 10, + "d": "Times ceil(log256(exponent)) for the EXP instruction." + }, - // Precomputed Rcon lookup - var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]; + "sha3Gas": { + "v": 30, + "d": "Once per SHA3 operation." + }, + "sha3WordGas": { + "v": 6, + "d": "Once per word of the SHA3 operation's data." + }, + "sloadGas": { + "v": 50, + "d": "Once per SLOAD operation." + }, + "sstoreSetGas": { + "v": 20000, + "d": "Once per SSTORE operation if the zeroness changes from zero." + }, + "sstoreResetGas": { + "v": 5000, + "d": "Once per SSTORE operation if the zeroness does not change from zero." + }, + "sstoreRefundGas": { + "v": 15000, + "d": "Once per SSTORE operation if the zeroness changes to zero." + }, + "jumpdestGas": { + "v": 1, + "d": "Refunded gas, once per SSTORE operation if the zeroness changes to zero." + }, - /** - * AES block cipher algorithm. - */ - var AES = C_algo.AES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySize = key.sigBytes / 4; + "logGas": { + "v": 375, + "d": "Per LOG* operation." + }, + "logDataGas": { + "v": 8, + "d": "Per byte in a LOG* operation's data." + }, + "logTopicGas": { + "v": 375, + "d": "Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas." + }, - // Compute number of rounds - var nRounds = this._nRounds = keySize + 6 + "createGas": { + "v": 32000, + "d": "Once per CREATE operation & contract-creation transaction." + }, - // Compute number of key schedule rows - var ksRows = (nRounds + 1) * 4; + "callGas": { + "v": 40, + "d": "Once per CALL operation & message call transaction." + }, + "callStipend": { + "v": 2300, + "d": "Free gas given at beginning of call." + }, + "callValueTransferGas": { + "v": 9000, + "d": "Paid for CALL when the value transfor is non-zero." + }, + "callNewAccountGas": { + "v": 25000, + "d": "Paid for CALL when the destination address didn't exist prior." + }, - // Compute key schedule - var keySchedule = this._keySchedule = []; - for (var ksRow = 0; ksRow < ksRows; ksRow++) { - if (ksRow < keySize) { - keySchedule[ksRow] = keyWords[ksRow]; - } else { - var t = keySchedule[ksRow - 1]; + "suicideRefundGas": { + "v": 24000, + "d": "Refunded following a suicide operation." + }, - if (!(ksRow % keySize)) { - // Rot word - t = (t << 8) | (t >>> 24); + "memoryGas": { + "v": 3, + "d": "Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL." + }, + "quadCoeffDiv": { + "v": 512, + "d": "Divisor for the quadratic particle of the memory cost equation." + }, - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; + "createDataGas": { + "v": 200, + "d": "" + }, + "txGas": { + "v": 21000, + "d": "Per transaction. NOTE: Not payable on data of calls between transactions." + }, + "txCreation": { + "v": 32000, + "d": "the cost of creating a contract via tx" + }, + "txDataZeroGas": { + "v": 4, + "d": "Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions." + }, + "txDataNonZeroGas": { + "v": 68, + "d": "Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions." + }, - // Mix Rcon - t ^= RCON[(ksRow / keySize) | 0] << 24; - } else if (keySize > 6 && ksRow % keySize == 4) { - // Sub word - t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff]; - } + "copyGas": { + "v": 3, + "d": "Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added." + }, - keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t; - } - } + "ecrecoverGas": { + "v": 3000, + "d": "" + }, + "sha256Gas": { + "v": 60, + "d": "" + }, + "sha256WordGas": { + "v": 12, + "d": "" + }, + "ripemd160Gas": { + "v": 600, + "d": "" + }, + "ripemd160WordGas": { + "v": 120, + "d": "" + }, + "identityGas": { + "v": 15, + "d": "" + }, + "identityWordGas": { + "v": 3, + "d": "" + }, + "minerReward": { + "v": "5000000000000000000", + "d": "the amount a miner get rewarded for mining a block" + }, + "ommerReward": { + "v": "625000000000000000", + "d": "The amount of wei a miner of an uncle block gets for being inculded in the blockchain" + }, + "niblingReward": { + "v": "156250000000000000", + "d": "the amount a miner gets for inculding a uncle" + }, + "homeSteadForkNumber": { + "v": 1000000, + "d": "the block that the homestead fork started at" + }, + "timebombPeriod": { + "v": 100000, + "d": "Exponential difficulty timebomb period" + }, + "freeBlockPeriod": { + "v": 2 + } +} - // Compute inv key schedule - var invKeySchedule = this._invKeySchedule = []; - for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) { - var ksRow = ksRows - invKsRow; +},{}],212:[function(require,module,exports){ +module.exports = require('./params.json') - if (invKsRow % 4) { - var t = keySchedule[ksRow]; - } else { - var t = keySchedule[ksRow - 4]; - } +},{"./params.json":211}],213:[function(require,module,exports){ +(function (global,Buffer){ +const ethUtil = require('ethereumjs-util') +const fees = require('ethereum-common/params') +const BN = ethUtil.BN - if (invKsRow < 4 || ksRow <= 4) { - invKeySchedule[invKsRow] = t; - } else { - invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^ - INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]]; - } - } - }, +// secp256k1n/2 +const N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16) - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX); - }, +// give browser access to Buffers +global.Buffer = Buffer +global.ethUtil = ethUtil - decryptBlock: function (M, offset) { - // Swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; +/** + * Creates a new transaction object + * @constructor + * @class {Buffer|Array} data a transaction can be initiailized with either a buffer containing the RLP serialized transaction or an array of buffers relating to each of the tx Properties, listed in order below in the exmple. Or lastly an Object containing the Properties of the transaction like in the Usage example + * + * For Object and Arrays each of the elements can either be a Buffer, a hex-prefixed (0x) String , Number, or an object with a toBuffer method such as Bignum + * @example + * var rawTx = { + * nonce: '00', + * gasPrice: '09184e72a000', + * gasLimit: '2710', + * to: '0000000000000000000000000000000000000000', + * value: '00', + * data: '7f7465737432000000000000000000000000000000000000000000000000000000600057', + * v: '1c', + * r: '5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab', + * s '5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13' + * }; + * var tx = new Transaction(rawTx); + * @prop {Buffer} raw The raw rlp decoded transaction + * @prop {Buffer} nonce + * @prop {Buffer} to the to address + * @prop {Buffer} value the amount of ether sent + * @prop {Buffer} data this will contain the data of the message or the init of a contract + * @prop {Buffer} v EC signature parameter + * @prop {Buffer} r EC signature parameter + * @prop {Buffer} s EC recovery ID + */ +var Transaction = module.exports = function (data) { + // Define Properties + const fields = [{ + name: 'nonce', + length: 32, + allowLess: true, + default: new Buffer([]) + }, { + name: 'gasPrice', + length: 32, + allowLess: true, + default: new Buffer([]) + }, { + name: 'gasLimit', + alias: 'gas', + length: 32, + allowLess: true, + default: new Buffer([]) + }, { + name: 'to', + allowZero: true, + length: 20, + default: new Buffer([]) + }, { + name: 'value', + length: 32, + allowLess: true, + default: new Buffer([]) + }, { + name: 'data', + alias: 'input', + allowZero: true, + default: new Buffer([]) + }, { + name: 'v', + length: 1, + default: new Buffer([0x1c]) + }, { + name: 'r', + length: 32, + allowLess: true, + default: new Buffer([]) + }, { + name: 's', + length: 32, + allowLess: true, + default: new Buffer([]) + }] - this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX); + /** + * Returns the rlp encoding of the transaction + * @method serialize + * @return {Buffer} + */ + // attached serialize + ethUtil.defineProperties(this, fields, data) - // Inv swap 2nd and 4th rows - var t = M[offset + 1]; - M[offset + 1] = M[offset + 3]; - M[offset + 3] = t; - }, + /** + * @prop {Buffer} from (read only) sender address of this transaction, mathematically derived from other parameters. + */ + Object.defineProperty(this, 'from', { + enumerable: true, + configurable: true, + get: this.getSenderAddress.bind(this) + }) - _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) { - // Shortcut - var nRounds = this._nRounds; + this._homestead = true +} - // Get input, add round key - var s0 = M[offset] ^ keySchedule[0]; - var s1 = M[offset + 1] ^ keySchedule[1]; - var s2 = M[offset + 2] ^ keySchedule[2]; - var s3 = M[offset + 3] ^ keySchedule[3]; +/** + * If the tx's `to` is to the creation address + * @method toCreationAddress + * @return {Boolean} + */ +Transaction.prototype.toCreationAddress = function () { + return this.to.toString('hex') === '' +} - // Key schedule row counter - var ksRow = 4; +/** + * Computes a sha3-256 hash of the serialized tx + * @method hash + * @param {Boolean} [signature=true] whether or not to inculde the signature + * @return {Buffer} + */ +Transaction.prototype.hash = function (signature) { + var toHash - // Rounds - for (var round = 1; round < nRounds; round++) { - // Shift rows, sub bytes, mix columns, add round key - var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++]; - var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++]; - var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++]; - var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++]; + if (typeof signature === 'undefined') { + signature = true + } - // Update state - s0 = t0; - s1 = t1; - s2 = t2; - s3 = t3; - } + toHash = signature ? this.raw : this.raw.slice(0, 6) - // Shift rows, sub bytes, add round key - var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]; - var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]; - var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]; - var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]; + // create hash + return ethUtil.rlphash(toHash) +} - // Set output - M[offset] = t0; - M[offset + 1] = t1; - M[offset + 2] = t2; - M[offset + 3] = t3; - }, +/** + * returns the sender's address + * @method getSenderAddress + * @return {Buffer} + */ +Transaction.prototype.getSenderAddress = function () { + if (this._from) { + return this._from + } + var pubkey = this.getSenderPublicKey() + this._from = ethUtil.publicToAddress(pubkey) + return this._from +} - keySize: 256/32 - }); +/** + * returns the public key of the sender + * @method getSenderPublicKey + * @return {Buffer} + */ +Transaction.prototype.getSenderPublicKey = function () { + if (!this._senderPubKey || !this._senderPubKey.length) { + this.verifySignature() + } - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg); - */ - C.AES = BlockCipher._createHelper(AES); - }()); + return this._senderPubKey +} +/** + * Determines if the signature is valid + * @method verifySignature + * @return {Boolean} + */ +Transaction.prototype.verifySignature = function () { + var msgHash = this.hash(false) - return CryptoJS.AES; + // All transaction signatures whose s-value is greater than secp256k1n/2 are considered invalid. + if (this._homestead && new BN(this.s).cmp(N_DIV_2) === 1) { + return false + } -})); -},{"./cipher-core":323,"./core":324,"./enc-base64":325,"./evpkdf":327,"./md5":332}],323:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + try { + this._senderPubKey = ethUtil.ecrecover(msgHash, this.v, this.r, this.s) + } catch (e) { + return false + } - /** - * Cipher core components. - */ - CryptoJS.lib.Cipher || (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var Base64 = C_enc.Base64; - var C_algo = C.algo; - var EvpKDF = C_algo.EvpKDF; + return !!this._senderPubKey +} - /** - * Abstract base cipher template. - * - * @property {number} keySize This cipher's key size. Default: 4 (128 bits) - * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits) - * @property {number} _ENC_XFORM_MODE A constant representing encryption mode. - * @property {number} _DEC_XFORM_MODE A constant representing decryption mode. - */ - var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - * - * @property {WordArray} iv The IV to use for this operation. - */ - cfg: Base.extend(), +/** + * sign a transaction with a given a private key + * @method sign + * @param {Buffer} privateKey + */ +Transaction.prototype.sign = function (privateKey) { + var msgHash = this.hash(false) + var sig = ethUtil.ecsign(msgHash, privateKey) + Object.assign(this, sig) +} - /** - * Creates this cipher in encryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray }); - */ - createEncryptor: function (key, cfg) { - return this.create(this._ENC_XFORM_MODE, key, cfg); - }, +/** + * The amount of gas paid for the data in this tx + * @method getDataFee + * @return {BN} + */ +Transaction.prototype.getDataFee = function () { + const data = this.raw[5] + var cost = new BN(0) + for (var i = 0; i < data.length; i++) { + data[i] === 0 ? cost.iaddn(fees.txDataZeroGas.v) : cost.iaddn(fees.txDataNonZeroGas.v) + } + return cost +} - /** - * Creates this cipher in decryption mode. - * - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {Cipher} A cipher instance. - * - * @static - * - * @example - * - * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray }); - */ - createDecryptor: function (key, cfg) { - return this.create(this._DEC_XFORM_MODE, key, cfg); - }, +/** + * the minimum amount of gas the tx must have (DataFee + TxFee + Creation Fee) + * @method getBaseFee + * @return {BN} + */ +Transaction.prototype.getBaseFee = function () { + var fee = this.getDataFee().iaddn(fees.txGas.v) + if (this._homestead && this.toCreationAddress()) { + fee.iaddn(fees.txCreation.v) + } + return fee +} - /** - * Initializes a newly created cipher. - * - * @param {number} xformMode Either the encryption or decryption transormation mode constant. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @example - * - * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray }); - */ - init: function (xformMode, key, cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); +/** + * the up front amount that an account must have for this transaction to be valid + * @method getUpfrontCost + * @return {BN} + */ +Transaction.prototype.getUpfrontCost = function () { + return new BN(this.gasLimit) + .imul(new BN(this.gasPrice)) + .iadd(new BN(this.value)) +} - // Store transform mode and key - this._xformMode = xformMode; - this._key = key; +/** + * validates the signature and checks to see if it has enough gas + * @method validate + * @param {Boolean} [stringError=false] whether to return a string with a dscription of why the validation failed or return a Bloolean + * @return {Boolean|String} + */ +Transaction.prototype.validate = function (stringError) { + var errors = [] + if (!this.verifySignature()) { + errors.push('Invalid Signature') + } - // Set initial values - this.reset(); - }, + if (this.getBaseFee().cmp(new BN(this.gasLimit)) > 0) { + errors.push(['gas limit is to low. Need at least ' + this.getBaseFee()]) + } - /** - * Resets this cipher to its initial state. - * - * @example - * - * cipher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); + if (stringError === undefined || stringError === false) { + return errors.length === 0 + } else { + return errors.join(' ') + } +} - // Perform concrete-cipher logic - this._doReset(); - }, +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) +},{"buffer":147,"ethereum-common/params":212,"ethereumjs-util":214}],214:[function(require,module,exports){ +(function (Buffer){ +const SHA3 = require('keccakjs') +const secp256k1 = require('secp256k1') +const assert = require('assert') +const rlp = require('rlp') +const BN = require('bn.js') +const crypto = require('crypto') - /** - * Adds data to be encrypted or decrypted. - * - * @param {WordArray|string} dataUpdate The data to encrypt or decrypt. - * - * @return {WordArray} The data after processing. - * - * @example - * - * var encrypted = cipher.process('data'); - * var encrypted = cipher.process(wordArray); - */ - process: function (dataUpdate) { - // Append - this._append(dataUpdate); +/** + * the max integer that this VM can handle (a ```BN```) + * @var {BN} MAX_INTEGER + */ +exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16) - // Process available blocks - return this._process(); - }, +/** + * 2^256 (a ```BN```) + * @var {BN} TWO_POW256 + */ +exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16) - /** - * Finalizes the encryption or decryption process. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt. - * - * @return {WordArray} The data after final processing. - * - * @example - * - * var encrypted = cipher.finalize(); - * var encrypted = cipher.finalize('data'); - * var encrypted = cipher.finalize(wordArray); - */ - finalize: function (dataUpdate) { - // Final data update - if (dataUpdate) { - this._append(dataUpdate); - } +/** + * SHA3-256 hash of null (a ```String```) + * @var {String} SHA3_NULL_S + */ +exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' - // Perform concrete-cipher logic - var finalProcessedData = this._doFinalize(); +/** + * SHA3-256 hash of null (a ```Buffer```) + * @var {Buffer} SHA3_NULL + */ +exports.SHA3_NULL = new Buffer(exports.SHA3_NULL_S, 'hex') - return finalProcessedData; - }, +/** + * SHA3-256 of an RLP of an empty array (a ```String```) + * @var {String} SHA3_RLP_ARRAY_S + */ +exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347' - keySize: 128/32, +/** + * SHA3-256 of an RLP of an empty array (a ```Buffer```) + * @var {Buffer} SHA3_RLP_ARRAY + */ +exports.SHA3_RLP_ARRAY = new Buffer(exports.SHA3_RLP_ARRAY_S, 'hex') - ivSize: 128/32, +/** + * SHA3-256 hash of the RLP of null (a ```String```) + * @var {String} SHA3_RLP_S + */ +exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421' - _ENC_XFORM_MODE: 1, +/** + * SHA3-256 hash of the RLP of null (a ```Buffer```) + * @var {Buffer} SHA3_RLP + */ +exports.SHA3_RLP = new Buffer(exports.SHA3_RLP_S, 'hex') - _DEC_XFORM_MODE: 2, +/** + * [`BN`](https://github.com/indutny/bn.js) + * @var {Function} + */ +exports.BN = BN - /** - * Creates shortcut functions to a cipher's object interface. - * - * @param {Cipher} cipher The cipher to create a helper for. - * - * @return {Object} An object with encrypt and decrypt shortcut functions. - * - * @static - * - * @example - * - * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES); - */ - _createHelper: (function () { - function selectCipherStrategy(key) { - if (typeof key == 'string') { - return PasswordBasedCipher; - } else { - return SerializableCipher; - } - } +/** + * [`rlp`](https://github.com/ethereumjs/rlp) + * @var {Function} + */ +exports.rlp = rlp - return function (cipher) { - return { - encrypt: function (message, key, cfg) { - return selectCipherStrategy(key).encrypt(cipher, message, key, cfg); - }, +/** + * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/) + * @var {Object} + */ +exports.secp256k1 = secp256k1 - decrypt: function (ciphertext, key, cfg) { - return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg); - } - }; - }; - }()) - }); +/** + * Returns a buffer filled with 0s + * @method zeros + * @param {Number} bytes the number of bytes the buffer should be + * @return {Buffer} + */ +exports.zeros = function (bytes) { + var buf = new Buffer(bytes) + buf.fill(0) + return buf +} - /** - * Abstract base stream cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits) - */ - var StreamCipher = C_lib.StreamCipher = Cipher.extend({ - _doFinalize: function () { - // Process partial blocks - var finalProcessedBlocks = this._process(!!'flush'); +/** + * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. + * Or it truncates the beginning if it exceeds. + * @method lsetLength + * @param {Buffer|Array} msg the value to pad + * @param {Number} length the number of bytes the output should be + * @param {Boolean} [right=false] whether to start padding form the left or right + * @return {Buffer|Array} + */ +exports.setLengthLeft = exports.setLength = function (msg, length, right) { + var buf = exports.zeros(length) + msg = exports.toBuffer(msg) + if (right) { + if (msg.length < length) { + msg.copy(buf) + return buf + } + return msg.slice(0, length) + } else { + if (msg.length < length) { + msg.copy(buf, length - msg.length) + return buf + } + return msg.slice(-length) + } +} - return finalProcessedBlocks; - }, +/** + * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. + * Or it truncates the beginning if it exceeds. + * @method lsetLength + * @param {Buffer|Array} msg the value to pad + * @param {Number} length the number of bytes the output should be + * @return {Buffer|Array} + */ +exports.setLengthRight = function (msg, length) { + return exports.setLength(msg, length, true) +} - blockSize: 1 - }); +/** + * Trims leading zeros from a `Buffer` or an `Array` + * @method unpad + * @param {Buffer|Array|String} a + * @return {Buffer|Array|String} + */ +exports.unpad = exports.stripZeros = function (a) { + a = exports.stripHexPrefix(a) + var first = a[0] + while (a.length > 0 && first.toString() === '0') { + a = a.slice(1) + first = a[0] + } + return a +} +/** + * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method. + * @method toBuffer + * @param {*} v the value + */ +exports.toBuffer = function (v) { + if (!Buffer.isBuffer(v)) { + if (Array.isArray(v)) { + v = new Buffer(v) + } else if (typeof v === 'string') { + if (exports.isHexPrefixed(v)) { + v = new Buffer(exports.padToEven(exports.stripHexPrefix(v)), 'hex') + } else { + v = new Buffer(v) + } + } else if (typeof v === 'number') { + v = exports.intToBuffer(v) + } else if (v === null || v === undefined) { + v = new Buffer([]) + } else if (v.toArray) { + // converts a BN to a Buffer + v = new Buffer(v.toArray()) + } else { + throw new Error('invalid type') + } + } + return v +} - /** - * Mode namespace. - */ - var C_mode = C.mode = {}; +/** + * Converts a `Number` into a hex `String` + * @method intToHex + * @param {Number} i + * @return {String} + */ +exports.intToHex = function (i) { + assert(i % 1 === 0, 'number is not a integer') + assert(i >= 0, 'number must be positive') + var hex = i.toString(16) + if (hex.length % 2) { + hex = '0' + hex + } - /** - * Abstract base block cipher mode template. - */ - var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({ - /** - * Creates this mode for encryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words); - */ - createEncryptor: function (cipher, iv) { - return this.Encryptor.create(cipher, iv); - }, + return '0x' + hex +} - /** - * Creates this mode for decryption. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @static - * - * @example - * - * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words); - */ - createDecryptor: function (cipher, iv) { - return this.Decryptor.create(cipher, iv); - }, +/** + * Converts an `Number` to a `Buffer` + * @method intToBuffer + * @param {Number} i + * @return {Buffer} + */ +exports.intToBuffer = function (i) { + var hex = exports.intToHex(i) + return new Buffer(hex.slice(2), 'hex') +} - /** - * Initializes a newly created mode. - * - * @param {Cipher} cipher A block cipher instance. - * @param {Array} iv The IV words. - * - * @example - * - * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words); - */ - init: function (cipher, iv) { - this._cipher = cipher; - this._iv = iv; - } - }); +/** + * Converts a `Buffer` to a `Number` + * @method bufferToInt + * @param {Buffer} buf + * @return {Number} + */ +exports.bufferToInt = function (buf) { + buf = exports.toBuffer(buf) + if (buf.length === 0) { + return 0 + } - /** - * Cipher Block Chaining mode. - */ - var CBC = C_mode.CBC = (function () { - /** - * Abstract base CBC mode. - */ - var CBC = BlockCipherMode.extend(); + return parseInt(buf.toString('hex'), 16) +} - /** - * CBC encryptor. - */ - CBC.Encryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; +/** + * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers. + * @method fromSigned + * @param {Buffer} num + * @return {BN} + */ +exports.fromSigned = function (num) { + return new BN(num).fromTwos(256) +} - // XOR and encrypt - xorBlock.call(this, words, offset, blockSize); - cipher.encryptBlock(words, offset); +/** + * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers. + * @method toUnsigned + * @param {BN} num + * @return {Buffer} + */ +exports.toUnsigned = function (num) { + return new Buffer(num.toTwos(256).toArray()) +} - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); +/** + * Creates SHA-3 hash of the input + * @method sha3 + * @param {Buffer|Array|String|Number} a the input data + * @param {Number} [bytes=256] the SHA width + * @return {Buffer} + */ +exports.sha3 = function (a, bytes) { + a = exports.toBuffer(a) + if (!bytes) bytes = 256 - /** - * CBC decryptor. - */ - CBC.Decryptor = CBC.extend({ - /** - * Processes the data block at offset. - * - * @param {Array} words The data words to operate on. - * @param {number} offset The offset where the block starts. - * - * @example - * - * mode.processBlock(data.words, offset); - */ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; + var h = new SHA3(bytes) + if (a) { + h.update(a) + } + return new Buffer(h.digest('hex'), 'hex') +} - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); +/** + * Creates SHA256 hash of the input + * @method sha256 + * @param {Buffer|Array|String|Number} a the input data + * @return {Buffer} + */ +exports.sha256 = function (a) { + a = exports.toBuffer(a) + return crypto.createHash('SHA256').update(a).digest() +} - // Decrypt and XOR - cipher.decryptBlock(words, offset); - xorBlock.call(this, words, offset, blockSize); +/** + * Creates RIPEMD160 hash of the input + * @method ripemd160 + * @param {Buffer|Array|String|Number} a the input data + * @param {Boolean} padded whether it should be padded to 256 bits or not + * @return {Buffer} + */ +exports.ripemd160 = function (a, padded) { + a = exports.toBuffer(a) + var hash = crypto.createHash('rmd160').update(a).digest() + if (padded === true) { + return exports.setLength(hash, 32) + } else { + return hash + } +} - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); +/** + * Creates SHA-3 hash of the RLP encoded version of the input + * @method rlphash + * @param {Buffer|Array|String|Number} a the input data + * @return {Buffer} + */ +exports.rlphash = function (a) { + return exports.sha3(rlp.encode(a)) +} - function xorBlock(words, offset, blockSize) { - // Shortcut - var iv = this._iv; +/** + * Returns the ethereum address of a given public key. + * Accepts "Ethereum public keys" and SEC1 encoded keys. + * @method publicToAddress + * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled + * @param {Boolean} sanitize Accept public keys in other formats + * @return {Buffer} + */ +exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) { + pubKey = exports.toBuffer(pubKey) + if (sanitize && (pubKey.length !== 64)) { + pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1) + } + assert(pubKey.length === 64) + // Only take the lower 160bits of the hash + return exports.sha3(pubKey).slice(-20) +} - // Choose mixing block - if (iv) { - var block = iv; +/** + * Returns the ethereum public key of a given private key + * @method privateToPublic + * @param {Buffer} privateKey A private key must be 256 bits wide + * @return {Buffer} + */ +var privateToPublic = exports.privateToPublic = function (privateKey) { + privateKey = exports.toBuffer(privateKey) + // skip the type flag and use the X, Y points + return secp256k1.publicKeyConvert(secp256k1.publicKeyCreate(privateKey), false).slice(1) +} - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var block = this._prevBlock; - } +/** + * Returns the ethereum address of a given private key + * @method privateToAddress + * @param {Buffer} privateKey A private key must be 256 bits wide + * @return {Buffer} + */ +exports.privateToAddress = function (privateKey) { + return exports.publicToAddress(privateToPublic(privateKey)) +} - // XOR blocks - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= block[i]; - } - } +/** + * Generates an address of a newly created contract + * @method generateAddress + * @param {Buffer} from the address which is creating this new address + * @param {Buffer} nonce the nonce of the from account + * @return {Buffer} + */ +exports.generateAddress = function (from, nonce) { + from = exports.toBuffer(from) + nonce = new BN(nonce) - return CBC; - }()); + if (nonce.isZero()) { + // in RLP we want to encode null in the case of zero nonce + // read the RLP documentation for an answer if you dare + nonce = null + } else { + nonce = new Buffer(nonce.toArray()) + } - /** - * Padding namespace. - */ - var C_pad = C.pad = {}; + // Only take the lower 160bits of the hash + return exports.rlphash([from, nonce]).slice(-20) +} - /** - * PKCS #5/7 padding strategy. - */ - var Pkcs7 = C_pad.Pkcs7 = { - /** - * Pads data using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to pad. - * @param {number} blockSize The multiple that the data should be padded to. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.pad(wordArray, 4); - */ - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; +/** + * Returns true if the supplied address belongs to a precompiled account + * @method isPrecompiled + * @param {Buffer|String} address + * @return {Boolean} + */ +exports.isPrecompiled = function (address) { + var a = exports.unpad(address) + return a.length === 1 && a[0] > 0 && a[0] < 5 +} - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; +/** + * Returns a `Boolean` on whether or not the a `String` starts with "0x" + * @method isHexPrefixed + * @param {String} str + * @return {Boolean} + */ +exports.isHexPrefixed = function (str) { + return str.slice(0, 2) === '0x' +} - // Create padding word - var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes; +/** + * Removes "0x" from a given `String` + * @method stripHexPrefix + * @param {String} str + * @return {String} + */ +exports.stripHexPrefix = function (str) { + if (typeof str !== 'string') { + return str + } + return exports.isHexPrefixed(str) ? str.slice(2) : str +} - // Create padding - var paddingWords = []; - for (var i = 0; i < nPaddingBytes; i += 4) { - paddingWords.push(paddingWord); - } - var padding = WordArray.create(paddingWords, nPaddingBytes); +/** + * Adds "0x" to a given `String` if it does not already start with "0x" + * @method addHexPrefix + * @param {String} str + * @return {String} + */ +exports.addHexPrefix = function (str) { + if (typeof str !== 'string') { + return str + } - // Add padding - data.concat(padding); - }, + return exports.isHexPrefixed(str) ? str : '0x' + str +} - /** - * Unpads data that had been padded using the algorithm defined in PKCS #5/7. - * - * @param {WordArray} data The data to unpad. - * - * @static - * - * @example - * - * CryptoJS.pad.Pkcs7.unpad(wordArray); - */ - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; +/** + * Pads a `String` to have an even length + * @method padToEven + * @param {String} a + * @return {String} + */ +exports.padToEven = function (a) { + if (a.length % 2) a = '0' + a + return a +} - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; +/** + * ECDSA sign + * @method ecsign + * @param {Buffer} msgHash + * @param {Buffer} privateKey + * @return {Object} + */ +exports.ecsign = function (msgHash, privateKey) { + var sig = secp256k1.sign(msgHash, privateKey) - /** - * Abstract base block cipher template. - * - * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits) - */ - var BlockCipher = C_lib.BlockCipher = Cipher.extend({ - /** - * Configuration options. - * - * @property {Mode} mode The block mode to use. Default: CBC - * @property {Padding} padding The padding strategy to use. Default: Pkcs7 - */ - cfg: Cipher.cfg.extend({ - mode: CBC, - padding: Pkcs7 - }), + var ret = {} + ret.r = sig.signature.slice(0, 32) + ret.s = sig.signature.slice(32, 64) + ret.v = sig.recovery + 27 + return ret +} - reset: function () { - // Reset cipher - Cipher.reset.call(this); +/** + * ECDSA public key recovery from signature + * @method ecrecover + * @param {Buffer} msgHash + * @param {Buffer} v + * @param {Buffer} r + * @param {Buffer} s + * @return {Buffer} publicKey + */ +exports.ecrecover = function (msgHash, v, r, s) { + var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64) + var recovery = exports.bufferToInt(v) - 27 + if (v > 28 || v < 27) { + throw (new Error('Invalid v value')) + } + var senderPubKey = secp256k1.recover(msgHash, signature, recovery) + return secp256k1.publicKeyConvert(senderPubKey, false).slice(1) +} - // Shortcuts - var cfg = this.cfg; - var iv = cfg.iv; - var mode = cfg.mode; +/** + * Converts a `Buffer` or `Array` to JSON + * @method BAToJSON + * @param {Buffer|Array} ba + * @return {Array|String|null} + */ +exports.baToJSON = function (ba) { + if (Buffer.isBuffer(ba)) { + return '0x' + ba.toString('hex') + } else if (ba instanceof Array) { + var array = [] + for (var i = 0; i < ba.length; i++) { + array.push(exports.baToJSON(ba[i])) + } + return array + } +} - // Reset block mode - if (this._xformMode == this._ENC_XFORM_MODE) { - var modeCreator = mode.createEncryptor; - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - var modeCreator = mode.createDecryptor; +/** + * Defines properties on a `Object`. It make the assumption that underlying data is binary. + * @method defineProperties + * @param {Object} self the `Object` to define properties on + * @param {Array} fields an array fields to define. Fields can contain: + * * `name` - the name of the properties + * * `length` - the number of bytes the field can have + * * `allowLess` - if the field can be less than the length + * * `allowEmpty` + * @param {*} data data to be validated against the definitions + */ +exports.defineProperties = function (self, fields, data) { + self.raw = [] + self._fields = [] - // Keep at least one block in the buffer for unpadding - this._minBufferSize = 1; - } - this._mode = modeCreator.call(mode, this, iv && iv.words); - }, + // attach the `toJSON` + self.toJSON = function (label) { + if (label) { + var obj = {} + self._fields.forEach(function (field) { + obj[field] = '0x' + self[field].toString('hex') + }) + return obj + } + return exports.baToJSON(this.raw) + } - _doProcessBlock: function (words, offset) { - this._mode.processBlock(words, offset); - }, + self.serialize = function serialize () { + return rlp.encode(self.raw) + } - _doFinalize: function () { - // Shortcut - var padding = this.cfg.padding; + fields.forEach(function (field, i) { + self._fields.push(field.name) + function getter () { + return self.raw[i] + } + function setter (v) { + v = exports.toBuffer(v) - // Finalize - if (this._xformMode == this._ENC_XFORM_MODE) { - // Pad data - padding.pad(this._data, this.blockSize); + if (v.toString('hex') === '00' && !field.allowZero) { + v = new Buffer([]) + } - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); - } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ { - // Process final blocks - var finalProcessedBlocks = this._process(!!'flush'); + if (field.allowLess && field.length) { + v = exports.stripZeros(v) + assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes') + } else if (!(field.allowZero && v.length === 0) && field.length) { + assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length) + } - // Unpad data - padding.unpad(finalProcessedBlocks); - } + self.raw[i] = v + } - return finalProcessedBlocks; - }, + Object.defineProperty(self, field.name, { + enumerable: true, + configurable: true, + get: getter, + set: setter + }) - blockSize: 128/32 - }); + if (field.default) { + self[field.name] = field.default + } - /** - * A collection of cipher parameters. - * - * @property {WordArray} ciphertext The raw ciphertext. - * @property {WordArray} key The key to this ciphertext. - * @property {WordArray} iv The IV used in the ciphering operation. - * @property {WordArray} salt The salt used with a key derivation function. - * @property {Cipher} algorithm The cipher algorithm. - * @property {Mode} mode The block mode used in the ciphering operation. - * @property {Padding} padding The padding scheme used in the ciphering operation. - * @property {number} blockSize The block size of the cipher. - * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string. - */ - var CipherParams = C_lib.CipherParams = Base.extend({ - /** - * Initializes a newly created cipher params object. - * - * @param {Object} cipherParams An object with any of the possible cipher parameters. - * - * @example - * - * var cipherParams = CryptoJS.lib.CipherParams.create({ - * ciphertext: ciphertextWordArray, - * key: keyWordArray, - * iv: ivWordArray, - * salt: saltWordArray, - * algorithm: CryptoJS.algo.AES, - * mode: CryptoJS.mode.CBC, - * padding: CryptoJS.pad.PKCS7, - * blockSize: 4, - * formatter: CryptoJS.format.OpenSSL - * }); - */ - init: function (cipherParams) { - this.mixIn(cipherParams); - }, + // attach alias + if (field.alias) { + Object.defineProperty(self, field.alias, { + enumerable: false, + configurable: true, + set: setter, + get: getter + }) + } + }) - /** - * Converts this cipher params object to a string. - * - * @param {Format} formatter (Optional) The formatting strategy to use. - * - * @return {string} The stringified cipher params. - * - * @throws Error If neither the formatter nor the default formatter is set. - * - * @example - * - * var string = cipherParams + ''; - * var string = cipherParams.toString(); - * var string = cipherParams.toString(CryptoJS.format.OpenSSL); - */ - toString: function (formatter) { - return (formatter || this.formatter).stringify(this); - } - }); + // if the constuctor is passed data + if (data) { + if (typeof data === 'string') { + data = new Buffer(exports.stripHexPrefix(data), 'hex') + } - /** - * Format namespace. - */ - var C_format = C.format = {}; + if (Buffer.isBuffer(data)) { + data = rlp.decode(data) + } - /** - * OpenSSL formatting strategy. - */ - var OpenSSLFormatter = C_format.OpenSSL = { - /** - * Converts a cipher params object to an OpenSSL-compatible string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The OpenSSL-compatible string. - * - * @static - * - * @example - * - * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams); - */ - stringify: function (cipherParams) { - // Shortcuts - var ciphertext = cipherParams.ciphertext; - var salt = cipherParams.salt; + if (Array.isArray(data)) { + if (data.length > self._fields.length) { + throw (new Error('wrong number of fields in data')) + } - // Format - if (salt) { - var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext); - } else { - var wordArray = ciphertext; - } + // make sure all the items are buffers + data.forEach(function (d, i) { + self[self._fields[i]] = exports.toBuffer(d) + }) + } else if (typeof data === 'object') { + for (var prop in data) { + if (self._fields.indexOf(prop) !== -1) { + self[prop] = data[prop] + } + } + } else { + throw new Error('invalid data') + } + } +} - return wordArray.toString(Base64); - }, +}).call(this,require("buffer").Buffer) +},{"assert":7,"bn.js":215,"buffer":147,"crypto":174,"keccakjs":230,"rlp":216,"secp256k1":260}],215:[function(require,module,exports){ +(function (module, exports) { + 'use strict'; - /** - * Converts an OpenSSL-compatible string to a cipher params object. - * - * @param {string} openSSLStr The OpenSSL-compatible string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString); - */ - parse: function (openSSLStr) { - // Parse base64 - var ciphertext = Base64.parse(openSSLStr); + // Utils + function assert (val, msg) { + if (!val) throw new Error(msg || 'Assertion failed'); + } - // Shortcut - var ciphertextWords = ciphertext.words; + // Could use `inherits` module, but don't want to move from single file + // architecture yet. + function inherits (ctor, superCtor) { + ctor.super_ = superCtor; + var TempCtor = function () {}; + TempCtor.prototype = superCtor.prototype; + ctor.prototype = new TempCtor(); + ctor.prototype.constructor = ctor; + } - // Test for salt - if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) { - // Extract salt - var salt = WordArray.create(ciphertextWords.slice(2, 4)); + // BN - // Remove salt from ciphertext - ciphertextWords.splice(0, 4); - ciphertext.sigBytes -= 16; - } + function BN (number, base, endian) { + if (BN.isBN(number)) { + return number; + } - return CipherParams.create({ ciphertext: ciphertext, salt: salt }); - } - }; + this.negative = 0; + this.words = null; + this.length = 0; - /** - * A cipher wrapper that returns ciphertext as a serializable cipher params object. - */ - var SerializableCipher = C_lib.SerializableCipher = Base.extend({ - /** - * Configuration options. - * - * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL - */ - cfg: Base.extend({ - format: OpenSSLFormatter - }), + // Reduction context + this.red = null; - /** - * Encrypts a message. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv }); - * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); + if (number !== null) { + if (base === 'le' || base === 'be') { + endian = base; + base = 10; + } - // Encrypt - var encryptor = cipher.createEncryptor(key, cfg); - var ciphertext = encryptor.finalize(message); + this._init(number || 0, base || 10, endian || 'be'); + } + } + if (typeof module === 'object') { + module.exports = BN; + } else { + exports.BN = BN; + } - // Shortcut - var cipherCfg = encryptor.cfg; + BN.BN = BN; + BN.wordSize = 26; - // Create and return serializable cipher params - return CipherParams.create({ - ciphertext: ciphertext, - key: key, - iv: cipherCfg.iv, - algorithm: cipher, - mode: cipherCfg.mode, - padding: cipherCfg.padding, - blockSize: cipher.blockSize, - formatter: cfg.format - }); - }, + var Buffer; + try { + Buffer = require('buf' + 'fer').Buffer; + } catch (e) { + } - /** - * Decrypts serialized ciphertext. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {WordArray} key The key. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, key, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); + BN.isBN = function isBN (num) { + return num !== null && typeof num === 'object' && + num.constructor.name === 'BN' && Array.isArray(num.words); + }; - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); + BN.max = function max (left, right) { + if (left.cmp(right) > 0) return left; + return right; + }; - // Decrypt - var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext); + BN.min = function min (left, right) { + if (left.cmp(right) < 0) return left; + return right; + }; - return plaintext; - }, + BN.prototype._init = function init (number, base, endian) { + if (typeof number === 'number') { + return this._initNumber(number, base, endian); + } - /** - * Converts serialized ciphertext to CipherParams, - * else assumed CipherParams already and returns ciphertext unchanged. - * - * @param {CipherParams|string} ciphertext The ciphertext. - * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext. - * - * @return {CipherParams} The unserialized ciphertext. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format); - */ - _parse: function (ciphertext, format) { - if (typeof ciphertext == 'string') { - return format.parse(ciphertext, this); - } else { - return ciphertext; - } - } - }); + if (typeof number === 'object') { + return this._initArray(number, base, endian); + } - /** - * Key derivation function namespace. - */ - var C_kdf = C.kdf = {}; + if (base === 'hex') { + base = 16; + } + assert(base === (base | 0) && base >= 2 && base <= 36); - /** - * OpenSSL key derivation function. - */ - var OpenSSLKdf = C_kdf.OpenSSL = { - /** - * Derives a key and IV from a password. - * - * @param {string} password The password to derive from. - * @param {number} keySize The size in words of the key to generate. - * @param {number} ivSize The size in words of the IV to generate. - * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly. - * - * @return {CipherParams} A cipher params object with the key, IV, and salt. - * - * @static - * - * @example - * - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32); - * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt'); - */ - execute: function (password, keySize, ivSize, salt) { - // Generate random salt - if (!salt) { - salt = WordArray.random(64/8); - } + number = number.toString().replace(/\s+/g, ''); + var start = 0; + if (number[0] === '-') { + start++; + } - // Derive key and IV - var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt); + if (base === 16) { + this._parseHex(number, start); + } else { + this._parseBase(number, base, start); + } - // Separate key and IV - var iv = WordArray.create(key.words.slice(keySize), ivSize * 4); - key.sigBytes = keySize * 4; + if (number[0] === '-') { + this.negative = 1; + } - // Return params - return CipherParams.create({ key: key, iv: iv, salt: salt }); - } - }; + this.strip(); - /** - * A serializable cipher wrapper that derives the key from a password, - * and returns ciphertext as a serializable cipher params object. - */ - var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({ - /** - * Configuration options. - * - * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL - */ - cfg: SerializableCipher.cfg.extend({ - kdf: OpenSSLKdf - }), + if (endian !== 'le') return; - /** - * Encrypts a message using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {WordArray|string} message The message to encrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {CipherParams} A cipher params object. - * - * @static - * - * @example - * - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password'); - * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL }); - */ - encrypt: function (cipher, message, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); + this._initArray(this.toArray(), base, endian); + }; - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize); + BN.prototype._initNumber = function _initNumber (number, base, endian) { + if (number < 0) { + this.negative = 1; + number = -number; + } + if (number < 0x4000000) { + this.words = [ number & 0x3ffffff ]; + this.length = 1; + } else if (number < 0x10000000000000) { + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff + ]; + this.length = 2; + } else { + assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) + this.words = [ + number & 0x3ffffff, + (number / 0x4000000) & 0x3ffffff, + 1 + ]; + this.length = 3; + } - // Add IV to config - cfg.iv = derivedParams.iv; + if (endian !== 'le') return; - // Encrypt - var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg); + // Reverse the bytes + this._initArray(this.toArray(), base, endian); + }; - // Mix in derived params - ciphertext.mixIn(derivedParams); + BN.prototype._initArray = function _initArray (number, base, endian) { + // Perhaps a Uint8Array + assert(typeof number.length === 'number'); + if (number.length <= 0) { + this.words = [ 0 ]; + this.length = 1; + return this; + } - return ciphertext; - }, + this.length = Math.ceil(number.length / 3); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } - /** - * Decrypts serialized ciphertext using a password. - * - * @param {Cipher} cipher The cipher algorithm to use. - * @param {CipherParams|string} ciphertext The ciphertext to decrypt. - * @param {string} password The password. - * @param {Object} cfg (Optional) The configuration options to use for this operation. - * - * @return {WordArray} The plaintext. - * - * @static - * - * @example - * - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL }); - * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL }); - */ - decrypt: function (cipher, ciphertext, password, cfg) { - // Apply config defaults - cfg = this.cfg.extend(cfg); + var j, w; + var off = 0; + if (endian === 'be') { + for (i = number.length - 1, j = 0; i >= 0; i -= 3) { + w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } else if (endian === 'le') { + for (i = 0, j = 0; i < number.length; i += 3) { + w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + } + return this.strip(); + }; - // Convert string to CipherParams - ciphertext = this._parse(ciphertext, cfg.format); + function parseHex (str, start, end) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; - // Derive key and other params - var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt); + r <<= 4; - // Add IV to config - cfg.iv = derivedParams.iv; + // 'a' - 'f' + if (c >= 49 && c <= 54) { + r |= c - 49 + 0xa; - // Decrypt - var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg); + // 'A' - 'F' + } else if (c >= 17 && c <= 22) { + r |= c - 17 + 0xa; - return plaintext; - } - }); - }()); + // '0' - '9' + } else { + r |= c & 0xf; + } + } + return r; + } + BN.prototype._parseHex = function _parseHex (number, start) { + // Create possibly bigger array to ensure that it fits the number + this.length = Math.ceil((number.length - start) / 6); + this.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + this.words[i] = 0; + } -})); -},{"./core":324}],324:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(); - } - else if (typeof define === "function" && define.amd) { - // AMD - define([], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(); - } -}(this, function () { + var j, w; + // Scan 24-bit chunks and add them to the number + var off = 0; + for (i = number.length - 6, j = 0; i >= start; i -= 6) { + w = parseHex(number, i, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + off += 24; + if (off >= 26) { + off -= 26; + j++; + } + } + if (i + 6 !== start) { + w = parseHex(number, start, i + 6); + this.words[j] |= (w << off) & 0x3ffffff; + this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; + } + this.strip(); + }; - /** - * CryptoJS core components. - */ - var CryptoJS = CryptoJS || (function (Math, undefined) { - /** - * CryptoJS namespace. - */ - var C = {}; + function parseBase (str, start, end, mul) { + var r = 0; + var len = Math.min(str.length, end); + for (var i = start; i < len; i++) { + var c = str.charCodeAt(i) - 48; - /** - * Library namespace. - */ - var C_lib = C.lib = {}; + r *= mul; - /** - * Base object for prototypal inheritance. - */ - var Base = C_lib.Base = (function () { - function F() {} + // 'a' + if (c >= 49) { + r += c - 49 + 0xa; - return { - /** - * Creates a new object that inherits from this object. - * - * @param {Object} overrides Properties to copy into the new object. - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * field: 'value', - * - * method: function () { - * } - * }); - */ - extend: function (overrides) { - // Spawn - F.prototype = this; - var subtype = new F(); + // 'A' + } else if (c >= 17) { + r += c - 17 + 0xa; - // Augment - if (overrides) { - subtype.mixIn(overrides); - } + // '0' - '9' + } else { + r += c; + } + } + return r; + } - // Create default initializer - if (!subtype.hasOwnProperty('init')) { - subtype.init = function () { - subtype.$super.init.apply(this, arguments); - }; - } + BN.prototype._parseBase = function _parseBase (number, base, start) { + // Initialize as zero + this.words = [ 0 ]; + this.length = 1; - // Initializer's prototype is the subtype object - subtype.init.prototype = subtype; + // Find length of limb in base + for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { + limbLen++; + } + limbLen--; + limbPow = (limbPow / base) | 0; - // Reference supertype - subtype.$super = this; + var total = number.length - start; + var mod = total % limbLen; + var end = Math.min(total, total - mod) + start; - return subtype; - }, + var word = 0; + for (var i = start; i < end; i += limbLen) { + word = parseBase(number, i, i + limbLen, base); - /** - * Extends this object and runs the init method. - * Arguments to create() will be passed to init(). - * - * @return {Object} The new object. - * - * @static - * - * @example - * - * var instance = MyType.create(); - */ - create: function () { - var instance = this.extend(); - instance.init.apply(instance, arguments); + this.imuln(limbPow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } - return instance; - }, + if (mod !== 0) { + var pow = 1; + word = parseBase(number, i, number.length, base); - /** - * Initializes a newly created object. - * Override this method to add some logic when your objects are created. - * - * @example - * - * var MyType = CryptoJS.lib.Base.extend({ - * init: function () { - * // ... - * } - * }); - */ - init: function () { - }, + for (i = 0; i < mod; i++) { + pow *= base; + } - /** - * Copies properties into this object. - * - * @param {Object} properties The properties to mix in. - * - * @example - * - * MyType.mixIn({ - * field: 'value' - * }); - */ - mixIn: function (properties) { - for (var propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - this[propertyName] = properties[propertyName]; - } - } + this.imuln(pow); + if (this.words[0] + word < 0x4000000) { + this.words[0] += word; + } else { + this._iaddn(word); + } + } + }; - // IE won't copy toString using the loop above - if (properties.hasOwnProperty('toString')) { - this.toString = properties.toString; - } - }, + BN.prototype.copy = function copy (dest) { + dest.words = new Array(this.length); + for (var i = 0; i < this.length; i++) { + dest.words[i] = this.words[i]; + } + dest.length = this.length; + dest.negative = this.negative; + dest.red = this.red; + }; - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = instance.clone(); - */ - clone: function () { - return this.init.prototype.extend(this); - } - }; - }()); + BN.prototype.clone = function clone () { + var r = new BN(null); + this.copy(r); + return r; + }; - /** - * An array of 32-bit words. - * - * @property {Array} words The array of 32-bit words. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var WordArray = C_lib.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of 32-bit words. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.create(); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]); - * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6); - */ - init: function (words, sigBytes) { - words = this.words = words || []; + BN.prototype._expand = function _expand (size) { + while (this.length < size) { + this.words[this.length++] = 0; + } + return this; + }; - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 4; - } - }, + // Remove leading `0` from `this` + BN.prototype.strip = function strip () { + while (this.length > 1 && this.words[this.length - 1] === 0) { + this.length--; + } + return this._normSign(); + }; - /** - * Converts this word array to a string. - * - * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex - * - * @return {string} The stringified word array. - * - * @example - * - * var string = wordArray + ''; - * var string = wordArray.toString(); - * var string = wordArray.toString(CryptoJS.enc.Utf8); - */ - toString: function (encoder) { - return (encoder || Hex).stringify(this); - }, + BN.prototype._normSign = function _normSign () { + // -0 = 0 + if (this.length === 1 && this.words[0] === 0) { + this.negative = 0; + } + return this; + }; - /** - * Concatenates a word array to this word array. - * - * @param {WordArray} wordArray The word array to append. - * - * @return {WordArray} This word array. - * - * @example - * - * wordArray1.concat(wordArray2); - */ - concat: function (wordArray) { - // Shortcuts - var thisWords = this.words; - var thatWords = wordArray.words; - var thisSigBytes = this.sigBytes; - var thatSigBytes = wordArray.sigBytes; + BN.prototype.inspect = function inspect () { + return (this.red ? ''; + }; - // Clamp excess bits - this.clamp(); + /* - // Concat - if (thisSigBytes % 4) { - // Copy one byte at a time - for (var i = 0; i < thatSigBytes; i++) { - var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8); - } - } else { - // Copy one word at a time - for (var i = 0; i < thatSigBytes; i += 4) { - thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2]; - } - } - this.sigBytes += thatSigBytes; + var zeros = []; + var groupSizes = []; + var groupBases = []; - // Chainable - return this; - }, + var s = ''; + var i = -1; + while (++i < BN.wordSize) { + zeros[i] = s; + s += '0'; + } + groupSizes[0] = 0; + groupSizes[1] = 0; + groupBases[0] = 0; + groupBases[1] = 0; + var base = 2 - 1; + while (++base < 36 + 1) { + var groupSize = 0; + var groupBase = 1; + while (groupBase < (1 << BN.wordSize) / base) { + groupBase *= base; + groupSize += 1; + } + groupSizes[base] = groupSize; + groupBases[base] = groupBase; + } - /** - * Removes insignificant bits. - * - * @example - * - * wordArray.clamp(); - */ - clamp: function () { - // Shortcuts - var words = this.words; - var sigBytes = this.sigBytes; + */ - // Clamp - words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8); - words.length = Math.ceil(sigBytes / 4); - }, + var zeros = [ + '', + '0', + '00', + '000', + '0000', + '00000', + '000000', + '0000000', + '00000000', + '000000000', + '0000000000', + '00000000000', + '000000000000', + '0000000000000', + '00000000000000', + '000000000000000', + '0000000000000000', + '00000000000000000', + '000000000000000000', + '0000000000000000000', + '00000000000000000000', + '000000000000000000000', + '0000000000000000000000', + '00000000000000000000000', + '000000000000000000000000', + '0000000000000000000000000' + ]; - /** - * Creates a copy of this word array. - * - * @return {WordArray} The clone. - * - * @example - * - * var clone = wordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone.words = this.words.slice(0); + var groupSizes = [ + 0, 0, + 25, 16, 12, 11, 10, 9, 8, + 8, 7, 7, 7, 7, 6, 6, + 6, 6, 6, 6, 6, 5, 5, + 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5 + ]; + + var groupBases = [ + 0, 0, + 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, + 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, + 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, + 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, + 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 + ]; + + BN.prototype.toString = function toString (base, padding) { + base = base || 10; + padding = padding | 0 || 1; + + var out; + if (base === 16 || base === 'hex') { + out = ''; + var off = 0; + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = this.words[i]; + var word = (((w << off) | carry) & 0xffffff).toString(16); + carry = (w >>> (24 - off)) & 0xffffff; + if (carry !== 0 || i !== this.length - 1) { + out = zeros[6 - word.length] + word + out; + } else { + out = word + out; + } + off += 2; + if (off >= 26) { + off -= 26; + i--; + } + } + if (carry !== 0) { + out = carry.toString(16) + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } + + if (base === (base | 0) && base >= 2 && base <= 36) { + // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); + var groupSize = groupSizes[base]; + // var groupBase = Math.pow(base, groupSize); + var groupBase = groupBases[base]; + out = ''; + var c = this.clone(); + c.negative = 0; + while (!c.isZero()) { + var r = c.modn(groupBase).toString(base); + c = c.idivn(groupBase); - return clone; - }, + if (!c.isZero()) { + out = zeros[groupSize - r.length] + r + out; + } else { + out = r + out; + } + } + if (this.isZero()) { + out = '0' + out; + } + while (out.length % padding !== 0) { + out = '0' + out; + } + if (this.negative !== 0) { + out = '-' + out; + } + return out; + } - /** - * Creates a word array filled with random bytes. - * - * @param {number} nBytes The number of random bytes to generate. - * - * @return {WordArray} The random word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.lib.WordArray.random(16); - */ - random: function (nBytes) { - var words = []; + assert(false, 'Base should be between 2 and 36'); + }; - var r = (function (m_w) { - var m_w = m_w; - var m_z = 0x3ade68b1; - var mask = 0xffffffff; + BN.prototype.toNumber = function toNumber () { + var length = this.bitLength(); + var ret; + if (length <= 26) { + ret = this.words[0]; + } else if (length <= 52) { + ret = (this.words[1] * 0x4000000) + this.words[0]; + } else if (length === 53) { + // NOTE: at this stage it is known that the top bit is set + ret = 0x10000000000000 + (this.words[1] * 0x4000000) + this.words[0]; + } else { + assert(false, 'Number can only safely store up to 53 bits'); + } + return (this.negative !== 0) ? -ret : ret; + }; - return function () { - m_z = (0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10)) & mask; - m_w = (0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10)) & mask; - var result = ((m_z << 0x10) + m_w) & mask; - result /= 0x100000000; - result += 0.5; - return result * (Math.random() > .5 ? 1 : -1); - } - }); + BN.prototype.toJSON = function toJSON () { + return this.toString(16); + }; - for (var i = 0, rcache; i < nBytes; i += 4) { - var _r = r((rcache || Math.random()) * 0x100000000); + BN.prototype.toBuffer = function toBuffer (endian, length) { + assert(typeof Buffer !== 'undefined'); + return this.toArrayLike(Buffer, endian, length); + }; - rcache = _r() * 0x3ade67b7; - words.push((_r() * 0x100000000) | 0); - } + BN.prototype.toArray = function toArray (endian, length) { + return this.toArrayLike(Array, endian, length); + }; - return new WordArray.init(words, nBytes); - } - }); + BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { + var byteLength = this.byteLength(); + var reqLength = length || Math.max(1, byteLength); + assert(byteLength <= reqLength, 'byte array longer than desired length'); + assert(reqLength > 0, 'Requested array length <= 0'); - /** - * Encoder namespace. - */ - var C_enc = C.enc = {}; + this.strip(); + var littleEndian = endian === 'le'; + var res = new ArrayType(reqLength); - /** - * Hex encoding strategy. - */ - var Hex = C_enc.Hex = { - /** - * Converts a word array to a hex string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The hex string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.enc.Hex.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; + var b, i; + var q = this.clone(); + if (!littleEndian) { + // Assume big-endian + for (i = 0; i < reqLength - byteLength; i++) { + res[i] = 0; + } - // Convert - var hexChars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - hexChars.push((bite >>> 4).toString(16)); - hexChars.push((bite & 0x0f).toString(16)); - } + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); - return hexChars.join(''); - }, + res[reqLength - i - 1] = b; + } + } else { + for (i = 0; !q.isZero(); i++) { + b = q.andln(0xff); + q.iushrn(8); - /** - * Converts a hex string to a word array. - * - * @param {string} hexStr The hex string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Hex.parse(hexString); - */ - parse: function (hexStr) { - // Shortcut - var hexStrLength = hexStr.length; + res[i] = b; + } - // Convert - var words = []; - for (var i = 0; i < hexStrLength; i += 2) { - words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4); - } + for (; i < reqLength; i++) { + res[i] = 0; + } + } - return new WordArray.init(words, hexStrLength / 2); - } - }; + return res; + }; - /** - * Latin1 encoding strategy. - */ - var Latin1 = C_enc.Latin1 = { - /** - * Converts a word array to a Latin1 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Latin1 string. - * - * @static - * - * @example - * - * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; + if (Math.clz32) { + BN.prototype._countBits = function _countBits (w) { + return 32 - Math.clz32(w); + }; + } else { + BN.prototype._countBits = function _countBits (w) { + var t = w; + var r = 0; + if (t >= 0x1000) { + r += 13; + t >>>= 13; + } + if (t >= 0x40) { + r += 7; + t >>>= 7; + } + if (t >= 0x8) { + r += 4; + t >>>= 4; + } + if (t >= 0x02) { + r += 2; + t >>>= 2; + } + return r + t; + }; + } - // Convert - var latin1Chars = []; - for (var i = 0; i < sigBytes; i++) { - var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - latin1Chars.push(String.fromCharCode(bite)); - } + BN.prototype._zeroBits = function _zeroBits (w) { + // Short-cut + if (w === 0) return 26; - return latin1Chars.join(''); - }, + var t = w; + var r = 0; + if ((t & 0x1fff) === 0) { + r += 13; + t >>>= 13; + } + if ((t & 0x7f) === 0) { + r += 7; + t >>>= 7; + } + if ((t & 0xf) === 0) { + r += 4; + t >>>= 4; + } + if ((t & 0x3) === 0) { + r += 2; + t >>>= 2; + } + if ((t & 0x1) === 0) { + r++; + } + return r; + }; - /** - * Converts a Latin1 string to a word array. - * - * @param {string} latin1Str The Latin1 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Latin1.parse(latin1String); - */ - parse: function (latin1Str) { - // Shortcut - var latin1StrLength = latin1Str.length; + // Return number of used bits in a BN + BN.prototype.bitLength = function bitLength () { + var w = this.words[this.length - 1]; + var hi = this._countBits(w); + return (this.length - 1) * 26 + hi; + }; - // Convert - var words = []; - for (var i = 0; i < latin1StrLength; i++) { - words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8); - } + function toBitArray (num) { + var w = new Array(num.bitLength()); - return new WordArray.init(words, latin1StrLength); - } - }; + for (var bit = 0; bit < w.length; bit++) { + var off = (bit / 26) | 0; + var wbit = bit % 26; - /** - * UTF-8 encoding strategy. - */ - var Utf8 = C_enc.Utf8 = { - /** - * Converts a word array to a UTF-8 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-8 string. - * - * @static - * - * @example - * - * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray); - */ - stringify: function (wordArray) { - try { - return decodeURIComponent(escape(Latin1.stringify(wordArray))); - } catch (e) { - throw new Error('Malformed UTF-8 data'); - } - }, + w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; + } - /** - * Converts a UTF-8 string to a word array. - * - * @param {string} utf8Str The UTF-8 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf8.parse(utf8String); - */ - parse: function (utf8Str) { - return Latin1.parse(unescape(encodeURIComponent(utf8Str))); - } - }; + return w; + } - /** - * Abstract buffered block algorithm template. - * - * The property blockSize must be implemented in a concrete subtype. - * - * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0 - */ - var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({ - /** - * Resets this block algorithm's data buffer to its initial state. - * - * @example - * - * bufferedBlockAlgorithm.reset(); - */ - reset: function () { - // Initial values - this._data = new WordArray.init(); - this._nDataBytes = 0; - }, + // Number of trailing zero bits + BN.prototype.zeroBits = function zeroBits () { + if (this.isZero()) return 0; - /** - * Adds new data to this block algorithm's buffer. - * - * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8. - * - * @example - * - * bufferedBlockAlgorithm._append('data'); - * bufferedBlockAlgorithm._append(wordArray); - */ - _append: function (data) { - // Convert string to WordArray, else assume WordArray already - if (typeof data == 'string') { - data = Utf8.parse(data); - } + var r = 0; + for (var i = 0; i < this.length; i++) { + var b = this._zeroBits(this.words[i]); + r += b; + if (b !== 26) break; + } + return r; + }; - // Append - this._data.concat(data); - this._nDataBytes += data.sigBytes; - }, + BN.prototype.byteLength = function byteLength () { + return Math.ceil(this.bitLength() / 8); + }; - /** - * Processes available data blocks. - * - * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype. - * - * @param {boolean} doFlush Whether all blocks and partial blocks should be processed. - * - * @return {WordArray} The processed data. - * - * @example - * - * var processedData = bufferedBlockAlgorithm._process(); - * var processedData = bufferedBlockAlgorithm._process(!!'flush'); - */ - _process: function (doFlush) { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var dataSigBytes = data.sigBytes; - var blockSize = this.blockSize; - var blockSizeBytes = blockSize * 4; + BN.prototype.toTwos = function toTwos (width) { + if (this.negative !== 0) { + return this.abs().inotn(width).iaddn(1); + } + return this.clone(); + }; - // Count blocks ready - var nBlocksReady = dataSigBytes / blockSizeBytes; - if (doFlush) { - // Round up to include partial blocks - nBlocksReady = Math.ceil(nBlocksReady); - } else { - // Round down to include only full blocks, - // less the number of blocks that must remain in the buffer - nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0); - } + BN.prototype.fromTwos = function fromTwos (width) { + if (this.testn(width - 1)) { + return this.notn(width).iaddn(1).ineg(); + } + return this.clone(); + }; - // Count words ready - var nWordsReady = nBlocksReady * blockSize; + BN.prototype.isNeg = function isNeg () { + return this.negative !== 0; + }; - // Count bytes ready - var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); + // Return negative clone of `this` + BN.prototype.neg = function neg () { + return this.clone().ineg(); + }; - // Process blocks - if (nWordsReady) { - for (var offset = 0; offset < nWordsReady; offset += blockSize) { - // Perform concrete-algorithm logic - this._doProcessBlock(dataWords, offset); - } + BN.prototype.ineg = function ineg () { + if (!this.isZero()) { + this.negative ^= 1; + } - // Remove processed words - var processedWords = dataWords.splice(0, nWordsReady); - data.sigBytes -= nBytesReady; - } + return this; + }; - // Return processed words - return new WordArray.init(processedWords, nBytesReady); - }, + // Or `num` with `this` in-place + BN.prototype.iuor = function iuor (num) { + while (this.length < num.length) { + this.words[this.length++] = 0; + } - /** - * Creates a copy of this object. - * - * @return {Object} The clone. - * - * @example - * - * var clone = bufferedBlockAlgorithm.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); - clone._data = this._data.clone(); + for (var i = 0; i < num.length; i++) { + this.words[i] = this.words[i] | num.words[i]; + } - return clone; - }, + return this.strip(); + }; - _minBufferSize: 0 - }); + BN.prototype.ior = function ior (num) { + assert((this.negative | num.negative) === 0); + return this.iuor(num); + }; - /** - * Abstract hasher template. - * - * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits) - */ - var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({ - /** - * Configuration options. - */ - cfg: Base.extend(), + // Or `num` with `this` + BN.prototype.or = function or (num) { + if (this.length > num.length) return this.clone().ior(num); + return num.clone().ior(this); + }; + + BN.prototype.uor = function uor (num) { + if (this.length > num.length) return this.clone().iuor(num); + return num.clone().iuor(this); + }; - /** - * Initializes a newly created hasher. - * - * @param {Object} cfg (Optional) The configuration options to use for this hash computation. - * - * @example - * - * var hasher = CryptoJS.algo.SHA256.create(); - */ - init: function (cfg) { - // Apply config defaults - this.cfg = this.cfg.extend(cfg); + // And `num` with `this` in-place + BN.prototype.iuand = function iuand (num) { + // b = min-length(num, this) + var b; + if (this.length > num.length) { + b = num; + } else { + b = this; + } - // Set initial values - this.reset(); - }, + for (var i = 0; i < b.length; i++) { + this.words[i] = this.words[i] & num.words[i]; + } - /** - * Resets this hasher to its initial state. - * - * @example - * - * hasher.reset(); - */ - reset: function () { - // Reset data buffer - BufferedBlockAlgorithm.reset.call(this); + this.length = b.length; - // Perform concrete-hasher logic - this._doReset(); - }, + return this.strip(); + }; - /** - * Updates this hasher with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {Hasher} This hasher. - * - * @example - * - * hasher.update('message'); - * hasher.update(wordArray); - */ - update: function (messageUpdate) { - // Append - this._append(messageUpdate); + BN.prototype.iand = function iand (num) { + assert((this.negative | num.negative) === 0); + return this.iuand(num); + }; - // Update the hash - this._process(); + // And `num` with `this` + BN.prototype.and = function and (num) { + if (this.length > num.length) return this.clone().iand(num); + return num.clone().iand(this); + }; - // Chainable - return this; - }, + BN.prototype.uand = function uand (num) { + if (this.length > num.length) return this.clone().iuand(num); + return num.clone().iuand(this); + }; - /** - * Finalizes the hash computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The hash. - * - * @example - * - * var hash = hasher.finalize(); - * var hash = hasher.finalize('message'); - * var hash = hasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Final message update - if (messageUpdate) { - this._append(messageUpdate); - } + // Xor `num` with `this` in-place + BN.prototype.iuxor = function iuxor (num) { + // a.length > b.length + var a; + var b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } - // Perform concrete-hasher logic - var hash = this._doFinalize(); + for (var i = 0; i < b.length; i++) { + this.words[i] = a.words[i] ^ b.words[i]; + } - return hash; - }, + if (this !== a) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } - blockSize: 512/32, + this.length = a.length; - /** - * Creates a shortcut function to a hasher's object interface. - * - * @param {Hasher} hasher The hasher to create a helper for. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256); - */ - _createHelper: function (hasher) { - return function (message, cfg) { - return new hasher.init(cfg).finalize(message); - }; - }, + return this.strip(); + }; - /** - * Creates a shortcut function to the HMAC's object interface. - * - * @param {Hasher} hasher The hasher to use in this HMAC helper. - * - * @return {Function} The shortcut function. - * - * @static - * - * @example - * - * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256); - */ - _createHmacHelper: function (hasher) { - return function (message, key) { - return new C_algo.HMAC.init(hasher, key).finalize(message); - }; - } - }); + BN.prototype.ixor = function ixor (num) { + assert((this.negative | num.negative) === 0); + return this.iuxor(num); + }; - /** - * Algorithm namespace. - */ - var C_algo = C.algo = {}; + // Xor `num` with `this` + BN.prototype.xor = function xor (num) { + if (this.length > num.length) return this.clone().ixor(num); + return num.clone().ixor(this); + }; - return C; - }(Math)); + BN.prototype.uxor = function uxor (num) { + if (this.length > num.length) return this.clone().iuxor(num); + return num.clone().iuxor(this); + }; + // Not ``this`` with ``width`` bitwidth + BN.prototype.inotn = function inotn (width) { + assert(typeof width === 'number' && width >= 0); - return CryptoJS; + var bytesNeeded = Math.ceil(width / 26) | 0; + var bitsLeft = width % 26; -})); -},{}],325:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + // Extend the buffer with leading zeroes + this._expand(bytesNeeded); - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; + if (bitsLeft > 0) { + bytesNeeded--; + } - /** - * Base64 encoding strategy. - */ - var Base64 = C_enc.Base64 = { - /** - * Converts a word array to a Base64 string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The Base64 string. - * - * @static - * - * @example - * - * var base64String = CryptoJS.enc.Base64.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; - var map = this._map; + // Handle complete words + for (var i = 0; i < bytesNeeded; i++) { + this.words[i] = ~this.words[i] & 0x3ffffff; + } - // Clamp excess bits - wordArray.clamp(); + // Handle the residue + if (bitsLeft > 0) { + this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); + } - // Convert - var base64Chars = []; - for (var i = 0; i < sigBytes; i += 3) { - var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff; - var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff; - var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff; + // And remove leading zeroes + return this.strip(); + }; - var triplet = (byte1 << 16) | (byte2 << 8) | byte3; + BN.prototype.notn = function notn (width) { + return this.clone().inotn(width); + }; - for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) { - base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f)); - } - } + // Set `bit` of `this` + BN.prototype.setn = function setn (bit, val) { + assert(typeof bit === 'number' && bit >= 0); - // Add padding - var paddingChar = map.charAt(64); - if (paddingChar) { - while (base64Chars.length % 4) { - base64Chars.push(paddingChar); - } - } + var off = (bit / 26) | 0; + var wbit = bit % 26; - return base64Chars.join(''); - }, + this._expand(off + 1); - /** - * Converts a Base64 string to a word array. - * - * @param {string} base64Str The Base64 string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Base64.parse(base64String); - */ - parse: function (base64Str) { - // Shortcuts - var base64StrLength = base64Str.length; - var map = this._map; + if (val) { + this.words[off] = this.words[off] | (1 << wbit); + } else { + this.words[off] = this.words[off] & ~(1 << wbit); + } - // Ignore padding - var paddingChar = map.charAt(64); - if (paddingChar) { - var paddingIndex = base64Str.indexOf(paddingChar); - if (paddingIndex != -1) { - base64StrLength = paddingIndex; - } - } + return this.strip(); + }; - // Convert - var words = []; - var nBytes = 0; - for (var i = 0; i < base64StrLength; i++) { - if (i % 4) { - var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2); - var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2); - var bitsCombined = bits1 | bits2; - words[nBytes >>> 2] |= (bitsCombined) << (24 - (nBytes % 4) * 8); - nBytes++; - } - } + // Add `num` to `this` in-place + BN.prototype.iadd = function iadd (num) { + var r; - return WordArray.create(words, nBytes); - }, + // negative + positive + if (this.negative !== 0 && num.negative === 0) { + this.negative = 0; + r = this.isub(num); + this.negative ^= 1; + return this._normSign(); - _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' - }; - }()); + // positive + negative + } else if (this.negative === 0 && num.negative !== 0) { + num.negative = 0; + r = this.isub(num); + num.negative = 1; + return r._normSign(); + } + // a.length > b.length + var a, b; + if (this.length > num.length) { + a = this; + b = num; + } else { + a = num; + b = this; + } - return CryptoJS.enc.Base64; + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) + (b.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + this.words[i] = r & 0x3ffffff; + carry = r >>> 26; + } -})); -},{"./core":324}],326:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + this.length = a.length; + if (carry !== 0) { + this.words[this.length] = carry; + this.length++; + // Copy the rest of the words + } else if (a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_enc = C.enc; + return this; + }; - /** - * UTF-16 BE encoding strategy. - */ - var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = { - /** - * Converts a word array to a UTF-16 BE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 BE string. - * - * @static - * - * @example - * - * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; + // Add `num` to `this` + BN.prototype.add = function add (num) { + var res; + if (num.negative !== 0 && this.negative === 0) { + num.negative = 0; + res = this.sub(num); + num.negative ^= 1; + return res; + } else if (num.negative === 0 && this.negative !== 0) { + this.negative = 0; + res = num.sub(this); + this.negative = 1; + return res; + } - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff; - utf16Chars.push(String.fromCharCode(codePoint)); - } + if (this.length > num.length) return this.clone().iadd(num); - return utf16Chars.join(''); - }, + return num.clone().iadd(this); + }; - /** - * Converts a UTF-16 BE string to a word array. - * - * @param {string} utf16Str The UTF-16 BE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16.parse(utf16String); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; + // Subtract `num` from `this` in-place + BN.prototype.isub = function isub (num) { + // this - (-num) = this + num + if (num.negative !== 0) { + num.negative = 0; + var r = this.iadd(num); + num.negative = 1; + return r._normSign(); - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16); - } + // -this - num = -(this + num) + } else if (this.negative !== 0) { + this.negative = 0; + this.iadd(num); + this.negative = 1; + return this._normSign(); + } - return WordArray.create(words, utf16StrLength * 2); - } - }; + // At this point both numbers are positive + var cmp = this.cmp(num); - /** - * UTF-16 LE encoding strategy. - */ - C_enc.Utf16LE = { - /** - * Converts a word array to a UTF-16 LE string. - * - * @param {WordArray} wordArray The word array. - * - * @return {string} The UTF-16 LE string. - * - * @static - * - * @example - * - * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray); - */ - stringify: function (wordArray) { - // Shortcuts - var words = wordArray.words; - var sigBytes = wordArray.sigBytes; + // Optimization - zeroify + if (cmp === 0) { + this.negative = 0; + this.length = 1; + this.words[0] = 0; + return this; + } - // Convert - var utf16Chars = []; - for (var i = 0; i < sigBytes; i += 2) { - var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff); - utf16Chars.push(String.fromCharCode(codePoint)); - } + // a > b + var a, b; + if (cmp > 0) { + a = this; + b = num; + } else { + a = num; + b = this; + } - return utf16Chars.join(''); - }, + var carry = 0; + for (var i = 0; i < b.length; i++) { + r = (a.words[i] | 0) - (b.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + for (; carry !== 0 && i < a.length; i++) { + r = (a.words[i] | 0) + carry; + carry = r >> 26; + this.words[i] = r & 0x3ffffff; + } + + // Copy rest of the words + if (carry === 0 && i < a.length && a !== this) { + for (; i < a.length; i++) { + this.words[i] = a.words[i]; + } + } - /** - * Converts a UTF-16 LE string to a word array. - * - * @param {string} utf16Str The UTF-16 LE string. - * - * @return {WordArray} The word array. - * - * @static - * - * @example - * - * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str); - */ - parse: function (utf16Str) { - // Shortcut - var utf16StrLength = utf16Str.length; + this.length = Math.max(this.length, i); - // Convert - var words = []; - for (var i = 0; i < utf16StrLength; i++) { - words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16)); - } + if (a !== this) { + this.negative = 1; + } - return WordArray.create(words, utf16StrLength * 2); - } - }; + return this.strip(); + }; - function swapEndian(word) { - return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff); - } - }()); + // Subtract `num` from `this` + BN.prototype.sub = function sub (num) { + return this.clone().isub(num); + }; + function smallMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + var len = (self.length + num.length) | 0; + out.length = len; + len = (len - 1) | 0; - return CryptoJS.enc.Utf16; + // Peel one iteration (compiler can't do it, because of code complexity) + var a = self.words[0] | 0; + var b = num.words[0] | 0; + var r = a * b; -})); -},{"./core":324}],327:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + var lo = r & 0x3ffffff; + var carry = (r / 0x4000000) | 0; + out.words[0] = lo; - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var MD5 = C_algo.MD5; + for (var k = 1; k < len; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = carry >>> 26; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = (k - j) | 0; + a = self.words[i] | 0; + b = num.words[j] | 0; + r = a * b + rword; + ncarry += (r / 0x4000000) | 0; + rword = r & 0x3ffffff; + } + out.words[k] = rword | 0; + carry = ncarry | 0; + } + if (carry !== 0) { + out.words[k] = carry | 0; + } else { + out.length--; + } - /** - * This key derivation function is meant to conform with EVP_BytesToKey. - * www.openssl.org/docs/crypto/EVP_BytesToKey.html - */ - var EvpKDF = C_algo.EvpKDF = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hash algorithm to use. Default: MD5 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: MD5, - iterations: 1 - }), + return out.strip(); + } - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.EvpKDF.create(); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, + // TODO(indutny): it may be reasonable to omit it for users who don't need + // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit + // multiplication (like elliptic secp256k1). + var comb10MulTo = function comb10MulTo (self, num, out) { + var a = self.words; + var b = num.words; + var o = out.words; + var c = 0; + var lo; + var mid; + var hi; + var a0 = a[0] | 0; + var al0 = a0 & 0x1fff; + var ah0 = a0 >>> 13; + var a1 = a[1] | 0; + var al1 = a1 & 0x1fff; + var ah1 = a1 >>> 13; + var a2 = a[2] | 0; + var al2 = a2 & 0x1fff; + var ah2 = a2 >>> 13; + var a3 = a[3] | 0; + var al3 = a3 & 0x1fff; + var ah3 = a3 >>> 13; + var a4 = a[4] | 0; + var al4 = a4 & 0x1fff; + var ah4 = a4 >>> 13; + var a5 = a[5] | 0; + var al5 = a5 & 0x1fff; + var ah5 = a5 >>> 13; + var a6 = a[6] | 0; + var al6 = a6 & 0x1fff; + var ah6 = a6 >>> 13; + var a7 = a[7] | 0; + var al7 = a7 & 0x1fff; + var ah7 = a7 >>> 13; + var a8 = a[8] | 0; + var al8 = a8 & 0x1fff; + var ah8 = a8 >>> 13; + var a9 = a[9] | 0; + var al9 = a9 & 0x1fff; + var ah9 = a9 >>> 13; + var b0 = b[0] | 0; + var bl0 = b0 & 0x1fff; + var bh0 = b0 >>> 13; + var b1 = b[1] | 0; + var bl1 = b1 & 0x1fff; + var bh1 = b1 >>> 13; + var b2 = b[2] | 0; + var bl2 = b2 & 0x1fff; + var bh2 = b2 >>> 13; + var b3 = b[3] | 0; + var bl3 = b3 & 0x1fff; + var bh3 = b3 >>> 13; + var b4 = b[4] | 0; + var bl4 = b4 & 0x1fff; + var bh4 = b4 >>> 13; + var b5 = b[5] | 0; + var bl5 = b5 & 0x1fff; + var bh5 = b5 >>> 13; + var b6 = b[6] | 0; + var bl6 = b6 & 0x1fff; + var bh6 = b6 >>> 13; + var b7 = b[7] | 0; + var bl7 = b7 & 0x1fff; + var bh7 = b7 >>> 13; + var b8 = b[8] | 0; + var bl8 = b8 & 0x1fff; + var bh8 = b8 >>> 13; + var b9 = b[9] | 0; + var bl9 = b9 & 0x1fff; + var bh9 = b9 >>> 13; - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; + out.negative = self.negative ^ num.negative; + out.length = 19; + /* k = 0 */ + lo = Math.imul(al0, bl0); + mid = Math.imul(al0, bh0); + mid += Math.imul(ah0, bl0); + hi = Math.imul(ah0, bh0); + var w0 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w0 >>> 26); + w0 &= 0x3ffffff; + /* k = 1 */ + lo = Math.imul(al1, bl0); + mid = Math.imul(al1, bh0); + mid += Math.imul(ah1, bl0); + hi = Math.imul(ah1, bh0); + lo += Math.imul(al0, bl1); + mid += Math.imul(al0, bh1); + mid += Math.imul(ah0, bl1); + hi += Math.imul(ah0, bh1); + var w1 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w1 >>> 26); + w1 &= 0x3ffffff; + /* k = 2 */ + lo = Math.imul(al2, bl0); + mid = Math.imul(al2, bh0); + mid += Math.imul(ah2, bl0); + hi = Math.imul(ah2, bh0); + lo += Math.imul(al1, bl1); + mid += Math.imul(al1, bh1); + mid += Math.imul(ah1, bl1); + hi += Math.imul(ah1, bh1); + lo += Math.imul(al0, bl2); + mid += Math.imul(al0, bh2); + mid += Math.imul(ah0, bl2); + hi += Math.imul(ah0, bh2); + var w2 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w2 >>> 26); + w2 &= 0x3ffffff; + /* k = 3 */ + lo = Math.imul(al3, bl0); + mid = Math.imul(al3, bh0); + mid += Math.imul(ah3, bl0); + hi = Math.imul(ah3, bh0); + lo += Math.imul(al2, bl1); + mid += Math.imul(al2, bh1); + mid += Math.imul(ah2, bl1); + hi += Math.imul(ah2, bh1); + lo += Math.imul(al1, bl2); + mid += Math.imul(al1, bh2); + mid += Math.imul(ah1, bl2); + hi += Math.imul(ah1, bh2); + lo += Math.imul(al0, bl3); + mid += Math.imul(al0, bh3); + mid += Math.imul(ah0, bl3); + hi += Math.imul(ah0, bh3); + var w3 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w3 >>> 26); + w3 &= 0x3ffffff; + /* k = 4 */ + lo = Math.imul(al4, bl0); + mid = Math.imul(al4, bh0); + mid += Math.imul(ah4, bl0); + hi = Math.imul(ah4, bh0); + lo += Math.imul(al3, bl1); + mid += Math.imul(al3, bh1); + mid += Math.imul(ah3, bl1); + hi += Math.imul(ah3, bh1); + lo += Math.imul(al2, bl2); + mid += Math.imul(al2, bh2); + mid += Math.imul(ah2, bl2); + hi += Math.imul(ah2, bh2); + lo += Math.imul(al1, bl3); + mid += Math.imul(al1, bh3); + mid += Math.imul(ah1, bl3); + hi += Math.imul(ah1, bh3); + lo += Math.imul(al0, bl4); + mid += Math.imul(al0, bh4); + mid += Math.imul(ah0, bl4); + hi += Math.imul(ah0, bh4); + var w4 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w4 >>> 26); + w4 &= 0x3ffffff; + /* k = 5 */ + lo = Math.imul(al5, bl0); + mid = Math.imul(al5, bh0); + mid += Math.imul(ah5, bl0); + hi = Math.imul(ah5, bh0); + lo += Math.imul(al4, bl1); + mid += Math.imul(al4, bh1); + mid += Math.imul(ah4, bl1); + hi += Math.imul(ah4, bh1); + lo += Math.imul(al3, bl2); + mid += Math.imul(al3, bh2); + mid += Math.imul(ah3, bl2); + hi += Math.imul(ah3, bh2); + lo += Math.imul(al2, bl3); + mid += Math.imul(al2, bh3); + mid += Math.imul(ah2, bl3); + hi += Math.imul(ah2, bh3); + lo += Math.imul(al1, bl4); + mid += Math.imul(al1, bh4); + mid += Math.imul(ah1, bl4); + hi += Math.imul(ah1, bh4); + lo += Math.imul(al0, bl5); + mid += Math.imul(al0, bh5); + mid += Math.imul(ah0, bl5); + hi += Math.imul(ah0, bh5); + var w5 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w5 >>> 26); + w5 &= 0x3ffffff; + /* k = 6 */ + lo = Math.imul(al6, bl0); + mid = Math.imul(al6, bh0); + mid += Math.imul(ah6, bl0); + hi = Math.imul(ah6, bh0); + lo += Math.imul(al5, bl1); + mid += Math.imul(al5, bh1); + mid += Math.imul(ah5, bl1); + hi += Math.imul(ah5, bh1); + lo += Math.imul(al4, bl2); + mid += Math.imul(al4, bh2); + mid += Math.imul(ah4, bl2); + hi += Math.imul(ah4, bh2); + lo += Math.imul(al3, bl3); + mid += Math.imul(al3, bh3); + mid += Math.imul(ah3, bl3); + hi += Math.imul(ah3, bh3); + lo += Math.imul(al2, bl4); + mid += Math.imul(al2, bh4); + mid += Math.imul(ah2, bl4); + hi += Math.imul(ah2, bh4); + lo += Math.imul(al1, bl5); + mid += Math.imul(al1, bh5); + mid += Math.imul(ah1, bl5); + hi += Math.imul(ah1, bh5); + lo += Math.imul(al0, bl6); + mid += Math.imul(al0, bh6); + mid += Math.imul(ah0, bl6); + hi += Math.imul(ah0, bh6); + var w6 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w6 >>> 26); + w6 &= 0x3ffffff; + /* k = 7 */ + lo = Math.imul(al7, bl0); + mid = Math.imul(al7, bh0); + mid += Math.imul(ah7, bl0); + hi = Math.imul(ah7, bh0); + lo += Math.imul(al6, bl1); + mid += Math.imul(al6, bh1); + mid += Math.imul(ah6, bl1); + hi += Math.imul(ah6, bh1); + lo += Math.imul(al5, bl2); + mid += Math.imul(al5, bh2); + mid += Math.imul(ah5, bl2); + hi += Math.imul(ah5, bh2); + lo += Math.imul(al4, bl3); + mid += Math.imul(al4, bh3); + mid += Math.imul(ah4, bl3); + hi += Math.imul(ah4, bh3); + lo += Math.imul(al3, bl4); + mid += Math.imul(al3, bh4); + mid += Math.imul(ah3, bl4); + hi += Math.imul(ah3, bh4); + lo += Math.imul(al2, bl5); + mid += Math.imul(al2, bh5); + mid += Math.imul(ah2, bl5); + hi += Math.imul(ah2, bh5); + lo += Math.imul(al1, bl6); + mid += Math.imul(al1, bh6); + mid += Math.imul(ah1, bl6); + hi += Math.imul(ah1, bh6); + lo += Math.imul(al0, bl7); + mid += Math.imul(al0, bh7); + mid += Math.imul(ah0, bl7); + hi += Math.imul(ah0, bh7); + var w7 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w7 >>> 26); + w7 &= 0x3ffffff; + /* k = 8 */ + lo = Math.imul(al8, bl0); + mid = Math.imul(al8, bh0); + mid += Math.imul(ah8, bl0); + hi = Math.imul(ah8, bh0); + lo += Math.imul(al7, bl1); + mid += Math.imul(al7, bh1); + mid += Math.imul(ah7, bl1); + hi += Math.imul(ah7, bh1); + lo += Math.imul(al6, bl2); + mid += Math.imul(al6, bh2); + mid += Math.imul(ah6, bl2); + hi += Math.imul(ah6, bh2); + lo += Math.imul(al5, bl3); + mid += Math.imul(al5, bh3); + mid += Math.imul(ah5, bl3); + hi += Math.imul(ah5, bh3); + lo += Math.imul(al4, bl4); + mid += Math.imul(al4, bh4); + mid += Math.imul(ah4, bl4); + hi += Math.imul(ah4, bh4); + lo += Math.imul(al3, bl5); + mid += Math.imul(al3, bh5); + mid += Math.imul(ah3, bl5); + hi += Math.imul(ah3, bh5); + lo += Math.imul(al2, bl6); + mid += Math.imul(al2, bh6); + mid += Math.imul(ah2, bl6); + hi += Math.imul(ah2, bh6); + lo += Math.imul(al1, bl7); + mid += Math.imul(al1, bh7); + mid += Math.imul(ah1, bl7); + hi += Math.imul(ah1, bh7); + lo += Math.imul(al0, bl8); + mid += Math.imul(al0, bh8); + mid += Math.imul(ah0, bl8); + hi += Math.imul(ah0, bh8); + var w8 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w8 >>> 26); + w8 &= 0x3ffffff; + /* k = 9 */ + lo = Math.imul(al9, bl0); + mid = Math.imul(al9, bh0); + mid += Math.imul(ah9, bl0); + hi = Math.imul(ah9, bh0); + lo += Math.imul(al8, bl1); + mid += Math.imul(al8, bh1); + mid += Math.imul(ah8, bl1); + hi += Math.imul(ah8, bh1); + lo += Math.imul(al7, bl2); + mid += Math.imul(al7, bh2); + mid += Math.imul(ah7, bl2); + hi += Math.imul(ah7, bh2); + lo += Math.imul(al6, bl3); + mid += Math.imul(al6, bh3); + mid += Math.imul(ah6, bl3); + hi += Math.imul(ah6, bh3); + lo += Math.imul(al5, bl4); + mid += Math.imul(al5, bh4); + mid += Math.imul(ah5, bl4); + hi += Math.imul(ah5, bh4); + lo += Math.imul(al4, bl5); + mid += Math.imul(al4, bh5); + mid += Math.imul(ah4, bl5); + hi += Math.imul(ah4, bh5); + lo += Math.imul(al3, bl6); + mid += Math.imul(al3, bh6); + mid += Math.imul(ah3, bl6); + hi += Math.imul(ah3, bh6); + lo += Math.imul(al2, bl7); + mid += Math.imul(al2, bh7); + mid += Math.imul(ah2, bl7); + hi += Math.imul(ah2, bh7); + lo += Math.imul(al1, bl8); + mid += Math.imul(al1, bh8); + mid += Math.imul(ah1, bl8); + hi += Math.imul(ah1, bh8); + lo += Math.imul(al0, bl9); + mid += Math.imul(al0, bh9); + mid += Math.imul(ah0, bl9); + hi += Math.imul(ah0, bh9); + var w9 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w9 >>> 26); + w9 &= 0x3ffffff; + /* k = 10 */ + lo = Math.imul(al9, bl1); + mid = Math.imul(al9, bh1); + mid += Math.imul(ah9, bl1); + hi = Math.imul(ah9, bh1); + lo += Math.imul(al8, bl2); + mid += Math.imul(al8, bh2); + mid += Math.imul(ah8, bl2); + hi += Math.imul(ah8, bh2); + lo += Math.imul(al7, bl3); + mid += Math.imul(al7, bh3); + mid += Math.imul(ah7, bl3); + hi += Math.imul(ah7, bh3); + lo += Math.imul(al6, bl4); + mid += Math.imul(al6, bh4); + mid += Math.imul(ah6, bl4); + hi += Math.imul(ah6, bh4); + lo += Math.imul(al5, bl5); + mid += Math.imul(al5, bh5); + mid += Math.imul(ah5, bl5); + hi += Math.imul(ah5, bh5); + lo += Math.imul(al4, bl6); + mid += Math.imul(al4, bh6); + mid += Math.imul(ah4, bl6); + hi += Math.imul(ah4, bh6); + lo += Math.imul(al3, bl7); + mid += Math.imul(al3, bh7); + mid += Math.imul(ah3, bl7); + hi += Math.imul(ah3, bh7); + lo += Math.imul(al2, bl8); + mid += Math.imul(al2, bh8); + mid += Math.imul(ah2, bl8); + hi += Math.imul(ah2, bh8); + lo += Math.imul(al1, bl9); + mid += Math.imul(al1, bh9); + mid += Math.imul(ah1, bl9); + hi += Math.imul(ah1, bh9); + var w10 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w10 >>> 26); + w10 &= 0x3ffffff; + /* k = 11 */ + lo = Math.imul(al9, bl2); + mid = Math.imul(al9, bh2); + mid += Math.imul(ah9, bl2); + hi = Math.imul(ah9, bh2); + lo += Math.imul(al8, bl3); + mid += Math.imul(al8, bh3); + mid += Math.imul(ah8, bl3); + hi += Math.imul(ah8, bh3); + lo += Math.imul(al7, bl4); + mid += Math.imul(al7, bh4); + mid += Math.imul(ah7, bl4); + hi += Math.imul(ah7, bh4); + lo += Math.imul(al6, bl5); + mid += Math.imul(al6, bh5); + mid += Math.imul(ah6, bl5); + hi += Math.imul(ah6, bh5); + lo += Math.imul(al5, bl6); + mid += Math.imul(al5, bh6); + mid += Math.imul(ah5, bl6); + hi += Math.imul(ah5, bh6); + lo += Math.imul(al4, bl7); + mid += Math.imul(al4, bh7); + mid += Math.imul(ah4, bl7); + hi += Math.imul(ah4, bh7); + lo += Math.imul(al3, bl8); + mid += Math.imul(al3, bh8); + mid += Math.imul(ah3, bl8); + hi += Math.imul(ah3, bh8); + lo += Math.imul(al2, bl9); + mid += Math.imul(al2, bh9); + mid += Math.imul(ah2, bl9); + hi += Math.imul(ah2, bh9); + var w11 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w11 >>> 26); + w11 &= 0x3ffffff; + /* k = 12 */ + lo = Math.imul(al9, bl3); + mid = Math.imul(al9, bh3); + mid += Math.imul(ah9, bl3); + hi = Math.imul(ah9, bh3); + lo += Math.imul(al8, bl4); + mid += Math.imul(al8, bh4); + mid += Math.imul(ah8, bl4); + hi += Math.imul(ah8, bh4); + lo += Math.imul(al7, bl5); + mid += Math.imul(al7, bh5); + mid += Math.imul(ah7, bl5); + hi += Math.imul(ah7, bh5); + lo += Math.imul(al6, bl6); + mid += Math.imul(al6, bh6); + mid += Math.imul(ah6, bl6); + hi += Math.imul(ah6, bh6); + lo += Math.imul(al5, bl7); + mid += Math.imul(al5, bh7); + mid += Math.imul(ah5, bl7); + hi += Math.imul(ah5, bh7); + lo += Math.imul(al4, bl8); + mid += Math.imul(al4, bh8); + mid += Math.imul(ah4, bl8); + hi += Math.imul(ah4, bh8); + lo += Math.imul(al3, bl9); + mid += Math.imul(al3, bh9); + mid += Math.imul(ah3, bl9); + hi += Math.imul(ah3, bh9); + var w12 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w12 >>> 26); + w12 &= 0x3ffffff; + /* k = 13 */ + lo = Math.imul(al9, bl4); + mid = Math.imul(al9, bh4); + mid += Math.imul(ah9, bl4); + hi = Math.imul(ah9, bh4); + lo += Math.imul(al8, bl5); + mid += Math.imul(al8, bh5); + mid += Math.imul(ah8, bl5); + hi += Math.imul(ah8, bh5); + lo += Math.imul(al7, bl6); + mid += Math.imul(al7, bh6); + mid += Math.imul(ah7, bl6); + hi += Math.imul(ah7, bh6); + lo += Math.imul(al6, bl7); + mid += Math.imul(al6, bh7); + mid += Math.imul(ah6, bl7); + hi += Math.imul(ah6, bh7); + lo += Math.imul(al5, bl8); + mid += Math.imul(al5, bh8); + mid += Math.imul(ah5, bl8); + hi += Math.imul(ah5, bh8); + lo += Math.imul(al4, bl9); + mid += Math.imul(al4, bh9); + mid += Math.imul(ah4, bl9); + hi += Math.imul(ah4, bh9); + var w13 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w13 >>> 26); + w13 &= 0x3ffffff; + /* k = 14 */ + lo = Math.imul(al9, bl5); + mid = Math.imul(al9, bh5); + mid += Math.imul(ah9, bl5); + hi = Math.imul(ah9, bh5); + lo += Math.imul(al8, bl6); + mid += Math.imul(al8, bh6); + mid += Math.imul(ah8, bl6); + hi += Math.imul(ah8, bh6); + lo += Math.imul(al7, bl7); + mid += Math.imul(al7, bh7); + mid += Math.imul(ah7, bl7); + hi += Math.imul(ah7, bh7); + lo += Math.imul(al6, bl8); + mid += Math.imul(al6, bh8); + mid += Math.imul(ah6, bl8); + hi += Math.imul(ah6, bh8); + lo += Math.imul(al5, bl9); + mid += Math.imul(al5, bh9); + mid += Math.imul(ah5, bl9); + hi += Math.imul(ah5, bh9); + var w14 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w14 >>> 26); + w14 &= 0x3ffffff; + /* k = 15 */ + lo = Math.imul(al9, bl6); + mid = Math.imul(al9, bh6); + mid += Math.imul(ah9, bl6); + hi = Math.imul(ah9, bh6); + lo += Math.imul(al8, bl7); + mid += Math.imul(al8, bh7); + mid += Math.imul(ah8, bl7); + hi += Math.imul(ah8, bh7); + lo += Math.imul(al7, bl8); + mid += Math.imul(al7, bh8); + mid += Math.imul(ah7, bl8); + hi += Math.imul(ah7, bh8); + lo += Math.imul(al6, bl9); + mid += Math.imul(al6, bh9); + mid += Math.imul(ah6, bl9); + hi += Math.imul(ah6, bh9); + var w15 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w15 >>> 26); + w15 &= 0x3ffffff; + /* k = 16 */ + lo = Math.imul(al9, bl7); + mid = Math.imul(al9, bh7); + mid += Math.imul(ah9, bl7); + hi = Math.imul(ah9, bh7); + lo += Math.imul(al8, bl8); + mid += Math.imul(al8, bh8); + mid += Math.imul(ah8, bl8); + hi += Math.imul(ah8, bh8); + lo += Math.imul(al7, bl9); + mid += Math.imul(al7, bh9); + mid += Math.imul(ah7, bl9); + hi += Math.imul(ah7, bh9); + var w16 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w16 >>> 26); + w16 &= 0x3ffffff; + /* k = 17 */ + lo = Math.imul(al9, bl8); + mid = Math.imul(al9, bh8); + mid += Math.imul(ah9, bl8); + hi = Math.imul(ah9, bh8); + lo += Math.imul(al8, bl9); + mid += Math.imul(al8, bh9); + mid += Math.imul(ah8, bl9); + hi += Math.imul(ah8, bh9); + var w17 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w17 >>> 26); + w17 &= 0x3ffffff; + /* k = 18 */ + lo = Math.imul(al9, bl9); + mid = Math.imul(al9, bh9); + mid += Math.imul(ah9, bl9); + hi = Math.imul(ah9, bh9); + var w18 = c + lo + ((mid & 0x1fff) << 13); + c = hi + (mid >>> 13) + (w18 >>> 26); + w18 &= 0x3ffffff; + o[0] = w0; + o[1] = w1; + o[2] = w2; + o[3] = w3; + o[4] = w4; + o[5] = w5; + o[6] = w6; + o[7] = w7; + o[8] = w8; + o[9] = w9; + o[10] = w10; + o[11] = w11; + o[12] = w12; + o[13] = w13; + o[14] = w14; + o[15] = w15; + o[16] = w16; + o[17] = w17; + o[18] = w18; + if (c !== 0) { + o[19] = c; + out.length++; + } + return out; + }; - // Init hasher - var hasher = cfg.hasher.create(); + // Polyfill comb + if (!Math.imul) { + comb10MulTo = smallMulTo; + } - // Initial values - var derivedKey = WordArray.create(); + function bigMulTo (self, num, out) { + out.negative = num.negative ^ self.negative; + out.length = self.length + num.length; - // Shortcuts - var derivedKeyWords = derivedKey.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; + var carry = 0; + var hncarry = 0; + for (var k = 0; k < out.length - 1; k++) { + // Sum all words with the same `i + j = k` and accumulate `ncarry`, + // note that ncarry could be >= 0x3ffffff + var ncarry = hncarry; + hncarry = 0; + var rword = carry & 0x3ffffff; + var maxJ = Math.min(k, num.length - 1); + for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { + var i = k - j; + var a = self.words[i] | 0; + var b = num.words[j] | 0; + var r = a * b; - // Generate key - while (derivedKeyWords.length < keySize) { - if (block) { - hasher.update(block); - } - var block = hasher.update(password).finalize(salt); - hasher.reset(); + var lo = r & 0x3ffffff; + ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; + lo = (lo + rword) | 0; + rword = lo & 0x3ffffff; + ncarry = (ncarry + (lo >>> 26)) | 0; - // Iterations - for (var i = 1; i < iterations; i++) { - block = hasher.finalize(block); - hasher.reset(); - } + hncarry += ncarry >>> 26; + ncarry &= 0x3ffffff; + } + out.words[k] = rword; + carry = ncarry; + ncarry = hncarry; + } + if (carry !== 0) { + out.words[k] = carry; + } else { + out.length--; + } - derivedKey.concat(block); - } - derivedKey.sigBytes = keySize * 4; + return out.strip(); + } - return derivedKey; - } - }); + function jumboMulTo (self, num, out) { + var fftm = new FFTM(); + return fftm.mulp(self, num, out); + } - /** - * Derives a key from a password. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.EvpKDF(password, salt); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 }); - * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.EvpKDF = function (password, salt, cfg) { - return EvpKDF.create(cfg).compute(password, salt); - }; - }()); + BN.prototype.mulTo = function mulTo (num, out) { + var res; + var len = this.length + num.length; + if (this.length === 10 && num.length === 10) { + res = comb10MulTo(this, num, out); + } else if (len < 63) { + res = smallMulTo(this, num, out); + } else if (len < 1024) { + res = bigMulTo(this, num, out); + } else { + res = jumboMulTo(this, num, out); + } + return res; + }; - return CryptoJS.EvpKDF; + // Cooley-Tukey algorithm for FFT + // slightly revisited to rely on looping instead of recursion -})); -},{"./core":324,"./hmac":329,"./sha1":348}],328:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + function FFTM (x, y) { + this.x = x; + this.y = y; + } - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var CipherParams = C_lib.CipherParams; - var C_enc = C.enc; - var Hex = C_enc.Hex; - var C_format = C.format; + FFTM.prototype.makeRBT = function makeRBT (N) { + var t = new Array(N); + var l = BN.prototype._countBits(N) - 1; + for (var i = 0; i < N; i++) { + t[i] = this.revBin(i, l, N); + } - var HexFormatter = C_format.Hex = { - /** - * Converts the ciphertext of a cipher params object to a hexadecimally encoded string. - * - * @param {CipherParams} cipherParams The cipher params object. - * - * @return {string} The hexadecimally encoded string. - * - * @static - * - * @example - * - * var hexString = CryptoJS.format.Hex.stringify(cipherParams); - */ - stringify: function (cipherParams) { - return cipherParams.ciphertext.toString(Hex); - }, + return t; + }; - /** - * Converts a hexadecimally encoded ciphertext string to a cipher params object. - * - * @param {string} input The hexadecimally encoded string. - * - * @return {CipherParams} The cipher params object. - * - * @static - * - * @example - * - * var cipherParams = CryptoJS.format.Hex.parse(hexString); - */ - parse: function (input) { - var ciphertext = Hex.parse(input); - return CipherParams.create({ ciphertext: ciphertext }); - } - }; - }()); + // Returns binary-reversed representation of `x` + FFTM.prototype.revBin = function revBin (x, l, N) { + if (x === 0 || x === N - 1) return x; + var rb = 0; + for (var i = 0; i < l; i++) { + rb |= (x & 1) << (l - i - 1); + x >>= 1; + } - return CryptoJS.format.Hex; + return rb; + }; -})); -},{"./cipher-core":323,"./core":324}],329:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + // Performs "tweedling" phase, therefore 'emulating' + // behaviour of the recursive algorithm + FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { + for (var i = 0; i < N; i++) { + rtws[i] = rws[rbt[i]]; + itws[i] = iws[rbt[i]]; + } + }; - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var C_enc = C.enc; - var Utf8 = C_enc.Utf8; - var C_algo = C.algo; + FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { + this.permute(rbt, rws, iws, rtws, itws, N); - /** - * HMAC algorithm. - */ - var HMAC = C_algo.HMAC = Base.extend({ - /** - * Initializes a newly created HMAC. - * - * @param {Hasher} hasher The hash algorithm to use. - * @param {WordArray|string} key The secret key. - * - * @example - * - * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key); - */ - init: function (hasher, key) { - // Init hasher - hasher = this._hasher = new hasher.init(); + for (var s = 1; s < N; s <<= 1) { + var l = s << 1; - // Convert string to WordArray, else assume WordArray already - if (typeof key == 'string') { - key = Utf8.parse(key); - } + var rtwdf = Math.cos(2 * Math.PI / l); + var itwdf = Math.sin(2 * Math.PI / l); - // Shortcuts - var hasherBlockSize = hasher.blockSize; - var hasherBlockSizeBytes = hasherBlockSize * 4; + for (var p = 0; p < N; p += l) { + var rtwdf_ = rtwdf; + var itwdf_ = itwdf; - // Allow arbitrary length keys - if (key.sigBytes > hasherBlockSizeBytes) { - key = hasher.finalize(key); - } + for (var j = 0; j < s; j++) { + var re = rtws[p + j]; + var ie = itws[p + j]; - // Clamp excess bits - key.clamp(); + var ro = rtws[p + j + s]; + var io = itws[p + j + s]; - // Clone key for inner and outer pads - var oKey = this._oKey = key.clone(); - var iKey = this._iKey = key.clone(); + var rx = rtwdf_ * ro - itwdf_ * io; - // Shortcuts - var oKeyWords = oKey.words; - var iKeyWords = iKey.words; + io = rtwdf_ * io + itwdf_ * ro; + ro = rx; - // XOR keys with pad constants - for (var i = 0; i < hasherBlockSize; i++) { - oKeyWords[i] ^= 0x5c5c5c5c; - iKeyWords[i] ^= 0x36363636; - } - oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; + rtws[p + j] = re + ro; + itws[p + j] = ie + io; - // Set initial values - this.reset(); - }, + rtws[p + j + s] = re - ro; + itws[p + j + s] = ie - io; - /** - * Resets this HMAC to its initial state. - * - * @example - * - * hmacHasher.reset(); - */ - reset: function () { - // Shortcut - var hasher = this._hasher; + /* jshint maxdepth : false */ + if (j !== l) { + rx = rtwdf * rtwdf_ - itwdf * itwdf_; - // Reset - hasher.reset(); - hasher.update(this._iKey); - }, + itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; + rtwdf_ = rx; + } + } + } + } + }; - /** - * Updates this HMAC with a message. - * - * @param {WordArray|string} messageUpdate The message to append. - * - * @return {HMAC} This HMAC instance. - * - * @example - * - * hmacHasher.update('message'); - * hmacHasher.update(wordArray); - */ - update: function (messageUpdate) { - this._hasher.update(messageUpdate); + FFTM.prototype.guessLen13b = function guessLen13b (n, m) { + var N = Math.max(m, n) | 1; + var odd = N & 1; + var i = 0; + for (N = N / 2 | 0; N; N = N >>> 1) { + i++; + } - // Chainable - return this; - }, + return 1 << i + 1 + odd; + }; - /** - * Finalizes the HMAC computation. - * Note that the finalize operation is effectively a destructive, read-once operation. - * - * @param {WordArray|string} messageUpdate (Optional) A final message update. - * - * @return {WordArray} The HMAC. - * - * @example - * - * var hmac = hmacHasher.finalize(); - * var hmac = hmacHasher.finalize('message'); - * var hmac = hmacHasher.finalize(wordArray); - */ - finalize: function (messageUpdate) { - // Shortcut - var hasher = this._hasher; + FFTM.prototype.conjugate = function conjugate (rws, iws, N) { + if (N <= 1) return; - // Compute HMAC - var innerHash = hasher.finalize(messageUpdate); - hasher.reset(); - var hmac = hasher.finalize(this._oKey.clone().concat(innerHash)); + for (var i = 0; i < N / 2; i++) { + var t = rws[i]; - return hmac; - } - }); - }()); + rws[i] = rws[N - i - 1]; + rws[N - i - 1] = t; + t = iws[i]; -})); -},{"./core":324}],330:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./lib-typedarrays"), require("./enc-utf16"), require("./enc-base64"), require("./md5"), require("./sha1"), require("./sha256"), require("./sha224"), require("./sha512"), require("./sha384"), require("./sha3"), require("./ripemd160"), require("./hmac"), require("./pbkdf2"), require("./evpkdf"), require("./cipher-core"), require("./mode-cfb"), require("./mode-ctr"), require("./mode-ctr-gladman"), require("./mode-ofb"), require("./mode-ecb"), require("./pad-ansix923"), require("./pad-iso10126"), require("./pad-iso97971"), require("./pad-zeropadding"), require("./pad-nopadding"), require("./format-hex"), require("./aes"), require("./tripledes"), require("./rc4"), require("./rabbit"), require("./rabbit-legacy")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./lib-typedarrays", "./enc-utf16", "./enc-base64", "./md5", "./sha1", "./sha256", "./sha224", "./sha512", "./sha384", "./sha3", "./ripemd160", "./hmac", "./pbkdf2", "./evpkdf", "./cipher-core", "./mode-cfb", "./mode-ctr", "./mode-ctr-gladman", "./mode-ofb", "./mode-ecb", "./pad-ansix923", "./pad-iso10126", "./pad-iso97971", "./pad-zeropadding", "./pad-nopadding", "./format-hex", "./aes", "./tripledes", "./rc4", "./rabbit", "./rabbit-legacy"], factory); - } - else { - // Global (browser) - root.CryptoJS = factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + iws[i] = -iws[N - i - 1]; + iws[N - i - 1] = -t; + } + }; - return CryptoJS; + FFTM.prototype.normalize13b = function normalize13b (ws, N) { + var carry = 0; + for (var i = 0; i < N / 2; i++) { + var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + + Math.round(ws[2 * i] / N) + + carry; -})); -},{"./aes":322,"./cipher-core":323,"./core":324,"./enc-base64":325,"./enc-utf16":326,"./evpkdf":327,"./format-hex":328,"./hmac":329,"./lib-typedarrays":331,"./md5":332,"./mode-cfb":333,"./mode-ctr":335,"./mode-ctr-gladman":334,"./mode-ecb":336,"./mode-ofb":337,"./pad-ansix923":338,"./pad-iso10126":339,"./pad-iso97971":340,"./pad-nopadding":341,"./pad-zeropadding":342,"./pbkdf2":343,"./rabbit":345,"./rabbit-legacy":344,"./rc4":346,"./ripemd160":347,"./sha1":348,"./sha224":349,"./sha256":350,"./sha3":351,"./sha384":352,"./sha512":353,"./tripledes":354,"./x64-core":355}],331:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + ws[i] = w & 0x3ffffff; - (function () { - // Check if typed arrays are supported - if (typeof ArrayBuffer != 'function') { - return; - } + if (w < 0x4000000) { + carry = 0; + } else { + carry = w / 0x4000000 | 0; + } + } - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; + return ws; + }; - // Reference original init - var superInit = WordArray.init; + FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { + var carry = 0; + for (var i = 0; i < len; i++) { + carry = carry + (ws[i] | 0); - // Augment WordArray.init to handle typed arrays - var subInit = WordArray.init = function (typedArray) { - // Convert buffers to uint8 - if (typedArray instanceof ArrayBuffer) { - typedArray = new Uint8Array(typedArray); - } + rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; + rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; + } - // Convert other array views to uint8 - if ( - typedArray instanceof Int8Array || - (typeof Uint8ClampedArray !== "undefined" && typedArray instanceof Uint8ClampedArray) || - typedArray instanceof Int16Array || - typedArray instanceof Uint16Array || - typedArray instanceof Int32Array || - typedArray instanceof Uint32Array || - typedArray instanceof Float32Array || - typedArray instanceof Float64Array - ) { - typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength); - } + // Pad with zeroes + for (i = 2 * len; i < N; ++i) { + rws[i] = 0; + } - // Handle Uint8Array - if (typedArray instanceof Uint8Array) { - // Shortcut - var typedArrayByteLength = typedArray.byteLength; + assert(carry === 0); + assert((carry & ~0x1fff) === 0); + }; - // Extract bytes - var words = []; - for (var i = 0; i < typedArrayByteLength; i++) { - words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8); - } + FFTM.prototype.stub = function stub (N) { + var ph = new Array(N); + for (var i = 0; i < N; i++) { + ph[i] = 0; + } - // Initialize this word array - superInit.call(this, words, typedArrayByteLength); - } else { - // Else call normal init - superInit.apply(this, arguments); - } - }; + return ph; + }; - subInit.prototype = WordArray; - }()); + FFTM.prototype.mulp = function mulp (x, y, out) { + var N = 2 * this.guessLen13b(x.length, y.length); + var rbt = this.makeRBT(N); - return CryptoJS.lib.WordArray; + var _ = this.stub(N); -})); -},{"./core":324}],332:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + var rws = new Array(N); + var rwst = new Array(N); + var iwst = new Array(N); - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; + var nrws = new Array(N); + var nrwst = new Array(N); + var niwst = new Array(N); - // Constants table - var T = []; + var rmws = out.words; + rmws.length = N; - // Compute constants - (function () { - for (var i = 0; i < 64; i++) { - T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0; - } - }()); + this.convert13b(x.words, x.length, rws, N); + this.convert13b(y.words, y.length, nrws, N); - /** - * MD5 hash algorithm. - */ - var MD5 = C_algo.MD5 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476 - ]); - }, + this.transform(rws, _, rwst, iwst, N, rbt); + this.transform(nrws, _, nrwst, niwst, N, rbt); - _doProcessBlock: function (M, offset) { - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; + for (var i = 0; i < N; i++) { + var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; + iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; + rwst[i] = rx; + } - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } + this.conjugate(rwst, iwst, N); + this.transform(rwst, iwst, rmws, _, N, rbt); + this.conjugate(rmws, _, N); + this.normalize13b(rmws, N); - // Shortcuts - var H = this._hash.words; + out.negative = x.negative ^ y.negative; + out.length = x.length + y.length; + return out.strip(); + }; - var M_offset_0 = M[offset + 0]; - var M_offset_1 = M[offset + 1]; - var M_offset_2 = M[offset + 2]; - var M_offset_3 = M[offset + 3]; - var M_offset_4 = M[offset + 4]; - var M_offset_5 = M[offset + 5]; - var M_offset_6 = M[offset + 6]; - var M_offset_7 = M[offset + 7]; - var M_offset_8 = M[offset + 8]; - var M_offset_9 = M[offset + 9]; - var M_offset_10 = M[offset + 10]; - var M_offset_11 = M[offset + 11]; - var M_offset_12 = M[offset + 12]; - var M_offset_13 = M[offset + 13]; - var M_offset_14 = M[offset + 14]; - var M_offset_15 = M[offset + 15]; + // Multiply `this` by `num` + BN.prototype.mul = function mul (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return this.mulTo(num, out); + }; - // Working varialbes - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; + // Multiply employing FFT + BN.prototype.mulf = function mulf (num) { + var out = new BN(null); + out.words = new Array(this.length + num.length); + return jumboMulTo(this, num, out); + }; - // Computation - a = FF(a, b, c, d, M_offset_0, 7, T[0]); - d = FF(d, a, b, c, M_offset_1, 12, T[1]); - c = FF(c, d, a, b, M_offset_2, 17, T[2]); - b = FF(b, c, d, a, M_offset_3, 22, T[3]); - a = FF(a, b, c, d, M_offset_4, 7, T[4]); - d = FF(d, a, b, c, M_offset_5, 12, T[5]); - c = FF(c, d, a, b, M_offset_6, 17, T[6]); - b = FF(b, c, d, a, M_offset_7, 22, T[7]); - a = FF(a, b, c, d, M_offset_8, 7, T[8]); - d = FF(d, a, b, c, M_offset_9, 12, T[9]); - c = FF(c, d, a, b, M_offset_10, 17, T[10]); - b = FF(b, c, d, a, M_offset_11, 22, T[11]); - a = FF(a, b, c, d, M_offset_12, 7, T[12]); - d = FF(d, a, b, c, M_offset_13, 12, T[13]); - c = FF(c, d, a, b, M_offset_14, 17, T[14]); - b = FF(b, c, d, a, M_offset_15, 22, T[15]); + // In-place Multiplication + BN.prototype.imul = function imul (num) { + return this.clone().mulTo(num, this); + }; - a = GG(a, b, c, d, M_offset_1, 5, T[16]); - d = GG(d, a, b, c, M_offset_6, 9, T[17]); - c = GG(c, d, a, b, M_offset_11, 14, T[18]); - b = GG(b, c, d, a, M_offset_0, 20, T[19]); - a = GG(a, b, c, d, M_offset_5, 5, T[20]); - d = GG(d, a, b, c, M_offset_10, 9, T[21]); - c = GG(c, d, a, b, M_offset_15, 14, T[22]); - b = GG(b, c, d, a, M_offset_4, 20, T[23]); - a = GG(a, b, c, d, M_offset_9, 5, T[24]); - d = GG(d, a, b, c, M_offset_14, 9, T[25]); - c = GG(c, d, a, b, M_offset_3, 14, T[26]); - b = GG(b, c, d, a, M_offset_8, 20, T[27]); - a = GG(a, b, c, d, M_offset_13, 5, T[28]); - d = GG(d, a, b, c, M_offset_2, 9, T[29]); - c = GG(c, d, a, b, M_offset_7, 14, T[30]); - b = GG(b, c, d, a, M_offset_12, 20, T[31]); + BN.prototype.imuln = function imuln (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); - a = HH(a, b, c, d, M_offset_5, 4, T[32]); - d = HH(d, a, b, c, M_offset_8, 11, T[33]); - c = HH(c, d, a, b, M_offset_11, 16, T[34]); - b = HH(b, c, d, a, M_offset_14, 23, T[35]); - a = HH(a, b, c, d, M_offset_1, 4, T[36]); - d = HH(d, a, b, c, M_offset_4, 11, T[37]); - c = HH(c, d, a, b, M_offset_7, 16, T[38]); - b = HH(b, c, d, a, M_offset_10, 23, T[39]); - a = HH(a, b, c, d, M_offset_13, 4, T[40]); - d = HH(d, a, b, c, M_offset_0, 11, T[41]); - c = HH(c, d, a, b, M_offset_3, 16, T[42]); - b = HH(b, c, d, a, M_offset_6, 23, T[43]); - a = HH(a, b, c, d, M_offset_9, 4, T[44]); - d = HH(d, a, b, c, M_offset_12, 11, T[45]); - c = HH(c, d, a, b, M_offset_15, 16, T[46]); - b = HH(b, c, d, a, M_offset_2, 23, T[47]); + // Carry + var carry = 0; + for (var i = 0; i < this.length; i++) { + var w = (this.words[i] | 0) * num; + var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); + carry >>= 26; + carry += (w / 0x4000000) | 0; + // NOTE: lo is 27bit maximum + carry += lo >>> 26; + this.words[i] = lo & 0x3ffffff; + } - a = II(a, b, c, d, M_offset_0, 6, T[48]); - d = II(d, a, b, c, M_offset_7, 10, T[49]); - c = II(c, d, a, b, M_offset_14, 15, T[50]); - b = II(b, c, d, a, M_offset_5, 21, T[51]); - a = II(a, b, c, d, M_offset_12, 6, T[52]); - d = II(d, a, b, c, M_offset_3, 10, T[53]); - c = II(c, d, a, b, M_offset_10, 15, T[54]); - b = II(b, c, d, a, M_offset_1, 21, T[55]); - a = II(a, b, c, d, M_offset_8, 6, T[56]); - d = II(d, a, b, c, M_offset_15, 10, T[57]); - c = II(c, d, a, b, M_offset_6, 15, T[58]); - b = II(b, c, d, a, M_offset_13, 21, T[59]); - a = II(a, b, c, d, M_offset_4, 6, T[60]); - d = II(d, a, b, c, M_offset_11, 10, T[61]); - c = II(c, d, a, b, M_offset_2, 15, T[62]); - b = II(b, c, d, a, M_offset_9, 21, T[63]); + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - }, + return this; + }; - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; + BN.prototype.muln = function muln (num) { + return this.clone().imuln(num); + }; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; + // `this` * `this` + BN.prototype.sqr = function sqr () { + return this.mul(this); + }; - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); + // `this` * `this` in-place + BN.prototype.isqr = function isqr () { + return this.imul(this.clone()); + }; - var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000); - var nBitsTotalL = nBitsTotal; - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = ( - (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) | - (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00) - ); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) | - (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00) - ); + // Math.pow(`this`, `num`) + BN.prototype.pow = function pow (num) { + var w = toBitArray(num); + if (w.length === 0) return new BN(1); - data.sigBytes = (dataWords.length + 1) * 4; + // Skip leading zeroes + var res = this; + for (var i = 0; i < w.length; i++, res = res.sqr()) { + if (w[i] !== 0) break; + } - // Hash final blocks - this._process(); + if (++i < w.length) { + for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { + if (w[i] === 0) continue; - // Shortcuts - var hash = this._hash; - var H = hash.words; + res = res.mul(q); + } + } - // Swap endian - for (var i = 0; i < 4; i++) { - // Shortcut - var H_i = H[i]; + return res; + }; - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } + // Shift-left in-place + BN.prototype.iushln = function iushln (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; + var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + var i; - // Return final computed hash - return hash; - }, + if (r !== 0) { + var carry = 0; - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); + for (i = 0; i < this.length; i++) { + var newCarry = this.words[i] & carryMask; + var c = ((this.words[i] | 0) - newCarry) << r; + this.words[i] = c | carry; + carry = newCarry >>> (26 - r); + } - return clone; - } - }); + if (carry) { + this.words[i] = carry; + this.length++; + } + } - function FF(a, b, c, d, x, s, t) { - var n = a + ((b & c) | (~b & d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } + if (s !== 0) { + for (i = this.length - 1; i >= 0; i--) { + this.words[i + s] = this.words[i]; + } - function GG(a, b, c, d, x, s, t) { - var n = a + ((b & d) | (c & ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } + for (i = 0; i < s; i++) { + this.words[i] = 0; + } - function HH(a, b, c, d, x, s, t) { - var n = a + (b ^ c ^ d) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } + this.length += s; + } - function II(a, b, c, d, x, s, t) { - var n = a + (c ^ (b | ~d)) + x + t; - return ((n << s) | (n >>> (32 - s))) + b; - } + return this.strip(); + }; - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.MD5('message'); - * var hash = CryptoJS.MD5(wordArray); - */ - C.MD5 = Hasher._createHelper(MD5); + BN.prototype.ishln = function ishln (bits) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushln(bits); + }; - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacMD5(message, key); - */ - C.HmacMD5 = Hasher._createHmacHelper(MD5); - }(Math)); + // Shift-right in-place + // NOTE: `hint` is a lowest bit before trailing zeroes + // NOTE: if `extended` is present - it will be filled with destroyed bits + BN.prototype.iushrn = function iushrn (bits, hint, extended) { + assert(typeof bits === 'number' && bits >= 0); + var h; + if (hint) { + h = (hint - (hint % 26)) / 26; + } else { + h = 0; + } + + var r = bits % 26; + var s = Math.min((bits - r) / 26, this.length); + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + var maskedWords = extended; + h -= s; + h = Math.max(0, h); + + // Extended mode, copy masked part + if (maskedWords) { + for (var i = 0; i < s; i++) { + maskedWords.words[i] = this.words[i]; + } + maskedWords.length = s; + } + + if (s === 0) { + // No-op, we should not move anything at all + } else if (this.length > s) { + this.length -= s; + for (i = 0; i < this.length; i++) { + this.words[i] = this.words[i + s]; + } + } else { + this.words[0] = 0; + this.length = 1; + } - return CryptoJS.MD5; + var carry = 0; + for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { + var word = this.words[i] | 0; + this.words[i] = (carry << (26 - r)) | (word >>> r); + carry = word & mask; + } -})); -},{"./core":324}],333:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + // Push carried bits as a mask + if (maskedWords && carry !== 0) { + maskedWords.words[maskedWords.length++] = carry; + } - /** - * Cipher Feedback block mode. - */ - CryptoJS.mode.CFB = (function () { - var CFB = CryptoJS.lib.BlockCipherMode.extend(); + if (this.length === 0) { + this.words[0] = 0; + this.length = 1; + } - CFB.Encryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; + return this.strip(); + }; - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + BN.prototype.ishrn = function ishrn (bits, hint, extended) { + // TODO(indutny): implement me + assert(this.negative === 0); + return this.iushrn(bits, hint, extended); + }; - // Remember this block to use with next block - this._prevBlock = words.slice(offset, offset + blockSize); - } - }); + // Shift-left + BN.prototype.shln = function shln (bits) { + return this.clone().ishln(bits); + }; - CFB.Decryptor = CFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher; - var blockSize = cipher.blockSize; + BN.prototype.ushln = function ushln (bits) { + return this.clone().iushln(bits); + }; - // Remember this block to use with next block - var thisBlock = words.slice(offset, offset + blockSize); + // Shift-right + BN.prototype.shrn = function shrn (bits) { + return this.clone().ishrn(bits); + }; - generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher); + BN.prototype.ushrn = function ushrn (bits) { + return this.clone().iushrn(bits); + }; - // This block becomes the previous block - this._prevBlock = thisBlock; - } - }); + // Test if n bit is set + BN.prototype.testn = function testn (bit) { + assert(typeof bit === 'number' && bit >= 0); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; - function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) { - // Shortcut - var iv = this._iv; + // Fast case: bit is much higher than all existing words + if (this.length <= s) return false; - // Generate keystream - if (iv) { - var keystream = iv.slice(0); + // Check bit and return + var w = this.words[s]; - // Remove IV for subsequent blocks - this._iv = undefined; - } else { - var keystream = this._prevBlock; - } - cipher.encryptBlock(keystream, 0); + return !!(w & q); + }; - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } + // Return only lowers bits of number (in-place) + BN.prototype.imaskn = function imaskn (bits) { + assert(typeof bits === 'number' && bits >= 0); + var r = bits % 26; + var s = (bits - r) / 26; - return CFB; - }()); + assert(this.negative === 0, 'imaskn works only with positive numbers'); + if (r !== 0) { + s++; + } + this.length = Math.min(s, this.length); - return CryptoJS.mode.CFB; + if (r !== 0) { + var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); + this.words[this.length - 1] &= mask; + } -})); -},{"./cipher-core":323,"./core":324}],334:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + return this.strip(); + }; - /** @preserve - * Counter block mode compatible with Dr Brian Gladman fileenc.c - * derived from CryptoJS.mode.CTR - * Jan Hruby jhruby.web@gmail.com - */ - CryptoJS.mode.CTRGladman = (function () { - var CTRGladman = CryptoJS.lib.BlockCipherMode.extend(); - - function incWord(word) - { - if (((word >> 24) & 0xff) === 0xff) { //overflow - var b1 = (word >> 16)&0xff; - var b2 = (word >> 8)&0xff; - var b3 = word & 0xff; - - if (b1 === 0xff) // overflow b1 - { - b1 = 0; - if (b2 === 0xff) - { - b2 = 0; - if (b3 === 0xff) - { - b3 = 0; - } - else - { - ++b3; - } - } - else - { - ++b2; - } - } - else - { - ++b1; - } + // Return only lowers bits of number + BN.prototype.maskn = function maskn (bits) { + return this.clone().imaskn(bits); + }; - word = 0; - word += (b1 << 16); - word += (b2 << 8); - word += b3; - } - else - { - word += (0x01 << 24); - } - return word; - } + // Add plain number `num` to `this` + BN.prototype.iaddn = function iaddn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.isubn(-num); - function incCounter(counter) - { - if ((counter[0] = incWord(counter[0])) === 0) - { - // encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8 - counter[1] = incWord(counter[1]); - } - return counter; - } + // Possible sign change + if (this.negative !== 0) { + if (this.length === 1 && (this.words[0] | 0) < num) { + this.words[0] = num - (this.words[0] | 0); + this.negative = 0; + return this; + } - var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; + this.negative = 0; + this.isubn(num); + this.negative = 1; + return this; + } - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); + // Add without checks + return this._iaddn(num); + }; - // Remove IV for subsequent blocks - this._iv = undefined; - } + BN.prototype._iaddn = function _iaddn (num) { + this.words[0] += num; - incCounter(counter); + // Carry + for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { + this.words[i] -= 0x4000000; + if (i === this.length - 1) { + this.words[i + 1] = 1; + } else { + this.words[i + 1]++; + } + } + this.length = Math.max(this.length, i + 1); - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); + return this; + }; - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); + // Subtract plain number `num` from `this` + BN.prototype.isubn = function isubn (num) { + assert(typeof num === 'number'); + assert(num < 0x4000000); + if (num < 0) return this.iaddn(-num); - CTRGladman.Decryptor = Encryptor; + if (this.negative !== 0) { + this.negative = 0; + this.iaddn(num); + this.negative = 1; + return this; + } - return CTRGladman; - }()); + this.words[0] -= num; + if (this.length === 1 && this.words[0] < 0) { + this.words[0] = -this.words[0]; + this.negative = 1; + } else { + // Carry + for (var i = 0; i < this.length && this.words[i] < 0; i++) { + this.words[i] += 0x4000000; + this.words[i + 1] -= 1; + } + } + return this.strip(); + }; + BN.prototype.addn = function addn (num) { + return this.clone().iaddn(num); + }; - return CryptoJS.mode.CTRGladman; + BN.prototype.subn = function subn (num) { + return this.clone().isubn(num); + }; -})); -},{"./cipher-core":323,"./core":324}],335:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + BN.prototype.iabs = function iabs () { + this.negative = 0; - /** - * Counter block mode. - */ - CryptoJS.mode.CTR = (function () { - var CTR = CryptoJS.lib.BlockCipherMode.extend(); + return this; + }; - var Encryptor = CTR.Encryptor = CTR.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var counter = this._counter; + BN.prototype.abs = function abs () { + return this.clone().iabs(); + }; - // Generate keystream - if (iv) { - counter = this._counter = iv.slice(0); + BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { + var len = num.length + shift; + var i; - // Remove IV for subsequent blocks - this._iv = undefined; - } - var keystream = counter.slice(0); - cipher.encryptBlock(keystream, 0); + this._expand(len); - // Increment counter - counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0 + var w; + var carry = 0; + for (i = 0; i < num.length; i++) { + w = (this.words[i + shift] | 0) + carry; + var right = (num.words[i] | 0) * mul; + w -= right & 0x3ffffff; + carry = (w >> 26) - ((right / 0x4000000) | 0); + this.words[i + shift] = w & 0x3ffffff; + } + for (; i < this.length - shift; i++) { + w = (this.words[i + shift] | 0) + carry; + carry = w >> 26; + this.words[i + shift] = w & 0x3ffffff; + } - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); + if (carry === 0) return this.strip(); - CTR.Decryptor = Encryptor; + // Subtraction overflow + assert(carry === -1); + carry = 0; + for (i = 0; i < this.length; i++) { + w = -(this.words[i] | 0) + carry; + carry = w >> 26; + this.words[i] = w & 0x3ffffff; + } + this.negative = 1; - return CTR; - }()); + return this.strip(); + }; + BN.prototype._wordDiv = function _wordDiv (num, mode) { + var shift = this.length - num.length; - return CryptoJS.mode.CTR; + var a = this.clone(); + var b = num; -})); -},{"./cipher-core":323,"./core":324}],336:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + // Normalize + var bhi = b.words[b.length - 1] | 0; + var bhiBits = this._countBits(bhi); + shift = 26 - bhiBits; + if (shift !== 0) { + b = b.ushln(shift); + a.iushln(shift); + bhi = b.words[b.length - 1] | 0; + } - /** - * Electronic Codebook block mode. - */ - CryptoJS.mode.ECB = (function () { - var ECB = CryptoJS.lib.BlockCipherMode.extend(); + // Initialize quotient + var m = a.length - b.length; + var q; - ECB.Encryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.encryptBlock(words, offset); - } - }); + if (mode !== 'mod') { + q = new BN(null); + q.length = m + 1; + q.words = new Array(q.length); + for (var i = 0; i < q.length; i++) { + q.words[i] = 0; + } + } - ECB.Decryptor = ECB.extend({ - processBlock: function (words, offset) { - this._cipher.decryptBlock(words, offset); - } - }); + var diff = a.clone()._ishlnsubmul(b, 1, m); + if (diff.negative === 0) { + a = diff; + if (q) { + q.words[m] = 1; + } + } - return ECB; - }()); + for (var j = m - 1; j >= 0; j--) { + var qj = (a.words[b.length + j] | 0) * 0x4000000 + + (a.words[b.length + j - 1] | 0); + // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max + // (0x7ffffff) + qj = Math.min((qj / bhi) | 0, 0x3ffffff); - return CryptoJS.mode.ECB; + a._ishlnsubmul(b, qj, j); + while (a.negative !== 0) { + qj--; + a.negative = 0; + a._ishlnsubmul(b, 1, j); + if (!a.isZero()) { + a.negative ^= 1; + } + } + if (q) { + q.words[j] = qj; + } + } + if (q) { + q.strip(); + } + a.strip(); -})); -},{"./cipher-core":323,"./core":324}],337:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + // Denormalize + if (mode !== 'div' && shift !== 0) { + a.iushrn(shift); + } - /** - * Output Feedback block mode. - */ - CryptoJS.mode.OFB = (function () { - var OFB = CryptoJS.lib.BlockCipherMode.extend(); + return { + div: q || null, + mod: a + }; + }; - var Encryptor = OFB.Encryptor = OFB.extend({ - processBlock: function (words, offset) { - // Shortcuts - var cipher = this._cipher - var blockSize = cipher.blockSize; - var iv = this._iv; - var keystream = this._keystream; + // NOTE: 1) `mode` can be set to `mod` to request mod only, + // to `div` to request div only, or be absent to + // request both div & mod + // 2) `positive` is true if unsigned mod is requested + BN.prototype.divmod = function divmod (num, mode, positive) { + assert(!num.isZero()); - // Generate keystream - if (iv) { - keystream = this._keystream = iv.slice(0); + if (this.isZero()) { + return { + div: new BN(0), + mod: new BN(0) + }; + } - // Remove IV for subsequent blocks - this._iv = undefined; - } - cipher.encryptBlock(keystream, 0); + var div, mod, res; + if (this.negative !== 0 && num.negative === 0) { + res = this.neg().divmod(num, mode); - // Encrypt - for (var i = 0; i < blockSize; i++) { - words[offset + i] ^= keystream[i]; - } - } - }); + if (mode !== 'mod') { + div = res.div.neg(); + } - OFB.Decryptor = Encryptor; + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.iadd(num); + } + } - return OFB; - }()); + return { + div: div, + mod: mod + }; + } + if (this.negative === 0 && num.negative !== 0) { + res = this.divmod(num.neg(), mode); - return CryptoJS.mode.OFB; + if (mode !== 'mod') { + div = res.div.neg(); + } -})); -},{"./cipher-core":323,"./core":324}],338:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + return { + div: div, + mod: res.mod + }; + } - /** - * ANSI X.923 padding strategy. - */ - CryptoJS.pad.AnsiX923 = { - pad: function (data, blockSize) { - // Shortcuts - var dataSigBytes = data.sigBytes; - var blockSizeBytes = blockSize * 4; - - // Count padding bytes - var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes; - - // Compute last byte position - var lastBytePos = dataSigBytes + nPaddingBytes - 1; - - // Pad - data.clamp(); - data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8); - data.sigBytes += nPaddingBytes; - }, - - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; - - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; + if ((this.negative & num.negative) !== 0) { + res = this.neg().divmod(num.neg(), mode); + if (mode !== 'div') { + mod = res.mod.neg(); + if (positive && mod.negative !== 0) { + mod.isub(num); + } + } - return CryptoJS.pad.Ansix923; + return { + div: res.div, + mod: mod + }; + } -})); -},{"./cipher-core":323,"./core":324}],339:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + // Both numbers are positive at this point - /** - * ISO 10126 padding strategy. - */ - CryptoJS.pad.Iso10126 = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; + // Strip both numbers to approximate shift value + if (num.length > this.length || this.cmp(num) < 0) { + return { + div: new BN(0), + mod: this + }; + } - // Count padding bytes - var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes; + // Very short reduction + if (num.length === 1) { + if (mode === 'div') { + return { + div: this.divn(num.words[0]), + mod: null + }; + } - // Pad - data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)). - concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1)); - }, + if (mode === 'mod') { + return { + div: null, + mod: new BN(this.modn(num.words[0])) + }; + } - unpad: function (data) { - // Get number of padding bytes from last byte - var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff; + return { + div: this.divn(num.words[0]), + mod: new BN(this.modn(num.words[0])) + }; + } - // Remove padding - data.sigBytes -= nPaddingBytes; - } - }; + return this._wordDiv(num, mode); + }; + // Find `this` / `num` + BN.prototype.div = function div (num) { + return this.divmod(num, 'div', false).div; + }; - return CryptoJS.pad.Iso10126; + // Find `this` % `num` + BN.prototype.mod = function mod (num) { + return this.divmod(num, 'mod', false).mod; + }; -})); -},{"./cipher-core":323,"./core":324}],340:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + BN.prototype.umod = function umod (num) { + return this.divmod(num, 'mod', true).mod; + }; - /** - * ISO/IEC 9797-1 Padding Method 2. - */ - CryptoJS.pad.Iso97971 = { - pad: function (data, blockSize) { - // Add 0x80 byte - data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1)); + // Find Round(`this` / `num`) + BN.prototype.divRound = function divRound (num) { + var dm = this.divmod(num); - // Zero pad the rest - CryptoJS.pad.ZeroPadding.pad(data, blockSize); - }, + // Fast case - exact division + if (dm.mod.isZero()) return dm.div; - unpad: function (data) { - // Remove zero padding - CryptoJS.pad.ZeroPadding.unpad(data); + var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; - // Remove one more byte -- the 0x80 byte - data.sigBytes--; - } - }; + var half = num.ushrn(1); + var r2 = num.andln(1); + var cmp = mod.cmp(half); + // Round down + if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; - return CryptoJS.pad.Iso97971; + // Round up + return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); + }; -})); -},{"./cipher-core":323,"./core":324}],341:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + BN.prototype.modn = function modn (num) { + assert(num <= 0x3ffffff); + var p = (1 << 26) % num; - /** - * A noop padding strategy. - */ - CryptoJS.pad.NoPadding = { - pad: function () { - }, + var acc = 0; + for (var i = this.length - 1; i >= 0; i--) { + acc = (p * acc + (this.words[i] | 0)) % num; + } - unpad: function () { - } - }; + return acc; + }; + // In-place division by number + BN.prototype.idivn = function idivn (num) { + assert(num <= 0x3ffffff); - return CryptoJS.pad.NoPadding; + var carry = 0; + for (var i = this.length - 1; i >= 0; i--) { + var w = (this.words[i] | 0) + carry * 0x4000000; + this.words[i] = (w / num) | 0; + carry = w % num; + } -})); -},{"./cipher-core":323,"./core":324}],342:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + return this.strip(); + }; - /** - * Zero padding strategy. - */ - CryptoJS.pad.ZeroPadding = { - pad: function (data, blockSize) { - // Shortcut - var blockSizeBytes = blockSize * 4; - - // Pad - data.clamp(); - data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes); - }, - - unpad: function (data) { - // Shortcut - var dataWords = data.words; - - // Unpad - var i = data.sigBytes - 1; - while (!((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) { - i--; - } - data.sigBytes = i + 1; - } - }; + BN.prototype.divn = function divn (num) { + return this.clone().idivn(num); + }; + BN.prototype.egcd = function egcd (p) { + assert(p.negative === 0); + assert(!p.isZero()); - return CryptoJS.pad.ZeroPadding; + var x = this; + var y = p.clone(); -})); -},{"./cipher-core":323,"./core":324}],343:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha1"), require("./hmac")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha1", "./hmac"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + if (x.negative !== 0) { + x = x.umod(p); + } else { + x = x.clone(); + } - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA1 = C_algo.SHA1; - var HMAC = C_algo.HMAC; + // A * x + B * y = x + var A = new BN(1); + var B = new BN(0); - /** - * Password-Based Key Derivation Function 2 algorithm. - */ - var PBKDF2 = C_algo.PBKDF2 = Base.extend({ - /** - * Configuration options. - * - * @property {number} keySize The key size in words to generate. Default: 4 (128 bits) - * @property {Hasher} hasher The hasher to use. Default: SHA1 - * @property {number} iterations The number of iterations to perform. Default: 1 - */ - cfg: Base.extend({ - keySize: 128/32, - hasher: SHA1, - iterations: 1 - }), + // C * x + D * y = y + var C = new BN(0); + var D = new BN(1); - /** - * Initializes a newly created key derivation function. - * - * @param {Object} cfg (Optional) The configuration options to use for the derivation. - * - * @example - * - * var kdf = CryptoJS.algo.PBKDF2.create(); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 }); - * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 }); - */ - init: function (cfg) { - this.cfg = this.cfg.extend(cfg); - }, + var g = 0; - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * - * @return {WordArray} The derived key. - * - * @example - * - * var key = kdf.compute(password, salt); - */ - compute: function (password, salt) { - // Shortcut - var cfg = this.cfg; + while (x.isEven() && y.isEven()) { + x.iushrn(1); + y.iushrn(1); + ++g; + } - // Init HMAC - var hmac = HMAC.create(cfg.hasher, password); + var yp = y.clone(); + var xp = x.clone(); - // Initial values - var derivedKey = WordArray.create(); - var blockIndex = WordArray.create([0x00000001]); + while (!x.isZero()) { + for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + x.iushrn(i); + while (i-- > 0) { + if (A.isOdd() || B.isOdd()) { + A.iadd(yp); + B.isub(xp); + } - // Shortcuts - var derivedKeyWords = derivedKey.words; - var blockIndexWords = blockIndex.words; - var keySize = cfg.keySize; - var iterations = cfg.iterations; + A.iushrn(1); + B.iushrn(1); + } + } - // Generate key - while (derivedKeyWords.length < keySize) { - var block = hmac.update(salt).finalize(blockIndex); - hmac.reset(); + for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + y.iushrn(j); + while (j-- > 0) { + if (C.isOdd() || D.isOdd()) { + C.iadd(yp); + D.isub(xp); + } - // Shortcuts - var blockWords = block.words; - var blockWordsLength = blockWords.length; + C.iushrn(1); + D.iushrn(1); + } + } - // Iterations - var intermediate = block; - for (var i = 1; i < iterations; i++) { - intermediate = hmac.finalize(intermediate); - hmac.reset(); + if (x.cmp(y) >= 0) { + x.isub(y); + A.isub(C); + B.isub(D); + } else { + y.isub(x); + C.isub(A); + D.isub(B); + } + } - // Shortcut - var intermediateWords = intermediate.words; + return { + a: C, + b: D, + gcd: y.iushln(g) + }; + }; - // XOR intermediate with block - for (var j = 0; j < blockWordsLength; j++) { - blockWords[j] ^= intermediateWords[j]; - } - } + // This is reduced incarnation of the binary EEA + // above, designated to invert members of the + // _prime_ fields F(p) at a maximal speed + BN.prototype._invmp = function _invmp (p) { + assert(p.negative === 0); + assert(!p.isZero()); - derivedKey.concat(block); - blockIndexWords[0]++; - } - derivedKey.sigBytes = keySize * 4; + var a = this; + var b = p.clone(); - return derivedKey; - } - }); + if (a.negative !== 0) { + a = a.umod(p); + } else { + a = a.clone(); + } - /** - * Computes the Password-Based Key Derivation Function 2. - * - * @param {WordArray|string} password The password. - * @param {WordArray|string} salt A salt. - * @param {Object} cfg (Optional) The configuration options to use for this computation. - * - * @return {WordArray} The derived key. - * - * @static - * - * @example - * - * var key = CryptoJS.PBKDF2(password, salt); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 }); - * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 }); - */ - C.PBKDF2 = function (password, salt, cfg) { - return PBKDF2.create(cfg).compute(password, salt); - }; - }()); + var x1 = new BN(1); + var x2 = new BN(0); + var delta = b.clone(); - return CryptoJS.PBKDF2; + while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { + for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); + if (i > 0) { + a.iushrn(i); + while (i-- > 0) { + if (x1.isOdd()) { + x1.iadd(delta); + } -})); -},{"./core":324,"./hmac":329,"./sha1":348}],344:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + x1.iushrn(1); + } + } - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; + for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); + if (j > 0) { + b.iushrn(j); + while (j-- > 0) { + if (x2.isOdd()) { + x2.iadd(delta); + } - // Reusable objects - var S = []; - var C_ = []; - var G = []; + x2.iushrn(1); + } + } - /** - * Rabbit stream cipher algorithm. - * - * This is a legacy version that neglected to convert the key to little-endian. - * This error doesn't affect the cipher's security, - * but it does affect its compatibility with other implementations. - */ - var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; - - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } + if (a.cmp(b) >= 0) { + a.isub(b); + x1.isub(x2); + } else { + b.isub(a); + x2.isub(x1); + } + } - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } + var res; + if (a.cmpn(1) === 0) { + res = x1; + } else { + res = x2; + } - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, + if (res.cmpn(0) < 0) { + res.iadd(p); + } - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; + return res; + }; - // Iterate the system - nextState.call(this); + BN.prototype.gcd = function gcd (num) { + if (this.isZero()) return num.abs(); + if (num.isZero()) return this.abs(); - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); + var a = this.clone(); + var b = num.clone(); + a.negative = 0; + b.negative = 0; - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + // Remove common factor of two + for (var shift = 0; a.isEven() && b.isEven(); shift++) { + a.iushrn(1); + b.iushrn(1); + } - // Encrypt - M[offset + i] ^= S[i]; - } - }, + do { + while (a.isEven()) { + a.iushrn(1); + } + while (b.isEven()) { + b.iushrn(1); + } + + var r = a.cmp(b); + if (r < 0) { + // Swap `a` and `b` to make `a` always bigger than `b` + var t = a; + a = b; + b = t; + } else if (r === 0 || b.cmpn(1) === 0) { + break; + } - blockSize: 128/32, + a.isub(b); + } while (true); - ivSize: 64/32 - }); + return b.iushln(shift); + }; - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; + // Invert number in the field F(num) + BN.prototype.invm = function invm (num) { + return this.egcd(num).a.umod(num); + }; - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } + BN.prototype.isEven = function isEven () { + return (this.words[0] & 1) === 0; + }; - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } + BN.prototype.isOdd = function isOdd () { + return (this.words[0] & 1) === 1; + }; - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } + // And first word and num + BN.prototype.andln = function andln (num) { + return this.words[0] & num; + }; - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg); - */ - C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy); - }()); + // Increment at the bit position in-line + BN.prototype.bincn = function bincn (bit) { + assert(typeof bit === 'number'); + var r = bit % 26; + var s = (bit - r) / 26; + var q = 1 << r; + // Fast case: bit is much higher than all existing words + if (this.length <= s) { + this._expand(s + 1); + this.words[s] |= q; + return this; + } - return CryptoJS.RabbitLegacy; + // Add bit and propagate, if needed + var carry = q; + for (var i = s; carry !== 0 && i < this.length; i++) { + var w = this.words[i] | 0; + w += carry; + carry = w >>> 26; + w &= 0x3ffffff; + this.words[i] = w; + } + if (carry !== 0) { + this.words[i] = carry; + this.length++; + } + return this; + }; -})); -},{"./cipher-core":323,"./core":324,"./enc-base64":325,"./evpkdf":327,"./md5":332}],345:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + BN.prototype.isZero = function isZero () { + return this.length === 1 && this.words[0] === 0; + }; - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; + BN.prototype.cmpn = function cmpn (num) { + var negative = num < 0; - // Reusable objects - var S = []; - var C_ = []; - var G = []; + if (this.negative !== 0 && !negative) return -1; + if (this.negative === 0 && negative) return 1; - /** - * Rabbit stream cipher algorithm - */ - var Rabbit = C_algo.Rabbit = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var K = this._key.words; - var iv = this.cfg.iv; + this.strip(); - // Swap endian - for (var i = 0; i < 4; i++) { - K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) | - (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00); - } + var res; + if (this.length > 1) { + res = 1; + } else { + if (negative) { + num = -num; + } - // Generate initial state values - var X = this._X = [ - K[0], (K[3] << 16) | (K[2] >>> 16), - K[1], (K[0] << 16) | (K[3] >>> 16), - K[2], (K[1] << 16) | (K[0] >>> 16), - K[3], (K[2] << 16) | (K[1] >>> 16) - ]; - - // Generate initial counter values - var C = this._C = [ - (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff), - (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff), - (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff), - (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff) - ]; - - // Carry bit - this._b = 0; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } + assert(num <= 0x3ffffff, 'Number is too big'); - // Modify the counters - for (var i = 0; i < 8; i++) { - C[i] ^= X[(i + 4) & 7]; - } + var w = this.words[0] | 0; + res = w === num ? 0 : w < num ? -1 : 1; + } + if (this.negative !== 0) return -res | 0; + return res; + }; - // IV setup - if (iv) { - // Shortcuts - var IV = iv.words; - var IV_0 = IV[0]; - var IV_1 = IV[1]; - - // Generate four subvectors - var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00); - var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00); - var i1 = (i0 >>> 16) | (i2 & 0xffff0000); - var i3 = (i2 << 16) | (i0 & 0x0000ffff); - - // Modify counter values - C[0] ^= i0; - C[1] ^= i1; - C[2] ^= i2; - C[3] ^= i3; - C[4] ^= i0; - C[5] ^= i1; - C[6] ^= i2; - C[7] ^= i3; - - // Iterate the system four times - for (var i = 0; i < 4; i++) { - nextState.call(this); - } - } - }, + // Compare two numbers and return: + // 1 - if `this` > `num` + // 0 - if `this` == `num` + // -1 - if `this` < `num` + BN.prototype.cmp = function cmp (num) { + if (this.negative !== 0 && num.negative === 0) return -1; + if (this.negative === 0 && num.negative !== 0) return 1; + + var res = this.ucmp(num); + if (this.negative !== 0) return -res | 0; + return res; + }; - _doProcessBlock: function (M, offset) { - // Shortcut - var X = this._X; + // Unsigned comparison + BN.prototype.ucmp = function ucmp (num) { + // At this point both numbers have the same sign + if (this.length > num.length) return 1; + if (this.length < num.length) return -1; - // Iterate the system - nextState.call(this); + var res = 0; + for (var i = this.length - 1; i >= 0; i--) { + var a = this.words[i] | 0; + var b = num.words[i] | 0; - // Generate four keystream words - S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16); - S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16); - S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16); - S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16); + if (a === b) continue; + if (a < b) { + res = -1; + } else if (a > b) { + res = 1; + } + break; + } + return res; + }; - for (var i = 0; i < 4; i++) { - // Swap endian - S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) | - (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00); + BN.prototype.gtn = function gtn (num) { + return this.cmpn(num) === 1; + }; - // Encrypt - M[offset + i] ^= S[i]; - } - }, + BN.prototype.gt = function gt (num) { + return this.cmp(num) === 1; + }; - blockSize: 128/32, + BN.prototype.gten = function gten (num) { + return this.cmpn(num) >= 0; + }; - ivSize: 64/32 - }); + BN.prototype.gte = function gte (num) { + return this.cmp(num) >= 0; + }; - function nextState() { - // Shortcuts - var X = this._X; - var C = this._C; + BN.prototype.ltn = function ltn (num) { + return this.cmpn(num) === -1; + }; - // Save old counter values - for (var i = 0; i < 8; i++) { - C_[i] = C[i]; - } + BN.prototype.lt = function lt (num) { + return this.cmp(num) === -1; + }; - // Calculate new counter values - C[0] = (C[0] + 0x4d34d34d + this._b) | 0; - C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0; - C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0; - C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0; - C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0; - C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0; - C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0; - C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0; - this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0; - - // Calculate the g-values - for (var i = 0; i < 8; i++) { - var gx = X[i] + C[i]; - - // Construct high and low argument for squaring - var ga = gx & 0xffff; - var gb = gx >>> 16; - - // Calculate high and low result of squaring - var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb; - var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0); - - // High XOR low - G[i] = gh ^ gl; - } + BN.prototype.lten = function lten (num) { + return this.cmpn(num) <= 0; + }; - // Calculate new state values - X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0; - X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0; - X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0; - X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0; - X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0; - X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0; - X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0; - X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0; - } + BN.prototype.lte = function lte (num) { + return this.cmp(num) <= 0; + }; - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg); - * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg); - */ - C.Rabbit = StreamCipher._createHelper(Rabbit); - }()); + BN.prototype.eqn = function eqn (num) { + return this.cmpn(num) === 0; + }; + BN.prototype.eq = function eq (num) { + return this.cmp(num) === 0; + }; - return CryptoJS.Rabbit; + // + // A reduce context, could be using montgomery or something better, depending + // on the `m` itself. + // + BN.red = function red (num) { + return new Red(num); + }; -})); -},{"./cipher-core":323,"./core":324,"./enc-base64":325,"./evpkdf":327,"./md5":332}],346:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + BN.prototype.toRed = function toRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + assert(this.negative === 0, 'red works only with positives'); + return ctx.convertTo(this)._forceRed(ctx); + }; - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var StreamCipher = C_lib.StreamCipher; - var C_algo = C.algo; + BN.prototype.fromRed = function fromRed () { + assert(this.red, 'fromRed works only with numbers in reduction context'); + return this.red.convertFrom(this); + }; - /** - * RC4 stream cipher algorithm. - */ - var RC4 = C_algo.RC4 = StreamCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; - var keySigBytes = key.sigBytes; + BN.prototype._forceRed = function _forceRed (ctx) { + this.red = ctx; + return this; + }; - // Init sbox - var S = this._S = []; - for (var i = 0; i < 256; i++) { - S[i] = i; - } + BN.prototype.forceRed = function forceRed (ctx) { + assert(!this.red, 'Already a number in reduction context'); + return this._forceRed(ctx); + }; - // Key setup - for (var i = 0, j = 0; i < 256; i++) { - var keyByteIndex = i % keySigBytes; - var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff; + BN.prototype.redAdd = function redAdd (num) { + assert(this.red, 'redAdd works only with red numbers'); + return this.red.add(this, num); + }; - j = (j + S[i] + keyByte) % 256; + BN.prototype.redIAdd = function redIAdd (num) { + assert(this.red, 'redIAdd works only with red numbers'); + return this.red.iadd(this, num); + }; - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; - } + BN.prototype.redSub = function redSub (num) { + assert(this.red, 'redSub works only with red numbers'); + return this.red.sub(this, num); + }; - // Counters - this._i = this._j = 0; - }, + BN.prototype.redISub = function redISub (num) { + assert(this.red, 'redISub works only with red numbers'); + return this.red.isub(this, num); + }; - _doProcessBlock: function (M, offset) { - M[offset] ^= generateKeystreamWord.call(this); - }, + BN.prototype.redShl = function redShl (num) { + assert(this.red, 'redShl works only with red numbers'); + return this.red.ushl(this, num); + }; - keySize: 256/32, + BN.prototype.redMul = function redMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.mul(this, num); + }; - ivSize: 0 - }); + BN.prototype.redIMul = function redIMul (num) { + assert(this.red, 'redMul works only with red numbers'); + this.red._verify2(this, num); + return this.red.imul(this, num); + }; - function generateKeystreamWord() { - // Shortcuts - var S = this._S; - var i = this._i; - var j = this._j; + BN.prototype.redSqr = function redSqr () { + assert(this.red, 'redSqr works only with red numbers'); + this.red._verify1(this); + return this.red.sqr(this); + }; - // Generate keystream word - var keystreamWord = 0; - for (var n = 0; n < 4; n++) { - i = (i + 1) % 256; - j = (j + S[i]) % 256; + BN.prototype.redISqr = function redISqr () { + assert(this.red, 'redISqr works only with red numbers'); + this.red._verify1(this); + return this.red.isqr(this); + }; - // Swap - var t = S[i]; - S[i] = S[j]; - S[j] = t; + // Square root over p + BN.prototype.redSqrt = function redSqrt () { + assert(this.red, 'redSqrt works only with red numbers'); + this.red._verify1(this); + return this.red.sqrt(this); + }; - keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8); - } + BN.prototype.redInvm = function redInvm () { + assert(this.red, 'redInvm works only with red numbers'); + this.red._verify1(this); + return this.red.invm(this); + }; - // Update counters - this._i = i; - this._j = j; + // Return negative clone of `this` % `red modulo` + BN.prototype.redNeg = function redNeg () { + assert(this.red, 'redNeg works only with red numbers'); + this.red._verify1(this); + return this.red.neg(this); + }; - return keystreamWord; - } + BN.prototype.redPow = function redPow (num) { + assert(this.red && !num.red, 'redPow(normalNum)'); + this.red._verify1(this); + return this.red.pow(this, num); + }; - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg); - */ - C.RC4 = StreamCipher._createHelper(RC4); + // Prime numbers with efficient reduction + var primes = { + k256: null, + p224: null, + p192: null, + p25519: null + }; - /** - * Modified RC4 stream cipher algorithm. - */ - var RC4Drop = C_algo.RC4Drop = RC4.extend({ - /** - * Configuration options. - * - * @property {number} drop The number of keystream words to drop. Default 192 - */ - cfg: RC4.cfg.extend({ - drop: 192 - }), + // Pseudo-Mersenne prime + function MPrime (name, p) { + // P = 2 ^ N - K + this.name = name; + this.p = new BN(p, 16); + this.n = this.p.bitLength(); + this.k = new BN(1).iushln(this.n).isub(this.p); - _doReset: function () { - RC4._doReset.call(this); + this.tmp = this._tmp(); + } - // Drop - for (var i = this.cfg.drop; i > 0; i--) { - generateKeystreamWord.call(this); - } - } - }); + MPrime.prototype._tmp = function _tmp () { + var tmp = new BN(null); + tmp.words = new Array(Math.ceil(this.n / 13)); + return tmp; + }; - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg); - * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg); - */ - C.RC4Drop = StreamCipher._createHelper(RC4Drop); - }()); + MPrime.prototype.ireduce = function ireduce (num) { + // Assumes that `num` is less than `P^2` + // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) + var r = num; + var rlen; + do { + this.split(r, this.tmp); + r = this.imulK(r); + r = r.iadd(this.tmp); + rlen = r.bitLength(); + } while (rlen > this.n); - return CryptoJS.RC4; + var cmp = rlen < this.n ? -1 : r.ucmp(this.p); + if (cmp === 0) { + r.words[0] = 0; + r.length = 1; + } else if (cmp > 0) { + r.isub(this.p); + } else { + r.strip(); + } -})); -},{"./cipher-core":323,"./core":324,"./enc-base64":325,"./evpkdf":327,"./md5":332}],347:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + return r; + }; - /** @preserve - (c) 2012 by Cédric Mesnil. All rights reserved. + MPrime.prototype.split = function split (input, out) { + input.iushrn(this.n, 0, out); + }; - Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + MPrime.prototype.imulK = function imulK (num) { + return num.imul(this.k); + }; - - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + function K256 () { + MPrime.call( + this, + 'k256', + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + } + inherits(K256, MPrime); - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ + K256.prototype.split = function split (input, output) { + // 256 = 9 * 26 + 22 + var mask = 0x3fffff; - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; + var outLen = Math.min(input.length, 9); + for (var i = 0; i < outLen; i++) { + output.words[i] = input.words[i]; + } + output.length = outLen; - // Constants table - var _zl = WordArray.create([ - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, - 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, - 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, - 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]); - var _zr = WordArray.create([ - 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, - 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, - 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, - 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, - 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]); - var _sl = WordArray.create([ - 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, - 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, - 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, - 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, - 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]); - var _sr = WordArray.create([ - 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, - 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, - 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, - 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, - 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]); - - var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]); - var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]); + if (input.length <= 9) { + input.words[0] = 0; + input.length = 1; + return; + } - /** - * RIPEMD160 hash algorithm. - */ - var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({ - _doReset: function () { - this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]); - }, + // Shift by 9 limbs + var prev = input.words[9]; + output.words[output.length++] = prev & mask; - _doProcessBlock: function (M, offset) { + for (i = 10; i < input.length; i++) { + var next = input.words[i] | 0; + input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); + prev = next; + } + prev >>>= 22; + input.words[i - 10] = prev; + if (prev === 0 && input.length > 10) { + input.length -= 10; + } else { + input.length -= 9; + } + }; - // Swap endian - for (var i = 0; i < 16; i++) { - // Shortcuts - var offset_i = offset + i; - var M_offset_i = M[offset_i]; + K256.prototype.imulK = function imulK (num) { + // K = 0x1000003d1 = [ 0x40, 0x3d1 ] + num.words[num.length] = 0; + num.words[num.length + 1] = 0; + num.length += 2; - // Swap - M[offset_i] = ( - (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | - (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) - ); - } - // Shortcut - var H = this._hash.words; - var hl = _hl.words; - var hr = _hr.words; - var zl = _zl.words; - var zr = _zr.words; - var sl = _sl.words; - var sr = _sr.words; + // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 + var lo = 0; + for (var i = 0; i < num.length; i++) { + var w = num.words[i] | 0; + lo += w * 0x3d1; + num.words[i] = lo & 0x3ffffff; + lo = w * 0x40 + ((lo / 0x4000000) | 0); + } - // Working variables - var al, bl, cl, dl, el; - var ar, br, cr, dr, er; - - ar = al = H[0]; - br = bl = H[1]; - cr = cl = H[2]; - dr = dl = H[3]; - er = el = H[4]; - // Computation - var t; - for (var i = 0; i < 80; i += 1) { - t = (al + M[offset+zl[i]])|0; - if (i<16){ - t += f1(bl,cl,dl) + hl[0]; - } else if (i<32) { - t += f2(bl,cl,dl) + hl[1]; - } else if (i<48) { - t += f3(bl,cl,dl) + hl[2]; - } else if (i<64) { - t += f4(bl,cl,dl) + hl[3]; - } else {// if (i<80) { - t += f5(bl,cl,dl) + hl[4]; - } - t = t|0; - t = rotl(t,sl[i]); - t = (t+el)|0; - al = el; - el = dl; - dl = rotl(cl, 10); - cl = bl; - bl = t; - - t = (ar + M[offset+zr[i]])|0; - if (i<16){ - t += f5(br,cr,dr) + hr[0]; - } else if (i<32) { - t += f4(br,cr,dr) + hr[1]; - } else if (i<48) { - t += f3(br,cr,dr) + hr[2]; - } else if (i<64) { - t += f2(br,cr,dr) + hr[3]; - } else {// if (i<80) { - t += f1(br,cr,dr) + hr[4]; - } - t = t|0; - t = rotl(t,sr[i]) ; - t = (t+er)|0; - ar = er; - er = dr; - dr = rotl(cr, 10); - cr = br; - br = t; - } - // Intermediate hash value - t = (H[1] + cl + dr)|0; - H[1] = (H[2] + dl + er)|0; - H[2] = (H[3] + el + ar)|0; - H[3] = (H[4] + al + br)|0; - H[4] = (H[0] + bl + cr)|0; - H[0] = t; - }, + // Fast length reduction + if (num.words[num.length - 1] === 0) { + num.length--; + if (num.words[num.length - 1] === 0) { + num.length--; + } + } + return num; + }; - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; + function P224 () { + MPrime.call( + this, + 'p224', + 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + } + inherits(P224, MPrime); - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; + function P192 () { + MPrime.call( + this, + 'p192', + 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); + } + inherits(P192, MPrime); - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( - (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | - (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) - ); - data.sigBytes = (dataWords.length + 1) * 4; + function P25519 () { + // 2 ^ 255 - 19 + MPrime.call( + this, + '25519', + '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + } + inherits(P25519, MPrime); - // Hash final blocks - this._process(); + P25519.prototype.imulK = function imulK (num) { + // K = 0x13 + var carry = 0; + for (var i = 0; i < num.length; i++) { + var hi = (num.words[i] | 0) * 0x13 + carry; + var lo = hi & 0x3ffffff; + hi >>>= 26; - // Shortcuts - var hash = this._hash; - var H = hash.words; + num.words[i] = lo; + carry = hi; + } + if (carry !== 0) { + num.words[num.length++] = carry; + } + return num; + }; - // Swap endian - for (var i = 0; i < 5; i++) { - // Shortcut - var H_i = H[i]; + // Exported mostly for testing purposes, use plain name instead + BN._prime = function prime (name) { + // Cached version of prime + if (primes[name]) return primes[name]; - // Swap - H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | - (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00); - } + var prime; + if (name === 'k256') { + prime = new K256(); + } else if (name === 'p224') { + prime = new P224(); + } else if (name === 'p192') { + prime = new P192(); + } else if (name === 'p25519') { + prime = new P25519(); + } else { + throw new Error('Unknown prime ' + name); + } + primes[name] = prime; - // Return final computed hash - return hash; - }, + return prime; + }; - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); + // + // Base reduction engine + // + function Red (m) { + if (typeof m === 'string') { + var prime = BN._prime(m); + this.m = prime.p; + this.prime = prime; + } else { + this.m = m; + this.prime = null; + } + } - return clone; - } - }); + Red.prototype._verify1 = function _verify1 (a) { + assert(a.negative === 0, 'red works only with positives'); + assert(a.red, 'red works only with red numbers'); + }; + Red.prototype._verify2 = function _verify2 (a, b) { + assert((a.negative | b.negative) === 0, 'red works only with positives'); + assert(a.red && a.red === b.red, + 'red works only with red numbers'); + }; - function f1(x, y, z) { - return ((x) ^ (y) ^ (z)); + Red.prototype.imod = function imod (a) { + if (this.prime) return this.prime.ireduce(a)._forceRed(this); + return a.umod(this.m)._forceRed(this); + }; - } + Red.prototype.neg = function neg (a) { + if (a.isZero()) { + return a.clone(); + } - function f2(x, y, z) { - return (((x)&(y)) | ((~x)&(z))); - } + return this.m.sub(a)._forceRed(this); + }; - function f3(x, y, z) { - return (((x) | (~(y))) ^ (z)); - } + Red.prototype.add = function add (a, b) { + this._verify2(a, b); - function f4(x, y, z) { - return (((x) & (z)) | ((y)&(~(z)))); - } + var res = a.add(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res._forceRed(this); + }; - function f5(x, y, z) { - return ((x) ^ ((y) |(~(z)))); + Red.prototype.iadd = function iadd (a, b) { + this._verify2(a, b); - } + var res = a.iadd(b); + if (res.cmp(this.m) >= 0) { + res.isub(this.m); + } + return res; + }; - function rotl(x,n) { - return (x<>>(32-n)); - } + Red.prototype.sub = function sub (a, b) { + this._verify2(a, b); + var res = a.sub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res._forceRed(this); + }; - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.RIPEMD160('message'); - * var hash = CryptoJS.RIPEMD160(wordArray); - */ - C.RIPEMD160 = Hasher._createHelper(RIPEMD160); + Red.prototype.isub = function isub (a, b) { + this._verify2(a, b); - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacRIPEMD160(message, key); - */ - C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160); - }(Math)); + var res = a.isub(b); + if (res.cmpn(0) < 0) { + res.iadd(this.m); + } + return res; + }; + Red.prototype.shl = function shl (a, num) { + this._verify1(a); + return this.imod(a.ushln(num)); + }; - return CryptoJS.RIPEMD160; + Red.prototype.imul = function imul (a, b) { + this._verify2(a, b); + return this.imod(a.imul(b)); + }; -})); -},{"./core":324}],348:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + Red.prototype.mul = function mul (a, b) { + this._verify2(a, b); + return this.imod(a.mul(b)); + }; - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; + Red.prototype.isqr = function isqr (a) { + return this.imul(a, a.clone()); + }; - // Reusable object - var W = []; + Red.prototype.sqr = function sqr (a) { + return this.mul(a, a); + }; - /** - * SHA-1 hash algorithm. - */ - var SHA1 = C_algo.SHA1 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0x67452301, 0xefcdab89, - 0x98badcfe, 0x10325476, - 0xc3d2e1f0 - ]); - }, + Red.prototype.sqrt = function sqrt (a) { + if (a.isZero()) return a.clone(); - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; + var mod3 = this.m.andln(3); + assert(mod3 % 2 === 1); - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; + // Fast case + if (mod3 === 3) { + var pow = this.m.add(new BN(1)).iushrn(2); + return this.pow(a, pow); + } - // Computation - for (var i = 0; i < 80; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]; - W[i] = (n << 1) | (n >>> 31); - } + // Tonelli-Shanks algorithm (Totally unoptimized and slow) + // + // Find Q and S, that Q * 2 ^ S = (P - 1) + var q = this.m.subn(1); + var s = 0; + while (!q.isZero() && q.andln(1) === 0) { + s++; + q.iushrn(1); + } + assert(!q.isZero()); - var t = ((a << 5) | (a >>> 27)) + e + W[i]; - if (i < 20) { - t += ((b & c) | (~b & d)) + 0x5a827999; - } else if (i < 40) { - t += (b ^ c ^ d) + 0x6ed9eba1; - } else if (i < 60) { - t += ((b & c) | (b & d) | (c & d)) - 0x70e44324; - } else /* if (i < 80) */ { - t += (b ^ c ^ d) - 0x359d3e2a; - } + var one = new BN(1).toRed(this); + var nOne = one.redNeg(); - e = d; - d = c; - c = (b << 30) | (b >>> 2); - b = a; - a = t; - } + // Find quadratic non-residue + // NOTE: Max is such because of generalized Riemann hypothesis. + var lpow = this.m.subn(1).iushrn(1); + var z = this.m.bitLength(); + z = new BN(2 * z * z).toRed(this); - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - }, + while (this.pow(z, lpow).cmp(nOne) !== 0) { + z.redIAdd(nOne); + } - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; + var c = this.pow(z, q); + var r = this.pow(a, q.addn(1).iushrn(1)); + var t = this.pow(a, q); + var m = s; + while (t.cmp(one) !== 0) { + var tmp = t; + for (var i = 0; tmp.cmp(one) !== 0; i++) { + tmp = tmp.redSqr(); + } + assert(i < m); + var b = this.pow(c, new BN(1).iushln(m - i - 1)); - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; + r = r.redMul(b); + c = b.redSqr(); + t = t.redMul(c); + m = i; + } - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; + return r; + }; - // Hash final blocks - this._process(); + Red.prototype.invm = function invm (a) { + var inv = a._invmp(this.m); + if (inv.negative !== 0) { + inv.negative = 0; + return this.imod(inv).redNeg(); + } else { + return this.imod(inv); + } + }; - // Return final computed hash - return this._hash; - }, + Red.prototype.pow = function pow (a, num) { + if (num.isZero()) return new BN(1); + if (num.cmpn(1) === 0) return a.clone(); - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); + var windowSize = 4; + var wnd = new Array(1 << windowSize); + wnd[0] = new BN(1).toRed(this); + wnd[1] = a; + for (var i = 2; i < wnd.length; i++) { + wnd[i] = this.mul(wnd[i - 1], a); + } - return clone; - } - }); + var res = wnd[0]; + var current = 0; + var currentLen = 0; + var start = num.bitLength() % 26; + if (start === 0) { + start = 26; + } - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA1('message'); - * var hash = CryptoJS.SHA1(wordArray); - */ - C.SHA1 = Hasher._createHelper(SHA1); + for (i = num.length - 1; i >= 0; i--) { + var word = num.words[i]; + for (var j = start - 1; j >= 0; j--) { + var bit = (word >> j) & 1; + if (res !== wnd[0]) { + res = this.sqr(res); + } - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA1(message, key); - */ - C.HmacSHA1 = Hasher._createHmacHelper(SHA1); - }()); + if (bit === 0 && current === 0) { + currentLen = 0; + continue; + } + current <<= 1; + current |= bit; + currentLen++; + if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; - return CryptoJS.SHA1; + res = this.mul(res, wnd[current]); + currentLen = 0; + current = 0; + } + start = 26; + } -})); -},{"./core":324}],349:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./sha256")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./sha256"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + return res; + }; - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var C_algo = C.algo; - var SHA256 = C_algo.SHA256; + Red.prototype.convertTo = function convertTo (num) { + var r = num.umod(this.m); - /** - * SHA-224 hash algorithm. - */ - var SHA224 = C_algo.SHA224 = SHA256.extend({ - _doReset: function () { - this._hash = new WordArray.init([ - 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, - 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 - ]); - }, + return r === num ? r.clone() : r; + }; - _doFinalize: function () { - var hash = SHA256._doFinalize.call(this); + Red.prototype.convertFrom = function convertFrom (num) { + var res = num.clone(); + res.red = null; + return res; + }; - hash.sigBytes -= 4; + // + // Montgomery method engine + // - return hash; - } - }); + BN.mont = function mont (num) { + return new Mont(num); + }; - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA224('message'); - * var hash = CryptoJS.SHA224(wordArray); - */ - C.SHA224 = SHA256._createHelper(SHA224); + function Mont (m) { + Red.call(this, m); - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA224(message, key); - */ - C.HmacSHA224 = SHA256._createHmacHelper(SHA224); - }()); + this.shift = this.m.bitLength(); + if (this.shift % 26 !== 0) { + this.shift += 26 - (this.shift % 26); + } + this.r = new BN(1).iushln(this.shift); + this.r2 = this.imod(this.r.sqr()); + this.rinv = this.r._invmp(this.m); - return CryptoJS.SHA224; + this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); + this.minv = this.minv.umod(this.r); + this.minv = this.r.sub(this.minv); + } + inherits(Mont, Red); -})); -},{"./core":324,"./sha256":350}],350:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + Mont.prototype.convertTo = function convertTo (num) { + return this.imod(num.ushln(this.shift)); + }; - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_algo = C.algo; + Mont.prototype.convertFrom = function convertFrom (num) { + var r = this.imod(num.mul(this.rinv)); + r.red = null; + return r; + }; - // Initialization and round constants tables - var H = []; - var K = []; + Mont.prototype.imul = function imul (a, b) { + if (a.isZero() || b.isZero()) { + a.words[0] = 0; + a.length = 1; + return a; + } - // Compute constants - (function () { - function isPrime(n) { - var sqrtN = Math.sqrt(n); - for (var factor = 2; factor <= sqrtN; factor++) { - if (!(n % factor)) { - return false; - } - } + var t = a.imul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; - return true; - } + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } - function getFractionalBits(n) { - return ((n - (n | 0)) * 0x100000000) | 0; - } + return res._forceRed(this); + }; - var n = 2; - var nPrime = 0; - while (nPrime < 64) { - if (isPrime(n)) { - if (nPrime < 8) { - H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2)); - } - K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3)); + Mont.prototype.mul = function mul (a, b) { + if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); - nPrime++; - } + var t = a.mul(b); + var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); + var u = t.isub(c).iushrn(this.shift); + var res = u; + if (u.cmp(this.m) >= 0) { + res = u.isub(this.m); + } else if (u.cmpn(0) < 0) { + res = u.iadd(this.m); + } - n++; - } - }()); + return res._forceRed(this); + }; - // Reusable object - var W = []; + Mont.prototype.invm = function invm (a) { + // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R + var res = this.imod(a._invmp(this.m).mul(this.r2)); + return res._forceRed(this); + }; +})(typeof module === 'undefined' || module, this); - /** - * SHA-256 hash algorithm. - */ - var SHA256 = C_algo.SHA256 = Hasher.extend({ - _doReset: function () { - this._hash = new WordArray.init(H.slice(0)); - }, +},{}],216:[function(require,module,exports){ +(function (Buffer){ +const assert = require('assert') +/** + * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP + * This function takes in a data, convert it to buffer if not, and a length for recursion + * + * @param {Buffer,String,Integer,Array} data - will be converted to buffer + * @returns {Buffer} - returns buffer of encoded data + **/ +exports.encode = function (input) { + if (input instanceof Array) { + var output = [] + for (var i = 0; i < input.length; i++) { + output.push(exports.encode(input[i])) + } + var buf = Buffer.concat(output) + return Buffer.concat([encodeLength(buf.length, 192), buf]) + } else { + input = toBuffer(input) + if (input.length === 1 && input[0] < 128) { + return input + } else { + return Buffer.concat([encodeLength(input.length, 128), input]) + } + } +} - _doProcessBlock: function (M, offset) { - // Shortcut - var H = this._hash.words; +function safeParseInt (v, base) { + if (v.slice(0, 2) === '00') { + throw (new Error('invalid RLP: extra zeros')) + } - // Working variables - var a = H[0]; - var b = H[1]; - var c = H[2]; - var d = H[3]; - var e = H[4]; - var f = H[5]; - var g = H[6]; - var h = H[7]; + return parseInt(v, base) +} - // Computation - for (var i = 0; i < 64; i++) { - if (i < 16) { - W[i] = M[offset + i] | 0; - } else { - var gamma0x = W[i - 15]; - var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^ - ((gamma0x << 14) | (gamma0x >>> 18)) ^ - (gamma0x >>> 3); +function encodeLength (len, offset) { + if (len < 56) { + return new Buffer([len + offset]) + } else { + var hexLength = intToHex(len) + var lLength = hexLength.length / 2 + var firstByte = intToHex(offset + 55 + lLength) + return new Buffer(firstByte + hexLength, 'hex') + } +} - var gamma1x = W[i - 2]; - var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^ - ((gamma1x << 13) | (gamma1x >>> 19)) ^ - (gamma1x >>> 10); +/** + * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP} + * @param {Buffer,String,Integer,Array} data - will be converted to buffer + * @returns {Array} - returns decode Array of Buffers containg the original message + **/ +exports.decode = function (input, stream) { + if (!input || input.length === 0) { + return new Buffer([]) + } - W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]; - } + input = toBuffer(input) + var decoded = _decode(input) - var ch = (e & f) ^ (~e & g); - var maj = (a & b) ^ (a & c) ^ (b & c); + if (stream) { + return decoded + } - var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22)); - var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25)); + assert.equal(decoded.remainder.length, 0, 'invalid remainder') + return decoded.data +} - var t1 = h + sigma1 + ch + K[i] + W[i]; - var t2 = sigma0 + maj; +exports.getLength = function (input) { + if (!input || input.length === 0) { + return new Buffer([]) + } - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } + input = toBuffer(input) + var firstByte = input[0] + if (firstByte <= 0x7f) { + return input.length + } else if (firstByte <= 0xb7) { + return firstByte - 0x7f + } else if (firstByte <= 0xbf) { + return firstByte - 0xb6 + } else if (firstByte <= 0xf7) { + // a list between 0-55 bytes long + return firstByte - 0xbf + } else { + // a list over 55 bytes long + var llength = firstByte - 0xf6 + var length = safeParseInt(input.slice(1, llength).toString('hex'), 16) + return llength + length + } +} - // Intermediate hash value - H[0] = (H[0] + a) | 0; - H[1] = (H[1] + b) | 0; - H[2] = (H[2] + c) | 0; - H[3] = (H[3] + d) | 0; - H[4] = (H[4] + e) | 0; - H[5] = (H[5] + f) | 0; - H[6] = (H[6] + g) | 0; - H[7] = (H[7] + h) | 0; - }, +function _decode (input) { + var length, llength, data, innerRemainder, d + var decoded = [] + var firstByte = input[0] - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; + if (firstByte <= 0x7f) { + // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding. + return { + data: input.slice(0, 1), + remainder: input.slice(1) + } + } else if (firstByte <= 0xb7) { + // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string + // The range of the first byte is [0x80, 0xb7] + length = firstByte - 0x7f - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; + // set 0x80 null to 0 + if (firstByte === 0x80) { + data = new Buffer([]) + } else { + data = input.slice(1, length) + } - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal; - data.sigBytes = dataWords.length * 4; + if (length === 2 && data[0] < 0x80) { + throw new Error('invalid rlp encoding: byte must be less 0x80') + } - // Hash final blocks - this._process(); + return { + data: data, + remainder: input.slice(length) + } + } else if (firstByte <= 0xbf) { + llength = firstByte - 0xb6 + length = safeParseInt(input.slice(1, llength).toString('hex'), 16) + data = input.slice(llength, length + llength) + if (data.length < length) { + throw (new Error('invalid RLP')) + } - // Return final computed hash - return this._hash; - }, + return { + data: data, + remainder: input.slice(length + llength) + } + } else if (firstByte <= 0xf7) { + // a list between 0-55 bytes long + length = firstByte - 0xbf + innerRemainder = input.slice(1, length) + while (innerRemainder.length) { + d = _decode(innerRemainder) + decoded.push(d.data) + innerRemainder = d.remainder + } - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); + return { + data: decoded, + remainder: input.slice(length) + } + } else { + // a list over 55 bytes long + llength = firstByte - 0xf6 + length = safeParseInt(input.slice(1, llength).toString('hex'), 16) + var totalLength = llength + length + if (totalLength > input.length) { + throw new Error('invalid rlp: total length is larger than the data') + } - return clone; - } - }); + innerRemainder = input.slice(llength, totalLength) + if (innerRemainder.length === 0) { + throw new Error('invalid rlp, List has a invalid length') + } - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA256('message'); - * var hash = CryptoJS.SHA256(wordArray); - */ - C.SHA256 = Hasher._createHelper(SHA256); + while (innerRemainder.length) { + d = _decode(innerRemainder) + decoded.push(d.data) + innerRemainder = d.remainder + } + return { + data: decoded, + remainder: input.slice(totalLength) + } + } +} - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA256(message, key); - */ - C.HmacSHA256 = Hasher._createHmacHelper(SHA256); - }(Math)); +function isHexPrefixed (str) { + return str.slice(0, 2) === '0x' +} +// Removes 0x from a given String +function stripHexPrefix (str) { + if (typeof str !== 'string') { + return str + } + return isHexPrefixed(str) ? str.slice(2) : str +} - return CryptoJS.SHA256; +function intToHex (i) { + var hex = i.toString(16) + if (hex.length % 2) { + hex = '0' + hex + } -})); -},{"./core":324}],351:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + return hex +} - (function (Math) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var C_algo = C.algo; +function padToEven (a) { + if (a.length % 2) a = '0' + a + return a +} - // Constants tables - var RHO_OFFSETS = []; - var PI_INDEXES = []; - var ROUND_CONSTANTS = []; +function intToBuffer (i) { + var hex = intToHex(i) + return new Buffer(hex, 'hex') +} - // Compute Constants - (function () { - // Compute rho offset constants - var x = 1, y = 0; - for (var t = 0; t < 24; t++) { - RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64; +function toBuffer (v) { + if (!Buffer.isBuffer(v)) { + if (typeof v === 'string') { + if (isHexPrefixed(v)) { + v = new Buffer(padToEven(stripHexPrefix(v)), 'hex') + } else { + v = new Buffer(v) + } + } else if (typeof v === 'number') { + if (!v) { + v = new Buffer([]) + } else { + v = intToBuffer(v) + } + } else if (v === null || v === undefined) { + v = new Buffer([]) + } else if (v.toArray) { + // converts a BN to a Buffer + v = new Buffer(v.toArray()) + } else { + throw new Error('invalid type') + } + } + return v +} - var newX = y % 5; - var newY = (2 * x + 3 * y) % 5; - x = newX; - y = newY; - } +}).call(this,require("buffer").Buffer) +},{"assert":7,"buffer":147}],217:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. - // Compute pi index constants - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5; - } - } +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; - // Compute round constants - var LFSR = 0x01; - for (var i = 0; i < 24; i++) { - var roundConstantMsw = 0; - var roundConstantLsw = 0; +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; - for (var j = 0; j < 7; j++) { - if (LFSR & 0x01) { - var bitPosition = (1 << j) - 1; - if (bitPosition < 32) { - roundConstantLsw ^= 1 << bitPosition; - } else /* if (bitPosition >= 32) */ { - roundConstantMsw ^= 1 << (bitPosition - 32); - } - } +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; - // Compute next LFSR - if (LFSR & 0x80) { - // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1 - LFSR = (LFSR << 1) ^ 0x71; - } else { - LFSR <<= 1; - } - } +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; - ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw); - } - }()); +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; - // Reusable objects for temporary values - var T = []; - (function () { - for (var i = 0; i < 25; i++) { - T[i] = X64Word.create(); - } - }()); +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; - /** - * SHA-3 hash algorithm. - */ - var SHA3 = C_algo.SHA3 = Hasher.extend({ - /** - * Configuration options. - * - * @property {number} outputLength - * The desired number of bits in the output hash. - * Only values permitted are: 224, 256, 384, 512. - * Default: 512 - */ - cfg: Hasher.cfg.extend({ - outputLength: 512 - }), + if (!this._events) + this._events = {}; - _doReset: function () { - var state = this._state = [] - for (var i = 0; i < 25; i++) { - state[i] = new X64Word.init(); - } + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } + throw TypeError('Uncaught, unspecified "error" event.'); + } + } - this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32; - }, + handler = this._events[type]; - _doProcessBlock: function (M, offset) { - // Shortcuts - var state = this._state; - var nBlockSizeLanes = this.blockSize / 2; + if (isUndefined(handler)) + return false; - // Absorb - for (var i = 0; i < nBlockSizeLanes; i++) { - // Shortcuts - var M2i = M[offset + 2 * i]; - var M2i1 = M[offset + 2 * i + 1]; + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + handler.apply(this, args); + } + } else if (isObject(handler)) { + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; - // Swap endian - M2i = ( - (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) | - (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00) - ); - M2i1 = ( - (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) | - (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00) - ); + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } - // Absorb message into state - var lane = state[i]; - lane.high ^= M2i1; - lane.low ^= M2i; - } + return true; +}; - // Rounds - for (var round = 0; round < 24; round++) { - // Theta - for (var x = 0; x < 5; x++) { - // Mix column lanes - var tMsw = 0, tLsw = 0; - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - tMsw ^= lane.high; - tLsw ^= lane.low; - } +EventEmitter.prototype.addListener = function(type, listener) { + var m; - // Temporary values - var Tx = T[x]; - Tx.high = tMsw; - Tx.low = tLsw; - } - for (var x = 0; x < 5; x++) { - // Shortcuts - var Tx4 = T[(x + 4) % 5]; - var Tx1 = T[(x + 1) % 5]; - var Tx1Msw = Tx1.high; - var Tx1Lsw = Tx1.low; + if (!isFunction(listener)) + throw TypeError('listener must be a function'); - // Mix surrounding columns - var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31)); - var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31)); - for (var y = 0; y < 5; y++) { - var lane = state[x + 5 * y]; - lane.high ^= tMsw; - lane.low ^= tLsw; - } - } + if (!this._events) + this._events = {}; - // Rho Pi - for (var laneIndex = 1; laneIndex < 25; laneIndex++) { - // Shortcuts - var lane = state[laneIndex]; - var laneMsw = lane.high; - var laneLsw = lane.low; - var rhoOffset = RHO_OFFSETS[laneIndex]; + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); - // Rotate lanes - if (rhoOffset < 32) { - var tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset)); - var tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset)); - } else /* if (rhoOffset >= 32) */ { - var tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset)); - var tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset)); - } + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; - // Transpose lanes - var TPiLane = T[PI_INDEXES[laneIndex]]; - TPiLane.high = tMsw; - TPiLane.low = tLsw; - } + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + var m; + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } - // Rho pi at x = y = 0 - var T0 = T[0]; - var state0 = state[0]; - T0.high = state0.high; - T0.low = state0.low; + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } - // Chi - for (var x = 0; x < 5; x++) { - for (var y = 0; y < 5; y++) { - // Shortcuts - var laneIndex = x + 5 * y; - var lane = state[laneIndex]; - var TLane = T[laneIndex]; - var Tx1Lane = T[((x + 1) % 5) + 5 * y]; - var Tx2Lane = T[((x + 2) % 5) + 5 * y]; + return this; +}; - // Mix rows - lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high); - lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low); - } - } +EventEmitter.prototype.on = EventEmitter.prototype.addListener; - // Iota - var lane = state[0]; - var roundConstant = ROUND_CONSTANTS[round]; - lane.high ^= roundConstant.high; - lane.low ^= roundConstant.low;; - } - }, +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; - var blockSizeBits = this.blockSize * 32; + var fired = false; - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32); - dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80; - data.sigBytes = dataWords.length * 4; + function g() { + this.removeListener(type, g); - // Hash final blocks - this._process(); + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } - // Shortcuts - var state = this._state; - var outputLengthBytes = this.cfg.outputLength / 8; - var outputLengthLanes = outputLengthBytes / 8; + g.listener = listener; + this.on(type, g); - // Squeeze - var hashWords = []; - for (var i = 0; i < outputLengthLanes; i++) { - // Shortcuts - var lane = state[i]; - var laneMsw = lane.high; - var laneLsw = lane.low; + return this; +}; - // Swap endian - laneMsw = ( - (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) | - (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00) - ); - laneLsw = ( - (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) | - (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00) - ); +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; - // Squeeze state to retrieve hash - hashWords.push(laneLsw); - hashWords.push(laneMsw); - } + if (!isFunction(listener)) + throw TypeError('listener must be a function'); - // Return final computed hash - return new WordArray.init(hashWords, outputLengthBytes); - }, + if (!this._events || !this._events[type]) + return this; - clone: function () { - var clone = Hasher.clone.call(this); + list = this._events[type]; + length = list.length; + position = -1; - var state = clone._state = this._state.slice(0); - for (var i = 0; i < 25; i++) { - state[i] = state[i].clone(); - } + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); - return clone; - } - }); + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA3('message'); - * var hash = CryptoJS.SHA3(wordArray); - */ - C.SHA3 = Hasher._createHelper(SHA3); + if (position < 0) + return this; - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA3(message, key); - */ - C.HmacSHA3 = Hasher._createHmacHelper(SHA3); - }(Math)); + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } - return CryptoJS.SHA3; + return this; +}; -})); -},{"./core":324,"./x64-core":355}],352:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core"), require("./sha512")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core", "./sha512"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; - (function () { - // Shortcuts - var C = CryptoJS; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; - var SHA512 = C_algo.SHA512; + if (!this._events) + return this; - /** - * SHA-384 hash algorithm. - */ - var SHA384 = C_algo.SHA384 = SHA512.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507), - new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939), - new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511), - new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4) - ]); - }, + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } - _doFinalize: function () { - var hash = SHA512._doFinalize.call(this); + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } - hash.sigBytes -= 16; + listeners = this._events[type]; - return hash; - } - }); + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA384('message'); - * var hash = CryptoJS.SHA384(wordArray); - */ - C.SHA384 = SHA512._createHelper(SHA384); + return this; +}; - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA384(message, key); - */ - C.HmacSHA384 = SHA512._createHmacHelper(SHA384); - }()); +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; +EventEmitter.listenerCount = function(emitter, type) { + var ret; + if (!emitter._events || !emitter._events[type]) + ret = 0; + else if (isFunction(emitter._events[type])) + ret = 1; + else + ret = emitter._events[type].length; + return ret; +}; - return CryptoJS.SHA384; +function isFunction(arg) { + return typeof arg === 'function'; +} -})); -},{"./core":324,"./sha512":353,"./x64-core":355}],353:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./x64-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./x64-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { +function isNumber(arg) { + return typeof arg === 'number'; +} - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Hasher = C_lib.Hasher; - var C_x64 = C.x64; - var X64Word = C_x64.Word; - var X64WordArray = C_x64.WordArray; - var C_algo = C.algo; +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} - function X64Word_create() { - return X64Word.create.apply(X64Word, arguments); - } +function isUndefined(arg) { + return arg === void 0; +} - // Constants - var K = [ - X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd), - X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc), - X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019), - X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118), - X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe), - X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2), - X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1), - X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694), - X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3), - X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65), - X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483), - X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5), - X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210), - X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4), - X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725), - X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70), - X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926), - X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df), - X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8), - X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b), - X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001), - X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30), - X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910), - X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8), - X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53), - X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8), - X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb), - X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3), - X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60), - X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec), - X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9), - X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b), - X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207), - X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178), - X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6), - X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b), - X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493), - X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c), - X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a), - X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817) - ]; - - // Reusable objects - var W = []; - (function () { - for (var i = 0; i < 80; i++) { - W[i] = X64Word_create(); - } - }()); +},{}],218:[function(require,module,exports){ +(function (Buffer){ +var md5 = require('create-hash/md5') +module.exports = EVP_BytesToKey +function EVP_BytesToKey (password, salt, keyLen, ivLen) { + if (!Buffer.isBuffer(password)) { + password = new Buffer(password, 'binary') + } + if (salt && !Buffer.isBuffer(salt)) { + salt = new Buffer(salt, 'binary') + } + keyLen = keyLen / 8 + ivLen = ivLen || 0 + var ki = 0 + var ii = 0 + var key = new Buffer(keyLen) + var iv = new Buffer(ivLen) + var addmd = 0 + var md_buf + var i + var bufs = [] + while (true) { + if (addmd++ > 0) { + bufs.push(md_buf) + } + bufs.push(password) + if (salt) { + bufs.push(salt) + } + md_buf = md5(Buffer.concat(bufs)) + bufs = [] + i = 0 + if (keyLen > 0) { + while (true) { + if (keyLen === 0) { + break + } + if (i === md_buf.length) { + break + } + key[ki++] = md_buf[i] + keyLen-- + i++ + } + } + if (ivLen > 0 && i !== md_buf.length) { + while (true) { + if (ivLen === 0) { + break + } + if (i === md_buf.length) { + break + } + iv[ii++] = md_buf[i] + ivLen-- + i++ + } + } + if (keyLen === 0 && ivLen === 0) { + break + } + } + for (i = 0; i < md_buf.length; i++) { + md_buf[i] = 0 + } + return { + key: key, + iv: iv + } +} - /** - * SHA-512 hash algorithm. - */ - var SHA512 = C_algo.SHA512 = Hasher.extend({ - _doReset: function () { - this._hash = new X64WordArray.init([ - new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b), - new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1), - new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f), - new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179) - ]); - }, +}).call(this,require("buffer").Buffer) +},{"buffer":147,"create-hash/md5":172}],219:[function(require,module,exports){ +arguments[4][72][0].apply(exports,arguments) +},{"./hash/common":220,"./hash/hmac":221,"./hash/ripemd":222,"./hash/sha":223,"./hash/utils":224,"dup":72}],220:[function(require,module,exports){ +arguments[4][73][0].apply(exports,arguments) +},{"../hash":219,"dup":73}],221:[function(require,module,exports){ +arguments[4][74][0].apply(exports,arguments) +},{"../hash":219,"dup":74}],222:[function(require,module,exports){ +arguments[4][75][0].apply(exports,arguments) +},{"../hash":219,"dup":75}],223:[function(require,module,exports){ +arguments[4][76][0].apply(exports,arguments) +},{"../hash":219,"dup":76}],224:[function(require,module,exports){ +arguments[4][77][0].apply(exports,arguments) +},{"dup":77,"inherits":226}],225:[function(require,module,exports){ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] - _doProcessBlock: function (M, offset) { - // Shortcuts - var H = this._hash.words; + i += d - var H0 = H[0]; - var H1 = H[1]; - var H2 = H[2]; - var H3 = H[3]; - var H4 = H[4]; - var H5 = H[5]; - var H6 = H[6]; - var H7 = H[7]; - - var H0h = H0.high; - var H0l = H0.low; - var H1h = H1.high; - var H1l = H1.low; - var H2h = H2.high; - var H2l = H2.low; - var H3h = H3.high; - var H3l = H3.low; - var H4h = H4.high; - var H4l = H4.low; - var H5h = H5.high; - var H5l = H5.low; - var H6h = H6.high; - var H6l = H6.low; - var H7h = H7.high; - var H7l = H7.low; + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} - // Working variables - var ah = H0h; - var al = H0l; - var bh = H1h; - var bl = H1l; - var ch = H2h; - var cl = H2l; - var dh = H3h; - var dl = H3l; - var eh = H4h; - var el = H4l; - var fh = H5h; - var fl = H5l; - var gh = H6h; - var gl = H6l; - var hh = H7h; - var hl = H7l; + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} - // Rounds - for (var i = 0; i < 80; i++) { - // Shortcut - var Wi = W[i]; + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} - // Extend message - if (i < 16) { - var Wih = Wi.high = M[offset + i * 2] | 0; - var Wil = Wi.low = M[offset + i * 2 + 1] | 0; - } else { - // Gamma0 - var gamma0x = W[i - 15]; - var gamma0xh = gamma0x.high; - var gamma0xl = gamma0x.low; - var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7); - var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25)); - - // Gamma1 - var gamma1x = W[i - 2]; - var gamma1xh = gamma1x.high; - var gamma1xl = gamma1x.low; - var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6); - var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26)); - - // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] - var Wi7 = W[i - 7]; - var Wi7h = Wi7.high; - var Wi7l = Wi7.low; - - var Wi16 = W[i - 16]; - var Wi16h = Wi16.high; - var Wi16l = Wi16.low; - - var Wil = gamma0l + Wi7l; - var Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0); - var Wil = Wil + gamma1l; - var Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0); - var Wil = Wil + Wi16l; - var Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0); - - Wi.high = Wih; - Wi.low = Wil; - } +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 - var chh = (eh & fh) ^ (~eh & gh); - var chl = (el & fl) ^ (~el & gl); - var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch); - var majl = (al & bl) ^ (al & cl) ^ (bl & cl); - - var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7)); - var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7)); - var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9)); - var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9)); - - // t1 = h + sigma1 + ch + K[i] + W[i] - var Ki = K[i]; - var Kih = Ki.high; - var Kil = Ki.low; - - var t1l = hl + sigma1l; - var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0); - var t1l = t1l + chl; - var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0); - var t1l = t1l + Kil; - var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0); - var t1l = t1l + Wil; - var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0); - - // t2 = sigma0 + maj - var t2l = sigma0l + majl; - var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0); - - // Update working variables - hh = gh; - hl = gl; - gh = fh; - gl = fl; - fh = eh; - fl = el; - el = (dl + t1l) | 0; - eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0; - dh = ch; - dl = cl; - ch = bh; - cl = bl; - bh = ah; - bl = al; - al = (t1l + t2l) | 0; - ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0; - } + value = Math.abs(value) - // Intermediate hash value - H0l = H0.low = (H0l + al); - H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0)); - H1l = H1.low = (H1l + bl); - H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0)); - H2l = H2.low = (H2l + cl); - H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0)); - H3l = H3.low = (H3l + dl); - H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0)); - H4l = H4.low = (H4l + el); - H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0)); - H5l = H5.low = (H5l + fl); - H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0)); - H6l = H6.low = (H6l + gl); - H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0)); - H7l = H7.low = (H7l + hl); - H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0)); - }, + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } - _doFinalize: function () { - // Shortcuts - var data = this._data; - var dataWords = data.words; + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } - var nBitsTotal = this._nDataBytes * 8; - var nBitsLeft = data.sigBytes * 8; + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} - // Add padding - dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000); - dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal; - data.sigBytes = dataWords.length * 4; + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} - // Hash final blocks - this._process(); + buffer[offset + i - d] |= s * 128 +} - // Convert hash to 32-bit word array before returning - var hash = this._hash.toX32(); +},{}],226:[function(require,module,exports){ +arguments[4][79][0].apply(exports,arguments) +},{"dup":79}],227:[function(require,module,exports){ +/** + * Determine if an object is Buffer + * + * Author: Feross Aboukhadijeh + * License: MIT + * + * `npm install is-buffer` + */ - // Return final computed hash - return hash; - }, +module.exports = function (obj) { + return !!(obj != null && + (obj._isBuffer || // For Safari 5-7 (missing Object.prototype.constructor) + (obj.constructor && + typeof obj.constructor.isBuffer === 'function' && + obj.constructor.isBuffer(obj)) + )) +} - clone: function () { - var clone = Hasher.clone.call(this); - clone._hash = this._hash.clone(); +},{}],228:[function(require,module,exports){ +module.exports = Array.isArray || function (arr) { + return Object.prototype.toString.call(arr) == '[object Array]'; +}; - return clone; - }, +},{}],229:[function(require,module,exports){ +(function (global){ +/* + * js-sha3 v0.3.1 + * https://github.com/emn178/js-sha3 + * + * Copyright 2015, emn178@gmail.com + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ +;(function(root, undefined) { + 'use strict'; - blockSize: 1024/32 - }); + var NODE_JS = typeof(module) != 'undefined'; + if(NODE_JS) { + root = global; + if(root.JS_SHA3_TEST) { + root.navigator = { userAgent: 'Chrome'}; + } + } + var CHROME = (root.JS_SHA3_TEST || !NODE_JS) && navigator.userAgent.indexOf('Chrome') != -1; + var HEX_CHARS = '0123456789abcdef'.split(''); + var KECCAK_PADDING = [1, 256, 65536, 16777216]; + var PADDING = [6, 1536, 393216, 100663296]; + var SHIFT = [0, 8, 16, 24]; + var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, + 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, + 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, + 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, + 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]; - /** - * Shortcut function to the hasher's object interface. - * - * @param {WordArray|string} message The message to hash. - * - * @return {WordArray} The hash. - * - * @static - * - * @example - * - * var hash = CryptoJS.SHA512('message'); - * var hash = CryptoJS.SHA512(wordArray); - */ - C.SHA512 = Hasher._createHelper(SHA512); + var blocks = [], s = []; - /** - * Shortcut function to the HMAC's object interface. - * - * @param {WordArray|string} message The message to hash. - * @param {WordArray|string} key The secret key. - * - * @return {WordArray} The HMAC. - * - * @static - * - * @example - * - * var hmac = CryptoJS.HmacSHA512(message, key); - */ - C.HmacSHA512 = Hasher._createHmacHelper(SHA512); - }()); + var keccak_224 = function(message) { + return keccak(message, 224, KECCAK_PADDING); + }; + var keccak_256 = function(message) { + return keccak(message, 256, KECCAK_PADDING); + }; - return CryptoJS.SHA512; + var keccak_384 = function(message) { + return keccak(message, 384, KECCAK_PADDING); + }; -})); -},{"./core":324,"./x64-core":355}],354:[function(require,module,exports){ -;(function (root, factory, undef) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core"), require("./enc-base64"), require("./md5"), require("./evpkdf"), require("./cipher-core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core", "./enc-base64", "./md5", "./evpkdf", "./cipher-core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + var sha3_224 = function(message) { + return keccak(message, 224, PADDING); + }; - (function () { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var WordArray = C_lib.WordArray; - var BlockCipher = C_lib.BlockCipher; - var C_algo = C.algo; + var sha3_256 = function(message) { + return keccak(message, 256, PADDING); + }; - // Permuted Choice 1 constants - var PC1 = [ - 57, 49, 41, 33, 25, 17, 9, 1, - 58, 50, 42, 34, 26, 18, 10, 2, - 59, 51, 43, 35, 27, 19, 11, 3, - 60, 52, 44, 36, 63, 55, 47, 39, - 31, 23, 15, 7, 62, 54, 46, 38, - 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 - ]; - - // Permuted Choice 2 constants - var PC2 = [ - 14, 17, 11, 24, 1, 5, - 3, 28, 15, 6, 21, 10, - 23, 19, 12, 4, 26, 8, - 16, 7, 27, 20, 13, 2, - 41, 52, 31, 37, 47, 55, - 30, 40, 51, 45, 33, 48, - 44, 49, 39, 56, 34, 53, - 46, 42, 50, 36, 29, 32 - ]; - - // Cumulative bit shift constants - var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]; - - // SBOXes and round permutation constants - var SBOX_P = [ - { - 0x0: 0x808200, - 0x10000000: 0x8000, - 0x20000000: 0x808002, - 0x30000000: 0x2, - 0x40000000: 0x200, - 0x50000000: 0x808202, - 0x60000000: 0x800202, - 0x70000000: 0x800000, - 0x80000000: 0x202, - 0x90000000: 0x800200, - 0xa0000000: 0x8200, - 0xb0000000: 0x808000, - 0xc0000000: 0x8002, - 0xd0000000: 0x800002, - 0xe0000000: 0x0, - 0xf0000000: 0x8202, - 0x8000000: 0x0, - 0x18000000: 0x808202, - 0x28000000: 0x8202, - 0x38000000: 0x8000, - 0x48000000: 0x808200, - 0x58000000: 0x200, - 0x68000000: 0x808002, - 0x78000000: 0x2, - 0x88000000: 0x800200, - 0x98000000: 0x8200, - 0xa8000000: 0x808000, - 0xb8000000: 0x800202, - 0xc8000000: 0x800002, - 0xd8000000: 0x8002, - 0xe8000000: 0x202, - 0xf8000000: 0x800000, - 0x1: 0x8000, - 0x10000001: 0x2, - 0x20000001: 0x808200, - 0x30000001: 0x800000, - 0x40000001: 0x808002, - 0x50000001: 0x8200, - 0x60000001: 0x200, - 0x70000001: 0x800202, - 0x80000001: 0x808202, - 0x90000001: 0x808000, - 0xa0000001: 0x800002, - 0xb0000001: 0x8202, - 0xc0000001: 0x202, - 0xd0000001: 0x800200, - 0xe0000001: 0x8002, - 0xf0000001: 0x0, - 0x8000001: 0x808202, - 0x18000001: 0x808000, - 0x28000001: 0x800000, - 0x38000001: 0x200, - 0x48000001: 0x8000, - 0x58000001: 0x800002, - 0x68000001: 0x2, - 0x78000001: 0x8202, - 0x88000001: 0x8002, - 0x98000001: 0x800202, - 0xa8000001: 0x202, - 0xb8000001: 0x808200, - 0xc8000001: 0x800200, - 0xd8000001: 0x0, - 0xe8000001: 0x8200, - 0xf8000001: 0x808002 - }, - { - 0x0: 0x40084010, - 0x1000000: 0x4000, - 0x2000000: 0x80000, - 0x3000000: 0x40080010, - 0x4000000: 0x40000010, - 0x5000000: 0x40084000, - 0x6000000: 0x40004000, - 0x7000000: 0x10, - 0x8000000: 0x84000, - 0x9000000: 0x40004010, - 0xa000000: 0x40000000, - 0xb000000: 0x84010, - 0xc000000: 0x80010, - 0xd000000: 0x0, - 0xe000000: 0x4010, - 0xf000000: 0x40080000, - 0x800000: 0x40004000, - 0x1800000: 0x84010, - 0x2800000: 0x10, - 0x3800000: 0x40004010, - 0x4800000: 0x40084010, - 0x5800000: 0x40000000, - 0x6800000: 0x80000, - 0x7800000: 0x40080010, - 0x8800000: 0x80010, - 0x9800000: 0x0, - 0xa800000: 0x4000, - 0xb800000: 0x40080000, - 0xc800000: 0x40000010, - 0xd800000: 0x84000, - 0xe800000: 0x40084000, - 0xf800000: 0x4010, - 0x10000000: 0x0, - 0x11000000: 0x40080010, - 0x12000000: 0x40004010, - 0x13000000: 0x40084000, - 0x14000000: 0x40080000, - 0x15000000: 0x10, - 0x16000000: 0x84010, - 0x17000000: 0x4000, - 0x18000000: 0x4010, - 0x19000000: 0x80000, - 0x1a000000: 0x80010, - 0x1b000000: 0x40000010, - 0x1c000000: 0x84000, - 0x1d000000: 0x40004000, - 0x1e000000: 0x40000000, - 0x1f000000: 0x40084010, - 0x10800000: 0x84010, - 0x11800000: 0x80000, - 0x12800000: 0x40080000, - 0x13800000: 0x4000, - 0x14800000: 0x40004000, - 0x15800000: 0x40084010, - 0x16800000: 0x10, - 0x17800000: 0x40000000, - 0x18800000: 0x40084000, - 0x19800000: 0x40000010, - 0x1a800000: 0x40004010, - 0x1b800000: 0x80010, - 0x1c800000: 0x0, - 0x1d800000: 0x4010, - 0x1e800000: 0x40080010, - 0x1f800000: 0x84000 - }, - { - 0x0: 0x104, - 0x100000: 0x0, - 0x200000: 0x4000100, - 0x300000: 0x10104, - 0x400000: 0x10004, - 0x500000: 0x4000004, - 0x600000: 0x4010104, - 0x700000: 0x4010000, - 0x800000: 0x4000000, - 0x900000: 0x4010100, - 0xa00000: 0x10100, - 0xb00000: 0x4010004, - 0xc00000: 0x4000104, - 0xd00000: 0x10000, - 0xe00000: 0x4, - 0xf00000: 0x100, - 0x80000: 0x4010100, - 0x180000: 0x4010004, - 0x280000: 0x0, - 0x380000: 0x4000100, - 0x480000: 0x4000004, - 0x580000: 0x10000, - 0x680000: 0x10004, - 0x780000: 0x104, - 0x880000: 0x4, - 0x980000: 0x100, - 0xa80000: 0x4010000, - 0xb80000: 0x10104, - 0xc80000: 0x10100, - 0xd80000: 0x4000104, - 0xe80000: 0x4010104, - 0xf80000: 0x4000000, - 0x1000000: 0x4010100, - 0x1100000: 0x10004, - 0x1200000: 0x10000, - 0x1300000: 0x4000100, - 0x1400000: 0x100, - 0x1500000: 0x4010104, - 0x1600000: 0x4000004, - 0x1700000: 0x0, - 0x1800000: 0x4000104, - 0x1900000: 0x4000000, - 0x1a00000: 0x4, - 0x1b00000: 0x10100, - 0x1c00000: 0x4010000, - 0x1d00000: 0x104, - 0x1e00000: 0x10104, - 0x1f00000: 0x4010004, - 0x1080000: 0x4000000, - 0x1180000: 0x104, - 0x1280000: 0x4010100, - 0x1380000: 0x0, - 0x1480000: 0x10004, - 0x1580000: 0x4000100, - 0x1680000: 0x100, - 0x1780000: 0x4010004, - 0x1880000: 0x10000, - 0x1980000: 0x4010104, - 0x1a80000: 0x10104, - 0x1b80000: 0x4000004, - 0x1c80000: 0x4000104, - 0x1d80000: 0x4010000, - 0x1e80000: 0x4, - 0x1f80000: 0x10100 - }, - { - 0x0: 0x80401000, - 0x10000: 0x80001040, - 0x20000: 0x401040, - 0x30000: 0x80400000, - 0x40000: 0x0, - 0x50000: 0x401000, - 0x60000: 0x80000040, - 0x70000: 0x400040, - 0x80000: 0x80000000, - 0x90000: 0x400000, - 0xa0000: 0x40, - 0xb0000: 0x80001000, - 0xc0000: 0x80400040, - 0xd0000: 0x1040, - 0xe0000: 0x1000, - 0xf0000: 0x80401040, - 0x8000: 0x80001040, - 0x18000: 0x40, - 0x28000: 0x80400040, - 0x38000: 0x80001000, - 0x48000: 0x401000, - 0x58000: 0x80401040, - 0x68000: 0x0, - 0x78000: 0x80400000, - 0x88000: 0x1000, - 0x98000: 0x80401000, - 0xa8000: 0x400000, - 0xb8000: 0x1040, - 0xc8000: 0x80000000, - 0xd8000: 0x400040, - 0xe8000: 0x401040, - 0xf8000: 0x80000040, - 0x100000: 0x400040, - 0x110000: 0x401000, - 0x120000: 0x80000040, - 0x130000: 0x0, - 0x140000: 0x1040, - 0x150000: 0x80400040, - 0x160000: 0x80401000, - 0x170000: 0x80001040, - 0x180000: 0x80401040, - 0x190000: 0x80000000, - 0x1a0000: 0x80400000, - 0x1b0000: 0x401040, - 0x1c0000: 0x80001000, - 0x1d0000: 0x400000, - 0x1e0000: 0x40, - 0x1f0000: 0x1000, - 0x108000: 0x80400000, - 0x118000: 0x80401040, - 0x128000: 0x0, - 0x138000: 0x401000, - 0x148000: 0x400040, - 0x158000: 0x80000000, - 0x168000: 0x80001040, - 0x178000: 0x40, - 0x188000: 0x80000040, - 0x198000: 0x1000, - 0x1a8000: 0x80001000, - 0x1b8000: 0x80400040, - 0x1c8000: 0x1040, - 0x1d8000: 0x80401000, - 0x1e8000: 0x400000, - 0x1f8000: 0x401040 - }, - { - 0x0: 0x80, - 0x1000: 0x1040000, - 0x2000: 0x40000, - 0x3000: 0x20000000, - 0x4000: 0x20040080, - 0x5000: 0x1000080, - 0x6000: 0x21000080, - 0x7000: 0x40080, - 0x8000: 0x1000000, - 0x9000: 0x20040000, - 0xa000: 0x20000080, - 0xb000: 0x21040080, - 0xc000: 0x21040000, - 0xd000: 0x0, - 0xe000: 0x1040080, - 0xf000: 0x21000000, - 0x800: 0x1040080, - 0x1800: 0x21000080, - 0x2800: 0x80, - 0x3800: 0x1040000, - 0x4800: 0x40000, - 0x5800: 0x20040080, - 0x6800: 0x21040000, - 0x7800: 0x20000000, - 0x8800: 0x20040000, - 0x9800: 0x0, - 0xa800: 0x21040080, - 0xb800: 0x1000080, - 0xc800: 0x20000080, - 0xd800: 0x21000000, - 0xe800: 0x1000000, - 0xf800: 0x40080, - 0x10000: 0x40000, - 0x11000: 0x80, - 0x12000: 0x20000000, - 0x13000: 0x21000080, - 0x14000: 0x1000080, - 0x15000: 0x21040000, - 0x16000: 0x20040080, - 0x17000: 0x1000000, - 0x18000: 0x21040080, - 0x19000: 0x21000000, - 0x1a000: 0x1040000, - 0x1b000: 0x20040000, - 0x1c000: 0x40080, - 0x1d000: 0x20000080, - 0x1e000: 0x0, - 0x1f000: 0x1040080, - 0x10800: 0x21000080, - 0x11800: 0x1000000, - 0x12800: 0x1040000, - 0x13800: 0x20040080, - 0x14800: 0x20000000, - 0x15800: 0x1040080, - 0x16800: 0x80, - 0x17800: 0x21040000, - 0x18800: 0x40080, - 0x19800: 0x21040080, - 0x1a800: 0x0, - 0x1b800: 0x21000000, - 0x1c800: 0x1000080, - 0x1d800: 0x40000, - 0x1e800: 0x20040000, - 0x1f800: 0x20000080 - }, - { - 0x0: 0x10000008, - 0x100: 0x2000, - 0x200: 0x10200000, - 0x300: 0x10202008, - 0x400: 0x10002000, - 0x500: 0x200000, - 0x600: 0x200008, - 0x700: 0x10000000, - 0x800: 0x0, - 0x900: 0x10002008, - 0xa00: 0x202000, - 0xb00: 0x8, - 0xc00: 0x10200008, - 0xd00: 0x202008, - 0xe00: 0x2008, - 0xf00: 0x10202000, - 0x80: 0x10200000, - 0x180: 0x10202008, - 0x280: 0x8, - 0x380: 0x200000, - 0x480: 0x202008, - 0x580: 0x10000008, - 0x680: 0x10002000, - 0x780: 0x2008, - 0x880: 0x200008, - 0x980: 0x2000, - 0xa80: 0x10002008, - 0xb80: 0x10200008, - 0xc80: 0x0, - 0xd80: 0x10202000, - 0xe80: 0x202000, - 0xf80: 0x10000000, - 0x1000: 0x10002000, - 0x1100: 0x10200008, - 0x1200: 0x10202008, - 0x1300: 0x2008, - 0x1400: 0x200000, - 0x1500: 0x10000000, - 0x1600: 0x10000008, - 0x1700: 0x202000, - 0x1800: 0x202008, - 0x1900: 0x0, - 0x1a00: 0x8, - 0x1b00: 0x10200000, - 0x1c00: 0x2000, - 0x1d00: 0x10002008, - 0x1e00: 0x10202000, - 0x1f00: 0x200008, - 0x1080: 0x8, - 0x1180: 0x202000, - 0x1280: 0x200000, - 0x1380: 0x10000008, - 0x1480: 0x10002000, - 0x1580: 0x2008, - 0x1680: 0x10202008, - 0x1780: 0x10200000, - 0x1880: 0x10202000, - 0x1980: 0x10200008, - 0x1a80: 0x2000, - 0x1b80: 0x202008, - 0x1c80: 0x200008, - 0x1d80: 0x0, - 0x1e80: 0x10000000, - 0x1f80: 0x10002008 - }, - { - 0x0: 0x100000, - 0x10: 0x2000401, - 0x20: 0x400, - 0x30: 0x100401, - 0x40: 0x2100401, - 0x50: 0x0, - 0x60: 0x1, - 0x70: 0x2100001, - 0x80: 0x2000400, - 0x90: 0x100001, - 0xa0: 0x2000001, - 0xb0: 0x2100400, - 0xc0: 0x2100000, - 0xd0: 0x401, - 0xe0: 0x100400, - 0xf0: 0x2000000, - 0x8: 0x2100001, - 0x18: 0x0, - 0x28: 0x2000401, - 0x38: 0x2100400, - 0x48: 0x100000, - 0x58: 0x2000001, - 0x68: 0x2000000, - 0x78: 0x401, - 0x88: 0x100401, - 0x98: 0x2000400, - 0xa8: 0x2100000, - 0xb8: 0x100001, - 0xc8: 0x400, - 0xd8: 0x2100401, - 0xe8: 0x1, - 0xf8: 0x100400, - 0x100: 0x2000000, - 0x110: 0x100000, - 0x120: 0x2000401, - 0x130: 0x2100001, - 0x140: 0x100001, - 0x150: 0x2000400, - 0x160: 0x2100400, - 0x170: 0x100401, - 0x180: 0x401, - 0x190: 0x2100401, - 0x1a0: 0x100400, - 0x1b0: 0x1, - 0x1c0: 0x0, - 0x1d0: 0x2100000, - 0x1e0: 0x2000001, - 0x1f0: 0x400, - 0x108: 0x100400, - 0x118: 0x2000401, - 0x128: 0x2100001, - 0x138: 0x1, - 0x148: 0x2000000, - 0x158: 0x100000, - 0x168: 0x401, - 0x178: 0x2100400, - 0x188: 0x2000001, - 0x198: 0x2100000, - 0x1a8: 0x0, - 0x1b8: 0x2100401, - 0x1c8: 0x100401, - 0x1d8: 0x400, - 0x1e8: 0x2000400, - 0x1f8: 0x100001 - }, - { - 0x0: 0x8000820, - 0x1: 0x20000, - 0x2: 0x8000000, - 0x3: 0x20, - 0x4: 0x20020, - 0x5: 0x8020820, - 0x6: 0x8020800, - 0x7: 0x800, - 0x8: 0x8020000, - 0x9: 0x8000800, - 0xa: 0x20800, - 0xb: 0x8020020, - 0xc: 0x820, - 0xd: 0x0, - 0xe: 0x8000020, - 0xf: 0x20820, - 0x80000000: 0x800, - 0x80000001: 0x8020820, - 0x80000002: 0x8000820, - 0x80000003: 0x8000000, - 0x80000004: 0x8020000, - 0x80000005: 0x20800, - 0x80000006: 0x20820, - 0x80000007: 0x20, - 0x80000008: 0x8000020, - 0x80000009: 0x820, - 0x8000000a: 0x20020, - 0x8000000b: 0x8020800, - 0x8000000c: 0x0, - 0x8000000d: 0x8020020, - 0x8000000e: 0x8000800, - 0x8000000f: 0x20000, - 0x10: 0x20820, - 0x11: 0x8020800, - 0x12: 0x20, - 0x13: 0x800, - 0x14: 0x8000800, - 0x15: 0x8000020, - 0x16: 0x8020020, - 0x17: 0x20000, - 0x18: 0x0, - 0x19: 0x20020, - 0x1a: 0x8020000, - 0x1b: 0x8000820, - 0x1c: 0x8020820, - 0x1d: 0x20800, - 0x1e: 0x820, - 0x1f: 0x8000000, - 0x80000010: 0x20000, - 0x80000011: 0x800, - 0x80000012: 0x8020020, - 0x80000013: 0x20820, - 0x80000014: 0x20, - 0x80000015: 0x8020000, - 0x80000016: 0x8000000, - 0x80000017: 0x8000820, - 0x80000018: 0x8020820, - 0x80000019: 0x8000020, - 0x8000001a: 0x8000800, - 0x8000001b: 0x0, - 0x8000001c: 0x20800, - 0x8000001d: 0x820, - 0x8000001e: 0x20020, - 0x8000001f: 0x8020800 - } - ]; + var sha3_384 = function(message) { + return keccak(message, 384, PADDING); + }; - // Masks that select the SBOX input - var SBOX_MASK = [ - 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000, - 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f - ]; + var sha3_512 = function(message) { + return keccak(message, 512, PADDING); + }; - /** - * DES block cipher algorithm. - */ - var DES = C_algo.DES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; + var keccak = function(message, bits, padding) { + var notString = typeof(message) != 'string'; + if(notString && message.constructor == root.ArrayBuffer) { + message = new Uint8Array(message); + } - // Select 56 bits according to PC1 - var keyBits = []; - for (var i = 0; i < 56; i++) { - var keyBitPos = PC1[i] - 1; - keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1; - } + if(bits === undefined) { + bits = 512; + padding = KECCAK_PADDING; + } - // Assemble 16 subkeys - var subKeys = this._subKeys = []; - for (var nSubKey = 0; nSubKey < 16; nSubKey++) { - // Create subkey - var subKey = subKeys[nSubKey] = []; + var block, code, end = false, index = 0, start = 0, length = message.length, + n, i, h, l, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, + b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, + b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, + b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; + var blockCount = (1600 - bits * 2) / 32; + var byteCount = blockCount * 4; - // Shortcut - var bitShift = BIT_SHIFTS[nSubKey]; + for(i = 0;i < 50;++i) { + s[i] = 0; + } - // Select 48 bits according to PC2 - for (var i = 0; i < 24; i++) { - // Select from the left 28 key bits - subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6); + block = 0; + do { + blocks[0] = block; + for(i = 1;i < blockCount + 1;++i) { + blocks[i] = 0; + } + if(notString) { + for (i = start;index < length && i < byteCount; ++index) { + blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; + } + } else { + for (i = start;index < length && i < byteCount; ++index) { + code = message.charCodeAt(index); + if (code < 0x80) { + blocks[i >> 2] |= code << SHIFT[i++ & 3]; + } else if (code < 0x800) { + blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } else if (code < 0xd800 || code >= 0xe000) { + blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } else { + code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); + blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } + } + } + start = i - byteCount; + if(index == length) { + blocks[i >> 2] |= padding[i & 3]; + ++index; + } + block = blocks[blockCount]; + if(index > length && i < byteCount) { + blocks[blockCount - 1] |= 0x80000000; + end = true; + } - // Select from the right 28 key bits - subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6); - } + for(i = 0;i < blockCount;++i) { + s[i] ^= blocks[i]; + } - // Since each subkey is applied to an expanded 32-bit input, - // the subkey can be broken into 8 values scaled to 32-bits, - // which allows the key to be used without expansion - subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31); - for (var i = 1; i < 7; i++) { - subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3); - } - subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27); - } + for(n = 0; n < 48; n += 2) { + c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; + c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; + c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; + c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; + c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; + c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; + c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; + c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; + c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; + c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; - // Compute inverse subkeys - var invSubKeys = this._invSubKeys = []; - for (var i = 0; i < 16; i++) { - invSubKeys[i] = subKeys[15 - i]; - } - }, + h = c8 ^ ((c2 << 1) | (c3 >>> 31)); + l = c9 ^ ((c3 << 1) | (c2 >>> 31)); + s[0] ^= h; + s[1] ^= l; + s[10] ^= h; + s[11] ^= l; + s[20] ^= h; + s[21] ^= l; + s[30] ^= h; + s[31] ^= l; + s[40] ^= h; + s[41] ^= l; + h = c0 ^ ((c4 << 1) | (c5 >>> 31)); + l = c1 ^ ((c5 << 1) | (c4 >>> 31)); + s[2] ^= h; + s[3] ^= l; + s[12] ^= h; + s[13] ^= l; + s[22] ^= h; + s[23] ^= l; + s[32] ^= h; + s[33] ^= l; + s[42] ^= h; + s[43] ^= l; + h = c2 ^ ((c6 << 1) | (c7 >>> 31)); + l = c3 ^ ((c7 << 1) | (c6 >>> 31)); + s[4] ^= h; + s[5] ^= l; + s[14] ^= h; + s[15] ^= l; + s[24] ^= h; + s[25] ^= l; + s[34] ^= h; + s[35] ^= l; + s[44] ^= h; + s[45] ^= l; + h = c4 ^ ((c8 << 1) | (c9 >>> 31)); + l = c5 ^ ((c9 << 1) | (c8 >>> 31)); + s[6] ^= h; + s[7] ^= l; + s[16] ^= h; + s[17] ^= l; + s[26] ^= h; + s[27] ^= l; + s[36] ^= h; + s[37] ^= l; + s[46] ^= h; + s[47] ^= l; + h = c6 ^ ((c0 << 1) | (c1 >>> 31)); + l = c7 ^ ((c1 << 1) | (c0 >>> 31)); + s[8] ^= h; + s[9] ^= l; + s[18] ^= h; + s[19] ^= l; + s[28] ^= h; + s[29] ^= l; + s[38] ^= h; + s[39] ^= l; + s[48] ^= h; + s[49] ^= l; - encryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._subKeys); - }, + b0 = s[0]; + b1 = s[1]; + b32 = (s[11] << 4) | (s[10] >>> 28); + b33 = (s[10] << 4) | (s[11] >>> 28); + b14 = (s[20] << 3) | (s[21] >>> 29); + b15 = (s[21] << 3) | (s[20] >>> 29); + b46 = (s[31] << 9) | (s[30] >>> 23); + b47 = (s[30] << 9) | (s[31] >>> 23); + b28 = (s[40] << 18) | (s[41] >>> 14); + b29 = (s[41] << 18) | (s[40] >>> 14); + b20 = (s[2] << 1) | (s[3] >>> 31); + b21 = (s[3] << 1) | (s[2] >>> 31); + b2 = (s[13] << 12) | (s[12] >>> 20); + b3 = (s[12] << 12) | (s[13] >>> 20); + b34 = (s[22] << 10) | (s[23] >>> 22); + b35 = (s[23] << 10) | (s[22] >>> 22); + b16 = (s[33] << 13) | (s[32] >>> 19); + b17 = (s[32] << 13) | (s[33] >>> 19); + b48 = (s[42] << 2) | (s[43] >>> 30); + b49 = (s[43] << 2) | (s[42] >>> 30); + b40 = (s[5] << 30) | (s[4] >>> 2); + b41 = (s[4] << 30) | (s[5] >>> 2); + b22 = (s[14] << 6) | (s[15] >>> 26); + b23 = (s[15] << 6) | (s[14] >>> 26); + b4 = (s[25] << 11) | (s[24] >>> 21); + b5 = (s[24] << 11) | (s[25] >>> 21); + b36 = (s[34] << 15) | (s[35] >>> 17); + b37 = (s[35] << 15) | (s[34] >>> 17); + b18 = (s[45] << 29) | (s[44] >>> 3); + b19 = (s[44] << 29) | (s[45] >>> 3); + b10 = (s[6] << 28) | (s[7] >>> 4); + b11 = (s[7] << 28) | (s[6] >>> 4); + b42 = (s[17] << 23) | (s[16] >>> 9); + b43 = (s[16] << 23) | (s[17] >>> 9); + b24 = (s[26] << 25) | (s[27] >>> 7); + b25 = (s[27] << 25) | (s[26] >>> 7); + b6 = (s[36] << 21) | (s[37] >>> 11); + b7 = (s[37] << 21) | (s[36] >>> 11); + b38 = (s[47] << 24) | (s[46] >>> 8); + b39 = (s[46] << 24) | (s[47] >>> 8); + b30 = (s[8] << 27) | (s[9] >>> 5); + b31 = (s[9] << 27) | (s[8] >>> 5); + b12 = (s[18] << 20) | (s[19] >>> 12); + b13 = (s[19] << 20) | (s[18] >>> 12); + b44 = (s[29] << 7) | (s[28] >>> 25); + b45 = (s[28] << 7) | (s[29] >>> 25); + b26 = (s[38] << 8) | (s[39] >>> 24); + b27 = (s[39] << 8) | (s[38] >>> 24); + b8 = (s[48] << 14) | (s[49] >>> 18); + b9 = (s[49] << 14) | (s[48] >>> 18); - decryptBlock: function (M, offset) { - this._doCryptBlock(M, offset, this._invSubKeys); - }, + s[0] = b0 ^ (~b2 & b4); + s[1] = b1 ^ (~b3 & b5); + s[10] = b10 ^ (~b12 & b14); + s[11] = b11 ^ (~b13 & b15); + s[20] = b20 ^ (~b22 & b24); + s[21] = b21 ^ (~b23 & b25); + s[30] = b30 ^ (~b32 & b34); + s[31] = b31 ^ (~b33 & b35); + s[40] = b40 ^ (~b42 & b44); + s[41] = b41 ^ (~b43 & b45); + s[2] = b2 ^ (~b4 & b6); + s[3] = b3 ^ (~b5 & b7); + s[12] = b12 ^ (~b14 & b16); + s[13] = b13 ^ (~b15 & b17); + s[22] = b22 ^ (~b24 & b26); + s[23] = b23 ^ (~b25 & b27); + s[32] = b32 ^ (~b34 & b36); + s[33] = b33 ^ (~b35 & b37); + s[42] = b42 ^ (~b44 & b46); + s[43] = b43 ^ (~b45 & b47); + s[4] = b4 ^ (~b6 & b8); + s[5] = b5 ^ (~b7 & b9); + s[14] = b14 ^ (~b16 & b18); + s[15] = b15 ^ (~b17 & b19); + s[24] = b24 ^ (~b26 & b28); + s[25] = b25 ^ (~b27 & b29); + s[34] = b34 ^ (~b36 & b38); + s[35] = b35 ^ (~b37 & b39); + s[44] = b44 ^ (~b46 & b48); + s[45] = b45 ^ (~b47 & b49); + s[6] = b6 ^ (~b8 & b0); + s[7] = b7 ^ (~b9 & b1); + s[16] = b16 ^ (~b18 & b10); + s[17] = b17 ^ (~b19 & b11); + s[26] = b26 ^ (~b28 & b20); + s[27] = b27 ^ (~b29 & b21); + s[36] = b36 ^ (~b38 & b30); + s[37] = b37 ^ (~b39 & b31); + s[46] = b46 ^ (~b48 & b40); + s[47] = b47 ^ (~b49 & b41); + s[8] = b8 ^ (~b0 & b2); + s[9] = b9 ^ (~b1 & b3); + s[18] = b18 ^ (~b10 & b12); + s[19] = b19 ^ (~b11 & b13); + s[28] = b28 ^ (~b20 & b22); + s[29] = b29 ^ (~b21 & b23); + s[38] = b38 ^ (~b30 & b32); + s[39] = b39 ^ (~b31 & b33); + s[48] = b48 ^ (~b40 & b42); + s[49] = b49 ^ (~b41 & b43); - _doCryptBlock: function (M, offset, subKeys) { - // Get input - this._lBlock = M[offset]; - this._rBlock = M[offset + 1]; + s[0] ^= RC[n]; + s[1] ^= RC[n + 1]; + } + } while(!end); - // Initial permutation - exchangeLR.call(this, 4, 0x0f0f0f0f); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeRL.call(this, 2, 0x33333333); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeLR.call(this, 1, 0x55555555); + var hex = ''; + if(CHROME) { + b0 = s[0]; + b1 = s[1]; + b2 = s[2]; + b3 = s[3]; + b4 = s[4]; + b5 = s[5]; + b6 = s[6]; + b7 = s[7]; + b8 = s[8]; + b9 = s[9]; + b10 = s[10]; + b11 = s[11]; + b12 = s[12]; + b13 = s[13]; + b14 = s[14]; + b15 = s[15]; + hex += HEX_CHARS[(b0 >> 4) & 0x0F] + HEX_CHARS[b0 & 0x0F] + + HEX_CHARS[(b0 >> 12) & 0x0F] + HEX_CHARS[(b0 >> 8) & 0x0F] + + HEX_CHARS[(b0 >> 20) & 0x0F] + HEX_CHARS[(b0 >> 16) & 0x0F] + + HEX_CHARS[(b0 >> 28) & 0x0F] + HEX_CHARS[(b0 >> 24) & 0x0F] + + HEX_CHARS[(b1 >> 4) & 0x0F] + HEX_CHARS[b1 & 0x0F] + + HEX_CHARS[(b1 >> 12) & 0x0F] + HEX_CHARS[(b1 >> 8) & 0x0F] + + HEX_CHARS[(b1 >> 20) & 0x0F] + HEX_CHARS[(b1 >> 16) & 0x0F] + + HEX_CHARS[(b1 >> 28) & 0x0F] + HEX_CHARS[(b1 >> 24) & 0x0F] + + HEX_CHARS[(b2 >> 4) & 0x0F] + HEX_CHARS[b2 & 0x0F] + + HEX_CHARS[(b2 >> 12) & 0x0F] + HEX_CHARS[(b2 >> 8) & 0x0F] + + HEX_CHARS[(b2 >> 20) & 0x0F] + HEX_CHARS[(b2 >> 16) & 0x0F] + + HEX_CHARS[(b2 >> 28) & 0x0F] + HEX_CHARS[(b2 >> 24) & 0x0F] + + HEX_CHARS[(b3 >> 4) & 0x0F] + HEX_CHARS[b3 & 0x0F] + + HEX_CHARS[(b3 >> 12) & 0x0F] + HEX_CHARS[(b3 >> 8) & 0x0F] + + HEX_CHARS[(b3 >> 20) & 0x0F] + HEX_CHARS[(b3 >> 16) & 0x0F] + + HEX_CHARS[(b3 >> 28) & 0x0F] + HEX_CHARS[(b3 >> 24) & 0x0F] + + HEX_CHARS[(b4 >> 4) & 0x0F] + HEX_CHARS[b4 & 0x0F] + + HEX_CHARS[(b4 >> 12) & 0x0F] + HEX_CHARS[(b4 >> 8) & 0x0F] + + HEX_CHARS[(b4 >> 20) & 0x0F] + HEX_CHARS[(b4 >> 16) & 0x0F] + + HEX_CHARS[(b4 >> 28) & 0x0F] + HEX_CHARS[(b4 >> 24) & 0x0F] + + HEX_CHARS[(b5 >> 4) & 0x0F] + HEX_CHARS[b5 & 0x0F] + + HEX_CHARS[(b5 >> 12) & 0x0F] + HEX_CHARS[(b5 >> 8) & 0x0F] + + HEX_CHARS[(b5 >> 20) & 0x0F] + HEX_CHARS[(b5 >> 16) & 0x0F] + + HEX_CHARS[(b5 >> 28) & 0x0F] + HEX_CHARS[(b5 >> 24) & 0x0F] + + HEX_CHARS[(b6 >> 4) & 0x0F] + HEX_CHARS[b6 & 0x0F] + + HEX_CHARS[(b6 >> 12) & 0x0F] + HEX_CHARS[(b6 >> 8) & 0x0F] + + HEX_CHARS[(b6 >> 20) & 0x0F] + HEX_CHARS[(b6 >> 16) & 0x0F] + + HEX_CHARS[(b6 >> 28) & 0x0F] + HEX_CHARS[(b6 >> 24) & 0x0F]; - // Rounds - for (var round = 0; round < 16; round++) { - // Shortcuts - var subKey = subKeys[round]; - var lBlock = this._lBlock; - var rBlock = this._rBlock; - - // Feistel function - var f = 0; - for (var i = 0; i < 8; i++) { - f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0]; - } - this._lBlock = rBlock; - this._rBlock = lBlock ^ f; - } + if(bits >= 256) { + hex += HEX_CHARS[(b7 >> 4) & 0x0F] + HEX_CHARS[b7 & 0x0F] + + HEX_CHARS[(b7 >> 12) & 0x0F] + HEX_CHARS[(b7 >> 8) & 0x0F] + + HEX_CHARS[(b7 >> 20) & 0x0F] + HEX_CHARS[(b7 >> 16) & 0x0F] + + HEX_CHARS[(b7 >> 28) & 0x0F] + HEX_CHARS[(b7 >> 24) & 0x0F]; + } + if(bits >= 384) { + hex += HEX_CHARS[(b8 >> 4) & 0x0F] + HEX_CHARS[b8 & 0x0F] + + HEX_CHARS[(b8 >> 12) & 0x0F] + HEX_CHARS[(b8 >> 8) & 0x0F] + + HEX_CHARS[(b8 >> 20) & 0x0F] + HEX_CHARS[(b8 >> 16) & 0x0F] + + HEX_CHARS[(b8 >> 28) & 0x0F] + HEX_CHARS[(b8 >> 24) & 0x0F] + + HEX_CHARS[(b9 >> 4) & 0x0F] + HEX_CHARS[b9 & 0x0F] + + HEX_CHARS[(b9 >> 12) & 0x0F] + HEX_CHARS[(b9 >> 8) & 0x0F] + + HEX_CHARS[(b9 >> 20) & 0x0F] + HEX_CHARS[(b9 >> 16) & 0x0F] + + HEX_CHARS[(b9 >> 28) & 0x0F] + HEX_CHARS[(b9 >> 24) & 0x0F] + + HEX_CHARS[(b10 >> 4) & 0x0F] + HEX_CHARS[b10 & 0x0F] + + HEX_CHARS[(b10 >> 12) & 0x0F] + HEX_CHARS[(b10 >> 8) & 0x0F] + + HEX_CHARS[(b10 >> 20) & 0x0F] + HEX_CHARS[(b10 >> 16) & 0x0F] + + HEX_CHARS[(b10 >> 28) & 0x0F] + HEX_CHARS[(b10 >> 24) & 0x0F] + + HEX_CHARS[(b11 >> 4) & 0x0F] + HEX_CHARS[b11 & 0x0F] + + HEX_CHARS[(b11 >> 12) & 0x0F] + HEX_CHARS[(b11 >> 8) & 0x0F] + + HEX_CHARS[(b11 >> 20) & 0x0F] + HEX_CHARS[(b11 >> 16) & 0x0F] + + HEX_CHARS[(b11 >> 28) & 0x0F] + HEX_CHARS[(b11 >> 24) & 0x0F]; + } + if(bits == 512) { + hex += HEX_CHARS[(b12 >> 4) & 0x0F] + HEX_CHARS[b12 & 0x0F] + + HEX_CHARS[(b12 >> 12) & 0x0F] + HEX_CHARS[(b12 >> 8) & 0x0F] + + HEX_CHARS[(b12 >> 20) & 0x0F] + HEX_CHARS[(b12 >> 16) & 0x0F] + + HEX_CHARS[(b12 >> 28) & 0x0F] + HEX_CHARS[(b12 >> 24) & 0x0F] + + HEX_CHARS[(b13 >> 4) & 0x0F] + HEX_CHARS[b13 & 0x0F] + + HEX_CHARS[(b13 >> 12) & 0x0F] + HEX_CHARS[(b13 >> 8) & 0x0F] + + HEX_CHARS[(b13 >> 20) & 0x0F] + HEX_CHARS[(b13 >> 16) & 0x0F] + + HEX_CHARS[(b13 >> 28) & 0x0F] + HEX_CHARS[(b13 >> 24) & 0x0F] + + HEX_CHARS[(b14 >> 4) & 0x0F] + HEX_CHARS[b14 & 0x0F] + + HEX_CHARS[(b14 >> 12) & 0x0F] + HEX_CHARS[(b14 >> 8) & 0x0F] + + HEX_CHARS[(b14 >> 20) & 0x0F] + HEX_CHARS[(b14 >> 16) & 0x0F] + + HEX_CHARS[(b14 >> 28) & 0x0F] + HEX_CHARS[(b14 >> 24) & 0x0F] + + HEX_CHARS[(b15 >> 4) & 0x0F] + HEX_CHARS[b15 & 0x0F] + + HEX_CHARS[(b15 >> 12) & 0x0F] + HEX_CHARS[(b15 >> 8) & 0x0F] + + HEX_CHARS[(b15 >> 20) & 0x0F] + HEX_CHARS[(b15 >> 16) & 0x0F] + + HEX_CHARS[(b15 >> 28) & 0x0F] + HEX_CHARS[(b15 >> 24) & 0x0F]; + } + } else { + for(i = 0, n = bits / 32;i < n;++i) { + h = s[i]; + hex += HEX_CHARS[(h >> 4) & 0x0F] + HEX_CHARS[h & 0x0F] + + HEX_CHARS[(h >> 12) & 0x0F] + HEX_CHARS[(h >> 8) & 0x0F] + + HEX_CHARS[(h >> 20) & 0x0F] + HEX_CHARS[(h >> 16) & 0x0F] + + HEX_CHARS[(h >> 28) & 0x0F] + HEX_CHARS[(h >> 24) & 0x0F]; + } + } + return hex; + }; + + if(!root.JS_SHA3_TEST && NODE_JS) { + module.exports = { + sha3_512: sha3_512, + sha3_384: sha3_384, + sha3_256: sha3_256, + sha3_224: sha3_224, + keccak_512: keccak, + keccak_384: keccak_384, + keccak_256: keccak_256, + keccak_224: keccak_224 + }; + } else if(root) { + root.sha3_512 = sha3_512; + root.sha3_384 = sha3_384; + root.sha3_256 = sha3_256; + root.sha3_224 = sha3_224; + root.keccak_512 = keccak; + root.keccak_384 = keccak_384; + root.keccak_256 = keccak_256; + root.keccak_224 = keccak_224; + } +}(this)); - // Undo swap from last round - var t = this._lBlock; - this._lBlock = this._rBlock; - this._rBlock = t; +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],230:[function(require,module,exports){ +module.exports = require('sha3').SHA3Hash - // Final permutation - exchangeLR.call(this, 1, 0x55555555); - exchangeRL.call(this, 8, 0x00ff00ff); - exchangeRL.call(this, 2, 0x33333333); - exchangeLR.call(this, 16, 0x0000ffff); - exchangeLR.call(this, 4, 0x0f0f0f0f); +},{"sha3":121}],231:[function(require,module,exports){ +var bn = require('bn.js'); +var brorand = require('brorand'); - // Set output - M[offset] = this._lBlock; - M[offset + 1] = this._rBlock; - }, +function MillerRabin(rand) { + this.rand = rand || new brorand.Rand(); +} +module.exports = MillerRabin; - keySize: 64/32, +MillerRabin.create = function create(rand) { + return new MillerRabin(rand); +}; - ivSize: 64/32, +MillerRabin.prototype._rand = function _rand(n) { + var len = n.bitLength(); + var buf = this.rand.generate(Math.ceil(len / 8)); - blockSize: 64/32 - }); + // Set low bits + buf[0] |= 3; - // Swap bits across the left and right words - function exchangeLR(offset, mask) { - var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask; - this._rBlock ^= t; - this._lBlock ^= t << offset; - } + // Mask high bits + var mask = len & 0x7; + if (mask !== 0) + buf[buf.length - 1] >>= 7 - mask; - function exchangeRL(offset, mask) { - var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask; - this._lBlock ^= t; - this._rBlock ^= t << offset; - } + return new bn(buf); +} - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg); - */ - C.DES = BlockCipher._createHelper(DES); +MillerRabin.prototype.test = function test(n, k, cb) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); - /** - * Triple-DES block cipher algorithm. - */ - var TripleDES = C_algo.TripleDES = BlockCipher.extend({ - _doReset: function () { - // Shortcuts - var key = this._key; - var keyWords = key.words; + if (!k) + k = Math.max(1, (len / 48) | 0); - // Create DES instances - this._des1 = DES.createEncryptor(WordArray.create(keyWords.slice(0, 2))); - this._des2 = DES.createEncryptor(WordArray.create(keyWords.slice(2, 4))); - this._des3 = DES.createEncryptor(WordArray.create(keyWords.slice(4, 6))); - }, + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + var n2 = n1.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); - encryptBlock: function (M, offset) { - this._des1.encryptBlock(M, offset); - this._des2.decryptBlock(M, offset); - this._des3.encryptBlock(M, offset); - }, + var rn1 = n1.toRed(red); - decryptBlock: function (M, offset) { - this._des3.decryptBlock(M, offset); - this._des2.encryptBlock(M, offset); - this._des1.decryptBlock(M, offset); - }, + var prime = true; + for (; k > 0; k--) { + var a = this._rand(n2); + if (cb) + cb(a); - keySize: 192/32, + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) + continue; - ivSize: 64/32, + for (var i = 1; i < s; i++) { + x = x.redSqr(); - blockSize: 64/32 - }); + if (x.cmp(rone) === 0) + return false; + if (x.cmp(rn1) === 0) + break; + } - /** - * Shortcut functions to the cipher's object interface. - * - * @example - * - * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg); - * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg); - */ - C.TripleDES = BlockCipher._createHelper(TripleDES); - }()); + if (i === s) + return false; + } + return prime; +}; - return CryptoJS.TripleDES; +MillerRabin.prototype.getDivisor = function getDivisor(n, k) { + var len = n.bitLength(); + var red = bn.mont(n); + var rone = new bn(1).toRed(red); -})); -},{"./cipher-core":323,"./core":324,"./enc-base64":325,"./evpkdf":327,"./md5":332}],355:[function(require,module,exports){ -;(function (root, factory) { - if (typeof exports === "object") { - // CommonJS - module.exports = exports = factory(require("./core")); - } - else if (typeof define === "function" && define.amd) { - // AMD - define(["./core"], factory); - } - else { - // Global (browser) - factory(root.CryptoJS); - } -}(this, function (CryptoJS) { + if (!k) + k = Math.max(1, (len / 48) | 0); - (function (undefined) { - // Shortcuts - var C = CryptoJS; - var C_lib = C.lib; - var Base = C_lib.Base; - var X32WordArray = C_lib.WordArray; + // Find d and s, (n - 1) = (2 ^ s) * d; + var n1 = n.subn(1); + var n2 = n1.subn(1); + for (var s = 0; !n1.testn(s); s++) {} + var d = n.shrn(s); - /** - * x64 namespace. - */ - var C_x64 = C.x64 = {}; + var rn1 = n1.toRed(red); - /** - * A 64-bit word. - */ - var X64Word = C_x64.Word = Base.extend({ - /** - * Initializes a newly created 64-bit word. - * - * @param {number} high The high 32 bits. - * @param {number} low The low 32 bits. - * - * @example - * - * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607); - */ - init: function (high, low) { - this.high = high; - this.low = low; - } + for (; k > 0; k--) { + var a = this._rand(n2); - /** - * Bitwise NOTs this word. - * - * @return {X64Word} A new x64-Word object after negating. - * - * @example - * - * var negated = x64Word.not(); - */ - // not: function () { - // var high = ~this.high; - // var low = ~this.low; + var g = n.gcd(a); + if (g.cmpn(1) !== 0) + return g; - // return X64Word.create(high, low); - // }, + var x = a.toRed(red).redPow(d); + if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) + continue; - /** - * Bitwise ANDs this word with the passed word. - * - * @param {X64Word} word The x64-Word to AND with this word. - * - * @return {X64Word} A new x64-Word object after ANDing. - * - * @example - * - * var anded = x64Word.and(anotherX64Word); - */ - // and: function (word) { - // var high = this.high & word.high; - // var low = this.low & word.low; + for (var i = 1; i < s; i++) { + x = x.redSqr(); - // return X64Word.create(high, low); - // }, + if (x.cmp(rone) === 0) + return x.fromRed().subn(1).gcd(n); + if (x.cmp(rn1) === 0) + break; + } - /** - * Bitwise ORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to OR with this word. - * - * @return {X64Word} A new x64-Word object after ORing. - * - * @example - * - * var ored = x64Word.or(anotherX64Word); - */ - // or: function (word) { - // var high = this.high | word.high; - // var low = this.low | word.low; + if (i === s) { + x = x.redSqr(); + return x.fromRed().subn(1).gcd(n); + } + } - // return X64Word.create(high, low); - // }, + return false; +}; - /** - * Bitwise XORs this word with the passed word. - * - * @param {X64Word} word The x64-Word to XOR with this word. - * - * @return {X64Word} A new x64-Word object after XORing. - * - * @example - * - * var xored = x64Word.xor(anotherX64Word); - */ - // xor: function (word) { - // var high = this.high ^ word.high; - // var low = this.low ^ word.low; +},{"bn.js":232,"brorand":99}],232:[function(require,module,exports){ +arguments[4][120][0].apply(exports,arguments) +},{"dup":120}],233:[function(require,module,exports){ +module.exports = assert; - // return X64Word.create(high, low); - // }, +function assert(val, msg) { + if (!val) + throw new Error(msg || 'Assertion failed'); +} - /** - * Shifts this word n bits to the left. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftL(25); - */ - // shiftL: function (n) { - // if (n < 32) { - // var high = (this.high << n) | (this.low >>> (32 - n)); - // var low = this.low << n; - // } else { - // var high = this.low << (n - 32); - // var low = 0; - // } +assert.equal = function assertEqual(l, r, msg) { + if (l != r) + throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); +}; - // return X64Word.create(high, low); - // }, +},{}],234:[function(require,module,exports){ +(function (Buffer){ +var createHmac = require('create-hmac') +var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs - /** - * Shifts this word n bits to the right. - * - * @param {number} n The number of bits to shift. - * - * @return {X64Word} A new x64-Word object after shifting. - * - * @example - * - * var shifted = x64Word.shiftR(7); - */ - // shiftR: function (n) { - // if (n < 32) { - // var low = (this.low >>> n) | (this.high << (32 - n)); - // var high = this.high >>> n; - // } else { - // var low = this.high >>> (n - 32); - // var high = 0; - // } +exports.pbkdf2 = pbkdf2 +function pbkdf2 (password, salt, iterations, keylen, digest, callback) { + if (typeof digest === 'function') { + callback = digest + digest = undefined + } - // return X64Word.create(high, low); - // }, + if (typeof callback !== 'function') { + throw new Error('No callback provided to pbkdf2') + } - /** - * Rotates this word n bits to the left. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotL(25); - */ - // rotL: function (n) { - // return this.shiftL(n).or(this.shiftR(64 - n)); - // }, + var result = pbkdf2Sync(password, salt, iterations, keylen, digest) + setTimeout(function () { + callback(undefined, result) + }) +} - /** - * Rotates this word n bits to the right. - * - * @param {number} n The number of bits to rotate. - * - * @return {X64Word} A new x64-Word object after rotating. - * - * @example - * - * var rotated = x64Word.rotR(7); - */ - // rotR: function (n) { - // return this.shiftR(n).or(this.shiftL(64 - n)); - // }, +exports.pbkdf2Sync = pbkdf2Sync +function pbkdf2Sync (password, salt, iterations, keylen, digest) { + if (typeof iterations !== 'number') { + throw new TypeError('Iterations not a number') + } - /** - * Adds this word with the passed word. - * - * @param {X64Word} word The x64-Word to add with this word. - * - * @return {X64Word} A new x64-Word object after adding. - * - * @example - * - * var added = x64Word.add(anotherX64Word); - */ - // add: function (word) { - // var low = (this.low + word.low) | 0; - // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0; - // var high = (this.high + word.high + carry) | 0; + if (iterations < 0) { + throw new TypeError('Bad iterations') + } - // return X64Word.create(high, low); - // } - }); + if (typeof keylen !== 'number') { + throw new TypeError('Key length not a number') + } - /** - * An array of 64-bit words. - * - * @property {Array} words The array of CryptoJS.x64.Word objects. - * @property {number} sigBytes The number of significant bytes in this word array. - */ - var X64WordArray = C_x64.WordArray = Base.extend({ - /** - * Initializes a newly created word array. - * - * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects. - * @param {number} sigBytes (Optional) The number of significant bytes in the words. - * - * @example - * - * var wordArray = CryptoJS.x64.WordArray.create(); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ]); - * - * var wordArray = CryptoJS.x64.WordArray.create([ - * CryptoJS.x64.Word.create(0x00010203, 0x04050607), - * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f) - * ], 10); - */ - init: function (words, sigBytes) { - words = this.words = words || []; + if (keylen < 0 || keylen > MAX_ALLOC) { + throw new TypeError('Bad key length') + } - if (sigBytes != undefined) { - this.sigBytes = sigBytes; - } else { - this.sigBytes = words.length * 8; - } - }, + digest = digest || 'sha1' - /** - * Converts this 64-bit word array to a 32-bit word array. - * - * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array. - * - * @example - * - * var x32WordArray = x64WordArray.toX32(); - */ - toX32: function () { - // Shortcuts - var x64Words = this.words; - var x64WordsLength = x64Words.length; + if (!Buffer.isBuffer(password)) password = new Buffer(password, 'binary') + if (!Buffer.isBuffer(salt)) salt = new Buffer(salt, 'binary') - // Convert - var x32Words = []; - for (var i = 0; i < x64WordsLength; i++) { - var x64Word = x64Words[i]; - x32Words.push(x64Word.high); - x32Words.push(x64Word.low); - } + var hLen + var l = 1 + var DK = new Buffer(keylen) + var block1 = new Buffer(salt.length + 4) + salt.copy(block1, 0, 0, salt.length) - return X32WordArray.create(x32Words, this.sigBytes); - }, + var r + var T - /** - * Creates a copy of this word array. - * - * @return {X64WordArray} The clone. - * - * @example - * - * var clone = x64WordArray.clone(); - */ - clone: function () { - var clone = Base.clone.call(this); + for (var i = 1; i <= l; i++) { + block1.writeUInt32BE(i, salt.length) + var U = createHmac(digest, password).update(block1).digest() - // Clone "words" array - var words = clone.words = this.words.slice(0); + if (!hLen) { + hLen = U.length + T = new Buffer(hLen) + l = Math.ceil(keylen / hLen) + r = keylen - (l - 1) * hLen + } - // Clone each X64Word object - var wordsLength = words.length; - for (var i = 0; i < wordsLength; i++) { - words[i] = words[i].clone(); - } + U.copy(T, 0, 0, hLen) - return clone; - } - }); - }()); + for (var j = 1; j < iterations; j++) { + U = createHmac(digest, password).update(U).digest() + for (var k = 0; k < hLen; k++) { + T[k] ^= U[k] + } + } - return CryptoJS; + var destPos = (i - 1) * hLen + var len = (i === l ? r : hLen) + T.copy(DK, destPos, 0, len) + } -})); -},{"./core":324}],356:[function(require,module,exports){ -arguments[4][56][0].apply(exports,arguments) -},{"../package.json":378,"./elliptic/curve":359,"./elliptic/curves":362,"./elliptic/ec":363,"./elliptic/hmac-drbg":366,"./elliptic/utils":368,"brorand":370,"dup":56}],357:[function(require,module,exports){ -'use strict'; + return DK +} -var bn = require('bn.js'); -var elliptic = require('../../elliptic'); +}).call(this,require("buffer").Buffer) +},{"buffer":147,"create-hmac":173}],235:[function(require,module,exports){ +// shim for using process in browser -var getNAF = elliptic.utils.getNAF; -var getJSF = elliptic.utils.getJSF; -var assert = elliptic.utils.assert; +var process = module.exports = {}; +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; -function BaseCurve(type, conf) { - this.type = type; - this.p = new bn(conf.p, 16); +function cleanUpNextTick() { + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} - // Use Montgomery, when there is no fast reduction for the prime - this.red = conf.prime ? bn.red(conf.prime) : bn.mont(this.p); +function drainQueue() { + if (draining) { + return; + } + var timeout = setTimeout(cleanUpNextTick); + draining = true; - // Useful for many curves - this.zero = new bn(0).toRed(this.red); - this.one = new bn(1).toRed(this.red); - this.two = new bn(2).toRed(this.red); + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + clearTimeout(timeout); +} - // Curve configuration, optional - this.n = conf.n && new bn(conf.n, 16); - this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + setTimeout(drainQueue, 0); + } +}; - // Temporary arrays - this._wnafT1 = new Array(4); - this._wnafT2 = new Array(4); - this._wnafT3 = new Array(4); - this._wnafT4 = new Array(4); +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; } -module.exports = BaseCurve; +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; -BaseCurve.prototype.point = function point() { - throw new Error('Not implemented'); +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); }; -BaseCurve.prototype.validate = function validate() { - throw new Error('Not implemented'); +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); }; +process.umask = function() { return 0; }; -BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { - assert(p.precomputed); - var doubles = p._getDoubles(); +},{}],236:[function(require,module,exports){ +exports.publicEncrypt = require('./publicEncrypt'); +exports.privateDecrypt = require('./privateDecrypt'); - var naf = getNAF(k, 1); - var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); - I /= 3; +exports.privateEncrypt = function privateEncrypt(key, buf) { + return exports.publicEncrypt(key, buf, true); +}; - // Translate into more windowed form - var repr = []; - for (var j = 0; j < naf.length; j += doubles.step) { - var nafW = 0; - for (var k = j + doubles.step - 1; k >= j; k--) - nafW = (nafW << 1) + naf[k]; - repr.push(nafW); +exports.publicDecrypt = function publicDecrypt(key, buf) { + return exports.privateDecrypt(key, buf, true); +}; +},{"./privateDecrypt":239,"./publicEncrypt":240}],237:[function(require,module,exports){ +(function (Buffer){ +var createHash = require('create-hash'); +module.exports = function (seed, len) { + var t = new Buffer(''); + var i = 0, c; + while (t.length < len) { + c = i2ops(i++); + t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]); } + return t.slice(0, len); +}; - var a = this.jpoint(null, null, null); - var b = this.jpoint(null, null, null); - for (var i = I; i > 0; i--) { - for (var j = 0; j < repr.length; j++) { - var nafW = repr[j]; - if (nafW === i) - b = b.mixedAdd(doubles.points[j]); - else if (nafW === -i) - b = b.mixedAdd(doubles.points[j].neg()); - } - a = a.add(b); +function i2ops(c) { + var out = new Buffer(4); + out.writeUInt32BE(c,0); + return out; +} +}).call(this,require("buffer").Buffer) +},{"buffer":147,"create-hash":170}],238:[function(require,module,exports){ +arguments[4][120][0].apply(exports,arguments) +},{"dup":120}],239:[function(require,module,exports){ +(function (Buffer){ +var parseKeys = require('parse-asn1'); +var mgf = require('./mgf'); +var xor = require('./xor'); +var bn = require('bn.js'); +var crt = require('browserify-rsa'); +var createHash = require('create-hash'); +var withPublic = require('./withPublic'); +module.exports = function privateDecrypt(private_key, enc, reverse) { + var padding; + if (private_key.padding) { + padding = private_key.padding; + } else if (reverse) { + padding = 1; + } else { + padding = 4; + } + + var key = parseKeys(private_key); + var k = key.modulus.byteLength(); + if (enc.length > k || new bn(enc).cmp(key.modulus) >= 0) { + throw new Error('decryption error'); + } + var msg; + if (reverse) { + msg = withPublic(new bn(enc), key); + } else { + msg = crt(enc, key); + } + var zBuffer = new Buffer(k - msg.length); + zBuffer.fill(0); + msg = Buffer.concat([zBuffer, msg], k); + if (padding === 4) { + return oaep(key, msg); + } else if (padding === 1) { + return pkcs1(key, msg, reverse); + } else if (padding === 3) { + return msg; + } else { + throw new Error('unknown padding'); } - return a.toP(); }; -BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { - var w = 4; - - // Precompute window - var nafPoints = p._getNAFPoints(w); - w = nafPoints.wnd; - var wnd = nafPoints.points; - - // Get NAF form - var naf = getNAF(k, w); - - // Add `this`*(N+1) for every w-NAF index - var acc = this.jpoint(null, null, null); - for (var i = naf.length - 1; i >= 0; i--) { - // Count zeroes - for (var k = 0; i >= 0 && naf[i] === 0; i--) - k++; - if (i >= 0) - k++; - acc = acc.dblp(k); +function oaep(key, msg){ + var n = key.modulus; + var k = key.modulus.byteLength(); + var mLen = msg.length; + var iHash = createHash('sha1').update(new Buffer('')).digest(); + var hLen = iHash.length; + var hLen2 = 2 * hLen; + if (msg[0] !== 0) { + throw new Error('decryption error'); + } + var maskedSeed = msg.slice(1, hLen + 1); + var maskedDb = msg.slice(hLen + 1); + var seed = xor(maskedSeed, mgf(maskedDb, hLen)); + var db = xor(maskedDb, mgf(seed, k - hLen - 1)); + if (compare(iHash, db.slice(0, hLen))) { + throw new Error('decryption error'); + } + var i = hLen; + while (db[i] === 0) { + i++; + } + if (db[i++] !== 1) { + throw new Error('decryption error'); + } + return db.slice(i); +} - if (i < 0) +function pkcs1(key, msg, reverse){ + var p1 = msg.slice(0, 2); + var i = 2; + var status = 0; + while (msg[i++] !== 0) { + if (i >= msg.length) { + status++; break; - var z = naf[i]; - assert(z !== 0); - if (p.type === 'affine') { - // J +- P - if (z > 0) - acc = acc.mixedAdd(wnd[(z - 1) >> 1]); - else - acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); - } else { - // J +- J - if (z > 0) - acc = acc.add(wnd[(z - 1) >> 1]); - else - acc = acc.add(wnd[(-z - 1) >> 1].neg()); } } - return p.type === 'affine' ? acc.toP() : acc; -}; - -BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, - points, - coeffs, - len) { - var wndWidth = this._wnafT1; - var wnd = this._wnafT2; - var naf = this._wnafT3; + var ps = msg.slice(2, i - 1); + var p2 = msg.slice(i - 1, i); - // Fill all arrays - var max = 0; - for (var i = 0; i < len; i++) { - var p = points[i]; - var nafPoints = p._getNAFPoints(defW); - wndWidth[i] = nafPoints.wnd; - wnd[i] = nafPoints.points; + if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)){ + status++; } + if (ps.length < 8) { + status++; + } + if (status) { + throw new Error('decryption error'); + } + return msg.slice(i); +} +function compare(a, b){ + a = new Buffer(a); + b = new Buffer(b); + var dif = 0; + var len = a.length; + if (a.length !== b.length) { + dif++; + len = Math.min(a.length, b.length); + } + var i = -1; + while (++i < len) { + dif += (a[i] ^ b[i]); + } + return dif; +} +}).call(this,require("buffer").Buffer) +},{"./mgf":237,"./withPublic":241,"./xor":242,"bn.js":238,"browserify-rsa":119,"buffer":147,"create-hash":170,"parse-asn1":145}],240:[function(require,module,exports){ +(function (Buffer){ +var parseKeys = require('parse-asn1'); +var randomBytes = require('randombytes'); +var createHash = require('create-hash'); +var mgf = require('./mgf'); +var xor = require('./xor'); +var bn = require('bn.js'); +var withPublic = require('./withPublic'); +var crt = require('browserify-rsa'); - // Comb small window NAFs - for (var i = len - 1; i >= 1; i -= 2) { - var a = i - 1; - var b = i; - if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { - naf[a] = getNAF(coeffs[a], wndWidth[a]); - naf[b] = getNAF(coeffs[b], wndWidth[b]); - max = Math.max(naf[a].length, max); - max = Math.max(naf[b].length, max); - continue; - } - - var comb = [ - points[a], /* 1 */ - null, /* 3 */ - null, /* 5 */ - points[b] /* 7 */ - ]; - - // Try to avoid Projective points, if possible - if (points[a].y.cmp(points[b].y) === 0) { - comb[1] = points[a].add(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].add(points[b].neg()); - } else { - comb[1] = points[a].toJ().mixedAdd(points[b]); - comb[2] = points[a].toJ().mixedAdd(points[b].neg()); - } - - var index = [ - -3, /* -1 -1 */ - -1, /* -1 0 */ - -5, /* -1 1 */ - -7, /* 0 -1 */ - 0, /* 0 0 */ - 7, /* 0 1 */ - 5, /* 1 -1 */ - 1, /* 1 0 */ - 3 /* 1 1 */ - ]; - - var jsf = getJSF(coeffs[a], coeffs[b]); - max = Math.max(jsf[0].length, max); - naf[a] = new Array(max); - naf[b] = new Array(max); - for (var j = 0; j < max; j++) { - var ja = jsf[0][j] | 0; - var jb = jsf[1][j] | 0; +var constants = { + RSA_PKCS1_OAEP_PADDING: 4, + RSA_PKCS1_PADDIN: 1, + RSA_NO_PADDING: 3 +}; - naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; - naf[b][j] = 0; - wnd[a] = comb; +module.exports = function publicEncrypt(public_key, msg, reverse) { + var padding; + if (public_key.padding) { + padding = public_key.padding; + } else if (reverse) { + padding = 1; + } else { + padding = 4; + } + var key = parseKeys(public_key); + var paddedMsg; + if (padding === 4) { + paddedMsg = oaep(key, msg); + } else if (padding === 1) { + paddedMsg = pkcs1(key, msg, reverse); + } else if (padding === 3) { + paddedMsg = new bn(msg); + if (paddedMsg.cmp(key.modulus) >= 0) { + throw new Error('data too long for modulus'); } + } else { + throw new Error('unknown padding'); } + if (reverse) { + return crt(paddedMsg, key); + } else { + return withPublic(paddedMsg, key); + } +}; - var acc = this.jpoint(null, null, null); - var tmp = this._wnafT4; - for (var i = max; i >= 0; i--) { - var k = 0; - - while (i >= 0) { - var zero = true; - for (var j = 0; j < len; j++) { - tmp[j] = naf[j][i] | 0; - if (tmp[j] !== 0) - zero = false; - } - if (!zero) - break; - k++; - i--; +function oaep(key, msg){ + var k = key.modulus.byteLength(); + var mLen = msg.length; + var iHash = createHash('sha1').update(new Buffer('')).digest(); + var hLen = iHash.length; + var hLen2 = 2 * hLen; + if (mLen > k - hLen2 - 2) { + throw new Error('message too long'); + } + var ps = new Buffer(k - mLen - hLen2 - 2); + ps.fill(0); + var dblen = k - hLen - 1; + var seed = randomBytes(hLen); + var maskedDb = xor(Buffer.concat([iHash, ps, new Buffer([1]), msg], dblen), mgf(seed, dblen)); + var maskedSeed = xor(seed, mgf(maskedDb, hLen)); + return new bn(Buffer.concat([new Buffer([0]), maskedSeed, maskedDb], k)); +} +function pkcs1(key, msg, reverse){ + var mLen = msg.length; + var k = key.modulus.byteLength(); + if (mLen > k - 11) { + throw new Error('message too long'); + } + var ps; + if (reverse) { + ps = new Buffer(k - mLen - 3); + ps.fill(0xff); + } else { + ps = nonZero(k - mLen - 3); + } + return new bn(Buffer.concat([new Buffer([0, reverse?1:2]), ps, new Buffer([0]), msg], k)); +} +function nonZero(len, crypto) { + var out = new Buffer(len); + var i = 0; + var cache = randomBytes(len*2); + var cur = 0; + var num; + while (i < len) { + if (cur === cache.length) { + cache = randomBytes(len*2); + cur = 0; } - if (i >= 0) - k++; - acc = acc.dblp(k); - if (i < 0) - break; - - for (var j = 0; j < len; j++) { - var z = tmp[j]; - var p; - if (z === 0) - continue; - else if (z > 0) - p = wnd[j][(z - 1) >> 1]; - else if (z < 0) - p = wnd[j][(-z - 1) >> 1].neg(); - - if (p.type === 'affine') - acc = acc.mixedAdd(p); - else - acc = acc.add(p); + num = cache[cur++]; + if (num) { + out[i++] = num; } } - // Zeroify references - for (var i = 0; i < len; i++) - wnd[i] = null; - return acc.toP(); -}; - -function BasePoint(curve, type) { - this.curve = curve; - this.type = type; - this.precomputed = null; + return out; +} +}).call(this,require("buffer").Buffer) +},{"./mgf":237,"./withPublic":241,"./xor":242,"bn.js":238,"browserify-rsa":119,"buffer":147,"create-hash":170,"parse-asn1":145,"randombytes":247}],241:[function(require,module,exports){ +(function (Buffer){ +var bn = require('bn.js'); +function withPublic(paddedMsg, key) { + return new Buffer(paddedMsg + .toRed(bn.mont(key.modulus)) + .redPow(new bn(key.publicExponent)) + .fromRed() + .toArray()); } -BaseCurve.BasePoint = BasePoint; - -BasePoint.prototype.validate = function validate() { - return this.curve.validate(this); -}; - -BasePoint.prototype.precompute = function precompute(power) { - if (this.precomputed) - return this; - - var precomputed = { - doubles: null, - naf: null, - beta: null - }; - precomputed.naf = this._getNAFPoints(8); - precomputed.doubles = this._getDoubles(4, power); - precomputed.beta = this._getBeta(); - this.precomputed = precomputed; - return this; +module.exports = withPublic; +}).call(this,require("buffer").Buffer) +},{"bn.js":238,"buffer":147}],242:[function(require,module,exports){ +module.exports = function xor(a, b) { + var len = a.length; + var i = -1; + while (++i < len) { + a[i] ^= b[i]; + } + return a }; +},{}],243:[function(require,module,exports){ +(function (global){ +/*! https://mths.be/punycode v1.4.0 by @mathias */ +;(function(root) { -BasePoint.prototype._hasDoubles = function _hasDoubles(k) { - if (!this.precomputed) - return false; + /** Detect free variables */ + var freeExports = typeof exports == 'object' && exports && + !exports.nodeType && exports; + var freeModule = typeof module == 'object' && module && + !module.nodeType && module; + var freeGlobal = typeof global == 'object' && global; + if ( + freeGlobal.global === freeGlobal || + freeGlobal.window === freeGlobal || + freeGlobal.self === freeGlobal + ) { + root = freeGlobal; + } - var doubles = this.precomputed.doubles; - if (!doubles) - return false; + /** + * The `punycode` object. + * @name punycode + * @type Object + */ + var punycode, - return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); -}; + /** Highest positive signed 32-bit float value */ + maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 -BasePoint.prototype._getDoubles = function _getDoubles(step, power) { - if (this.precomputed && this.precomputed.doubles) - return this.precomputed.doubles; + /** Bootstring parameters */ + base = 36, + tMin = 1, + tMax = 26, + skew = 38, + damp = 700, + initialBias = 72, + initialN = 128, // 0x80 + delimiter = '-', // '\x2D' - var doubles = [ this ]; - var acc = this; - for (var i = 0; i < power; i += step) { - for (var j = 0; j < step; j++) - acc = acc.dbl(); - doubles.push(acc); - } - return { - step: step, - points: doubles - }; -}; + /** Regular expressions */ + regexPunycode = /^xn--/, + regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars + regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators -BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { - if (this.precomputed && this.precomputed.naf) - return this.precomputed.naf; + /** Error messages */ + errors = { + 'overflow': 'Overflow: input needs wider integers to process', + 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', + 'invalid-input': 'Invalid input' + }, - var res = [ this ]; - var max = (1 << wnd) - 1; - var dbl = max === 1 ? null : this.dbl(); - for (var i = 1; i < max; i++) - res[i] = res[i - 1].add(dbl); - return { - wnd: wnd, - points: res - }; -}; + /** Convenience shortcuts */ + baseMinusTMin = base - tMin, + floor = Math.floor, + stringFromCharCode = String.fromCharCode, -BasePoint.prototype._getBeta = function _getBeta() { - return null; -}; + /** Temporary variable */ + key; -BasePoint.prototype.dblp = function dblp(k) { - var r = this; - for (var i = 0; i < k; i++) - r = r.dbl(); - return r; -}; + /*--------------------------------------------------------------------------*/ -},{"../../elliptic":356,"bn.js":369}],358:[function(require,module,exports){ -'use strict'; + /** + * A generic error utility function. + * @private + * @param {String} type The error type. + * @returns {Error} Throws a `RangeError` with the applicable error message. + */ + function error(type) { + throw new RangeError(errors[type]); + } -var curve = require('../curve'); -var elliptic = require('../../elliptic'); -var bn = require('bn.js'); -var inherits = require('inherits'); -var Base = curve.base; + /** + * A generic `Array#map` utility function. + * @private + * @param {Array} array The array to iterate over. + * @param {Function} callback The function that gets called for every array + * item. + * @returns {Array} A new array of values returned by the callback function. + */ + function map(array, fn) { + var length = array.length; + var result = []; + while (length--) { + result[length] = fn(array[length]); + } + return result; + } -var assert = elliptic.utils.assert; + /** + * A simple `Array#map`-like wrapper to work with domain name strings or email + * addresses. + * @private + * @param {String} domain The domain name or email address. + * @param {Function} callback The function that gets called for every + * character. + * @returns {Array} A new string of characters returned by the callback + * function. + */ + function mapDomain(string, fn) { + var parts = string.split('@'); + var result = ''; + if (parts.length > 1) { + // In email addresses, only the domain name should be punycoded. Leave + // the local part (i.e. everything up to `@`) intact. + result = parts[0] + '@'; + string = parts[1]; + } + // Avoid `split(regex)` for IE8 compatibility. See #17. + string = string.replace(regexSeparators, '\x2E'); + var labels = string.split('.'); + var encoded = map(labels, fn).join('.'); + return result + encoded; + } -function EdwardsCurve(conf) { - // NOTE: Important as we are creating point in Base.call() - this.twisted = (conf.a | 0) !== 1; - this.mOneA = this.twisted && (conf.a | 0) === -1; - this.extended = this.mOneA; + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + * @see `punycode.ucs2.encode` + * @see + * @memberOf punycode.ucs2 + * @name decode + * @param {String} string The Unicode input string (UCS-2). + * @returns {Array} The new array of code points. + */ + function ucs2decode(string) { + var output = [], + counter = 0, + length = string.length, + value, + extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } - Base.call(this, 'edwards', conf); + /** + * Creates a string based on an array of numeric code points. + * @see `punycode.ucs2.decode` + * @memberOf punycode.ucs2 + * @name encode + * @param {Array} codePoints The array of numeric code points. + * @returns {String} The new Unicode string (UCS-2). + */ + function ucs2encode(array) { + return map(array, function(value) { + var output = ''; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + return output; + }).join(''); + } - this.a = new bn(conf.a, 16).mod(this.red.m).toRed(this.red); - this.c = new bn(conf.c, 16).toRed(this.red); - this.c2 = this.c.redSqr(); - this.d = new bn(conf.d, 16).toRed(this.red); - this.dd = this.d.redAdd(this.d); + /** + * Converts a basic code point into a digit/integer. + * @see `digitToBasic()` + * @private + * @param {Number} codePoint The basic numeric code point value. + * @returns {Number} The numeric value of a basic code point (for use in + * representing integers) in the range `0` to `base - 1`, or `base` if + * the code point does not represent a value. + */ + function basicToDigit(codePoint) { + if (codePoint - 48 < 10) { + return codePoint - 22; + } + if (codePoint - 65 < 26) { + return codePoint - 65; + } + if (codePoint - 97 < 26) { + return codePoint - 97; + } + return base; + } - assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); - this.oneC = (conf.c | 0) === 1; -} -inherits(EdwardsCurve, Base); -module.exports = EdwardsCurve; + /** + * Converts a digit/integer into a basic code point. + * @see `basicToDigit()` + * @private + * @param {Number} digit The numeric value of a basic code point. + * @returns {Number} The basic code point whose value (when used for + * representing integers) is `digit`, which needs to be in the range + * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is + * used; else, the lowercase form is used. The behavior is undefined + * if `flag` is non-zero and `digit` has no uppercase form. + */ + function digitToBasic(digit, flag) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); + } -EdwardsCurve.prototype._mulA = function _mulA(num) { - if (this.mOneA) - return num.redNeg(); - else - return this.a.redMul(num); -}; + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + * @private + */ + function adapt(delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor(delta / damp) : delta >> 1; + delta += floor(delta / numPoints); + for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor(delta / baseMinusTMin); + } + return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); + } -EdwardsCurve.prototype._mulC = function _mulC(num) { - if (this.oneC) - return num; - else - return this.c.redMul(num); -}; + /** + * Converts a Punycode string of ASCII-only symbols to a string of Unicode + * symbols. + * @memberOf punycode + * @param {String} input The Punycode string of ASCII-only symbols. + * @returns {String} The resulting string of Unicode symbols. + */ + function decode(input) { + // Don't use UCS-2 + var output = [], + inputLength = input.length, + out, + i = 0, + n = initialN, + bias = initialBias, + basic, + j, + index, + oldi, + w, + k, + digit, + t, + /** Cached calculation results */ + baseMinusT; -// Just for compatibility with Short curve -EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { - return this.point(x, y, z, t); -}; + // Handle the basic code points: let `basic` be the number of input code + // points before the last delimiter, or `0` if there is none, then copy + // the first basic code points to the output. -EdwardsCurve.prototype.pointFromX = function pointFromX(odd, x) { - x = new bn(x, 16); - if (!x.red) - x = x.toRed(this.red); + basic = input.lastIndexOf(delimiter); + if (basic < 0) { + basic = 0; + } - var x2 = x.redSqr(); - var rhs = this.c2.redSub(this.a.redMul(x2)); - var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); + for (j = 0; j < basic; ++j) { + // if it's not a basic code point + if (input.charCodeAt(j) >= 0x80) { + error('not-basic'); + } + output.push(input.charCodeAt(j)); + } - var y = rhs.redMul(lhs.redInvm()).redSqrt(); - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); + // Main decoding loop: start just after the last delimiter if any basic code + // points were copied; start at the beginning otherwise. - return this.point(x, y, curve.one); -}; + for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { -EdwardsCurve.prototype.validate = function validate(point) { - if (point.isInfinity()) - return true; + // `index` is the index of the next character to be consumed. + // Decode a generalized variable-length integer into `delta`, + // which gets added to `i`. The overflow checking is easier + // if we increase `i` as we go, then subtract off its starting + // value at the end to obtain `delta`. + for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) - point.normalize(); + if (index >= inputLength) { + error('invalid-input'); + } - var x2 = point.x.redSqr(); - var y2 = point.y.redSqr(); - var lhs = x2.redMul(this.a).redAdd(y2); - var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); + digit = basicToDigit(input.charCodeAt(index++)); - return lhs.cmp(rhs) === 0; -}; + if (digit >= base || digit > floor((maxInt - i) / w)) { + error('overflow'); + } -function Point(curve, x, y, z, t) { - Base.BasePoint.call(this, curve, 'projective'); - if (x === null && y === null && z === null) { - this.x = this.curve.zero; - this.y = this.curve.one; - this.z = this.curve.one; - this.t = this.curve.zero; - this.zOne = true; - } else { - this.x = new bn(x, 16); - this.y = new bn(y, 16); - this.z = z ? new bn(z, 16) : this.curve.one; - this.t = t && new bn(t, 16); - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); - if (this.t && !this.t.red) - this.t = this.t.toRed(this.curve.red); - this.zOne = this.z === this.curve.one; + i += digit * w; + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - // Use extended coordinates - if (this.curve.extended && !this.t) { - this.t = this.x.redMul(this.y); - if (!this.zOne) - this.t = this.t.redMul(this.z.redInvm()); - } - } -} -inherits(Point, Base.BasePoint); + if (digit < t) { + break; + } -EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { - return Point.fromJSON(this, obj); -}; + baseMinusT = base - t; + if (w > floor(maxInt / baseMinusT)) { + error('overflow'); + } -EdwardsCurve.prototype.point = function point(x, y, z, t) { - return new Point(this, x, y, z, t); -}; + w *= baseMinusT; -Point.fromJSON = function fromJSON(curve, obj) { - return new Point(curve, obj[0], obj[1], obj[2]); -}; + } -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; + out = output.length + 1; + bias = adapt(i - oldi, out, oldi == 0); -Point.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.x.cmpn(0) === 0 && - this.y.cmp(this.z) === 0; -}; + // `i` was supposed to wrap around from `out` to `0`, + // incrementing `n` each time, so we'll fix that now: + if (floor(i / out) > maxInt - n) { + error('overflow'); + } -Point.prototype._extDbl = function _extDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #doubling-dbl-2008-hwcd - // 4M + 4S + n += floor(i / out); + i %= out; - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = 2 * Z1^2 - var c = this.z.redSqr(); - c = c.redIAdd(c); - // D = a * A - var d = this.curve._mulA(a); - // E = (X1 + Y1)^2 - A - B - var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); - // G = D + B - var g = d.redAdd(b); - // F = G - C - var f = g.redSub(c); - // H = D - B - var h = d.redSub(b); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; + // Insert `n` at position `i` of the output + output.splice(i++, 0, n); -Point.prototype._projDbl = function _projDbl() { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #doubling-dbl-2008-bbjlp - // #doubling-dbl-2007-bl - // and others - // Generally 3M + 4S or 2M + 4S + } - // B = (X1 + Y1)^2 - var b = this.x.redAdd(this.y).redSqr(); - // C = X1^2 - var c = this.x.redSqr(); - // D = Y1^2 - var d = this.y.redSqr(); + return ucs2encode(output); + } - var nx; - var ny; - var nz; - if (this.curve.twisted) { - // E = a * C - var e = this.curve._mulA(c); - // F = E + D - var f = e.redAdd(d); - if (this.zOne) { - // X3 = (B - C - D) * (F - 2) - nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F^2 - 2 * F - nz = f.redSqr().redSub(f).redSub(f); - } else { - // H = Z1^2 - var h = this.z.redSqr(); - // J = F - 2 * H - var j = f.redSub(h).redISub(h); - // X3 = (B-C-D)*J - nx = b.redSub(c).redISub(d).redMul(j); - // Y3 = F * (E - D) - ny = f.redMul(e.redSub(d)); - // Z3 = F * J - nz = f.redMul(j); - } - } else { - // E = C + D - var e = c.redAdd(d); - // H = (c * Z1)^2 - var h = this.curve._mulC(this.c.redMul(this.z)).redSqr(); - // J = E - 2 * H - var j = e.redSub(h).redSub(h); - // X3 = c * (B - E) * J - nx = this.curve._mulC(b.redISub(e)).redMul(j); - // Y3 = c * E * (C - D) - ny = this.curve._mulC(e).redMul(c.redISub(d)); - // Z3 = E * J - nz = e.redMul(j); - } - return this.curve.point(nx, ny, nz); -}; + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + * @memberOf punycode + * @param {String} input The string of Unicode symbols. + * @returns {String} The resulting Punycode string of ASCII-only symbols. + */ + function encode(input) { + var n, + delta, + handledCPCount, + basicLength, + bias, + j, + m, + q, + k, + t, + currentValue, + output = [], + /** `inputLength` will hold the number of code points in `input`. */ + inputLength, + /** Cached calculation results */ + handledCPCountPlusOne, + baseMinusT, + qMinusT; -Point.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; + // Convert the input in UCS-2 to Unicode + input = ucs2decode(input); - // Double in extended coordinates - if (this.curve.extended) - return this._extDbl(); - else - return this._projDbl(); -}; + // Cache the length + inputLength = input.length; -Point.prototype._extAdd = function _extAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html - // #addition-add-2008-hwcd-3 - // 8M + // Initialize the state + n = initialN; + delta = 0; + bias = initialBias; - // A = (Y1 - X1) * (Y2 - X2) - var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); - // B = (Y1 + X1) * (Y2 + X2) - var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); - // C = T1 * k * T2 - var c = this.t.redMul(this.curve.dd).redMul(p.t); - // D = Z1 * 2 * Z2 - var d = this.z.redMul(p.z.redAdd(p.z)); - // E = B - A - var e = b.redSub(a); - // F = D - C - var f = d.redSub(c); - // G = D + C - var g = d.redAdd(c); - // H = B + A - var h = b.redAdd(a); - // X3 = E * F - var nx = e.redMul(f); - // Y3 = G * H - var ny = g.redMul(h); - // T3 = E * H - var nt = e.redMul(h); - // Z3 = F * G - var nz = f.redMul(g); - return this.curve.point(nx, ny, nz, nt); -}; + // Handle the basic code points + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } -Point.prototype._projAdd = function _projAdd(p) { - // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html - // #addition-add-2008-bbjlp - // #addition-add-2007-bl - // 10M + 1S + handledCPCount = basicLength = output.length; - // A = Z1 * Z2 - var a = this.z.redMul(p.z); - // B = A^2 - var b = a.redSqr(); - // C = X1 * X2 - var c = this.x.redMul(p.x); - // D = Y1 * Y2 - var d = this.y.redMul(p.y); - // E = d * C * D - var e = this.curve.d.redMul(c).redMul(d); - // F = B - E - var f = b.redSub(e); - // G = B + E - var g = b.redAdd(e); - // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) - var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); - var nx = a.redMul(f).redMul(tmp); - var ny; - var nz; - if (this.curve.twisted) { - // Y3 = A * G * (D - a * C) - ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); - // Z3 = F * G - nz = f.redMul(g); - } else { - // Y3 = A * G * (D - C) - ny = a.redMul(g).redMul(d.redSub(c)); - // Z3 = c * F * G - nz = this.curve._mulC(f).redMul(g); - } - return this.curve.point(nx, ny, nz); -}; + // `handledCPCount` is the number of code points that have been handled; + // `basicLength` is the number of basic code points. -Point.prototype.add = function add(p) { - if (this.isInfinity()) - return p; - if (p.isInfinity()) - return this; + // Finish the basic string - if it is not empty - with a delimiter + if (basicLength) { + output.push(delimiter); + } - if (this.curve.extended) - return this._extAdd(p); - else - return this._projAdd(p); -}; + // Main encoding loop: + while (handledCPCount < inputLength) { -Point.prototype.mul = function mul(k) { - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else - return this.curve._wnafMul(this, k); -}; + // All non-basic code points < n have been handled already. Find the next + // larger one: + for (m = maxInt, j = 0; j < inputLength; ++j) { + currentValue = input[j]; + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } -Point.prototype.mulAdd = function mulAdd(k1, p, k2) { - return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2); -}; + // Increase `delta` enough to advance the decoder's state to , + // but guard against overflow + handledCPCountPlusOne = handledCPCount + 1; + if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { + error('overflow'); + } -Point.prototype.normalize = function normalize() { - if (this.zOne) - return this; + delta += (m - n) * handledCPCountPlusOne; + n = m; - // Normalize coordinates - var zi = this.z.redInvm(); - this.x = this.x.redMul(zi); - this.y = this.y.redMul(zi); - if (this.t) - this.t = this.t.redMul(zi); - this.z = this.curve.one; - this.zOne = true; - return this; -}; + for (j = 0; j < inputLength; ++j) { + currentValue = input[j]; -Point.prototype.neg = function neg() { - return this.curve.point(this.x.redNeg(), - this.y, - this.z, - this.t && this.t.redNeg()); -}; + if (currentValue < n && ++delta > maxInt) { + error('overflow'); + } -Point.prototype.getX = function getX() { - this.normalize(); - return this.x.fromRed(); -}; + if (currentValue == n) { + // Represent delta as a generalized variable-length integer + for (q = delta, k = base; /* no condition */; k += base) { + t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); + if (q < t) { + break; + } + qMinusT = q - t; + baseMinusT = base - t; + output.push( + stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) + ); + q = floor(qMinusT / baseMinusT); + } -Point.prototype.getY = function getY() { - this.normalize(); - return this.y.fromRed(); -}; + output.push(stringFromCharCode(digitToBasic(q, 0))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } -// Compatibility with BaseCurve -Point.prototype.toP = Point.prototype.normalize; -Point.prototype.mixedAdd = Point.prototype.add; + ++delta; + ++n; -},{"../../elliptic":356,"../curve":359,"bn.js":369,"inherits":377}],359:[function(require,module,exports){ -arguments[4][59][0].apply(exports,arguments) -},{"./base":357,"./edwards":358,"./mont":360,"./short":361,"dup":59}],360:[function(require,module,exports){ -arguments[4][60][0].apply(exports,arguments) -},{"../curve":359,"bn.js":369,"dup":60,"inherits":377}],361:[function(require,module,exports){ -'use strict'; + } + return output.join(''); + } -var curve = require('../curve'); -var elliptic = require('../../elliptic'); -var bn = require('bn.js'); -var inherits = require('inherits'); -var Base = curve.base; + /** + * Converts a Punycode string representing a domain name or an email address + * to Unicode. Only the Punycoded parts of the input will be converted, i.e. + * it doesn't matter if you call it on a string that has already been + * converted to Unicode. + * @memberOf punycode + * @param {String} input The Punycoded domain name or email address to + * convert to Unicode. + * @returns {String} The Unicode representation of the given Punycode + * string. + */ + function toUnicode(input) { + return mapDomain(input, function(string) { + return regexPunycode.test(string) + ? decode(string.slice(4).toLowerCase()) + : string; + }); + } -var assert = elliptic.utils.assert; + /** + * Converts a Unicode string representing a domain name or an email address to + * Punycode. Only the non-ASCII parts of the domain name will be converted, + * i.e. it doesn't matter if you call it with a domain that's already in + * ASCII. + * @memberOf punycode + * @param {String} input The domain name or email address to convert, as a + * Unicode string. + * @returns {String} The Punycode representation of the given domain name or + * email address. + */ + function toASCII(input) { + return mapDomain(input, function(string) { + return regexNonASCII.test(string) + ? 'xn--' + encode(string) + : string; + }); + } -function ShortCurve(conf) { - Base.call(this, 'short', conf); + /*--------------------------------------------------------------------------*/ - this.a = new bn(conf.a, 16).toRed(this.red); - this.b = new bn(conf.b, 16).toRed(this.red); - this.tinv = this.two.redInvm(); + /** Define the public API */ + punycode = { + /** + * A string representing the current Punycode.js version number. + * @memberOf punycode + * @type String + */ + 'version': '1.3.2', + /** + * An object of methods to convert from JavaScript's internal character + * representation (UCS-2) to Unicode code points, and back. + * @see + * @memberOf punycode + * @type Object + */ + 'ucs2': { + 'decode': ucs2decode, + 'encode': ucs2encode + }, + 'decode': decode, + 'encode': encode, + 'toASCII': toASCII, + 'toUnicode': toUnicode + }; - this.zeroA = this.a.fromRed().cmpn(0) === 0; - this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; + /** Expose `punycode` */ + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define('punycode', function() { + return punycode; + }); + } else if (freeExports && freeModule) { + if (module.exports == freeExports) { + // in Node.js, io.js, or RingoJS v0.8.0+ + freeModule.exports = punycode; + } else { + // in Narwhal or RingoJS v0.7.0- + for (key in punycode) { + punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); + } + } + } else { + // in Rhino or a web browser + root.punycode = punycode; + } - // If the curve is endomorphic, precalculate beta and lambda - this.endo = this._getEndomorphism(conf); - this._endoWnafT1 = new Array(4); - this._endoWnafT2 = new Array(4); +}(this)); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],244:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +// If obj.hasOwnProperty has been overridden, then calling +// obj.hasOwnProperty(prop) will break. +// See: https://github.com/joyent/node/issues/1707 +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); } -inherits(ShortCurve, Base); -module.exports = ShortCurve; -ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { - // No efficient endomorphism - if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) - return; +module.exports = function(qs, sep, eq, options) { + sep = sep || '&'; + eq = eq || '='; + var obj = {}; - // Compute beta and lambda, that lambda * P = (beta * Px; Py) - var beta; - var lambda; - if (conf.beta) { - beta = new bn(conf.beta, 16).toRed(this.red); - } else { - var betas = this._getEndoRoots(this.p); - // Choose the smallest beta - beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; - beta = beta.toRed(this.red); + if (typeof qs !== 'string' || qs.length === 0) { + return obj; } - if (conf.lambda) { - lambda = new bn(conf.lambda, 16); - } else { - // Choose the lambda that is matching selected beta - var lambdas = this._getEndoRoots(this.n); - if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { - lambda = lambdas[0]; - } else { - lambda = lambdas[1]; - assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); - } + + var regexp = /\+/g; + qs = qs.split(sep); + + var maxKeys = 1000; + if (options && typeof options.maxKeys === 'number') { + maxKeys = options.maxKeys; } - // Get basis vectors, used for balanced length-two representation - var basis; - if (conf.basis) { - basis = conf.basis.map(function(vec) { - return { - a: new bn(vec.a, 16), - b: new bn(vec.b, 16) - }; - }); - } else { - basis = this._getEndoBasis(lambda); + var len = qs.length; + // maxKeys <= 0 means that we should not limit keys count + if (maxKeys > 0 && len > maxKeys) { + len = maxKeys; } - return { - beta: beta, - lambda: lambda, - basis: basis - }; -}; + for (var i = 0; i < len; ++i) { + var x = qs[i].replace(regexp, '%20'), + idx = x.indexOf(eq), + kstr, vstr, k, v; -ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { - // Find roots of for x^2 + x + 1 in F - // Root = (-1 +- Sqrt(-3)) / 2 - // - var red = num === this.p ? this.red : bn.mont(num); - var tinv = new bn(2).toRed(red).redInvm(); - var ntinv = tinv.redNeg(); + if (idx >= 0) { + kstr = x.substr(0, idx); + vstr = x.substr(idx + 1); + } else { + kstr = x; + vstr = ''; + } - var s = new bn(3).toRed(red).redNeg().redSqrt().redMul(tinv); + k = decodeURIComponent(kstr); + v = decodeURIComponent(vstr); - var l1 = ntinv.redAdd(s).fromRed(); - var l2 = ntinv.redSub(s).fromRed(); - return [ l1, l2 ]; + if (!hasOwnProperty(obj, k)) { + obj[k] = v; + } else if (isArray(obj[k])) { + obj[k].push(v); + } else { + obj[k] = [obj[k], v]; + } + } + + return obj; }; -ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { - // aprxSqrt >= sqrt(this.n) - var aprxSqrt = this.n.shrn(Math.floor(this.n.bitLength() / 2)); +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; - // 3.74 - // Run EGCD, until r(L + 1) < aprxSqrt - var u = lambda; - var v = this.n.clone(); - var x1 = new bn(1); - var y1 = new bn(0); - var x2 = new bn(0); - var y2 = new bn(1); +},{}],245:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. - // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) - var a0; - var b0; - // First vector - var a1; - var b1; - // Second vector - var a2; - var b2; +'use strict'; - var prevR; - var i = 0; - var r; - var x; - while (u.cmpn(0) !== 0) { - var q = v.div(u); - r = v.sub(q.mul(u)); - x = x2.sub(q.mul(x1)); - var y = y2.sub(q.mul(y1)); +var stringifyPrimitive = function(v) { + switch (typeof v) { + case 'string': + return v; - if (!a1 && r.cmp(aprxSqrt) < 0) { - a0 = prevR.neg(); - b0 = x1; - a1 = r.neg(); - b1 = x; - } else if (a1 && ++i === 2) { - break; - } - prevR = r; + case 'boolean': + return v ? 'true' : 'false'; - v = u; - u = r; - x2 = x1; - x1 = x; - y2 = y1; - y1 = y; - } - a2 = r.neg(); - b2 = x; + case 'number': + return isFinite(v) ? v : ''; - var len1 = a1.sqr().add(b1.sqr()); - var len2 = a2.sqr().add(b2.sqr()); - if (len2.cmp(len1) >= 0) { - a2 = a0; - b2 = b0; + default: + return ''; } +}; - // Normalize signs - if (a1.sign) { - a1 = a1.neg(); - b1 = b1.neg(); +module.exports = function(obj, sep, eq, name) { + sep = sep || '&'; + eq = eq || '='; + if (obj === null) { + obj = undefined; } - if (a2.sign) { - a2 = a2.neg(); - b2 = b2.neg(); + + if (typeof obj === 'object') { + return map(objectKeys(obj), function(k) { + var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; + if (isArray(obj[k])) { + return map(obj[k], function(v) { + return ks + encodeURIComponent(stringifyPrimitive(v)); + }).join(sep); + } else { + return ks + encodeURIComponent(stringifyPrimitive(obj[k])); + } + }).join(sep); + } - return [ - { a: a1, b: b1 }, - { a: a2, b: b2 } - ]; + if (!name) return ''; + return encodeURIComponent(stringifyPrimitive(name)) + eq + + encodeURIComponent(stringifyPrimitive(obj)); }; -ShortCurve.prototype._endoSplit = function _endoSplit(k) { - var basis = this.endo.basis; - var v1 = basis[0]; - var v2 = basis[1]; - - var c1 = v2.b.mul(k).divRound(this.n); - var c2 = v1.b.neg().mul(k).divRound(this.n); +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; - var p1 = c1.mul(v1.a); - var p2 = c2.mul(v2.a); - var q1 = c1.mul(v1.b); - var q2 = c2.mul(v2.b); +function map (xs, f) { + if (xs.map) return xs.map(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + res.push(f(xs[i], i)); + } + return res; +} - // Calculate answer - var k1 = k.sub(p1).sub(p2); - var k2 = q1.add(q2).neg(); - return { k1: k1, k2: k2 }; +var objectKeys = Object.keys || function (obj) { + var res = []; + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); + } + return res; }; -ShortCurve.prototype.pointFromX = function pointFromX(odd, x) { - x = new bn(x, 16); - if (!x.red) - x = x.toRed(this.red); - - var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); - var y = y2.redSqrt(); +},{}],246:[function(require,module,exports){ +'use strict'; - // XXX Is there any way to tell if the number is odd without converting it - // to non-red form? - var isOdd = y.fromRed().isOdd(); - if (odd && !isOdd || !odd && isOdd) - y = y.redNeg(); +exports.decode = exports.parse = require('./decode'); +exports.encode = exports.stringify = require('./encode'); - return this.point(x, y); -}; +},{"./decode":244,"./encode":245}],247:[function(require,module,exports){ +(function (process,global,Buffer){ +'use strict' -ShortCurve.prototype.validate = function validate(point) { - if (point.inf) - return true; +function oldBrowser () { + throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') +} - var x = point.x; - var y = point.y; +var crypto = global.crypto || global.msCrypto - var ax = this.a.redMul(x); - var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); - return y.redSqr().redISub(rhs).cmpn(0) === 0; -}; +if (crypto && crypto.getRandomValues) { + module.exports = randomBytes +} else { + module.exports = oldBrowser +} -ShortCurve.prototype._endoWnafMulAdd = - function _endoWnafMulAdd(points, coeffs) { - var npoints = this._endoWnafT1; - var ncoeffs = this._endoWnafT2; - for (var i = 0; i < points.length; i++) { - var split = this._endoSplit(coeffs[i]); - var p = points[i]; - var beta = p._getBeta(); +function randomBytes (size, cb) { + // phantomjs needs to throw + if (size > 65536) throw new Error('requested too many random bytes') + // in case browserify isn't using the Uint8Array version + var rawBytes = new global.Uint8Array(size) - if (split.k1.sign) { - split.k1.sign = !split.k1.sign; - p = p.neg(true); - } - if (split.k2.sign) { - split.k2.sign = !split.k2.sign; - beta = beta.neg(true); - } + // This will not work in older browsers. + // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues + crypto.getRandomValues(rawBytes) - npoints[i * 2] = p; - npoints[i * 2 + 1] = beta; - ncoeffs[i * 2] = split.k1; - ncoeffs[i * 2 + 1] = split.k2; - } - var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2); + // phantomjs doesn't like a buffer being passed here + var bytes = new Buffer(rawBytes.buffer) - // Clean-up references to points and coefficients - for (var j = 0; j < i * 2; j++) { - npoints[j] = null; - ncoeffs[j] = null; + if (typeof cb === 'function') { + return process.nextTick(function () { + cb(null, bytes) + }) } - return res; -}; -function Point(curve, x, y, isRed) { - Base.BasePoint.call(this, curve, 'affine'); - if (x === null && y === null) { - this.x = null; - this.y = null; - this.inf = true; - } else { - this.x = new bn(x, 16); - this.y = new bn(y, 16); - // Force redgomery representation when loading from JSON - if (isRed) { - this.x.forceRed(this.curve.red); - this.y.forceRed(this.curve.red); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - this.inf = false; - } + return bytes } -inherits(Point, Base.BasePoint); -ShortCurve.prototype.point = function point(x, y, isRed) { - return new Point(this, x, y, isRed); -}; +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) +},{"_process":235,"buffer":147}],248:[function(require,module,exports){ +module.exports = require("./lib/_stream_duplex.js") -ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { - return Point.fromJSON(this, obj, red); -}; +},{"./lib/_stream_duplex.js":249}],249:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. -Point.prototype._getBeta = function _getBeta() { - if (!this.curve.endo) - return; +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. - var pre = this.precomputed; - if (pre && pre.beta) - return pre.beta; +module.exports = Duplex; - var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); - if (pre) { - var curve = this.curve; - var endoMul = function(p) { - return curve.point(p.x.redMul(curve.endo.beta), p.y); - }; - pre.beta = beta; - beta.precomputed = { - beta: null, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(endoMul) - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(endoMul) - } - }; - } - return beta; -}; +/**/ +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) keys.push(key); + return keys; +} +/**/ -Point.prototype.toJSON = function toJSON() { - if (!this.precomputed) - return [ this.x, this.y ]; - return [ this.x, this.y, this.precomputed && { - doubles: this.precomputed.doubles && { - step: this.precomputed.doubles.step, - points: this.precomputed.doubles.points.slice(1) - }, - naf: this.precomputed.naf && { - wnd: this.precomputed.naf.wnd, - points: this.precomputed.naf.points.slice(1) - } - } ]; -}; +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ -Point.fromJSON = function fromJSON(curve, obj, red) { - if (typeof obj === 'string') - obj = JSON.parse(obj); - var res = curve.point(obj[0], obj[1], red); - if (!obj[2]) - return res; +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); - function obj2point(obj) { - return curve.point(obj[0], obj[1], red); - } +util.inherits(Duplex, Readable); - var pre = obj[2]; - res.precomputed = { - beta: null, - doubles: pre.doubles && { - step: pre.doubles.step, - points: [ res ].concat(pre.doubles.points.map(obj2point)) - }, - naf: pre.naf && { - wnd: pre.naf.wnd, - points: [ res ].concat(pre.naf.points.map(obj2point)) - } - }; - return res; -}; +forEach(objectKeys(Writable.prototype), function(method) { + if (!Duplex.prototype[method]) + Duplex.prototype[method] = Writable.prototype[method]; +}); -Point.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; +function Duplex(options) { + if (!(this instanceof Duplex)) + return new Duplex(options); -Point.prototype.isInfinity = function isInfinity() { - return this.inf; -}; + Readable.call(this, options); + Writable.call(this, options); -Point.prototype.add = function add(p) { - // O + P = P - if (this.inf) - return p; + if (options && options.readable === false) + this.readable = false; - // P + O = P - if (p.inf) - return this; + if (options && options.writable === false) + this.writable = false; - // P + P = 2P - if (this.eq(p)) - return this.dbl(); + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) + this.allowHalfOpen = false; - // P + (-P) = O - if (this.neg().eq(p)) - return this.curve.point(null, null); + this.once('end', onend); +} - // P + Q = O - if (this.x.cmp(p.x) === 0) - return this.curve.point(null, null); +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) + return; - var c = this.y.redSub(p.y); - if (c.cmpn(0) !== 0) - c = c.redMul(this.x.redSub(p.x).redInvm()); - var nx = c.redSqr().redISub(this.x).redISub(p.x); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; + // no more data can be written. + // But allow more writes to happen in this tick. + process.nextTick(this.end.bind(this)); +} -Point.prototype.dbl = function dbl() { - if (this.inf) - return this; +function forEach (xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} - // 2P = O - var ys1 = this.y.redAdd(this.y); - if (ys1.cmpn(0) === 0) - return this.curve.point(null, null); +}).call(this,require('_process')) +},{"./_stream_readable":251,"./_stream_writable":253,"_process":235,"core-util-is":150,"inherits":226}],250:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. - var a = this.curve.a; +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. - var x2 = this.x.redSqr(); - var dyinv = ys1.redInvm(); - var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); +module.exports = PassThrough; - var nx = c.redSqr().redISub(this.x.redAdd(this.x)); - var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); - return this.curve.point(nx, ny); -}; +var Transform = require('./_stream_transform'); -Point.prototype.getX = function getX() { - return this.x.fromRed(); -}; +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ -Point.prototype.getY = function getY() { - return this.y.fromRed(); -}; +util.inherits(PassThrough, Transform); -Point.prototype.mul = function mul(k) { - k = new bn(k, 16); +function PassThrough(options) { + if (!(this instanceof PassThrough)) + return new PassThrough(options); - if (this._hasDoubles(k)) - return this.curve._fixedNafMul(this, k); - else if (this.curve.endo) - return this.curve._endoWnafMulAdd([ this ], [ k ]); - else - return this.curve._wnafMul(this, k); -}; + Transform.call(this, options); +} -Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { - var points = [ this, p2 ]; - var coeffs = [ k1, k2 ]; - if (this.curve.endo) - return this.curve._endoWnafMulAdd(points, coeffs); - else - return this.curve._wnafMulAdd(1, points, coeffs, 2); +PassThrough.prototype._transform = function(chunk, encoding, cb) { + cb(null, chunk); }; -Point.prototype.eq = function eq(p) { - return this === p || - this.inf === p.inf && - (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); -}; +},{"./_stream_transform":252,"core-util-is":150,"inherits":226}],251:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. -Point.prototype.neg = function neg(_precompute) { - if (this.inf) - return this; +module.exports = Readable; - var res = this.curve.point(this.x, this.y.redNeg()); - if (_precompute && this.precomputed) { - var pre = this.precomputed; - var negate = function(p) { - return p.neg(); - }; - res.precomputed = { - naf: pre.naf && { - wnd: pre.naf.wnd, - points: pre.naf.points.map(negate) - }, - doubles: pre.doubles && { - step: pre.doubles.step, - points: pre.doubles.points.map(negate) - } - }; - } - return res; -}; +/**/ +var isArray = require('isarray'); +/**/ -Point.prototype.toJ = function toJ() { - if (this.inf) - return this.curve.jpoint(null, null, null); - var res = this.curve.jpoint(this.x, this.y, this.curve.one); - return res; +/**/ +var Buffer = require('buffer').Buffer; +/**/ + +Readable.ReadableState = ReadableState; + +var EE = require('events').EventEmitter; + +/**/ +if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { + return emitter.listeners(type).length; }; +/**/ -function JPoint(curve, x, y, z) { - Base.BasePoint.call(this, curve, 'jacobian'); - if (x === null && y === null && z === null) { - this.x = this.curve.one; - this.y = this.curve.one; - this.z = new bn(0); - } else { - this.x = new bn(x, 16); - this.y = new bn(y, 16); - this.z = new bn(z, 16); - } - if (!this.x.red) - this.x = this.x.toRed(this.curve.red); - if (!this.y.red) - this.y = this.y.toRed(this.curve.red); - if (!this.z.red) - this.z = this.z.toRed(this.curve.red); +var Stream = require('stream'); - this.zOne = this.z === this.curve.one; +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var StringDecoder; + + +/**/ +var debug = require('util'); +if (debug && debug.debuglog) { + debug = debug.debuglog('stream'); +} else { + debug = function () {}; } -inherits(JPoint, Base.BasePoint); +/**/ -ShortCurve.prototype.jpoint = function jpoint(x, y, z) { - return new JPoint(this, x, y, z); -}; -JPoint.prototype.toP = function toP() { - if (this.isInfinity()) - return this.curve.point(null, null); +util.inherits(Readable, Stream); - var zinv = this.z.redInvm(); - var zinv2 = zinv.redSqr(); - var ax = this.x.redMul(zinv2); - var ay = this.y.redMul(zinv2).redMul(zinv); +function ReadableState(options, stream) { + var Duplex = require('./_stream_duplex'); - return this.curve.point(ax, ay); -}; + options = options || {}; -JPoint.prototype.neg = function neg() { - return this.curve.jpoint(this.x, this.y.redNeg(), this.z); -}; + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var defaultHwm = options.objectMode ? 16 : 16 * 1024; + this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; -JPoint.prototype.add = function add(p) { - // O + P = P - if (this.isInfinity()) - return p; + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; - // P + O = P - if (p.isInfinity()) - return this; + this.buffer = []; + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; - // 12M + 4S + 7A - var pz2 = p.z.redSqr(); - var z2 = this.z.redSqr(); - var u1 = this.x.redMul(pz2); - var u2 = p.x.redMul(z2); - var s1 = this.y.redMul(pz2.redMul(p.z)); - var s2 = p.y.redMul(z2.redMul(this.z)); + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); - } + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(p.z).redMul(h); + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; - return this.curve.jpoint(nx, ny, nz); -}; + if (stream instanceof Duplex) + this.objectMode = this.objectMode || !!options.readableObjectMode; -JPoint.prototype.mixedAdd = function mixedAdd(p) { - // O + P = P - if (this.isInfinity()) - return p.toJ(); + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; - // P + O = P - if (p.isInfinity()) - return this; + // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + this.ranOut = false; - // 8M + 3S + 7A - var z2 = this.z.redSqr(); - var u1 = this.x; - var u2 = p.x.redMul(z2); - var s1 = this.y; - var s2 = p.y.redMul(z2).redMul(this.z); + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; - var h = u1.redSub(u2); - var r = s1.redSub(s2); - if (h.cmpn(0) === 0) { - if (r.cmpn(0) !== 0) - return this.curve.jpoint(null, null, null); - else - return this.dbl(); + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) + StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; } +} - var h2 = h.redSqr(); - var h3 = h2.redMul(h); - var v = u1.redMul(h2); +function Readable(options) { + var Duplex = require('./_stream_duplex'); - var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); - var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); - var nz = this.z.redMul(h); + if (!(this instanceof Readable)) + return new Readable(options); - return this.curve.jpoint(nx, ny, nz); -}; + this._readableState = new ReadableState(options, this); -JPoint.prototype.dblp = function dblp(pow) { - if (pow === 0) - return this; - if (this.isInfinity()) - return this; - if (!pow) - return this.dbl(); + // legacy + this.readable = true; - if (this.curve.zeroA || this.curve.threeA) { - var r = this; - for (var i = 0; i < pow; i++) - r = r.dbl(); - return r; + Stream.call(this); +} + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function(chunk, encoding) { + var state = this._readableState; + + if (util.isString(chunk) && !state.objectMode) { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = new Buffer(chunk, encoding); + encoding = ''; + } } - // 1M + 2S + 1A + N * (4S + 5M + 8A) - // N = 1 => 6M + 6S + 9A - var a = this.curve.a; - var tinv = this.curve.tinv; + return readableAddChunk(this, state, chunk, encoding, false); +}; - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function(chunk) { + var state = this._readableState; + return readableAddChunk(this, state, chunk, '', true); +}; - // Reuse results - var jyd = jy.redAdd(jy); - for (var i = 0; i < pow; i++) { - var jx2 = jx.redSqr(); - var jyd2 = jyd.redSqr(); - var jyd4 = jyd2.redSqr(); - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); +function readableAddChunk(stream, state, chunk, encoding, addToFront) { + var er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (util.isNullOrUndefined(chunk)) { + state.reading = false; + if (!state.ended) + onEofChunk(stream, state); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var e = new Error('stream.unshift() after end event'); + stream.emit('error', e); + } else { + if (state.decoder && !addToFront && !encoding) + chunk = state.decoder.write(chunk); - var t1 = jx.redMul(jyd2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); - var dny = c.redMul(t2); - dny = dny.redIAdd(dny).redISub(jyd4); - var nz = jyd.redMul(jz); - if (i + 1 < pow) - jz4 = jz4.redMul(jyd4); + if (!addToFront) + state.reading = false; - jx = nx; - jz = nz; - jyd = dny; - } + // if we want the data now, just emit it. + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) + state.buffer.unshift(chunk); + else + state.buffer.push(chunk); - return this.curve.jpoint(jx, jyd.redMul(tinv), jz); -}; + if (state.needReadable) + emitReadable(stream); + } -JPoint.prototype.dbl = function dbl() { - if (this.isInfinity()) - return this; + maybeReadMore(stream, state); + } + } else if (!addToFront) { + state.reading = false; + } - if (this.curve.zeroA) - return this._zeroDbl(); - else if (this.curve.threeA) - return this._threeDbl(); - else - return this._dbl(); -}; + return needMoreData(state); +} -JPoint.prototype._zeroDbl = function _zeroDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 14A - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // T = M ^ 2 - 2*S - var t = m.redSqr().redISub(s).redISub(s); - // 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && + (state.needReadable || + state.length < state.highWaterMark || + state.length === 0); +} - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2*Y1 - nz = this.y.redAdd(this.y); +// backwards compatibility. +Readable.prototype.setEncoding = function(enc) { + if (!StringDecoder) + StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 128MB +var MAX_HWM = 0x800000; +function roundUpToNextPowerOf2(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html - // #doubling-dbl-2009-l - // 2M + 5S + 13A + // Get the next highest power of 2 + n--; + for (var p = 1; p < 32; p <<= 1) n |= n >> p; + n++; + } + return n; +} - // A = X1^2 - var a = this.x.redSqr(); - // B = Y1^2 - var b = this.y.redSqr(); - // C = B^2 - var c = b.redSqr(); - // D = 2 * ((X1 + B)^2 - A - C) - var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); - d = d.redIAdd(d); - // E = 3 * A - var e = a.redAdd(a).redIAdd(a); - // F = E^2 - var f = e.redSqr(); +function howMuchToRead(n, state) { + if (state.length === 0 && state.ended) + return 0; - // 8 * C - var c8 = c.redIAdd(c); - c8 = c8.redIAdd(c8); - c8 = c8.redIAdd(c8); + if (state.objectMode) + return n === 0 ? 0 : 1; - // X3 = F - 2 * D - nx = f.redISub(d).redISub(d); - // Y3 = E * (D - X3) - 8 * C - ny = e.redMul(d.redISub(nx)).redISub(c8); - // Z3 = 2 * Y1 * Z1 - nz = this.y.redMul(this.z); - nz = nz.redIAdd(nz); + if (isNaN(n) || util.isNull(n)) { + // only flow one buffer at a time + if (state.flowing && state.buffer.length) + return state.buffer[0].length; + else + return state.length; } - return this.curve.jpoint(nx, ny, nz); -}; - -JPoint.prototype._threeDbl = function _threeDbl() { - var nx; - var ny; - var nz; - // Z = 1 - if (this.zOne) { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html - // #doubling-mdbl-2007-bl - // 1M + 5S + 15A + if (n <= 0) + return 0; - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // S = 2 * ((X1 + YY)^2 - XX - YYYY) - var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - s = s.redIAdd(s); - // M = 3 * XX + a - var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); - // T = M^2 - 2 * S - var t = m.redSqr().redISub(s).redISub(s); - // X3 = T - nx = t; - // Y3 = M * (S - T) - 8 * YYYY - var yyyy8 = yyyy.redIAdd(yyyy); - yyyy8 = yyyy8.redIAdd(yyyy8); - yyyy8 = yyyy8.redIAdd(yyyy8); - ny = m.redMul(s.redISub(t)).redISub(yyyy8); - // Z3 = 2 * Y1 - nz = this.y.redAdd(this.y); - } else { - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b - // 3M + 5S + // If we're asking for more than the target buffer level, + // then raise the water mark. Bump up to the next highest + // power of 2, to prevent increasing it excessively in tiny + // amounts. + if (n > state.highWaterMark) + state.highWaterMark = roundUpToNextPowerOf2(n); - // delta = Z1^2 - var delta = this.z.redSqr(); - // gamma = Y1^2 - var gamma = this.y.redSqr(); - // beta = X1 * gamma - var beta = this.x.redMul(gamma); - // alpha = 3 * (X1 - delta) * (X1 + delta) - var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); - alpha = alpha.redAdd(alpha).redIAdd(alpha); - // X3 = alpha^2 - 8 * beta - var beta4 = beta.redIAdd(beta); - beta4 = beta4.redIAdd(beta4); - var beta8 = beta4.redAdd(beta4); - nx = alpha.redSqr().redISub(beta8); - // Z3 = (Y1 + Z1)^2 - gamma - delta - nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); - // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 - var ggamma8 = gamma.redSqr(); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ggamma8 = ggamma8.redIAdd(ggamma8); - ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); + // don't have that much. return null, unless we've ended. + if (n > state.length) { + if (!state.ended) { + state.needReadable = true; + return 0; + } else + return state.length; } - return this.curve.jpoint(nx, ny, nz); -}; + return n; +} -JPoint.prototype._dbl = function _dbl() { - var a = this.curve.a; +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function(n) { + debug('read', n); + var state = this._readableState; + var nOrig = n; - // 4M + 6S + 10A - var jx = this.x; - var jy = this.y; - var jz = this.z; - var jz4 = jz.redSqr().redSqr(); + if (!util.isNumber(n) || n > 0) + state.emittedReadable = false; - var jx2 = jx.redSqr(); - var jy2 = jy.redSqr(); + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && + state.needReadable && + (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) + endReadable(this); + else + emitReadable(this); + return null; + } - var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); + n = howMuchToRead(n, state); - var jxd4 = jx.redAdd(jx); - jxd4 = jxd4.redIAdd(jxd4); - var t1 = jxd4.redMul(jy2); - var nx = c.redSqr().redISub(t1.redAdd(t1)); - var t2 = t1.redISub(nx); + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) + endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. - var jyd8 = jy2.redSqr(); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - jyd8 = jyd8.redIAdd(jyd8); - var ny = c.redMul(t2).redISub(jyd8); - var nz = jy.redAdd(jy).redMul(jz); + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); - return this.curve.jpoint(nx, ny, nz); -}; + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } -JPoint.prototype.trpl = function trpl() { - if (!this.curve.zeroA) - return this.dbl().add(this); + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } - // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl - // 5M + 10S + ... + if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) + state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + } - // XX = X1^2 - var xx = this.x.redSqr(); - // YY = Y1^2 - var yy = this.y.redSqr(); - // ZZ = Z1^2 - var zz = this.z.redSqr(); - // YYYY = YY^2 - var yyyy = yy.redSqr(); - // M = 3 * XX + a * ZZ2; a = 0 - var m = xx.redAdd(xx).redIAdd(xx); - // MM = M^2 - var mm = m.redSqr(); - // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM - var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); - e = e.redIAdd(e); - e = e.redAdd(e).redIAdd(e); - e = e.redISub(mm); - // EE = E^2 - var ee = e.redSqr(); - // T = 16*YYYY - var t = yyyy.redIAdd(yyyy); - t = t.redIAdd(t); - t = t.redIAdd(t); - t = t.redIAdd(t); - // U = (M + E)^2 - MM - EE - T - var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); - // X3 = 4 * (X1 * EE - 4 * YY * U) - var yyu4 = yy.redMul(u); - yyu4 = yyu4.redIAdd(yyu4); - yyu4 = yyu4.redIAdd(yyu4); - var nx = this.x.redMul(ee).redISub(yyu4); - nx = nx.redIAdd(nx); - nx = nx.redIAdd(nx); - // Y3 = 8 * Y1 * (U * (T - U) - E * EE) - var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - ny = ny.redIAdd(ny); - // Z3 = (Z1 + E)^2 - ZZ - EE - var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (doRead && !state.reading) + n = howMuchToRead(nOrig, state); - return this.curve.jpoint(nx, ny, nz); -}; + var ret; + if (n > 0) + ret = fromList(n, state); + else + ret = null; -JPoint.prototype.mul = function mul(k, kbase) { - k = new bn(k, kbase); + if (util.isNull(ret)) { + state.needReadable = true; + n = 0; + } - return this.curve._wnafMul(this, k); -}; + state.length -= n; -JPoint.prototype.eq = function eq(p) { - if (p.type === 'affine') - return this.eq(p.toJ()); + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (state.length === 0 && !state.ended) + state.needReadable = true; - if (this === p) - return true; + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended && state.length === 0) + endReadable(this); - // x1 * z2^2 == x2 * z1^2 - var z2 = this.z.redSqr(); - var pz2 = p.z.redSqr(); - if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) - return false; + if (!util.isNull(ret)) + this.emit('data', ret); - // y1 * z2^3 == y2 * z1^3 - var z3 = z2.redMul(this.z); - var pz3 = pz2.redMul(p.z); - return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; + return ret; }; -JPoint.prototype.inspect = function inspect() { - if (this.isInfinity()) - return ''; - return ''; -}; +function chunkInvalid(state, chunk) { + var er = null; + if (!util.isBuffer(chunk) && + !util.isString(chunk) && + !util.isNullOrUndefined(chunk) && + !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} -JPoint.prototype.isInfinity = function isInfinity() { - // XXX This code assumes that zero is always zero in red - return this.z.cmpn(0) === 0; -}; -},{"../../elliptic":356,"../curve":359,"bn.js":369,"inherits":377}],362:[function(require,module,exports){ -arguments[4][62][0].apply(exports,arguments) -},{"../elliptic":356,"./precomputed/secp256k1":367,"dup":62,"hash.js":371}],363:[function(require,module,exports){ -'use strict'; +function onEofChunk(stream, state) { + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; -var bn = require('bn.js'); -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} -var KeyPair = require('./key'); -var Signature = require('./signature'); +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) + process.nextTick(function() { + emitReadable_(stream); + }); + else + emitReadable_(stream); + } +} -function EC(options) { - if (!(this instanceof EC)) - return new EC(options); +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} - // Shortcut `elliptic.ec(curve-name)` - if (typeof options === 'string') { - assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options); - options = elliptic.curves[options]; +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(function() { + maybeReadMore_(stream, state); + }); } +} - // Shortcut for `elliptic.ec(elliptic.curves.curveName)` - if (options instanceof elliptic.curves.PresetCurve) - options = { curve: options }; +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && + state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break; + else + len = state.length; + } + state.readingMore = false; +} - this.curve = options.curve.curve; - this.n = this.curve.n; - this.nh = this.n.shrn(1); - this.g = this.curve.g; +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function(n) { + this.emit('error', new Error('not implemented')); +}; - // Point on curve - this.g = options.curve.g; - this.g.precompute(options.curve.n.bitLength() + 1); +Readable.prototype.pipe = function(dest, pipeOpts) { + var src = this; + var state = this._readableState; - // Hash for function for DRBG - this.hash = options.hash || options.curve.hash; -} -module.exports = EC; + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); -EC.prototype.keyPair = function keyPair(options) { - return new KeyPair(this, options); -}; + var doEnd = (!pipeOpts || pipeOpts.end !== false) && + dest !== process.stdout && + dest !== process.stderr; -EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { - return KeyPair.fromPrivate(this, priv, enc); -}; + var endFn = doEnd ? onend : cleanup; + if (state.endEmitted) + process.nextTick(endFn); + else + src.once('end', endFn); -EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { - return KeyPair.fromPublic(this, pub, enc); -}; + dest.on('unpipe', onunpipe); + function onunpipe(readable) { + debug('onunpipe'); + if (readable === src) { + cleanup(); + } + } -EC.prototype.genKeyPair = function genKeyPair(options) { - if (!options) - options = {}; + function onend() { + debug('onend'); + dest.end(); + } - // Instantiate Hmac_DRBG - var drbg = new elliptic.hmacDRBG({ - hash: this.hash, - pers: options.pers, - entropy: options.entropy || elliptic.rand(this.hash.hmacStrength), - nonce: this.n.toArray() - }); + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); - var bytes = this.n.byteLength(); - var ns2 = this.n.sub(new bn(2)); - do { - var priv = new bn(drbg.generate(bytes)); - if (priv.cmp(ns2) > 0) - continue; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', cleanup); + src.removeListener('data', ondata); - priv.iaddn(1); - return this.keyFromPrivate(priv); - } while (true); -}; + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && + (!dest._writableState || dest._writableState.needDrain)) + ondrain(); + } -EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { - var delta = msg.byteLength() * 8 - this.n.bitLength(); - if (delta > 0) - msg = msg.shrn(delta); - if (!truncOnly && msg.cmp(this.n) >= 0) - return msg.sub(this.n); - else - return msg; -}; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + var ret = dest.write(chunk); + if (false === ret) { + debug('false write response, pause', + src._readableState.awaitDrain); + src._readableState.awaitDrain++; + src.pause(); + } + } -EC.prototype.sign = function sign(msg, key, enc, options) { - if (typeof enc === 'object') { - options = enc; - enc = null; + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EE.listenerCount(dest, 'error') === 0) + dest.emit('error', er); } - if (!options) - options = {}; + // This is a brutally ugly hack to make sure that our error handler + // is attached before any userland ones. NEVER DO THIS. + if (!dest._events || !dest._events.error) + dest.on('error', onerror); + else if (isArray(dest._events.error)) + dest._events.error.unshift(onerror); + else + dest._events.error = [onerror, dest._events.error]; - key = this.keyFromPrivate(key, enc); - msg = this._truncateToN(new bn(msg, 16)); - // Zero-extend key to provide enough entropy - var bytes = this.n.byteLength(); - var bkey = key.getPrivate().toArray(); - for (var i = bkey.length; i < 21; i++) - bkey.unshift(0); - // Zero-extend nonce to have the same byte size as N - var nonce = msg.toArray(); - for (var i = nonce.length; i < bytes; i++) - nonce.unshift(0); + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); - // Instantiate Hmac_DRBG - var drbg = new elliptic.hmacDRBG({ - hash: this.hash, - entropy: bkey, - nonce: nonce - }); + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } - // Number of bytes to generate - var ns1 = this.n.sub(new bn(1)); - do { - var k = new bn(drbg.generate(this.n.byteLength())); - k = this._truncateToN(k, true); - if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) - continue; + // tell the dest that it's being piped to + dest.emit('pipe', src); - var kp = this.g.mul(k); - if (kp.isInfinity()) - continue; + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } - var kpX = kp.getX(); - var r = kpX.mod(this.n); - if (r.cmpn(0) === 0) - continue; + return dest; +}; - var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)).mod(this.n); - if (s.cmpn(0) === 0) - continue; +function pipeOnDrain(src) { + return function() { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) + state.awaitDrain--; + if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} - // Use complement of `s`, if it is > `n / 2` - if (options.canonical && s.cmp(this.nh) > 0) - s = this.n.sub(s); - var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | - (kpX.cmp(r) !== 0 ? 2 : 0); +Readable.prototype.unpipe = function(dest) { + var state = this._readableState; - return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); - } while (true); -}; + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) + return this; -EC.prototype.verify = function verify(msg, signature, key, enc) { - msg = this._truncateToN(new bn(msg, 16)); - key = this.keyFromPublic(key, enc); - signature = new Signature(signature, 'hex'); + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) + return this; - // Perform primitive values validation - var r = signature.r; - var s = signature.s; - if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) - return false; - if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) - return false; + if (!dest) + dest = state.pipes; - // Validate signature - var sinv = s.invm(this.n); - var u1 = sinv.mul(msg).mod(this.n); - var u2 = sinv.mul(r).mod(this.n); + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) + dest.emit('unpipe', this); + return this; + } - var p = this.g.mulAdd(u1, key.getPublic(), u2); - if (p.isInfinity()) - return false; + // slow case. multiple pipe destinations. - return p.getX().mod(this.n).cmp(r) === 0; -}; + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; -EC.prototype.recoverPubKey = function(msg, signature, j, enc) { - assert((3 & j) === j, 'The recovery param is more than two bits'); - signature = new Signature(signature, enc); + for (var i = 0; i < len; i++) + dests[i].emit('unpipe', this); + return this; + } - var n = this.n; - var e = new bn(msg); - var r = signature.r; - var s = signature.s; + // try to find the right one. + var i = indexOf(state.pipes, dest); + if (i === -1) + return this; - // A set LSB signifies that the y-coordinate is odd - var isYOdd = j & 1; - var isSecondKey = j >> 1; - if (r.cmp(this.curve.p.mod(this.curve.n)) >= 0 && isSecondKey) - throw new Error('Unable to find sencond key candinate'); + state.pipes.splice(i, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) + state.pipes = state.pipes[0]; - // 1.1. Let x = r + jn. - r = this.curve.pointFromX(isYOdd, r); - var eNeg = e.neg().mod(n); + dest.emit('unpipe', this); - // 1.6.1 Compute Q = r^-1 (sR - eG) - // Q = r^-1 (sR + -eG) - var rInv = signature.r.invm(n); - return r.mul(s).add(this.g.mul(eNeg)).mul(rInv); + return this; }; -EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { - signature = new Signature(signature, enc); - if (signature.recoveryParam !== null) - return signature.recoveryParam; +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function(ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); - for (var i = 0; i < 4; i++) { - var Qprime = this.recoverPubKey(e, signature, i); + // If listening to data, and it has not explicitly been paused, + // then call resume to start the flow of data on the next tick. + if (ev === 'data' && false !== this._readableState.flowing) { + this.resume(); + } - if (Qprime.eq(Q)) - return i; + if (ev === 'readable' && this.readable) { + var state = this._readableState; + if (!state.readableListening) { + state.readableListening = true; + state.emittedReadable = false; + state.needReadable = true; + if (!state.reading) { + var self = this; + process.nextTick(function() { + debug('readable nexttick read 0'); + self.read(0); + }); + } else if (state.length) { + emitReadable(this, state); + } + } } - throw new Error('Unable to find valid recovery factor'); -}; -},{"../../elliptic":356,"./key":364,"./signature":365,"bn.js":369}],364:[function(require,module,exports){ -arguments[4][64][0].apply(exports,arguments) -},{"../../elliptic":356,"bn.js":369,"dup":64}],365:[function(require,module,exports){ -'use strict'; + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; -var bn = require('bn.js'); +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function() { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + if (!state.reading) { + debug('resume read 0'); + this.read(0); + } + resume(this, state); + } + return this; +}; -var elliptic = require('../../elliptic'); -var utils = elliptic.utils; -var assert = utils.assert; +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + process.nextTick(function() { + resume_(stream, state); + }); + } +} -function Signature(options, enc) { - if (options instanceof Signature) - return options; +function resume_(stream, state) { + state.resumeScheduled = false; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) + stream.read(0); +} - if (this._importDER(options, enc)) - return; +Readable.prototype.pause = function() { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; - assert(options.r && options.s, 'Signature without r or s'); - this.r = new bn(options.r, 16); - this.s = new bn(options.s, 16); - if (options.recoveryParam !== null) - this.recoveryParam = options.recoveryParam; - else - this.recoveryParam = null; +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + if (state.flowing) { + do { + var chunk = stream.read(); + } while (null !== chunk && state.flowing); + } } -module.exports = Signature; -Signature.prototype._importDER = function _importDER(data, enc) { - data = utils.toArray(data, enc); - if (data.length < 6 || data[0] !== 0x30 || data[2] !== 0x02) - return false; - var total = data[1]; - if (1 + total > data.length) - return false; - var rlen = data[3]; - // Short length notation - if (rlen >= 0x80) - return false; - if (4 + rlen + 2 >= data.length) - return false; - if (data[4 + rlen] !== 0x02) - return false; - var slen = data[5 + rlen]; - // Short length notation - if (slen >= 0x80) - return false; - if (4 + rlen + 2 + slen > data.length) - return false; +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function(stream) { + var state = this._readableState; + var paused = false; - this.r = new bn(data.slice(4, 4 + rlen)); - this.s = new bn(data.slice(4 + rlen + 2, 4 + rlen + 2 + slen)); - this.recoveryParam = null; + var self = this; + stream.on('end', function() { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) + self.push(chunk); + } - return true; -}; + self.push(null); + }); -Signature.prototype.toDER = function toDER(enc) { - var r = this.r.toArray(); - var s = this.s.toArray(); + stream.on('data', function(chunk) { + debug('wrapped data'); + if (state.decoder) + chunk = state.decoder.write(chunk); + if (!chunk || !state.objectMode && !chunk.length) + return; - // Pad values - if (r[0] & 0x80) - r = [ 0 ].concat(r); - // Pad values - if (s[0] & 0x80) - s = [ 0 ].concat(s); + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); - var total = r.length + s.length + 4; - var res = [ 0x30, total, 0x02, r.length ]; - res = res.concat(r, [ 0x02, s.length ], s); - return utils.encode(res, enc); -}; + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (util.isFunction(stream[i]) && util.isUndefined(this[i])) { + this[i] = function(method) { return function() { + return stream[method].apply(stream, arguments); + }}(i); + } + } -},{"../../elliptic":356,"bn.js":369}],366:[function(require,module,exports){ -arguments[4][66][0].apply(exports,arguments) -},{"../elliptic":356,"dup":66,"hash.js":371}],367:[function(require,module,exports){ -arguments[4][67][0].apply(exports,arguments) -},{"dup":67}],368:[function(require,module,exports){ -arguments[4][68][0].apply(exports,arguments) -},{"dup":68}],369:[function(require,module,exports){ -(function (module, exports) { + // proxy certain important events. + var events = ['error', 'close', 'destroy', 'pause', 'resume']; + forEach(events, function(ev) { + stream.on(ev, self.emit.bind(self, ev)); + }); -'use strict'; + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function(n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; -// Utils + return self; +}; -function assert(val, msg) { - if (!val) - throw new Error(msg || 'Assertion failed'); -} -// Could use `inherits` module, but don't want to move from single file -// architecture yet. -function inherits(ctor, superCtor) { - ctor.super_ = superCtor; - var TempCtor = function () {}; - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; -} -// BN +// exposed for testing purposes only. +Readable._fromList = fromList; -function BN(number, base, endian) { - // May be `new BN(bn)` ? - if (number !== null && - typeof number === 'object' && - Array.isArray(number.words)) { - return number; - } +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +function fromList(n, state) { + var list = state.buffer; + var length = state.length; + var stringMode = !!state.decoder; + var objectMode = !!state.objectMode; + var ret; - this.sign = false; - this.words = null; - this.length = 0; + // nothing in the list, definitely empty. + if (list.length === 0) + return null; - // Reduction context - this.red = null; + if (length === 0) + ret = null; + else if (objectMode) + ret = list.shift(); + else if (!n || n >= length) { + // read it all, truncate the array. + if (stringMode) + ret = list.join(''); + else + ret = Buffer.concat(list, length); + list.length = 0; + } else { + // read just some of it. + if (n < list[0].length) { + // just take a part of the first list item. + // slice is the same for buffers and strings. + var buf = list[0]; + ret = buf.slice(0, n); + list[0] = buf.slice(n); + } else if (n === list[0].length) { + // first list is a perfect match + ret = list.shift(); + } else { + // complex case. + // we have enough to cover it, but it spans past the first buffer. + if (stringMode) + ret = ''; + else + ret = new Buffer(n); - if (base === 'le' || base === 'be') { - endian = base; - base = 10; - } + var c = 0; + for (var i = 0, l = list.length; i < l && c < n; i++) { + var buf = list[0]; + var cpy = Math.min(n - c, buf.length); - if (number !== null) - this._init(number || 0, base || 10, endian || 'be'); -} -if (typeof module === 'object') - module.exports = BN; -else - exports.BN = BN; + if (stringMode) + ret += buf.slice(0, cpy); + else + buf.copy(ret, c, 0, cpy); -BN.BN = BN; -BN.wordSize = 26; + if (cpy < buf.length) + list[0] = buf.slice(cpy); + else + list.shift(); -BN.prototype._init = function init(number, base, endian) { - if (typeof number === 'number') { - return this._initNumber(number, base, endian); - } else if (typeof number === 'object') { - return this._initArray(number, base, endian); + c += cpy; + } + } } - if (base === 'hex') - base = 16; - assert(base === (base | 0) && base >= 2 && base <= 36); - - number = number.toString().replace(/\s+/g, ''); - var start = 0; - if (number[0] === '-') - start++; - - if (base === 16) - this._parseHex(number, start); - else - this._parseBase(number, base, start); - if (number[0] === '-') - this.sign = true; + return ret; +} - this.strip(); +function endReadable(stream) { + var state = stream._readableState; - if (endian !== 'le') - return; + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) + throw new Error('endReadable called on non-empty stream'); - this._initArray(this.toArray(), base, endian); -}; + if (!state.endEmitted) { + state.ended = true; + process.nextTick(function() { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } + }); + } +} -BN.prototype._initNumber = function _initNumber(number, base, endian) { - if (number < 0) { - this.sign = true; - number = -number; +function forEach (xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); } - if (number < 0x4000000) { - this.words = [ number & 0x3ffffff ]; - this.length = 1; - } else if (number < 0x10000000000000) { - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff - ]; - this.length = 2; - } else { - assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) - this.words = [ - number & 0x3ffffff, - (number / 0x4000000) & 0x3ffffff, - 1 - ]; - this.length = 3; +} + +function indexOf (xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; } + return -1; +} - if (endian !== 'le') - return; +}).call(this,require('_process')) +},{"./_stream_duplex":249,"_process":235,"buffer":147,"core-util-is":150,"events":217,"inherits":226,"isarray":228,"stream":291,"string_decoder/":292,"util":100}],252:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. - // Reverse the bytes - this._initArray(this.toArray(), base, endian); -}; -BN.prototype._initArray = function _initArray(number, base, endian) { - // Perhaps a Uint8Array - assert(typeof number.length === 'number'); - if (number.length <= 0) { - this.words = [ 0 ]; - this.length = 1; - return this; - } +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. - this.length = Math.ceil(number.length / 3); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) - this.words[i] = 0; +module.exports = Transform; - var off = 0; - if (endian === 'be') { - for (var i = number.length - 1, j = 0; i >= 0; i -= 3) { - var w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } else if (endian === 'le') { - for (var i = 0, j = 0; i < number.length; i += 3) { - var w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - } - return this.strip(); -}; +var Duplex = require('./_stream_duplex'); -function parseHex(str, start, end) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ - r <<= 4; +util.inherits(Transform, Duplex); - // 'a' - 'f' - if (c >= 49 && c <= 54) - r |= c - 49 + 0xa; - // 'A' - 'F' - else if (c >= 17 && c <= 22) - r |= c - 17 + 0xa; +function TransformState(options, stream) { + this.afterTransform = function(er, data) { + return afterTransform(stream, er, data); + }; - // '0' - '9' - else - r |= c & 0xf; - } - return r; + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; } -BN.prototype._parseHex = function _parseHex(number, start) { - // Create possibly bigger array to ensure that it fits the number - this.length = Math.ceil((number.length - start) / 6); - this.words = new Array(this.length); - for (var i = 0; i < this.length; i++) - this.words[i] = 0; +function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; - // Scan 24-bit chunks and add them to the number - var off = 0; - for (var i = number.length - 6, j = 0; i >= start; i -= 6) { - var w = parseHex(number, i, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - off += 24; - if (off >= 26) { - off -= 26; - j++; - } - } - if (i + 6 !== start) { - var w = parseHex(number, start, i + 6); - this.words[j] |= (w << off) & 0x3ffffff; - this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; - } - this.strip(); -}; + var cb = ts.writecb; -function parseBase(str, start, end, mul) { - var r = 0; - var len = Math.min(str.length, end); - for (var i = start; i < len; i++) { - var c = str.charCodeAt(i) - 48; + if (!cb) + return stream.emit('error', new Error('no writecb in Transform class')); - r *= mul; + ts.writechunk = null; + ts.writecb = null; - // 'a' - if (c >= 49) - r += c - 49 + 0xa; + if (!util.isNullOrUndefined(data)) + stream.push(data); - // 'A' - else if (c >= 17) - r += c - 17 + 0xa; + if (cb) + cb(er); - // '0' - '9' - else - r += c; + var rs = stream._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); } - return r; } -BN.prototype._parseBase = function _parseBase(number, base, start) { - // Initialize as zero - this.words = [ 0 ]; - this.length = 1; - // Find length of limb in base - for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) - limbLen++; - limbLen--; - limbPow = (limbPow / base) | 0; +function Transform(options) { + if (!(this instanceof Transform)) + return new Transform(options); - var total = number.length - start; - var mod = total % limbLen; - var end = Math.min(total, total - mod) + start; + Duplex.call(this, options); - var word = 0; - for (var i = start; i < end; i += limbLen) { - word = parseBase(number, i, i + limbLen, base); + this._transformState = new TransformState(options, this); - this.imuln(limbPow); - if (this.words[0] + word < 0x4000000) - this.words[0] += word; - else - this._iaddn(word); - } + // when the writable side finishes, then flush out anything remaining. + var stream = this; - if (mod !== 0) { - var pow = 1; - var word = parseBase(number, i, number.length, base); + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; - for (var i = 0; i < mod; i++) - pow *= base; - this.imuln(pow); - if (this.words[0] + word < 0x4000000) - this.words[0] += word; + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + this.once('prefinish', function() { + if (util.isFunction(this._flush)) + this._flush(function(er) { + done(stream, er); + }); else - this._iaddn(word); - } -}; + done(stream); + }); +} -BN.prototype.copy = function copy(dest) { - dest.words = new Array(this.length); - for (var i = 0; i < this.length; i++) - dest.words[i] = this.words[i]; - dest.length = this.length; - dest.sign = this.sign; - dest.red = this.red; +Transform.prototype.push = function(chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); }; -BN.prototype.clone = function clone() { - var r = new BN(null); - this.copy(r); - return r; +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function(chunk, encoding, cb) { + throw new Error('not implemented'); }; -// Remove leading `0` from `this` -BN.prototype.strip = function strip() { - while (this.length > 1 && this.words[this.length - 1] === 0) - this.length--; - return this._normSign(); +Transform.prototype._write = function(chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || + rs.needReadable || + rs.length < rs.highWaterMark) + this._read(rs.highWaterMark); + } }; -BN.prototype._normSign = function _normSign() { - // -0 = 0 - if (this.length === 1 && this.words[0] === 0) - this.sign = false; - return this; -}; +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function(n) { + var ts = this._transformState; -BN.prototype.inspect = function inspect() { - return (this.red ? ''; + if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } }; -/* -var zeros = []; -var groupSizes = []; -var groupBases = []; +function done(stream, er) { + if (er) + return stream.emit('error', er); -var s = ''; -var i = -1; -while (++i < BN.wordSize) { - zeros[i] = s; - s += '0'; -} -groupSizes[0] = 0; -groupSizes[1] = 0; -groupBases[0] = 0; -groupBases[1] = 0; -var base = 2 - 1; -while (++base < 36 + 1) { - var groupSize = 0; - var groupBase = 1; - while (groupBase < (1 << BN.wordSize) / base) { - groupBase *= base; - groupSize += 1; - } - groupSizes[base] = groupSize; - groupBases[base] = groupBase; -} + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + var ws = stream._writableState; + var ts = stream._transformState; -*/ + if (ws.length) + throw new Error('calling transform done when ws.length != 0'); -var zeros = [ - '', - '0', - '00', - '000', - '0000', - '00000', - '000000', - '0000000', - '00000000', - '000000000', - '0000000000', - '00000000000', - '000000000000', - '0000000000000', - '00000000000000', - '000000000000000', - '0000000000000000', - '00000000000000000', - '000000000000000000', - '0000000000000000000', - '00000000000000000000', - '000000000000000000000', - '0000000000000000000000', - '00000000000000000000000', - '000000000000000000000000', - '0000000000000000000000000' -]; + if (ts.transforming) + throw new Error('calling transform done when still transforming'); -var groupSizes = [ - 0, 0, - 25, 16, 12, 11, 10, 9, 8, - 8, 7, 7, 7, 7, 6, 6, - 6, 6, 6, 6, 6, 5, 5, - 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5 -]; + return stream.push(null); +} -var groupBases = [ - 0, 0, - 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, - 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, - 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, - 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, - 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 -]; +},{"./_stream_duplex":249,"core-util-is":150,"inherits":226}],253:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. -BN.prototype.toString = function toString(base, padding) { - base = base || 10; - if (base === 16 || base === 'hex') { - var out = ''; - var off = 0; - var padding = padding | 0 || 1; - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i]; - var word = (((w << off) | carry) & 0xffffff).toString(16); - carry = (w >>> (24 - off)) & 0xffffff; - if (carry !== 0 || i !== this.length - 1) - out = zeros[6 - word.length] + word + out; - else - out = word + out; - off += 2; - if (off >= 26) { - off -= 26; - i--; - } - } - if (carry !== 0) - out = carry.toString(16) + out; - while (out.length % padding !== 0) - out = '0' + out; - if (this.sign) - out = '-' + out; - return out; - } else if (base === (base | 0) && base >= 2 && base <= 36) { - // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); - var groupSize = groupSizes[base]; - // var groupBase = Math.pow(base, groupSize); - var groupBase = groupBases[base]; - var out = ''; - var c = this.clone(); - c.sign = false; - while (c.cmpn(0) !== 0) { - var r = c.modn(groupBase).toString(base); - c = c.idivn(groupBase); +// A bit simpler than readable streams. +// Implement an async ._write(chunk, cb), and it'll handle all +// the drain event emission and buffering. - if (c.cmpn(0) !== 0) - out = zeros[groupSize - r.length] + r + out; - else - out = r + out; - } - if (this.cmpn(0) === 0) - out = '0' + out; - if (this.sign) - out = '-' + out; - return out; - } else { - assert(false, 'Base should be between 2 and 36'); - } -}; +module.exports = Writable; -BN.prototype.toJSON = function toJSON() { - return this.toString(16); -}; +/**/ +var Buffer = require('buffer').Buffer; +/**/ -BN.prototype.toArray = function toArray(endian) { - this.strip(); - var res = new Array(this.byteLength()); - res[0] = 0; +Writable.WritableState = WritableState; - var q = this.clone(); - if (endian !== 'le') { - // Assume big-endian - for (var i = 0; q.cmpn(0) !== 0; i++) { - var b = q.andln(0xff); - q.ishrn(8); - res[res.length - i - 1] = b; - } - } else { - // Assume little-endian - for (var i = 0; q.cmpn(0) !== 0; i++) { - var b = q.andln(0xff); - q.ishrn(8); +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ - res[i] = b; - } - } +var Stream = require('stream'); - return res; -}; +util.inherits(Writable, Stream); -if (Math.clz32) { - BN.prototype._countBits = function _countBits(w) { - return 32 - Math.clz32(w); - }; -} else { - BN.prototype._countBits = function _countBits(w) { - var t = w; - var r = 0; - if (t >= 0x1000) { - r += 13; - t >>>= 13; - } - if (t >= 0x40) { - r += 7; - t >>>= 7; - } - if (t >= 0x8) { - r += 4; - t >>>= 4; - } - if (t >= 0x02) { - r += 2; - t >>>= 2; - } - return r + t; - }; +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; } -BN.prototype._zeroBits = function _zeroBits(w) { - // Short-cut - if (w === 0) - return 26; +function WritableState(options, stream) { + var Duplex = require('./_stream_duplex'); - var t = w; - var r = 0; - if ((t & 0x1fff) === 0) { - r += 13; - t >>>= 13; - } - if ((t & 0x7f) === 0) { - r += 7; - t >>>= 7; - } - if ((t & 0xf) === 0) { - r += 4; - t >>>= 4; - } - if ((t & 0x3) === 0) { - r += 2; - t >>>= 2; - } - if ((t & 0x1) === 0) - r++; - return r; -}; + options = options || {}; -// Return number of used bits in a BN -BN.prototype.bitLength = function bitLength() { - var hi = 0; - var w = this.words[this.length - 1]; - var hi = this._countBits(w); - return (this.length - 1) * 26 + hi; -}; + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var defaultHwm = options.objectMode ? 16 : 16 * 1024; + this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm; -// Number of trailing zero bits -BN.prototype.zeroBits = function zeroBits() { - if (this.cmpn(0) === 0) - return 0; + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; - var r = 0; - for (var i = 0; i < this.length; i++) { - var b = this._zeroBits(this.words[i]); - r += b; - if (b !== 26) - break; - } - return r; -}; + if (stream instanceof Duplex) + this.objectMode = this.objectMode || !!options.writableObjectMode; -BN.prototype.byteLength = function byteLength() { - return Math.ceil(this.bitLength() / 8); -}; + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; -// Return negative clone of `this` -BN.prototype.neg = function neg() { - if (this.cmpn(0) === 0) - return this.clone(); + // when true all writes will be buffered until .uncork() call + this.corked = 0; - var r = this.clone(); - r.sign = !this.sign; - return r; -}; + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; -// Or `num` with `this` in-place -BN.prototype.ior = function ior(num) { - this.sign = this.sign || num.sign; + // the callback that's passed to _write(chunk,cb) + this.onwrite = function(er) { + onwrite(stream, er); + }; - while (this.length < num.length) - this.words[this.length++] = 0; + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; - for (var i = 0; i < num.length; i++) - this.words[i] = this.words[i] | num.words[i]; + // the amount that is being written when _write is called. + this.writelen = 0; - return this.strip(); -}; + this.buffer = []; + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; -// Or `num` with `this` -BN.prototype.or = function or(num) { - if (this.length > num.length) - return this.clone().ior(num); - else - return num.clone().ior(this); -}; + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; +} -// And `num` with `this` in-place -BN.prototype.iand = function iand(num) { - this.sign = this.sign && num.sign; +function Writable(options) { + var Duplex = require('./_stream_duplex'); - // b = min-length(num, this) - var b; - if (this.length > num.length) - b = num; - else - b = this; + // Writable ctor is applied to Duplexes, though they're not + // instanceof Writable, they're instanceof Readable. + if (!(this instanceof Writable) && !(this instanceof Duplex)) + return new Writable(options); - for (var i = 0; i < b.length; i++) - this.words[i] = this.words[i] & num.words[i]; + this._writableState = new WritableState(options, this); - this.length = b.length; + // legacy. + this.writable = true; - return this.strip(); + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function() { + this.emit('error', new Error('Cannot pipe. Not readable.')); }; -// And `num` with `this` -BN.prototype.and = function and(num) { - if (this.length > num.length) - return this.clone().iand(num); - else - return num.clone().iand(this); -}; +function writeAfterEnd(stream, state, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + process.nextTick(function() { + cb(er); + }); +} +// If we get something that is not a buffer, string, null, or undefined, +// and we're not in objectMode, then that's an error. +// Otherwise stream chunks are all considered to be of length=1, and the +// watermarks determine how many objects to keep in the buffer, rather than +// how many bytes or characters. +function validChunk(stream, state, chunk, cb) { + var valid = true; + if (!util.isBuffer(chunk) && + !util.isString(chunk) && + !util.isNullOrUndefined(chunk) && + !state.objectMode) { + var er = new TypeError('Invalid non-string/buffer chunk'); + stream.emit('error', er); + process.nextTick(function() { + cb(er); + }); + valid = false; + } + return valid; +} -// Xor `num` with `this` in-place -BN.prototype.ixor = function ixor(num) { - this.sign = this.sign || num.sign; +Writable.prototype.write = function(chunk, encoding, cb) { + var state = this._writableState; + var ret = false; - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; + if (util.isFunction(encoding)) { + cb = encoding; + encoding = null; } - for (var i = 0; i < b.length; i++) - this.words[i] = a.words[i] ^ b.words[i]; + if (util.isBuffer(chunk)) + encoding = 'buffer'; + else if (!encoding) + encoding = state.defaultEncoding; - if (this !== a) - for (; i < a.length; i++) - this.words[i] = a.words[i]; + if (!util.isFunction(cb)) + cb = function() {}; - this.length = a.length; + if (state.ended) + writeAfterEnd(this, state, cb); + else if (validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, chunk, encoding, cb); + } - return this.strip(); + return ret; }; +Writable.prototype.cork = function() { + var state = this._writableState; -// Xor `num` with `this` -BN.prototype.xor = function xor(num) { - if (this.length > num.length) - return this.clone().ixor(num); - else - return num.clone().ixor(this); + state.corked++; }; +Writable.prototype.uncork = function() { + var state = this._writableState; -// Set `bit` of `this` -BN.prototype.setn = function setn(bit, val) { - assert(typeof bit === 'number' && bit >= 0); - - var off = (bit / 26) | 0; - var wbit = bit % 26; + if (state.corked) { + state.corked--; - while (this.length <= off) - this.words[this.length++] = 0; + if (!state.writing && + !state.corked && + !state.finished && + !state.bufferProcessing && + state.buffer.length) + clearBuffer(this, state); + } +}; - if (val) - this.words[off] = this.words[off] | (1 << wbit); - else - this.words[off] = this.words[off] & ~(1 << wbit); +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && + state.decodeStrings !== false && + util.isString(chunk)) { + chunk = new Buffer(chunk, encoding); + } + return chunk; +} - return this.strip(); -}; +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, chunk, encoding, cb) { + chunk = decodeChunk(state, chunk, encoding); + if (util.isBuffer(chunk)) + encoding = 'buffer'; + var len = state.objectMode ? 1 : chunk.length; + state.length += len; -// Add `num` to `this` in-place -BN.prototype.iadd = function iadd(num) { - // negative + positive - if (this.sign && !num.sign) { - this.sign = false; - var r = this.isub(num); - this.sign = !this.sign; - return this._normSign(); + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) + state.needDrain = true; - // positive + negative - } else if (!this.sign && num.sign) { - num.sign = false; - var r = this.isub(num); - num.sign = true; - return r._normSign(); - } + if (state.writing || state.corked) + state.buffer.push(new WriteReq(chunk, encoding, cb)); + else + doWrite(stream, state, false, len, chunk, encoding, cb); - // a.length > b.length - var a; - var b; - if (this.length > num.length) { - a = this; - b = num; - } else { - a = num; - b = this; - } + return ret; +} - var carry = 0; - for (var i = 0; i < b.length; i++) { - var r = a.words[i] + b.words[i] + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } - for (; carry !== 0 && i < a.length; i++) { - var r = a.words[i] + carry; - this.words[i] = r & 0x3ffffff; - carry = r >>> 26; - } +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) + stream._writev(chunk, state.onwrite); + else + stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} - this.length = a.length; - if (carry !== 0) { - this.words[this.length] = carry; - this.length++; - // Copy the rest of the words - } else if (a !== this) { - for (; i < a.length; i++) - this.words[i] = a.words[i]; +function onwriteError(stream, state, sync, er, cb) { + if (sync) + process.nextTick(function() { + state.pendingcb--; + cb(er); + }); + else { + state.pendingcb--; + cb(er); } - return this; -}; + stream._writableState.errorEmitted = true; + stream.emit('error', er); +} -// Add `num` to `this` -BN.prototype.add = function add(num) { - if (num.sign && !this.sign) { - num.sign = false; - var res = this.sub(num); - num.sign = true; - return res; - } else if (!num.sign && this.sign) { - this.sign = false; - var res = num.sub(this); - this.sign = true; - return res; - } +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} - if (this.length > num.length) - return this.clone().iadd(num); - else - return num.clone().iadd(this); -}; +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; -// Subtract `num` from `this` in-place -BN.prototype.isub = function isub(num) { - // this - (-num) = this + num - if (num.sign) { - num.sign = false; - var r = this.iadd(num); - num.sign = true; - return r._normSign(); + onwriteStateUpdate(state); - // -this - num = -(this + num) - } else if (this.sign) { - this.sign = false; - this.iadd(num); - this.sign = true; - return this._normSign(); - } + if (er) + onwriteError(stream, state, sync, er, cb); + else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(stream, state); - // At this point both numbers are positive - var cmp = this.cmp(num); + if (!finished && + !state.corked && + !state.bufferProcessing && + state.buffer.length) { + clearBuffer(stream, state); + } - // Optimization - zeroify - if (cmp === 0) { - this.sign = false; - this.length = 1; - this.words[0] = 0; - return this; + if (sync) { + process.nextTick(function() { + afterWrite(stream, state, finished, cb); + }); + } else { + afterWrite(stream, state, finished, cb); + } } +} - // a > b - var a; - var b; - if (cmp > 0) { - a = this; - b = num; - } else { - a = num; - b = this; - } +function afterWrite(stream, state, finished, cb) { + if (!finished) + onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} - var carry = 0; - for (var i = 0; i < b.length; i++) { - var r = a.words[i] - b.words[i] + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; - } - for (; carry !== 0 && i < a.length; i++) { - var r = a.words[i] + carry; - carry = r >> 26; - this.words[i] = r & 0x3ffffff; +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); } +} - // Copy rest of the words - if (carry === 0 && i < a.length && a !== this) - for (; i < a.length; i++) - this.words[i] = a.words[i]; - this.length = Math.max(this.length, i); - if (a !== this) - this.sign = true; +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; - return this.strip(); -}; + if (stream._writev && state.buffer.length > 1) { + // Fast case, write everything using _writev() + var cbs = []; + for (var c = 0; c < state.buffer.length; c++) + cbs.push(state.buffer[c].callback); -// Subtract `num` from `this` -BN.prototype.sub = function sub(num) { - return this.clone().isub(num); -}; + // count the one we are adding, as well. + // TODO(isaacs) clean this up + state.pendingcb++; + doWrite(stream, state, true, state.length, state.buffer, '', function(err) { + for (var i = 0; i < cbs.length; i++) { + state.pendingcb--; + cbs[i](err); + } + }); -/* -// NOTE: This could be potentionally used to generate loop-less multiplications -function _genCombMulTo(alen, blen) { - var len = alen + blen - 1; - var src = [ - 'var a = this.words, b = num.words, o = out.words, c = 0, w, ' + - 'mask = 0x3ffffff, shift = 0x4000000;', - 'out.length = ' + len + ';' - ]; - for (var k = 0; k < len; k++) { - var minJ = Math.max(0, k - alen + 1); - var maxJ = Math.min(k, blen - 1); + // Clear buffer + state.buffer = []; + } else { + // Slow case, write chunks one-by-one + for (var c = 0; c < state.buffer.length; c++) { + var entry = state.buffer[c]; + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; - for (var j = minJ; j <= maxJ; j++) { - var i = k - j; - var mul = 'a[' + i + '] * b[' + j + ']'; + doWrite(stream, state, false, len, chunk, encoding, cb); - if (j === minJ) { - src.push('w = ' + mul + ' + c;'); - src.push('c = (w / shift) | 0;'); - } else { - src.push('w += ' + mul + ';'); - src.push('c += (w / shift) | 0;'); + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + c++; + break; } - src.push('w &= mask;'); } - src.push('o[' + k + '] = w;'); + + if (c < state.buffer.length) + state.buffer = state.buffer.slice(c); + else + state.buffer.length = 0; } - src.push('if (c !== 0) {', - ' o[' + k + '] = c;', - ' out.length++;', - '}', - 'return out;'); - return src.join('\n'); + state.bufferProcessing = false; } -*/ -BN.prototype._smallMulTo = function _smallMulTo(num, out) { - out.sign = num.sign !== this.sign; - out.length = this.length + num.length; +Writable.prototype._write = function(chunk, encoding, cb) { + cb(new Error('not implemented')); - var carry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = carry >>> 26; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - this.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = this.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; +}; - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; - } - out.words[k] = rword; - carry = ncarry; +Writable.prototype._writev = null; + +Writable.prototype.end = function(chunk, encoding, cb) { + var state = this._writableState; + + if (util.isFunction(chunk)) { + cb = chunk; + chunk = null; + encoding = null; + } else if (util.isFunction(encoding)) { + cb = encoding; + encoding = null; } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; + + if (!util.isNullOrUndefined(chunk)) + this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); } - return out.strip(); + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) + endWritable(this, state, cb); }; -BN.prototype._bigMulTo = function _bigMulTo(num, out) { - out.sign = num.sign !== this.sign; - out.length = this.length + num.length; - var carry = 0; - var hncarry = 0; - for (var k = 0; k < out.length - 1; k++) { - // Sum all words with the same `i + j = k` and accumulate `ncarry`, - // note that ncarry could be >= 0x3ffffff - var ncarry = hncarry; - hncarry = 0; - var rword = carry & 0x3ffffff; - var maxJ = Math.min(k, num.length - 1); - for (var j = Math.max(0, k - this.length + 1); j <= maxJ; j++) { - var i = k - j; - var a = this.words[i] | 0; - var b = num.words[j] | 0; - var r = a * b; +function needFinish(stream, state) { + return (state.ending && + state.length === 0 && + !state.finished && + !state.writing); +} - var lo = r & 0x3ffffff; - ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; - lo = (lo + rword) | 0; - rword = lo & 0x3ffffff; - ncarry = (ncarry + (lo >>> 26)) | 0; +function prefinish(stream, state) { + if (!state.prefinished) { + state.prefinished = true; + stream.emit('prefinish'); + } +} - hncarry += ncarry >>> 26; - ncarry &= 0x3ffffff; - } - out.words[k] = rword; - carry = ncarry; - ncarry = hncarry; +function finishMaybe(stream, state) { + var need = needFinish(stream, state); + if (need) { + if (state.pendingcb === 0) { + prefinish(stream, state); + state.finished = true; + stream.emit('finish'); + } else + prefinish(stream, state); } - if (carry !== 0) { - out.words[k] = carry; - } else { - out.length--; + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) + process.nextTick(cb); + else + stream.once('finish', cb); } + state.ended = true; +} - return out.strip(); -}; +}).call(this,require('_process')) +},{"./_stream_duplex":249,"_process":235,"buffer":147,"core-util-is":150,"inherits":226,"stream":291}],254:[function(require,module,exports){ +module.exports = require("./lib/_stream_passthrough.js") -BN.prototype.mulTo = function mulTo(num, out) { - var res; - if (this.length + num.length < 63) - res = this._smallMulTo(num, out); - else - res = this._bigMulTo(num, out); - return res; -}; +},{"./lib/_stream_passthrough.js":250}],255:[function(require,module,exports){ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = require('stream'); +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); -// Multiply `this` by `num` -BN.prototype.mul = function mul(num) { - var out = new BN(null); - out.words = new Array(this.length + num.length); - return this.mulTo(num, out); -}; +},{"./lib/_stream_duplex.js":249,"./lib/_stream_passthrough.js":250,"./lib/_stream_readable.js":251,"./lib/_stream_transform.js":252,"./lib/_stream_writable.js":253,"stream":291}],256:[function(require,module,exports){ +module.exports = require("./lib/_stream_transform.js") -// In-place Multiplication -BN.prototype.imul = function imul(num) { - if (this.cmpn(0) === 0 || num.cmpn(0) === 0) { - this.words[0] = 0; - this.length = 1; - return this; - } +},{"./lib/_stream_transform.js":252}],257:[function(require,module,exports){ +module.exports = require("./lib/_stream_writable.js") - var tlen = this.length; - var nlen = num.length; +},{"./lib/_stream_writable.js":253}],258:[function(require,module,exports){ +(function (Buffer){ +/* +CryptoJS v3.1.2 +code.google.com/p/crypto-js +(c) 2009-2013 by Jeff Mott. All rights reserved. +code.google.com/p/crypto-js/wiki/License +*/ +/** @preserve +(c) 2012 by Cédric Mesnil. All rights reserved. - this.sign = num.sign !== this.sign; - this.length = this.length + num.length; - this.words[this.length - 1] = 0; +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - for (var k = this.length - 2; k >= 0; k--) { - // Sum all words with the same `i + j = k` and accumulate `carry`, - // note that carry could be >= 0x3ffffff - var carry = 0; - var rword = 0; - var maxJ = Math.min(k, nlen - 1); - for (var j = Math.max(0, k - tlen + 1); j <= maxJ; j++) { - var i = k - j; - var a = this.words[i]; - var b = num.words[j]; - var r = a * b; + - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - var lo = r & 0x3ffffff; - carry += (r / 0x4000000) | 0; - lo += rword; - rword = lo & 0x3ffffff; - carry += lo >>> 26; - } - this.words[k] = rword; - this.words[k + 1] += carry; - carry = 0; - } +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ - // Propagate overflows - var carry = 0; - for (var i = 1; i < this.length; i++) { - var w = this.words[i] + carry; - this.words[i] = w & 0x3ffffff; - carry = w >>> 26; - } +// constants table +var zl = [ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 +] - return this.strip(); -}; +var zr = [ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 +] -BN.prototype.imuln = function imuln(num) { - assert(typeof num === 'number'); +var sl = [ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 +] - // Carry - var carry = 0; - for (var i = 0; i < this.length; i++) { - var w = this.words[i] * num; - var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); - carry >>= 26; - carry += (w / 0x4000000) | 0; - // NOTE: lo is 27bit maximum - carry += lo >>> 26; - this.words[i] = lo & 0x3ffffff; - } +var sr = [ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 +] - if (carry !== 0) { - this.words[i] = carry; - this.length++; +var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E] +var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000] + +function bytesToWords (bytes) { + var words = [] + for (var i = 0, b = 0; i < bytes.length; i++, b += 8) { + words[b >>> 5] |= bytes[i] << (24 - b % 32) } + return words +} - return this; -}; +function wordsToBytes (words) { + var bytes = [] + for (var b = 0; b < words.length * 32; b += 8) { + bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF) + } + return bytes +} -BN.prototype.muln = function muln(num) { - return this.clone().imuln(num); -}; +function processBlock (H, M, offset) { + // swap endian + for (var i = 0; i < 16; i++) { + var offset_i = offset + i + var M_offset_i = M[offset_i] -// `this` * `this` -BN.prototype.sqr = function sqr() { - return this.mul(this); -}; + // Swap + M[offset_i] = ( + (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) | + (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00) + ) + } -// `this` * `this` in-place -BN.prototype.isqr = function isqr() { - return this.mul(this); -}; + // Working variables + var al, bl, cl, dl, el + var ar, br, cr, dr, er -// Shift-left in-place -BN.prototype.ishln = function ishln(bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; - var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); + ar = al = H[0] + br = bl = H[1] + cr = cl = H[2] + dr = dl = H[3] + er = el = H[4] - if (r !== 0) { - var carry = 0; - for (var i = 0; i < this.length; i++) { - var newCarry = this.words[i] & carryMask; - var c = (this.words[i] - newCarry) << r; - this.words[i] = c | carry; - carry = newCarry >>> (26 - r); + // computation + var t + for (i = 0; i < 80; i += 1) { + t = (al + M[offset + zl[i]]) | 0 + if (i < 16) { + t += f1(bl, cl, dl) + hl[0] + } else if (i < 32) { + t += f2(bl, cl, dl) + hl[1] + } else if (i < 48) { + t += f3(bl, cl, dl) + hl[2] + } else if (i < 64) { + t += f4(bl, cl, dl) + hl[3] + } else {// if (i<80) { + t += f5(bl, cl, dl) + hl[4] } - if (carry) { - this.words[i] = carry; - this.length++; + t = t | 0 + t = rotl(t, sl[i]) + t = (t + el) | 0 + al = el + el = dl + dl = rotl(cl, 10) + cl = bl + bl = t + + t = (ar + M[offset + zr[i]]) | 0 + if (i < 16) { + t += f5(br, cr, dr) + hr[0] + } else if (i < 32) { + t += f4(br, cr, dr) + hr[1] + } else if (i < 48) { + t += f3(br, cr, dr) + hr[2] + } else if (i < 64) { + t += f2(br, cr, dr) + hr[3] + } else {// if (i<80) { + t += f1(br, cr, dr) + hr[4] } - } - if (s !== 0) { - for (var i = this.length - 1; i >= 0; i--) - this.words[i + s] = this.words[i]; - for (var i = 0; i < s; i++) - this.words[i] = 0; - this.length += s; + t = t | 0 + t = rotl(t, sr[i]) + t = (t + er) | 0 + ar = er + er = dr + dr = rotl(cr, 10) + cr = br + br = t } - return this.strip(); -}; + // intermediate hash value + t = (H[1] + cl + dr) | 0 + H[1] = (H[2] + dl + er) | 0 + H[2] = (H[3] + el + ar) | 0 + H[3] = (H[4] + al + br) | 0 + H[4] = (H[0] + bl + cr) | 0 + H[0] = t +} -// Shift-right in-place -// NOTE: `hint` is a lowest bit before trailing zeroes -// NOTE: if `extended` is present - it will be filled with destroyed bits -BN.prototype.ishrn = function ishrn(bits, hint, extended) { - assert(typeof bits === 'number' && bits >= 0); - var h; - if (hint) - h = (hint - (hint % 26)) / 26; - else - h = 0; +function f1 (x, y, z) { + return ((x) ^ (y) ^ (z)) +} - var r = bits % 26; - var s = Math.min((bits - r) / 26, this.length); - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - var maskedWords = extended; +function f2 (x, y, z) { + return (((x) & (y)) | ((~x) & (z))) +} - h -= s; - h = Math.max(0, h); +function f3 (x, y, z) { + return (((x) | (~(y))) ^ (z)) +} - // Extended mode, copy masked part - if (maskedWords) { - for (var i = 0; i < s; i++) - maskedWords.words[i] = this.words[i]; - maskedWords.length = s; - } +function f4 (x, y, z) { + return (((x) & (z)) | ((y) & (~(z)))) +} - if (s === 0) { - // No-op, we should not move anything at all - } else if (this.length > s) { - this.length -= s; - for (var i = 0; i < this.length; i++) - this.words[i] = this.words[i + s]; - } else { - this.words[0] = 0; - this.length = 1; - } +function f5 (x, y, z) { + return ((x) ^ ((y) | (~(z)))) +} - var carry = 0; - for (var i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { - var word = this.words[i]; - this.words[i] = (carry << (26 - r)) | (word >>> r); - carry = word & mask; - } +function rotl (x, n) { + return (x << n) | (x >>> (32 - n)) +} - // Push carried bits as a mask - if (maskedWords && carry !== 0) - maskedWords.words[maskedWords.length++] = carry; +function ripemd160 (message) { + var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0] - if (this.length === 0) { - this.words[0] = 0; - this.length = 1; + if (typeof message === 'string') { + message = new Buffer(message, 'utf8') } - this.strip(); + var m = bytesToWords(message) - return this; -}; + var nBitsLeft = message.length * 8 + var nBitsTotal = message.length * 8 -// Shift-left -BN.prototype.shln = function shln(bits) { - return this.clone().ishln(bits); -}; + // Add padding + m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32) + m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = ( + (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) | + (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00) + ) -// Shift-right -BN.prototype.shrn = function shrn(bits) { - return this.clone().ishrn(bits); -}; + for (var i = 0; i < m.length; i += 16) { + processBlock(H, m, i) + } -// Test if n bit is set -BN.prototype.testn = function testn(bit) { - assert(typeof bit === 'number' && bit >= 0); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; + // swap endian + for (i = 0; i < 5; i++) { + // shortcut + var H_i = H[i] - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - return false; + // Swap + H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) | + (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00) } - // Check bit and return - var w = this.words[s]; + var digestbytes = wordsToBytes(H) + return new Buffer(digestbytes) +} - return !!(w & q); -}; +module.exports = ripemd160 -// Return only lowers bits of number (in-place) -BN.prototype.imaskn = function imaskn(bits) { - assert(typeof bits === 'number' && bits >= 0); - var r = bits % 26; - var s = (bits - r) / 26; +}).call(this,require("buffer").Buffer) +},{"buffer":147}],259:[function(require,module,exports){ +/*! + * Fast "async" scrypt implementation in JavaScript. + * Copyright (c) 2013-2015 Dmitry Chestnykh | BSD License + * https://github.com/dchest/scrypt-async-js + */ - assert(!this.sign, 'imaskn works only with positive numbers'); +/* + * Limitation: doesn't support parallelization parameter greater than 1. + */ - if (r !== 0) - s++; - this.length = Math.min(s, this.length); +/** + * scrypt(password, salt, logN, r, dkLen, [interruptStep], callback, [encoding]) + * + * Derives a key from password and salt and calls callback + * with derived key as the only argument. + * + * Calculations are interrupted with setImmediate (or zero setTimeout) at the + * given interruptSteps to avoid freezing the browser. If interruptStep is not + * given, it defaults to 1000. If it's zero, the callback is called immediately + * after the calculation, avoiding setImmediate. + * + * @param {string|Array.} password Password. + * @param {string|Array.} salt Salt. + * @param {number} logN CPU/memory cost parameter (1 to 31). + * @param {number} r Block size parameter. + * @param {number} dkLen Length of derived key. + * @param {number?} interruptStep (optional) Steps to split calculation with timeouts (default 1000). + * @param {function(string|Array.)} callback Callback function. + * @param {string?} encoding (optional) Result encoding ("base64", "hex", or null). + * + */ +function scrypt(password, salt, logN, r, dkLen, interruptStep, callback, encoding) { + 'use strict'; + + function SHA256(m) { + /** @const */ var K = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, + 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, + 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, + 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, + 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, + 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, + 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, + 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, + 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, + 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, + 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + ]; + + var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, + h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19, + w = new Array(64); + + function blocks(p) { + var off = 0, len = p.length; + while (len >= 64) { + var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, + u, i, j, t1, t2; - if (r !== 0) { - var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); - this.words[this.length - 1] &= mask; - } + for (i = 0; i < 16; i++) { + j = off + i*4; + w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) | + ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff); + } - return this.strip(); -}; + for (i = 16; i < 64; i++) { + u = w[i-2]; + t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10); -// Return only lowers bits of number -BN.prototype.maskn = function maskn(bits) { - return this.clone().imaskn(bits); -}; + u = w[i-15]; + t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3); -// Add plain number `num` to `this` -BN.prototype.iaddn = function iaddn(num) { - assert(typeof num === 'number'); - if (num < 0) - return this.isubn(-num); + w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0; + } - // Possible sign change - if (this.sign) { - if (this.length === 1 && this.words[0] < num) { - this.words[0] = num - this.words[0]; - this.sign = false; - return this; - } + for (i = 0; i < 64; i++) { + t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^ + ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) + + ((h + ((K[i] + w[i]) | 0)) | 0)) | 0; - this.sign = false; - this.isubn(num); - this.sign = true; - return this; - } + t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^ + ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0; - // Add without checks - return this._iaddn(num); -}; + h = g; + g = f; + f = e; + e = (d + t1) | 0; + d = c; + c = b; + b = a; + a = (t1 + t2) | 0; + } -BN.prototype._iaddn = function _iaddn(num) { - this.words[0] += num; + h0 = (h0 + a) | 0; + h1 = (h1 + b) | 0; + h2 = (h2 + c) | 0; + h3 = (h3 + d) | 0; + h4 = (h4 + e) | 0; + h5 = (h5 + f) | 0; + h6 = (h6 + g) | 0; + h7 = (h7 + h) | 0; - // Carry - for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { - this.words[i] -= 0x4000000; - if (i === this.length - 1) - this.words[i + 1] = 1; - else - this.words[i + 1]++; - } - this.length = Math.max(this.length, i + 1); + off += 64; + len -= 64; + } + } - return this; -}; + blocks(m); -// Subtract plain number `num` from `this` -BN.prototype.isubn = function isubn(num) { - assert(typeof num === 'number'); - if (num < 0) - return this.iaddn(-num); + var i, bytesLeft = m.length % 64, + bitLenHi = (m.length / 0x20000000) | 0, + bitLenLo = m.length << 3, + numZeros = (bytesLeft < 56) ? 56 : 120, + p = m.slice(m.length - bytesLeft, m.length); - if (this.sign) { - this.sign = false; - this.iaddn(num); - this.sign = true; - return this; - } + p.push(0x80); + for (i = bytesLeft + 1; i < numZeros; i++) p.push(0); + p.push((bitLenHi>>>24) & 0xff); + p.push((bitLenHi>>>16) & 0xff); + p.push((bitLenHi>>>8) & 0xff); + p.push((bitLenHi>>>0) & 0xff); + p.push((bitLenLo>>>24) & 0xff); + p.push((bitLenLo>>>16) & 0xff); + p.push((bitLenLo>>>8) & 0xff); + p.push((bitLenLo>>>0) & 0xff); - this.words[0] -= num; + blocks(p); - // Carry - for (var i = 0; i < this.length && this.words[i] < 0; i++) { - this.words[i] += 0x4000000; - this.words[i + 1] -= 1; + return [ + (h0>>>24) & 0xff, (h0>>>16) & 0xff, (h0>>>8) & 0xff, (h0>>>0) & 0xff, + (h1>>>24) & 0xff, (h1>>>16) & 0xff, (h1>>>8) & 0xff, (h1>>>0) & 0xff, + (h2>>>24) & 0xff, (h2>>>16) & 0xff, (h2>>>8) & 0xff, (h2>>>0) & 0xff, + (h3>>>24) & 0xff, (h3>>>16) & 0xff, (h3>>>8) & 0xff, (h3>>>0) & 0xff, + (h4>>>24) & 0xff, (h4>>>16) & 0xff, (h4>>>8) & 0xff, (h4>>>0) & 0xff, + (h5>>>24) & 0xff, (h5>>>16) & 0xff, (h5>>>8) & 0xff, (h5>>>0) & 0xff, + (h6>>>24) & 0xff, (h6>>>16) & 0xff, (h6>>>8) & 0xff, (h6>>>0) & 0xff, + (h7>>>24) & 0xff, (h7>>>16) & 0xff, (h7>>>8) & 0xff, (h7>>>0) & 0xff + ]; } - return this.strip(); -}; - -BN.prototype.addn = function addn(num) { - return this.clone().iaddn(num); -}; + function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) { + // compress password if it's longer than hash block length + password = password.length <= 64 ? password : SHA256(password); -BN.prototype.subn = function subn(num) { - return this.clone().isubn(num); -}; + var i, innerLen = 64 + salt.length + 4, + inner = new Array(innerLen), + outerKey = new Array(64), + dk = []; -BN.prototype.iabs = function iabs() { - this.sign = false; + // inner = (password ^ ipad) || salt || counter + for (i = 0; i < 64; i++) inner[i] = 0x36; + for (i = 0; i < password.length; i++) inner[i] ^= password[i]; + for (i = 0; i < salt.length; i++) inner[64+i] = salt[i]; + for (i = innerLen - 4; i < innerLen; i++) inner[i] = 0; - return this; -}; + // outerKey = password ^ opad + for (i = 0; i < 64; i++) outerKey[i] = 0x5c; + for (i = 0; i < password.length; i++) outerKey[i] ^= password[i]; -BN.prototype.abs = function abs() { - return this.clone().iabs(); -}; + // increments counter inside inner + function incrementCounter() { + for (var i = innerLen-1; i >= innerLen-4; i--) { + inner[i]++; + if (inner[i] <= 0xff) return; + inner[i] = 0; + } + } -BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) { - // Bigger storage is needed - var len = num.length + shift; - var i; - if (this.words.length < len) { - var t = new Array(len); - for (var i = 0; i < this.length; i++) - t[i] = this.words[i]; - this.words = t; - } else { - i = this.length; + // output blocks = SHA256(outerKey || SHA256(inner)) ... + while (dkLen >= 32) { + incrementCounter(); + dk = dk.concat(SHA256(outerKey.concat(SHA256(inner)))); + dkLen -= 32; + } + if (dkLen > 0) { + incrementCounter(); + dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen)); + } + return dk; } - // Zeroify rest - this.length = Math.max(this.length, len); - for (; i < this.length; i++) - this.words[i] = 0; + function salsaXOR(tmp, B, bin, bout) { + var j0 = tmp[0] ^ B[bin++], + j1 = tmp[1] ^ B[bin++], + j2 = tmp[2] ^ B[bin++], + j3 = tmp[3] ^ B[bin++], + j4 = tmp[4] ^ B[bin++], + j5 = tmp[5] ^ B[bin++], + j6 = tmp[6] ^ B[bin++], + j7 = tmp[7] ^ B[bin++], + j8 = tmp[8] ^ B[bin++], + j9 = tmp[9] ^ B[bin++], + j10 = tmp[10] ^ B[bin++], + j11 = tmp[11] ^ B[bin++], + j12 = tmp[12] ^ B[bin++], + j13 = tmp[13] ^ B[bin++], + j14 = tmp[14] ^ B[bin++], + j15 = tmp[15] ^ B[bin++], + u, i; - var carry = 0; - for (var i = 0; i < num.length; i++) { - var w = this.words[i + shift] + carry; - var right = num.words[i] * mul; - w -= right & 0x3ffffff; - carry = (w >> 26) - ((right / 0x4000000) | 0); - this.words[i + shift] = w & 0x3ffffff; - } - for (; i < this.length - shift; i++) { - var w = this.words[i + shift] + carry; - carry = w >> 26; - this.words[i + shift] = w & 0x3ffffff; - } + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15; - if (carry === 0) - return this.strip(); + for (i = 0; i < 8; i += 2) { + u = x0 + x12; x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0; x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4; x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8; x0 ^= u<<18 | u>>>(32-18); - // Subtraction overflow - assert(carry === -1); - carry = 0; - for (var i = 0; i < this.length; i++) { - var w = -this.words[i] + carry; - carry = w >> 26; - this.words[i] = w & 0x3ffffff; - } - this.sign = true; + u = x5 + x1; x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5; x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9; x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13; x5 ^= u<<18 | u>>>(32-18); - return this.strip(); -}; + u = x10 + x6; x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10; x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14; x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2; x10 ^= u<<18 | u>>>(32-18); -BN.prototype._wordDiv = function _wordDiv(num, mode) { - var shift = this.length - num.length; + u = x15 + x11; x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15; x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3; x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7; x15 ^= u<<18 | u>>>(32-18); - var a = this.clone(); - var b = num; + u = x0 + x3; x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0; x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1; x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2; x0 ^= u<<18 | u>>>(32-18); - // Normalize - var bhi = b.words[b.length - 1]; - var bhiBits = this._countBits(bhi); - shift = 26 - bhiBits; - if (shift !== 0) { - b = b.shln(shift); - a.ishln(shift); - bhi = b.words[b.length - 1]; - } + u = x5 + x4; x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5; x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6; x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7; x5 ^= u<<18 | u>>>(32-18); - // Initialize quotient - var m = a.length - b.length; - var q; + u = x10 + x9; x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10; x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11; x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8; x10 ^= u<<18 | u>>>(32-18); - if (mode !== 'mod') { - q = new BN(null); - q.length = m + 1; - q.words = new Array(q.length); - for (var i = 0; i < q.length; i++) - q.words[i] = 0; - } + u = x15 + x14; x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15; x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12; x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13; x15 ^= u<<18 | u>>>(32-18); + } - var diff = a.clone()._ishlnsubmul(b, 1, m); - if (!diff.sign) { - a = diff; - if (q) - q.words[m] = 1; + B[bout++] = tmp[0] = (x0 + j0) | 0; + B[bout++] = tmp[1] = (x1 + j1) | 0; + B[bout++] = tmp[2] = (x2 + j2) | 0; + B[bout++] = tmp[3] = (x3 + j3) | 0; + B[bout++] = tmp[4] = (x4 + j4) | 0; + B[bout++] = tmp[5] = (x5 + j5) | 0; + B[bout++] = tmp[6] = (x6 + j6) | 0; + B[bout++] = tmp[7] = (x7 + j7) | 0; + B[bout++] = tmp[8] = (x8 + j8) | 0; + B[bout++] = tmp[9] = (x9 + j9) | 0; + B[bout++] = tmp[10] = (x10 + j10) | 0; + B[bout++] = tmp[11] = (x11 + j11) | 0; + B[bout++] = tmp[12] = (x12 + j12) | 0; + B[bout++] = tmp[13] = (x13 + j13) | 0; + B[bout++] = tmp[14] = (x14 + j14) | 0; + B[bout++] = tmp[15] = (x15 + j15) | 0; } - for (var j = m - 1; j >= 0; j--) { - var qj = a.words[b.length + j] * 0x4000000 + a.words[b.length + j - 1]; + function blockCopy(dst, di, src, si, len) { + while (len--) dst[di++] = src[si++]; + } - // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max - // (0x7ffffff) - qj = Math.min((qj / bhi) | 0, 0x3ffffff); + function blockXOR(dst, di, src, si, len) { + while (len--) dst[di++] ^= src[si++]; + } - a._ishlnsubmul(b, qj, j); - while (a.sign) { - qj--; - a.sign = false; - a._ishlnsubmul(b, 1, j); - if (a.cmpn(0) !== 0) - a.sign = !a.sign; + function blockMix(tmp, B, bin, bout, r) { + blockCopy(tmp, 0, B, bin + (2*r-1)*16, 16); + for (var i = 0; i < 2*r; i += 2) { + salsaXOR(tmp, B, bin + i*16, bout + i*8); + salsaXOR(tmp, B, bin + i*16 + 16, bout + i*8 + r*16); } - if (q) - q.words[j] = qj; } - if (q) - q.strip(); - a.strip(); - - // Denormalize - if (mode !== 'div' && shift !== 0) - a.ishrn(shift); - return { div: q ? q : null, mod: a }; -}; -BN.prototype.divmod = function divmod(num, mode) { - assert(num.cmpn(0) !== 0); - - if (this.sign && !num.sign) { - var res = this.neg().divmod(num, mode); - var div; - var mod; - if (mode !== 'mod') - div = res.div.neg(); - if (mode !== 'div') - mod = res.mod.cmpn(0) === 0 ? res.mod : num.sub(res.mod); - return { - div: div, - mod: mod - }; - } else if (!this.sign && num.sign) { - var res = this.divmod(num.neg(), mode); - var div; - if (mode !== 'mod') - div = res.div.neg(); - return { div: div, mod: res.mod }; - } else if (this.sign && num.sign) { - return this.neg().divmod(num.neg(), mode); + function integerify(B, bi, r) { + return B[bi+(2*r-1)*16]; } - // Both numbers are positive at this point - - // Strip both numbers to approximate shift value - if (num.length > this.length || this.cmp(num) < 0) - return { div: new BN(0), mod: this }; - - // Very short reduction - if (num.length === 1) { - if (mode === 'div') - return { div: this.divn(num.words[0]), mod: null }; - else if (mode === 'mod') - return { div: null, mod: new BN(this.modn(num.words[0])) }; - return { - div: this.divn(num.words[0]), - mod: new BN(this.modn(num.words[0])) - }; + function stringToUTF8Bytes(s) { + var arr = []; + for (var i = 0; i < s.length; i++) { + var c = s.charCodeAt(i); + if (c < 128) { + arr.push(c); + } else if (c > 127 && c < 2048) { + arr.push((c>>6) | 192); + arr.push((c & 63) | 128); + } else { + arr.push((c>>12) | 224); + arr.push(((c>>6) & 63) | 128); + arr.push((c & 63) | 128); + } + } + return arr; } - return this._wordDiv(num, mode); -}; - -// Find `this` / `num` -BN.prototype.div = function div(num) { - return this.divmod(num, 'div').div; -}; - -// Find `this` % `num` -BN.prototype.mod = function mod(num) { - return this.divmod(num, 'mod').mod; -}; - -// Find Round(`this` / `num`) -BN.prototype.divRound = function divRound(num) { - var dm = this.divmod(num); - - // Fast case - exact division - if (dm.mod.cmpn(0) === 0) - return dm.div; - - var mod = dm.div.sign ? dm.mod.isub(num) : dm.mod; - - var half = num.shrn(1); - var r2 = num.andln(1); - var cmp = mod.cmp(half); - - // Round down - if (cmp < 0 || r2 === 1 && cmp === 0) - return dm.div; - - // Round up - return dm.div.sign ? dm.div.isubn(1) : dm.div.iaddn(1); -}; + function bytesToHex(p) { + /** @const */ + var enc = '0123456789abcdef'.split(''); -BN.prototype.modn = function modn(num) { - assert(num <= 0x3ffffff); - var p = (1 << 26) % num; + var len = p.length, + arr = [], + i = 0; - var acc = 0; - for (var i = this.length - 1; i >= 0; i--) - acc = (p * acc + this.words[i]) % num; + for (; i < len; i++) { + arr.push(enc[(p[i]>>>4) & 15]); + arr.push(enc[(p[i]>>>0) & 15]); + } + return arr.join(''); + } - return acc; -}; + function bytesToBase64(p) { + /** @const */ + var enc = ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' + + '0123456789+/').split(''); -// In-place division by number -BN.prototype.idivn = function idivn(num) { - assert(num <= 0x3ffffff); + var len = p.length, + arr = [], + i = 0, + a, b, c, t; - var carry = 0; - for (var i = this.length - 1; i >= 0; i--) { - var w = this.words[i] + carry * 0x4000000; - this.words[i] = (w / num) | 0; - carry = w % num; + while (i < len) { + a = i < len ? p[i++] : 0; + b = i < len ? p[i++] : 0; + c = i < len ? p[i++] : 0; + t = (a << 16) + (b << 8) + c; + arr.push(enc[(t >>> 3 * 6) & 63]); + arr.push(enc[(t >>> 2 * 6) & 63]); + arr.push(enc[(t >>> 1 * 6) & 63]); + arr.push(enc[(t >>> 0 * 6) & 63]); + } + if (len % 3 > 0) { + arr[arr.length-1] = '='; + if (len % 3 === 1) arr[arr.length-2] = '='; + } + return arr.join(''); } - return this.strip(); -}; - -BN.prototype.divn = function divn(num) { - return this.clone().idivn(num); -}; -BN.prototype.egcd = function egcd(p) { - assert(!p.sign); - assert(p.cmpn(0) !== 0); + // Generate key. - var x = this; - var y = p.clone(); + // Set parallelization parameter to 1. + var p = 1; - if (x.sign) - x = x.mod(p); - else - x = x.clone(); + if (logN < 1 || logN > 31) + throw new Error('scrypt: logN not be between 1 and 31'); - // A * x + B * y = x - var A = new BN(1); - var B = new BN(0); + var MAX_INT = (1<<31)>>>0, + N = (1<>>0, + XY, V, B, tmp; - // C * x + D * y = y - var C = new BN(0); - var D = new BN(1); + if (r*p >= 1<<30 || r > MAX_INT/128/p || r > MAX_INT/256 || N > MAX_INT/128/r) + throw new Error('scrypt: parameters are too large'); - var g = 0; + // Decode strings. + if (typeof password === 'string') + password = stringToUTF8Bytes(password); + if (typeof salt === 'string') + salt = stringToUTF8Bytes(salt); - while (x.isEven() && y.isEven()) { - x.ishrn(1); - y.ishrn(1); - ++g; + if (typeof Int32Array !== 'undefined') { + //XXX We can use Uint32Array, but Int32Array is faster in Safari. + XY = new Int32Array(64*r); + V = new Int32Array(32*N*r); + tmp = new Int32Array(16); + } else { + XY = []; + V = []; + tmp = new Array(16); } + B = PBKDF2_HMAC_SHA256_OneIter(password, salt, p*128*r); - var yp = y.clone(); - var xp = x.clone(); + var xi = 0, yi = 32 * r; - while (x.cmpn(0) !== 0) { - while (x.isEven()) { - x.ishrn(1); - if (A.isEven() && B.isEven()) { - A.ishrn(1); - B.ishrn(1); - } else { - A.iadd(yp).ishrn(1); - B.isub(xp).ishrn(1); - } + function smixStart() { + for (var i = 0; i < 32*r; i++) { + var j = i*4; + XY[xi+i] = ((B[j+3] & 0xff)<<24) | ((B[j+2] & 0xff)<<16) | + ((B[j+1] & 0xff)<<8) | ((B[j+0] & 0xff)<<0); } + } - while (y.isEven()) { - y.ishrn(1); - if (C.isEven() && D.isEven()) { - C.ishrn(1); - D.ishrn(1); - } else { - C.iadd(yp).ishrn(1); - D.isub(xp).ishrn(1); - } - } + function smixStep1(start, end) { + for (var i = start; i < end; i += 2) { + blockCopy(V, i*(32*r), XY, xi, 32*r); + blockMix(tmp, XY, xi, yi, r); - if (x.cmp(y) >= 0) { - x.isub(y); - A.isub(C); - B.isub(D); - } else { - y.isub(x); - C.isub(A); - D.isub(B); + blockCopy(V, (i+1)*(32*r), XY, yi, 32*r); + blockMix(tmp, XY, yi, xi, r); } } - return { - a: C, - b: D, - gcd: y.ishln(g) - }; -}; - -// This is reduced incarnation of the binary EEA -// above, designated to invert members of the -// _prime_ fields F(p) at a maximal speed -BN.prototype._invmp = function _invmp(p) { - assert(!p.sign); - assert(p.cmpn(0) !== 0); + function smixStep2(start, end) { + for (var i = start; i < end; i += 2) { + var j = integerify(XY, xi, r) & (N-1); + blockXOR(XY, xi, V, j*(32*r), 32*r); + blockMix(tmp, XY, xi, yi, r); - var a = this; - var b = p.clone(); + j = integerify(XY, yi, r) & (N-1); + blockXOR(XY, yi, V, j*(32*r), 32*r); + blockMix(tmp, XY, yi, xi, r); + } + } - if (a.sign) - a = a.mod(p); - else - a = a.clone(); + function smixFinish() { + for (var i = 0; i < 32*r; i++) { + var j = XY[xi+i]; + B[i*4+0] = (j>>>0) & 0xff; + B[i*4+1] = (j>>>8) & 0xff; + B[i*4+2] = (j>>>16) & 0xff; + B[i*4+3] = (j>>>24) & 0xff; + } + } - var x1 = new BN(1); - var x2 = new BN(0); + var nextTick = (typeof setImmediate !== 'undefined') ? setImmediate : setTimeout; - var delta = b.clone(); + function interruptedFor(start, end, step, fn, donefn) { + (function performStep() { + nextTick(function() { + fn(start, start + step < end ? start + step : end); + start += step; + if (start < end) + performStep(); + else + donefn(); + }); + })(); + } - while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { - while (a.isEven()) { - a.ishrn(1); - if (x1.isEven()) - x1.ishrn(1); - else - x1.iadd(delta).ishrn(1); - } - while (b.isEven()) { - b.ishrn(1); - if (x2.isEven()) - x2.ishrn(1); + function getResult(enc) { + var result = PBKDF2_HMAC_SHA256_OneIter(password, B, dkLen); + if (enc === 'base64') + return bytesToBase64(result); + else if (enc === 'hex') + return bytesToHex(result); else - x2.iadd(delta).ishrn(1); - } - if (a.cmp(b) >= 0) { - a.isub(b); - x1.isub(x2); - } else { - b.isub(a); - x2.isub(x1); - } + return result; } - if (a.cmpn(1) === 0) - return x1; - else - return x2; -}; - -BN.prototype.gcd = function gcd(num) { - if (this.cmpn(0) === 0) - return num.clone(); - if (num.cmpn(0) === 0) - return this.clone(); - - var a = this.clone(); - var b = num.clone(); - a.sign = false; - b.sign = false; - // Remove common factor of two - for (var shift = 0; a.isEven() && b.isEven(); shift++) { - a.ishrn(1); - b.ishrn(1); + if (typeof interruptStep === 'function') { + // Called as: scrypt(..., callback, [encoding]) + // shifting: scrypt(..., interruptStep, callback, [encoding]) + encoding = callback; + callback = interruptStep; + interruptStep = 1000; } - do { - while (a.isEven()) - a.ishrn(1); - while (b.isEven()) - b.ishrn(1); + if (interruptStep <= 0) { + // + // Blocking async variant, calls callback. + // + smixStart(); + smixStep1(0, N); + smixStep2(0, N); + smixFinish(); + callback(getResult(encoding)); - var r = a.cmp(b); - if (r < 0) { - // Swap `a` and `b` to make `a` always bigger than `b` - var t = a; - a = b; - b = t; - } else if (r === 0 || b.cmpn(1) === 0) { - break; - } + } else { + // + // Async variant with interruptions, calls callback. + // + smixStart(); + interruptedFor(0, N, interruptStep*2, smixStep1, function() { + interruptedFor(0, N, interruptStep*2, smixStep2, function () { + smixFinish(); + callback(getResult(encoding)); + }); + }); + } +} - a.isub(b); - } while (true); +if (typeof module !== 'undefined') module.exports = scrypt; - return b.ishln(shift); -}; +},{}],260:[function(require,module,exports){ +'use strict' -// Invert number in the field F(num) -BN.prototype.invm = function invm(num) { - return this.egcd(num).a.mod(num); -}; +module.exports = require('./lib')(require('./lib/elliptic')) -BN.prototype.isEven = function isEven() { - return (this.words[0] & 1) === 0; -}; +},{"./lib":263,"./lib/elliptic":262}],261:[function(require,module,exports){ +(function (Buffer){ +'use strict' -BN.prototype.isOdd = function isOdd() { - return (this.words[0] & 1) === 1; -}; +var toString = Object.prototype.toString -// And first word and num -BN.prototype.andln = function andln(num) { - return this.words[0] & num; -}; +// TypeError +exports.isArray = function (value, message) { + if (!Array.isArray(value)) { + throw TypeError(message) + } +} -// Increment at the bit position in-line -BN.prototype.bincn = function bincn(bit) { - assert(typeof bit === 'number'); - var r = bit % 26; - var s = (bit - r) / 26; - var q = 1 << r; +exports.isBoolean = function (value, message) { + if (toString.call(value) !== '[object Boolean]') { + throw TypeError(message) + } +} - // Fast case: bit is much higher than all existing words - if (this.length <= s) { - for (var i = this.length; i < s + 1; i++) - this.words[i] = 0; - this.words[s] |= q; - this.length = s + 1; - return this; +exports.isBuffer = function (value, message) { + if (!Buffer.isBuffer(value)) { + throw TypeError(message) } +} - // Add bit and propagate, if needed - var carry = q; - for (var i = s; carry !== 0 && i < this.length; i++) { - var w = this.words[i]; - w += carry; - carry = w >>> 26; - w &= 0x3ffffff; - this.words[i] = w; +exports.isFunction = function (value, message) { + if (toString.call(value) !== '[object Function]') { + throw TypeError(message) } - if (carry !== 0) { - this.words[i] = carry; - this.length++; +} + +exports.isNumber = function (value, message) { + if (toString.call(value) !== '[object Number]') { + throw TypeError(message) } - return this; -}; +} -BN.prototype.cmpn = function cmpn(num) { - var sign = num < 0; - if (sign) - num = -num; +exports.isObject = function (value, message) { + if (toString.call(value) !== '[object Object]') { + throw TypeError(message) + } +} - if (this.sign && !sign) - return -1; - else if (!this.sign && sign) - return 1; +// RangeError +exports.isBufferLength = function (buffer, length, message) { + if (buffer.length !== length) { + throw RangeError(message) + } +} - num &= 0x3ffffff; - this.strip(); +exports.isBufferLength2 = function (buffer, length1, length2, message) { + if (buffer.length !== length1 && buffer.length !== length2) { + throw RangeError(message) + } +} - var res; - if (this.length > 1) { - res = 1; - } else { - var w = this.words[0]; - res = w === num ? 0 : w < num ? -1 : 1; +exports.isLengthGTZero = function (value, message) { + if (value.length === 0) { + throw RangeError(message) } - if (this.sign) - res = -res; - return res; -}; +} -// Compare two numbers and return: -// 1 - if `this` > `num` -// 0 - if `this` == `num` -// -1 - if `this` < `num` -BN.prototype.cmp = function cmp(num) { - if (this.sign && !num.sign) - return -1; - else if (!this.sign && num.sign) - return 1; +exports.isNumberInInterval = function (number, x, y, message) { + if (number <= x || number >= y) { + throw RangeError(message) + } +} - var res = this.ucmp(num); - if (this.sign) - return -res; - else - return res; -}; +}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) +},{"../../is-buffer/index.js":227}],262:[function(require,module,exports){ +(function (Buffer){ +'use strict' -// Unsigned comparison -BN.prototype.ucmp = function ucmp(num) { - // At this point both numbers have the same sign - if (this.length > num.length) - return 1; - else if (this.length < num.length) - return -1; +var BN = require('bn.js') +var EC = require('elliptic').ec - var res = 0; - for (var i = this.length - 1; i >= 0; i--) { - var a = this.words[i]; - var b = num.words[i]; +var messages = require('../messages.json') - if (a === b) - continue; - if (a < b) - res = -1; - else if (a > b) - res = 1; - break; - } - return res; -}; +var ec = new EC('secp256k1') +var ecparams = ec.curve -// -// A reduce context, could be using montgomery or something better, depending -// on the `m` itself. -// -BN.red = function red(num) { - return new Red(num); -}; +/** + * @param {Buffer} publicKey + * @return {?KeyPair} + */ +function pairFromPublicKey (publicKey) { + var x + var y -BN.prototype.toRed = function toRed(ctx) { - assert(!this.red, 'Already a number in reduction context'); - assert(!this.sign, 'red works only with positives'); - return ctx.convertTo(this)._forceRed(ctx); -}; + var first = publicKey[0] + if (publicKey.length === 33 && (first === 0x02 || first === 0x03)) { + x = new BN(publicKey.slice(1, 33)) -BN.prototype.fromRed = function fromRed() { - assert(this.red, 'fromRed works only with numbers in reduction context'); - return this.red.convertFrom(this); -}; + // overflow + if (x.cmp(ecparams.p) >= 0) { + return null + } -BN.prototype._forceRed = function _forceRed(ctx) { - this.red = ctx; - return this; -}; + x = x.toRed(ecparams.red) + y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt() + if ((first === 0x03) !== y.isOdd()) { + y = y.redNeg() + } + } else if (publicKey.length === 65 && (first === 0x04 || first === 0x06 || first === 0x07)) { + x = new BN(publicKey.slice(1, 33)) + y = new BN(publicKey.slice(33, 65)) -BN.prototype.forceRed = function forceRed(ctx) { - assert(!this.red, 'Already a number in reduction context'); - return this._forceRed(ctx); -}; + // overflow + if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) { + return null + } -BN.prototype.redAdd = function redAdd(num) { - assert(this.red, 'redAdd works only with red numbers'); - return this.red.add(this, num); -}; + x = x.toRed(ecparams.red) + y = y.toRed(ecparams.red) -BN.prototype.redIAdd = function redIAdd(num) { - assert(this.red, 'redIAdd works only with red numbers'); - return this.red.iadd(this, num); -}; + // is odd flag + if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) { + return null + } -BN.prototype.redSub = function redSub(num) { - assert(this.red, 'redSub works only with red numbers'); - return this.red.sub(this, num); -}; + // x*x*x + b = y*y + var x3 = x.redSqr().redIMul(x) + if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) { + return null + } + } else { + return null + } -BN.prototype.redISub = function redISub(num) { - assert(this.red, 'redISub works only with red numbers'); - return this.red.isub(this, num); -}; + return ec.keyPair({pub: {x: x, y: y}}) +} -BN.prototype.redShl = function redShl(num) { - assert(this.red, 'redShl works only with red numbers'); - return this.red.shl(this, num); -}; +/** + * @param {Buffer} privateKey + * @return {boolean} + */ +exports.privateKeyVerify = function (privateKey) { + var bn = new BN(privateKey) + return !(bn.cmp(ecparams.n) >= 0 || bn.isZero()) +} -BN.prototype.redMul = function redMul(num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.mul(this, num); -}; +/** + * @param {Buffer} privateKey + * @param {boolean} compressed + * @return {Buffer} + */ +exports.privateKeyExport = function (privateKey, compressed) { + var d = new BN(privateKey) + if (d.cmp(ecparams.n) >= 0 || d.isZero()) { + throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL) + } -BN.prototype.redIMul = function redIMul(num) { - assert(this.red, 'redMul works only with red numbers'); - this.red._verify2(this, num); - return this.red.imul(this, num); -}; + return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true)) +} -BN.prototype.redSqr = function redSqr() { - assert(this.red, 'redSqr works only with red numbers'); - this.red._verify1(this); - return this.red.sqr(this); -}; +/** + * @param {Buffer} privateKey + * @param {Buffer} tweak + * @return {Buffer} + */ +exports.privateKeyTweakAdd = function (privateKey, tweak) { + var bn = new BN(tweak) + if (bn.cmp(ecparams.n) >= 0) { + throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL) + } -BN.prototype.redISqr = function redISqr() { - assert(this.red, 'redISqr works only with red numbers'); - this.red._verify1(this); - return this.red.isqr(this); -}; + bn.iadd(new BN(privateKey)) + if (bn.cmp(ecparams.n) >= 0) { + bn.isub(ecparams.n) + } -// Square root over p -BN.prototype.redSqrt = function redSqrt() { - assert(this.red, 'redSqrt works only with red numbers'); - this.red._verify1(this); - return this.red.sqrt(this); -}; + if (bn.isZero()) { + throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL) + } -BN.prototype.redInvm = function redInvm() { - assert(this.red, 'redInvm works only with red numbers'); - this.red._verify1(this); - return this.red.invm(this); -}; + return bn.toArrayLike(Buffer, null, 32) +} -// Return negative clone of `this` % `red modulo` -BN.prototype.redNeg = function redNeg() { - assert(this.red, 'redNeg works only with red numbers'); - this.red._verify1(this); - return this.red.neg(this); -}; +/** + * @param {Buffer} privateKey + * @param {Buffer} tweak + * @return {Buffer} + */ +exports.privateKeyTweakMul = function (privateKey, tweak) { + var bn = new BN(tweak) + if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) { + throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL) + } -BN.prototype.redPow = function redPow(num) { - assert(this.red && !num.red, 'redPow(normalNum)'); - this.red._verify1(this); - return this.red.pow(this, num); -}; + bn.imul(new BN(privateKey)) + if (bn.cmp(ecparams.n)) { + bn = bn.umod(ecparams.n) + } -// Prime numbers with efficient reduction -var primes = { - k256: null, - p224: null, - p192: null, - p25519: null -}; + return bn.toArrayLike(Buffer, null, 32) +} -// Pseudo-Mersenne prime -function MPrime(name, p) { - // P = 2 ^ N - K - this.name = name; - this.p = new BN(p, 16); - this.n = this.p.bitLength(); - this.k = new BN(1).ishln(this.n).isub(this.p); +/** + * @param {Buffer} privateKey + * @param {boolean} compressed + * @return {Buffer} + */ +exports.publicKeyCreate = function (privateKey, compressed) { + var d = new BN(privateKey) + if (d.cmp(ecparams.n) >= 0 || d.isZero()) { + throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL) + } - this.tmp = this._tmp(); + return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true)) } -MPrime.prototype._tmp = function _tmp() { - var tmp = new BN(null); - tmp.words = new Array(Math.ceil(this.n / 13)); - return tmp; -}; +/** + * @param {Buffer} publicKey + * @param {boolean} compressed + * @return {Buffer} + */ +exports.publicKeyConvert = function (publicKey, compressed) { + var pair = pairFromPublicKey(publicKey) + if (pair === null) { + throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) + } -MPrime.prototype.ireduce = function ireduce(num) { - // Assumes that `num` is less than `P^2` - // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) - var r = num; - var rlen; + return new Buffer(pair.getPublic(compressed, true)) +} - do { - this.split(r, this.tmp); - r = this.imulK(r); - r = r.iadd(this.tmp); - rlen = r.bitLength(); - } while (rlen > this.n); +/** + * @param {Buffer} publicKey + * @return {boolean} + */ +exports.publicKeyVerify = function (publicKey) { + return pairFromPublicKey(publicKey) !== null +} - var cmp = rlen < this.n ? -1 : r.ucmp(this.p); - if (cmp === 0) { - r.words[0] = 0; - r.length = 1; - } else if (cmp > 0) { - r.isub(this.p); - } else { - r.strip(); +/** + * @param {Buffer} publicKey + * @param {Buffer} tweak + * @param {boolean} compressed + * @return {Buffer} + */ +exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) { + var pair = pairFromPublicKey(publicKey) + if (pair === null) { + throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) } - return r; -}; + tweak = new BN(tweak) + if (tweak.cmp(ecparams.n) >= 0) { + throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL) + } -MPrime.prototype.split = function split(input, out) { - input.ishrn(this.n, 0, out); -}; + return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed)) +} -MPrime.prototype.imulK = function imulK(num) { - return num.imul(this.k); -}; +/** + * @param {Buffer} publicKey + * @param {Buffer} tweak + * @param {boolean} compressed + * @return {Buffer} + */ +exports.publicKeyTweakMul = function (publicKey, tweak, compressed) { + var pair = pairFromPublicKey(publicKey) + if (pair === null) { + throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) + } -function K256() { - MPrime.call( - this, - 'k256', - 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); + tweak = new BN(tweak) + if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) { + throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL) + } + + return new Buffer(pair.pub.mul(tweak).encode(true, compressed)) } -inherits(K256, MPrime); -K256.prototype.split = function split(input, output) { - // 256 = 9 * 26 + 22 - var mask = 0x3fffff; +/** + * @param {Buffer[]} publicKeys + * @param {boolean} compressed + * @return {Buffer} + */ +exports.publicKeyCombine = function (publicKeys, compressed) { + var pairs = new Array(publicKeys.length) + for (var i = 0; i < publicKeys.length; ++i) { + pairs[i] = pairFromPublicKey(publicKeys[i]) + if (pairs[i] === null) { + throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) + } + } - var outLen = Math.min(input.length, 9); - for (var i = 0; i < outLen; i++) - output.words[i] = input.words[i]; - output.length = outLen; + var point = pairs[0].pub + for (var j = 1; j < pairs.length; ++j) { + point = point.add(pairs[j].pub) + } - if (input.length <= 9) { - input.words[0] = 0; - input.length = 1; - return; + if (point.isInfinity()) { + throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL) } - // Shift by 9 limbs - var prev = input.words[9]; - output.words[output.length++] = prev & mask; + return new Buffer(point.encode(true, compressed)) +} - for (var i = 10; i < input.length; i++) { - var next = input.words[i]; - input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); - prev = next; +/** + * @param {Buffer} signature + * @return {Buffer} + */ +exports.signatureNormalize = function (signature) { + var r = new BN(signature.slice(0, 32)) + var s = new BN(signature.slice(32, 64)) + if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) { + throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) } - input.words[i - 10] = prev >>> 22; - input.length -= 9; -}; -K256.prototype.imulK = function imulK(num) { - // K = 0x1000003d1 = [ 0x40, 0x3d1 ] - num.words[num.length] = 0; - num.words[num.length + 1] = 0; - num.length += 2; + var result = new Buffer(signature) + if (s.cmp(ec.nh) === 1) { + new Buffer(ecparams.n.sub(s).toArray(null, 32)).copy(result, 32) + } - // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 - var hi; - var lo = 0; - for (var i = 0; i < num.length; i++) { - var w = num.words[i]; - hi = w * 0x40; - lo += w * 0x3d1; - hi += (lo / 0x4000000) | 0; - lo &= 0x3ffffff; + return result +} - num.words[i] = lo; +/** + * @param {Buffer} signature + * @return {{r: Buffer, s: Buffer}} + */ +exports.signatureExport = function (signature) { + var r = signature.slice(0, 32) + var s = signature.slice(32, 64) + if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) { + throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) + } - lo = hi; + return {r: r, s: s} +} + +/** + * @param {{r: Buffer, s: Buffer}} sigObj + * @return {Buffer} + */ +exports.signatureImport = function (sigObj) { + var r = new BN(sigObj.r) + if (r.cmp(ecparams.n) >= 0) { + r = new BN(0) } - // Fast length reduction - if (num.words[num.length - 1] === 0) { - num.length--; - if (num.words[num.length - 1] === 0) - num.length--; + var s = new BN(sigObj.s) + if (s.cmp(ecparams.n) >= 0) { + s = new BN(0) } - return num; -}; -function P224() { - MPrime.call( - this, - 'p224', - 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); + return new Buffer(r.toArray(null, 32).concat(s.toArray(null, 32))) } -inherits(P224, MPrime); -function P192() { - MPrime.call( - this, - 'p192', - 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); -} -inherits(P192, MPrime); +/** + * @param {Buffer} message + * @param {Buffer} privateKey + * @param {?sign~noncefn} noncefn + * @param {?Buffer} data + * @return {{signature: Buffer, recovery: number}} + */ +exports.sign = function (message, privateKey, noncefn, data) { + if (typeof noncefn === 'function') { + var getNonce = noncefn + noncefn = function (counter) { + var nonce = getNonce(message, privateKey, null, data, counter) + if (!Buffer.isBuffer(nonce) || nonce.length !== 32) { + throw new Error(messages.ECDSA_SIGN_FAIL) + } -function P25519() { - // 2 ^ 255 - 19 - MPrime.call( - this, - '25519', - '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); + return new BN(nonce) + } + } + + var d = new BN(privateKey) + if (d.cmp(ecparams.n) >= 0 || d.isZero()) { + throw new Error(messages.ECDSA_SIGN_FAIL) + } + + var result = ec.sign(message, privateKey, {canonical: true, k: noncefn, pers: data}) + return { + signature: new Buffer(result.r.toArray(null, 32).concat(result.s.toArray(null, 32))), + recovery: result.recoveryParam + } } -inherits(P25519, MPrime); -P25519.prototype.imulK = function imulK(num) { - // K = 0x13 - var carry = 0; - for (var i = 0; i < num.length; i++) { - var hi = num.words[i] * 0x13 + carry; - var lo = hi & 0x3ffffff; - hi >>>= 26; +/** + * @param {Buffer} message + * @param {Buffer} signature + * @param {Buffer} publicKey + * @return {boolean} + */ +exports.verify = function (message, signature, publicKey) { + var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)} - num.words[i] = lo; - carry = hi; + var sigr = new BN(sigObj.r) + var sigs = new BN(sigObj.s) + if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) { + throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) } - if (carry !== 0) - num.words[num.length++] = carry; - return num; -}; -// Exported mostly for testing purposes, use plain name instead -BN._prime = function prime(name) { - // Cached version of prime - if (primes[name]) - return primes[name]; + if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) { + return false + } - var prime; - if (name === 'k256') - prime = new K256(); - else if (name === 'p224') - prime = new P224(); - else if (name === 'p192') - prime = new P192(); - else if (name === 'p25519') - prime = new P25519(); - else - throw new Error('Unknown prime ' + name); - primes[name] = prime; + var pair = pairFromPublicKey(publicKey) + if (pair === null) { + throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) + } - return prime; -}; + return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y}) +} -// -// Base reduction engine -// -function Red(m) { - if (typeof m === 'string') { - var prime = BN._prime(m); - this.m = prime.p; - this.prime = prime; - } else { - this.m = m; - this.prime = null; +/** + * @param {Buffer} message + * @param {Buffer} signature + * @param {number} recovery + * @param {boolean} compressed + * @return {Buffer} + */ +exports.recover = function (message, signature, recovery, compressed) { + var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)} + + var sigr = new BN(sigObj.r) + var sigs = new BN(sigObj.s) + if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) { + throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) + } + + try { + if (sigr.isZero() || sigs.isZero()) { + throw new Error() + } + + var point = ec.recoverPubKey(message, sigObj, recovery) + return new Buffer(point.encode(true, compressed)) + } catch (err) { + throw new Error(messages.ECDSA_RECOVER_FAIL) } } -Red.prototype._verify1 = function _verify1(a) { - assert(!a.sign, 'red works only with positives'); - assert(a.red, 'red works only with red numbers'); -}; +/** + * @param {Buffer} publicKey + * @param {Buffer} privateKey + * @return {Buffer} + */ +exports.ecdh = function (publicKey, privateKey) { +} -Red.prototype._verify2 = function _verify2(a, b) { - assert(!a.sign && !b.sign, 'red works only with positives'); - assert(a.red && a.red === b.red, - 'red works only with red numbers'); -}; +}).call(this,require("buffer").Buffer) +},{"../messages.json":264,"bn.js":265,"buffer":147,"elliptic":266}],263:[function(require,module,exports){ +(function (Buffer){ +'use strict' -Red.prototype.imod = function imod(a) { - if (this.prime) - return this.prime.ireduce(a)._forceRed(this); - return a.mod(this.m)._forceRed(this); -}; +var assert = require('./assert') +var messages = require('./messages.json') -Red.prototype.neg = function neg(a) { - var r = a.clone(); - r.sign = !r.sign; - return r.iadd(this.m)._forceRed(this); -}; +var EC_PRIVKEY_EXPORT_DER_COMPRESSED_BEGIN = new Buffer( + '3081d30201010420', 'hex') +var EC_PRIVKEY_EXPORT_DER_COMPRESSED_MIDDLE = new Buffer( + 'a08185308182020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a124032200', 'hex') +var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_BEGIN = new Buffer( + '308201130201010420', 'hex') +var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_MIDDLE = new Buffer( + 'a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a144034200', 'hex') -Red.prototype.add = function add(a, b) { - this._verify2(a, b); +/** + * @param {*} value + * @param {boolean} defaultValue + * @return {boolean} + */ +function initCompressedValue (value, defaultValue) { + if (value === undefined) { + return defaultValue + } - var res = a.add(b); - if (res.cmp(this.m) >= 0) - res.isub(this.m); - return res._forceRed(this); -}; + assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID) + return value +} -Red.prototype.iadd = function iadd(a, b) { - this._verify2(a, b); +/** + * @param {Object} o + * @param {Buffer} o.sig + * @param {number} o.idx + * @return {?Buffer} + */ +function parseScalar (o) { + if (o.sig[o.idx++] !== 0x02) { + return null + } - var res = a.iadd(b); - if (res.cmp(this.m) >= 0) - res.isub(this.m); - return res; -}; + var rlen = o.sig[o.idx++] + if (rlen === 0 || rlen > 33 || + (rlen > 1 && + (o.sig[o.idx] === 0x00 && o.sig[o.idx + 1] < 0x80) || + (o.sig[o.idx] === 0xff && o.sig[o.idx + 1] >= 0x80))) { + return null + } -Red.prototype.sub = function sub(a, b) { - this._verify2(a, b); + if (o.sig[o.idx] === 0 && rlen === 33) { + o.idx += 1 + rlen -= 1 + } - var res = a.sub(b); - if (res.cmpn(0) < 0) - res.iadd(this.m); - return res._forceRed(this); -}; + o.idx += rlen -Red.prototype.isub = function isub(a, b) { - this._verify2(a, b); + var result = new Buffer(32) + result.fill(0) + + if (rlen <= 32) { + o.sig.slice(o.idx - rlen, o.idx).copy(result, 32 - rlen) + } - var res = a.isub(b); - if (res.cmpn(0) < 0) - res.iadd(this.m); - return res; -}; + return result +} -Red.prototype.shl = function shl(a, num) { - this._verify1(a); - return this.imod(a.shln(num)); -}; +/** + * @param {Object} secp256k1 + * @return {Object} + */ +module.exports = function (secp256k1) { + return { + /** + * @param {Buffer} privateKey + * @return {boolean} + */ + privateKeyVerify: function (privateKey) { + assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) + return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey) + }, -Red.prototype.imul = function imul(a, b) { - this._verify2(a, b); - return this.imod(a.imul(b)); -}; + /** + * @param {Buffer} privateKey + * @param {boolean} [compressed=true] + * @return {Buffer} + */ + privateKeyExport: function (privateKey, compressed) { + assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) + assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) -Red.prototype.mul = function mul(a, b) { - this._verify2(a, b); - return this.imod(a.mul(b)); -}; + compressed = initCompressedValue(compressed, true) -Red.prototype.isqr = function isqr(a) { - return this.imul(a, a); -}; + var publicKey = secp256k1.privateKeyExport(privateKey, compressed) -Red.prototype.sqr = function sqr(a) { - return this.mul(a, a); -}; + var result = new Buffer(compressed ? 214 : 279) + var targetStart = 0 + if (compressed) { + EC_PRIVKEY_EXPORT_DER_COMPRESSED_BEGIN.copy(result, targetStart) + targetStart += EC_PRIVKEY_EXPORT_DER_COMPRESSED_BEGIN.length -Red.prototype.sqrt = function sqrt(a) { - if (a.cmpn(0) === 0) - return a.clone(); + privateKey.copy(result, targetStart) + targetStart += privateKey.length - var mod3 = this.m.andln(3); - assert(mod3 % 2 === 1); + EC_PRIVKEY_EXPORT_DER_COMPRESSED_MIDDLE.copy(result, targetStart) + targetStart += EC_PRIVKEY_EXPORT_DER_COMPRESSED_MIDDLE.length - // Fast case - if (mod3 === 3) { - var pow = this.m.add(new BN(1)).ishrn(2); - var r = this.pow(a, pow); - return r; - } + publicKey.copy(result, targetStart) + } else { + EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_BEGIN.copy(result, targetStart) + targetStart += EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_BEGIN.length - // Tonelli-Shanks algorithm (Totally unoptimized and slow) - // - // Find Q and S, that Q * 2 ^ S = (P - 1) - var q = this.m.subn(1); - var s = 0; - while (q.cmpn(0) !== 0 && q.andln(1) === 0) { - s++; - q.ishrn(1); - } - assert(q.cmpn(0) !== 0); + privateKey.copy(result, targetStart) + targetStart += privateKey.length - var one = new BN(1).toRed(this); - var nOne = one.redNeg(); + EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_MIDDLE.copy(result, targetStart) + targetStart += EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_MIDDLE.length - // Find quadratic non-residue - // NOTE: Max is such because of generalized Riemann hypothesis. - var lpow = this.m.subn(1).ishrn(1); - var z = this.m.bitLength(); - z = new BN(2 * z * z).toRed(this); - while (this.pow(z, lpow).cmp(nOne) !== 0) - z.redIAdd(nOne); + publicKey.copy(result, targetStart) + } - var c = this.pow(z, q); - var r = this.pow(a, q.addn(1).ishrn(1)); - var t = this.pow(a, q); - var m = s; - while (t.cmp(one) !== 0) { - var tmp = t; - for (var i = 0; tmp.cmp(one) !== 0; i++) - tmp = tmp.redSqr(); - assert(i < m); - var b = this.pow(c, new BN(1).ishln(m - i - 1)); + return result + }, - r = r.redMul(b); - c = b.redSqr(); - t = t.redMul(c); - m = i; - } + /** + * @param {Buffer} privateKey + * @return {Buffer} + */ + privateKeyImport: function (privateKey) { + assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - return r; -}; + do { + var length = privateKey.length -Red.prototype.invm = function invm(a) { - var inv = a._invmp(this.m); - if (inv.sign) { - inv.sign = false; - return this.imod(inv).redNeg(); - } else { - return this.imod(inv); - } -}; + // sequence header + var index = 0 + if (length < index + 1 || privateKey[index] !== 0x30) { + break + } + index += 1 -Red.prototype.pow = function pow(a, num) { - var w = []; + // sequence length constructor + if (length < index + 1 || !(privateKey[index] & 0x80)) { + break + } - if (num.cmpn(0) === 0) - return new BN(1); + var lenb = privateKey[index] & 0x7f + index += 1 + if (lenb < 1 || lenb > 2) { + break + } + if (length < index + lenb) { + break + } - var q = num.clone(); + // sequence length + var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0) + index += lenb + if (length < index + len) { + break + } - while (q.cmpn(0) !== 0) { - w.push(q.andln(1)); - q.ishrn(1); - } + // sequence element 0: version number (=1) + if (length < index + 3 || + privateKey[index] !== 0x02 || + privateKey[index + 1] !== 0x01 || + privateKey[index + 2] !== 0x01) { + break + } + index += 3 - // Skip leading zeroes - var res = a; - for (var i = 0; i < w.length; i++, res = this.sqr(res)) - if (w[i] !== 0) - break; + // sequence element 1: octet string, up to 32 bytes + if (length < index + 2 || + privateKey[index] !== 0x04 || + privateKey[index + 1] > 0x20 || + length < index + 2 + privateKey[index + 1]) { + break + } - if (++i < w.length) { - for (var q = this.sqr(res); i < w.length; i++, q = this.sqr(q)) { - if (w[i] === 0) - continue; - res = this.mul(res, q); - } - } + privateKey = privateKey.slice(index + 2, index + 2 + privateKey[index + 1]) + if (privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) { + return privateKey + } + } while (false) - return res; -}; + throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL) + }, -Red.prototype.convertTo = function convertTo(num) { - var r = num.mod(this.m); - if (r === num) - return r.clone(); - else - return r; -}; + /** + * @param {Buffer} privateKey + * @param {Buffer} tweak + * @return {Buffer} + */ + privateKeyTweakAdd: function (privateKey, tweak) { + assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) + assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) -Red.prototype.convertFrom = function convertFrom(num) { - var res = num.clone(); - res.red = null; - return res; -}; + assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) + assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) -// -// Montgomery method engine -// + return secp256k1.privateKeyTweakAdd(privateKey, tweak) + }, -BN.mont = function mont(num) { - return new Mont(num); -}; + /** + * @param {Buffer} privateKey + * @param {Buffer} tweak + * @return {Buffer} + */ + privateKeyTweakMul: function (privateKey, tweak) { + assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) + assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) -function Mont(m) { - Red.call(this, m); + assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) + assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) - this.shift = this.m.bitLength(); - if (this.shift % 26 !== 0) - this.shift += 26 - (this.shift % 26); - this.r = new BN(1).ishln(this.shift); - this.r2 = this.imod(this.r.sqr()); - this.rinv = this.r._invmp(this.m); + return secp256k1.privateKeyTweakMul(privateKey, tweak) + }, - this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); - this.minv.sign = true; - this.minv = this.minv.mod(this.r); -} -inherits(Mont, Red); + /** + * @param {Buffer} privateKey + * @param {boolean} [compressed=true] + * @return {Buffer} + */ + publicKeyCreate: function (privateKey, compressed) { + assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) + assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) -Mont.prototype.convertTo = function convertTo(num) { - return this.imod(num.shln(this.shift)); -}; + compressed = initCompressedValue(compressed, true) -Mont.prototype.convertFrom = function convertFrom(num) { - var r = this.imod(num.mul(this.rinv)); - r.red = null; - return r; -}; + return secp256k1.publicKeyCreate(privateKey, compressed) + }, -Mont.prototype.imul = function imul(a, b) { - if (a.cmpn(0) === 0 || b.cmpn(0) === 0) { - a.words[0] = 0; - a.length = 1; - return a; - } + /** + * @param {Buffer} publicKey + * @param {boolean} [compressed=true] + * @return {Buffer} + */ + publicKeyConvert: function (publicKey, compressed) { + assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) + assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - var t = a.imul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).ishrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) - res = u.isub(this.m); - else if (u.cmpn(0) < 0) - res = u.iadd(this.m); + compressed = initCompressedValue(compressed, true) - return res._forceRed(this); -}; + return secp256k1.publicKeyConvert(publicKey, compressed) + }, -Mont.prototype.mul = function mul(a, b) { - if (a.cmpn(0) === 0 || b.cmpn(0) === 0) - return new BN(0)._forceRed(this); + /** + * @param {Buffer} publicKey + * @return {boolean} + */ + publicKeyVerify: function (publicKey) { + assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) + return secp256k1.publicKeyVerify(publicKey) + }, - var t = a.mul(b); - var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); - var u = t.isub(c).ishrn(this.shift); - var res = u; - if (u.cmp(this.m) >= 0) - res = u.isub(this.m); - else if (u.cmpn(0) < 0) - res = u.iadd(this.m); + /** + * @param {Buffer} publicKey + * @param {Buffer} tweak + * @param {boolean} [compressed=true] + * @return {Buffer} + */ + publicKeyTweakAdd: function (publicKey, tweak, compressed) { + assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) + assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - return res._forceRed(this); -}; + assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) + assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) -Mont.prototype.invm = function invm(a) { - // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R - var res = this.imod(a._invmp(this.m).mul(this.r2)); - return res._forceRed(this); -}; + compressed = initCompressedValue(compressed, true) -})(typeof module === 'undefined' || module, this); + return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed) + }, -},{}],370:[function(require,module,exports){ -arguments[4][69][0].apply(exports,arguments) -},{"dup":69}],371:[function(require,module,exports){ -arguments[4][70][0].apply(exports,arguments) -},{"./hash/common":372,"./hash/hmac":373,"./hash/ripemd":374,"./hash/sha":375,"./hash/utils":376,"dup":70}],372:[function(require,module,exports){ -arguments[4][71][0].apply(exports,arguments) -},{"../hash":371,"dup":71}],373:[function(require,module,exports){ -arguments[4][72][0].apply(exports,arguments) -},{"../hash":371,"dup":72}],374:[function(require,module,exports){ -arguments[4][73][0].apply(exports,arguments) -},{"../hash":371,"dup":73}],375:[function(require,module,exports){ -arguments[4][74][0].apply(exports,arguments) -},{"../hash":371,"dup":74}],376:[function(require,module,exports){ -arguments[4][75][0].apply(exports,arguments) -},{"dup":75,"inherits":377}],377:[function(require,module,exports){ -arguments[4][77][0].apply(exports,arguments) -},{"dup":77}],378:[function(require,module,exports){ -module.exports={ - "name": "elliptic", - "version": "3.1.0", - "description": "EC cryptography", - "main": "lib/elliptic.js", - "scripts": { - "test": "make lint && mocha --reporter=spec test/*-test.js" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/elliptic.git" - }, - "keywords": [ - "EC", - "Elliptic", - "curve", - "Cryptography" - ], - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/indutny/elliptic/issues" - }, - "homepage": "https://github.com/indutny/elliptic", - "devDependencies": { - "browserify": "^3.44.2", - "jscs": "^1.11.3", - "jshint": "^2.6.0", - "mocha": "^2.1.0", - "uglify-js": "^2.4.13" - }, - "dependencies": { - "bn.js": "^2.0.3", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - }, - "gitHead": "d86cd2a8178f7e7cecbd6dd92eea084e2ab44c13", - "_id": "elliptic@3.1.0", - "_shasum": "c21682ef762769b56a74201609105da11d5f60cc", - "_from": "elliptic@>=3.1.0 <4.0.0", - "_npmVersion": "2.11.0", - "_nodeVersion": "2.2.1", - "_npmUser": { - "name": "indutny", - "email": "fedor@indutny.com" - }, - "maintainers": [ - { - "name": "indutny", - "email": "fedor@indutny.com" - } - ], - "dist": { - "shasum": "c21682ef762769b56a74201609105da11d5f60cc", - "tarball": "http://registry.npmjs.org/elliptic/-/elliptic-3.1.0.tgz" - }, - "directories": {}, - "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-3.1.0.tgz", - "readme": "ERROR: No README data found!" -} + /** + * @param {Buffer} publicKey + * @param {Buffer} tweak + * @param {boolean} [compressed=true] + * @return {Buffer} + */ + publicKeyTweakMul: function (publicKey, tweak, compressed) { + assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) + assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) -},{}],379:[function(require,module,exports){ -(function (global,Buffer){ -const ethUtil = require('ethereumjs-util') -const fees = require('ethereum-common') -const BN = ethUtil.BN + assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) + assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) -// secp256k1n/2 -const N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16) + compressed = initCompressedValue(compressed, true) -// give browser access to Buffers -global.Buffer = Buffer -global.ethUtil = ethUtil + return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed) + }, -/** - * Creates a new transaction object - * @constructor - * @class {Buffer|Array} data a transaction can be initiailized with either a buffer containing the RLP serialized transaction or an array of buffers relating to each of the tx Properties, listed in order below in the exmple. Or lastly an Object containing the Properties of the transaction like in the Usage example - * - * For Object and Arrays each of the elements can either be a Buffer, a hex-prefixed (0x) String , Number, or an object with a toBuffer method such as Bignum - * @example - * var rawTx = { - * nonce: '00', - * gasPrice: '09184e72a000', - * gasLimit: '2710', - * to: '0000000000000000000000000000000000000000', - * value: '00', - * data: '7f7465737432000000000000000000000000000000000000000000000000000000600057', - * v: '1c', - * r: '5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab', - * s '5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13' - * }; - * var tx = new Transaction(rawTx); - * @prop {Buffer} raw The raw rlp decoded transaction - * @prop {Buffer} nonce - * @prop {Buffer} to the to address - * @prop {Buffer} value the amount of ether sent - * @prop {Buffer} data this will contain the data of the message or the init of a contract - * @prop {Buffer} v EC signature parameter - * @prop {Buffer} r EC signature parameter - * @prop {Buffer} s EC recovery ID - * @prop {Buffer} from If you are not planing on signing the tx you can set the from property. If you do sign it will be over written - */ -var Transaction = module.exports = function (data) { - // Define Properties - const fields = [{ - name: 'nonce', - length: 32, - allowLess: true, - default: new Buffer([]) - }, { - name: 'gasPrice', - length: 32, - allowLess: true, - default: new Buffer([]) - }, { - name: 'gasLimit', - alias: 'gas', - length: 32, - allowLess: true, - default: new Buffer([]) - }, { - name: 'to', - allowZero: true, - length: 20, - default: new Buffer([]) - }, { - name: 'value', - length: 32, - allowLess: true, - default: new Buffer([]) - }, { - name: 'data', - alias: 'input', - allowZero: true, - default: new Buffer([]) - }, { - name: 'v', - length: 1, - default: new Buffer([0x1c]) - }, { - name: 'r', - length: 32, - allowLess: true, - default: new Buffer([]) - }, { - name: 's', - length: 32, - allowLess: true, - default: new Buffer([]) - }] + /** + * @param {Buffer[]} publicKeys + * @param {boolean} [compressed=true] + * @return {Buffer} + */ + publicKeyCombine: function (publicKeys, compressed) { + assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID) + assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID) + for (var i = 0; i < publicKeys.length; ++i) { + assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID) + assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) + } - /** - * Returns the rlp encoding of the transaction - * @method serialize - * @return {Buffer} - */ - // attached serialize - ethUtil.defineProperties(this, fields, data) - this._homestead = true -} + compressed = initCompressedValue(compressed, true) -/** - * If the tx's `to` is to the creation address - * @method toCreationAddress - * @return {Boolean} - */ -Transaction.prototype.toCreationAddress = function () { - return this.to.toString('hex') === '' -} + return secp256k1.publicKeyCombine(publicKeys, compressed) + }, -/** - * Computes a sha3-256 hash of the serialized tx - * @method hash - * @param {Boolean} [signature=true] whether or not to inculde the signature - * @return {Buffer} - */ -Transaction.prototype.hash = function (signature) { - var toHash + /** + * @param {Buffer} signature + * @return {Buffer} + */ + signatureNormalize: function (signature) { + assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) + assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - if (typeof signature === 'undefined') { - signature = true - } + return secp256k1.signatureNormalize(signature) + }, - toHash = signature ? this.raw : this.raw.slice(0, 6) + /** + * @param {Buffer} signature + * @return {Buffer} + */ + signatureExport: function (signature) { + assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) + assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - // create hash - return ethUtil.rlphash(toHash) -} + var sigObj = secp256k1.signatureExport(signature) + var r = Buffer.concat([new Buffer([0]), sigObj.r]) + var s = Buffer.concat([new Buffer([0]), sigObj.s]) -/** - * returns the sender's address - * @method getSenderAddress - * @return {Buffer} - */ -Transaction.prototype.getSenderAddress = function () { - if (this._from) { - return this._from - } - var pubkey = this.getSenderPublicKey() - this._from = ethUtil.publicToAddress(pubkey) - return this._from -} + var lenR = 33 + var posR = 0 + while (lenR > 1 && r[posR] === 0x00 && r[posR + 1] < 0x80) { + --lenR + ++posR + } -/** - * returns the public key of the sender - * @method getSenderPublicKey - * @return {Buffer} - */ -Transaction.prototype.getSenderPublicKey = function () { - if (!this._senderPubKey || !this._senderPubKey.length) { - this.verifySignature() - } + var lenS = 33 + var posS = 0 + while (lenS > 1 && s[posS] === 0x00 && s[posS + 1] < 0x80) { + --lenS + ++posS + } - return this._senderPubKey -} + var result = new Buffer(lenR + lenS + 6) + result[0] = 0x30 + result[1] = 4 + lenR + lenS + result[2] = 0x02 + result[3] = lenR + r.copy(result, 4, posR) + result[lenR + 4] = 0x02 + result[lenR + 5] = lenS + s.copy(result, lenR + 6, posS) -/** - * Determines if the signature is valid - * @method verifySignature - * @return {Boolean} - */ -Transaction.prototype.verifySignature = function () { - var msgHash = this.hash(false) + return result + }, - // All transaction signatures whose s-value is greater than secp256k1n/2 are considered invalid. - if (this._homestead && new BN(this.s).cmp(N_DIV_2) === 1) { - return false - } + /** + * @param {Buffer} signature + * @return {Buffer} + */ + signatureImport: function (signature) { + assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) + assert.isLengthGTZero(signature, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - try { - this._senderPubKey = ethUtil.ecrecover(msgHash, this.v, this.r, this.s) - } catch (e) { - return false - } + do { + var o = {sig: signature, idx: 0} + if ((o.sig.length < o.idx || o.sig[o.idx] !== 0x30) || + (o.sig.length < o.idx + 1 || o.sig[o.idx + 1] > 0x80) || + o.idx + o.sig[o.idx + 1] + 2 !== o.sig.length) { + break + } + o.idx += 2 - return !!this._senderPubKey -} + var r = parseScalar(o) + if (r === null) { + break + } -/** - * sign a transaction with a given a private key - * @method sign - * @param {Buffer} privateKey - */ -Transaction.prototype.sign = function (privateKey) { - var msgHash = this.hash(false) - var sig = ethUtil.ecsign(msgHash, privateKey) - Object.assign(this, sig) -} + var s = parseScalar(o) + if (s === null) { + break + } -/** - * The amount of gas paid for the data in this tx - * @method getDataFee - * @return {BN} - */ -Transaction.prototype.getDataFee = function () { - const data = this.raw[5] - var cost = new BN(0) - for (var i = 0; i < data.length; i++) { - data[i] === 0 ? cost.iaddn(fees.txDataZeroGas.v) : cost.iaddn(fees.txDataNonZeroGas.v) - } - return cost -} + return secp256k1.signatureImport({r: r, s: s}) + } while (false) -/** - * the minimum amount of gas the tx must have (DataFee + TxFee + Creation Fee) - * @method getBaseFee - * @return {BN} - */ -Transaction.prototype.getBaseFee = function () { - var fee = this.getDataFee().iaddn(fees.txGas.v) - if (this._homestead && this.toCreationAddress()) { - fee.iaddn(fees.txCreation.v) - } - return fee -} + throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL) + }, -/** - * the up front amount that an account must have for this transaction to be valid - * @method getUpfrontCost - * @return {BN} - */ -Transaction.prototype.getUpfrontCost = function () { - return new BN(this.gasLimit) - .imul(new BN(this.gasPrice)) - .iadd(new BN(this.value)) -} + /** + * @callback sign~noncefn + * @param {Buffer} message + * @param {Buffer} privateKey + * @param {?Buffer} algo + * @param {?Buffer} data + * @param {number} attempt + * @return {Buffer} + */ -/** - * validates the signature and checks to see if it has enough gas - * @method validate - * @param {Boolean} [stringError=false] whether to return a string with a dscription of why the validation failed or return a Bloolean - * @return {Boolean|String} - */ -Transaction.prototype.validate = function (stringError) { - var errors = [] - if (!this.verifySignature()) { - errors.push('Invalid Signature') - } + /** + * @typedef {Object} sign~options + * @param {Buffer} [data] + * @param {sign~noncefn} [noncefn=nonce_function_rfc6979] + */ - if (this.getBaseFee().cmp(new BN(this.gasLimit)) > 0) { - errors.push(['gas limit is to low. Need at least ' + this.getBaseFee()]) - } + /** + * @param {Buffer} message + * @param {Buffer} privateKey + * @param {sign~options} [options] + * @return {{signature: Buffer, recovery: number}} + */ + sign: function (message, privateKey, options) { + assert.isBuffer(message, messages.MSG32_TYPE_INVALID) + assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID) - if (stringError === undefined || stringError === false) { - return errors.length === 0 - } else { - return errors.join(' ') - } -} + assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) + assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) -},{"buffer":99,"ethereum-common":382,"ethereumjs-util":384}],380:[function(require,module,exports){ -module.exports=[ - { - "ip": "52.16.188.185", - "port": "30303", - "id": "a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c" - }, - { - "ip": "54.94.239.50", - "port": "30303", - "id": "de471bccee3d042261d52e9bff31458daecc406142b401d4cd848f677479f73104b9fdeb090af9583d3391b7f10cb2ba9e26865dd5fca4fcdc0fb1e3b723c786" - }, - { - "ip": "52.74.57.123", - "port": "30303", - "id": "1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082" - }, - { - "ip": "5.1.83.226", - "port": "30303", - "id": "979b7fa28feeb35a4741660a16076f1943202cb72b6af70d327f053e248bab9ba81760f39d0701ef1d8f89cc1fbd2cacba0710a12cd5314d5e0c9021aa3637f9" - } -] + var data = null + var noncefn = null + if (options !== undefined) { + assert.isObject(options, messages.OPTIONS_TYPE_INVALID) -},{}],381:[function(require,module,exports){ -module.exports={ - "3282791d6fd713f1e94f4bfd565eaa78b3a0599d": "1337000000000000000000", - "17961d633bcf20a7b029a7d94b7df4da2ec5427f": "229427000000000000000", - "493a67fe23decc63b10dda75f3287695a81bd5ab": "880000000000000000000", - "01fb8ec12425a04f813e46c54c05748ca6b29aa9": "259800000000000000000", - "d2a030ac8952325f9e1db378a71485a24e1b07b2": "2000000000000000000000", - "77a34907f305a54c85db09c363fde3c47e6ae21f": "985000000000000000000", - "391a77405c09a72b5e8436237aaaf95d68da1709": "49082000000000000000", - "00aada25ea2286709abb422d41923fd380cd04c7": "650100000000000000000", - "acc46a2a555c74ded4a2bd094e821b97843b40c0": "1940000000000000000000", - "de07fb5b7a464e3ba7fbe09e9acb271af5338c58": "50000000000000000000", - "4c696be99f3a690440c3436a59a7d7e937d6ba0d": "3460000000000000000000", - "fa33553285a973719a0d5f956ff861b2d89ed304": "20000000000000000000", - "67cfda6e70bf7657d39059b59790e5145afdbe61": "646000000000000000000", - "a321091d3018064279db399d2b2a88a6f440ae24": "3200000000000000000000", - "fb3fa1ac08aba9cc3bf0fe9d483820688f65b410": "30000000000000000000000", - "6715c14035fb57bb3d667f7b707498c41074b855": "700000000000000000000", - "d4344f7d5cad65d17e5c2d0e7323943d6f62fe92": "267400000000000000000", - "a3294626ec2984c43b43da4d5d8e4669b11d4b59": "1008000000000000000000", - "656018584130db83ab0591a8128d9381666a8d0e": "63960000000000000000", - "0fa010ce0c731d3b628e36b91f571300e49dbeab": "999800000000000000000", - "3098b65db93ecacaf7353c48808390a223d57684": "449965000000000000000", - "ae635bf73831119d2d29c0d04ff8f8d8d0a57a46": "1337000000000000000000", - "0f7515ff0e808f695e0c20485ff96ed2f7b79310": "1000169000000000000000", - "8b30c04098d7a7e6420c357ea7bfa49bac9a8a18": "8000200000000000000000", - "64dba2d6615b8bd7571836dc75bc79d314f5ecee": "10000000000000000000000", - "e7912d4cf4562c573ddc5b71e37310e378ef86c9": "394000000000000000000", - "a4da34450d22ec0ffcede0004b02f7872ee0b73a": "93342000000000000000", - "34437d1465640b136cb5841c3f934f9ba0b7097d": "173000000000000000000", - "c652871d192422c6bc235fa063b44a7e1d43e385": "155000000000000000000", - "a8a708e84f82db86a35502193b4c6ee9a76ebe8f": "1015200000000000000000", - "5c3f567faff7bad1b5120022e8cbcaa82b4917b3": "2000000000000000000000", - "dbc1d0ee2bab531140de137722cd36bdb4e47194": "200000000000000000000", - "f59dab1bf8df11327e61f9b7a14b563a96ec3554": "6000000000000000000000", - "456f8d746682b224679349064d1b368c7c05b176": "3700000000000000000000", - "5f13154631466dcb1353c890932a7c97e0878e90": "6000000000000000000000", - "f4b1626e24f30bcad9273c527fcc714b5d007b8f": "200000000000000000000", - "a8db0b9b201453333c757f6ad9bcb555c02da93b": "2199970000000000000000", - "a0fc7e53c5ebd27a2abdac45261f84ab3b51aefb": "3008250000000000000000", - "1b636b7a496f044d7359596e353a104616436f6b": "360354000000000000000", - "74bce9ec38362d6c94ccac26d5c0e13a8b3b1d40": "999954000000000000000", - "9834682180b982d166badb9d9d1d9bbf016d87ee": "2000000000000000000000", - "1e6e0153fc161bc05e656bbb144c7187bf4fe84d": "2000000000000000000000", - "989c0ccff654da03aeb11af701054561d6297e1d": "4000000000000000000000", - "78a1e254409fb1b55a7cb4dd8eba3b30c8bad9ef": "100000000000000000000", - "9ef1896b007c32a15114fb89d73dbd47f9122b69": "4000000000000000000000", - "33320dd90f2baa110dd334872a998f148426453c": "999972000000000000000", - "e72e1d335cc29a96b9b1c02f003a16d971e90b9d": "1580000000000000000000", - "0921605f99164e3bcc28f31caece78973182561d": "793744000000000000000", - "fc00a420a36107dfd5f495128a5fe5abb2db0f34": "5960000000000000000000", - "dfcbdf09454e1a5e4a40d3eef7c5cf1cd3de9486": "4000000000000000000000", - "646e043d0597a664948fbb0dc15475a3a4f3a6ed": "20000000000000000000", - "79aeb34566b974c35a5881dec020927da7df5d25": "2000000000000000000000", - "dbadc61ed5f0460a7f18e51b2fb2614d9264a0e0": "40000000000000000000", - "97b91efe7350c2d57e7e406bab18f3617bcde14a": "9999980000000000000000", - "8398e07ebcb4f75ff2116de77c1c2a99f303a4cf": "500000000000000000000", - "f02796295101674288c1d93467053d042219b794": "740000000000000000000", - "f4ed848ec961739c2c7e352f435ba70a7cd5db38": "1970000000000000000000", - "82485728d0e281563758c75ab27ed9e882a0002d": "147000000000000000000", - "427ec668ac9404e895cc861511d1620a4912be98": "40000000000000000000000", - "1bbc199e586790be87afedc849c04726745c5d7b": "4000000000000000000000", - "10d945334ecde47beb9ca3816c173dfbbd0b5333": "1400000000000000000000", - "1dcebcb7656df5dcaa3368a055d22f9ed6cdd940": "499800000000000000000", - "2ac1f8d7bf721f3cfe74d20fea9b87a28aaa982c": "161000000000000000000", - "0a47ad9059a249fc936b2662353da6905f75c2b9": "2000000000000000000000", - "768498934e37e905f1d0e77b44b574bcf3ec4ae8": "20000000000000000000000", - "f46b6b9c7cb552829c1d3dfd8ffb11aabae782f6": "21000000000000000000", - "7aea25d42b2612286e99c53697c6bc4100e2dbbf": "2000000000000000000000", - "af3615c789d0b1152ad4db25fe5dcf222804cf62": "1000000000000000000000", - "92e6581e1da1f9b846e09347333dc818e2d2ac66": "3640000000000000000000", - "240305727313d01e73542c775ff59d11cd35f819": "5931229000000000000000", - "b95cfda8465ba9c2661b249fc3ab661bdfa35ff0": "318949000000000000000", - "1b0d076817e8d68ee2df4e1da1c1142d198c4435": "1550000000000000000000", - "93c2e64e5de5589ed25006e843196ee9b1cf0b3e": "1670000000000000000000", - "0e2e504a2d1122b5a9feee5cb1451bf4c2ace87b": "3940000000000000000000", - "22b96ab2cad55db100b53001f9e4db378104c807": "10000000000000000000000", - "a927d48bb6cb814bc609cbcaa9151f5d459a27e1": "271600000000000000000", - "5cbd8daf27ddf704cdd0d909a789ba36ed4f37b2": "13400000000000000000", - "9adbd3bc7b0afc05d1d2eda49ff863939c48db46": "199955000000000000000", - "ac7e03702723cb16ee27e22dd0b815dc2d5cae9f": "16000000000000000000000", - "1e210e7047886daa52aaf70f4b991dac68e3025e": "200000000000000000000", - "c98048687f2bfcc9bd90ed18736c57edd352b65d": "1000000000000000000000", - "81c18c2a238ddc4cba230a072dd7dc101e620273": "1337000000000000000000", - "cb3d766c983f192bcecac70f4ee03dd9ff714d51": "100000000000000000000", - "44a63d18424587b9b307bfc3c364ae10cd04c713": "20000000000000000000", - "4ab2d34f04834fbf7479649cab923d2c4725c553": "3520000000000000000000", - "b834acf3015322c58382eeb2b79638906e88b6de": "24000000000000000000000", - "7d551397f79a2988b064afd0efebee802c7721bc": "39400000000000000000000", - "b537d36a70eeb8d3e5c80de815225c1158cb92c4": "1500000000000000000000", - "805ce51297a0793b812067f017b3e7b2df9bb1f9": "100000000000000000000", - "085ba65febe23eefc2c802666ab1262382cfc494": "400000000000000000000", - "b1c0d08b36e184f9952a4037e3e53a667d070a4e": "1000000000000000000000", - "83fe5a1b328bae440711beaf6aad6026eda6d220": "20000000000000000000000", - "7fd679e5fb0da2a5d116194dcb508318edc580f3": "6560000000000000000000", - "41ad369f758fef38a19aa3149379832c818ef2a0": "1000060000000000000000", - "6d846dc12657e91af25008519c3e857f51707dd6": "4590000000000000000000", - "c02d6eadeacf1b78b3ca85035c637bb1ce01f490": "4000000000000000000000", - "826eb7cd7319b82dd07a1f3b409071d96e39677f": "1000000000000000000000", - "4ac9905a4cb6ab1cfd62546ee5917300b87c4fde": "1015200000000000000000", - "cf6e52e6b77480b1867efec6446d9fc3cc3577e8": "222010000000000000000", - "2476b2bb751ce748e1a4c4ff7b230be0c15d2245": "4000000000000000000000", - "1a505e62a74e87e577473e4f3afa16bedd3cfa52": "500000000000000000000", - "21d02705f3f64905d80ed9147913ea8c7307d695": "1363740000000000000000", - "7b1daf14891b8a1e1bd429d8b36b9a4aa1d9afbf": "500000000000000000000", - "5338ef70eac9dd9af5a0503b5efad1039e67e725": "2674000000000000000000", - "50ca86b5eb1d01874df8e5f34945d49c6c1ab848": "1000000000000000000000", - "f3cc8bcb559465f81bfe583bd7ab0a2306453b9e": "20000000000000000000000", - "5c323457e187761a8276e359b7b7af3f3b6e3df6": "10000000000000000000000", - "4d82d7700c123bb919419bbaf046799c6b0e2c66": "20000000000000000000000", - "8a66abbc2d30ce21a833b0db8e561d5105e0a72c": "699958000000000000000", - "2ae53866fc2d14d572ab73b4a065a1188267f527": "8000000000000000000000", - "9af5c9894c33e42c2c518e3ac670ea9505d1b53e": "18200000000000000000", - "cba25c7a503cc8e0d04971ca05c762f9b762b48b": "500000000000000000000", - "fda3042819af3e662900e1b92b4358eda6e92590": "118200000000000000000000", - "9bd7c38a4210304a4d653edeff1b3ce45fce7843": "282000000000000000000", - "edc22fb92c638e1e21ff5cf039daa6e734dafb29": "298000000000000000000", - "a1f193a0592f1feb9fdfc90aa813784eb80471c9": "1400000000000000000000", - "e97fde0b67716325cf0ecce8a191a3761b2c791d": "1004700000000000000000", - "110237cf9117e767922fc4a1b78d7964da82df20": "3940000000000000000000", - "e32f95766d57b5cd4b173289d6876f9e64558194": "100000000000000000000", - "f2d59c8923759073d6f415aaf8eb065ff2f3b685": "7880000000000000000000", - "c53d79f7cb9b70952fd30fce58d54b9f0b59f647": "5089200000000000000000", - "9eb281c32719c40fdb3e216db0f37fbc73a026b7": "20000000000000000000", - "2d6511fd7a3800b26854c7ec39c0dcb5f4c4e8e8": "399910000000000000000", - "61ba87c77e9b596de7ba0e326fddfeec2163ef66": "200000000000000000000", - "de1121829c9a08284087a43fbd2fc1142a3233b4": "1000000000000000000000", - "22a25812ab56dcc423175ed1d8adacce33cd1810": "1850000000000000000000", - "518cef27b10582b6d14f69483ddaa0dd3c87bb5c": "600000000000000000000", - "59161749fedcf1c721f2202d13ade2abcf460b3d": "2000000000000000000000", - "3e36c17253c11cf38974ed0db1b759160da63783": "7000000000000000000000", - "cbfa76db04ce38fb205d37b8d377cf1380da0317": "1430000000000000000000", - "a7e83772bc200f9006aa2a260dbaa8483dc52b30": "207730000000000000000", - "e87eac6d602b4109c9671bf57b950c2cfdb99d55": "49932000000000000000", - "9b06ad841dffbe4ccf46f1039fc386f3c321446e": "2000000000000000000000", - "e0f903c1e48ac421ab48528f3d4a2648080fe043": "1015200000000000000000", - "5d872b122e994ef27c71d7deb457bf65429eca6c": "7999973000000000000000", - "f34083ecea385017aa40bdd35ef7effb4ce7762d": "400000000000000000000", - "7f3709391f3fbeba3592d175c740e87a09541d02": "480000000000000000000", - "888e94917083d152202b53163939869d271175b4": "4000000000000000000000", - "bed4c8f006a27c1e5f7ce205de75f516bfb9f764": "16000000000000000000000", - "b3a6bd41f9d9c3201e050b87198fbda399342210": "3622615000000000000000", - "550aadae1221b07afea39fba2ed62e05e5b7b5f9": "20000000000000000000", - "bcedc4267ccb89b31bb764d7211171008d94d44d": "200000000000000000000", - "6229dcc203b1edccfdf06e87910c452a1f4d7a72": "32500000000000000000000", - "94be3ae54f62d663b0d4cc9e1ea8fe9556ea9ebf": "23280000000000000000", - "0e0c9d005ea016c295cd795cc9213e87febc33eb": "198000000000000000000", - "55d057bcc04bd0f4af9642513aa5090bb3ff93fe": "1106680000000000000000", - "ed9e030ca75cb1d29ea01d0d4cdfdccd3844b6e4": "30895000000000000000", - "86c4ce06d9ac185bb148d96f7b7abe73f441006d": "10000000000000000000000", - "2c04115c3e52961b0dc0b0bf31fba4546f5966fd": "200000000000000000000", - "b959dce02e91d9db02b1bd8b7d17a9c41a97af09": "8000000000000000000000", - "e01547ba42fcafaf93938becf7699f74290af74f": "2000000000000000000000", - "c593d6e37d14b566643ac4135f243caa0787c182": "12000000000000000000000", - "2c0ee134d8b36145b47beee7af8d2738dbda08e8": "201000000000000000000", - "0ef54ac7264d2254abbb5f8b41adde875157db7c": "40000000000000000000", - "0349634dc2a9e80c3f7721ee2b5046aeaaedfbb5": "4000000000000000000000", - "873e49135c3391991060290aa7f6ccb8f85a78db": "20000000000000000000", - "05236d4c90d065f9e3938358aaffd777b86aec49": "500000000000000000000", - "d2abd84a181093e5e229136f42d835e8235de109": "100007000000000000000", - "b56a780028039c81caf37b6775c620e786954764": "2000000000000000000000", - "86df73bd377f2c09de63c45d67f283eaefa0f4ab": "1000000000000000000000", - "7670b02f2c3cf8fd4f4730f3381a71ea431c33c7": "267400000000000000000", - "24aa1151bb765fa3a89ca50eb6e1b1c706417fd4": "3100000000000000000000", - "43227d65334e691cf231b4a4e1d339b95d598afb": "10000000000000000000000", - "695550656cbf90b75d92ad9122d90d23ca68ca4d": "1000000000000000000000", - "5281733473e00d87f11e9955e589b59f4ac28e7a": "660360000000000000000000", - "99a96bf2242ea1b39ece6fcc0d18aed00c0179f3": "300000000000000000000", - "b1cf94f8091505055f010ab4bac696e0ca0f67a1": "1580000000000000000000", - "54391b4d176d476cea164e5fb535c69700cb2535": "100076000000000000000", - "152f2bd229ddf3cb0fdaf455c183209c0e1e39a2": "2000000000000000000000", - "affc99d5ebb4a84fe7788d97dce274b038240438": "5000000000000000000000", - "23df8f48ee009256ea797e1fa369beebcf6bc663": "2302671000000000000000", - "3a72d635aadeee4382349db98a1813a4cfeb3df1": "200000000000000000000000", - "ce26f9a5305f8381094354dbfc92664e84f902b5": "230200000000000000000", - "d283b8edb10a25528a4404de1c65e7410dbcaa67": "12000000000000000000000", - "a7859fc07f756ea7dcebbccd42f05817582d973f": "10000000000000000000000", - "b28181a458a440f1c6bb1de8400281a3148f4c35": "376000000000000000000", - "27b1694eafa165ebd7cc7bc99e74814a951419dc": "800000000000000000000", - "66cc8ab23c00d1b82acd7d73f38c99e0d05a4fa6": "100000000000000000000", - "926082cb7eed4b1993ad245a477267e1c33cd568": "374300000000000000000", - "4a47fc3e177f567a1e3893e000e36bba23520ab8": "2000000000000000000000", - "594a76f06935388dde5e234696a0668bc20d2ddc": "2800000000000000000000", - "e91fa0badaddb9a97e88d3f4db7c55d6bb7430fe": "376000000000000000000", - "574de1b3f38d915846ae3718564a5ada20c2f3ed": "4000000000000000000000", - "5816c2687777b6d7d2a2432d59a41fa059e3a406": "133700000000000000000000", - "b50955aa6e341571986608bdc891c2139f540cdf": "1970000000000000000000", - "6d44974a31d187eda16ddd47b9c7ec5002d61fbe": "940000000000000000000", - "80abec5aa36e5c9d098f1b942881bd5acac6963d": "2000000000000000000000", - "294f494b3f2e143c2ffc9738cbfd9501850b874e": "2240000000000000000000", - "bca3ffd4683fba0ad3bbc90734b611da9cfb457e": "200000000000000000000", - "5992624c54cdec60a5ae938033af8be0c50cbb0a": "3621678000000000000000", - "6560941328ff587cbc56c38c78238a7bb5f442f6": "744900000000000000000", - "74b7e0228baed65957aebb4d916d333aae164f0e": "2000000000000000000000", - "8516fcaf77c893970fcd1a958ba9a00e49044019": "196279000000000000000", - "b992a967308c02b98af91ee760fd3b6b4824ab0e": "2000000000000000000000", - "30bb4357cd6910c86d2238bf727cbe8156680e62": "100014000000000000000", - "b8cc0f060aad92d4eb8b36b3b95ce9e90eb383d7": "150000000000000000000000", - "28d4ebf41e3d3c451e943bdd7e1f175fae932a3d": "6000000000000000000000", - "8c83d424a3cf24d51f01923dd54a18d6b6fede7b": "4000000000000000000000", - "7efc90766a00bc52372cac97fabd8a3c831f8ecd": "158000000000000000000", - "7c2b9603884a4f2e464eceb97d17938d828bc02c": "3000000000000000000000", - "9d250ae4f110d71cafc7b0adb52e8d9acb6679b8": "9840000000000000000000", - "61b3df2e9e9fd968131f1e88f0a0eb5bd765464d": "4000000000000000000000", - "9ae13bd882f2576575921a94974cbea861ba0d35": "3160000000000000000000", - "3d09688d93ad07f3abe68c722723cd680990435e": "29999948000000000000000", - "5e58e255fc19870a04305ff2a04631f2ff294bb1": "17600000000000000000", - "bcaed0acb6a76f113f7c613555a2c3b0f5bf34a5": "193600000000000000000", - "159adce27aa10b47236429a34a5ac42cad5b6416": "31867951000000000000000", - "e834c64318205ca7dd4a21abcb08266cb21ff02c": "999999000000000000000", - "7b6a84718dd86e63338429ac811d7c8a860f21f1": "1790000000000000000000", - "2118c116ab0cdf6fd11d54a4309307b477c3fc0f": "10000000000000000000000", - "34a901a69f036bcf9f7843c0ba01b426e8c3dc2b": "4000000000000000000000", - "c7d44fe32c7f8cd5f1a97427b6cd3afc9e45023e": "1580000000000000000000", - "c6045b3c350b4ce9ca0c6b754fb41a69b97e9900": "925000000000000000000", - "cf5a6f9df75579c644f794711215b30d77a0ce40": "2000000000000000000000", - "e2904b1aefa056398b6234cb35811288d736db67": "40000000000000000000", - "7101bd799e411cde14bdfac25b067ac890eab8e8": "1450054000000000000000", - "cc45fb3a555bad807b388a0357c855205f7c75e8": "865000000000000000000", - "ff0c3c7798e8733dd2668152891bab80a8be955c": "80220000000000000000", - "3536453322c1466cb905af5c335ca8db74bff1e6": "447000000000000000000", - "08cac8952641d8fc526ec1ab4f2df826a5e7710f": "300000000000000000000", - "0d8aab8f74ea862cdf766805009d3f3e42d8d00b": "5820000000000000000000", - "8908760cd39b9c1e8184e6a752ee888e3f0b7045": "6000000000000000000000", - "8156360bbd370961ceca6b6691d75006ad204cf2": "40000000000000000000000", - "a304588f0d850cd8d38f76e9e83c1bf63e333ede": "39800000000000000000", - "14c63ba2dcb1dd4df33ddab11c4f0007fa96a62d": "15500000000000000000000", - "a009bf076f1ba3fa57d2a7217218bed5565a7a7a": "1000000000000000000000", - "1c89060f987c518fa079ec2c0a5ebfa30f5d20f7": "38000000000000000000000", - "8895eb726226edc3f78cc6a515077b3296fdb95e": "3940000000000000000000", - "7919e7627f9b7d54ea3b14bb4dd4649f4f39dee0": "1670000000000000000000", - "b3c65b845aba6cd816fbaae983e0e46c82aa8622": "1000000000000000000000", - "eff51d72adfae143edf3a42b1aec55a2ccdd0b90": "300000000000000000000", - "05bb64a916be66f460f5e3b64332110d209e19ae": "4200000000000000000000", - "d5b117ec116eb846418961eb7edb629cd0dd697f": "3000000000000000000000", - "05e97b09492cd68f63b12b892ed1d11d152c0eca": "1015200000000000000000", - "84cc7878da605fdb019fab9b4ccfc157709cdda5": "1336922000000000000000", - "79cac6494f11ef2798748cb53285bd8e22f97cda": "2000000000000000000000", - "bd5a8c94bd8be6470644f70c8f8a33a8a55c6341": "200000000000000000000", - "b119e79aa9b916526581cbf521ef474ae84dcff4": "1470700000000000000000", - "aff1045adf27a1aa329461b24de1bae9948a698b": "33400000000000000000", - "4398628ea6632d393e929cbd928464c568aa4a0c": "1400000000000000000000", - "99997668f7c1a4ff9e31f9977ae3224bcb887a85": "291200000000000000000", - "bc0e8745c3a549445c2be900f52300804ab56289": "33104697000000000000000", - "e5bab4f0afd8a9d1a381b45761aa18f3d3cce105": "1508010000000000000000", - "be60037e90714a4b917e61f193d834906703b13a": "1700000000000000000000", - "8ed4284c0f47449c15b8d9b3245de8beb6ce80bf": "800000000000000000000", - "333ad1596401e05aea2d36ca47318ef4cd2cb3df": "2910000000000000000000", - "22db559f2c3c1475a2e6ffe83a5979599196a7fa": "1000000000000000000000", - "fdf449f108c6fb4f5a2b081eed7e45e6919e4d25": "2000000000000000000000", - "0be1bcb90343fae5303173f461bd914a4839056c": "6000000000000000000000", - "b981ad5e6b7793a23fc6c1e8692eb2965d18d0da": "9999924000000000000000", - "c75d2259306aec7df022768c69899a652185dbc4": "4000000000000000000000", - "6c2e9be6d4ab450fd12531f33f028c614674f197": "3580000000000000000000", - "6dcc7e64fcafcbc2dc6c0e5e662cb347bffcd702": "20000000000000000000000", - "aabdb35c1514984a039213793f3345a168e81ff1": "309760000000000000000", - "d315deea1d8c1271f9d1311263ab47c007afb6f5": "69760000000000000000", - "4faf90b76ecfb9631bf9022176032d8b2c207009": "1000032000000000000000", - "3e7a966b5dc357ffb07e9fe067c45791fd8e3049": "59100000000000000000", - "2e64a8d71111a22f4c5de1e039b336f68d398a7c": "2000000000000000000000", - "181fbba852a7f50178b1c7f03ed9e58d54162929": "666000000000000000000", - "4f7330096f79ed264ee0127f5d30d2f73c52b3d8": "499970000000000000000", - "a8a8dbdd1a85d1beee2569e91ccc4d09ae7f6ea1": "5800000000000000000000", - "1f9c3268458da301a2be5ab08257f77bb5a98aa4": "200000000000000000000", - "fc372ff6927cb396d9cf29803500110da632bc52": "2000000000000000000000", - "4fa554ab955c249217386a4d3263bbf72895434e": "19982000000000000000", - "2a59e47ea5d8f0e7c028a3e8e093a49c1b50b9a3": "2000000000000000000000", - "5e32c72191b8392c55f510d8e3326e3a60501d62": "44000000000000000000000", - "1dfaee077212f1beaf0e6f2f1840537ae154ad86": "1000000000000000000000", - "7eaba035e2af3793fd74674b102540cf190addb9": "1273000000000000000000", - "d62edb96fce2969aaf6c545e967cf1c0bc805205": "85705000000000000000", - "220dc68df019b6b0ccbffb784b5a5ab4b15d4060": "3940000000000000000000", - "45bb829652d8bfb58b8527f0ecb621c29e212ec3": "2000000000000000000000", - "79b120eb8806732321288f675a27a9225f1cd2eb": "2465000000000000000000", - "740af1eefd3365d78ba7b12cb1a673e06a077246": "19700000000000000000000", - "0f042c9c2fb18766f836bb59f735f27dc329fe3c": "10000000000000000000000", - "6dda5f788a6c688ddf921fa3852eb6d6c6c62966": "40000000000000000000", - "96ad579bbfa8db8ebec9d286a72e4661eed8e356": "1070750000000000000000", - "0c2073ba44d3ddbdb639c04e191039a71716237f": "1430000000000000000000", - "1a3520453582c718a21c42375bc50773255253e1": "790000000000000000000", - "efcaae9ff64d2cd95b5249dcffe7faa0a0c0e44d": "401100000000000000000", - "0a3de155d5ecd8e81c1ff9bbf0378301f8d4c623": "4000000000000000000000", - "80f07ac09e7b2c3c0a3d1e9413a544c73a41becb": "20000000000000000000", - "c3631c7698b6c5111989bf452727b3f9395a6dea": "10683500000000000000000", - "4cc22c9bc9ad05d875a397dbe847ed221c920c67": "2000000000000000000000", - "1a987e3f83de75a42f1bde7c997c19217b4a5f24": "2000000000000000000000", - "5b2b64e9c058e382a8b299224eecaa16e09c8d92": "161000000000000000000", - "86caafacf32aa0317c032ac36babed974791dc03": "40000000000000000000000", - "1cd1f0a314cbb200de0a0cb1ef97e920709d97c2": "2000000000000000000000", - "7d980f4b566bb045517e4c14c87750de9346744b": "1337000000000000000000", - "8b5f29cc2faa262cdef30ef554f50eb488146eac": "5818250000000000000000", - "5153a0c3c8912881bf1c3501bf64b45649e48222": "4000000000000000000000", - "d21a7341eb84fd151054e5e387bb25d36e499c09": "14000000000000000000000", - "9560e8ac6718a6a1cdcff189d603c9063e413da6": "4000000000000000000000", - "e49ba0cd96816c4607773cf8a5970bb5bc16a1e6": "1670000000000000000000", - "b8ac117d9f0dba80901445823c4c9d4fa3fedc6e": "15759015000000000000000", - "af67fd3e127fd9dc36eb3fcd6a80c7be4f7532b2": "1670000000000000000000", - "b43c27f7a0a122084b98f483922541c8836cee2c": "715000000000000000000", - "4d9279962029a8bd45639737e98b511eff074c21": "1337000000000000000000", - "c667441e7f29799aba616451d53b3f489f9e0f48": "13920000000000000000000", - "275875ff4fbb0cf3a430213127487f7608d04cba": "500080000000000000000", - "9a953b5bcc709379fcb559d7b916afdaa50cadcc": "100000000000000000000", - "7ea791ebab0445a00efdfc4e4a8e9a7e7565136d": "18200000000000000000", - "6ffe5cf82cc9ea5e36cad7c2974ce7249f3749e6": "1940000000000000000000", - "f1b4ecc63525f7432c3d834ffe2b970fbeb87212": "3000064000000000000000", - "6b72a8f061cfe6996ad447d3c72c28c0c08ab3a7": "4271316000000000000000", - "bba3c68004248e489573abb2743677066b24c8a7": "2000000000000000000000", - "b7c0d0cc0b4d342d4062bac624ccc3c70cc6da3f": "4000000000000000000000", - "fe98c664c3e447a95e69bd582171b7176ea2a685": "4000000000000000000000", - "ce71086d4c602554b82dcbfce88d20634d53cc4d": "43250000000000000000000", - "1c601993789207f965bb865cbb4cd657cce76fc0": "98294000000000000000", - "476b5599089a3fb6f29c6c72e49b2e4740ea808d": "2800000000000000000000", - "3439998b247cb4bf8bc80a6d2b3527f1dfe9a6d2": "140000000000000000000", - "c4f7d2e2e22084c44f70feaab6c32105f3da376f": "1970000000000000000000", - "c1eba5684aa1b24cba63150263b7a9131aeec28d": "20000000000000000000", - "94ad4bad824bd0eb9ea49c58cebcc0ff5e08346b": "1940000000000000000000", - "ded877378407b94e781c4ef4af7cfc5bc220b516": "372500000000000000000", - "699c9ee47195511f35f862ca4c22fd35ae8ffbf4": "80000000000000000000", - "e3a89a1927cc4e2d43fbcda1e414d324a7d9e057": "205500000000000000000", - "4d93696fa24859f5d2939aebfa54b4b51ae1dccc": "19100000000000000000", - "0af65f14784e55a6f95667fd73252a1c94072d2a": "192987000000000000000", - "5b70c49cc98b3df3fbe2b1597f5c1b6347a388b7": "970000000000000000000", - "426f78f70db259ac8534145b2934f4ef1098b5d8": "360000000000000000000", - "58b8ae8f63ef35ed0762f0b6233d4ac14e64b64d": "2000000000000000000000", - "8eae29435598ba8f1c93428cdb3e2b4d31078e00": "2000000000000000000000", - "17fd9b551a98cb61c2e07fbf41d3e8c9a530cba5": "26989000000000000000", - "ab3e78294ba886a0cfd5d3487fb3a3078d338d6e": "1970000000000000000000", - "bdf6e68c0cd7584080e847d72cbb23aad46aeb1d": "1970000000000000000000", - "f989346772995ec1906faffeba2a7fe7de9c6bab": "6685000000000000000000", - "dc5f5ad663a6f263327d64cac9cb133d2c960597": "2000000000000000000000", - "68fe1357218d095849cd579842c4aa02ff888d93": "2000000000000000000000", - "e09c68e61998d9c81b14e4ee802ba7adf6d74cdb": "4000000000000000000000", - "890fe11f3c24db8732d6c2e772e2297c7e65f139": "62980000000000000000000", - "a76929890a7b47fb859196016c6fdd8289ceb755": "5000000000000000000000", - "2dc79d6e7f55bce2e2d0c02ad07ceca8bb529354": "1580000000000000000000", - "19687daa39c368139b6e7be60dc1753a9f0cbea3": "8000000000000000000000", - "c69be440134d6280980144a9f64d84748a37f349": "715000000000000000000", - "3d8d0723721e73a6c0d860aa0557abd14c1ee362": "5000000000000000000000", - "2b241f037337eb4acc61849bd272ac133f7cdf4b": "378000000000000000000000", - "24b95ebef79500baa0eda72e77f877415df75c33": "910000000000000000000", - "106ed5c719b5261477890425ae7551dc59bd255c": "11979600000000000000000", - "5b2e2f1618552eab0db98add55637c2951f1fb19": "12000000000000000000000", - "403145cb4ae7489fcc90cd985c6dc782b3cc4e44": "5999800000000000000000", - "e8be24f289443ee473bc76822f55098d89b91cc5": "2000000000000000000000", - "f6bc37b1d2a3788d589b6de212dc1713b2f6e78e": "5000000000000000000000", - "67fc527dce1785f0fb8bc7e518b1c669f7ecdfb5": "240000000000000000000", - "6580b1bc94390f04b397bd73e95d96ef11eaf3a8": "20000000000000000000", - "98bf4af3810b842387db70c14d46099626003d10": "4000000000000000000000", - "17993d312aa1106957868f6a55a5e8f12f77c843": "450065000000000000000", - "0729b4b47c09eb16158464c8aa7fd9690b438839": "1999800000000000000000", - "ae70e69d2c4a0af818807b1a2705f79fd0b5dbc4": "985000000000000000000", - "38b50146e71916a5448de12a4d742135dcf39833": "32200000000000000000000", - "38439aaa24e3636f3a18e020ea1da7e145160d86": "2600000000000000000000", - "54b4429b182f0377be7e626939c5db6440f75d7a": "1970000000000000000000", - "7179726f5c71ae1b6d16a68428174e6b34b23646": "7353500000000000000000", - "c2ee91d3ef58c9d1a589844ea1ae3125d6c5ba69": "970000000000000000000", - "912304118b80473d9e9fe3ee458fbe610ffda2bb": "200000000000000000000", - "3308b03466c27a17dfe1aafceb81e16d2934566f": "17000000000000000000000", - "10346414bec6d3dcc44e50e54d54c2b8c3734e3e": "4000000000000000000000", - "4fee50c5f988206b09a573469fb1d0b42ebb6dce": "2009400000000000000000", - "9ece1400800936c7c6485fcdd3626017d09afbf6": "310000000000000000000", - "ddf3ad76353810be6a89d731b787f6f17188612b": "20000000000000000000000", - "72402300e81d146c2e644e2bbda1da163ca3fb56": "7000000000000000000000", - "bb4b4a4b548070ff41432c9e08a0ca6fa7bc9f76": "850000000000000000000", - "c3dd58903886303b928625257ae1a013d71ae216": "2000000000000000000000", - "ca6c818befd251361e02744068be99d8aa60b84a": "6000000000000000000000", - "b8d2ddc66f308c0158ae3ccb7b869f7d199d7b32": "844800000000000000000", - "8e486a0442d171c8605be348fee57eb5085eff0d": "4000000000000000000000", - "a807104f2703d679f8deafc442befe849e42950b": "2000000000000000000000", - "bb61a04bffd57c10470d45c39103f64650347616": "1000000000000000000000", - "d1c45954a62b911ad701ff2e90131e8ceb89c95c": "1394000000000000000000", - "5e65458be964ae449f71773704979766f8898761": "528600000000000000000", - "f9b37825f03073d31e249378c30c795c33f83af2": "200152000000000000000", - "e309974ce39d60aadf2e69673251bf0e04760a10": "254030000000000000000", - "d541ac187ad7e090522de6da3213e9a7f4439673": "2000000000000000000000", - "f33efc6397aa65fb53a8f07a0f893aae30e8bcee": "2304850000000000000000", - "d2f1998e1cb1580cec4f6c047dcd3dcec54cf73c": "200000000000000000000", - "0ed76c2c3b5d50ff8fb50b3eeacd681590be1c2d": "100000000000000000000", - "637d67d87f586f0a5a479e20ee13ea310a10b647": "48300000000000000000000", - "1a5ee533acbfb3a2d76d5b685277b796c56a052b": "2000000000000000000000", - "323fca5ed77f699f9d9930f5ceeff8e56f59f03c": "1337000000000000000000", - "a5fe2ce97f0e8c3856be0de5f4dcb2ce5d389a16": "22892000000000000000", - "93258255b37c7f58f4b10673a932dd3afd90f4f2": "1000000000000000000000", - "950fe9c6cad50c18f11a9ed9c45740a6180612d0": "8000000000000000000000", - "ee31167f9cc93b3c6465609d79db0cde90e8484c": "2000000000000000000000", - "6ebb5e6957aa821ef659b6018a393a504cae4450": "2000000000000000000000", - "be305a796e33bbf7f9aeae6512959066efda1010": "10880000000000000000000", - "537f9d4d31ef70839d84b0d9cdb72b9afedbdf35": "70000000000000000000000", - "fe9e1197d7974a7648dcc7a03112a88edbc9045d": "4925000000000000000000", - "99f77f998b20e0bcdcd9fc838641526cf25918ef": "1790000000000000000000", - "76ffc157ad6bf8d56d9a1a7fddbc0fea010aabf4": "1000000000000000000000", - "defe9141f4704599159d7b223de42bffd80496b3": "100000000000000000000", - "7b1bf53a9cbe83a7dea434579fe72aac8d2a0cd0": "199800000000000000000", - "23ccc3c6acd85c2e460c4ffdd82bc75dc849ea14": "4000000000000000000000", - "9f86a066edb61fcb5856de93b75c8c791864b97b": "2000000000000000000000", - "871b8a8b51dea1989a5921f13ec1a955a515ad47": "8000000000000000000000", - "4efcd9c79fb4334ca6247b0a33bd9cc33208e272": "1337000000000000000000", - "35ac1d3ed7464fa3db14e7729213ceaa378c095e": "1520000000000000000000", - "c69d663c8d60908391c8d236191533fdf7775613": "485000000000000000000", - "c2ed5ffdd1add855a2692fe062b5d618742360d4": "1200000000000000000000", - "454f0141d721d33cbdc41018bd01119aa4784818": "6000000000000000000000", - "6c8687e3417710bb8a93559021a1469e6a86bc77": "11126675000000000000000", - "ec5b198a00cfb55a97b5d53644cffa8a04d2ab45": "2000000000000000000000", - "cd59f3dde77e09940befb6ee58031965cae7a336": "10000000000000000000000", - "8eebec1a62c08b05a7d1d59180af9ff0d18e3f36": "500000000000000000000", - "92a971a739799f8cb48ea8475d72b2d2474172e6": "3940000000000000000000", - "bed4649df646e2819229032d8868556fe1e053d3": "18200000000000000000", - "c50fe415a641b0856c4e75bf960515441afa358d": "2000000000000000000000", - "91f516146cda20281719978060c6be4149067c88": "2000000000000000000000", - "54a1370116fe22099e015d07cd2669dd291cc9d1": "20000000000000000000", - "80c04efd310f440483c73f744b5b9e64599ce3ec": "1200000000000000000000", - "a8914c95b560ec13f140577338c32bcbb77d3a7a": "180000000000000000000", - "e3c812737ac606baf7522ad817428a36050e7a34": "1940000000000000000000", - "6d1456fff0104ee844a3314737843338d24cd66c": "141840000000000000000", - "0e6ece99111cad1961c748ed3df51edd69d2a3b1": "100000000000000000000000", - "019d709579ff4bc09fdcdde431dc1447d2c260bc": "20000000000000000000", - "ebff84bbef423071e604c361bba677f5593def4e": "10000000000000000000000", - "e10c540088113fa6ec00b4b2c8824f8796e96ec4": "236400000000000000000000", - "e03220c697bcd28f26ef0b74404a8beb06b2ba7b": "8000000000000000000000", - "e69a6cdb3a8a7db8e1f30c8b84cd73bae02bc0f8": "16915503000000000000000", - "e5fb31a5caee6a96de393bdbf89fbe65fe125bb3": "1000000000000000000000", - "030fb3401f72bd3418b7d1da75bf8c519dd707dc": "3000000000000000000000", - "1c751e7f24df9d94a637a5dedeffc58277b5db19": "3220000000000000000000", - "bded7e07d0711e684de65ac8b2ab57c55c1a8645": "591000000000000000000", - "dd7ff441ba6ffe3671f3c0dabbff1823a5043370": "2000000000000000000000", - "b55474ba58f0f2f40e6cbabed4ea176e011fcad6": "1970000000000000000000", - "b92427ad7578b4bfe20a9f63a7c5506d5ca12dc8": "2000000000000000000000", - "91a8baaed012ea2e63803b593d0d0c2aab4c5b0a": "1500000000000000000000", - "a97e072144499fe5ebbd354acc7e7efb58985d08": "2674000000000000000000", - "75c2ffa1bef54919d2097f7a142d2e14f9b04a58": "2673866000000000000000", - "53faf165be031ec18330d9fce5bd1281a1af08db": "140000000000000000000", - "055ab658c6f0ed4f875ed6742e4bc7292d1abbf0": "83500000000000000000", - "6f18ec767e320508195f1374500e3f2e125689ff": "1000000000000000000000", - "90fc537b210658660a83baa9ac4a8402f65746a8": "1880000000000000000000", - "34664d220fa7f37958024a3332d684bcc6d4c8bd": "10000000000000000000000", - "15acb61568ec4af7ea2819386181b116a6c5ee70": "31000000000000000000000", - "69d98f38a3ba3dbc01fa5c2c1427d862832f2f70": "100000000000000000000000", - "ece1152682b7598fe2d1e21ec15533885435ac85": "4000000000000000000000", - "f618d9b104411480a863e623fc55232d1a4f48aa": "265793000000000000000", - "f9debaecb5f339beea4894e5204bfa340d067f25": "1665000000000000000000", - "5e731b55ced452bb3f3fe871ddc3ed7ee6510a8f": "3000000000000000000000", - "67df242d240dd4b8071d72f8fcf35bb3809d71e8": "4000000000000000000000", - "c4cf930e5d116ab8d13b9f9a7ec4ab5003a6abde": "320000000000000000000", - "01a25a5f5af0169b30864c3be4d7563ccd44f09e": "1430000000000000000000", - "7f6efb6f4318876d2ee624e27595f44446f68e93": "1550000000000000000000", - "82249fe70f61c6b16f19a324840fdc020231bb02": "9504014000000000000000", - "205237c4be146fba99478f3a7dad17b09138da95": "2000000000000000000000", - "fd1fb5a89a89a721b8797068fbc47f3e9d52e149": "236400000000000000000", - "e47fbaed99fc209962604ebd20e240f74f4591f1": "2000000000000000000000", - "a24c3ab62181e9a15b78c4621e4c7c588127be26": "162410000000000000000", - "b6cd7432d5161be79768ad45de3e447a07982063": "4000000000000000000000", - "32a70691255c9fc9791a4f75c8b81f388e0a2503": "985000000000000000000", - "562f16d79abfcec3943e34b20f05f97bdfcda605": "4000000000000000000000", - "dbc66965e426ff1ac87ad6eb78c1d95271158f9f": "18200000000000000000", - "7e87863ec43a481df04d017762edcb5caa629b5a": "39400000000000000000", - "587d6849b168f6c3332b7abae7eb6c42c37f48bf": "880000000000000000000", - "721158be5762b119cc9b2035e88ee4ee78f29b82": "10000000000000000000000", - "84b91e2e2902d05e2b591b41083bd7beb2d52c74": "9848621000000000000000", - "632cecb10cfcf38ec986b43b8770adece9200221": "20000000000000000000", - "c34e3ba1322ed0571183a24f94204ee49c186641": "58200000000000000000", - "ae78bb849139a6ba38ae92a09a69601cc4cb62d1": "500000000000000000000", - "5ce0b6862cce9162e87e0849e387cb5df4f9118c": "1670000000000000000000", - "f52c0a7877345fe0c233bb0f04fd6ab18b6f14ba": "400440000000000000000000", - "e016dc138e25815b90be3fe9eee8ffb2e105624f": "500000000000000000000", - "5789d01db12c816ac268e9af19dc0dd6d99f15df": "200000000000000000000", - "d8b77db9b81bbe90427b62f702b201ffc29ff618": "930200000000000000000", - "5dff811dad819ece3ba602c383fb5dc64c0a3a48": "186000000000000000000", - "af3087e62e04bf900d5a54dc3e946274da92423b": "20000000000000000000", - "8c1023fde1574db8bb54f1739670157ca47da652": "6969382000000000000000", - "bb3b010b18e6e2be1135871026b7ba15ea0fde24": "10044000000000000000000", - "cabdaf354f4720a466a764a528d60e3a482a393c": "1000000000000000000000", - "94bbc67d13f89ebca594be94bc5170920c30d9f3": "80200000000000000000", - "3275496fd4dd8931fd69fb0a0b04c4d1ff879ef5": "446000000000000000000", - "281250a29121270a4ee5d78d24feafe82c70ba3a": "1000000000000000000000", - "590ccb5911cf78f6f622f535c474375f4a12cfcf": "20000000000000000000000", - "542e8096bafb88162606002e8c8a3ed19814aeac": "2000000000000000000000", - "a65426cff378ed23253513b19f496de45fa7e18f": "7200000000000000000000", - "4aa693b122f314482a47b11cc77c68a497876162": "1970000000000000000000", - "d9b783d31d32adc50fa3eacaa15d92b568eaeb47": "34010000000000000000000", - "068e655766b944fb263619658740b850c94afa31": "35200000000000000000", - "9e23c5e4b782b00a5fadf1aead87dacf5b0367a1": "20000000000000000000", - "bf17f397f8f46f1bae45d187148c06eeb959fa4d": "1001440000000000000000", - "8578e10212ca14ff0732a8241e37467db85632a9": "6000000000000000000000", - "2cb5495a505336c2465410d1cae095b8e1ba5cdd": "20000000000000000000000", - "695b0f5242753701b264a67071a2dc880836b8db": "16400000000000000000", - "f2edde37f9a8c39ddea24d79f4015757d06bf786": "100000000000000000000000", - "480f31b989311e4124c6a7465f5a44094d36f9d0": "1025000000000000000000", - "cf157612764e0fd696c8cb5fba85df4c0ddc3cb0": "30000000000000000000000", - "27521deb3b6ef1416ea4c781a2e5d7b36ee81c61": "2000000000000000000000", - "6efd90b535e00bbd889fda7e9c3184f879a151db": "10100000000000000000000", - "b635a4bc71fb28fdd5d2c322983a56c284426e69": "170000000000000000000", - "a17c9e4323069518189d5207a0728dcb92306a3f": "1000000000000000000000", - "6af940f63ec9b8d876272aca96fef65cdacecdea": "3000000000000000000000", - "469358709332c82b887e20bcddd0220f8edba7d0": "17300000000000000000000", - "a257ad594bd88328a7d90fc0a907df95eecae316": "520510000000000000000", - "6f051666cb4f7bd2b1907221b829b555d7a3db74": "1760000000000000000000", - "46bfc5b207eb2013e2e60f775fecd71810c5990c": "1550000000000000000000", - "62b9081e7710345e38e02e16449ace1b85bcfc4e": "910000000000000000000", - "bc73f7b1ca3b773b34249ada2e2c8a9274cc17c2": "2000000000000000000000", - "1adaf4abfa867db17f99af6abebf707a3cf55df6": "6000000000000000000000", - "8d629c20608135491b5013f1002586a0383130e5": "1370000000000000000000", - "38e46de4453c38e941e7930f43304f94bb7b2be8": "2005500000000000000000", - "3485f621256433b98a4200dad857efe55937ec98": "2000000000000000000000", - "775c10c93e0db7205b2643458233c64fc33fd75b": "2000000000000000000000", - "7c4401ae98f12ef6de39ae24cf9fc51f80eba16b": "200000000000000000000", - "17b807afa3ddd647e723542e7b52fee39527f306": "400010000000000000000", - "0ab366e6e7d5abbce6b44a438d69a1cabb90d133": "320000000000000000000", - "194ffe78bbf5d20dd18a1f01da552e00b7b11db1": "7000000000000000000000", - "c45d47ab0c9aa98a5bd62d16223ea2471b121ca4": "593640000000000000000", - "2487c3c4be86a2723d917c06b458550170c3edba": "1000000000000000000000", - "ec4d08aa2e47496dca87225de33f2b40a8a5b36f": "158000000000000000000", - "aaa8defe11e3613f11067fb983625a08995a8dfc": "200000000000000000000", - "50bb67c8b8d8bd0f63c4760904f2d333f400aace": "2000000000000000000000", - "1227e10a4dbf9caca31b1780239f557615fc35c1": "200000000000000000000", - "44a8989e32308121f72466978db395d1f76c3a4b": "7236900000000000000000", - "59569a21d28fba4bda37753405a081f2063da150": "4000000000000000000000", - "c3756bcdcc7eec74ed896adfc335275930266e08": "6000000000000000000000", - "ce3a61f0461b00935e85fa1ead82c45e5a64d488": "500000000000000000000", - "012f396a2b5eb83559bac515e5210df2c8c362ba": "200000000000000000000", - "93bc7d9a4abd44c8bbb8fe8ba804c61ad8d6576c": "3999922000000000000000", - "e20bb9f3966419e14bbbaaaa6789e92496cfa479": "3465116000000000000000", - "9eef442d291a447d74c5d253c49ef324eac1d8f0": "3420000000000000000000", - "db6c2a73dac7424ab0d031b66761122566c01043": "3000000000000000000000", - "704d243c2978e46c2c86adbecd246e3b295ff633": "2012000000000000000000", - "d2ff672016f63b2f85398f4a6fedbb60a50d3cce": "342500000000000000000", - "d2051cb3cb6704f0548cc890ab0a19db3415b42a": "334000000000000000000", - "1111e5dbf45e6f906d62866f1708101788ddd571": "1300200000000000000000", - "6a686bf220b593deb9b7324615fb9144ded3f39d": "1460000000000000000000", - "911feea61fe0ed50c5b9e5a0d66071399d28bdc6": "60000000000000000000", - "3881defae1c07b3ce04c78abe26b0cdc8d73f010": "200000000000000000000", - "ea94f32808a2ef8a9bf0861d1d2404f7b7be258a": "20000000000000000000", - "2eef6b1417d7b10ecfc19b123a8a89e73e526c58": "600000000000000000000", - "dd8af9e7765223f4446f44d3d509819a3d3db411": "10000000000000000000000", - "2efc4c647dac6acac35577ad221758fef6616faa": "8000000000000000000000", - "1547b9bf7ad66274f3413827231ba405ee8c88c1": "17300000000000000000000", - "250a40cef3202397f240469548beb5626af4f23c": "92500000000000000000", - "c175be3194e669422d15fee81eb9f2c56c67d9c9": "200000000000000000000", - "c9e02608066828848aeb28c73672a12925181f4d": "500038000000000000000", - "8229ceb9f0d70839498d44e6abed93c5ca059f5d": "123300000000000000000000", - "39f198331e4b21c1b760a3155f4ab2fe00a74619": "2000000000000000000000", - "3ffcb870d4023d255d5167d8a507cefc366b68ba": "649400000000000000000", - "00dae27b350bae20c5652124af5d8b5cba001ec1": "40000000000000000000", - "fc5500825105cf712a318a5e9c3bfc69c89d0c12": "4000000000000000000000", - "1ed8bb3f06778b039e9961d81cb71a73e6787c8e": "2000000000000000000000", - "530ffac3bc3412e2ec0ea47b7981c770f5bb2f35": "133700000000000000000", - "5f344b01c7191a32d0762ac188f0ec2dd460911d": "1000000000000000000000", - "5cfa9877f719c79d9e494a08d1e41cf103fc87c9": "200000000000000000000", - "f6eaac7032d492ef17fd6095afc11d634f56b382": "500038000000000000000", - "962c0dec8a3d464bf39b1215eafd26480ae490cd": "2001680000000000000000", - "262a8bfd7d9dc5dd3ad78161b6bb560824373655": "1169820000000000000000", - "9b4824ff9fb2abda554dee4fb8cf549165570631": "20000000000000000000", - "bb3b9005f46fd2ca3b30162599928c77d9f6b601": "8000014000000000000000", - "f7dc251196fbcbb77c947d7c1946b0ff65021cea": "1000000000000000000000", - "af1148ef6c8e103d7530efc91679c9ac27000993": "200000000000000000000", - "0bb2650ea01aca755bc0c017b64b1ab5a66d82e3": "1337000000000000000000", - "0cda12bf72d461bbc479eb92e6491d057e6b5ad1": "10000000000000000000000", - "4e5b77f9066159e615933f2dda7477fa4e47d648": "200000000000000000000", - "391161b0e43c302066e8a68d2ce7e199ecdb1d57": "4000000000000000000000", - "c7e330cd0c890ac99fe771fcc7e7b009b7413d8a": "4000000000000000000000", - "d4b38a5fdb63e01714e9801db47bc990bd509183": "5999000000000000000000", - "bc0f98598f88056a26339620923b8f1eb074a9fd": "200000000000000000000", - "dbc59ed88973dead310884223af49763c05030f1": "20000000000000000000", - "0f85e42b1df321a4b3e835b50c00b06173968436": "985000000000000000000", - "d7788ef28658aa06cc53e1f3f0de58e5c371be78": "6685000000000000000000", - "ecd276af64c79d1bd9a92b86b5e88d9a95eb88f8": "20000000000000000000", - "81c9e1aee2d3365d53bcfdcd96c7c538b0fd7eec": "1820000000000000000000", - "5d39ef9ea6bdfff15d11fe91f561a6f9e31f5da5": "2000000000000000000000", - "99878f9d6e0a7ed9aec78297b73879a80195afe0": "3980000000000000000000", - "7294c918b1aefb4d25927ef9d799e71f93a28e85": "197000000000000000000", - "a33f70da7275ef057104dfa7db64f472e9f5d553": "80220000000000000000", - "255bdd6474cc8262f26a22c38f45940e1ceea69b": "4000000000000000000000", - "52f8b509fee1a874ab6f9d87367fbeaf15ac137f": "1000000000000000000000", - "e2728a3e8c2aaac983d05dc6877374a8f446eee9": "197600000000000000000", - "ed0206cb23315128f8caff26f6a30b985467d022": "40000000000000000000000", - "87cf36ad03c9eae9053abb5242de9117bb0f2a0b": "500000000000000000000", - "a929c8bd71db0c308dac06080a1747f21b1465aa": "500000000000000000000", - "9da6e075989c7419094cc9f6d2e49393bb199688": "11100000000000000000000", - "763eece0b08ac89e32bfa4bece769514d8cb5b85": "4000000000000000000000", - "5df3277ca85936c7a0d2c0795605ad25095e7159": "2000000000000000000000", - "7163758cbb6c4c525e0414a40a049dcccce919bb": "200000000000000000000", - "14cdddbc8b09e6675a9e9e05091cb92238c39e1e": "5100000000000000000000", - "b3b7f493b44a2c8d80ec78b1cdc75a652b73b06c": "2000000000000000000000", - "c69b855539ce1b04714728eec25a37f367951de7": "2000000000000000000000", - "052eab1f61b6d45517283f41d1441824878749d0": "4000000000000000000000", - "515651d6db4faf9ecd103a921bbbbe6ae970fdd4": "20000000000000000000000", - "c7aff91929797489555a2ff1d14d5c695a108355": "1000000000000000000000", - "d7ca7fdcfebe4588eff5421d1522b61328df7bf3": "4001070000000000000000", - "eefba12dfc996742db790464ca7d273be6e81b3e": "1000000000000000000000", - "ebaa216de9cc5a43031707d36fe6d5bedc05bdf0": "1969606000000000000000", - "559194304f14b1b93afe444f0624e053c23a0009": "400000000000000000000", - "4ecc19948dd9cd87b4c7201ab48e758f28e7cc76": "500200000000000000000", - "f224eb900b37b4490eee6a0b6420d85c947d8733": "970000000000000000000", - "97810bafc37e84306332aacb35e92ad911d23d24": "1000000000000000000000", - "bd67d2e2f82da8861341bc96a2c0791fddf39e40": "200014000000000000000", - "1b6495891240e64e594493c2662171db5e30ce13": "172400000000000000000", - "00bdd4013aa31c04616c2bc9785f2788f915679b": "13400000000000000000", - "c6ae287ddbe1149ba16ddcca4fe06aa2eaa988a9": "400000000000000000000", - "b7c9f12b038e73436d17e1c12ffe1aeccdb3f58c": "540000000000000000000", - "c1b500011cfba95d7cd636e95e6cbf6167464b25": "200000000000000000000", - "39e0db4d60568c800b8c5500026c2594f5768960": "1000000000000000000000", - "40e3c283f7e24de0410c121bee60a5607f3e29a6": "1000000000000000000000", - "2f7d3290851be5c6b4b43f7d4574329f61a792c3": "100000000000000000000", - "c33ece935a8f4ef938ea7e1bac87cb925d8490ca": "33122000000000000000000", - "57bddf078834009c89d88e6282759dc45335b470": "2148000000000000000000", - "50ad187ab21167c2b6e78be0153f44504a07945e": "100076000000000000000", - "5bd24aac3612b20c609eb46779bf95698407c57c": "1970000000000000000000", - "16526c9edf943efa4f6d0f0bae81e18b31c54079": "985000000000000000000", - "4c6a9dc2cab10abb2e7c137006f08fecb5b779e1": "499000000000000000000", - "02c9f7940a7b8b7a410bf83dc9c22333d4275dd3": "5000000000000000000000", - "b9fd3833e88e7cf1fa9879bdf55af4b99cd5ce3f": "1000000000000000000000", - "7e268f131ddf687cc325c412f78ba961205e9112": "16000600000000000000000", - "180478a655d78d0f3b0c4f202b61485bc4002fd5": "2000000000000000000000", - "ed4014538cee664a2fbcb6dc669f7ab16d0ba57c": "200000000000000000000", - "f63a579bc3eac2a9490410128dbcebe6d9de8243": "1490000000000000000000", - "5d822d9b3ef4b502627407da272f67814a6becd4": "20000000000000000000", - "eb52ab10553492329c1c54833ae610f398a65b9d": "152000000000000000000", - "63340a57716bfa63eb6cd133721202575bf796f0": "209967000000000000000", - "933bf33f8299702b3a902642c33e0bfaea5c1ca3": "15200000000000000000", - "25bc49ef288cd165e525c661a812cf84fbec8f33": "338464000000000000000", - "c8231ba5a411a13e222b29bfc1083f763158f226": "1000090000000000000000", - "6c15ec3520bf8ebbc820bd0ff19778375494cf9d": "2005500000000000000000", - "aaced8a9563b1bc311dbdffc1ae7f57519c4440c": "2000000000000000000000", - "d90f3009db437e4e11c780bec8896f738d65ef0d": "4000000000000000000000", - "5603241eb8f08f721e348c9d9ad92f48e390aa24": "200000000000000000000", - "53cec6c88092f756efe56f7db11228a2db45b122": "4000000000000000000000", - "194cebb4929882bf3b4bf9864c2b1b0f62c283f9": "571300000000000000000", - "4be8628a8154874e048d80c142181022b180bcc1": "60000000000000000000", - "5fd973af366aa5157c54659bcfb27cbfa5ac15d6": "4000000000000000000000", - "303139bc596403d5d3931f774c66c4ba467454db": "1699830000000000000000", - "87584a3f613bd4fac74c1e780b86d6caeb890cb2": "1700000000000000000000", - "77f4e3bdf056883cc87280dbe640a18a0d02a207": "193806000000000000000", - "4de3fe34a6fbf634c051997f47cc7f48791f5824": "1999000000000000000000", - "c45a1ca1036b95004187cdac44a36e33a94ab5c3": "254800000000000000000", - "65d33eb39cda6453b19e61c1fe4db93170ef9d34": "13370000000000000000", - "f65616be9c8b797e7415227c9138faa0891742d7": "790000000000000000000", - "e17812f66c5e65941e186c46922b6e7b2f0eeb46": "1820000000000000000000", - "d47f50df89a1cff96513bef1b2ae3a2971accf2c": "840000000000000000000", - "8ed1528b447ed4297902f639c514d0944a88f8c8": "198800000000000000000", - "a4fb14409a67b45688a8593e5cc2cf596ced6f11": "1790000000000000000000", - "855d9aef2c39c6230d09c99ef6494989abe68785": "161000000000000000000", - "778c43d11afe3b586ff374192d96a7f23d2b9b7f": "2577139000000000000000", - "e3ece1f632711d13bfffa1f8f6840871ee58fb27": "4000000000000000000000", - "beb3358c50cf9f75ffc76d443c2c7f55075a0589": "2674000000000000000000", - "f156dc0b2a981e5b55d3f2f03b8134e331dbadb7": "100000000000000000000", - "eb9cc9fe0869d2dab52cc7aae8fd57adb35f9feb": "1966000000000000000000", - "2467c6a5c696ede9a1e542bf1ad06bcc4b06aca0": "18500000000000000000", - "ec75b4a47513120ba5f86039814f1998e3817ac3": "178756000000000000000", - "9c3d0692ceeef80aa4965ceed262ffc7f069f2dc": "200000000000000000000", - "e05029aceb0778675bef1741ab2cd2931ef7c84b": "5000057000000000000000", - "41d3b731a326e76858baa5f4bd89b57b36932343": "394000000000000000000", - "c346cb1fbce2ab285d8e5401f42dd7234d37e86d": "83500000000000000000", - "45f4fc60f08eaca10598f0336329801e3c92cb46": "200000000000000000000", - "f04a6a379708b9428d722aa2b06b77e88935cf89": "300000000000000000000", - "232832cd5977e00a4c30d0163f2e24f088a6cb09": "3000000000000000000000", - "d2ac0d3a58605e1d0f0eb3de25b2cad129ed6058": "4000000000000000000000", - "a356551bb77d4f45a6d7e09f0a089e79cca249cb": "340000000000000000000", - "b50c9f5789ae44e2dce017c714caf00c830084c2": "394000000000000000000", - "21fd6c5d97f9c600b76821ddd4e776350fce2be0": "1999946000000000000000", - "f0d5c31ccb6cbe30c7c9ea19f268d159851f8c9c": "16700000000000000000000", - "ab7091932e4bc39dbb552380ca934fd7166d1e6e": "3340000000000000000000", - "acd8dd91f714764c45677c63d852e56eb9eece2e": "2000000000000000000000", - "57d032a43d164e71aa2ef3ffd8491b0a4ef1ea5b": "2000000000000000000000", - "5af46a25ac09cb73616b53b14fb42ff0a51cddb2": "4000000000000000000000", - "1ea6bf2f15ae9c1dbc64daa7f8ea4d0d81aad3eb": "4200000000000000000000", - "03337012ae1d7ff3ee7f697c403e7780188bf0ef": "200000000000000000000", - "32eb64be1b5dede408c6bdefbe6e405c16b7ed02": "1970000000000000000000", - "22e2488e2da26a49ae84c01bd54b21f2947891c6": "1730000000000000000000", - "be98a77fd41097b34f59d7589baad021659ff712": "900000000000000000000", - "dda4ed2a58a8dd20a73275347b580d71b95bf99a": "399000000000000000000", - "671110d96aaff11523cc546bf9940eedffb2faf7": "4000000000000000000000", - "5d71799c8df3bccb7ee446df50b8312bc4eb71c5": "200000000000000000000", - "ae179a460db66326743d24e67523a57b246daf7f": "4722920000000000000000", - "198bfcf1b07ae308fa2c02069ac9dafe7135fb47": "20000000000000000000", - "4662a1765ee921842ddc88898d1dc8627597bd7e": "10000000000000000000000", - "783eec8aa5dac77b2e6623ed5198a431abbaee07": "440000000000000000000", - "ed6643c0e8884b2d3211853785a08bf8f33ed29f": "1337000000000000000000", - "5cc7d3066d45d27621f78bb4b339473e442a860f": "9999908000000000000000", - "94ef8be45077c7d4c5652740de946a62624f713f": "100085000000000000000", - "2f853817afd3b8f3b86e9f60ee77b5d97773c0e3": "1451450000000000000000", - "3e0b8ed86ed669e12723af7572fbacfe829b1e16": "1499800000000000000000", - "fa68e0cb3edf51f0a6f211c9b2cb5e073c9bffe6": "291200000000000000000", - "2c234f505ca8dcc77d9b7e01d257c318cc19396d": "100000000000000000000", - "f3f24fc29e20403fc0e8f5ebbb553426f78270a2": "100000000000000000000", - "91546b79ecf69f936b5a561508b0d7e50cc5992f": "267400000000000000000", - "435443b81dfdb9bd8c6787bc2518e2d47e57c15f": "5968500000000000000000", - "3a06e3bb1edcfd0c44c3074de0bb606b049894a2": "10000000000000000000000", - "3a3108c1e680a33b336c21131334409d97e5adec": "20000000000000000000", - "2caf6bf4ec7d5a19c5e0897a5eeb011dcece4210": "139740000000000000000", - "f44f8551ace933720712c5c491cdb6f2f951736c": "4000000000000000000000", - "5bc1f95507b1018642e45cd9c0e22733b9b1a326": "100000000000000000000", - "94ca56de777fd453177f5e0694c478e66aff8a84": "500000000000000000000", - "afdd1b786162b8317e20f0e979f4b2ce486d765d": "20000000000000000000", - "3a805fa0f7387f73055b7858ca8519edd93d634f": "1850000000000000000000", - "8b36224c7356e751f0c066c35e3b44860364bfc2": "998987000000000000000", - "cfecbea07c27002f65fe534bb8842d0925c78402": "4000000000000000000000", - "482982ac1f1c6d1721feecd9b9c96cd949805055": "10000000000000000000000", - "af880fc7567d5595cacce15c3fc14c8742c26c9e": "133700000000000000000", - "acc1c78786ab4d2b3b277135b5ba123e0400486b": "78800000000000000000", - "41f27e744bd29de2b0598f02a0bb9f98e681eaa4": "7760000000000000000000", - "09a025316f967fa8b9a1d60700063f5a68001caa": "38200000000000000000", - "391f20176d12360d724d51470a90703675594a4d": "1600000000000000000000", - "fe4d8403216fd571572bf1bdb01d00578978d688": "9850000000000000000000", - "900f0b8e35b668f81ef252b13855aa5007d012e7": "425000000000000000000", - "c35b95a2a3737cb8f0f596b34524872bd30da234": "7540000000000000000000", - "412a68f6c645559cc977fc4964047a201d1bb0e2": "50000000000000000000000", - "d3dad1b6d08d4581ccae65a8732db6ac69f0c69e": "6000000000000000000000", - "35855ec641ab9e081ed0c2a6dcd81354d0244a87": "1201897000000000000000", - "88015d7203c5e0224aeda286ed12f1a51b789333": "4999711000000000000000", - "251c12722c6879227992a304eb3576cd18434ea5": "2000000000000000000000", - "1f6f0030349752061c96072bc3d6eb3549208d6b": "23891000000000000000", - "86153063a1ae7f02f1a88136d4d69c7c5e3e4327": "1000000000000000000000", - "78355df0a230f83d032c703154414de3eedab557": "2000000000000000000000", - "c5b56cd234267c28e89c6f6b2266b086a12f970c": "4000000000000000000000", - "3e3cd3bec06591d6346f254b621eb41c89008d31": "993800000000000000000", - "378ea1dc8edc19bae82638029ea8752ce98bcfcd": "2000000000000000000000", - "67632046dcb25a54936928a96f423f3320cbed92": "2000000000000000000000", - "ddbee6f094eae63420b003fb4757142aea6cd0fd": "2000000000000000000000", - "b555d00f9190cc3677aef314acd73fdc39399259": "2000000000000000000000", - "e230fe1bff03186d0219f15d4c481b7d59be286a": "36710000000000000000", - "3e4e9265223c9738324cf20bd06006d0073edb8c": "133700000000000000000", - "7450ff7f99eaa9116275deac68e428df5bbcd8b9": "2000000000000000000000", - "021f69043de88c4917ca10f1842897eec0589c7c": "1978760000000000000000", - "351787843505f8e4eff46566cce6a59f4d1c5fe7": "9250000000000000000000", - "ebd37b256563e30c6f9289a8e2702f0852880833": "1999944000000000000000", - "ed41e1a28f5caa843880ef4e8b08bd6c33141edf": "790174000000000000000", - "8d238e036596987643d73173c37b0ad06055b96c": "2089724000000000000000", - "478e524ef2a381d70c82588a93ca7a5fa9d51cbf": "254908000000000000000000", - "4419ac618d5dea7cdc6077206fb07dbdd71c1702": "4000000000000000000000", - "ca25ff34934c1942e22a4e7bd56f14021a1af088": "197000000000000000000", - "5552f4b3ed3e1da79a2f78bb13e8ae5a68a9df3b": "1000000000000000000000", - "4354221e62dc09e6406436163a185ef06d114a81": "2000000000000000000000", - "ca0432cb157b5179f02ebba5c9d1b54fec4d88ca": "1000000000000000000000", - "8a780ab87a9145fe10ed60fa476a740af4cab1d2": "334000000000000000000", - "4ff676e27f681a982d8fd9d20e648b3dce05e945": "2800000000000000000000", - "6c63fc85029a2654d79b2bea4de349e4524577c5": "660000000000000000000", - "1ac089c3bc4d82f06a20051a9d732dc0e734cb61": "700300000000000000000", - "4bf4479799ef82eea20943374f56a1bf54001e5e": "3940000000000000000000", - "08411652c871713609af0062a8a1281bf1bbcfd9": "1400000000000000000000", - "e1bfaa5a45c504428923c4a61192a55b1400b45d": "2674000000000000000000", - "5e1fbd4e58e2312b3c78d7aaaafa10bf9c3189e3": "40000000000000000000000", - "bb27c6a7f91075475ab229619040f804c8ec7a6a": "10000000000000000000000", - "5d8d31faa864e22159cd6f5175ccecc53fa54d72": "26980000000000000000000", - "2dd8eeef87194abc2ce7585da1e35b7cea780cb7": "999999000000000000000", - "0e1801e70b6262861b1134ccbc391f568afc92f7": "4000000000000000000000", - "61042b80fd6095d1b87be2f00f109fabafd157a6": "100000000000000000000", - "fb5518714cefc36d04865de5915ef0ff47dfe743": "2000000000000000000000", - "b5add1e7809f7d03069bfe883b0a932210be8712": "1000000000000000000000", - "c2e2d498f70dcd0859e50b023a710a6d4b2133bd": "1037130000000000000000", - "4ad047fae67ef162fe68fedbc27d3b65caf10c36": "1970000000000000000000", - "69cb3e2153998d86e5ee20c1fcd1a6baeeb2863f": "4000000000000000000000", - "683633010a88686bea5a98ea53e87997cbf73e69": "99960000000000000000", - "6cb11ecb32d3ce829601310636f5a10cf7cf9b5f": "20068370000000000000000", - "a613456996408af1c2e93e177788ab55895e2b32": "6366000000000000000000", - "8308ed0af7f8a3c1751fafc877b5a42af7d35882": "1000000000000000000000", - "e5edf8123f2403ce1a0299becf7aac744d075f23": "200200000000000000000", - "05665155cc49cbf6aabdd5ae92cbfaad82b8c0c1": "400000000000000000000", - "00b277b099a8e866ca0ec65bcb87284fd142a582": "1970000000000000000000", - "4b9e068fc4680976e61504912985fd5ce94bab0d": "668500000000000000000", - "12134e7f6b017bf48e855a399ca58e2e892fa5c8": "1000000000000000000000", - "dffcea5421ec15900c6ecfc777184e140e209e24": "19980000000000000000", - "2132c0516a2e17174ac547c43b7b0020d1eb4c59": "985000000000000000000", - "d39a5da460392b940b3c69bc03757bf3f2e82489": "7019250000000000000000", - "66c8331efe7198e98b2d32b938688e3241d0e24f": "9620000000000000000000", - "bdca2a0ff34588af625fa8e28fc3015ab5a3aa00": "2339800000000000000000", - "7dfc342dffcf45dfee74f84c0995397bd1a63172": "250000000000000000000", - "a202547242806f6e70e74058d6e5292defc8c8d4": "2002000000000000000000", - "3bbc13d04accc0707aebdcaef087d0b87e0b5ee3": "3520000000000000000000", - "be5cba8d37427986e8ca2600e858bb03c359520f": "2955000000000000000000", - "4174fa1bc12a3b7183cbabb77a0b59557ba5f1db": "2000000000000000000000", - "9eb3a7cb5e6726427a3a361cfa8d6164dbd0ba16": "804000000000000000000", - "25e661c939863acc044e6f17b5698cce379ec3cc": "1370000000000000000000", - "24bd5904059091d2f9e12d6a26a010ca22ab14e8": "1880000000000000000000", - "c96626728aaa4c4fb3d31c26df3af310081710d1": "3340000000000000000000", - "0fb5d2c673bfb1ddca141b9894fd6d3f05da6720": "100000000000000000000", - "2de31afd189a13a76ff6fe73ead9f74bb5c4a629": "6000000000000000000000", - "bd09126c891c4a83068059fe0e15796c4661a9f4": "800000000000000000000", - "496f5843f6d24cd98d255e4c23d1e1f023227545": "1754143000000000000000", - "540cf23dd95c4d558a279d778d2b3735b3164191": "10000000000000000000000", - "9b5ec18e8313887df461d2902e81e67a8f113bb1": "100000000000000000000", - "b7a7f77c348f92a9f1100c6bd829a8ac6d7fcf91": "1820000000000000000000", - "2590126870e0bde8a663ab040a72a5573d8d41c2": "5000000000000000000000", - "090fa9367bda57d0d3253a0a8ff76ce0b8e19a73": "1000000000000000000000", - "2a5ba9e34cd58da54c9a2712663a3be274c8e47b": "197000000000000000000", - "3e8641d43c42003f0a33c929f711079deb2b9e46": "500000000000000000000", - "f4d97664cc4eec9edbe7fa09f4750a663b507d79": "4000000000000000000000", - "b1540e94cff3465cc3d187e7c8e3bdaf984659e2": "2989950000000000000000", - "f96883582459908c827627e86f28e646f9c7fc7a": "8350000000000000000000", - "d4feed99e8917c5c5458635f3603ecb7e817a7d0": "300031000000000000000", - "14b1603ec62b20022033eec4d6d6655ac24a015a": "50000000000000000000", - "af8e1dcb314c950d3687434d309858e1a8739cd4": "267400000000000000000", - "4b9206ba6b549a1a7f969e1d5dba867539d1fa67": "7880000000000000000000", - "471010da492f4018833b088d9872901e06129174": "500000000000000000000", - "d243184c801e5d79d2063f3578dbae81e7b3a9cb": "1989700000000000000000", - "3eada8c92f56067e1bb73ce378da56dc2cdfd365": "2210000000000000000000", - "33ea6b7855e05b07ab80dab1e14de9b649e99b6c": "532000000000000000000", - "700711e311bb947355f755b579250ca7fd765a3e": "1790000000000000000000", - "87fb26c31e48644d693134205cae43b21f18614b": "1370000000000000000000", - "001d14804b399c6ef80e64576f657660804fec0b": "4200000000000000000000", - "f9642086b1fbae61a6804dbe5fb15ec2d2b537f4": "2000000000000000000000", - "6919dd5e5dfb1afa404703b9faea8cee35d00d70": "5910000000000000000000", - "9ac4da51d27822d1e208c96ea64a1e5b55299723": "100040000000000000000", - "1bd8ebaa7674bb18e19198db244f570313075f43": "150000000000000000000", - "e64ef012658d54f8e8609c4e9023c09fe865c83b": "28000000000000000000", - "43b079baf0727999e66bf743d5bcbf776c3b0922": "2000000000000000000000", - "06ac26ad92cb859bd5905ddce4266aa0ec50a9c5": "775000000000000000000", - "99c1d9f40c6ab7f8a92fce2fdce47a54a586c53f": "985000000000000000000", - "4ae93082e45187c26160e66792f57fad3551c73a": "21658000000000000000000", - "7da7613445a21299aa74f0ad71431ec43fbb1be9": "68000000000000000000", - "4a9a26fd0a8ba10f977da4f77c31908dab4a8016": "1790000000000000000000", - "972c2f96aa00cf8a2f205abcf8937c0c75f5d8d9": "200000000000000000000", - "b5046cb3dc1dedbd364514a2848e44c1de4ed147": "16445100000000000000000", - "48c2ee91a50756d8ce9abeeb7589d22c6fee5dfb": "3220000000000000000000", - "46c1aa2244b9c8a957ca8fac431b0595a3b86824": "4000000000000000000000", - "21fd0bade5f4ef7474d058b7f3d854cb1300524e": "20000000000000000000", - "1864a3c7b48155448c54c88c708f166709736d31": "133700000000000000000", - "5dd53ae897526b167d39f1744ef7c3da5b37a293": "8000000000000000000000", - "ece111670b563ccdbebca52384290ecd68fe5c92": "20000000000000000000", - "74d671d99cbea1ab57906375b63ff42b50451d17": "1000000000000000000000", - "5717cc9301511d4a81b9f583148beed3d3cc8309": "2600000000000000000000", - "8f92844f282a92999ee5b4a8d773d06b694dbd9f": "1940000000000000000000", - "b5a606f4ddcbb9471ec67f658caf2b00ee73025e": "4325000000000000000000", - "bdb60b823a1173d45a0792245fb496f1fd3301cf": "2000000000000000000000", - "1d2615f8b6ca5012b663bdd094b0c5137c778ddf": "10000000000000000000000", - "82ff716fdf033ec7e942c909d9831867b8b6e2ef": "1790000000000000000000", - "44c14765127cde11fab46c5d2cf4d4b2890023fd": "2000000000000000000000", - "c72cb301258e91bc08998a805dd192f25c2f9a35": "591000000000000000000", - "ad732c976593eec4783b4e2ecd793979780bfedb": "2000000000000000000000", - "d8f62036f03b7635b858f1103f8a1d9019a892b6": "50000000000000000000", - "0a06fad7dcd7a492cbc053eeabde6934b39d8637": "20000000000000000000", - "67f2bb78b8d3e11f7c458a10b5c8e0a1d374467d": "1790000000000000000000", - "4b5cdb1e428c91dd7cb54a6aed4571da054bfe52": "88000000000000000000", - "b3557d39b5411b84445f5f54f38f62d2714d0087": "600000000000000000000", - "0b0e055b28cbd03dc5ff44aa64f3dce04f5e63fb": "2000000000000000000000", - "9b2be7f56754f505e3441a10f7f0e20fd3ddf849": "340000000000000000000", - "0b93fca4a4f09cac20db60e065edcccc11e0a5b6": "200000000000000000000", - "3bc85d6c735b9cda4bba5f48b24b13e70630307b": "1970000000000000000000", - "52102354a6aca95d8a2e86d5debda6de69346076": "2000000000000000000000", - "cda4530f4b9bc50905b79d17c28fc46f95349bdf": "942000000000000000000", - "ff545bbb66fbd00eb5e6373ff4e326f5feb5fe12": "20000000000000000000", - "4030a925706b2c101c8c5cb9bd05fbb4f6759b18": "4000000000000000000000", - "f11e01c7a9d12499005f4dae7716095a34176277": "400000000000000000000", - "a4826b6c3882fad0ed5c8fbb25cc40cc4f33759f": "2068000000000000000000", - "28510e6eff1fc829b6576f4328bc3938ec7a6580": "10000000000000000000000", - "9ce5363b13e8238aa4dd15acd0b2e8afe0873247": "200000000000000000000", - "d97bc84abd47c05bbf457b2ef659d61ca5e5e48f": "122000000000000000000", - "4a719061f5285495b37b9d7ef8a51b07d6e6acac": "199800000000000000000", - "8b714522fa2839620470edcf0c4401b713663df1": "200000000000000000000", - "b6decf82969819ba02de29b9b593f21b64eeda0f": "740000000000000000000", - "c87d3ae3d88704d9ab0009dcc1a0067131f8ba3c": "1969606000000000000000", - "dccb370ed68aa922283043ef7cad1b9d403fc34a": "4000000000000000000000", - "2d532df4c63911d1ce91f6d1fcbff7960f78a885": "1669833000000000000000", - "1fcfd1d57f872290560cb62d600e1defbefccc1c": "1490000000000000000000", - "d9e27eb07dfc71a706060c7f079238ca93e88539": "1000000000000000000000", - "da7732f02f2e272eaf28df972ecc0ddeed9cf498": "205274000000000000000", - "bf09d77048e270b662330e9486b38b43cd781495": "436000000000000000000000", - "619f171445d42b02e2e07004ad8afe694fa53d6a": "20000000000000000000", - "2bdd03bebbee273b6ca1059b34999a5bbd61bb79": "20000000000000000000", - "8da1d359ba6cb4bcc57d7a437720d55db2f01c72": "80000000000000000000", - "be935793f45b70d8045d2654d8dd3ad24b5b6137": "880000000000000000000", - "ee71793e3acf12a7274f563961f537529d89c7de": "2000000000000000000000", - "86f05d19063e9369c6004eb3f123943a7cff4eab": "1999944000000000000000", - "87b10f9c280098179a2b76e9ce90be61fc844d0d": "1337000000000000000000", - "243c84d12420570cc4ef3baba1c959c283249520": "2345000000000000000000", - "6bc85acd5928722ef5095331ee88f484b8cf8357": "180000000000000000000", - "2561a138dcf83bd813e0e7f108642be3de3d6f05": "999940000000000000000", - "7d0350e40b338dda736661872be33f1f9752d755": "49933000000000000000", - "e5dc9349cb52e161196122cf87a38936e2c57f34": "2000000000000000000000", - "543a8c0efb8bcd15c543e2a6a4f807597631adef": "5893800000000000000000", - "0413d0cf78c001898a378b918cd6e498ea773c4d": "280000000000000000000", - "3708e59de6b4055088782902e0579c7201a8bf50": "200000000000000000000000", - "699fc6d68a4775573c1dcdaec830fefd50397c4e": "60000000000000000000", - "379a7f755a81a17edb7daaa28afc665dfa6be63a": "25000000000000000000", - "260a230e4465077e0b14ee4442a482d5b0c914bf": "1677935000000000000000", - "3daa01ceb70eaf9591fa521ba4a27ea9fb8ede4a": "1667400000000000000000", - "7f3a1e45f67e92c880e573b43379d71ee089db54": "100000000000000000000000", - "38643babea6011316cc797d9b093c897a17bdae7": "334400000000000000000", - "84675e9177726d45eaa46b3992a340ba7f710c95": "1000000000000000000000", - "0f83461ba224bb1e8fdd9dae535172b735acb4e0": "200000000000000000000", - "31aa3b1ebe8c4dbcb6a708b1d74831e60e497660": "400000000000000000000", - "a32cf7dde20c3dd5679ff5e325845c70c5962662": "20000000000000000000", - "c007f0bdb6e7009202b7af3ea90902697c721413": "2999966000000000000000", - "05c64004a9a826e94e5e4ee267fa2a7632dd4e6f": "16191931000000000000000", - "f622e584a6623eaaf99f2be49e5380c5cbcf5cd8": "200000000000000000000", - "9dc10fa38f9fb06810e11f60173ec3d2fd6a751e": "1970000000000000000000", - "423c3107f4bace414e499c64390a51f74615ca5e": "2000000000000000000000", - "92438e5203b6346ff886d7c36288aacccc78ceca": "1000000000000000000000", - "bef07d97c3481f9d6aee1c98f9d91a180a32442b": "100000000000000000000000", - "55aa5d313ebb084da0e7801091e29e92c5dec3aa": "2000000000000000000000", - "89c433d601fad714da6369308fd26c1dc9942bbf": "2000000000000000000000", - "25106ab6755df86d6b63a187703b0cfea0e594a0": "27400000000000000000", - "494256e99b0f9cd6e5ebca3899863252900165c8": "14000000000000000000000", - "5f4ace4c1cc13391e01f00b198e1f20b5f91cbf5": "5000196000000000000000", - "135cecd955e5798370769230159303d9b1839f66": "5000000000000000000000", - "ced81ec3533ff1bfebf3e3843ee740ad11758d3e": "1970000000000000000000", - "688eb3853bbcc50ecfee0fa87f0ab693cabdef02": "31600000000000000000000", - "2159240813a73095a7ebf7c3b3743e8028ae5f09": "2000000000000000000000", - "99d1579cd42682b7644e1d4f7128441eeffe339d": "20000000000000000000000", - "8a243a0a9fea49b839547745ff2d11af3f4b0522": "985000000000000000000", - "c1a41a5a27199226e4c7eb198b031b59196f9842": "191000000000000000000", - "7514adbdc63f483f304d8e94b67ff3309f180b82": "622911000000000000000", - "74aeec915de01cc69b2cb5a6356feea14658c6c5": "232500000000000000000", - "76f9ad3d9bbd04ae055c1477c0c35e7592cb2a20": "40200000000000000000000", - "a8a7b68adab4e3eadff19ffa58e34a3fcec0d96a": "6000000000000000000000", - "60de22a1507432a47b01cc68c52a0bf8a2e0d098": "19100000000000000000", - "ceb33d78e7547a9da2e87d51aec5f3441c87923a": "20000000000000000000", - "432809a2390f07c665921ff37d547d12f1c9966a": "30000000000000000000000", - "d5e656a1b916f9bf45afb07dd8afaf73b4c56f41": "97000000000000000000", - "e3410bb7557cf91d79fa69d0dfea0aa075402651": "2000000000000000000000", - "dee942d5caf5fac11421d86b010b458e5c392990": "4000000000000000000000", - "a98f109835f5eacd0543647c34a6b269e3802fac": "400000000000000000000", - "932b9c04d40d2ac83083d94298169dae81ab2ed0": "2000000000000000000000", - "ba10f2764290f875434372f79dbf713801caac01": "955000000000000000000", - "a2c7eaffdc2c9d937345206c909a52dfb14c478f": "143000000000000000000", - "6c67e0d7b62e2a08506945a5dfe38263339f1f22": "1970000000000000000000", - "60c3714fdddb634659e4a2b1ea42c4728cc7b8ba": "13370000000000000000", - "73b4d499de3f38bf35aaf769a6e318bc6d123692": "2000000000000000000000", - "3b22dea3c25f1b59c7bd27bb91d3a3eaecef3984": "100000000000000000000", - "1e3badb1b6e1380e27039c576ae6222e963a5b53": "20000000000000000000000", - "abd4d6c1666358c0406fdf3af248f78ece830104": "2112000000000000000000", - "0c925ad5eb352c8ef76d0c222d115b0791b962a1": "3180000000000000000000", - "be9186c34a52514abb9107860f674f97b821bd5b": "509600000000000000000", - "b7f67314cb832e32e63b15a40ce0d7ffbdb26985": "1060866000000000000000", - "3f30d3bc9f602232bc724288ca46cd0b0788f715": "4000000000000000000000", - "970abd53a54fca4a6429207c182d4d57bb39d4a0": "2000000000000000000000", - "36d85dc3683156e63bf880a9fab7788cf8143a27": "20000000000000000000000", - "2836123046b284e5ef102bfd22b1765e508116ad": "411880000000000000000", - "de06d5ea777a4eb1475e605dbcbf43444e8037ea": "50000000000000000000000", - "9af11399511c213181bfda3a8b264c05fc81b3ce": "14000000000000000000000", - "e2191215983f33fd33e22cd4a2490054da53fddc": "15800000000000000000", - "2eebf59432b52892f9380bd140aa99dcf8ad0c0f": "152000000000000000000", - "dc087f9390fb9e976ac23ab689544a0942ec2021": "1820000000000000000000", - "fd4b989558ae11be0c3b36e2d6f2a54a9343ca2e": "2000000000000000000000", - "770c2fb2c4a81753ac0182ea460ec09c90a516f8": "20000000000000000000", - "b28dbfc6499894f73a71faa00abe0f4bc9d19f2a": "100000000000000000000", - "b0cef8e8fb8984a6019f01c679f272bbe68f5c77": "152000000000000000000", - "f400f93d5f5c7e3fc303129ac8fb0c2f786407fa": "2000000000000000000000", - "f2133431d1d9a37ba2f0762bc40c5acc8aa6978e": "2000000000000000000000", - "9003d270891ba2df643da8341583193545e3e000": "4000000000000000000000", - "8938d1b4daee55a54d738cf17e4477f6794e46f7": "18200000000000000000", - "98e6f547db88e75f1f9c8ac2c5cf1627ba580b3e": "1000000000000000000000", - "009fdbf44e1f4a6362b769c39a475f95a96c2bc7": "564000000000000000000", - "d0f9597811b0b992bb7d3757aa25b4c2561d32e2": "500000000000000000000", - "dcd10c55bb854f754434f1219c2c9a98ace79f03": "4000086000000000000000", - "67048f3a12a4dd1f626c64264cb1d7971de2ca38": "180000000000000000000", - "d33cf82bf14c592640a08608914c237079d5be34": "2000000000000000000000", - "f5b068989df29c253577d0405ade6e0e7528f89e": "1610000000000000000000", - "a9a8eca11a23d64689a2aa3e417dbb3d336bb59a": "262025000000000000000", - "99413704b1a32e70f3bc0d69dd881c38566b54cb": "27382708000000000000000", - "2a085e25b64862f5e68d768e2b0f7a8529858eee": "1983618000000000000000", - "833d3fae542ad5f8b50ce19bde2bec579180c88c": "346000000000000000000", - "c3483d6e88ac1f4ae73cc4408d6c03abe0e49dca": "17000000000000000000000", - "fde395bc0b6d5cbb4c1d8fea3e0b4bff635e9db7": "2000000000000000000000", - "eddacd94ec89a2ef968fcf977a08f1fae2757869": "8000000000000000000000", - "dc29119745d2337320da51e19100c948d980b915": "160000000000000000000", - "640bf87415e0cf407301e5599a68366da09bbac8": "493207000000000000000", - "afcc7dbb8356d842d43ae7e23c8422b022a30803": "30400000000000000000000", - "9120e71173e1ba19ba8f9f4fdbdcaa34e1d6bb78": "2000000000000000000000", - "9092918707c621fdbd1d90fb80eb787fd26f7350": "2460000000000000000000", - "263e57dacbe0149f82fe65a2664898866ff5b463": "38000000000000000000000", - "315db7439fa1d5b423afa7dd7198c1cf74c918bc": "600000000000000000000", - "09b4668696f86a080f8bebb91db8e6f87015915a": "656010000000000000000", - "5c31996dcac015f9be985b611f468730ef244d90": "200000000000000000000", - "b1179589e19db9d41557bbec1cb24ccc2dec1c7f": "100000000000000000000000", - "3b1937d5e793b89b63fb8eb5f1b1c9ca6ba0fa8e": "2000000000000000000000", - "c9127b7f6629ee13fc3f60bc2f4467a20745a762": "16465639000000000000000", - "7306de0e288b56cfdf987ef0d3cc29660793f6dd": "508060000000000000000", - "2aa192777ca5b978b6b2c2ff800ac1860f753f47": "335000000000000000000", - "55da9dcdca61cbfe1f133c7bcefc867b9c8122f9": "880000000000000000000", - "cdd9efac4d6d60bd71d95585dce5d59705c13564": "100000000000000000000", - "ad8e48a377695de014363a523a28b1a40c78f208": "1000000000000000000000", - "252b6555afdc80f2d96d972d17db84ea5ad521ac": "7880000000000000000000", - "60ab71cd26ea6d6e59a7a0f627ee079c885ebbf6": "26740000000000000000", - "f40b134fea22c6b29c8457f49f000f9cda789adb": "600000000000000000000", - "85a2f6ea94d05e8c1d9ae2f4910338a358e98ded": "2000000000000000000000", - "ae13a08511110f32e53be4127845c843a1a57c7b": "500000000000000000000", - "40db1ba585ce34531edec5494849391381e6ccd3": "1790000000000000000000", - "0c5589a7a89b9ad15b02751930415948a875fbef": "126000000000000000000", - "89054430dcdc28ac15fa635ef87c105e602bf70c": "108000000000000000000", - "6c882c27732cef5c7c13a686f0a2ea77555ac289": "100000000000000000000000", - "de374299c1d07d79537385190f442ef9ca24061f": "133700000000000000000", - "b146a0b925553cf06fcaf54a1b4dfea621290757": "2000200000000000000000", - "09ae49e37f121df5dc158cfde806f173a06b0c7f": "3988000000000000000000", - "b758896f1baa864f17ebed16d953886fee68aae6": "1000000000000000000000", - "30730466b8eb6dc90d5496aa76a3472d7dbe0bbe": "1999800000000000000000", - "fc02734033e57f70517e0afc7ee62461f06fad8e": "394000000000000000000", - "a9b2d2e0494eab18e07d37bbb856d80e80f84cd3": "10000000000000000000000", - "95278b08dee7c0f2c8c0f722f9fcbbb9a5241fda": "2408672000000000000000", - "dab6bcdb83cf24a0ae1cb21b3b5b83c2f3824927": "50000000000000000000000", - "94439ca9cc169a79d4a09cae5e67764a6f871a21": "240000000000000000000", - "e06c29a81517e0d487b67fb0b6aabc4f57368388": "401100000000000000000", - "458e3cc99e947844a18e6a42918fef7e7f5f5eb3": "36400000000000000000000", - "0a9804137803ba6868d93a55f9985fcd540451e4": "13370000000000000000", - "40630024bd2c58d248edd8465617b2bf1647da0e": "1000000000000000000000", - "15224ad1c0face46f9f556e4774a3025ad06bd52": "13370000000000000000", - "2e2810dee44ae4dff3d86342ab126657d653c336": "200000000000000000000", - "48a30de1c919d3fd3180e97d5f2b2a9dbd964d2d": "44000000000000000000", - "46a30b8a808931217445c3f5a93e882c0345b426": "250019000000000000000", - "455396a4bbd9bae8af9fb7c4d64d471db9c24505": "161000000000000000000", - "edfda2d5db98f9380714664d54b4ee971a1cae03": "40044000000000000000", - "f5eadcd2d1b8657a121f33c458a8b13e76b65526": "249828000000000000000", - "90e7070f4d033fe6910c9efe5a278e1fc6234def": "100392000000000000000", - "d55508adbbbe9be81b80f97a6ea89add68da674f": "2000000000000000000000", - "66925de3e43f4b41bf9dadde27d5488ef569ea0d": "39400000000000000000", - "b7c077946674ba9341fb4c747a5d50f5d2da6415": "1000000000000000000000", - "c52d1a0c73c2a1be84915185f8b34faa0adf1de3": "1400001000000000000000", - "79b8aad879dd30567e8778d2d231c8f37ab8734e": "2000000000000000000000", - "3aae4872fd9093cbcad1406f1e8078bab50359e2": "39400000000000000000", - "b2e9d76bf50fc36bf7d3944b63e9ca889b699968": "2660000000000000000000", - "405f596b94b947344c033ce2dcbff12e25b79784": "2000000000000000000000", - "232cb1cd49993c144a3f88b3611e233569a86bd6": "15576000000000000000000", - "9e232c08c14dc1a6ed0b8a3b2868977ba5c17d10": "20000000000000000000", - "095270cc42141dd998ad2862dbd1fe9b44e7e650": "1200000000000000000000", - "15d99468507aa0413fb60dca2adc7f569cb36b54": "2000000000000000000000", - "04852732b4c652f6c2e58eb36587e60a62da14db": "20000000000000000000000", - "ecf24cdd7c22928c441e694de4aa31b0fab59778": "600000000000000000000", - "512b91bbfaa9e581ef683fc90d9db22a8f49f48b": "310000000000000000000000", - "a88577a073fbaf33c4cd202e00ea70ef711b4006": "2000000000000000000000", - "00acc6f082a442828764d11f58d6894ae408f073": "60000000000000000000000", - "0355bcacbd21441e95adeedc30c17218c8a408ce": "400000000000000000000", - "4e73cf2379f124860f73d6d91bf59acc5cfc845b": "40110000000000000000", - "2a742b8910941e0932830a1d9692cfd28494cf40": "499986000000000000000", - "41a8c2830081b102df6e0131657c07ab635b54ce": "1999944000000000000000", - "b63064bd3355e6e07e2d377024125a33776c4afa": "38800000000000000000000", - "1a25e1c5bc7e5f50ec16f8885f210ea1b938800e": "4000000000000000000000", - "09b59b8698a7fbd3d2f8c73a008988de3e406b2b": "40000000000000000000000", - "c555b93156f09101233c6f7cf6eb3c4f196d3346": "3000000000000000000000", - "12f32c0a1f2daab676fe69abd9e018352d4ccd45": "50000000000000000000", - "5956b28ec7890b76fc061a1feb52d82ae81fb635": "2000000000000000000000", - "c739259e7f85f2659bef5f609ed86b3d596c201e": "200000000000000000000", - "fae92c1370e9e1859a5df83b56d0f586aa3b404c": "106480000000000000000", - "d5a7bec332adde18b3104b5792546aa59b879b52": "2000000000000000000000", - "4f88dfd01091a45a9e2676021e64286cd36b8d34": "1000000000000000000000", - "102c477d69aadba9a0b0f62b7459e17fbb1c1561": "2000000000000000000000", - "34272d5e7574315dcae9abbd317bac90289d4765": "1820000000000000000000", - "fe615d975c0887e0c9113ec7298420a793af8b96": "8000000000000000000000", - "487adf7d70a6740f8d51cbdd68bb3f91c4a5ce68": "66850000000000000000", - "7e5d9993104e4cb545e179a2a3f971f744f98482": "2000000000000000000000", - "5529830a61c1f13c197e550beddfd6bd195c9d02": "10000000000000000000000", - "2f282abbb6d4a3c3cd3b5ca812f7643e80305f06": "1850000000000000000000", - "7352586d021ad0cf77e0e928404a59f374ff4582": "3400000000000000000000", - "03f7b92008813ae0a676eb212814afab35221069": "2000000000000000000000", - "056686078fb6bcf9ba0a8a8dc63a906f5feac0ea": "499800000000000000000", - "8063379a7bf2cb923a84c5093e68dac7f75481c5": "322102000000000000000", - "200264a09f8c68e3e6629795280f56254f8640d0": "20000000000000000000", - "5a891155f50e42074374c739baadf7df2651153a": "4775000000000000000000", - "80022a1207e910911fc92849b069ab0cdad043d3": "13370000000000000000", - "e781ec732d401202bb9bd13860910dd6c29ac0b6": "1240000000000000000000", - "4c2f1afef7c5868c44832fc77cb03b55f89e6d6e": "20000000000000000000000", - "34ff582952ff24458f7b13d51f0b4f987022c1fe": "2804400000000000000000", - "73914b22fc2f131584247d82be4fecbf978ad4ba": "2000000000000000000000", - "562be95aba17c5371fe2ba828799b1f55d2177d6": "38200000000000000000000", - "648f5bd2a2ae8902db37847d1cb0db9390b06248": "7769965000000000000000", - "6a9758743b603eea3aa0524b42889723c4153948": "10100000000000000000000", - "5985c59a449dfc5da787d8244e746c6d70caa55f": "100000000000000000000", - "56ee197f4bbf9f1b0662e41c2bbd9aa1f799e846": "1000000000000000000000", - "d47c242edffea091bc54d57df5d1fdb93101476c": "2914000000000000000000", - "d482e7f68e41f238fe517829de15477fe0f6dd1d": "500000000000000000000", - "05bf4fcfe772e45b826443852e6c351350ce72a2": "8000000000000000000000", - "f10462e58fcc07f39584a187639451167e859201": "169830000000000000000", - "1aa27699cada8dc3a76f7933aa66c71919040e88": "400000000000000000000", - "24046b91da9b61b629cb8b8ec0c351a07e0703e4": "2000000000000000000000", - "41033c1b6d05e1ca89b0948fc64453fbe87ab25e": "1337000000000000000000", - "369822f5578b40dd1f4471706b22cd971352da6b": "346000000000000000000", - "044e853144e3364495e7a69fa1d46abea3ac0964": "49225000000000000000", - "abf728cf9312f22128024e7046c251f5dc5901ed": "29550000000000000000000", - "d781f7fc09184611568570b4986e2c72872b7ed0": "20002000000000000000", - "6bb4a661a33a71d424d49bb5df28622ed4dffcf4": "630400000000000000000", - "fef3b3dead1a6926d49aa32b12c22af54d9ff985": "1000000000000000000000", - "fa410971ad229c3036f41acf852f2ac999281950": "3997400000000000000000", - "de176b5284bcee3a838ba24f67fc7cbf67d78ef6": "37600000000000000000", - "23120046f6832102a752a76656691c863e17e59c": "329800000000000000000", - "a2f472fe4f22b77db489219ea4023d11582a9329": "40000000000000000000000", - "f0d64cf9df09741133d170485fd24b005011d520": "498680000000000000000", - "8b505e2871f7deb7a63895208e8227dcaa1bff05": "61216600000000000000000", - "481e3a91bfdc2f1c8428a0119d03a41601417e1c": "1000000000000000000000", - "bc69a0d2a31c3dbf7a9122116901b2bdfe9802a0": "3000000000000000000000", - "20a81680e465f88790f0074f60b4f35f5d1e6aa5": "1279851000000000000000", - "194a6bb302b8aba7a5b579df93e0df1574967625": "500000000000000000000", - "264cc8086a8710f91b21720905912cd7964ae868": "26740000000000000000", - "24aca08d5be85ebb9f3132dfc1b620824edfedf9": "18200000000000000000", - "1851a063ccdb30549077f1d139e72de7971197d5": "2000000000000000000000", - "f64a4ac8d540a9289c68d960d5fb7cc45a77831c": "2000000000000000000000", - "c3db5657bb72f10d58f231fddf11980aff678693": "5910000000000000000000", - "b46ace865e2c50ea4698d216ab455dff5a11cd72": "1000000000000000000000", - "9faea13c733412dc4b490402bfef27a0397a9bc3": "310000000000000000000", - "b40594c4f3664ef849cca6227b8a25aa690925ee": "4000000000000000000000", - "672fa0a019088db3166f6119438d07a99f8ba224": "13370000000000000000000", - "c1ffad07db96138c4b2a530ec1c7de29b8a0592c": "17600000000000000000", - "87af25d3f6f8eea15313d5fe4557e810c524c083": "19700000000000000000000", - "d6a22e598dabd38ea6e958bd79d48ddd9604f4df": "1000000000000000000000", - "a2a435de44a01bd0ecb29e44e47644e46a0cdffb": "500171000000000000000", - "549b47649cfad993e4064d2636a4baa0623305cc": "601650000000000000000", - "1321b605026f4ffb296a3e0edcb390c9c85608b7": "2000000000000000000000", - "b4bf24cb83686bc469869fefb044b909716993e2": "2000000000000000000000", - "12d91a92d74fc861a729646db192a125b79f5374": "18200000000000000000", - "7f0662b410298c99f311d3a1454a1eedba2fea76": "200000000000000000000", - "83908aa7478a6d1c9b9b0281148f8f9f242b9fdc": "2000000000000000000000", - "c1438c99dd51ef1ca8386af0a317e9b041457888": "223500000000000000000", - "545bb070e781172eb1608af7fc2895d6cb87197e": "2244000000000000000000", - "161d26ef6759ba5b9f20fdcd66f16132c352415e": "2000000000000000000000", - "d7f370d4bed9d57c6f49c999de729ee569d3f4e4": "200000000000000000000", - "90e35aabb2deef408bb9b5acef714457dfde6272": "100076000000000000000", - "0fcfc4065008cfd323305f6286b57a4dd7eee23b": "20000000000000000000000", - "cd725d70be97e677e3c8e85c0b26ef31e9955045": "1337000000000000000000", - "dcf6b657266e91a4dae6033ddac15332dd8d2b34": "1760000000000000000000", - "31f006f3494ed6c16eb92aaf9044fa8abb5fd5a3": "500000000000000000000", - "cdea386f9d0fd804d02818f237b7d9fa7646d35e": "3012139000000000000000", - "d45b3341e8f15c80329320c3977e3b90e7826a7e": "500000000000000000000", - "0b649da3b96a102cdc6db652a0c07d65b1e443e6": "2000000000000000000000", - "0a58fddd71898de773a74fdae45e7bd84ef43646": "20000000000000000000", - "0256149f5b5063bea14e15661ffb58f9b459a957": "704000000000000000000", - "4438e880cb2766b0c1ceaec9d2418fceb952a044": "133712000000000000000", - "9ed80eda7f55054db9fb5282451688f26bb374c1": "300000000000000000000", - "8dab948ae81da301d972e3f617a912e5a753712e": "400000000000000000000", - "5b5d8c8eed6c85ac215661de026676823faa0a0c": "20000000000000000000000", - "46722a36a01e841d03f780935e917d85d5a67abd": "14900000000000000000", - "d4b8bdf3df9a51b0b91d16abbea05bb4783c8661": "1000000000000000000000", - "98f6b8e6213dbc9a5581f4cce6655f95252bdb07": "319968000000000000000", - "3599493ce65772cf93e98af1195ec0955dc98002": "1500048000000000000000", - "ecab5aba5b828de1705381f38bc744b32ba1b437": "940000000000000000000", - "9a82826d3c29481dcc2bd2950047e8b60486c338": "20000000000000000000000", - "6c474bc66a54780066aa4f512eefa773abf919c7": "94000000000000000000", - "d5903e9978ee20a38c3f498d63d57f31a39f6a06": "10380000000000000000000", - "341480cc8cb476f8d01ff30812e7c70e05afaf5d": "2000000000000000000000", - "af771039345a343001bc0f8a5923b126b60d509c": "985000000000000000000", - "b5a4679685fa14196c2e9230c8c4e33bffbc10e2": "1400000000000000000000", - "2a400dff8594de7228b4fd15c32322b75bb87da8": "95810000000000000000", - "a1336dfb96b6bcbe4b3edf3205be5723c90fad52": "5000000000000000000000", - "e9b1f1fca3fa47269f21b061c353b7f5e96d905a": "500000000000000000000", - "0ee414940487fd24e390378285c5d7b9334d8b65": "2680000000000000000000", - "6ab5b4c41cddb829690c2fda7f20c85e629dd5d5": "1860000000000000000000", - "dd63042f25ed32884ad26e3ad959eb94ea36bf67": "21340000000000000000000", - "c0b3f244bca7b7de5b48a53edb9cbeab0b6d88c0": "5820000000000000000000", - "ed1a5c43c574d4e934299b24f1472cdc9fd6f010": "200000000000000000000", - "b2d9ab9664bcf6df203c346fc692fd9cbab9205e": "438000000000000000000", - "ede8c2cb876fbe8a4cca8290361a7ea01a69fdf8": "7813091000000000000000", - "6a7c252042e7468a3ff773d6450bba85efa26391": "500000000000000000000", - "a106e6923edd53ca8ed650968a9108d6ccfd9670": "9499935000000000000000", - "031e25db516b0f099faebfd94f890cf96660836b": "2000000000000000000000", - "7fdbc3a844e40d96b2f3a635322e6065f4ca0e84": "2000000000000000000000", - "df47a61b72535193c561cccc75c3f3ce0804a20e": "398000000000000000000", - "ed31305c319f9273d3936d8f5b2f71e9b1b22963": "100000000000000000000", - "a6b2d573297360102c07a18fc21df2e7499ff4eb": "4011000000000000000000", - "f68464bf64f2411356e4d3250efefe5c50a5f65b": "20000000000000000000", - "927cc2bfda0e088d02eff70b38b08aa53cc30941": "1852700000000000000000", - "41cb9896445f70a10a14215296daf614e32cf4d5": "1910000000000000000000", - "3ad70243d88bf0400f57c8c1fd57811848af162a": "860000000000000000000", - "63b9754d75d12d384039ec69063c0be210d5e0e3": "2694055000000000000000", - "ad1799aad7602b4540cd832f9db5f11150f1687a": "2000000000000000000000", - "a8b65ba3171a3f77a6350b9daf1f8d55b4d201eb": "745000000000000000000", - "ad0a4ae478e9636e88c604f242cf5439c6d45639": "3520000000000000000000", - "4cd0b0a6436362595ceade052ebc9b929fb6c6c0": "2000000000000000000000", - "c1d4af38e9ba799040894849b8a8219375f1ac78": "20000000000000000000000", - "49ddee902e1d0c99d1b11af3cc8a96f78e4dcf1a": "199358000000000000000", - "ae842210f44d14c4a4db91fc9d3b3b50014f7bf7": "4000000000000000000000", - "10a1c42dc1ba746986b985a522a73c93eae64c63": "1000000000000000000000", - "5103bc09933e9921fd53dc536f11f05d0d47107d": "4000000000000000000000", - "c88eec54d305c928cc2848c2fee23531acb96d49": "1999946000000000000000", - "9a2ce43b5d89d6936b8e8c354791b8afff962425": "2000000000000000000000", - "562020e3ed792d2f1835fe5f55417d5111460c6a": "20000000000000000000000", - "ed16ce39feef3bd7f5d162045e0f67c0f00046bb": "20000000000000000000", - "ab948a4ae3795cbca13126e19253bdc21d3a8514": "200000000000000000000", - "c12b7f40df9a2f7bf983661422ab84c9c1f50858": "8000000000000000000000", - "62e6b2f5eb94fa7a43831fc87e254a3fe3bf8f89": "250000000000000000000", - "423bca47abc00c7057e3ad34fca63e375fbd8b4a": "18000000000000000000000", - "5ff326cd60fd136b245e29e9087a6ad3a6527f0d": "1880000000000000000000", - "79ffb4ac13812a0b78c4a37b8275223e176bfda5": "17300000000000000000", - "f757fc8720d3c4fa5277075e60bd5c411aebd977": "2000000000000000000000", - "0bdbc54cc8bdbbb402a08911e2232a5460ce866b": "3000000000000000000000", - "9ee9760cc273d4706aa08375c3e46fa230aff3d5": "8950000000000000000000", - "d23a24d7f9468343c143a41d73b88f7cbe63be5e": "200000000000000000000", - "46d80631284203f6288ecd4e5758bb9d41d05dbe": "2000000000000000000000", - "3f4cd1399f8a34eddb9a17a471fc922b5870aafc": "200000000000000000000", - "44c54eaa8ac940f9e80f1e74e82fc14f1676856a": "7880000000000000000000", - "aec27ff5d7f9ddda91183f46f9d52543b6cd2b2f": "450000000000000000000", - "203c6283f20df7bc86542fdfb4e763ecdbbbeef5": "25000000000000000000000", - "bcaf347918efb2d63dde03e39275bbe97d26df50": "100000000000000000000", - "974d0541ab4a47ec7f75369c0069b64a1b817710": "400000000000000000000", - "5da54785c9bd30575c89deb59d2041d20a39e17b": "1967031000000000000000", - "1fb463a0389983df7d593f7bdd6d78497fed8879": "20000000000000000000", - "6e1ea4b183e252c9bb7767a006d4b43696cb8ae9": "294245000000000000000", - "c2aa74847e86edfdd3f3db22f8a2152feee5b7f7": "2048852000000000000000", - "a13b9d82a99b3c9bba5ae72ef2199edc7d3bb36c": "1999944000000000000000", - "5135fb8757600cf474546252f74dc0746d06262c": "2000000000000000000000", - "43e7ec846358d7d0f937ad1c350ba069d7bf72bf": "118800000000000000000", - "f2ed3e77254acb83231dc0860e1a11242ba627db": "1980000000000000000000", - "c0a02ab94ebe56d045b41b629b98462e3a024a93": "100000000000000000000", - "f21549bdd1487912f900a7523db5f7626121bba3": "10000000000000000000000", - "886d0a9e17c9c095af2ea2358b89ec705212ee94": "28000000000000000000", - "211b29cefc79ae976744fdebcebd3cbb32c51303": "14000000000000000000000", - "b8c2703d8c3f2f44c584bc10e7c0a6b64c1c097e": "5550000000000000000000", - "ec30addd895b82ee319e54fb04cb2bb03971f36b": "2000000000000000000000", - "b71b62f4b448c02b1201cb5e394ae627b0a560ee": "500000000000000000000", - "e1334e998379dfe983177062791b90f80ee22d8d": "500000000000000000000", - "1d633097a85225a1ff4321b12988fdd55c2b3844": "4000000000000000000000", - "8bd8d4c4e943f6c8073921dc17e3e8d7a0761627": "2933330000000000000000", - "a5d96e697d46358d119af7819dc7087f6ae47fef": "14605131000000000000000", - "d0809498c548047a1e2a2aa6a29cd61a0ee268bd": "2000000000000000000000", - "3cd6b7593cbee77830a8b19d0801958fcd4bc57a": "500000000000000000000", - "ead4d2eefb76abae5533961edd11400406b298fc": "3880000000000000000000", - "6331028cbb5a21485bc51b565142993bdb2582a9": "534800000000000000000", - "163bad4a122b457d64e8150a413eae4d07023e6b": "18800000000000000000", - "c522e20fbf04ed7f6b05a37b4718d6fce0142e1a": "4000000000000000000000", - "2d9bad6f1ee02a70f1f13def5cccb27a9a274031": "1790000000000000000000", - "5ed0d6338559ef44dc7a61edeb893fa5d83fa1b5": "220000000000000000000", - "ec8c1d7b6aaccd429db3a91ee4c9eb1ca4f6f73c": "4250000000000000000000", - "3896ad743579d38e2302454d1fb6e2ab69e01bfd": "1880000000000000000000", - "e73ccf436725c151e255ccf5210cfce5a43f13e3": "19982000000000000000", - "9483d98f14a33fdc118d403955c29935edfc5f70": "459600000000000000000", - "1cfcf7517f0c08459720942b647ad192aa9c8828": "800000000000000000000", - "8d378f0edc0bb0f0686d6a20be6a7692c4fa24b8": "100000000000000000000", - "06f68de3d739db41121eacf779aada3de8762107": "28000000000000000000", - "9909650dd5b1397b8b8b0eb69499b291b0ad1213": "200000000000000000000", - "b66675142e3111a1c2ea1eb2419cfa42aaf7a234": "1000000000000000000000", - "7836f7ef6bc7bd0ff3acaf449c84dd6b1e2c939f": "4142296000000000000000", - "3ddedbe48923fbf9e536bf9ffb0747c9cdd39eef": "16100000000000000000000", - "c47d610b399250f70ecf1389bab6292c91264f23": "288800000000000000000", - "51a6d627f66a8923d88d6094c4715380d3057cb6": "1152044000000000000000", - "6c0cc917cbee7d7c099763f14e64df7d34e2bf09": "250000000000000000000", - "aaaae68b321402c8ebc13468f341c63c0cf03fce": "1520000000000000000000", - "819cdaa5303678ef7cec59d48c82163acc60b952": "14523448000000000000000", - "d071192966eb69c3520fca3aa4dd04297ea04b4e": "110000000000000000000", - "e53425d8df1f11c341ff58ae5f1438abf1ca53cf": "322000000000000000000", - "8ffe322997b8e404422d19c54aadb18f5bc8e9b7": "3940000000000000000000", - "305f78d618b990b4295bac8a2dfa262884f804ea": "4000000000000000000000", - "274d69170fe7141401882b886ac4618c6ae40edb": "955000000000000000000", - "69c94e07c4a9be3384d95dfa3cb9290051873b7b": "70000000000000000000", - "859c600cf13d1d0273d5d1da3cd789e495899f27": "2674000000000000000000", - "c06cebbbf7f5149a66f7eb976b3e47d56516da2f": "2000000000000000000000", - "37bbc47212d82fcb5ee08f5225ecc2041ad2da7d": "3280000000000000000000", - "11e7997edd904503d77da6038ab0a4c834bbd563": "388000000000000000000", - "d333627445f2d787901ef33bb2a8a3675e27ffec": "400000000000000000000", - "16a58e985dccd707a594d193e7cca78b5d027849": "1360000000000000000000", - "f8ae857b67a4a2893a3fbe7c7a87ff1c01c6a6e7": "4000000000000000000000", - "491561db8b6fafb9007e62d050c282e92c4b6bc8": "30000000000000000000000", - "21df1ec24b4e4bfe79b0c095cebae198f291fbd1": "20000000000000000000000", - "e208812a684098f3da4efe6aba256256adfe3fe6": "2000000000000000000000", - "f4ec8e97a20aa5f8dd206f55207e06b813df2cc0": "200000000000000000000", - "29eb7eefdae9feb449c63ff5f279d67510eb1422": "19400000000000000000", - "0d678706d037187f3e22e6f69b99a592d11ebc59": "1580000000000000000000", - "de6d363106cc6238d2f092f0f0372136d1cd50c6": "5348000000000000000000", - "c8710d7e8b5a3bd69a42fe0fa8b87c357fddcdc8": "4000000000000000000000", - "5267f4d41292f370863c90d793296903843625c7": "1400000000000000000000", - "4cda41dd533991290794e22ae324143e309b3d3d": "2400000000000000000000", - "f8a50cee2e688ceee3aca4d4a29725d4072cc483": "2000000000000000000000", - "5ed3bbc05240e0d399eb6ddfe60f62de4d9509af": "193999806000000000000000", - "0befb54707f61b2c9fb04715ab026e1bb72042bd": "4000000000000000000000", - "cab9a301e6bd46e940355028eccd40ce4d5a1ac3": "400000000000000000000", - "64672da3ab052821a0243d1ce4b6e0a36517b8eb": "200000000000000000000", - "eac0827eff0c6e3ff28a7d4a54f65cb7689d7b99": "2856500000000000000000", - "f4b6cdcfcb24230b337d770df6034dfbd4e1503f": "19000000000000000000000", - "7be2f7680c802da6154c92c0194ae732517a7169": "18200000000000000000", - "869f1aa30e4455beb1822091de5cadec79a8f946": "8000000000000000000000", - "c4681e73bb0e32f6b726204831ff69baa4877e32": "1820000000000000000000", - "962cd22a8edf1e4f4e55b4b15ddbfb5d9d541971": "2000000000000000000000", - "131df8d330eb7cc7147d0a55576f05de8d26a8b7": "188000000000000000000", - "19f99f2c0b46ce8906875dc9f90ae104dae35594": "4507300000000000000000", - "91bb3f79022bf3c453f4ff256e269b15cf2c9cbd": "1519000000000000000000", - "7301dc4cf26d7186f2a11bf8b08bf229463f64a3": "2000000000000000000000", - "7cbca88fca6a0060b960985c9aa1b02534dc2208": "462500000000000000000", - "f3c1abd29dc57b41dc192d0e384d021df0b4f6d4": "2798000000000000000000", - "5d32f6f86e787ff78e63d78b0ef95fe6071852b8": "401100000000000000000", - "1678c5f2a522393225196361894f53cc752fe2f3": "1936000000000000000000", - "1cf04cb14380059efd3f238b65d5beb86afa14d8": "20000000000000000000", - "52e1731350f983cc2c4189842fde0613fad50ce1": "11640000000000000000000", - "d0b11d6f2bce945e0c6a5020c3b52753f803f9d1": "200000000000000000000", - "409bd75085821c1de70cdc3b11ffc3d923c74010": "4000000000000000000000", - "0bb7160aba293762f8734f3e0326ffc9a4cac190": "1000000000000000000000", - "7aad4dbcd3acf997df93586956f72b64d8ad94ee": "4000000000000000000000", - "2dec98329d1f96c3a59caa7981755452d4da49d5": "200000000000000000000", - "c18ab467feb5a0aadfff91230ff056464d78d800": "2000000000000000000000", - "c90c3765156bca8e4897ab802419153cbe5225a9": "200000000000000000000", - "85c8f3cc7a354feac99a5e7bfe7cdfa351cfe355": "400000000000000000000", - "f4fc4d39bc0c2c4068a36de50e4ab4d4db7e340a": "25380000000000000000", - "f50abbd4aa45d3eb88515465a8ba0b310fd9b521": "6685000000000000000000", - "4d200110124008d56f76981256420c946a6ff45c": "199955000000000000000", - "f4ba6a46d55140c439cbcf076cc657136262f4f8": "2000000000000000000000", - "fa7adf660b8d99ce15933d7c5f072f3cbeb99d33": "5910000000000000000000", - "84503334630d77f74147f68b2e086613c8f1ade9": "1600000000000000000000", - "31ed858788bda4d5270992221cc04206ec62610d": "1176000000000000000000", - "bfbca418d3529cb393081062032a6e1183c6b2dc": "8000000000000000000000", - "8263ece5d709e0d7ae71cca868ed37cd2fef807b": "990000000000000000000", - "23ba3864da583dab56f420873c37679690e02f00": "9800000000000000000000", - "cedcb3a1d6843fb6bef643617deaf38f8e98dd5f": "477500000000000000000", - "8fac748f784a0fed68dba43319b42a75b4649c6e": "910000000000000000000", - "18b8bcf98321da61fb4e3eacc1ec5417272dc27e": "880000000000000000000", - "776943ffb2ef5cdd35b83c28bc046bd4f4677098": "3000000000000000000000", - "fb8113f94d9173eefd5a3073f516803a10b286ae": "80000000000000000000", - "3e8349b67f5745449f659367d9ad4712db5b895a": "1820000000000000000000", - "79cfa9780ae6d87b2c31883f09276986c89a6735": "1000000000000000000000", - "5006fe4c22173980f00c74342b39cd231c653129": "2000000000000000000000", - "13848b46ea75beb7eaa85f59d866d77fd24cf21a": "50000000000000000000000", - "d64a2d50f8858537188a24e0f50df1681ab07ed7": "38800000000000000000000", - "4f9ce2af9b8c5e42c6808a3870ec576f313545d1": "10000000000000000000000", - "8764d02722000996ecd475b433298e9f540b05bf": "200000000000000000000", - "3b7c77dbe95dc2602ce3269a9545d04965fefdbd": "2000000000000000000000", - "c9dcbb056f4db7d9da39936202c5bd8230b3b477": "20000000000000000000000", - "9ecbabb0b22782b3754429e1757aaba04b81189f": "823743000000000000000", - "831c44b3084047184b2ad218680640903750c45d": "1970000000000000000000", - "ff8eb07de3d49d9d52bbe8e5b26dbe1d160fa834": "3986000000000000000000", - "8ccf3aa21ab742576ad8c422f71bb188591dea8a": "1000000000000000000000", - "ddac312a9655426a9c0c9efa3fd82559ef4505bf": "401100000000000000000", - "9a3e2b1bf346dd070b027357feac44a4b2c97db8": "10000000000000000000000", - "69d39d510889e552a396135bfcdb06e37e387633": "4000000000000000000000", - "83a3148833d9644984f7c475a7850716efb480ff": "3400000000000000000000", - "62b4a9226e61683c72c183254690daf511b4117a": "260000000000000000000", - "50763add868fd7361178342fc055eaa2b95f6846": "66838000000000000000", - "91898eab8c05c0222883cd4db23b7795e1a24ad7": "2000000000000000000000", - "066647cfc85d23d37605573d208ca154b244d76c": "10000000000000000000000", - "aaf9ee4b886c6d1e95496fd274235bf4ecfcb07d": "1400000000000000000000", - "06860a93525955ff624940fadcffb8e149fd599c": "1999800000000000000000", - "e81c2d346c0adf4cc56708f6394ba6c8c8a64a1e": "2000000000000000000000", - "41a8e236a30e6d63c1ff644d132aa25c89537e01": "20000000000000000000", - "6a679e378fdce6bfd97fe62f043c6f6405d79e99": "4000000000000000000000", - "933436c8472655f64c3afaaf7c4c621c83a62b38": "1000000000000000000000", - "abe07ced6ac5ddf991eff6c3da226a741bd243fe": "10000000000000000000000", - "bb56a404723cff20d0685488b05a02cdc35aacaa": "20000000000000000000", - "0d551ec1a2133c981d5fc6a8c8173f9e7c4f47af": "2000000000000000000000", - "23376ecabf746ce53321cf42c86649b92b67b2ff": "2000000000000000000000", - "644ba6c61082e989109f5c11d4b40e991660d403": "4000000000000000000000", - "680d5911ed8dd9eec45c060c223f89a7f620bbd5": "20000000000000000000000", - "cb1bb6f1da5eb10d4899f7e61d06c1b00fdfb52d": "1038000000000000000000", - "303a30ac4286ae17cf483dad7b870c6bd64d7b4a": "500000000000000000000", - "7b0b31ff6e24745ead8ed9bb85fc0bf2fe1d55d4": "800000000000000000000", - "854691ce714f325ced55ce5928ce9ba12facd1b8": "4380000000000000000000", - "a13cfe826d6d1841dcae443be8c387518136b5e8": "140000000000000000000000", - "5fcd84546896dd081db1a320bd4d8c1dd1528c4c": "20000000000000000000", - "3db5fe6a68bd3612ac15a99a61e555928eeceaf3": "1580000000000000000000", - "7a79e30ff057f70a3d0191f7f53f761537af7dff": "400000000000000000000", - "3d3fad49c9e5d2759c8e8e5a7a4d60a0dd135692": "20000000000000000000", - "05a830724302bc0f6ebdaa1ebeeeb46e6ce00b39": "98500000000000000000", - "e4b6ae22c7735f5b89f34dd77ad0975f0acc9181": "1000000000000000000000", - "3f2dd55db7eab0ebee65b33ed8202c1e992e958b": "820000000000000000000", - "395d6d255520a8db29abc47d83a5db8a1a7df087": "100000000000000000000", - "1cc90876004109cd79a3dea866cb840ac364ba1b": "2000000000000000000000", - "c83e9d6a58253beebeb793e6f28b054a58491b74": "281800000000000000000", - "901d99b699e5c6911519cb2076b4c76330c54d22": "2000000000000000000000", - "3a9132b7093d3ec42e1e4fb8cb31ecdd43ae773c": "2000000000000000000000", - "b41eaf5d51a5ba1ba39bb418dbb54fab750efb1f": "1000000000000000000000", - "aa493d3f4fb866491cf8f800efb7e2324ed7cfe5": "1700000000000000000000", - "509982f56237ee458951047e0a2230f804e2e895": "17500000000000000000000", - "316e92a91bbda68b9e2f98b3c048934e3cc0b416": "2000000000000000000000", - "a3430e1f647f321ed34739562323c7d623410b56": "999942000000000000000", - "fca43bbc23a0d321ba9e46b929735ce7d8ef0c18": "20000000000000000000", - "ff45cb34c928364d9cc9d8bb00373474618f06f3": "100000000000000000000", - "8c999591fd72ef7111efca7a9e97a2356b3b000a": "4084000000000000000000", - "8579dadf1a395a3471e20b6f763d9a0ff19a3f6f": "4000000000000000000000", - "c8d4e1599d03b79809e0130a8dc38408f05e8cd3": "2945500000000000000000", - "2abce1808940cd4ef5b5e05285f82df7a9ab5e03": "9800000000000000000000", - "0bb0c12682a2f15c9b5741b2385cbe41f034068e": "1500000000000000000000", - "08b7bdcf944d5570838be70460243a8694485858": "2000000000000000000000", - "c452e0e4b3d6ae06b836f032ca09db409ddfe0fb": "800000000000000000000", - "48d4f2468f963fd79a006198bb67895d2d5aa4d3": "1400000000000000000000", - "f9e7222faaf0f4da40c1c4a40630373a09bed7b6": "2865000000000000000000", - "bf59aee281fa43fe97194351a9857e01a3b897b2": "600000000000000000000", - "da0d4b7ef91fb55ad265f251142067f10376ced6": "20000000000000000000000", - "2c6f5c124cc789f8bb398e3f889751bc4b602d9e": "24928000000000000000", - "c85ef27d820403805fc9ed259fff64acb8d6346a": "2000000000000000000000", - "9aa8308f42910e5ade09c1a5e282d6d91710bdbf": "200000000000000000000", - "9e4cec353ac3e381835e3c0991f8faa5b7d0a8e6": "9999917000000000000000", - "137cf341e8516c815814ebcd73e6569af14cf7bc": "1000000000000000000000", - "889da662eb4a0a2a069d2bc24b05b4ee2e92c41b": "1663417000000000000000", - "0998d8273115b56af43c505e087aff0676ed3659": "3999984000000000000000", - "3e4d13c55a84e46ed7e9cb90fd355e8ad991e38f": "1000000000000000000000", - "abc068b4979b0ea64a62d3b7aa897d73810dc533": "1970000000000000000000", - "d8fdf546674738c984d8fab857880b3e4280c09e": "20000000000000000000", - "aff161740a6d909fe99c59a9b77945c91cc91448": "60000000000000000000", - "92ad1b3d75fba67d54663da9fc848a8ade10fa67": "2000000000000000000000", - "819eb4990b5aba5547093da12b6b3c1093df6d46": "1000000000000000000000", - "643d9aeed4b180947ed2b9207cce4c3ddc55e1f7": "200000000000000000000", - "ab3e62e77a8b225e411592b1af300752fe412463": "9850000000000000000000", - "650b425555e4e4c51718146836a2c1ee77a5b421": "20000000000000000000000", - "ba8e46d69d2e2343d86c60d82cf42c2041a0c1c2": "100000000000000000000", - "f9570e924c95debb7061369792cf2efec2a82d5e": "20000000000000000000", - "4dc4bf5e7589c47b28378d7503cf96488061dbbd": "1760000000000000000000", - "3d7ea5bf03528100ed8af8aed2653e921b6e6725": "1000000000000000000000", - "a02bde6461686e19ac650c970d0672e76dcb4fc2": "8865000000000000000000", - "b0e760bb07c081777345e0578e8bc898226d4e3b": "2000000000000000000000", - "979cbf21dfec8ace3f1c196d82df962534df394f": "2832860000000000000000", - "9f8245c3ab7d173164861cd3991b94f1ba40a93a": "2860000000000000000000", - "c25cf826550c8eaf10af2234fef904ddb95213be": "1000000000000000000000", - "967bfaf76243cdb9403c67d2ceefdee90a3feb73": "970582000000000000000", - "0b2113504534642a1daf102eee10b9ebde76e261": "2733351000000000000000", - "74bc4a5e2045f4ff8db184cf3a9b0c065ad807d2": "2000000000000000000000", - "f1da40736f99d5df3b068a5d745fafc6463fc9b1": "121546000000000000000", - "0fa6c7b0973d0bae2940540e247d3627e37ca347": "1000000000000000000000", - "72b05962fb2ad589d65ad16a22559eba1458f387": "133700000000000000000", - "6ceae3733d8fa43d6cd80c1a96e8eb93109c83b7": "298000000000000000000", - "28eaea78cd4d95faecfb68836eafe83520f3bbb7": "200000000000000000000", - "f49f6f9baabc018c8f8e119e0115f491fc92a8a4": "10000000000000000000000", - "833316985d47742bfed410604a91953c05fb12b0": "2000000000000000000000", - "ead75016e3a0815072b6b108bcc1b799acf0383e": "2000000000000000000000", - "0032403587947b9f15622a68d104d54d33dbd1cd": "77500000000000000000", - "8f64b9c1246d857831643107d355b5c75fef5d4f": "1999944000000000000000", - "15dcafcc2bace7b55b54c01a1c514626bf61ebd8": "9400000000000000000000", - "6886ada7bbb0617bda842191c68c922ea3a8ac82": "1160000000000000000000", - "f736dc96760012388fe88b66c06efe57e0d7cf0a": "2100000000000000000000", - "0b288a5a8b75f3dc4191eb0457e1c83dbd204d25": "4853000000000000000000", - "56b6c23dd2ec90b4728f3bb2e764c3c50c85f144": "1000000000000000000000", - "6310b020fd98044957995092090f17f04e52cdfd": "1580000000000000000000", - "b0baeb30e313776c4c6d247402ba4167afcda1cc": "1970000000000000000000", - "7641f7d26a86cddb2be13081810e01c9c83c4b20": "13370000000000000000", - "07a8dadec142571a7d53a4297051786d072cba55": "22729000000000000000", - "cc73dd356b4979b579b401d4cc7a31a268ddce5a": "500000000000000000000", - "adf1acfe99bc8c14b304c8d905ba27657b8a7bc4": "20000000000000000000000", - "72dabb5b6eed9e99be915888f6568056381608f8": "208433000000000000000", - "9de20ae76aa08263b205d5142461961e2408d266": "252000000000000000000", - "9d4ff989b7bed9ab109d10c8c7e55f02d76734ad": "1000000000000000000000", - "e58dd23238ee6ea7c2138d385df500c325f376be": "1820000000000000000000", - "4bd6dd0cff23400e1730ba7b894504577d14e74a": "206028000000000000000000", - "35147430c3106500e79fa2f502462e94703c23b1": "1999944000000000000000", - "c0ae14d724832e2fce2778de7f7b8daf7b12a93e": "20000000000000000000", - "b57413060af3f14eb479065f1e9d19b3757ae8cc": "40000000000000000000", - "7d04d2edc058a1afc761d9c99ae4fc5c85d4c8a6": "314807840000000000000000", - "1c94d636e684eb155895ce6db4a2588fba1d001b": "2000000000000000000000", - "c721b2a7aa44c21298e85039d00e2e460e670b9c": "140800000000000000000", - "2d89a8006a4f137a20dc2bec46fe2eb312ea9654": "200000000000000000000", - "646afba71d849e80c0ed59cac519b278e7f7abe4": "1000000000000000000000", - "71f2cdd1b046e2da2fbb5a26723422b8325e25a3": "99960000000000000000", - "2c9fa72c95f37d08e9a36009e7a4b07f29bad41a": "16100000000000000000", - "848fbd29d67cf4a013cb02a4b176ef244e9ee68d": "20116000000000000000", - "68190ca885da4231874c1cfb42b1580a21737f38": "3820000000000000000000", - "9adf458bff3599eee1a26398853c575bc38c6313": "280000000000000000000", - "b72220ade364d0369f2d2da783ca474d7b9b34ce": "499986000000000000000", - "38e2af73393ea98a1d993a74df5cd754b98d529a": "1790000000000000000000", - "4d38d90f83f4515c03cc78326a154d358bd882b7": "185000000000000000000", - "aa8eb0823b07b0e6d20aadda0e95cf3835be192e": "32000000000000000000", - "008639dabbe3aeac887b5dc0e43e13bcd287d76c": "310200000000000000000", - "fa3a0c4b903f6ea52ea7ab7b8863b6a616ad6650": "20000000000000000000", - "e26bf322774e18288769d67e3107deb7447707b8": "2000000000000000000000", - "e061a4f2fc77b296d19ada238e49a5cb8ecbfa70": "4000000000000000000000", - "b320834836d1dbfda9e7a3184d1ad1fd4320ccc0": "1000000000000000000000", - "0ed3bb3a4eb554cfca97947d575507cdfd6d21d8": "547863000000000000000", - "32fa0e86cd087dd68d693190f32d93310909ed53": "4000000000000000000000", - "5b759fa110a31c88469f54d44ba303d57dd3e10f": "1683760000000000000000", - "136f4907cab41e27084b9845069ff2fd0c9ade79": "4000000000000000000000", - "3d89e505cb46e211a53f32f167a877bec87f4b0a": "25019000000000000000", - "57a852fdb9b1405bf53ccf9508f83299d3206c52": "2000000000000000000000", - "747abc9649056d3926044d28c3ad09ed17b67d70": "5000057000000000000000", - "5c29f9e9a523c1f8669448b55c48cbd47c25e610": "964320000000000000000", - "30a9da72574c51e7ee0904ba1f73a6b7b83b9b9d": "20200000000000000000", - "220e2b92c0f6c902b513d9f1e6fab6a8b0def3d7": "800000000000000000000", - "5af7c072b2c5acd71c76addcce535cf7f8f93585": "20000000000000000000", - "81556db27349ab8b27004944ed50a46e941a0f5f": "3998000000000000000000", - "987618c85656207c7bac1507c0ffefa2fb64b092": "64419000000000000000", - "e0f372347c96b55f7d4306034beb83266fd90966": "400000000000000000000", - "71784c105117c1f68935797fe159abc74e43d16a": "2001600000000000000000", - "9284f96ddb47b5186ee558aa31324df5361c0f73": "16000000000000000000000", - "a60c1209754f5d87b181da4f0817a81859ef9fd8": "50000000000000000000", - "5afda9405c8e9736514574da928de67456010918": "6008500000000000000000", - "6978696d5150a9a263513f8f74c696f8b1397cab": "6640000000000000000000", - "a9ad1926bc66bdb331588ea8193788534d982c98": "30000000000000000000000", - "e3f80b40fb83fb97bb0d5230af4f6ed59b1c7cc8": "1337000000000000000000", - "e207578e1f4ddb8ff6d5867b39582d71b9812ac5": "3880000000000000000000", - "86883d54cd3915e549095530f9ab1805e8c5432d": "4000000000000000000000", - "6974c8a414ceaefd3c2e4dfdbef430568d9a960b": "334250000000000000000", - "532d32b00f305bcc24dcef56817d622f34fb2c24": "1800000000000000000000", - "761f8a3a2af0a8bdbe1da009321fb29764eb62a1": "10000000000000000000000", - "4677b04e0343a32131fd6abb39b1b6156bba3d5b": "200000000000000000000", - "ef69781f32ffce33346f2c9ae3f08493f3e82f89": "18200000000000000000", - "e3b3d2c9bf570be6a2f72adca1862c310936a43c": "100100000000000000000", - "d19caf39bb377fdf2cf19bd4fb52591c2631a63c": "1000000000000000000000", - "5d68324bcb776d3ffd0bf9fea91d9f037fd6ab0f": "2000000000000000000000", - "1c99fe9bb6c6d1066d912099547fd1f4809eacd9": "2000000000000000000000", - "bbfe0a830cace87b7293993a7e9496ce64f8e394": "6000000000000000000000", - "26c0054b700d3a7c2dcbe275689d4f4cad16a335": "2000000000000000000000", - "7d7e7c61779adb7706c94d32409a2bb4e994bf60": "865992000000000000000", - "d037d215d11d1df3d54fbd321cd295c5465e273b": "1400000000000000000000", - "08166f02313feae18bb044e7877c808b55b5bf58": "1970000000000000000000", - "781b1501647a2e06c0ed43ff197fccec35e1700b": "3000000000000000000000", - "74316adf25378c10f576d5b41a6f47fa98fce33d": "336082000000000000000", - "44e2fdc679e6bee01e93ef4a3ab1bcce012abc7c": "410231000000000000000", - "178eaf6b8554c45dfde16b78ce0c157f2ee31351": "320000000000000000000", - "cf923a5d8fbc3d01aa079d1cfe4b43ce071b1611": "2000000000000000000000", - "0c28847e4f09dfce5f9b25af7c4e530f59c880fe": "1000000000000000000000", - "54ce88275956def5f9458e3b95decacd484021a0": "2000000000000000000000", - "9d4213339a01551861764c87a93ce8f85f87959a": "200000000000000000000", - "e559b5fd337b9c5572a9bf9e0f2521f7d446dbe4": "200000000000000000000", - "dcb03bfa6c1131234e56b7ea7c4f721487546b7a": "1337000000000000000000", - "db6ff71b3db0928f839e05a7323bfb57d29c87aa": "910000000000000000000", - "eb7c202b462b7cc5855d7484755f6e26ef43a115": "2000000000000000000000", - "323486ca64b375474fb2b759a9e7a135859bd9f6": "400000000000000000000", - "2c1df8a76f48f6b54bcf9caf56f0ee1cf57ab33d": "10118000000000000000000", - "2cd87866568dd81ad47d9d3ad0846e5a65507373": "400000000000000000000", - "8566610901aace38b83244f3a9c831306a67b9dc": "3256000000000000000000", - "1c257ad4a55105ea3b58ed374b198da266c85f63": "10000000000000000000000", - "cf4f1138f1bd6bf5b6d485cce4c1017fcb85f07d": "882038000000000000000", - "c934becaf71f225f8b4a4bf7b197f4ac9630345c": "20000000000000000000000", - "1e2bf4ba8e5ef18d37de6d6ad636c4cae489d0cc": "2000000000000000000000", - "9d78a975b7db5e4d8e28845cfbe7e31401be0dd9": "1340000000000000000000", - "16aa52cb0b554723e7060f21f327b0a68315fea3": "250000000000000000000", - "97e28973b860c567402800fbb63ce39a048a3d79": "97000000000000000000", - "4ac5acad000b8877214cb1ae00eac9a37d59a0fd": "4000000000000000000000", - "01226e0ad8d62277b162621c62c928e96e0b9a8c": "2000000000000000000000", - "479abf2da4d58716fd973a0d13a75f530150260a": "20000000000000000000", - "31d81d526c195e3f10b5c6db52b5e59afbe0a995": "264000000000000000000", - "749087ac0f5a97c6fad021538bf1d6cda18e0daa": "1000000000000000000000", - "1565af837ef3b0bd4e2b23568d5023cd34b16498": "393284000000000000000", - "997d6592a31589acc31b9901fbeb3cc3d65b3215": "2000000000000000000000", - "9d207517422cc0d60de7c237097a4d4fce20940c": "500000000000000000000", - "24b8b446debd1947955dd084f2c544933346d3ad": "4324135000000000000000", - "107a03cf0842dbdeb0618fb587ca69189ec92ff5": "1970000000000000000000", - "7f603aec1759ea5f07c7f8d41a1428fbbaf9e762": "20000000000000000000", - "53a244672895480f4a2b1cdf7da5e5a242ec4dbc": "1000000000000000000000", - "7db4c7d5b797e9296e6382f203693db409449d62": "400000000000000000000", - "2ae82dab92a66389eea1abb901d1d57f5a7cca0b": "2000000000000000000000", - "16bc40215abbd9ae5d280b95b8010b4514ff1292": "200000000000000000000", - "bba4fac3c42039d828e742cde0efffe774941b39": "1999946000000000000000", - "5431ca427e6165a644bae326bd09750a178c650d": "2000000000000000000000", - "dcf33965531380163168fc11f67e89c6f1bc178a": "334885000000000000000", - "65fd02d704a12a4dace9471b0645f962a89671c8": "28615000000000000000", - "135d1719bf03e3f866312479fe338118cd387e70": "2000000000000000000000", - "f3159866c2bc86bba40f9d73bb99f1eee57bb9d7": "1000000000000000000000", - "e3a4621b66004588e31206f718cb00a319889cf0": "2000000000000000000000", - "abcdbc8f1dd13af578d4a4774a62182bedf9f9be": "36660000000000000000", - "9fbe066de57236dc830725d32a02aef9246c6c5e": "2000000000000000000000", - "81cfad760913d3c322fcc77b49c2ae3907e74f6e": "197000000000000000000", - "0ab59d390702c9c059db148eb4f3fcfa7d04c7e7": "18200000000000000000", - "2c2db28c3309375eea3c6d72cd6d0eec145afcc0": "2000000000000000000000", - "08306de51981e7aca1856859b7c778696a6b69f9": "3200000000000000000000", - "f814799f6ddf4dcb29c7ee870e75f9cc2d35326d": "1000000000000000000000", - "ee867d20916bd2e9c9ece08aa04385db667c912e": "50000000000000000000000", - "97a86f01ce3f7cfd4441330e1c9b19e1b10606ef": "2000000000000000000000", - "4c759813ad1386bed27ffae9e4815e3630cca312": "2000000000000000000000", - "8f226096c184ebb40105e08dac4d22e1c2d54d30": "306552000000000000000", - "13acada8980affc7504921be84eb4944c8fbb2bd": "1601600000000000000000", - "122dcfd81addb97d1a0e4925c4b549806e9f3beb": "1514954000000000000000", - "232f525d55859b7d4e608d20487faadb00293135": "4000000000000000000000", - "6f7ac681d45e418fce8b3a1db5bc3be6f06c9849": "2000000000000000000000", - "0c8692eeff2a53d6d1688ed56a9ddbbd68dabba1": "2000000000000000000000", - "6a6337833f8f6a6bf10ca7ec21aa810ed444f4cb": "1028200000000000000000", - "209377b6ad3fe101c9685b3576545c6b1684e73c": "1820000000000000000000", - "560fc08d079f047ed8d7df75551aa53501f57013": "7600000000000000000000", - "8e78f351457d016f4ad2755ec7424e5c21ba6d51": "146000000000000000000", - "2ce11a92fad024ff2b3e87e3b542e6c60dcbd996": "4000000000000000000000", - "8ab839aeaf2ad37cb78bacbbb633bcc5c099dc46": "2000000000000000000000", - "673144f0ec142e770f4834fee0ee311832f3087b": "500038000000000000000", - "ba8a63f3f40de4a88388bc50212fea8e064fbb86": "2000000000000000000000", - "ee899b02cbcb3939cd61de1342d50482abb68532": "1760000000000000000000", - "c2d9eedbc9019263d9d16cc5ae072d1d3dd9db03": "20000000000000000000000", - "355c0c39f5d5700b41d375b3f17851dcd52401f9": "3979000000000000000000", - "8179c80970182cc5b7d82a4df06ea94db63a25f3": "727432000000000000000", - "b388b5dfecd2c5e4b596577c642556dbfe277855": "20000000000000000000", - "a9e28337e6357193d9e2cb236b01be44b81427df": "2200000000000000000000", - "04ba4bb87140022c214a6fac42db5a16dd954045": "1000000000000000000000", - "67c926093e9b8927933810d98222d62e2b8206bb": "1910000000000000000000", - "ed7346766e1a676d0d06ec821867a276a083bf31": "4012890000000000000000", - "92558226b384626cad48e09d966bf1395ee7ea5d": "334250000000000000000", - "bdf693f833c3fe471753184788eb4bfe4adc3f96": "1970000000000000000000", - "4474299d0ee090dc90789a1486489c3d0d645e6d": "1000000000000000000000", - "b1178ad47383c31c8134a1941cbcd474d06244e2": "1000000000000000000000", - "979d681c617da16f21bcaca101ed16ed015ab696": "1880000000000000000000", - "6b20c080606a79c73bd8e75b11717a4e8db3f1c3": "299720000000000000000", - "b85218f342f8012eda9f274e63ce2152b2dcfdab": "3100000000000000000000", - "530b61e42f39426d2408d40852b9e34ab5ebebc5": "267400000000000000000", - "76afc225f4fa307de484552bbe1d9d3f15074c4a": "2998800000000000000000", - "1e783e522ab7df0acaac9eeed3593039e5ac7579": "203435800000000000000000", - "0f7bf6373f771a4601762c4dae5fbbf4fedd9cc9": "2000000000000000000000", - "7a8797690ab77b5470bf7c0c1bba612508e1ac7d": "8865000000000000000000", - "2a2ab6b74c7af1d9476bb5bcb4524797bedc3552": "1000000000000000000000", - "523e140dc811b186dee5d6c88bf68e90b8e096fd": "2000000000000000000000", - "ea8168fbf225e786459ca6bb18d963d26b505309": "500000000000000000000", - "20ff3ede8cadb5c37b48cb14580fb65e23090a7b": "42000000000000000000000", - "e482d255ede56b04c3e8df151f56e9ca62aaa8c2": "500000000000000000000", - "2e0880a34596230720f05ac8f065af8681dcb6c2": "100000000000000000000000", - "c674f28c8afd073f8b799691b2f0584df942e844": "2000000000000000000000", - "b646df98b49442746b61525c81a3b04ba3106250": "1970000000000000000000", - "d55c1c8dfbe1e02cacbca60fdbdd405b09f0b75f": "2000000000000000000000", - "65ebaed27edb9dcc1957aee5f452ac2105a65c0e": "43531987000000000000000", - "f079e1b1265f50e8c8a98ec0c7815eb3aeac9eb4": "20094000000000000000", - "867eba56748a5904350d2ca2a5ce9ca00b670a9b": "20000000000000000000000", - "51ee0cca3bcb10cd3e983722ced8493d926c0866": "999972000000000000000", - "88d541c840ce43cefbaf6d19af6b9859b573c145": "170000000000000000000", - "f851b010f633c40af1a8f06a73ebbaab65077ab5": "4400000000000000000000", - "e0aa69365555b73f282333d1e30c1bbd072854e8": "7000000000000000000000", - "c7b1c83e63203f9547263ef6282e7da33b6ed659": "18200000000000000000", - "af06f5fa6d1214ec43967d1bd4dde74ab814a938": "88000000000000000000", - "991173601947c2084a62d639527e961512579af9": "600000000000000000000", - "7a381122bada791a7ab1f6037dac80432753baad": "10000000000000000000000", - "e766f34ff16f3cfcc97321721f43ddf5a38b0cf4": "1550000000000000000000", - "d785a8f18c38b9bc4ffb9b8fa8c7727bd642ee1c": "1000000000000000000000", - "aebd4f205de799b64b3564b256d42a711d37ef99": "1177100000000000000000", - "a2fa17c0fb506ce494008b9557841c3f641b8cae": "20000000000000000000", - "a8aca748f9d312ec747f8b6578142694c7e9f399": "2000000000000000000000", - "950c68a40988154d2393fff8da7ccda99614f72c": "4597943000000000000000", - "075d15e2d33d8b4fa7dba8b9e607f04a261e340b": "1910000000000000000000", - "3616d448985f5d32aefa8b93a993e094bd854986": "205400000000000000000", - "4bb9655cfb2a36ea7c637a7b859b4a3154e26ebe": "16000000000000000000000", - "84949dba559a63bfc845ded06e9f2d9b7f11ef24": "2000000000000000000000", - "937563d8a80fd5a537b0e66d20a02525d5d88660": "2500000000000000000000", - "b183ebee4fcb42c220e47774f59d6c54d5e32ab1": "1604266000000000000000", - "21e5d77320304c201c1e53b261a123d0a1063e81": "86972000000000000000", - "fa14b566234abee73042c31d21717182cba14aa1": "328000000000000000000", - "2da617695009cc57d26ad490b32a5dfbeb934e5e": "20000000000000000000000", - "3326b88de806184454c40b27f309d9dd6dcfb978": "17900000000000000000000", - "95e6a54b2d5f67a24a4875af75107ca7ea9fd2fa": "1337000000000000000000", - "8db58e406e202df9bc703c480bd8ed248d52a032": "2000000000000000000000", - "f777361a3dd8ab62e5f1b9b047568cc0b555704c": "1000000000000000000000", - "83a93b5ba41bf88720e415790cdc0b67b4af34c4": "200000000000000000000", - "8a1cc5ac111c49bfcfd848f37dd768aa65c88802": "10000000000000000000000", - "52214378b54004056a7cc08c891327798ac6b248": "15200000000000000000000", - "ad80d865b85c34d2e6494b2e7aefea6b9af184db": "4000000000000000000000", - "e7d6240620f42c5edbb2ede6aec43da4ed9b5757": "1000000000000000000000", - "d0e35e047646e759f4517093d6408642517f084d": "3939507000000000000000", - "9340345ca6a3eabdb77363f2586043f29438ce0b": "530922000000000000000", - "6640ccf053555c130ae2b656647ea6e31637b9ab": "1970000000000000000000", - "184d86f3466ae6683b19729982e7a7e1a48347b2": "10000000000000000000000", - "84ec06f24700fe42414cb9897c154c88de2f6132": "1337000000000000000000", - "d1e5e234a9f44266a4a6241a84d7a1a55ad5a7fe": "20000000000000000000000", - "e8a9a41740f44f54c3688b53e1ddd42e43c9fe94": "4000000000000000000000", - "6e3a51db743d334d2fe88224b5fe7c008e80e624": "106000000000000000000", - "3e94df5313fa520570ef232bc3311d5f622ff183": "2000000000000000000000", - "8957727e72cf629020f4e05edf799aa7458062d0": "2200000000000000000000", - "cf5e0eacd1b39d0655f2f77535ef6608eb950ba0": "2000000000000000000000", - "f4aaa3a6163e3706577b49c0767e948a681e16ee": "2000000000000000000000", - "97f1fe4c8083e596212a187728dd5cf80a31bec5": "20000000000000000000", - "57d5fd0e3d3049330ffcdcd020456917657ba2da": "1991240000000000000000", - "49bdbc7ba5abebb6389e91a3285220d3451bd253": "1000000000000000000000", - "ae126b382cf257fad7f0bc7d16297e54cc7267da": "300000000000000000000", - "bbf8616d97724af3def165d0e28cda89b800009a": "114063000000000000000", - "adb948b1b6fefe207de65e9bbc2de98e605d0b57": "2000000000000000000000", - "8a217db38bc35f215fd92906be42436fe7e6ed19": "6000000000000000000000", - "e28b062259e96eeb3c8d4104943f9eb325893cf5": "1337000000000000000000", - "6a6b18a45a76467e2e5d5a2ef911c3e12929857b": "82000000000000000000000", - "cb68ae5abe02dcf8cbc5aa719c25814651af8b85": "500000000000000000000", - "4c7e2e2b77ad0cd6f44acb2861f0fb8b28750ef9": "20000000000000000000", - "58ba1569650e5bbbb21d35d3e175c0d6b0c651a9": "500000000000000000000", - "1eb4bf73156a82a0a6822080c6edf49c469af8b9": "1910000000000000000000", - "4103299671d46763978fa4aa19ee34b1fc952784": "200000000000000000000", - "e321bb4a946adafdade4571fb15c0043d39ee35f": "1575212000000000000000", - "893608751d68d046e85802926673cdf2f57f7cb8": "19700000000000000000", - "70fee08b00c6c2c04a3c625c1ff77caf1c32df01": "200000000000000000000", - "7b0fea1176d52159333a143c294943da36bbddb4": "9380000000000000000000", - "d331c823825a9e5263d052d8915d4dcde07a5c37": "564000000000000000000", - "a45432a6f2ac9d56577b938a37fabac8cc7c461c": "1000000000000000000000", - "764fc46d428b6dbc228a0f5f55c9508c772eab9f": "26000000000000000000000", - "1a95a8a8082e4652e4170df9271cb4bb4305f0b2": "50000000000000000000", - "08c9f1bfb689fdf804d769f82123360215aff93b": "1970000000000000000000", - "1572cdfab72a01ce968e78f5b5448da29853fbdd": "5061500000000000000000", - "379c7166849bc24a02d6535e2def13daeef8aa8d": "100000000000000000000", - "e0a254ac09b9725bebc8e460431dd0732ebcabbf": "6000000000000000000000", - "3225c1ca5f2a9c88156bb7d9cdc44a326653c214": "400000000000000000000", - "84686c7bad762c54b667d59f90943cd14d117a26": "20000000000000000000", - "3d5a8b2b80be8b35d8ecf789b5ed7a0775c5076c": "20000000000000000000", - "2ccf80e21898125eb4e807cd82e09b9d28592f6e": "2000000000000000000000", - "dde969aef34ea87ac299b7597e292b4a0155cc8a": "298819000000000000000", - "19e94e620050aad766b9e1bad931238312d4bf49": "2396000000000000000000", - "959f57fded6ae37913d900b81e5f48a79322c627": "255599000000000000000", - "b9b0a3219a3288d9b35b091b14650b8fe23dce2b": "14000000000000000000000", - "3575c770668a9d179f1ef768c293f80166e2aa3d": "474000000000000000000", - "58f05b262560503ca761c61890a4035f4c737280": "8000000000000000000000", - "3286d1bc657a312c8847d93cb3cb7950f2b0c6e3": "20000000000000000000000", - "1d9e6aaf8019a05f230e5def05af5d889bd4d0f2": "133700000000000000000", - "a375b4bc24a24e1f797593cc302b2f331063fa5c": "200000000000000000000", - "108ba7c2895c50e072dc6f964932d50c282d3034": "500000000000000000000", - "b6b34a263f10c3d2eceb0acc559a7b2ab85ce565": "4000000000000000000000", - "a4d2b429f1ad5349e31704969edc5f25ee8aca10": "10000000000000000000000", - "674adb21df4c98c7a347ac4c3c24266757dd7039": "2000000000000000000000", - "33565ba9da2c03e778ce12294f081dfe81064d24": "16000000000000000000000", - "4ddda7586b2237b053a7f3289cf460dc57d37a09": "10000000000000000000000", - "cc4faac00be6628f92ef6b8cb1b1e76aac81fa18": "205410000000000000000", - "5f99dc8e49e61d57daef606acdd91b4d7007326a": "3000000000000000000000", - "b8a979352759ba09e35aa5935df175bff678a108": "20000000000000000000", - "86fff220e59305c09f483860d6f94e96fbe32f57": "42900000000000000000", - "03e8b084537557e709eae2e1e1a5a6bce1ef8314": "20000000000000000000", - "dda4ff7de491c687df4574dd1b17ff8f246ba3d1": "19600000000000000000000", - "2538532936813c91e653284f017c80c3b8f8a36f": "2002000000000000000000", - "5a82f96cd4b7e2d93d10f3185dc8f43d4b75aa69": "1999400000000000000000", - "86740a46648e845a5d96461b18091ff57be8a16f": "98000000000000000000000", - "7e3f63e13129a221ba1ab06326342cd98b5126ae": "1597960000000000000000", - "1f5f3b34bd134b2781afe5a0424ac5846cdefd11": "99000000000000000000", - "39936c2719450b9420cc2522cf91db01f227c1c1": "500000000000000000000", - "967076a877b18ec15a415bb116f06ef32645dba3": "2000000000000000000000", - "a42908e7fe53980a9abf4044e957a54b70e99cbe": "2000000000000000000000", - "5eb371c407406c427b3b7de271ad3c1e04269579": "3000000000000000000000", - "a570223ae3caa851418a9843a1ac55db4824f4fd": "200000000000000000000", - "764692cccb33405dd0ab0c3379b49caf8e6221ba": "20000000000000000000", - "a365918bfe3f2627b9f3a86775d8756e0fd8a94b": "400000000000000000000", - "069ed0ab7aa77de571f16106051d92afe195f2d0": "200000000000000000000", - "bd432a3916249b4724293af9146e49b8280a7f2a": "4000000000000000000000", - "61c9dce8b2981cb40e98b0402bc3eb28348f03ac": "196910000000000000000", - "8f1fcc3c51e252b693bc5b0ec3f63529fe69281e": "6000000000000000000000", - "55fd08d18064bd202c0ec3d2cce0ce0b9d169c4d": "1970000000000000000000", - "383a7c899ee18bc214969870bc7482f6d8f3570e": "10000000000000000000000", - "b14cc8de33d6338236539a489020ce4655a32bc6": "8000000000000000000000", - "448bf410ad9bbc2fecc4508d87a7fc2e4b8561ad": "199955000000000000000", - "06f7dc8d1b9462cef6feb13368a7e3974b097f9f": "2000000000000000000000", - "9c9f89a3910f6a2ae8a91047a17ab788bddec170": "10000000000000000000000", - "5de598aba344378cab4431555b4f79992dc290c6": "1337000000000000000000", - "87e6034ecf23f8b5639d5f0ea70a22538a920423": "328000000000000000000", - "8b27392206b958cd375d7ef8af2cf8ef0598c0bc": "1000000000000000000000", - "49136fe6e28b7453fcb16b6bbbe9aaacba8337fd": "2000000000000000000000", - "6982fe8a867e93eb4a0bd051589399f2ec9a5292": "2000000000000000000000", - "9fd1052a60506bd1a9ef003afd9d033c267d8e99": "1000000000000000000000", - "d38fa2c4cc147ad06ad5a2f75579281f22a7cc1f": "20000000000000000000000", - "6f794dbdf623daa6e0d00774ad6962737c921ea4": "2000000000000000000000", - "e96b184e1f0f54924ac874f60bbf44707446b72b": "2910840000000000000000", - "b5ba29917c78a1d9e5c5c713666c1e411d7f693a": "3100000000000000000000", - "81d619ff5726f2405f12904c72eb1e24a0aaee4f": "20000000000000000000000", - "b02fa29387ec12e37f6922ac4ce98c5b09e0b00f": "2000000000000000000000", - "b7230d1d1ff2aca366963914a79df9f7c5ea2c98": "8000000000000000000000", - "7b4007c45e5a573fdbb6f8bd746bf94ad04a3c26": "15202564000000000000000", - "8d9a0c70d2262042df1017d6c303132024772712": "2000000000000000000000", - "323aad41df4b6fc8fece8c93958aa901fa680843": "970000000000000000000", - "db04fad9c49f9e880beb8fcf1d3a3890e4b3846f": "1242482000000000000000", - "27824666d278d70423f03dfe1dc7a3f02f43e2b5": "1000070000000000000000", - "e04920dc6ecc1d6ecc084f88aa0af5db97bf893a": "182000000000000000000", - "b0c1b177a220e41f7c74d07cde8569c21c75c2f9": "5600000000000000000000", - "7864dc999fe4f8e003c0f43decc39aae1522dc0f": "94400000000000000000", - "c75c37ce2da06bbc40081159c6ba0f976e3993b1": "1078640000000000000000", - "179a825e0f1f6e985309668465cffed436f6aea9": "20000000000000000000", - "2c6b699d9ead349f067f45711a074a641db6a897": "20000000000000000000", - "068ce8bd6e902a45cb83b51541b40f39c4469712": "5240000000000000000000", - "767ac690791c2e23451089fe6c7083fe55deb62b": "820000000000000000000", - "b34f04b8db65bba9c26efc4ce6efc50481f3d65d": "20000000000000000000000", - "29aef48de8c9fbad4b9e4ca970797a5533eb722d": "10000000000000000000000", - "0a0ecda6636f7716ef1973614687fd89a820a706": "394000000000000000000", - "b32825d5f3db249ef4e85cc4f33153958976e8bc": "501375000000000000000", - "7ef16fd8d15b378a0fba306b8d03dd98fc92619f": "700000000000000000000", - "b58b52865ea55d8036f2fab26098b352ca837e18": "18200000000000000000", - "9b658fb361e046d4fcaa8aef6d02a99111223625": "2000000000000000000000", - "b2a498f03bd7178bd8a789a00f5237af79a3e3f8": "19400000000000000000000", - "cb48fe8265d9af55eb7006bc335645b0a3a183be": "3000000000000000000000", - "3cf9a1d465e78b7039e3694478e2627b36fcd141": "1372000000000000000000", - "5db84400570069a9573cab04b4e6b69535e202b8": "9700000000000000000000", - "214c89c5bd8e7d22bc574bb35e48950211c6f776": "18903000000000000000", - "53396f4a26c2b4604496306c5442e7fcba272e36": "20055000000000000000000", - "720994dbe56a3a95929774e20e1fe525cf3704e4": "8000000000000000000000", - "3571cf7ad304ecaee595792f4bbfa484418549d6": "5825500000000000000000", - "6042c644bae2b96f25f94d31f678c90dc96690db": "2000000000000000000000", - "2e24b597873bb141bdb237ea8a5ab747799af02d": "20000000000000000000000", - "08c802f87758349fa03e6bc2e2fd0791197eea9a": "2000000000000000000000", - "297a88921b5fca10e5bb9ded60025437ae221694": "200000000000000000000", - "aee49d68adedb081fd43705a5f78c778fb90de48": "20000000000000000000", - "4cee901b4ac8b156c5e2f8a6f1bef572a7dceb7e": "1000000000000000000000", - "dfaf31e622c03d9e18a0ddb8be60fbe3e661be0a": "9999800000000000000000", - "00aa5381b2138ebeffc191d5d8c391753b7098d2": "990049000000000000000", - "5b4c0c60f10ed2894bdb42d9dd1d210587810a0d": "500000000000000000000", - "c44f4ab5bc60397c737eb0683391b633f83c48fa": "1000000000000000000000", - "50bef2756248f9a7a380f91b051ba3be28a649ed": "1999884000000000000000", - "1bd909ac0d4a1102ec98dcf2cca96a0adcd7a951": "20055000000000000000", - "9ec03e02e587b7769def538413e97f7e55be71d8": "19700000000000000000000", - "9874803fe1f3a0365e7922b14270eaeb032cc1b5": "1124500000000000000000", - "4e2310191ead8d3bc6489873a5f0c2ec6b87e1be": "1000000000000000000000", - "93678a3c57151aeb68efdc43ef4d36cb59a009f3": "30060000000000000000", - "f483f607a21fcc28100a018c568ffbe140380410": "1000000000000000000000", - "2a91a9fed41b7d0e5cd2d83158d3e8a41a9a2d71": "1940000000000000000000", - "240e559e274aaef0c258998c979f671d1173b88b": "4000000000000000000000", - "108a2b7c336f784779d8b54d02a8d31d9a139c0a": "10000000000000000000000", - "9c98fdf1fdcd8ba8f4c5b04c3ae8587efdf0f6e6": "6000000000000000000000", - "194ff44aefc17bd20efd7a204c47d1620c86db5d": "2999400000000000000000", - "1f8116bd0af5570eaf0c56c49c7ab5e37a580458": "2000000000000000000000", - "d79835e404fb86bf845fba090d6ba25e0c8866a6": "2400000000000000000000", - "a8e7201ff619faffc332e6ad37ed41e301bf014a": "600000000000000000000", - "286906b6bd4972e3c71655e04baf36260c7cb153": "340000000000000000000", - "db4bc83b0e6baadb1156c5cf06e0f721808c52c7": "880000000000000000000", - "a158148a2e0f3e92dc2ce38febc20107e3253c96": "2000000000000000000000", - "9f6a322a6d469981426ae844865d7ee0bb15c7b3": "50003000000000000000", - "32f29e8727a74c6b4301e3ffff0687c1b870dae9": "1000000000000000000000", - "19918aa09e7d494e98ffa5db50350892f7156ac6": "10000000000000000000000", - "5a5f8508da0ebebb90be9033bd4d9e274105ae00": "6685000000000000000000", - "6fc25e7e00ca4f60a9fe6f28d1fde3542e2d1079": "792000000000000000000", - "72094f3951ffc9771dced23ada080bcaf9c7cca7": "6000000000000000000000", - "43f7e86e381ec51ec4906d1476cba97a3db584e4": "1000000000000000000000", - "05696b73916bd3033e05521e3211dfec026e98e4": "2000000000000000000000", - "5e7f70378775589fc66a81d3f653e954f55560eb": "2434000000000000000000", - "895613236f3584216ad75c5d3e07e3fa6863a778": "2000000000000000000000", - "4eb1454b573805c8aca37edec7149a41f61202f4": "300000000000000000000", - "d99999a2490d9494a530cae4daf38554f4dd633e": "120000000000000000000", - "1704cefcfb1331ec7a78388b29393e85c1af7916": "400000000000000000000", - "ac4acfc36ed6094a27e118ecc911cd473e8fb91f": "1799800000000000000000", - "a975b077fcb4cc8efcbf838459b6fa243a4159d6": "40000000000000000000", - "9c405cf697956138065e11c5f7559e67245bd1a5": "200000000000000000000", - "cafde855864c2598da3cafc05ad98df2898e8048": "14179272000000000000000", - "8ef711e43a13918f1303e81d0ea78c9eefd67eb2": "4000000000000000000000", - "0b14891999a65c9ef73308efe3100ca1b20e8192": "800000000000000000000", - "47cf9cdaf92fc999cc5efbb7203c61e4f1cdd4c3": "131400000000000000000", - "04ba8a3f03f08b895095994dda619edaacee3e7a": "2000000000000000000000", - "02b6d65cb00b7b36e1fb5ed3632c4cb20a894130": "20000000000000000000000", - "f99aee444b5783c093cfffd1c4632cf93c6f050c": "400000000000000000000", - "2541314a0b408e95a694444977712a50713591ab": "1634706000000000000000", - "3096dca34108085bcf04ae72b94574a13e1a3e1d": "200000000000000000000", - "56df05bad46c3f00ae476ecf017bb8c877383ff1": "197248000000000000000", - "6d59b21cd0e2748804d9abe064eac2bef0c95f27": "2000000000000000000000", - "b29f5b7c1930d9f97a115e067066f0b54db44b3b": "1000000000000000000000", - "888c16144933197cac26504dd76e06fd6600c789": "100000000000000000000", - "dfe3c52a92c30396a4e33a50170dc900fcf8c9cf": "50000000000000000000", - "f76f69cee4faa0a63b30ae1e7881f4f715657010": "200000000000000000000", - "ee0007b0960d00908a94432a737557876aac7c31": "53053000000000000000", - "effc15e487b1beda0a8d1325bdb4172240dc540a": "64940000000000000000", - "40ab0a3e83d0c8ac9366910520eab1772bac3b1a": "976600000000000000000", - "1895a0eb4a4372722fcbc5afe6936f289c88a419": "910000000000000000000", - "81efe296ae76c860d1c5fbd33d47e8ce9996d157": "1000000000000000000000", - "9ddd355e634ee9927e4b7f6c97e7bf3a2f1e687a": "50000000000000000000", - "f2b4ab2c9427a9015ef6eefff5edb60139b719d1": "716800000000000000000", - "765be2e12f629e6349b97d21b62a17b7c830edab": "6000000000000000000000", - "ff61c9c1b7a3d8b53bba20b34466544b7b216644": "2000000000000000000000", - "36a08fd6fd1ac17ce15ed57eefb12a2be28188bf": "1337000000000000000000", - "17049311101d817efb1d65910f663662a699c98c": "1999800000000000000000", - "30511832918d8034a7bee72ef2bfee440ecbbcf6": "16100000000000000000000", - "d27c234ff7accace3d996708f8f9b04970f97d36": "1337000000000000000000", - "a961171f5342b173dd70e7bfe5b5ca238b13bcdd": "3397053000000000000000", - "30bf61b2d877fe10635126326fa189e4b0b1c3b0": "1027580000000000000000", - "4bb6d86b8314c22d8d37ea516d0019f156aae12d": "1000000000000000000000", - "5f363e0ab747e02d1b3b66abb69ea53c7baf523a": "11640000000000000000000", - "283e11203749b1fa4f32febb71e49d135919382a": "1000000000000000000000", - "ac5999a89d2dd286d5a80c6dee7e86aad40f9e12": "3880000000000000000000", - "3f6dd3650ee428dcb7759553b017a96a94286ac9": "1337000000000000000000", - "b3fc1d6881abfcb8becc0bb021b8b73b7233dd91": "50000000000000000000", - "f0832a6bb25503eeca435be31b0bf905ca1fcf57": "6685000000000000000000", - "9d7fda7070bf3ee9bbd9a41f55cad4854ae6c22c": "11027380000000000000000", - "4b0bd8acfcbc53a6010b40d4d08ddd2d9d69622d": "668500000000000000000", - "f3b668b3f14d920ebc379092db98031b67b219b3": "199955000000000000000", - "d91d889164479ce436ece51763e22cda19b22d6b": "3365200000000000000000", - "ffe28db53c9044b4ecd4053fd1b4b10d7056c688": "100000000000000000000", - "c77b01a6e911fa988d01a3ab33646beef9c138f3": "721400000000000000000", - "c0064f1d9474ab915d56906c9fb320a2c7098c9b": "358000000000000000000", - "4e3edad4864dab64cae4c5417a76774053dc6432": "590943000000000000000", - "71d2cc6d02578c65f73c575e76ce8fbcfadcf356": "72400000000000000000", - "9971df60f0ae66dce9e8c84e17149f09f9c52f64": "200000000000000000000", - "58e661d0ba73d6cf24099a5562b808f7b3673b68": "2000000000000000000000", - "84b0ee6bb837d3a4c4c5011c3a228c0edab4634a": "20000000000000000000", - "84375afbf59b3a1d61a1be32d075e0e15a4fbca5": "200000000000000000000", - "9ae9476bfecd3591964dd325cf8c2a24faed82c1": "4000000000000000000000", - "6a4c8907b600248057b1e46354b19bdc859c991a": "20000000000000000000", - "1c045649cd53dc23541f8ed4d341812808d5dd9c": "7000000000000000000000", - "c5e488cf2b5677933971f64cb8202dd05752a2c0": "1000000000000000000000", - "eb25481fcd9c221f1ac7e5fd1ecd9307a16215b8": "197000000000000000000", - "a61887818f914a20e31077290b83715a6b2d6ef9": "1880000000000000000000", - "679437eacf437878dc293d48a39c87b7421a216c": "64528000000000000000", - "331a1c26cc6994cdd3c14bece276ffff4b9df77c": "18049000000000000000", - "75b95696e8ec4510d56868a7c1a735c68b244890": "6400000000000000000000", - "a77f3ee19e9388bbbb2215c62397b96560132360": "200000000000000000000", - "bc7afc8477412274fc265df13c054473427d43c6": "130034000000000000000", - "91050a5cffadedb4bb6eaafbc9e5013428e96c80": "1700000000000000000000", - "24586ec5451735eeaaeb470dc8736aae752f82e5": "17600000000000000000", - "51039377eed0c573f986c5e8a95fb99a59e9330f": "1970000000000000000000", - "fbb161fe875f09290a4b262bc60110848f0d2226": "2000000000000000000000", - "ed52a2cc0869dc9e9f842bd0957c47a8e9b0c9ff": "9550000000000000000000", - "bad235d5085dc7b068a67c412677b03e1836884c": "2000000000000000000000", - "055eac4f1ad3f58f0bd024d68ea60dbe01c6afb3": "100000000000000000000", - "4058808816fdaa3a5fc98ed47cfae6c18315422e": "199800000000000000000", - "3540c7bd7a8442d5bee21a2180a1c4edff1649e0": "1239295000000000000000", - "c5edbbd2ca0357654ad0ea4793f8c5cecd30e254": "6000000000000000000000", - "b5906b0ae9a28158e8ac550e39da086ee3157623": "200000000000000000000", - "4d801093c19ca9b8f342e33cc9c77bbd4c8312cf": "345005000000000000000", - "206482ee6f138a778fe1ad62b180ce856fbb23e6": "2000000000000000000000", - "c0ed0d4ad10de03435b153a0fc25de3b93f45204": "3160000000000000000000", - "29e67990e1b6d52e1055ffe049c53195a81542cf": "20000000000000000000000", - "e6d22209ffd0b87509ade3a8e2ef429879cb89b5": "17260000000000000000000", - "d6644d40e90bc97fe7dfe7cabd3269fd579ba4b3": "159000000000000000000", - "ece1290877b583e361a2d41b009346e6274e2538": "300000000000000000000", - "ab3861226ffec1289187fb84a08ec3ed043264e8": "1000000000000000000000", - "60e0bdd0a259bb9cb09d3f37e5cd8b9daceabf8a": "1370000000000000000000", - "28b77585cb3d55a199ab291d3a18c68fe89a848a": "1960000000000000000000", - "73128173489528012e76b41a5e28c68ba4e3a9d4": "1000000000000000000000", - "018492488ba1a292342247b31855a55905fef269": "140000000000000000000", - "0bb54c72fd6610bfa4363397e020384b022b0c49": "1337000000000000000000", - "520f66a0e2657ff0ac4195f2f064cf2fa4b24250": "40000000000000000000", - "a1432ed2c6b7777a88e8d46d388e70477f208ca5": "7999538000000000000000", - "149ba10f0da2725dc704733e87f5a524ca88515e": "7880000000000000000000", - "b287f7f8d8c3872c1b586bcd7d0aedbf7e732732": "20000000000000000000", - "c46bbdef76d4ca60d316c07f5d1a780e3b165f7e": "2000000000000000000000", - "b5a589dd9f4071dbb6fba89b3f5d5dae7d96c163": "2000000000000000000000", - "d218efb4db981cdd6a797f4bd48c7c26293ceb40": "2975000000000000000000", - "af87d2371ef378957fbd05ba2f1d66931b01e2b8": "700000000000000000000", - "86ef6426211949cc37f4c75e7850369d0cf5f479": "13399196000000000000000", - "fb3a0b0d6b6a718f6fc0292a825dc9247a90a5d0": "199950000000000000000", - "da16dd5c3d1a2714358fe3752cae53dbab2be98c": "19400000000000000000000", - "9eb7834e171d41e069a77947fca87622f0ba4e48": "100000000000000000000", - "e1d91b0954cede221d6f24c7985fc59965fb98b8": "2000000000000000000000", - "85d0d88754ac84b8b21ba93dd2bfec72626faba8": "1000000000000000000000", - "695b4cce085856d9e1f9ff3e79942023359e5fbc": "5000000000000000000000", - "9156d18029350e470408f15f1aa3be9f040a67c6": "1000000000000000000000", - "a9d64b4f3bb7850722b58b478ba691375e224e42": "6000000000000000000000", - "17e4a0e52bac3ee44efe0954e753d4b85d644e05": "2000000000000000000000", - "b8a79c84945e47a9c3438683d6b5842cff7684b1": "2000000000000000000000", - "cfac2e1bf33205b05533691a02267ee19cd81836": "1000000000000000000000", - "6b992521ec852370848ad697cc2df64e63cc06ff": "1000000000000000000000", - "60af0ee118443c9b37d2fead77f5e521debe1573": "1910000000000000000000", - "c6dbdb9efd5ec1b3786e0671eb2279b253f215ed": "1000000000000000000000", - "659c0a72c767a3a65ced0e1ca885a4c51fd9b779": "2000000000000000000000", - "ed1276513b6fc68628a74185c2e20cbbca7817bf": "191000000000000000000", - "5ad12c5ed4fa827e2150cfa0d68c0aa37b1769b8": "800000000000000000000", - "17c0fef6986cfb2e4041f9979d9940b69dff3de2": "4000000000000000000000", - "ca98c7988efa08e925ef9c9945520326e9f43b99": "4000000000000000000000", - "fe8f1fdcab7fbec9a6a3fcc507619600505c36a3": "19700000000000000000", - "4420aa35465be617ad2498f370de0a3cc4d230af": "2000000000000000000000", - "8232d1f9742edf8dd927da353b2ae7b4cbce7592": "668500000000000000000", - "eca5f58792b8c62d2af556717ee3ee3028be4dce": "2000000000000000000000", - "6bf86f1e2f2b8032a95c4d7738a109d3d0ed8104": "1820000000000000000000", - "3ac2f0ff1612e4a1c346d53382abf6d8a25baa53": "2000000000000000000000", - "daa1bd7a9148fb865cd612dd35f162861d0f3bdc": "3066243000000000000000", - "5169c60aee4ceed1849ab36d664cff97061e8ea8": "3000000000000000000000", - "2a5e3a40d2cd0325766de73a3d671896b362c73b": "100000000000000000000000", - "a83382b6e15267974a8550b98f7176c1a353f9be": "3541608000000000000000", - "b50c149a1906fad2786ffb135aab501737e9e56f": "388000000000000000000", - "d9775965b716476675a8d513eb14bbf7b07cd14a": "5076200000000000000000", - "66662006015c1f8e3ccfcaebc8ee6807ee196303": "500024000000000000000", - "78746a958dced4c764f876508c414a68342cecb9": "50600000000000000000", - "e982e6f28c548f5f96f45e63f7ab708724f53fa1": "396238000000000000000", - "740bfd52e01667a3419b029a1b8e45576a86a2db": "16800000000000000000000", - "2bd252e0d732ff1d7c78f0a02e6cb25423cf1b1a": "2674000000000000000000", - "2e2d7ea66b9f47d8cc52c01c52b6e191bc7d4786": "3999800000000000000000", - "3e3161f1ea2fbf126e79da1801da9512b37988c9": "49250000000000000000000", - "7e2ba86da52e785d8625334f3397ba1c4bf2e8d1": "197000000000000000000", - "7608f437b31f18bc0b64d381ae86fd978ed7b31f": "50000000000000000000", - "25a5a44d38a2f44c6a9db9cdbc6b1e2e97abb509": "17000000000000000000000", - "745ad3abc6eeeb2471689b539e789ce2b8268306": "1129977000000000000000", - "09e437d448861228a232b62ee8d37965a904ed9c": "21708305000000000000000", - "be53322f43fbb58494d7cce19dda272b2450e827": "200018000000000000000", - "4166fc08ca85f766fde831460e9dc93c0e21aa6c": "1000000000000000000000", - "99c0174cf84e0783c220b4eb6ae18fe703854ad3": "2074800000000000000000", - "3cf484524fbdfadae26dc185e32b2b630fd2e726": "448798000000000000000", - "fdcd5d80b105897a57abc47865768b2900524295": "6400000000000000000000", - "f22f4078febbbaa8b0e78e642c8a42f35d433905": "1999944000000000000000", - "eac768bf14b8f9432e69eaa82a99fbeb94cd0c9c": "98500000000000000000000", - "2639eee9873ceec26fcc9454b548b9e7c54aa65c": "1000000000000000000000", - "c3c3c2510d678020485a63735d1307ec4ca6302b": "1000000000000000000000", - "b73d6a77559c86cf6574242903394bacf96e3570": "91200000000000000000", - "5ce2e7ceaaa18af0f8aafa7fbad74cc89e3cd436": "20000000000000000000000", - "03377c0e556b640103289a6189e1aeae63493467": "20000000000000000000000", - "6eb0a5a9ae96d22cf01d8fd6483b9f38f08c2c8b": "4000000000000000000000", - "fc8215a0a69913f62a43bf1c8590b9ddcd0d8ddb": "2000000000000000000000", - "4a835c25824c47ecbfc79439bf3f5c3481aa75cd": "1400000000000000000000", - "b5493ef173724445cf345c035d279ba759f28d51": "20000000000000000000", - "b9e90c1192b3d5d3e3ab0700f1bf655f5dd4347a": "499928000000000000000", - "419bde7316cc1ed295c885ace342c79bf7ee33ea": "6000000000000000000000", - "e4625501f52b7af52b19ed612e9d54fdd006b492": "209440000000000000000", - "e9d599456b2543e6db80ea9b210e908026e2146e": "200000000000000000000", - "2c06dd922b61514aafedd84488c0c28e6dcf0e99": "100000000000000000000000", - "06b5ede6fdf1d6e9a34721379aeaa17c713dd82a": "2000000000000000000000", - "d8930a39c77357c30ad3a060f00b06046331fd62": "820000000000000000000", - "b2a2c2111612fb8bbb8e7dd9378d67f1a384f050": "20000000000000000000", - "1f174f40a0447234e66653914d75bc003e5690dc": "160000000000000000000", - "e06cb6294704eea7437c2fc3d30773b7bf38889a": "20094000000000000000", - "cd06f8c1b5cdbd28e2d96b6346c3e85a0483ba24": "1000000000000000000000", - "f316ef1df2ff4d6c1808dba663ec8093697968e0": "1794400000000000000000", - "1e6915ebd9a19c81b692ad99b1218a592c1ac7b1": "4000000000000000000000", - "885493bda36a0432976546c1ddce71c3f4570021": "216700000000000000000", - "18b0407cdad4ce52600623bd5e1f6a81ab61f026": "319489000000000000000", - "187d9f0c07f8eb74faaad15ebc7b80447417f782": "20000000000000000000", - "5d6ccf806738091042ad97a6e095fe8c36aa79c5": "188000000000000000000", - "53437fecf34ab9d435f4deb8ca181519e2592035": "188000000000000000000", - "fd1faa347b0fcc804c2da86c36d5f1d18b7087bb": "52380000000000000000", - "650cf67db060cce17568d5f2a423687c49647609": "100000000000000000000", - "bcd95ef962462b6edfa10fda87d72242fe3edb5c": "334133000000000000000", - "3b5e8b3c77f792decb7a8985df916efb490aac23": "2000000000000000000000", - "f13b083093ba564e2dc631568cf7540d9a0ec719": "1999944000000000000000", - "373c547e0cb5ce632e1c5ad66155720c01c40995": "4691588000000000000000", - "7313461208455455465445a459b06c3773b0eb30": "2000000000000000000000", - "441f37e8a029fd02482f289c49b5d06d00e408a4": "333333000000000000000", - "d30d4c43adcf55b2cb53d68323264134498d89ce": "1000000000000000000000", - "f648ea89c27525710172944e79edff847803b775": "100000000000000000000000", - "0c7f869f8e90d53fdc03e8b2819b016b9d18eb26": "20000000000000000000000", - "c71f92a3a54a7b8c2f5ea44305fccb84eee23148": "49980000000000000000", - "7988901331e387f713faceb9005cb9b65136eb14": "1970000000000000000000", - "e9a39a8bac0f01c349c64cedb69897f633234ed2": "3980000000000000000000", - "ad2a5c00f923aaf21ab9f3fb066efa0a03de2fb2": "999996000000000000000", - "f25259a5c939cd25966c9b6303d3731c53ddbc4c": "200000000000000000000", - "d1682c2159018dc3d07f08240a8c606daf65f8e1": "200000000000000000000000", - "a99991cebd98d9c838c25f7a7416d9e244ca250d": "1000000000000000000000", - "5a285755391e914e58025faa48cc685f4fd4f5b8": "26000000000000000000000", - "4d24b7ac47d2f27de90974ba3de5ead203544bcd": "100000000000000000000", - "21b182f2da2b384493cf5f35f83d9d1ee14f2a21": "2000000000000000000000", - "31ab088966ecc7229258f6098fce68cf39b38485": "1000000000000000000000", - "4977a7939d0939689455ce2639d0ee5a4cd910ed": "1820000000000000000000", - "07af938c1237a27c9030094dcf240750246e3d2c": "500000000000000000000", - "4e2bfa4a466f82671b800eee426ad00c071ba170": "4000000000000000000000", - "107379d4c467464f235bc18e55938aad3e688ad7": "50000000000000000000", - "f7b29b82195c882dab7897c2ae95e77710f57875": "2199000000000000000000", - "56586391040c57eec6f5affd8cd4abde10b50acc": "4000000000000000000000", - "ac608e2bac9dd20728d2947effbbbf900a9ce94b": "6000600000000000000000", - "48548b4ba62bcb2f0d34a88dc69a680e539cf046": "100084000000000000000", - "1665ab1739d71119ee6132abbd926a279fe67948": "100000000000000000000", - "af4493e8521ca89d95f5267c1ab63f9f45411e1b": "200000000000000000000", - "bf6925c00751008440a6739a02bf2b6cdaab5e3a": "1000000000000000000000", - "3fe40fbd919aad2818df01ee4df46c46842ac539": "6000000000000000000000", - "455b9296921a74d1fc41617f43b8303e6f3ed76c": "4200000000000000000000", - "7086b4bde3e35d4aeb24b825f1a215f99d85f745": "1999800000000000000000", - "d4ee4919fb37f2bb970c3fff54aaf1f3dda6c03f": "40000000000000000000000", - "a4489a50ead5d5445a7bee4d2d5536c2a76c41f8": "200000000000000000000", - "505e4f7c275588c533a20ebd2ac13b409bbdea3c": "17600000000000000000", - "3bb53598cc20e2055dc553b049404ac9b7dd1e83": "615020000000000000000", - "52cd20403ba7eda6bc307a3d63b5911b817c1263": "20000000000000000000", - "a211da03cc0e31ecce5309998718515528a090df": "200000000000000000000", - "bcb422dc4dd2aae94abae95ea45dd1731bb6b0ba": "447500000000000000000", - "cbde9734b8e6aa538c291d6d7facedb0f338f857": "2000000000000000000000", - "171ca02a8b6d62bf4ca47e906914079861972cb2": "200000000000000000000", - "d40d0055fd9a38488aff923fd03d35ec46d711b3": "4999711000000000000000", - "3887192c7f705006b630091276b39ac680448d6b": "60000000000000000000", - "3f3c8e61e5604cef0605d436dd22accd862217fc": "1337000000000000000000", - "4258fd662fc4ce3295f0d4ed8f7bb1449600a0a9": "6719600000000000000000", - "4571de672b9904bad8743692c21c4fdcea4c2e01": "4000000000000000000000", - "5be045512a026e3f1cebfd5a7ec0cfc36f2dc16b": "120000000000000000000", - "d6300b3215b11de762ecde4b70b7927d01291582": "2000000000000000000000", - "f9e37447406c412197b2e2aebc001d6e30c98c60": "8346700000000000000000", - "bd047ff1e69cc6b29ad26497a9a6f27a903fc4dd": "865000000000000000000", - "23fa7eb51a48229598f97e762be0869652dffc66": "1000000000000000000000", - "6679aeecd87a57a73f3356811d2cf49d0c4d96dc": "600000000000000000000", - "23c55aeb5739876f0ac8d7ebea13be729685f000": "1337000000000000000000", - "757b65876dbf29bf911d4f0692a2c9beb1139808": "4124263000000000000000", - "e8fc36b0131ec120ac9e85afc10ce70b56d8b6ba": "200000000000000000000", - "1a89899cbebdbb64bb26a195a63c08491fcd9eee": "2000000000000000000000", - "6edf7f5283725c953ee64317f66188af1184b033": "8050000000000000000000", - "297385e88634465685c231a314a0d5dcd146af01": "1550000000000000000000", - "018f20a27b27ec441af723fd9099f2cbb79d6263": "2167000000000000000000", - "a5a4227f6cf98825c0d5baff5315752ccc1a1391": "10000000000000000000000", - "69517083e303d4fbb6c2114514215d69bc46a299": "100000000000000000000", - "1dab172effa6fbee534c94b17e794edac54f55f8": "1970000000000000000000", - "c6ee35934229693529dc41d9bb71a2496658b88e": "19700000000000000000000", - "a8ee1df5d44b128469e913569ef6ac81eeda4fc8": "500000000000000000000", - "35bd246865fab490ac087ac1f1d4f2c10d0cda03": "400000000000000000000", - "4bf8bf1d35a231315764fc8001809a949294fc49": "66850000000000000000", - "c70fa45576bf9c865f983893002c414926f61029": "400400000000000000000", - "fdeaac2acf1d138e19f2fc3f9fb74592e3ed818a": "668500000000000000000", - "bfbfbcb656c2992be8fcde8219fbc54aadd59f29": "9999924000000000000000", - "1722c4cbe70a94b6559d425084caeed4d6e66e21": "4000000000000000000000", - "00e681bc2d10db62de85848324492250348e90bf": "20000000000000000000000", - "5c308bac4857d33baea074f3956d3621d9fa28e1": "4999711000000000000000", - "68c08490c89bf0d6b6f320b1aca95c8312c00608": "4000000000000000000000", - "ce1884ddbbb8e10e4dba6e44feeec2a7e5f92f05": "4000000000000000000000", - "427417bd16b1b3d22dbb902d8f9657016f24a61c": "2000000000000000000000", - "5ff93de6ee054cad459b2d5eb0f6870389dfcb74": "220000000000000000000", - "71946b7117fc915ed107385f42d99ddac63249c2": "2000000000000000000000", - "11ec00f849b6319cf51aa8dd8f66b35529c0be77": "2000000000000000000000", - "610fd6ee4eebab10a8c55d0b4bd2e7d6ef817156": "20002000000000000000", - "a422e4bf0bf74147cc895bed8f16d3cef3426154": "349281000000000000000", - "745aecbaf9bb39b74a67ea1ce623de368481baa6": "10000000000000000000000", - "9f496cb2069563144d0811677ba0e4713a0a4143": "1122000000000000000000", - "c500b720734ed22938d78c5e48b2ba9367a575ba": "33400000000000000000000", - "cd072e6e1833137995196d7bb1725fef8761f655": "6000000000000000000000", - "94644ad116a41ce2ca7fbec609bdef738a2ac7c7": "5000000000000000000000", - "e8d942d82f175ecb1c16a405b10143b3f46b963a": "568600000000000000000", - "f73dd9c142b71bce11d06e30e7e7d032f2ec9c9e": "1970000000000000000000", - "1327d759d56e0ab87af37ecf63fe01f310be100a": "659200000000000000000", - "28fa2580f9ebe420f3e5eefdd371638e3b7af499": "6000000000000000000000", - "024bdd2c7bfd500ee7404f7fb3e9fb31dd20fbd1": "180000000000000000000", - "b4b14bf45455d0ab0803358b7524a72be1a2045b": "500000000000000000000", - "b1e2dd95e39ae9775c55aeb13f12c2fa233053ba": "2000000000000000000000", - "35b03ea4245736f57b85d2eb79628f036ddcd705": "4000000000000000000000", - "eb2ef3d38fe652403cd4c9d85ed7f0682cd7c2de": "42784000000000000000000", - "690594d306613cd3e2fd24bca9994ad98a3d73f8": "2000000000000000000000", - "8397a1bc47acd647418159b99cea57e1e6532d6e": "9169160000000000000000", - "b44815a0f28e569d0e921a4ade8fb2642526497a": "55500000000000000000", - "e24109be2f513d87498e926a286499754f9ed49e": "886500000000000000000", - "37ac29bda93f497bc4aeaab935452c431510341e": "985000000000000000000", - "4a81abe4984c7c6bef63d69820e55743c61f201c": "16011846000000000000000", - "66dcc5fb4ee7fee046e141819aa968799d644491": "1337000000000000000000", - "43ff38743ed0cd43308c066509cc8e7e72c862aa": "1940000000000000000000", - "b8f20005b61352ffa7699a1b52f01f5ab39167f1": "10000000000000000000000", - "1cda411bd5163baeca1e558563601ce720e24ee1": "18200000000000000000", - "86245f596691093ece3f3d3ca2263eace81941d9": "188000000000000000000", - "f52a5882e8927d944b359b26366ba2b9cacfbae8": "25000080000000000000000", - "118c18b2dce170e8f445753ba5d7513cb7636d2d": "8800000000000000000000", - "7168b3bb8c167321d9bdb023a6e9fd11afc9afd9": "1790000000000000000000", - "d9103bb6b67a55a7fece2d1af62d457c2178946d": "1000000000000000000000", - "8b9fda7d981fe9d64287f85c94d83f9074849fcc": "14000000000000000000000", - "91211712719f2b084d3b3875a85069f466363141": "1000000000000000000000", - "4863849739265a63b0a2bf236a5913e6f959ce15": "1520000000000000000000", - "c2d1778ef6ee5fe488c145f3586b6ebbe3fbb445": "1146000000000000000000", - "2b77a4d88c0d56a3dbe3bae04a05f4fcd1b757e1": "300000000000000000000", - "fe9c0fffefb803081256c0cf4d6659e6d33eb4fb": "1528000000000000000000", - "893017ff1adad499aa065401b4236ce6e92b625a": "1999944000000000000000", - "073c67e09b5c713c5221c8a0c7f3f74466c347b0": "19400000000000000000000", - "93e303411afaf6c107a44101c9ac5b36e9d6538b": "66000000000000000000000", - "0ec50aa823f465b9464b0bc0c4a57724a555f5d6": "59100000000000000000000", - "a3e3a6ea509573e21bd0239ece0523a7b7d89b2f": "1970000000000000000000", - "c069ef0eb34299abd2e32dabc47944b272334824": "120000000000000000000", - "28a3da09a8194819ae199f2e6d9d1304817e28a5": "2000000000000000000000", - "e9495ba5842728c0ed97be37d0e422b98d69202c": "2000000000000000000000", - "bba976f1a1215f7512871892d45f7048acd356c8": "2000000000000000000000", - "887cac41cd706f3345f2d34ac34e01752a6e5909": "595366000000000000000", - "e0e0b2e29dde73af75987ee4446c829a189c95bc": "149000000000000000000", - "4a5fae3b0372c230c125d6d470140337ab915656": "1600000000000000000000", - "425177eb74ad0a9d9a5752228147ee6d6356a6e6": "13370000000000000000", - "5db7bba1f9573f24115d8c8c62e9ce8895068e9f": "49984000000000000000", - "fa6a37f018e97967937fc5e8617ba1d786dd5f77": "19999800000000000000000", - "45e3a93e72144ada860cbc56ff85145ada38c6da": "1610000000000000000000", - "67da922effa472a6b124e84ea8f86b24e0f515aa": "20000000000000000000", - "aa9bd4589535db27fa2bc903ca17d679dd654806": "2000000000000000000000", - "16a9e9b73ae98b864d1728798b8766dbc6ea8d12": "957480000000000000000", - "d6580ab5ed4c7dfa506fa6fe64ad5ce129707732": "4000000000000000000000", - "984a7985e3cc7eb5c93691f6f8cc7b8f245d01b2": "6000000000000000000000", - "7746b6c6699c8f34ca2768a820f1ffa4c207fe05": "4000086000000000000000", - "2fa491fb5920a6574ebd289f39c1b2430d2d9a6a": "2000000000000000000000", - "fae76719d97eac41870428e940279d97dd57b2f6": "98500000000000000000000", - "41b2dbd79dda9b864f6a7030275419c39d3efd3b": "3200000000000000000000", - "dd8254121a6e942fc90828f2431f511dad7f32e6": "3018000000000000000000", - "37fac1e6bc122e936dfb84de0c4bef6e0d60c2d7": "2000000000000000000000", - "3a10888b7e149cae272c01302c327d0af01a0b24": "17000000000000000000", - "401354a297952fa972ad383ca07a0a2811d74a71": "14000000000000000000", - "51865db148881951f51251710e82b9be0d7eadb2": "2000000000000000000000", - "bbbd6ecbb5752891b4ceb3cce73a8f477059376f": "36000000000000000000", - "3f236108eec72289bac3a65cd283f95e041d144c": "999925000000000000000", - "dc83b6fd0d512131204707eaf72ea0c8c9bef976": "2000000000000000000000", - "036eeff5ba90a6879a14dff4c5043b18ca0460c9": "100000000000000000000", - "fac5ca94758078fbfccd19db3558da7ee8a0a768": "1017500000000000000000", - "d0d62c47ea60fb90a3639209bbfdd4d933991cc6": "194000000000000000000", - "891cb8238c88e93a1bcf61db49bd82b47a7f4f84": "2680000000000000000000", - "df53003346d65c5e7a646bc034f2b7d32fcbe56a": "2000000000000000000000", - "6e89c51ea6de13e06cdc748b67c4410fe9bcab03": "4000000000000000000000", - "a61cdbadf04b1e54c883de6005fcdf16beb8eb2f": "2000000000000000000000", - "e3951de5aefaf0458768d774c254f7157735e505": "1600930000000000000000", - "f2732cf2c13b8bb8e7492a988f5f89e38273ddc8": "600000000000000000000", - "4752218e54de423f86c0501933917aea08c8fed5": "20000000000000000000000", - "152f4e860ef3ee806a502777a1b8dbc91a907668": "600000000000000000000", - "15b96f30c23b8664e7490651066b00c4391fbf84": "410650000000000000000", - "8693e9b8be94425eef7969bc69f9d42f7cad671e": "1000090000000000000000", - "f41557dfdfb1a1bdcefefe2eba1e21fe0a4a9942": "1970000000000000000000", - "38458e0685573cb4d28f53098829904570179266": "40000000000000000000", - "53e4d9696dcb3f4d7b3f70dcaa4eecb71782ff5c": "200000000000000000000", - "2dca0e449ab646dbdfd393a96662960bcab5ae1e": "40000000000000000000000", - "87d7ac0653ccc67aa9c3469eef4352193f7dbb86": "200000000000000000000000", - "ae9f5c3fbbe0c9bcbf1af8ff74ea280b3a5d8b08": "1730000000000000000000", - "7751f363a0a7fd0533190809ddaf9340d8d11291": "20000000000000000000", - "708a2af425ceb01e87ffc1be54c0f532b20eacd6": "134159000000000000000", - "ac122a03cd058c122e5fe17b872f4877f9df9572": "1969606000000000000000", - "5da4ca88935c27f55c311048840e589e04a8a049": "80000000000000000000", - "e67c2c1665c88338688187629f49e99b60b2d3ba": "200000000000000000000", - "dec82373ade8ebcf2acb6f8bc2414dd7abb70d77": "200000000000000000000", - "47c247f53b9fbeb17bba0703a00c009fdb0f6eae": "20000000000000000000000", - "9a522e52c195bfb7cf5ffaaedb91a3ba7468161d": "1000000000000000000000", - "3159e90c48a915904adfe292b22fa5fd5e72796b": "1008800000000000000000", - "defddfd59b8d2c154eecf5c7c167bf0ba2905d3e": "93588000000000000000", - "ad1d68a038fd2586067ef6d135d9628e79c2c924": "4686168000000000000000", - "038e45eadd3d88b87fe4dab066680522f0dfc8f9": "10000000000000000000000", - "2561ec0f379218fe5ed4e028a3f744aa41754c72": "13370000000000000000", - "b95396daaa490df2569324fcc6623be052f132ca": "2000000000000000000000", - "2376ada90333b1d181084c97e645e810aa5b76f1": "750000000000000000000", - "07800d2f8068e448c79a4f69b1f15ef682aae5f6": "19400000000000000000000", - "adeb204aa0c38e179e81a94ed8b3e7d53047c26b": "608000000000000000000", - "0dc100b107011c7fc0a1339612a16ccec3285208": "2000000000000000000000", - "f0b1340b996f6f0bf0d9561c849caf7f4430befa": "100000000000000000000", - "e1443dbd95cc41237f613a48456988a04f683282": "4000086000000000000000", - "d3c6f1e0f50ec3d2a67e6bcd193ec7ae38f1657f": "6618150000000000000000", - "b68899e7610d4c93a23535bcc448945ba1666f1c": "200000000000000000000", - "a7253763cf4a75df92ca1e766dc4ee8a2745147b": "10740000000000000000000", - "75d67ce14e8d29e8c2ffe381917b930b1aff1a87": "3000000000000000000000", - "493d48bda015a9bfcf1603936eab68024ce551e0": "22528000000000000000", - "7ddd57165c87a2707f025dcfc2508c09834759bc": "1400000000000000000000", - "cff7f89a4d4219a38295251331568210ffc1c134": "1760000000000000000000", - "168d30e53fa681092b52e9bae15a0dcb41a8c9bb": "100000000000000000000", - "99b743d1d9eff90d9a1934b4db21d519d89b4a38": "100000000000000000000", - "a3d0b03cffbb269f796ac29d80bfb07dc7c6ad06": "2000000000000000000000", - "816d9772cf11399116cc1e72c26c6774c9edd739": "200000000000000000000", - "a880e2a8bf88a1a82648b4013c49c4594c433cc8": "4728000000000000000000", - "2a44a7218fe44d65a1b4b7a7d9b1c2c52c8c3e34": "62221355000000000000000", - "cb86edbc8bbb1f9131022be649565ebdb09e32a1": "2000000000000000000000", - "3915eab5ab2e5977d075dec47d96b68b4b5cf515": "61520000000000000000000", - "8165cab0eafb5a328fc41ac64dae715b2eef2c65": "1000000000000000000000", - "416c86b72083d1f8907d84efd2d2d783dffa3efb": "1999944000000000000000", - "c524086d46c8112b128b2faf6f7c7d8160a8386c": "400000000000000000000", - "902d74a157f7d2b9a3378b1f56703730e03a1719": "4000000000000000000000", - "74ef2869cbe608856045d8c2041118579f2236ea": "59724000000000000000", - "af992dd669c0883e5515d3f3112a13f617a4c367": "2000000000000000000000", - "4c6a248fc97d705def495ca20759169ef0d36471": "760000000000000000000", - "974d2f17895f2902049deaaecf09c3046507402d": "14707000000000000000", - "0239b4f21f8e05cd01512b2be7a0e18a6d974607": "1000000000000000000000", - "b97a6733cd5fe99864b3b33460d1672434d5cafd": "1999579000000000000000", - "f558a2b2dd26dd9593aae04531fd3c3cc3854b67": "198000000000000000000", - "b577b6befa054e9c040461855094b002d7f57bd7": "114000000000000000000000", - "73bfe7710f31cab949b7a2604fbf5239cee79015": "2000000000000000000000", - "5717f2d8f18ffcc0e5fe247d3a4219037c3a649c": "3998000000000000000000", - "20707e425d2a11d2c89f391b2b809f556c592421": "2000000000000000000000", - "9a6708ddb8903c289f83fe889c1edcd61f854423": "1000000000000000000000", - "fa27cc49d00b6c987336a875ae39da58fb041b2e": "10000000000000000000000", - "d688e785c98f00f84b3aa1533355c7a258e87948": "500000000000000000000", - "927cb7dc187036b5427bc7e200c5ec450c1d27d4": "216000000000000000000", - "b2bfaa58b5196c5cb7f89de15f479d1838de713d": "21000000000000000000", - "e180de9e86f57bafacd7904f9826b6b4b26337a3": "830400000000000000000", - "a1204dad5f560728a35c0d8fc79481057bf77386": "1000000000000000000000", - "6b0da25af267d7836c226bcae8d872d2ce52c941": "6000000000000000000000", - "0517448dada761cc5ba4033ee881c83037036400": "1998000000000000000000", - "7ed0a5a847bef9a9da7cba1d6411f5c316312619": "39842000000000000000", - "5b5d517029321562111b43086d0b043591109a70": "2600000000000000000000", - "56fc1a7bad4047237ce116146296238e078f93ad": "178000000000000000000", - "6c5422fb4b14e6d98b6091fdec71f1f08640419d": "400000000000000000000", - "108fe8ee2a13da487b22c6ab6d582ea71064d98c": "399800000000000000000", - "0ad3e44d3c001fa290b393617030544108ac6eb9": "1969019000000000000000", - "25aee68d09afb71d8817f3f184ec562f7897b734": "2000000000000000000000", - "c2340a4ca94c9678b7494c3c852528ede5ee529f": "48669000000000000000", - "44901e0d0e08ac3d5e95b8ec9d5e0ff5f12e0393": "417500000000000000000", - "8775a610c502b9f1e6ad4cdadb8ce29bff75f6e4": "600000000000000000000", - "682897bc4f8e89029120fcffb787c01a93e64184": "10000000000000000000000", - "f7acff934b84da0969dc37a8fcf643b7d7fbed41": "1999944000000000000000", - "f05fcd4c0d73aa167e5553c8c0d6d4f2faa39757": "13334000000000000000000", - "c981d312d287d558871edd973abb76b979e5c35e": "1970000000000000000000", - "9da61ccd62bf860656e0325d7157e2f160d93bb5": "4999980000000000000000", - "d284a50382f83a616d39b8a9c0f396e0ebbfa95d": "1000070000000000000000", - "d6cf5c1bcf9da662bcea2255905099f9d6e84dcc": "8349332000000000000000", - "c71b2a3d7135d2a85fb5a571dcbe695e13fc43cd": "1000000000000000000000", - "b22dadd7e1e05232a93237baed98e0df92b1869e": "2000000000000000000000", - "b09fe6d4349b99bc37938054022d54fca366f7af": "200000000000000000000000", - "427e4751c3babe78cff8830886febc10f9908d74": "1970000000000000000000", - "60b358cb3dbefa37f47df2d7365840da8e3bc98c": "20000000000000000000", - "dcd5bca2005395b675fde5035659b26bfefc49ee": "197000000000000000000", - "81186931184137d1192ac88cd3e1e5d0fdb86a74": "2900000000000000000000", - "de212293f8f1d231fa10e609470d512cb8ffc512": "2000000000000000000000", - "1937c5c515057553ccbd46d5866455ce66290284": "1000000000000000000000000", - "592777261e3bd852c48eca95b3a44c5b7f2d422c": "20000000000000000000000", - "bbf84292d954acd9e4072fb860b1504106e077ae": "1500000000000000000000", - "3b4100e30a73b0c734b18ffa8426d19b19312f1a": "55300000000000000000000", - "a03a3dc7c533d1744295be955d61af3f52b51af5": "40000000000000000000", - "4aa148c2c33401e66a2b586e6577c4b292d3f240": "216200000000000000000", - "ff850e3be1eb6a4d726c08fa73aad358f39706da": "1940000000000000000000", - "743651b55ef8429df50cf81938c2508de5c8870f": "2000000000000000000000", - "3700e3027424d939dbde5d42fb78f6c4dbec1a8f": "40000000000000000000", - "c1cbd2e2332a524cf219b10d871ccc20af1fb0fa": "1000000000000000000000", - "e25b9f76b8ad023f057eb11ad94257a0862e4e8c": "2000000000000000000000", - "719e891fbcc0a33e19c12dc0f02039ca05b801df": "6185800000000000000000", - "39636b25811b176abfcfeeca64bc87452f1fdff4": "400000000000000000000", - "631030a5b27b07288a45696f189e1114f12a81c0": "499970000000000000000", - "bcc84597b91e73d5c5b4d69c80ecf146860f779a": "4380000000000000000000", - "095e0174829f34c3781be1a5e38d1541ea439b7f": "6000000000000000000000", - "2e7e05e29edda7e4ae25c5173543efd71f6d3d80": "6000000000000000000000", - "dbb6ac484027041642bbfd8d80f9d0c1cf33c1eb": "2000000000000000000000", - "153c08aa8b96a611ef63c0253e2a4334829e579d": "394000000000000000000", - "10f4bff0caa5027c0a6a2dcfc952824de2940909": "2000000000000000000000", - "2ef869f0350b57d53478d701e3fee529bc911c75": "50000000000000000000", - "70ab34bc17b66f9c3b63f151274f2a727c539263": "2000000000000000000000", - "3201259caf734ad7581c561051ba0bca7fd6946b": "180000000000000000000000", - "84e9cf8166c36abfa49053b7a1ad4036202681ef": "2000000000000000000000", - "4ebc5629f9a6a66b2cf3363ac4895c0348e8bf87": "1000090000000000000000", - "e50b464ac9de35a5618b7cbf254674182b81b97e": "4100000000000000000000", - "2abdf1a637ef6c42a7e2fe217773d677e804ebdd": "5000000000000000000000", - "7a0a78a9cc393f91c3d9e39a6b8c069f075e6bf5": "1337000000000000000000", - "2d9c5fecd2b44fbb6a1ec732ea059f4f1f9d2b5c": "1010694000000000000000", - "7b712c7af11676006a66d2fc5c1ab4c479ce6037": "8000000000000000000000", - "3466f67e39636c01f43b3a21a0e8529325c08624": "842864000000000000000", - "fdd502a74e813bcfa355ceda3c176f6a6871af7f": "400000000000000000000", - "26475419c06d5f147aa597248eb46cf7befa64a5": "1640000000000000000000", - "9243d7762d77287b12638688b9854e88a769b271": "1000000000000000000000", - "723d8baa2551d2addc43c21b45e8af4ca2bfb2c2": "1760000000000000000000", - "f2fbb6d887f8b8cc3a869aba847f3d1f643c53d6": "3999000000000000000000", - "2cdb3944650616e47cb182e060322fa1487978ce": "1820000000000000000000", - "f0d21663d8b0176e05fde1b90ef31f8530fda95f": "1999944000000000000000", - "77cc02f623a9cf98530997ea67d95c3b491859ae": "1354900000000000000000", - "d1b5a454ac3405bb4179208c6c84de006bcb9be9": "500000000000000000000", - "b9920fd0e2c735c256463caa240fb7ac86a93dfa": "1760000000000000000000", - "ed1f1e115a0d60ce02fb25df014d289e3a0cbe7d": "500000000000000000000", - "23e2c6a8be8e0acfa5c4df5e36058bb7cbac5a81": "2000000000000000000000", - "f0be0faf4d7923fc444622d1980cf2d990aab307": "2000000000000000000000", - "0829d0f7bb7c446cfbb0deadb2394d9db7249a87": "40110000000000000000", - "2ecac504b233866eb5a4a99e7bd2901359e43b3d": "20000000000000000000000", - "06d6cb308481c336a6e1a225a912f6e6355940a1": "1760000000000000000000", - "d4879fd12b1f3a27f7e109761b23ca343c48e3d8": "666000000000000000000", - "857f100b1a5930225efc7e9020d78327b41c02cb": "2000000000000000000000", - "3aa42c21b9b31c3e27ccd17e099af679cdf56907": "8000000000000000000000", - "764d5212263aff4a2a14f031f04ec749dc883e45": "1850000000000000000000", - "d03a2da41e868ed3fef5745b96f5eca462ff6fda": "3000000000000000000000", - "4f26690c992b7a312ab12e1385d94acd58288e7b": "14000000000000000000000", - "7b122162c913e7146cad0b7ed37affc92a0bf27f": "1506799000000000000000", - "c87352dba582ee2066b9c002a962e003134f78b1": "500000000000000000000", - "9f4ac9c9e7e24cb2444a0454fa5b9ad9d92d3853": "835000000000000000000", - "ccf62a663f1353ba2ef8e6521dc1ecb673ec8ef7": "152000000000000000000", - "557f5e65e0da33998219ad4e99570545b2a9d511": "11024000000000000000000", - "a5f0077b351f6c505cd515dfa6d2fa7f5c4cd287": "40000000000000000000000", - "79c6002f8452ca157f1317e80a2faf24475559b7": "20000000000000000000", - "3aa07a34a1afc8967d3d1383b96b62cf96d5fa90": "20000000000000000000000", - "7f389c12f3c6164f6446566c77669503c2792527": "98500000000000000000", - "ac4cc256ae74d624ace80db078b2207f57198f6b": "2001000000000000000000", - "823ba7647238d113bce9964a43d0a098118bfe4d": "200000000000000000000", - "f5a7676ad148ae9c1ef8b6f5e5a0c2c473be850b": "200000000000000000000", - "7d34803569e00bd6b59fff081dfa5c0ab4197a62": "1712700000000000000000", - "061ea4877cd08944eb64c2966e9db8dedcfec06b": "1000000000000000000000", - "df37c22e603aedb60a627253c47d8ba866f6d972": "24000000000000000000000", - "529aa002c6962a3a8545027fd8b05f22b5bf9564": "1670000000000000000000", - "eb89a882670909cf377e9e78286ee97ba78d46c2": "802200000000000000000", - "9ac85397792a69d78f286b86432a07aeceb60e64": "14300000000000000000", - "9610592202c282ab9bd8a884518b3e0bd4758137": "268000000000000000000", - "73932709a97f02c98e51b091312865122385ae8e": "1430000000000000000000", - "5ef8c96186b37984cbfe04c598406e3b0ac3171f": "9400000000000000000000", - "b6f78da4f4d041b3bc14bc5ba519a5ba0c32f128": "172326253000000000000000", - "6f0edd23bcd85f6015f9289c28841fe04c83efeb": "19100000000000000000", - "a8a43c009100616cb4ae4e033f1fc5d7e0b6f152": "3939015000000000000000", - "7081fa6baad6cfb7f51b2cca16fb8970991a64ba": "233953000000000000000", - "9de7386dde401ce4c67b71b6553f8aa34ea5a17d": "60000000000000000000", - "54ec7300b81ac84333ed1b033cd5d7a33972e234": "200000000000000000000", - "67a80e0190721f94390d6802729dd12c31a895ad": "1999964000000000000000", - "3a4297da3c555e46c073669d0478fce75f2f790e": "1969606000000000000000", - "c2e0584a71348cc314b73b2029b6230b92dbb116": "2000000000000000000000", - "0a2ade95b2e8c66d8ae6f0ba64ca57d783be6d44": "4000000000000000000000", - "544b5b351d1bc82e9297439948cf4861dac9ae11": "22000000000000000000000", - "3ae62bd271a760637fad79c31c94ff62b4cd12f7": "2000000000000000000000", - "0d8023929d917234ae40512b1aabb5e8a4512771": "148000000000000000000", - "2858acacaf21ea81cab7598fdbd86b452e9e8e15": "666000000000000000000", - "c033b1325a0af45472c25527853b1f1c21fa35de": "2000000000000000000000", - "bbf85aaaa683738f073baef44ac9dc34c4c779ea": "2000000000000000000000", - "6ae57f27917c562a132a4d1bf7ec0ac785832926": "6000000000000000000000", - "88e6f9b247f988f6c0fc14c56f1de53ec69d43cc": "100000000000000000000", - "b72c2a011c0df50fbb6e28b20ae1aad217886790": "4000000000000000000000", - "161caf5a972ace8379a6d0a04ae6e163fe21df2b": "100000000000000000000000", - "2a63590efe9986c3fee09b0a0a338b15bed91f21": "6458400000000000000000", - "50e1c8ec98415bef442618708799437b86e6c205": "6000000000000000000000", - "33f4a6471eb1bca6a9f85b3b4872e10755c82be1": "2000000000000000000000", - "9c49deff47085fc09704caa2dca8c287a9a137da": "8000000000000000000000", - "e1173a247d29d8238df0922f4df25a05f2af77c3": "40007051000000000000000", - "51891b2ccdd2f5a44b2a8bc49a5d9bca6477251c": "310000000000000000000", - "ecaf3350b7ce144d068b186010852c84dd0ce0f0": "2000000000000000000000", - "72393d37b451effb9e1ff3b8552712e2a970d8c2": "985000000000000000000", - "1bbc60bcc80e5cdc35c5416a1f0a40a83dae867b": "2000000000000000000000", - "b8ab39805bd821184f6cbd3d2473347b12bf175c": "118200000000000000000", - "c55a6b4761fd11e8c85f15174d74767cd8bd9a68": "133700000000000000000", - "99d1b585965f406a42a49a1ca70f769e765a3f98": "16700000000000000000000", - "9ab988b505cfee1dbe9cd18e9b5473b9a2d4f536": "320000000000000000000", - "7fef8c38779fb307ec6f044bebe47f3cfae796f1": "168561000000000000000", - "322d6f9a140d213f4c80cd051afe25c620bf4c7d": "20000000000000000000", - "3bd9a06d1bd36c4edd27fc0d1f5b088ddae3c72a": "499970000000000000000", - "5dcdb6b87a503c6d8a3c65c2cf9a9aa883479a1e": "9200000000000000000000", - "6e84c2fd18d8095714a96817189ca21cca62bab1": "340935000000000000000", - "a5bad86509fbe0e0e3c0e93f6d381f1af6e9d481": "6000000000000000000000", - "3954bdfe0bf587c695a305d9244c3d5bdddac9bb": "19187461000000000000000", - "63f0e5a752f79f67124eed633ad3fd2705a397d4": "3940000000000000000000", - "33fd718f0b91b5cec88a5dc15eecf0ecefa4ef3d": "432500000000000000000", - "68027d19558ed7339a08aee8de3559be063ec2ea": "2000000000000000000000", - "96f0462ae6f8b96088f7e9c68c74b9d8ad34b347": "1790000000000000000000", - "f1f391ca92808817b755a8b8f4e2ca08d1fd1108": "6000000000000000000000", - "7fcf5ba6666f966c5448c17bf1cb0bbcd8019b06": "99999000000000000000", - "e9b9a2747510e310241d2ece98f56b3301d757e0": "2000000000000000000000", - "2100381d60a5b54adc09d19683a8f6d5bb4bfbcb": "10000000000000000000000", - "7495ae78c0d90261e2140ef2063104731a60d1ed": "34250000000000000000", - "dc911cf7dc5dd0813656670528e9338e67034786": "2000000000000000000000", - "262aed4bc0f4a4b2c6fb35793e835a49189cdfec": "10000000000000000000000", - "9ee93f339e6726ec65eea44f8a4bfe10da3d3282": "2000000000000000000000", - "a3a57b0716132804d60aac281197ff2b3d237b01": "1400000000000000000000", - "c799e34e88ff88be7de28e15e4f2a63d0b33c4cb": "200000000000000000000", - "c7506c1019121ff08a2c8c1591a65eb4bdfb4a3f": "600000000000000000000", - "795ebc2626fc39b0c86294e0e837dcf523553090": "1000000000000000000000", - "441aca82631324acbfa2468bda325bbd78477bbf": "6000000000000000000000", - "9f271d285500d73846b18f733e25dd8b4f5d4a8b": "722000000000000000000", - "d77892e2273b235d7689e430e7aeed9cbce8a1f3": "2000000000000000000000", - "4f8972838f70c903c9b6c6c46162e99d6216d451": "4610000000000000000000", - "4c85ed362f24f6b9f04cdfccd022ae535147cbb9": "1500000000000000000000", - "3807eff43aa97c76910a19752dd715ee0182d94e": "250190000000000000000", - "3a9e5441d44b243be55b75027a1ceb9eacf50df2": "1000000000000000000000", - "3deae43327913f62808faa1b6276a2bd6368ead9": "2000000000000000000000", - "c270456885342b640b4cfc1b520e1a544ee0d571": "1820000000000000000000", - "77798f201257b9c35204957057b54674aefa51df": "149000000000000000000", - "225f9eb3fb6ff3e9e3c8447e14a66e8d4f3779f6": "2000000000000000000000", - "78df2681d6d602e22142d54116dea15d454957aa": "298000000000000000000", - "283396ce3cac398bcbe7227f323e78ff96d08767": "400000000000000000000", - "747ff7943b71dc4dcdb1668078f83dd7cc4520c2": "60000000000000000000", - "a4ed11b072d89fb136759fc69b428c48aa5d4ced": "262800000000000000000", - "cc043c4388d345f884c6855e71142a9f41fd6935": "20000000000000000000", - "ab14d221e33d544629198cd096ed63dfa28d9f47": "6000000000000000000000", - "251e6838f7cec5b383c1d90146341274daf8e502": "147510000000000000000", - "36a0e61e1be47fa87e30d32888ee0330901ca991": "20000000000000000000", - "bcfc98e5c82b6adb180a3fcb120b9a7690c86a3f": "1970000000000000000000", - "18a6d2fc52be73084023c91802f05bc24a4be09f": "2000000000000000000000", - "80591a42179f34e64d9df75dcd463b28686f5574": "20000000000000000000000", - "881230047c211d2d5b00d8de4c5139de5e3227c7": "10000000000000000000000", - "9eb1ff71798f28d6e989fa1ea0588e27ba86cb7d": "140800000000000000000", - "a01fd1906a908506dedae1e208128872b56ee792": "3000000000000000000000", - "1b05ea6a6ac8af7cb6a8b911a8cce8fe1a2acfc8": "2000000000000000000000", - "6add932193cd38494aa3f03aeccc4b7ab7fabca2": "89600000000000000000", - "2aaa35274d742546670b7426264521032af4f4c3": "10000000000000000000000", - "67b8a6e90fdf0a1cac441793301e8750a9fa7957": "895000000000000000000", - "5b5be0d8c67276baabd8edb30d48ea75640b8b29": "824480000000000000000", - "28d7e5866f1d85fd1ceb32bfbe1dfc36db434566": "7199000000000000000000", - "98e3e90b28fccaee828779b8d40a5568c4116e21": "40000000000000000000", - "2dd578f7407dfbd548d05e95ccc39c485429626a": "4200000000000000000000", - "8ca6989746b06e32e2487461b1ce996a273acfd7": "20000000000000000000", - "a6f93307f8bce03195fece872043e8a03f7bd11a": "2886000000000000000000", - "efbd52f97da5fd3a673a46cbf330447b7e8aad5c": "100033000000000000000", - "52bdd9af5978850bc24110718b3723759b437e59": "1730000000000000000000", - "6e073b66d1b8c66744d88096a8dd99ec7e0228da": "4000000000000000000000", - "a29d661a6376f66d0b74e2fe9d8f26c0247ec84c": "4117300000000000000000", - "7d34ff59ae840a7413c6ba4c5bb2ba2c75eab018": "3000000000000000000000", - "2eca6a3c5d9f449d0956bd43fa7b4d7be8435958": "2000020000000000000000", - "f59f9f02bbc98efe097eabb78210979021898bfd": "9999800000000000000000", - "90e300ac71451e401f887f6e7728851647a80e07": "400000000000000000000", - "05ae7fd4bbcc80ca11a90a1ec7a301f7cccc83db": "910000000000000000000", - "e54102534de8f23effb093b31242ad3b233facfd": "4000000000000000000000", - "c127aab59065a28644a56ba3f15e2eac13da2995": "600000000000000000000", - "ed60c4ab6e540206317e35947a63a9ca6b03e2cb": "57275000000000000000", - "d855b03ccb029a7747b1f07303e0a664793539c8": "2000000000000000000000", - "1178501ff94add1c5881fe886136f6dfdbe61a94": "158000000000000000000", - "f447108b98df64b57e871033885c1ad71db1a3f9": "6916709000000000000000", - "deee2689fa9006b59cf285237de53b3a7fd01438": "450034000000000000000", - "7f01dc7c3747ca608f983dfc8c9b39e755a3b914": "206980000000000000000", - "9edeac4c026b93054dc5b1d6610c6f3960f2ad73": "1200000000000000000000", - "e3cffe239c64e7e20388e622117391301b298696": "500000000000000000000", - "ebbb4f2c3da8be3eb62d1ffb1f950261cf98ecda": "2000000000000000000000", - "38c10b90c859cbb7815692f99dae520ab5febf5e": "13169000000000000000000", - "23f9ecf3e5dddca38815d3e59ed34b5b90b4a353": "204608000000000000000", - "d7fa5ffb6048f96fb1aba09ef87b1c11dd7005e4": "1000000000000000000000", - "9ca42ee7a0b898f6a5cc60b5a5d7b1bfa3c33231": "2000000000000000000000", - "8b9577920053b1a00189304d888010d9ef2cb4bf": "500000000000000000000", - "fcd0b4827cd208ffbf5e759dba8c3cc61d8c2c3c": "8000000000000000000000", - "01ff1eb1dead50a7f2f9638fdee6eccf3a7b2ac8": "600000000000000000000", - "abde147b2af789eaa586547e66c4fa2664d328a4": "247545000000000000000", - "64042ba68b12d4c151651ca2813b7352bd56f08e": "600000000000000000000", - "dccca42045ec3e16508b603fd936e7fd7de5f36a": "19700000000000000000", - "e77a89bd45dc04eeb4e41d7b596b707e6e51e74c": "12000000000000000000000", - "f77c7b845149efba19e261bc7c75157908afa990": "2000000000000000000000", - "fa5201fe1342af11307b9142a041243ca92e2f09": "152150000000000000000000", - "40df495ecf3f8b4cef2a6c189957248fe884bc2b": "12000000000000000000000", - "3d79a853d71be0621b44e29759656ca075fdf409": "2000000000000000000000", - "6de02f2dd67efdb7393402fa9eaacbcf589d2e56": "1182000000000000000000", - "729aad4627744e53f5d66309aa74448b3acdf46f": "2000000000000000000000", - "4e4318f5e13e824a54edfe30a7ed4f26cd3da504": "2000000000000000000000", - "c6a286e065c85f3af74812ed8bd3a8ce5d25e21d": "18200000000000000000", - "fd686de53fa97f99639e2568549720bc588c9efc": "1969606000000000000000", - "06b0ff834073cce1cbc9ea557ea87b605963e8b4": "300000000000000000000", - "72b5633fe477fe542e742facfd690c137854f216": "1670000000000000000000", - "8bf373d076814cbc57e1c6d16a82c5be13c73d37": "200000000000000000000", - "cf264e6925130906c4d7c18591aa41b2a67f6f58": "2000000000000000000000", - "0ea2a210312b3e867ee0d1cc682ce1d666f18ed5": "10000000000000000000000", - "d02afecf8e2ec2b62ac8ad204161fd1fae771d0e": "2000000000000000000000", - "e6b20f980ad853ad04cbfc887ce6601c6be0b24c": "4000000000000000000000", - "4280a58f8bb10b9440de94f42b4f592120820191": "2000000000000000000000", - "a914cdb571bfd93d64da66a4e108ea134e50d000": "1430143000000000000000", - "60864236930d04d8402b5dcbeb807f3caf611ea2": "4000000000000000000000", - "f9dd239008182fb519fb30eedd2093fed1639be8": "500000000000000000000", - "18e53243981aabc8767da10c73449f1391560eaa": "6000000000000000000000", - "c3a9226ae275df2cab312b911040634a9c9c9ef6": "4000000000000000000000", - "4fcc19ea9f4c57dcbce893193cfb166aa914edc5": "7001380000000000000000", - "c1e1409ca52c25435134d006c2a6a8542dfb7273": "34380000000000000000", - "981ddf0404e4d22dda556a0726f00b2d98ab9569": "999972000000000000000", - "e5bcc88c3b256f6ed5fe550e4a18198b943356ad": "2000000000000000000000", - "74a17f064b344e84db6365da9591ff1628257643": "20000000000000000000", - "2720f9ca426ef2f2cbd2fecd39920c4f1a89e16d": "2000000000000000000000", - "8d04a5ebfb5db409db0617c9fa5631c192861f4a": "970000000000000000000", - "f18b14cbf6694336d0fe12ac1f25df2da0c05dbb": "3999800000000000000000", - "56ac20d63bd803595cec036da7ed1dc66e0a9e07": "63927000000000000000", - "92c94c2820dfcf7156e6f13088ece7958b3676fd": "95500000000000000000", - "968dea60df3e09ae3c8d3505e9c080454be0e819": "6000000000000000000000", - "9268d62646563611dc3b832a30aa2394c64613e3": "2000000000000000000000", - "5a192b964afd80773e5f5eda6a56f14e25e0c6f3": "500000000000000000000", - "df8d48b1eb07b3c217790e6c2df04dc319e7e848": "500000000000000000000", - "7f61fa6cf5f898b440dac5abd8600d6d691fdef9": "280000000000000000000", - "929d368eb46a2d1fbdc8ffa0607ede4ba88f59ad": "2000000000000000000000", - "9982a5890ffb5406d3aca8d2bfc1dd70aaa80ae0": "2000000000000000000000", - "bf2aea5a1dcf6ed3b5e8323944e983fedfd1acfb": "1580000000000000000000", - "46aa501870677e7f0a504876b4e8801a0ad01c46": "800000000000000000000", - "8f473d0ab876ddaa15608621d7013e6ff714b675": "470400000000000000000", - "02290fb5f9a517f82845acdeca0fc846039be233": "2000000000000000000000", - "8a5831282ce14a657a730dc18826f7f9b99db968": "4330268000000000000000", - "0328510c09dbcd85194a98d67c33ac49f2f94d60": "11000000000000000000000", - "cf883a20329667ea226a1e3c765dbb6bab32219f": "3038972000000000000000", - "2615100ea7e25bba9bca746058afbbb4ffbe4244": "500000000000000000000", - "b115ee3ab7641e1aa6d000e41bfc1ec7210c2f32": "13000000000000000000000", - "5cfa8d568575658ca4c1a593ac4c5d0e44c60745": "291000000000000000000", - "d3c24d4b3a5e0ff8a4622d518edd73f16ab28610": "20000000000000000000", - "a639acd96b31ba53b0d08763229e1f06fd105e9d": "8000000000000000000000", - "ffa4aff1a37f984b0a67272149273ae9bd41e3bc": "10000000000000000000000", - "cf684dfb8304729355b58315e8019b1aa2ad1bac": "432500000000000000000", - "5797b60fd2894ab3c2f4aede86daf2e788d745ad": "6000000000000000000000", - "a6a0de421ae54f6d17281308f5646d2f39f7775d": "2000000000000000000000", - "08504f05643fab5919f5eea55925d7a3ed7d807a": "20000000000000000000", - "7a7068e1c3375c0e599db1fbe6b2ea23b8f407d2": "2000000000000000000000", - "1078d7f61b0e56c74ee6635b2e1819ef1e3d8785": "1000000000000000000000", - "6e12b51e225b4a4372e59ad7a2a1a13ea3d3a137": "14172200000000000000000", - "6a2e86469a5bf37cee82e88b4c3863895d28fcaf": "519000000000000000000", - "197672fd39d6f246ce66a790d13aa922d70ea109": "1000000000000000000000", - "8009a7cbd192b3aed4adb983d5284552c16c7451": "4000000000000000000000", - "f6c3c48a1ac0a34799f04db86ec7a975fe7768f3": "1970000000000000000000", - "16be75e98a995a395222d00bd79ff4b6e638e191": "36000000000000000000000", - "6c05e34e5ef2f42ed09deff1026cd66bcb6960bb": "2000000000000000000000", - "5d6ae8cbd6b3393c22d16254100d0238e808147c": "719992000000000000000", - "1a376e1b2d2f590769bb858d4575320d4e149970": "4841200000000000000000", - "f6ead67dbf5b7eb13358e10f36189d53e643cfcf": "40000000000000000000000", - "467d5988249a68614716659840ed0ae6f6f457bc": "387500000000000000000", - "aa960e10c52391c54e15387cc67af827b5316dcc": "2000000000000000000000", - "483ba99034e900e3aedf61499d3b2bce39beb7aa": "985000000000000000000", - "86f23e9c0aafc78b9c404dcd60339a925bffa266": "400000000000000000000", - "d05a447c911dbb275bfb2e5a37e5a703a56f9997": "200000000000000000000", - "edb71ec41bda7dce86e766e6e8c3e9907723a69b": "20000000000000000000", - "f86a3ea8071f7095c7db8a05ae507a8929dbb876": "336000000000000000000", - "323b3cfe3ee62bbde2a261e53cb3ecc05810f2c6": "13790000000000000000000", - "936f3813f5f6a13b8e4ffec83fe7f826186a71cd": "520000000000000000000", - "6db72bfd43fef465ca5632b45aab7261404e13bf": "2000000000000000000000", - "9bb76204186af2f63be79168601687fc9bad661f": "300000000000000000000", - "28ab165ffb69eda0c549ae38e9826f5f7f92f853": "1296890000000000000000", - "c73e2112282215dc0762f32b7e807dcd1a7aae3e": "6900000000000000000000", - "f8086e42661ea929d2dda1ab6c748ce3055d111e": "1000000000000000000000", - "4db21284bcd4f787a7556500d6d7d8f36623cf35": "1939806000000000000000", - "c48651c1d9c16bff4c9554886c3f3f26431f6f68": "658000000000000000000", - "9bdbdc9b973431d13c89a3f9757e9b3b6275bfc7": "499971000000000000000", - "560da37e956d862f81a75fd580a7135c1b246352": "10000000000000000000000", - "4b60a3e253bf38c8d5662010bb93a473c965c3e5": "1490000000000000000000", - "64e02abb016cc23a2934f6bcddb681905021d563": "1000000000000000000000", - "ac2c8e09d06493a63858437bd20be01962450365": "1910000000000000000000", - "9bf9b3b2f23cf461eb591f28340bc719931c8364": "1000000000000000000000", - "9b5c39f7e0ac168c8ed0ed340477117d1b682ee9": "98000000000000000000", - "f75bb39c799779ebc04a336d260da63146ed98d0": "25000000000000000000", - "a7966c489f4c748a7ae980aa27a574251767caf9": "3000000000000000000000", - "ea53c954f4ed97fd4810111bdab69ef981ef25b9": "17300000000000000000000", - "03a26cfc4c18316f70d59e9e1a79ee3e8b962f4c": "2000000000000000000000", - "3e63ce3b24ca2865b4c5a687b7aea3597ef6e548": "2000000000000000000000", - "500c902958f6421594d1b6ded712490d52ed6c44": "1970000000000000000000", - "6f44ca09f0c6a8294cbd519cdc594ad42c67579f": "50000000000000000000", - "3616fb46c81578c9c8eb4d3bf880451a88379d7d": "200000000000000000000", - "57bc20e2d62b3d19663cdb4c309d5b4f2fc2db8f": "100000000000000000000", - "1cebf0985d7f680aaa915c44cc62edb49eab269e": "1000000000000000000000", - "c0cbf6032fa39e7c46ff778a94f7d445fe22cf30": "310000000000000000000", - "c58b9cc61dedbb98c33f224d271f0e228b583433": "3880000000000000000000", - "e9c6dfae97f7099fc5f4e94b784db802923a1419": "48800000000000000000", - "9bacd3d40f3b82ac91a264d9d88d908eac8664b9": "20000000000000000000000", - "63d80048877596e0c28489e650cd4ac180096a49": "280000000000000000000", - "e6a6f6dd6f70a456f4ec15ef7ad5e5dbb68bd7dc": "200000000000000000000", - "d418870bc2e4fa7b8a6121ae0872d55247b62501": "1580000000000000000000", - "e2f9383d5810ea7b43182b8704b62b27f5925d39": "400000000000000000000", - "bd5e473abce8f97a6932f77c2facaf9cc0a00514": "1117350000000000000000", - "2ff1ca55fd9cec1b1fe9f0a9abb74c513c1e2aaa": "3000000000000000000000", - "9d99b189bbd9a48fc2e16e8fcda33bb99a317bbb": "1126900000000000000000", - "6e96faeda3054302c45f58f161324c99a3eebb62": "20000000000000000000", - "ef93818f684db0c3675ec81332b3183ecc28a495": "1550000000000000000000", - "2659facb1e83436553b5b42989adb8075f9953ed": "29356000000000000000", - "c4ffadaaf2823fbea7bff702021bffc4853eb5c9": "42233000000000000000", - "e9864c1afc8eaad37f3ba56fcb7477cc622009b7": "79000000000000000000", - "87ef6d8b6a7cbf9b5c8c97f67ee2adc2a73b3f77": "200400000000000000000", - "c043f2452dcb9602ef62bd360e033dd23971fe84": "2000000000000000000000", - "0fdd65402395df9bd19fee4507ef5345f745104c": "5000000000000000000000", - "939c4313d2280edf5e071bced846063f0a975d54": "120000000000000000000000", - "b28245037cb192f75785cb86cbfe7c930da258b0": "16000000000000000000000", - "a80cb1738bac08d4f9c08b4deff515545fa8584f": "500000000000000000000", - "62971bf2634cee0be3c9890f51a56099dbb9519b": "656000000000000000000", - "f2efe96560c9d97b72bd36447843885c1d90c231": "2000000000000000000000", - "0e390f44053ddfcef0d608b35e4d9c2cbe9871bb": "1970000000000000000000", - "61d101a033ee0e2ebb3100ede766df1ad0244954": "500000000000000000000", - "6785513cf732e47e87670770b5419be10cd1fc74": "2000000000000000000000", - "167699f48a78c615512515739958993312574f07": "39000000000000000000", - "68ec79d5be7155716c40941c79d78d17de9ef803": "500600000000000000000", - "a0e8ba661b48154cf843d4c2a5c0f792d528ee29": "400000000000000000000", - "1a201b4327cea7f399046246a3c87e6e03a3cda8": "1000000000000000000000", - "f60f62d73937953fef35169e11d872d2ea317eec": "5348000000000000000000", - "c0c04d0106810e3ec0e54a19f2ab8597e69a573d": "50000000000000000000", - "ef47cf073e36f271d522d7fa4e7120ad5007a0bc": "2500000000000000000000", - "a44fe800d96fcad73b7170d0f610cb8c0682d6ce": "4000000000000000000000", - "010f4a98dfa1d9799bf5c796fb550efbe7ecd877": "8023366000000000000000", - "708fa11fe33d85ad1befcbae3818acb71f6a7d7e": "18200000000000000000", - "b38c4e537b5df930d65a74d043831d6b485bbde4": "400000000000000000000", - "250a69430776f6347703f9529783955a6197b682": "1940000000000000000000", - "2d35a9df62757f7ffad1049afb06ca4afc464c51": "20000000000000000000", - "6aff1466c2623675e3cb0e75e423d37a25e442eb": "1730000000000000000000", - "fc15cb99a8d1030b12770add033a79ee0d0c908c": "350056000000000000000", - "e784dcc873aa8c1513ec26ff36bc92eac6d4c968": "200000000000000000000", - "b1c328fb98f2f19ab6646f0a7c8c566fda5a8540": "2500000000000000000000", - "247a0a11c57f0383b949de540b66dee68604b0a1": "1069600000000000000000", - "1af60343360e0b2d75255210375720df21db5c7d": "1000000000000000000000", - "8794bf47d54540ece5c72237a1ffb511ddb74762": "2000000000000000000000", - "e76d945aa89df1e457aa342b31028a5e9130b2ce": "1015200000000000000000", - "a30e0acb534c9b3084e8501da090b4eb16a2c0cd": "2000000000000000000000", - "7099d12f6ec656899b049a7657065d62996892c8": "400000000000000000000", - "7be7f2456971883b9a8dbe4c91dec08ac34e8862": "3000000000000000000000", - "42746aeea14f27beff0c0da64253f1e7971890a0": "1550000000000000000000", - "736b44503dd2f6dd5469ff4c5b2db8ea4fec65d0": "313950000000000000000", - "822edff636563a6106e52e9a2598f7e6d0ef2782": "36099000000000000000", - "03c647a9f929b0781fe9ae01caa3e183e876777e": "445800000000000000000", - "63612e7862c27b587cfb6daf9912cb051f030a9f": "43458000000000000000", - "d46bae61b027e5bb422e83a3f9c93f3c8fc77d27": "2000000000000000000000", - "5f23ba1f37a96c45bc490259538a54c28ba3b0d5": "1200000000000000000000", - "d41d7fb49fe701baac257170426cc9b38ca3a9b2": "176000000000000000000", - "1ebacb7844fdc322f805904fbf1962802db1537c": "10000000000000000000000", - "9c80bc18e9f8d4968b185da8c79fa6e11ffc3e23": "240000000000000000000", - "e4ca0a5238564dfc91e8bf22bade2901619a1cd4": "1000000000000000000000", - "1ad72d20a76e7fcc6b764058f48d417d496fa6cd": "2000000000000000000000", - "d3bc730937fa75d8452616ad1ef1fe7fffe0d0e7": "83363000000000000000", - "eac1482826acb6111e19d340a45fb851576bed60": "32177000000000000000", - "01e40521122530d9ac91113c06a0190b6d63850b": "1337000000000000000000", - "9e20e5fd361eabcf63891f5b87b09268b8eb3793": "100000000000000000000", - "69ff429074cb9b6c63bc914284bce5f0c8fbf7d0": "500000000000000000000", - "0d3265d3e7bdb93d5e8e8b1ca47f210a793ecc8e": "200000000000000000000", - "5b4ea16db6809b0352d4b6e81c3913f76a51bb32": "400000000000000000000", - "d8fe088fffce948f5137ee23b01d959e84ac4223": "227942000000000000000", - "7e4e9409704121d1d77997026ff06ea9b19a8b90": "2602600000000000000000", - "96b434fe0657e42acc8212b6865139dede15979c": "4000000000000000000000", - "22f004df8de9e6ebf523ccace457accb26f97281": "10000000000000000000000", - "d8f9240c55cff035523c6d5bd300d370dc8f0c95": "285000000000000000000", - "9d9e57fde30e5068c03e49848edce343b7028358": "1730000000000000000000", - "317cf4a23cb191cdc56312c29d15e210b3b9b784": "144000000000000000000", - "79f08e01ce0988e63c7f8f2908fade43c7f9f5c9": "18200000000000000000", - "04e5f5bc7c923fd1e31735e72ef968fd67110c6e": "1611000000000000000000", - "1ec4ec4b77bf19d091a868e6f49154180541f90e": "2000000000000000000000", - "8737dae671823a8d5917e0157ace9c43468d946b": "1999944000000000000000", - "f998ca3411730a6cd10e7455b0410fb0f6d3ff80": "2000000000000000000000", - "6e2eab85dc89fe29dc0aa1853247dab43a523d56": "80000000000000000000", - "72c083beadbdc227c5fb43881597e32e83c26056": "20000000000000000000000", - "5902e44af769a87246a21e079c08bf36b06efeb3": "1000000000000000000000", - "cc2d04f0a4017189b340ca77198641dcf6456b91": "3940000000000000000000", - "bde4c73f969b89e9ceae66a2b51844480e038e9a": "1000000000000000000000", - "adff0d1d0b97471e76d789d2e49c8a74f9bd54ff": "1880000000000000000000", - "397cdb8c80c67950b18d654229610e93bfa6ee1a": "1172938000000000000000", - "a3e051fb744aa3410c3b88f899f5d57f168df12d": "2955000000000000000000", - "810db25675f45ea4c7f3177f37ce29e22d67999c": "200000000000000000000", - "1e13ec51142cebb7a26083412c3ce35144ba56a1": "5000000000000000000000", - "25bdfa3ee26f3849617b230062588a97e3cae701": "1000008000000000000000", - "ae538c73c5b38d8d584d7ebdadefb15cabe48357": "999000000000000000000", - "a2ecce2c49f72a0995a0bda57aacf1e9f001e22a": "4000000000000000000000", - "7e24fbdad290175eb2df6d180a19b9a9f41370be": "1000000000000000000000", - "e8cc43bc4f8acf39bff04ebfbf42aac06a328470": "400000000000000000000", - "c2779771f0536d79a8708f6931abc44b3035e999": "20002000000000000000000", - "ab27ba78c8e5e3daef31ad05aef0ff0325721e08": "468000000000000000000", - "563cb8803c1d32a25b27b64114852bd04d9c20cd": "204400000000000000000", - "08d4267feb15da9700f7ccc3c84a8918bf17cfde": "1790000000000000000000", - "d1778c13fbd968bc083cb7d1024ffe1f49d02caa": "4020000000000000000000", - "1796bcc97b8abc717f4b4a7c6b1036ea2182639f": "355242000000000000000", - "beecd6af900c8b064afcc6073f2d85d59af11956": "2000000000000000000000", - "045ed7f6d9ee9f252e073268db022c6326adfc5b": "100000000000000000000", - "b88a37c27f78a617d5c091b7d5b73a3761e65f2a": "2000000000000000000000", - "72fb49c29d23a18950c4b2dc0ddf410f532d6f53": "2000000000000000000000", - "6ecaefa6fc3ee534626db02c6f85a0c395571e77": "600000000000000000000", - "d1811c55976980f083901d8a0db269222dfb5cfe": "1550000000000000000000", - "98855c7dfbee335344904a12c40c731795b13a54": "1069600000000000000000", - "92a898d46f19719c38126a8a3c27867ae2cee596": "2000000000000000000000", - "ca428863a5ca30369892d612183ef9fb1a04bcea": "1520000000000000000000", - "797427e3dbf0feae7a2506f12df1dc40326e8505": "1000000000000000000000", - "3d574fcf00fae1d98cc8bf9ddfa1b3953b9741bc": "1970000000000000000000", - "28818e18b610001321b31df6fe7d2815cdadc9f5": "1000000000000000000000", - "5f3e1e6739b0c62200e00a003691d9efb238d89f": "3000000000000000000000", - "d9d370fec63576ab15b318bf9e58364dc2a3552a": "100000000000000000000", - "b223bf1fbf80485ca2b5567d98db7bc3534dd669": "4000000000000000000000", - "7b27d0d1f3dd3c140294d0488b783ebf4015277d": "400000000000000000000", - "7930c2d9cbfa87f510f8f98777ff8a8448ca5629": "199955000000000000000", - "820c19291196505b65059d9914b7090be1db87de": "140000000000000000000", - "e545ee84ea48e564161e9482d59bcf406a602ca2": "1850000000000000000000", - "af4cf41785161f571d0ca69c94f8021f41294eca": "9850000000000000000000", - "7a4f9b850690c7c94600dbee0ca4b0a411e9c221": "1910000000000000000000", - "ddab6b51a9030b40fb95cf0b748a059c2417bec7": "2000000000000000000000", - "315ef2da620fd330d12ee55de5f329a696e0a968": "150000000000000000000", - "4db1c43a0f834d7d0478b8960767ec1ac44c9aeb": "872870000000000000000", - "2fef81478a4b2e8098db5ff387ba2153f4e22b79": "999000000000000000000", - "6c6aa0d30b64721990b9504a863fa0bfb5e57da7": "2700000000000000000000", - "33380c6fff5acd2651309629db9a71bf3f20c5ba": "16100000000000000000000", - "4eebf1205d0cc20cee6c7f8ff3115f56d48fba26": "19400000000000000000", - "03cc9d2d21f86b84ac8ceaf971dba78a90e62570": "1610000000000000000000", - "728f9ab080157db3073156dbca1a169ef3179407": "500000000000000000000", - "30ed11b77bc17e5e6694c8bc5b6e4798f68d9ca7": "143731500000000000000000", - "f617b967b9bd485f7695d2ef51fb7792d898f500": "500000000000000000000", - "c0cbad3ccdf654da22cbcf5c786597ca1955c115": "2000000000000000000000", - "80522ddf944ec52e27d724ed4c93e1f7be6083d6": "200000000000000000000", - "4e90ccb13258acaa9f4febc0a34292f95991e230": "15800000000000000000", - "ff207308ced238a6c01ad0213ca9eb4465d42590": "1999944000000000000000", - "35f2949cf78bc219bb4f01907cf3b4b3d3865482": "289800000000000000000", - "68f525921dc11c329b754fbf3e529fc723c834cd": "1610000000000000000000", - "81139bfdcca656c430203f72958c543b6580d40c": "2000000000000000000000", - "9d511543b3d9dc60d47f09d49d01b6c498d82078": "11245000000000000000000", - "084d103254759b343cb2b9c2d8ff9e1ac5f14596": "7600000000000000000000", - "b323dcbf2eddc5382ee4bbbb201ca3931be8b438": "2000000000000000000000", - "349d2c918fd09e2807318e66ce432909176bd50b": "1120000000000000000000", - "b535f8db879fc67fec58824a5cbe6e5498aba692": "1910000000000000000000", - "824074312806da4748434266ee002140e3819ac2": "1507000000000000000000", - "e8ef100d7ce0895832f2678df72d4acf8c28b8e3": "500038000000000000000", - "84af1b157342d54368260d17876230a534b54b0e": "985000000000000000000", - "419a71a36c11d105e0f2aef5a3e598078e85c80b": "5000000000000000000000", - "55af092f94ba6a79918b0cf939eab3f01b3f51c7": "149940000000000000000", - "35a549e8fd6c368d6dcca6d2e7d18e4db95f5284": "499938000000000000000", - "f0e2649c7e6a3f2c5dfe33bbfbd927ca3c350a58": "2000000000000000000000", - "f4b759cc8a1c75f80849ebbcda878dc8f0d66de4": "400000000000000000000", - "21846f2fdf5a41ed8df36e5ed8544df75988ece3": "1999944000000000000000", - "229ff80bf5708009a9f739e0f8b560914016d5a6": "333333000000000000000", - "da505537537ffb33c415fec64e69bae090c5f60f": "160000000000000000000", - "b91d9e916cd40d193db60e79202778a0087716fc": "404800000000000000000", - "bb6823a1bd819f13515538264a2de052b4442208": "25610000000000000000", - "459393d63a063ef3721e16bd9fde45ee9dbd77fb": "1968818000000000000000", - "95f62d0243ede61dad9a3165f53905270d54e242": "1610000000000000000000", - "b0bb29a861ea1d424d45acd4bfc492fb8ed809b7": "80000000000000000000", - "5e74ed80e9655788e1bb269752319667fe754e5a": "56000000000000000000", - "a276b058cb98d88beedb67e543506c9a0d9470d8": "2668652000000000000000", - "8ae9ef8c8a8adfa6ab798ab2cdc405082a1bbb70": "2000000000000000000000", - "e5102c3b711b810344197419b1cd8a7059f13e32": "299999000000000000000", - "c32038ca52aee19745be5c31fcdc54148bb2c4d0": "49984000000000000000", - "13e321728c9c57628058e93fc866a032dd0bda90": "714580000000000000000", - "c2bae4a233c2d85724f0dabebda0249d833e37d3": "5000000000000000000000", - "10d32416722ca4e648630548ead91edd79c06aff": "100000000000000000000", - "d5f07552b5c693c20067b378b809cee853b8f136": "505540000000000000000", - "8668af868a1e98885f937f2615ded6751804eb2d": "20000000000000000000", - "139d3531c9922ad56269f6309aa789fb2485f98c": "4000000000000000000000", - "1d29c7aab42b2048d2b25225d498dba67a03fbb2": "200000000000000000000", - "d35075ca61fe59d123969c36a82d1ab2d918aa38": "2674000000000000000000", - "d6fc0446c6a8d40ae3551db7e701d1fa876e4a49": "2000000000000000000000", - "fccd0d1ecee27addea95f6857aeec8c7a04b28ee": "10000000000000000000000", - "c12cfb7b3df70fceca0ede263500e27873f8ed16": "1000000000000000000000", - "d0db456178206f5c4430fe005063903c3d7a49a7": "706245000000000000000", - "73cf80ae9688e1580e68e782cd0811f7aa494d2c": "7760000000000000000000", - "d60651e393783423e5cc1bc5f889e44ef7ea243e": "398800000000000000000", - "048a8970ea4145c64d5517b8de5b46d0595aad06": "20000000000000000000000", - "dd9b485a3b1cd33a6a9c62f1e5bee92701856d25": "225073000000000000000", - "5b287c7e734299e727626f93fb1187a60d5057fe": "101230000000000000000", - "635c00fdf035bca15fa3610df3384e0fb79068b1": "9000000000000000000000", - "630a913a9031c9492abd4c41dbb15054cfec4416": "5688000000000000000000", - "af3614dcb68a36e45a4e911e62796247222d595b": "2259800000000000000000", - "335e22025b7a77c3a074c78b8e3dfe071341946e": "10178744000000000000000", - "f0e1dfa42adeac2f17f6fdf584c94862fd563393": "500000000000000000000", - "1a9e702f385dcd105e8b9fa428eea21c57ff528a": "1400000000000000000000", - "8ce4949d8a16542d423c17984e6739fa72ceb177": "24999975000000000000000", - "5f29c9de765dde25852af07d33f2ce468fd20982": "2000000000000000000000", - "dbf5f061a0f48e5e69618739a77d2ec19768d201": "152000000000000000000", - "b247cf9c72ec482af3eaa759658f793d670a570c": "912000000000000000000", - "99f4147ccc6bcb80cc842e69f6d00e30fa4133d9": "400000000000000000000", - "ba6d31b9a261d640b5dea51ef2162c3109f1eba8": "5000000000000000000000", - "f05ba8d7b68539d933300bc9289c3d9474d0419e": "126400000000000000000", - "682e96276f518d31d7e56e30dfb009c1218201bd": "20000000000000000000", - "0927220492194b2eda9fc4bbe38f25d681dfd36c": "6000000000000000000000", - "a3c33afc8cb4704e23153de2049d35ae71332472": "799600000000000000000", - "05c736d365aa37b5c0be9c12c8ad5cd903c32cf9": "6002000000000000000000", - "d8eef4cf4beb01ee20d111748b61cb4d3f641a01": "2740000000000000000000", - "16c1bf5b7dc9c83c179efacbcf2eb174e3561cb3": "1000000000000000000000", - "d79db5ab43621a7a3da795e58929f3dd25af67d9": "1999944000000000000000", - "28efae6356509edface89fc61a7fdcdb39eea8e5": "5348000000000000000000", - "c55005a6c37e8ca7e543ce259973a3cace961a4a": "2000000000000000000000", - "ab3d86bc82927e0cd421d146e07f919327cdf6f9": "1910000000000000000000", - "b74ed2666001c16333cf7af59e4a3d4860363b9c": "193600000000000000000", - "1899f69f653b05a5a6e81f480711d09bbf97588c": "1955000000000000000000", - "27fc85a49cff90dbcfdadc9ddd40d6b9a2210a6c": "100000000000000000000", - "cd1ed263fbf6f6f7b48aef8f733d329d4382c7c7": "18500000000000000000", - "d97fe6f53f2a58f6d76d752adf74a8a2c18e9074": "309990000000000000000", - "80da2fdda29a9e27f9e115975e69ae9cfbf3f27e": "200000000000000000000", - "09146ea3885176f07782e1fe30dce3ce24c49e1f": "20000000000000000000", - "393ff4255e5c658f2e7f10ecbd292572671bc2d2": "2000000000000000000000", - "a390ca122b8501ee3e5e07a8ca4b419f7e4dae15": "100000000000000000000", - "6d9193996b194617211106d1635eb26cc4b66c6c": "399640000000000000000", - "999c49c174ca13bc836c1e0a92bff48b271543ca": "3280000000000000000000", - "7421ce5be381738ddc83f02621974ff0686c79b8": "1632000000000000000000", - "6be9030ee6e2fbc491aca3de4022d301772b7b7d": "26740000000000000000", - "81bd75abd865e0c3f04a0b4fdbcb74d34082fbb7": "4000000000000000000000", - "8bc1ff8714828bf286ff7e8a7709106548ed1b18": "10000000000000000000000", - "a0aadbd9509722705f6d2358a5c79f37970f00f6": "200000000000000000000", - "3d881433f04a7d0d27f84944e08a512da3555287": "1200000000000000000000", - "cc1d6ead01aada3e8dc7b95dca25df26eefa639d": "2000000000000000000000", - "35106ba94e8563d4b3cb3c5c692c10e604b7ced8": "2000000000000000000000", - "4d8697af0fbf2ca36e8768f4af22133570685a60": "20000000000000000000", - "1afcc585896cd0ede129ee2de5c19ea811540b64": "3231259000000000000000", - "e5215631b14248d45a255296bed1fbfa0330ff35": "1310000000000000000000", - "e3878f91ca86053fced5444686a330e09cc388fb": "194000000000000000000", - "555df19390c16d01298772bae8bc3a1152199cbd": "200000000000000000000", - "dc3dae59ed0fe18b58511e6fe2fb69b219689423": "100000000000000000000", - "74648caac748dd135cd91ea14c28e1bd4d7ff6ae": "3100000000000000000000", - "cf2e2ad635e9861ae95cb9bafcca036b5281f5ce": "35200000000000000000000", - "14eec09bf03e352bd6ff1b1e876be664ceffd0cf": "20094000000000000000", - "856e5ab3f64c9ab56b009393b01664fc0324050e": "1790000000000000000000", - "632b9149d70178a7333634275e82d5953f27967b": "700000000000000000000", - "2a39190a4fde83dfb3ddcb4c5fbb83ac6c49755c": "1000000000000000000000", - "369ef761195f3a373e24ece6cd22520fe0b9e86e": "534933000000000000000", - "16afa787fc9f94bdff6976b1a42f430a8bf6fb0f": "2000000000000000000000", - "1b0b31afff4b6df3653a94d7c87978ae35f34aae": "354600000000000000000", - "b4d82f2e69943f7de0f5f7743879406fac2e9cec": "40000000000000000000", - "09d6cefd75b0c4b3f8f1d687a522c96123f1f539": "6000000000000000000000", - "01577afd4e50890247c9b10d44af73229aec884f": "680000000000000000000", - "a35606d51220ee7f2146d411582ee4ee4a45596e": "3996800000000000000000", - "352e77c861696ef96ad54934f894aa8ea35151dd": "1000000000000000000000", - "b87f5376c2de0b6cc3c179c06087aa473d6b4674": "1337000000000000000000", - "5b49afcd75447838f6e7ceda8d21777d4fc1c3c0": "4000000000000000000000", - "b884add88d83dc564ab8e0e02cbdb63919aea844": "2000000000000000000000", - "5c312a56c784b122099b764d059c21ece95e84ca": "95000000000000000000", - "4697baaf9ccb603fd30430689d435445e9c98bf5": "199600000000000000000", - "c625f8c98d27a09a1bcabd5128b1c2a94856af30": "200000000000000000000", - "19f5caf4c40e6908813c0745b0aea9586d9dd931": "664000000000000000000", - "1e596a81b357c6f24970cc313df6dbdaabd0d09e": "2000000000000000000000", - "c1631228efbf2a2e3a4092ee8900c639ed34fbc8": "955000000000000000000", - "6f6cf20649a9e973177ac67dbadee4ebe5c7bdda": "5080000000000000000000", - "5fa7bfe043886127d4011d8356a47e947963aca8": "1820000000000000000000", - "6af8e55969682c715f48ad4fc0fbb67eb59795a3": "2000000000000000000000", - "122f56122549d168a5c5e267f52662e5c5cce5c8": "185000000000000000000", - "7713ab8037411c09ba687f6f9364f0d3239fac28": "10000000000000000000000", - "31ccc616b3118268e75d9ab8996c8858ebd7f3c3": "399924000000000000000", - "09c88f917e4d6ad473fa12e98ea3c4472a5ed6da": "10000000000000000000000", - "e796fd4e839b4c95d7510fb7c5c72b83c6c3e3c7": "512200000000000000000", - "a8285539869d88f8a961533755717d7eb65576ae": "200000000000000000000", - "d929c65d69d5bbaea59762662ef418bc21ad924a": "1000000000000000000000", - "f7418aa0e713d248228776b2e7434222ae75e3a5": "2000000000000000000000", - "7f0b90a1fdd48f27b268feb38382e55ddb50ef0f": "940000000000000000000", - "34a0431fff5ead927f3c69649616dc6e97945f6f": "400000000000000000000", - "1b3cb81e51011b549d78bf720b0d924ac763a7c2": "560000000000000000000000", - "155b3779bb6d56342e2fda817b5b2d81c7f41327": "50200000000000000000", - "ecd486fc196791b92cf612d348614f9156488b7e": "12000000000000000000000", - "82a8cbbfdff02b2e38ae4bbfca15f1f0e83b1aea": "84999000000000000000", - "06b0c1e37f5a5ec4bbf50840548f9d3ac0288897": "4000098000000000000000", - "e6d49f86c228f47367a35e886caacb271e539429": "412656000000000000000", - "704a6eb41ba34f13addde7d2db7df04915c7a221": "1820000000000000000000", - "745ccf2d819edbbddea8117b5c49ed3c2a066e93": "4000000000000000000000", - "6d3b7836a2b9d899721a4d237b522385dce8dfcd": "1000070000000000000000", - "856aa23c82d7215bec8d57f60ad75ef14fa35f44": "20000000000000000000000", - "ea79057dabef5e64e7b44f7f18648e7e533718d2": "200000000000000000000", - "9df057cd03a4e27e8e032f857985fd7f01adc8d7": "2000000000000000000000", - "5f2f07d2d697e8c567fcfdfe020f49f360be2139": "2000000000000000000000", - "5efbdfe5389999633c26605a5bfc2c1bb5959393": "69200000000000000000", - "047e87c8f7d1fce3b01353a85862a948ac049f3e": "1490000000000000000000", - "265383d68b52d034161bfab01ae1b047942fbc32": "21000600000000000000000", - "760ff3354e0fde938d0fb5b82cef5ba15c3d2916": "10000000000000000000000", - "bc46d537cf2edd403565bde733b2e34b215001bd": "20000000000000000000000", - "ee58fb3db29070d0130188ce472be0a172b89055": "10021400000000000000000", - "75abe5270f3a78ce007cf37f8fbc045d489b7bb1": "1999944000000000000000", - "5fc6c11426b4a1eae7e51dd512ad1090c6f1a85b": "2730000000000000000000", - "26cfffd052152bb3f957b478d5f98b233a7c2b92": "4000000000000000000000", - "0a4a011995c681bc999fdd79754e9a324ae3b379": "41350300000000000000000", - "6fa60df818a5446418b1bbd62826e0b9825e1318": "13200000000000000000000", - "63d55ad99b9137fd1b20cc2b4f03d42cbaddf334": "400000000000000000000", - "679b9a109930517e8999099ccf2a914c4c8dd934": "60000000000000000000", - "3e83544f0082552572c782bee5d218f1ef064a9d": "100076000000000000000", - "968b14648f018333687cd213fa640aec04ce6323": "1000000000000000000000", - "427b462ab84e5091f48a46eb0cdc92ddcb26e078": "2000000000000000000000", - "df8510793eee811c2dab1c93c6f4473f30fbef5b": "1000000000000000000000", - "362fbcb10662370a068fc2652602a2577937cce6": "200000000000000000000", - "5d83b21bd2712360436b67a597ee3378db3e7ae4": "2000000000000000000000", - "5777441c83e03f0be8dd340bde636850847c620b": "10000000000000000000000", - "c94a585203da7bbafd93e15884e660d4b1ead854": "7000000000000000000000", - "35a08081799173e001cc5bd46a02406dc95d1787": "10000000000000000000000", - "21d13f0c4024e967d9470791b50f22de3afecf1b": "4452210000000000000000", - "fdfd6134c04a8ab7eb16f00643f8fed7daaaecb2": "400000000000000000000", - "fd812bc69fb170ef57e2327e80affd14f8e4b6d2": "2000000000000000000000", - "7148aef33261d8031fac3f7182ff35928daf54d9": "4100000000000000000000", - "0b06390f2437b20ec4a3d3431b3279c6583e5ed7": "194000000000000000000", - "4909b31998ead414b8fb0e846bd5cbde393935be": "4000000000000000000000", - "b70dba9391682b4a364e77fe99256301a6c0bf1f": "200000000000000000000", - "6b83bae7b565244558555bcf4ba8da2011891c17": "2000000000000000000000", - "70a03549aa6168e97e88a508330a5a0bea74711a": "1337000000000000000000", - "0fc9a0e34145fbfdd2c9d2a499b617d7a02969b9": "180000000000000000000", - "2ddf40905769bcc426cb2c2938ffe077e1e89d98": "3000000000000000000000", - "794b51c39e53d9e762b0613b829a44b472f4fff3": "667965000000000000000", - "d062588171cf99bbeb58f126b870f9a3728d61ec": "4500000000000000000000", - "8db185fe1b70a94a6a080e7e23a8bedc4acbf34b": "1400000000000000000000", - "e73bfeada6f0fd016fbc843ebcf6e370a65be70c": "1970000000000000000000", - "79ed10cf1f6db48206b50919b9b697081fbdaaf3": "2000000000000000000000", - "276b0521b0e68b277df0bb32f3fd48326350bfb2": "50000000000000000000", - "2e439348df8a4277b22a768457d1158e97c40904": "776970000000000000000", - "6c25327f8dcbb2f45e561e86e35d8850e53ab059": "1103200000000000000000", - "04d73896cf6593a691972a13a6e4871ff2c42b13": "2000000000000000000000", - "b10fd2a647102f881f74c9fbc37da632949f2375": "40000000000000000000", - "615f82365c5101f071e7d2cb6af14f7aad2c16c6": "20000000000000000000", - "93aa8f92ebfff991fc055e906e651ac768d32bc8": "940000000000000000000", - "0cbf8770f0d1082e5c20c5aead34e5fca9ae7ae2": "1000000000000000000000", - "ffc9cc3094b041ad0e076f968a0de3b167255866": "432400000000000000000", - "46531e8b1bde097fdf849d6d119885608a008df7": "200000000000000000000", - "23cd2598a20e149ead2ad69379576ecedb60e38e": "2000000000000000000000", - "85ca8bc6da2803d0725f5e1a456c89f9bc774e2f": "600000000000000000000", - "c0725ec2bdc33a1d826071dea29d62d4385a8c25": "40740000000000000000000", - "0e4765790352656bc656682c24fc5ef3e76a23c7": "46610000000000000000", - "2ef9e465716acacfb8c8252fa8e7bc7969ebf6e4": "2760000000000000000000", - "0ec5308b31282e218fc9e759d4fec5db3708cec4": "1001000000000000000000", - "bf7701fc6225d5a17815438a8941d21ebc5d059d": "1880000000000000000000", - "c489c83ffbb0252ac0dbe3521217630e0f491f14": "4000000000000000000000", - "8eb51774af206b966b8909c45aa6722748802c0c": "500000000000000000000", - "7b9226d46fe751940bc416a798b69ccf0dfab667": "4200000000000000000000", - "8f660f8b2e4c7cc2b4ac9c47ed28508d5f8f8650": "20000000000000000000000", - "9f19fac8a32437d80ac6837a0bb7841729f4972e": "650100000000000000000", - "201864a8f784c2277b0b7c9ee734f7b377eab648": "4467000000000000000000", - "a6101c961e8e1c15798ffcd0e3201d7786ec373a": "6000000000000000000000", - "d4ff46203efa23064b1caf00516e28704a82a4f8": "1337000000000000000000", - "aa136b47962bb8b4fb540db4ccf5fdd042ffb8cf": "500038000000000000000", - "704ae21d762d6e1dde28c235d13104597236db1a": "2000000000000000000000", - "f17a92e0361dbacecdc5de0d1894955af6a9b606": "2000000000000000000000", - "8b48e19d39dd35b66e6e1bb6b9c657cb2cf59d04": "17844175000000000000000", - "9ad47fdcf9cd942d28effd5b84115b31a658a13e": "3290000000000000000000", - "df0d08617bd252a911df8bd41a39b83ddf809673": "10000000000000000000000", - "4c666b86f1c5ee8ca41285f5bde4f79052081406": "500000000000000000000", - "88dec5bd3f4eba2d18b8aacefa7b721548c319ba": "1370000000000000000000", - "9f9fe0c95f10fee87af1af207236c8f3614ef02f": "6000000000000000000000", - "f7d0d310acea18406138baaabbfe0571e80de85f": "1337000000000000000000", - "9569c63a9284a805626db3a32e9d236393476151": "1970000000000000000000", - "5d5c2c1099bbeefb267e74b58880b444d94449e0": "253574000000000000000", - "8c6ae7a05a1de57582ae2768204276c0ff47ed03": "208000000000000000000000", - "432d884bd69db1acc0d89c64ade4cb4fc3a88b7a": "2483000000000000000000", - "672cbca8440a8577097b19aff593a2ad9d28a756": "80000000000000000000", - "19df9445a81c1b3d804aeaeb6f6e204e4236663f": "37387000000000000000", - "1cb5f33b4d488936d13e3161da33a1da7df70d1b": "200000000000000000000", - "df60f18c812a11ed4e2776e7a80ecf5e5305b3d6": "900000000000000000000", - "c99a9cd6c9c1be3534eecd92ecc22f5c38e9515b": "4821030000000000000000", - "00c40fe2095423509b9fd9b754323158af2310f3": "0", - "da4a5f557f3bab390a92f49b9b900af30c46ae80": "10000000000000000000000", - "f36df02fbd89607347afce2969b9c4236a58a506": "2000000000000000000000", - "c549df83c6f65eec0f1dc9a0934a5c5f3a50fd88": "2910000000000000000000", - "9f662e95274121f177566e636d23964cf1fd686f": "2000000000000000000000", - "5a267331facb262daaecd9dd63a9700c5f5259df": "100000000000000000000", - "117d9aa3c4d13bee12c7500f09f5dd1c66c46504": "206000000000000000000", - "1b4d07acd38183a61bb2783d2b7b178dd502ac8d": "200000000000000000000", - "3c0c3defac9cea7acc319a96c30b8e1fedab4574": "1940000000000000000000", - "e4dc22ed595bf0a337c01e03cc6be744255fc9e8": "191000000000000000000", - "8f067c7c1bbd57780b7b9eeb9ec0032f90d0dcf9": "20000000000000000000000", - "40e2440ae142c880366a12c6d4102f4b8434b62a": "1000000000000000000000", - "f9ece022bccd2c92346911e79dd50303c01e0188": "1000000000000000000000", - "f70328ef97625fe745faa49ee0f9d4aa3b0dfb69": "1000000000000000000000", - "b6aacb8cb30bab2ae4a2424626e6e12b02d04605": "8000000000000000000000", - "154459fa2f21318e3434449789d826cdc1570ce5": "2000000000000000000000", - "684a44c069339d08e19a75668bdba303be855332": "70000000000000000000000", - "9fe501aa57ead79278937cd6308c5cfa7a5629fe": "50003000000000000000", - "3e45bd55db9060eced923bb9cb733cb3573fb531": "1640000000000000000000", - "9c9f3b8a811b21f3ff3fe20fe970051ce66a824f": "1157740000000000000000", - "e99aece90541cae224b87da673965e0aeb296afd": "920000000000000000000", - "2f6dce1330c59ef921602154572d4d4bacbd048a": "1000000000000000000000", - "6a6353b971589f18f2955cba28abe8acce6a5761": "3000000000000000000000", - "98c10ebf2c4f97cba5a1ab3f2aafe1cac423f8cb": "300000000000000000000", - "8077c3e4c445586e094ce102937fa05b737b568c": "100000000000000000000", - "13371f92a56ea8381e43059a95128bdc4d43c5a6": "1000000000000000000000", - "35a6885083c899dabbf530ed6c12f4dd3a204cf5": "200000000000000000000", - "36b2c85e3aeeebb70d63c4a4730ce2e8e88a3624": "10000000000000000000000", - "5ce44068b8f4a3fe799e6a8311dbfdeda29dee0e": "2000000000000000000000", - "6fa6388d402b30afe59934c3b9e13d1186476018": "670000000000000000000", - "8251358ca4e060ddb559ca58bc0bddbeb4070203": "2000000000000000000000", - "17e86f3b5b30c0ba59f2b2e858425ba89f0a10b0": "2000000000000000000000", - "298ec76b440d8807b3f78b5f90979bee42ed43db": "30000000000000000000000", - "ce4b065dbcb23047203262fb48c1188364977470": "500000000000000000000", - "c8e2adeb545e499d982c0c117363ceb489c5b11f": "985000000000000000000", - "9928ff715afc3a2b60f8eb4cc4ba4ee8dab6e59d": "440000000000000000000", - "c76130c73cb9210238025c9df95d0be54ac67fbe": "1500000000000000000000", - "72d03d4dfab3500cf89b86866f15d4528e14a195": "4488000000000000000000", - "d193e583d6070563e7b862b9614a47e99489f3e5": "999972000000000000000", - "4df140ba796585dd5489315bca4bba680adbb818": "2674000000000000000000", - "009eef0a0886056e3f69211853b9b7457f3782e4": "3000512000000000000000", - "6e255b700ae7138a4bacf22888a9e2c00a285eec": "4000000000000000000000", - "aa47a4ffc979363232c99b99fada0f2734b0aeee": "8121800000000000000000", - "9d069197d1de50045a186f5ec744ac40e8af91c6": "2000000000000000000000", - "b514882c979bb642a80dd38754d5b8c8296d9a07": "955000000000000000000", - "17c0478657e1d3d17aaa331dd429cecf91f8ae5d": "999942000000000000000", - "5f9616c47b4a67f406b95a14fe6fc268396f1721": "200000000000000000000", - "f70a998a717b338d1dd99854409b1a338deea4b0": "2000000000000000000000", - "d1ee905957fe7cc70ec8f2868b43fe47b13febff": "44000000000000000000", - "fc018a690ad6746dbe3acf9712ddca52b6250039": "10000000000000000000000", - "5118557d600d05c2fcbf3806ffbd93d02025d730": "11360000000000000000000", - "1ef5c9c73650cfbbde5c885531d427c7c3fe5544": "6000000000000000000000", - "d1a396dcdab2c7494130b3fd307820340dfd8c1f": "17952000000000000000", - "2d8e061892a5dcce21966ae1bb0788fd3e8ba059": "250066000000000000000", - "8834b2453471f324fb26be5b25166b5b5726025d": "573000000000000000000", - "14f221159518783bc4a706676fc4f3c5ee405829": "200000000000000000000", - "c056d4bd6bf3cbacac65f8f5a0e3980b852740ae": "100000000000000000000", - "560536794a9e2b0049d10233c41adc5f418a264a": "1000000000000000000000", - "bc9e0ec6788f7df4c7fc210aacd220c27e45c910": "500000000000000000000", - "54bcb8e7f73cda3d73f4d38b2d0847e600ba0df8": "1078000000000000000000", - "4361d4846fafb377b6c0ee49a596a78ddf3516a3": "3580000000000000000000", - "41c3c2367534d13ba2b33f185cdbe6ac43c2fa31": "4000000000000000000000", - "5dc6f45fef26b06e3302313f884daf48e2746fb9": "500000000000000000000", - "ad414d29cb7ee973fec54e22a388491786cf5402": "14000000000000000000000", - "802dc3c4ff2d7d925ee2859f4a06d7ba60f1308c": "98040000000000000000", - "2aed2ce531c056b0097efc3c6de10c4762004ed9": "10430000000000000000000", - "39782ffe06ac78822a3c3a8afe305e50a56188ce": "10000000000000000000000", - "ec73833de4b810bb027810fc8f69f544e83c12d1": "1000000000000000000000", - "8d51a4cc62011322c696fd725b9fb8f53feaaa07": "1000000000000000000000", - "29298ccbdff689f87fe41aa6e98fdfb53deaf37a": "19800000000000000000000", - "827531a6c5817ae35f82b00b9754fcf74c55e232": "3600000000000000000000", - "9c581a60b61028d934167929b22d70b313c34fd0": "50000000000000000000000", - "0a077db13ffeb09484c217709d5886b8bf9c5a8b": "4000000000000000000000", - "07b7a57033f8f11330e4665e185d234e83ec140b": "4325683000000000000000", - "17f523f117bc9fe978aa481eb4f5561711371bc8": "1999884000000000000000", - "de42fcd24ce4239383304367595f068f0c610740": "45120000000000000000", - "2a46d353777176ff8e83ffa8001f4f70f9733aa5": "106000000000000000000", - "92e4392816e5f2ef5fb65837cec2c2325cc64922": "10000000000000000000000", - "9a3da65023a13020d22145cfc18bab10bd19ce4e": "456516000000000000000", - "1a085d43ec92414ea27b914fe767b6d46b1eef44": "29550000000000000000000", - "3b2367f8494b5fe18d683c055d89999c9f3d1b34": "10000000000000000000000", - "84244fc95a6957ed7c1504e49f30b8c35eca4b79": "2000000000000000000000", - "5e031b0a724471d476f3bcd2eb078338bf67fbef": "18200000000000000000", - "97e5cc6127c4f885be02f44b42d1c8b0ac91e493": "200000000000000000000", - "eb1cea7b45d1bd4d0e2a007bd3bfb354759e2c16": "198000000000000000000", - "72feaf124579523954645b7fafff0378d1c8242e": "1000000000000000000000", - "8d07d42d831c2d7c838aa1872b3ad5d277176823": "349200000000000000000", - "9637dc12723d9c78588542eab082664f3f038d9d": "1000000000000000000000", - "e84b55b525f1039e744b918cb3332492e45eca7a": "200000000000000000000", - "b1d6b01b94d854fe8b374aa65e895cf22aa2560e": "940000000000000000000", - "8161d940c3760100b9080529f8a60325030f6edc": "300000000000000000000", - "d30ee9a12b4d68abace6baca9ad7bf5cd1faf91c": "1499936000000000000000", - "057949e1ca0570469e4ce3c690ae613a6b01c559": "200000000000000000000", - "4bf8e26f4c2790da6533a2ac9abac3c69a199433": "200000000000000000000", - "36fec62c2c425e219b18448ad757009d8c54026f": "400000000000000000000", - "77bfe93ccda750847e41a1affee6b2da96e7214e": "300000000000000000000", - "cc48414d2ac4d42a5962f29eee4497092f431352": "161000000000000000000", - "ddbddd1bbd38ffade0305d30f02028d92e9f3aa8": "2000000000000000000000", - "30c01142907acb1565f70438b9980ae731818738": "2000000000000000000000", - "cffc49c1787eebb2b56cabe92404b636147d4558": "5679305000000000000000", - "f99eeece39fa7ef5076d855061384009792cf2e0": "500000000000000000000", - "e9b6a790009bc16642c8d820b7cde0e9fd16d8f5": "3640000000000000000000", - "03b41b51f41df20dd279bae18c12775f77ad771c": "1000000000000000000000", - "787d313fd36b053eeeaedbce74b9fb0678333289": "27160000000000000000000", - "35d2970f49dcc81ea9ee707e9c8a0ab2a8bb7463": "1440000000000000000000", - "4c0aca508b3caf5ee028bc707dd1e800b838f453": "18200000000000000000", - "514632efbd642c04de6ca342315d40dd90a2dba6": "2674000000000000000000", - "36810ff9d213a271eda2b8aa798be654fa4bbe06": "2000000000000000000000", - "0c088006c64b30c4ddafbc36cb5f05469eb62834": "2000000000000000000000", - "568df31856699bb5acfc1fe1d680df9960ca4359": "1379999000000000000000", - "d48e3f9357e303513841b3f84bda83fc89727587": "1000000000000000000000", - "953ef652e7b769f53d6e786a58952fa93ee6abe7": "2860000000000000000000", - "7c60a05f7a4a5f8cf2784391362e755a8341ef59": "1892300000000000000000", - "7a6b26f438d9a352449155b8876cbd17c9d99b64": "6000000000000000000000", - "68f719ae342bd7fef18a05cbb02f705ad38ed5b2": "1050000000000000000000", - "45ca8d956608f9e00a2f9974028640888465668f": "2000000000000000000000", - "3eaf316b87615d88f7adc77c58e712ed4d77966b": "100141000000000000000", - "1f0412bfedcd964e837d092c71a5fcbaf30126e2": "20000000000000000000", - "7471f72eeb300624eb282eab4d03723c649b1b58": "8000000000000000000000", - "9bf71f7fb537ac54f4e514947fa7ff6728f16d2f": "33400000000000000000", - "1098c774c20ca1daac5ddb620365316d353f109c": "100000000000000000000", - "7dd8d7a1a34fa1f8e73ccb005fc2a03a15b8229c": "200000000000000000000", - "0151fa5d17a2dce2d7f1eb39ef7fe2ad213d5d89": "4000000000000000000000", - "ad6628352ed3390bafa86d923e56014cfcb360f4": "2000000000000000000000", - "02af2459a93d0b3f4d062636236cd4b29e3bcecf": "1910000000000000000000", - "ace2abb63b0604409fbde3e716d2876d44e8e5dd": "152000000000000000000", - "e710dcd09b8101f9437bd97db90a73ef993d0bf4": "386100000000000000000", - "d43ee438d83de9a37562bb4e286cb1bd19f4964d": "1000000000000000000000", - "ea3779d14a13f6c78566bcde403591413a6239db": "197000000000000000000000", - "6704f169e0d0b36b57bbc39f3c45437b5ee3d28d": "394000000000000000000", - "5584423050e3c2051f0bbd8f44bd6dbc27ecb62c": "3000000000000000000000", - "2f315d9016e8ee5f536681202f9084b032544d4d": "1037400000000000000000", - "e1b63201fae1f129f95c7a116bd9dde5159c6cda": "22837462000000000000000", - "2bbe62eac80ca7f4d6fdee7e7d8e28b63acf770e": "2396000000000000000000", - "38da1ba2de9e2c954b092dd9d81204fd016ba016": "10156000000000000000000", - "8a86e4a51c013b1fb4c76bcf30667c78d52eedef": "2000000000000000000000", - "8f717ec1552f4c440084fba1154a81dc003ebdc0": "10000000000000000000000", - "c760971bbc181c6a7cf77441f24247d19ce9b4cf": "2000000000000000000000", - "7f150afb1a77c2b45928c268c1e9bdb4641d47d8": "2000000000000000000000", - "1ea334b5750807ea74aac5ab8694ec5f28aa77cf": "492500000000000000000", - "2afb058c3d31032b353bf24f09ae20d54de57dbe": "1100000000000000000000", - "caef027b1ab504c73f41f2a10979b474f97e309f": "200000000000000000000", - "5dd112f368c0e6ceff77a9df02a5481651a02fb7": "169800000000000000000", - "bd93e550403e2a06113ed4c3fba1a8913b19407e": "2000000000000000000000", - "500c16352e901d48ba8d04e2c767121772790b02": "30239000000000000000", - "d2a80327cbe55c4c7bd51ff9dde4ca648f9eb3f8": "50000000000000000000", - "355ccfe0e77d557b971be1a558bc02df9eee0594": "1759120000000000000000", - "5aed0e6cfe95f9d680c76472a81a2b680a7f93e2": "197000000000000000000", - "f56442f60e21691395d0bffaa9194dcaff12e2b7": "260000000000000000000", - "7db9eacc52e429dc83b461c5f4d86010e5383a28": "1000000000000000000000", - "4b984ef26c576e815a2eaed2f5177f07dbb1c476": "1560000000000000000000", - "9846648836a307a057184fd51f628a5f8c12427c": "19100000000000000000000", - "4af0db077bb9ba5e443e21e148e59f379105c592": "600000000000000000000", - "e96e2d3813efd1165f12f602f97f4a62909d3c66": "2300000000000000000000", - "30e789b3d2465e946e6210fa5b35de4e8c93085f": "2000000000000000000000", - "97f99b6ba31346cd98a9fe4c308f87c5a58c5151": "6000000000000000000000", - "595e23d788a2d4bb85a15df7136d264a635511b3": "3940000000000000000000", - "2f61efa5819d705f2b1e4ee754aeb8a819506a75": "1460000000000000000000", - "3554947b7b947b0040da52ca180925c6d3b88ffe": "66850000000000000000", - "8feffadb387a1547fb284da9b8147f3e7c6dc6da": "837200000000000000000", - "258939bbf00c9de9af5338f5d714abf6d0c1c671": "1550000000000000000000", - "5b333696e04cca1692e71986579c920d6b2916f9": "500000000000000000000", - "5381448503c0c702542b1de7cc5fb5f6ab1cf6a5": "8000000000000000000000", - "7e81f6449a03374191f3b7cb05d938b72e090dff": "100000000000000000000", - "4ef1c214633ad9c0703b4e2374a2e33e3e429291": "1337000000000000000000", - "fed8476d10d584b38bfa6737600ef19d35c41ed8": "1820000000000000000000", - "1a95c9b7546b5d1786c3858fb1236446bc0ca4ce": "1970000000000000000000", - "3b07db5a357f5af2484cbc9d77d73b1fd0519fc7": "500000000000000000000", - "5f68a24c7eb4117667737b33393fb3c2148a53b6": "51800000000000000000", - "d8f665fd8cd5c2bcc6ddc0a8ae521e4dc6aa6060": "1700000000000000000000", - "d66acc0d11b689cea6d9ea5ff4014c224a5dc7c4": "18200000000000000000", - "6e72b2a1186a8e2916543b1cb36a68870ea5d197": "186000000000000000000", - "5102a4a42077e11c58df4773e3ac944623a66d9f": "2000325000000000000000", - "72480bede81ad96423f2228b5c61be44fb523100": "6400000000000000000000", - "e076db30ab486f79194ebbc45d8fab9a9242f654": "4840000000000000000000", - "8ceea15eec3bdad8023f98ecf25b2b8fef27db29": "2000000000000000000000", - "40652360d6716dc55cf9aab21f3482f816cc2cbd": "10000000000000000000000", - "13e02fb448d6c84ae17db310ad286d056160da95": "2000000000000000000000", - "d6598b1386e93c5ccb9602ff4bbbecdbd3701dc4": "224096000000000000000", - "d5ea472cb9466018110af00c37495b5c2c713112": "4997800000000000000000", - "bb75cb5051a0b0944b4673ca752a97037f7c8c15": "200000000000000000000", - "8af626a5f327d7506589eeb7010ff9c9446020d2": "1400000000000000000000", - "318c76ecfd8af68d70555352e1f601e35988042d": "501600000000000000000", - "5c3d19441d196cb443662020fcad7fbb79b29e78": "14300000000000000000", - "27101a0f56d39a88c5a84f9b324cdde33e5cb68c": "2000000000000000000000", - "e229e746a83f2ce253b0b03eb1472411b57e5700": "5730000000000000000000", - "604cdf18628dbfa8329194d478dd5201eecc4be7": "23000000000000000000", - "657473774f63ac3d6279fd0743d5790c4f161503": "200000000000000000000", - "1ddefefd35ab8f658b2471e54790bc17af98dea4": "1000000000000000000000", - "ac3900298dd14d7cc96d4abb428da1bae213ffed": "24730250000000000000000", - "944f07b96f90c5f0d7c0c580533149f3f585a078": "74000000000000000000", - "232c6d03b5b6e6711efff190e49c28eef36c82b0": "1337000000000000000000", - "c87c77e3c24adecdcd1038a38b56e18dead3b702": "8800000000000000000000", - "c4b6e5f09cc1b90df07803ce3d4d13766a9c46f4": "6000000000000000000000", - "d44334b4e23a169a0c16bd21e866bba52d970587": "2600000000000000000000", - "7757a4b9cc3d0247ccaaeb9909a0e56e1dd6dcc2": "20000000000000000000", - "cf694081c76d18c64ca71382be5cd63b3cb476f8": "1000000000000000000000", - "133e4f15e1e39c53435930aaedf3e0fe56fde843": "20000000000000000000", - "f067fb10dfb293e998abe564c055e3348f9fbf1e": "2000000000000000000000", - "94449c01b32a7fa55af8104f42cdd844aa8cbc40": "16548000000000000000000", - "0e2094ac1654a46ba1c4d3a40bb8c17da7f39688": "358000000000000000000", - "738ca94db7ce8be1c3056cd6988eb376359f3353": "25500000000000000000000", - "0cfb172335b16c87d519cd1475530d20577f5e0e": "100000000000000000000000", - "3cb561ce86424b359891e364ec925ffeff277df7": "200000000000000000000", - "5f981039fcf50225e2adf762752112d1cc26b6e3": "499954000000000000000", - "b43657a50eecbc3077e005d8f8d94f377876bad4": "35460000000000000000", - "d07e511864b1cf9969e3560602829e32fc4e71f5": "50000000000000000000", - "11306c7d57588637780fc9fde8e98ecb008f0164": "1999944000000000000000", - "45ca9862003b4e40a3171fb5cafa9028cac8de19": "13790000000000000000000", - "231d94155dbcfe2a93a319b6171f63b20bd2b6fa": "3819952000000000000000", - "e7533e270cc61fa164ac1553455c105d04887e14": "121550000000000000000", - "070d5d364cb7bbf822fc2ca91a35bdd441b215d5": "2000000000000000000000", - "d475477fa56390d33017518d6711027f05f28dbf": "1975032000000000000000", - "cea34a4dd93dd9aefd399002a97d997a1b4b89cd": "1500000000000000000000", - "560becdf52b71f3d8827d927610f1a980f33716f": "429413000000000000000", - "f632adff490da4b72d1236d04b510f74d2faa3cd": "1400000000000000000000", - "2fdd9b79df8df530ad63c20e62af431ae99216b8": "21000000000000000000", - "535201a0a1d73422801f55ded4dfaee4fbaa6e3b": "39641000000000000000", - "409d5a962edeeebea178018c0f38b9cdb213f289": "20000000000000000000", - "9d911f3682f32fe0792e9fb6ff3cfc47f589fca5": "4000000000000000000000", - "9f7a0392f857732e3004a375e6b1068d49d83031": "2000000000000000000000", - "6a04f5d53fc0f515be942b8f12a9cb7ab0f39778": "3129800000000000000000", - "be478e8e3dde6bd403bb2d1c657c4310ee192723": "492500000000000000000", - "007622d84a234bb8b078230fcf84b67ae9a8acae": "698800000000000000000", - "9475c510ec9a26979247744c3d8c3b0e0b5f44d3": "10000000000000000000000", - "df47a8ef95f2f49f8e6f58184154145d11f72797": "1910000000000000000000", - "13ce332dff65a6ab933897588aa23e000980fa82": "258400000000000000000", - "9c4bbcd5f1644a6f075824ddfe85c571d6abf69c": "1800000000000000000000", - "d42b20bd0311608b66f8a6d15b2a95e6de27c5bf": "2000000000000000000000", - "a4dd59ab5e517d398e49fa537f899fed4c15e95d": "20000000000000000000000", - "1a8a5ce414de9cd172937e37f2d59cff71ce57a0": "10000000000000000000000", - "55c564664166a1edf3913e0169f1cd451fdb5d0c": "2399800000000000000000", - "58ae2ddc5f4c8ada97e06c0086171767c423f5d7": "1610000000000000000000", - "fb79abdb925c55b9f98efeef64cfc9eb61f51bb1": "1794000000000000000000", - "e7a42f59fee074e4fb13ea9e57ecf1cc48282249": "20000000000000000000000", - "07e2b4cdeed9d087b12e556d9e770c13c099615f": "668500000000000000000", - "68473b7a7d965904bedba556dfbc17136cd5d434": "100000000000000000000", - "6c5c3a54cda7c2f118edba434ed81e6ebb11dd7a": "200000000000000000000", - "24c117d1d2b3a97ab11a4679c99a774a9eade8d1": "1000000000000000000000", - "f68c5e33fa97139df5b2e63886ce34ebf3e4979c": "3320000000000000000000", - "bd7419dc2a090a46e2873d7de6eaaad59e19c479": "6802000000000000000000", - "1a0a1ddfb031e5c8cc1d46cf05842d50fddc7130": "1000000000000000000000", - "2b3a68db6b0cae8a7c7a476bdfcfbd6205e10687": "2400000000000000000000", - "426d15f407a01135b13a6b72f8f2520b3531e302": "20000000000000000000", - "0394b90fadb8604f86f43fc1e35d3124b32a5989": "764000000000000000000", - "7412c9bc30b4df439f023100e63924066afd53af": "500000000000000000000", - "80e7b3205230a566a1f061d922819bb4d4d2a0e1": "14000000000000000000000", - "ff4fc66069046c525658c337a917f2d4b832b409": "2000000000000000000000", - "f5061ee2e5ee26b815503677130e1de07a52db07": "100000000000000000000", - "49793463e1681083d6abd6e725d5bba745dccde8": "545974000000000000000", - "23551f56975fe92b31fa469c49ea66ee6662f41e": "1910000000000000000000", - "fad96ab6ac768ad5099452ac4777bd1a47edc48f": "100000000000000000000", - "2a746cd44027af3ebd37c378c85ef7f754ab5f28": "394000000000000000000", - "b8d389e624a3a7aebce4d3e5dbdf6cdc29932aed": "200000000000000000000", - "7b761feb7fcfa7ded1f0eb058f4a600bf3a708cb": "4600000000000000000000", - "5435c6c1793317d32ce13bba4c4ffeb973b78adc": "250070000000000000000", - "dd04eee74e0bf30c3f8d6c2c7f52e0519210df93": "80000000000000000000", - "4331ab3747d35720a9d8ca25165cd285acd4bda8": "2000000000000000000000", - "b84c8b9fd33ece00af9199f3cf5fe0cce28cd14a": "3820000000000000000000", - "393f783b5cdb86221bf0294fb714959c7b45899c": "5910000000000000000000", - "259ec4d265f3ab536b7c70fa97aca142692c13fc": "20400000000000000000", - "5d2f7f0b04ba4be161e19cb6f112ce7a5e7d7fe4": "35200000000000000000", - "d54ba2d85681dc130e5b9b02c4e8c851391fd9b9": "3940000000000000000000", - "5cd8af60de65f24dc3ce5730ba92653022dc5963": "1790000000000000000000", - "3b42a66d979f582834747a8b60428e9b4eeccd23": "620400000000000000000", - "4b19eb0c354bc1393960eb06063b83926f0d67b2": "29000000000000000000", - "8cf3546fd1cda33d58845fc8fcfecabca7c5642a": "574027000000000000000", - "113612bc3ba0ee4898b49dd20233905f2f458f62": "14000000000000000000000", - "1f2afc0aed11bfc71e77a907657b36ea76e3fb99": "4000000000000000000000", - "03714b41d2a6f751008ef8dd4d2b29aecab8f36e": "6000000000000000000000", - "25721c87b0dc21377c7200e524b14a22f0af69fb": "4000000000000000000000", - "335858f749f169cabcfe52b796e3c11ec47ea3c2": "200000000000000000000", - "52fb46ac5d00c3518b2c3a1c177d442f8165555f": "1500000000000000000000", - "7a8c89c014509d56d7b68130668ff6a3ecec7370": "300000000000000000000", - "7d5d2f73949dadda0856b206989df0078d51a1e5": "10560000000000000000000", - "be538246dd4e6f0c20bf5ad1373c3b463a131e86": "200000000000000000000", - "62680a15f8ccb8bdc02f7360c25ad8cfb57b8ccd": "1000000000000000000000", - "aa0ca3737337178a0caac3099c584b056c56301c": "880000000000000000000", - "1d341fa5a3a1bd051f7db807b6db2fc7ba4f9b45": "18200000000000000000", - "6463f715d594a1a4ace4bb9c3b288a74decf294d": "1970000000000000000000", - "e00d153b10369143f97f54b8d4ca229eb3e8f324": "152000000000000000000", - "8d0b9ea53fd263415eac11391f7ce9123c447062": "2000000000000000000000", - "cacb675e0996235404efafbb2ecb8152271b55e0": "700000000000000000000", - "b615e940143eb57f875893bc98a61b3d618c1e8c": "20000000000000000000", - "606f177121f7855c21a5062330c8762264a97b31": "4000000000000000000000", - "e3925509c8d0b2a6738c5f6a72f35314491248ce": "1012961000000000000000", - "3f08d9ad894f813e8e2148c160d24b353a8e74b0": "60000000000000000000000", - "40f4f4c06c732cd35b119b893b127e7d9d0771e4": "10000000000000000000000", - "1406854d149e081ac09cb4ca560da463f3123059": "1337000000000000000000", - "ecf05d07ea026e7ebf4941002335baf2fed0f002": "200000000000000000000", - "9a990b8aeb588d7ee7ec2ed8c2e64f7382a9fee2": "33518000000000000000", - "a2e0683a805de6a05edb2ffbb5e96f0570b637c3": "20000000000000000000", - "fba5486d53c6e240494241abf87e43c7600d413a": "1987592000000000000000", - "d81bd54ba2c44a6f6beb1561d68b80b5444e6dc6": "1163806000000000000000", - "5298ab182a19359ffcecafd7d1b5fa212dede6dd": "20000000000000000000", - "d1acb5adc1183973258d6b8524ffa28ffeb23de3": "4000000000000000000000", - "4e7aa67e12183ef9d7468ea28ad239c2eef71b76": "4925000000000000000000", - "509a20bc48e72be1cdaf9569c711e8648d957334": "2000000000000000000000", - "949f84f0b1d7c4a7cf49ee7f8b2c4a134de32878": "685000000000000000000", - "edbac9527b54d6df7ae2e000cca3613ba015cae3": "1970000000000000000000", - "c697b70477cab42e2b8b266681f4ae7375bb2541": "5577200000000000000000", - "86c934e38e53be3b33f274d0539cfca159a4d0d1": "970000000000000000000", - "0877eeaeab78d5c00e83c32b2d98fa79ad51482f": "439420000000000000000", - "5e11ecf69d551d7f4f84df128046b3a13240a328": "20000000000000000000", - "43ff8853e98ed8406b95000ada848362d6a0392a": "22100000000000000000000", - "f11cf5d363746fee6864d3ca336dd80679bb87ae": "40000000000000000000000", - "fb223c1e22eac1269b32ee156a5385922ed36fb8": "2000000000000000000000", - "4e6600806289454acda330a2a3556010dfacade6": "6000000000000000000000", - "cfe2caaf3cec97061d0939748739bffe684ae91f": "10000000000000000000000", - "adeb52b604e5f77faaac88275b8d6b49e9f9f97f": "2089268000000000000000", - "d53c567f0c3ff2e08b7d59e2b5c73485437fc58d": "600000000000000000000", - "fbf75933e01b75b154ef0669076be87f62dffae1": "78000000000000000000000", - "7dfd2962b575bcbeee97f49142d63c30ab009f66": "4000000000000000000000", - "df6485c4297ac152b289b19dde32c77ec417f47d": "1000000000000000000000", - "ffb974673367f5c07be5fd270dc4b7138b074d57": "2470407000000000000000", - "f7d7af204c56f31fd94398e40df1964bd8bf123c": "150011000000000000000", - "4506fe19fa4b006baa3984529d8516db2b2b50ab": "2000000000000000000000", - "f4dc7ba85480bbb3f535c09568aaa3af6f3721c6": "7214962000000000000000", - "d171c3f2258aef35e599c7da1aa07300234da9a6": "2000000000000000000000", - "33581cee233088c0860d944e0cf1ceabb8261c2e": "13370000000000000000", - "1c2e3607e127caca0fbd5c5948adad7dd830b285": "19700000000000000000000", - "fd7ede8f5240a06541eb699d782c2f9afb2170f6": "1337000000000000000000", - "368c5414b56b8455171fbf076220c1cba4b5ca31": "557940000000000000000", - "3e8745ba322f5fd6cb50124ec46688c7a69a7fae": "4925000000000000000000", - "76506eb4a780c951c74a06b03d3b8362f0999d71": "500000000000000000000", - "96d62dfd46087f62409d93dd606188e70e381257": "2000000000000000000000", - "37eada93c475ded2f7e15e7787d400470fa52062": "200000000000000000000", - "26babf42b267fdcf3861fdd4236a5e474848b358": "1000000000000000000000", - "3526eece1a6bdc3ee7b400fe935b48463f31bed7": "82400000000000000000", - "27b62816e1e3b8d19b79d1513d5dfa855b0c3a2a": "99941000000000000000", - "b3e3c439069880156600c2892e448d4136c92d9b": "850000000000000000000", - "574ad9355390e4889ef42acd138b2a27e78c00ae": "1557000000000000000000", - "f0b9d683cea12ba600baace219b0b3c97e8c00e4": "100000000000000000000", - "a437fe6ec103ca8d158f63b334224eccac5b3ea3": "8000000000000000000000", - "7a48d877b63a8f8f9383e9d01e53e80c528e955f": "8000000000000000000000", - "e965daa34039f7f0df62375a37e5ab8a72b301e7": "4796000000000000000000", - "72cd048a110574482983492dfb1bd27942a696ba": "2000000000000000000000", - "6611ce59a98b072ae959dc49ad511daaaaa19d6b": "200000000000000000000", - "0d92582fdba05eabc3e51538c56db8813785b328": "191000000000000000000", - "e87e9bbfbbb71c1a740c74c723426df55d063dd9": "7998000000000000000000", - "9c99a1da91d5920bc14e0cb914fdf62b94cb8358": "20000000000000000000000", - "fe8e6e3665570dff7a1bda697aa589c0b4e9024a": "2000000000000000000000", - "811461a2b0ca90badac06a9ea16e787b33b196cc": "164000000000000000000", - "d211b21f1b12b5096181590de07ef81a89537ead": "2000000000000000000000", - "01155057002f6b0d18acb9388d3bc8129f8f7a20": "1340000000000000000000", - "8ce22f9fa372449a420610b47ae0c8d565481232": "2000000000000000000000", - "e02b74a47628be315b1f76b315054ad44ae9716f": "4000000000000000000000", - "92a7c5a64362e9f842a23deca21035857f889800": "1999944000000000000000", - "5213f459e078ad3ab95a0920239fcf1633dc04ca": "2599989000000000000000", - "c9957ba94c1b29e5277ec36622704904c63dc023": "1923000000000000000000", - "6ac40f532dfee5118117d2ad352da77d4f6da2c8": "400000000000000000000", - "ea1efb3ce789bedec3d67c3e1b3bc0e9aa227f90": "734000000000000000000", - "b01e389b28a31d8e4995bdd7d7c81beeab1e4119": "1000000000000000000000", - "ee97aa8ac69edf7a987d6d70979f8ec1fbca7a94": "376000000000000000000", - "0fad05507cdc8f24b2be4cb7fa5d927ddb911b88": "3004447000000000000000", - "b6e8afd93dfa9af27f39b4df06076710bee3dfab": "25000000000000000000", - "7d0b255efb57e10f7008aa22d40e9752dfcf0378": "29944000000000000000", - "aef5b12258a18dec07d5ec2e316574919d79d6d6": "2000000000000000000000", - "63666755bd41b5986997783c13043008242b3cb5": "500000000000000000000", - "921f5261f4f612760706892625c75e7bce96b708": "2000000000000000000000", - "10e1e3377885c42d7df218522ee7766887c05e6a": "300031000000000000000", - "134163be9fbbe1c5696ee255e90b13254395c318": "200000000000000000000", - "870f15e5df8b0eabd02569537a8ef93b56785c42": "388000000000000000000", - "68eec1e288ac31b6eaba7e1fbd4f04ad579a6b5d": "2000000000000000000000", - "1a2694ec07cf5e4d68ba40f3e7a14c53f3038c6e": "1000073000000000000000", - "cd9b4cef73390c83a8fd71d7b540a7f9cf8b8c92": "90000000000000000000", - "c8de7a564c7f4012a6f6d10fd08f47890fbf07d4": "300000000000000000000", - "c0345b33f49ce27fe82cf7c84d141c68f590ce76": "1000000000000000000000", - "fe53b94989d89964da2061539526bbe979dd2ea9": "1930600000000000000000", - "14410fb310711be074a80883c635d0ef6afb2539": "2000000000000000000000", - "1d344e962567cb27e44db9f2fac7b68df1c1e6f7": "1940000000000000000000", - "fe016ec17ec5f10e3bb98ff4a1eda045157682ab": "375804000000000000000", - "e89da96e06beaf6bd880b378f0680c43fd2e9d30": "601400000000000000000", - "0fee81ac331efd8f81161c57382bb4507bb9ebec": "400030000000000000000", - "40cf90ef5b768c5da585002ccbe6617650d8e837": "999800000000000000000", - "256fa150cc87b5056a07d004efc84524739e62b5": "200000000000000000000", - "1b9b2dc2960e4cb9408f7405827c9b59071612fd": "1000000000000000000000", - "0efd1789eb1244a3dede0f5de582d8963cb1f39f": "1500000000000000000000", - "049c5d4bc6f25d4e456c697b52a07811ccd19fb1": "300048000000000000000", - "02b7b1d6b34ce053a40eb65cd4a4f7dddd0e9f30": "685000000000000000000", - "c1827686c0169485ec15b3a7c8c01517a2874de1": "40000000000000000000", - "d8e5c9675ef4deed266b86956fc4590ea7d4a27d": "1000000000000000000000", - "48f883e567b436a27bb5a3124dbc84dec775a800": "771840000000000000000", - "a34076f84bd917f20f8342c98ba79e6fb08ecd31": "4200000000000000000000", - "21ce6d5b9018cec04ad6967944bea39e8030b6b8": "20000000000000000000", - "0596a27dc3ee115fce2f94b481bc207a9e261525": "1000000000000000000000", - "717cf9beab3638308ded7e195e0c86132d163fed": "15097428000000000000000", - "d5ce55d1b62f59433c2126bcec09bafc9dfaa514": "197000000000000000000", - "7dd46da677e161825e12e80dc446f58276e1127c": "820000000000000000000", - "98c5494a03ac91a768dffc0ea1dde0acbf889019": "200000000000000000000000", - "617ff2cc803e31c9082233b825d025be3f7b1056": "1970000000000000000000", - "1091176be19b9964a8f72e0ece6bf8e3cfad6e9c": "10020000000000000000000", - "4ea56e1112641c038d0565a9c296c463afefc17e": "182000000000000000000", - "e303167f3d4960fe881b32800a2b4aeff1b088d4": "2000000000000000000000", - "773141127d8cf318aebf88365add3d5527d85b6a": "1000076000000000000000", - "b916b1a01cdc4e56e7657715ea37e2a0f087d106": "2406017000000000000000", - "46a430a2d4a894a0d8aa3feac615361415c3f81f": "2000000000000000000000", - "e6a3010f0201bc94ff67a2f699dfc206f9e76742": "879088000000000000000", - "d7ad09c6d32657685355b5c6ec8e9f57b4ebb982": "1970000000000000000000", - "95e80a82c20cbe3d2060242cb92d735810d034a2": "32511000000000000000", - "9a390162535e398877e416787d6239e0754e937c": "1000000000000000000000", - "d85fdeaf2a61f95db902f9b5a53c9b8f9266c3ac": "2010000000000000000000", - "c3e20c96df8d4e38f50b265a98a906d61bc51a71": "2000000000000000000000", - "2949fd1def5c76a286b3872424809a07db3966f3": "5236067000000000000000", - "86cdb7e51ac44772be3690f61d0e59766e8bfc18": "4000000000000000000000", - "749a4a768b5f237248938a12c623847bd4e688dc": "72000000000000000000", - "3524a000234ebaaf0789a134a2a417383ce5282a": "5635000000000000000000", - "7b43c7eea8d62355b0a8a81da081c6446b33e9e0": "4000000000000000000000", - "0eb189ef2c2d5762a963d6b7bdf9698ea8e7b48a": "1337000000000000000000", - "767fd7797d5169a05f7364321c19843a8c348e1e": "18800000000000000000", - "1b2639588b55c344b023e8de5fd4087b1f040361": "1500000000000000000000", - "1e33d1c2fb5e084f2f1d54bc5267727fec3f985d": "500000000000000000000", - "06b106649aa8c421ddcd1b8c32cd0418cf30da1f": "40000000000000000000000", - "3c5a241459c6abbf630239c98a30d20b8b3ac561": "157600000000000000000", - "0f4f94b9191bb7bb556aaad7c74ddb288417a50b": "1400000000000000000000", - "d6f4a7d04e8faf20e8c6eb859cf7f78dd23d7a15": "131784000000000000000", - "61adf5929a5e2981684ea243baa01f7d1f5e148a": "110302000000000000000", - "8f58d8348fc1dc4e0dd8343b6543c857045ee940": "13632400000000000000000", - "a6e3baa38e104a1e27a4d82869afb1c0ae6eff8d": "19690000000000000000", - "67350b5331926f5e28f3c1e986f96443809c8b8c": "352000000000000000000", - "0b5d66b13c87b392e94d91d5f76c0d450a552843": "2000000000000000000000", - "562a8dcbbeeef7b360685d27303bd69e094accf6": "10000000000000000000000", - "b5d9934d7b292bcf603b2880741eb760288383a0": "16700000000000000000", - "6fc53662371dca587b59850de78606e2359df383": "180000000000000000000", - "e069c0173352b10bf6834719db5bed01adf97bbc": "18894000000000000000", - "10a93457496f1108cd98e140a1ecdbae5e6de171": "399600000000000000000", - "69ff8901b541763f817c5f2998f02dcfc1df2997": "40000000000000000000", - "00c27d63fde24b92ee8a1e7ed5d26d8dc5c83b03": "2000000000000000000000", - "77f81b1b26fc84d6de97ef8b9fbd72a33130cc4a": "1000000000000000000000", - "6d20ef9704670a500bb269b5832e859802049f01": "130000000000000000000", - "186afdc085f2a3dce4615edffbadf71a11780f50": "200000000000000000000", - "7ff0c63f70241bece19b737e5341b12b109031d8": "346000000000000000000", - "9d4174aa6af28476e229dadb46180808c67505c1": "1219430000000000000000", - "5fec49c665e64ee89dd441ee74056e1f01e92870": "6320000000000000000000", - "6cd228dc712169307fe27ceb7477b48cfc8272e5": "77600000000000000000", - "fd918536a8efa6f6cefe1fa1153995fef5e33d3b": "500000000000000000000", - "2fbb504a5dc527d3e3eb0085e2fc3c7dd538cb7a": "1249961000000000000000", - "6ab323ae5056ed0a453072c5abe2e42fcf5d7139": "880000000000000000000", - "67d682a282ef73fb8d6e9071e2614f47ab1d0f5e": "1000000000000000000000", - "1858cf11aea79f5398ad2bb22267b5a3c952ea74": "9850000000000000000000", - "39d6caca22bccd6a72f87ee7d6b59e0bde21d719": "2002000000000000000000", - "daa63cbda45dd487a3f1cd4a746a01bb5e060b90": "4797800000000000000000", - "a90476e2efdfee4f387b0f32a50678b0efb573b5": "10000000000000000000000", - "ae5aa1e6c2b60f6fd3efe721bb4a719cbe3d6f5d": "795860000000000000000", - "ac2e766dac3f648f637ac6713fddb068e4a4f04d": "197000000000000000000", - "6191ddc9b64a8e0890b4323709d7a07c48b92a64": "775000000000000000000", - "cc4f0ff2aeb67d54ce3bc8c6510b9ae83e9d328b": "400000000000000000000", - "ca23f62dff0d6460036c62e840aec5577e0befd2": "140800000000000000000", - "97dc26ec670a31e0221d2a75bc5dc9f90c1f6fd4": "50000000000000000000", - "848c994a79003fe7b7c26cc63212e1fc2f9c19eb": "2000000000000000000000", - "20c284ba10a20830fc3d699ec97d2dfa27e1b95e": "2000000000000000000000", - "4fa3f32ef4086448b344d5f0a9890d1ce4d617c3": "1500000000000000000000", - "255abc8d08a096a88f3d6ab55fbc7352bddcb9ce": "82161000000000000000", - "7c60e51f0be228e4d56fdd2992c814da7740c6bc": "200000000000000000000", - "1c356cfdb95febb714633b28d5c132dd84a9b436": "25000000000000000000", - "5062e5134c612f12694dbd0e131d4ce197d1b6a4": "1000000000000000000000", - "ed862616fcbfb3becb7406f73c5cbff00c940755": "1700000000000000000000", - "62c9b271ffd5b770a5eee4edc9787b5cdc709714": "2000000000000000000000", - "3c925619c9b33144463f0537d896358706c520b0": "2000000000000000000000", - "ffe2e28c3fb74749d7e780dc8a5d422538e6e451": "253319000000000000000", - "37195a635dcc62f56a718049d47e8f9f96832891": "1970000000000000000000", - "90e9a9a82edaa814c284d232b6e9ba90701d4952": "100007000000000000000", - "e0c4ab9072b4e6e3654a49f8a8db026a4b3386a9": "2000000000000000000000", - "439dee3f7679ff1030733f9340c096686b49390b": "2000000000000000000000", - "548558d08cfcb101181dac1eb6094b4e1a896fa6": "1999944000000000000000", - "3090f8130ec44466afadb36ed3c926133963677b": "4000000000000000000000", - "d1648503b1ccc5b8be03fa1ec4f3ee267e6adf7b": "5828000000000000000000", - "65b42faecc1edfb14283ca979af545f63b30e60c": "18200000000000000000", - "6420f8bcc8164a6152a99d6b99693005ccf7e053": "999972000000000000000", - "84b4b74e6623ba9d1583e0cfbe49643f16384149": "20000000000000000000", - "b8310a16cc6abc465007694b930f978ece1930bd": "740000000000000000000", - "16019a4dafab43f4d9bf4163fae0847d848afca2": "25060000000000000000", - "479298a9de147e63a1c7d6d2fce089c7e64083bd": "9999999000000000000000", - "030973807b2f426914ad00181270acd27b8ff61f": "5348000000000000000000", - "b07bcf1cc5d4462e5124c965ecf0d70dc27aca75": "1600000000000000000000", - "a2f798e077b07d86124e1407df32890dbb4b6379": "200000000000000000000", - "0cbd921dbe121563b98a6871fecb14f1cc7e88d7": "200000000000000000000", - "6042276df2983fe2bc4759dc1943e18fdbc34f77": "1970000000000000000000", - "be2b2280523768ea8ac35cd9e888d60a719300d4": "2000000000000000000000", - "2f4da753430fc09e73acbccdcde9da647f2b5d37": "200000000000000000000", - "734223d27ff23e5906caed22595701bb34830ca1": "2000000000000000000000", - "5b430d779696a3653fc60e74fbcbacf6b9c2baf1": "14000000000000000000000", - "84232107932b12e03186583525ce023a703ef8d9": "2000000000000000000000", - "4ed14d81b60b23fb25054d8925dfa573dcae6168": "340000000000000000000", - "8b338411f26ccf37658cc75521d77629099e467d": "2000000000000000000000", - "a37622ac9bbdc4d82b75015d745b9f8de65a28ec": "2910000000000000000000", - "1dd77441844afe9cc18f15d8c77bccfb655ee034": "4850000000000000000000", - "65849be1af20100eb8a3ba5a5be4d3ae8db5a70e": "400000000000000000000", - "d5586da4e59583c8d86cccf71a86197f17996749": "2000000000000000000000", - "4b53ae59c784b6b5c43616b9a0809558e684e10c": "1200000000000000000000", - "55d42eb495bf46a634997b5f2ea362814918e2b0": "106128000000000000000", - "959ff17f1d51b473b44010052755a7fa8c75bd54": "1970000000000000000000", - "5a2daab25c31a61a92a4c82c9925a1d2ef58585e": "225400000000000000000", - "24c0c88b54a3544709828ab4ab06840559f6c5e2": "2674000000000000000000", - "7e8649e690fc8c1bfda1b5e186581f649b50fe33": "98500000000000000000", - "4acfa9d94eda6625c9dfa5f9f4f5d107c4031fdf": "39400000000000000000", - "5778ffdc9b94c5a59e224eb965b6de90f222d170": "335320000000000000000", - "825a7f4e10949cb6f8964268f1fa5f57e712b4c4": "20000000000000000000", - "6f39cc37caaa2ddc9b610f6131e0619fae772a3c": "500000000000000000000", - "5b437365ae3a9a2ff97c68e6f90a7620188c7d19": "2002000000000000000000", - "6710c2c03c65992b2e774be52d3ab4a6ba217ef7": "11600000000000000000000", - "896e335ca47af57962fa0f4dbf3e45e688cba584": "1368500000000000000000", - "b57549bfbc9bdd18f736b22650e48a73601fa65c": "446000000000000000000", - "85ca1e727e9d1a87991cc2c41840ebb9edf21d1b": "13370000000000000000", - "cf4166746e1d3bc1f8d0714b01f17e8a62df1464": "1004700000000000000000", - "4a75c3d4fa6fccbd5dd5a703c15379a1e783e9b7": "1820000000000000000000", - "9e5811b40be1e2a1e1d28c3b0774acde0a09603d": "3000000000000000000000", - "763886e333c56feff85be3951ab0b889ce262e95": "2000000000000000000000", - "2b101e822cd962962a06800a2c08d3b15d82b735": "152000000000000000000", - "a01e9476df84431825c836e8803a97e22fa5a0cd": "6000000000000000000000", - "be4e7d983f2e2a636b1102ec7039efebc842e98d": "66000000000000000000", - "9e427272516b3e67d4fcbf82f59390d04c8e28e5": "4000000000000000000000", - "e0d231e144ec9107386c7c9b02f1702ceaa4f700": "5000057000000000000000", - "6a0f056066c2d56628850273d7ecb7f8e6e9129e": "5000016000000000000000", - "d1538e9a87e59ca9ec8e5826a5b793f99f96c4c3": "1000000000000000000000", - "f85bab1cb3710fc05fa19ffac22e67521a0ba21d": "2003000000000000000000", - "f7cbdba6be6cfe68dbc23c2b0ff530ee05226f84": "20000000000000000000", - "4eb87ba8788eba0df87e5b9bd50a8e45368091c1": "20000000000000000000", - "1479a9ec7480b74b5db8fc499be352da7f84ee9c": "1000000000000000000000", - "d311bcd7aa4e9b4f383ff3d0d6b6e07e21e3705d": "200000000000000000000", - "425c1816868f7777cc2ba6c6d28c9e1e796c52b3": "10000000000000000000000", - "8510ee934f0cbc900e1007eb38a21e2a5101b8b2": "106000000000000000000", - "01e864d354741b423e6f42851724468c74f5aa9c": "20000000000000000000000", - "a543a066fb32a8668aa0736a0c9cd40d78098727": "1000000000000000000000", - "f3eb1948b951e22df1617829bf3b8d8680ec6b68": "4000000000000000000000", - "f6b782f4dcd745a6c0e2e030600e04a24b25e542": "400000000000000000000", - "229f4f1a2a4f540774505b4707a81de44410255b": "2000000000000000000000", - "cff8d06b00e3f50c191099ad56ba6ae26571cd88": "1000000000000000000000", - "910b7d577a7e39aa23acf62ad7f1ef342934b968": "10000000000000000000000", - "392433d2ce83d3fb4a7602cca3faca4ec140a4b0": "51000000000000000000", - "8ff46045687723dc33e4d099a06904f1ebb584dc": "2000000000000000000000", - "9ca0429f874f8dcee2e9c062a9020a842a587ab9": "2000000000000000000000", - "160ceb6f980e04315f53c4fc988b2bf69e284d7d": "19100000000000000000", - "c340f9b91c26728c31d121d5d6fc3bb56d3d8624": "2000000000000000000000", - "afa1d5ad38fed44759c05b8993c1aa0dace19f40": "80000000000000000000", - "3969b4f71bb8751ede43c016363a7a614f76118e": "2000000000000000000000", - "2bb6f578adfbe7b2a116b3554facf9969813c319": "7400000000000000000000", - "8334764b7b397a4e578f50364d60ce44899bff94": "92500000000000000000", - "9dd2196624a1ddf14a9d375e5f07152baf22afa2": "1211747000000000000000", - "f242da845d42d4bf779a00f295b40750fe49ea13": "1000000000000000000000", - "c6234657a807384126f8968ca1708bb07baa493c": "20000000000000000000", - "94c055e858357aaa30cf2041fa9059ce164a1f91": "19999000000000000000000", - "74c73c90528a157336f1e7ea20620ae53fd24728": "8969310000000000000000", - "19e7f3eb7bf67f3599209ebe08b62ad3327f8cde": "2000000000000000000000", - "b2b516fdd19e7f3864b6d2cf1b252a4156f1b03b": "53720000000000000000", - "8164e78314ae16b28926cc553d2ccb16f356270d": "8450000000000000000000", - "4d828894752f6f25175daf2177094487954b6f9f": "1459683000000000000000", - "ab84a0f147ad265400002b85029a41fc9ce57f85": "1000000000000000000000", - "f3fe51fde34413c73318b9c85437fe7e820f561a": "1003200000000000000000", - "16c7b31e8c376282ac2271728c31c95e35d952c3": "2000000000000000000000", - "80d5c40c59c7f54ea3a55fcfd175471ea35099b3": "1000000000000000000000", - "7abb10f5bd9bc33b8ec1a82d64b55b6b18777541": "20000000000000000000000", - "095b0ea2b218d82e0aea7c2889238a39c9bf9077": "20000000000000000000000", - "5d5cdbe25b2a044b7b9be383bcaa5807b06d3c6b": "2000000000000000000000", - "323749a3b971959e46c8b4822dcafaf7aaf9bd6e": "20064000000000000000", - "e0272213e8d2fd3e96bd6217b24b4ba01b617079": "20000000000000000000", - "00acbfb2f25a5485c739ef70a44eeeeb7c65a66f": "100000000000000000000", - "52f15423323c24f19ae2ab673717229d3f747d9b": "1026115000000000000000", - "cb4abfc282aed76e5d57affda542c1f382fcacf4": "8136100000000000000000", - "f71b4534f286e43093b1e15efea749e7597b8b57": "104410000000000000000000", - "44cd77535a893fa7c4d5eb3a240e79d099a72d2d": "820000000000000000000", - "eb3ce7fc381c51db7d5fbd692f8f9e058a4c703d": "200000000000000000000", - "f1c8c4a941b4628c0d6c30fda56452d99c7e1b64": "1449000000000000000000", - "277677aba1e52c3b53bfa2071d4e859a0af7e8e1": "1000000000000000000000", - "a5f075fd401335577b6683c281e6d101432dc6e0": "2680000000000000000000", - "e28dbc8efd5e416a762ec0e018864bb9aa83287b": "24533161000000000000000", - "2b717cd432a323a4659039848d3b87de26fc9546": "500000000000000000000000", - "b358e97c70b605b1d7d729dfb640b43c5eafd1e7": "20000000000000000000000", - "293c2306df3604ae4fda0d207aba736f67de0792": "200000000000000000000", - "74d366b07b2f56477d7c7077ac6fe497e0eb6559": "5000000000000000000000", - "490145afa8b54522bb21f352f06da5a788fa8f1d": "9231182000000000000000", - "862569211e8c6327b5415e3a67e5738b15baaf6e": "140000000000000000000", - "5a74ba62e7c81a3474e27d894fed33dd24ad95fe": "18200000000000000000", - "536e4d8029b73f5579dca33e70b24eba89e11d7e": "1970000000000000000000", - "25c6e74ff1d928df98137af4df8430df24f07cd7": "390000000000000000000", - "19b36b0c87ea664ed80318dc77b688dde87d95a5": "1948386000000000000000", - "abc4caeb474d4627cb6eb456ecba0ecd08ed8ae1": "3940000000000000000000", - "8ea656e71ec651bfa17c5a5759d86031cc359977": "100000000000000000000", - "8d620bde17228f6cbba74df6be87264d985cc179": "100000000000000000000", - "b2aa2f1f8e93e79713d92cea9ffce9a40af9c82d": "2000000000000000000000", - "198ef1ec325a96cc354c7266a038be8b5c558f67": "608334724000000000000000", - "6a13d5e32c1fd26d7e91ff6e053160a89b2c8aad": "53480000000000000000", - "e056bf3ff41c26256fef51716612b9d39ade999c": "100009000000000000000", - "2c128c95d957215101f043dd8fc582456d41016d": "835000000000000000000", - "2560b09b89a4ae6849ed5a3c9958426631714466": "1700000000000000000000", - "d3d6e9fb82542fd29ed9ea3609891e151396b6f7": "54000000000000000000000", - "a7607b42573bb6f6b4d4f23c7e2a26b3a0f6b6f0": "1610000000000000000000", - "020362c3ade878ca90d6b2d889a4cc5510eed5f3": "1042883000000000000000", - "14830704e99aaad5c55e1f502b27b22c12c91933": "620000000000000000000", - "8030b111c6983f0485ddaca76224c6180634789f": "80000000000000000000", - "2c5b7d7b195a371bf9abddb42fe04f2f1d9a9910": "200000000000000000000", - "77d43fa7b481dbf3db530cfbf5fdced0e6571831": "2000000000000000000000", - "2d90b415a38e2e19cdd02ff3ad81a97af7cbf672": "109800000000000000000", - "2fc82ef076932341264f617a0c80dd571e6ae939": "7160000000000000000000", - "dfe549fe8430e552c6d07cc3b92ccd43b12fb50f": "83620000000000000000", - "1e8e689b02917cdc29245d0c9c68b094b41a9ed6": "2000000000000000000000", - "21c3a8bba267c8cca27b1a9afabad86f607af708": "8940000000000000000000", - "143c639752caeecf6a997d39709fc8f19878c7e8": "1970000000000000000000", - "02603d7a3bb297c67c877e5d34fbd5b913d4c63a": "20000000000000000000", - "a166f911c644ac3213d29e0e1ae010f794d5ad26": "2000000000000000000000", - "6eb3819617404058268f0c3cff3596bfe9148c1c": "1670000000000000000000", - "7a67dd043a504fc2f2fc7194e9becf484cecb1fb": "250000000000000000000", - "f824ee331e4ac3cc587693395b57ecf625a6c0c2": "1600930000000000000000", - "1179c60dbd068b150b074da4be23033b20c68558": "680000000000000000000", - "d2a479404347c5543aab292ae1bb4a6f158357fa": "4000000000000000000000", - "b0d32bd7e4e695b7b01aa3d0416f80557dba9903": "16300000000000000000000", - "f734ec03724ddee5bb5279aa1afcf61b0cb448a1": "4238080000000000000000", - "c04069dfb18b096c7867f8bee77a6dc7477ad062": "2674000000000000000000", - "80c53ee7e3357f94ce0d7868009c208b4a130125": "2000000000000000000000", - "0f32d9cb4d0fdaa0150656bb608dcc43ed7d9301": "753978000000000000000", - "6ddb6092779d5842ead378e21e8120fd4c6bc132": "2000000000000000000000", - "82ea01e3bf2e83836e71704e22a2719377efd9c3": "3040000000000000000000", - "44c1110b18870ec81178d93d215838c551d48e64": "199958000000000000000", - "7727af101f0aaba4d23a1cafe17c6eb5dab1c6dc": "2000000000000000000000", - "a11a03c4bb26d21eff677d5d555c80b25453ee7a": "69979000000000000000", - "19e5dea3370a2c746aae34a37c531f41da264e83": "200000000000000000000", - "c325c352801ba883b3226c5feb0df9eae2d6e653": "3940000000000000000000", - "ae5055814cb8be0c117bb8b1c8d2b63b4698b728": "32035000000000000000", - "deb1bc34d86d4a4dde2580d8beaf074eb0e1a244": "1580000000000000000000", - "558360206883dd1b6d4a59639e5629d0f0c675d0": "2000000000000000000000", - "a9d6f871ca781a759a20ac3adb972cf12829a208": "925000000000000000000", - "b0ac4eff6680ee14169cdadbffdb30804f6d25f5": "2000000000000000000000", - "f1b58faffa8794f50af8e88309c7a6265455d51a": "999800000000000000000", - "a61a54df784a44d71b771b87317509211381f200": "1000000000000000000000", - "baa4b64c2b15b79f5f204246fd70bcbd86e4a92a": "500000000000000000000", - "a20d8ff60caae31d02e0b665fa435d76f77c9442": "489600000000000000000", - "f3e74f470c7d3a3f0033780f76a89f3ef691e6cb": "3021800000000000000000", - "d330728131fe8e3a15487a34573c93457e2afe95": "4000000000000000000000", - "9af9dbe47422d177f945bdead7e6d82930356230": "3940000000000000000000", - "0eb5b662a1c718608fd52f0c25f9378830178519": "6091400000000000000000", - "fda6810ea5ac985d6ffbf1c511f1c142edcfddf7": "4000000000000000000000", - "832c54176bdf43d2c9bcd7b808b89556b89cbf31": "200000000000000000000", - "704d5de4846d39b53cd21d1c49f096db5c19ba29": "152000000000000000000", - "344a8db086faed4efc37131b3a22b0782dad7095": "500000000000000000000", - "8c7fa5cae82fedb69ab189d3ff27ae209293fb93": "400030000000000000000", - "ad660dec825522a9f62fcec3c5b731980dc286ea": "3000000000000000000000", - "13b9b10715714c09cfd610cf9c9846051cb1d513": "1970000000000000000000", - "40467d80e74c35407b7db51789234615fea66818": "388000000000000000000", - "30e9d5a0088f1ddb2fd380e2a049192266c51cbf": "196910000000000000000", - "b2d1e99af91231858e7065dd1918330dc4c747d5": "16700000000000000000000", - "9f21302ca5096bea7402b91b0fd506254f999a3d": "1246832000000000000000", - "d24b6644f439c8051dfc64d381b8c86c75c17538": "2000000000000000000000", - "8228ebc087480fd64547ca281f5eace3041453b9": "1970000000000000000000", - "29da3e35b23bb1f72f8e2258cf7f553359d24bac": "20000000000000000000000", - "c8e558a3c5697e6fb23a2594c880b7a1b68f9860": "10000000000000000000000", - "6b951a43274eeafc8a0903b0af2ec92bf1efc839": "100000000000000000000", - "d015f6fcb84df7bb410e8c8f04894a881dcac237": "1038000000000000000000", - "6ccb03acf7f53ce87aadcc21a9932de915f89804": "8000000000000000000000", - "388c85a9b9207d8146033fe38143f6d34b595c47": "200000000000000000000", - "429c06b487e8546abdfc958a25a3f0fba53f6f00": "13503000000000000000", - "771507aeee6a255dc2cd9df55154062d0897b297": "334250000000000000000", - "5a2b1c853aeb28c45539af76a00ac2d8a8242896": "25000000000000000000", - "f4d67a9044b435b66e8977ff39a28dc4bd53729a": "200000000000000000000", - "063759dd1c4e362eb19398951ff9f8fad1d31068": "10000000000000000000000", - "cb58990bcd90cfbf6d8f0986f6fa600276b94e2d": "999925000000000000000", - "6df5c84f7b909aab3e61fe0ecb1b3bf260222ad2": "4000000000000000000000", - "deb2495d6aca7b2a6a2d138b6e1a42e2dc311fdd": "2000000000000000000000", - "59203cc37599b648312a7cc9e06dacb589a9ae6a": "148689000000000000000", - "fc9b347464b2f9929d807e039dae48d3d98de379": "14000000000000000000000", - "48d2434b7a7dbbff08223b6387b05da2e5093126": "18000000000000000000000", - "c9d76446d5aadff80b68b91b08cd9bc8f5551ac1": "714000000000000000000", - "3d31587b5fd5869845788725a663290a49d3678c": "500000000000000000000", - "d8715ef9176f850b2e30eb8e382707f777a6fbe9": "2000000000000000000000", - "2c2147947ae33fb098b489a5c16bfff9abcd4e2a": "200000000000000000000", - "d6c0d0bc93a62e257174700e10f024c8b23f1f87": "2000000000000000000000", - "d1978f2e34407fab1dc2183d95cfda6260b35982": "788000000000000000000", - "1bf974d9904f45ce81a845e11ef4cbcf27af719e": "100000000000000000000", - "6e761eaa0f345f777b5441b73a0fa5b56b85f22d": "2000000000000000000000", - "ea60436912de6bf187d3a472ff8f5333a0f7ed06": "19700000000000000000", - "94f8f057db7e60e675ad940f155885d1a477348e": "401100000000000000000", - "8933491760c8f0b4df8caac78ed835caee21046d": "20000000000000000000000", - "a7775e4af6a23afa201fb78b915e51a515b7a728": "120000000000000000000", - "d8d64384249b776794063b569878d5e3b530a4b2": "177569000000000000000", - "be633a3737f68439bac7c90a52142058ee8e8a6f": "960000000000000000000", - "90bd62a050845261fa4a9f7cf241ea630b05efb8": "500000000000000000000", - "552987f0651b915b2e1e5328c121960d4bdd6af4": "1790000000000000000000", - "0baf6ecdb91acb3606a8357c0bc4f45cfd2d7e6f": "1000000000000000000000", - "9e5a311d9f69898a7c6a9d6360680438e67a7b2f": "1490000000000000000000", - "78859c5b548b700d9284cee4b6633c2f52e529c2": "2955000000000000000000", - "d572309169b1402ec8131a17a6aac3222f89e6eb": "13800000000000000000000", - "8e6d7485cbe990acc1ad0ee9e8ccf39c0c93440e": "955000000000000000000", - "75c11d024d12ae486c1095b7a7b9c4af3e8edeb9": "20000000000000000000", - "903413878aea3bc1086309a3fe768b65559e8cab": "8000000000000000000000", - "6d0569e5558fc7df2766f2ba15dc8aeffc5beb75": "4001070000000000000000", - "3815b0743f94fc8cc8654fd9d597ed7d8b77c57e": "738578000000000000000", - "0f26480a150961b8e30750713a94ee6f2e47fc00": "1000000000000000000000", - "ede5de7c7fb7eee0f36e64530a41440edfbefacf": "617200000000000000000", - "763a7cbab70d7a64d0a7e52980f681472593490c": "600000000000000000000", - "6e270ad529f1f0b8d9cb6d2427ec1b7e2dc64a74": "200000000000000000000", - "eb3bdd59dcdda5a9bb2ac1641fd02180f5f36560": "6600000000000000000000", - "f4ebf50bc7e54f82e9b9bd24baef29438e259ce6": "10000000000000000000000", - "882c8f81872c79fed521cb5f950d8b032322ea69": "40000000000000000000000", - "394132600f4155e07f4d45bc3eb8d9fb72dcd784": "2941000000000000000000", - "0be2b94ad950a2a62640c35bfccd6c67dae450f6": "1940000000000000000000", - "d4c6ac742e7c857d4a05a04c33d4d05c1467571d": "200000000000000000000", - "1fddd85fc98be9c4045961f40f93805ecc4549e5": "164000000000000000000", - "534065361cb854fac42bfb5c9fcde0604ac919da": "2000000000000000000000", - "9a6ff5f6a7af7b7ae0ed9c20ecec5023d281b786": "2547000000000000000000", - "4f3a4854911145ea01c644044bdb2e5a960a982f": "4000000000000000000000", - "00497e92cdc0e0b963d752b2296acb87da828b24": "194800000000000000000", - "4ff67fb87f6efba9279930cfbd1b7a343c79fade": "400000000000000000000", - "62f2e5ccecd52cc4b95e0597df27cc079715608c": "143000000000000000000", - "1eda084e796500ba14c5121c0d90846f66e4be62": "534800000000000000000", - "9836b4d30473641ab56aeee19242761d72725178": "2000000000000000000000", - "de55de0458f850b37e4d78a641dd2eb2dd8f38ce": "4000000000000000000000", - "140ca28ff33b9f66d7f1fc0078f8c1eef69a1bc0": "1600000000000000000000", - "2014261f01089f53795630ba9dd24f9a34c2d942": "1337000000000000000000", - "11415fab61e0dfd4b90676141a557a869ba0bde9": "2048000000000000000000", - "88344909644c7ad4930fd873ca1c0da2d434c07f": "131970000000000000000", - "88b217ccb786a254cf4dc57f5d9ac3c455a30483": "925000000000000000000", - "dfdbcec1014b96da2158ca513e9c8d3b9af1c3d0": "2000000000000000000000", - "1ba9f7997e5387b6b2aa0135ac2452fe36b4c20d": "850000000000000000000", - "d70ad2c4e9eebfa637ef56bd486ad2a1e5bce093": "200000000000000000000", - "9ce27f245e02d1c312c1d500788c9def7690453b": "200000000000000000000", - "8234f463d18485501f8f85ace4972c9b632dbccc": "2000000000000000000000", - "994152fc95d5c1ca8b88113abbad4d710e40def6": "500000000000000000000", - "e5b980d28eece2c06fca6c9473068b37d4a6d6e9": "695200000000000000000", - "2d426912d059fad9740b2e390a2eeac0546ff01b": "1400000000000000000000", - "6d9997509882027ea947231424bedede2965d0ba": "2001600000000000000000", - "167ce7de65e84708595a525497a3eb5e5a665073": "575400000000000000000", - "e430c0024fdbf73a82e21fccf8cbd09138421c21": "4000000000000000000000", - "2e52912bc10ea39d54e293f7aed6b99a0f4c73be": "400000000000000000000", - "12cf8b0e465213211a5b53dfb0dd271a282c12c9": "15200000000000000000", - "06964e2d17e9189f88a8203936b40ac96e533c06": "18200000000000000000", - "66b1a63da4dcd9f81fe54f5e3fcb4055ef7ec54f": "201412000000000000000", - "0a77e7f72b437b574f00128b21f2ac265133528c": "2000000000000000000000", - "78f5c74785c5668a838072048bf8b453594ddaab": "400000000000000000000", - "58e554af3d87629620da61d538c7f5b4b54c4afe": "1297081000000000000000", - "37a10451f36166cf643dd2de6c1cbba8a011cfa3": "380000000000000000000", - "fe9ad12ef05d6d90261f96c8340a0381974df477": "2000000000000000000000", - "057f7f81cd7a406fc45994408b5049912c566463": "1700000000000000000000", - "55a3df57b7aaec16a162fd5316f35bec082821cf": "1970000000000000000000", - "c0e0b903088e0c63f53dd069575452aff52410c3": "3000000000000000000000", - "63e88e2e539ffb450386b4e46789b223f5476c45": "6292000000000000000000", - "3727341f26c12001e378405ee38b2d8464ec7140": "2000000000000000000000", - "c96751656c0a8ef4357b7344322134b983504aca": "2000000000000000000000", - "1e060dc6c5f1cb8cc7e1452e02ee167508b56542": "12715500000000000000000", - "18136c9df167aa17b6f18e22a702c88f4bc28245": "4000000000000000000000", - "116108c12084612eeda7a93ddcf8d2602e279e5c": "2000000000000000000000", - "bbb643d2187b364afc10a6fd368d7d55f50d1a3c": "1000000000000000000000", - "ec83e798c396b7a55e2a2224abcd834b27ea459c": "12000000000000000000000", - "973f4e361fe5decd989d4c8f7d7cc97990385daf": "388500000000000000000", - "c0f29ed0076611b5e55e130547e68a48e26df5e4": "3000000000000000000000", - "fd4b551f6fdbcda6c511b5bb372250a6b783e534": "20600000000000000000", - "144b19f1f66cbe318347e48d84b14039466c5909": "2000000000000000000000", - "bf183641edb886ce60b8190261e14f42d93cce01": "25019000000000000000", - "94db807873860aac3d5aea1e885e52bff2869954": "3220000000000000000000", - "7a74cee4fa0f6370a7894f116cd00c1147b83e59": "800000000000000000000", - "cd32a4a8a27f1cc63954aa634f7857057334c7a3": "1085000000000000000000", - "7cbeb99932e97e6e02058cfc62d0b26bc7cca52b": "2000000000000000000000", - "8cde8b732e6023878eb23ed16229124b5f7afbec": "133700000000000000000", - "45c4ecb4ee891ea984a7c5cefd8dfb00310b2850": "1980000000000000000000", - "8b393fb0813ee101db1e14ecc7d322c72b8c0473": "455578000000000000000", - "7b66126879844dfa34fe65c9f288117fefb449ad": "6000000000000000000000", - "162ba503276214b509f97586bd842110d103d517": "9002000000000000000000", - "7dece6998ae1900dd3770cf4b93812bad84f0322": "100000000000000000000", - "ec0927bac7dc36669c28354ab1be83d7eec30934": "2000000000000000000000", - "8d7f3e61299c2db9b9c0487cf627519ed00a9123": "1742400000000000000000", - "4fc46c396e674869ad9481638f0013630c87caac": "1000000000000000000000", - "bf68d28aaf1eeefef646b65e8cc8d190f6c6da9c": "2000000000000000000000", - "00969747f7a5b30645fe00e44901435ace24cc37": "1700000000000000000000", - "494dec4d5ee88a2771a815f1ee7264942fb58b28": "2000000000000000000000", - "ffeac0305ede3a915295ec8e61c7f881006f4474": "98500000000000000000", - "b39139576194a0866195151f33f2140ad1cc86cf": "100000000000000000000000", - "fead1803e5e737a68e18472d9ac715f0994cc2be": "500000000000000000000", - "698ab9a2f33381e07c0c47433d0d21d6f336b127": "20000000000000000000", - "e5edc73e626f5d3441a45539b5f7a398c593edf6": "865000000000000000000", - "dd4f5fa2111db68f6bde3589b63029395b69a92d": "158400000000000000000", - "8c93c3c6db9d37717de165c3a1b4fe51952c08de": "400000000000000000000", - "f87bb07b289df7301e54c0efda6a2cf291e89200": "1400000000000000000000", - "e7a4560c84b20e0fb54c49670c2903b0a96c42a4": "598000000000000000000", - "00a5797f52c9d58f189f36b1d45d1bf6041f2f6b": "5456900000000000000000", - "9da3302240af0511c6fd1857e6ddb7394f77ab6b": "3100000000000000000000", - "2c2d15ff39561c1b72eda1cc027ffef23743a144": "3920000000000000000000", - "9b4c2715780ca4e99e60ebf219f1590c8cad500a": "1600000000000000000000", - "ff5e7ee7d5114821e159dca5e81f18f1bfffbff9": "2000000000000000000000", - "0169c1c210eae845e56840412e1f65993ea90fb4": "2000000000000000000000", - "abc45f84db7382dde54c5f7d8938c42f4f3a3bc4": "200000000000000000000", - "d9383d4b6d17b3f9cd426e10fb944015c0d44bfb": "800000000000000000000", - "c090fe23dcd86b358c32e48d2af91024259f6566": "200000000000000000000", - "9ffedcc36b7cc312ad2a9ede431a514fccb49ba3": "669800000000000000000", - "2ffe93ec1a5636e9ee34af70dff52682e6ff7079": "2000000000000000000000", - "6e01e4ad569c95d007ada30d5e2db12888492294": "4000000000000000000000", - "d4d92c62b280e00f626d8657f1b86166cb1f740f": "200028000000000000000", - "1d36683063b7e9eb99462dabd569bddce71686f2": "1000000000000000000000", - "3a48e0a7098b06a905802b87545731118e89f439": "2000000000000000000000", - "bd9e56e902f4be1fc8768d8038bac63e2acbbf8e": "999972000000000000000", - "4d67f2ab8599fef5fc413999aa01fd7fce70b43d": "10000000000000000000000", - "8e74e0d1b77ebc823aca03f119854cb12027f6d7": "107200000000000000000000", - "7e5b19ae1be94ff4dee635492a1b012d14db0213": "100000000000000000000", - "5de9e7d5d1b667d095dd34099c85b0421a0bc681": "20000000000000000000", - "316eb4e47df71b42e16d6fe46825b7327baf3124": "4000000000000000000000", - "772c297f0ad194482ee8c3f036bdeb01c201d5cc": "200000000000000000000", - "d7052519756af42590f15391b723a03fa564a951": "4615591000000000000000", - "2c6846a1aa999a2246a287056000ba4dcba8e63d": "10020000000000000000000", - "de5b005fe8daae8d1f05de3eda042066c6c4691c": "1100000000000000000000", - "254c1ecc630c2877de8095f0a8dba1e8bf1f550c": "1700000000000000000000", - "f8f226142a428434ab17a1864a2597f64aab2f06": "172473000000000000000", - "a6c910ce4d494a919ccdaaa1fc3b82aa74ba06cf": "8000000000000000000000", - "e587b16abc8a74081e3613e14342c03375bf0847": "2000000000000000000000", - "6f176065e88e3c6fe626267d18a088aaa4db80bc": "3520000000000000000000", - "50dcbc27bcad984093a212a9b4178eabe9017561": "145512000000000000000", - "e1953c6e975814c571311c34c0f6a99cdf48ab82": "50000000000000000000", - "be0a2f385f09dbfce96732e12bb40ac349871ba8": "1610348000000000000000", - "4712540265cbeec3847022c59f1b318d43400a9e": "3500000000000000000000", - "29bdc4f28de0180f433c2694eb74f5504ce94337": "2000000000000000000000", - "2f66bfbf2262efcc8d2bd0444fc5b0696298ff1e": "9940000000000000000000", - "506411fd79003480f6f2b6aac26b7ba792f094b2": "500000000000000000000", - "23ea669e3564819a83b0c26c00a16d9e826f6c46": "1430590000000000000000", - "e3ffb02cb7d9ea5243701689afd5d417d7ed2ece": "78000000000000000000", - "38e7dba8fd4f1f850dbc2649d8e84f0952e3eb3c": "50000000000000000000", - "8644cc281be332ccced36da483fb2a0746d9ba2e": "400000000000000000000", - "e8a91da6cf1b9d65c74a02ec1f96eecb6dd241f3": "1940000000000000000000", - "0631dc40d74e5095e3729eddf49544ecd4396f67": "160000000000000000000", - "83c897a84b695eebe46679f7da19d776621c2694": "500000000000000000000", - "db73460b59d8e85045d5e752e62559875e42502e": "999800000000000000000", - "0dd4e674bbadb1b0dc824498713dce3b5156da29": "170000000000000000000", - "e3933d61b77dcdc716407f8250bc91e4ffaeb09d": "86600000000000000000000", - "58c90754d2f20a1cb1dd330625e04b45fa619d5c": "2000000000000000000000", - "895ec5545644e0b78330fffab8ddeac9e833156c": "600000000000000000000", - "7e1e29721d6cb91057f6c4042d8a0bbc644afe73": "159800000000000000000", - "72b90a4dc097239492c5b9777dcd1e52ba2be2c2": "6000000000000000000000", - "64241a7844290e0ab855f1d4aa75b55345032224": "1600000000000000000000", - "6fd4e0f3f32bee6d3767fdbc9d353a6d3aab7899": "695240000000000000000", - "3a035594c747476d42d1ee966c36224cdd224993": "355890000000000000000", - "de97f4330700b48c496d437c91ca1de9c4b01ba4": "2910840000000000000000", - "716ad3c33a9b9a0a18967357969b94ee7d2abc10": "482000000000000000000", - "bfbe05e88c9cbbcc0e92a405fac1d85de248ee24": "100000000000000000000", - "cfc4e6f7f8b011414bfba42f23adfaa78d4ecc5e": "1850000000000000000000", - "d931ac2668ba6a84481ab139735aec14b7bfbabf": "2000000000000000000000", - "e3263ce8af6db3e467584502ed7109125eae22a5": "2000000000000000000000", - "f78258c12481bcdddbb72a8ca0c043097261c6c5": "20000000000000000000", - "4493123c021ece3b33b1a452c9268de14007f9d3": "6685000000000000000000", - "431f2c19e316b044a4b3e61a0c6ff8c104a1a12f": "1000000000000000000000", - "e63e787414b9048478a50733359ecdd7e3647aa6": "1580000000000000000000", - "e4715956f52f15306ee9506bf82bccc406b3895e": "274944000000000000000", - "f7f91e7acb5b8129a306877ce3168e6f438b66a1": "176000000000000000000", - "dcdbbd4e2604e40e1710cc6730289dccfad3892d": "4600000000000000000000", - "2b5f4b3f1e11707a227aa5e69fa49dded33fb321": "6000000000000000000000", - "01488ad3da603c4cdd6cb0b7a1e30d2a30c8fc38": "200000000000000000000", - "841145b44840c946e21dbc190264b8e0d5029369": "300000000000000000000000", - "bf05070c2c34219311c4548b2614a438810ded6d": "2000000000000000000000", - "38f387e1a4ed4a73106ef2b462e474e2e3143ad0": "6000000000000000000000", - "f116b0b4680f53ab72c968ba802e10aa1be11dc8": "20000000000000000000", - "bea0afc93aae2108a3fac059623bf86fa582a75e": "1700000000000000000000", - "4c997992036c5b433ac33d25a8ea1dc3d4e4e6d8": "29200000000000000000", - "ab7e0b83ed9a424c6d1e6a6f87a4dbf06409c7d6": "2400000000000000000000", - "d71fb130f0150c565269e00efb43902b52a455a6": "200000000000000000000", - "99b018932bcad355b6792b255db6702dec8ce5dd": "4000086000000000000000", - "4b904e934bd0cc8b20705f879e905b93ea0ccc30": "2000000000000000000000", - "672ec42faa8cd69aaa71b32cc7b404881d52ff91": "10000000000000000000000", - "acbc2d19e06c3babbb5b6f052b6bf7fc37e07229": "200000000000000000000", - "cea8743341533cb2f0b9c6efb8fda80d77162825": "100000000000000000000", - "9568b7de755628af359a84543de23504e15e41e6": "40000000000000000000000", - "6ec96d13bdb24dc7a557293f029e02dd74b97a55": "4000000000000000000000", - "d95c90ffbe5484864780b867494a83c89256d6e4": "1640000000000000000000", - "ade6f8163bf7c7bb4abe8e9893bd0cc112fe8872": "327600000000000000000", - "250eb7c66f869ddf49da85f3393e980c029aa434": "4000000000000000000000", - "a35c19132cac1935576abfed6c0495fb07881ba0": "2000000000000000000000", - "d5550caaf743b037c56fd2558a1c8ed235130750": "5347598000000000000000", - "03097923ba155e16d82f3ad3f6b815540884b92c": "1820000000000000000000", - "d6d9e30f0842012a7176a917d9d2048ca0738759": "4000000000000000000000", - "ab9ad36e5c74ce2e96399f57839431d0e79f96ab": "164000000000000000000", - "75be8ff65e5788aec6b2a52d5fa7b1e7a03ba675": "67720000000000000000", - "4f6d4737d7a940382487264886697cf7637f8015": "1670000000000000000000", - "5f7b3bbac16dab831a4a0fc53b0c549dc36c31ca": "1940000000000000000000", - "d843ee0863ce933e22f89c802d31287b9671e81c": "13370000000000000000", - "361f3ba9ed956b770f257d3672fe1ff9f7b0240c": "600000000000000000000", - "6c0ae9f043c834d44271f13406593dfe094f389f": "1517545000000000000000", - "db34745ede8576b499db01beb7c1ecda85cf4abe": "80000000000000000000", - "7be8ccb4f11b66ca6e1d57c0b5396221a31ba53a": "20000000000000000000", - "128b908fe743a434203de294c441c7e20a86ea67": "713304000000000000000", - "df236bf6abf4f3293795bf0c28718f93e3b1b36b": "1337000000000000000000", - "14254ea126b52d0142da0a7e188ce255d8c47178": "775000000000000000000", - "ceed47ca5b899fd1623f21e9bd4db65a10e5b09d": "133196000000000000000", - "30acd858875fa24eef0d572fc7d62aad0ebddc35": "400000000000000000000", - "47a281dff64167197855bf6e705eb9f2cef632ea": "1000072000000000000000", - "297d5dbe222f2fb52531acbd0b013dc446ac7368": "20000000000000000000000", - "adf85203c8376a5fde9815384a350c3879c4cb93": "1147300000000000000000", - "c3e0471c64ff35fa5232cc3121d1d38d1a0fb7de": "2000000000000000000000", - "fdecc82ddfc56192e26f563c3d68cb544a96bfed": "440000000000000000000", - "2614f42d5da844377578e6b448dc24305bef2b03": "2000000000000000000000", - "1d96bcd58457bbf1d3c2a46ffaf16dbf7d836859": "171313000000000000000", - "bd66ffedb530ea0b2e856dd12ac2296c31fe29e0": "200000000000000000000", - "6e84876dbb95c40b6656e42ba9aea08a993b54dc": "1101932000000000000000", - "a1c4f45a82e1c478d845082eb18875c4ea6539ab": "200000000000000000000000", - "2c964849b1f69cc7cea4442538ed87fdf16cfc8f": "2000000000000000000000", - "45b47105fe42c4712dce6e2a21c05bffd5ea47a9": "2000000000000000000000", - "31e9c00f0c206a4e4e7e0522170dc81e88f3eb70": "2685000000000000000000", - "5fe77703808f823e6c399352108bdb2c527cb87c": "1960000000000000000000", - "2272186ef27dcbe2f5fc373050fdae7f2ace2316": "16100000000000000000000", - "b7576e9d314df41ec5506494293afb1bd5d3f65d": "20000000000000000000", - "ac9fff68c61b011efbecf038ed72db97bb9e7281": "9550000000000000000000", - "cd9529492b5c29e475acb941402b3d3ba50686b0": "1970000000000000000000", - "f19b39389d47b11b8a2c3f1da9124decffbefaf7": "2000000000000000000000", - "9e951f6dc5e352afb8d04299d2478a451259bf56": "72004000000000000000", - "8eb1fbe4e5d3019cd7d30dae9c0d5b4c76fb6331": "2000000000000000000000", - "29cc804d922be91f5909f348b0aaa5d21b607830": "4000000000000000000000", - "5c7b9ec7a2438d1e3c7698b545b9c3fd77b7cd55": "1000000000000000000000", - "a16160851d2b9c349b92e46f829abfb210943595": "1790000000000000000000", - "eac6b98842542ea10bb74f26d7c7488f698b6452": "20000000000000000000000", - "57825aeb09076caa477887fbc9ae37e8b27cc962": "100000000000000000000", - "b35e8a1c0dac7e0e66dbac736a592abd44012561": "14974000000000000000", - "756b84eb85fcc1f4fcdcc2b08db6a86e135fbc25": "3220000000000000000000", - "e13b3d2bbfdcbc8772a23315724c1425167c5688": "1032115000000000000000", - "0a2dcb7a671701dbb8f495728088265873356c8e": "152120000000000000000", - "03cb4c4f4516c4ff79a1b6244fbf572e1c7fea79": "2740000000000000000000", - "98ba4e9ca72fddc20c69b4396f76f8183f7a2a4e": "12800000000000000000000", - "f8087786b42da04ed6d1e0fe26f6c0eefe1e9f5a": "10000000000000000000000", - "02f7f67209b16a17550c694c72583819c80b54ad": "98400000000000000000", - "32bb2e9693e4e085344d2f0dbd46a283e3a087fd": "400000000000000000000", - "9c78963fbc263c09bd72e4f8def74a9475f7055c": "13790000000000000000000", - "27144ca9a7771a836ad50f803f64d869b2ae2b20": "4000000000000000000000", - "cc758d071d25a6320af68c5dc9c4f6955ba94520": "6000000000000000000000", - "cb42b44eb5fd60b5837e4f9eb47267523d1a229c": "865000000000000000000", - "aaf5b207b88b0de4ac40d747cee06e172df6e745": "31428000000000000000000", - "52d380511df19d5ec2807bbcb676581b67fd37a3": "13400000000000000000", - "aa1b3768c16d821f580e76c8e4c8e86d7dc78853": "400000000000000000000", - "41098a81452317c19e3eef0bd123bbe178e9e9ca": "2800000000000000000000", - "267148fd72c54f620a592fb92799319cc4532b5c": "410000000000000000000", - "d7cdbd41fff20df727c70b6255c1ba7606055468": "200000000000000000000", - "0e33fcbbc003510be35785b52a9c5d216bc005f4": "1880000000000000000000", - "6727daf5b9d68efcab489fedec96d7f7325dd423": "2000000000000000000000", - "cd0a161bc367ae0927a92aac9cf6e5086714efca": "2000000000000000000000", - "612667f172135b950b2cd1de10afdece6857b873": "1000000000000000000000", - "900194c4b1074305d19de405b0ac78280ecaf967": "1000000000000000000000", - "51f55ef47e6456a418ab32b9221ed27dba6608ee": "4200000000000000000000", - "0da532c910e3ac0dfb14db61cd739a93353fd05f": "1336866000000000000000", - "21df2dcdaf74b2bf803404dd4de6a35eabec1bbd": "6920000000000000000000", - "f0e7fb9e420a5340d536f40408344feaefc06aef": "1000000000000000000000", - "6742a2cfce8d79a2c4a51b77747498912245cd6a": "258064000000000000000", - "8663a241a0a89e70e182c845e2105c8ad7264bcf": "14825507000000000000000", - "18e113d8177c691a61be785852fa5bb47aeebdaf": "1337000000000000000000", - "1bec4d02ce85fc48feb62489841d85b170586a9b": "2400000000000000000000", - "287cf9d0902ef819a7a5f149445bf1775ee8c47c": "16000000000000000000000", - "28967280214e218a120c5dda37041b111ea36d74": "200000000000000000000", - "a0b771951ce1deee363ae2b771b73e07c4b5e800": "1400000000000000000000", - "29f8fba4c30772b057edbbe62ae7420c390572e1": "1000000000000000000000", - "ee34c7e7995db9f187cff156918cfb6f13f6e003": "1960000000000000000000", - "916bf7e3c545921d3206d900c24f14127cbd5e70": "18020000000000000000000", - "93235f340d2863e18d2f4c52996516138d220267": "73800000000000000000", - "7efec0c6253caf397f71287c1c07f6c9582b5b86": "482839000000000000000", - "8d2e31b08803b2c5f13d398ecad88528209f6057": "9993000000000000000000", - "964eab4b276b4cd8983e15ca72b106900fe41fce": "500000000000000000000", - "eea1e97988de75d821cd28ad6822b22cce988b31": "520000000000000000000", - "278c0bde630ec393b1e7267fc9d7d97019e4145b": "2000000000000000000000", - "82e4461eb9d849f0041c1404219e4272c4900ab4": "2000000000000000000000", - "4a73389298031b8816cca946421c199e18b343d6": "631254000000000000000", - "9a5af31c7e06339ac8b4628d7c4db0ce0f45c8a4": "500000000000000000000", - "cb9b5103e4ce89af4f64916150bff9eecb9faa5c": "500000000000000000000", - "740f641614779dcfa88ed1d425d60db42a060ca6": "998630000000000000000", - "a4e623451e7e94e7e89ba5ed95c8a83a62ffc4ea": "20000000000000000000", - "25a500eeec7a662a841552b5168b707b0de21e9e": "10020000000000000000000", - "185a7fc4ace368d233e620b2a45935661292bdf2": "20000000000000000000000", - "9b68f67416a63bf4451a31164c92f672a68759e9": "60000000000000000000000", - "a38b5bd81a9db9d2b21d5ec7c60552cd02ed561b": "6000000000000000000000", - "61c830f1654718f075ccaba316faacb85b7d120b": "400000000000000000000", - "8392e53776713578015bff4940cf43849d7dcba1": "153190000000000000000", - "dc57477dafa42f705c7fe40eae9c81756e0225f1": "500044000000000000000", - "febc3173bc9072136354002b7b4fb3bfc53f22f1": "370000000000000000000", - "d78f84e38944a0e0255faece48ba4950d4bd39d2": "5000000000000000000000", - "a7a3bb6139b0ada00c1f7f1f9f56d994ba4d1fa8": "2000000000000000000000", - "aa3f29601a1331745e05c42830a15e71938a6237": "1700000000000000000000", - "bec6640f4909b58cbf1e806342961d607595096c": "1999944000000000000000", - "9be3c329b62a28b8b0886cbd8b99f8bc930ce3e6": "74500000000000000000", - "e3eb2c0a132a524f72ccc0d60fee8b41685d39e2": "1970000000000000000000", - "90b1f370f9c1eb0be0fb8e2b8ad96a416371dd8a": "900000000000000000000", - "f2742e6859c569d5f2108351e0bf4dca352a48a8": "10000000000000000000000", - "b134c004391ab4992878337a51ec242f42285742": "2000000000000000000000", - "ab7416ff32254951cbbc624ec7fb45fc7ecaa872": "340000000000000000000", - "9795f64319fc17dd0f8261f9d206fb66b64cd0c9": "200000000000000000000", - "64e03ef070a54703b7184e48276c5c0077ef4b34": "320000000000000000000", - "3430a16381f869f6ea5423915855e800883525a9": "17900000000000000000000", - "f4a367b166d2991a2bfda9f56463a09f252c1b1d": "1970000000000000000000", - "77c4a697e603d42b12056cbba761e7f51d0443f5": "680000000000000000000", - "153ef58a1e2e7a3eb6b459a80ab2a547c94182a2": "96000000000000000000000", - "6dbe8abfa1742806263981371bf3d35590806b6e": "20000000000000000000000", - "4c99dae96481e807c1f99f8b7fbde29b7547c5bf": "150000000000000000000", - "d5b9d277d8aad20697a51f76e20978996bffe055": "143250000000000000000", - "0f24105abbdaa03fa6309ef6c188e51f714a6e59": "200000000000000000000", - "1cb6b2d7cfc559b7f41e6f56ab95c7c958cd0e4c": "1337000000000000000000", - "f37b426547a1642d8033324814f0ede3114fc212": "401100000000000000000", - "318f1f8bd220b0558b95fb33100ffdbb640d7ca6": "4000000000000000000000", - "206d55d5792a514ec108e090599f2a065e501185": "200550000000000000000", - "11d2247a221e70c2d66d17ee138d38c55ffb8640": "10000000000000000000000", - "e8de725eca5def805ff7941d31ac1c2e342dfe95": "2462500000000000000000", - "d561cbbc05515de73ab8cf9eae1357341e7dfdf4": "6000000000000000000000", - "0455dcec8a7fc4461bfd7f37456fce3f4c3caac7": "400000000000000000000", - "5161fd49e847f67455f1c8bb7abb36e985260d03": "1200000000000000000000", - "8e073bad25e42218615f4a0e6b2ea8f8de2230c0": "2402500000000000000000", - "6c08a6dc0173c7342955d1d3f2c065d62f83aec7": "20000000000000000000", - "95cb6d8a6379f94aba8b885669562c4d448e56a7": "2000000000000000000000", - "2805415e1d7fdec6dedfb89e521d10592d743c10": "100000000000000000000", - "daacdaf42226d15cb1cf98fa15048c7f4ceefe69": "300000000000000000000", - "e33df4ce80ccb62a76b12bcdfcecc46289973aa9": "6000000000000000000000", - "8f8cd26e82e7c6defd02dfad07979021cbf7150c": "3000000000000000000000", - "77a17122fa31b98f1711d32a99f03ec326f33d08": "1700000000000000000000", - "6f791d359bc3536a315d6382b88311af8ed6da47": "92000000000000000000", - "de30e49e5ab313214d2f01dcabce8940b81b1c76": "197000000000000000000", - "cf9be9b9ab86c66b59968e67b8d4dcff46b1814a": "660000000000000000000", - "7fdfc88d78bf1b285ac64f1adb35dc11fcb03951": "2287900000000000000000", - "c5134cfbb1df7a20b0ed7057622eeed280947dad": "3800000000000000000000", - "fa9ec8efe08686fa58c181335872ba698560ecab": "1999944000000000000000", - "f6a8635757c5e8c134d20d028cf778cf8609e46a": "1459416000000000000000", - "6265b2e7730f36b776b52d0c9d02ada55d8e3cb6": "1000000000000000000000", - "6a8cea2de84a8df997fd3f84e3083d93de57cda9": "100007000000000000000", - "1b7ed974b6e234ce81247498429a5bd4a0a2d139": "2000000000000000000000", - "9ba53dc8c95e9a472feba2c4e32c1dc4dd7bab46": "1337000000000000000000", - "d7b740dff8c457668fdf74f6a266bfc1dcb723f9": "20000000000000000000", - "07bc2cc8eedc01970700efc9c4fb36735e98cd71": "4000000000000000000000", - "3e1c962063e0d5295941f210dca3ab531eec8809": "3000000000000000000000", - "b447571dacbb3ecbb6d1cf0b0c8f3838e52324e2": "30199000000000000000", - "87764e3677eef604cbc59aed24abdc566b09fc25": "3000000000000000000000", - "03aa622881236dd0f4940c24c324ff8b7b7e2186": "3200000000000000000000", - "a4a7d306f510cd58359428c0d2f7c3609d5674d7": "3349000000000000000000", - "3c83c1701db0388b68210d00f5717cd9bd322c6a": "30000000000000000000000", - "047d5a26d7ad8f8e70600f70a398ddaa1c2db26f": "6000000000000000000000", - "43767bf7fd2af95b72e9312da9443cb1688e4343": "300000000000000000000", - "34a85d6d243fb1dfb7d1d2d44f536e947a4cee9e": "20000000000000000000000", - "65a9dad42e1632ba3e4e49623fab62a17e4d3611": "93120000000000000000", - "48e0cbd67f18acdb7a6291e1254db32e0972737f": "100007000000000000000", - "a5de5e434fdcdd688f1c31b6fb512cb196724701": "800000000000000000000", - "6d63d38ee8b90e0e6ed8f192eda051b2d6a58bfd": "30000000000000000000", - "b079bb4d9866143a6da72ae7ac0022062981315c": "760000000000000000000", - "c0413f5a7c2d9a4b8108289ef6ecd271781524f4": "50000000000000000000000", - "a91a5a7b341f99c535144e20be9c6b3bb4c28e4d": "5431790000000000000000", - "993f146178605e66d517be782ef0b3c61a4e1925": "7011998000000000000000", - "966c04781cb5e67dde3235d7f8620e1ab663a9a5": "75800000000000000000000", - "b3f82a87e59a39d0d2808f0751eb72c2329cdcc5": "5000000000000000000000", - "9b77ebced7e215f0920e8c2b870024f6ecb2ff31": "1000000000000000000000", - "fe697ff22ca547bfc95e33d960da605c6763f35b": "1325000000000000000000", - "480af52076009ca73781b70e43b95916a62203ab": "924171000000000000000", - "a9dc0424c6969d798358b393b1933a1f51bee00a": "20000000000000000000000", - "7aba56f63a48bc0817d6b97039039a7ad62fae2e": "600000000000000000000", - "59d139e2e40c7b97239d23dfaca33858f602d22b": "2000000000000000000000", - "8d6170ff66978e773bb621bf72b1ba7be3a7f87e": "200000000000000000000", - "d668523a90f0293d65c538d2dd6c57673710196e": "39500000000000000000", - "bbb5a0f4802c8648009e8a6998af352cde87544f": "95500000000000000000", - "fc43829ac787ff88aaf183ba352aadbf5a15b193": "3960000000000000000000", - "fe22a0b388668d1ae2643e771dacf38a434223cc": "4000304000000000000000", - "092acb624b08c05510189bbbe21e6524d644ccad": "18200000000000000000", - "8f0538ed71da1155e0f3bde5667ceb84318a1a87": "1940000000000000000000", - "06994cd83aa2640a97b2600b41339d1e0d3ede6c": "250000000000000000000", - "9d460c1b379ddb19a8c85b4c6747050ddf17a875": "3340000000000000000000", - "77a769fafdecf4a638762d5ba3969df63120a41d": "2000000000000000000000", - "5f375b86600c40cca8b2676b7a1a1d1644c5f52c": "78838000000000000000", - "15ee0fc63ebf1b1fc49d7bb38f8863823a2e17d2": "1910000000000000000000", - "6651736fb59b91fee9c93aa0bd6ea2f7b2506180": "500000000000000000000", - "361d9ed80b5bd27cf9f1226f26753258ee5f9b3f": "3530900000000000000000", - "c9b6b686111691ee6aa197c7231a88dc60bd295d": "500000000000000000000", - "e9b4a4853577a9dbcc2e795be0310d1bed28641a": "1000000000000000000000", - "36758e049cd98bcea12277a676f9297362890023": "4000000000000000000000", - "6bb50813146a9add42ee22038c9f1f7469d47f47": "200200000000000000000", - "6de4b581385cf7fc9fe8c77d131fe2ee7724c76a": "2308840000000000000000", - "d2a5a024230a57ccc666760b89b0e26cafd189c7": "49997115000000000000000", - "65af9087e05167715497c9a5a749189489004def": "835000000000000000000", - "ead21c1deccfbf1c5cd96688a2476b69ba07ce4a": "72800000000000000000", - "e308435204793764f5fcbe65eb510f5a744a655a": "200000000000000000000", - "9376dce2af2ec8dcda741b7e7345664681d93668": "1000000000000000000000", - "a1b47c4d0ed6018842e6cfc8630ac3a3142e5e6b": "20000000000000000000", - "e2198c8ca1b399f7521561fd5384a7132fba486b": "1015200000000000000000", - "92c13fe0d6ce87fd50e03def9fa6400509bd7073": "40000000000000000000", - "7517f16c28d132bb40e3ba36c6aef131c462da17": "18200000000000000000", - "6a023af57d584d845e698736f130db9db40dfa9a": "98800000000000000000", - "1518627b88351fede796d3f3083364fbd4887b0c": "16000000000000000000000", - "f5b6e9061a4eb096160777e26762cf48bdd8b55d": "254030000000000000000", - "28073efc17d05cab3195c2db332b61984777a612": "1000000000000000000000", - "f06a854a3c5dc36d1c49f4c87d6db333b57e4add": "10000000000000000000000", - "9225983860a1cb4623c72480ac16272b0c95e5f5": "2000000000000000000000", - "5260dc51ee07bddaababb9ee744b393c7f4793a6": "34040000000000000000", - "0f127bbf8e311caea2ba502a33feced3f730ba42": "188000000000000000000", - "17d521a8d9779023f7164d233c3b6420ffd223ed": "20000000000000000000", - "8c2b7d8b608d28b77f5caa9cd645242a823e4cd9": "1820000000000000000000", - "6e866d032d405abdd65cf651411d803796c22311": "2000000000000000000000", - "dc51b2dc9d247a1d0e5bc36ca3156f7af21ff9f6": "1000000000000000000000", - "c84d9bea0a7b9f140220fd8b9097cfbfd5edf564": "123047000000000000000", - "ff86e5e8e15b53909600e41308dab75f0e24e46b": "902400000000000000000", - "d7164aa261c09ad9b2b5068d453ed8eb6aa13083": "3000000000000000000000", - "76aaf8c1ac012f8752d4c09bb46607b6651d5ca8": "20000000000000000000", - "41786a10d447f484d33244ccb7facd8b427b5b8c": "1000000000000000000000", - "2e0c57b47150f95aa6a7e16ab9b1cbf54328979a": "100000000000000000000", - "3f747237806fed3f828a6852eb0867f79027af89": "1500000000000000000000", - "a568db4d57e4d67462d733c69a9e0fe26e218327": "1096140000000000000000", - "1f88f8a1338fc7c10976abcd3fb8d38554b5ec9c": "13400000000000000000", - "d1ea4d72a67b5b3e0f315559f52bd0614d713069": "2000000000000000000000", - "bfaeb91067617dcf8b44172b02af615674835dba": "160661000000000000000", - "b71a13ba8e95167b80331b52d69e37054fe7a826": "200000000000000000000", - "b67a80f170197d96cdcc4ab6cba627b4afa6e12c": "2400000000000000000000", - "35af040a0cc2337a76af288154c7561e1a233349": "1000000000000000000000", - "c86190904b8d079ec010e462cbffc90834ffaa5c": "10100000000000000000000", - "383304dd7a5720b29c1a10f60342219f48032f80": "5600000000000000000000", - "191313525238a21c767457a91374f02200c55448": "116400000000000000000", - "cc4a2f2cf86cf3e43375f360a4734691195f1490": "1348127000000000000000", - "4e020779b5ddd3df228a00cb48c2fc979da6ae38": "2000000000000000000000", - "e206fb7324e9deb79e19903496d6961b9be56603": "100000000000000000000", - "3ae160e3cd60ae31b9d6742d68e14e76bd96c517": "30000000000000000000", - "1f7d8e86d6eeb02545aad90e91327bd369d7d2f3": "20000000000000000000", - "68c7d1711b011a33f16f1f55b5c902cce970bdd7": "152000000000000000000", - "637be71b3aa815ff453d5642f73074450b64c82a": "2000000000000000000000", - "1584a2c066b7a455dbd6ae2807a7334e83c35fa5": "130000000000000000000", - "9c05e9d0f0758e795303717e31da213ca157e686": "1000000000000000000000", - "4f1a2da54a4c6da19d142412e56e815741db2325": "100000000000000000000", - "9a4ca8b82117894e43db72b9fa78f0b9b93ace09": "50000000000000000000", - "26c99f8849c9802b83c861217fd07a9e84cdb79d": "300000000000000000000", - "45c0d19f0b8e054f9e893836d5ecae7901af2812": "5000000000000000000000", - "00dc01cbf44978a42e8de8e436edf94205cfb6ec": "1458440000000000000000", - "de7dee220f0457a7187d56c1c41f2eb00ac56021": "629924000000000000000", - "1c128bd6cda5fca27575e4b43b3253c8c4172afe": "2000000000000000000000", - "666746fb93d1935c5a3c684e725010c4fad0b1d8": "20000000000000000000", - "51d78b178d707e396e8710965c4f41b1a1d9179d": "110600000000000000000", - "68f7573cd457e14c03fea43e302d30347c10705c": "5000000000000000000000", - "9d30cb237bc096f17036fc80dd21ca68992ca2d9": "30380000000000000000000", - "fbcfcc4a7b0f26cf26e9f3332132e2fc6a230766": "8000000000000000000000", - "b166e37d2e501ae73c84142b5ffb5aa655dd5a99": "1999000000000000000000", - "6df24f6685a62f791ba337bf3ff67e91f3d4bc3a": "2166000000000000000000", - "92e435340e9d253c00256389f52b067d55974e76": "268000000000000000000", - "ea53d26564859d9e90bb0e53b7abf560e0162c38": "400000000000000000000", - "e26657f0ed201ea2392c9222b80a7003608ddf30": "40000000000000000000", - "f4177a0d85d48b0e264211ce2aa2efd3f1b47f08": "3593425000000000000000", - "9d47ba5b4c8505ad8da42934280b61a0e1e8b971": "100000000000000000000", - "63c2a3d235e5eeabd0d4a6afdb89d94627396495": "1241620000000000000000", - "446a8039cecf9dce4879cbcaf3493bf545a88610": "7000000000000000000000", - "7fa37ed67887751a471f0eb306be44e0dbcd6089": "1060000000000000000000", - "26d4a16891f52922789217fcd886f7fce296d400": "2000000000000000000000", - "487e108502b0b189ef9c8c6da4d0db6261eec6c0": "1910000000000000000000", - "7484d26becc1eea8c6315ec3ee0a450117dc86a0": "12000000000000000000000", - "ad9e97a0482f353a05c0f792b977b6c7e811fa5f": "200000000000000000000", - "2273bad7bc4e487622d175ef7a66988b6a93c4ee": "20000000000000000000", - "3b93b16136f11eaf10996c95990d3b2739ccea5f": "10000000000000000000000", - "f3f1fa3918ca34e2cf7e84670b1f4d8eca160db3": "680000000000000000000", - "88a2154430c0e41147d3c1fee3b3b006f851edbd": "999972000000000000000", - "25185f325acf2d64500698f65c769ddf68301602": "5000000000000000000000", - "e9cafe41a5e8bbd90ba02d9e06585b4eb546c57f": "2000000000000000000000", - "95681cdae69b2049ce101e325c759892cac3f811": "2857600000000000000000", - "475066f9ad26655196d5535327bbeb9b7929cb04": "3040000000000000000000", - "6685fd2e2544702c360b8bb9ee78f130dad16da5": "2000000000000000000000", - "45e68db94c7d0ab7ac41857a71d67147870f4e71": "400000000000000000000000", - "4ad95d188d6464709add2555fb4d97fe1ebf311f": "346000000000000000000", - "73bedd6fda7ba3272185087b6351fc133d484e37": "5057200000000000000000", - "1ea4715504c6af107b0194f4f7b1cb6fcccd6f4b": "590598000000000000000", - "77306ffe2e4a8f3ca826c1a249f7212da43aeffd": "20000000000000000000000", - "eb453f5a3adddd8ab56750fadb0fe7f94d9c89e7": "20000000000000000000", - "7201d1c06920cd397ae8ad869bcda6e47ffb1b5a": "20000000000000000000", - "821cb5cd05c7ef909fe1be60733d8963d760dc41": "4000000000000000000000", - "496e319592b341eaccd778dda7c8196d54cac775": "9250000000000000000000", - "88609e0a465b6e99fce907166d57e9da0814f5c8": "20000000000000000000000", - "c7ec62b804b1f69b1e3070b5d362c62fb309b070": "13068074000000000000000", - "3eb9ef06d0c259040319947e8c7a6812aa0253d8": "167000000000000000000", - "cbf37ff854a2f1ce53934494777892d3ec655782": "10000000000000000000000", - "02b1af72339b2a2256389fd64607de24f0de600a": "2000000000000000000000", - "a8beb91c2b99c8964aa95b6b4a184b1269fc3483": "400000000000000000000", - "922a20c79a1d3a26dd3829677bf1d45c8f672bb6": "4000000000000000000000", - "c5843399d150066bf7979c34ba294620368ad7c0": "200000000000000000000", - "8cd0cd22e620eda79c0461e896c93c44837e2968": "2000000000000000000000", - "6170dd0687bd55ca88b87adef51cfdc55c4dd458": "2005160000000000000000", - "eed384ef2d41d9d203974e57c12328ea760e08ea": "1000000000000000000000", - "b129a5cb7105fe810bd895dc7206a991a4545488": "30000000000000000000", - "3872f48dc5e3f817bc6b2ad2d030fc5e0471193d": "4000000000000000000000", - "514b7512c9ae5ea63cbf11715b63f21e18d296c1": "1999944000000000000000", - "7ab256b204800af20137fabcc916a23258752501": "20000000000000000000000", - "fc66faba277f4b5de64ad45eb19c31e00ced3ed5": "5640000000000000000000", - "39824f8bced176fd3ea22ec6a493d0ccc33fc147": "4000000000000000000000", - "e338e859fe2e8c15554848b75caecda877a0e832": "1801800000000000000000", - "e53c68796212033e4e6f9cff56e19c461eb454f9": "1000000000000000000000", - "8461ecc4a6a45eb1a5b947fb86b88069b91fcd6f": "2000000000000000000000", - "6b4b99cb3fa9f7b74ce3a48317b1cd13090a1a7a": "57300000000000000000", - "97de21e421c37fe4b8025f9a51b7b390b5df7804": "80000000000000000000000", - "d25aecd7eb8bd6345b063b5dbd271c77d3514494": "1820000000000000000000", - "57b23d6a1adc06c652a779c6a7fb6b95b9fead66": "200000000000000000000", - "0d658014a199061cf6b39433140303c20ffd4e5a": "8200000000000000000000", - "30eac740e4f02cb56eef0526e5d300322600d03e": "1970000000000000000000", - "4eead40aad8c73ef08fc84bc0a92c9092f6a36bf": "26740000000000000000", - "30f7d025d16f7bee105580486f9f561c7bae3fef": "500000000000000000000", - "0977bfba038a44fb49b03970d8d8cf2cb61f8b25": "420000000000000000000", - "b14bbeff70720975dc6191b2a44ff49f2672873c": "143000000000000000000", - "d588c3a5df228185d98ee7e60748255cdea68b01": "4000000000000000000000", - "225d35faedb391c7bc2db7fa9071160405996d00": "167774000000000000000", - "c0e457bd56ec36a1246bfa3230fff38e5926ef22": "1940000000000000000000", - "2a9c57fe7b6b138a920d676f3c76b6c2a0eef699": "9400000000000000000000", - "36df8f883c1273ec8a171f7a33cfd649b1fe6075": "227290000000000000000", - "234f46bab73fe45d31bf87f0a1e0466199f2ebac": "485000000000000000000", - "a2e1b8aa900e9c139b3fa122354f6156d92a18b1": "500000000000000000000", - "517cd7608e5d0d83a26b717f3603dac2277dc3a4": "2000000000000000000000", - "75f7539d309e9039989efe2e8b2dbd865a0df088": "2460000000000000000000", - "4b792e29683eb586e394bb33526c6001b397999e": "600000000000000000000", - "a34f9d568bf7afd94c2a5b8a5ff55c66c4087999": "2444000000000000000000", - "4b31bf41abc75c9ae2cd8f7f35163b6e2b745054": "382000000000000000000", - "e35453eef2cc3c7a044d0ac134ba615908fa82ee": "147510000000000000000", - "7aa79ac04316cc8d08f20065baa6d4142897d54e": "1400000000000000000000", - "f1dc8ac81042c67a9c3c6792b230c46ac016ca10": "200000000000000000000", - "2bb366b9edcb0da680f0e10b3b6e28748190d6c3": "5799400000000000000000", - "a567770b6ae320bdde50f904d663e746a61dace6": "2000000000000000000000", - "d9d42fd13ebd4bf69cac5e9c7e82483ab46dd7e9": "5348000000000000000000", - "27830c5f6023afaaf79745676c204a0faccda0ba": "240000000000000000000", - "3cb179cb4801a99b95c3b0c324a2bdc101a65360": "26000000000000000000", - "976e3ceaf3f1af51f8c29aff5d7fa21f0386d8ee": "240000000000000000000", - "752a5ee232612cd3005fb26e5b597de19f776be6": "5460000000000000000000", - "7d5aa33fc14b51841a06906edb2bb49c2a117269": "300048000000000000000", - "55ca6abe79ea2497f46fdbb830346010fe469cbe": "5730000000000000000000", - "6bec311ad05008b4af353c958c40bd06739a3ff3": "16380000000000000000000", - "30e9698cf1e08a9d048bd8d8048f28be7ed9409f": "6685000000000000000000", - "9afa536b4c66bc38d875c4b30099d9261fdb38eb": "205981000000000000000", - "6b63a2dfb2bcd0caec0022b88be30c1451ea56aa": "809021000000000000000", - "d07be0f90997caf903c8ac1d53cde904fb190741": "1000200000000000000000", - "893cdddf5377f3c751bf2e541120045a47cba101": "100000000000000000000", - "c1cdc601f89c0428b31302d187e0dc08ad7d1c57": "6000000000000000000000", - "8f8acb107607388479f64baaabea8ff007ada97d": "27281800000000000000000", - "88bc43012edb0ea9f062ac437843250a39b78fbb": "20000000000000000000000", - "fcfc3a5004d678613f0b36a642269a7f371c3f6a": "1000000000000000000000", - "f509557e90183fbf0f0651a786487bcc428ba175": "194000000000000000000", - "e3d915eda3b825d6ee4af9328d32ac18ada35497": "500000000000000000000", - "f237ef05261c34d79cc22b860de0f17f793c3860": "200000000000000000000", - "a3a2e319e7d3a1448b5aa2468953160c2dbcba71": "2000000000000000000000", - "3a368efe4ad786e26395ec9fc6ad698cae29fe01": "632200000000000000000", - "8e3240b0810e1cf407a500804740cf8d616432a4": "40309000000000000000", - "5691dd2f6745f20e22d2e1d1b955aa2903d65656": "1969606000000000000000", - "5f93ff832774db5114c55bb4bf44ccf3b58f903f": "192026650000000000000000", - "2c1cc6e18c152488ba11c2cc1bcefa2df306abd1": "1670000000000000000000", - "bde9786a84e75b48f18e726dd78d70e4af3ed802": "5730000000000000000000", - "79551cede376f747e3716c8d79400d766d2e0195": "46250000000000000000000", - "49f028395b5a86c9e07f7778630e4c2e3d373a77": "122735000000000000000", - "6a3694424c7cc6b8bcd9bccaba540cc1f5df18d7": "2000000000000000000000", - "068e29b3f191c812a6393918f71ab933ae6847f2": "1999944000000000000000", - "6e64e6129f224e378c0e6e736a7e7a06c211e9ec": "1000000000000000000000", - "c4c15318d370c73318cc18bdd466dbaa4c6603bf": "19700000000000000000", - "8035bcffaefdeeea35830c497d14289d362023de": "300000000000000000000", - "a997dfc7986a27050848fa1c64d7a7d6e07acca2": "143000000000000000000", - "2fe13a8d0785de8758a5e41876c36e916cf75074": "4000000000000000000000", - "6f24c9af2b763480515d1b0951bb77a540f1e3f9": "1970000000000000000000", - "4c23b370fc992bb67cec06e26715b62f0b3a4ac3": "10000000000000000000000", - "4ac07673e42f64c1a25ec2fa2d86e5aa2b34e039": "2000000000000000000000", - "117db836377fe15455e02c2ebda40b1ceb551b19": "6000000000000000000000", - "ef1c0477f1184d60accab374d374557a0a3e10f3": "152000000000000000000", - "99fe0d201228a753145655d428eb9fd94985d36d": "1939268000000000000000", - "b3731b046c8ac695a127fd79d0a5d5fa6ae6d12e": "1998000000000000000000", - "dce30c31f3ca66721ecb213c809aab561d9b52e4": "2000000000000000000000", - "ddd69c5b9bf5eb5a39cee7c3341a120d973fdb34": "1987730000000000000000", - "216e41864ef98f060da08ecae19ad1166a17d036": "5730000000000000000000", - "6a53d41ae4a752b21abed5374649953a513de5e5": "2000000000000000000000", - "20dd8fcbb46ea46fe381a68b8ca0ea5be21fe9a5": "2000000000000000000000", - "19732bf973055dbd91a4533adaa2149a91d38380": "2000000000000000000000", - "51ea1c0934e3d04022ed9c95a087a150ef705e81": "6280000000000000000000", - "a0de5c601e696635c698b7ae9ca4539fc7b941ec": "346150000000000000000", - "94e1f5cb9b8abace03a1a6428256553b690c2355": "20000000000000000000", - "a539b4a401b584dfe0f344b1b422c65543167e2e": "200000000000000000000", - "50584d9206a46ce15c301117ee28f15c30e60e75": "13400000000000000000", - "856eb204241a87830fb229031343dc30854f581a": "1000000000000000000000", - "9dd46b1c6d3f05e29e9c6f037eed9a595af4a9aa": "500000000000000000000", - "8925da4549e15155e57a628522cea9dddf627d81": "1000070000000000000000", - "a89df34859edd7c820db887740d8ff9e15157c7b": "2000000000000000000000", - "ad9f4c890a3b511cee51dfe6cfd7f1093b76412c": "506600000000000000000", - "f8c7f34a38b31801da43063477b12b27d0f203ff": "494800000000000000000", - "a642501004c90ea9c9ed1998ba140a4cd62c6f5f": "250543000000000000000", - "508cf19119db70aa86454253da764a2cb1b2be1a": "1000000000000000000000", - "2979741174a8c1ea0b7f9edf658177859417f512": "461283000000000000000", - "654f524847b3a6acc0d3d5f1f362b603edf65f96": "8000000000000000000000", - "5cf18fa7c8a7c0a2b3d5efd1990f64ddc569242c": "1000000000000000000000", - "17e82e7078dc4fd9e879fb8a50667f53a5c54591": "200000000000000000000", - "8b07d050754dc9ba230db01c310afdb5395aa1b3": "118080000000000000000", - "5f77a107ab1226b3f95f10ee83aefc6c5dff3edc": "500000000000000000000", - "475a6193572d4a4e59d7be09cb960ddd8c530e2f": "667323000000000000000", - "6470a4f92ec6b0fccd01234fa59023e9ff1f3aac": "3000000000000000000000", - "2fbcef3384d420e4bf61a0669990bc7054f1a5af": "2000000000000000000000", - "bbabf6643beb4bd01c120bd0598a0987d82967d1": "3342500000000000000000", - "41a2f2e6ecb86394ec0e338c0fc97e9c5583ded2": "2009400000000000000000", - "fb9473cf7712350a1fa0395273fc80560752e4fb": "123300000000000000000", - "38b2197106123387a0d4de368431a8bacdda30e2": "20000000000000000000", - "5ed56115bd6505a88273df5c56839470d24a2db7": "65601000000000000000", - "523f6d64690fdacd942853591bb0ff20d3656d95": "1820000000000000000000", - "55caff4bba04d220c9a5d2018672ec85e31ef83e": "2000000000000000000000", - "65af8d8b5b1d1eedfa77bcbc96c1b133f83306df": "98000000000000000000", - "7456c5b2c5436e3e571008933f1805ccfe34e9ec": "1000000000000000000000", - "a6eebbe464d39187bf80ca9c13d72027ec5ba8be": "3000000000000000000000", - "dd35cfdbcb993395537aecc9f59085a8d5ddb6f5": "1000000000000000000000", - "98e2b6d606fd2d6991c9d6d4077fdf3fdd4585da": "901520000000000000000", - "860f5ffc10de767ded807f71e861d647dfd219b1": "10000000000000000000000", - "1a644a50cbc2aee823bd2bf243e825be4d47df02": "100007000000000000000", - "a8455b411765d6901e311e726403091e42c56683": "3380000000000000000000", - "3a86ee94862b743dd34f410969d94e2c5652d4ad": "201610000000000000000", - "a57360f002e0d64d2d74457d8ca4857ee00bcddf": "335780000000000000000", - "e59b3bd300893f97233ef947c46f7217e392f7e9": "1000000000000000000000", - "9f3a74fd5e7edcc1162993171381cbb632b7cff0": "10000000000000000000000", - "675d5caa609bf70a18aca580465d8fb7310d1bbb": "20000000000000000000000", - "77f609ca8720a023262c55c46f2d26fb3930ac69": "17300000000000000000", - "f8ac4a39b53c11307820973b441365cffe596f66": "2000000000000000000000", - "112634b4ec30ff786e024159f796a57939ea144e": "1999944000000000000000", - "49d2c28ee9bc545eaaf7fd14c27c4073b4bb5f1a": "1474134000000000000000", - "91cc46aa379f856a6640dccd5a648a7902f849d9": "200000000000000000000", - "b46440c797a556e04c7d9104660491f96bb076bf": "14900000000000000000", - "e5968797468ef767101b761d431fce14abffdbb4": "8040000000000000000000", - "c0895efd056d9a3a81c3da578ada311bfb9356cf": "200000000000000000000", - "76846f0de03b5a76971ead298cdd08843a4bc6c6": "15500000000000000000", - "5f708eaf39d823946c51b3a3e9b7b3c003e26341": "1820000000000000000000", - "24f7450ddbf18b020feb1a2032d9d54b633edf37": "50000000000000000000", - "cae3a253bcb2cf4e13ba80c298ab0402da7c2aa0": "5400000000000000000000", - "91e8810652e8e6161525d63bb7751dc20f676076": "725000000000000000000", - "543629c95cdef428ad37d453ca9538a9f90900ac": "43250000000000000000000", - "6e79edd4845b076e4cd88d188b6e432dd93f35aa": "955000000000000000000", - "bd325d4029e0d8729f6d399c478224ae9e7ae41e": "3880000000000000000000", - "42cecfd2921079c2d7df3f08b07aa3beee5e219a": "1000000000000000000000", - "3690246ba3c80679e22eac4412a1aefce6d7cd82": "20000000000000000000000", - "577aeee8d4bc08fc97ab156ed57fb970925366be": "333046000000000000000", - "fe00bf439911a553982db638039245bcf032dbdc": "394000000000000000000", - "91f624b24a1fa5a056fe571229e7379db14b9a1e": "11999974000000000000000", - "f206d328e471d0117b246d2a4619827709e96df3": "3001000000000000000000", - "073f1ed1c9c3e9c52a9b0249a5c1caa0571fdf05": "70400000000000000000", - "f56048dd2181d4a36f64fcecc6215481e42abc15": "200000000000000000000", - "ef76a4cd8febcbc9b818f17828f8d93473f3f3cb": "4000000000000000000000", - "1031e0ecb54985ae21af1793950dc811888fde7c": "20000000000000000000", - "8e0fee38685a94aabcd7ce857b6b1409824f75b8": "500000000000000000000", - "f0cbef84e169630098d4e301b20208ef05846ac9": "259084000000000000000", - "bbca65b3266ea2fb73a03f921635f912c7bede00": "1970000000000000000000", - "0aec2e426ed6cc0cf3c249c1897eac47a7faa9bd": "200000000000000000000", - "b8f30758faa808dbc919aa7b425ec922b93b8129": "1000076000000000000000", - "936dcf000194e3bff50ac5b4243a3ba014d661d8": "10000000000000000000000", - "b14ddb0386fb606398b8cc47565afae00ff1d66a": "2973024000000000000000", - "2ec95822eb887bc113b4712a4dfd7f13b097b5e7": "1000000000000000000000", - "0136a5af6c3299c6b5f005fdaddb148c070b299b": "20368000000000000000", - "37cb868d2c3f95b257611eb34a4188d58b749802": "2000000000000000000000", - "cd7f09d7ed66d0c38bc5ad4e32b7f2b08dc1b30d": "1148000000000000000000", - "b5fa8184e43ed3e0b8ab91216461b3528d84fd09": "2680000000000000000000", - "3dbf0dbfd77890800533f09dea8301b9f025d2a6": "1000000000000000000000", - "b553d25d6b5421e81c2ad05e0b8ba751f8f010e3": "2000000000000000000000", - "dbf8b13967f55125272de0562536c450ba5655a0": "2046830000000000000000", - "0f6e840a3f2a24647d8e43e09d45c7c335df4248": "2500000000000000000000", - "fa2fd29d03fee9a07893df3a269f56b72f2e1e64": "10000000000000000000000", - "8b57b2bc83cc8d4de331204e893f2f3b1db1079a": "40000000000000000000", - "7f541491d2ac00d2612f94aa7f0bcb014651fbd4": "376000000000000000000", - "4f4a9be10cd5d3fb5de48c17be296f895690645b": "40000000000000000000000", - "45d1c9eedf7cab41a779057b79395f5428d80528": "2000000000000000000000", - "662334814724935b7931ddca6100e00d467727cd": "637000000000000000000", - "2c52c984102ee0cd3e31821b84d408930efa1ac7": "2000000000000000000000", - "000d836201318ec6899a67540690382780743280": "200000000000000000000", - "81498ca07b0f2f17e8bbc7e61a7f4ae7be66b78b": "101600000000000000000", - "7860a3de38df382ae4a4dce18c0c07b98bce3dfa": "1000000000000000000000", - "5e8e4df18cf0af770978a8df8dac90931510a679": "2000000000000000000000", - "05d68dad61d3bbdfb3f779265c49474aff3fcd30": "39399000000000000000", - "96eafbf2fb6f4db9a436a74c45b5654452e23819": "20000000000000000000", - "d7d7f2caa462a41b3b30a34aeb3ba61010e2626f": "2000000000000000000000", - "0b71f554122469ef978e2f1fefd7cbb410982772": "3880000000000000000000", - "504666ce8931175e11a5ed11c1dcaa06e57f4e66": "11792000000000000000000", - "d00f067286c0fbd082f9f4a61083ec76deb3cee6": "1000000000000000000000", - "02e4cb22be46258a40e16d4338d802fffd00c151": "379786000000000000000", - "1c13d38637b9a47ce79d37a86f50fb409c060728": "1337000000000000000000", - "e30212b2011bb56bdbf1bc35690f3a4e0fd905ea": "8022000000000000000000", - "1df6911672679bb0ef3509038c0c27e394fdfe30": "540000000000000000000", - "2b8fe4166e23d11963c0932b8ade8e0145ea0770": "43250000000000000000000", - "6509eeb1347e842ffb413e37155e2cbc738273fd": "2000000000000000000000", - "8b7e9f6f05f7e36476a16e3e7100c9031cf404af": "1000000000000000000000", - "bec8caf7ee49468fee552eff3ac5234eb9b17d42": "2000000000000000000000", - "38898bbb4553e00bbfd0cf268b2fc464d154add5": "320000000000000000000", - "cbb3189e4bd7f45f178b1c30c76e26314d4a4b0a": "295007000000000000000", - "be1cd7f4c472070968f3bde268366b21eeea8321": "4300000000000000000000", - "976a18536af41874426308871bcd1512a775c9f8": "10000000000000000000000", - "e9c758f8da41e3346e4350e5ac3976345c6c1082": "1930050000000000000000", - "64ec8a5b743f3479e707dae9ee20ddaa4f40f1d9": "200000000000000000000", - "9e01765aff08bc220550aca5ea2e1ce8e5b09923": "1000000000000000000000", - "ba0f39023bdb29eb1862a9f9059cab5d306e662f": "2000000000000000000000", - "2baf8d6e221174124820ee492b9459ec4fadafbb": "2000000000000000000000", - "655d5cd7489629e2413c2105b5a172d933c27af8": "4040060000000000000000", - "badc2aef9f5951a8d78a6b35c3d0b3a4e6e2e739": "6000000000000000000000", - "e64f6e1d6401b56c076b64a1b0867d0b2f310d4e": "51570000000000000000", - "7a8563867901206f3f2bf0fa3e1c8109cabccd85": "137000000000000000000", - "d17fbe22d90462ed37280670a2ea0b3086a0d6d6": "199955000000000000000", - "e96d7d4cdd15553a4e4d316d6d6480ca3cea1e38": "12200000000000000000000", - "f04d2c91efb6e9c45ffbe74b434c8c5f2b028f1f": "1000000000000000000000", - "81164deb10814ae08391f32c08667b6248c27d7a": "394000000000000000000", - "7f5ae05ae0f8cbe5dfe721f044d7a7bef4c27997": "60000000000000000000", - "c982586d63b0d74c201b1af8418372e30c7616be": "100000000000000000000", - "64cf0935bf19d2cebbecd8780d27d2e2b2c34166": "1970000000000000000000", - "cd566ad7b883f01fd3998a9a58a9dee4724ddca5": "58848000000000000000", - "9da609fa3a7e6cf2cc0e70cdabe78dc4e382e11e": "1200000000000000000000", - "0d69100c395ce6c5eaadf95d05d872837ededd21": "400000000000000000000", - "fe91eccf2bd566afa11696c5049fa84c69630a52": "1940000000000000000000", - "005d0ee8155ec0a6ff6808552ca5f16bb5be323a": "197000000000000000000", - "3e5cb8928c417825c03a3bfcc52183e5c91e42d7": "4264790000000000000000", - "9c1b771f09af882af0643083de2aa79dc097c40e": "2480000000000000000000", - "eba388b0da27c87b1cc0eac6c57b2c5a0b459c1a": "6800000000000000000000", - "7529f3797bb6a20f7ea6492419c84c867641d81c": "2000000000000000000000", - "532a7da0a5ad7407468d3be8e07e69c7dd64e861": "500000000000000000000", - "de82cc8d4a1bb1d9434392965b3e80bad3c03d4f": "1477500000000000000000", - "4a82694fa29d9e213202a1a209285df6e745c209": "4000000000000000000000", - "3e53ff2107a8debe3328493a92a586a7e1f49758": "23143470000000000000000", - "b2ddb786d3794e270187d0451ad6c8b79e0e8745": "400000000000000000000", - "6ebcf9957f5fc5e985add475223b04b8c14a7aed": "1730000000000000000000", - "c5c7590b5621ecf8358588de9b6890f2626143f1": "3000000000000000000000", - "ae4f122e35c0b1d1e4069291457c83c07f965fa3": "1000000000000000000000", - "47885ababedf4d928e1c3c71d7ca40d563ed595f": "1820000000000000000000", - "78ce3e3d474a8a047b92c41542242d0a08c70f99": "10000000000000000000000", - "6134d942f037f2cc3d424a230c603d67abd3edf7": "2000000000000000000000", - "1360e87df24c69ee6d51c76e73767ffe19a2131c": "92000000000000000000", - "5fd1c3e31778276cb42ea740f5eae9c641dbc701": "194000000000000000000", - "98397342ec5f3d4cb877e54ef5d6f1d366731bd4": "5910000000000000000000", - "6d4b5c05d06a20957e1748ab6df206f343f92f01": "10020475000000000000000", - "e6115b13f9795f7e956502d5074567dab945ce6b": "100000000000000000000000", - "23730c357a91026e44b1d0e2fc2a51d071d8d77b": "4000000000000000000000", - "fae881937047895a660cf229760f27e66828d643": "182000000000000000000", - "ff3ef6ba151c21b59986ae64f6e8228bc9a2c733": "2000000000000000000000", - "dfbd4232c17c407a980db87ffbcda03630e5c459": "553150000000000000000", - "4429a29fee198450672c0c1d073162250bec6474": "999200000000000000000", - "7e8f96cc29f57b0975120cb593b7dd833d606b53": "197000000000000000000", - "5ed3f1ebe2ae6756b5d8dc19cad02c419aa5778b": "0", - "daa776a6754469d7b9267a89b86725e740da0fa0": "1970000000000000000000", - "139e479764b499d666208c4a8a047a97043163dd": "598880000000000000000", - "5ad5e420755613886f35aa56ac403eebdfe4b0d0": "80000000000000000000000", - "3fe801e61335c5140dc7eda2ef5204460a501230": "2000000000000000000000", - "ce8a6b6d5033b1498b1ffeb41a41550405fa03a2": "4000000000000000000000", - "26c2ffc30efdc5273e76183a16c2698d6e531286": "776000000000000000000", - "71ec3aec3f8f9221f9149fede06903a0f9a232f2": "200000000000000000000", - "ef35f6d4b1075e6aa139151c974b2f4658f70538": "1111111000000000000000", - "26a68eab905a8b3dce00e317308225dab1b9f6b8": "1980000000000000000000", - "63f5b53d79bf2e411489526530223845fac6f601": "30000000000000000000000", - "481115296ab7db52492ff7b647d63329fb5cbc6b": "16100000000000000000000", - "f19f193508393e4d2a127b20b2031f39c82581c6": "3500088000000000000000", - "500e34cde5bd9e2b71bb92d7cf55eee188d5fa0c": "5348000000000000000000", - "65ea67ad3fb56ad5fb94387dd38eb383001d7c68": "100000000000000000000", - "7f9f9b56e4289dfb58e70fd5f12a97b56d35c6a5": "1970000000000000000000", - "60be6f953f2a4d25b6256ffd2423ac1438252e4e": "150000000000000000000", - "ac1dfc984b71a19929a81d81f04a7cbb14073703": "600000000000000000000", - "a3c14ace28b192cbb062145fcbbd5869c67271f6": "8000000000000000000000", - "2da76b7c39b420e388ba2c1020b0856b0270648a": "2000000000000000000000", - "622be4b45495fcd93143efc412d699d6cdc23dc5": "17300000000000000000", - "d3f873bd9956135789ab00ebc195b922e94b259d": "2000000000000000000000", - "975f3764e97bbccf767cbd3b795ba86d8ba9840e": "346000000000000000000", - "fc39be41094b1997d2169e8264c2c3baa6c99bc4": "2000000000000000000000", - "12ffc1128605cb0c13709a7290506f2690977193": "3340000000000000000000", - "9b1168de8ab64b47552f3389800a9cc08b4666cf": "1730000000000000000000", - "9f1aa8fcfc89a1a5328cbd6344b71f278a2ca4a0": "500000000000000000000", - "505a33a18634dd4800693c67f48a1d693d4833f8": "7252000000000000000000", - "d08fc09a0030fd0928cd321198580182a76aae9f": "1000000000000000000000", - "6acddca3cd2b4990e25cd65c24149d0912099e79": "3000037000000000000000", - "397a6ef8763a18f00fac217e055c0d3094101011": "2000000000000000000000", - "4e0bd32473c4c51bf25654def69f797c6b29a232": "1600930000000000000000", - "28d8c35fb7eea622582135e3ad47a227c9a663bd": "18200000000000000000", - "f96488698590dc3b2c555642b871348dfa067ad5": "500000000000000000000", - "4eebe80cb6f3ae5904f6f4b28d907f907189fcab": "1999944000000000000000", - "8d1abd897dacd4312e18080c88fb9647eab44052": "216000000000000000000", - "457029c469c4548d168cec3e65872e4428d42b67": "2000000000000000000000", - "1296acded1e063af39fe8ba0b4b63df789f70517": "100014000000000000000", - "71762c63678c18d1c6378ce068e666381315147e": "2000000000000000000000", - "6cc1c878fa6cde8a9a0b8311247e741e4642fe6d": "985000000000000000000", - "8d9ed7f4553058c26f7836a3802d3064eb1b363d": "90000000000000000000", - "5032e4bcf7932b49fdba377b6f1499636513cfc3": "100000000000000000000", - "462b678b51b584f3ed7ada070b5cd99c0bf7b87f": "100000000000000000000", - "c8aa49e3809f0899f28ab57e6743709d58419033": "880000000000000000000", - "01b1cae91a3b9559afb33cdc6d689442fdbfe037": "200000000000000000000", - "b1043004ec1941a8cf4f2b00b15700ddac6ff17e": "1000000000000000000000", - "5ba2c6c35dfaec296826591904d544464aeabd5e": "20000000000000000000", - "b32400fd13c5500917cb037b29fe22e7d5228f2d": "40000000000000000000000", - "d59d92d2c8701980cc073c375d720af064743c0c": "19000000000000000000000", - "11dd6185d9a8d73ddfdaa71e9b7774431c4dfec2": "1000000000000000000000", - "d4cb21e590c5a0e06801366aff342c7d7db16424": "494000000000000000000", - "5b6d55f6712967405c659129f4b1de09acf2cb7b": "267400000000000000000", - "6179979907fe7f037e4c38029d60bcbab832b3d6": "1610000000000000000000", - "33c407133b84b3ca4c3ded1f4658900c38101624": "2800000000000000000000", - "cd2a36d753e9e0ed012a584d716807587b41d56a": "261400000000000000000", - "8155fa6c51eb31d808412d748aa086105018122f": "1880000000000000000000", - "3ecc8e1668dde995dc570fe414f44211c534a615": "2000000000000000000000", - "d6395db5a4bb66e60f4cfbcdf0057bb4d97862e2": "910000000000000000000", - "b6fb39786250081426a342c70d47ee521e5bc563": "15000000000000000000000", - "510eda5601499a0d5e1a006bfffd833672f2e267": "2000000000000000000000", - "98c19dba810ba611e68f2f83ee16f6e7744f0c1f": "200000000000000000000", - "34ff26eb60a8d1a95a489fae136ee91d4e58084c": "600000000000000000000", - "6ad90be252d9cd464d998125fab693060ba8e429": "4000000000000000000000", - "038323b184cff7a82ae2e1bda7793fe4319ca0bf": "20000000000000000000000", - "dc5305b4020a06b49d657c7ca34c35c91c5f2c56": "7045990000000000000000", - "c9c80dc12e7bab86e949d01e4c3ed35f2b9bba5f": "2000000000000000000000", - "7beb81fb2f5e91526b2ac9795e76c69bcff04bc0": "69400000000000000000000", - "b8bc9bca7f71b4ed12e620438d620f53c114342f": "500000000000000000000", - "d288e7cb7ba9f620ab0f7452e508633d1c5aa276": "4000000000000000000000", - "a2e460a989cb15565f9ecca7d121a18e4eb405b6": "2000000000000000000000", - "7489cc8abe75cda4ef0d01cef2605e47eda67ab1": "133700000000000000000", - "38b403fb1fb7c14559a2d6f6564a5552bca39aff": "2000000000000000000000", - "e55c80520a1b0f755b9a2cd3ce214f7625653e8a": "2000000000000000000000", - "451b7070259bdba27100e36e23428a53dfe304e9": "13370000000000000000", - "8b5c914b128bf1695c088923fa467e7911f351fa": "98500000000000000000", - "17df49518d73b129f0da36b1c9b40cb66420fdc7": "10000000000000000000000", - "c1950543554d8a713003f662bb612c10ad4cdf21": "18200000000000000000", - "fa7606435b356cee257bd2fcd3d9eacb3cd1c4e1": "100000000000000000000", - "e0bad98eee9698dbf6d76085b7923de5754e906d": "167000000000000000000", - "ce53c8cdd74296aca987b2bc19c2b875a48749d0": "3000000000000000000000", - "d0c55abf976fdc3db2afe9be99d499484d576c02": "1000000000000000000000", - "238a6b7635252f5244486c0af0a73a207385e039": "1370000000000000000000", - "ceb389381d48a8ae4ffc483ad0bb5e204cfdb1ec": "740745000000000000000", - "3847667038f33b01c1cc795d8daf5475eff5a0d4": "728330000000000000000", - "a08d215b5b6aac4861a281ac7e400b78fef04cbf": "20000000000000000000", - "2d0dec51a6e87330a6a8fa2a0f65d88d4abcdf73": "185000000000000000000", - "9e8f64ddcde9b8b451bafaa235a9bf511a25ac91": "2674000000000000000000", - "ddac6bf4bbdd7d597d9c686d0695593bedccc7fa": "865000000000000000000", - "22e15158b5ee3e86eb0332e3e6a9ac6cd9b55ecd": "160000000000000000000", - "3aea4e82d2400248f99871a41ca257060d3a221b": "1000000000000000000000", - "fb126f0ec769f49dcefca2f200286451583084b8": "5013750000000000000000", - "1b8bd6d2eca20185a78e7d98e8e185678dac4830": "16700000000000000000000", - "664cd67dccc9ac8228b45c55db8d76550b659cdc": "394000000000000000000", - "553f37d92466550e9fd775ae74362df030179132": "2000000000000000000000", - "730d8763c6a4fd824ab8b859161ef7e3a96a1200": "20000000000000000000000", - "04c2c64bb54c3eccd05585e10ec6f99a0cdb01a3": "100000000000000000000", - "f1624d980b65336feac5a6d54125005cfcf2aacb": "2000000000000000000000", - "0b7fc9ddf70576f6330669eaaa71b6a831e99528": "140000000000000000000", - "fa2bbca15d3fe39f8a328e91f90da14f7ac6253d": "200000000000000000000", - "07feef54c136850829badc4b49c3f2a73c89fb9e": "118200000000000000000", - "3703350c4d6fe337342cddc65bf1e2386bf3f9b2": "2020000000000000000000", - "6d7d1c949511f88303808c60c5ea0640fcc02683": "10000000000000000000000", - "34fa7792bad8bbd7ff64056214a33eb6600c1ea8": "50000000000000000000", - "994cc2b5227ec3cf048512467c41b7b7b748909f": "2000000000000000000000", - "08da3a7a0f452161cfbcec311bb68ebfdee17e88": "2000000000000000000000", - "bbb4ee1d82f2e156442cc93338a2fc286fa28864": "1370000000000000000000", - "7a2dfc770e24368131b7847795f203f3d50d5b56": "11400000000000000000000", - "7cef4d43aa417f9ef8b787f8b99d53f1fea1ee88": "1910000000000000000000", - "c6a30ef5bb3320f40dc5e981230d52ae3ac19322": "182000000000000000000", - "6a74844d8e9cb5581c45079a2e94462a6cee8821": "1082970000000000000000", - "c3110be01dc9734cfc6e1ce07f87d77d1345b7e1": "4999998000000000000000", - "aeb916ebf49d0f86c13f7331cef19e129937512d": "599908000000000000000", - "3e5abd09ce5af7ba8487c359e0f2a93a986b0b18": "10000000000000000000000", - "cdd60d73efaad873c9bbfb178ca1b7105a81a681": "32000000000000000000", - "31eb123c95c82bf685ace7a75a1881a289efca10": "920034000000000000000", - "86e8670e27598ea09c3899ab7711d3b9fe901c17": "200000000000000000000", - "a144f6b60f72d64a21e330dadb62d8990ade2b09": "1000000000000000000000", - "68883e152e5660fee59626e7e3b4f05110e6222f": "54683300000000000000000", - "fe4249127950e2f896ec0e7e2e3d055aab10550f": "668500000000000000000", - "403d53cf620f0922b417848dee96c190b5bc8271": "9850000000000000000000", - "bec2e6de39c07c2bae556acfbee2c4728b9982e3": "573000000000000000000", - "f3c4716d1ee5279a86d0163a14618181e16136c7": "1000000000000000000000", - "e38ef28a5ed984a7db24a1ae782dfb87f397dfc6": "143000000000000000000", - "30fbe5885f9fcce9ea5edb82ed4a1196dd259aed": "5200000000000000000000", - "48bf14d7b1fc84ebf3c96be12f7bce01aa69b03e": "120000000000000000000", - "b8d5c324a8209d7c8049d0d4aede02ba80ab578b": "16889329000000000000000", - "43d5a71ce8b8f8ae02b2eaf8eaf2ca2840b93fb6": "6000000000000000000000", - "f9a59c3cc5ffacbcb67be0fc7256f64c9b127cb4": "2000000000000000000000", - "0e21af1b8dbf27fcf63f37e047b87a825cbe7c27": "3000000000000000000000", - "1c35aab688a0cd8ef82e76541ba7ac39527f743b": "500000000000000000000", - "91ac5cfe67c54aa7ebfba448666c461a3b1fe2e1": "401880000000000000000", - "4ba53ab549e2016dfa223c9ed5a38fad91288d07": "1400000000000000000000", - "99a4de19ded79008cfdcd45d014d2e584b8914a8": "1500000000000000000000", - "4adbf4aae0e3ef44f7dd4d8985cfaf096ec48e98": "150000000000000000000", - "9a633fcd112cceeb765fe0418170732a9705e79c": "18200000000000000000", - "292f228b0a94748c8eec612d246f989363e08f08": "185000000000000000000", - "9f3497f5ef5fe63095836c004eb9ce02e9013b4b": "633424000000000000000", - "0e6dfd553b2e873d2aec15bd5fbb3f8472d8d394": "12000000000000000000000", - "74ebf4425646e6cf81b109ce7bf4a2a63d84815f": "40000000000000000000", - "8ce5e3b5f591d5eca38abf228f2e3c35134bdac0": "2319920000000000000000", - "90c41eba008e20cbe927f346603fc88698125969": "42000000000000000000", - "382ba76db41b75606dd48a48f0137e9174e031b6": "20000000000000000000", - "5d24bdbc1c47f0eb83d128cae48ac33c4817e91f": "1000000000000000000000", - "a64e5ffb704c2c9139d77ef61d8cdfa31d7a88e9": "143000000000000000000", - "a18360e985f2062e8f8efe02ad2cbc91ad9a5aad": "3000000000000000000000", - "d251f903ae18727259eee841a189a1f569a5fd76": "10000000000000000000000", - "efa6b1f0db603537826891b8b4bc163984bb40cd": "985000000000000000000", - "47fff42c678551d141eb75a6ee398117df3e4a8d": "100010000000000000000", - "f2294adbb6f0dcc76e632ebef48ab49f124dbba4": "1443690000000000000000", - "53700d53254d430f22781a4a76a463933b5d6b08": "1970000000000000000000", - "b14a7aaa8f49f2fb9a8102d6bbe4c48ae7c06fb2": "8000000000000000000000", - "9ed4e63f526542d44fddd34d59cd25388ffd6bda": "3885000000000000000000", - "4cac91fb83a147d2f76c3267984b910a79933348": "2167000000000000000000", - "9b32cf4f5115f4b34a00a64c617de06387354323": "105501000000000000000", - "b8bedd576a4b4c2027da735a5bc3f533252a1808": "2000000000000000000000", - "c5a3b98e4593fea0b38c4f455a5065f051a2f815": "20309030000000000000000", - "eaf52388546ec35aca6f6c6393d8d609de3a4bf3": "20000000000000000000", - "4c423c76930d07f93c47a5cc4f615745c45a9d72": "100000000000000000000", - "9052f2e4a3e3c12dd1c71bf78a4ec3043dc88b7e": "267400000000000000000", - "2bade91d154517620fd4b439ac97157a4102a9f7": "4000000000000000000000", - "da698d64c65c7f2b2c7253059cd3d181d899b6b7": "295500000000000000000", - "c6d8954e8f3fc533d2d230ff025cb4dce14f3426": "400000000000000000000", - "349a816b17ab3d27bbc0ae0051f6a070be1ff29d": "10000000000000000000000", - "ff4d9c8484c43c42ff2c5ab759996498d323994d": "4000000000000000000000", - "22944fbca9b57963084eb84df7c85fb9bcdfb856": "4649845000000000000000", - "bfd93c90c29c07bc5fb5fc49aeea55a40e134f35": "28000000000000000000000", - "3caedb5319fe806543c56e5021d372f71be9062e": "40000000000000000000000", - "9a079c92a629ca15c8cafa2eb28d5bc17af82811": "500000000000000000000", - "7d2a52a7cf0c8436a8e007976b6c26b7229d1e15": "438040000000000000000", - "cf89f7460ba3dfe83c5a1d3a019ee1250f242f0f": "985177000000000000000", - "577bfe64e3a1e3800e94db1c6c184d8dc8aafc66": "1498000000000000000000", - "7ffd02ed370c7060b2ae53c078c8012190dfbb75": "10000000000000000000000", - "90b62f131a5f29b45571513ee7a74a8f0b232202": "158000000000000000000", - "6e8212b722afd408a7a73ed3e2395ee6454a0330": "159000000000000000000", - "515f30bc90cdf4577ee47d65d785fbe2e837c6bc": "10166128000000000000000", - "c27376f45d21e15ede3b26f2655fcee02ccc0f2a": "20000000000000000000", - "3da39ce3ef4a7a3966b32ee7ea4ebc2335a8f11f": "2000000000000000000000", - "25259d975a21d83ae30e33f800f53f37dfa01938": "20000000000000000000", - "8ed143701f2f72280fd04a7b4164281979ea87c9": "14000000000000000000", - "5ac99ad7816ae9020ff8adf79fa9869b7cea6601": "21000000000000000000000", - "f51fded80acb502890e87369741f3722514cefff": "20000042000000000000000", - "f657fcbe682eb4e8db152ecf892456000b513d15": "1940000000000000000000", - "62c37c52b97f4b040b1aa391d6dec152893c4707": "1000000000000000000000", - "89fc8e4d386b0d0bb4a707edf3bd560df1ad8f4e": "2955000000000000000000", - "53c0bb7fc88ea422d2ef7e540e2d8f28b1bb8183": "20000000000000000000", - "56f493a3d108aaa2d18d98922f8efe1662cfb73d": "2020000000000000000000", - "e9458f68bb272cb5673a04f781b403556fd3a387": "61000000000000000000", - "be525a33ea916177f17283fca29e8b350b7f530b": "2638000000000000000000", - "4feb846be43041fd6b34202897943e3f21cb7f04": "83226000000000000000", - "15aa530dc36958b4edb38eee6dd9e3c77d4c9145": "2000000000000000000000", - "2458d6555ff98a129cce4037953d00206eff4287": "197000000000000000000", - "8035fe4e6b6af27ae492a578515e9d39fa6fa65b": "4000000000000000000000", - "296b71c0015819c242a7861e6ff7eded8a5f71e3": "1999800000000000000000", - "8f1952eed1c548d9ee9b97d0169a07933be69f63": "1000000000000000000000", - "a421dbb89b3a07419084ad10c3c15dfe9b32d0c2": "20000000000000000000000", - "554336ee4ea155f9f24f87bca9ca72e253e12cd2": "100000000000000000000", - "ffc5fc4b7e8a0293ff39a3a0f7d60d2646d37a74": "2000000000000000000000", - "ea2c197d26e98b0da83e1b72c787618c979d3db0": "19700000000000000000", - "96aa573fed2f233410dbae5180145b23c31a02f0": "1730000000000000000000", - "c23b2f921ce4a37a259ee4ad8b2158d15d664f59": "25403000000000000000", - "d874b9dfae456a929ba3b1a27e572c9b2cecdfb3": "170000000000000000000", - "bf8b8005d636a49664f74275ef42438acd65ac91": "200000000000000000000", - "441a52001661fac718b2d7b351b7c6fb521a7afd": "400000000000000000000", - "812a55c43caedc597218379000ce510d548836fd": "18200000000000000000", - "5e90c85877198756b0366c0e17b28e52b446505a": "374288000000000000000", - "da3017c150dd0dce7fcf881b0a48d0d1c756c4c7": "100014000000000000000", - "6baf7a2a02ae78801e8904ad7ac05108fc56cff6": "1000000000000000000000", - "177dae78bc0113d8d39c4402f2a641ae2a105ab8": "1818320000000000000000", - "01b5b5bc5a117fa08b34ed1db9440608597ac548": "200000000000000000000", - "aae732eda65988c3a00c7f472f351c463b1c968e": "2000000000000000000000", - "d95342953c8a21e8b635eefac7819bea30f17047": "94160000000000000000000", - "8d616b1eee77eef6f176e0698db3c0c141b2fc8f": "500000000000000000000", - "12d20790b7d3dbd88c81a279b812039e8a603bd0": "1604400000000000000000", - "3734cb187491ede713ae5b3b2d12284af46b8101": "3000000000000000000000", - "dd967c4c5f8ae47e266fb416aad1964ee3e7e8c3": "7750000000000000000000", - "3dcef19c868b15d34eda426ec7e04b18b6017002": "1999800000000000000000", - "ce9d21c692cd3c01f2011f505f870036fa8f6cd2": "400000000000000000000", - "d44f6ac3923b5fd731a4c45944ec4f7ec52a6ae4": "10000000000000000000000", - "b424d68d9d0d00cec1938c854e15ffb880ba0170": "200000000000000000000", - "1f2186ded23e0cf9521694e4e164593e690a9685": "300000000000000000000", - "7f4b5e278578c046cceaf65730a0e068329ed5b6": "1880000000000000000000", - "8c50aa2a9212bcde56418ae261f0b35e7a9dbb82": "400000000000000000000", - "1953313e2ad746239cb2270f48af34d8bb9c4465": "2000000000000000000000", - "a15025f595acdbf3110f77c5bf24477e6548f9e8": "2000000000000000000000", - "53af32c22fef99803f178cf90b802fb571c61cb9": "3880000000000000000000", - "d0a8abd80a199b54b08b65f01d209c27fef0115b": "6525979000000000000000", - "2b68306ba7f8daaf73f4c644ef7d2743c0f26856": "864800000000000000000", - "96924191b7df655b3319dc6d6137f481a73a0ff3": "4020000000000000000000", - "6fa72015fa78696efd9a86174f7f1f21019286b1": "1337000000000000000000", - "0b119df99c6b8de58a1e2c3f297a6744bf552277": "2000000000000000000000", - "61733947fab820dbd351efd67855ea0e881373a0": "20000000000000000000", - "8ae6f80b70e1f23c91fbd5a966b0e499d95df832": "197000000000000000000", - "01a7d9fa7d0eb1185c67e54da83c2e75db69e39f": "7623900000000000000000", - "9932ef1c85b75a9b2a80057d508734c51085becc": "50170000000000000000", - "aefcfe88c826ccf131d54eb4ea9eb80e61e1ee25": "340000000000000000000", - "c21fa6643a1f14c02996ad7144b75926e87ecb4b": "20000000000000000000000", - "97d9e46a7604d7b5a4ea4ee61a42b3d2350fc3ed": "2000000000000000000000", - "3cafaf5e62505615068af8eb22a13ad8a9e55070": "1999600000000000000000", - "22f2dcff5ad78c3eb6850b5cb951127b659522e6": "13700000000000000000", - "aaad1baade5af04e2b17439e935987bf8c2bb4b9": "2000000000000000000000", - "298887bab57c5ba4f0615229d7525fa113b7ea89": "40000000000000000000", - "7539333046deb1ef3c4daf50619993f444e1de68": "1182000000000000000000", - "9752d14f5e1093f071711c1adbc4e3eb1e5c57f3": "2000000000000000000000", - "ed641e06368fb0efaa1703e01fe48f4a685309eb": "200000000000000000000", - "d0ee4d02cf24382c3090d3e99560de3678735cdf": "2400000000000000000000", - "47e25df8822538a8596b28c637896b4d143c351d": "80500000000000000000000", - "559706c332d20779c45f8a6d046a699159b74921": "380123000000000000000", - "3a4da78dce05aeb87de9aead9185726da1926798": "200000000000000000000", - "3041445a33ba158741160d9c344eb88e5c306f94": "60000000000000000000", - "08d4311c9c1bbaf87fabe1a1d01463828d5d98ce": "90000000000000000000000", - "6bd3e59f239fafe4776bb9bddd6bee83ba5d9d9f": "1000000000000000000000", - "29eaae82761762f4d2db53a9c68b0f6b0b6d4e66": "2000000000000000000000", - "0b7d339371e5be6727e6e331b5821fa24bdb9d5a": "857738000000000000000", - "4714cfa4f46bd6bd70737d75878197e08f88e631": "11792000000000000000000", - "ad92ca066edb7c711dfc5b166192d1edf8e77185": "36000000000000000000000", - "f97b56ebd5b77abc9fbacbabd494b9d2c221cd03": "1970000000000000000000", - "591bef3171d1c5957717a4e98d17eb142c214e56": "20000000000000000000000", - "899b3c249f0c4b81df75d212004d3d6d952fd223": "2000000000000000000000", - "a819d2ece122e028c8e8a04a064d02b9029b08b9": "1000000000000000000000", - "e341642d40d2afce2e9107c67079ac7a2660086c": "400000000000000000000", - "0329188f080657ab3a2afa522467178279832085": "216700000000000000000", - "03317826d1f70aa4bddfa09be0c4105552d2358b": "38800000000000000000", - "3ac9dc7a436ae98fd01c7a9621aa8e9d0b8b531d": "1790000000000000000000", - "93c88e2d88621e30f58a9586bed4098999eb67dd": "31200000000000000000000", - "cd1e66ed539dd92fc40bbaa1fa16de8c02c14d45": "230000000000000000000", - "e6c81ffcecb47ecdc55c0b71e4855f3e5e97fc1e": "334250000000000000000", - "50f8fa4bb9e2677c990a4ee8ce70dd1523251e4f": "26030000000000000000", - "4f64a85e8e9a40498c0c75fceb0337fb49083e5e": "1000000000000000000000", - "4b29437c97b4a844be71cca3b648d4ca0fdd9ba4": "150200000000000000000", - "1eee6cbee4fe96ad615a9cf5857a647940df8c78": "19400000000000000000", - "29f0edc60338e7112085a1d114da8c42ce8f55d6": "2958000000000000000000", - "23b1c4917fbd93ee3d48389306957384a5496cbf": "4000086000000000000000", - "1767525c5f5a22ed80e9d4d7710f0362d29efa33": "400000000000000000000", - "3064899a963c4779cbf613cd6980846af1e6ec65": "6999908000000000000000", - "68531f4dda808f5320767a03113428ca0ce2f389": "19400000000000000000", - "1db9ac9a9eaeec0a523757050c71f47278c72d50": "1337000000000000000000", - "7592c69d067b51b6cc639d1164d5578c60d2d244": "20000000000000000000", - "cf3fbfa1fd32d7a6e0e6f8ef4eab57be34025c4c": "1063120000000000000000", - "8efec058cc546157766a632775404a334aaada87": "1999000000000000000000", - "faf5f0b7b6d558f5090d9ea1fb2d42259c586078": "6401000000000000000000", - "19ecf2abf40c9e857b252fe1dbfd3d4c5d8f816e": "2000000000000000000000", - "6e8a26689f7a2fdefd009cbaaa5310253450daba": "2049982000000000000000", - "e2f40d358f5e3fe7463ec70480bd2ed398a7063b": "20000000000000000000", - "fa19d6f7a50f4f079893d167bf14e21d0073d196": "530000000000000000000", - "3e2ca0d234baf607ad466a1b85f4a6488ef00ae7": "89505000000000000000", - "f8a49ca2390c1f6d5c0e62513b079571743f7cc6": "3000000000000000000000", - "5d3f3b1f7130b0bb21a0fd32396239179a25657f": "62474000000000000000000", - "f332c0f3e05a27d9126fd0b641a8c2d4060608fd": "5001041000000000000000", - "e304a32f05a83762744a9542976ff9b723fa31ea": "1576256000000000000000", - "f768f321fd6433d96b4f354d3cc1652c1732f57f": "10000000000000000000000", - "147af46ae9ccd18bb35ca01b353b51990e49dce1": "4000000000000000000000", - "21eae6feffa9fbf4cd874f4739ace530ccbe5937": "5000000000000000000000", - "6994fb3231d7e41d491a9d68d1fa4cae2cc15960": "4000000000000000000000", - "51126446ab3d8032557e8eba65597d75fadc815c": "322000000000000000000", - "24daaaddf7b06bbcea9b80590085a88567682b4e": "319008000000000000000", - "cd020f8edfcf524798a9b73a640334bbf72f80a5": "133700000000000000000", - "56febf9e1003af15b1bd4907ec089a4a1b91d268": "200000000000000000000", - "3c79c863c3d372b3ff0c6f452734a7f97042d706": "176000000000000000000", - "e1203eb3a723e99c2220117ca6afeb66fa424f61": "9461996000000000000000", - "18fb09188f27f1038e654031924f628a2106703d": "2000000000000000000000", - "2eba0c6ee5a1145c1c573984963a605d880a7a20": "500000000000000000000", - "4cefbe2398e47d52e78db4334c8b697675f193ae": "4011000000000000000000", - "c02471e3fc2ea0532615a7571d493289c13c36ef": "20000000000000000000", - "ba469aa5c386b19295d4a1b5473b540353390c85": "2000000000000000000000", - "7b11673cc019626b290cbdce26046f7e6d141e21": "500000000000000000000", - "26784ade91c8a83a8e39658c8d8277413ccc9954": "6000000000000000000000", - "57d3df804f2beee6ef53ab94cb3ee9cf524a18d3": "393606000000000000000", - "ccae0d3d852a7da3860f0636154c0a6ca31628d4": "106560000000000000000", - "bfe3a1fc6e24c8f7b3250560991f93cba2cf8047": "80000000000000000000000", - "724ce858857ec5481c86bd906e83a04882e5821d": "3000000000000000000000", - "fb37cf6b4f81a9e222fba22e9bd24b5098b733cf": "38800000000000000000", - "9b22a80d5c7b3374a05b446081f97d0a34079e7f": "3000000000000000000000", - "0a29a8a4d5fd950075ffb34d77afeb2d823bd689": "200000000000000000000", - "d01af9134faf5257174e8b79186f42ee354e642d": "1000000000000000000000", - "7f1619988f3715e94ff1d253262dc5581db3de1c": "900000000000000000000", - "6f137a71a6f197df2cbbf010dcbd3c444ef5c925": "2000000000000000000000", - "11efb8a20451161b644a8ccebbc1d343a3bbcb52": "3200000000000000000000", - "46504e6a215ac83bccf956befc82ab5a679371c8": "518898000000000000000", - "b523fff9749871b35388438837f7e6e0dea9cb6b": "2000000000000000000000", - "c5c6a4998a33feb764437a8be929a73ba34a0764": "50000000000000000000000", - "3cd7f7c7c2353780cde081eeec45822b25f2860c": "200000000000000000000", - "b3050beff9de33c80e1fa15225e28f2c413ae313": "700000000000000000000", - "59268171b833e0aa13c54b52ccc0422e4fa03aeb": "3000000000000000000000", - "7169724ee72271c534cad6420fb04ee644cb86fe": "410164000000000000000", - "6e6d5bbbb9053b89d744a27316c2a7b8c09b547d": "909831000000000000000", - "3f3f46b75cabe37bfacc8760281f4341ca7f463d": "602709000000000000000", - "7a33834e8583733e2d52aead589bd1affb1dd256": "1000000000000000000000", - "e94ded99dcb572b9bb1dcba32f6dee91e057984e": "394000000000000000000", - "19336a236ded755872411f2e0491d83e3e00159e": "940000000000000000000", - "63ac545c991243fa18aec41d4f6f598e555015dc": "600000000000000000000", - "cfee05c69d1f29e7714684c88de5a16098e91399": "1970000000000000000000", - "77be6b64d7c733a436adec5e14bf9ad7402b1b46": "1000000000000000000000", - "233bdddd5da94852f4ade8d212885682d9076bc6": "4000000000000000000000", - "952c57d2fb195107d4cd5ca300774119dfad2f78": "2000000000000000000000", - "e237baa4dbc9926e32a3d85d1264402d54db012f": "2000000000000000000000", - "aa91237e740d25a92f7fa146faa18ce56dc6e1f3": "925000000000000000000", - "2339e9492870afea2537f389ac2f838302a33c06": "2000000000000000000000", - "1d45586eb803ca2190650bf748a2b174312bb507": "1400000000000000000000", - "c61446b754c24e3b1642d9e51765b4d3e46b34b6": "2000000000000000000000", - "ac28b5edea05b76f8c5f97084541277c96696a4c": "1000000000000000000000", - "1a1c9a26e0e02418a5cf687da75a275c622c9440": "5000000000000000000000", - "299368609042a858d1ecdf1fc0ada5eaceca29cf": "2000000000000000000000", - "095f5a51d06f6340d80b6d29ea2e88118ad730fe": "2000200000000000000000", - "751a2ca34e7187c163d28e3618db28b13c196d26": "500000000000000000000", - "75b0e9c942a4f0f6f86d3f95ff998022fa67963b": "1490000000000000000000", - "d1b37f03cb107424e9c4dd575ccd4f4cee57e6cd": "2000000000000000000000", - "7f993ddb7e02c282b898f6155f680ef5b9aff907": "20000000000000000000000", - "a3d583a7b65b23f60b7905f3e4aa62aac87f4227": "1046779000000000000000", - "526bb533b76e20c8ee1ebf123f1e9ff4148e40be": "197000000000000000000", - "2160b4c02cac0a81de9108de434590a8bfe68735": "1970000000000000000000", - "010007394b8b7565a1658af88ce463499135d6b7": "100000000000000000000", - "64457fa33b0832506c4f7d1180dce48f46f3e0ff": "2000000000000000000000", - "b51e558eb5512fbcfa81f8d0bd938c79ebb5242b": "715000000000000000000", - "94f13f9f0836a3ee2437a84922d2984dc0f7d53b": "2999916000000000000000", - "6bd457ade051795df3f2465c3839aed3c5dee978": "999925000000000000000", - "f3dbcf135acb9dee1a489c593c024f03c2bbaece": "2000000000000000000000", - "61b902c5a673885826820d1fe14549e4865fbdc2": "334703000000000000000", - "2acc9c1a32240b4d5b2f777a2ea052b42fc1271c": "41764000000000000000000", - "6ddfef639155daab0a5cb4953aa8c5afaa880453": "1820000000000000000000", - "96ff6f509968f36cb42cba48db32f21f5676abf8": "1970000000000000000000", - "b4c8170f7b2ab536d1d9a25bdd203ae1288dc3d5": "200000000000000000000", - "78d4f8c71c1e68a69a98f52fcb45da8af56ea1a0": "2000000000000000000000", - "dec99e972fca7177508c8e1a47ac22d768acab7c": "2000000000000000000000", - "a07aa16d74aee8a9a3288d52db1551d593883297": "600000000000000000000", - "cf1169041c1745e45b172435a2fc99b49ace2b00": "31960000000000000000", - "526cb09ce3ada3672eec1deb46205be89a4b563e": "2468000000000000000000", - "ee6959de2b67967b71948c891ab00d8c8f38c7dc": "118200000000000000000", - "ca7ba3ff536c7e5f0e153800bd383db8312998e0": "169600000000000000000", - "1ed06ee51662a86c634588fb62dc43c8f27e7c17": "200000000000000000000", - "730447f97ce9b25f22ba1afb36df27f9586beb9b": "820000000000000000000", - "ae5c9bdad3c5c8a1220444aea5c229c1839f1d64": "477500000000000000000", - "a38306cb70baa8e49186bd68aa70a83d242f2907": "2000000000000000000000", - "71213fca313404204ecba87197741aa9dfe96338": "60000000000000000000", - "10e390ad2ba33d82b37388d09c4544c6b0225de5": "200000000000000000000", - "3b6e814f770748a7c3997806347605480a3fd509": "2000000000000000000000", - "fd452c3969ece3801c542020f1cdcaa1c71ed23d": "100000000000000000000000", - "e742b1e6069a8ffc3c4767235defb0d49cbed222": "800000000000000000000", - "d7225738dcf3578438f8e7c8b3837e42e04a262f": "445860000000000000000", - "cd0b0257e783a3d2c2e3ba9d6e79b75ef98024d4": "2945500000000000000000", - "e80e7fef18a5db15b01473f3ad6b78b2a2f8acd9": "500000000000000000000", - "261575e9cf59c8226fa7aaf91de86fb70f5ac3ae": "300022000000000000000", - "7e71171f2949fa0c3ac254254b1f0440e5e6a038": "40000000000000000000", - "96ea6ac89a2bac95347b51dba63d8bd5ebdedce1": "2000000000000000000000", - "e6ec5cf0c49b9c317e1e706315ef9eb7c0bf11a7": "17200000000000000000000", - "2b99b42e4f42619ee36baa7e4af2d65eacfcba35": "40000000000000000000000", - "c6e4cc0c7283fc1c85bc4813effaaf72b49823c0": "276926000000000000000", - "dbc1ce0e49b1a705d22e2037aec878ee0d75c703": "250000000000000000000", - "806f44bdeb688037015e84ff218049e382332a33": "1999000000000000000000", - "1a3a330e4fcb69dbef5e6901783bf50fd1c15342": "4200000000000000000000", - "d2a84f75675c62d80c88756c428eee2bcb185421": "1200000000000000000000", - "c593b546b7698710a205ad468b2c13152219a342": "1550000000000000000000", - "3f627a769e6a950eb87017a7cd9ca20871136831": "13790000000000000000000", - "f2d5763ce073127e2cedde6faba786c73ca94141": "7900000000000000000000", - "162110f29eac5f7d02b543d8dcd5bb59a5e33b73": "2000000000000000000000", - "59473cd300fffae240f5785626c65dfec792b9af": "20000000000000000000", - "4dcd11815818ae29b85d01367349a8a7fb12d06b": "7900000000000000000000", - "9329ffdc268babde8874b366406c81445b9b2d35": "422415000000000000000", - "0ab4281ebb318590abb89a81df07fa3af904258a": "500000000000000000000", - "875061ee12e820041a01942cb0e65bb427b00060": "2800000000000000000000", - "c9b698e898d20d4d4f408e4e4d061922aa856307": "40000000000000000000", - "ca49a5f58adbefae23ee59eea241cf0482622eaa": "1430000000000000000000", - "196e85df7e732b4a8f0ed03623f4db9db0b8fa31": "21165000000000000000", - "4c760cd9e195ee4f2d6bce2500ff96da7c43ee91": "60000000000000000000000", - "024a098ae702bef5406c9c22b78bd4eb2cc7a293": "4000000000000000000000", - "9d81aea69aed6ad07089d61445348c17f34bfc5b": "300000000000000000000", - "76ab87dd5a05ad839a4e2fc8c85aa6ba05641730": "2000000000000000000000", - "c6e2f5af979a03fd723a1b6efa728318cf9c1800": "668500000000000000000", - "5db69fe93e6fb6fbd450966b97238b110ad8279a": "40000000000000000000000", - "a4259f8345f7e3a8b72b0fec2cf75e321fda4dc2": "1910000000000000000000", - "095030e4b82692dcf8b8d0912494b9b378ec9328": "1340000000000000000000", - "4b470f7ba030bc7cfcf338d4bf0432a91e2ea5ff": "2000000000000000000000", - "99c9f93e45fe3c1418c353e4c5ac3894eef8121e": "101870000000000000000", - "ffac3db879a6c7158e8dec603b407463ba0d31cf": "1970000000000000000000", - "ac8e87ddda5e78fcbcb9fa7fc3ce038f9f7d2e34": "2000000000000000000000", - "7a0589b143a8e5e107c9ac66a9f9f8597ab3e7ab": "1510990000000000000000", - "b7d581fe0af1ec383f3b3c416783f385146a7612": "20000000000000000000000", - "bb3fc0a29c034d710812dcc775c8cab9d28d6975": "1066806000000000000000", - "2c603ff0fe93616c43573ef279bfea40888d6ae7": "4740000000000000000000", - "15f2b7b16432ee50a5f55b41232f6334ed58bdc0": "400000000000000000000", - "7f3d7203c8a447f7bf36d88ae9b6062a5eee78ae": "6000000000000000000000", - "f067e1f1d683556a4cc4fd0c0313239f32c4cfd8": "1000000000000000000000", - "52738c90d860e04cb12f498d96fdb5bf36fc340e": "30000000000000000000", - "45781bbe7714a1c8f73b1c747921df4f84278b70": "2000000000000000000000", - "4a97e8fcf4635ea7fc5e96ee51752ec388716b60": "546000000000000000000", - "54939ff08921b467cf2946751d856378296c63ed": "1000000000000000000000", - "6485470e61db110aebdbafd536769e3c599cc908": "600000000000000000000", - "e20d1bcb71286dc7128a9fc7c6ed7f733892eef5": "1003400000000000000000", - "d6eea898d4ae2b718027a19ce9a5eb7300abe3ca": "27475000000000000000", - "014974a1f46bf204944a853111e52f1602617def": "2000000000000000000000", - "6aa5732f3b86fb8c81efbe6b5b47b563730b06c8": "1000000000000000000000", - "6107d71dd6d0eefb11d4c916404cb98c753e117d": "2000000000000000000000", - "dd7bcda65924aaa49b80984ae173750258b92847": "10000000000000000000000", - "4e7b54474d01fefd388dfcd53b9f662624418a05": "8000000000000000000000", - "24fc73d20793098e09ddab5798506224fa1e1850": "200000000000000000000", - "2b8488bd2d3c197a3d26151815b5a798d27168dc": "6680000000000000000000", - "949131f28943925cfc97d41e0cea0b262973a730": "2800000000000000000000", - "60b8d6b73b79534fb08bb8cbcefac7f393c57bfe": "1760000000000000000000", - "d6acc220ba2e51dfcf21d443361eea765cbd35d8": "20000000000000000000", - "c4c6cb723dd7afa7eb535615e53f3cef14f18118": "1999999000000000000000", - "4c9a862ad115d6c8274ed0b944bdd6a5500510a7": "100000000000000000000", - "85732c065cbd64119941aed430ac59670b6c51c4": "731345000000000000000", - "0126e12ebc17035f35c0e9d11dd148393c405d7a": "1999600000000000000000", - "472048cc609aeb242165eaaa8705850cf3125de0": "1000000000000000000000", - "d2edd1ddd6d86dc005baeb541d22b640d5c7cae5": "20000000000000000000", - "4549b15979255f7e65e99b0d5604db98dfcac8bf": "4000000000000000000000", - "c6c7c191379897dd9c9d9a33839c4a5f62c0890d": "4000085000000000000000", - "d367009ab658263b62c2333a1c9e4140498e1389": "2000000000000000000000", - "143f5f1658d9e578f4f3d95f80c0b1bd3933cbda": "1490000000000000000000", - "1a09fdc2c7a20e23574b97c69e93deba67d37220": "1998000000000000000000", - "ac8b509aefea1dbfaf2bb33500d6570b6fd96d51": "1820000000000000000000", - "16ffac84032940f0121a09668b858a7e79ffa3bb": "3879210000000000000000", - "f338459f32a159b23db30ac335769ab2351aa63c": "30000000000000000000000", - "d82251456dc1380f8f5692f962828640ab9f2a03": "4879980000000000000000", - "47f4696bd462b20da09fb83ed2039818d77625b3": "149000000000000000000", - "3dde8b15b3ccbaa5780112c3d674f313bba68026": "1773000000000000000000", - "f70d637a845c06db6cdc91e6371ce7c4388a628e": "20000000000000000000", - "68295e8ea5afd9093fc0a465d157922b5d2ae234": "19982000000000000000", - "614e8bef3dd2c59b59a4145674401018351884ea": "20000000000000000000", - "4737d042dc6ae73ec73ae2517acea2fdd96487c5": "1000000000000000000000", - "cec6fc65853f9cce5f8e844676362e1579015f02": "2000000000000000000000", - "ae47e2609cfafe369d66d415d939de05081a9872": "27060000000000000000000", - "09a928d528ec1b3e25ffc83e218c1e0afe8928c7": "18200000000000000000", - "9b444fd337e5d75293adcfff70e1ea01db023222": "100000000000000000000", - "168bdec818eafc6d2992e5ef54aa0e1601e3c561": "1000110000000000000000", - "353dbec42f92b50f975129b93c4c997375f09073": "1999000000000000000000", - "6fcc2c732bdd934af6ccd16846fb26ef89b2aa9b": "10001242000000000000000", - "6f2576da4de283bbe8e3ee69ddd66e5e711db3f5": "1260800000000000000000", - "3a3dd104cd7eb04f21932fd433ea7affd39369f5": "357500000000000000000", - "d44f4ac5fad76bdc1537a3b3af6472319b410d9d": "1600000000000000000000", - "3d9d6be57ff83e065985664f12564483f2e600b2": "2041600000000000000000", - "88f1045f19f2d3191816b1df18bb6e1435ad1b38": "240000000000000000000", - "ddab75fb2ff9fecb88f89476688e2b00e367ebf9": "19400000000000000000000", - "092e815558402d67f90d6bfe6da0b2fffa91455a": "60000000000000000000", - "a7024cfd742c1ec13c01fea18d3042e65f1d5dee": "11272229000000000000000", - "7f46bb25460dd7dae4211ca7f15ad312fc7dc75c": "6685000000000000000000", - "93f18cd2526040761488c513174d1e7963768b2c": "2416500000000000000000", - "352f25babf4a690673e35195efa8f79d05848aad": "66800000000000000000000", - "f7b151cc5e571c17c76539dbe9964cbb6fe5de79": "2148000000000000000000", - "ff3eee57c34d6dae970d8b311117c53586cd3502": "1700000000000000000000", - "ae6f0c73fdd77c489727512174d9b50296611c4c": "6000000000000000000000", - "7819b0458e314e2b53bfe00c38495fd4b9fdf8d6": "20000000000000000000", - "7fdba031c78f9c096d62d05a369eeab0bccc55e5": "2800000000000000000000", - "735e328666ed5637142b3306b77ccc5460e72c3d": "1968682000000000000000", - "0bfbb6925dc75e52cf2684224bbe0550fea685d3": "1970000000000000000000", - "6be16313643ebc91ff9bb1a2e116b854ea933a45": "500000000000000000000", - "d6acffd0bfd99c382e7bd56ff0e6144a9e52b08e": "160000000000000000000", - "276a006e3028ecd44cdb62ba0a77ce94ebd9f10f": "1800000000000000000000", - "10711c3dda32317885f0a2fd8ae92e82069b0d0b": "4000000000000000000000", - "43cb9652818c6f4d6796b0e89409306c79db6349": "2000000000000000000000", - "7109dd011d15f3122d9d3a27588c10d77744508b": "2000000000000000000000", - "3497dd66fd118071a78c2cb36e40b6651cc82598": "109600000000000000000", - "9bf672d979b36652fc5282547a6a6bc212ae4368": "656000000000000000000", - "eaed16eaf5daab5bf0295e5e077f59fb8255900b": "4000000000000000000000", - "7ac58f6ffc4f8107ae6e30378e4e9f99c57fbb24": "40000000000000000000", - "45a570dcc2090c86a6b3ea29a60863dde41f13b5": "232500000000000000000", - "433a3b68e56b0df1862b90586bbd39c840ff1936": "2000000000000000000000", - "e8eaf12944092dc3599b3953fa7cb1c9761cc246": "1800000000000000000000", - "ec11362cec810985d0ebbd7b73451444985b369f": "30000047000000000000000", - "78e83f80b3678c7a0a4e3e8c84dccde064426277": "1790000000000000000000", - "0cc67f8273e1bae0867fd42e8b8193d72679dbf8": "500000000000000000000", - "c70d856d621ec145303c0a6400cd17bbd6f5eaf7": "20000000000000000000", - "f468906e7edf664ab0d8be3d83eb7ab3f7ffdc78": "1700000000000000000000", - "3c286cfb30146e5fd790c2c8541552578de334d8": "10203000000000000000000", - "c401c427cccff10decb864202f36f5808322a0a8": "3329300000000000000000", - "afd019ff36a09155346b69974815a1c912c90aa4": "2000000000000000000000", - "96fe59c3dbb3aa7cc8cb62480c65e56e6204a7e2": "20000000000000000000000", - "a47779d8bc1c7bce0f011ccb39ef68b854f8de8f": "2000000000000000000000", - "58c650ced40bb65641b8e8a924a039def46854df": "18500000000000000000", - "86f4f40ad984fbb80933ae626e0e42f9333fdd41": "1000000000000000000000", - "b22d5055d9623135961e6abd273c90deea16a3e7": "1400000000000000000000", - "ee3564f5f1ba0f94ec7bac164bddbf31c6888b55": "100000000000000000000", - "cf26b47bd034bc508e6c4bcfd6c7d30034925761": "1800000000000000000000", - "e87dbac636a37721df54b08a32ef4959b5e4ff82": "2000000000000000000000", - "3bf86ed8a3153ec933786a02ac090301855e576b": "450000000000000000000000", - "cfd2728dfb8bdbf3bf73598a6e13eaf43052ea2b": "170000000000000000000", - "85b16f0b8b34dff3804f69e2168a4f7b24d1042b": "317000000000000000000", - "84db1459bb00812ea67ecb3dc189b72187d9c501": "148851000000000000000", - "8c3a9ee71f729f236cba3867b4d79d8ceee25dbc": "100000000000000000000", - "e677c31fd9cb720075dca49f1abccd59ec33f734": "7800000000000000000000", - "8889448316ccf14ed86df8e2f478dc63c4338340": "15200000000000000000", - "b279c7d355c2880392aad1aa21ee867c3b3507df": "1261000000000000000000", - "12b5e28945bb2969f9c64c63cc05b6f1f8d6f4d5": "7722162000000000000000", - "8d2303341e1e1eb5e8189bde03f73a60a2a54861": "100000000000000000000", - "94d81074db5ae197d2bb1373ab80a87d121c4bd3": "9400000000000000000000", - "752c9febf42f66c4787bfa7eb17cf5333bba5070": "1966448000000000000000", - "16816aac0ede0d2d3cd442da79e063880f0f1d67": "2000000000000000000000", - "daac91c1e859d5e57ed3084b50200f9766e2c52b": "400000000000000000000", - "32c2fde2b6aabb80e5aea2b949a217f3cb092283": "5614827000000000000000", - "cdab46a5902080646fbf954204204ae88404822b": "544942000000000000000", - "fdf42343019b0b0c6bf260b173afab7e45b9d621": "1999944000000000000000", - "791f6040b4e3e50dcf3553f182cd97a90630b75d": "4000000000000000000000", - "4b762166dd1118e84369f804c75f9cd657bf730c": "500000000000000000000", - "a76d3f156251b72c0ccf4b47a3393cbd6f49a9c5": "1337000000000000000000", - "c5eb42295e9cadeaf2af12dede8a8d53c579c469": "3820000000000000000000", - "db9371b30c4c844e59e03e924be606a938d1d310": "2000000000000000000000", - "2cd39334ac7eac797257abe3736195f5b4b5ce0f": "99964000000000000000", - "ad44357e017e244f476931c7b8189efee80a5d0a": "300000000000000000000", - "4ca7b717d9bc8793b04e051a8d23e1640f5ba5e3": "1248980000000000000000", - "73e4a2b60cf48e8baf2b777e175a5b1e4d0c2d8f": "100000000000000000000", - "5a1d2d2d1d520304b6208849570437eb3091bb9f": "1970000000000000000000", - "53047dc8ac9083d90672e8b3473c100ccd278323": "40000000000000000000", - "26fe174cbf526650e0cd009bd6126502ce8e684d": "11640000000000000000000", - "e2df23f6ea04becf4ab701748dc0963184555cdb": "2000000000000000000000", - "c1170dbaadb3dee6198ea544baec93251860fda5": "1200000000000000000000", - "8bbeacfc29cfe93402db3c41d99ab759662e73ec": "2000000000000000000000", - "165305b787322e25dc6ad0cefe6c6f334678d569": "2000000000000000000000", - "095457f8ef8e2bdc362196b9a9125da09c67e3ab": "200000000000000000000", - "702802f36d00250fab53adbcd696f0176f638a49": "2000000000000000000000", - "489334c2b695c8ee0794bd864217fb9fd8f8b135": "18200000000000000000", - "fa8cf4e627698c5d5788abb7880417e750231399": "4244640000000000000000", - "3329eb3baf4345d600ced40e6e9975656f113742": "4999711000000000000000", - "b4dd5499daeb2507fb2de12297731d4c72b16bb0": "20000000000000000000", - "88c2516a7cdb09a6276d7297d30f5a4db1e84b86": "4000000000000000000000", - "612ced8dc0dc9e899ee46f7962333315f3f55e44": "338830000000000000000", - "d71e43a45177ad51cbe0f72184a5cb503917285a": "200000000000000000000", - "2fb566c94bbba4e3cb67cdda7d5fad7131539102": "2000000000000000000000", - "03be5b4629aefbbcab9de26d39576cb7f691d764": "200550000000000000000", - "025367960304beee34591118e9ac2d1358d8021a": "2000000000000000000000", - "a5d5b8b62d002def92413710d13b6ff8d4fc7dd3": "400000000000000000000", - "df3b72c5bd71d4814e88a62321a93d4011e3578b": "4000000000000000000000", - "3588895ac9fbafec012092dc05c0c302d90740fa": "3000000000000000000000", - "6021e85a8814fce1e82a41abd1d3b2dad2faefe0": "2000000000000000000000", - "17ee9f54d4ddc84d670eff11e54a659fd72f4455": "16000000000000000000000", - "873c6f70efb6b1d0f2bbc57eebcd70617c6ce662": "1013478000000000000000", - "1fcc7ce6a8485895a3199e16481f72e1f762defe": "1000000000000000000000", - "d0a7209b80cf60db62f57d0a5d7d521a69606655": "160000000000000000000", - "a514d00edd7108a6be839a638db2415418174196": "30000000000000000000000", - "046377f864b0143f282174a892a73d3ec8ec6132": "191000000000000000000", - "c126573d87b0175a5295f1dd07c575cf8cfa15f2": "10000000000000000000000", - "0e123d7da6d1e6fac2dcadd27029240bb39052fe": "1000000000000000000000", - "ad5a8d3c6478b69f657db3837a2575ef8e1df931": "36990000000000000000", - "db882eacedd0eff263511b312adbbc59c6b8b25b": "9100000000000000000000", - "0b43bd2391025581d8956ce42a072579cbbfcb14": "18800000000000000000", - "affea0473722cb7f0e0e86b9e11883bf428d8d54": "1940000000000000000000", - "e32b1c4725a1875449e98f970eb3e54062d15800": "200000000000000000000", - "98f4af3af0aede5fafdc42a081ecc1f89e3ccf20": "9400000000000000000000", - "3b4768fd71e2db2cbe7fa050483c27b4eb931df3": "2000000000000000000000", - "d5f7c41e07729dfa6dfc64c4423160a22c609fd3": "1790000000000000000000", - "d944c8a69ff2ca1249690c1229c7192f36251062": "1970000000000000000000", - "5ae64e853ba0a51282cb8db52e41615e7c9f733f": "2000000000000000000000", - "b13f93af30e8d7667381b2b95bc1a699d5e3e129": "420000000000000000000", - "8a20e5b5cee7cd1f5515bace3bf4f77ffde5cc07": "80000000000000000000", - "2448596f91c09baa30bc96106a2d37b5705e5d28": "2000000000000000000000", - "ccca24d8c56d6e2c07db086ec07e585be267ac8d": "200000000000000000000", - "f67bb8e2118bbcd59027666eedf6943ec9f880a5": "4000000000000000000000", - "7ae659eb3bc46852fa86fac4e21c768d50388945": "286000000000000000000", - "467e0ed54f3b76ae0636176e07420815a021736e": "2000000000000000000000", - "a46cd237b63eea438c8e3b6585f679e4860832ac": "1000000000000000000000", - "6b760d4877e6a627c1c967bee451a8507ddddbab": "910000000000000000000", - "593044670faeff00a55b5ae051eb7be870b11694": "133700000000000000000", - "533c06928f19d0a956cc28866bf6c8d8f4191a94": "292320000000000000000", - "262dc1364ccf6df85c43268ee182554dae692e29": "4927600000000000000000", - "e4368bc1420b35efda95fafbc73090521916aa34": "4000000000000000000000", - "feb92d30bf01ff9a1901666c5573532bfa07eeec": "1000000000000000000000", - "ee25b9a7032679b113588ed52c137d1a053a1e94": "199820000000000000000", - "20134cbff88bfadc466b52eceaa79857891d831e": "1000000000000000000000", - "07b1a306cb4312df66482c2cae72d1e061400fcd": "20000000000000000000000", - "e791d585b89936b25d298f9d35f9f9edc25a2932": "2000000000000000000000", - "2e6933543d4f2cc00b5350bd8068ba9243d6beb0": "2000000000000000000000", - "dae0d33eaa341569fa9ff5982684854a4a328a6e": "1000000000000000000000", - "125cc5e4d56b2bcc2ee1c709fb9e68fb177440bd": "2000000000000000000000", - "ec99e95dece46ffffb175eb6400fbebb08ee9b95": "100000000000000000000", - "c538a0ff282aaa5f4b75cfb62c70037ee67d4fb5": "2000000000000000000000", - "60676d1fa21fca052297e24bf96389c5b12a70d7": "241500000000000000000", - "4b3dfbdb454be5279a3b8addfd0ed1cd37a9420d": "2000000000000000000000", - "cdb597299030183f6e2d238533f4642aa58754b6": "400000000000000000000", - "1ef2dcbfe0a500411d956eb8c8939c3d6cfe669d": "776000000000000000000", - "a7247c53d059eb7c9310f628d7fc6c6a0a773f08": "500000000000000000000", - "9799ca21dbcf69bfa1b3f72bac51b9e3ca587cf9": "1700000000000000000000", - "ddf95c1e99ce2f9f5698057c19d5c94027ee4a6e": "6000000000000000000000", - "83563bc364ed81a0c6da3b56ff49bbf267827a9c": "17332000000000000000000", - "a192698007cc11aa603d221d5feea076bcf7c30d": "2000000000000000000000", - "0134ff38155fabae94fd35c4ffe1d79de7ef9c59": "985000000000000000000", - "80977316944e5942e79b0e3abad38da746086519": "38800000000000000000", - "193d37ed347d1c2f4e35350d9a444bc57ca4db43": "60000000000000000000", - "009a6d7db326679b77c90391a7476d238f3ba33e": "200200000000000000000", - "337b3bdf86d713dbd07b5dbfcc022b7a7b1946ae": "3980000000000000000000", - "7de7fe419cc61f91f408d234cc80d5ca3d054d99": "20000000000000000000", - "f47bb134da30a812d003af8dccb888f44bbf5724": "5190000000000000000000", - "fd920f722682afb5af451b0544d4f41b3b9d5742": "2330200000000000000000", - "0a917f3b5cb0b883047fd9b6593dbcd557f453b9": "1000000000000000000000", - "ce9786d3712fa200e9f68537eeaa1a06a6f45a4b": "1790000000000000000000", - "9ab98d6dbb1eaae16d45a04568541ad3d8fe06cc": "272451000000000000000", - "0b7bb342f01bc9888e6a9af4a887cbf4c2dd2caf": "16000000000000000000000", - "4c0b1515dfced7a13e13ee12c0f523ae504f032b": "50000000000000000000000", - "ac2889b5966f0c7f9edb42895cb69d1c04f923a2": "5000000000000000000000", - "d008513b27604a89ba1763b6f84ce688b346945b": "1000000000000000000000", - "a4b09de6e713dc69546e76ef0acf40b94f0241e6": "322656000000000000000", - "b153f828dd076d4a7c1c2574bb2dee1a44a318a8": "400000000000000000000", - "02ade5db22f8b758ee1443626c64ec2f32aa0a15": "20000000000000000000000", - "0a0650861f785ed8e4bf1005c450bbd06eb48fb6": "3066860000000000000000", - "b75149e185f6e3927057739073a1822ae1cf0df2": "4000086000000000000000", - "84cb7da0502df45cf561817bbd2362f451be02da": "1337000000000000000000", - "c91bb562e42bd46130e2d3ae4652b6a4eb86bc0f": "540000000000000000000", - "b234035f7544463ce1e22bc553064684c513cd51": "249750000000000000000", - "e5e33800a1b2e96bde1031630a959aa007f26e51": "1337000000000000000000", - "ae5ce3355a7ba9b332760c0950c2bc45a85fa9a0": "400000000000000000000", - "e6f5eb649afb99599c414b27a9c9c855357fa878": "2674000000000000000000", - "7010be2df57bd0ab9ae8196cd50ab0c521aba9f9": "1970000000000000000000", - "ca4288014eddc5632f5facb5e38517a8f8bc5d98": "340000000000000000000", - "2784903f1d7c1b5cd901f8875d14a79b3cbe2a56": "22388000000000000000000", - "f8dce867f0a39c5bef9eeba609229efa02678b6c": "2000000000000000000000", - "e020e86362b487752836a6de0bc02cd8d89a8b6a": "6000000000000000000000", - "c4088c025f3e85013f5439fb3440a17301e544fe": "2325000000000000000000", - "befb448c0c5f683fb67ee570baf0db5686599751": "1970000000000000000000", - "2f187d5a704d5a338c5b2876a090dce964284e29": "4000000000000000000000", - "ec0e18a01dc4dc5daae567c3fa4c7f8f9b590205": "315900000000000000000", - "637f5869d6e4695f0eb9e27311c4878aff333380": "1969212000000000000000", - "d1100dd00fe2ddf18163ad964d0b69f1f2e9658a": "5959598000000000000000", - "17ef4acc1bf147e326749d10e677dcffd76f9e06": "39980000000000000000000", - "200dfc0b71e359b2b465440a36a6cdc352773007": "1500000000000000000000", - "efe0675da98a5dda70cd96196b87f4e726b43348": "1164000000000000000000", - "d5bd5e8455c130169357c471e3e681b7996a7276": "841500000000000000000", - "9c7b6dc5190fe2912963fcd579683ec7395116b0": "776000000000000000000", - "b105dd3d987cffd813e9c8500a80a1ad257d56c6": "1999944000000000000000", - "145250b06e4fa7cb2749422eb817bdda8b54de5f": "219000000000000000000", - "d96db33b7b5a950c3efa2dc31b10ba10a532ef87": "2000000000000000000000", - "af529bdb459cc185bee5a1c58bf7e8cce25c150d": "197000000000000000000", - "185546e8768d506873818ac9751c1f12116a3bef": "200000000000000000000", - "51d24bc3736f88dd63b7222026886630b6eb878d": "2000000000000000000000", - "69af28b0746cac0da17084b9398c5e36bb3a0df2": "1004700000000000000000", - "76f83ac3da30f7092628c7339f208bfc142cb1ee": "2842600000000000000000", - "00f463e137dcf625fbf3bca39eca98d2b968cf7f": "5910000000000000000000", - "2084fce505d97bebf1ad8c5ff6826fc645371fb2": "30000000000000000000", - "53a714f99fa00fef758e23a2e746326dad247ca7": "1490000000000000000000", - "0bf064428f83626722a7b5b26a9ab20421a7723e": "133700000000000000000", - "ac6f68e837cf1961cb14ab47446da168a16dde89": "1337000000000000000000", - "4b3c7388cc76da3d62d40067dabccd7ef0433d23": "100076000000000000000", - "deb9a49a43873020f0759185e20bbb4cf381bb8f": "211628000000000000000", - "5bf9f2226e5aeacf1d80ae0a59c6e38038bc8db5": "6000000000000000000000", - "9d0e7d92fb305853d798263bf15e97c72bf9d7e0": "1000000000000000000000", - "2b5c60e84535eeb4d580de127a12eb2677ccb392": "20000000000000000000000", - "d8d65420c18c2327cc5af97425f857e4a9fd51b3": "1760000000000000000000", - "30ec9392244a2108c987bc5cdde0ed9f837a817b": "1560562000000000000000", - "56a1d60d40f57f308eebf087dee3b37f1e7c2cba": "1159600000000000000000", - "a9a1cdc33bfd376f1c0d76fb6c84b6b4ac274d68": "5000000000000000000000", - "a67f38819565423aa85f3e3ab61bc763cbab89dd": "2130000000000000000000", - "62d5cc7117e18500ac2f9e3c26c86b0a94b0de15": "105000000000000000000", - "4970d3acf72b5b1f32a7003cf102c64ee0547941": "140000000000000000000000", - "76628150e2995b5b279fc83e0dd5f102a671dd1c": "40000000000000000000000", - "3d8f39881b9edfe91227c33fa4cdd91e678544b0": "86111000000000000000", - "ff0b7cb71da9d4c1ea6ecc28ebda504c63f82fd1": "1043000000000000000000", - "8d795c5f4a5689ad62da961671f028065286d554": "2048000000000000000000", - "be2346a27ff9b702044f500deff2e7ffe6824541": "20000000000000000000", - "0dbd417c372b8b0d01bcd944706bd32e60ae28d1": "340000000000000000000", - "467fbf41441600757fe15830c8cd5f4ffbbbd560": "10000000000000000000000", - "090cd67b60e81d54e7b5f6078f3e021ba65b9a1e": "1000000000000000000000", - "55a4cac0cb8b582d9fef38c5c9fff9bd53093d1f": "1970000000000000000000", - "3b7b4f53c45655f3dc5f017edc23b16f9bc536fa": "100000000000000000000", - "d508d39c70916f6abc4cc7f999f011f077105802": "100470000000000000000", - "037dd056e7fdbd641db5b6bea2a8780a83fae180": "140000000000000000000", - "660557bb43f4be3a1b8b85e7df7b3c5bcd548057": "6000000000000000000000", - "02089361a3fe7451fb1f87f01a2d866653dc0b07": "39976000000000000000", - "c4bec96308a20f90cab18399c493fd3d065abf45": "14000000000000000000000", - "cca07bb794571d4acf041dad87f0d1ef3185b319": "2000000000000000000000", - "f2d0e986d814ea13c8f466a0538c53dc922651f0": "1380000000000000000000", - "662cfa038fab37a01745a364e1b98127c503746d": "3940000000000000000000", - "3336c3ef6e8b50ee90e037b164b7a8ea5faac65d": "272712000000000000000", - "30e33358fc21c85006e40f32357dc8895940aaf0": "1910000000000000000000", - "41a9a404fc9f5bfee48ec265b12523338e29a8bf": "388000000000000000000", - "6af235d2bbe050e6291615b71ca5829658810142": "3000000000000000000000", - "fd5a63157f914fd398eab19c137dd9550bb7715c": "100000000000000000000", - "8a4314fb61cd938fc33e15e816b113f2ac89a7fb": "432800000000000000000", - "b216dc59e27c3d7279f5cd5bb2becfb2606e14d9": "400000000000000000000", - "f5a5459fcdd5e5b273830df88eea4cb77ddadfb9": "74500000000000000000", - "df31025f5649d2c6eea41ed3bdd3471a790f759a": "20000000000000000000", - "721f9d17e5a0e74205947aeb9bc6a7938961038f": "51900000000000000000", - "08d0864dc32f9acb36bf4ea447e8dd6726906a15": "2000200000000000000000", - "54575c3114751e3c631971da6a2a02fd3ffbfcc8": "1940000000000000000000", - "8f60895fbebbb5017fcbff3cdda397292bf25ba6": "429177000000000000000", - "91fe8a4c6164df8fa606995d6ba7adcaf1c893ce": "17000000000000000000000", - "889087f66ff284f8b5efbd29493b706733ab1447": "9850000000000000000000", - "051633080d07a557adde319261b074997f14692d": "5800000000000000000000", - "59a12df2e3ef857aceff9306b309f6a500f70134": "1000000000000000000000", - "9f64a8e8dacf4ade30d10f4d59b0a3d5abfdbf74": "1000060000000000000000", - "8846928d683289a2d11df8db7a9474988ef01348": "10000000000000000000000", - "dff1b220de3d8e9ca4c1b5be34a799bcded4f61c": "385428000000000000000", - "7e7c1e9a61a08a83984835c70ec31d34d3eaa87f": "191000000000000000000", - "fe210b8f04dc6d4f76216acfcbd59ba83be9b630": "20000000000000000000", - "dc8c2912f084a6d184aa73638513ccbc326e0102": "1295000000000000000000", - "dddd7b9e6eab409b92263ac272da801b664f8a57": "500000000000000000000000", - "86a5f8259ed5b09e188ce346ee92d34aa5dd93fa": "200000000000000000000", - "dc1f1979615f082140b8bb78c67b27a1942713b1": "60000000000000000000", - "ea66e7b84dcdbf36eea3e75b85382a75f1a15d96": "1729135000000000000000", - "039e7a4ebc284e2ccd42b1bdd60bd6511c0f7706": "17300000000000000000", - "36bfe1fa3b7b70c172eb042f6819a8972595413e": "1000000000000000000000", - "039ef1ce52fe7963f166d5a275c4b1069fe3a832": "400008000000000000000", - "f1df55dcc34a051012b575cb968bc9c458ea09c9": "4000000000000000000000", - "168b5019b818691644835fe69bf229e17112d52c": "28000000000000000000000", - "f60bd735543e6bfd2ea6f11bff627340bc035a23": "2000000000000000000000", - "2cbb0c73df91b91740b6693b774a7d05177e8e58": "1850000000000000000000", - "9ffcf5ef46d933a519d1d16c6ba3189b27496224": "1000000000000000000000", - "0e11d77a8977fac30d268445e531149b31541a24": "2000000000000000000000", - "dfb1626ef48a1d7d7552a5e0298f1fc23a3b482d": "1713860000000000000000", - "cc943be1222cd1400a2399dd1b459445cf6d54a9": "12530000000000000000000", - "b37c2b9f50637bece0ca959208aefee6463ba720": "400000000000000000000", - "96b906ea729f4655afe3e57d35277c967dfa1577": "1000000000000000000000", - "7995bd8ce2e0c67bf1c7a531d477bca1b2b97561": "5945100000000000000000", - "96f820500b70f4a3e3239d619cff8f222075b135": "200000000000000000000", - "ad3565d52b688added08168b2d3872d17d0a26ae": "100000000000000000000", - "9e7c2050a227bbfd60937e268cea3e68fea8d1fe": "100000000000000000000", - "7e59dc60be8b2fc19abd0a5782c52c28400bce97": "1000000000000000000000", - "01ed5fba8d2eab673aec042d30e4e8a611d8c55a": "2000000000000000000000", - "59a087b9351ca42f58f36e021927a22988284f38": "18500000000000000000", - "2fe0023f5722650f3a8ac01009125e74e3f82e9b": "3000000000000000000000", - "bd1803370bddb129d239fd16ea8526a6188ae58e": "500000000000000000000", - "c70527d444c490e9fc3f5cc44e66eb4f306b380f": "4000000000000000000000", - "0f206e1a1da7207ea518b112418baa8b06260328": "600000000000000000000", - "6e1a046caf5b4a57f4fd4bc173622126b4e2fd86": "1790000000000000000000", - "84008a72f8036f3feba542e35078c057f32a8825": "100000000000000000000", - "246291165b59332df5f18ce5c98856fae95897d6": "1700000000000000000000", - "7e99dfbe989d3ba529d19751b7f4317f8953a3e2": "400000000000000000000", - "748c285ef1233fe4d31c8fb1378333721c12e27a": "2000000000000000000000", - "3dd12e556a603736feba4a6fa8bd4ac45d662a04": "167450000000000000000000", - "d0ae735d915e946866e1fea77e5ea466b5cadd16": "2000000000000000000000", - "4f767bc8794aef9a0a38fea5c81f14694ff21a13": "512200000000000000000", - "0e2f8e28a681f77c583bd0ecde16634bdd7e00cd": "95060000000000000000", - "d74a6e8d6aab34ce85976814c1327bd6ea0784d2": "100000000000000000000000", - "629be7ab126a5398edd6da9f18447e78c692a4fd": "2000000000000000000000", - "2e46fcee6a3bb145b594a243a3913fce5dad6fba": "10000000000000000000000", - "e39b11a8ab1ff5e22e5ae6517214f73c5b9b55dc": "2000000000000000000000", - "119aa64d5b7d181dae9d3cb449955c89c1f963fa": "700000000000000000000", - "ce079f51887774d8021cb3b575f58f18e9acf984": "180000000000000000000", - "550c306f81ef5d9580c06cb1ab201b95c748a691": "665800000000000000000", - "06dc7f18cee7edab5b795337b1df6a9e8bd8ae59": "400000000000000000000", - "e21c778ef2a0d7f751ea8c074d1f812243863e4e": "5308559000000000000000", - "45d4b54d37a8cf599821235f062fa9d170ede8a4": "324000000000000000000", - "893a6c2eb8b40ab096b4f67e74a897b840746e86": "1730000000000000000000", - "d44d81e18f46e2cfb5c1fcf5041bc8569767d100": "36381800000000000000000", - "c5de1203d3cc2cea31c82ee2de5916880799eafd": "5000000000000000000000", - "7f0f04fcf37a53a4e24ede6e93104e78be1d3c9e": "2000000000000000000000", - "3ce1dc97fcd7b7c4d3a18a49d6f2a5c1b1a906d7": "200000000000000000000", - "ac4ee9d502e7d2d2e99e59d8ca7d5f00c94b4dd6": "1000000000000000000000", - "7640a37f8052981515bce078da93afa4789b5734": "2000000000000000000000", - "76cac488111a4fd595f568ae3a858770fc915d5f": "200000000000000000000", - "ff4a408f50e9e72146a28ce4fc8d90271f116e84": "1970000000000000000000", - "249db29dbc19d1235da7298a04081c315742e9ac": "1801800000000000000000", - "3a04572847d31e81f7765ca5bfc9d557159f3683": "133031000000000000000", - "b6771b0bf3427f9ae7a93e7c2e61ee63941fdb08": "18800000000000000000000", - "30c26a8e971baa1855d633ba703f028cc7873140": "10000000000000000000000", - "167e3e3ae2003348459392f7dfce44af7c21ad59": "500000000000000000000", - "43f16f1e75c3c06a9478e8c597a40a3cb0bf04cc": "2914000000000000000000", - "056b1546894f9a85e203fb336db569b16c25e04f": "169397000000000000000", - "70616e2892fa269705b2046b8fe3e72fa55816d3": "20000000000000000000000", - "8f4d1d41693e462cf982fd81d0aa701d3a5374c9": "4000000000000000000000", - "c518799a5925576213e21896e0539abb85b05ae3": "1000000000000000000000", - "0e3a28c1dfafb0505bdce19fe025f506a6d01ceb": "2000000000000000000000", - "e4a47e3933246c3fd62979a1ea19ffdf8c72ef37": "148273000000000000000", - "d231929735132102471ba59007b6644cc0c1de3e": "1000090000000000000000", - "555d8d3ce1798aca902754f164b8be2a02329c6c": "10000000000000000000000", - "5ab1a5615348001c7c775dc75748669b8be4de14": "690200000000000000000", - "2fee36a49ee50ecf716f1047915646779f8ba03f": "1056230000000000000000", - "54db5e06b4815d31cb56a8719ba33af2d73e7252": "670000000000000000000", - "7c8bb65a6fbb49bd413396a9d7e31053bbb37aa9": "6000000000000000000000", - "c1384c6e717ebe4b23014e51f31c9df7e4e25b31": "500000000000000000000", - "474158a1a9dc693c133f65e47b5c3ae2f773a86f": "200200000000000000000", - "2934c0df7bbc172b6c186b0b72547ace8bf75454": "60000000000000000000", - "6966063aa5de1db5c671f3dd699d5abe213ee902": "8000000000000000000000", - "9225d46a5a80943924a39e5b84b96da0ac450581": "40000000000000000000000", - "671bbca099ff899bab07ea1cf86965c3054c8960": "50000000000000000000", - "f1f766b0e46d73fcd4d52e7a72e1b9190cc632b3": "8000000000000000000000", - "ef0dc7dd7a53d612728bcbd2b27c19dd4d7d666f": "705668000000000000000", - "38d2e9154964b41c8d50a7487d391e7ee2c3d3c2": "3500000000000000000000", - "352a785f4a921632504ce5d015f83c49aa838d6d": "4314800000000000000000", - "743de50026ca67c94df54f066260e1d14acc11ac": "2000000000000000000000", - "b188078444027e386798a8ae68698919d5cc230d": "267400000000000000000", - "53608105ce4b9e11f86bf497ffca3b78967b5f96": "20000000000000000000000", - "3b159099075207c6807663b1f0f7eda54ac8cce3": "1969543000000000000000", - "141a5e39ee2f680a600fbf6fa297de90f3225cdd": "10000000000000000000000", - "44fff37be01a3888d3b8b8e18880a7ddefeeead3": "259145000000000000000", - "c5a629a3962552cb8eded889636aafbd0c18ce65": "10000000000000000000000", - "fdba5359f7ec3bc770ac49975d844ec9716256f1": "1000000000000000000000", - "7c1df24a4f7fb2c7b472e0bb006cb27dcd164156": "1000000000000000000000", - "ab7d54c7c6570efca5b4b8ce70f52a5773e5d53b": "279600000000000000000", - "3f173aa6edf469d185e59bd26ae4236b92b4d8e1": "320000000000000000000", - "a3f4ad14e0bb44e2ce2c14359c75b8e732d37054": "200000000000000000000", - "ac5f627231480d0d95302e6d89fc32cb1d4fe7e3": "200000000000000000000", - "d0775dba2af4c30a3a78365939cd71c2f9de95d2": "1940000000000000000000", - "ad94235fc3b3f47a2413af31e884914908ef0c45": "500008000000000000000", - "eaedcc6b8b6962d5d9288c156c579d47c0a9fcff": "85000000000000000000", - "7ac48d40c664cc9a6d89f1c5f5c80a1c70e744e6": "3008000000000000000000", - "ec73114c5e406fdbbe09b4fa621bd70ed54ea1ef": "24500000000000000000000", - "a690f1a4b20ab7ba34628620de9ca040c43c1963": "4000000000000000000000", - "cad14f9ebba76680eb836b079c7f7baaf481ed6d": "238600000000000000000", - "6c714a58fff6e97d14b8a5e305eb244065688bbd": "4000000000000000000000", - "3e618350fa01657ab0ef3ebac8e37012f8fc2b6f": "2804400000000000000000", - "c946d5acc1346eba0a7279a0ac1d465c996d827e": "16385128000000000000000", - "1164caaa8cc5977afe1fad8a7d6028ce2d57299b": "400000000000000000000", - "7917e5bd82a9790fd650d043cdd930f7799633db": "3999800000000000000000", - "d52aecc6493938a28ca1c367b701c21598b6a02e": "1100000000000000000000", - "98bed3a72eccfbafb923489293e429e703c7e25b": "2000000000000000000000", - "42db0b902559e04087dd5c441bc7611934184b89": "2014420000000000000000", - "43bc2d4ddcd6583be2c7bc094b28fb72e62ba83b": "2000000000000000000000", - "85f0e7c1e3aff805a627a2aaf2cff6b4c0dbe9cb": "20000000000000000000", - "581b9fd6eae372f3501f42eb9619eec820b78a84": "19699015000000000000000", - "541db20a80cf3b17f1621f1b3ff79b882f50def3": "1000000000000000000000", - "4e8a6d63489ccc10a57f885f96eb04ecbb546024": "18500000000000000000000", - "28349f7ef974ea55fe36a1583b34cec3c45065f0": "234490000000000000000", - "a3241d890a92baf52908dc4aa049726be426ebd3": "19999560000000000000000", - "b4b11d109f608fa8edd3fea9f8c315649aeb3d11": "5000000000000000000000", - "5f321b3daaa296cadf29439f9dab062a4bffedd6": "81868000000000000000", - "c5ae86b0c6c7e3900f1368105c56537faf8d743e": "188000000000000000000", - "9a8eca4189ff4aa8ff7ed4b6b7039f0902219b15": "20000000000000000000", - "a3facc50195c0b4933c85897fecc5bbd995c34b8": "20000000000000000000", - "f07bd0e5c2ce69c7c4a724bd26bbfa9d2a17ca03": "5910000000000000000000", - "640aba6de984d94517377803705eaea7095f4a11": "10000000000000000000000", - "204ac98867a7c9c7ed711cb82f28a878caf69b48": "6000000000000000000000", - "9d34dac25bd15828faefaaf28f710753b39e89dc": "1090400000000000000000", - "fe418b421a9c6d373602790475d2303e11a75930": "1015200000000000000000", - "3f472963197883bbda5a9b7dfcb22db11440ad31": "481445000000000000000", - "1578bdbc371b4d243845330556fff2d5ef4dff67": "100000000000000000000", - "dba4796d0ceb4d3a836b84c96f910afc103f5ba0": "166666000000000000000", - "466fda6b9b58c5532750306a10a2a8c768103b07": "199955000000000000000", - "2770f14efb165ddeba79c10bb0af31c31e59334c": "3000000000000000000000", - "7c382c0296612e4e97e440e02d3871273b55f53b": "197600000000000000000", - "1fb7bd310d95f2a6d9baaf8a8a430a9a04453a8b": "3000000000000000000000", - "a9acf600081bb55bb6bfbab1815ffc4e17e85a95": "200000000000000000000", - "f93d5bcb0644b0cce5fcdda343f5168ffab2877d": "209978000000000000000", - "db0cc78f74d9827bdc8a6473276eb84fdc976212": "2000000000000000000000", - "b66411e3a02dedb726fa79107dc90bc1cae64d48": "2000000000000000000000", - "4d6e8fe109ccd2158e4db114132fe75fecc8be5b": "25019000000000000000", - "6fd947d5a73b175008ae6ee8228163da289b167d": "30000000000000000000000", - "32d950d5e93ea1d5b48db4714f867b0320b31c0f": "1015200000000000000000", - "9c99b62606281b5cefabf36156c8fe62839ef5f3": "4000000000000000000000", - "86c8d0d982b539f48f9830f9891f9d607a942659": "13260000000000000000000", - "f2127d54188fedef0f338a5f38c7ff73ad9f6f42": "20000000000000000000000", - "e864fec07ed1214a65311e11e329de040d04f0fd": "1656353000000000000000", - "1d09ad2412691cc581c1ab36b6f9434cd4f08b54": "7000000000000000000000", - "4ea70f04313fae65c3ff224a055c3d2dab28dddf": "19999800000000000000000", - "e0668fa82c14d6e8d93a53113ef2862fa81581bc": "870400000000000000000", - "f0d858105e1b648101ac3f85a0f8222bf4f81d6a": "600000000000000000000", - "0f3a1023cac04dbf44f5a5fa6a9cf8508cd4fddf": "1820000000000000000000", - "5793abe6f1533311fd51536891783b3f9625ef1c": "827268000000000000000", - "8d667637e29eca05b6bfbef1f96d460eefbf9984": "4000000000000000000000", - "d76dbaebc30d4ef67b03e6e6ecc6d84e004d502d": "2019250000000000000000", - "42d1a6399b3016a8597f8b640927b8afbce4b215": "2980000000000000000000", - "21fd47c5256012198fa5abf131c06d6aa1965f75": "7880000000000000000000", - "2f2bba1b1796821a766fce64b84f28ec68f15aea": "20000000000000000000", - "d24bf12d2ddf457decb17874efde2052b65cbb49": "14000000000000000000000", - "88de13b09931877c910d593165c364c8a1641bd3": "3000000000000000000000", - "555ca9f05cc134ab54ae9bea1c3ff87aa85198ca": "100000000000000000000", - "ae9ecd6bdd952ef497c0050ae0ab8a82a91898ce": "30000000000000000000", - "ad8bfef8c68a4816b3916f35cb7bfcd7d3040976": "40000000000000000000000", - "dad136b88178b4837a6c780feba226b98569a94c": "200000000000000000000", - "800e7d631c6e573a90332f17f71f5fd19b528cb9": "152000000000000000000", - "94a9a71691317c2064271b51c9353fbded3501a8": "3340000000000000000000", - "80a0f6cc186cf6201400736e065a391f52a9df4a": "10000000000000000000000", - "712ff7370a13ed360973fedc9ff5d2c93a505e9e": "3940000000000000000000", - "42399659aca6a5a863ea2245c933fe9a35b7880e": "2044000000000000000000", - "ae239acffd4ebe2e1ba5b4170572dc79cc6533ec": "12000000000000000000000", - "007b9fc31905b4994b04c9e2cfdc5e2770503f42": "1999000000000000000000", - "7480de62254f2ba82b578219c07ba5be430dc3cb": "7040000000000000000000", - "917b8f9f3a8d09e9202c52c29e724196b897d35e": "161000000000000000000", - "708ea707bae4357f1ebea959c3a250acd6aa21b3": "500000000000000000000", - "6dc7053a718616cfc78bee6382ee51add0c70330": "2000000000000000000000", - "c4dac5a8a0264fbc1055391c509cc3ee21a6e04c": "6501000000000000000000", - "c1b2a0fb9cad45cd699192cd27540b88d3384279": "500000000000000000000", - "b07cb9c12405b711807543c4934465f87f98bd2d": "2000000000000000000000", - "c7f72bb758016b374714d4899bce22b4aec70a31": "1072706000000000000000", - "0c480de9f7461002908b49f60fc61e2b62d3140b": "10000000000000000000000", - "83d532d38d6dee3f60adc68b936133c7a2a1b0dd": "500000000000000000000", - "12afbcba1427a6a39e7ba4849f7ab1c4358ac31b": "20000000000000000000000", - "f8f6645e0dee644b3dad81d571ef9baf840021ad": "2000000000000000000000", - "40cf890591eae4a18f812a2954cb295f633327e6": "48132000000000000000", - "735b97f2fc1bd24b12076efaf3d1288073d20c8c": "20000000000000000000", - "47c7e5efb48b3aed4b7c6e824b435f357df4c723": "18200000000000000000", - "d34d708d7398024533a5a2b2309b19d3c55171bb": "400000000000000000000", - "64370e87202645125a35b207af1231fb6072f9a7": "200000000000000000000", - "b055af4cadfcfdb425cf65ba6431078f07ecd5ab": "100000000000000000000", - "c7de5e8eafb5f62b1a0af2195cf793c7894c9268": "1000000000000000000000", - "c63cd7882118b8a91e074d4c8f4ba91851303b9a": "260000000000000000000", - "164d7aac3eecbaeca1ad5191b753f173fe12ec33": "744090000000000000000", - "e4fb26d1ca1eecba3d8298d9d148119ac2bbf580": "400000000000000000000", - "613ac53be565d46536b820715b9b8d3ae68a4b95": "3760000000000000000000", - "7f616c6f008adfa082f34da7d0650460368075fb": "1000000000000000000000", - "9af100cc3dae83a33402051ce4496b16615483f6": "2000000000000000000000", - "b45cca0d36826662683cf7d0b2fdac687f02d0c4": "1000000000000000000000", - "93a6b3ab423010f981a7489d4aad25e2625c5741": "20190033000000000000000", - "ee049af005974dd1c7b3a9ca8d9aa77175ba53aa": "333333000000000000000", - "687927e3048bb5162ae7c15cf76bd124f9497b9e": "2000000000000000000000", - "1aa40270d21e5cde86b6316d1ac3c533494b79ed": "20000000000000000000", - "426259b0a756701a8b663528522156c0288f0f24": "9900000000000000000000", - "91c75e3cb4aa89f34619a164e2a47898f5674d9c": "2000000000000000000000", - "437983388ab59a4ffc215f8e8269461029c3f1c1": "20000000000000000000000", - "272a131a5a656a7a3aca35c8bd202222a7592258": "2674000000000000000000", - "bc0ca4f217e052753614d6b019948824d0d8688b": "400000000000000000000", - "cc6c03bd603e09de54e9c4d5ac6d41cbce715724": "98500000000000000000", - "d79aff13ba2da75d46240cac0a2467c656949823": "1730000000000000000000", - "477b24eee8839e4fd19d1250bd0b6645794a61ca": "8000000000000000000000", - "79fd6d48315066c204f9651869c1096c14fc9781": "2000000000000000000000", - "1463a873555bc0397e575c2471cf77fa9db146e0": "10000000000000000000000", - "89ab13ee266d779c35e8bb04cd8a90cc2103a95b": "60000000000000000000000", - "90acced7e48c08c6b934646dfa0adf29dc94074f": "56154000000000000000", - "31ea6eab19d00764e9a95e183f2b1b22fc7dc40f": "20000000000000000000", - "87a53ea39f59a35bada8352521645594a1a714cb": "1910000000000000000000", - "1e1aed85b86c6562cb8fa1eb6f8f3bc9dcae6e79": "4516200000000000000000", - "e36a8ea87f1e99e8a2dc1b2608d166667c9dfa01": "100000000000000000000", - "ec2cb8b9378dff31aec3c22e0e6dadff314ab5dd": "2000000000000000000000", - "3cadeb3d3eed3f62311d52553e70df4afce56f23": "4000000000000000000000", - "3ceca96bb1cdc214029cbc5e181d398ab94d3d41": "80000000000000000000000", - "3283eb7f9137dd39bed55ffe6b8dc845f3e1a079": "66224000000000000000", - "0954a8cb5d321fc3351a7523a617d0f58da676a7": "2506000000000000000000", - "de33d708a3b89e909eaf653b30fdc3a5d5ccb4b3": "177300000000000000000", - "1c6702b3b05a5114bdbcaeca25531aeeb34835f4": "26071500000000000000000", - "e5b96fc9ac03d448c1613ac91d15978145dbdfd1": "200000000000000000000", - "fbf204c813f836d83962c7870c7808ca347fd33e": "20000000000000000000", - "3b13631a1b89cb566548899a1d60915cdcc4205b": "2000000000000000000000", - "a87f7abd6fa31194289678efb63cf584ee5e2a61": "4000000000000000000000", - "c0a39308a80e9e84aaaf16ac01e3b01d74bd6b2d": "136499000000000000000", - "ffd6da958eecbc016bab91058440d39b41c7be83": "20000000000000000000000", - "0e3dd7d4e429fe3930a6414035f52bdc599d784d": "40110000000000000000", - "e0663e8cd66792a641f56e5003660147880f018e": "2000000000000000000000", - "5b78eca27fbdea6f26befba8972b295e7814364b": "2000000000000000000000", - "ec9851bd917270610267d60518b54d3ca2b35b17": "40000000000000000000000", - "bc9c95dfab97a574cea2aa803b5caa197cef0cff": "420000000000000000000", - "100b4d0977fcbad4debd5e64a0497aeae5168fab": "314500000000000000000", - "1b6610fb68bad6ed1cfaa0bbe33a24eb2e96fafb": "152000000000000000000", - "b4524c95a7860e21840296a616244019421c4aba": "8000000000000000000000", - "88975a5f1ef2528c300b83c0c607b8e87dd69315": "83500000000000000000", - "853e6abaf44469c72f151d4e223819aced4e3728": "2000000000000000000000", - "d604abce4330842e3d396ca73ddb5519ed3ec03f": "163940000000000000000", - "d209482bb549abc4777bea6d7f650062c9c57a1c": "320880000000000000000", - "590acbda37290c0d3ec84fc2000d7697f9a4b15d": "500000000000000000000", - "571950ea2c90c1427d939d61b4f2de4cf1cfbfb0": "20000000000000000000", - "cb94e76febe208116733e76e805d48d112ec9fca": "1000000000000000000000", - "fa8e3b1f13433900737daaf1f6299c4887f85b5f": "715000000000000000000", - "162d76c2e6514a3afb6fe3d3cb93a35c5ae783f1": "2000000000000000000000", - "4bea288eea42c4955eb9faad2a9faf4783cbddac": "28790618000000000000000", - "c8ab1a3cf46cb8b064df2e222d39607394203277": "2000000000000000000000", - "318b2ea5f0aaa879c4d5e548ac9d92a0c67487b7": "200000000000000000000", - "53c5fe0119e1e848640cee30adea96940f2a5d8b": "21746000000000000000000", - "0701f9f147ec486856f5e1b71de9f117e99e2105": "173360000000000000000", - "337cfe1157a5c6912010dd561533791769c2b6a6": "1000000000000000000000", - "fd60d2b5af3d35f7aaf0c393052e79c4d823d985": "56400000000000000000", - "0f049a8bdfd761de8ec02cee2829c4005b23c06b": "252000000000000000000", - "924bce7a853c970bb5ec7bb759baeb9c7410857b": "13700000000000000000", - "16abb8b021a710bdc78ea53494b20614ff4eafe8": "158000000000000000000", - "9e7f65a90e8508867bccc914256a1ea574cf07e3": "1240000000000000000000", - "01d03815c61f416b71a2610a2daba59ff6a6de5b": "9553100000000000000000", - "3df762049eda8ac6927d904c7af42f94e5519601": "2000000000000000000000", - "5593c9d4b664730fd93ca60151c25c2eaed93c3b": "200000000000000000000", - "e023f09b2887612c7c9cf1988e3a3a602b3394c9": "2000000000000000000000", - "4c13980c32dcf3920b78a4a7903312907c1b123f": "60024000000000000000", - "a282e969cac9f7a0e1c0cd90f5d0c438ac570da3": "627760000000000000000", - "3b22da2a0271c8efe102532773636a69b1c17e09": "502000000000000000000", - "1aa1021f550af158c747668dd13b463160f95a40": "1470000000000000000000", - "f15178ffc43aa8070ece327e930f809ab1a54f9d": "197600000000000000000", - "db1293a506e90cad2a59e1b8561f5e66961a6788": "2000000000000000000000", - "88c361640d6b69373b081ce0c433bd590287d5ec": "50000000000000000000000", - "3737216ee91f177732fb58fa4097267207e2cf55": "1520000000000000000000", - "a16d9e3d63986159a800b46837f45e8bb980ee0b": "2030400000000000000000", - "ec76f12e57a65504033f2c0bce6fc03bd7fa0ac4": "3580000000000000000000", - "d9f1b26408f0ec67ad1d0d6fe22e8515e1740624": "24000000000000000000", - "716ba01ead2a91270635f95f25bfaf2dd610ca23": "44750000000000000000000", - "42a98bf16027ce589c4ed2c95831e2724205064e": "10000000000000000000000", - "0f88aac9346cb0e7347fba70905475ba8b3e5ece": "10000000000000000000000", - "2d8c52329f38d2a2fa9cbaf5c583daf1490bb11c": "20000000000000000000", - "3cea302a472a940379dd398a24eafdbadf88ad79": "3000000000000000000000", - "a29d5bda74e003474872bd5894b88533ff64c2b5": "10000000000000000000000", - "2d23766b6f6b05737dad80a419c40eda4d77103e": "3820000000000000000000", - "b07249e055044a9155359a402937bbd954fe48b6": "100000000000000000000", - "f1e980c559a1a8e5e50a47f8fffdc773b7e06a54": "30104784000000000000000", - "8275cd684c3679d5887d03664e338345dc3cdde1": "15800000000000000000", - "b27c1a24204c1e118d75149dd109311e07c073ab": "3100000000000000000000", - "451b3699475bed5d7905f8905aa3456f1ed788fc": "2560000000000000000000", - "31ad4d9946ef09d8e988d946b1227f9141901736": "22880000000000000000000", - "52b8a9592634f7300b7c5c59a3345b835f01b95c": "2000000000000000000000", - "b161725fdcedd17952d57b23ef285b7e4b1169e8": "50071000000000000000", - "74fc5a99c0c5460503a13b0509459da19ce7cd90": "200000000000000000000", - "d99df7421b9382e42c89b006c7f087702a0757c0": "480000000000000000000", - "8a4f4a7f52a355ba105fca2072d3065fc8f7944b": "500000000000000000000", - "12316fc7f178eac22eb2b25aedeadf3d75d00177": "19999999000000000000000", - "f598db2e09a8a5ee7d720d2b5c43bb126d11ecc2": "200000000000000000000", - "37b8beac7b1ca38829d61ab552c766f48a10c32f": "400000000000000000000", - "851dc38adb4593729a76f33a8616dab6f5f59a77": "100000000000000000000", - "bf4096bc547dbfc4e74809a31c039e7b389d5e17": "3940000000000000000000", - "98d3731992d1d40e1211c7f735f2189afa0702e0": "8000000000000000000000", - "0f4073c1b99df60a1549d69789c7318d9403a814": "20000000000000000000000", - "a430995ddb185b9865dbe62539ad90d22e4b73c2": "10000000000000000000000", - "898c72dd736558ef9e4be9fdc34fef54d7fc7e08": "1000000000000000000000", - "f9b617f752edecae3e909fbb911d2f8192f84209": "2674000000000000000000", - "e1ae029b17e373cde3de5a9152201a14cac4e119": "99968000000000000000", - "d8e8474292e7a051604ca164c0707783bb2885e8": "13370000000000000000000", - "f476f2cb7208a32e051fd94ea8662992638287a2": "100000000000000000000", - "3a84e950ed410e51b7e8801049ab2634b285fea1": "18690000000000000000000", - "5b7784caea01799ca30227827667ce207c5cbc76": "2000000000000000000000", - "3af65b3e28895a4a001153391d1e69c31fb9db39": "3940000000000000000000", - "95fb5afb14c1ef9ab7d179c5c300503fd66a5ee2": "34225000000000000000", - "a8446c4781a737ac4328b1e15b8a0b3fbb0fd668": "21390500000000000000000", - "4888fb25cd50dbb9e048f41ca47d78b78a27c7d9": "17300000000000000000000", - "566c10d638e8b88b47d6e6a414497afdd00600d4": "99960000000000000000", - "bd47f5f76e3b930fd9485209efa0d4763da07568": "1000000000000000000000", - "1e1c6351776ac31091397ecf16002d979a1b2d51": "1400000000000000000000", - "edf603890228d7d5de9309942b5cad4219ef9ad7": "5000000000000000000000", - "1923cfc68b13ea7e2055803645c1e320156bd88d": "1337000000000000000000", - "8f8f37d0ad8f335d2a7101b41156b688a81a9cbe": "70000000000000000000", - "63334fcf1745840e4b094a3bb40bb76f9604c04c": "3978000000000000000000", - "001762430ea9c3a26e5749afdb70da5f78ddbb8c": "200000000000000000000", - "512116817ba9aaf843d1507c65a5ea640a7b9eec": "50000000000000000000", - "2961fb391c61957cb5c9e407dda29338d3b92c80": "999942000000000000000", - "fc2952b4c49fedd0bc0528a308495e6d6a1c71d6": "2000000000000000000000", - "13ec812284026e409bc066dfebf9d5a4a2bf801e": "1610000000000000000000", - "ef463c2679fb279164e20c3d2691358773a0ad95": "2000000000000000000000", - "3aadf98b61e5c896e7d100a3391d3250225d61df": "234000000000000000000", - "e8137fc1b2ec7cc7103af921899b4a39e1d959a1": "1490000000000000000000", - "b1a2b43a7433dd150bb82227ed519cd6b142d382": "2738000000000000000000", - "c1f39bd35dd9cec337b96f47c677818160df37b7": "20000000000000000000", - "b587b44a2ca79e4bc1dd8bfdd43a207150f2e7e0": "630400000000000000000", - "41485612d03446ec4c05e5244e563f1cbae0f197": "970000000000000000000", - "a12623e629df93096704b16084be2cd89d562da4": "8500000000000000000000", - "3f2f381491797cc5c0d48296c14fd0cd00cdfa2d": "804000000000000000000", - "9470cc36594586821821c5c996b6edc83b6d5a32": "24000000000000000000", - "3605372d93a9010988018f9f315d032ed1880fa1": "500066000000000000000", - "12632388b2765ee4452b50161d1fffd91ab81f4a": "740000000000000000000", - "274a3d771a3d709796fbc4d5f48fce2fe38c79d6": "20000000000000000000", - "d60a52580728520df7546bc1e283291788dbae0c": "999910000000000000000", - "1ab53a11bcc63ddfaa40a02b9e186496cdbb8aff": "1996800000000000000000", - "c282e6993fbe7a912ea047153ffd9274270e285b": "139939000000000000000", - "a291e9c7990d552dd1ae16cebc3fca342cbaf1d1": "20000000000000000000000", - "5547fdb4ae11953e01292b7807fa9223d0e4606a": "98940000000000000000", - "bded11612fb5c6da99d1e30e320bc0995466141e": "400000000000000000000", - "b73b4ff99eb88fd89b0b6d57a9bc338e886fa06a": "32000000000000000000", - "b1c751786939bba0d671a677a158c6abe7265e46": "10000000000000000000000", - "e881bbbe69722d81efecaa48d1952a10a2bfac8f": "16000000000000000000000", - "fe96c4cd381562401aa32a86e65b9d52fa8aee27": "2640000000000000000000", - "683dba36f7e94f40ea6aea0d79b8f521de55076e": "140000000000000000000", - "5ac2908b0f398c0df5bac2cb13ca7314fba8fa3d": "199800000000000000000", - "8914a680a5aec5226d4baaec2e5552b44dd7c874": "100076000000000000000", - "041170f581de80e58b2a045c8f7c1493b001b7cb": "889800000000000000000", - "4665e47396c7db97eb2a03d90863d5d4ba319a94": "600000000000000000000", - "ed4be04a052d7accb3dcce90319dba4020ab2c68": "37547947000000000000000", - "4b0619d9d8aa313a9531ac7dbe04ca0d6a5ad1b6": "2000000000000000000000", - "a21442ab05340ade68c915f3c3399b9955f3f7eb": "775000000000000000000", - "655934da8e744eaa3de34dbbc0894c4eda0b61f2": "200000000000000000000", - "6038740ae28d66ba93b0be08482b3205a0f7a07b": "316000000000000000000", - "99924a9816bb7ddf3fec1844828e9ad7d06bf4e6": "1760000000000000000000", - "6847825bdee8240e28042c83cad642f286a3bddc": "1500000000000000000000", - "a718aaad59bf395cba2b23e09b02fe0c89816247": "999600000000000000000", - "2c89f5fdca3d155409b638b98a742e55eb4652b7": "98500000000000000000000", - "1a7044e2383f8708305b495bd1176b92e7ef043a": "200000000000000000000", - "282e80a554875a56799fa0a97f5510e795974c4e": "1000000000000000000000", - "ffb3bcc3196a8c3cb834cec94c34fed35b3e1054": "1340000000000000000000", - "d135794b149a18e147d16e621a6931f0a40a969a": "20000000000000000000000", - "6b94615db750656ac38c7e1cf29a9d13677f4e15": "12000000000000000000000", - "ecbe425e670d39094e20fb5643a9d818eed236de": "5000000000000000000000", - "511e0efb04ac4e3ff2e6550e498295bfcd56ffd5": "668500000000000000000", - "ff65511cada259260c1ddc41974ecaecd32d6357": "1760000000000000000000", - "9ffc5fe06f33f5a480b75aa94eb8556d997a16c0": "20000000000000000000", - "57df23bebdc65eb75feb9cb2fad1c073692b2baf": "4000000000000000000000", - "207ef80b5d60b6fbffc51f3a64b8c72036a5abbd": "6685000000000000000000", - "c573e841fa08174a208b060ccb7b4c0d7697127f": "668500000000000000000", - "411610b178d5617dfab934d293f512a93e5c10e1": "170000000000000000000", - "9991614c5baa47dd6c96874645f97add2c3d8380": "1970000000000000000000", - "2d3480bf0865074a72c7759ee5137b4d70c51ce9": "200000000000000000000", - "9d40e012f60425a340d82d03a1c757bfabc706fb": "169799000000000000000", - "47648bed01f3cd3249084e635d14daa9e7ec3c8a": "194000000000000000000", - "a5ff62222d80c013cec1a0e8850ed4d354dac16d": "207600000000000000000", - "f80d3619702fa5838c48391859a839fb9ce7160f": "1992800000000000000000", - "7c0f5e072043c9ee740242197e78cc4b98cdf960": "200000000000000000000", - "a40aa2bbce0c72b4d0dfffcc42715b2b54b01bfa": "1000000000000000000000", - "2eeed50471a1a2bf53ee30b1232e6e9d80ef866d": "20000000000000000000", - "0c2808b951ed9e872d7b32790fcc5994ae41ffdc": "102000000000000000000000", - "7f06c89d59807fa60bc60136fcf814cbaf2543bd": "10000000000000000000000", - "8d4b603c5dd4570c34669515fdcc665890840c77": "18200000000000000000", - "d5e5c135d0c4c3303934711993d0d16ff9e7baa0": "2000000000000000000000", - "241361559feef80ef137302153bd9ed2f25db3ef": "20000000000000000000000", - "db63122de7037da4971531fae9af85867886c692": "277000000000000000000", - "417e4e2688b1fd66d821529e46ed4f42f8b3db3d": "2000000000000000000000", - "127db1cadf1b771cbd7475e1b272690f558c8565": "14000000000000000000000", - "48659d8f8c9a2fd44f68daa55d23a608fbe500dc": "2000000000000000000000", - "b3a64b1176724f5409e1414a3523661baee74b4a": "25610000000000000000", - "aa14422d6f0ae5a758194ed15780c838d67f1ee1": "28503824000000000000000", - "a0a0e65204541fca9b2fb282cd95138fae16f809": "10000000000000000000000", - "d2107b353726c3a2b46566eaa7d9f80b5d21dbe3": "20000000000000000000", - "e4cafb727fb5c6b70bb27533b8a9ccc9ef6888e1": "300443000000000000000", - "09f3f601f605441140586ce0656fa24aa5b1d9ae": "1539400000000000000000", - "87fcbe7c4193ffcb08143779c9bec83fe7fda9fc": "100275000000000000000", - "03ebc63fda6660a465045e235fbe6e5cf195735f": "141840000000000000000", - "bdbaf6434d40d6355b1e80e40cc4ab9c68d96116": "100000000000000000000", - "4e2225a1bb59bc88a2316674d333b9b0afca6655": "155000000000000000000", - "4dc3da13b2b4afd44f5d0d3189f444d4ddf91b1b": "2000000000000000000000", - "4ba8e0117fc0b6a3e56b24a3a58fe6cef442ff98": "5640000000000000000000", - "27146913563aa745e2588430d9348e86ea7c3510": "400000000000000000000", - "4c5afe40f18ffc48d3a1aec41fc29de179f4d297": "2000000000000000000000", - "8a810114b2025db9fbb50099a6e0cb9e2efa6bdc": "1910000000000000000000", - "2dee90a28f192d676a8773232b56f18f239e2fad": "18587970000000000000000", - "60676e92d18b000509c61de540e6c5ddb676d509": "1200000000000000000000", - "9bfc659c9c601ea42a6b21b8f17084ec87d70212": "10000000000000000000000", - "5d5d6e821c6eef96810c83c491468560ef70bfb5": "2000000000000000000000", - "d5787668c2c5175b01a8ee1ac3ecc9c8b2aba95a": "1999944000000000000000", - "33b336f5ba5edb7b1ccc7eb1a0d984c1231d0edc": "2000000000000000000000", - "3abb8adfc604f48d5984811d7f1d52fef6758270": "4475000000000000000000", - "980a84b686fc31bdc83c221058546a71b11f838a": "779471000000000000000", - "0b507cf553568daaf65504ae4eaa17a8ea3cdbf5": "2000000000000000000000", - "896009526a2c7b0c09a6f63a80bdf29d9c87de9c": "3462830000000000000000", - "9696052138338c722f1140815cf7749d0d3b3a74": "500000000000000000000", - "3831757eae7557cb8a37a4b10644b63e4d3b3c75": "200000000000000000000", - "62dc72729024375fc37cbb9c7c2393d10233330f": "2000000000000000000000", - "44098866a69b68c0b6bc168229b9603587058967": "188000000000000000000", - "25adb8f96f39492c9bb47c5edc88624e46075697": "26740000000000000000000", - "fd4de8e3748a289cf7d060517d9d38388db01fb8": "250000000000000000000", - "6be7595ea0f068489a2701ec4649158ddc43e178": "2000000000000000000000", - "d402b4f6a099ebe716cb14df4f79c0cd01c6071b": "2000000000000000000000", - "a07682000b1bcf3002f85c80c0fa2949bd1e82fd": "4000000000000000000000", - "eb4f00e28336ea09942588eeac921811c522143c": "2000000000000000000000", - "8f31c7005197ec997a87e69bec48649ab94bb2a5": "4000000000000000000000", - "e7fd8fd959aed2767ea7fa960ce1db53af802573": "1000000000000000000000", - "a8ef9ad274436042903e413c3b0c62f5f52ed584": "10000000000000000000000", - "d83ad260e9a6f432fb6ea28743299b4a09ad658c": "2000000000000000000000", - "b5c816a8283ca4df68a1a73d63bd80260488df08": "200000000000000000000", - "d7d3c75920590438b82c3e9515be2eb6ed7a8b1a": "60000000000000000000000", - "af3cb5965933e7dad883693b9c3e15beb68a4873": "2000000000000000000000", - "6e899e59a9b41ab7ea41df7517860f2acb59f4fd": "20000000000000000000000", - "527a8ca1268633a6c939c5de1b929aee92aeac8d": "900000000000000000000", - "1680cec5021ee93050f8ae127251839e74c1f1fd": "13098657000000000000000", - "ff7843c7010aa7e61519b762dfe49124a76b0e4e": "933580000000000000000000", - "140fba58dbc04803d84c2130f01978f9e0c73129": "400000000000000000000", - "0261ad3a172abf1315f0ffec3270986a8409cb25": "203500000000000000000", - "ab5a79016176320973e8cd38f6375530022531c0": "1000000000000000000000", - "fca73eff8771c0103ba3cc1a9c259448c72abf0b": "1000000000000000000000", - "07d41217badca5e0e60327d845a3464f0f27f84a": "4000000000000000000000", - "2c1c19114e3d6de27851484b8d2715e50f8a1065": "100000000000000000000", - "abd21eff954fc6a7de26912a7cbb303a6607804e": "1517000000000000000000", - "f303d5a816affd97e83d9e4dac2f79072bb0098f": "960000000000000000000", - "114cfefe50170dd97ae08f0a44544978c599548d": "863000000000000000000", - "647b85044df2cf0b4ed4882e88819fe22ae5f793": "1000032000000000000000", - "1b130d6fa51d5c48ec8d1d52dc8a227be8735c8a": "2000000000000000000000", - "0d9d3f9bc4a4c6efbd59679b69826bc1f63d9916": "600000000000000000000", - "c765e00476810947816af142d46d2ee7bca8cc4f": "500000000000000000000", - "b57b04fa23d1203fae061eac4542cb60f3a57637": "191000000000000000000", - "e192489b85a982c1883246d915b229cb13207f38": "5000000000000000000000", - "5f483ffb8f680aedf2a38f7833afdcde59b61e4b": "2000000000000000000000", - "b46d1182e5aacaff0d26b2fcf72f3c9ffbcdd97d": "3139000000000000000000", - "59c7f785c93160e5807ed34e5e534bc6188647a7": "640000000000000000000", - "18e4ce47483b53040adbab35172c01ef64506e0c": "9000000000000000000000", - "296d66b521571a4e4103a7f562c511e6aa732d81": "668500000000000000000", - "bcd99edc2160f210a05e3a1fa0b0434ced00439b": "2000000000000000000000", - "f14f0eb86db0eb68753f16918e5d4b807437bd3e": "200000000000000000000", - "60d5667140d12614b21c8e5e8a33082e32dfcf23": "20000000000000000000000", - "8ccabf25077f3aa41545344d53be1b2b9c339000": "1695400000000000000000", - "8cc0d7c016fa7aa950114aa1db094882eda274ea": "159800000000000000000", - "c71145e529c7a714e67903ee6206e4c3042b6727": "1430000000000000000000", - "c5e9939334f1252ed2ba26814487dfd2982b3128": "70000000000000000000", - "f09b3e87f913ddfd57ae8049c731dba9b636dfc3": "608000000000000000000", - "4349225a62f70aea480a029915a01e5379e64fa5": "2598000000000000000000", - "666b4f37d55d63b7d056b615bb74c96b3b01991a": "4000000000000000000000", - "8bd6b1c6d74d010d1008dba6ef835d4430b35c32": "50000000000000000000", - "7363cd90fbab5bb8c49ac20fc62c398fe6fb744c": "2000000000000000000000", - "b7479dab5022c4d5dbaaf8de171b4e951dd1a457": "80000000000000000000", - "5a5468fa5ca226c7532ecf06e1bc1c45225d7ec9": "1910000000000000000000", - "32a20d028e2c6218b9d95b445c771524636a22ef": "9500000000000000000000", - "1bd28cd5c78aee51357c95c1ef9235e7c18bc854": "2000000000000000000000", - "693492a5c51396a482881669ccf6d8d779f00951": "345827000000000000000", - "bd723b289a7367b6ece2455ed61edb49670ab9c4": "4999995000000000000000", - "1be3542c3613687465f15a70aeeb81662b65cca8": "2000000000000000000000", - "5803e68b34da121aef08b602badbafb4d12481ca": "18000000000000000000000", - "9ac907ee85e6f3e223459992e256a43fa08fa8b2": "10000000000000000000000", - "833b6a8ec8da408186ac8a7d2a6dd61523e7ce84": "16000000000000000000000", - "64628c6fb8ec743adbd87ce5e018d531d9210437": "26740000000000000000", - "566c28e34c3808d9766fe8421ebf4f2b1c4f7d77": "1970000000000000000000", - "171ad9a04bedc8b861e8ed4bddf5717813b1bb48": "400000000000000000000", - "4f85bc1fc5cbc9c001e8f1372e07505370d8c71f": "940000000000000000000", - "6d2f976734b9d0070d1883cf7acab8b3e4920fc1": "10000000000000000000000", - "357a02c0a9dfe287de447fb67a70ec5b62366647": "26740000000000000000", - "44a01fb04ac0db2cce5dbe281e1c46e28b39d878": "1999944000000000000000", - "3630c5e565ceaa8a0f0ffe32875eae2a6ce63c19": "170016000000000000000", - "334340ee4b9cdc81f850a75116d50ee9b69825bf": "2000000000000000000000", - "c0afb7d8b79370cfd663c68cc6b9702a37cd9eff": "1000000000000000000000", - "2016895df32c8ed5478269468423aea7b7fbce50": "20000000000000000000", - "1e2fe4e4a77d141ff49a0c7fbc95b0a2b283eeeb": "2000000000000000000000", - "260df8943a8c9a5dba7945327fd7e0837c11ad07": "200000000000000000000", - "32fbeed6f626fcdfd51acafb730b9eeff612f564": "2000000000000000000000", - "9bd88068e13075f3a8cac464a5f949d6d818c0f6": "6000000000000000000000", - "ab4572fbb1d72b575d69ec6ad17333873e8552fc": "1999942000000000000000", - "e44ea51063405154aae736be2bf1ee3b9be639ae": "4000000000000000000000", - "617f20894fa70e94a86a49cd74e03238f64d3cd9": "5000057000000000000000", - "3e914e3018ac00449341c49da71d04dfeeed6221": "4000000000000000000000", - "590181d445007bd0875aaf061c8d51153900836a": "2000000000000000000000", - "27987110221a880826adb2e7ab5eca78c6e31aec": "4000000000000000000000", - "06618e9d5762df62028601a81d4487d6a0ecb80e": "1337000000000000000000", - "8cc652dd13e7fe14dabbb36d5d320db9ffee8a54": "1790000000000000000000", - "8973aefd5efaee96095d9e288f6a046c97374b43": "141000000000000000000", - "dbd51cdf2c3bfacdff106221de2e19ad6d420414": "1760000000000000000000", - "25697ef20cccaa70d32d376f8272d9c1070c3d78": "200000000000000000000", - "0726c42e00f45404836eb1e280d073e7059687f5": "1623331000000000000000", - "5e0785532c7723e4c0af9357d5274b73bdddddde": "25000088000000000000000", - "38430e931d93be01b4c3ef0dc535f1e0a9610063": "10000000000000000000000", - "143d536b8b1cb84f56a39e0bc81fd5442bcacce1": "100000000000000000000", - "5c6d041da7af4487b9dc48e8e1f60766d0a56dbc": "1457800000000000000000", - "f9bfb59d538afc4874d4f5941b08c9730e38e24b": "40000000000000000000", - "83dbfd8eda01d0de8e158b16d0935fc2380a5dc7": "600000000000000000000", - "0e6cd664ad9c1ed64bf98749f40644b626e3792c": "60000000000000000000000", - "ce2e0da8934699bb1a553e55a0b85c169435bea3": "4999962000000000000000", - "a39bfee4aec9bd75bd22c6b672898ca9a1e95d32": "10000000000000000000000", - "1bc44c8761231ba1f11f5faa40fa669a013e12ce": "203586000000000000000", - "68809af5d532a11c1a4d6e32aac75c4c52b08ead": "10000000000000000000000", - "80cc21bd99f39005c58fe4a448909220218f66cb": "1000072000000000000000", - "1080c1d8358a15bc84dac8253c6883319020df2c": "2674000000000000000000", - "9eaf6a328a4076024efa6b67b48b21eedcc0f0b8": "158000000000000000000", - "1e7b5e4d1f572becf2c00fc90cb4767b4a6e33d4": "112970000000000000000", - "acbd185589f7a68a67aa4b1bd65077f8c64e4e21": "200000000000000000000", - "ff78541756ab2b706e0d70b18adb700fc4f1643d": "43250000000000000000000", - "7f0ec3db804692d4d1ea3245365aab0590075bc4": "4000000000000000000000", - "4a918032439159bb315b6725b6830dc83697739f": "343800000000000000000", - "bc1b021a78fde42d9b5226d6ec26e06aa3670090": "80000000000000000000", - "2f2523cc834f0086052402626296675186a8e582": "16000000000000000000000", - "9db2e15ca681f4c66048f6f9b7941ed08b1ff506": "4000000000000000000000", - "20b9a9e6bd8880d9994ae00dd0b9282a0beab816": "500000000000000000000", - "3bddbc8134f77d55597fc97c26d26698090604eb": "13700000000000000000", - "80c3a9f695b16db1597286d1b3a8b7696c39fa27": "100000000000000000000", - "53194d8afa3e883502767edbc30586af33b114d3": "2000000000000000000000", - "e2efd0a9bc407ece03d67e8ec8e9d283f48d2a49": "12280000000000000000000", - "1cb450920078aab2317c7db3b38af7dd298b2d41": "340000000000000000000", - "ca8276c477b4a07b80107b843594189607b53bec": "6000000000000000000000", - "147f4210ab5804940a0b7db8c14c28396b62a6bf": "2000000000000000000000", - "d3df3b53cb3b4755de54e180451cc44c9e8ae0aa": "659801000000000000000", - "f7c708015071d4fb0a3a2a09a45d156396e3349e": "3000000000000000000000", - "a8cafac32280d021020bf6f2a9782883d7aabe12": "100000000000000000000", - "399aa6f5d078cb0970882bc9992006f8fbdf3471": "1000000000000000000000", - "15669180dee29598869b08a721c7d24c4c0ee63f": "1000000000000000000000", - "bba8ab22d2fedbcfc63f684c08afdf1c175090b5": "99091000000000000000", - "5e5a441974a83d74c687ebdc633fb1a49e7b1ad7": "3000000000000000000000", - "98b769cc305cecfb629a00c907069d7ef9bc3a12": "26000000000000000000", - "c820c711f07705273807aaaa6de44d0e4b48be2e": "155000000000000000000", - "12aa7d86ddfbad301692feac8a08f841cb215c37": "137000000000000000000", - "6ff5d361b52ad0b68b1588607ec304ae5665fc98": "1940000000000000000000", - "2382a9d48ec83ea3652890fd0ee79c907b5b2dc1": "133700000000000000000", - "b2a144b1ea67b9510f2267f9da39d3f93de26642": "2000000000000000000000", - "b3e20eb4de18bd060221689894bee5aeb25351ee": "73535000000000000000", - "101a0a64f9afcc448a8a130d4dfcbee89537d854": "15200000000000000000000", - "1b826fb3c012b0d159e294ba5b8a499ff3c0e03c": "2000000000000000000000", - "aafb7b013aa1f8541c7e327bf650adbd194c208f": "1358000000000000000000", - "96eb523e832f500a017de13ec27f5d366c560eff": "307600000000000000000", - "c7bf17c4c11f98941f507e77084fffbd2dbd3db5": "1000000000000000000000", - "840ec83ea93621f034e7bb3762bb8e29ded4c479": "2500000000000000000000", - "0e9c511864a177f49be78202773f60489fe04e52": "6000000000000000000000", - "f6f1a44309051c6b25e47dff909b179bb9ab591c": "1940000000000000000000", - "63fe6bcc4b8a9850abbe75803730c932251f145b": "18200000000000000000", - "f88b58db37420b464c0be88b45ee2b95290f8cfa": "40000000000000000000", - "9d4d321177256ebd9afbda304135d517c3dc5693": "616000000000000000000", - "8c1fbe5f0aea359c5aa1fa08c8895412ca8e05a6": "1000000000000000000000", - "cb0dd7cf4e5d8661f6028943a4b9b75c914436a7": "120000000000000000000000", - "a3979a92760a135adf69d72f75e167755f1cb8c3": "100000000000000000000", - "ca22cda3606da5cad013b8074706d7e9e721a50c": "6816200000000000000000", - "157559adc55764cc6df79323092534e3d6645a66": "6000000000000000000000", - "4f52ad6170d25b2a2e850eadbb52413ff2303e7f": "3040000000000000000000", - "eed28c3f068e094a304b853c950a6809ebcb03e0": "17300000000000000000000", - "2e47f287f498233713850d3126823cc67dcee255": "14600000000000000000", - "6c359e58a13d4578a9338e335c67e7639f5fb4d7": "218000000000000000000", - "4968a2cedb457555a139295aea28776e54003c87": "10092310000000000000000", - "4041374b0feef4792e4b33691fb86897a4ff560c": "365000000000000000000", - "83e48055327c28b5936fd9f4447e73bdb2dd3376": "2674000000000000000000", - "32b7feebc5c59bf65e861c4c0be42a7611a5541a": "2212000000000000000000", - "21a6db6527467bc6dad54bc16e9fe2953b6794ed": "14000000000000000000000", - "e8ead1bb90ccc3aea2b0dcc5b58056554655d1d5": "7760000000000000000000", - "7a94b19992ceb8ce63bc92ee4b5aded10c4d9725": "16770000000000000000000", - "90e93e4dc17121487952333614002be42356498e": "1910000000000000000000", - "aab00abf5828d7ebf26b47ceaccdb8ba03325166": "10000000000000000000000", - "0a9ab2638b1cfd654d25dab018a0aebddf85fd55": "21801000000000000000", - "b12ed07b8a38ad5506363fc07a0b6d799936bdaf": "10000000000000000000000", - "f4a9d00cefa97b7a58ef9417fc6267a5069039ee": "21800000000000000000", - "04a1cada1cc751082ff8da928e3cfa000820a9e9": "40000000000000000000", - "9018cc1f48d2308e252ab6089fb99a7c1d569410": "200000000000000000000", - "895d694e880b13ccd0848a86c5ce411f88476bbf": "199955000000000000000", - "40a7f72867a7dc86770b162b7557a434ed50cce9": "1000000000000000000000", - "467ea10445827ef1e502daf76b928a209e0d4032": "2000000000000000000000", - "7553aa23b68aa5f57e135fe39fdc235eaca8c98c": "1000000000000000000000", - "31b43b015d0081643c6cda46a7073a6dfdbca825": "50019600000000000000000", - "d82fd9fdf6996bedad2843159c06f37e0924337d": "1688800000000000000000", - "24a4eb36a7e498c36f99975c1a8d729fd6b305d7": "258000000000000000000", - "91d66ea6288faa4b3d606c2aa45c7b6b8a252739": "2000000000000000000000", - "83a402438e0519773d5448326bfb61f8b20cf52d": "1520000000000000000000", - "c2fafdd30acb6d6706e9293cb02641f9edbe07b5": "1494224000000000000000", - "79dba256472db4e058f2e4cdc3ea4e8a42773833": "1460000000000000000000", - "498abdeb14c26b7b7234d70fceaef361a76dff72": "3000000000000000000000", - "7b73242d75ca9ad558d650290df17692d54cd8b8": "2000200000000000000000", - "6ec3659571b11f889dd439bcd4d67510a25be57e": "123000000000000000000", - "ab098633eeee0ccefdf632f9575456f6dd80fc86": "200000000000000000000000", - "f4a51fce4a1d5b94b0718389ba4e7814139ca738": "300000000000000000000", - "8f561b41b209f248c8a99f858788376250609cf3": "1700000000000000000000", - "05d0f4d728ebe82e84bf597515ad41b60bf28b39": "4200000000000000000000", - "dfdf43393c649caebe1bb18059decb39f09fb4e8": "400000000000000000000", - "0089508679abf8c71bf6781687120e3e6a84584d": "1800000000000000000000", - "80907f593148b57c46c177e23d25abc4aae18361": "100000000000000000000", - "94fcceadfe5c109c5eaeaf462d43873142c88e22": "4800000000000000000000", - "e89249738b7eced7cb666a663c49cbf6de8343ea": "2000000000000000000000", - "23c99ba087448e19c9701df66e0cab52368331fa": "2000000000000000000000", - "a68e0c30cba3bc5a883e540320f999c7cd558e5c": "1799869000000000000000", - "88888a57bd9687cbf950aeeacf9740dcc4d1ef59": "1820000000000000000000", - "e9b36fe9b51412ddca1a521d6e94bc901213dda8": "10000000000000000000000", - "a9145046fa3628cf5fd4c613927be531e6db1fdd": "112000000000000000000", - "e82c58c579431b673546b53a86459acaf1de9b93": "1000000000000000000000", - "bd6a474d66345bcdd707594adb63b30c7822af54": "4000000000000000000000", - "6a6159074ab573e0ee581f0f3df2d6a594629b74": "310000000000000000000", - "2e7f465520ec35cc23d68e75651bb6689544a196": "1050049000000000000000", - "ac6d02e9a46b379fac4ac9b1d7b5d47bc850ce16": "1760000000000000000000", - "bd59094e074f8d79142ab1489f148e32151f2089": "20000000000000000000", - "0ba6e46af25a13f57169255a34a4dac7ce12be04": "500000000000000000000", - "35145f620397c69cb8e00962961f0f4886643989": "6000000000000000000000", - "d84b922f7841fc5774f00e14604ae0df42c8551e": "4011000000000000000000", - "44232ff66ddad1fd841266380036afd7cf7d7f42": "200000000000000000000", - "516954025fca2608f47da81c215eedfd844a09ff": "382000000000000000000", - "e5aa0b833bb916dc19a8dd683f0ede241d988eba": "3000000000000000000000", - "80ea1acc136eca4b68c842a95adf6b7fee7eb8a2": "4000000000000000000000", - "98a0e54c6d9dc8be96276cebf4fec460f6235d85": "1969803000000000000000", - "91620f3eb304e813d28b0297556d65dc4e5de5aa": "3820000000000000000000", - "7bb984c6dbb9e279966afafda59c01d02627c804": "8050000000000000000000", - "41f489a1ec747bc29c3e5f9d8db97877d4d1b4e9": "133700000000000000000", - "8dbc3e6cb433e194f40f82b40faadb1f8b856116": "1910000000000000000000", - "889da40fb1b60f9ea9bd7a453e584cf7b1b4d9f7": "40000000000000000000", - "debbdd831e0f20ae6e378252decdf92f7cf0c658": "2000000000000000000000", - "a22ade0ddb5c6ef8d0cd8de94d82b11082cb2e91": "1020000000000000000000", - "823219a25976bb2aa4af8bad41ac3526b493361f": "2000000000000000000000", - "6d39a9e98f81f769d73aad2cead276ac1387babe": "394000000000000000000", - "751abcb6cc033059911815c96fd191360ab0442d": "8000000000000000000000", - "64d80c3b8ba68282290b75e65d8978a15a87782c": "1970000000000000000000", - "6ba8f7e25fc2d871618e24e40184199137f9f6aa": "400020000000000000000", - "25a74c2ac75dc8baa8b31a9c7cb4b7829b2456da": "2000000000000000000000", - "0f7b61c59b016322e8226cafaee9d9e76d50a1b3": "4000000000000000000000", - "7526e482529f0a14eec98871dddd0e721b0cd9a2": "20000000000000000000", - "071dd90d14d41f4ff7c413c24238d3359cd61a07": "36400000000000000000000", - "a986762f7a4f294f2e0b173279ad2c81a2223458": "20000000000000000000", - "e667f652f957c28c0e66d0b63417c80c8c9db878": "601650000000000000000", - "7b98e23cb96beee80a168069ebba8f20edd55ccf": "214500000000000000000", - "2d8e5bb8d3521695c77e7c834e0291bfacee7408": "1970000000000000000000", - "f23d01589eb12d439f7448ff54307529f191858d": "2000000000000000000000", - "abd9605b3e91acfd777830d16463478ae0fc7720": "133700000000000000000", - "eabb90d37989aab31feae547e0e6f3999ce6a35d": "2000000000000000000000", - "0abfb39b11486d79572866195ba26c630b6784db": "121500000000000000000000", - "d56a144d7af0ae8df649abae535a15983aa04d02": "5000000000000000000000", - "998c1f93bcdb6ff23c10d0dc924728b73be2ff9f": "1002750000000000000000", - "bc62b3096a91e7dc11a1592a293dd2542150d751": "1000000000000000000000", - "0c8f66c6017bce5b20347204b602b743bad78d60": "2000000000000000000000", - "4c5b3dc0e2b9360f91289b1fe13ce12c0fbda3e1": "2000000000000000000000", - "b44605552471a6eee4daab71ff3bb41326d473e0": "839200000000000000000", - "fc3d226bb36a58f526568857b0bb12d109ec9301": "2000000000000000000000", - "adc8228ef928e18b2a807d00fb3c6c79cd1d9e96": "22800000000000000000", - "9df32a501c0b781c0281022f42a1293ffd7b892a": "9000000000000000000000", - "e7da609d40cde80f00ce5b4ffb6aa9d0b03494fc": "1000000000000000000000", - "9b64d3cd8d2b73f66841b5c46bb695b88a9ab75d": "20769000000000000000", - "8e9c08f738661f9676236eff82ba6261dd3f4822": "100000000000000000000", - "deb97254474c0d2f5a7970dcdb2f52fb1098b896": "1000000000000000000000", - "b4256273962bf631d014555cc1da0dcc31616b49": "2000000000000000000000", - "23abd9e93e7957e5b636be6579051c15e5ce0b0e": "17188400000000000000000", - "382591e7217b435e8e884cdbf415fe377a6fe29e": "8022000000000000000000", - "f17adb740f45cbbde3094e7e13716f8103f563bd": "2000000000000000000000", - "61ed5596c697207f3d55b2a51aa7d50f07fa09e8": "2000000000000000000000", - "788e809741a3b14a22a4b1d937c82cfea489eebe": "7000000000000000000000", - "992646ac1acaabf5ddaba8f9429aa6a94e7496a7": "1000110000000000000000", - "51296f5044270d17707646129c86aad1645eadc1": "1337133000000000000000", - "6ee8aad7e0a065d8852d7c3b9a6e5fdc4bf50c00": "20000000000000000000", - "30db6b9b107e62102f434a9dd0960c2021f5ce4c": "599742000000000000000", - "63fc93001305adfbc9b85d29d9291a05f8f1410b": "1000000000000000000000", - "df6ed6006a6abe886ed33d95a4de28fc12183927": "910000000000000000000", - "4745ab181a36aa8cbf2289d0c45165bc7ebe2381": "39400000000000000000", - "7bb0fdf5a663b5fba28d9c902af0c811e252f298": "200000000000000000000", - "e0ff0bd9154439c4a5b7233e291d7d868af53f33": "396110000000000000000", - "09261f9acb451c3788844f0c1451a35bad5098e3": "8664000000000000000000", - "2813d263fc5ff2479e970595d6b6b560f8d6d6d1": "2000000000000000000000", - "2cd19694d1926a0fa9189edebafc671cf1b2caa5": "1000000000000000000000", - "05336e9a722728d963e7a1cf2759fd0274530fca": "915583000000000000000", - "e5b7af146986c0ff8f85d22e6cc334077d84e824": "2000000000000000000000", - "3e4fbd661015f6461ed6735cefef01f31445de3a": "16200000000000000000000", - "4f5df5b94357de948604c51b7893cddf6076baad": "3760000000000000000000", - "9567a0de811de6ff095b7ee64e7f1b83c2615b80": "267400000000000000000", - "955db3b74360b9a268677e73cea821668af6face": "30000000000000000000000", - "3e040d40cb80ba0125f3b15fdefcc83f3005da1b": "1038000000000000000000", - "43f470ed659e2991c375957e5ddec5bd1d382231": "100000000000000000000", - "047f9bf1529daf87d407175e6f171b5e59e9ff3e": "650000000000000000000", - "15e3b584056b62c973cf5eb096f1733e54c15c91": "936702000000000000000", - "c03de42a109b657a64e92224c08dc1275e80d9b2": "20000000000000000000", - "e4fc13cfcbac1b17ce7783acd423a845943f6b3a": "20000000000000000000", - "65ff874fafce4da318d6c93d57e2c38a0d73e820": "1000160000000000000000", - "8b997dbc078ad02961355da0a159f2927ed43d64": "197000000000000000000", - "2f5080b83f7e2dc0a1dd11b092ad042bff788f4c": "3338355000000000000000", - "1b3920d001c43e72b24e7ca46f0fd6e0c20a5ff2": "2000000000000000000000", - "5ade77fd81c25c0af713b10702768c1eb2f975e7": "20000000000000000000", - "acaaddcbf286cb0e215dda55598f7ff0f4ada5c6": "1000000000000000000000", - "64e0217a5b38aa40583625967fa9883690388b6f": "200000000000000000000", - "ae648155a658370f929be384f7e001047e49dd46": "13561000000000000000000", - "f7c1b443968b117b5dd9b755572fcd39ca5ec04b": "456082000000000000000", - "de027efbb38503226ed871099cb30bdb02af1335": "1000000000000000000000", - "49cf1e54be363106b920729d2d0ba46f0867989a": "268000000000000000000", - "e7f4d7fe6f561f7fa1da3005fd365451ad89df89": "200000000000000000000", - "b036916bdacf94b69e5a8a65602975eb026104dd": "20000000000000000000", - "e923c06177b3427ea448c0a6ff019b54cc548d95": "36281000000000000000", - "ad927e03d1599a78ca2bf0cad2a183dceb71eac0": "1970000000000000000000", - "ef39ca9173df15531d73e6b72a684b51ba0f2bb4": "1598000000000000000000", - "6443b8ae639de91cf73c5ae763eeeed3ddbb9253": "2000000000000000000000", - "8026435aac728d497b19b3e7e57c28c563954f2b": "1730000000000000000000", - "ed327a14d5cfadd98103fc0999718d7ed70528ea": "1440000000000000000000", - "38a3dccf2fcfe0c91a2624bd0cbf88ee4a076c33": "2000000000000000000000", - "f0b1f9e27832c6de6914d70afc238c749995ace4": "2000000000000000000000", - "770d98d31b4353fceee8560c4ccf803e88c0c4e0": "600000000000000000000", - "ba1f0e03cb9aa021f4dcebfa94e5c889c9c7bc9e": "32200000000000000000000", - "233842b1d0692fd11140cf5acda4bf9630bae5f8": "2000000000000000000000", - "b5dd50a15da34968890a53b4f13fe1af081baaaa": "4000000000000000000000", - "72072a0ef1cff3d567cdd260e708ddc11cbc9a31": "100000000000000000000", - "81a88196fac5f23c3e12a69dec4b880eb7d97310": "2000000000000000000000", - "6c63f84556d290bfcd99e434ee9997bfd779577a": "2000000000000000000000", - "5f167aa242bc4c189adecb3ac4a7c452cf192fcf": "1999980000000000000000", - "445cb8de5e3df520b499efc980f52bff40f55c76": "2000000000000000000000", - "aec27ce2133e82d052520afb5c576d9f7eb93ed2": "65232380000000000000000", - "07dc2bf83bc6af19a842ffea661af5b41b67fda1": "1500000000000000000000", - "febd48d0ffdbd5656cd5e686363a61145228f279": "2800000000000000000000", - "a86db07d9f812f4796622d40e03d135874a88a74": "20000000000000000000", - "5413c97ffa4a6e2a7bba8961dc9fce8530a787d7": "1000000000000000000000", - "e2ff9ee4b6ecc14141cc74ca52a9e7a2ee14d908": "1400000000000000000000", - "2e8eb30a716e5fe15c74233e039bfb1106e81d12": "100000000000000000000", - "fd88d114220f081cb3d5e15be8152ab07366576a": "300000000000000000000", - "e408fceaa1b98f3c640f48fcba39f056066d6308": "10000000000000000000000", - "057dd29f2d19aa3da42327ea50bce86ff5c911d9": "4000000000000000000000", - "ed1065dbcf9d73c04ffc7908870d881468c1e132": "2000000000000000000000", - "bbc9d8112e5beb02dd29a2257b1fe69b3536a945": "2000000000000000000000", - "79c1be19711f73bee4e6316ae7549459aacea2e0": "400000000000000000000", - "1bcf3441a866bdbe963009ce33c81cbb0261b02c": "182000000000000000000", - "e2e26e4e1dcf30d048cc6ecf9d51ec1205a4e926": "4000000000000000000000", - "77701e2c493da47c1b58f421b5495dee45bea39b": "6068279000000000000000", - "37a05aceb9395c8635a39a7c5d266ae610d10bf2": "30000000000000000000000", - "c6355ec4768c70a49af69513cd83a5bca7e3b9cd": "6000000000000000000000", - "e3c0c128327a9ad80148139e269773428e638cb0": "2000000000000000000000", - "f7f4898c4c526d955f21f055cb6e47b915e51964": "2288000000000000000000", - "29824e94cc4348bc963279dcdf47391715324cd3": "1940000000000000000000", - "eaa45cea02d87d2cc8fda9434e2d985bd4031584": "1920750000000000000000", - "e08b9aba6bd9d28bc2056779d2fbf0f2855a3d9d": "2000000000000000000000", - "87c498170934b8233d1ad1e769317d5c475f2f40": "1015200000000000000000", - "352d29a26e8a41818181746467f582e6e84012e0": "6000000000000000000000", - "403220600a36f73f24e190d1edb2d61be3f41354": "304000000000000000000", - "0a48296f7631708c95d2b74975bc4ab88ac1392a": "5000000000000000000000", - "ffe0e997f1977a615f5a315af413fd4869343ba0": "100076000000000000000", - "ca66b2280fa282c5b67631ce552b62ee55ad8474": "1969488000000000000000", - "2b6ed29a95753c3ad948348e3e7b1a251080ffb9": "250000000000000000000000", - "492e70f04d18408cb41e25603730506b35a2876b": "39400000000000000000", - "0e6baaa3deb989f289620076668618e9ac332865": "200000000000000000000", - "b753a75f9ed10b21643a0a3dc0517ac96b1a4068": "401800000000000000000", - "3ad915d550b723415620f5a9b5b88a85f382f035": "1000000000000000000000", - "c992be59c6721caf4e028f9e8f05c25c55515bd4": "20000000000000000000", - "02b643d6fabd437a851accbe79abb7fde126dccf": "7200000000000000000000", - "88797e58675ed5cc4c19980783dbd0c956085153": "2000000000000000000000", - "ac142eda1157b9a9a64390df7e6ae694fac98905": "200000000000000000000", - "656579daedd29370d9b737ee3f5cd9d84bc2b342": "1430000000000000000000", - "9bb9b02a26bfe1ccc3f0c6219e261c397fc5ca78": "1337000000000000000000", - "bee8d0b008421954f92d000d390fb8f8e658eaee": "1000000000000000000000", - "7989d09f3826c3e5af8c752a8115723a84d80970": "415554000000000000000", - "7cd5d81eab37e11e6276a3a1091251607e0d7e38": "62856000000000000000", - "6ce1b0f6adc47051e8ab38b39edb4186b03babcc": "1207800000000000000000", - "abfcf5f25091ce57875fc674dcf104e2a73dd2f2": "19700000000000000000", - "1c3ef05dae9dcbd489f3024408669de244c52a02": "20000000000000000000000", - "cfa8b37127149bdbfee25c34d878510951ea10eb": "2000000000000000000000", - "74863acec75d03d53e860e64002f2c165e538377": "1000000000000000000000", - "59b9e733cba4be00429b4bd9dfa64732053a7d55": "20000000000000000000", - "aeadfcd0978edad74a32bd01a0a51d37f246e661": "260000000000000000000", - "08090876baadfee65c3d363ba55312748cfa873d": "1700170000000000000000", - "e589fa76984db5ec4004b46ee8a59492c30744ce": "2800000000000000000000", - "3485361ee6bf06ef6508ccd23d94641f814d3e2f": "2000000000000000000000", - "5cb731160d2e8965670bde925d9de5510935347d": "40000000000000000000", - "8ef4d8a2c23c5279187b64e96f741404085385f3": "299598000000000000000", - "e246683cc99db7c4a52bcbacaab0b32f6bfc93d7": "2000000000000000000000", - "7d273e637ef1eac481119413b91c989dc5eac122": "500000000000000000000", - "6efba8fb2ac5b6730729a972ec224426a287c3ad": "283152000000000000000", - "0773eeacc050f74720b4a1bd57895b1cceeb495d": "10000000000000000000000", - "88a122a2382c523931fb51a0ccad3beb5b7259c3": "2000000000000000000000", - "b0b779b94bfa3c2e1f587bcc9c7e21789222378f": "1550000000000000000000", - "86f95c5b11a293940e35c0b898d8b75f08aab06d": "29605000000000000000000", - "cf2288ef4ebf88e86db13d8a0e0bf52a056582c3": "2533000000000000000000", - "71ea5b11ad8d29b1a4cb67bf58ca6c9f9c338c16": "1600000000000000000000", - "9917d68d4af341d651e7f0075c6de6d7144e7409": "5660000000000000000000", - "1e5800227d4dcf75e30f5595c5bed3f72e341e3b": "248300000000000000000", - "123759f333e13e3069e2034b4f05398918119d36": "20000000000000000000000", - "f798d16da4e460c460cd485fae0fa0599708eb82": "1000000000000000000000", - "864bec5069f855a4fd5892a6c4491db07c88ff7c": "1000000000000000000000", - "fa283299603d8758e8cab082125d2c8f7d445429": "6415633000000000000000", - "c811c2e9aa1ac3462eba5e88fcb5120e9f6e2ca2": "1400140000000000000000", - "61547d376e5369bcf978fc162c3c56ae453547e8": "200000000000000000000", - "0d747ee5969bf79d57381d6fe3a2406cd0d8ce27": "100000000000000000000000", - "f8962b75db5d24c7e8b7cef1068c3e67cebb30a5": "280000000000000000000", - "35bf6688522f35467a7f75302314c02ba176800e": "17400000000000000000000", - "05cb6c3b0072d3116761b532b218443b53e8f6c5": "141722000000000000000000", - "91c80caa081b38351d2a0e0e00f80a34e56474c1": "1000000000000000000000", - "d75a502a5b677287470f65c5aa51b87c10150572": "907400000000000000000", - "3e194b4ecef8bb711ea2ff24fec4e87bd032f7d1": "2575465000000000000000", - "736bf1402c83800f893e583192582a134eb532e9": "9999996000000000000000", - "c2cb1ada5da9a0423873814793f16144ef36b2f3": "1334326000000000000000", - "efcce06bd6089d0e458ef561f5a689480afe7000": "600000000000000000000", - "bfe6bcb0f0c07852643324aa5df5fd6225abc3ca": "74500000000000000000", - "9d799e943e306ba2e5b99c8a6858cbb52c0cf735": "300000000000000000000", - "f45b1dcb2e41dc27ffa024daadf619c11175c087": "19700000000000000000", - "08e38ee0ce48c9ca645c1019f73b5355581c56e6": "1600000000000000000000", - "2cb4c3c16bb1c55e7c6b7a19b127a1ac9390cc09": "3397053000000000000000", - "bdc02cd4330c93d6fbda4f6db2a85df22f43c233": "2000000000000000000000", - "acec91ef6941cf630ba9a3e787a012f4a2d91dd4": "80000000000000000000000", - "27ac073be79ce657a93aa693ee43bf0fa41fef04": "50000000000000000000000", - "22fe884d9037291b4d52e6285ae68dea0be9ffb5": "2000000000000000000000", - "c3107a9af3322d5238df0132419131629539577d": "492650000000000000000", - "b5cac5ed03477d390bb267d4ebd46101fbc2c3da": "197000000000000000000", - "58fb947364e7695765361ebb1e801ffb8b95e6d0": "200000000000000000000", - "32860997d730b2d83b73241a25d3667d51c908ef": "499938000000000000000", - "c79d5062c796dd7761f1f13e558d73a59f82f38b": "8000000000000000000000", - "fa142fe47eda97e6503b386b18a2bedd73ccb5b1": "850080000000000000000", - "6ca5de00817de0cedce5fd000128dede12648b3c": "20000000000000000000", - "214b743955a512de6e0d886a8cbd0282bee6d2a2": "2000000000000000000000", - "ede79ae1ff4f1606d59270216fa46ab2ddd4ecaa": "146000000000000000000", - "528101ce46b720a2214dcdae6618a53177ffa377": "508876000000000000000", - "b5870ce342d43343333673038b4764a46e925f3e": "1000000000000000000000", - "843bd3502f45f8bc4da370b323bdac3fcf5f19a6": "1476000000000000000000", - "5067f4549afbfe884c59cbc12b96934923d45db0": "1000000000000000000000", - "6f2a42e6e033d01061131929f7a6ee1538021e52": "2000000000000000000000", - "e9e1f7cb00a110edd0ebf8b377ef8a7bb856117f": "200000000000000000000", - "a387ecde0ee4c8079499fd8e03473bd88ad7522a": "1970000000000000000000", - "6dff90e6dc359d2590882b1483edbcf887c0e423": "1000000000000000000000", - "22e512149a18d369b73c71efa43e86c9edabaf1d": "1455000000000000000000", - "a3203095edb7028e6871ce0a84f548459f83300a": "4000000000000000000000", - "93b4bf3fdff6de3f4e56ba6d7799dc4b93a6548f": "19100000000000000000", - "8c75956e8fed50f5a7dd7cfd27da200f6746aea6": "1000000000000000000000", - "afc8ebe8988bd4105acc4c018e546a1e8f9c7888": "500000000000000000000", - "bf9acd4445d9c9554689cabbbab18800ff1741c2": "1000000000000000000000", - "603f2fab7afb6e017b94766069a4b43b38964923": "1656954000000000000000", - "a1f765c44fe45f790677944844be4f2d42165fbd": "3687750000000000000000", - "4dc9d5bb4b19cecd94f19ec25d200ea72f25d7ed": "2000000000000000000000", - "48f60a35484fe7792bcc8a7b6393d0dda1f6b717": "3600000000000000000000", - "588ed990a2aff44a94105d58c305257735c868ac": "16100000000000000000000", - "710be8fd5e2918468be2aabea80d828435d79612": "17600000000000000000", - "03ea6d26d080e57aee3926b18e8ed73a4e5b2826": "200000000000000000000", - "20824ba1dbebbef9846ef3d0f6c1b017e6912ec4": "7170194000000000000000", - "f7500c166f8bea2f82347606e5024be9e4f4ce99": "20000000000000000000", - "9d369165fb70b81a3a765f188fd60cbe5e7b0968": "2000000000000000000000", - "6fddbd9bca66e28765c2162c8433548c1052ed11": "82720000000000000000000", - "8b81156e698639943c01a75272ad3d35851ab282": "344946000000000000000", - "75804aac64b4199083982902994d9c5ed8828f11": "557800000000000000000", - "d6e8e97ae9839b9ee507eedb28edfb7477031439": "2000000000000000000000", - "6c808cabb8ff5fbb6312d9c8e84af8cf12ef0875": "4000086000000000000000", - "afa539586e4719174a3b46b9b3e663a7d1b5b987": "5000000000000000000000", - "f8a065f287d91d77cd626af38ffa220d9b552a2b": "1910000000000000000000", - "30e60900cacc7203f314dc604347255167fc2a0f": "2000000000000000000000", - "796f87ba617a2930b1670be92ed1281fb0b346e1": "128400000000000000000", - "f114ff0d0f24eff896edde5471dea484824a99b3": "13700000000000000000", - "0b80fc70282cbdd5fde35bf78984db3bdb120188": "1000160000000000000000", - "da7ad025ebde25d22243cb830ea1d3f64a566323": "500000000000000000000", - "65a52141f56bef98991724c6e7053381da8b5925": "60140000000000000000", - "bbc8eaff637e94fcc58d913c7770c88f9b479277": "200000000000000000000", - "0469e8c440450b0e512626fe817e6754a8152830": "2000000000000000000000", - "0727be0a2a00212048b5520fbefb953ebc9d54a0": "10000000000000000000000", - "7d858493f07415e0912d05793c972113eae8ae88": "1818000000000000000000", - "7091303116d5f2389b23238b4d656a8596d984d3": "1094014000000000000000", - "3702e704cc21617439ad4ea27a5714f2fda1e932": "1000000000000000000000", - "b87de1bcd29269d521b8761cc39cfb4319d2ead5": "1000000000000000000000", - "f639ac31da9f67271bd10402b7654e5ce763bd47": "399996000000000000000", - "e7735ec76518fc6aa92da8715a9ee3f625788f13": "1997803000000000000000", - "51277fe7c81eebd252a03df69a6b9f326e272207": "59965000000000000000", - "3b8098533f7d9bdcd307dbb23e1777ca18418936": "2000000000000000000000", - "2cba6d5d0dc204ea8a25ada2e26f5675bd5f2fdc": "1330755000000000000000", - "5c3c1c645b917543113b3e6c1c054da1fe742b9a": "800000000000000000000", - "5ecdbaeab9106ffe5d7b519696609a05baeb85ad": "20000000000000000000", - "45a820a0672f17dc74a08112bc643fd1167736c3": "199943000000000000000", - "beef94213879e02622142bea61290978939a60d7": "5728109000000000000000", - "6cd212aee04e013f3d2abad2a023606bfb5c6ac7": "1999944000000000000000", - "92698e345378c62d8eda184d94366a144b0c105b": "1400000000000000000000", - "2d5b42fc59ebda0dfd66ae914bc28c1b0a6ef83a": "206764195000000000000000", - "b7a6791c16eb4e2162f14b6537a02b3d63bfc602": "780700000000000000000", - "fa105f1a11b6e4b1f56012a27922e2ac2da4812f": "9550000000000000000000", - "2306df931a940d58c01665fa4d0800802c02edfe": "1000000000000000000000", - "f37bf78c5875154711cb640d37ea6d28cfcb1259": "200000000000000000000", - "66201bd227ae6dc6bdfed5fbde811fecfe5e9dd9": "594808000000000000000", - "2bafbf9e9ed2c219f7f2791374e7d05cb06777e7": "220000000000000000000", - "8e9b35ad4a0a86f758446fffde34269d940ceacd": "4000000000000000000000", - "1b43232ccd4880d6f46fa751a96cd82473315841": "80000000000000000000", - "6eefdc850e87b715c72791773c0316c3559b58a4": "4000000000000000000000", - "f2c03e2a38998c21648760f1e5ae7ea3077d8522": "2642456000000000000000", - "0625d06056968b002206ff91980140242bfaa499": "1000000000000000000000", - "6158e107c5eb54cb7604e0cd8dc1e07500d91c3c": "50000000000000000000", - "02477212ffdd75e5155651b76506b1646671a1eb": "1760000000000000000000", - "fa44a855e404c86d0ca8ef3324251dfb349c539e": "1552000000000000000000", - "49897fe932bbb3154c95d3bce6d93b6d732904dd": "4000000000000000000000", - "9b6641b13e172fc072ca4b8327a3bc28a15b66a9": "120000000000000000000", - "a46b4387fb4dcce011e76e4d73547d4481e09be5": "1337000000000000000000", - "72bb27cb99f3e2c2cf90a98f707d30e4a201a071": "1640000000000000000000", - "b6bfe1c3ef94e1846fb9e3acfe9b50c3e9069233": "1999944000000000000000", - "e6cb3f3124c9c9cc3834b1274bc3336456a38bac": "427382000000000000000", - "fcbc5c71ace79741450b012cf6b8d3f17db68a70": "9550000000000000000000", - "15dbb48c98309764f99ced3692dcca35ee306bac": "150000000000000000000000", - "2e10910ba6e0bc17e055556614cb87090f4d7e5b": "200000000000000000000", - "e5fbe34984b637196f331c679d0c0c47d83410e1": "2000050000000000000000", - "6d120f0caae44fd94bcafe55e2e279ef96ba5c7a": "4000000000000000000000", - "aa5afcfd8309c2df9d15be5e6a504e7d706624c5": "5846763000000000000000", - "37959c20b7e9931d72f5a8ae869dafddad3b6d5c": "200000000000000000000", - "b041310fe9eed6864cedd4bee58df88eb4ed3cac": "10000000000000000000000", - "986df47e76e4d7a789cdee913cc9831650936c9d": "5000000000000000000000", - "35aaa0465d1c260c420fa30e2629869fb6559207": "704976000000000000000", - "7f655c6789eddf455cb4b88099720639389eebac": "6000000000000000000000", - "9e3eb509278fe0dcd8e0bbe78a194e06b6803943": "940000000000000000000", - "3e9410d3b9a87ed5e451a6b91bb8923fe90fb2b5": "200000000000000000000", - "9e960dcd03d5ba99cb115d17ff4c09248ad4d0be": "200000000000000000000", - "f057aa66ca767ede124a1c5b9cc5fc94ef0b0137": "2077730000000000000000", - "f38a6ca80168537e974d14e1c3d13990a44c2c1b": "6000000000000000000000", - "229e430de2b74f442651ddcdb70176bc054cad54": "13545000000000000000", - "27bf9f44ba7d05c33540c3a53bb02cbbffe7c3c6": "2000000000000000000000", - "10389858b800e8c0ec32f51ed61a355946cc409b": "200000000000000000000", - "fd2929271e9d2095a264767e7b0df52ea0d1d400": "3000040000000000000000", - "44250d476e062484e9080a3967bf3a4a732ad73f": "20000000000000000000", - "0c67033dd8ee7f0c8ae534d42a51f7d9d4f7978f": "200000000000000000000", - "e083d34863e0e17f926b7928edff317e998e9c4b": "400000000000000000000", - "7f7192c0df1c7db6d9ed65d71184d8e4155a17ba": "79800000000000000000", - "51e7b55c2f9820eed73884361b5066a59b6f45c6": "2000000000000000000000", - "4fa983bb5e3073a8edb557effeb4f9fb1d60ef86": "1599800000000000000000", - "5a5ee8e9bb0e8ab2fecb4b33d29478be50bbd44b": "776000000000000000000", - "1f3959fc291110e88232c36b7667fc78a379613f": "18200000000000000000", - "2d7d5c40ddafc450b04a74a4dabc2bb5d665002e": "2000000000000000000000", - "5215183b8f80a9bc03d26ce91207832a0d39e620": "1000000000000000000000", - "5607590059a9fec1881149a44b36949aef85d560": "2000000000000000000000", - "f7c50f922ad16b61c6d1baa045ed816815bac48f": "12566370000000000000000", - "da10978a39a46ff0bb848cf65dd9c77509a6d70e": "2000000000000000000000", - "a7dcbba9b9bf6762c145416c506a71e3b497209c": "1999944000000000000000", - "54e01283cc8b384538dd646770b357c960d6cacd": "5000000000000000000000", - "78cf8336b328db3d87813a472b9e89b75e0cf3bc": "1000000000000000000000", - "ba24fc436753a739db2c8d40e6d4d04c528e86fa": "13000000000000000000000", - "dfe929a61c1b38eddbe82c25c2d6753cb1e12d68": "402500000000000000000", - "2b49fba29830360fcdb6da23bbfea5c0bbac5281": "20000000000000000000", - "76becae4a31d36f3cb577f2a43594fb1abc1bb96": "24860000000000000000000", - "e0cf698a053327ebd16b7d7700092fe2e8542446": "95275000000000000000", - "a3802d8a659e89a2c47e905430b2a827978950a7": "1000000000000000000000", - "75636cdb109050e43d5d6ec47e359e218e857eca": "22886800000000000000000", - "3d813ff2b6ed57b937dabf2b381d148a411fa085": "100000000000000000000", - "a9252551a624ae513719dabe5207fbefb2fd7749": "40000000000000000000", - "c749668042e71123a648975e08ed6382f83e05e2": "14000000000000000000000", - "04eca501630abce35218b174956b891ba25efb23": "1000060000000000000000", - "790f91bd5d1c5cc4739ae91300db89e1c1303c93": "2000000000000000000000", - "009560a3de627868f91fa8bfe1c1b7afaf08186b": "524000000000000000000", - "1329dd19cd4baa9fc64310efeceab22117251f12": "200000000000000000000", - "7005a772282b1f62afda63f89b5dc6ab64c84cb9": "18000000000000000000000", - "abfe936425dcc7b74b955082bbaaf2a11d78bc05": "1400000000000000000000", - "97d0d9725e3b70e675843173938ed371b62c7fac": "170000000000000000000", - "41ed2d8e7081482c919fc23d8f0091b3c82c4685": "1295460000000000000000", - "992365d764c5ce354039ddfc912e023a75b8e168": "18200000000000000000", - "e1c607c0a8a060da8f02a8eb38a013ea8cda5b8c": "805000000000000000000", - "3b2c45990e21474451cf4f59f01955b331c7d7c9": "2000000000000000000000", - "29ac2b458454a36c7e96c73a8667222a12242c71": "4000000000000000000000", - "b8555010776e3c5cb311a5adeefe9e92bb9a64b9": "4000000000000000000000", - "30380087786965149e81423b15e313ba32c5c783": "18200000000000000000", - "a2f86bc061884e9eef05640edd51a2f7c0596c69": "2000050000000000000000", - "9f98eb34d46979b0a6de8b05aa533a89b825dcf1": "86500000000000000000", - "c81fb7d20fd2800192f0aac198d6d6a37d3fcb7d": "259500000000000000000", - "a4035ab1e5180821f0f380f1131b7387c8d981cd": "20000000000000000000", - "782f52f0a676c77716d574c81ec4684f9a020a97": "850055000000000000000", - "261e0fa64c51137465eecf5b90f197f7937fdb05": "18000000000000000000000", - "276fd7d24f8f883f5a7a28295bf17151c7a84b03": "2000000000000000000000", - "a1f5b840140d5a9acef402ac3cc3886a68cad248": "2000000000000000000000", - "d2bf67a7f3c6ce56b7be41675dbbadfe7ea93a33": "400000000000000000000", - "8ee584337ddbc80f9e3498df55f0a21eacb57fb1": "20000000000000000000", - "34393c5d91b9de597203e75bac4309b5fa3d28c3": "194000000000000000000", - "114cbbbf6fb52ac414be7ec61f7bb71495ce1dfa": "3000000000000000000000", - "ab7c42c5e52d641a07ad75099c62928b7f86622f": "335940000000000000000", - "80bf995ed8ba92701d10fec49f9e7d014dbee026": "572153000000000000000", - "4a192035e2619b24b0709d56590e9183ccf2c1d9": "10000000000000000000000", - "376cd7577383e902951b60a2017ba7ea29e33576": "2000000000000000000000", - "f5437e158090b2a2d68f82b54a5864b95dd6dbea": "4010732000000000000000", - "13a5eecb38305df94971ef2d9e179ae6cebab337": "330000000000000000000", - "efc8cf1963c9a95267b228c086239889f4dfd467": "10000000000000000000000", - "db77b88dcb712fd17ee91a5b94748d720c90a994": "2000000000000000000000", - "9aaafa0067647ed999066b7a4ca5b4b3f3feaa6f": "1000000000000000000000", - "ae36f7452121913e800e0fcd1a65a5471c23846f": "164000000000000000000", - "b124bcb6ffa430fcae2e86b45f27e3f21e81ee08": "2000000000000000000000", - "f2813a64c5265d020235cb9c319b6c96f906c41e": "350000000000000000000", - "e848ca7ebff5c24f9b9c316797a43bf7c356292d": "114000000000000000000", - "21a6feb6ab11c766fdd977f8df4121155f47a1c0": "57200000000000000000", - "e95e92bbc6de07bf3a660ebf5feb1c8a3527e1c5": "18200000000000000000", - "0b369e002e1b4c7913fcf00f2d5e19c58165478f": "64520000000000000000", - "0909648c18a3ce5bae7a047ec2f868d24cdda81d": "3820000000000000000000", - "d32b45564614516c91b07fa9f72dcf787cce4e1c": "291000000000000000000", - "cf1bdb799b2ea63ce134668bdc198b54840f180b": "18200000000000000000", - "ae062c448618643075de7a0030342dced63dbad7": "825982000000000000000", - "99dfd0504c06c743e46534fd7b55f1f9c7ec3329": "2000000000000000000000", - "87fc4635263944ce14a46c75fa4a821f39ce7f72": "20000000000000000000", - "27c2d7ca504daa3d9066dc09137dc42f3aaab452": "600000000000000000000", - "cc60f836acdef3548a1fefcca13ec6a937db44a0": "86500000000000000000", - "c910a970556c9716ea53af66ddef93143124913d": "1580000000000000000000", - "8173c835646a672e0152be10ffe84162dd256e4c": "492000000000000000000", - "e989733ca1d58d9e7b5029ba5d444858bec03172": "581595000000000000000", - "86806474c358047d9406e6a07f40945bc8328e67": "6884000000000000000000", - "5395a4455d95d178b4532aa4725b193ffe512961": "1000000000000000000000", - "56397638bb3cebf1f62062794b5eb942f916171d": "2000000000000000000000", - "6958f83bb2fdfb27ce0409cd03f9c5edbf4cbedd": "20000000000000000000000", - "26ff0a51e7cece8400276978dbd6236ef162c0e6": "100020000000000000000000", - "4ca783b556e5bf53aa13c8116613d65782c9b642": "25200000000000000000000", - "15a0aec37ff9ff3d5409f2a4f0c1212aaccb0296": "1000000000000000000000", - "50378af7ef54043f892ab7ce97d647793511b108": "19700000000000000000", - "e7c6b5fc05fc748e5b4381726449a1c0ad0fb0f1": "2000000000000000000000", - "5317ecb023052ca7f5652be2fa854cfe4563df4d": "499986000000000000000", - "c94f7c35c027d47df8ef4f9df85a9248a17dd23b": "29944000000000000000", - "6a63fc89abc7f36e282d80787b7b04afd6553e71": "160000000000000000000", - "5fd3d6777ec2620ae83a05528ed425072d3ca8fd": "2000000000000000000000", - "29adcf83b6b20ac6a434abb1993cbd05c60ea2e4": "10000000000000000000000", - "8c6f9f4e5b7ae276bf58497bd7bf2a7d25245f64": "2730000000000000000000", - "d94a57882a52739bbe2a0647c80c24f58a2b4f1c": "1341230000000000000000", - "7286e89cd9de8f7a8a00c86ffdb53992dd9251d1": "1940000000000000000000", - "5773b6026721a1dd04b7828cd62b591bfb34534c": "27000000000000000000000", - "11fefb5dc1a4598aa712640c517775dfa1d91f8c": "10000000000000000000000", - "c6e324beeb5b36765ecd464260f7f26006c5c62e": "2000000000000000000000", - "118fbd753b9792395aef7a4d78d263cdcaabd4f7": "999800000000000000000", - "f8298591523e50b103f0b701d623cbf0f74556f6": "200000000000000000000", - "ab0ced762e1661fae1a92afb1408889413794825": "1910000000000000000000", - "fa67b67b4f37a0150915110ede073b05b853bda2": "647490000000000000000", - "ca122cf0f2948896b74843f49afed0ba1618eed7": "560000000000000000000", - "186b95f8e5effddcc94f1a315bf0295d3b1ea588": "1999944000000000000000", - "2915624bcb679137b8dae9ab57d11b4905eaee4b": "20000000000000000000", - "0c6845bf41d5ee273c3ee6b5b0d69f6fd5eabbf7": "3000026000000000000000", - "cb7479109b43b26657f4465f4d18c6f974be5f42": "1820000000000000000000", - "8dd6a9bae57f518549ada677466fea8ab04fd9b4": "4000000000000000000000", - "34958a46d30e30b273ecc6e5d358a212e5307e8c": "2000000000000000000000", - "2003717907a72560f4307f1beecc5436f43d21e7": "500000000000000000000", - "55ab99b0e0e55d7bb874b7cfe834de631c97ec23": "1031400000000000000000", - "79b48d2d6137c3854d611c01ea42427a0f597bb7": "191000000000000000000", - "d609ec0be70d0ad26f6e67c9d4762b52ee51122c": "1000000000000000000000", - "e8c3f045bb7d38c9d2f395b0ba8492b253230901": "9000000000000000000000", - "aaca60d9d700e78596bbbbb1f1e2f70f4627f9d8": "999996000000000000000", - "89d75b8e0831e46f80bc174188184e006fde0eae": "1000000000000000000000", - "b3667894b7863c068ad344873fcff4b5671e0689": "20000000000000000000000", - "bc1609d685b76b48ec909aa099219022f89b2ccd": "1182000000000000000000", - "88ee7f0efc8f778c6b687ec32be9e7d6f020b674": "2000000000000000000000", - "470ac5d1f3efe28f3802af925b571e63868b397d": "2000000000000000000000", - "abf8ffe0708a99b528cc1ed4e9ce4b0d0630be8c": "2263600000000000000000", - "8cee38d6595788a56e3fb94634b3ffe1fbdb26d6": "20000000000000000000000", - "19798cbda715ea9a9b9d6aab942c55121e98bf91": "1200000000000000000000", - "e25a167b031e84616d0f013f31bda95dcc6350b9": "10560000000000000000000", - "6196c3d3c0908d254366b7bca55745222d9d4db1": "4000000000000000000000", - "e8e9850586e94f5299ab494bb821a5f40c00bd04": "3820000000000000000000", - "1059cbc63e36c43e88f30008aca7ce058eeaa096": "100000000000000000000000", - "c4f2913b265c430fa1ab8adf26c333fc1d9b66f2": "20000000000000000000", - "26e9e2ad729702626417ef25de0dc800f7a779b3": "1000000000000000000000", - "0dfbd4817050d91d9d625c02053cf61a3ee28572": "340000000000000000000", - "709fe9d2c1f1ce42207c9585044a60899f35942f": "2000000000000000000000", - "7ad82caea1a8b4ed05319b9c9870173c814e06ee": "616000000000000000000", - "2a595f16eee4cb0c17d9a2d939b3c10f6c677243": "1100000000000000000000", - "a8f89dd5cc6e64d7b1eeace00702022cd7d2f03d": "700000000000000000000", - "c0a6cbad77692a3d88d141ef769a99bb9e3c9951": "100000000000000000000", - "868c23be873466d4c74c220a19b245d1787e807f": "1366481000000000000000", - "2905b192e83ce659aa355b9d0c204e3e95f9bb9a": "2160817000000000000000", - "50b9fef0a1329b02d16506255f5a2db71ec92d1f": "1325464000000000000000", - "fc10b7a67b3268d5331bfb6a14def5ea4a162ca3": "200000000000000000000", - "85eb256b51c819d60ea61a82d12c9358d59c1cae": "460000000000000000000", - "75de7e9352e90b13a59a5878ffecc7831cac4d82": "2740000000000000000000", - "d32b2c79c36478c5431901f6d700b04dbe9b8810": "396000000000000000000", - "2d0326b23f0409c0c0e9236863a133075a94ba18": "210380000000000000000", - "d2e21ed56868fab28e0947927adaf29f23ebad6c": "1994000000000000000000", - "2ad6c9d10c261819a1a0ca2c48d8c7b2a71728df": "1000000000000000000000", - "7d445267c59ab8d2a2d9e709990e09682580c49f": "1000000000000000000000", - "b6047cdf932db3e4045f4976122341537ed5961e": "20000000000000000000", - "2b3cf97311ff30f460945a9d8099f4a88e26d456": "2000000000000000000000", - "7f4f593b618c330ba2c3d5f41eceeb92e27e426c": "2775000000000000000000", - "72a2fc8675feb972fa41b50dffdbbae7fa2adfb7": "2853840000000000000000", - "076561a856455d7ef86e63f87c73dbb628a55f45": "900000000000000000000", - "03d1724fd00e54aabcd2de2a91e8462b1049dd3a": "2640000000000000000000", - "7ea0f96ee0a573a330b56897761f3d4c0130a8e3": "1337000000000000000000", - "fe65c4188d7922576909642044fdc52395560165": "4000000000000000000000", - "57883010b4ac857fedac03eab2551723a8447ffb": "1000000000000000000000", - "0729a8a4a5ba23f579d0025b1ad0f8a0d35cdfd2": "9700000000000000000000", - "e75c1fb177089f3e58b1067935a6596ef1737fb5": "99910000000000000000", - "e0e978753d982f7f9d1d238a18bd4889aefe451b": "9700000000000000000000", - "5620f46d1451c2353d6243a5d4b427130be2d407": "60000000000000000000", - "f3d688f06bbdbf50f9932c4145cbe48ecdf68904": "20000000000000000000", - "3aa948ea02397755effb2f9dc9392df1058f7e33": "850000000000000000000", - "20d1417f99c569e3beb095856530fe12d0fceaaa": "1182175000000000000000", - "ac77bdf00fd5985b5db12bbef800380abc2a0677": "1000000000000000000000", - "267a7e6e82e1b91d51deddb644f0e96dbb1f7f7e": "20000000000000000000", - "4bbcbf38b3c90163a84b1cd2a93b58b2a3348d87": "8000000000000000000000", - "4c6b93a3bec16349540cbfcae96c9621d6645010": "2000000000000000000000", - "c9308879056dfe138ef8208f79a915c6bc7e70a8": "10000000000000000000000", - "c48b693cacefdbd6cb5d7895a42e3196327e261c": "1000000000000000000000", - "a0951970dfd0832fb83bda12c23545e79041756c": "600000000000000000000", - "7cdf74213945953db39ad0e8a9781add792e4d1d": "2000000000000000000000", - "75621865b6591365606ed378308c2d1def4f222c": "3100000000000000000000", - "67d6a8aa1bf8d6eaf7384e993dfdf10f0af68a61": "198067000000000000000", - "8f0af37566d152802f1ae8f928b25af9b139b448": "200000000000000000000", - "2c6afcd4037c1ed14fa74ff6758e0945a185a8e8": "17600000000000000000", - "c1b2aa8cb2bf62cdc13a47ecc4657facaa995f98": "1000129000000000000000", - "9e8144e08e89647811fe6b72d445d6a5f80ad244": "10000000000000000000000", - "e04ff5e5a7e2af995d8857ce0290b53a2b0eda5d": "1000000000000000000000", - "03dedfcd0b3c2e17c705da248790ef98a6bd5751": "1337000000000000000000", - "698a8a6f01f9ab682f637c7969be885f6c5302bf": "19400000000000000000", - "d82c6fedbdac98af2eed10b00f32b00056ca5a6d": "200000000000000000000", - "2697b339813b0c2d964b2471eb1c606f4ecb9616": "1154000000000000000000", - "987c9bcd6e3f3990a52be3eda4710c27518f4f72": "400000000000000000000", - "c5d48ca2db2f85d8c555cb0e9cfe826936783f9e": "200000000000000000000", - "da214c023e2326ff696c00393168ce46ffac39ec": "1000000000000000000000", - "86570ab259c9b1c32c9729202f77f590c07dd612": "200000000000000000000", - "a646a95c6d6f59f104c6541d7760757ab392b08c": "4200000000000000000000", - "1933e334c40f3acbad0c0b851158206924beca3a": "7551541000000000000000", - "3552a496eba67f12be6eedab360cd13661dc7480": "300000000000000000000", - "2a9c96c19151ffcbe29a4616d0c52b3933b4659f": "69263000000000000000", - "3b7b8e27de33d3ce7961b98d19a52fe79f6c25be": "100000000000000000000000", - "a1911405cf6e999ed011f0ddcd2a4ff7c28f2526": "40000000000000000000", - "0cae108e6db99b9e637876b064c6303eda8a65c8": "3000000000000000000000", - "3883becc08b9be68ad3b0836aac3b620dc0017ef": "2000000000000000000000", - "d0abcc70c0420e0e172f97d43b87d5e80c336ea9": "10000000000000000000000", - "cbf16a0fe2745258cd52db2bf21954c975fc6a15": "300000000000000000000", - "1b23cb8663554871fbbe0d9e60397efb6faedc3e": "200000000000000000000", - "fbede32c349f3300ef4cd33b4de7dc18e443d326": "3160000000000000000000", - "5e806e845730f8073e6cc9018ee90f5c05f909a3": "9480000000000000000000", - "425c338a1325e3a1578efa299e57d986eb474f81": "2000000000000000000000", - "8bf297f8f453523ed66a1acb7676856337b93bf0": "4000000000000000000000", - "38e8a31af2d265e31a9fff2d8f46286d1245a467": "20000000000000000000", - "7edafba8984baf631a820b6b92bbc2c53655f6bd": "2000000000000000000000", - "aa0200f1d17e9c54da0647bb96395d57a78538d8": "1056000000000000000000", - "433eb94a339086ed12d9bde9cd1d458603c97dd6": "100000000000000000000000", - "cd7e47909464d871b9a6dc76a8e9195db3485e7a": "9850000000000000000000", - "5975d78d974ee5bb9e4d4ca2ae77c84b9c3b4b82": "1370000000000000000000", - "cea2896623f4910287a2bdc5be83aea3f2e6de08": "9359000000000000000000", - "cb4ad0c723da46ab56d526da0c1d25c73daff10a": "510000000000000000000", - "e2cf360aa2329eb79d2bf7ca04a27a17c532e4d8": "102000000000000000000", - "ea60549ec7553f511d2149f2d4666cbd9243d93c": "2000000000000000000000", - "cbb7be17953f2ccc93e1bc99805bf45511434e4c": "50440000000000000000000", - "3549bd40bbbc2b30095cac8be2c07a0588e0aed6": "20000000000000000000", - "6510df42a599bcb0a519cca961b488759a6f6777": "2000000000000000000000", - "ed12a1ba1fb8adfcb20dfa19582e525aa3b74524": "6685000000000000000000", - "135eb8c0e9e101deedec11f2ecdb66ae1aae8867": "20000000000000000000000", - "ee906d7d5f1748258174be4cbc38930302ab7b42": "200000000000000000000", - "253f1e742a2cec86b0d7b306e5eacb6ccb2f8554": "20040000000000000000000", - "ecd1a62802351a41568d23033004acc6c005a5d3": "50000000000000000000", - "558c54649a8a6e94722bd6d21d14714f71780534": "2000000000000000000000", - "ca657ec06fe5bc09cf23e52af7f80cc3689e6ede": "900000000000000000000", - "74bf7a5ab59293149b5c60cf364263e5ebf1aa0d": "115800000000000000000", - "7a6d781c77c4ba1fcadf687341c1e31799e93d27": "274000000000000000000", - "77028e409cc43a3bd33d21a9fc53ec606e94910e": "3880000000000000000000", - "4781a10a4df5eebc82f4cfe107ba1d8a7640bd66": "1790000000000000000000", - "78e08bc533413c26e291b3143ffa7cc9afb97b78": "200000000000000000000", - "03ef6ad20ff7bd4f002bac58d47544cf879ae728": "6895000000000000000000", - "0e3696cf1f4217b163d1bc12a5ea730f1c32a14a": "4000000000000000000000", - "825135b1a7fc1605614c8aa4d0ac6dbad08f480e": "1430000000000000000000", - "286b186d61ea1fd78d9930fe12b06537b05c3d51": "1000000000000000000000", - "8d6657f59711b1f803c6ebef682f915b62f92dc9": "2000000000000000000000", - "da8bbee182e455d2098acb338a6d45b4b17ed8b6": "2000000000000000000000", - "3f2da093bb16eb064f8bfa9e30b929d15f8e1c4c": "2000000000000000000000", - "f5d9cf00d658dd45517a48a9d3f5f633541a533d": "116400000000000000000", - "c5f64babb7033142f20e46d7aa6201ed86f67103": "2000000000000000000000", - "a2e2b5941e0c01944bfe1d5fb4e8a34b922ccfb1": "200000000000000000000", - "6114b0eae5576903f80bfb98842d24ed92237f1e": "100000000000000000000", - "38df0c4abe7ded5fe068eadf154ac691774324a4": "1790000000000000000000", - "1c2010bd662df417f2a271879afb13ef4c88a3ae": "4000000000000000000000", - "918967918cd897dd0005e36dc6c883ef438fc8c7": "140000000000000000000", - "a522de7eb6ae1250522a513133a93bd42849475c": "20000000000000000000000", - "7de442c82386154d2e993cbd1280bb7ca6b12ada": "4002000000000000000000", - "66424bd8785b8cb461102a900283c35dfa07ef6a": "40221000000000000000", - "7bbbec5e70bdead8bb32b42805988e9648c0aa97": "1000076000000000000000", - "fec06fe27b44c784b2396ec92f7b923ad17e9077": "2000000000000000000000", - "95d550427b5a514c751d73a0f6d29fb65d22ed10": "300000000000000000000", - "8dde60eb08a099d7daa356daaab2470d7b025a6b": "197000000000000000000", - "81bccbff8f44347eb7fca95b27ce7c952492aaad": "152240000000000000000", - "3995e096b08a5a726800fcd17d9c64c64e088d2b": "200000000000000000000", - "4ee13c0d41200b46d19dee5c4bcec71d82bb8e38": "7893915000000000000000", - "c41461a3cfbd32c9865555a4813137c076312360": "999999000000000000000", - "3300fb149aded65bcba6c04e9cd6b7a03b893bb1": "18200000000000000000", - "29f9286c0e738d1721a691c6b95ab3d9a797ede8": "200000000000000000000000", - "34c8e5f1330fcb4b14ca75cb2580a4b93d204e36": "2000000000000000000000", - "ec5df227bfa85d7ad76b426e1cee963bc7f519dd": "1000000000000000000000", - "797510e386f56393ced8f477378a444c484f7dad": "1000000000000000000000", - "0191eb547e7bf6976b9b1b577546761de65622e2": "1999980000000000000000", - "615a6f36777f40d6617eb5819896186983fd3731": "5910000000000000000000", - "17580b766f7453525ca4c6a88b01b50570ea088c": "100000000000000000000", - "945d96ea573e8df7262bbfa572229b4b16016b0f": "209300000000000000000", - "2de0964400c282bdd78a919c6bf77c6b5f796179": "200000000000000000000", - "304ec69a74545721d7316aef4dcfb41ac59ee2f0": "200000000000000000000", - "be2b326e78ed10e550fee8efa8f8070396522f5a": "39400000000000000000000", - "1a0841b92a7f7075569dc4627e6b76cab05ade91": "1520000000000000000000", - "5fa61f152de6123516c751242979285f796ac791": "204000000000000000000", - "68c8791dc342c373769ea61fb7b510f251d32088": "1000000000000000000000", - "4167cd48e733418e8f99ffd134121c4a4ab278c4": "3640000000000000000000", - "598aaabae9ed833d7bc222e91fcaa0647b77580b": "1800000000000000000000", - "979f30158b574b999aab348107b9eed85b1ff8c1": "970000000000000000000", - "3ad06149b21c55ff867cc3fb9740d2bcc7101231": "197000000000000000000000", - "7133843a78d939c69d4486e10ebc7b602a349ff7": "329000000000000000000", - "8bdfda6c215720eda2136f91052321af4e936c1f": "1000008000000000000000", - "3e1c53300e4c168912163c7e99b95da268ad280a": "1003200000000000000000", - "e07ebbc7f4da416e42c8d4f842aba16233c12580": "2000000000000000000000", - "bac8922c4acc7d2cb6fd59a14eb45cf3e702214b": "800000000000000000000", - "bb6c284aac8a69b75cddb00f28e145583b56bece": "2000000000000000000000", - "0372ee5508bf8163ed284e5eef94ce4d7367e522": "100000000000000000000", - "17125b59ac51cee029e4bd78d7f5947d1ea49bb2": "22000000000000000000000", - "c88ca1e6e5f4d558d13780f488f10d4ad3130d34": "1550000000000000000000", - "a825fd5abb7926a67cf36ba246a24bd27be6f6ed": "17600000000000000000", - "04241b41ecbd0bfdf1295e9d4fa59ea09e6c6186": "1870000000000000000000", - "6de4d15219182faf3aa2c5d4d2595ff23091a727": "1580000000000000000000", - "b203d29e6c56b92699c4b92d1f6f84648dc4cfbc": "400000000000000000000", - "80b42de170dbd723f454e88f7716452d92985092": "300202000000000000000", - "0a5b79d8f23b6483dbe2bdaa62b1064cc76366ae": "1969803000000000000000", - "32034e8581d9484e8af42a28df190132ec29c466": "3460000000000000000000", - "7ee604c7a9dc2909ce321de6b9b24f5767577555": "5533575000000000000000", - "a387ce4e961a7847f560075c64e1596b5641d21c": "668500000000000000000", - "fcc9d4a4262e7a027ab7519110d802c495ceea39": "6370000000000000000000", - "ff8a2ca5a81333f19998255f203256e1a819c0aa": "224000000000000000000", - "f9811fa19dadbf029f8bfe569adb18228c80481a": "200000000000000000000", - "0d1f2a57713ebc6e94de29846e8844d376665763": "5000000000000000000000", - "eab0bd148309186cf8cbd13b7232d8095acb833a": "10691800000000000000000", - "36928b55bc861509d51c8cf1d546bfec6e3e90af": "1970000000000000000000", - "30480164bcd84974ebc0d90c9b9afab626cd1c73": "800000000000000000000", - "36339f84a5c2b44ce53dfdb6d4f97df78212a7df": "321600000000000000000", - "cfeacaaed57285e0ac7268ce6a4e35ecfdb242d7": "1086400000000000000000", - "572dd8cd3fe399d1d0ec281231b7cefc20b9e4bb": "10400000000000000000000", - "5dded049a6e1f329dc4b971e722c9c1f2ade83f0": "1000000000000000000000", - "9756e176c9ef693ee1eec6b9f8b151d313beb099": "1200000000000000000000", - "01e6415d587b065490f1ed7f21d6e0f386ee6747": "2000000000000000000000", - "b4413576869c08f9512ad311fe925988a52d3414": "10000000000000000000000", - "da9f55460946d7bfb570ddec757ca5773b58429a": "507600000000000000000", - "7180b83ee5574317f21c8072b191d895d46153c3": "460000000000000000000", - "0aca9a5626913b08cfc9a66d40508dce52b60f87": "1910000000000000000000", - "5cd0e475b54421bdfc0c12ea8e082bd7a5af0a6a": "59000000000000000000", - "7edb02c61a227287611ad950696369cc4e647a68": "274000000000000000000", - "b2676841ee9f2d31c172e82303b0fe9bbf9f1e09": "200000000000000000000", - "a2222259dd9c3e3ded127084f808e92a1887302c": "162000000000000000000", - "4b3a7cc3a7d7b00ed5282221a60259f25bf6538a": "1000000000000000000000", - "e33ff987541dde5cdee0a8a96dcc3f33c3f24cc2": "200000000000000000000000", - "1e1a4828119be309bd88236e4d482b504dc55711": "2955000000000000000000", - "9b1811c3051f46e664ae4bc9c824d18592c4574a": "199955000000000000000", - "59fe00696dbd87b7976b29d1156c8842a2e17914": "2000000000000000000000", - "48010ef3b8e95e3f308f30a8cb7f4eb4bf60d965": "2000000000000000000000", - "c90300cb1d4077e6a6d7e169a460468cf4a492d7": "2000000000000000000000", - "6dedf62e743f4d2c2a4b87a787f5424a7aeb393c": "180000000000000000000", - "fb744b951d094b310262c8f986c860df9ab1de65": "52009000000000000000", - "193ac65183651800e23580f8f0ead3bb597eb8a4": "50020000000000000000", - "bf05ff5ecf0df2df887759fb8274d93238ac267d": "800000000000000000000", - "6c0e712f405c59725fe829e9774bf4df7f4dd965": "57413800000000000000000", - "2744ff67464121e35afc2922177164fa2fcb0267": "100000000000000000000", - "d09cb2e6082d693a13e8d2f68dd1dd8461f55840": "1000000000000000000000", - "bc171e53d17ac9b61241ae436deec7af452e7496": "5348000000000000000000", - "71fa22cc6d33206b7d701a163a0dab31ae4d31d6": "1610000000000000000000", - "4da8030769844bc34186b85cd4c7348849ff49e9": "10000000000000000000000", - "c8616b4ec09128cdff39d6e4b9ac86eec471d5f2": "19400000000000000000", - "407295ebd94b48269c2d569c9b9af9aa05e83e5e": "10000000000000000000000", - "d45d5daa138dd1d374c71b9019916811f4b20a4e": "576000000000000000000", - "42c6edc515d35557808d13cd44dcc4400b2504e4": "197876000000000000000", - "0bc95cb32dbb574c832fa8174a81356d38bc92ac": "2000000000000000000000", - "5a6071bcebfcba4ab57f4db96fc7a68bece2ba5b": "2000000000000000000000", - "54c93e03a9b2e8e4c3672835a9ee76f9615bc14e": "19400000000000000000", - "3c03bbc023e1e93fa3a3a6e428cf0cd8f95e1ec6": "1520000000000000000000", - "ba1531fb9e791896bcf3a80558a359f6e7c144bd": "3940000000000000000000", - "aa56a65dc4abb72f11bae32b6fbb07444791d5c9": "748600000000000000000", - "e437acbe0f6227b0e36f36e4bcf7cf613335fb68": "200000000000000000000", - "39d4a931402c0c79c457186f24df8729cf957031": "4000000000000000000000", - "e22b20c77894463baf774cc256d5bddbbf7ddd09": "1000000000000000000000", - "70a4067d448cc25dc8e70e651cea7cf84e92109e": "176000000000000000000", - "aa3925dc220bb4ae2177b2883078b6dc346ca1b2": "8000000000000000000000", - "ad57aa9d00d10c439b35efcc0becac2e3955c313": "200000000000000000000", - "e93d47a8ca885d540c4e526f25d5c6f2c108c4b8": "112640000000000000000000", - "232ce782506225fd9860a2edc14a7a3047736da2": "20000000000000000000", - "49a645e0667dfd7b32d075cc2467dd8c680907c4": "129560000000000000000", - "cf2e734042a355d05ffb2e3915b16811f45a695e": "2000000000000000000000", - "39b1c471ae94e12164452e811fbbe2b3cd7275ac": "2000000000000000000000", - "ffad3dd74e2c1f796ac640de56dc99b4c792a402": "5000000000000000000000", - "a69d7cd17d4842fe03f62a90b2fbf8f6af7bb380": "100000000000000000000", - "2001bef77b66f51e1599b02fb110194a0099b78d": "2000000000000000000000", - "95e7616424cd0961a71727247437f0069272280e": "400000000000000000000", - "c04f4bd4049f044685b883b62959ae631d667e35": "5820000000000000000000", - "ede0147ec032c3618310c1ff25690bf172193dac": "2000000000000000000000", - "66719c0682b2ac7f9e27abebec7edf8decf0ae0d": "20000000000000000000", - "45272b8f62e9f9fa8ce04420e1aea3eba9686eac": "4000000000000000000000", - "d1da0c8fb7c210e0f2ec618f85bdae7d3e734b1c": "1970000000000000000000", - "e9133e7d31845d5f2b66a2618792e869311acf66": "24050000000000000000000", - "ebb62cf8e22c884b1b28c6fa88fbbc17938aa787": "798000000000000000000", - "6205c2d5647470848a3840f3887e9b015d34755c": "1800000000000000000000", - "76ca22bcb8799e5327c4aa2a7d0949a1fcce5f29": "1524180000000000000000", - "6b925dd5d8ed6132ab6d0860b82c44e1a51f1fee": "1480000000000000000000", - "797bb7f157d9feaa17f76da4f704b74dc1038341": "3340000000000000000000", - "ae8954f8d6166de507cf61297d0fc7ca6b9e7128": "300000000000000000000", - "75c1ad23d23f24b384d0c3149177e86697610d21": "6426082000000000000000", - "805d846fb0bc02a7337226d685be9ee773b9198a": "19999800000000000000000", - "c3cb6b36af443f2c6e258b4a39553a818747811f": "1610000000000000000000", - "cea43f7075816b60bbfce68b993af0881270f6c4": "2000000000000000000000", - "e0388aeddd3fe2ad56f85748e80e710a34b7c92e": "500000000000000000000", - "e131f87efc5ef07e43f0f2f4a747b551d750d9e6": "19999000000000000000000", - "c2b2cbe65bc6c2ee7a3c75b2e47c189c062e8d8b": "20000000000000000000000", - "bd8765f41299c7f479923c4fd18f126d7229047d": "4000000000000000000000", - "c83ba6dd9549be1d3287a5a654d106c34c6b5da2": "7000000000000000000000", - "f870995fe1e522321d754337a45c0c9d7b38951c": "20000000000000000000", - "0d8ed7d0d15638330ed7e4eaccab8a458d75737e": "2000000000000000000000", - "36c510bf8d6e569bf2f37d47265dbcb502ff2bce": "30000000000000000000000", - "0eccf617844fd61fba62cb0e445b7ac68bcc1fbe": "387260000000000000000", - "ae10e27a014f0d306baf266d4897c89aeee2e974": "20000000000000000000000", - "1827039f09570294088fddf047165c33e696a492": "9550000000000000000000", - "23378f42926d0184b793b0c827a6dd3e3d334fcd": "56000000000000000000", - "467124ae7f452f26b3d574f6088894fa5d1cfb3b": "2700000000000000000000", - "aae61e43cb0d0c96b30699f77e00d711d0a3979b": "1000000000000000000000", - "15c7edb8118ee27b342285eb5926b47a855bc7a5": "20000000000000000000", - "0d5d98565c647ca5f177a2adb9d3022fac287f21": "200000000000000000000", - "7222fec7711781d26eaa4e8485f7aa3fac442483": "456000000000000000000", - "dc44275b1715baea1b0345735a29ac42c9f51b4f": "1164000000000000000000", - "04d82af9e01a936d97f8f85940b970f9d4db9936": "200000000000000000000", - "45533390e340fe0de3b3cf5fb9fc8ea552e29e62": "1460000000000000000000", - "1284f0cee9d2ff2989b65574d06ffd9ab0f7b805": "400000000000000000000", - "ed9ebccba42f9815e78233266dd6e835b6afc31b": "6000000000000000000000", - "e4324912d64ea3aef76b3c2ff9df82c7e13ae991": "2000000000000000000000", - "94c742fd7a8b7906b3bfe4f8904fc0be5c768033": "20000000000000000000000", - "62fb8bd1f0e66b90533e071e6cbe6111fef0bc63": "17600000000000000000000", - "2c83aeb02fcf067d65a47082fd977833ab1cec91": "150400000000000000000", - "06cbfa08cdd4fba737bac407be8224f4eef35828": "593459000000000000000", - "67ee406ea4a7ae6a3a381eb4edd2f09f174b4928": "1036000000000000000000", - "83c23d8a502124ee150f08d71dc6727410a0f901": "33999600000000000000000", - "f7c00cdb1f020310d5acab7b496aaa44b779085e": "1670000000000000000000", - "d096565b7c7407d06536580355fdd6d239144aa1": "250000000000000000000", - "f8d52dcc5f96cc28007b3ecbb409f7e22a646caa": "149200000000000000000", - "0c222c7c41c9b048efcce0a232434362e12d673b": "10007600000000000000000", - "503bdbd8bc421c32a443032deb2e3e4cd5ba8b4e": "2000000000000000000000", - "77da5e6c72fb36bce1d9798f7bcdf1d18f459c2e": "22380000000000000000", - "e62f98650712eb158753d82972b8e99ca3f61877": "2000000000000000000000", - "87a7c508ef71582dd9a54372f89cb01f252fb180": "200000000000000000000", - "f61283b4bd8504058ca360e993999b62cbc8cd67": "255000000000000000000", - "9ccddcb2cfc2b25b08729a0a98d9e6f0202ea2c1": "100000000000000000000", - "d460a4b908dd2b056759b488850b66a838fc77a8": "1970000000000000000000", - "5431b1d18751b98fc9e2888ac7759f1535a2db47": "2000000000000000000000", - "da2a14f9724015d79014ed8e5909681d596148f1": "48499000000000000000", - "c989434f825aaf9c552f685eba7c11db4a5fc73a": "501000000000000000000", - "2b701d16c0d3cc1e4cd85445e6ad02eea4ac012d": "600000000000000000000", - "78b978a9d7e91ee529ea4fc4b76feaf8762f698c": "32000000000000000000000", - "c89cf504b9f3f835181fd8424f5ccbc8e1bddf7d": "10000000000000000000000", - "e94941b6036019b4016a30c1037d5a6903babaad": "780000000000000000000", - "95d98d0c1069908f067a52acac2b8b534da37afd": "2054053000000000000000", - "8284923b62e68bbf7c2b9f3414d13ef6c812a904": "3880000000000000000000", - "3e5a39fdda70df1126ab0dc49a7378311a537a1f": "2400000000000000000000", - "a2ace4c993bb1e5383f8ac74e179066e814f0591": "100000000000000000000", - "0609d83a6ce1ffc9b690f3e9a81e983e8bdc4d9d": "70000000000000000000000", - "d119417c46732cf34d1a1afb79c3e7e2cd8eece4": "2000000000000000000000", - "fdb33944f2360615e5be239577c8a19ba52d9887": "601650000000000000000", - "dd95dbe30f1f1877c5dd7684aeef302ab6885192": "8372000000000000000000", - "413f4b02669ccff6806bc826fcb7deca3b0ea9bc": "20000000000000000000", - "5800cd8130839e94495d2d8415a8ea2c90e0c5cb": "200000000000000000000", - "65053191319e067a25e6361d47f37f6318f83419": "394000000000000000000", - "9bc573bcda23b8b26f9073d90c230e8e71e0270b": "999544000000000000000", - "97f7760657c1e202759086963eb4211c5f8139b9": "49770000000000000000000", - "126897a311a14ad43b78e0920100c4426bfd6bdd": "973581000000000000000", - "d5276f0cd5ffd5ffb63f98b5703d5594ede0838b": "400000000000000000000", - "e9c35c913ca1fceab461582fe1a5815164b4fd21": "8000000000000000000000", - "b43067fe70d9b55973ba58dc64dd7f311e554259": "200000000000000000000", - "6f8f0d15cc96fb7fe94f1065bc6940f8d12957b2": "1000000000000000000000", - "b1dba5250ba9625755246e067967f2ad2f0791de": "80000000000000000000000", - "72b7a03dda14ca9c661a1d469fd33736f673c8e8": "2000000000000000000000", - "e792349ce9f6f14f81d0674096befa1f9221cdea": "1685365000000000000000", - "1815279dff9952da3be8f77249dbe22243377be7": "4749800000000000000000", - "33481e856ebed48ea708a27426ef28e867f57cd1": "200000000000000000000", - "8eb8c71982a00fb84275293253f8044544b66b49": "400000000000000000000", - "65f5870f26bce089677dfc23b5001ee492483428": "5067230000000000000000", - "8e23facd12c765c36ab81a6dd34d8aa9e68918ae": "167310000000000000000", - "4912d902931676ff39fc34fe3c3cc8fb2182fa7a": "20000000000000000000", - "c09a66172aea370d9a63da04ff71ffbbfcff7f94": "2000000000000000000000", - "e969ea1595edc5c4a707cfde380929633251a2b0": "200000000000000000000", - "4f2b47e2775a1fa7178dad92985a5bbe493ba6d6": "200000000000000000000", - "cab9a97ada065c87816e6860a8f1426fe6b3d775": "1000000000000000000000", - "cdfd8217339725d7ebac11a63655f265eff1cc3d": "4999962000000000000000", - "ab4004c0403f7eabb0ea586f212156c4203d67f1": "1999944000000000000000", - "1c7cb2fe6bf3e09cbcdc187af38fa8f5053a70b6": "9970823000000000000000", - "a951b244ff50cfae591d5e1a148df6a938ef2a1a": "1734000000000000000000", - "b158db43fa62d30e65f3d09bf781c7b67372ebaa": "1999000000000000000000", - "25e037f00a18270ba5ec3420229ddb0a2ce38fa2": "10000000000000000000000", - "2aaea1f1046f30f109faec1c63ef5c7594eb08da": "4000000000000000000000", - "73d7269ff06c9ffd33754ce588f74a966abbbbba": "6600000000000000000000", - "4c767b65fd91161f4fbdcc6a69e2f6ad711bb918": "720000000000000000000", - "92ae5b7c7eb492ff1ffa16dd42ad9cad40b7f8dc": "865000000000000000000", - "a04f2ae02add14c12faf65cb259022d0830a8e26": "100000000000000000000000", - "63ef2fbc3daf5edaf4a295629ccf31bcdf4038e5": "1460000000000000000000", - "749ad6f2b5706bbe2f689a44c4b640b58e96b992": "100000000000000000000", - "4d836d9d3b0e2cbd4de050596faa490cffb60d5d": "300000000000000000000", - "59f6247b0d582aaa25e5114765e4bf3c774f43c2": "50000000000000000000", - "1293c78c7d6a443b9d74b0ba5ee7bb47fd418588": "6685000000000000000000", - "67bc85e87dc34c4e80aafa066ba8d29dbb8e438e": "402500000000000000000", - "a09f4d5eaa65a2f4cb750a49923401dae59090af": "140000000000000000000", - "ebbd4db9019952d68b1b0f6d8cf0683c00387bb5": "332330000000000000000", - "b16479ba8e7df8f63e1b95d149cd8529d735c2da": "846477000000000000000", - "e1b2aca154b8e0766c4eba30bc10c7f35036f368": "19980000000000000000", - "5c464197791c8a3da3c925436f277ab13bf2faa2": "8000000000000000000000", - "170a88a8997f92d238370f1affdee6347050b013": "3000800000000000000000", - "dadbfafd8b62b92a24efd75256dd83abdbd7bbdb": "19700000000000000000", - "bb993b96ee925ada7d99d786573d3f89180ce3aa": "2000000000000000000000", - "f2c362b0ef991bc82fb36e66ff75932ae8dd8225": "74000000000000000000", - "7f2382ffd8f83956467937f9ba72374623f11b38": "600000000000000000000", - "74d1a4d0c7524e018d4e06ed3b648092b5b6af2c": "50000000000000000000", - "24a750eae5874711116dd7d47b7186ce990d3103": "200000000000000000000", - "a8e42a4e33d7526cca19d9a36dcd6e8040d0ea73": "1080000000000000000000", - "3e1b2230afbbd310b4926a4c776d5ae7819c661d": "30000000000000000000000", - "6af9f0dfeeaebb5f64bf91ab771669bf05295553": "400000000000000000000", - "41e4a20275e39bdcefeb655c0322744b765140c2": "10000000000000000000000", - "ceb089ec8a78337e8ef88de11b49e3dd910f748f": "1000000000000000000000", - "e6bcd30a8fa138c5d9e5f6c7d2da806992812dcd": "260000000000000000000000", - "e08c60313106e3f9334fe6f7e7624d211130c077": "40000000000000000000", - "f5cffbba624e7eb321bc83c60ca68199b4e36671": "2000000000000000000000", - "d7c2803ed7b0e0837351411a8e6637d168bc5b05": "29549015000000000000000", - "0f3665d48e9f1419cd984fc7fa92788710c8f2e4": "2000000000000000000000", - "b48921c9687d5510744584936e8886bdbf2df69b": "1000000000000000000000", - "a94bbb8214cf8da0c2f668a2ac73e86248528d4b": "960000000000000000000", - "be0c2a80b9de084b172894a76cf4737a4f529e1a": "1999944000000000000000", - "fcf199f8b854222f182e4e1d099d4e323e2aae01": "1000000000000000000000", - "b52dfb45de5d74e3df208332bc571c809b8dcf32": "6000000000000000000000", - "704819d2e44d6ed1da25bfce84c49fcca25613e5": "400000000000000000000", - "6ff6cc90d649de4e96cffee1077a5b302a848dcb": "28600000000000000000", - "4d9c77d0750c5e6fbc247f2fd79274686cb353d6": "20000000000000000000", - "68e8022740f4af29eb48db32bcecddfd148d3de3": "1000000000000000000000", - "2cb615073a40dcdb99faa848572e987b3b056efb": "799600000000000000000", - "64adcceec53dd9d9dd15c8cc1a9e736de4241d2c": "56000000000000000000", - "2aec809df9325b9f483996e99f7331097f08aa0e": "4000000000000000000000", - "438c2f54ff8e629bab36b1442b760b12a88f02ae": "2000000000000000000000", - "9e35399071a4a101e9194daa3f09f04a0b5f9870": "4000000000000000000000", - "a5c336083b04f9471b8c6ed73679b74d66c363ec": "3014100000000000000000", - "7ad3f307616f19dcb143e6444dab9c3c33611f52": "50000000000000000000", - "455cb8ee39ffbc752331e5aefc588ef0ee593454": "999963000000000000000", - "c4c01afc3e0f045221da1284d7878574442fb9ac": "7419944000000000000000", - "99268327c373332e06c3f6164287d455b9d5fa4b": "2000000000000000000000", - "4367ae4b0ce964f4a54afd4b5c368496db169e9a": "2000000000000000000000", - "2cd79eb52027b12c18828e3eaab2969bfcd287e9": "20000000000000000000", - "b96841cabbc7dbd69ef0cf8f81dff3c8a5e21570": "12000000000000000000000", - "d7ebddb9f93987779b680155375438db65afcb6a": "100600000000000000000", - "0631d18bbbbd30d9e1732bf36edae2ce8901ab80": "3024800000000000000000", - "5fad960f6b2c84569c9f4d47bf1985fcb2c65da6": "999972000000000000000", - "01d599ee0d5f8c38ab2d392e2c65b74c3ce31820": "510000000000000000000", - "ff0cc8dac824fa24fc3caa2169e6e057cf638ad6": "4000000000000000000000", - "c25266c7676632f13ef29be455ed948add567792": "1337000000000000000000", - "9c344098ba615a398f11d009905b177c44a7b602": "1000000000000000000000", - "3b0accaf4b607cfe61d17334c214b75cdefdbd89": "2000000000000000000000", - "6d6634b5b8a40195d949027af4828802092ceeb6": "3000000000000000000000", - "208c45732c0a378f17ac8324926d459ba8b658b4": "2955000000000000000000", - "c24399b4bf86f7338fbf645e3b22b0e0b7973912": "2000000000000000000000", - "29763dd6da9a7c161173888321eba6b63c8fb845": "328000000000000000000", - "9c2fd54089af665df5971d73b804616039647375": "1000000000000000000000", - "0e09646c99af438e99fa274cb2f9c856cb65f736": "1910000000000000000000", - "be73274d8c5aa44a3cbefc8263c37ba121b20ad3": "500000000000000000000", - "ecfd004d02f36cd4d8b4a8c1a9533b6af85cd716": "5003800000000000000000", - "f978b025b64233555cc3c19ada7f4199c9348bf7": "400000000000000000000000", - "705ddd38355482b8c7d3b515bda1500dd7d7a817": "400000000000000000000", - "2b8a0dee5cb0e1e97e15cfca6e19ad21f995efad": "504206000000000000000", - "1098cc20ef84bad5146639c4cd1ca6c3996cb99b": "18200000000000000000", - "afdac5c1cb56e245bf70330066a817eaafac4cd1": "20000000000000000000", - "910e996543344c6815fb97cda7af4b8698765a5b": "103400000000000000000", - "94612781033b57b146ee74e753c672017f5385e4": "3600000000000000000000", - "d03fc165576aaed525e5502c8e140f8b2e869639": "6850000000000000000000", - "293384c42b6f8f2905ce52b7205c2274376c612b": "1400000000000000000000", - "09ee12b1b42b05af9cf207d5fcac255b2ec411f2": "58929000000000000000", - "dbd71efa4b93c889e76593de609c3b04cbafbe08": "20000000000000000000", - "fa86ca27bf2854d98870837fb6f6dfe4bf6453fc": "322061000000000000000", - "61ff8e67b34d9ee6f78eb36ffea1b9f7c15787af": "1640000000000000000000", - "6d4cbf3d8284833ae99344303e08b4d614bfda3b": "12000000000000000000000", - "2ff160c44f72a299b5ec2d71e28ce5446d2fcbaf": "360000000000000000000", - "94a7cda8f481f9d89d42c303ae1632b3b709db1d": "300000000000000000000", - "7566496162ba584377be040a4f87777a707acaeb": "4000000000000000000000", - "bdc461462b6322b462bdb33f22799e8108e2417d": "668500000000000000000", - "7e47637e97c14622882be057bea229386f4052e5": "440000000000000000000", - "3b5c251d7fd7893ba209fe541cecd0ce253a990d": "30000000000000000000000", - "0e498800447177b8c8afc3fdfa7f69f4051bb629": "2140234000000000000000", - "b71623f35107cf7431a83fb3d204b29ee0b1a7f4": "19700000000000000000", - "1d395b30adda1cf21f091a4f4a7b753371189441": "100000000000000000000000", - "2c2428e4a66974edc822d5dbfb241b2728075158": "2000000000000000000000", - "a575f2891dcfcda83c5cf01474af11ee01b72dc2": "100076000000000000000", - "ad728121873f0456d0518b80ab6580a203706595": "500000000000000000000", - "48669eb5a801d8b75fb6aa58c3451b7058c243bf": "30940000000000000000000", - "b3ae54fba09d3ee1d6bdd1e957923919024c35fa": "65513000000000000000", - "0d35408f226566116fb8acdaa9e2c9d59b76683f": "940000000000000000000", - "df211cd21288d6c56fae66c3ff54625dd4b15427": "2500024000000000000000", - "8a746c5d67064711bfca685b95a4fe291a27028e": "40000000000000000000", - "1cf105ab23023b554c583e86d7921179ee83169f": "1970000000000000000000", - "8cfedef198db0a9143f09129b3fd64dcbb9b4956": "2000000000000000000000", - "1e381adcf801a3bf9fd7bfac9ccc2b8482ad5e66": "600200000000000000000", - "e74608f506866ada6bfbfdf20fea440be76989ef": "1999944000000000000000", - "27e63989ca1e903bc620cf1b9c3f67b9e2ae6581": "1337000000000000000000", - "bb0857f1c911b24b86c8a70681473fe6aaa1cce2": "100000000000000000000", - "4f8e8d274fb22a3fd36a47fe72980471544b3434": "200000000000000000000", - "127d3fc5003bf63c0d83e93957836515fd279045": "111890000000000000000", - "95809e8da3fbe4b7f281f0b8b1715f420f7d7d63": "2000000000000000000000", - "28904bb7c4302943b709b14d7970e42b8324e1a1": "10027500000000000000000", - "c07e3867ada096807a051a6c9c34cc3b3f4ad34a": "1788210000000000000000", - "f0b469eae89d400ce7d5d66a9695037036b88903": "20000000000000000000000", - "7445202f0c74297a004eb3726aa6a82dd7c02fa1": "2000000000000000000000", - "c58f62fee9711e6a05dc0910b618420aa127f288": "3980000000000000000000", - "801d65c518b11d0e3f4f470221417013c8e53ec5": "4000000000000000000000", - "41010fc8baf8437d17a04369809a168a17ca56fb": "100000000000000000000", - "a1998144968a5c70a6415554cefec2824690c4a5": "20000000000000000000", - "e9559185f166fc9513cc71116144ce2deb0f1d4b": "20000000000000000000000", - "ed5b4c41e762d942404373caf21ed4615d25e6c1": "2013960000000000000000", - "665b000f0b772750cc3c217a5ef429a92bf1ccbb": "4000000000000000000000", - "febd9f81cf78bd5fb6c4b9a24bd414bb9bfa4c4e": "1990019000000000000000", - "a072691c8dd7cd4237ff72a75c1a9506d0ce5b9e": "370000000000000000000", - "6765df25280e8e4f38d4b1cf446fc5d7eb659e34": "100000000000000000000", - "524fb210522c5e23bb67dfbf8c26aa616da49955": "999971000000000000000", - "e987e6139e6146a717fef96bc24934a5447fe05d": "2000000000000000000000", - "d6110276cfe31e42825a577f6b435dbcc10cf764": "1000000000000000000000", - "5e51b8a3bb09d303ea7c86051582fd600fb3dc1a": "20000000000000000000", - "5c4f24e994ed8f850ea7818f471c8fac3bcf0452": "1724800000000000000000", - "85b2998d0c73302cb2ba13f489313301e053be15": "10000000000000000000000", - "0af6c8d539c96d50259e1ba6719e9c8060f388c2": "1000000000000000000000", - "7d901b28bf7f88ef73d8f73cca97564913ea8a24": "955000000000000000000", - "e01859f242f1a0ec602fa8a3b0b57640ec89075e": "555000000000000000000", - "c66ae4cee87fb3353219f77f1d6486c580280332": "29550000000000000000", - "2d40558b06f90a3923145592123b6774e46e31f4": "1000000000000000000000", - "ccf43975b76bfe735fec3cb7d4dd24f805ba0962": "60000000000000000000", - "1703b4b292b8a9deddede81bb25d89179f6446b6": "19690000000000000000000", - "0e9096d343c060db581a120112b278607ec6e52b": "20000000000000000000", - "f65819ac4cc14c137f05dd7977c7dae08d1a4ab5": "102000000000000000000", - "ca373fe3c906b8c6559ee49ccd07f37cd4fb5266": "1790000000000000000000", - "d28298524df5ec4b24b0ffb9df85170a145a9eb5": "287700000000000000000", - "5fcda847aaf8d7fa8bca08029ca2849166aa15a3": "623350000000000000000", - "bdc739a699700b2e8e2c4a4c7b058a0e513ddebe": "2000000000000000000000", - "0bb05f7224bb5804856556c07eeadbed87ba8f7c": "401100000000000000000", - "ab416fe30d58afe5d9454c7fce7f830bcc750356": "114515000000000000000", - "3eee6f1e96360b7689b3069adaf9af8eb60ce481": "1000000000000000000000", - "9a0d3cee3d9892ea3b3700a27ff84140d9025493": "60000000000000000000", - "5dc36de5359450a1ec09cb0c44cf2bb42b3ae435": "1117500000000000000000", - "35c8adc11125432b3b77acd64625fe58ebee9d66": "2000000000000000000000", - "a5e9cd4b74255d22b7d9b27ae8dd43ed6ed0252b": "766527000000000000000", - "31ea12d49a35a740780ddeeaece84c0835b26270": "200000000000000000000", - "7aef7b551f0b9c46e755c0f38e5b3a73fe1199f5": "1490000000000000000000", - "cc6d7b12061bc96d104d606d65ffa32b0036eb07": "10000000000000000000000", - "322021022678a0166d204b3aaa7ad4ec4b88b7d0": "400000000000000000000", - "b31196714a48dff726ea9433cd2912f1a414b3b3": "2680000000000000000000", - "0f2fb884c8aaff6f543ac6228bd08e4f60b0a5fd": "3145000000000000000000", - "7d9d221a3df89ddd7b5f61c1468c6787d6b333e6": "138000000000000000000", - "367f59cc82795329384e41e1283115e791f26a01": "2000000000000000000000", - "fd9579f119bbc819a02b61e38d8803c942f24d32": "105600000000000000000", - "3e2f26235e137a7324e4dc154b5df5af46ea1a49": "22458000000000000000", - "4c1579af3312e4f88ae93c68e9449c2e9a68d9c4": "2000000000000000000000", - "ffb04726dfa41afdc819168418610472970d7bfc": "4000000000000000000000", - "403c64896a75cad816a9105e18d8aa5bf80f238e": "985000000000000000000", - "5cd588a14ec648ccf64729f9167aa7bf8be6eb3d": "1000000000000000000000", - "24b2be118b16d8b2174769d17b4cf84f07ca946d": "2000000000000000000000", - "d3bb59fa31258be62f8ed232f1a7d47b4a0b41ee": "100000000000000000000", - "cc9ac715cd6f2610c52b58676456884297018b29": "13370000000000000000", - "6f2a31900e240395b19f159c1d00dfe4d898ebdf": "1999600000000000000000", - "d60b247321a32a5affb96b1e279927cc584de943": "2265500000000000000000", - "f7a1ade2d0f529123d1055f19b17919f56214e67": "500000000000000000000", - "bea00df17067a43a82bc1daecafb6c14300e89e6": "1820000000000000000000", - "a2968fc1c64bac0b7ae0d68ba949874d6db253f4": "20000000000000000000000", - "92d8ad9a4d61683b80d4a6672e84c20d62421e80": "20000000000000000000", - "6ed2a12b02f8c688c7b5d3a6ea14d63687dab3b6": "2000000000000000000000", - "7a63869fc767a4c6b1cd0e0649f3634cb121d24b": "77500000000000000000", - "84f522f0520eba52dd18ad21fa4b829f2b89cb97": "4949566000000000000000", - "d6234aaf45c6f22e66a225ffb93add629b4ef80f": "1000000000000000000000", - "e3d8bf4efe84b1616d1b89e427ddc6c8830685ae": "2000000000000000000000", - "a3db364a332d884ba93b2617ae4d85a1489bea47": "1700000000000000000000", - "9f7986924aeb02687cd64189189fb167ded2dd5c": "985000000000000000000", - "2eaf4e2a46b789ccc288c8d1d9294e3fb0853896": "2000000000000000000000", - "a02dc6aa328b880de99eac546823fccf774047fb": "1970000000000000000000", - "873b7f786d3c99ff012c4a7cae2677270240b9c5": "1730000000000000000000", - "1d69c83d28ff0474ceebeacb3ad227a144ece7a3": "5474937000000000000000", - "7b827cae7ff4740918f2e030ab26cb98c4f46cf5": "7460000000000000000000", - "3083ef0ed4c4401196774a95cf4edc83edc1484f": "170000000000000000000000", - "40ad74bc0bce2a45e52f36c3debb1b3ada1b7619": "6790000000000000000000", - "05423a54c8d0f9707e704173d923b946edc8e700": "127543000000000000000", - "22eb7db0ba56b0f8b816ccb206e615d929185b0d": "80500000000000000000", - "66082c75a8de31a53913bbd44de3a0374f7faa41": "1460000000000000000000", - "e3d3eaa299887865569e88be219be507189be1c9": "456156000000000000000", - "ae57cc129a96a89981dac60d2ffb877d5dc5e432": "1110994000000000000000", - "1a2434cc774422d48d53d59c5d562cce8407c94b": "30000000000000000000", - "21546914dfd3af2add41b0ff3e83ffda7414e1e0": "5969100000000000000000", - "4dcf62a3de3f061db91498fd61060f1f6398ff73": "1999944000000000000000", - "6fd98e563d12ce0fd60f4f1f850ae396a9823c02": "1261000000000000000000", - "edf8a3e1d40f13b79ec8e3e1ecf262fd92116263": "158000000000000000000", - "c09e3cfc19f605ff3ec9c9c70e2540d7ee974366": "500000000000000000000", - "953572f0ea6df9b197cae40e4b8ecc056c4371c5": "1000000000000000000000", - "163cc8be227646cb09719159f28ed09c5dc0dce0": "1337000000000000000000", - "a3932a31d6ff75fb3b1271ace7caa7d5e1ff1051": "20000000000000000000000", - "f9a94bd56198da245ed01d1e6430b24b2708dcc0": "749938000000000000000", - "3eb8b33b21d23cda86d8288884ab470e164691b5": "500000000000000000000", - "84bcbf22c09607ac84341d2edbc03bfb1739d744": "500000000000000000000", - "961c59adc74505d1864d1ecfcb8afa0412593c93": "40000000000000000000000", - "f068dfe95d15cd3a7f98ffa688b4346842be2690": "1255160000000000000000", - "291efe0081dce8c14799f7b2a43619c0c3b3fc1f": "1200000000000000000000", - "be4fd073617022b67f5c13499b827f763639e4e3": "2000000000000000000000", - "e40a7c82e157540a0b00901dbb86c716e1a062da": "49800000000000000000", - "6635b46f711d2da6f0e16370cd8ee43efb2c2d52": "2000000000000000000000", - "43748928e8c3ec4436a1d092fbe43ac749be1251": "400000000000000000000", - "b557ab9439ef50d237b553f02508364a466a5c03": "200000000000000000000", - "11928378d27d55c520ceedf24ceb1e822d890df0": "8000000000000000000000", - "61518464fdd8b73c1bb6ac6db600654938dbf17a": "200000000000000000000", - "004bfbe1546bc6c65b5c7eaa55304b38bbfec6d3": "2000000000000000000000", - "a5e0fc3c3affed3db6710947d1d6fb017f3e276d": "2000000000000000000000", - "8ecbcfacbfafe9f00c3922a24e2cf0026756ca20": "5640000000000000000000", - "fb5ffaa0f7615726357891475818939d2037cf96": "20000000000000000000", - "ae222865799079aaf4f0674a0cdaab02a6d570ff": "2000000000000000000000", - "9edc90f4be210865214ab5b35e5a8dd77415279d": "4000000000000000000000", - "9d7831e834c20b1baa697af1d8e0c621c5afff9a": "86500000000000000000", - "046d274b1af615fb505a764ad8dda770b1db2f3d": "2000000000000000000000", - "eaea23aa057200e7c9c15e8ff190d0e66c0c0e83": "2000000000000000000000", - "417a3cd19496530a6d4204c3b5a17ce0f207b1a5": "8000000000000000000000", - "a035a3652478f82dbd6d115faa8ca946ec9e681d": "109880000000000000000", - "4f5801b1eb30b712d8a0575a9a71ff965d4f34eb": "300000000000000000000", - "91dbb6aaad149585be47375c5d6de5ff09191518": "20000000000000000000000", - "d043a011ec4270ee7ec8b968737515e503f83028": "500000000000000000000", - "bb371c72c9f0316cea2bd9c6fbb4079e775429ef": "1760000000000000000000", - "aa1df92e51dff70b1973e0e924c66287b494a178": "534400000000000000000", - "bd5f46caab2c3d4b289396bbb07f203c4da82530": "80000000000000000000", - "4d29fc523a2c1629532121da9998e9b5ab9d1b45": "15800000000000000000", - "addb26317227f45c87a2cb90dc4cfd02fb23caf8": "1000000000000000000000", - "52e46783329a769301b175009d346768f4c87ee4": "2000000000000000000000", - "caad9dc20d589ce428d8fda3a9d53a607b7988b5": "4000000000000000000000", - "95034e1621865137cd4739b346dc17da3a27c34e": "1580000000000000000000", - "0c3239e2e841242db989a61518c22247e8c55208": "263656000000000000000", - "5a0d609aae2332b137ab3b2f26615a808f37e433": "160000000000000000000000", - "2334c590c7a48769103045c5b6534c8a3469f44a": "17443200000000000000000", - "ddfcca13f934f0cfbe231da13039d70475e6a1d0": "1000169000000000000000", - "ee7288d91086d9e2eb910014d9ab90a02d78c2a0": "2000000000000000000000", - "fb91fb1a695553f0c68e21276decf0b83909b86d": "100016000000000000000", - "38695fc7e1367ceb163ebb053751f9f68ddb07a0": "2000000000000000000000", - "65093b239bbfba23c7775ca7da5a8648a9f54cf7": "400000000000000000000", - "73d8fee3cb864dce22bb26ca9c2f086d5e95e63b": "1000000000000000000000", - "f7155213449892744bc60f2e04400788bd041fdd": "66850000000000000000", - "d1a71b2d0858e83270085d95a3b1549650035e23": "14900000000000000000000", - "eac17b81ed5191fb0802aa54337313834107aaa4": "8000000000000000000000", - "bb076aac92208069ea318a31ff8eeb14b7e996e3": "149000000000000000000", - "9f46e7c1e9078cae86305ac7060b01467d6685ee": "668500000000000000000", - "1598127982f2f8ad3b6b8fc3cf27bf617801ba2b": "173000000000000000000", - "e91dac0195b19e37b59b53f7c017c0b2395ba44c": "1880000000000000000000", - "a436c75453ccca4a1f1b62e5c4a30d86dde4be68": "2000000000000000000000", - "11001b89ed873e3aaec1155634b4681643986323": "1000000000000000000000", - "ab93b26ece0a0aa21365afed1fa9aea31cd54468": "1608000000000000000000", - "e77febabdf080f0f5dca1d3f5766f2a79c0ffa7c": "1386000000000000000000", - "1c4af0e863d2656c8635bc6ffec8dd9928908cb5": "2000000000000000000000", - "0c48ae62d1539788eba013d75ea60b64eeba4e80": "2213311000000000000000", - "423cc4594cf4abb6368de59fd2b1230734612143": "2000000000000000000000", - "7f6b28c88421e4857e459281d78461692489d3fb": "2000000000000000000000", - "806854588ecce541495f81c28a290373df0274b2": "582000000000000000000", - "dc76e85ba50b9b31ec1e2620bce6e7c8058c0eaf": "20000000000000000000", - "b00996b0566ecb3e7243b8227988dcb352c21899": "12000000000000000000000", - "f5d14552b1dce0d6dc1f320da6ffc8a331cd6f0c": "1337000000000000000000", - "55a61b109480b5b2c4fcfdef92d90584160c0d35": "44700000000000000000", - "b8947822d5ace7a6ad8326e95496221e0be6b73d": "20000000000000000000", - "492de46aaf8f1d708d59d79af1d03ad2cb60902f": "2000000000000000000000", - "0e0d6633db1e0c7f234a6df163a10e0ab39c200f": "200000000000000000000", - "f8bf9c04874e5a77f38f4c38527e80c676f7b887": "2000000000000000000000", - "15528350e0d9670a2ea27f7b4a33b9c0f9621d21": "4000086000000000000000", - "eccf7a0457b566b346ca673a180f444130216ac3": "100000000000000000000", - "10cf560964ff83c1c9674c783c0f73fcd89943fc": "40000000000000000000000", - "e7f06f699be31c440b43b4db0501ec0e25261644": "500000000000000000000", - "b6ce4dc560fc73dc69fb7a62e388db7e72ea764f": "966000000000000000000", - "f456055a11ab91ff668e2ec922961f2a23e3db25": "18200000000000000000", - "8dfbafbc0e5b5c86cd1ad697feea04f43188de96": "390060000000000000000", - "085b4ab75d8362d914435cedee1daa2b1ee1a23b": "3880000000000000000000", - "e400d651bb3f2d23d5f849e6f92d9c5795c43a8a": "2674000000000000000000", - "851aa91c82f42fad5dd8e8bb5ea69c8f3a5977d1": "148607000000000000000", - "4c935bb250778b3c4c7f7e07fc251fa630314aab": "1500000000000000000000", - "ebd356156a383123343d48843bffed6103e866b3": "1970000000000000000000", - "da0b48e489d302b4b7bf204f957c1c9be383b0df": "2000000000000000000000", - "7085ae7e7e4d932197b5c7858c00a3674626b7a5": "6000000000000000000000", - "5b06d1e6930c1054692b79e3dbe6ecce53966420": "205400000000000000000", - "8df53d96191471e059de51c718b983e4a51d2afd": "32000000000000000000000", - "0678654ac6761db904a2f7e8595ec1eaac734308": "878000000000000000000", - "89fee30d1728d96cecc1dab3da2e771afbcfaa41": "1999944000000000000000", - "59c5d06b170ee4d26eb0a0eb46cb7d90c1c91019": "10000000000000000000000", - "2b129c26b75dde127f8320bd0f63410c92a9f876": "2200000000000000000000", - "3d6ae053fcbc318d6fd0fbc353b8bf542e680d27": "14300000000000000000", - "755a60bf522fbd8fff9723446b7e343a7068567e": "20000000000000000000000", - "947e11e5ea290d6fc3b38048979e0cd44ec7c17f": "2000000000000000000000", - "711ecf77d71b3d0ea95ce4758afecdb9c131079d": "760000000000000000000", - "de9eff4c798811d968dccb460d9b069cf30278e0": "400000000000000000000", - "4e892e8081bf36e488fddb3b2630f3f1e8da30d2": "12003800000000000000000", - "8ede7e3dc50749c6c50e2e28168478c34db81946": "19999800000000000000000", - "0c30cacc3f72269f8b4f04cf073d2b05a83d9ad1": "2001000000000000000000", - "e51eb87e7fb7311f5228c479b48ec9878831ac4c": "2000000000000000000000", - "8b01da34d470c1d115acf4d8113c4dd8a8c338e4": "25220000000000000000000", - "4329fc0931cbeb033880fe4c9398ca45b0e2d11a": "2000400000000000000000", - "540c072802014ef0d561345aec481e8e11cb3570": "8000000000000000000000", - "21e5d2bae995ccfd08a5c16bb524e1f630448f82": "2800000000000000000000", - "5cf8c03eb3e872e50f7cfd0c2f8d3b3f2cb5183a": "200000000000000000000", - "5c0f2e51378f6b0d7bab617331580b6e39ad3ca5": "9600000000000000000000", - "d2f241255dd7c3f73c07043071ec08ddd9c5cde5": "500000000000000000000", - "cbe1b948864d8474e765145858fca4550f784b92": "10000000000000000000000", - "30742ccdf4abbcd005681f8159345c9e79054b1a": "668500000000000000000", - "6aeb9f74742ea491813dbbf0d6fcde1a131d4db3": "440800000000000000000", - "821eb90994a2fbf94bdc3233910296f76f9bf6e7": "10000000000000000000000", - "25c1a37ee5f08265a1e10d3d90d5472955f97806": "1820000000000000000000", - "7ef98b52bee953bef992f305fda027f8911c5851": "514717000000000000000", - "8adc53ef8c18ed3051785d88e996f3e4b20ecd51": "42000000000000000000000", - "007f4a23ca00cd043d25c2888c1aa5688f81a344": "773658000000000000000", - "4a735d224792376d331367c093d31c8794341582": "1900000000000000000000", - "05440c5b073b529b4829209dff88090e07c4f6f5": "1288000000000000000000", - "5e772e27f28800c50dda973bb33e10762e6eea20": "1790000000000000000000", - "a429fa88731fdd350e8ecd6ea54296b6484fe695": "1969606000000000000000", - "e0d76b7166b1f3a12b4091ee2b29de8caa7d07db": "2000000000000000000000", - "7ebd95e9c470f7283583dc6e9d2c4dce0bea8f84": "14000000000000000000000", - "883a78aeabaa50d8ddd8570bcd34265f14b19363": "3879951000000000000000", - "51f9c432a4e59ac86282d6adab4c2eb8919160eb": "530000000000000000000000", - "b86607021b62d340cf2652f3f95fd2dc67698bdf": "5000000000000000000000", - "acc0909fda2ea6b7b7a88db7a0aac868091ddbf6": "22155000000000000000", - "69b80ed90f84834afa3ff82eb964703b560977d6": "26740000000000000000", - "ca4ca9e4779d530ecbacd47e6a8058cfde65d98f": "800000000000000000000", - "5d6c5c720d66a6abca8397142e63d26818eaab54": "40000000000000000000", - "c2c13e72d268e7150dc799e7c6cf03c88954ced7": "700000000000000000000", - "6bbd1e719390e6b91043f8b6b9df898ea8001b34": "2000053000000000000000", - "a9ba6f413b82fcddf3affbbdd09287dcf50415ca": "4000000000000000000000", - "ced3c7be8de7585140952aeb501dc1f876ecafb0": "4000000000000000000000", - "1c63fa9e2cbbf23c49fcdef1cbabfe6e0d1e14c1": "1000000000000000000000", - "7d6e990daa7105de2526339833f77b5c0b85d84f": "20000000000000000000000", - "68addf019d6b9cab70acb13f0b3117999f062e12": "49941000000000000000", - "a77428bcb2a0db76fc8ef1e20e461a0a32c5ac15": "401100000000000000000", - "26048fe84d9b010a62e731627e49bc2eb73f408f": "4000000000000000000000", - "ff26138330274df4e0a3081e6df7dd983ec6e78f": "2000000000000000000000", - "b7382d37db0398ac72410cf9813de9f8e1ec8dad": "1000070000000000000000", - "44f62f2aaabc29ad3a6b04e1ff6f9ce452d1c140": "17000000000000000000000", - "47fef58584465248a0810d60463ee93e5a6ee8d3": "283100000000000000000", - "bd2b70fecc37640f69514fc7f3404946aad86b11": "1200000000000000000000", - "649a85b93653075fa6562c409a565d087ba3e1ba": "2000000000000000000000", - "55866486ec168f79dbe0e1abb18864d98991ae2c": "16100000000000000000", - "d7e74afdbad55e96cebc5a374f2c8b768680f2b0": "99000000000000000000", - "a8c1d6aa41fe3d65f67bd01de2a866ed1ed9ae52": "30000000000000000000", - "744c0c77ba7f236920d1e434de5da33e48ebf02c": "1970000000000000000000", - "9445ba5c30e98961b8602461d0385d40fbd80311": "10000000000000000000000", - "eb835c1a911817878a33d167569ea3cdd387f328": "1000000000000000000000", - "761a6e362c97fbbd7c5977acba2da74687365f49": "183840000000000000000", - "38202c5cd7078d4f887673ab07109ad8ada89720": "1000000000000000000000", - "5abfec25f74cd88437631a7731906932776356f9": "11901484239480000000000000", - "28e4af30cd93f686a122ad7bb19f8a8785eee342": "2101000000000000000000", - "3a9b111029ce1f20c9109c7a74eeeef34f4f2eb2": "4000000000000000000000", - "7bb9571f394b0b1a8eba5664e9d8b5e840677bea": "19700000000000000000", - "50fb36c27107ee2ca9a3236e2746cca19ace6b49": "2000000000000000000000", - "a3bc979b7080092fa1f92f6e0fb347e28d995045": "2800000000000000000000", - "d04b861b3d9acc563a901689941ab1e1861161a2": "20000000000000000000", - "58c555bc293cdb16c6362ed97ae9550b92ea180e": "20000000000000000000", - "8bf02bd748690e1fd1c76d270833048b66b25fd3": "11800000000000000000000", - "fbc01db54e47cdc3c438694ab717a856c23fe6e9": "8456774000000000000000", - "9c9a07a8e57c3172a919ef64789474490f0d9f51": "10000000000000000000000", - "fc7e22a503ec5abe9b08c50bd14999f520fa4884": "6387725000000000000000", - "9b773669e87d76018c090f8255e54409b9dca8b2": "20000000000000000000", - "ffe8cbc1681e5e9db74a0f93f8ed25897519120f": "1507000000000000000000", - "4d4cf5807429615e30cdface1e5aae4dad3055e6": "600000000000000000000", - "cfde0fc75d6f16c443c3038217372d99f5d907f7": "2419000000000000000000", - "818ffe271fc3973565c303f213f6d2da89897ebd": "5734655000000000000000", - "ba1fcaf223937ef89e85675503bdb7ca6a928b78": "640000000000000000000", - "a30a45520e5206d9004070e6af3e7bb2e8dd5313": "400000000000000000000", - "a747439ad0d393b5a03861d77296326de8bb9db9": "1000000000000000000000", - "14d00aad39a0a7d19ca05350f7b03727f08dd82e": "500000000000000000000", - "551999ddd205563327b9b530785acff9bc73a4ba": "6000000000000000000000", - "a4670731175893bbcff4fa85ce97d94fc51c4ba8": "8000000000000000000000", - "f858171a04d357a13b4941c16e7e55ddd4941329": "41984000000000000000", - "a6484cc684c4c91db53eb68a4da45a6a6bda3067": "6000000000000000000000", - "00d75ed60c774f8b3a5a5173fb1833ad7105a2d9": "2005500000000000000000", - "bf92418a0c6c31244d220260cb3e867dd7b4ef49": "99800000000000000000", - "716d50cca01e938500e6421cc070c3507c67d387": "2000000000000000000000", - "82a8b96b6c9e13ebec1e9f18ac02a60ea88a48ff": "1999998000000000000000", - "5a565285374a49eedd504c957d510874d00455bc": "100000000000000000000", - "778c79f4de1953ebce98fe8006d53a81fb514012": "999800000000000000000", - "41b2d34fde0b1029262b4172c81c1590405b03ae": "1000000000000000000000", - "4039bd50a2bde15ffe37191f410390962a2b8886": "200000000000000000000", - "c033be10cb48613bd5ebcb33ed4902f38b583003": "3000000000000000000000", - "5d5751819b4f3d26ed0c1ac571552735271dbefa": "1000000000000000000000", - "b600429752f399c80d0734744bae0a022eca67c6": "20000000000000000000", - "f875619d8a23e45d8998d184d480c0748970822a": "4000000000000000000000", - "71c7230a1d35bdd6819ed4b9a88e94a0eb0786dd": "4365000000000000000000", - "b2f9c972c1e9737755b3ff1b3088738396395b26": "20000000000000000000000", - "a66a4963b27f1ee1932b172be5964e0d3ae54b51": "173000000000000000000", - "53ce88e66c5af2f29bbd8f592a56a3d15f206c32": "140840000000000000000", - "433e3ba1c51b810fc467d5ba4dea42f7a9885e69": "40000000000000000000000", - "c7837ad0a0bf14186937ace06c5546a36aa54f46": "4000000000000000000000", - "c3f8f67295a5cd049364d05d23502623a3e52e84": "6000000000000000000000", - "3fd0bb47798cf44cdfbe4d333de637df4a00e45c": "100040000000000000000", - "a1ae8d4540d4db6fdde7146f415b431eb55c7983": "197000000000000000000", - "5cccf1508bfd35c20530aa642500c10dee65eaed": "850000000000000000000", - "a53ead54f7850af21438cbe07af686279a315b86": "10000000000000000000000", - "8cf6da0204dbc4860b46ad973fc111008d9e0c46": "200000000000000000000", - "8e7936d592008fdc7aa04edeeb755ab513dbb89d": "20000000000000000000", - "4a53dcdb56ce4cdce9f82ec0eb13d67352e7c88b": "4200000000000000000000", - "2b4f4507bb6b9817942ce433781b708fbcd166fd": "18200000000000000000", - "026432af37dc5113f1f46d480a4de0b28052237e": "355800000000000000000", - "e780a56306ba1e6bb331952c22539b858af9f77d": "50000000000000000000000", - "d1f1694d22671b5aad6a94995c369fbe6133676f": "1000000000000000000000", - "7c45f0f8442a56dbd39dbf159995415c52ed479b": "2000000000000000000000", - "b65941d44c50d24666670d364766e991c02e11c2": "600000000000000000000", - "45e68db8dbbaba5fc2cb337c62bcd0d61b059189": "2000000000000000000000", - "05f3631f5664bdad5d0132c8388d36d7d8920918": "20000000000000000000", - "5475d7f174bdb1f789017c7c1705989646079d49": "9400000000000000000000", - "c7bf2ed1ed312940ee6aded1516e268e4a604856": "6000000000000000000000", - "39aaf0854db6eb39bc7b2e43846a76171c0445de": "1850000000000000000000", - "c817df1b91faf30fe3251571727c9711b45d8f06": "1999944000000000000000", - "7d13d6705884ab2157dd8dcc7046caf58ee94be4": "137200000000000000000000", - "478dc09a1311377c093f9cc8ae74111f65f82f39": "4000000000000000000000", - "8043ed22f997e5a2a4c16e364486ae64975692c4": "1130513000000000000000", - "b9a985501ee950829b17fae1c9cf348c3156542c": "294100000000000000000", - "d5cba5b26bea5d73fabb1abafacdef85def368cc": "200000000000000000000", - "6776e133d9dc354c12a951087b639650f539a433": "120000000000000000000", - "804ca94972634f633a51f3560b1d06c0b293b3b1": "200000000000000000000", - "0be1fdf626ee6189102d70d13b31012c95cd1cd6": "2000000000000000000000", - "f848fce9ab611c7d99206e23fac69ad488b94fe1": "48500000000000000000", - "f01195d657ef3c942e6cb83949e5a20b5cfa8b1e": "25760000000000000000000", - "78a5e89900bd3f81dd71ba869d25fec65261df15": "51900000000000000000000", - "d6f1e55b1694089ebcb4fe7d7882aa66c8976176": "19998846000000000000000", - "d5294b666242303b6df0b1c88d37429bc8c965aa": "300700000000000000000", - "3171877e9d820cc618fc0919b29efd333fda4934": "1000000000000000000000", - "2901f8077f34190bb47a8e227fa29b30ce113b31": "100000000000000000000", - "6b2284440221ce16a8382de5ff0229472269deec": "1000000000000000000000", - "1bba03ff6b4ad5bf18184acb21b188a399e9eb4a": "1790000000000000000000", - "80744618de396a543197ee4894abd06398dd7c27": "2000000000000000000000", - "1b799033ef6dc7127822f74542bb22dbfc09a308": "100000000000000000000", - "d513a45080ff2febe62cd5854abe29ee4467f996": "153200000000000000000", - "e761d27fa3502cc76bb1a608740e1403cf9dfc69": "280000000000000000000", - "53989ed330563fd57dfec9bd343c3760b0799390": "6208000000000000000000", - "ccf7110d1bd9a74bfd1d7d7d2d9d55607e7b837d": "900000000000000000000", - "f373e9daac0c8675f53b797a160f6fc034ae6b23": "100000000000000000000", - "abc9a99e8a2148a55a6d82bd51b98eb5391fdbaf": "6000000000000000000000", - "ffec0913c635baca2f5e57a37aa9fb7b6c9b6e26": "805000000000000000000", - "581a3af297efa4436a29af0072929abf9826f58b": "2000000000000000000000", - "924efa6db595b79313277e88319625076b580a10": "2000000000000000000000", - "65d8dd4e251cbc021f05b010f2d5dc520c3872e0": "834956000000000000000", - "6c67d6db1d03516c128b8ff234bf3d49b26d2941": "100000000000000000000000", - "496d365534530a5fc1577c0a5241cb88c4da7072": "1790000000000000000000", - "b85ff03e7b5fc422981fae5e9941dacbdaba7584": "1337000000000000000000", - "e13540ecee11b212e8b775dc8e71f374aae9b3f8": "2000000000000000000000", - "a02e3f8f5959a7aab7418612129b701ca1b80010": "20000000000000000000", - "a7a3f153cdc38821c20c5d8c8241b294a3f82b24": "500000000000000000000", - "366175403481e0ab15bb514615cbb989ebc68f82": "2000000000000000000000", - "5104ecc0e330dd1f81b58ac9dbb1a9fbf88a3c85": "100000000000000000000000", - "a466d770d898d8c9d405e4a0e551efafcde53cf9": "492500000000000000000", - "5fa8a54e68176c4fe2c01cf671c515bfbdd528a8": "330000000000000000000000", - "e2e15c60dd381e3a4be25071ab249a4c5c5264da": "2350502000000000000000", - "0628bfbe5535782fb588406bc96660a49b011af5": "1520000000000000000000", - "04d6b8d4da867407bb997749debbcdc0b358538a": "1000000000000000000000", - "0e6ec313376271dff55423ab5422cc3a8b06b22b": "4000000000000000000000", - "8787d12677a5ec291e57e31ffbfad105c3324b87": "12438777000000000000000", - "58e2f11223fc8237f69d99c6289c148c0604f742": "24000000000000000000000", - "5600730a55f6b20ebd24811faa3de96d1662abab": "1880000000000000000000", - "fce089635ce97abac06b44819be5bb0a3e2e0b37": "92491000000000000000", - "fa0c1a988c8a17ad3528eb28b3409daa58225f26": "200000000000000000000", - "7ae1c19e53c71cee4c73fae2d7fc73bf9ab5e392": "1000000000000000000000", - "bd17eed82b9a2592019a1b1b3c0fbad45c408d22": "250000000000000000000", - "884a7a39d0916e05f1c242df55607f37df8c5fda": "23400000000000000000000", - "ca70f4ddbf069d2143bd6bbc7f696b52789b32e7": "3000000000000000000000", - "7b25bb9ca8e702217e9333225250e53c36804d48": "1880000000000000000000", - "ea8317197959424041d9d7c67a3ece1dbb78bb55": "394000000000000000000", - "5cb953a0e42f5030812226217fffc3ce230457e4": "100000000000000000000", - "d1f4dc1ddb8abb8848a8b14e25f3b55a8591c266": "250000000000000000000", - "6a42ca971c6578d5ade295c3e7f4ad331dd3424e": "6000000000000000000000", - "07e1162ceae3cf21a3f62d105990302e307f4e3b": "1530000000000000000000", - "5d1dc3387b47b8451e55106c0cc67d6dc72b7f0b": "2000000000000000000000", - "5d2819e8d57821922ee445650ccaec7d40544a8d": "200000000000000000000", - "4c24b78baf2bafc7fcc69016426be973e20a50b2": "3000000000000000000000", - "630c5273126d517ce67101811cab16b8534cf9a8": "9422595000000000000000", - "291f929ca59b54f8443e3d4d75d95dee243cef78": "499938000000000000000", - "2dd325fdffb97b19995284afa5abdb574a1df16a": "500000000000000000000", - "4fce8429ba49caa0369d1e494db57e89eab2ad39": "200000000000000000000000", - "712b76510214dc620f6c3a1dd29aa22bf6d214fb": "6000000000000000000000", - "266f2da7f0085ef3f3fa09baee232b93c744db2e": "60000000000000000000000", - "0770c61be78772230cb5a3bb2429a72614a0b336": "6767695000000000000000", - "02dfcb17a1b87441036374b762a5d3418b1cb4d4": "1340860000000000000000", - "5e67df8969101adabd91accd6bb1991274af8df2": "500000000000000000000", - "7d9c59631e2ba2e8e82891f3979922aaa3b567a1": "8000000000000000000000", - "949f8c107bc7f0aceaa0f17052aadbd2f9732b2e": "2000000000000000000000", - "ea4e809e266ae5f13cdbe38f9d0456e6386d1274": "4500000000000000000000", - "cd5510a242dfb0183de925fba866e312fabc1657": "2400000000000000000000", - "a36e0d94b95364a82671b608cb2d373245612909": "150011000000000000000", - "0ec46696ffac1f58005fa8439824f08eed1df89b": "10000000000000000000000", - "c6fb1ee37417d080a0d048923bdabab095d077c6": "200000000000000000000", - "53c9eca40973f63bb5927be0bc6a8a8be1951f74": "2000000000000000000000", - "ea14bfda0a6e76668f8788321f07df37824ec5df": "200000000000000000000000", - "dfb4d4ade52fcc818acc7a2c6bb2b00224658f78": "7750000000000000000000", - "5997ffefb3c1d9d10f1ae2ac8ac3c8e2d2292783": "1000000000000000000000", - "8eceb2e124536c5b5ffc640ed14ff15ed9a8cb71": "2000000000000000000000", - "8f02bda6c36922a6be6a509be51906d393f7b99b": "1019835000000000000000", - "530077c9f7b907ff9cec0c77a41a70e9029add4a": "2000000000000000000000", - "08936a37df85b3a158cafd9de021f58137681347": "18200000000000000000", - "8e9c429266df057efa78dd1d5f77fc40742ad466": "300061000000000000000", - "acc59f3b30ceffc56461cc5b8df48902240e0e7b": "2000000000000000000000", - "f5534815dc635efa5cc84b2ac734723e21b29372": "1580000000000000000000", - "f873e57a65c93b6e18cb75f0dc077d5b8933dc5c": "197000000000000000000", - "25b78c9fad85b43343f0bfcd0fac11c9949ca5eb": "2000000000000000000000", - "aad2b7f8106695078e6c138ec81a7486aaca1eb2": "200000000000000000000", - "509c8668036d143fb8ae70b11995631f3dfcad87": "1000000000000000000000", - "3602458da86f6d6a9d9eb03daf97fe5619d442fa": "2000000000000000000000", - "9f607b3f12469f446121cebf3475356b71b4328c": "4000000000000000000000", - "fe3827d57630cf8761d512797b0b858e478bbd12": "20000000000000000000", - "9d9c4efe9f433989e23be94049215329fa55b4cb": "256215000000000000000", - "9bd905f1719fc7acd0159d4dc1f8db2f21472338": "1000000000000000000000", - "7d82e523cc2dc591da3954e8b6bb2caf6461e69c": "2316058000000000000000", - "74afe54902d615782576f8baac13ac970c050f6e": "177670000000000000000", - "aff11ccf699304d5f5862af86083451c26e79ae5": "1999000000000000000000", - "3885fee67107dc3a3c741ee290c98918c9b99397": "20000000000000000000", - "36343aeca07b6ed58a0e62fa4ecb498a124fc971": "300000000000000000000", - "c94a28fb3230a9ddfa964e770f2ce3c253a7be4f": "200000000000000000000", - "9882967cee68d2a839fad8ab4a7c3dddf6c0adc8": "1336866000000000000000", - "95df4e3445d7662624c48eba74cf9e0a53e9f732": "56000000000000000000000", - "ca9faa17542fafbb388eab21bc4c94e8a7b34788": "1999999000000000000000", - "c8b1850525d946f2ae84f317b15188c536a5dc86": "2685000000000000000000", - "39bac68d947859f59e9226089c96d62e9fbe3cde": "40000000000000000000", - "a9bfc410dddb20711e45c07387eab30a054e19ac": "1154750000000000000000", - "540a1819bd7c35861e791804e5fbb3bc97c9abb1": "1454400000000000000000", - "667b61c03bb937a9f5d0fc5a09f1ea3363c77035": "4250000000000000000000", - "010df1df4bed23760d2d1c03781586ddf7918e54": "60000000000000000000", - "bd51ee2ea143d7b1d6b77e7e44bdd7da12f485ac": "1318800000000000000000", - "fb5125bf0f5eb0b6f020e56bfc2fdf3d402c097e": "5910000000000000000000", - "3f0c83aac5717962734e5ceaeaecd39b28ad06be": "2000000000000000000000", - "f10661ff94140f203e7a482572437938bec9c3f7": "20000000000000000000000", - "bd3097a79b3c0d2ebff0e6e86ab0edadbed47096": "1670000000000000000000", - "edeb4894aadd0081bbddd3e8846804b583d19f27": "2000000000000000000000", - "49c9771fca19d5b9d245c891f8158fe49f47a062": "10000000000000000000000", - "6405dd13e93abcff377e700e3c1a0086eca27d29": "18200000000000000000", - "ce5e04f0184369bcfa06aca66ffa91bf59fa0fb9": "40000000000000000000", - "4364309a9fa07095600f79edc65120cdcd23dc64": "10000000000000000000000", - "b749b54e04d5b19bdcedfb84da7701ab478c27ae": "2680000000000000000000", - "f593c65285ee6bbd6637f3be8f89ad40d489f655": "3000000000000000000000", - "d224f880f9479a89d32f09e52be990b288135cef": "17300000000000000000000", - "85bb51bc3bfe9a1b2a2f6b1cda95bca8b38c8d5e": "321750000000000000000", - "caf4481d9db78dc4f25f7b4ac8bd3b1ca0106b31": "5000000000000000000000", - "51ca8bd4dc644fac47af675563d5804a0da21eeb": "788000000000000000000", - "19f643e1a8fa04ae16006028138333a59a96de87": "20000000000000000000", - "58b808a65b51e6338969afb95ec70735e451d526": "39998000000000000000000", - "574921838cc77d6c98b17d903a3ae0ee0da95bd0": "53480000000000000000000", - "7c6924d07c3ef5891966fe0a7856c87bef9d2034": "2000000000000000000000", - "f9767e4ecb4a5980527508d7bec3d45e4c649c13": "1910000000000000000000", - "f3be99b9103ce7550aa74ff1db18e09dfe32e005": "2000000000000000000000", - "625644c95a873ef8c06cdb9e9f6d8d7680043d62": "1800000000000000000000", - "6a44af96b3f032ae641beb67f4b6c83342d37c5d": "29000000000000000000", - "d3a10ec7a5c9324999dd9e9b6bde7c911e584bda": "600000000000000000000", - "e8ddbed732ebfe754096fde9086b8ea4a4cdc616": "2000000000000000000000", - "235fa66c025ef5540070ebcf0d372d8177c467ab": "33400000000000000000000", - "4d08471d68007aff2ae279bc5e3fe4156fbbe3de": "40000000000000000000000", - "dadc00ab7927603c2fcf31cee352f80e6c4d6351": "1999664000000000000000", - "7393cbe7f9ba2165e5a7553500b6e75da3c33abf": "100000000000000000000", - "77617ebc4bebc5f5ddeb1b7a70cdeb6ae2ffa024": "1970000000000000000000", - "7fea1962e35d62059768c749bedd96cab930d378": "2000000000000000000000", - "243b3bca6a299359e886ce33a30341fafe4d573d": "20000000000000000000000", - "b94d47b3c052a5e50e4261ae06a20f45d8eee297": "2000000000000000000000", - "e727e67ef911b81f6cf9c73fcbfebc2b02b5bfc6": "2000000000000000000000", - "e510d6797fba3d6693835a844ea2ad540691971b": "17381000000000000000000", - "0cdc960b998c141998160dc179b36c15d28470ed": "500038000000000000000", - "3e76a62db187aa74f63817533b306cead0e8cebe": "31200000000000000000000", - "495b641b1cdea362c3b4cbbd0f5cc50b1e176b9c": "1000000000000000000000", - "5126460d692c71c9af6f05574d93998368a23799": "52000000000000000000", - "a008019863c1a77c1499eb39bbd7bf2dd7a31cb9": "137000000000000000000", - "65ee20b06d9ad589a7e7ce04b9f5f795f402aece": "2000000000000000000000", - "f432b9dbaf11bdbd73b6519fc0a904198771aac6": "152000000000000000000", - "85946d56a4d371a93368539690b60ec825107454": "1730000000000000000000", - "26f9f7cefd7e394b9d3924412bf2c2831faf1f85": "4000000000000000000000", - "d4ebb1929a23871cf77fe049ab9602be08be0a73": "1910000000000000000000", - "4fdac1aa517007e0089430b3316a1badd12c01c7": "500000000000000000000", - "05e671de55afec964b074de574d5158d5d21b0a3": "3940000000000000000000", - "20181c4b41f6f972b66958215f19f570c15ddff1": "1600000000000000000000", - "cc9519d1f3985f6b255eaded12d5624a972721e1": "1000000000000000000000", - "169bbefc41cfd7d7cbb8dfc63020e9fb06d49546": "2000000000000000000000", - "175a183a3a235ffbb03ba835675267229417a091": "16000000000000000000000", - "8dde3cb8118568ef4503fe998ccdf536bf19a098": "4000000000000000000000", - "6a05b21c4f17f9d73f5fb2b0cb89ff5356a6cc7e": "1500000000000000000000", - "5cc4cba621f220637742057f6055b80dffd77e13": "39997692000000000000000", - "ecb94c568bfe59ade650645f4f26306c736cace4": "267400000000000000000", - "dfa6b8b8ad3184e357da282951d79161cfb089bc": "400000000000000000000", - "a3058c51737a4e96c55f2ef6bd7bb358167ec2a7": "606093000000000000000", - "051d424276b21239665186133d653bb8b1862f89": "1000000000000000000000", - "d05ffb2b74f867204fe531653b0248e21c13544e": "1000000000000000000000", - "e1f63ebbc62c7b7444040eb99623964f7667b376": "20000000000000000000", - "e5a3d7eb13b15c100177236d1beb30d17ee15420": "2000000000000000000000", - "18fa8625c9dc843c78c7ab259ff87c9599e07f10": "1000000000000000000000", - "64264aedd52dcae918a012fbcd0c030ee6f71821": "1000000000000000000000", - "6f1f4907b8f61f0c51568d692806b382f50324f5": "2000000000000000000000", - "becef61c1c442bef7ce04b73adb249a8ba047e00": "1000400000000000000000", - "7b893286427e72db219a21fc4dcd5fbf59283c31": "10000000000000000000000", - "ce5eb63a7bf4fbc2f6e4baa0c68ab1cb4cf98fb4": "2000000000000000000000", - "66ec16ee9caab411c55a6629e318de6ee216491d": "865000000000000000000", - "30b66150f1a63457023fdd45d0cc6cb54e0c0f06": "1000000000000000000000", - "87183160d172d2e084d327b86bcb7c1d8e6784ef": "4000086000000000000000", - "c420388fbee84ad656dd68cdc1fbaa9392780b34": "187767000000000000000", - "90f774c9147dde90853ddc43f08f16d455178b8c": "4000000000000000000000", - "1e1d7a5f2468b94ea826982dbf2125793c6e4a5a": "999940000000000000000", - "8043fdd0bc4c973d1663d55fc135508ec5d4f4fa": "20000000000000000000", - "7bca1da6c80a66baa5db5ac98541c4be276b447d": "679000000000000000000", - "73550beb732ba9ddafda7ae406e18f7feb0f8bb2": "2800000000000000000000", - "adc19ec835afe3e58d87dc93a8a9213c90451326": "1971200000000000000000", - "821d798af19989c3ae5b84a7a7283cd7fda1fabe": "20000000000000000000000", - "4c4e6f13fb5e3f70c3760262a03e317982691d10": "100000000000000000000", - "664e43119870af107a448db1278b044838ffcdaf": "400000000000000000000", - "8da1178f55d97772bb1d24111a404a4f8715b95d": "878149000000000000000", - "5e6e9747e162f8b45c656e0f6cae7a84bac80e4e": "2000000000000000000000", - "c7eac31abce6d5f1dea42202b6a674153db47a29": "591000000000000000000", - "d96711540e2e998343d4f590b6fc8fac3bb8b31d": "1758944000000000000000", - "9da4ec407077f4b9707b2d9d2ede5ea5282bf1df": "4000000000000000000000", - "f60c1b45f164b9580e20275a5c39e1d71e35f891": "2000000000000000000000", - "eb6394a7bfa4d28911d5a5b23e93f35e340c2294": "78000000000000000000", - "a89ac93b23370472daac337e9afdf642543f3e57": "10000000000000000000000", - "bb618e25221ad9a740b299ed1406bc3934b0b16d": "1000000000000000000000", - "817ac33bd8f847567372951f4a10d7a91ce3f430": "200015000000000000000", - "fe6a895b795cb4bf85903d3ce09c5aa43953d3bf": "3400000000000000000000", - "3673954399f6dfbe671818259bb278e2e92ee315": "200000000000000000000000", - "df0ff1f3d27a8ec9fb8f6b0cb254a63bba8224a5": "4367636000000000000000", - "ff12e49d8e06aa20f886293c0b98ed7eff788805": "4000000000000000000000", - "5aef16a226dd68071f2483e1da42598319f69b2c": "2000000000000000000000", - "0266ab1c6b0216230b9395443d5fa75e684568c6": "1000000000000000000000", - "14a7352066364404db50f0d0d78d754a22198ef4": "1880000000000000000000", - "444caf79b71338ee9aa7c733b02acaa7dc025948": "40000000000000000000", - "64e2de21200b1899c3a0c0653b5040136d0dc842": "20000000000000000000000", - "36e156610cd8ff64e780d89d0054385ca76755aa": "14000000000000000000000", - "0a6ebe723b6ed1f9a86a69ddda68dc47465c2b1b": "1185000000000000000000", - "38bf2a1f7a69de0e2546adb808b36335645da9ff": "2000320000000000000000", - "39f44663d92561091b82a70dcf593d754005973a": "199999000000000000000", - "24b9e6644f6ba4cde126270d81f6ab60f286dff4": "133700000000000000000", - "9b59eb213b1e7565e45047e04ea0374f10762d16": "2000000000000000000000", - "309544b6232c3dd737f945a03193d19b5f3f65b9": "1087440000000000000000", - "b28bb39f3466517cd46f979cf59653ee7d8f152e": "450000000000000000000", - "9da8e22ca10e67fea44e525e4751eeac36a31194": "260000000000000000000", - "4f8ae80238e60008557075ab6afe0a7f2e74d729": "100000000000000000000", - "74ed33acf43f35b98c9230b9e6642ecb5330839e": "681872000000000000000", - "22842ab830da509913f81dd1f04f10af9edd1c55": "2000000000000000000000", - "a8f37f0ab3a1d448a9e3ce40965f97a646083a34": "329800000000000000000", - "582b70669c97aab7d68148d8d4e90411e2810d56": "999972000000000000000", - "d5e55100fbd1956bbed2ca518d4b1fa376032b0b": "100000000000000000000", - "b7cc6b1acc32d8b295df68ed9d5e60b8f64cb67b": "300000000000000000000", - "e081ca1f4882db6043d5a9190703fde0ab3bf56d": "400000000000000000000", - "c02077449a134a7ad1ef7e4d927affeceeadb5ae": "18200000000000000000", - "e09fea755aee1a44c0a89f03b5deb762ba33006f": "1100070000000000000000", - "b3717731dad65132da792d876030e46ac227bb8a": "1000000000000000000000", - "157eb3d3113bd3b597714d3a954edd018982a5cb": "2000000000000000000000", - "dc57345b38e0f067c9a31d9deac5275a10949321": "200000000000000000000", - "40ea5044b204b23076b1a5803bf1d30c0f88871a": "14000000000000000000000", - "2bab0fbe28d58420b52036770a12f9952aea6911": "3820000000000000000000", - "adaa0e548c035affed64ca678a963fabe9a26bfd": "70000000000000000000", - "bb48eaf516ce2dec3e41feb4c679e4957641164f": "3820000000000000000000", - "7693bdeb6fc82b5bca721355223175d47a084b4d": "22000000000000000000000", - "03cb98d7acd817de9d886d22fab3f1b57d92a608": "1600000000000000000000", - "f88900db737955b1519b1a7d170a18864ce590eb": "18200000000000000000", - "757fa55446c460968bb74b5ebca96c4ef2c709c5": "1015200000000000000000", - "da855d53477f505ec4c8d5e8bb9180d38681119c": "5600000000000000000000", - "e41aea250b877d423a63ba2bce2f3a61c0248d56": "260000000000000000000", - "8262169b615870134eb4ac6c5f471c6bf2f789fc": "462500000000000000000", - "66b0c100c49149935d14c0dc202cce907cea1a3d": "1970000000000000000000", - "854c0c469c246b83b5d1b3eca443b39af5ee128a": "1600000000000000000000", - "eb6810691d1ae0d19e47bd22cebee0b3ba27f88a": "2499922000000000000000", - "24dcc24bd9c7210ceacfb30da98ae04a4d7b8ab9": "1000000000000000000000", - "e31b4eef184c24ab098e36c802714bd4743dd0d4": "200000000000000000000", - "99b8c824869de9ed24f3bff6854cb6dd45cc3f9f": "1880000000000000000000", - "2ae73a79aea0278533accf21070922b1613f8f32": "3097417000000000000000", - "ddbd2b932c763ba5b1b7ae3b362eac3e8d40121a": "10000000000000000000000", - "1b4bbcb18165211b265b280716cb3f1f212176e8": "472325000000000000000", - "e177e0c201d335ba3956929c571588b51c5223ae": "2000000000000000000000", - "1945fe377fe6d4b71e3e791f6f17db243c9b8b0f": "2185500000000000000000", - "3e9b34a57f3375ae59c0a75e19c4b641228d9700": "17900000000000000000", - "a4d6c82eddae5947fbe9cdfbd548ae33d91a7191": "8000000000000000000000", - "bad4425e171c3e72975eb46ac0a015db315a5d8f": "2000000000000000000000", - "a2d2aa626b09d6d4e4b13f7ffc5a88bd7ad36742": "4639390000000000000000", - "b61c34fcacda701a5aa8702459deb0e4ae838df8": "35000000000000000000000", - "145e0600e2a927b2dd8d379356b45a2e7d51d3ae": "2545843000000000000000", - "8df339214b6ad1b24663ce716034749d6ef838d9": "11000000000000000000000", - "8fd9a5c33a7d9edce0997bdf77ab306424a11ea9": "2000000000000000000000", - "097da12cfc1f7c1a2464def08c29bed5e2f851e9": "20000000000000000000", - "ddabf13c3c8ea4e3d73d78ec717afafa430e5479": "41600000000000000000000", - "9eeb07bd2b7890195e7d46bdf2071b6617514ddb": "2000000000000000000000", - "819af9a1c27332b1c369bbda1b3de1c6e933d640": "314308000000000000000", - "d7d2c6fca8ad1f75395210b57de5dfd673933909": "340000000000000000000", - "cdd5d881a7362c9070073bdfbc75e72453ac510e": "842000000000000000000", - "e9ac36376efa06109d40726307dd1a57e213eaa9": "194000000000000000000", - "1bea4df5122fafdeb3607eddda1ea4ffdb9abf2a": "346000000000000000000", - "3e5e93fb4c9c9d1246f8f247358e22c3c5d17b6a": "150000000000000000000", - "6c1ddd33c81966dc8621776071a4129482f2c65f": "40000000000000000000000", - "2ccb66494d0af689abf9483d365d782444e7dead": "1000000000000000000000", - "19571a2b8f81c6bcf66ab3a10083295617150003": "492500000000000000000", - "38ac664ee8e0795e4275cb852bcba6a479ad9c8d": "20000000000000000000", - "c4803bb407c762f90b7596e6fde194931e769590": "4000000000000000000000", - "93507e9e8119cbceda8ab087e7ecb071383d6981": "14000000000000000000000", - "b672734afcc224e2e609fc51d4f059732744c948": "295500000000000000000", - "fbbbebcfbe235e57dd2306ad1a9ec581c7f9f48f": "40000000000000000000", - "8c81410ea8354cc5c65c41be8bd5de733c0b111d": "9550000000000000000000", - "942c6b8c955bc0d88812678a236725b32739d947": "1550000000000000000000", - "d2e817738abf1fb486583f80c350318bed860c80": "240010000000000000000", - "bff5df769934b8943ca9137d0efef2fe6ebbb34e": "100000000000000000000", - "6c4e426e8dc005dfa3516cb8a680b02eea95ae8e": "1337000000000000000000", - "f645dd7c890093e8e4c8aa92a6bb353522d3dc98": "134000000000000000000", - "4bac846af4169f1d95431b341d8800b22180af1a": "20000000000000000000", - "0514954c3c2fb657f9a06f510ea22748f027cdd3": "400000000000000000000", - "163dca73d7d6ea3f3e6062322a8734180c0b78ef": "2941400000000000000000", - "feaca2ac74624bf348dac9985143cfd652a4be55": "26148245000000000000000", - "fe80e9232deaff19baf99869883a4bdf0004e53c": "855680000000000000000", - "17108dab2c50f99de110e1b3b3b4cd82f5df28e7": "980000000000000000000", - "837a645dc95c49549f899c4e8bcf875324b2f57c": "600400000000000000000", - "762998e1d75227fced7a70be109a4c0b4ed86414": "20000000000000000000", - "c0a7e8435dff14c25577739db55c24d5bf57a3d9": "49250000000000000000000", - "aead88d689416b1c91f2364421375b7d3c70fb2e": "2000000000000000000000", - "9279b2228cec8f7b4dda3f320e9a0466c2f585ca": "5000000000000000000000", - "36726f3b885a24f92996da81625ec8ad16d8cbe6": "1543723000000000000000", - "3951e48e3c869e6b72a143b6a45068cdb9d466d0": "20000000000000000000", - "f5d61ac4ca95475e5b7bffd5f2f690b316759615": "31040000000000000000000", - "158a0d619253bf4432b5cd02c7b862f7c2b75636": "135733000000000000000", - "e56d431324c92911a1749df292709c14b77a65cd": "8200000000000000000000", - "9976947eff5f6ae5da08dd541192f378b428ff94": "8000000000000000000000", - "83210583c16a4e1e1dac84ebd37e3d0f7c57eba4": "2000000000000000000000", - "dcb64df43758c7cf974fa660484fbb718f8c67c1": "20000000000000000000000", - "d4205592844055b3c7a1f80cefe3b8eb509bcde7": "178973000000000000000", - "d0648a581b3508e135a2935d12c9657045d871ca": "8022000000000000000000", - "e7d17524d00bad82497c0f27156a647ff51d2792": "20000000000000000000", - "21582e99e502cbf3d3c23bdffb76e901ac6d56b2": "100000000000000000000", - "e61f280915c774a31d223cf80c069266e5adf19b": "880000000000000000000", - "03c91d92943603e752203e05340e566013b90045": "802200000000000000000", - "22561c5931143536309c17e832587b625c390b9a": "4000000000000000000000", - "e399c81a1d701b44f0b66f3399e66b275aaaf8c1": "1000000000000000000000", - "7f8dbce180ed9c563635aad2d97b4cbc428906d9": "2674000000000000000000", - "9f61beb46f5e853d0a8521c7446e68e34c7d0973": "560000000000000000000", - "6d3f2ba856ccbb0237fa7661156b14b013f21240": "1000000000000000000000", - "5f742e487e3ab81af2f94afdbe1b9b8f5ccc81bc": "2172412000000000000000", - "b600feab4aa96c537504d96057223141692c193a": "400000000000000000000", - "fab487500df20fb83ebed916791d561772adbebf": "1999980000000000000000", - "f8704c16d2fd5ba3a2c01d0eb20484e6ecfa3109": "200000000000000000000", - "3f1bc420c53c002c9e90037c44fe6a8ef4ddc962": "173000000000000000000", - "82e577b515cb2b0860aafe1ce09a59e09fe7d040": "600000000000000000000", - "bc999e385c5aebcac8d6f3f0d60d5aa725336d0d": "2000000000000000000000", - "e16ce35961cd74bd590d04c4ad4a1989e05691c6": "146000000000000000000", - "eb76424c0fd597d3e341a9642ad1ee118b2b579d": "4000000000000000000000", - "c440c7ca2f964b6972ef664a2261dde892619d9c": "20000000000000000000000", - "460d5355b2ceeb6e62107d81e51270b26bf45620": "2005500000000000000000", - "fcada300283f6bcc134a91456760b0d77de410e0": "2000000000000000000000", - "be8d7f18adfe5d6cc775394989e1930c979d007d": "1000000000000000000000", - "a7f9220c8047826bd5d5183f4e676a6d77bfed36": "153368000000000000000", - "98d204f9085f8c8e7de23e589b64c6eff692cc63": "2000000000000000000000", - "5a2916b8d2e8cc12e207ab464d433e2370d823d9": "2000000000000000000000", - "c42d6aeb710e3a50bfb44d6c31092969a11aa7f3": "150052000000000000000", - "04ce45f600db18a9d0851b29d9393ebdaafe3dc5": "20000000000000000000", - "7a1370a742ec2687e761a19ac5a794329ee67404": "2999988000000000000000", - "da2ad58e77deddede2187646c465945a8dc3f641": "660000000000000000000", - "ec58bc0d0c20d8f49465664153c5c196fe59e6be": "400000000000000000000", - "f8063af4cc1dd9619ab5d8bff3fcd1faa8488221": "2000000000000000000000", - "b9231eb26e5f9e4b4d288f03906704fab96c87d6": "19700000000000000000000", - "6e5c2d9b1c546a86eefd5d0a5120c9e4e730190e": "199600000000000000000", - "e49936a92a8ccf710eaac342bc454b9b14ebecb1": "2000000000000000000000", - "21dbdb817a0d8404c6bdd61504374e9c43c9210e": "9999917000000000000000", - "5cebe30b2a95f4aefda665651dc0cf7ef5758199": "18200000000000000000", - "597038ff91a0900cbbab488af483c790e6ec00a0": "10000000000000000000000", - "0fa5d8c5b3f294efd495ab69d768f81872508548": "2000000000000000000000", - "feef3b6eabc94affd3310c1c4d0e65375e131119": "20000000000000000000", - "1ce81d31a7923022e125bf48a3e03693b98dc9dd": "2000000000000000000000", - "5887dc6a33dfed5ac1edefe35ef91a216231ac96": "250000000000000000000", - "4e8e47ae3b1ef50c9d54a38e14208c1abd3603c2": "2235000000000000000000", - "e845e387c4cbdf982280f6aa01c40e4be958ddb2": "25000000000000000000000", - "71d9494e50c5dd59c599dba3810ba1755e6537f0": "4000000000000000000000", - "6eb5578a6bb7c32153195b0d8020a6914852c059": "660000000000000000000000", - "543f8c674e2462d8d5daa0e80195a8708e11a29e": "63940000000000000000", - "a0459ef3693aacd1647cd5d8929839204cef53be": "1000000000000000000000", - "dda371e600d30688d4710e088e02fdf2b9524d5f": "6920000000000000000000", - "dd4dd6d36033b0636fcc8d0938609f4dd64f4a86": "60000000000000000000", - "3bd624b548cb659736907ed8aa3c0c705e24b575": "2000000000000000000000", - "414599092e879ae25372a84d735af5c4e510cd6d": "400000000000000000000", - "3d66cd4bd64d5c8c1b5eea281e106d1c5aad2373": "1951100000000000000000", - "5948bc3650ed519bf891a572679fd992f8780c57": "197000000000000000000", - "8b74a7cb1bb8c58fce267466a30358adaf527f61": "13620000000000000000000", - "3f10800282d1b7ddc78fa92d8230074e1bf6aeae": "4925000000000000000000", - "32dbb6716c54e83165829a4abb36757849b6e47d": "1000000000000000000000", - "e6b3ac3f5d4da5a8857d0b3f30fc4b2b692b77d7": "1460000000000000000000", - "052a58e035f1fe9cdd169bcf20970345d12b9c51": "1490000000000000000000", - "581bdf1bb276dbdd86aedcdb397a01efc0e00c5b": "1000000000000000000000", - "604e9477ebf4727c745bcabbedcb6ccf29994022": "1000060000000000000000", - "59b96deb8784885d8d3b4a166143cc435d2555a1": "1337000000000000000000", - "37d980a12ee3bf23cc5cdb63b4ae45691f74c837": "2000000000000000000000", - "3bfbd3847c17a61cf3f17b52f8eba1b960b3f39f": "3000000000000000000000", - "49c941e0e5018726b7290fc473b471d41dae80d1": "500000000000000000000", - "f26bcedce3feadcea3bc3e96eb1040dfd8ffe1a0": "775000000000000000000", - "d0944aa185a1337061ae20dc9dd96c83b2ba4602": "200000000000000000000", - "904caa429c619d940f8e6741826a0db692b19728": "1000000000000000000000", - "b95c9b10aa981cf4a67a71cc52c504dee8cf58bd": "4000000000000000000000", - "15874686b6733d10d703c9f9bec6c52eb8628d67": "2000000000000000000000", - "1374facd7b3f8d68649d60d4550ee69ff0484133": "269700000000000000000", - "b0e469c886593815b3495638595daef0665fae62": "1940000000000000000000", - "47ff6feb43212060bb1503d7a397fc08f4e70352": "2000000000000000000000", - "c60b04654e003b4683041f1cbd6bc38fda7cdbd6": "2000000000000000000000", - "3ecdb532e397579662b2a46141e78f8235936a5f": "66850000000000000000", - "b3a8c2cb7d358e5739941d945ba9045a023a8bbb": "1000000000000000000000", - "32ef5cdc671df5562a901aee5db716b9be76dcf6": "2000000000000000000000", - "c94110e71afe578aa218e4fc286403b0330ace8d": "2000000000000000000000", - "9b43dcb95fde318075a567f1e6b57617055ef9e8": "3940000000000000000000", - "efeea010756f81da4ba25b721787f058170befbd": "32470000000000000000", - "c88255eddcf521c6f81d97f5a42181c9073d4ef1": "290793000000000000000", - "dd47189a3e64397167f0620e484565b762bfbbf4": "1850000000000000000000", - "82f39b2758ae42277b86d69f75e628d958ebcab0": "40000000000000000000000", - "e37f5fdc6ec97d2f866a1cfd0d3a4da4387b22b5": "10000000000000000000000", - "62331df2a3cbee3520e911dea9f73e905f892505": "2000000000000000000000", - "8c5d16ed65e3ed7e8b96ca972bc86173e3500b03": "2000000000000000000000", - "8b9841862e77fbbe919470935583a93cf027e450": "2000054000000000000000", - "c8dd27f16bf22450f5771b9fe4ed4ffcb30936f4": "197000000000000000000", - "dec8a1a898f1b895d8301fe64ab3ad5de941f689": "787803000000000000000", - "61c4ee7c864c4d6b5e37ea1331c203739e826b2f": "30063000000000000000", - "3250e3e858c26adeccadf36a5663c22aa84c4170": "5000000000000000000000", - "299e0bca55e069de8504e89aca6eca21d38a9a5d": "55500000000000000000", - "d50f7fa03e389876d3908b60a537a6706304fb56": "100000000000000000000", - "69073269729e6414b26ec8dc0fd935c73b579f1e": "30000000000000000000000", - "14fcd1391e7d732f41766cdacd84fa1deb9ffdd2": "2000000000000000000000", - "823768746737ce6da312d53e54534e106f967cf3": "20000000000000000000", - "882f75708386653c80171d0663bfe30b017ed0ad": "2000000000000000000000", - "a25b086437fd2192d0a0f64f6ed044f38ef3da32": "335000000000000000000", - "5a9c8b69fc614d69564999b00dcb42db67f97e90": "3429227000000000000000", - "a2b701f9f5cdd09e4ba62baebae3a88257105885": "1000000000000000000000", - "5e7b8c54dc57b0402062719dee7ef5e37ea35d62": "2877224000000000000000", - "7ffabfbc390cbe43ce89188f0868b27dcb0f0cad": "6370000000000000000000", - "b5cdbc4115406f52e5aa85d0fea170d2979cc7ba": "1337000000000000000000", - "263814309de4e635cf585e0d365477fc40e66cf7": "146000000000000000000", - "24cff0e9336a9f80f9b1cb968caf6b1d1c4932a4": "200200000000000000000", - "d3a941c961e8ca8b1070f23c6d6d0d2a758a4444": "200000000000000000000", - "a97beb3a48c45f1528284cb6a95f7de453358ec6": "31000000000000000000000", - "4dd131c74a068a37c90aded4f309c2409f6478d3": "400008000000000000000", - "653675b842d7d8b461f722b4117cb81dac8e639d": "31000000000000000000", - "561be9299b3e6b3e63b79b09169d1a948ae6db01": "500000000000000000000", - "dc067ed3e12d711ed475f5156ef7e71a80d934b9": "9550000000000000000000", - "08d97eadfcb7b064e1ccd9c8979fbee5e77a9719": "266063000000000000000", - "6e4c2ab7db026939dbd3bc68384af660a61816b2": "167000000000000000000", - "bf4c73a7ede7b164fe072114843654e4d8781dde": "2000000000000000000000", - "f504943aaf16796e0b341bbcdf21d11cc586cdd1": "9000000000000000000000", - "ea81ca8638540cd9d4d73d060f2cebf2241ffc3e": "1970000000000000000000", - "9944fee9d34a4a880023c78932c00b59d5c82a82": "750022000000000000000", - "12f460ae646cd2780fd35c50a6af4b9accfa85c6": "1000000000000000000000", - "4e232d53b3e6be8f895361d31c34d4762b12c82e": "1760000000000000000000", - "6bb2aca23fa1626d18efd6777fb97db02d8e0ae4": "40000000000000000000000", - "bc4e471560c99c8a2a4b1b1ad0c36aa6502b7c4b": "12000000000000000000000", - "2e2cbd7ad82547b4f5ff8b3ab56f942a6445a3b0": "200000000000000000000", - "21ecb2dfa65779c7592d041cd2105a81f4fd4e46": "1000000000000000000000", - "34318625818ec13f11835ae97353ce377d6f590a": "1520000000000000000000", - "a7ef35ce87eda6c28df248785815053ec97a5045": "4999998000000000000000", - "6a514e6242f6b68c137e97fea1e78eb555a7e5f7": "20000000000000000000", - "9340b5f678e45ee05eb708bb7abb6ec8f08f1b6b": "6000000000000000000000", - "43cc08d0732aa58adef7619bed46558ad7774173": "4443926000000000000000", - "12e9a4ad2ad57484dd700565bddb46423bd9bd31": "19999800000000000000000", - "ebbeeb259184a6e01cccfc2207bbd883785ac90a": "619966000000000000000", - "704ab1150d5e10f5e3499508f0bf70650f028d4b": "4000000000000000000000", - "fc361105dd90f9ede566499d69e9130395f12ac8": "395000000000000000000000", - "c1b9a5704d351cfe983f79abeec3dbbbae3bb629": "20000000000000000000", - "66f50406eb1b11a946cab45927cca37470e5a208": "2000000000000000000000", - "53942e7949d6788bb780a7e8a0792781b1614b84": "15899600000000000000000", - "32ba9a7d0423e03a525fe2ebeb661d2085778bd8": "20000000000000000000000", - "11c0358aa6479de21866fe21071924b65e70f8b9": "36400000000000000000000", - "76cb9c8b69f4387675c48253e234cb7e0d74a426": "7396300000000000000000", - "9f5f44026b576a4adb41e95961561d41039ca391": "250000000000000000000", - "533a73a4a2228eee05c4ffd718bbf3f9c1b129a7": "6000000000000000000000", - "dcc52d8f8d9fc742a8b82767f0555387c563efff": "500000000000000000000", - "f456a75bb99655a7412ce97da081816dfdb2b1f2": "200000000000000000000", - "d0c101fd1f01c63f6b1d19bc920d9f932314b136": "20000000000000000000000", - "dabc225042a6592cfa13ebe54efa41040878a5a2": "259550000000000000000", - "38eec6e217f4d41aa920e424b9525197041cd4c6": "4428166000000000000000", - "8a247d186510809f71cffc4559471c3910858121": "1790000000000000000000", - "4f152b2fb8659d43776ebb1e81673aa84169be96": "2000000000000000000000", - "b4496ddb27799a222457d73979116728e8a1845b": "2610331000000000000000", - "4a4053b31d0ee5dbafb1d06bd7ac7ff3222c47d6": "1400000000000000000000", - "0f7bea4ef3f73ae0233df1e100718cbe29310bb0": "2000000000000000000000", - "c836e24a6fcf29943b3608e662290a215f6529ea": "292000000000000000000", - "1765361c2ec2f83616ce8363aae21025f2566f40": "5000000000000000000000", - "b6e6c3222b6b6f9be2875d2a89f127fb64100fe2": "8008000000000000000000", - "01bbc14f67af0639aab1441e6a08d4ce7162090f": "1309500000000000000000", - "af2058c7282cf67c8c3cf930133c89617ce75d29": "6920000000000000000000", - "464d9c89cce484df000277198ed8075fa63572d1": "20000000000000000000", - "50cd97e9378b5cf18f173963236c9951ef7438a5": "1400000000000000000000", - "cb47bd30cfa8ec5468aaa6a94642ced9c819c8d4": "4000000000000000000000", - "6b10f8f8b3e3b60de90aa12d155f9ff5ffb22c50": "2000000000000000000000", - "09b7a988d13ff89186736f03fdf46175b53d16e0": "6000000000000000000000", - "5bfafe97b1dd1d712be86d41df79895345875a87": "500000000000000000000", - "a06cd1f396396c0a64464651d7c205efaf387ca3": "1999944000000000000000", - "fc0096b21e95acb8d619d176a4a1d8d529badbef": "384601000000000000000", - "a74444f90fbb54e56f3ac9b6cfccaa4819e4614a": "20000000000000000000", - "3c15b3511df6f0342e7348cc89af39a168b7730f": "1000000000000000000000", - "3d6ff82c9377059fb30d9215723f60c775c891fe": "250066000000000000000", - "a524a8cccc49518d170a328270a2f88133fbaf5d": "294500000000000000000", - "8a7a06be199a3a58019d846ac9cbd4d95dd757de": "3000200000000000000000", - "d744ac7e5310be696a63b003c40bd039370561c6": "1670000000000000000000", - "fe362688845fa244cc807e4b1130eb3741a8051e": "1000000000000000000000", - "b2d0360515f17daba90fcbac8205d569b915d6ac": "6000000000000000000000", - "c53594c7cfb2a08f284cc9d7a63bbdfc0b319732": "49200000000000000000000", - "b3c228731d186d2ded5b5fbe004c666c8e469b86": "29000000000000000000", - "63e414603e80d4e5a0f5c18774204642258208e4": "5000000000000000000000", - "826ce5790532e0548c6102a30d3eac836bd6388f": "18000000000000000000000", - "c5e812f76f15f2e1f2f9bc4823483c8804636f67": "73000000000000000000", - "116fef5e601642c918cb89160fc2293ba71da936": "802200000000000000000", - "08b84536b74c8c01543da88b84d78bb95747d822": "200000000000000000000", - "04a80afad53ef1f84165cfd852b0fdf1b1c24ba8": "58000000000000000000", - "2b0362633614bfcb583569438ecc4ea57b1d337e": "20000000000000000000000", - "e95179527deca5916ca9a38f215c1e9ce737b4c9": "10000000000000000000000", - "2c5df866666a194b26cebb407e4a1fd73e208d5e": "1000000000000000000000", - "529e824fa072582b4032683ac7eecc1c04b4cac1": "2000000000000000000000", - "78634371e17304cbf339b1452a4ce438dc764cce": "10000000000000000000000", - "e172dfc8f80cd1f8cd8539dc26082014f5a8e3e8": "3000000000000000000000", - "b07618328a901307a1b7a0d058fcd5786e9e72fe": "30239500000000000000000", - "b0571153db1c4ed7acaefe13ecdfdb72e7e4f06a": "80520000000000000000000", - "ad910a23d6850613654af786337ad2a70868ac6d": "1999800000000000000000", - "4da5edc688b0cb62e1403d1700d9dcb99ffe3fd3": "2000000000000000000000", - "be2471a67f6047918772d0e36839255ed9d691ae": "4000000000000000000000", - "28868324337e11ba106cb481da962f3a8453808d": "2000000000000000000000", - "d8f94579496725b5cb53d7985c989749aff849c0": "17000000000000000000000", - "4981c5ff66cc4e9680251fc4cd2ff907cb327865": "750000000000000000000", - "fd2872d19e57853cfa16effe93d0b1d47b4f93fb": "4000000000000000000000", - "63c8dfde0b8e01dadc2e748c824cc0369df090b3": "3880000000000000000000", - "c4dd048bfb840e2bc85cb53fcb75abc443c7e90f": "3716000000000000000000", - "f579714a45eb8f52c3d57bbdefd2c15b2e2f11df": "1560000000000000000000", - "cc7b0481cc32e6faef2386a07022bcb6d2c3b4fc": "3160000000000000000000", - "a0aa5f0201f04d3bbeb898132f7c11679466d901": "36600000000000000000", - "f3df63a97199933330383b3ed7570b96c4812334": "2000000000000000000000", - "42732d8ef49ffda04b19780fd3c18469fb374106": "425068000000000000000", - "6f92d6e4548c78996509ee684b2ee29ba3c532b4": "1000000000000000000000", - "fff4bad596633479a2a29f9a8b3f78eefd07e6ee": "100000000000000000000", - "ac4460a76e6db2b9fcd152d9c7718d9ac6ed8c6f": "200000000000000000000", - "553b6b1c57050e88cf0c31067b8d4cd1ff80cb09": "400000000000000000000", - "84b6b6adbe2f5b3e2d682c66af1bc4905340c3ed": "619333000000000000000", - "9f4a7195ac7c151ca258cafda0cab083e049c602": "1537100000000000000000", - "2955c357fd8f75d5159a3dfa69c5b87a359dea8c": "2000000000000000000000", - "11d7844a471ef89a8d877555583ceebd1439ea26": "10098000000000000000000", - "34b454416e9fb4274e6addf853428a0198d62ee1": "407000000000000000000", - "308dd21cebe755126704b48c0f0dc234c60ba9b1": "200000000000000000000", - "381db4c8465df446a4ce15bf81d47e2f17c980bf": "32000000000000000000000", - "1abc4e253b080aeb437984ab05bca0979aa43e1c": "1000000000000000000000", - "53e35b12231f19c3fd774c88fec8cbeedf1408b2": "512000000000000000000", - "69e2e2e704307ccc5b5ca3f164fece2ea7b2e512": "7000000000000000000000", - "1914f1eb95d1277e93b6e61b668b7d77f13a11a1": "970000000000000000000", - "50e13023bd9ca96ad4c53fdfd410cb6b1f420bdf": "200000000000000000000", - "46224f32f4ece5c8867090d4409d55e50b18432d": "6000000000000000000000", - "ff83855051ee8ffb70b4817dba3211ed2355869d": "400000000000000000000", - "fb39189af876e762c71d6c3e741893df226cedd6": "4000000000000000000000", - "9875623495a46cdbf259530ff838a1799ec38991": "2000000000000000000000", - "e1b39b88d9900dbc4a6cdc481e1060080a8aec3c": "2000000000000000000000", - "5baf6d749620803e8348af3710e5c4fbf20fc894": "5003680000000000000000", - "9c54e4ed479a856829c6bb42da9f0b692a75f728": "7520000000000000000000", - "486a6c8583a84484e3df43a123837f8c7e2317d0": "323378000000000000000", - "d235d15cb5eceebb61299e0e827fa82748911d89": "4000000000000000000000", - "47d792a756779aedf1343e8883a6619c6c281184": "2000000000000000000000", - "70c213488a020c3cfb39014ef5ba6404724bcaa3": "1940000000000000000000", - "133c490fa5bf7f372888e607d958fab7f955bae1": "1580000000000000000000", - "a9e194661aac704ee9dea043974e9692ded84a5d": "482400000000000000000", - "bc6b58364bf7f1951c309e0cba0595201cd73f9a": "1812400000000000000000", - "2309d34091445b3232590bd70f4f10025b2c9509": "10000000000000000000000", - "d89bc271b27ba3ab6962c94a559006ae38d5f56a": "2000000000000000000000", - "ff0e2fec304207467e1e3307f64cbf30af8fd9cd": "2000000000000000000000", - "c0b0b7a8a6e1acdd05e47f94c09688aa16c7ad8d": "64234000000000000000", - "b66f92124b5e63035859e390628869dbdea9485e": "9850000000000000000000", - "a9e6e25e656b762558619f147a21985b8874edfe": "2000000000000000000000", - "a43e1947a9242b355561c30a829dfeeca2815af8": "3878255000000000000000", - "8b20ad3b94656dbdc0dd21a393d8a7d9e02138cb": "3000000000000000000000", - "aca2a838330b17302da731d30db48a04f0f207c1": "1337000000000000000000", - "fa60868aafd4ff4c5c57914b8ed58b425773dfa9": "8557400000000000000000", - "1848003c25bfd4aa90e7fcb5d7b16bcd0cffc0d8": "1000000000000000000000", - "b4b185d943ee2b58631e33dff5af6854c17993ac": "1000000000000000000000", - "7719888795ad745924c75760ddb1827dffd8cda8": "1999980000000000000000", - "ccd521132d986cb96869842622a7dda26c3ed057": "2000000000000000000000", - "253e32b74ea4490ab92606fda0aa257bf23dcb8b": "10000000000000000000000", - "3712367e5e55a96d5a19168f6eb2bc7e9971f869": "1000000000000000000000", - "8f29a14a845ad458f2d108b568d813166bcdf477": "10000000000000000000000", - "51a8c2163602a32ee24cf4aa97fd9ea414516941": "62904000000000000000", - "61cea71fa464d62a07063f920b0cc917539733d8": "1670000000000000000000", - "6f81f3abb1f933b1df396b8e9cc723a89b7c9806": "280000000000000000000", - "61b1b8c012cd4c78f698e470f90256e6a30f48dd": "200000000000000000000", - "4f3f2c673069ac97c2023607152981f5cd6063a0": "600000000000000000000", - "e2efa5fca79538ce6068bf31d2c516d4d53c08e5": "131200000000000000000", - "2383c222e67e969190d3219ef14da37850e26c55": "2000000000000000000000", - "eac3af5784927fe9a598fc4eec38b8102f37bc58": "1000000000000000000000", - "4fe56ab3bae1b0a44433458333c4b05a248f8241": "2180000000000000000000", - "fe9cfc3bb293ddb285e625f3582f74a6b0a5a6cd": "1970000000000000000000", - "f48e1f13f6af4d84b371d7de4b273d03a263278e": "600000000000000000000", - "1ba9228d388727f389150ea03b73c82de8eb2e09": "7258000000000000000000", - "37a7a6ff4ea3d60ec307ca516a48d3053bb79cbb": "2000000000000000000000", - "e33840d8bca7da98a6f3d096d83de78b70b71ef8": "2000000000000000000000", - "8e7fd23848f4db07906a7d10c04b21803bb08227": "1000000000000000000000", - "07d4334ec385e8aa54eedaeadb30022f0cdfa4ab": "2629946000000000000000", - "d4b085fb086f3d0d68bf12926b1cc3142cae8770": "3700000000000000000000", - "5a87f034e6f68f4e74ffe60c64819436036cf7d7": "20000000000000000000", - "c00ab080b643e1c2bae363e0d195de2efffc1c44": "500000000000000000000", - "22f3c779dd79023ea92a78b65c1a1780f62d5c4a": "1970000000000000000000", - "c7d5c7054081e918ec687b5ab36e973d18132935": "182000000000000000000", - "9662ee021926682b31c5f200ce457abea76c6ce9": "670500000000000000000", - "116a09df66cb150e97578e297fb06e13040c893c": "2000000000000000000000", - "b7240af2af90b33c08ae9764103e35dce3638428": "8464547000000000000000", - "e8b28acda971725769db8f563d28666d41ddab6c": "10000000000000000000000", - "17d4918dfac15d77c47f9ed400a850190d64f151": "2000000000000000000000", - "c42250b0fe42e6b7dcd5c890a6f0c88f5f5fb574": "149800000000000000000", - "5da2a9a4c2c0a4a924cbe0a53ab9d0c627a1cfa0": "733202000000000000000", - "5869fb867d71f1387f863b698d09fdfb87c49b5c": "3666000000000000000000", - "d49a75bb933fca1fca9aa1303a64b6cb44ea30e1": "10000000000000000000000", - "76331e30796ce664b2700e0d4153700edc869777": "2000000000000000000000", - "8a5fb75793d043f1bcd43885e037bd30a528c927": "356500000000000000000", - "fc0ee6f7c2b3714ae9916c45566605b656f32441": "1760000000000000000000", - "bf50ce2e264b9fe2b06830617aedf502b2351b45": "1000000000000000000000", - "0f6000de1578619320aba5e392706b131fb1de6f": "499986000000000000000", - "c953f934c0eb2d0f144bdab00483fd8194865ce7": "2000000000000000000000", - "24fd9a6c874c2fab3ff36e9afbf8ce0d32c7de92": "1337000000000000000000", - "c6cd68ec35362c5ad84c82ad4edc232125912d99": "27750000000000000000000", - "2a67660a1368efcd626ef36b2b1b601980941c05": "133700000000000000000", - "9deb39027af877992b89f2ec4a1f822ecdf12693": "2000000000000000000000", - "c12f881fa112b8199ecbc73ec4185790e614a20f": "2000000000000000000000", - "d58a52e078a805596b0d56ea4ae1335af01c66eb": "267400000000000000000", - "4d7cfaa84cb33106800a8c802fb8aa463896c599": "1790000000000000000000", - "0ee391f03c765b11d69026fd1ab35395dc3802a0": "200000000000000000000", - "a192f06ab052d5fd7f94eea8318e827815fe677a": "131400000000000000000", - "8f0ab894bd3f4e697dbcfb859d497a9ba195994a": "39501652000000000000000", - "387eeafd6b4009deaf8bd5b85a72983a8dcc3487": "4000000000000000000000", - "03b0f17cd4469ddccfb7da697e82a91a5f9e7774": "20000000000000000000", - "11172b278ddd44eea2fdf4cb1d16962391c453d9": "935900000000000000000000", - "33d172ab075c51db1cd40a8ca8dbff0d93b843bb": "5727139000000000000000", - "909b5e763a39dcc795223d73a1dbb7d94ca75ac8": "2000000000000000000000", - "0ca12ab0b9666cf0cec6671a15292f2653476ab2": "210000600000000000000000", - "6b5ae7bf78ec75e90cb503c778ccd3b24b4f1aaf": "800000000000000000000", - "d9e3857efd1e202a441770a777a49dcc45e2e0d3": "223500000000000000000", - "d703c6a4f11d60194579d58c2766a7ef16c30a29": "2000000000000000000000", - "838bd565f99fde48053f7917fe333cf84ad548ab": "200000000000000000000", - "8168edce7f2961cf295b9fcd5a45c06cdeda6ef5": "200000000000000000000", - "de50868eb7e3c71937ec73fa89dd8b9ee10d45aa": "1000000000000000000000", - "087498c0464668f31150f4d3c4bcdda5221ba102": "20000000000000000000", - "613fab44b16bbe554d44afd178ab1d02f37aeaa5": "2000000000000000000000", - "e2ee691f237ee6529b6557f2fcdd3dcf0c59ec63": "5450048000000000000000", - "a9ed377b7d6ec25971c1a597a3b0f3bead57c98f": "400000000000000000000", - "175feeea2aa4e0efda12e1588d2f483290ede81a": "200000000000000000000", - "b51ddcb4dd4e8ae6be336dd9654971d9fec86b41": "421133000000000000000", - "92c0f573eccf62c54810ee6ba8d1f113542b301b": "3384000000000000000000", - "a109e18bb0a39c9ef82fa19597fc5ed8e9eb6d58": "1640000000000000000000", - "f74e6e145382b4db821fe0f2d98388f45609c69f": "100000000000000000000", - "378f37243f3ff0bef5e1dc85eb4308d9340c29f9": "2000200000000000000000", - "84e9949680bece6841b9a7e5250d08acd87d16cd": "200000000000000000000", - "882bd3a2e9d74110b24961c53777f22f1f46dc5d": "13370000000000000000000", - "acce01e0a70610dc70bb91e9926fa9957f372fba": "537000000000000000000", - "c5f687717246da8a200d20e5e9bcac60b67f3861": "28650000000000000000", - "e14617f6022501e97e7b3e2d8836aa61f0ff2dba": "200000000000000000000", - "076ee99d3548623a03b5f99859d2d785a1778d48": "200000000000000000000", - "2c424ee47f583cdce07ae318b6fad462381d4d2b": "4000000000000000000000", - "f98250730c4c61c57f129835f2680894794542f3": "4000000000000000000000", - "ed1b24b6912d51b334ac0de6e771c7c0454695ea": "40000000000000000000", - "ffd5170fd1a8118d558e7511e364b24906c4f6b3": "60085000000000000000", - "bf49c14898316567d8b709c2e50594b366c6d38c": "733202000000000000000", - "65ea26eabbe2f64ccccfe06829c25d4637520225": "700000000000000000000", - "5c5419565c3aad4e714e0739328e3521c98f05cc": "528000000000000000000", - "c53b50fd3b2b72bc6c430baf194a515585d3986d": "20000000000000000000", - "2b74c373d04bfb0fd60a18a01a88fbe84770e58c": "40000000000000000000", - "d97f4526dea9b163f8e8e33a6bcf92fb907de6ec": "284000000000000000000", - "a4a49f0bc8688cc9e6dc04e1e08d521026e65574": "200000000000000000000", - "575c00c2818210c28555a0ff29010289d3f82309": "10000000000000000000000", - "3f1233714f204de9de4ee96d073b368d8197989f": "38606000000000000000", - "f964d98d281730ba35b2e3a314796e7b42fedf67": "1543800000000000000000", - "1deec01abe5c0d952de9106c3dc30639d85005d6": "2000000000000000000000", - "12d60d65b7d9fc48840be5f891c745ce76ee501e": "21359400000000000000000", - "5c6136e218de0a61a137b2b3962d2a6112b809d7": "294273000000000000000", - "cd43258b7392a930839a51b2ef8ad23412f75a9f": "2000000000000000000000", - "db3f258ab2a3c2cf339c4499f75a4bd1d3472e9e": "1500000000000000000000", - "0edd4b580ff10fe06c4a03116239ef96622bae35": "197000000000000000000", - "1d157c5876c5cad553c912caf6ce2d5277e05c73": "2000000000000000000000", - "cda1b886e3a795c9ba77914e0a2fe5676f0f5ccf": "106024000000000000000", - "f50cbafd397edd556c0678988cb2af5c2617e0a2": "716000000000000000000", - "327bb49e754f6fb4f733c6e06f3989b4f65d4bee": "20000000000000000000", - "c44bdec8c36c5c68baa2ddf1d431693229726c43": "100000000000000000000000", - "34e2849bea583ab0cc37975190f322b395055582": "7780340000000000000000", - "9221c9ce01232665741096ac07235903ad1fe2fc": "126489000000000000000", - "ff3ded7a40d3aff0d7a8c45fa6136aa0433db457": "1999800000000000000000", - "10b5b34d1248fcf017f8c8ffc408ce899ceef92f": "267400000000000000000", - "f1a1f320407964fd3c8f2e2cc8a4580da94f01ea": "2000040000000000000000", - "6c800d4b49ba07250460f993b8cbe00b266a2553": "492500000000000000000", - "f827d56ed2d32720d4abf103d6d0ef4d3bcd559b": "26265000000000000000", - "ffb9c7217e66743031eb377af65c77db7359dcda": "40000000000000000000", - "530319db0a8f93e5bb7d4dbf4816314fbed8361b": "2000000000000000000000", - "9c28a2c4086091cb5da226a657ce3248e8ea7b6f": "280000000000000000000", - "db23a6fef1af7b581e772cf91882deb2516fc0a7": "200000000000000000000", - "6636d7ac637a48f61d38b14cfd4865d36d142805": "500000000000000000000", - "b3c260609b9df4095e6c5dff398eeb5e2df49985": "254030000000000000000", - "58e5c9e344c806650dacfc904d33edba5107b0de": "19100000000000000000", - "4f67396d2553f998785f704e07a639197dd1948d": "300080000000000000000", - "510d8159cc945768c7450790ba073ec0d9f89e30": "2560000000000000000000", - "593c48935beaff0fde19b04d309cd530a28e52ce": "4000000000000000000000", - "c27f4e08099d8cf39ee11601838ef9fc06d7fc41": "1790000000000000000000", - "07723e3c30e8b731ee456a291ee0e798b0204a77": "2000000000000000000000", - "0a652e2a8b77bd97a790d0e91361c98890dbb04e": "1000000000000000000000", - "671015b97670b10d5e583f3d62a61c1c79c5143f": "400000000000000000000", - "7cc24a6a958c20c7d1249660f7586226950b0d9a": "1970000000000000000000", - "6ef9e8c9b6217d56769af97dbb1c8e1b8be799d2": "182000000000000000000", - "5c4368918ace6409c79eca80cdaae4391d2b624e": "4000000000000000000000", - "043707071e2ae21eed977891dc79cd5d8ee1c2da": "2000000000000000000000", - "39bfd978689bec048fc776aa15247f5e1d7c39a2": "20000000000000000000000", - "05915d4e225a668162aee7d6c25fcfc6ed18db03": "66348000000000000000", - "3f551ba93cd54693c183fb9ad60d65e1609673c9": "2000000000000000000000", - "a8c0b02faf02cb5519dda884de7bbc8c88a2da81": "16700000000000000000", - "bd0c5cd799ebc48642ef97d74e8e429064fee492": "326000000000000000000", - "0a931b449ea8f12cdbd5e2c8cc76bad2c27c0639": "23031000000000000000", - "2ea5fee63f337a376e4b918ea82148f94d48a626": "1864242000000000000000", - "cc6c2df00e86eca40f21ffda1a67a1690f477c65": "3160000000000000000000", - "e5e37e19408f2cfbec83349dd48153a4a795a08f": "4200000000000000000000", - "f555a27bb1e2fd4e2cc784caee92939fc06e2fc9": "2000000000000000000000", - "dcf9719be87c6f46756db4891db9b611d2469c50": "1000000000000000000000", - "8e2f9034c9254719c38e50c9aa64305ed696df1e": "4728000000000000000000", - "a01f12d70f44aa7b113b285c22dcdb45873454a7": "18200000000000000000", - "bce40475d345b0712dee703d87cd7657fc7f3b62": "7750000000000000000000", - "bb19bf91cbad74cceb5f811db27e411bc2ea0656": "17600000000000000000", - "acc062702c59615d3444ef6214b8862b009a02ed": "1499936000000000000000", - "449ac4fbe383e36738855e364a57f471b2bfa131": "197000000000000000000000", - "ad59a78eb9a74a7fbdaefafa82eada8475f07f95": "500000000000000000000", - "6b6577f3909a4d6de0f411522d4570386400345c": "1880000000000000000000", - "79bf2f7b6e328aaf26e0bb093fa22da29ef2f471": "1790000000000000000000", - "940f715140509ffabf974546fab39022a41952d2": "1400000000000000000000", - "1d572edd2d87ca271a6714c15a3b37761dcca005": "127674000000000000000", - "d78ecd25adc86bc2051d96f65364866b42a426b7": "3877300000000000000000", - "f9729d48282c9e87166d5eef2d01eda9dbf78821": "99981000000000000000", - "17762560e82a93b3f522e0e524adb8612c3a7470": "1000000000000000000000", - "d500e4d1c9824ba9f5b635cfa3a8c2c38bbd4ced": "400000000000000000000", - "a11effab6cf0f5972cffe4d56596e98968144a8f": "1670000000000000000000", - "f64ecf2117931c6d535a311e4ffeaef9d49405b8": "2674000000000000000000", - "229cc4711b62755ea296445ac3b77fc633821cf2": "39481000000000000000", - "fc989cb487bf1a7d17e4c1b7c4b7aafdda6b0a8d": "20000000000000000000", - "ea8527febfa1ade29e26419329d393b940bbb7dc": "1999944000000000000000", - "bce13e22322acfb355cd21fd0df60cf93add26c6": "200000000000000000000", - "19ff244fcfe3d4fa2f4fd99f87e55bb315b81eb6": "200000000000000000000", - "d2581a55ce23ab10d8ad8c44378f59079bd6f658": "8800000000000000000000", - "4073fa49b87117cb908cf1ab512da754a932d477": "1970000000000000000000", - "b6a82933c9eadabd981e5d6d60a6818ff806e36b": "400000000000000000000", - "c79806032bc7d828f19ac6a640c68e3d820fa442": "20000000000000000000", - "577b2d073c590c50306f5b1195a4b2ba9ecda625": "373600000000000000000", - "7f13d760498d7193ca6859bc95c901386423d76c": "5000000000000000000000", - "416784af609630b070d49a8bcd12235c6428a408": "20000000000000000000000", - "fbe71622bcbd31c1a36976e7e5f670c07ffe16de": "400000000000000000000", - "a5698035391e67a49013c0002079593114feb353": "240000000000000000000", - "ab2871e507c7be3965498e8fb462025a1a1c4264": "775000000000000000000", - "9c78fbb4df769ce2c156920cfedfda033a0e254a": "1970000000000000000000", - "95e6f93dac228bc7585a25735ac2d076cc3a4017": "6000000000000000000000", - "3c1f91f301f4b565bca24751aa1f761322709ddd": "1790000000000000000000", - "f77f9587ff7a2d7295f1f571c886bd33926a527c": "1999800000000000000000", - "755f587e5efff773a220726a13d0f2130d9f896b": "1000000000000000000000", - "8c6aa882ee322ca848578c06cb0fa911d3608305": "600000000000000000000", - "492cb5f861b187f9df21cd4485bed90b50ffe22d": "499928000000000000000", - "95a577dc2eb3ae6cb9dfc77af697d7efdfe89a01": "136000000000000000000", - "4173419d5c9f6329551dc4d3d0ceac1b701b869e": "88000000000000000000", - "456ae0aca48ebcfae166060250525f63965e760f": "300000000000000000000", - "81f8de2c283d5fd4afbda85dedf9760eabbbb572": "3000000000000000000000", - "cd0af3474e22f069ec3407870dd770443d5b12b0": "2626262000000000000000", - "283c2314283c92d4b064f0aef9bb5246a7007f39": "200000000000000000000", - "29b3f561ee7a6e25941e98a5325b78adc79785f3": "100000000000000000000", - "cd4306d7f6947ac1744d4e13b8ef32cb657e1c00": "499986000000000000000", - "d9ec2efe99ff5cf00d03a8317b92a24aef441f7e": "2000000000000000000000", - "83dbf8a12853b40ac61996f8bf1dc8fdbaddd329": "970000000000000000000", - "9d93fab6e22845f8f45a07496f11de71530debc7": "1998000000000000000000", - "fd204f4f4aba2525ba728afdf78792cbdeb735ae": "2000000000000000000000", - "99fad50038d0d9d4c3fbb4bce05606ecadcd5121": "2000000000000000000000", - "d206aaddb336d45e7972e93cb075471d15897b5d": "600000000000000000000", - "428a1ee0ed331d7952ccbe1c7974b2852bd1938a": "2208370000000000000000", - "690228e4bb12a8d4b5e0a797b0c5cf2a7509131e": "1880000000000000000000", - "fa3a1aa4488b351aa7560cf5ee630a2fd45c3222": "878850000000000000000", - "0372e852582e0934344a0fed2178304df25d4628": "20000000000000000000000", - "35ea2163a38cdf9a123f82a5ec00258dae0bc767": "4000000000000000000000", - "d1fed0aee6f5dfd7e25769254c3cfad15adeccaa": "730000000000000000000", - "c05b740620f173f16e52471dc38b9c514a0b1526": "140000000000000000000", - "87e3062b2321e9dfb0875ce3849c9b2e3522d50a": "10000000000000000000000", - "303fbaebbe46b35b6e5b74946a5f99bc1585cae7": "878148000000000000000", - "e7a8e471eafb798f4554cc6e526730fd56e62c7d": "1000000000000000000000", - "ad7dd053859edff1cb6f9d2acbed6dd5e332426f": "1970000000000000000000", - "dc4345d6812e870ae90c568c67d2c567cfb4f03c": "6700000000000000000000", - "a6a08252c8595177cc2e60fc27593e2379c81fb1": "20055000000000000000", - "a9af21acbe482f8131896a228036ba51b19453c3": "49999000000000000000", - "86e3fe86e93da486b14266eadf056cbfa4d91443": "2000000000000000000000", - "744b03bba8582ae5498e2dc22d19949467ab53fc": "500000000000000000000", - "d3118ea3c83505a9d893bb67e2de142d537a3ee7": "20000000000000000000", - "b32f1c2689a5ce79f1bc970b31584f1bcf2283e7": "20000000000000000000", - "4828e4cbe34e1510afb72c2beeac8a4513eaebd9": "3940000000000000000000", - "b07bcc085ab3f729f24400416837b69936ba8873": "2000140000000000000000", - "bdc74873af922b9df474853b0fa7ff0bf8c82695": "3999000000000000000000", - "15ebd1c7cad2aff19275c657c4d808d010efa0f5": "200550000000000000000", - "cbc04b4d8b82caf670996f160c362940d66fcf1a": "6000000000000000000000", - "8197948121732e63d9c148194ecad46e30b749c8": "4000000000000000000000", - "69797bfb12c9bed682b91fbc593591d5e4023728": "10000000000000000000000", - "be9b8c34b78ee947ff81472eda7af9d204bc8466": "150000000000000000000", - "df3f57b8ee6434d047223def74b20f63f9e4f955": "250500000000000000000", - "a3ae1879007d801cb5f352716a4dd8ba2721de3d": "200000000000000000000000", - "cb4bb1c623ba28dc42bdaaa6e74e1d2aa1256c2a": "1999944000000000000000", - "e03c00d00388ecbf4f263d0ac778bb41a57a40d9": "1000072000000000000000", - "fc2c1f88961d019c3e9ea33009152e0693fbf88a": "8000000000000000000000", - "8599cbd5a6a9dcd4b966be387d69775da5e33c6f": "58180000000000000000000", - "b7a31a7c38f3db09322eae11d2272141ea229902": "2000000000000000000000", - "231a15acc199c89fa9cb22441cc70330bdcce617": "500000000000000000000", - "3fbed6e7e0ca9c84fbe9ebcf9d4ef9bb49428165": "2000000000000000000000", - "92cfd60188efdfb2f8c2e7b1698abb9526c1511f": "2000000000000000000000", - "5c936f3b9d22c403db5e730ff177d74eef42dbbf": "75000000000000000000", - "931fe712f64207a2fd5022728843548bfb8cbb05": "2000000000000000000000", - "08d54e83ad486a934cfaeae283a33efd227c0e99": "1039000000000000000000", - "a339a3d8ca280e27d2415b26d1fc793228b66043": "1013600000000000000000", - "581f34b523e5b41c09c87c298e299cbc0e29d066": "1131607000000000000000", - "caaa68ee6cdf0d34454a769b0da148a1faaa1865": "7216000000000000000000", - "0838a7768d9c2aca8ba279adfee4b1f491e326f1": "200000000000000000000", - "dde77a4740ba08e7f73fbe3a1674912931742eeb": "19867021000000000000000", - "cbe810fe0fecc964474a1db97728bc87e973fcbd": "10000000000000000000000", - "86c28b5678af37d727ec05e4447790f15f71f2ea": "200000000000000000000", - "dd6c062193eac23d2fdbf997d5063a346bb3b470": "20000000000000000000", - "5975b9528f23af1f0e2ec08ac8ebaa786a2cb8e0": "345827000000000000000", - "e29d8ae452dcf3b6ac645e630409385551faae0a": "80276000000000000000", - "2fbc85798a583598b522166d6e9dda121d627dbc": "200000000000000000000", - "7a36aba5c31ea0ca7e277baa32ec46ce93cf7506": "20000000000000000000000", - "dbcbcd7a57ea9db2349b878af34b1ad642a7f1d1": "200000000000000000000", - "92aae59768eddff83cfe60bb512e730a05a161d7": "1708015000000000000000", - "a5e93b49ea7c509de7c44d6cfeddef5910deaaf2": "2000000000000000000000", - "e33d980220fab259af6a1f4b38cf0ef3c6e2ea1a": "2000000000000000000000", - "8ed0af11ff2870da0681004afe18b013f7bd3882": "4000000000000000000000", - "f23e5c633221a8f7363e65870c9f287424d2a960": "1380000000000000000000", - "96334bfe04fffa590213eab36514f338b864b736": "400000000000000000000", - "fa1f1971a775c3504fef5079f640c2c4bce7ac05": "2000000000000000000000", - "df44c47fc303ac76e74f97194cca67b5bb3c023f": "591000000000000000000", - "4b74f5e58e2edf76daf70151964a0b8f1de0663c": "324020000000000000000", - "e38b91b35190b6d9deed021c30af094b953fdcaa": "33340000000000000000", - "6b38de841fad7f53fe02da115bd86aaf662466bd": "1730000000000000000000", - "11675a25554607a3b6c92a9ee8f36f75edd3e336": "159800000000000000000", - "0ba8705bf55cf219c0956b5e3fc01c4474a6cdc1": "94963000000000000000", - "0f05f120c89e9fbc93d4ab0c5e2b4a0df092b424": "30000000000000000000000", - "fdd1195f797d4f35717d15e6f9810a9a3ff55460": "18200000000000000000", - "63a61dc30a8e3b30a763c4213c801cbf98738178": "1000000000000000000000", - "e5bdf34f4ccc483e4ca530cc7cf2bb18febe92b3": "126260000000000000000", - "d6e09e98fe1300332104c1ca34fbfac554364ed9": "2000000000000000000000", - "5bd6862d517d4de4559d4eec0a06cad05e2f946e": "200000000000000000000", - "7294ec9da310bc6b4bbdf543b0ef45abfc3e1b4d": "22000000000000000000000", - "ae34861d342253194ffc6652dfde51ab44cad3fe": "466215000000000000000", - "f50ae7fab4cfb5a646ee04ceadf9bf9dd5a8e540": "3999952000000000000000", - "dd2bdfa917c1f310e6fa35aa8af16939c233cd7d": "400000000000000000000", - "e0060462c47ff9679baef07159cae08c29f274a9": "2000000000000000000000", - "b7d12e84a2e4c4a6345af1dd1da9f2504a2a996e": "200000000000000000000", - "f5500178cb998f126417831a08c2d7abfff6ab5f": "1308923000000000000000", - "fd377a385272900cb436a3bb7962cdffe93f5dad": "2000000000000000000000", - "a4a83a0738799b971bf2de708c2ebf911ca79eb2": "600000000000000000000", - "52a5e4de4393eeccf0581ac11b52c683c76ea15d": "19999800000000000000000", - "b07fdeaff91d4460fe6cd0e8a1b0bd8d22a62e87": "5260000000000000000000", - "35f5860149e4bbc04b8ac5b272be55ad1aca58e0": "200000000000000000000", - "fb135eb15a8bac72b69915342a60bbc06b7e077c": "20000000000000000000000", - "02d4a30968a39e2b3498c3a6a4ed45c1c6646822": "2000000000000000000000", - "e44b7264dd836bee8e87970340ed2b9aed8ed0a5": "5772100000000000000000", - "e90a354cec04d69e5d96ddc0c5138d3d33150aa0": "499971000000000000000", - "693d83be09459ef8390b2e30d7f7c28de4b4284e": "2000000000000000000000", - "87bf7cd5d8a929e1c785f9e5449106ac232463c9": "77800000000000000000", - "e5f8ef6d970636b0dcaa4f200ffdc9e75af1741c": "2000000000000000000000", - "fef09d70243f39ed8cd800bf9651479e8f4aca3c": "200000000000000000000", - "e98c91cadd924c92579e11b41217b282956cdaa1": "135800000000000000000", - "c2836188d9a29253e0cbda6571b058c289a0bb32": "2000000000000000000000", - "afa6946effd5ff53154f82010253df47ae280ccc": "1970000000000000000000", - "43c7ebc5b3e7af16f47dc5617ab10e0f39b4afbb": "1910000000000000000000", - "097ecda22567c2d91cb03f8c5215c22e9dcda949": "20055000000000000000", - "3e66b84769566ab67945d5fa81373556bcc3a1fa": "152000000000000000000", - "56373daab46316fd7e1576c61e6affcb6559ddd7": "215340000000000000000", - "faaeba8fc0bbda553ca72e30ef3d732e26e82041": "1338337000000000000000", - "f54c19d9ef3873bfd1f7a622d02d86249a328f06": "44284729000000000000000", - "825309a7d45d1812f51e6e8df5a7b96f6c908887": "2365000000000000000000", - "89009e3c6488bd5e570d1da34eabe28ed024de1b": "20000000000000000000000", - "63977cad7d0dcdc52b9ac9f2ffa136e8642882b8": "75000000000000000000", - "c239abdfae3e9af5457f52ed2b91fd0ab4d9c700": "2000000000000000000000", - "1a4ec6a0ae7f5a9427d23db9724c0d0cffb2ab2f": "179000000000000000000", - "a12a6c2d985daf0e4f5f207ae851aaf729b332cd": "100000000000000000000000", - "cbe52fc533d7dd608c92a260b37c3f45deb4eb33": "1000000000000000000000", - "abb2e6a72a40ba6ed908cdbcec3c5612583132fe": "1460000000000000000000", - "6503860b191008c15583bfc88158099301762828": "1000000000000000000000", - "a0228240f99e1de9cb32d82c0f2fa9a3d44b0bf3": "1600000000000000000000", - "e154daeadb545838cbc6aa0c55751902f528682a": "4925000000000000000000", - "8e92aba38e72a098170b92959246537a2e5556c0": "267400000000000000000", - "d23d7affacdc3e9f3dae7afcb4006f58f8a44600": "3600000000000000000000", - "00d78d89b35f472716eceafebf600527d3a1f969": "27750000000000000000000", - "120f9de6e0af7ec02a07c609ca8447f157e6344c": "267400000000000000000", - "e0352fdf819ba265f14c06a6315c4ac1fe131b2e": "1000000000000000000000", - "8f47328ee03201c9d35ed2b5412b25decc859362": "2000000000000000000000", - "453e359a3397944c5a275ab1a2f70a5e5a3f6989": "240000000000000000000", - "9bf58efbea0784eb068adecfa0bb215084c73a35": "5800000000000000000000", - "21bfe1b45cacde6274fd8608d9a178bf3eeb6edc": "2009400000000000000000", - "d1d5b17ffe2d7bbb79cc7d7930bcb2e518fb1bbf": "3000000000000000000000", - "20a29c5079e26b3f18318bb2e50e8e8b346e5be8": "499986000000000000000", - "7d392852f3abd92ff4bb5bb26cb60874f2be6795": "1000070000000000000000", - "55852943492970f8d629a15366cdda06a94f4513": "2000000000000000000000", - "ab5dfc1ea21adc42cf8c3f6e361e243fd0da61e5": "300000000000000000000", - "9d2bfc36106f038250c01801685785b16c86c60d": "380000000000000000000000", - "6e60aee1a78f8eda8b424c73e353354ae67c3042": "3490300000000000000000", - "7e29290038493559194e946d4e460b96fc38a156": "309072000000000000000", - "6006e36d929bf45d8f16231b126a011ae283d925": "176000000000000000000", - "d6d03572a45245dbd4368c4f82c95714bd2167e2": "1162200000000000000000", - "d1432538e35b7664956ae495a32abdf041a7a21c": "19700000000000000000000", - "2276264bec8526c0c0f270677abaf4f0e441e167": "1000000000000000000000", - "c8814e34523e38e1f927a7dce8466a447a093603": "10000000000000000000000", - "688a569e965524eb1d0ac3d3733eab909fb3d61e": "1320000000000000000000", - "90dc09f717fc2a5b69fd60ba08ebf40bf4e8246c": "4000086000000000000000", - "239a733e6b855ac592d663156186a8a174d2449e": "1637020000000000000000", - "bcdfacb9d9023c3417182e9100e8ea1d373393a3": "59100000000000000000", - "ba6440aeb3737b8ef0f1af9b0c15f4c214ffc7cf": "1000000000000000000000", - "322e5c43b0f524389655a9b3ff24f2d4db3da10f": "4650000000000000000000", - "be5a60689998639ad75bc105a371743eef0f7940": "501700000000000000000", - "b727a9fc82e1cffc5c175fa1485a9befa2cdbdd1": "999000000000000000000", - "a3883a24f7f166205f1a6a9949076c26a76e7178": "1820000000000000000000", - "5e95fe5ffcf998f9f9ac0e9a81dab83ead77003d": "539766000000000000000", - "e60955dc0bc156f6c41849f6bd776ba44b0ef0a1": "299982000000000000000", - "af203e229d7e6d419df4378ea98715515f631485": "1970000000000000000000", - "86499a1228ff2d7ee307759364506f8e8c8307a5": "1970000000000000000000", - "1a04cec420ad432215246d77fe178d339ed0b595": "316000000000000000000", - "cc2b5f448f3528d3fe41cc7d1fa9c0dc76f1b776": "60000000000000000000", - "cb50587412822304ebcba07dab3a0f09fffee486": "1370000000000000000000", - "4ae2a04d3909ef454e544ccfd614bfefa71089ae": "442800000000000000000", - "c8a2c4e59e1c7fc54805580438aed3e44afdf00e": "44000000000000000000", - "5792814f59a33a1843faa01baa089eb02ffb5cf1": "499986000000000000000", - "a1f2854050f872658ed82e52b0ad7bbc1cb921f6": "2010918000000000000000", - "92dca5e102b3b81b60f1a504634947c374a88ccb": "2000000000000000000000", - "732fead60f7bfdd6a9dec48125e3735db1b6654f": "20000000000000000000", - "6bf7b3c065f2c1e7c6eb092ba0d15066f393d1b8": "400000000000000000000", - "cde36d81d128c59da145652193eec2bfd96586ef": "4000000000000000000000", - "40eddb448d690ed72e05c225d34fc8350fa1e4c5": "7000000000000000000000", - "454b61b344c0ef965179238155f277c3829d0b38": "2000000000000000000000", - "ac3da526cfce88297302f34c49ca520dc271f9b2": "800000000000000000000", - "c989eec307e8839b9d7237cfda08822962abe487": "400000000000000000000", - "e99de258a4173ce9ac38ede26c0b3bea3c0973d5": "1656800000000000000000", - "ff0cb06c42e3d88948e45bd7b0d4e291aefeea51": "1910000000000000000000", - "0990e81cd785599ea236bd1966cf526302c35b9c": "1000000000000000000000", - "6da0ed8f1d69339f059f2a0e02471cb44fb8c3bb": "935900000000000000000", - "5d958a9bd189c2985f86c58a8c69a7a78806e8da": "10200000000000000000000", - "98be696d51e390ff1c501b8a0f6331b628ddc5ad": "2000000000000000000000", - "09d0b8cd077c69d9f32d9cca43b3c208a21ed48b": "150011000000000000000", - "96e7c0c9d5bf10821bf140c558a145b7cac21397": "1056000000000000000000", - "5b736eb18353629bde9676dadd165034ce5ecc68": "1970000000000000000000", - "e5a365343cc4eb1e770368e1f1144a77b832d7e0": "20000000000000000000", - "4cf5537b85842f89cfee359eae500fc449d2118f": "1000000000000000000000", - "c71f1d75873f33dcb2dd4b3987a12d0791a5ce27": "1015200000000000000000", - "9bf703b41c3624e15f4054962390bcba3052f0fd": "6055000000000000000000", - "145e1de0147911ccd880875fbbea61f6a142d11d": "4000000000000000000000", - "68419c6dd2d3ce6fcbb3c73e2fa079f06051bde6": "1970000000000000000000", - "d8eb78503ec31a54a90136781ae109004c743257": "1000000000000000000000", - "f25e4c70bc465632c89e5625a832a7722f6bffab": "4488000000000000000000", - "7b4d2a38269069c18557770d591d24c5121f5e83": "700000000000000000000", - "27d158ac3d3e1109ab6e570e90e85d3892cd7680": "100000000000000000000", - "d3679a47df2d99a49b01c98d1c3e0c987ce1e158": "280000000000000000000", - "095b949de3333a377d5019d893754a5e4656ff97": "340000000000000000000", - "6b17598a8ef54f797ae515ccb6517d1859bf8011": "100000000000000000000", - "3eaf0879b5b6db159b589f84578b6a74f6c10357": "7253657000000000000000", - "40d45d9d7625d15156c932b771ca7b0527130958": "100000000000000000000000", - "0392549a727f81655429cb928b529f25df4d1385": "26248000000000000000", - "c5b009baeaf788a276bd35813ad65b400b849f3b": "1000000000000000000000", - "6ed884459f809dfa1016e770edaf3e9fef46fa30": "3400170000000000000000", - "439d2f2f5110a4d58b1757935015408740fec7f8": "3830421000000000000000", - "dc46c13325cd8edf0230d068896486f007bf4ef1": "1337000000000000000000", - "8c54c7f8b9896e75d7d5f5c760258699957142ad": "40000000000000000000", - "61c8f1fa43bf846999ecf47b2b324dfb6b63fe3a": "800000000000000000000", - "935069444a6a984de2084e46692ab99f671fc727": "9000000000000000000000", - "fc49c1439a41d6b3cf26bb67e0365224e5e38f5f": "1000076000000000000000", - "e1dfb5cc890ee8b2877e885d267c256187d019e6": "100000000000000000000", - "ee7c3ded7c28f459c92fe13b4d95bafbab02367d": "700000000000000000000", - "a5874d754635a762b381a5c4c792483af8f23d1d": "50000000000000000000", - "cfbb32b7d024350e3321fa20c9a914035372ffc6": "401100000000000000000", - "2bc429d618a66a4cf82dbb2d824e9356effa126a": "1999944000000000000000", - "db244f97d9c44b158a40ed9606d9f7bd38913331": "102000000000000000000", - "55e220876262c218af4f56784798c7e55da09e91": "133566000000000000000", - "ca41ccac30172052d522cd2f2f957d248153409f": "1970000000000000000000", - "b11fa7fb270abcdf5a2eab95aa30c4b53636efbf": "800000000000000000000", - "0ffea06d7113fb6aec2869f4a9dfb09007facef4": "225416000000000000000", - "646628a53c2c4193da88359ce718dadd92b7a48d": "200032000000000000000", - "ca8409083e01b397cf12928a05b68455ce6201df": "1600000000000000000000", - "dbbcbb79bf479a42ad71dbcab77b5adfaa872c58": "1730000000000000000000", - "db7d4037081f6c65f9476b0687d97f1e044d0a1d": "660000000000000000000", - "4be90d412129d5a4d0424361d6649d4e47a62316": "1015200000000000000000", - "e3ab3ca9b870e3f548517306bba4de2591afafc2": "1200062000000000000000", - "5c61ab79b408dd3229f662593705d72f1e147bb8": "22729000000000000000000", - "4f177f9d56953ded71a5611f393322c30279895c": "246000000000000000000", - "e6cb260b716d4c0ab726eeeb07c8707204e276ae": "1000000000000000000000", - "44355253b27748e3f34fe9cae1fb718c8f249529": "200000000000000000000", - "a309df54cabce70c95ec3033149cd6678a6fd4cf": "223600000000000000000", - "ec4867d2175ab5b9469361595546554684cda460": "3000000000000000000000", - "8d06e464245cad614939e0af0845e6d730e20374": "200359000000000000000", - "9810e34a94db6ed156d0389a0e2b80f4fd6b0a8a": "2000000000000000000000", - "dcfff3e8d23c2a34b56bd1b3bd45c79374432239": "5000000000000000000000", - "7d7dd5ee614dbb6fbfbcd26305247a058c41faa1": "2000000000000000000000", - "8a9eca9c5aba8e139f8003edf1163afb70aa3aa9": "660000000000000000000", - "d942de4784f7a48716c0fd4b9d54a6e54c5f2f3e": "20000000000000000000000", - "07dae622630d1136381933d2ad6b22b839d82102": "200000000000000000000", - "abf12fa19e82f76c718f01bdca0003674523ef30": "2000000000000000000000", - "411c831cc6f44f1965ec5757ab4e5b3ca4cffd1f": "425000000000000000000", - "99129d5b3c0cde47ea0def4dfc070d1f4a599527": "2000000000000000000000", - "c5cdcee0e85d117dabbf536a3f4069bf443f54e7": "1969606000000000000000", - "f218bd848ee7f9d38bfdd1c4eb2ed2496ae4305f": "500000000000000000000", - "fe549bbfe64740189892932538daaf46d2b61d4f": "40000000000000000000", - "dc3f0e7672f71fe7525ba30b9755183a20b9166a": "9603617000000000000000", - "0e83b850481ab44d49e0a229a2e464902c69539b": "100000000000000000000", - "07ddd0422c86ef65bf0c7fc3452862b1228b08b8": "2065302000000000000000", - "a68c313445c22d919ee46cc2d0cdff043a755825": "75189000000000000000", - "a9e9dbce7a2cb03694799897bed7c54d155fdaa8": "197559000000000000000", - "18fccf62d2c3395453b7587b9e26f5cff9eb7482": "1000000000000000000000", - "ff41d9e1b4effe18d8b0d1f63fc4255fb4e06c3d": "1337000000000000000000", - "8f69eafd0233cadb4059ab779c46edf2a0506e48": "1788210000000000000000", - "9aa48c66e4fb4ad099934e32022e827427f277ba": "10000000000000000000000", - "f46980e3a4a9d29a6a6e90604537a3114bcb2897": "500000000000000000000", - "801732a481c380e57ed62d6c29de998af3fa3b13": "100000000000000000000", - "0cd6a141918d126b106d9f2ebf69e102de4d3277": "20000000000000000000", - "17589a6c006a54cad70103123aae0a82135fdeb4": "4000000000000000000000", - "8725e8c753b3acbfdca55f3c62dfe1a59454968a": "1000090000000000000000", - "d20dcb0b78682b94bc3000281448d557a20bfc83": "895000000000000000000", - "e84f8076a0f2969ecd333eef8de41042986291f2": "432000000000000000000", - "b3145b74506d1a8d047cdcdc55392a7b5350799a": "129314663000000000000000", - "0d9a825ff2bcd397cbad5b711d9dcc95f1cc112d": "12800000000000000000000", - "0ca670eb2c8b96cba379217f5929c2b892f39ef6": "2000000000000000000000", - "25cfc4e25c35c13b69f7e77dbfb08baf58756b8d": "40000000000000000000000", - "182db85293f606e88988c3704cb3f0c0bbbfca5a": "133700000000000000000", - "bd73c3cbc26a175062ea0320dd84b253bce64358": "394000000000000000000", - "2680713d40808e2a50ed013150a2a694b96a7f1d": "1790000000000000000000", - "51e32f14f4ca5e287cdac057a7795ea9e0439953": "500000000000000000000", - "b1e9c5f1d21e61757a6b2ee75913fc5a1a4101c3": "2000000000000000000000", - "d4c4d1a7c3c74984f6857b2f5f07e8face68056d": "2000000000000000000000", - "4651dc420e08c3293b27d2497890eb50223ae2f4": "20000000000000000000000", - "c74a3995f807de1db01a2eb9c62e97d0548f696f": "1000000000000000000000", - "0505a08e22a109015a22f685305354662a5531d5": "2600000000000000000000", - "39c773367c8825d3596c686f42bf0d14319e3f84": "133700000000000000000", - "0f929cf895db017af79f3ead2216b1bd69c37dc7": "2000000000000000000000", - "bdd3254e1b3a6dc6cc2c697d45711aca21d516b2": "2000000000000000000000", - "ae5d221afcd3d29355f508eadfca408ce33ca903": "100000000000000000000000", - "916cf17d71412805f4afc3444a0b8dd1d9339d16": "14300000000000000000", - "4319263f75402c0b5325f263be4a5080651087f0": "983086000000000000000", - "0f1c249cd962b00fd114a9349f6a6cc778d76c4d": "2000000000000000000000", - "54febcce20fe7a9098a755bd90988602a48c089e": "640000000000000000000", - "2c1800f35fa02d3eb6ff5b25285f5e4add13b38d": "906400000000000000000", - "72b904440e90e720d6ac1c2ad79c321dcc1c1a86": "1550000000000000000000", - "b0aa00950c0e81fa3210173e729aaf163a27cd71": "40000000000000000000000", - "663604b0503046e624cd26a8b6fb4742dce02a6f": "65400000000000000000", - "3c98594bf68b57351e8814ae9e6dfd2d254aa06f": "300000000000000000000", - "9c45202a25f6ad0011f115a5a72204f2f2198866": "5014000000000000000000", - "b02d062873334545cea29218e4057760590f7423": "3186000000000000000000", - "7bddb2ee98de19ee4c91f661ee8e67a91d054b97": "1000000000000000000000", - "9cf2928beef09a40f9bfc953be06a251116182fb": "6000000000000000000000", - "51b4758e9e1450e7af4268c3c7b1e7bd6f5c7550": "1000000000000000000000", - "eb570dba975227b1c42d6e8dea2c56c9ad960670": "2000000000000000000000", - "970d8b8a0016d143054f149fb3b8e550dc0797c7": "1000000000000000000000", - "c7b39b060451000ca1049ba154bcfa00ff8af262": "100000000000000000000000", - "945e18769d7ee727c7013f92de24d117967ff317": "2000000000000000000000", - "d18eb9e1d285dabe93e5d4bae76beefe43b521e8": "668500000000000000000", - "c618521321abaf5b26513a4a9528086f220adc6f": "27000000000000000000", - "dd65f6e17163b5d203641f51cc7b24b00f02c8fb": "200000000000000000000", - "131faed12561bb7aee04e5185af802b1c3438d9b": "219000000000000000000", - "1ced6715f862b1ff86058201fcce5082b36e62b2": "6684522000000000000000", - "a0ff5b4cf016027e8323497d4428d3e5a83b8795": "6596500000000000000000", - "02e816afc1b5c0f39852131959d946eb3b07b5ad": "1000000000000000000000", - "153cf2842cb9de876c276fa64767d1a8ecf573bb": "2000000000000000000000", - "3bc6e3ee7a56ce8f14a37532590f63716b9966e8": "2000000000000000000000", - "f6d25d3f3d846d239f525fa8cac97bc43578dbac": "896000000000000000000", - "2066774d822793ff25f1760909479cf62491bf88": "55160000000000000000000", - "46779a5656ff00d73eac3ad0c38b6c853094fb40": "230752000000000000000", - "22eed327f8eb1d1338a3cb7b0f8a4baa5907cd95": "23445000000000000000", - "ff88ebacc41b3687f39e4b59e159599b80cba33f": "400000000000000000000", - "2874f3e2985d5f7b406627e17baa772b01abcc9e": "6014000000000000000000", - "eb10458daca79e4a6b24b29a8a8ada711b7f2eb6": "3998000000000000000000", - "541060fc58c750c40512f83369c0a63340c122b6": "1970000000000000000000", - "fd2757cc3551a095878d97875615fe0c6a32aa8a": "598200000000000000000", - "be659d85e7c34f8833ea7f488de1fbb5d4149bef": "9072500000000000000000", - "e149b5726caf6d5eb5bf2acc41d4e2dc328de182": "1940000000000000000000", - "2fe0cc424b53a31f0916be08ec81c50bf8eab0c1": "600000000000000000000", - "e3712701619ca7623c55db3a0ad30e867db0168b": "20000000000000000000", - "f8ca336c8e91bd20e314c20b2dd4608b9c8b9459": "846000000000000000000", - "68acdaa9fb17d3c309911a77b05f5391fa034ee9": "8950000000000000000000", - "e77d7deab296c8b4fa07ca3be184163d5a6d606c": "92538000000000000000", - "e6b9545f7ed086e552924639f9a9edbbd5540b3e": "3760000000000000000000", - "2866b81decb02ee70ae250cee5cdc77b59d7b679": "2000000000000000000000", - "60e3cc43bcdb026aad759c7066f555bbf2ac66f5": "2000000000000000000000", - "fcbd85feea6a754fcf3449449e37ff9784f7773c": "3086000000000000000000", - "38a744efa6d5c2137defef8ef9187b649eee1c78": "4000000000000000000000", - "9d7655e9f3e5ba5d6e87e412aebe9ee0d49247ee": "2620100000000000000000", - "2020b81ae53926ace9f7d7415a050c031d585f20": "341200000000000000000", - "4244f1331158b9ce26bbe0b9236b9203ca351434": "10000000000000000000000", - "99c236141daec837ece04fdaee1d90cf8bbdc104": "2184000000000000000000", - "943d37864a4a537d35c8d99723cd6406ce2562e6": "2000000000000000000000", - "d79483f6a8444f2549d611afe02c432d15e11051": "20000000000000000000", - "9fd64373f2fbcd9c0faca60547cad62e26d9851f": "1000000000000000000000", - "b89c036ed7c492879921be41e10ca1698198a74c": "1820000000000000000000", - "7462c89caa9d8d7891b2545def216f7464d5bb21": "109162000000000000000", - "bb0366a7cfbd3445a70db7fe5ae34885754fd468": "6160000000000000000000", - "6c52cf0895bb35e656161e4dc46ae0e96dd3e62c": "4000086000000000000000", - "b9cf71b226583e3a921103a5316f855a65779d1b": "24000000000000000000000", - "016b60bb6d67928c29fd0313c666da8f1698d9c5": "2000000000000000000000", - "9454b3a8bff9709fd0e190877e6cb6c89974dbd6": "2674000000000000000000", - "84aac7fa197ff85c30e03b7a5382b957f41f3afb": "157600000000000000000", - "db6e560c9bc620d4bea3a94d47f7880bf47f2d5f": "89500000000000000000", - "eefd05b0e3c417d55b3343060486cdd5e92aa7a6": "1430000000000000000000", - "3a59a08246a8206f8d58f70bb1f0d35c5bcc71bd": "185000000000000000000", - "9bfff50db36a785555f07652a153b0c42b1b8b76": "2000000000000000000000", - "d44f5edf2bcf2433f211dadd0cc450db1b008e14": "267400000000000000000", - "2378fd4382511e968ed192106737d324f454b535": "1000000000000000000000", - "c94089553ae4c22ca09fbc98f57075cf2ec59504": "4000000000000000000000", - "08ef3fa4c43ccdc57b22a4b9b2331a82e53818f2": "4000000000000000000000", - "e48e65125421880d42bdf1018ab9778d96928f3f": "4200000000000000000000", - "67518e5d02b205180f0463a32004471f753c523e": "1984289000000000000000", - "0da7401262384e2e8b4b26dd154799b55145efa0": "300000000000000000000", - "0b6920a64b363b8d5d90802494cf564b547c430d": "1200000000000000000000", - "a5ab4bd3588f46cb272e56e93deed386ba8b753d": "1332989000000000000000", - "1788da9b57fd05edc4ff99e7fef301519c8a0a1e": "2000000000000000000000", - "17b2d6cf65c6f4a347ddc6572655354d8a412b29": "2000000000000000000000", - "d0319139fbab2e8e2accc1d924d4b11df6696c5a": "200000000000000000000", - "4c377bb03ab52c4cb79befa1dd114982924c4ae9": "1827814000000000000000", - "fb949c647fdcfd2514c7d58e31f28a532d8c5833": "20000000000000000000000", - "70e5e9da735ff077249dcb9aaf3db2a48d9498c0": "1000000000000000000000", - "fe6f5f42b6193b1ad16206e4afb5239d4d7db45e": "1730000000000000000000", - "bda4be317e7e4bed84c0495eee32d607ec38ca52": "2309457000000000000000", - "5910106debd291a1cd80b0fbbb8d8d9e93a7cc1e": "2000000000000000000000", - "ba42f9aace4c184504abf5425762aca26f71fbdc": "37400000000000000000", - "beb4fd315559436045dcb99d49dcec03f40c42dc": "2000000000000000000000", - "452b64db8ef7d6df87c788639c2290be8482d575": "8000000000000000000000", - "66e09427c1e63deed7e12b8c55a6a19320ef4b6a": "170000000000000000000", - "faad905d847c7b23418aeecbe3addb8dd3f8924a": "1970000000000000000000", - "a29319e81069e5d60df00f3de5adee3505ecd5fb": "2000000000000000000000", - "cf348f2fe47b7e413c077a7baf3a75fbf8428692": "2000000000000000000000", - "e1e8c50b80a352b240ce7342bbfdf5690cc8cb14": "394000000000000000000", - "131c792c197d18bd045d7024937c1f84b60f4438": "4000000000000000000000", - "e49af4f34adaa2330b0e49dc74ec18ab2f92f827": "2000000000000000000000", - "f2e99f5cbb836b7ad36247571a302cbe4b481c69": "1970000000000000000000", - "c93fbde8d46d2bcc0fa9b33bd8ba7f8042125565": "1400000000000000000000", - "038779ca2dbe663e63db3fe75683ea0ec62e2383": "1670000000000000000000", - "a33cb450f95bb46e25afb50fe05feee6fb8cc8ea": "776000000000000000000", - "40ab66fe213ea56c3afb12c75be33f8e32fd085d": "4000000000000000000000", - "6403d062549690c8e8b63eae41d6c109476e2588": "2000000000000000000000", - "bfb0ea02feb61dec9e22a5070959330299c43072": "20000000000000000000000", - "99c475bf02e8b9214ada5fad02fdfd15ba365c0c": "591000000000000000000", - "904966cc2213b5b8cb5bd6089ef9cddbef7edfcc": "2000000000000000000000", - "767a03655af360841e810d83f5e61fb40f4cd113": "985000000000000000000", - "ab209fdca979d0a647010af9a8b52fc7d20d8cd1": "9129000000000000000000", - "6294eae6e420a3d5600a39c4141f838ff8e7cc48": "2955000000000000000000", - "9777cc61cf756be3b3c20cd4491c69d275e7a120": "10000000000000000000000", - "bcbf6ba166e2340db052ea23d28029b0de6aa380": "3880000000000000000000", - "9f10f2a0463b65ae30b070b3df18cf46f51e89bd": "1910000000000000000000", - "8d9952d0bb4ebfa0efd01a3aa9e8e87f0525742e": "3460000000000000000000", - "4f23b6b817ffa5c664acdad79bb7b726d30af0f9": "1760000000000000000000", - "b4c20040ccd9a1a3283da4d4a2f365820843d7e2": "1000000000000000000000", - "7f49e7a4269882bd8722d4a6f566347629624079": "2000000000000000000000", - "33629bd52f0e107bc071176c64df108f64777d49": "33425000000000000000", - "6a7b2e0d88867ff15d207c222bebf94fa6ce8397": "60000000000000000000000", - "b7ce684b09abda53389a875369f71958aeac3bdd": "2000000000000000000000", - "ffbc3da0381ec339c1c049eb1ed9ee34fdcea6ca": "4000000000000000000000", - "849ab80790b28ff1ffd6ba394efc7463105c36f7": "34600000000000000000", - "b0b36af9aeeedf97b6b02280f114f13984ea3260": "985000000000000000000", - "4d57e716876c0c95ef5eaebd35c8f41b069b6bfe": "2000000000000000000000", - "2d2b032359b363964fc11a518263bfd05431e867": "149600000000000000000", - "2ccc1f1cb5f4a8002e186b20885d9dbc030c0894": "2000000000000000000000", - "016c85e1613b900fa357b8283b120e65aefcdd08": "799954000000000000000", - "710b0274d712c77e08a5707d6f3e70c0ce3d92cf": "6400000000000000000000", - "3cd3a6e93579c56d494171fc533e7a90e6f59464": "2000000000000000000000", - "fe0e30e214290d743dd30eb082f1f0a5225ade61": "200000000000000000000", - "d0718520eae0a4d62d70de1be0ca431c5eea2482": "2000000000000000000000", - "af7f79cb415a1fb8dbbd094607ee8d41fb7c5a3b": "10000000000000000000000", - "b7d252ee9402b0eef144295f0e69f0db586c0871": "660000000000000000000", - "c3b928a76fad6578f04f0555e63952cd21d1520a": "2000000000000000000000", - "a7a517d7ad35820b09d497fa7e5540cde9495853": "2000000000000000000000", - "e6e886317b6a66a5b4f81bf164c538c264351765": "2000000000000000000000", - "0770b43dbae4b1f35a927b4fa8124d3866caf97b": "1016390000000000000000", - "52b4257cf41b6e28878d50d57b99914ffa89873a": "3930150000000000000000", - "e08bc29c2b48b169ff2bdc16714c586e6cb85ccf": "20000000000000000000", - "2372c4c1c9939f7aaf6cfac04090f00474840a09": "10000000000000000000000", - "ab6b65eab8dfc917ec0251b9db0ecfa0fa032849": "500000000000000000000", - "582e7cc46f1d7b4e6e9d95868bfd370573178f4c": "2000000000000000000000", - "f167f5868dcf4233a7830609682caf2df4b1b807": "2396150000000000000000", - "ec82f50d06475f684df1b392e00da341aa145444": "2000000000000000000000", - "0968ee5a378f8cadb3bafdbed1d19aaacf936711": "1000000000000000000000", - "a86613e6c4a4c9c55f5c10bcda32175dcbb4af60": "10696140000000000000000", - "a5cd123992194b34c4781314303b03c54948f4b9": "2010462000000000000000", - "52f058d46147e9006d29bf2c09304ad1cddd6e15": "1500000000000000000000", - "160226efe7b53a8af462d117a0108089bdecc2d1": "200550000000000000000", - "256292a191bdda34c4da6b6bd69147bf75e2a9ab": "14051000000000000000", - "1b8aa0160cd79f005f88510a714913d70ad3be33": "201760000000000000000", - "d4b2ff3bae1993ffea4d3b180231da439f7502a2": "2000000000000000000000", - "e408aa99835307eea4a6c5eb801fe694117f707d": "500000000000000000000", - "e60a55f2df996dc3aedb696c08dde039b2641de8": "2000000000000000000000", - "73df3c3e7955f4f2d859831be38000b1076b3884": "1970000000000000000000", - "6228ade95e8bb17d1ae23bfb0518414d497e0eb8": "400000000000000000000", - "0f46c81db780c1674ac73d314f06539ee56ebc83": "9850000000000000000000", - "762d6f30dab99135e4eca51d5243d6c8621102d5": "282000000000000000000", - "4ba0d9e89601772b496847a2bb4340186787d265": "1000000000000000000000", - "ca747576446a4c8f30b08340fee198de63ec92cf": "7020000000000000000000", - "99c31fe748583787cdd3e525b281b218961739e3": "1015200000000000000000", - "1210f80bdb826c175462ab0716e69e46c24ad076": "100000000000000000000", - "3f75ae61cc1d8042653b5baec4443e051c5e7abd": "95500000000000000000", - "5c4892907a0720df6fd3413e63ff767d6b398023": "13189467000000000000000", - "17f14632a7e2820be6e8f6df823558283dadab2d": "2000000000000000000000", - "1dc7f7dad85df53f1271152403f4e1e4fdb3afa0": "200000000000000000000", - "5a30feac37ac9f72d7b4af0f2bc73952c74fd5c3": "2000000000000000000000", - "136d4b662bbd1080cfe4445b0fa213864435b7f1": "4000000000000000000000", - "c1ec81dd123d4b7c2dd9b4d438a7072c11dc874c": "2000000000000000000000", - "09f9575be57d004793c7a4eb84b71587f97cbb6a": "200000000000000000000", - "2c4b470307a059854055d91ec3794d80b53d0f4a": "20000000000000000000000", - "6af6c7ee99df271ba15bf384c0b764adcb4da182": "999972000000000000000", - "0dae3ee5b915b36487f9161f19846d101433318a": "1910000000000000000000", - "0dcf9d8c9804459f647c14138ed50fad563b4154": "173000000000000000000", - "bfa8c858df102cb12421008b0a31c4c7190ad560": "200000000000000000000", - "c2fd0bf7c725ef3e047e5ae1c29fe18f12a7299c": "1337000000000000000000", - "d70a612bd6dda9eab0dddcff4aaf4122d38feae4": "540000000000000000000", - "e07137ae0d116d033533c4eab496f8a9fb09569c": "1400000000000000000000", - "7f49f20726471ac1c7a83ef106e9775ceb662566": "5910000000000000000000", - "1e706655e284dcf0bb37fe075d613a18dc12ff4a": "4376760000000000000000", - "03af7ad9d5223cf7c8c13f20df67ebe5ffc5bb41": "200000000000000000000", - "228242f8336eecd8242e1f000f41937e71dffbbf": "5000000000000000000000", - "e8ed51bbb3ace69e06024b33f86844c47348db9e": "165170600000000000000000", - "3b566a8afad19682dc2ce8679a3ce444a5b0fd4f": "2000000000000000000000", - "dc738fb217cead2f69594c08170de1af10c419e3": "100000000000000000000000", - "13032446e7d610aa00ec8c56c9b574d36ca1c016": "2000000000000000000000", - "6ca6a132ce1cd288bee30ec7cfeffb85c1f50a54": "2000000000000000000000", - "b85f26dd0e72d9c29ebaf697a8af77472c2b58b5": "11900000000000000000000", - "055bd02caf19d6202bbcdc836d187bd1c01cf261": "100000000000000000000", - "3c322e611fdb820d47c6f8fc64b6fad74ca95f5e": "242514000000000000000", - "8daddf52efbd74da95b969a5476f4fbbb563bfd2": "835000000000000000000", - "c63ac417992e9f9b60386ed953e6d7dff2b090e8": "4000086000000000000000", - "27f03cf1abc5e1b51dbc444b289e542c9ddfb0e6": "5000000000000000000000", - "d8f4bae6f84d910d6d7d5ac914b1e68372f94135": "100000000000000000000", - "9f83a293c324d4106c18faa8888f64d299054ca0": "200000000000000000000", - "39ee4fe00fbced647068d4f57c01cb22a80bccd1": "6000000000000000000000", - "404100db4c5d0eec557823b58343758bcc2c8083": "20000000000000000000", - "02751dc68cb5bd737027abf7ddb77390cd77c16b": "20000000000000000000", - "d10302faa1929a326904d376bf0b8dc93ad04c4c": "1790000000000000000000", - "cc419fd9912b85135659e77a93bc3df182d45115": "10000000000000000000000", - "10097198b4e7ee91ff82cc2f3bd95fed73c540c0": "2000000000000000000000", - "7e24d9e22ce1da3ce19f219ccee523376873f367": "5900150000000000000000", - "2e4ee1ae996aa0a1d92428d06652a6bea6d2d15d": "2000000000000000000000", - "91a4149a2c7b1b3a67ea28aff34725e0bf8d7524": "1940000000000000000000", - "ead65262ed5d122df2b2751410f98c32d1238f51": "101680000000000000000", - "e20954d0f4108c82d4dcb2148d26bbd924f6dd24": "10000000000000000000000", - "ebb7d2e11bc6b58f0a8d45c2f6de3010570ac891": "26740000000000000000", - "ef115252b1b845cd857f002d630f1b6fa37a4e50": "1970000000000000000000", - "01a818135a414210c37c62b625aca1a54611ac36": "260000000000000000000", - "ea1ea0c599afb9cd36caacbbb52b5bbb97597377": "1069600000000000000000", - "7a7a4f807357a4bbe68e1aa806393210c411ccb3": "30000000000000000000000", - "6d40ca27826d97731b3e86effcd7b92a4161fe89": "2000000000000000000000", - "8431277d7bdd10457dc017408c8dbbbd414a8df3": "39400000000000000000", - "69b81d5981141ec7a7141060dfcf8f3599ffc63e": "5000000000000000000000", - "47688410ff25d654d72eb2bc06e4ad24f833b094": "160440000000000000000", - "6c101205b323d77544d6dc52af37aca3cec6f7f1": "10000000000000000000000", - "fb685c15e439965ef626bf0d834cd1a89f2b5695": "3940000000000000000000", - "673706b1b0e4dc7a949a7a796258a5b83bb5aa83": "16100000000000000000000", - "ecdaf93229b45ee672f65db506fb5eca00f7fce6": "1605009000000000000000", - "ec6904bae1f69790591709b0609783733f2573e3": "500000000000000000000", - "812ea7a3b2c86eed32ff4f2c73514cc63bacfbce": "1000000000000000000000", - "196c02210a450ab0b36370655f717aa87bd1c004": "259456000000000000000", - "d96ac2507409c7a383ab2eee1822a5d738b36b56": "200000000000000000000", - "ae2f9c19ac76136594432393b0471d08902164d3": "698600000000000000000", - "9d32962ea99700d93228e9dbdad2cc37bb99f07e": "3327560000000000000000", - "17e584e810e567702c61d55d434b34cdb5ee30f6": "5000000000000000000000", - "a3a93ef9dbea2636263d06d8492f6a41de907c22": "60000000000000000000", - "2b5016e2457387956562587115aa8759d8695fdf": "200000000000000000000000", - "140129eaa766b5a29f5b3af2574e4409f8f6d3f1": "6400000000000000000000", - "7025965d2b88da197d4459be3dc9386344cc1f31": "2005500000000000000000", - "388bdcdae794fc44082e667501344118ea96cd96": "1670000000000000000000", - "eee9d0526eda01e43116a395322dda8970578f39": "9999980000000000000000", - "6ec89b39f9f5276a553e8da30e6ec17aa47eefc7": "447500000000000000000", - "7e236666b2d06e63ea4e2ab84357e2dfc977e50e": "999972000000000000000", - "68df947c495bebaeb8e889b3f953d533874bf106": "546000000000000000000", - "d40ed66ab3ceff24ca05ecd471efb492c15f5ffa": "500000000000000000000", - "f0c70d0d6dab7663aa9ed9ceea567ee2c6b02765": "2089349000000000000000", - "b589676d15a04448344230d4ff27c95edf122c49": "1000000000000000000000", - "a0347f0a98776390165c166d32963bf74dcd0a2f": "1000000000000000000000", - "d47d8685faee147c520fd986709175bf2f886bef": "2000000000000000000000", - "a1dcd0e5b05a977c9623e5ae2f59b9ada2f33e31": "100000000000000000000", - "4979194ec9e97db9bee8343b7c77d9d7f3f1dc9f": "20000000000000000000", - "7cd20eccb518b60cab095b720f571570caaa447e": "500000000000000000000", - "2ff830cf55fb00d5a0e03514fecd44314bd6d9f1": "10000000000000000000000", - "0bb25ca7d188e71e4d693d7b170717d6f8f0a70a": "336870000000000000000", - "e9a2b4914e8553bf0d7c00ca532369b879f931bf": "2000000000000000000000", - "720e6b22bf430966fa32b6acb9a506eebf662c61": "152000000000000000000", - "7ade5d66b944bb860c0efdc86276d58f4653f711": "2000000000000000000000", - "2eaff9f8f8113064d3957ac6d6e11eee42c8195d": "1970000000000000000000", - "0c8fd7775e54a6d9c9a3bf890e761f6577693ff0": "9850000000000000000000", - "290a56d41f6e9efbdcea0342e0b7929a8cdfcb05": "344000000000000000000", - "d73ed2d985b5f21b55b274643bc6da031d8edd8d": "49250000000000000000000", - "80156d10efa8b230c99410630d37e269d4093cea": "2000000000000000000000", - "0989c200440b878991b69d6095dfe69e33a22e70": "1910000000000000000000", - "ec8014efc7cbe5b0ce50f3562cf4e67f8593cd32": "17300000000000000000", - "de612d0724e84ea4a7feaa3d2142bd5ee82d3201": "20000000000000000000", - "0f832a93df9d7f74cd0fb8546b7198bf5377d925": "143000000000000000000", - "aa2c670096d3f939305325427eb955a8a60db3c5": "2003010000000000000000", - "25287b815f5c82380a73b0b13fbaf982be24c4d3": "40000000000000000000", - "e75c3b38a58a3f33d55690a5a59766be185e0284": "500000000000000000000", - "1940dc9364a852165f47414e27f5002445a4f143": "10850000000000000000000", - "e5b826196c0e1bc1119b021cf6d259a610c99670": "200000000000000000000", - "82a15cef1d6c8260eaf159ea3f0180d8677dce1c": "2000000000000000000000", - "da06044e293c652c467fe74146bf185b21338a1c": "1000000000000000000000", - "f815c10a032d13c34b8976fa6e3bd2c9131a8ba9": "1337000000000000000000", - "cd95fa423d6fc120274aacde19f4eeb766f10420": "200000000000000000000", - "e3a4f83c39f85af9c8b1b312bfe5fc3423afa634": "28650000000000000000", - "768ce0daa029b7ded022e5fc574d11cde3ecb517": "322000000000000000000", - "e3ec18a74ed43855409a26ade7830de8e42685ef": "19700000000000000000", - "b2bdbedf95908476d7148a370cc693743628057f": "4000000000000000000000", - "bbb8ffe43f98de8eae184623ae5264e424d0b8d7": "107600000000000000000", - "090cebef292c3eb081a05fd8aaf7d39bf07b89d4": "4000000000000000000000", - "dd2a233adede66fe1126d6c16823b62a021feddb": "2000000000000000000000", - "d8cd64e0284eec53aa4639afc4750810b97fab56": "20000000000000000000", - "e5953fea497104ef9ad2d4e5841c271f073519c2": "704000000000000000000", - "967d4142af770515dd7062af93498dbfdff29f20": "20200000000000000000", - "fd191a35157d781373fb411bf9f25290047c5eef": "1000000000000000000000", - "8967d7b9bdb7b4aed22e65a15dc803cb7a213f10": "400000000000000000000", - "51e43fe0d25c782860af81ea89dd793c13f0cbb1": "60000000000000000000", - "a38476691d34942eea6b2f76889223047db4617a": "2000000000000000000000", - "1321ccf29739b974e5a516f18f3a843671e39642": "4000000000000000000000", - "4d71a6eb3d7f327e1834278e280b039eddd31c2f": "6000000000000000000000", - "dc2d15a69f6bb33b246aef40450751c2f6756ad2": "1996000000000000000000", - "ec89f2b678a1a15b9134ec5eb70c6a62071fbaf9": "200000000000000000000", - "27bf943c1633fe32f8bcccdb6302b407a5724e44": "940229000000000000000", - "d0a6c6f9e9c4b383d716b31de78d56414de8fa91": "300000000000000000000", - "7b6175ec9befc738249535ddde34688cd36edf25": "10000000000000000000000", - "41ce79950935cff55bf78e4ccec2fe631785db95": "2000000000000000000000", - "5598b3a79a48f32b1f5fc915b87b645d805d1afe": "500000000000000000000", - "5c4881165cb42bb82e97396c8ef44adbf173fb99": "110600000000000000000", - "25b0533b81d02a617b9229c7ec5d6f2f672e5b5a": "1000000000000000000000", - "015f097d9acddcddafaf2a107eb93a40fc94b04c": "20000000000000000000000", - "b84b53d0bb125656cddc52eb852ab71d7259f3d5": "16000000000000000000000", - "1a79c7f4039c67a39d7513884cdc0e2c34222490": "20000000000000000000", - "926209b7fda54e8ddb9d9e4d3d19ebdc8e88c29f": "2000000000000000000000", - "c2fe7d75731f636dcd09dbda0671393ba0c82a7d": "2200000000000000000000", - "30248d58e414b20fed3a6c482b59d9d8f5a4b7e2": "60000000000000000000", - "d0e194f34b1db609288509ccd2e73b6131a2538b": "999972000000000000000", - "e8f29969e75c65e01ce3d86154207d0a9e7c76f2": "2991807000000000000000", - "cb93199b9c90bc4915bd859e3d42866dc8c18749": "231800000000000000000", - "e6fe0afb9dcedd37b2e22c451ba6feab67348033": "10000000000000000000000", - "82f854c9c2f087dffa985ac8201e626ca5467686": "100000000000000000000000", - "63bb664f9117037628594da7e3c5089fd618b5b5": "20000000000000000000", - "f8d17424c767bea31205739a2b57a7277214eebe": "42000000000000000000", - "4ca8db4a5efefc80f4cd9bbcccb03265931332b6": "200000000000000000000", - "c56e6b62ba6e40e52aab167d21df025d0055754b": "2000000000000000000000", - "0d8c40a79e18994ff99ec251ee10d088c3912e80": "114600000000000000000", - "40a331195b977325c2aa28fa2f42cb25ec3c253c": "2000000000000000000000", - "a2c5854ff1599f98892c5725d262be1da98aadac": "314315000000000000000", - "23ab09e73f87aa0f3be0139df0c8eb6be5634f95": "8000000000000000000000", - "b8040536958d5998ce4bec0cfc9c2204989848e9": "24472420000000000000000", - "42d6b263d9e9f4116c411424fc9955783c763030": "2000000000000000000000", - "c496cbb0459a6a01600fc589a55a32b454217f9d": "274000000000000000000", - "48302c311ef8e5dc664158dd583c81194d6e0d58": "3364760000000000000000", - "d5b284040130abf7c1d163712371cc7e28ad66da": "1970000000000000000000", - "d22f0ca4cd479e661775053bcc49e390f670dd8a": "1000000000000000000000", - "e597f083a469c4591c3d2b1d2c772787befe27b2": "280000000000000000000", - "668b6ba8ab08eace39c502ef672bd5ccb6a67a20": "31135320000000000000000", - "a3bff1dfa9971668360c0d82828432e27bf54e67": "200000000000000000000", - "ee655bb4ee0e8d5478526fb9f15e4064e09ff3dd": "200000000000000000000", - "121f855b70149ac83473b9706fb44d47828b983b": "1400000000000000000000", - "20a15256d50ce058bf0eac43aa533aa16ec9b380": "20000000000000000000", - "69bcfc1d43b4ba19de7b274bdffb35139412d3d7": "985000000000000000000", - "db288f80ffe232c2ba47cc94c763cf6fc9b82b0d": "85000000000000000000", - "e1cb83ec5eb6f1eeb85e99b2fc63812fde957184": "20000000000000000000000", - "a419a984142363267575566089340eea0ea20819": "1999944000000000000000", - "8489f6ad1d9a94a297789156899db64154f1dbb5": "358849000000000000000", - "d609bf4f146eea6b0dc8e06ddcf4448a1fccc9fa": "2000000000000000000000", - "df1fa2e20e31985ebe2c0f0c93b54c0fb67a264b": "200000000000000000000", - "efe8ff87fc260e0767638dd5d02fc4672e0ec06d": "2000000000000000000000", - "eef1bbb1e5a83fde8248f88ee3018afa2d1332eb": "200000000000000000000", - "4b3aab335ebbfaa870cc4d605e7d2e74c668369f": "60000000000000000000000", - "8f4fb1aea7cd0f570ea5e61b40a4f4510b6264e4": "4000000000000000000000", - "0b0b3862112aeec3a03492b1b05f440eca54256e": "4000000000000000000000", - "dff4007931786593b229efe5959f3a4e219e51af": "4925000000000000000000", - "fec14e5485de2b3eef5e74c46146db8e454e0335": "179000000000000000000", - "ac21c1e5a3d7e0b50681679dd6c792dbca87decb": "100000000000000000000000", - "796ebbf49b3e36d67694ad79f8ff36767ac6fab0": "60800000000000000000", - "ae7739124ed153052503fc101410d1ffd8cd13b7": "999942000000000000000", - "86026cad3fe4ea1ce7fca260d3d45eb09ea6a364": "200000000000000000000", - "b2fc84a3e50a50af02f94da0383ed59f71ff01d7": "30000000000000000000000", - "bbab000b0408ed015a37c04747bc461ab14e151b": "6000000000000000000000", - "c4ff6fbb1f09bd9e102ba033d636ac1c4c0f5304": "1000000000000000000000", - "cc606f511397a38fc7872bd3b0bd03c71bbd768b": "1000000000000000000000", - "f346d7de92741c08fc58a64db55b062dde012d14": "295106000000000000000", - "33f15223310d44de8b6636685f3a4c3d9c5655a5": "250500000000000000000", - "3c860e2e663f46db53427b29fe3ea5e5bf62bbcc": "98500000000000000000", - "acb94338554bc488cc88ae2d9d94080d6bdf8410": "1000000000000000000000", - "9c5cc111092c122116f1a85f4ee31408741a7d2f": "492500000000000000000", - "5f76f0a306269c78306b3d650dc3e9c37084db61": "2400000000000000000000", - "2c0cc3f951482cc8a2925815684eb9f94e060200": "6000000000000000000000", - "b74372dbfa181dc9242f39bf1d3731dffe2bdacf": "2000000000000000000000", - "3bab4b01a7c84ba13feea9b0bb191b77a3aadca3": "200000000000000000000", - "39aa05e56d7d32385421cf9336e90d3d15a9f859": "26000000000000000000", - "4a52bad20357228faa1e996bed790c93674ba7d0": "1337000000000000000000", - "ff128f4b355be1dc4a6f94fa510d7f15d53c2aff": "2720000000000000000000", - "92793ac5b37268774a7130de2bbd330405661773": "40110000000000000000", - "db19a3982230368f0177219cb10cb259cdb2257c": "2000000000000000000000", - "8d1794da509cb297053661a14aa892333231e3c1": "199600000000000000000", - "9b7c8810cc7cc89e804e6d3e38121850472877fe": "2000000000000000000000", - "ed3cbc3782cebd67989b305c4133b2cde32211eb": "400000000000000000000", - "8532490897bbb4ce8b7f6b837e4cba848fbe9976": "100000000000000000000", - "c384ac6ee27c39e2f278c220bdfa5baed626d9d3": "600000000000000000000", - "b1459285863ea2db3759e546ceb3fb3761f5909c": "1122309000000000000000", - "634efc24371107b4cbf03f79a93dfd93e431d5fd": "1221341000000000000000", - "ef9f59aeda418c1494682d941aab4924b5f4929a": "100000000000000000000000", - "e7311c9533f0092c7248c9739b5b2c864a34b1ce": "2803436000000000000000", - "e6e621eaab01f20ef0836b7cad47464cb5fd3c96": "316014000000000000000", - "cd102cd6db3df14ad6af0f87c72479861bfc3d24": "2000000000000000000000", - "005a9c03f69d17d66cbb8ad721008a9ebbb836fb": "2000000000000000000000", - "a072cebe62a9e9f61cc3fbf88a9efbfe3e9a8d70": "400000000000000000000", - "f2ab1161750244d0ecd048ee0d3e51abb143a2fd": "1235800000000000000000", - "f686785b89720b61145fea80978d6acc8e0bc196": "4000000000000000000000", - "0a2b4fc5d81ace67dc4bba03f7b455413d46fe3d": "197000000000000000000", - "c32ec7e42ad16ce3e2555ad4c54306eda0b26758": "2000000000000000000000", - "f3fa723552a5d0512e2b62f48dca7b2b8105305b": "137000000000000000000", - "6dc3f92baa1d21dab7382b893261a0356fa7c187": "1730000000000000000000", - "4627c606842671abde8295ee5dd94c7f549534f4": "286600000000000000000", - "e39e46e15d22ce56e0c32f1877b7d1a264cf94f3": "20000000000000000000000", - "d7d157e4c0a96437a6d285741dd23ec4361fa36b": "2000000000000000000000", - "68f8f45155e98c5029a4ebc5b527a92e9fa83120": "4436101000000000000000", - "9aba2b5e27ff78baaab5cdc988b7be855cebbdce": "9999000000000000000000", - "66b39837cb3cac8a802afe3f12a258bbca62dacd": "400000000000000000000", - "d39b7cbc94003fc948f0cde27b100db8ccd6e063": "400000000000000000000", - "3db9ed7f024c7e26372feacf2b050803445e3810": "1285600000000000000000", - "3fbc1e4518d73400c6d046359439fb68ea1a49f4": "16400000000000000000000", - "e3da4f3240844c9b6323b4996921207122454399": "11539639000000000000000", - "09afa73bc047ef46b977fd9763f87286a6be68c6": "501500000000000000000", - "1dbe8e1c2b8a009f85f1ad3ce80d2e05350ee39c": "135400000000000000000", - "2c5a2d0abda03bbe215781b4ff296c8c61bdbaf6": "30617000000000000000", - "9a9d1dc0baa77d6e20c3d849c78862dd1c054c87": "880000000000000000000", - "3ccef88679573947e94997798a1e327e08603a65": "807700000000000000000", - "850b9db18ff84bf0c7da49ea3781d92090ad7e64": "2600000000000000000000", - "361c75931696bc3d427d93e76c77fd13b241f6f4": "549212000000000000000", - "c8f2b320e6dfd70906c597bad2f9501312c78259": "1504800000000000000000", - "8dc1d5111d09af25fdfcac455c7cec283e6d6775": "2000000000000000000000", - "cd7ece086b4b619b3b369352ee38b71ddb06439a": "200000000000000000000", - "f607c2150d3e1b99f24fa1c7d540add35c4ebe1e": "3098020000000000000000", - "32485c818728c197fea487fbb6e829159eba8370": "1053893000000000000000", - "8e670815fb67aeaea57b86534edc00cdf564fee5": "3300000000000000000000", - "10df681506e34930ac7a5c67a54c3e89ce92b981": "2153800000000000000000", - "1cf2eb7a8ccac2adeaef0ee87347d535d3b94058": "2000000000000000000000", - "f0dc43f205619127507b2b1c1cfdf32d28310920": "301973000000000000000", - "f2c2904e9fa664a11ee25656d8fd2cc0d9a522a0": "13370000000000000000", - "70670fbb05d33014444b8d1e8e7700258b8caa6d": "2000000000000000000000", - "5160ed612e1b48e73f3fc15bc4321b8f23b8a24b": "562800000000000000000", - "54a62bf9233e146ffec3876e45f20ee8414adeba": "10000000000000000000000", - "26d4ec17d5ceb2c894bdc59d0a6a695dad2b43cc": "2935300000000000000000", - "205fc843e19a4913d1881eb69b69c0fa3be5c50b": "9700000000000000000000", - "e001aba77c02e172086c1950fffbcaa30b83488f": "1970000000000000000000", - "21efbca09b3580b98e73f5b2f7f4dc0bf02c529c": "2000000000000000000000", - "c4d916574e68c49f7ef9d3d82d1638b2b7ee0985": "1580000000000000000000", - "cab0d32cf3767fa6b3537c84328baa9f50458136": "8960000000000000000000", - "7ce4686446f1949ebed67215eb0d5a1dd72c11b8": "2217776000000000000000", - "7837fcb876da00d1eb3b88feb3df3fa4042fac82": "1760000000000000000000", - "71e38ff545f30fe14ca863d4f5297fd48c73a5ce": "3580000000000000000000", - "e528a0e5a267d667e9393a6584e19b34dc9be973": "5600000000000000000000", - "c5374928cdf193705443b14cc20da423473cd9cf": "138139000000000000000", - "e406f5dd72cab66d8a6ecbd6bfb494a7b6b09afe": "100000000000000000000", - "d7ef340e66b0d7afcce20a19cb7bfc81da33d94e": "3000000000000000000000", - "e012db453827a58e16c1365608d36ed658720507": "2000000000000000000000", - "d59638d3c5faa7711bf085745f9d5bdc23d498d8": "2000000000000000000000", - "008fc7cbadffbd0d7fe44f8dfd60a79d721a1c9c": "1000000000000000000000", - "8a3470282d5e2a2aefd7a75094c822c4f5aeef8a": "242743000000000000000", - "38b3965c21fa893931079beacfffaf153678b6eb": "170374000000000000000", - "57dd9471cbfa262709f5f486bcb774c5f527b8f8": "197000000000000000000", - "5a60c924162873fc7ea4da7f972e350167376031": "83583000000000000000", - "b9013c51bd078a098fae05bf2ace0849c6be17a5": "80000000000000000000", - "dc23b260fcc26e7d10f4bd044af794579460d9da": "500038000000000000000", - "45db03bccfd6a5f4d0266b82a22a368792c77d83": "8000000000000000000000", - "3e0cbe6a6dcb61f110c45ba2aa361d7fcad3da73": "8022000000000000000000", - "42d3a5a901f2f6bd9356f112a70180e5a1550b60": "925000000000000000000", - "47219229e8cd56659a65c2a943e2dd9a8f4bfd89": "1520000000000000000000", - "a20d071b1b003063497d7990e1249dabf36c35f7": "1000000000000000000000", - "6835c8e8b74a2ca2ae3f4a8d0f6b954a3e2a8392": "60140000000000000000", - "0c2d5c920538e953caaf24f0737f554cc6927742": "1000000000000000000000", - "eedf6c4280e6eb05b934ace428e11d4231b5905b": "200000000000000000000", - "ffa696ecbd787e66abae4fe87b635f07ca57d848": "1337000000000000000000", - "3e81772175237eb4cbe0fe2dcafdadffeb6a1999": "8800000000000000000000", - "b44783c8e57b480793cbd69a45d90c7b4f0c48ac": "20000000000000000000", - "f84f090adf3f8db7e194b350fbb77500699f66fd": "1970000000000000000000", - "2e9824b5c132111bca24ddfba7e575a5cd7296c1": "17201900000000000000000", - "5cce72d068c7c3f55b1d2819545e77317cae8240": "1940000000000000000000", - "d815e1d9f4e2b5e57e34826b7cfd8881b8546890": "17300000000000000000", - "f901c00fc1db88b69c4bc3252b5ca70ea6ee5cf6": "400000000000000000000", - "a960b1cadd3b5c1a8e6cb3abcaf52ee7c3d9fa88": "1522704000000000000000", - "f7e45a12aa711c709acefe95f33b78612d2ad22a": "66230000000000000000000", - "c332df50b13c013490a5d7c75dbfa366da87b6d6": "4000000000000000000000", - "d467cf064c0871989b90d8b2eb14ccc63b360823": "200000000000000000000", - "b9144b677c2dc614ceefdf50985f1183208ea64c": "2000000000000000000000", - "ea7c4d6dc729cd6b157c03ad237ca19a209346c3": "2000000000000000000000", - "9c9de44724a4054da0eaa605abcc802668778bea": "200020000000000000000", - "d7140c8e5a4307fab0cc27badd9295018bf87970": "109600000000000000000", - "c33acdb3ba1aab27507b86b15d67faf91ecf6293": "2000000000000000000000", - "db2a0c9ab64df58ddfb1dbacf8ba0d89c85b31b4": "4000000000000000000000", - "bfcb9730246304700da90b4153e71141622e1c41": "1000000000000000000000", - "07dc8c8b927adbedfa8f5d639b4352351f2f36d2": "314382000000000000000", - "2d5391e938b34858cf965b840531d5efda410b09": "1400000000000000000000", - "0b5e2011ebc25a007f21362960498afb8af280fb": "2000000000000000000000", - "ed9fb1f5af2fbf7ffc5029cee42b70ff5c275bf5": "280000000000000000000", - "a3232d068d50064903c9ebc563b515acc8b7b097": "2002000000000000000000", - "66274fea82cd30b6c29b23350e4f4f3d310a5899": "2070000000000000000000", - "dbfb1bb464b8a58e500d2ed8de972c45f5f1c0fb": "1600000000000000000000", - "a1f8d8bcf90e777f19b3a649759ad95027abdfc3": "200000000000000000000", - "5bd23547477f6d09d7b2a005c5ee650c510c56d7": "10000000000000000000000", - "ec3b8b58a12703e581ce5ffd7e21c57d1e5c663f": "1700000000000000000000", - "54310b3aa88703a725dfa57de6e646935164802c": "1910000000000000000000", - "8f41b1fbf54298f5d0bc2d122f4eb95da4e5cd3d": "354200000000000000000", - "c80b36d1beafba5fcc644d60ac6e46ed2927e7dc": "13370000000000000000", - "1ea492bce1ad107e337f4bd4a7ac9a7babcccdab": "100000000000000000000", - "aaf023fef290a49bb78bb7abc95d669c50d528b0": "200000000000000000000", - "80b79f338390d1ba1b3737a29a0257e5d91e0731": "20000000000000000000", - "f382e4c20410b951089e19ba96a2fee3d91cce7e": "5054000000000000000000", - "0748713145ef83c3f0ef4d31d823786f7e9cc689": "4500000000000000000000", - "21e219c89ca8ac14ae4cba6130eeb77d9e6d3962": "789580000000000000000", - "ca9a042a6a806ffc92179500d24429e8ab528117": "1100000000000000000000", - "bcc9593b2da6df6a34d71b1aa38dacf876f95b88": "20000000000000000000", - "d1438267231704fc7280d563adf4763844a80722": "200000000000000000000", - "4989e1ab5e7cd00746b3938ef0f0d064a2025ba5": "2000000000000000000000", - "bd4b60faec740a21e3071391f96aa534f7c1f44e": "182000000000000000000", - "8c7cb4e48b25031aa1c4f92925d631a8c3edc761": "1000000000000000000000", - "322788b5e29bf4f5f55ae1ddb32085fda91b8ebe": "200000000000000000000", - "f15e182c4fbbad79bd93342242d4dccf2be58925": "1940000000000000000000", - "1548b770a5118ede87dba2f690337f616de683ab": "527558000000000000000", - "69c2d835f13ee90580408e6a3283c8cca6a434a2": "656000000000000000000", - "a1e4380a3b1f749673e270229993ee55f35663b4": "2000000000000000000000", - "c7675e5647b9d8daf4d3dff1e552f6b07154ac38": "180000000000000000000", - "a02c1e34064f0475f7fa831ccb25014c3aa31ca2": "60000000000000000000", - "517c75430de401c341032686112790f46d4d369e": "388000000000000000000", - "29681d9912ddd07eaabb88d05d90f766e862417d": "1000000000000000000000", - "544dda421dc1eb73bb24e3e56a248013b87c0f44": "1970000000000000000000", - "2ab97e8d59eee648ab6caf8696f89937143864d6": "3820000000000000000000", - "79c130c762b8765b19d2abc9a083ab8f3aad7940": "3940000000000000000000", - "f9650d6989f199ab1cc479636ded30f241021f65": "850000000000000000000", - "d1c96e70f05ae0e6cd6021b2083750a7717cde56": "500000000000000000000", - "88106c27d20b74b4b98ca62b232bd5c97411171f": "197000000000000000000", - "37ab66083a4fa23848b886f9e66d79cdc150cc70": "88510000000000000000000", - "8e6156336be2cdbe32140df08a2ba55fd0a58463": "74480000000000000000", - "2982d76a15f847dd41f1922af368fe678d0e681e": "100000000000000000000", - "209e8e29d33beae8fb6baa783d133e1d9ec1bc0b": "835000000000000000000", - "b325674c01e3f7290d5226339fbeac67d221279f": "2800000000000000000000", - "f20c9a99b74759d782f25c1ceca802a27e0b436c": "1670000000000000000000", - "61bf84d5ab026f58c873f86ff0dfca82b55733ae": "2000000000000000000000", - "0734a0a81c9562f4d9e9e10a8503da15db46d76e": "18200000000000000000", - "0521bc3a9f8711fecb10f50797d71083e341eb9d": "20000000000000000000", - "3301d9ca2f3bfe026279cd6819f79a293d98156e": "50000000000000000000000", - "549d51af29f724c967f59423b85b2681e7b15136": "3760000000000000000000", - "2053ac97548a0c4e8b80bc72590cd6a098fe7516": "187000000000000000000", - "aa321fdbd449180db8ddd34f0fe906ec18ee0914": "685000000000000000000", - "697f55536bf85ada51841f0287623a9f0ed09a17": "10000000000000000000000", - "df57353aaff2aadb0a04f9014e8da7884e86589c": "152800000000000000000", - "6807ddc88db489b033e6b2f9a81553571ab3c805": "29944000000000000000", - "90057af9aa66307ec9f033b29724d3b2f41eb6f9": "121930000000000000000000", - "3ff836b6f57b901b440c30e4dbd065cf37d3d48c": "200000000000000000000", - "91051764af6b808e4212c77e30a5572eaa317070": "1000000000000000000000", - "7faa30c31519b584e97250ed2a3cf3385ed5fd50": "2000000000000000000000", - "fb842ca2c5ef133917a236a0d4ac40690110b038": "306000000000000000000", - "aa167026d39ab7a85635944ed9edb2bfeba11850": "8298000000000000000000", - "57beea716cbd81700a73d67f9ff039529c2d9025": "200000000000000000000", - "654b7e808799a83d7287c67706f2abf49a496404": "1970000000000000000000", - "dde8f0c31b7415511dced1cd7d46323e4bd12232": "1610000000000000000000", - "8667fa1155fed732cfb8dca5a0d765ce0d0705ed": "81770000000000000000", - "905526568ac123afc0e84aa715124febe83dc87c": "17900000000000000000", - "8e98766524b0cf2747c50dd43b9567594d9731de": "1997200000000000000000", - "c6df2075ebd240d44869c2be6bdf82e63d4ef1f5": "20000000000000000000", - "2ff5cab12c0d957fd333f382eeb75107a64cb8e8": "10000000000000000000000", - "3055efd26029e0d11b930df4f53b162c8c3fd2ce": "499938000000000000000", - "b2c53efa33fe4a3a1a80205c73ec3b1dbcad0602": "1918595000000000000000", - "766b3759e8794e926dac473d913a8fb61ad0c2c9": "86500000000000000000", - "882aa798bf41df179f85520130f15ccdf59b5e58": "2000000000000000000000", - "80b23d380b825c46e0393899a85556462da0e18c": "2000000000000000000000", - "51f4663ab44ff79345f427a0f6f8a6c8a53ff234": "20000000000000000000000", - "8d5ef172bf77315ea64e85d0061986c794c6f519": "3940000000000000000000", - "75ac547017134c04ae1e11d60e63ec04d18db4ef": "6000000000000000000000", - "ce1b0cb46aaecfd79b880cad0f2dda8a8dedd0b1": "20000000000000000000", - "21408b4d7a2c0e6eca4143f2cacdbbccba121bd8": "20000000000000000000000", - "9c526a140683edf1431cfaa128a935e2b614d88b": "111000000000000000000", - "599728a78618d1a17b9e34e0fed8e857d5c40622": "14000000000000000000000", - "6ac4d4be2db0d99da3faaaf7525af282051d6a90": "80185000000000000000", - "785c8ea774d73044a734fa790a1b1e743e77ed7c": "238750000000000000000", - "ff2726294148b86c78a9372497e459898ed3fee3": "1970000000000000000000", - "68a86c402388fddc59028fec7021e98cbf830eac": "19100000000000000000", - "6121af398a5b2da69f65c6381aec88ce9cc6441f": "640000000000000000000", - "5a6686b0f17e07edfc59b759c77d5bef164d3879": "1490000000000000000000", - "a2d38de1c73906f6a7ca6efeb97cf6f69cc421be": "1000000000000000000000", - "ae3f98a443efe00f3e711d525d9894dc9a61157b": "295500000000000000000", - "5f1c8a04c90d735b8a152909aeae636fb0ce1665": "6999974000000000000000", - "d687cec0059087fdc713d4d2d65e77daefedc15f": "60000000000000000000", - "845203750f7148a9aa262921e86d43bf641974fd": "100000000000000000000", - "64464a6805b462412a901d2db8174b06c22deea6": "475600000000000000000", - "053471cd9a41925b3904a5a8ffca3659e034be23": "199600000000000000000", - "911ff233e1a211c0172c92b46cf997030582c83a": "1970000000000000000000", - "d930b27a78876485d0f48b70dd5336549679ca8f": "40000000000000000000", - "6ba9b21b35106be159d1c1c2657ac56cd29ffd44": "4480000000000000000000", - "ebac2b4408ef5431a13b8508e86250982114e145": "4000000000000000000000", - "931df34d1225bcd4224e63680d5c4c09bce735a6": "68000000000000000000", - "23eb6fd85671a9063ab7678ebe265a20f61a02b3": "2000000000000000000000", - "b32af3d3e8d075344926546f2e32887bf93b16bd": "200000000000000000000", - "8261fa230c901d43ff579f4780d399f31e6076bc": "2000000000000000000000", - "84a74ceecff65cb93b2f949d773ef1ad7fb4a245": "92998000000000000000", - "da982e9643ffece723075a40fe776e5ace04b29b": "160884000000000000000", - "ba70e8b4759c0c3c82cc00ac4e9a94dd5bafb2b8": "890342000000000000000", - "82f2e991fd324c5f5d17768e9f61335db6319d6c": "500000000000000000000", - "3e84b35c5b2265507061d30b6f12da033fe6f8b9": "1790000000000000000000", - "2895e80999d406ad592e2b262737d35f7db4b699": "1940000000000000000000", - "65f534346d2ffb787fa9cf185d745ba42986bd6e": "500000000000000000000", - "c7368b9709a5c1b51c0adf187a65df14e12b7dba": "9489681000000000000000", - "ba176dbe3249e345cd4fa967c0ed13b24c47e586": "399990000000000000000", - "cff6a6fe3e9a922a12f21faa038156918c4fcb9c": "78800000000000000000", - "bcbd31252ec288f91e298cd812c92160e738331a": "1975802000000000000000", - "5543dd6d169eec8a213bbf7a8af9ffd15d4ff759": "18200000000000000000", - "b65bd780c7434115162027565223f44e5498ff8c": "19999800000000000000000", - "4cadf573ce4ceec78b8e1b21b0ed78eb113b2c0e": "2000000000000000000000", - "04aafc8ae5ce6f4903c89d7fac9cb19512224777": "500000000000000000000", - "fdc4d4765a942f5bf96931a9e8cc7ab8b757ff4c": "87000000000000000000000", - "38c7851f5ffd4cee98df30f3b25597af8a6ca263": "2631920000000000000000", - "0e320219838e859b2f9f18b72e3d4073ca50b37d": "2000000000000000000000", - "bbbf39b1b67995a42241504f9703d2a14a515696": "1580000000000000000000", - "5b800bfd1b3ed4a57d875aed26d42f1a7708d72a": "6392000000000000000000", - "5b85e60e2af0544f2f01c64e2032900ebd38a3c7": "2000000000000000000000", - "c9ac01c3fb0929033f0ccc7e1acfeaaba7945d47": "12459235000000000000000", - "f355d3ec0cfb907d8dbb1bf3464e458128190bac": "4925600000000000000000", - "69c08d744754de709ce96e15ae0d1d395b3a2263": "1000000000000000000000", - "cef77451dfa2c643e00b156d6c6ff84e2373eb66": "188000000000000000000", - "f3034367f87d24d3077fa9a2e38a8b0ccb1104ef": "1000000000000000000000", - "73473e72115110d0c3f11708f86e77be2bb0983c": "20000000000000000000", - "761e6caec189c230a162ec006530193e67cf9d19": "2000000000000000000000", - "e9caf827be9d607915b365c83f0d3b7ea8c79b50": "3000000000000000000000", - "eda4b2fa59d684b27a810df8978a73df308a63c2": "4000000000000000000000", - "065ff575fd9c16d3cb6fd68ffc8f483fc32ec835": "200000000000000000000", - "a72ee666c4b35e82a506808b443cebd5c632c7dd": "800000000000000000000", - "5b30608c678e1ac464a8994c3b33e5cdf3497112": "400000000000000000000", - "b0c7ce4c0dc3c2bbb99cc1857b8a455f611711ce": "4000000000000000000000", - "d7274d50804d9c77da93fa480156efe57ba501de": "1940000000000000000000", - "a609c26dd350c235e44b2b9c1dddccd0a9d9f837": "1000000000000000000000", - "bddfa34d0ebf1b04af53b99b82494a9e3d8aa100": "12000000000000000000000", - "fd40242bb34a70855ef0fd90f3802dec2136b327": "1930600000000000000000", - "58aed6674affd9f64233272a578dd9386b99c263": "3400000000000000000000", - "24434a3e32e54ecf272fe3470b5f6f512f675520": "5910000000000000000000", - "a379a5070c503d2fac89b8b3afa080fd45ed4bec": "19700000000000000000000", - "37e169a93808d8035698f815c7235613c1e659f2": "1000000000000000000000", - "849b116f596301c5d8bb62e0e97a8248126e39f3": "300000000000000000000", - "fe7011b698bf3371132d7445b19eb5b094356aee": "2000000000000000000000", - "f16de1891d8196461395f9b136265b3b9546f6ef": "31313000000000000000", - "6c6564e5c9c24eaaa744c9c7c968c9e2c9f1fbae": "1357800000000000000000", - "8bb0212f3295e029cab1d961b04133a1809e7b91": "2000000000000000000000", - "408a69a40715e1b313e1354e600800a1e6dc02a5": "35144000000000000000", - "ddf0cce1fe996d917635f00712f4052091dff9ea": "2000000000000000000000", - "50fef296955588caae74c62ec32a23a454e09ab8": "1201200000000000000000", - "d913f0771949753c4726acaa2bd3619c5c20ff77": "3000000000000000000000", - "9d6ecfa03af2c6e144b7c4692a86951e902e9e1f": "3000310000000000000000", - "ecbe5e1c9ad2b1dccf0a305fc9522f4669dd3ae7": "5000000000000000000000", - "33e9b71823952e1f66958c278fc28b1196a6c5a4": "100000000000000000000", - "9de20bc37e7f48a80ffd7ad84ffbf1a1abe1738c": "200000000000000000000", - "16f313cf8ad000914a0a176dc6a4342b79ec2538": "2000000000000000000000", - "991ac7ca7097115f26205eee0ef7d41eb4e311ae": "20000000000000000000", - "ddfafdbc7c90f1320e54b98f374617fbd01d109f": "13370000000000000000", - "26b11d066588ce74a572a85a6328739212aa8b40": "2000000000000000000000", - "ef2c34bb487d3762c3cca782ccdd7a8fbb0a9931": "180000000000000000000", - "a9be88ad1e518b0bbb024ab1d8f0e73f790e0c76": "2800000000000000000000", - "4a7494cce44855cc80582842be958a0d1c0072ee": "2400000000000000000000", - "23569542c97d566018c907acfcf391d14067e87e": "2000000000000000000000", - "d252960b0bf6b2848fdead80136db5f507f8be02": "2000000000000000000000", - "2c0f5b9df43625798e7e03c1a5fd6a6d091af82b": "31200000000000000000", - "a7c9d388ebd873e66b1713448397d0f37f8bd3a8": "5000000000000000000000", - "3259bd2fddfbbc6fbad3b6e874f0bbc02cda18b5": "11886645000000000000000", - "f287ff52f461117adb3e1daa71932d1493c65f2e": "3640000000000000000000", - "c852428d2b586497acd30c56aa13fb5582f84402": "945600000000000000000", - "296f00de1dc3bb01d47a8ccd1e5d1dd9a1eb7791": "1000000000000000000000", - "817493cd9bc623702a24a56f9f82e3fd48f3cd31": "2920000000000000000000", - "7adfedb06d91f3cc7390450b85550270883c7bb7": "322312000000000000000", - "8d544c32c07fd0842c761d53a897d6c950bb7599": "200000000000000000000", - "86297d730fe0f7a9ee24e08fb1087b31adb306a7": "2000000000000000000000", - "f64fe0939a8d1eea2a0ecd9a9730fd7958e33109": "20600000000000000000", - "b06eab09a610c6a53d56a946b2c43487ac1d5b2d": "1000000000000000000000", - "bae9b82f7299631408659dd74e891cb8f3860fe5": "1970000000000000000000", - "0eda80f4ed074aea697aeddf283b63dbca3dc4da": "2000000000000000000000", - "ea686c5057093c171c66db99e01b0ececb308683": "384907000000000000000", - "425725c0f08f0811f5f006eec91c5c5c126b12ae": "150000000000000000000", - "b18e67a5050a1dc9fb190919a33da838ef445014": "20000000000000000000", - "8dd484ff8a307364eb66c525a571aac701c5c318": "4000000000000000000000", - "6671b182c9f741a0cd3c356c73c23126d4f9e6f4": "200000000000000000000", - "ba0249e01d945bef93ee5ec61925e03c5ca509fd": "4000000000000000000000", - "b2968f7d35f208871631c6687b3f3daeabc6616c": "156060000000000000000", - "a6f62b8a3d7f11220701ab9ffffcb327959a2785": "506000000000000000000", - "c885a18aabf4541b7b7b7ecd30f6fae6869d9569": "2000000000000000000000", - "33fb577a4d214fe010d32cca7c3eeda63f87ceef": "1000000000000000000000", - "be86d0b0438419ceb1a038319237ba5206d72e46": "999942000000000000000", - "466292f0e80d43a78774277590a9eb45961214f4": "970000000000000000000", - "b33c0323fbf9c26c1d8ac44ef74391d0804696da": "20000000000000000000", - "f7bc4c44910d5aedd66ed2355538a6b193c361ec": "96980000000000000000", - "d0f04f52109aebec9a7b1e9332761e9fe2b97bb5": "4000000000000000000000", - "cb4a914d2bb029f32e5fef5c234c4fec2d2dd577": "1800000000000000000000", - "2e619f57abc1e987aa936ae3a2264962e7eb2d9a": "756000000000000000000", - "166bf6dab22d841b486c38e7ba6ab33a1487ed8c": "20000000000000000000000", - "c3a046e3d2b2bf681488826e32d9c061518cfe8c": "2600000000000000000000", - "d082275f745a2cac0276fbdb02d4b2a3ab1711fe": "30000000000000000000", - "a701df79f594901afe1444485e6b20c3bda2b9b3": "1000000000000000000000", - "dec3eec2640a752c466e2b7e7ee685afe9ac41f4": "1324245000000000000000", - "8134dd1c9df0d6c8a5812426bb55c761ca831f08": "122360000000000000000", - "bfc57aa666fae28e9f107a49cb5089a4e22151dd": "1000000000000000000000", - "c3c2297329a6fd99117e54fc6af379b4d556547e": "6000000000000000000000", - "40585200683a403901372912a89834aadcb55fdb": "2000000000000000000000", - "cd49bf185e70d04507999f92a4de4455312827d0": "1000000000000000000000", - "9c6bc9a46b03ae5404f043dfcf21883e4110cc33": "200000000000000000000", - "1f49b86d0d3945590698a6aaf1673c37755ca80d": "700000000000000000000", - "efeb1997aad277cc33430e6111ed0943594048b8": "2000000000000000000000", - "7c0883054c2d02bc7a852b1f86c42777d0d5c856": "500000000000000000000", - "ff49a775814ec00051a795a875de24592ea400d4": "200000000000000000000000", - "f039683d7b3d225bc7d8dfadef63163441be41e2": "34380000000000000000", - "a3ba0d3a3617b1e31b4e422ce269e873828d5d69": "850000000000000000000", - "d116f3dcd5db744bd008887687aa0ec9fd7292aa": "1000000000000000000000", - "5719f49b720da68856f4b9e708f25645bdbc4b41": "640000000000000000000", - "870796abc0db84af82da52a0ed68734de7e636f5": "300000000000000000000", - "68b6854788a7c6496cdbf5f84b9ec5ef392b78bb": "19700000000000000000000", - "8c2fbeee8eacc5c5d77c16abd462ee9c8145f34b": "1940000000000000000000", - "421684baa9c0b4b5f55338e6f6e7c8e146d41cb7": "1500000000000000000000", - "dd26b429fd43d84ec179825324bad5bfb916b360": "5142000000000000000000", - "3821862493242c0aeb84b90de05d250c1e50c074": "322200000000000000000", - "68a7425fe09eb28cf86eb1793e41b211e57bd68d": "668500000000000000000", - "da875e4e2f3cabe4f37e0eaed7d1f6dcc6ffef43": "2000000000000000000000", - "c2663f8145dbfec6c646fc5c49961345de1c9f11": "690000000000000000000", - "e89c22f1a4e1d4746ecfaa59ed386fee12d51e37": "44932000000000000000", - "eff86b5123bcdc17ed4ce8e05b7e12e51393a1f7": "500000000000000000000", - "6c3d18704126aa99ee3342ce60f5d4c85f1867cd": "50000000000000000000", - "b8d531a964bcea13829620c0ced72422dadb4cca": "169990000000000000000", - "7c29d47d57a733f56b9b217063b513dc3b315923": "4000000000000000000000", - "bc1e80c181616342ebb3fb3992072f1b28b802c6": "4000000000000000000000", - "31313ffd635bf2f3324841a88c07ed146144ceeb": "1970000000000000000000", - "cc4feb72df98ff35a138e01761d1203f9b7edf0a": "7000000000000000000000", - "741693c30376508513082020cc2b63e9fa92131b": "1200000000000000000000", - "aa3135cb54f102cbefe09e96103a1a796718ff54": "57800000000000000000", - "ef61155ba009dcdebef10b28d9da3d1bc6c9ced4": "59100000000000000000", - "b3c94811e7175b148b281c1a845bfc9bb6fbc115": "200000000000000000000", - "96d9cca8f55eea0040ec6eb348a1774b95d93ef4": "4000000000000000000000", - "ce62125adec3370ac52110953a4e760be9451e3b": "152000000000000000000", - "aca1e6bc64cc3180f620e94dc5b1bcfd8158e45d": "2000000000000000000000", - "bc237148d30c13836ffa2cad520ee4d2e5c4eeff": "1970000000000000000000", - "0e024e7f029c6aaf3a8b910f5e080873b85795aa": "1000000000000000000000", - "7283cd4675da58c496556151dafd80c7f995d318": "760000000000000000000", - "39b299327490d72f9a9edff11b83afd0e9d3c450": "200000000000000000000", - "5f333a3b2310765a0d1832b9be4c0a03704c1c09": "1000000000000000000000", - "5aaf1c31254a6e005fba7f5ab0ec79d7fc2b630e": "5910000000000000000000", - "833db42c14163c7be4cab86ac593e06266d699d5": "174212000000000000000000", - "f32d25eb0ea2b8b3028a4c7a155dc1aae865784d": "5710684000000000000000", - "1fa2319fed8c2d462adf2e17feec6a6f30516e95": "125300000000000000000", - "c49cfaa967f3afbf55031061fc4cef88f85da584": "2000000000000000000000", - "43db7ff95a086d28ebbfb82fb8fb5f230a5ebccd": "16100000000000000000", - "cf3f9128b07203a3e10d7d5755c0c4abc6e2cac2": "5000000000000000000000", - "8f4d1e7e4561284a34fef9673c0d34e12af4aa03": "2000000000000000000000", - "934af21b7ebfa467e2ced65aa34edd3a0ec71332": "35420000000000000000000", - "5d231a70c1dfeb360abd97f616e2d10d39f3cab5": "400000000000000000000", - "2d5d7335acb0362b47dfa3a8a4d3f5949544d380": "200000000000000000000", - "d1e1f2b9c16c309874dee7fac32675aff129c398": "72800000000000000000", - "a43b6da6cb7aac571dff27f09d39f846f53769b1": "380000000000000000000", - "779274bf1803a336e4d3b00ddd93f2d4f5f4a62e": "1000000000000000000000", - "a644ed922cc237a3e5c4979a995477f36e50bc62": "583900000000000000000", - "ee6c03429969ca1262cb3f0a4a54afa7d348d7f5": "256100000000000000000", - "4f06246b8d4bd29661f43e93762201d286935ab1": "4818730000000000000000", - "e04972a83ca4112bc871c72d4ae1616c2f0728db": "267606000000000000000", - "df098f5e4e3dffa51af237bda8652c4f73ed9ca6": "502000000000000000000", - "dfded2574b27d1613a7d98b715159b0d00baab28": "20000000000000000000000", - "17d931d4c56294dcbe77c8655be4695f006d4a3c": "2000000000000000000000", - "3ccb71aa6880cb0b84012d90e60740ec06acd78f": "2000000000000000000000", - "e57d2995b0ebdf3f3ca6c015eb04260dbb98b7c6": "2000000000000000000000", - "fb3860f4121c432ebdc8ec6a0331b1b709792e90": "600400000000000000000", - "fa00c376e89c05e887817a9dd0748d96f341aa89": "300700000000000000000", - "c7a018f0968a51d1f6603c5c49dc545bcb0ff293": "4000000000000000000000", - "7d73863038ccca22f96affda10496e51e1e6cd48": "20000000000000000000", - "38ea6f5b5a7b88417551b4123dc127dfe9342da6": "400000000000000000000", - "014b7f67b14f5d983d87014f570c8b993b9872b5": "200000000000000000000", - "8ac89bd9b8301e6b0677fa25fcf0f58f0cc7b611": "20000000000000000000", - "7eb4b0185c92b6439a08e7322168cb353c8a774a": "10165988000000000000000", - "d29dc08efbb3d72e263f78ab7610d0226de76b00": "12000000000000000000000", - "72a8260826294726a75bf39cd9aa9e07a3ea14cd": "2000000000000000000000", - "4cb5c6cd713ca447b848ae2f56b761ca14d7ad57": "267400000000000000000", - "49185dd7c23632f46c759473ebae966008cd3598": "254030000000000000000", - "13d67a7e25f2b12cdb85585009f8acc49b967301": "1999944000000000000000", - "9d913b5d339c95d87745562563fea98b23c60cc4": "170718000000000000000", - "abdc9f1bcf4d19ee96591030e772c334302f7d83": "40110000000000000000000", - "e9a5ae3c9e05977dd1069e9fd9d3aefbae04b8df": "1970000000000000000000", - "1fd296be03ad737c92f9c6869e8d80a71c5714aa": "13370000000000000000", - "2f13657526b177cad547c3908c840eff647b45d9": "1170685000000000000000", - "e69fcc26ed225f7b2e379834c524d70c1735e5bc": "2000000000000000000000", - "bade43599e02f84f4c3014571c976b13a36c65ab": "4000000000000000000000", - "184a4f0beb71ffd558a6b6e8f228b78796c4cf3e": "12000000000000000000000", - "d1de5aad3a5fd803f1b1aeb6103cb8e14fe723b7": "20000000000000000000", - "0bd67dbde07a856ebd893b5edc4f3a5be4202616": "2000000000000000000000", - "6b30f1823910b86d3acb5a6afc9defb6f3a30bf8": "4200000000000000000000", - "9a63d185a79129fdab19b58bb631ea36a420544e": "42000000000000000000", - "df660a91dab9f730f6190d50c8390561500756ca": "2000000000000000000000", - "a1a1f0fa6d20b50a794f02ef52085c9d036aa6ca": "1000000000000000000000", - "4ec768295eeabafc42958415e22be216cde77618": "59600000000000000000", - "c348fc5a461323b57be303cb89361b991913df28": "100000000000000000000000", - "3a7db224acae17de7798797d82cdf8253017dfa8": "5000000000000000000000", - "8bea40379347a5c891d59a6363315640f5a7e07a": "1999992000000000000000", - "2257fca16a6e5c2a647c3c29f36ce229ab93b17e": "4000000000000000000000", - "e492818aa684e5a676561b725d42f3cc56ae5198": "800000000000000000000", - "c841884fa4785fb773b28e9715fae99a5134305d": "2000000000000000000000", - "0d9443a79468a5bbf7c13c6e225d1de91aee07df": "70000000000000000000", - "6d4008b4a888a826f248ee6a0b0dfde9f93210b9": "5460000000000000000000", - "884980eb4565c1048317a8f47fdbb461965be481": "3999922000000000000000", - "985d70d207892bed398590024e2421b1cc119359": "20000000000000000000000", - "d9ec8fe69b7716c0865af888a11b2b12f720ed33": "4000000000000000000000", - "49b74e169265f01a89ec4c9072c5a4cd72e4e835": "16100000000000000000000", - "4c3e95cc3957d252ce0bf0c87d5b4f2234672e70": "2500000000000000000000", - "d9ff115d01266c9f73b063c1c238ef3565e63b36": "680000000000000000000", - "48c5c6970b9161bb1c7b7adfed9cdede8a1ba864": "4000000000000000000000", - "ea6afe2cc928ac8391eb1e165fc40040e37421e7": "2997569000000000000000", - "08ccda50e4b26a0ffc0ef92e9205310706bec2c7": "6077440000000000000000", - "e6e9a39d750fe994394eb68286e5ea62a6997882": "600000000000000000000", - "4b58101f44f7e389e12d471d1635b71614fdd605": "160000000000000000000", - "8d93dac785f88f1a84bf927d53652b45a154ccdd": "158000000000000000000", - "415d096ab06293183f3c033d25f6cf7178ac3bc7": "40000000000000000000", - "c3e387b03ce95ccfd7fa51dd840183bc43532809": "2000000000000000000000", - "da34b2eae30bafe8daeccde819a794cd89e09549": "2000000000000000000000", - "fa279bfd8767f956bf7fa0bd5660168da75686bd": "2674000000000000000000", - "b98ca31785ef06be49a1e47e864f60d076ca472e": "4000000000000000000000", - "b768b5234eba3a9968b34d6ddb481c8419b3655d": "14974000000000000000", - "31047d703f63b93424fbbd6e2f1f9e74de13e709": "2850123000000000000000", - "9a24ce8d485cc4c86e49deb39022f92c7430e67e": "1300000000000000000000", - "e62f9d7c64e8e2635aeb883dd73ba684ee7c1079": "8000000000000000000000", - "f15d9d5a21b1929e790371a17f16d95f0c69655c": "2000000000000000000000", - "285ae51b9500c58d541365d97569f14bb2a3709b": "2000000000000000000000", - "09c177f1ae442411ddacf187d46db956148360e7": "8950000000000000000000", - "12173074980153aeaa4b0dcbc7132eadcec21b64": "240000000000000000000", - "351f16e5e0735af56751b0e225b2421171394090": "13370000000000000000000", - "ac52b77e15664814f39e4f271be641308d91d6cc": "220000000000000000000", - "99c883258546cc7e4e971f522e389918da5ea63a": "4000000000000000000000", - "aa16269aac9c0d803068d82fc79151dadd334b66": "4000000000000000000000", - "7c9a110cb11f2598b2b20e2ca400325e41e9db33": "26000000000000000000000", - "583e83ba55e67e13e0e76f8392d873cd21fbf798": "20000000000000000000", - "555ebe84daa42ba256ea789105cec4b693f12f18": "100000000000000000000", - "978c430ce4359b06bc2cdf5c2985fc950e50d5c8": "480000000000000000000", - "dc1eb9b6e64351f56424509645f83e79eee76cf4": "4000000000000000000000", - "5b290c01967c812e4dc4c90b174c1b4015bae71e": "149946000000000000000", - "e7d213947fcb904ad738480b1eed2f5c329f27e8": "18718000000000000000", - "c517d0315c878813c717e18cafa1eab2654e01da": "10000000000000000000000", - "7e972a8a7c2a44c93b21436c38d21b9252c345fe": "1790000000000000000000", - "9cb28ac1a20a106f7f373692c5ce4c73f13732a1": "1000000000000000000000", - "14ab164b3b524c82d6abfbc0de831126ae8d1375": "2000000000000000000000", - "d46f8223452982a1eea019a8816efc2d6fc00768": "137000000000000000000", - "5cdc4708f14f40dcc15a795f7dc8cb0b7faa9e6e": "537000000000000000000", - "66fdc9fee351fa1538eb0d87d819fcf09e7c106a": "6016500000000000000000", - "e7be82c6593c1eeddd2ae0b15001ff201ab57b2f": "19100000000000000000", - "47d20e6ae4cad3f829eac07e5ac97b66fdd56cf5": "1000000000000000000000", - "0f2d8daf04b5414a0261f549ff6477b80f2f1d07": "200000000000000000000000", - "84bfcef0491a0ae0694b37ceac024584f2aa0467": "1999944000000000000000", - "ec5feafe210c12bfc9a5d05925a123f1e73fbef8": "456000000000000000000000", - "7023c70956e04a92d70025aad297b539af355869": "2000000000000000000000", - "d66ddf1159cf22fd8c7a4bc8d5807756d433c43e": "2200000000000000000000", - "d0638ea57189a6a699024ad78c71d939c1c2ff8c": "2632000000000000000000", - "70d25ed2c8ada59c088cf70dd22bf2db93acc18a": "1056600000000000000000", - "a4875928458ec2005dbb578c5cd33580f0cf1452": "1000000000000000000000", - "b5ad5157dda921e6bafacd9086ae73ae1f611d3f": "2000000000000000000000", - "c493489e56c3bdd829007dc2f956412906f76bfa": "48968000000000000000", - "c57612de91110c482e6f505bcd23f3c5047d1d61": "3580000000000000000000", - "9b18478655a4851cc906e660feac61f7f4c8bffc": "4174120000000000000000", - "b21b7979bf7c5ca01fa82dd640b41c39e6c6bc75": "1999944000000000000000", - "a9d4a2bcbe5b9e0869d70f0fe2e1d6aacd45edc5": "198800000000000000000", - "6f29bb375be5ed34ed999bb830ee2957dde76d16": "2000000000000000000000", - "a006268446643ec5e81e7acb3f17f1c351ee2ed9": "4000000000000000000000", - "42ddd014dc52bfbcc555325a40b516f4866a1dd3": "2000000000000000000000", - "d6d6776958ee23143a81adadeb08382009e996c2": "3000000000000000000000", - "d34e03d36a2bd4d19a5fa16218d1d61e3ffa0b15": "320000000000000000000", - "dac0c177f11c5c3e3e78f2efd663d13221488574": "1000000000000000000000", - "814135da8f9811075783bf1ab67062af8d3e9f40": "20000000000000000000", - "7c3eb713c4c9e0381cd8154c7c9a7db8645cde17": "200000000000000000000", - "f49c47b3efd86b6e6a5bc9418d1f9fec814b69ef": "20000000000000000000000", - "35f1da127b83376f1b88c82a3359f67a5e67dd50": "1910000000000000000000", - "44dfba50b829becc5f4f14d1b04aab3320a295e5": "1000000000000000000000", - "0b924df007e9c0878417cfe63b976ea1a382a897": "40000000000000000000", - "82438fd2b32a9bdd674b49d8cc5fa2eff9781847": "20000000000000000000", - "794529d09d017271359730027075b87ad83dae6e": "310000000000000000000", - "f4b49100757772f33c177b9a76ba95226c8f3dd8": "6700000000000000000000", - "8563c49361b625e768771c96151dbfbd1c906976": "2000000000000000000000", - "0b9df80fbe232009dacf0aa8cac59376e2476203": "2000000000000000000000", - "149b6dbde632c19f5af47cb493114bebd9b03c1f": "12000000000000000000000", - "d7a1431ee453d1e49a0550d1256879b4f5d10201": "1670000000000000000000", - "1d37616b793f94911838ac8e19ee9449df921ec4": "1500000000000000000000", - "d6670c036df754be43dadd8f50feea289d061fd6": "5988459000000000000000", - "02778e390fa17510a3428af2870c4273547d386c": "16163700000000000000000", - "b89f4632df5909e58b2a9964f74feb9a3b01e0c5": "21406707000000000000000", - "76c27535bcb59ce1fa2d8c919cabeb4a6bba01d1": "2000000000000000000000", - "36bf43ff35df90908824336c9b31ce33067e2f50": "346837200000000000000000", - "b53bcb174c2518348b818aece020364596466ba3": "2000000000000000000000", - "b4dd460cd016725a64b22ea4f8e06e06674e033e": "5370000000000000000000", - "cda1741109c0265b3fb2bf8d5ec9c2b8a3346b63": "20000000000000000000", - "feb8b8e2af716ae41fc7c04bcf29540156461e6b": "1555396000000000000000", - "a49f523aa51364cbc7d995163d34eb590ded2f08": "2659160000000000000000", - "a7e74f0bdb278ff0a805a648618ec52b166ff1be": "100000000000000000000", - "5ead29037a12896478b1296ab714e9cb95428c81": "71500000000000000000", - "cdecf5675433cdb0c2e55a68db5d8bbe78419dd2": "20000000000000000000", - "c24ccebc2344cce56417fb684cf81613f0f4b9bd": "1550000000000000000000", - "5a70106f20d63f875265e48e0d35f00e17d02bc9": "20000000000000000000", - "2606c3b3b4ca1b091498602cb1978bf3b95221c0": "400000000000000000000", - "1ad4563ea5786be1159935abb0f1d5879c3e7372": "6000000000000000000000", - "b782bfd1e2de70f467646f9bc09ea5b1fcf450af": "267400000000000000000", - "649a2b9879cd8fb736e6703b0c7747849796f10f": "7358102000000000000000", - "1cc1d3c14f0fb8640e36724dc43229d2ea7a1e48": "1700000000000000000000", - "824b3c3c443e19295d7ef6faa7f374a4798486a8": "20000000000000000000", - "a7758cecb60e8f614cce96137ef72b4fbd07774a": "500000000000000000000", - "981f712775c0dad97518ffedcb47b9ad1d6c2762": "6685000000000000000000", - "26e801b62c827191dd68d31a011990947fd0ebe0": "20000000000000000000", - "95447046313b2f3a5e19b948fd3b8bedc82c717c": "500000000000000000000", - "0b701101a4109f9cb360dc57b77442673d5e5983": "2000000000000000000000", - "5b25cae86dcafa2a60e7723631fc5fa49c1ad87d": "2491200000000000000000", - "f73ac46c203be1538111b151ec8220c786d84144": "294515000000000000000", - "e8c3d3b0e17f97d1e756e684f94e1470f99c95a1": "400000000000000000000", - "8c900a8236b08c2b65405d39d75f20062a7561fd": "1640000000000000000000", - "43898c49a34d509bfed4f76041ee91caf3aa6aa5": "300000000000000000000", - "c85325eab2a59b3ed863c86a5f2906a04229ffa9": "465600000000000000000", - "4a430170152de5172633dd8262d107a0afd96a0f": "3160000000000000000000", - "6e0ee70612c976287d499ddfa6c0dcc12c06deea": "129980000000000000000", - "21c07380484f6cbc8724ad32bc864c3b5ad500b7": "1000000000000000000000", - "ff5162f2354dc492c75fd6e3a107268660eecb47": "1700000000000000000000", - "8845e9f90e96336bac3c616be9d88402683e004c": "2000000000000000000000", - "f23c7b0cb8cd59b82bd890644a57daf40c85e278": "50038000000000000000", - "1784948bf99848c89e445638504dd698271b5924": "6037580000000000000000", - "b39f4c00b2630cab7db7295ef43d47d501e17fd7": "4000000000000000000000", - "3fb7d197b3ba4fe045efc23d50a14585f558d9b2": "20000000000000000000", - "bd043b67c63e60f841ccca15b129cdfe6590c8e3": "200000000000000000000", - "86ca0145957e6b0dfe36875fbe7a0dec55e17a28": "10000000000000000000000", - "dae7201eab8c063302930d693929d07f95e71962": "2687370000000000000000", - "cc034985d3f28c2d39b1a34bced4d3b2b6ca234e": "182000000000000000000", - "40e0dbf3efef9084ea1cd7e503f40b3b4a8443f6": "4000000000000000000000", - "b1896a37e5d8825a2d01765ae5de629977de8352": "200000000000000000000", - "d9f547f2c1de0ed98a53d161df57635dd21a00bd": "98500000000000000000", - "2fea1b2f834f02fc54333f8a809f0438e5870aa9": "20200000000000000000", - "68b31836a30a016ada157b638ac15da73f18cfde": "26000000000000000000", - "bc967fe4418c18b99858966d870678dca2b88879": "8740000000000000000000", - "16bae5d24eff91778cd98b4d3a1cc3162f44aa77": "401100000000000000000", - "f476e1267f86247cc908816f2e7ad5388c952db0": "4000000000000000000000", - "0203ae01d4c41cae1865e04b1f5b53cdfaecae31": "1006054000000000000000", - "bd4bd5b122d8ef7b7c8f0667450320db2116142e": "600000000000000000000", - "a394ad4fd9e6530e6f5c53faecbede81cb172da1": "5600000000000000000000", - "3a9960266df6492063538a99f487c950a3a5ec9e": "24000000000000000000000", - "d8069f84b521493f4715037f3226b25f33b60586": "1910000000000000000000", - "136c834bf111326d207395295b2e583ea7f33572": "100000000000000000000", - "c5c73d61cce7c8fe4c8fce29f39092cd193e0fff": "8000000000000000000000", - "3cfbf066565970639e130df2a7d16b0e14d6091c": "1700000000000000000000", - "61b905de663fc17386523b3a28e2f7d037a655cd": "500000000000000000000", - "fda0ce15330707f10bce3201172d2018b9ddea74": "51900000000000000000", - "f7fc45abf76f5088e2e5b5a8d132f28a4d4ec1c0": "2000000000000000000000", - "c3db9fb6f46c480af34465d79753b4e2b74a67ce": "20000000000000000000000", - "ebe46cc3c34c32f5add6c3195bb486c4713eb918": "1000000000000000000000", - "91d2a9ee1a6db20f5317cca7fbe2313895db8ef8": "8499600000000000000000", - "c4cc45a2b63c27c0b4429e58cd42da59be739bd6": "1000000000000000000000", - "a43b81f99356c0af141a03010d77bd042c71c1ee": "2000000000000000000000", - "4c45d4c9a725d11112bfcbca00bf31186ccaadb7": "400000000000000000000", - "bf9f271f7a7e12e36dd2fe9facebf385fe6142bd": "62760000000000000000", - "e0ce80a461b648a501fd0b824690c8868b0e4de8": "500000000000000000000", - "a1f7dde1d738d8cd679ea1ee965bee224be7d04d": "1127000000000000000000", - "7f1c81ee1697fc144b7c0be5493b5615ae7fddca": "500200000000000000000", - "b508f987b2de34ae4cf193de85bff61389621f88": "6000000000000000000000", - "5f26cf34599bc36ea67b9e7a9f9b4330c9d542a3": "1000000000000000000000", - "d02108d2ae3cab10cbcf1657af223e027c8210f6": "2000140000000000000000", - "952183cfd38e352e579d36decec5b18450f7fba0": "2000000000000000000000", - "eb90c793b3539761e1c814a29671148692193eb4": "12000000000000000000000", - "1076212d4f758c8ec7121c1c7d74254926459284": "35000056000000000000000", - "f05ceeab65410564709951773c8445ad9f4ec797": "299982000000000000000", - "05361d8eb6941d4e90fb7e1418a95a32d5257732": "20000000000000000000", - "a5783bf33432ff82ac498985d7d460ae67ec3673": "1820000000000000000000", - "b1cd4bdfd104489a026ec99d597307a04279f173": "20000000000000000000000", - "876c3f218b4776df3ca9dbfb270de152d94ed252": "100000000000000000000", - "8a36869ad478997cbf6d8924d20a3c8018e9855b": "20000000000000000000", - "fb3fe09bb836861529d7518da27635f538505615": "1399904000000000000000", - "d093e829819fd2e25b973800bb3d5841dd152d05": "4000000000000000000000", - "126d91f7ad86debb0557c612ca276eb7f96d00a1": "100000000000000000000", - "2a81d27cb6d4770ff4f3c4a3ba18e5e57f07517c": "2000000000000000000000", - "c4f7b13ac6d4eb4db3d4e6a252af8a07bd5957da": "200000000000000000000", - "305d26c10bdc103f6b9c21272eb7cb2d9108c47e": "500000000000000000000", - "d0d0a2ad45f59a9dccc695d85f25ca46ed31a5a3": "840000000000000000000", - "522323aad71dbc96d85af90f084b99c3f09decb7": "6000000000000000000000", - "f43da3a4e3f5fab104ca9bc1a0f7f3bb4a56f351": "1999944000000000000000", - "a2dc65ee256b59a5bd7929774f904b358df3ada1": "21319600000000000000000", - "f382df583155d8548f3f93440cd5f68cb79d6026": "266619800000000000000000", - "0c967e3061b87a753e84507eb60986782c8f3013": "100000000000000000000", - "a3a262afd2936819230892fde84f2d5a594ab283": "1880000000000000000000", - "93868ddb2a794d02ebda2fa4807c76e3609858dc": "2027851000000000000000", - "cd35ff010ec501a721a1b2f07a9ca5877dfcf95a": "4011000000000000000000", - "5824a7e22838277134308c5f4b50dab65e43bb31": "6000000000000000000000", - "7f7a3a21b3f5a65d81e0fcb7d52dd00a1aa36dba": "100000000000000000000", - "30513fca9f36fd788cfea7a340e86df98294a244": "447000000000000000000", - "283e6252b4efcf4654391acb75f903c59b78c5fb": "12000000000000000000000", - "eddbaafbc21be8f25562f1ed6d05d6afb58f02c2": "2000000000000000000000", - "0dcfe837ea1cf28c65fccec3bef1f84e59d150c0": "200000000000000000000", - "828ba651cb930ed9787156299a3de44cd08b7212": "1337000000000000000000", - "cfd47493c9f89fe680bda5754dd7c9cfe7cb5bbe": "54508000000000000000", - "0e89eddd3fa0d71d8ab0ff8da5580686e3d4f74f": "2000000000000000000000", - "205f5166f12440d85762c967d3ae86184f8f4d98": "432500000000000000000", - "25dad495a11a86b9eeece1eeec805e57f157faff": "16000000000000000000000", - "6c84cba77c6db4f7f90ef13d5ee21e8cfc7f8314": "2000000000000000000000", - "91a787bc5196f34857fe0c372f4df376aaa76613": "2000000000000000000000", - "b0d3c9872b85056ea0c0e6d1ecf7a77e3ce6ab85": "4999711000000000000000", - "6e4d2e39c8836629e5b487b1918a669aebdd9536": "1000000000000000000000", - "dc703a5f3794c84d6cb3544918cae14a35c3bd4f": "1850000000000000000000", - "47beb20f759100542aa93d41118b3211d664920e": "2000000000000000000000", - "5a7735007d70b06844da9901cdfadb11a2582c2f": "6000000000000000000000", - "aff107960b7ec34ed690b665024d60838c190f70": "500000000000000000000", - "563a03ab9c56b600f6d25b660c21e16335517a75": "1000000000000000000000", - "a106465bbd19e1b6bce50d1b1157dc59095a3630": "2000000000000000000000", - "ca9dec02841adf5cc920576a5187edd2bd434a18": "500000000000000000000", - "572ac1aba0de23ae41a7cae1dc0842d8abfc103b": "1910000000000000000000", - "5f74ed0e24ff80d9b2c4a44baa9975428cd6b935": "2980000000000000000000", - "f2049532fd458a83ca1bff2eebacb6d5ca63f4a4": "3625693000000000000000", - "cee699c0707a7836252b292f047ce8ad289b2f55": "324700000000000000000", - "8b3696f3c60de32432a2e4c395ef0303b7e81e75": "30000000000000000000000", - "13dee03e3799952d0738843d4be8fc0a803fb20e": "2000000000000000000000", - "c853215b9b9f2d2cd0741e585e987b5fb80c212e": "1550000000000000000000", - "851c0d62be4635d4777e8035e37e4ba8517c6132": "500000000000000000000", - "a76b743f981b693072a131b22ba510965c2fefd7": "18200000000000000000", - "69bd25ade1a3346c59c4e930db2a9d715ef0a27a": "4000000000000000000000", - "0fec4ee0d7ca180290b6bd20f9992342f60ff68d": "334383000000000000000", - "ccfd725760a68823ff1e062f4cc97e1360e8d997": "399800000000000000000", - "9f017706b830fb9c30efb0a09f506b9157457534": "2000000000000000000000", - "420fb86e7d2b51401fc5e8c72015decb4ef8fc2e": "1000000000000000000000", - "cb7d2b8089e9312cc9aeaa2773f35308ec6c2a7b": "10000000000000000000000", - "6c822029218ac8e98a260c1e064029348839875b": "5010000000000000000000", - "1c68a66138783a63c98cc675a9ec77af4598d35e": "50100000000000000000", - "f270792576f05d514493ffd1f5e84bec4b2df810": "1000000000000000000000", - "9191f94698210516cf6321a142070e20597674ed": "17194000000000000000", - "c0ca3277942e7445874be31ceb902972714f1823": "250000000000000000000", - "35e096120deaa5c1ecb1645e2ccb8b4edbd9299a": "500000000000000000000", - "e2bbf84641e3541f6c33e6ed683a635a70bde2ec": "502763000000000000000", - "d12d77ae01a92d35117bac705aacd982d02e74c1": "1000000000000000000000", - "dabb0889fc042926b05ef57b2520910abc4b4149": "2000000000000000000000", - "5a1a336962d6e0c63031cc83c6a5c6a6f4478ecb": "1000000000000000000000", - "abd154903513b8da4f019f68284b0656a1d0169b": "1000000000000000000000", - "ad377cd25eb53e83ae091a0a1d2b4516f484afde": "1940000000000000000000", - "08c2f236ac4adcd3fda9fbc6e4532253f9da3bec": "20000000000000000000", - "71135d8f05963c905a4a07922909235a896a52ea": "3000000000000000000000", - "080546508a3d2682c8b9884f13637b8847b44db3": "2000000000000000000000", - "2d61bfc56873923c2b00095dc3eaa0f590d8ae0f": "20760000000000000000000", - "cbfa6af6c283b046e2772c6063b0b21553c40106": "2000000000000000000000", - "ccabc6048a53464424fcf76eeb9e6e1801fa23d4": "49250000000000000000", - "60cc3d445ebdf76a7d7ae571c6971dff68cc8585": "1000000000000000000000", - "fff33a3bd36abdbd412707b8e310d6011454a7ae": "8000000000000000000000", - "d2dbebe89b0357aea98bbe8e496338debb28e805": "4000000000000000000000", - "5f521282e9b278dc8c034c72af53ee29e5443d78": "6520000000000000000000", - "c5a48a8500f9b4e22f0eb16c6f4649687674267d": "812721000000000000000", - "8cb3aa3fcd212854d7578fcc30fdede6742a312a": "300000000000000000000", - "90d2809ae1d1ffd8f63eda01de49dd552df3d1bc": "3998000000000000000000", - "96a55f00dff405dc4de5e58c57f6f6f0cac55d2f": "1962711000000000000000", - "ae842e81858ecfedf6506c686dc204ac15bf8b24": "40000000000000000000", - "0be6a09e4307fe48d412b8d1a1a8284dce486261": "19180000000000000000000", - "c9c7ac0bdd9342b5ead4360923f68c72a6ba633a": "500000000000000000000", - "ea8f30b6e4c5e65290fb9864259bc5990fa8ee8a": "20000000000000000000", - "74d37a51747bf8b771bfbf43943933d100d21483": "1000000000000000000000", - "1a04d5389eb006f9ce880c30d15353f8d11c4b31": "17072800000000000000000", - "726a14c90e3f84144c765cffacba3e0df11b48be": "10000000000000000000000", - "86b7bd563ceab686f96244f9ddc02ad7b0b14bc2": "10000000000000000000000", - "2bbe672a1857508f630f2a5edb563d9e9de92815": "2000000000000000000000", - "a17070c2e9c5a940a4ec0e4954c4d7d643be8f49": "1999965000000000000000", - "f2d1b7357724ec4c03185b879b63f57e26589153": "6000000000000000000000", - "d6a7ac4de7b510f0e8de519d973fa4c01ba83400": "1880000000000000000000", - "593b45a1864ac5c7e8f0caaeba0d873cd5d113b2": "6000000000000000000000", - "0837539b5f6a522a482cdcd3a9bb7043af39bdd2": "6000000000000000000000", - "b927abd2d28aaaa24db31778d27419df8e1b04bb": "27531000000000000000", - "b2e085fddd1468ba07415b274e734e11237fb2a9": "100000000000000000000", - "970938522afb5e8f994873c9fbdc26e3b37e314c": "1000000000000000000000", - "f3de5f26ef6aded6f06d3b911346ee70401da4a0": "354718000000000000000", - "bffb6929241f788693273e7022e60e3eab1fe84f": "2000000000000000000000", - "b56ad2aec6c8c3f19e1515bbb7dd91285256b639": "1000000000000000000000", - "47730f5f8ebf89ac72ef80e46c12195038ecdc49": "3160000000000000000000", - "f39a9d7aa3581df07ee4279ae6c312ef21033658": "4000000000000000000000", - "36227cdfa0fd3b9d7e6a744685f5be9aa366a7f0": "198479000000000000000", - "89e3b59a15864737d493c1d23cc53dbf8dcb1362": "4000000000000000000000", - "bd08e0cddec097db7901ea819a3d1fd9de8951a2": "20000000000000000000", - "533444584082eba654e1ad30e149735c6f7ba922": "1730000000000000000000", - "6a8a4317c45faa0554ccdb482548183e295a24b9": "1000000000000000000000", - "22ce349159eeb144ef06ff2636588aef79f62832": "188000000000000000000", - "3cd1d9731bd548c1dd6fcea61beb75d91754f7d3": "5130285000000000000000", - "8b7056f6abf3b118d026e944d5c073433ca451d7": "999999000000000000000", - "15f1b352110d68901d8f67aac46a6cfafe031477": "200000000000000000000", - "0f789e30397c53bf256fc364e6ef39f853504114": "3640000000000000000000", - "750bbb8c06bbbf240843cc75782ee02f08a97453": "835000000000000000000", - "fff7ac99c8e4feb60c9750054bdc14ce1857f181": "1000000000000000000000", - "5c6f36af90ab1a656c6ec8c7d521512762bba3e1": "1999800000000000000000", - "6811b54cd19663b11b94da1de2448285cd9f68d9": "1100000000000000000000", - "6f50929777824c291a49c46dc854f379a6bea080": "360000000000000000000", - "e83604e4ff6be7f96f6018d3ec3072ec525dff6b": "182000000000000000000", - "d731bb6b5f3c37395e09ceaccd14a918a6060789": "3940000000000000000000", - "372e453a6b629f27678cc8aeb5e57ce85ec0aef9": "200000000000000000000", - "86924fb211aad23cf5ce600e0aae806396444087": "10000000000000000000000", - "18c6723a6753299cb914477d04a3bd218df8c775": "1000000000000000000000", - "e00484788db50fc6a48e379d123e508b0f6e5ab1": "1000000000000000000000", - "150e3dbcbcfc84ccf89b73427763a565c23e60d0": "40000000000000000000", - "8ffa062122ac307418821adb9311075a3703bfa3": "1000000000000000000000", - "21206ce22ea480e85940d31314e0d64f4e4d3a04": "1000000000000000000000", - "ac024f594f9558f04943618eb0e6b2ee501dc272": "2000000000000000000000", - "b2b7cdb4ff4b61d5b7ce0b2270bbb5269743ec04": "2000000000000000000000", - "abc74706964960dfe0dca3dca79e9216056f1cf4": "40000000000000000000000", - "d7eb903162271c1afa35fe69e37322c8a4d29b11": "10000000000000000000000", - "d7c6265dea11876c903b718e4cd8ab24fe265bde": "2000000000000000000000", - "cba288cd3c1eb4d59ddb06a6421c14c345a47b24": "4000000000000000000000", - "8c22426055b76f11f0a2de1a7f819a619685fe60": "1980000000000000000000", - "f463a90cb3f13e1f0643423636beab84c123b06d": "40000000000000000000", - "2b5ced9987c0765f900e49cf9da2d9f9c1138855": "400000000000000000000", - "9bb760d5c289a3e1db18db095345ca413b9a43c2": "197000000000000000000", - "d66ab79294074c8b627d842dab41e17dd70c5de5": "1000000000000000000000", - "0bdd58b96e7c916dd2fb30356f2aebfaaf1d8630": "2000000000000000000000", - "d612597bc31743c78633f633f239b1e9426bd925": "76000000000000000000000", - "140518a3194bad1350b8949e650565debe6db315": "2000000000000000000000", - "daedd4ad107b271e89486cbf80ebd621dd974578": "2000000000000000000000", - "c36c0b63bfd75c2f8efb060883d868cccd6cbdb4": "3000000000000000000000", - "e646665872e40b0d7aa2ff82729caaba5bc3e89e": "400000000000000000000", - "b5fb7ea2ddc1598b667a9d57dd39e85a38f35d56": "500000000000000000000", - "e51421f8ee2210c71ed870fe618276c8954afbe9": "1337000000000000000000", - "08a9a44e1f41de3dbba7a363a3ab412c124cd15e": "200000000000000000000", - "562bced38ab2ab6c080f3b0541b8456e70824b3f": "641760000000000000000", - "1e484d0621f0f5331b35d5408d9aae4eb1acf21e": "20000000000000000000", - "3a476bd2c9e664c63ab266aa4c6e4a4825f516c3": "200000000000000000000", - "8d6df209484d7b94702b03a53e56b9fb0660f6f0": "2000000000000000000000", - "5970fb1b144dd751e4ce2eca7caa20e363dc4da3": "10000000000000000000000", - "d1dd79fb158160e5b4e8e23f312e6a907fbc4d4e": "500000000000000000000", - "7ee5ca805dce23af89c2d444e7e40766c54c7404": "240660000000000000000", - "93e0f37ecdfb0086e3e862a97034447b1e4dec1a": "30000000000000000000", - "e10ac19c546fc2547c61c139f5d1f45a6666d5b0": "4775000000000000000000", - "1c73d00b6e25d8eb9c1ff4ad827b6b9e9cf6d20c": "200000000000000000000", - "d771d9e0ca8a08a113775731434eb3270599c40d": "20000000000000000000", - "e69d1c378b771e0feff051db69d966ac6779f4ed": "553000000000000000000", - "0ef85b49d08a75198692914eddb4b22cf5fa4450": "2004800000000000000000", - "ed70a37cdd1cbda9746d939658ae2a6181288578": "9600000000000000000000", - "eee761847e33fd61d99387ee14628694d1bfd525": "2000000000000000000000", - "271d3d481cb88e7671ad216949b6365e06303de0": "4000000000000000000000", - "5255dc69155a45b970c604d30047e2f530690e7f": "20000000000000000000", - "cabab6274ed15089737e287be878b757934864e2": "20000000000000000000000", - "9defe56a0ff1a1947dba0923f7dd258d8f12fa45": "26880000000000000000000", - "b7a2c103728b7305b5ae6e961c94ee99c9fe8e2b": "50000000000000000000000", - "b498bb0f520005b6216a4425b75aa9adc52d622b": "4000000000000000000000", - "c1132878235c5ddba5d9f3228b5236e47020dc6f": "1000000000000000000000", - "f81622e55757daea6675975dd93538da7d16991e": "2000000000000000000000", - "ce2deab51c0a9ae09cd212c4fa4cc52b53cc0dec": "2000000000000000000000", - "86a1eadeeb30461345d9ef6bd05216fa247c0d0c": "2000000000000000000000", - "7b1fe1ab4dfd0088cdd7f60163ef59ec2aee06f5": "2000000000000000000000", - "6bbc3f358a668dd1a11f0380f3f73108426abd4a": "4000000000000000000000", - "b1e6e810c24ab0488de9e01e574837829f7c77d0": "400000000000000000000", - "03eb3cb860f6028da554d344a2bb5a500ae8b86f": "2000000000000000000000", - "e5481a7fed42b901bbed20789bd4ade50d5f83b9": "2000000000000000000000", - "1f3da68fe87eaf43a829ab6d7ec5a6e009b204fb": "554988000000000000000", - "30037988702671acbe892c03fe5788aa98af287a": "2800000000000000000000", - "edb473353979a206879de144c10a3c51d7d7081a": "6000000000000000000000", - "22bdffc240a88ff7431af3bff50e14da37d5183e": "1000000000000000000000", - "9374869d4a9911ee1eaf558bc4c2b63ec63acfdd": "1000000000000000000000", - "b756ad52f3bf74a7d24c67471e0887436936504c": "20000000000000000000000", - "8bd0b65a50ef5cef84fec420be7b89ed1470ceb9": "11999000000000000000000", - "af26f7c6bf453e2078f08953e4b28004a2c1e209": "100000000000000000000", - "7c532db9e0c06c26fd40acc56ac55c1ee92d3c3a": "300000000000000000000000", - "dde670d01639667576a22dd05d3246d61f06e083": "26740000000000000000", - "5cf44e10540d65716423b1bcb542d21ff83a94cd": "10000000000000000000000", - "f96b4c00766f53736a8574f822e6474c2f21da2d": "400000000000000000000", - "8d89170b92b2be2c08d57c48a7b190a2f146720f": "19700000000000000000000", - "142b87c5043ffb5a91df18c2e109ced6fe4a71db": "200000000000000000000", - "42d34940edd2e7005d46e2188e4cfece8311d74d": "158000000000000000000", - "562105e82b099735de49f62692cc87cd38a8edcd": "6000000000000000000000", - "457bcef37dd3d60b2dd019e3fe61d46b3f1e7252": "20000000000000000000", - "cf8882359c0fb23387f5674074d8b17ade512f98": "6000000000000000000000", - "f0c081da52a9ae36642adf5e08205f05c54168a6": "111000000000000000000", - "551e7784778ef8e048e495df49f2614f84a4f1dc": "600000000000000000000", - "3c869c09696523ced824a070414605bb76231ff2": "1000000000000000000000", - "7e7f18a02eccaa5d61ab8fbf030343c434a25ef7": "66850000000000000000", - "9328d55ccb3fce531f199382339f0e576ee840a3": "4000000000000000000000", - "9d0f347e826b7dceaad279060a35c0061ecf334b": "4000000000000000000000", - "680640838bd07a447b168d6d923b90cf6c43cdca": "1730000000000000000000", - "c951900c341abbb3bafbf7ee2029377071dbc36a": "327600000000000000000", - "ddf5810a0eb2fb2e32323bb2c99509ab320f24ac": "17900000000000000000000", - "2489ac126934d4d6a94df08743da7b7691e9798e": "1000000000000000000000", - "f42f905231c770f0a406f2b768877fb49eee0f21": "197000000000000000000", - "756f45e3fa69347a9a973a725e3c98bc4db0b5a0": "200000000000000000000" -} - -},{}],382:[function(require,module,exports){ -var params = require('./params.json') -params.genesisState = require('./genesisState.json') -params.bootstrapNodes = require('./bootstrapNodes.json') -module.exports = params - -},{"./bootstrapNodes.json":380,"./genesisState.json":381,"./params.json":383}],383:[function(require,module,exports){ -module.exports={ - "genesisGasLimit": { - "v": 5000, - "d": "Gas limit of the Genesis block." - }, - "genesisDifficulty": { - "v": 17179869184, - "d": "Difficulty of the Genesis block." - }, - "genesisNonce": { - "v": "0x0000000000000042", - "d": "the geneis nonce" - }, - "genesisExtraData": { - "v": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", - "d": "extra data " - }, - "genesisHash": { - "v": "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3", - "d": "genesis hash" - }, - "genesisStateRoot": { - "v": "0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544", - "d": "the genesis state root" - }, - "minGasLimit": { - "v": 5000, - "d": "Minimum the gas limit may ever be." - }, - "gasLimitBoundDivisor": { - "v": 1024, - "d": "The bound divisor of the gas limit, used in update calculations." - }, - "minimumDifficulty": { - "v": 131072, - "d": "The minimum that the difficulty may ever be." - }, - "difficultyBoundDivisor": { - "v": 2048, - "d": "The bound divisor of the difficulty, used in the update calculations." - }, - "durationLimit": { - "v": 13, - "d": "The decision boundary on the blocktime duration used to determine whether difficulty should go up or not." - }, - "maximumExtraDataSize": { - "v": 32, - "d": "Maximum size extra data may be after Genesis." - }, - "epochDuration": { - "v": 30000, - "d": "Duration between proof-of-work epochs." - }, - "stackLimit": { - "v": 1024, - "d": "Maximum size of VM stack allowed." - }, - "callCreateDepth": { - "v": 1024, - "d": "Maximum depth of call/create stack." - }, + if (options.data !== undefined) { + assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID) + assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID) + data = options.data + } - "tierStepGas": { - "v": [0, 2, 3, 5, 8, 10, 20], - "d": "Once per operation, for a selection of them." - }, - "expGas": { - "v": 10, - "d": "Once per EXP instuction." - }, - "expByteGas": { - "v": 10, - "d": "Times ceil(log256(exponent)) for the EXP instruction." - }, + if (options.noncefn !== undefined) { + assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID) + noncefn = options.noncefn + } + } - "sha3Gas": { - "v": 30, - "d": "Once per SHA3 operation." - }, - "sha3WordGas": { - "v": 6, - "d": "Once per word of the SHA3 operation's data." - }, - "sloadGas": { - "v": 50, - "d": "Once per SLOAD operation." - }, - "sstoreSetGas": { - "v": 20000, - "d": "Once per SSTORE operation if the zeroness changes from zero." - }, - "sstoreResetGas": { - "v": 5000, - "d": "Once per SSTORE operation if the zeroness does not change from zero." - }, - "sstoreRefundGas": { - "v": 15000, - "d": "Once per SSTORE operation if the zeroness changes to zero." - }, - "jumpdestGas": { - "v": 1, - "d": "Refunded gas, once per SSTORE operation if the zeroness changes to zero." - }, + return secp256k1.sign(message, privateKey, noncefn, data) + }, - "logGas": { - "v": 375, - "d": "Per LOG* operation." - }, - "logDataGas": { - "v": 8, - "d": "Per byte in a LOG* operation's data." - }, - "logTopicGas": { - "v": 375, - "d": "Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas." - }, + /** + * @param {Buffer} message + * @param {Buffer} signature + * @param {Buffer} publicKey + * @return {boolean} + */ + verify: function (message, signature, publicKey) { + assert.isBuffer(message, messages.MSG32_TYPE_INVALID) + assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID) - "createGas": { - "v": 32000, - "d": "Once per CREATE operation & contract-creation transaction." - }, + assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) + assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - "callGas": { - "v": 40, - "d": "Once per CALL operation & message call transaction." - }, - "callStipend": { - "v": 2300, - "d": "Free gas given at beginning of call." - }, - "callValueTransferGas": { - "v": 9000, - "d": "Paid for CALL when the value transfor is non-zero." - }, - "callNewAccountGas": { - "v": 25000, - "d": "Paid for CALL when the destination address didn't exist prior." - }, + assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) + assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - "suicideRefundGas": { - "v": 24000, - "d": "Refunded following a suicide operation." - }, + return secp256k1.verify(message, signature, publicKey) + }, - "memoryGas": { - "v": 3, - "d": "Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL." - }, - "quadCoeffDiv": { - "v": 512, - "d": "Divisor for the quadratic particle of the memory cost equation." - }, + /** + * @param {Buffer} message + * @param {Buffer} signature + * @param {number} recovery + * @param {boolean} [compressed=true] + * @return {Buffer} + */ + recover: function (message, signature, recovery, compressed) { + assert.isBuffer(message, messages.MSG32_TYPE_INVALID) + assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID) - "createDataGas": { - "v": 200, - "d": "" - }, - "txGas": { - "v": 21000, - "d": "Per transaction. NOTE: Not payable on data of calls between transactions." - }, - "txCreation": { - "v": 32000, - "d": "the cost of creating a contract via tx" - }, - "txDataZeroGas": { - "v": 4, - "d": "Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions." - }, - "txDataNonZeroGas": { - "v": 68, - "d": "Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions." - }, + assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) + assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) - "copyGas": { - "v": 3, - "d": "Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added." - }, + assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID) + assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID) + + compressed = initCompressedValue(compressed, true) + + return secp256k1.recover(message, signature, recovery, compressed) + }, + + /** + * @param {Buffer} publicKey + * @param {Buffer} privateKey + * @param {?} options + * @return {Buffer} + */ + ecdh: function (publicKey, privateKey, options) { + assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) + assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) + + assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) + assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) + + if (options !== undefined) { + assert.isObject(options, messages.OPTIONS_TYPE_INVALID) + } + } + } +} + +}).call(this,require("buffer").Buffer) +},{"./assert":261,"./messages.json":264,"buffer":147}],264:[function(require,module,exports){ +module.exports={ + "COMPRESSED_TYPE_INVALID": "compressed should be a boolean", + "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer", + "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid", + "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid", + "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range", + "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format", + "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format", + "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array", + "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element", + "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer", + "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid", + "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid", + "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again", + "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid", + "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range", + "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid", + "ECDH_FAIL": "scalar was invalid (zero or overflow)", + "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer", + "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid", + "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature", + "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature", + "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format", + "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid", + "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature", + "MSG32_TYPE_INVALID": "message should be a Buffer", + "MSG32_LENGTH_INVALID": "message length is invalid", + "OPTIONS_TYPE_INVALID": "options should be an Object", + "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer", + "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid", + "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function", + "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number", + "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4", + "TWEAK_TYPE_INVALID": "tweak should be a Buffer", + "TWEAK_LENGTH_INVALID": "tweak length is invalid" +} - "ecrecoverGas": { - "v": 3000, - "d": "" - }, - "sha256Gas": { - "v": 60, - "d": "" - }, - "sha256WordGas": { - "v": 12, - "d": "" - }, - "ripemd160Gas": { - "v": 600, - "d": "" +},{}],265:[function(require,module,exports){ +arguments[4][215][0].apply(exports,arguments) +},{"dup":215}],266:[function(require,module,exports){ +arguments[4][126][0].apply(exports,arguments) +},{"../package.json":282,"./elliptic/curve":269,"./elliptic/curves":272,"./elliptic/ec":273,"./elliptic/eddsa":276,"./elliptic/hmac-drbg":279,"./elliptic/utils":281,"brorand":99,"dup":126}],267:[function(require,module,exports){ +arguments[4][127][0].apply(exports,arguments) +},{"../../elliptic":266,"bn.js":265,"dup":127}],268:[function(require,module,exports){ +arguments[4][128][0].apply(exports,arguments) +},{"../../elliptic":266,"../curve":269,"bn.js":265,"dup":128,"inherits":226}],269:[function(require,module,exports){ +arguments[4][61][0].apply(exports,arguments) +},{"./base":267,"./edwards":268,"./mont":270,"./short":271,"dup":61}],270:[function(require,module,exports){ +arguments[4][130][0].apply(exports,arguments) +},{"../../elliptic":266,"../curve":269,"bn.js":265,"dup":130,"inherits":226}],271:[function(require,module,exports){ +arguments[4][131][0].apply(exports,arguments) +},{"../../elliptic":266,"../curve":269,"bn.js":265,"dup":131,"inherits":226}],272:[function(require,module,exports){ +arguments[4][132][0].apply(exports,arguments) +},{"../elliptic":266,"./precomputed/secp256k1":280,"dup":132,"hash.js":219}],273:[function(require,module,exports){ +arguments[4][133][0].apply(exports,arguments) +},{"../../elliptic":266,"./key":274,"./signature":275,"bn.js":265,"dup":133}],274:[function(require,module,exports){ +arguments[4][134][0].apply(exports,arguments) +},{"bn.js":265,"dup":134}],275:[function(require,module,exports){ +arguments[4][135][0].apply(exports,arguments) +},{"../../elliptic":266,"bn.js":265,"dup":135}],276:[function(require,module,exports){ +arguments[4][136][0].apply(exports,arguments) +},{"../../elliptic":266,"./key":277,"./signature":278,"dup":136,"hash.js":219}],277:[function(require,module,exports){ +arguments[4][137][0].apply(exports,arguments) +},{"../../elliptic":266,"dup":137}],278:[function(require,module,exports){ +arguments[4][138][0].apply(exports,arguments) +},{"../../elliptic":266,"bn.js":265,"dup":138}],279:[function(require,module,exports){ +arguments[4][68][0].apply(exports,arguments) +},{"../elliptic":266,"dup":68,"hash.js":219}],280:[function(require,module,exports){ +arguments[4][69][0].apply(exports,arguments) +},{"dup":69}],281:[function(require,module,exports){ +arguments[4][141][0].apply(exports,arguments) +},{"bn.js":265,"dup":141}],282:[function(require,module,exports){ +module.exports={ + "_args": [ + [ + "elliptic@^6.0.2", + "/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/secp256k1" + ] + ], + "_from": "elliptic@>=6.0.2 <7.0.0", + "_id": "elliptic@6.2.3", + "_inCache": true, + "_installable": true, + "_location": "/secp256k1/elliptic", + "_nodeVersion": "5.4.1", + "_npmUser": { + "email": "fedor@indutny.com", + "name": "indutny" }, - "ripemd160WordGas": { - "v": 120, - "d": "" + "_npmVersion": "3.3.12", + "_phantomChildren": {}, + "_requested": { + "name": "elliptic", + "raw": "elliptic@^6.0.2", + "rawSpec": "^6.0.2", + "scope": null, + "spec": ">=6.0.2 <7.0.0", + "type": "range" }, - "identityGas": { - "v": 15, - "d": "" + "_requiredBy": [ + "/secp256k1" + ], + "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz", + "_shasum": "18e46d7306b0951275a2d42063270a14b74ebe99", + "_shrinkwrap": null, + "_spec": "elliptic@^6.0.2", + "_where": "/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/secp256k1", + "author": { + "email": "fedor@indutny.com", + "name": "Fedor Indutny" }, - "identityWordGas": { - "v": 3, - "d": "" + "bugs": { + "url": "https://github.com/indutny/elliptic/issues" }, - "minerReward": { - "v": "5000000000000000000", - "d": "the amount a miner get rewarded for mining a block" + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "inherits": "^2.0.1" }, - "ommerReward": { - "v": "625000000000000000", - "d": "The amount of wei a miner of an uncle block gets for being inculded in the blockchain" + "description": "EC cryptography", + "devDependencies": { + "coveralls": "^2.11.3", + "istanbul": "^0.4.2", + "jscs": "^2.9.0", + "jshint": "^2.6.0", + "mocha": "^2.1.0" }, - "niblingReward": { - "v": "156250000000000000", - "d": "the amount a miner gets for inculding a uncle" + "directories": {}, + "dist": { + "shasum": "18e46d7306b0951275a2d42063270a14b74ebe99", + "tarball": "http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz" }, - "homeSteadForkNumber": { - "v": 1000000, - "d": "the block that the homestead fork started at" + "files": [ + "lib" + ], + "gitHead": "c32f20b22b420eb6af3c6dda28963deb7facf823", + "homepage": "https://github.com/indutny/elliptic", + "keywords": [ + "Cryptography", + "EC", + "Elliptic", + "curve" + ], + "license": "MIT", + "main": "lib/elliptic.js", + "maintainers": [ + { + "name": "indutny", + "email": "fedor@indutny.com" + } + ], + "name": "elliptic", + "optionalDependencies": {}, + "readme": "ERROR: No README data found!", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/indutny/elliptic.git" }, - "timebombPeriod": { - "v": 100000, - "d": "Exponential difficulty timebomb period" + "scripts": { + "coverage": "npm run unit --coverage", + "coveralls": "npm run coverage && cat ./coverage/lcov.info | coveralls", + "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", + "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", + "lint": "npm run jscs && npm run jshint", + "test": "npm run lint && npm run unit", + "unit": "istanbul test _mocha --reporter=spec test/*-test.js" }, - "freeBlockPeriod": { - "v": 2 - } + "version": "6.2.3" } -},{}],384:[function(require,module,exports){ +},{}],283:[function(require,module,exports){ (function (Buffer){ -const SHA3 = require('keccakjs') -const secp256k1 = require('secp256k1') -const assert = require('assert') -const rlp = require('rlp') -const BN = require('bn.js') -const crypto = require('crypto') +// prototype class for hash functions +function Hash (blockSize, finalSize) { + this._block = new Buffer(blockSize) + this._finalSize = finalSize + this._blockSize = blockSize + this._len = 0 + this._s = 0 +} -/** - * the max integer that this VM can handle (a ```BN```) - * @var {BN} MAX_INTEGER - */ -exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16) +Hash.prototype.update = function (data, enc) { + if (typeof data === 'string') { + enc = enc || 'utf8' + data = new Buffer(data, enc) + } -/** - * 2^256 (a ```BN```) - * @var {BN} TWO_POW256 - */ -exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16) + var l = this._len += data.length + var s = this._s || 0 + var f = 0 + var buffer = this._block -/** - * SHA3-256 hash of null (a ```String```) - * @var {String} SHA3_NULL_S - */ -exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' + while (s < l) { + var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize)) + var ch = (t - f) -/** - * SHA3-256 hash of null (a ```Buffer```) - * @var {Buffer} SHA3_NULL - */ -exports.SHA3_NULL = new Buffer(exports.SHA3_NULL_S, 'hex') + for (var i = 0; i < ch; i++) { + buffer[(s % this._blockSize) + i] = data[i + f] + } -/** - * SHA3-256 of an RLP of an empty array (a ```String```) - * @var {String} SHA3_RLP_ARRAY_S - */ -exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347' + s += ch + f += ch -/** - * SHA3-256 of an RLP of an empty array (a ```Buffer```) - * @var {Buffer} SHA3_RLP_ARRAY - */ -exports.SHA3_RLP_ARRAY = new Buffer(exports.SHA3_RLP_ARRAY_S, 'hex') + if ((s % this._blockSize) === 0) { + this._update(buffer) + } + } + this._s = s -/** - * SHA3-256 hash of the RLP of null (a ```String```) - * @var {String} SHA3_RLP_S - */ -exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421' + return this +} -/** - * SHA3-256 hash of the RLP of null (a ```Buffer```) - * @var {Buffer} SHA3_RLP - */ -exports.SHA3_RLP = new Buffer(exports.SHA3_RLP_S, 'hex') +Hash.prototype.digest = function (enc) { + // Suppose the length of the message M, in bits, is l + var l = this._len * 8 -/** - * [`BN`](https://github.com/indutny/bn.js) - * @var {Function} - */ -exports.BN = BN + // Append the bit 1 to the end of the message + this._block[this._len % this._blockSize] = 0x80 -/** - * [`rlp`](https://github.com/ethereumjs/rlp) - * @var {Function} - */ -exports.rlp = rlp + // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize + this._block.fill(0, this._len % this._blockSize + 1) -/** - * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/) - * @var {Object} - */ -exports.secp256k1 = secp256k1 + if (l % (this._blockSize * 8) >= this._finalSize * 8) { + this._update(this._block) + this._block.fill(0) + } -/** - * Returns a buffer filled with 0s - * @method zeros - * @param {Number} bytes the number of bytes the buffer should be - * @return {Buffer} + // to this append the block which is equal to the number l written in binary + // TODO: handle case where l is > Math.pow(2, 29) + this._block.writeInt32BE(l, this._blockSize - 4) + + var hash = this._update(this._block) || this._hash() + + return enc ? hash.toString(enc) : hash +} + +Hash.prototype._update = function () { + throw new Error('_update must be implemented by subclass') +} + +module.exports = Hash + +}).call(this,require("buffer").Buffer) +},{"buffer":147}],284:[function(require,module,exports){ +var exports = module.exports = function SHA (algorithm) { + algorithm = algorithm.toLowerCase() + + var Algorithm = exports[algorithm] + if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') + + return new Algorithm() +} + +exports.sha = require('./sha') +exports.sha1 = require('./sha1') +exports.sha224 = require('./sha224') +exports.sha256 = require('./sha256') +exports.sha384 = require('./sha384') +exports.sha512 = require('./sha512') + +},{"./sha":285,"./sha1":286,"./sha224":287,"./sha256":288,"./sha384":289,"./sha512":290}],285:[function(require,module,exports){ +(function (Buffer){ +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined + * in FIPS PUB 180-1 + * This source code is derived from sha1.js of the same repository. + * The difference between SHA-0 and SHA-1 is just a bitwise rotate left + * operation was added. */ -exports.zeros = function (bytes) { - var buf = new Buffer(bytes) - buf.fill(0) - return buf + +var inherits = require('inherits') +var Hash = require('./hash') + +var W = new Array(80) + +function Sha () { + this.init() + this._w = W + + Hash.call(this, 64, 56) } -/** - * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. - * Or it truncates the beginning if it exceeds. - * @method lsetLength - * @param {Buffer|Array} msg the value to pad - * @param {Number} length the number of bytes the output should be - * @param {Boolean} [right=false] whether to start padding form the left or right - * @return {Buffer|Array} +inherits(Sha, Hash) + +Sha.prototype.init = function () { + this._a = 0x67452301 | 0 + this._b = 0xefcdab89 | 0 + this._c = 0x98badcfe | 0 + this._d = 0x10325476 | 0 + this._e = 0xc3d2e1f0 | 0 + + return this +} + +/* + * Bitwise rotate a 32-bit number to the left. */ -exports.setLengthLeft = exports.setLength = function (msg, length, right) { - var buf = exports.zeros(length) - msg = exports.toBuffer(msg) - if (right) { - if (msg.length < length) { - msg.copy(buf) - return buf - } - return msg.slice(0, length) - } else { - if (msg.length < length) { - msg.copy(buf, length - msg.length) - return buf - } - return msg.slice(-length) +function rol (num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)) +} + +Sha.prototype._update = function (M) { + var W = this._w + + var a = this._a + var b = this._b + var c = this._c + var d = this._d + var e = this._e + + var j = 0 + var k + + /* + * SHA-1 has a bitwise rotate left operation. But, SHA is not + * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) } + */ + function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] } + function loop (w, f) { + W[j] = w + + var t = rol(a, 5) + f + e + w + k + + e = d + d = c + c = rol(b, 30) + b = a + a = t + j++ } + + k = 1518500249 + while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d)) + while (j < 20) loop(calcW(), (b & c) | ((~b) & d)) + k = 1859775393 + while (j < 40) loop(calcW(), b ^ c ^ d) + k = -1894007588 + while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d)) + k = -899497514 + while (j < 80) loop(calcW(), b ^ c ^ d) + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 } -/** - * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. - * Or it truncates the beginning if it exceeds. - * @method lsetLength - * @param {Buffer|Array} msg the value to pad - * @param {Number} length the number of bytes the output should be - * @return {Buffer|Array} - */ -exports.setLengthRight = function (msg, length) { - return exports.setLength(msg, length, true) +Sha.prototype._hash = function () { + var H = new Buffer(20) + + H.writeInt32BE(this._a | 0, 0) + H.writeInt32BE(this._b | 0, 4) + H.writeInt32BE(this._c | 0, 8) + H.writeInt32BE(this._d | 0, 12) + H.writeInt32BE(this._e | 0, 16) + + return H } -/** - * Trims leading zeros from a `Buffer` or an `Array` - * @method unpad - * @param {Buffer|Array|String} a - * @return {Buffer|Array|String} +module.exports = Sha + + +}).call(this,require("buffer").Buffer) +},{"./hash":283,"buffer":147,"inherits":226}],286:[function(require,module,exports){ +(function (Buffer){ +/* + * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined + * in FIPS PUB 180-1 + * Version 2.1a Copyright Paul Johnston 2000 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for details. */ -exports.unpad = exports.stripZeros = function (a) { - a = exports.stripHexPrefix(a) - var first = a[0] - while (a.length > 0 && first.toString() === '0') { - a = a.slice(1) - first = a[0] - } - return a + +var inherits = require('inherits') +var Hash = require('./hash') + +var W = new Array(80) + +function Sha1 () { + this.init() + this._w = W + + Hash.call(this, 64, 56) } -/** - * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method. - * @method toBuffer - * @param {*} v the value + +inherits(Sha1, Hash) + +Sha1.prototype.init = function () { + this._a = 0x67452301 | 0 + this._b = 0xefcdab89 | 0 + this._c = 0x98badcfe | 0 + this._d = 0x10325476 | 0 + this._e = 0xc3d2e1f0 | 0 + + return this +} + +/* + * Bitwise rotate a 32-bit number to the left. */ -exports.toBuffer = function (v) { - if (!Buffer.isBuffer(v)) { - if (Array.isArray(v)) { - v = new Buffer(v) - } else if (typeof v === 'string') { - if (exports.isHexPrefixed(v)) { - v = new Buffer(exports.padToEven(exports.stripHexPrefix(v)), 'hex') - } else { - v = new Buffer(v) - } - } else if (typeof v === 'number') { - v = exports.intToBuffer(v) - } else if (v === null || v === undefined) { - v = new Buffer([]) - } else if (v.toArray) { - // converts a BN to a Buffer - v = new Buffer(v.toArray()) - } else { - throw new Error('invalid type') - } +function rol (num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)) +} + +Sha1.prototype._update = function (M) { + var W = this._w + + var a = this._a + var b = this._b + var c = this._c + var d = this._d + var e = this._e + + var j = 0 + var k + + function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) } + function loop (w, f) { + W[j] = w + + var t = rol(a, 5) + f + e + w + k + + e = d + d = c + c = rol(b, 30) + b = a + a = t + j++ } - return v + + k = 1518500249 + while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d)) + while (j < 20) loop(calcW(), (b & c) | ((~b) & d)) + k = 1859775393 + while (j < 40) loop(calcW(), b ^ c ^ d) + k = -1894007588 + while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d)) + k = -899497514 + while (j < 80) loop(calcW(), b ^ c ^ d) + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 } -/** - * Converts a `Number` into a hex `String` - * @method intToHex - * @param {Number} i - * @return {String} - */ -exports.intToHex = function (i) { - assert(i % 1 === 0, 'number is not a integer') - assert(i >= 0, 'number must be positive') - var hex = i.toString(16) - if (hex.length % 2) { - hex = '0' + hex - } +Sha1.prototype._hash = function () { + var H = new Buffer(20) - return '0x' + hex + H.writeInt32BE(this._a | 0, 0) + H.writeInt32BE(this._b | 0, 4) + H.writeInt32BE(this._c | 0, 8) + H.writeInt32BE(this._d | 0, 12) + H.writeInt32BE(this._e | 0, 16) + + return H } +module.exports = Sha1 + +}).call(this,require("buffer").Buffer) +},{"./hash":283,"buffer":147,"inherits":226}],287:[function(require,module,exports){ +(function (Buffer){ /** - * Converts an `Number` to a `Buffer` - * @method intToBuffer - * @param {Number} i - * @return {Buffer} + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * */ -exports.intToBuffer = function (i) { - var hex = exports.intToHex(i) - return new Buffer(hex.slice(2), 'hex') + +var inherits = require('inherits') +var Sha256 = require('./sha256') +var Hash = require('./hash') + +var W = new Array(64) + +function Sha224 () { + this.init() + + this._w = W // new Array(64) + + Hash.call(this, 64, 56) } -/** - * Converts a `Buffer` to a `Number` - * @method bufferToInt - * @param {Buffer} buf - * @return {Number} - */ -exports.bufferToInt = function (buf) { - buf = exports.toBuffer(buf) - if (buf.length === 0) { - return 0 - } +inherits(Sha224, Sha256) - return parseInt(buf.toString('hex'), 16) +Sha224.prototype.init = function () { + this._a = 0xc1059ed8 | 0 + this._b = 0x367cd507 | 0 + this._c = 0x3070dd17 | 0 + this._d = 0xf70e5939 | 0 + this._e = 0xffc00b31 | 0 + this._f = 0x68581511 | 0 + this._g = 0x64f98fa7 | 0 + this._h = 0xbefa4fa4 | 0 + + return this } -/** - * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers. - * @method fromSigned - * @param {Buffer} num - * @return {BN} - */ -exports.fromSigned = function (num) { - return new BN(num).fromTwos(256) +Sha224.prototype._hash = function () { + var H = new Buffer(28) + + H.writeInt32BE(this._a, 0) + H.writeInt32BE(this._b, 4) + H.writeInt32BE(this._c, 8) + H.writeInt32BE(this._d, 12) + H.writeInt32BE(this._e, 16) + H.writeInt32BE(this._f, 20) + H.writeInt32BE(this._g, 24) + + return H } +module.exports = Sha224 + +}).call(this,require("buffer").Buffer) +},{"./hash":283,"./sha256":288,"buffer":147,"inherits":226}],288:[function(require,module,exports){ +(function (Buffer){ /** - * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers. - * @method toUnsigned - * @param {BN} num - * @return {Buffer} + * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined + * in FIPS 180-2 + * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * */ -exports.toUnsigned = function (num) { - return new Buffer(num.toTwos(256).toArray()) + +var inherits = require('inherits') +var Hash = require('./hash') + +var K = [ + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 +] + +var W = new Array(64) + +function Sha256 () { + this.init() + + this._w = W // new Array(64) + + Hash.call(this, 64, 56) } -/** - * Creates SHA-3 hash of the input - * @method sha3 - * @param {Buffer|Array|String|Number} a the input data - * @param {Number} [bytes=256] the SHA width - * @return {Buffer} - */ -exports.sha3 = function (a, bytes) { - a = exports.toBuffer(a) - if (!bytes) bytes = 256 +inherits(Sha256, Hash) - var h = new SHA3(bytes) - if (a) { - h.update(a) - } - return new Buffer(h.digest('hex'), 'hex') +Sha256.prototype.init = function () { + this._a = 0x6a09e667 | 0 + this._b = 0xbb67ae85 | 0 + this._c = 0x3c6ef372 | 0 + this._d = 0xa54ff53a | 0 + this._e = 0x510e527f | 0 + this._f = 0x9b05688c | 0 + this._g = 0x1f83d9ab | 0 + this._h = 0x5be0cd19 | 0 + + return this } -/** - * Creates SHA256 hash of the input - * @method sha256 - * @param {Buffer|Array|String|Number} a the input data - * @return {Buffer} - */ -exports.sha256 = function (a) { - a = exports.toBuffer(a) - return crypto.createHash('SHA256').update(a).digest() +function Ch (x, y, z) { + return z ^ (x & (y ^ z)) } -/** - * Creates RIPEMD160 hash of the input - * @method ripemd160 - * @param {Buffer|Array|String|Number} a the input data - * @param {Boolean} padded whether it should be padded to 256 bits or not - * @return {Buffer} - */ -exports.ripemd160 = function (a, padded) { - a = exports.toBuffer(a) - var hash = crypto.createHash('rmd160').update(a).digest() - if (padded === true) { - return exports.setLength(hash, 32) - } else { - return hash - } +function Maj (x, y, z) { + return (x & y) | (z & (x | y)) } -/** - * Creates SHA-3 hash of the RLP encoded version of the input - * @method rlphash - * @param {Buffer|Array|String|Number} a the input data - * @return {Buffer} - */ -exports.rlphash = function (a) { - return exports.sha3(rlp.encode(a)) +function Sigma0 (x) { + return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) } -/** - * Returns the ethereum address of a given public key. - * Accepts "Ethereum public keys" and SEC1 encoded keys. - * @method publicToAddress - * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled - * @param {Boolean} sanitize Accept public keys in other formats - * @return {Buffer} - */ -exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) { - pubKey = exports.toBuffer(pubKey) - if (sanitize && (pubKey.length !== 64)) { - pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1) - } - assert(pubKey.length === 64) - // Only take the lower 160bits of the hash - return exports.sha3(pubKey).slice(-20) +function Sigma1 (x) { + return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) } -/** - * Returns the ethereum public key of a given private key - * @method privateToPublic - * @param {Buffer} privateKey A private key must be 256 bits wide - * @return {Buffer} - */ -var privateToPublic = exports.privateToPublic = function (privateKey) { - privateKey = exports.toBuffer(privateKey) - // skip the type flag and use the X, Y points - return secp256k1.publicKeyConvert(secp256k1.publicKeyCreate(privateKey), false).slice(1) +function Gamma0 (x) { + return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) } -/** - * Returns the ethereum address of a given private key - * @method privateToAddress - * @param {Buffer} privateKey A private key must be 256 bits wide - * @return {Buffer} - */ -exports.privateToAddress = function (privateKey) { - return exports.publicToAddress(privateToPublic(privateKey)) +function Gamma1 (x) { + return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) } -/** - * Generates an address of a newly created contract - * @method generateAddress - * @param {Buffer} from the address which is creating this new address - * @param {Buffer} nonce the nonce of the from account - * @return {Buffer} - */ -exports.generateAddress = function (from, nonce) { - from = exports.toBuffer(from) - nonce = new BN(nonce) +Sha256.prototype._update = function (M) { + var W = this._w - if (nonce.isZero()) { - // in RLP we want to encode null in the case of zero nonce - // read the RLP documentation for an answer if you dare - nonce = null - } else { - nonce = new Buffer(nonce.toArray()) - } + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + var f = this._f | 0 + var g = this._g | 0 + var h = this._h | 0 - // Only take the lower 160bits of the hash - return exports.rlphash([from, nonce]).slice(-20) -} + var j = 0 -/** - * Returns true if the supplied address belongs to a precompiled account - * @method isPrecompiled - * @param {Buffer|String} address - * @return {Boolean} - */ -exports.isPrecompiled = function (address) { - var a = exports.unpad(address) - return a.length === 1 && a[0] > 0 && a[0] < 5 -} + function calcW () { return Gamma1(W[j - 2]) + W[j - 7] + Gamma0(W[j - 15]) + W[j - 16] } + function loop (w) { + W[j] = w -/** - * Returns a `Boolean` on whether or not the a `String` starts with "0x" - * @method isHexPrefixed - * @param {String} str - * @return {Boolean} - */ -exports.isHexPrefixed = function (str) { - return str.slice(0, 2) === '0x' -} + var T1 = h + Sigma1(e) + Ch(e, f, g) + K[j] + w + var T2 = Sigma0(a) + Maj(a, b, c) -/** - * Removes "0x" from a given `String` - * @method stripHexPrefix - * @param {String} str - * @return {String} - */ -exports.stripHexPrefix = function (str) { - if (typeof str !== 'string') { - return str - } - return exports.isHexPrefixed(str) ? str.slice(2) : str -} + h = g + g = f + f = e + e = d + T1 + d = c + c = b + b = a + a = T1 + T2 -/** - * Adds "0x" to a given `String` if it does not already start with "0x" - * @method addHexPrefix - * @param {String} str - * @return {String} - */ -exports.addHexPrefix = function (str) { - if (typeof str !== 'string') { - return str + j++ } - return exports.isHexPrefixed(str) ? str : '0x' + str + while (j < 16) loop(M.readInt32BE(j * 4)) + while (j < 64) loop(calcW()) + + this._a = (a + this._a) | 0 + this._b = (b + this._b) | 0 + this._c = (c + this._c) | 0 + this._d = (d + this._d) | 0 + this._e = (e + this._e) | 0 + this._f = (f + this._f) | 0 + this._g = (g + this._g) | 0 + this._h = (h + this._h) | 0 } -/** - * Pads a `String` to have an even length - * @method padToEven - * @param {String} a - * @return {String} - */ -exports.padToEven = function (a) { - if (a.length % 2) a = '0' + a - return a +Sha256.prototype._hash = function () { + var H = new Buffer(32) + + H.writeInt32BE(this._a, 0) + H.writeInt32BE(this._b, 4) + H.writeInt32BE(this._c, 8) + H.writeInt32BE(this._d, 12) + H.writeInt32BE(this._e, 16) + H.writeInt32BE(this._f, 20) + H.writeInt32BE(this._g, 24) + H.writeInt32BE(this._h, 28) + + return H } -/** - * ECDSA sign - * @method ecsign - * @param {Buffer} msgHash - * @param {Buffer} privateKey - * @return {Object} - */ -exports.ecsign = function (msgHash, privateKey) { - var sig = secp256k1.sign(msgHash, privateKey) +module.exports = Sha256 - var ret = {} - ret.r = sig.signature.slice(0, 32) - ret.s = sig.signature.slice(32, 64) - ret.v = sig.recovery + 27 - return ret +}).call(this,require("buffer").Buffer) +},{"./hash":283,"buffer":147,"inherits":226}],289:[function(require,module,exports){ +(function (Buffer){ +var inherits = require('inherits') +var SHA512 = require('./sha512') +var Hash = require('./hash') + +var W = new Array(160) + +function Sha384 () { + this.init() + this._w = W + + Hash.call(this, 128, 112) } -/** - * ECDSA public key recovery from signature - * @method ecrecover - * @param {Buffer} msgHash - * @param {Buffer} v - * @param {Buffer} r - * @param {Buffer} s - * @return {Buffer} publicKey - */ -exports.ecrecover = function (msgHash, v, r, s) { - var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64) - var recovery = exports.bufferToInt(v) - 27 - var senderPubKey = secp256k1.recover(msgHash, signature, recovery) - return secp256k1.publicKeyConvert(senderPubKey, false).slice(1) +inherits(Sha384, SHA512) + +Sha384.prototype.init = function () { + this._a = 0xcbbb9d5d | 0 + this._b = 0x629a292a | 0 + this._c = 0x9159015a | 0 + this._d = 0x152fecd8 | 0 + this._e = 0x67332667 | 0 + this._f = 0x8eb44a87 | 0 + this._g = 0xdb0c2e0d | 0 + this._h = 0x47b5481d | 0 + + this._al = 0xc1059ed8 | 0 + this._bl = 0x367cd507 | 0 + this._cl = 0x3070dd17 | 0 + this._dl = 0xf70e5939 | 0 + this._el = 0xffc00b31 | 0 + this._fl = 0x68581511 | 0 + this._gl = 0x64f98fa7 | 0 + this._hl = 0xbefa4fa4 | 0 + + return this } -/** - * Converts a `Buffer` or `Array` to JSON - * @method BAToJSON - * @param {Buffer|Array} ba - * @return {Array|String|null} - */ -exports.baToJSON = function (ba) { - if (Buffer.isBuffer(ba)) { - return '0x' + ba.toString('hex') - } else if (ba instanceof Array) { - var array = [] - for (var i = 0; i < ba.length; i++) { - array.push(exports.baToJSON(ba[i])) - } - return array +Sha384.prototype._hash = function () { + var H = new Buffer(48) + + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) } + + writeInt64BE(this._a, this._al, 0) + writeInt64BE(this._b, this._bl, 8) + writeInt64BE(this._c, this._cl, 16) + writeInt64BE(this._d, this._dl, 24) + writeInt64BE(this._e, this._el, 32) + writeInt64BE(this._f, this._fl, 40) + + return H } -/** - * Defines properties on a `Object`. It make the assumption that underlying data is binary. - * @method defineProperties - * @param {Object} self the `Object` to define properties on - * @param {Array} fields an array fields to define. Fields can contain: - * * `name` - the name of the properties - * * `length` - the number of bytes the field can have - * * `allowLess` - if the field can be less than the length - * * `allowEmpty` - * @param {*} data data to be validated against the definitions - */ -exports.defineProperties = function (self, fields, data) { - self.raw = [] - self._fields = [] +module.exports = Sha384 + +}).call(this,require("buffer").Buffer) +},{"./hash":283,"./sha512":290,"buffer":147,"inherits":226}],290:[function(require,module,exports){ +(function (Buffer){ +var inherits = require('inherits') +var Hash = require('./hash') + +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +] + +var W = new Array(160) - // attach the `toJSON` - self.toJSON = function (label) { - if (label) { - var obj = {} - self._fields.forEach(function (field) { - obj[field] = '0x' + self[field].toString('hex') - }) - return obj - } - return exports.baToJSON(this.raw) - } +function Sha512 () { + this.init() + this._w = W - self.serialize = function serialize () { - return rlp.encode(self.raw) - } + Hash.call(this, 128, 112) +} - fields.forEach(function (field, i) { - self._fields.push(field.name) - function getter () { - return self.raw[i] - } - function setter (v) { - v = exports.toBuffer(v) +inherits(Sha512, Hash) - if (v.toString('hex') === '00' && !field.allowZero) { - v = new Buffer([]) - } +Sha512.prototype.init = function () { + this._a = 0x6a09e667 | 0 + this._b = 0xbb67ae85 | 0 + this._c = 0x3c6ef372 | 0 + this._d = 0xa54ff53a | 0 + this._e = 0x510e527f | 0 + this._f = 0x9b05688c | 0 + this._g = 0x1f83d9ab | 0 + this._h = 0x5be0cd19 | 0 - if (field.allowLess && field.length) { - v = exports.stripZeros(v) - assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes') - } else if (!(field.allowZero && v.length === 0) && field.length) { - assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length) - } + this._al = 0xf3bcc908 | 0 + this._bl = 0x84caa73b | 0 + this._cl = 0xfe94f82b | 0 + this._dl = 0x5f1d36f1 | 0 + this._el = 0xade682d1 | 0 + this._fl = 0x2b3e6c1f | 0 + this._gl = 0xfb41bd6b | 0 + this._hl = 0x137e2179 | 0 - self.raw[i] = v - } + return this +} - Object.defineProperty(self, field.name, { - enumerable: true, - configurable: true, - get: getter, - set: setter - }) +function Ch (x, y, z) { + return z ^ (x & (y ^ z)) +} - if (field.default) { - self[field.name] = field.default - } +function Maj (x, y, z) { + return (x & y) | (z & (x | y)) +} - // attach alias - if (field.alias) { - Object.defineProperty(self, field.alias, { - enumerable: false, - configurable: true, - set: setter, - get: getter - }) - } - }) +function Sigma0 (x, xl) { + return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) +} - // if the constuctor is passed data - if (data) { - if (typeof data === 'string') { - data = new Buffer(exports.stripHexPrefix(data), 'hex') - } +function Sigma1 (x, xl) { + return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) +} - if (Buffer.isBuffer(data)) { - data = rlp.decode(data) - } +function Gamma0 (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) +} - if (Array.isArray(data)) { - if (data.length > self._fields.length) { - throw (new Error('wrong number of fields in data')) - } +function Gamma0l (x, xl) { + return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) +} - // make sure all the items are buffers - data.forEach(function (d, i) { - self[self._fields[i]] = exports.toBuffer(d) - }) - } else if (typeof data === 'object') { - for (var prop in data) { - if (self._fields.indexOf(prop) !== -1) { - self[prop] = data[prop] - } - } - } else { - throw new Error('invalid data') - } - } +function Gamma1 (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) } -}).call(this,require("buffer").Buffer) -},{"assert":97,"bn.js":385,"buffer":99,"crypto":103,"keccakjs":386,"rlp":419,"secp256k1":389}],385:[function(require,module,exports){ -arguments[4][136][0].apply(exports,arguments) -},{"dup":136}],386:[function(require,module,exports){ -module.exports = require('sha3').SHA3Hash +function Gamma1l (x, xl) { + return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) +} -},{"sha3":387}],387:[function(require,module,exports){ -(function (Buffer){ -const Sha3 = require('js-sha3') +Sha512.prototype._update = function (M) { + var W = this._w -const hashLengths = [ 224, 256, 384, 512 ] + var a = this._a | 0 + var b = this._b | 0 + var c = this._c | 0 + var d = this._d | 0 + var e = this._e | 0 + var f = this._f | 0 + var g = this._g | 0 + var h = this._h | 0 -var hash = function (bitcount) { - if (bitcount !== undefined && hashLengths.indexOf(bitcount) == -1) - throw new Error('Unsupported hash length') - this.content = [] - this.bitcount = bitcount ? 'keccak_' + bitcount : 'keccak_512' -} + var al = this._al | 0 + var bl = this._bl | 0 + var cl = this._cl | 0 + var dl = this._dl | 0 + var el = this._el | 0 + var fl = this._fl | 0 + var gl = this._gl | 0 + var hl = this._hl | 0 -hash.prototype.update = function (i) { - if (Buffer.isBuffer(i)) - this.content.push(i) - else if (typeof i === 'string') - this.content.push(new Buffer(i)) - else - throw new Error('Unsupported argument to update') - return this -} + var i = 0 + var j = 0 + var Wi, Wil + function calcW () { + var x = W[j - 15 * 2] + var xl = W[j - 15 * 2 + 1] + var gamma0 = Gamma0(x, xl) + var gamma0l = Gamma0l(xl, x) -hash.prototype.digest = function (encoding) { - var result = Sha3[this.bitcount](Buffer.concat(this.content)) - if (encoding === 'hex') - return result - else if (encoding === 'binary' || encoding === undefined) - return new Buffer(result, 'hex').toString('binary') - else - throw new Error('Unsupported encoding for digest: ' + encoding) -} + x = W[j - 2 * 2] + xl = W[j - 2 * 2 + 1] + var gamma1 = Gamma1(x, xl) + var gamma1l = Gamma1l(xl, x) -module.exports = { - SHA3Hash: hash -} + // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] + var Wi7 = W[j - 7 * 2] + var Wi7l = W[j - 7 * 2 + 1] -}).call(this,require("buffer").Buffer) -},{"buffer":99,"js-sha3":388}],388:[function(require,module,exports){ -(function (global){ -/* - * js-sha3 v0.3.1 - * https://github.com/emn178/js-sha3 - * - * Copyright 2015, emn178@gmail.com - * - * Licensed under the MIT license: - * http://www.opensource.org/licenses/MIT - */ -;(function(root, undefined) { - 'use strict'; + var Wi16 = W[j - 16 * 2] + var Wi16l = W[j - 16 * 2 + 1] - var NODE_JS = typeof(module) != 'undefined'; - if(NODE_JS) { - root = global; - if(root.JS_SHA3_TEST) { - root.navigator = { userAgent: 'Chrome'}; - } + Wil = gamma0l + Wi7l + Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0) + Wil = Wil + gamma1l + Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0) + Wil = Wil + Wi16l + Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0) } - var CHROME = (root.JS_SHA3_TEST || !NODE_JS) && navigator.userAgent.indexOf('Chrome') != -1; - var HEX_CHARS = '0123456789abcdef'.split(''); - var KECCAK_PADDING = [1, 256, 65536, 16777216]; - var PADDING = [6, 1536, 393216, 100663296]; - var SHIFT = [0, 8, 16, 24]; - var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, - 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, - 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, - 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, - 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]; - var blocks = [], s = []; + function loop () { + W[j] = Wi + W[j + 1] = Wil - var keccak_224 = function(message) { - return keccak(message, 224, KECCAK_PADDING); - }; + var maj = Maj(a, b, c) + var majl = Maj(al, bl, cl) - var keccak_256 = function(message) { - return keccak(message, 256, KECCAK_PADDING); - }; + var sigma0h = Sigma0(a, al) + var sigma0l = Sigma0(al, a) + var sigma1h = Sigma1(e, el) + var sigma1l = Sigma1(el, e) - var keccak_384 = function(message) { - return keccak(message, 384, KECCAK_PADDING); - }; + // t1 = h + sigma1 + ch + K[i] + W[i] + var Ki = K[j] + var Kil = K[j + 1] - var sha3_224 = function(message) { - return keccak(message, 224, PADDING); - }; + var ch = Ch(e, f, g) + var chl = Ch(el, fl, gl) - var sha3_256 = function(message) { - return keccak(message, 256, PADDING); - }; + var t1l = hl + sigma1l + var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0) + t1l = t1l + chl + t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0) + t1l = t1l + Kil + t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0) + t1l = t1l + Wil + t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0) - var sha3_384 = function(message) { - return keccak(message, 384, PADDING); - }; + // t2 = sigma0 + maj + var t2l = sigma0l + majl + var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0) - var sha3_512 = function(message) { - return keccak(message, 512, PADDING); - }; + h = g + hl = gl + g = f + gl = fl + f = e + fl = el + el = (dl + t1l) | 0 + e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0 + d = c + dl = cl + c = b + cl = bl + b = a + bl = al + al = (t1l + t2l) | 0 + a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0 - var keccak = function(message, bits, padding) { - var notString = typeof(message) != 'string'; - if(notString && message.constructor == root.ArrayBuffer) { - message = new Uint8Array(message); - } + i++ + j += 2 + } - if(bits === undefined) { - bits = 512; - padding = KECCAK_PADDING; - } + while (i < 16) { + Wi = M.readInt32BE(j * 4) + Wil = M.readInt32BE(j * 4 + 4) - var block, code, end = false, index = 0, start = 0, length = message.length, - n, i, h, l, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, - b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, - b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, - b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49; - var blockCount = (1600 - bits * 2) / 32; - var byteCount = blockCount * 4; + loop() + } - for(i = 0;i < 50;++i) { - s[i] = 0; - } + while (i < 80) { + calcW() + loop() + } - block = 0; - do { - blocks[0] = block; - for(i = 1;i < blockCount + 1;++i) { - blocks[i] = 0; - } - if(notString) { - for (i = start;index < length && i < byteCount; ++index) { - blocks[i >> 2] |= message[index] << SHIFT[i++ & 3]; - } - } else { - for (i = start;index < length && i < byteCount; ++index) { - code = message.charCodeAt(index); - if (code < 0x80) { - blocks[i >> 2] |= code << SHIFT[i++ & 3]; - } else if (code < 0x800) { - blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else if (code < 0xd800 || code >= 0xe000) { - blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } else { - code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); - blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3]; - blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; - } - } - } - start = i - byteCount; - if(index == length) { - blocks[i >> 2] |= padding[i & 3]; - ++index; - } - block = blocks[blockCount]; - if(index > length && i < byteCount) { - blocks[blockCount - 1] |= 0x80000000; - end = true; - } + this._al = (this._al + al) | 0 + this._bl = (this._bl + bl) | 0 + this._cl = (this._cl + cl) | 0 + this._dl = (this._dl + dl) | 0 + this._el = (this._el + el) | 0 + this._fl = (this._fl + fl) | 0 + this._gl = (this._gl + gl) | 0 + this._hl = (this._hl + hl) | 0 - for(i = 0;i < blockCount;++i) { - s[i] ^= blocks[i]; - } + this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0 + this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0 + this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0 + this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0 + this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0 + this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0 + this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0 + this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0 +} - for(n = 0; n < 48; n += 2) { - c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]; - c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]; - c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]; - c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]; - c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]; - c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]; - c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]; - c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]; - c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]; - c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]; +Sha512.prototype._hash = function () { + var H = new Buffer(64) - h = c8 ^ ((c2 << 1) | (c3 >>> 31)); - l = c9 ^ ((c3 << 1) | (c2 >>> 31)); - s[0] ^= h; - s[1] ^= l; - s[10] ^= h; - s[11] ^= l; - s[20] ^= h; - s[21] ^= l; - s[30] ^= h; - s[31] ^= l; - s[40] ^= h; - s[41] ^= l; - h = c0 ^ ((c4 << 1) | (c5 >>> 31)); - l = c1 ^ ((c5 << 1) | (c4 >>> 31)); - s[2] ^= h; - s[3] ^= l; - s[12] ^= h; - s[13] ^= l; - s[22] ^= h; - s[23] ^= l; - s[32] ^= h; - s[33] ^= l; - s[42] ^= h; - s[43] ^= l; - h = c2 ^ ((c6 << 1) | (c7 >>> 31)); - l = c3 ^ ((c7 << 1) | (c6 >>> 31)); - s[4] ^= h; - s[5] ^= l; - s[14] ^= h; - s[15] ^= l; - s[24] ^= h; - s[25] ^= l; - s[34] ^= h; - s[35] ^= l; - s[44] ^= h; - s[45] ^= l; - h = c4 ^ ((c8 << 1) | (c9 >>> 31)); - l = c5 ^ ((c9 << 1) | (c8 >>> 31)); - s[6] ^= h; - s[7] ^= l; - s[16] ^= h; - s[17] ^= l; - s[26] ^= h; - s[27] ^= l; - s[36] ^= h; - s[37] ^= l; - s[46] ^= h; - s[47] ^= l; - h = c6 ^ ((c0 << 1) | (c1 >>> 31)); - l = c7 ^ ((c1 << 1) | (c0 >>> 31)); - s[8] ^= h; - s[9] ^= l; - s[18] ^= h; - s[19] ^= l; - s[28] ^= h; - s[29] ^= l; - s[38] ^= h; - s[39] ^= l; - s[48] ^= h; - s[49] ^= l; + function writeInt64BE (h, l, offset) { + H.writeInt32BE(h, offset) + H.writeInt32BE(l, offset + 4) + } + + writeInt64BE(this._a, this._al, 0) + writeInt64BE(this._b, this._bl, 8) + writeInt64BE(this._c, this._cl, 16) + writeInt64BE(this._d, this._dl, 24) + writeInt64BE(this._e, this._el, 32) + writeInt64BE(this._f, this._fl, 40) + writeInt64BE(this._g, this._gl, 48) + writeInt64BE(this._h, this._hl, 56) + + return H +} + +module.exports = Sha512 + +}).call(this,require("buffer").Buffer) +},{"./hash":283,"buffer":147,"inherits":226}],291:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. - b0 = s[0]; - b1 = s[1]; - b32 = (s[11] << 4) | (s[10] >>> 28); - b33 = (s[10] << 4) | (s[11] >>> 28); - b14 = (s[20] << 3) | (s[21] >>> 29); - b15 = (s[21] << 3) | (s[20] >>> 29); - b46 = (s[31] << 9) | (s[30] >>> 23); - b47 = (s[30] << 9) | (s[31] >>> 23); - b28 = (s[40] << 18) | (s[41] >>> 14); - b29 = (s[41] << 18) | (s[40] >>> 14); - b20 = (s[2] << 1) | (s[3] >>> 31); - b21 = (s[3] << 1) | (s[2] >>> 31); - b2 = (s[13] << 12) | (s[12] >>> 20); - b3 = (s[12] << 12) | (s[13] >>> 20); - b34 = (s[22] << 10) | (s[23] >>> 22); - b35 = (s[23] << 10) | (s[22] >>> 22); - b16 = (s[33] << 13) | (s[32] >>> 19); - b17 = (s[32] << 13) | (s[33] >>> 19); - b48 = (s[42] << 2) | (s[43] >>> 30); - b49 = (s[43] << 2) | (s[42] >>> 30); - b40 = (s[5] << 30) | (s[4] >>> 2); - b41 = (s[4] << 30) | (s[5] >>> 2); - b22 = (s[14] << 6) | (s[15] >>> 26); - b23 = (s[15] << 6) | (s[14] >>> 26); - b4 = (s[25] << 11) | (s[24] >>> 21); - b5 = (s[24] << 11) | (s[25] >>> 21); - b36 = (s[34] << 15) | (s[35] >>> 17); - b37 = (s[35] << 15) | (s[34] >>> 17); - b18 = (s[45] << 29) | (s[44] >>> 3); - b19 = (s[44] << 29) | (s[45] >>> 3); - b10 = (s[6] << 28) | (s[7] >>> 4); - b11 = (s[7] << 28) | (s[6] >>> 4); - b42 = (s[17] << 23) | (s[16] >>> 9); - b43 = (s[16] << 23) | (s[17] >>> 9); - b24 = (s[26] << 25) | (s[27] >>> 7); - b25 = (s[27] << 25) | (s[26] >>> 7); - b6 = (s[36] << 21) | (s[37] >>> 11); - b7 = (s[37] << 21) | (s[36] >>> 11); - b38 = (s[47] << 24) | (s[46] >>> 8); - b39 = (s[46] << 24) | (s[47] >>> 8); - b30 = (s[8] << 27) | (s[9] >>> 5); - b31 = (s[9] << 27) | (s[8] >>> 5); - b12 = (s[18] << 20) | (s[19] >>> 12); - b13 = (s[19] << 20) | (s[18] >>> 12); - b44 = (s[29] << 7) | (s[28] >>> 25); - b45 = (s[28] << 7) | (s[29] >>> 25); - b26 = (s[38] << 8) | (s[39] >>> 24); - b27 = (s[39] << 8) | (s[38] >>> 24); - b8 = (s[48] << 14) | (s[49] >>> 18); - b9 = (s[49] << 14) | (s[48] >>> 18); +module.exports = Stream; - s[0] = b0 ^ (~b2 & b4); - s[1] = b1 ^ (~b3 & b5); - s[10] = b10 ^ (~b12 & b14); - s[11] = b11 ^ (~b13 & b15); - s[20] = b20 ^ (~b22 & b24); - s[21] = b21 ^ (~b23 & b25); - s[30] = b30 ^ (~b32 & b34); - s[31] = b31 ^ (~b33 & b35); - s[40] = b40 ^ (~b42 & b44); - s[41] = b41 ^ (~b43 & b45); - s[2] = b2 ^ (~b4 & b6); - s[3] = b3 ^ (~b5 & b7); - s[12] = b12 ^ (~b14 & b16); - s[13] = b13 ^ (~b15 & b17); - s[22] = b22 ^ (~b24 & b26); - s[23] = b23 ^ (~b25 & b27); - s[32] = b32 ^ (~b34 & b36); - s[33] = b33 ^ (~b35 & b37); - s[42] = b42 ^ (~b44 & b46); - s[43] = b43 ^ (~b45 & b47); - s[4] = b4 ^ (~b6 & b8); - s[5] = b5 ^ (~b7 & b9); - s[14] = b14 ^ (~b16 & b18); - s[15] = b15 ^ (~b17 & b19); - s[24] = b24 ^ (~b26 & b28); - s[25] = b25 ^ (~b27 & b29); - s[34] = b34 ^ (~b36 & b38); - s[35] = b35 ^ (~b37 & b39); - s[44] = b44 ^ (~b46 & b48); - s[45] = b45 ^ (~b47 & b49); - s[6] = b6 ^ (~b8 & b0); - s[7] = b7 ^ (~b9 & b1); - s[16] = b16 ^ (~b18 & b10); - s[17] = b17 ^ (~b19 & b11); - s[26] = b26 ^ (~b28 & b20); - s[27] = b27 ^ (~b29 & b21); - s[36] = b36 ^ (~b38 & b30); - s[37] = b37 ^ (~b39 & b31); - s[46] = b46 ^ (~b48 & b40); - s[47] = b47 ^ (~b49 & b41); - s[8] = b8 ^ (~b0 & b2); - s[9] = b9 ^ (~b1 & b3); - s[18] = b18 ^ (~b10 & b12); - s[19] = b19 ^ (~b11 & b13); - s[28] = b28 ^ (~b20 & b22); - s[29] = b29 ^ (~b21 & b23); - s[38] = b38 ^ (~b30 & b32); - s[39] = b39 ^ (~b31 & b33); - s[48] = b48 ^ (~b40 & b42); - s[49] = b49 ^ (~b41 & b43); +var EE = require('events').EventEmitter; +var inherits = require('inherits'); - s[0] ^= RC[n]; - s[1] ^= RC[n + 1]; - } - } while(!end); +inherits(Stream, EE); +Stream.Readable = require('readable-stream/readable.js'); +Stream.Writable = require('readable-stream/writable.js'); +Stream.Duplex = require('readable-stream/duplex.js'); +Stream.Transform = require('readable-stream/transform.js'); +Stream.PassThrough = require('readable-stream/passthrough.js'); - var hex = ''; - if(CHROME) { - b0 = s[0]; - b1 = s[1]; - b2 = s[2]; - b3 = s[3]; - b4 = s[4]; - b5 = s[5]; - b6 = s[6]; - b7 = s[7]; - b8 = s[8]; - b9 = s[9]; - b10 = s[10]; - b11 = s[11]; - b12 = s[12]; - b13 = s[13]; - b14 = s[14]; - b15 = s[15]; - hex += HEX_CHARS[(b0 >> 4) & 0x0F] + HEX_CHARS[b0 & 0x0F] + - HEX_CHARS[(b0 >> 12) & 0x0F] + HEX_CHARS[(b0 >> 8) & 0x0F] + - HEX_CHARS[(b0 >> 20) & 0x0F] + HEX_CHARS[(b0 >> 16) & 0x0F] + - HEX_CHARS[(b0 >> 28) & 0x0F] + HEX_CHARS[(b0 >> 24) & 0x0F] + - HEX_CHARS[(b1 >> 4) & 0x0F] + HEX_CHARS[b1 & 0x0F] + - HEX_CHARS[(b1 >> 12) & 0x0F] + HEX_CHARS[(b1 >> 8) & 0x0F] + - HEX_CHARS[(b1 >> 20) & 0x0F] + HEX_CHARS[(b1 >> 16) & 0x0F] + - HEX_CHARS[(b1 >> 28) & 0x0F] + HEX_CHARS[(b1 >> 24) & 0x0F] + - HEX_CHARS[(b2 >> 4) & 0x0F] + HEX_CHARS[b2 & 0x0F] + - HEX_CHARS[(b2 >> 12) & 0x0F] + HEX_CHARS[(b2 >> 8) & 0x0F] + - HEX_CHARS[(b2 >> 20) & 0x0F] + HEX_CHARS[(b2 >> 16) & 0x0F] + - HEX_CHARS[(b2 >> 28) & 0x0F] + HEX_CHARS[(b2 >> 24) & 0x0F] + - HEX_CHARS[(b3 >> 4) & 0x0F] + HEX_CHARS[b3 & 0x0F] + - HEX_CHARS[(b3 >> 12) & 0x0F] + HEX_CHARS[(b3 >> 8) & 0x0F] + - HEX_CHARS[(b3 >> 20) & 0x0F] + HEX_CHARS[(b3 >> 16) & 0x0F] + - HEX_CHARS[(b3 >> 28) & 0x0F] + HEX_CHARS[(b3 >> 24) & 0x0F] + - HEX_CHARS[(b4 >> 4) & 0x0F] + HEX_CHARS[b4 & 0x0F] + - HEX_CHARS[(b4 >> 12) & 0x0F] + HEX_CHARS[(b4 >> 8) & 0x0F] + - HEX_CHARS[(b4 >> 20) & 0x0F] + HEX_CHARS[(b4 >> 16) & 0x0F] + - HEX_CHARS[(b4 >> 28) & 0x0F] + HEX_CHARS[(b4 >> 24) & 0x0F] + - HEX_CHARS[(b5 >> 4) & 0x0F] + HEX_CHARS[b5 & 0x0F] + - HEX_CHARS[(b5 >> 12) & 0x0F] + HEX_CHARS[(b5 >> 8) & 0x0F] + - HEX_CHARS[(b5 >> 20) & 0x0F] + HEX_CHARS[(b5 >> 16) & 0x0F] + - HEX_CHARS[(b5 >> 28) & 0x0F] + HEX_CHARS[(b5 >> 24) & 0x0F] + - HEX_CHARS[(b6 >> 4) & 0x0F] + HEX_CHARS[b6 & 0x0F] + - HEX_CHARS[(b6 >> 12) & 0x0F] + HEX_CHARS[(b6 >> 8) & 0x0F] + - HEX_CHARS[(b6 >> 20) & 0x0F] + HEX_CHARS[(b6 >> 16) & 0x0F] + - HEX_CHARS[(b6 >> 28) & 0x0F] + HEX_CHARS[(b6 >> 24) & 0x0F]; +// Backwards-compat with node 0.4.x +Stream.Stream = Stream; - if(bits >= 256) { - hex += HEX_CHARS[(b7 >> 4) & 0x0F] + HEX_CHARS[b7 & 0x0F] + - HEX_CHARS[(b7 >> 12) & 0x0F] + HEX_CHARS[(b7 >> 8) & 0x0F] + - HEX_CHARS[(b7 >> 20) & 0x0F] + HEX_CHARS[(b7 >> 16) & 0x0F] + - HEX_CHARS[(b7 >> 28) & 0x0F] + HEX_CHARS[(b7 >> 24) & 0x0F]; - } - if(bits >= 384) { - hex += HEX_CHARS[(b8 >> 4) & 0x0F] + HEX_CHARS[b8 & 0x0F] + - HEX_CHARS[(b8 >> 12) & 0x0F] + HEX_CHARS[(b8 >> 8) & 0x0F] + - HEX_CHARS[(b8 >> 20) & 0x0F] + HEX_CHARS[(b8 >> 16) & 0x0F] + - HEX_CHARS[(b8 >> 28) & 0x0F] + HEX_CHARS[(b8 >> 24) & 0x0F] + - HEX_CHARS[(b9 >> 4) & 0x0F] + HEX_CHARS[b9 & 0x0F] + - HEX_CHARS[(b9 >> 12) & 0x0F] + HEX_CHARS[(b9 >> 8) & 0x0F] + - HEX_CHARS[(b9 >> 20) & 0x0F] + HEX_CHARS[(b9 >> 16) & 0x0F] + - HEX_CHARS[(b9 >> 28) & 0x0F] + HEX_CHARS[(b9 >> 24) & 0x0F] + - HEX_CHARS[(b10 >> 4) & 0x0F] + HEX_CHARS[b10 & 0x0F] + - HEX_CHARS[(b10 >> 12) & 0x0F] + HEX_CHARS[(b10 >> 8) & 0x0F] + - HEX_CHARS[(b10 >> 20) & 0x0F] + HEX_CHARS[(b10 >> 16) & 0x0F] + - HEX_CHARS[(b10 >> 28) & 0x0F] + HEX_CHARS[(b10 >> 24) & 0x0F] + - HEX_CHARS[(b11 >> 4) & 0x0F] + HEX_CHARS[b11 & 0x0F] + - HEX_CHARS[(b11 >> 12) & 0x0F] + HEX_CHARS[(b11 >> 8) & 0x0F] + - HEX_CHARS[(b11 >> 20) & 0x0F] + HEX_CHARS[(b11 >> 16) & 0x0F] + - HEX_CHARS[(b11 >> 28) & 0x0F] + HEX_CHARS[(b11 >> 24) & 0x0F]; - } - if(bits == 512) { - hex += HEX_CHARS[(b12 >> 4) & 0x0F] + HEX_CHARS[b12 & 0x0F] + - HEX_CHARS[(b12 >> 12) & 0x0F] + HEX_CHARS[(b12 >> 8) & 0x0F] + - HEX_CHARS[(b12 >> 20) & 0x0F] + HEX_CHARS[(b12 >> 16) & 0x0F] + - HEX_CHARS[(b12 >> 28) & 0x0F] + HEX_CHARS[(b12 >> 24) & 0x0F] + - HEX_CHARS[(b13 >> 4) & 0x0F] + HEX_CHARS[b13 & 0x0F] + - HEX_CHARS[(b13 >> 12) & 0x0F] + HEX_CHARS[(b13 >> 8) & 0x0F] + - HEX_CHARS[(b13 >> 20) & 0x0F] + HEX_CHARS[(b13 >> 16) & 0x0F] + - HEX_CHARS[(b13 >> 28) & 0x0F] + HEX_CHARS[(b13 >> 24) & 0x0F] + - HEX_CHARS[(b14 >> 4) & 0x0F] + HEX_CHARS[b14 & 0x0F] + - HEX_CHARS[(b14 >> 12) & 0x0F] + HEX_CHARS[(b14 >> 8) & 0x0F] + - HEX_CHARS[(b14 >> 20) & 0x0F] + HEX_CHARS[(b14 >> 16) & 0x0F] + - HEX_CHARS[(b14 >> 28) & 0x0F] + HEX_CHARS[(b14 >> 24) & 0x0F] + - HEX_CHARS[(b15 >> 4) & 0x0F] + HEX_CHARS[b15 & 0x0F] + - HEX_CHARS[(b15 >> 12) & 0x0F] + HEX_CHARS[(b15 >> 8) & 0x0F] + - HEX_CHARS[(b15 >> 20) & 0x0F] + HEX_CHARS[(b15 >> 16) & 0x0F] + - HEX_CHARS[(b15 >> 28) & 0x0F] + HEX_CHARS[(b15 >> 24) & 0x0F]; - } - } else { - for(i = 0, n = bits / 32;i < n;++i) { - h = s[i]; - hex += HEX_CHARS[(h >> 4) & 0x0F] + HEX_CHARS[h & 0x0F] + - HEX_CHARS[(h >> 12) & 0x0F] + HEX_CHARS[(h >> 8) & 0x0F] + - HEX_CHARS[(h >> 20) & 0x0F] + HEX_CHARS[(h >> 16) & 0x0F] + - HEX_CHARS[(h >> 28) & 0x0F] + HEX_CHARS[(h >> 24) & 0x0F]; + + +// old-style streams. Note that the pipe method (the only relevant +// part of this class) is overridden in the Readable class. + +function Stream() { + EE.call(this); +} + +Stream.prototype.pipe = function(dest, options) { + var source = this; + + function ondata(chunk) { + if (dest.writable) { + if (false === dest.write(chunk) && source.pause) { + source.pause(); } } - return hex; - }; - - if(!root.JS_SHA3_TEST && NODE_JS) { - module.exports = { - sha3_512: sha3_512, - sha3_384: sha3_384, - sha3_256: sha3_256, - sha3_224: sha3_224, - keccak_512: keccak, - keccak_384: keccak_384, - keccak_256: keccak_256, - keccak_224: keccak_224 - }; - } else if(root) { - root.sha3_512 = sha3_512; - root.sha3_384 = sha3_384; - root.sha3_256 = sha3_256; - root.sha3_224 = sha3_224; - root.keccak_512 = keccak; - root.keccak_384 = keccak_384; - root.keccak_256 = keccak_256; - root.keccak_224 = keccak_224; } -}(this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],389:[function(require,module,exports){ -'use strict' -module.exports = require('./lib')(require('./lib/elliptic')) + source.on('data', ondata); -},{"./lib":392,"./lib/elliptic":391}],390:[function(require,module,exports){ -(function (Buffer){ -'use strict' + function ondrain() { + if (source.readable && source.resume) { + source.resume(); + } + } -var toString = Object.prototype.toString + dest.on('drain', ondrain); -// TypeError -exports.isArray = function (value, message) { - if (!Array.isArray(value)) { - throw TypeError(message) + // If the 'end' option is not supplied, dest.end() will be called when + // source gets the 'end' or 'close' events. Only dest.end() once. + if (!dest._isStdio && (!options || options.end !== false)) { + source.on('end', onend); + source.on('close', onclose); } -} -exports.isBoolean = function (value, message) { - if (toString.call(value) !== '[object Boolean]') { - throw TypeError(message) - } -} + var didOnEnd = false; + function onend() { + if (didOnEnd) return; + didOnEnd = true; -exports.isBuffer = function (value, message) { - if (!Buffer.isBuffer(value)) { - throw TypeError(message) + dest.end(); } -} -exports.isFunction = function (value, message) { - if (toString.call(value) !== '[object Function]') { - throw TypeError(message) + + function onclose() { + if (didOnEnd) return; + didOnEnd = true; + + if (typeof dest.destroy === 'function') dest.destroy(); } -} -exports.isNumber = function (value, message) { - if (toString.call(value) !== '[object Number]') { - throw TypeError(message) + // don't leave dangling pipes when there are errors. + function onerror(er) { + cleanup(); + if (EE.listenerCount(this, 'error') === 0) { + throw er; // Unhandled stream error in pipe. + } } -} -exports.isObject = function (value, message) { - if (toString.call(value) !== '[object Object]') { - throw TypeError(message) + source.on('error', onerror); + dest.on('error', onerror); + + // remove all the event listeners that were added. + function cleanup() { + source.removeListener('data', ondata); + dest.removeListener('drain', ondrain); + + source.removeListener('end', onend); + source.removeListener('close', onclose); + + source.removeListener('error', onerror); + dest.removeListener('error', onerror); + + source.removeListener('end', cleanup); + source.removeListener('close', cleanup); + + dest.removeListener('close', cleanup); } -} -// RangeError -exports.isBufferLength = function (buffer, length, message) { - if (buffer.length !== length) { - throw RangeError(message) + source.on('end', cleanup); + source.on('close', cleanup); + + dest.on('close', cleanup); + + dest.emit('pipe', source); + + // Allow for unix-like usage: A.pipe(B).pipe(C) + return dest; +}; + +},{"events":217,"inherits":226,"readable-stream/duplex.js":248,"readable-stream/passthrough.js":254,"readable-stream/readable.js":255,"readable-stream/transform.js":256,"readable-stream/writable.js":257}],292:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var Buffer = require('buffer').Buffer; + +var isBufferEncoding = Buffer.isEncoding + || function(encoding) { + switch (encoding && encoding.toLowerCase()) { + case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true; + default: return false; + } + } + + +function assertEncoding(encoding) { + if (encoding && !isBufferEncoding(encoding)) { + throw new Error('Unknown encoding: ' + encoding); } } -exports.isBufferLength2 = function (buffer, length1, length2, message) { - if (buffer.length !== length1 && buffer.length !== length2) { - throw RangeError(message) +// StringDecoder provides an interface for efficiently splitting a series of +// buffers into a series of JS strings without breaking apart multi-byte +// characters. CESU-8 is handled as part of the UTF-8 encoding. +// +// @TODO Handling all encodings inside a single object makes it very difficult +// to reason about this code, so it should be split up in the future. +// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code +// points as used by CESU-8. +var StringDecoder = exports.StringDecoder = function(encoding) { + this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); + assertEncoding(encoding); + switch (this.encoding) { + case 'utf8': + // CESU-8 represents each of Surrogate Pair by 3-bytes + this.surrogateSize = 3; + break; + case 'ucs2': + case 'utf16le': + // UTF-16 represents each of Surrogate Pair by 2-bytes + this.surrogateSize = 2; + this.detectIncompleteChar = utf16DetectIncompleteChar; + break; + case 'base64': + // Base-64 stores 3 bytes in 4 chars, and pads the remainder. + this.surrogateSize = 3; + this.detectIncompleteChar = base64DetectIncompleteChar; + break; + default: + this.write = passThroughWrite; + return; } -} -exports.isLengthGTZero = function (value, message) { - if (value.length === 0) { - throw RangeError(message) + // Enough space to store all bytes of a single character. UTF-8 needs 4 + // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate). + this.charBuffer = new Buffer(6); + // Number of bytes received for the current incomplete multi-byte character. + this.charReceived = 0; + // Number of bytes expected for the current incomplete multi-byte character. + this.charLength = 0; +}; + + +// write decodes the given buffer and returns it as JS string that is +// guaranteed to not contain any partial multi-byte characters. Any partial +// character found at the end of the buffer is buffered up, and will be +// returned when calling write again with the remaining bytes. +// +// Note: Converting a Buffer containing an orphan surrogate to a String +// currently works, but converting a String to a Buffer (via `new Buffer`, or +// Buffer#write) will replace incomplete surrogates with the unicode +// replacement character. See https://codereview.chromium.org/121173009/ . +StringDecoder.prototype.write = function(buffer) { + var charStr = ''; + // if our last write ended with an incomplete multibyte character + while (this.charLength) { + // determine how many remaining bytes this buffer has to offer for this char + var available = (buffer.length >= this.charLength - this.charReceived) ? + this.charLength - this.charReceived : + buffer.length; + + // add the new bytes to the char buffer + buffer.copy(this.charBuffer, this.charReceived, 0, available); + this.charReceived += available; + + if (this.charReceived < this.charLength) { + // still not enough chars in this buffer? wait for more ... + return ''; + } + + // remove bytes belonging to the current character from the buffer + buffer = buffer.slice(available, buffer.length); + + // get the character that was split + charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); + + // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character + var charCode = charStr.charCodeAt(charStr.length - 1); + if (charCode >= 0xD800 && charCode <= 0xDBFF) { + this.charLength += this.surrogateSize; + charStr = ''; + continue; + } + this.charReceived = this.charLength = 0; + + // if there are no more bytes in this buffer, just emit our char + if (buffer.length === 0) { + return charStr; + } + break; } -} -exports.isNumberInInterval = function (number, x, y, message) { - if (number <= x || number >= y) { - throw RangeError(message) + // determine and set charLength / charReceived + this.detectIncompleteChar(buffer); + + var end = buffer.length; + if (this.charLength) { + // buffer the incomplete character bytes we got + buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end); + end -= this.charReceived; } -} -}).call(this,{"isBuffer":require("../../../../browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js")}) -},{"../../../../browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js":297}],391:[function(require,module,exports){ -(function (Buffer){ -'use strict' + charStr += buffer.toString(this.encoding, 0, end); -var BN = require('bn.js') -var EC = require('elliptic').ec + var end = charStr.length - 1; + var charCode = charStr.charCodeAt(end); + // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character + if (charCode >= 0xD800 && charCode <= 0xDBFF) { + var size = this.surrogateSize; + this.charLength += size; + this.charReceived += size; + this.charBuffer.copy(this.charBuffer, size, 0, size); + buffer.copy(this.charBuffer, 0, 0, size); + return charStr.substring(0, end); + } -var messages = require('../messages.json') + // or just emit the charStr + return charStr; +}; -var ec = new EC('secp256k1') -var ecparams = ec.curve +// detectIncompleteChar determines if there is an incomplete UTF-8 character at +// the end of the given buffer. If so, it sets this.charLength to the byte +// length that character, and sets this.charReceived to the number of bytes +// that are available for this character. +StringDecoder.prototype.detectIncompleteChar = function(buffer) { + // determine how many bytes we have to check at the end of this buffer + var i = (buffer.length >= 3) ? 3 : buffer.length; -/** - * @param {Buffer} publicKey - * @return {?KeyPair} - */ -function pairFromPublicKey (publicKey) { - var x - var y + // Figure out if one of the last i bytes of our buffer announces an + // incomplete char. + for (; i > 0; i--) { + var c = buffer[buffer.length - i]; - var first = publicKey[0] - if (publicKey.length === 33 && (first === 0x02 || first === 0x03)) { - x = new BN(publicKey.slice(1, 33)) + // See http://en.wikipedia.org/wiki/UTF-8#Description - // overflow - if (x.cmp(ecparams.p) >= 0) { - return null + // 110XXXXX + if (i == 1 && c >> 5 == 0x06) { + this.charLength = 2; + break; } - x = x.toRed(ecparams.red) - y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt() - if ((first === 0x03) !== y.isOdd()) { - y = y.redNeg() + // 1110XXXX + if (i <= 2 && c >> 4 == 0x0E) { + this.charLength = 3; + break; } - } else if (publicKey.length === 65 && (first === 0x04 || first === 0x06 || first === 0x07)) { - x = new BN(publicKey.slice(1, 33)) - y = new BN(publicKey.slice(33, 65)) - // overflow - if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) { - return null + // 11110XXX + if (i <= 3 && c >> 3 == 0x1E) { + this.charLength = 4; + break; } + } + this.charReceived = i; +}; - x = x.toRed(ecparams.red) - y = y.toRed(ecparams.red) - - // is odd flag - if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) { - return null - } +StringDecoder.prototype.end = function(buffer) { + var res = ''; + if (buffer && buffer.length) + res = this.write(buffer); - // x*x*x + b = y*y - var x3 = x.redSqr().redIMul(x) - if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) { - return null - } - } else { - return null + if (this.charReceived) { + var cr = this.charReceived; + var buf = this.charBuffer; + var enc = this.encoding; + res += buf.slice(0, cr).toString(enc); } - return ec.keyPair({pub: {x: x, y: y}}) -} + return res; +}; -/** - * @param {Buffer} privateKey - * @return {boolean} - */ -exports.privateKeyVerify = function (privateKey) { - var bn = new BN(privateKey) - return !(bn.cmp(ecparams.n) >= 0 || bn.isZero()) +function passThroughWrite(buffer) { + return buffer.toString(this.encoding); } -/** - * @param {Buffer} privateKey - * @param {boolean} compressed - * @return {Buffer} - */ -exports.privateKeyExport = function (privateKey, compressed) { - var d = new BN(privateKey) - if (d.cmp(ecparams.n) >= 0 || d.isZero()) { - throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL) - } +function utf16DetectIncompleteChar(buffer) { + this.charReceived = buffer.length % 2; + this.charLength = this.charReceived ? 2 : 0; +} - return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true)) +function base64DetectIncompleteChar(buffer) { + this.charReceived = buffer.length % 3; + this.charLength = this.charReceived ? 3 : 0; } -/** - * @param {Buffer} privateKey - * @param {Buffer} tweak - * @return {Buffer} - */ -exports.privateKeyTweakAdd = function (privateKey, tweak) { - var bn = new BN(tweak) - if (bn.cmp(ecparams.n) >= 0) { - throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL) - } +},{"buffer":147}],293:[function(require,module,exports){ +(function (Buffer){ +(function(nacl) { +'use strict'; - bn.iadd(new BN(privateKey)) - if (bn.cmp(ecparams.n) >= 0) { - bn.isub(ecparams.n) - } +// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. +// Public domain. +// +// Implementation derived from TweetNaCl version 20140427. +// See for details: http://tweetnacl.cr.yp.to/ - if (bn.isZero()) { - throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL) - } +var gf = function(init) { + var i, r = new Float64Array(16); + if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; + return r; +}; - return bn.toArrayLike(Buffer, null, 32) -} +// Pluggable, initialized in high-level API below. +var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; -/** - * @param {Buffer} privateKey - * @param {Buffer} tweak - * @return {Buffer} - */ -exports.privateKeyTweakMul = function (privateKey, tweak) { - var bn = new BN(tweak) - if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) { - throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL) - } +var _0 = new Uint8Array(16); +var _9 = new Uint8Array(32); _9[0] = 9; - bn.imul(new BN(privateKey)) - if (bn.cmp(ecparams.n)) { - bn = bn.umod(ecparams.n) - } +var gf0 = gf(), + gf1 = gf([1]), + _121665 = gf([0xdb41, 1]), + D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), + D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), + X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), + Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), + I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); - return bn.toArrayLike(Buffer, null, 32) +function ts64(x, i, h, l) { + x[i] = (h >> 24) & 0xff; + x[i+1] = (h >> 16) & 0xff; + x[i+2] = (h >> 8) & 0xff; + x[i+3] = h & 0xff; + x[i+4] = (l >> 24) & 0xff; + x[i+5] = (l >> 16) & 0xff; + x[i+6] = (l >> 8) & 0xff; + x[i+7] = l & 0xff; } -/** - * @param {Buffer} privateKey - * @param {boolean} compressed - * @return {Buffer} - */ -exports.publicKeyCreate = function (privateKey, compressed) { - var d = new BN(privateKey) - if (d.cmp(ecparams.n) >= 0 || d.isZero()) { - throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL) - } - - return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true)) +function vn(x, xi, y, yi, n) { + var i,d = 0; + for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; + return (1 & ((d - 1) >>> 8)) - 1; } -/** - * @param {Buffer} publicKey - * @param {boolean} compressed - * @return {Buffer} - */ -exports.publicKeyConvert = function (publicKey, compressed) { - var pair = pairFromPublicKey(publicKey) - if (pair === null) { - throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - } - - return new Buffer(pair.getPublic(compressed, true)) +function crypto_verify_16(x, xi, y, yi) { + return vn(x,xi,y,yi,16); } -/** - * @param {Buffer} publicKey - * @return {boolean} - */ -exports.publicKeyVerify = function (publicKey) { - return pairFromPublicKey(publicKey) !== null +function crypto_verify_32(x, xi, y, yi) { + return vn(x,xi,y,yi,32); } -/** - * @param {Buffer} publicKey - * @param {Buffer} tweak - * @param {boolean} compressed - * @return {Buffer} - */ -exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) { - var pair = pairFromPublicKey(publicKey) - if (pair === null) { - throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - } - - tweak = new BN(tweak) - if (tweak.cmp(ecparams.n) >= 0) { - throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL) - } - - return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed)) -} +function core_salsa20(o, p, k, c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; -/** - * @param {Buffer} publicKey - * @param {Buffer} tweak - * @param {boolean} compressed - * @return {Buffer} - */ -exports.publicKeyTweakMul = function (publicKey, tweak, compressed) { - var pair = pairFromPublicKey(publicKey) - if (pair === null) { - throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - } + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; - tweak = new BN(tweak) - if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) { - throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL) - } + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); - return new Buffer(pair.pub.mul(tweak).encode(true, compressed)) -} + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); -/** - * @param {Buffer[]} publicKeys - * @param {boolean} compressed - * @return {Buffer} - */ -exports.publicKeyCombine = function (publicKeys, compressed) { - var pairs = new Array(publicKeys.length) - for (var i = 0; i < publicKeys.length; ++i) { - pairs[i] = pairFromPublicKey(publicKeys[i]) - if (pairs[i] === null) { - throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - } - } + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); - var point = pairs[0].pub - for (var j = 1; j < pairs.length; ++j) { - point = point.add(pairs[j].pub) - } + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); - if (point.isInfinity()) { - throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL) - } + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); - return new Buffer(point.encode(true, compressed)) -} + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); -/** - * @param {Buffer} signature - * @return {Buffer} - */ -exports.signatureNormalize = function (signature) { - var r = new BN(signature.slice(0, 32)) - var s = new BN(signature.slice(32, 64)) - if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) { - throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - } + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); - var result = new Buffer(signature) - if (s.cmp(ec.nh) === 1) { - new Buffer(ecparams.n.sub(s).toArray(null, 32)).copy(result, 32) + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); } + x0 = x0 + j0 | 0; + x1 = x1 + j1 | 0; + x2 = x2 + j2 | 0; + x3 = x3 + j3 | 0; + x4 = x4 + j4 | 0; + x5 = x5 + j5 | 0; + x6 = x6 + j6 | 0; + x7 = x7 + j7 | 0; + x8 = x8 + j8 | 0; + x9 = x9 + j9 | 0; + x10 = x10 + j10 | 0; + x11 = x11 + j11 | 0; + x12 = x12 + j12 | 0; + x13 = x13 + j13 | 0; + x14 = x14 + j14 | 0; + x15 = x15 + j15 | 0; - return result -} + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; -/** - * @param {Buffer} signature - * @return {{r: Buffer, s: Buffer}} - */ -exports.signatureExport = function (signature) { - var r = signature.slice(0, 32) - var s = signature.slice(32, 64) - if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) { - throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - } + o[ 4] = x1 >>> 0 & 0xff; + o[ 5] = x1 >>> 8 & 0xff; + o[ 6] = x1 >>> 16 & 0xff; + o[ 7] = x1 >>> 24 & 0xff; - return {r: r, s: s} -} + o[ 8] = x2 >>> 0 & 0xff; + o[ 9] = x2 >>> 8 & 0xff; + o[10] = x2 >>> 16 & 0xff; + o[11] = x2 >>> 24 & 0xff; -/** - * @param {{r: Buffer, s: Buffer}} sigObj - * @return {Buffer} - */ -exports.signatureImport = function (sigObj) { - var r = new BN(sigObj.r) - if (r.cmp(ecparams.n) >= 0) { - r = new BN(0) - } + o[12] = x3 >>> 0 & 0xff; + o[13] = x3 >>> 8 & 0xff; + o[14] = x3 >>> 16 & 0xff; + o[15] = x3 >>> 24 & 0xff; - var s = new BN(sigObj.s) - if (s.cmp(ecparams.n) >= 0) { - s = new BN(0) - } + o[16] = x4 >>> 0 & 0xff; + o[17] = x4 >>> 8 & 0xff; + o[18] = x4 >>> 16 & 0xff; + o[19] = x4 >>> 24 & 0xff; - return new Buffer(r.toArray(null, 32).concat(s.toArray(null, 32))) -} + o[20] = x5 >>> 0 & 0xff; + o[21] = x5 >>> 8 & 0xff; + o[22] = x5 >>> 16 & 0xff; + o[23] = x5 >>> 24 & 0xff; -/** - * @param {Buffer} message - * @param {Buffer} privateKey - * @param {?sign~noncefn} noncefn - * @param {?Buffer} data - * @return {{signature: Buffer, recovery: number}} - */ -exports.sign = function (message, privateKey, noncefn, data) { - if (typeof noncefn === 'function') { - var getNonce = noncefn - noncefn = function (counter) { - var nonce = getNonce(message, privateKey, null, data, counter) - if (!Buffer.isBuffer(nonce) || nonce.length !== 32) { - throw new Error(messages.ECDSA_SIGN_FAIL) - } + o[24] = x6 >>> 0 & 0xff; + o[25] = x6 >>> 8 & 0xff; + o[26] = x6 >>> 16 & 0xff; + o[27] = x6 >>> 24 & 0xff; - return new BN(nonce) - } - } + o[28] = x7 >>> 0 & 0xff; + o[29] = x7 >>> 8 & 0xff; + o[30] = x7 >>> 16 & 0xff; + o[31] = x7 >>> 24 & 0xff; - var d = new BN(privateKey) - if (d.cmp(ecparams.n) >= 0 || d.isZero()) { - throw new Error(messages.ECDSA_SIGN_FAIL) - } + o[32] = x8 >>> 0 & 0xff; + o[33] = x8 >>> 8 & 0xff; + o[34] = x8 >>> 16 & 0xff; + o[35] = x8 >>> 24 & 0xff; - var result = ec.sign(message, privateKey, {canonical: true, k: noncefn, pers: data}) - return { - signature: new Buffer(result.r.toArray(null, 32).concat(result.s.toArray(null, 32))), - recovery: result.recoveryParam - } -} + o[36] = x9 >>> 0 & 0xff; + o[37] = x9 >>> 8 & 0xff; + o[38] = x9 >>> 16 & 0xff; + o[39] = x9 >>> 24 & 0xff; -/** - * @param {Buffer} message - * @param {Buffer} signature - * @param {Buffer} publicKey - * @return {boolean} - */ -exports.verify = function (message, signature, publicKey) { - var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)} + o[40] = x10 >>> 0 & 0xff; + o[41] = x10 >>> 8 & 0xff; + o[42] = x10 >>> 16 & 0xff; + o[43] = x10 >>> 24 & 0xff; - var sigr = new BN(sigObj.r) - var sigs = new BN(sigObj.s) - if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) { - throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - } + o[44] = x11 >>> 0 & 0xff; + o[45] = x11 >>> 8 & 0xff; + o[46] = x11 >>> 16 & 0xff; + o[47] = x11 >>> 24 & 0xff; - if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) { - return false - } + o[48] = x12 >>> 0 & 0xff; + o[49] = x12 >>> 8 & 0xff; + o[50] = x12 >>> 16 & 0xff; + o[51] = x12 >>> 24 & 0xff; - var pair = pairFromPublicKey(publicKey) - if (pair === null) { - throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL) - } + o[52] = x13 >>> 0 & 0xff; + o[53] = x13 >>> 8 & 0xff; + o[54] = x13 >>> 16 & 0xff; + o[55] = x13 >>> 24 & 0xff; - return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y}) + o[56] = x14 >>> 0 & 0xff; + o[57] = x14 >>> 8 & 0xff; + o[58] = x14 >>> 16 & 0xff; + o[59] = x14 >>> 24 & 0xff; + + o[60] = x15 >>> 0 & 0xff; + o[61] = x15 >>> 8 & 0xff; + o[62] = x15 >>> 16 & 0xff; + o[63] = x15 >>> 24 & 0xff; } -/** - * @param {Buffer} message - * @param {Buffer} signature - * @param {number} recovery - * @param {boolean} compressed - * @return {Buffer} - */ -exports.recover = function (message, signature, recovery, compressed) { - var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)} +function core_hsalsa20(o,p,k,c) { + var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, + j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, + j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, + j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, + j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, + j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, + j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, + j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, + j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, + j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, + j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, + j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, + j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, + j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, + j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, + j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; - var sigr = new BN(sigObj.r) - var sigs = new BN(sigObj.s) - if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) { - throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL) - } + var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, + x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, + x15 = j15, u; - try { - if (sigr.isZero() || sigs.isZero()) { - throw new Error() - } + for (var i = 0; i < 20; i += 2) { + u = x0 + x12 | 0; + x4 ^= u<<7 | u>>>(32-7); + u = x4 + x0 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x4 | 0; + x12 ^= u<<13 | u>>>(32-13); + u = x12 + x8 | 0; + x0 ^= u<<18 | u>>>(32-18); - var point = ec.recoverPubKey(message, sigObj, recovery) - return new Buffer(point.encode(true, compressed)) - } catch (err) { - throw new Error(messages.ECDSA_RECOVER_FAIL) - } -} + u = x5 + x1 | 0; + x9 ^= u<<7 | u>>>(32-7); + u = x9 + x5 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x9 | 0; + x1 ^= u<<13 | u>>>(32-13); + u = x1 + x13 | 0; + x5 ^= u<<18 | u>>>(32-18); -/** - * @param {Buffer} publicKey - * @param {Buffer} privateKey - * @return {Buffer} - */ -exports.ecdh = function (publicKey, privateKey) { -} + u = x10 + x6 | 0; + x14 ^= u<<7 | u>>>(32-7); + u = x14 + x10 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x14 | 0; + x6 ^= u<<13 | u>>>(32-13); + u = x6 + x2 | 0; + x10 ^= u<<18 | u>>>(32-18); -}).call(this,require("buffer").Buffer) -},{"../messages.json":393,"bn.js":385,"buffer":99,"elliptic":394}],392:[function(require,module,exports){ -(function (Buffer){ -'use strict' + u = x15 + x11 | 0; + x3 ^= u<<7 | u>>>(32-7); + u = x3 + x15 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x3 | 0; + x11 ^= u<<13 | u>>>(32-13); + u = x11 + x7 | 0; + x15 ^= u<<18 | u>>>(32-18); -var assert = require('./assert') -var messages = require('./messages.json') + u = x0 + x3 | 0; + x1 ^= u<<7 | u>>>(32-7); + u = x1 + x0 | 0; + x2 ^= u<<9 | u>>>(32-9); + u = x2 + x1 | 0; + x3 ^= u<<13 | u>>>(32-13); + u = x3 + x2 | 0; + x0 ^= u<<18 | u>>>(32-18); -var EC_PRIVKEY_EXPORT_DER_COMPRESSED_BEGIN = new Buffer( - '3081d30201010420', 'hex') -var EC_PRIVKEY_EXPORT_DER_COMPRESSED_MIDDLE = new Buffer( - 'a08185308182020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a124032200', 'hex') -var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_BEGIN = new Buffer( - '308201130201010420', 'hex') -var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_MIDDLE = new Buffer( - 'a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a144034200', 'hex') + u = x5 + x4 | 0; + x6 ^= u<<7 | u>>>(32-7); + u = x6 + x5 | 0; + x7 ^= u<<9 | u>>>(32-9); + u = x7 + x6 | 0; + x4 ^= u<<13 | u>>>(32-13); + u = x4 + x7 | 0; + x5 ^= u<<18 | u>>>(32-18); -/** - * @param {*} value - * @param {boolean} defaultValue - * @return {boolean} - */ -function initCompressedValue (value, defaultValue) { - if (value === undefined) { - return defaultValue + u = x10 + x9 | 0; + x11 ^= u<<7 | u>>>(32-7); + u = x11 + x10 | 0; + x8 ^= u<<9 | u>>>(32-9); + u = x8 + x11 | 0; + x9 ^= u<<13 | u>>>(32-13); + u = x9 + x8 | 0; + x10 ^= u<<18 | u>>>(32-18); + + u = x15 + x14 | 0; + x12 ^= u<<7 | u>>>(32-7); + u = x12 + x15 | 0; + x13 ^= u<<9 | u>>>(32-9); + u = x13 + x12 | 0; + x14 ^= u<<13 | u>>>(32-13); + u = x14 + x13 | 0; + x15 ^= u<<18 | u>>>(32-18); } - assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID) - return value -} + o[ 0] = x0 >>> 0 & 0xff; + o[ 1] = x0 >>> 8 & 0xff; + o[ 2] = x0 >>> 16 & 0xff; + o[ 3] = x0 >>> 24 & 0xff; -/** - * @param {Object} o - * @param {Buffer} o.sig - * @param {number} o.idx - * @return {?Buffer} - */ -function parseScalar (o) { - if (o.sig[o.idx++] !== 0x02) { - return null - } + o[ 4] = x5 >>> 0 & 0xff; + o[ 5] = x5 >>> 8 & 0xff; + o[ 6] = x5 >>> 16 & 0xff; + o[ 7] = x5 >>> 24 & 0xff; - var rlen = o.sig[o.idx++] - if (rlen === 0 || rlen > 33 || - (rlen > 1 && - (o.sig[o.idx] === 0x00 && o.sig[o.idx + 1] < 0x80) || - (o.sig[o.idx] === 0xff && o.sig[o.idx + 1] >= 0x80))) { - return null - } + o[ 8] = x10 >>> 0 & 0xff; + o[ 9] = x10 >>> 8 & 0xff; + o[10] = x10 >>> 16 & 0xff; + o[11] = x10 >>> 24 & 0xff; - if (o.sig[o.idx] === 0 && rlen === 33) { - o.idx += 1 - rlen -= 1 - } + o[12] = x15 >>> 0 & 0xff; + o[13] = x15 >>> 8 & 0xff; + o[14] = x15 >>> 16 & 0xff; + o[15] = x15 >>> 24 & 0xff; - o.idx += rlen + o[16] = x6 >>> 0 & 0xff; + o[17] = x6 >>> 8 & 0xff; + o[18] = x6 >>> 16 & 0xff; + o[19] = x6 >>> 24 & 0xff; - var result = new Buffer(32) - result.fill(0) + o[20] = x7 >>> 0 & 0xff; + o[21] = x7 >>> 8 & 0xff; + o[22] = x7 >>> 16 & 0xff; + o[23] = x7 >>> 24 & 0xff; - if (rlen <= 32) { - o.sig.slice(o.idx - rlen, o.idx).copy(result, 32 - rlen) - } + o[24] = x8 >>> 0 & 0xff; + o[25] = x8 >>> 8 & 0xff; + o[26] = x8 >>> 16 & 0xff; + o[27] = x8 >>> 24 & 0xff; - return result + o[28] = x9 >>> 0 & 0xff; + o[29] = x9 >>> 8 & 0xff; + o[30] = x9 >>> 16 & 0xff; + o[31] = x9 >>> 24 & 0xff; } -/** - * @param {Object} secp256k1 - * @return {Object} - */ -module.exports = function (secp256k1) { - return { - /** - * @param {Buffer} privateKey - * @return {boolean} - */ - privateKeyVerify: function (privateKey) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey) - }, - - /** - * @param {Buffer} privateKey - * @param {boolean} [compressed=true] - * @return {Buffer} - */ - privateKeyExport: function (privateKey, compressed) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) +function crypto_core_salsa20(out,inp,k,c) { + core_salsa20(out,inp,k,c); +} - compressed = initCompressedValue(compressed, true) +function crypto_core_hsalsa20(out,inp,k,c) { + core_hsalsa20(out,inp,k,c); +} - var publicKey = secp256k1.privateKeyExport(privateKey, compressed) +var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); + // "expand 32-byte k" - var result = new Buffer(compressed ? 214 : 279) - var targetStart = 0 - if (compressed) { - EC_PRIVKEY_EXPORT_DER_COMPRESSED_BEGIN.copy(result, targetStart) - targetStart += EC_PRIVKEY_EXPORT_DER_COMPRESSED_BEGIN.length +function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + mpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; + } + return 0; +} - privateKey.copy(result, targetStart) - targetStart += privateKey.length +function crypto_stream_salsa20(c,cpos,b,n,k) { + var z = new Uint8Array(16), x = new Uint8Array(64); + var u, i; + for (i = 0; i < 16; i++) z[i] = 0; + for (i = 0; i < 8; i++) z[i] = n[i]; + while (b >= 64) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < 64; i++) c[cpos+i] = x[i]; + u = 1; + for (i = 8; i < 16; i++) { + u = u + (z[i] & 0xff) | 0; + z[i] = u & 0xff; + u >>>= 8; + } + b -= 64; + cpos += 64; + } + if (b > 0) { + crypto_core_salsa20(x,z,k,sigma); + for (i = 0; i < b; i++) c[cpos+i] = x[i]; + } + return 0; +} - EC_PRIVKEY_EXPORT_DER_COMPRESSED_MIDDLE.copy(result, targetStart) - targetStart += EC_PRIVKEY_EXPORT_DER_COMPRESSED_MIDDLE.length +function crypto_stream(c,cpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20(c,cpos,d,sn,s); +} - publicKey.copy(result, targetStart) - } else { - EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_BEGIN.copy(result, targetStart) - targetStart += EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_BEGIN.length +function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { + var s = new Uint8Array(32); + crypto_core_hsalsa20(s,n,k,sigma); + var sn = new Uint8Array(8); + for (var i = 0; i < 8; i++) sn[i] = n[i+16]; + return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); +} - privateKey.copy(result, targetStart) - targetStart += privateKey.length +/* +* Port of Andrew Moon's Poly1305-donna-16. Public domain. +* https://github.com/floodyberry/poly1305-donna +*/ - EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_MIDDLE.copy(result, targetStart) - targetStart += EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED_MIDDLE.length +var poly1305 = function(key) { + this.buffer = new Uint8Array(16); + this.r = new Uint16Array(10); + this.h = new Uint16Array(10); + this.pad = new Uint16Array(8); + this.leftover = 0; + this.fin = 0; - publicKey.copy(result, targetStart) - } + var t0, t1, t2, t3, t4, t5, t6, t7; - return result - }, + t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; + t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; + t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; + this.r[5] = ((t4 >>> 1)) & 0x1ffe; + t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; + t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + this.r[9] = ((t7 >>> 5)) & 0x007f; - /** - * @param {Buffer} privateKey - * @return {Buffer} - */ - privateKeyImport: function (privateKey) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) + this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; + this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; + this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; + this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; + this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; + this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; + this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; + this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; +}; - do { - var length = privateKey.length +poly1305.prototype.blocks = function(m, mpos, bytes) { + var hibit = this.fin ? 0 : (1 << 11); + var t0, t1, t2, t3, t4, t5, t6, t7, c; + var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; - // sequence header - var index = 0 - if (length < index + 1 || privateKey[index] !== 0x30) { - break - } - index += 1 + var h0 = this.h[0], + h1 = this.h[1], + h2 = this.h[2], + h3 = this.h[3], + h4 = this.h[4], + h5 = this.h[5], + h6 = this.h[6], + h7 = this.h[7], + h8 = this.h[8], + h9 = this.h[9]; - // sequence length constructor - if (length < index + 1 || !(privateKey[index] & 0x80)) { - break - } + var r0 = this.r[0], + r1 = this.r[1], + r2 = this.r[2], + r3 = this.r[3], + r4 = this.r[4], + r5 = this.r[5], + r6 = this.r[6], + r7 = this.r[7], + r8 = this.r[8], + r9 = this.r[9]; - var lenb = privateKey[index] & 0x7f - index += 1 - if (lenb < 1 || lenb > 2) { - break - } - if (length < index + lenb) { - break - } + while (bytes >= 16) { + t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; + t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; + t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; + t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; + t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; + h5 += ((t4 >>> 1)) & 0x1fff; + t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; + t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; + t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; + h9 += ((t7 >>> 5)) | hibit; - // sequence length - var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0) - index += lenb - if (length < index + len) { - break - } + c = 0; - // sequence element 0: version number (=1) - if (length < index + 3 || - privateKey[index] !== 0x02 || - privateKey[index + 1] !== 0x01 || - privateKey[index + 2] !== 0x01) { - break - } - index += 3 + d0 = c; + d0 += h0 * r0; + d0 += h1 * (5 * r9); + d0 += h2 * (5 * r8); + d0 += h3 * (5 * r7); + d0 += h4 * (5 * r6); + c = (d0 >>> 13); d0 &= 0x1fff; + d0 += h5 * (5 * r5); + d0 += h6 * (5 * r4); + d0 += h7 * (5 * r3); + d0 += h8 * (5 * r2); + d0 += h9 * (5 * r1); + c += (d0 >>> 13); d0 &= 0x1fff; - // sequence element 1: octet string, up to 32 bytes - if (length < index + 2 || - privateKey[index] !== 0x04 || - privateKey[index + 1] > 0x20 || - length < index + 2 + privateKey[index + 1]) { - break - } + d1 = c; + d1 += h0 * r1; + d1 += h1 * r0; + d1 += h2 * (5 * r9); + d1 += h3 * (5 * r8); + d1 += h4 * (5 * r7); + c = (d1 >>> 13); d1 &= 0x1fff; + d1 += h5 * (5 * r6); + d1 += h6 * (5 * r5); + d1 += h7 * (5 * r4); + d1 += h8 * (5 * r3); + d1 += h9 * (5 * r2); + c += (d1 >>> 13); d1 &= 0x1fff; - privateKey = privateKey.slice(index + 2, index + 2 + privateKey[index + 1]) - if (privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) { - return privateKey - } - } while (false) + d2 = c; + d2 += h0 * r2; + d2 += h1 * r1; + d2 += h2 * r0; + d2 += h3 * (5 * r9); + d2 += h4 * (5 * r8); + c = (d2 >>> 13); d2 &= 0x1fff; + d2 += h5 * (5 * r7); + d2 += h6 * (5 * r6); + d2 += h7 * (5 * r5); + d2 += h8 * (5 * r4); + d2 += h9 * (5 * r3); + c += (d2 >>> 13); d2 &= 0x1fff; - throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL) - }, + d3 = c; + d3 += h0 * r3; + d3 += h1 * r2; + d3 += h2 * r1; + d3 += h3 * r0; + d3 += h4 * (5 * r9); + c = (d3 >>> 13); d3 &= 0x1fff; + d3 += h5 * (5 * r8); + d3 += h6 * (5 * r7); + d3 += h7 * (5 * r6); + d3 += h8 * (5 * r5); + d3 += h9 * (5 * r4); + c += (d3 >>> 13); d3 &= 0x1fff; - /** - * @param {Buffer} privateKey - * @param {Buffer} tweak - * @return {Buffer} - */ - privateKeyTweakAdd: function (privateKey, tweak) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) + d4 = c; + d4 += h0 * r4; + d4 += h1 * r3; + d4 += h2 * r2; + d4 += h3 * r1; + d4 += h4 * r0; + c = (d4 >>> 13); d4 &= 0x1fff; + d4 += h5 * (5 * r9); + d4 += h6 * (5 * r8); + d4 += h7 * (5 * r7); + d4 += h8 * (5 * r6); + d4 += h9 * (5 * r5); + c += (d4 >>> 13); d4 &= 0x1fff; - assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) - assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) + d5 = c; + d5 += h0 * r5; + d5 += h1 * r4; + d5 += h2 * r3; + d5 += h3 * r2; + d5 += h4 * r1; + c = (d5 >>> 13); d5 &= 0x1fff; + d5 += h5 * r0; + d5 += h6 * (5 * r9); + d5 += h7 * (5 * r8); + d5 += h8 * (5 * r7); + d5 += h9 * (5 * r6); + c += (d5 >>> 13); d5 &= 0x1fff; - return secp256k1.privateKeyTweakAdd(privateKey, tweak) - }, + d6 = c; + d6 += h0 * r6; + d6 += h1 * r5; + d6 += h2 * r4; + d6 += h3 * r3; + d6 += h4 * r2; + c = (d6 >>> 13); d6 &= 0x1fff; + d6 += h5 * r1; + d6 += h6 * r0; + d6 += h7 * (5 * r9); + d6 += h8 * (5 * r8); + d6 += h9 * (5 * r7); + c += (d6 >>> 13); d6 &= 0x1fff; - /** - * @param {Buffer} privateKey - * @param {Buffer} tweak - * @return {Buffer} - */ - privateKeyTweakMul: function (privateKey, tweak) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) + d7 = c; + d7 += h0 * r7; + d7 += h1 * r6; + d7 += h2 * r5; + d7 += h3 * r4; + d7 += h4 * r3; + c = (d7 >>> 13); d7 &= 0x1fff; + d7 += h5 * r2; + d7 += h6 * r1; + d7 += h7 * r0; + d7 += h8 * (5 * r9); + d7 += h9 * (5 * r8); + c += (d7 >>> 13); d7 &= 0x1fff; - assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) - assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) + d8 = c; + d8 += h0 * r8; + d8 += h1 * r7; + d8 += h2 * r6; + d8 += h3 * r5; + d8 += h4 * r4; + c = (d8 >>> 13); d8 &= 0x1fff; + d8 += h5 * r3; + d8 += h6 * r2; + d8 += h7 * r1; + d8 += h8 * r0; + d8 += h9 * (5 * r9); + c += (d8 >>> 13); d8 &= 0x1fff; - return secp256k1.privateKeyTweakMul(privateKey, tweak) - }, + d9 = c; + d9 += h0 * r9; + d9 += h1 * r8; + d9 += h2 * r7; + d9 += h3 * r6; + d9 += h4 * r5; + c = (d9 >>> 13); d9 &= 0x1fff; + d9 += h5 * r4; + d9 += h6 * r3; + d9 += h7 * r2; + d9 += h8 * r1; + d9 += h9 * r0; + c += (d9 >>> 13); d9 &= 0x1fff; - /** - * @param {Buffer} privateKey - * @param {boolean} [compressed=true] - * @return {Buffer} - */ - publicKeyCreate: function (privateKey, compressed) { - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) + c = (((c << 2) + c)) | 0; + c = (c + d0) | 0; + d0 = c & 0x1fff; + c = (c >>> 13); + d1 += c; - compressed = initCompressedValue(compressed, true) + h0 = d0; + h1 = d1; + h2 = d2; + h3 = d3; + h4 = d4; + h5 = d5; + h6 = d6; + h7 = d7; + h8 = d8; + h9 = d9; - return secp256k1.publicKeyCreate(privateKey, compressed) - }, + mpos += 16; + bytes -= 16; + } + this.h[0] = h0; + this.h[1] = h1; + this.h[2] = h2; + this.h[3] = h3; + this.h[4] = h4; + this.h[5] = h5; + this.h[6] = h6; + this.h[7] = h7; + this.h[8] = h8; + this.h[9] = h9; +}; - /** - * @param {Buffer} publicKey - * @param {boolean} [compressed=true] - * @return {Buffer} - */ - publicKeyConvert: function (publicKey, compressed) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) +poly1305.prototype.finish = function(mac, macpos) { + var g = new Uint16Array(10); + var c, mask, f, i; - compressed = initCompressedValue(compressed, true) + if (this.leftover) { + i = this.leftover; + this.buffer[i++] = 1; + for (; i < 16; i++) this.buffer[i] = 0; + this.fin = 1; + this.blocks(this.buffer, 0, 16); + } - return secp256k1.publicKeyConvert(publicKey, compressed) - }, + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + for (i = 2; i < 10; i++) { + this.h[i] += c; + c = this.h[i] >>> 13; + this.h[i] &= 0x1fff; + } + this.h[0] += (c * 5); + c = this.h[0] >>> 13; + this.h[0] &= 0x1fff; + this.h[1] += c; + c = this.h[1] >>> 13; + this.h[1] &= 0x1fff; + this.h[2] += c; - /** - * @param {Buffer} publicKey - * @return {boolean} - */ - publicKeyVerify: function (publicKey) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - return secp256k1.publicKeyVerify(publicKey) - }, + g[0] = this.h[0] + 5; + c = g[0] >>> 13; + g[0] &= 0x1fff; + for (i = 1; i < 10; i++) { + g[i] = this.h[i] + c; + c = g[i] >>> 13; + g[i] &= 0x1fff; + } + g[9] -= (1 << 13); - /** - * @param {Buffer} publicKey - * @param {Buffer} tweak - * @param {boolean} [compressed=true] - * @return {Buffer} - */ - publicKeyTweakAdd: function (publicKey, tweak, compressed) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) + mask = (g[9] >>> ((2 * 8) - 1)) - 1; + for (i = 0; i < 10; i++) g[i] &= mask; + mask = ~mask; + for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; - assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) - assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) + this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; + this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; + this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; + this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; + this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; + this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; + this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; + this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; - compressed = initCompressedValue(compressed, true) + f = this.h[0] + this.pad[0]; + this.h[0] = f & 0xffff; + for (i = 1; i < 8; i++) { + f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; + this.h[i] = f & 0xffff; + } - return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed) - }, + mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; + mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; + mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; + mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; + mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; + mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; + mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; + mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; + mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; + mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; + mac[macpos+10] = (this.h[5] >>> 0) & 0xff; + mac[macpos+11] = (this.h[5] >>> 8) & 0xff; + mac[macpos+12] = (this.h[6] >>> 0) & 0xff; + mac[macpos+13] = (this.h[6] >>> 8) & 0xff; + mac[macpos+14] = (this.h[7] >>> 0) & 0xff; + mac[macpos+15] = (this.h[7] >>> 8) & 0xff; +}; - /** - * @param {Buffer} publicKey - * @param {Buffer} tweak - * @param {boolean} [compressed=true] - * @return {Buffer} - */ - publicKeyTweakMul: function (publicKey, tweak, compressed) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) +poly1305.prototype.update = function(m, mpos, bytes) { + var i, want; - assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID) - assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID) + if (this.leftover) { + want = (16 - this.leftover); + if (want > bytes) + want = bytes; + for (i = 0; i < want; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + bytes -= want; + mpos += want; + this.leftover += want; + if (this.leftover < 16) + return; + this.blocks(this.buffer, 0, 16); + this.leftover = 0; + } - compressed = initCompressedValue(compressed, true) + if (bytes >= 16) { + want = bytes - (bytes % 16); + this.blocks(m, mpos, want); + mpos += want; + bytes -= want; + } - return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed) - }, + if (bytes) { + for (i = 0; i < bytes; i++) + this.buffer[this.leftover + i] = m[mpos+i]; + this.leftover += bytes; + } +}; - /** - * @param {Buffer[]} publicKeys - * @param {boolean} [compressed=true] - * @return {Buffer} - */ - publicKeyCombine: function (publicKeys, compressed) { - assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID) - assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID) - for (var i = 0; i < publicKeys.length; ++i) { - assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) - } +function crypto_onetimeauth(out, outpos, m, mpos, n, k) { + var s = new poly1305(k); + s.update(m, mpos, n); + s.finish(out, outpos); + return 0; +} - compressed = initCompressedValue(compressed, true) +function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { + var x = new Uint8Array(16); + crypto_onetimeauth(x,0,m,mpos,n,k); + return crypto_verify_16(h,hpos,x,0); +} - return secp256k1.publicKeyCombine(publicKeys, compressed) - }, +function crypto_secretbox(c,m,d,n,k) { + var i; + if (d < 32) return -1; + crypto_stream_xor(c,0,m,0,d,n,k); + crypto_onetimeauth(c, 16, c, 32, d - 32, c); + for (i = 0; i < 16; i++) c[i] = 0; + return 0; +} - /** - * @param {Buffer} signature - * @return {Buffer} - */ - signatureNormalize: function (signature) { - assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) +function crypto_secretbox_open(m,c,d,n,k) { + var i; + var x = new Uint8Array(32); + if (d < 32) return -1; + crypto_stream(x,0,32,n,k); + if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; + crypto_stream_xor(m,0,c,0,d,n,k); + for (i = 0; i < 32; i++) m[i] = 0; + return 0; +} - return secp256k1.signatureNormalize(signature) - }, +function set25519(r, a) { + var i; + for (i = 0; i < 16; i++) r[i] = a[i]|0; +} - /** - * @param {Buffer} signature - * @return {Buffer} - */ - signatureExport: function (signature) { - assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) +function car25519(o) { + var i, v, c = 1; + for (i = 0; i < 16; i++) { + v = o[i] + c + 65535; + c = Math.floor(v / 65536); + o[i] = v - c * 65536; + } + o[0] += c-1 + 37 * (c-1); +} - var sigObj = secp256k1.signatureExport(signature) - var r = Buffer.concat([new Buffer([0]), sigObj.r]) - var s = Buffer.concat([new Buffer([0]), sigObj.s]) +function sel25519(p, q, b) { + var t, c = ~(b-1); + for (var i = 0; i < 16; i++) { + t = c & (p[i] ^ q[i]); + p[i] ^= t; + q[i] ^= t; + } +} - var lenR = 33 - var posR = 0 - while (lenR > 1 && r[posR] === 0x00 && r[posR + 1] < 0x80) { - --lenR - ++posR - } +function pack25519(o, n) { + var i, j, b; + var m = gf(), t = gf(); + for (i = 0; i < 16; i++) t[i] = n[i]; + car25519(t); + car25519(t); + car25519(t); + for (j = 0; j < 2; j++) { + m[0] = t[0] - 0xffed; + for (i = 1; i < 15; i++) { + m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); + m[i-1] &= 0xffff; + } + m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); + b = (m[15]>>16) & 1; + m[14] &= 0xffff; + sel25519(t, m, 1-b); + } + for (i = 0; i < 16; i++) { + o[2*i] = t[i] & 0xff; + o[2*i+1] = t[i]>>8; + } +} - var lenS = 33 - var posS = 0 - while (lenS > 1 && s[posS] === 0x00 && s[posS + 1] < 0x80) { - --lenS - ++posS - } +function neq25519(a, b) { + var c = new Uint8Array(32), d = new Uint8Array(32); + pack25519(c, a); + pack25519(d, b); + return crypto_verify_32(c, 0, d, 0); +} - var result = new Buffer(lenR + lenS + 6) - result[0] = 0x30 - result[1] = 4 + lenR + lenS - result[2] = 0x02 - result[3] = lenR - r.copy(result, 4, posR) - result[lenR + 4] = 0x02 - result[lenR + 5] = lenS - s.copy(result, lenR + 6, posS) +function par25519(a) { + var d = new Uint8Array(32); + pack25519(d, a); + return d[0] & 1; +} - return result - }, +function unpack25519(o, n) { + var i; + for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); + o[15] &= 0x7fff; +} - /** - * @param {Buffer} signature - * @return {Buffer} - */ - signatureImport: function (signature) { - assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isLengthGTZero(signature, messages.ECDSA_SIGNATURE_LENGTH_INVALID) +function A(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; +} - do { - var o = {sig: signature, idx: 0} - if ((o.sig.length < o.idx || o.sig[o.idx] !== 0x30) || - (o.sig.length < o.idx + 1 || o.sig[o.idx + 1] > 0x80) || - o.idx + o.sig[o.idx + 1] + 2 !== o.sig.length) { - break - } - o.idx += 2 +function Z(o, a, b) { + for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; +} - var r = parseScalar(o) - if (r === null) { - break - } +function M(o, a, b) { + var v, c, + t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, + t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, + t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, + t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, + b0 = b[0], + b1 = b[1], + b2 = b[2], + b3 = b[3], + b4 = b[4], + b5 = b[5], + b6 = b[6], + b7 = b[7], + b8 = b[8], + b9 = b[9], + b10 = b[10], + b11 = b[11], + b12 = b[12], + b13 = b[13], + b14 = b[14], + b15 = b[15]; - var s = parseScalar(o) - if (s === null) { - break - } + v = a[0]; + t0 += v * b0; + t1 += v * b1; + t2 += v * b2; + t3 += v * b3; + t4 += v * b4; + t5 += v * b5; + t6 += v * b6; + t7 += v * b7; + t8 += v * b8; + t9 += v * b9; + t10 += v * b10; + t11 += v * b11; + t12 += v * b12; + t13 += v * b13; + t14 += v * b14; + t15 += v * b15; + v = a[1]; + t1 += v * b0; + t2 += v * b1; + t3 += v * b2; + t4 += v * b3; + t5 += v * b4; + t6 += v * b5; + t7 += v * b6; + t8 += v * b7; + t9 += v * b8; + t10 += v * b9; + t11 += v * b10; + t12 += v * b11; + t13 += v * b12; + t14 += v * b13; + t15 += v * b14; + t16 += v * b15; + v = a[2]; + t2 += v * b0; + t3 += v * b1; + t4 += v * b2; + t5 += v * b3; + t6 += v * b4; + t7 += v * b5; + t8 += v * b6; + t9 += v * b7; + t10 += v * b8; + t11 += v * b9; + t12 += v * b10; + t13 += v * b11; + t14 += v * b12; + t15 += v * b13; + t16 += v * b14; + t17 += v * b15; + v = a[3]; + t3 += v * b0; + t4 += v * b1; + t5 += v * b2; + t6 += v * b3; + t7 += v * b4; + t8 += v * b5; + t9 += v * b6; + t10 += v * b7; + t11 += v * b8; + t12 += v * b9; + t13 += v * b10; + t14 += v * b11; + t15 += v * b12; + t16 += v * b13; + t17 += v * b14; + t18 += v * b15; + v = a[4]; + t4 += v * b0; + t5 += v * b1; + t6 += v * b2; + t7 += v * b3; + t8 += v * b4; + t9 += v * b5; + t10 += v * b6; + t11 += v * b7; + t12 += v * b8; + t13 += v * b9; + t14 += v * b10; + t15 += v * b11; + t16 += v * b12; + t17 += v * b13; + t18 += v * b14; + t19 += v * b15; + v = a[5]; + t5 += v * b0; + t6 += v * b1; + t7 += v * b2; + t8 += v * b3; + t9 += v * b4; + t10 += v * b5; + t11 += v * b6; + t12 += v * b7; + t13 += v * b8; + t14 += v * b9; + t15 += v * b10; + t16 += v * b11; + t17 += v * b12; + t18 += v * b13; + t19 += v * b14; + t20 += v * b15; + v = a[6]; + t6 += v * b0; + t7 += v * b1; + t8 += v * b2; + t9 += v * b3; + t10 += v * b4; + t11 += v * b5; + t12 += v * b6; + t13 += v * b7; + t14 += v * b8; + t15 += v * b9; + t16 += v * b10; + t17 += v * b11; + t18 += v * b12; + t19 += v * b13; + t20 += v * b14; + t21 += v * b15; + v = a[7]; + t7 += v * b0; + t8 += v * b1; + t9 += v * b2; + t10 += v * b3; + t11 += v * b4; + t12 += v * b5; + t13 += v * b6; + t14 += v * b7; + t15 += v * b8; + t16 += v * b9; + t17 += v * b10; + t18 += v * b11; + t19 += v * b12; + t20 += v * b13; + t21 += v * b14; + t22 += v * b15; + v = a[8]; + t8 += v * b0; + t9 += v * b1; + t10 += v * b2; + t11 += v * b3; + t12 += v * b4; + t13 += v * b5; + t14 += v * b6; + t15 += v * b7; + t16 += v * b8; + t17 += v * b9; + t18 += v * b10; + t19 += v * b11; + t20 += v * b12; + t21 += v * b13; + t22 += v * b14; + t23 += v * b15; + v = a[9]; + t9 += v * b0; + t10 += v * b1; + t11 += v * b2; + t12 += v * b3; + t13 += v * b4; + t14 += v * b5; + t15 += v * b6; + t16 += v * b7; + t17 += v * b8; + t18 += v * b9; + t19 += v * b10; + t20 += v * b11; + t21 += v * b12; + t22 += v * b13; + t23 += v * b14; + t24 += v * b15; + v = a[10]; + t10 += v * b0; + t11 += v * b1; + t12 += v * b2; + t13 += v * b3; + t14 += v * b4; + t15 += v * b5; + t16 += v * b6; + t17 += v * b7; + t18 += v * b8; + t19 += v * b9; + t20 += v * b10; + t21 += v * b11; + t22 += v * b12; + t23 += v * b13; + t24 += v * b14; + t25 += v * b15; + v = a[11]; + t11 += v * b0; + t12 += v * b1; + t13 += v * b2; + t14 += v * b3; + t15 += v * b4; + t16 += v * b5; + t17 += v * b6; + t18 += v * b7; + t19 += v * b8; + t20 += v * b9; + t21 += v * b10; + t22 += v * b11; + t23 += v * b12; + t24 += v * b13; + t25 += v * b14; + t26 += v * b15; + v = a[12]; + t12 += v * b0; + t13 += v * b1; + t14 += v * b2; + t15 += v * b3; + t16 += v * b4; + t17 += v * b5; + t18 += v * b6; + t19 += v * b7; + t20 += v * b8; + t21 += v * b9; + t22 += v * b10; + t23 += v * b11; + t24 += v * b12; + t25 += v * b13; + t26 += v * b14; + t27 += v * b15; + v = a[13]; + t13 += v * b0; + t14 += v * b1; + t15 += v * b2; + t16 += v * b3; + t17 += v * b4; + t18 += v * b5; + t19 += v * b6; + t20 += v * b7; + t21 += v * b8; + t22 += v * b9; + t23 += v * b10; + t24 += v * b11; + t25 += v * b12; + t26 += v * b13; + t27 += v * b14; + t28 += v * b15; + v = a[14]; + t14 += v * b0; + t15 += v * b1; + t16 += v * b2; + t17 += v * b3; + t18 += v * b4; + t19 += v * b5; + t20 += v * b6; + t21 += v * b7; + t22 += v * b8; + t23 += v * b9; + t24 += v * b10; + t25 += v * b11; + t26 += v * b12; + t27 += v * b13; + t28 += v * b14; + t29 += v * b15; + v = a[15]; + t15 += v * b0; + t16 += v * b1; + t17 += v * b2; + t18 += v * b3; + t19 += v * b4; + t20 += v * b5; + t21 += v * b6; + t22 += v * b7; + t23 += v * b8; + t24 += v * b9; + t25 += v * b10; + t26 += v * b11; + t27 += v * b12; + t28 += v * b13; + t29 += v * b14; + t30 += v * b15; - return secp256k1.signatureImport({r: r, s: s}) - } while (false) + t0 += 38 * t16; + t1 += 38 * t17; + t2 += 38 * t18; + t3 += 38 * t19; + t4 += 38 * t20; + t5 += 38 * t21; + t6 += 38 * t22; + t7 += 38 * t23; + t8 += 38 * t24; + t9 += 38 * t25; + t10 += 38 * t26; + t11 += 38 * t27; + t12 += 38 * t28; + t13 += 38 * t29; + t14 += 38 * t30; + // t15 left as is - throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL) - }, + // first car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); - /** - * @callback sign~noncefn - * @param {Buffer} message - * @param {Buffer} privateKey - * @param {?Buffer} algo - * @param {?Buffer} data - * @param {number} attempt - * @return {Buffer} - */ + // second car + c = 1; + v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; + v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; + v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; + v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; + v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; + v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; + v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; + v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; + v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; + v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; + v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; + v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; + v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; + v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; + v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; + v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; + t0 += c-1 + 37 * (c-1); - /** - * @typedef {Object} sign~options - * @param {Buffer} [data] - * @param {sign~noncefn} [noncefn=nonce_function_rfc6979] - */ + o[ 0] = t0; + o[ 1] = t1; + o[ 2] = t2; + o[ 3] = t3; + o[ 4] = t4; + o[ 5] = t5; + o[ 6] = t6; + o[ 7] = t7; + o[ 8] = t8; + o[ 9] = t9; + o[10] = t10; + o[11] = t11; + o[12] = t12; + o[13] = t13; + o[14] = t14; + o[15] = t15; +} - /** - * @param {Buffer} message - * @param {Buffer} privateKey - * @param {sign~options} [options] - * @return {{signature: Buffer, recovery: number}} - */ - sign: function (message, privateKey, options) { - assert.isBuffer(message, messages.MSG32_TYPE_INVALID) - assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID) +function S(o, a) { + M(o, a, a); +} - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) +function inv25519(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 253; a >= 0; a--) { + S(c, c); + if(a !== 2 && a !== 4) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} - var data = null - var noncefn = null - if (options !== undefined) { - assert.isObject(options, messages.OPTIONS_TYPE_INVALID) +function pow2523(o, i) { + var c = gf(); + var a; + for (a = 0; a < 16; a++) c[a] = i[a]; + for (a = 250; a >= 0; a--) { + S(c, c); + if(a !== 1) M(c, c, i); + } + for (a = 0; a < 16; a++) o[a] = c[a]; +} - if (options.data !== undefined) { - assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID) - assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID) - data = options.data - } +function crypto_scalarmult(q, n, p) { + var z = new Uint8Array(32); + var x = new Float64Array(80), r, i; + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(); + for (i = 0; i < 31; i++) z[i] = n[i]; + z[31]=(n[31]&127)|64; + z[0]&=248; + unpack25519(x,p); + for (i = 0; i < 16; i++) { + b[i]=x[i]; + d[i]=a[i]=c[i]=0; + } + a[0]=d[0]=1; + for (i=254; i>=0; --i) { + r=(z[i>>>3]>>>(i&7))&1; + sel25519(a,b,r); + sel25519(c,d,r); + A(e,a,c); + Z(a,a,c); + A(c,b,d); + Z(b,b,d); + S(d,e); + S(f,a); + M(a,c,a); + M(c,b,e); + A(e,a,c); + Z(a,a,c); + S(b,a); + Z(c,d,f); + M(a,c,_121665); + A(a,a,d); + M(c,c,a); + M(a,d,f); + M(d,b,x); + S(b,e); + sel25519(a,b,r); + sel25519(c,d,r); + } + for (i = 0; i < 16; i++) { + x[i+16]=a[i]; + x[i+32]=c[i]; + x[i+48]=b[i]; + x[i+64]=d[i]; + } + var x32 = x.subarray(32); + var x16 = x.subarray(16); + inv25519(x32,x32); + M(x16,x16,x32); + pack25519(q,x16); + return 0; +} - if (options.noncefn !== undefined) { - assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID) - noncefn = options.noncefn - } - } +function crypto_scalarmult_base(q, n) { + return crypto_scalarmult(q, n, _9); +} - return secp256k1.sign(message, privateKey, noncefn, data) - }, +function crypto_box_keypair(y, x) { + randombytes(x, 32); + return crypto_scalarmult_base(y, x); +} - /** - * @param {Buffer} message - * @param {Buffer} signature - * @param {Buffer} publicKey - * @return {boolean} - */ - verify: function (message, signature, publicKey) { - assert.isBuffer(message, messages.MSG32_TYPE_INVALID) - assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID) +function crypto_box_beforenm(k, y, x) { + var s = new Uint8Array(32); + crypto_scalarmult(s, x, y); + return crypto_core_hsalsa20(k, _0, s, sigma); +} - assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) +var crypto_box_afternm = crypto_secretbox; +var crypto_box_open_afternm = crypto_secretbox_open; - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) +function crypto_box(c, m, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_afternm(c, m, d, n, k); +} - return secp256k1.verify(message, signature, publicKey) - }, +function crypto_box_open(m, c, d, n, y, x) { + var k = new Uint8Array(32); + crypto_box_beforenm(k, y, x); + return crypto_box_open_afternm(m, c, d, n, k); +} - /** - * @param {Buffer} message - * @param {Buffer} signature - * @param {number} recovery - * @param {boolean} [compressed=true] - * @return {Buffer} - */ - recover: function (message, signature, recovery, compressed) { - assert.isBuffer(message, messages.MSG32_TYPE_INVALID) - assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID) +var K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, + 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, + 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, + 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, + 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, + 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, + 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, + 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, + 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, + 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, + 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, + 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, + 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, + 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, + 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, + 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, + 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, + 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, + 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, + 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, + 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, + 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, + 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, + 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, + 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, + 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, + 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 +]; - assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID) - assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID) +function crypto_hashblocks_hl(hh, hl, m, n) { + var wh = new Int32Array(16), wl = new Int32Array(16), + bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, + bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, + th, tl, i, j, h, l, a, b, c, d; - assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID) - assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID) + var ah0 = hh[0], + ah1 = hh[1], + ah2 = hh[2], + ah3 = hh[3], + ah4 = hh[4], + ah5 = hh[5], + ah6 = hh[6], + ah7 = hh[7], - compressed = initCompressedValue(compressed, true) + al0 = hl[0], + al1 = hl[1], + al2 = hl[2], + al3 = hl[3], + al4 = hl[4], + al5 = hl[5], + al6 = hl[6], + al7 = hl[7]; - return secp256k1.recover(message, signature, recovery, compressed) - }, + var pos = 0; + while (n >= 128) { + for (i = 0; i < 16; i++) { + j = 8 * i + pos; + wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; + wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + } + for (i = 0; i < 80; i++) { + bh0 = ah0; + bh1 = ah1; + bh2 = ah2; + bh3 = ah3; + bh4 = ah4; + bh5 = ah5; + bh6 = ah6; + bh7 = ah7; - /** - * @param {Buffer} publicKey - * @param {Buffer} privateKey - * @param {?} options - * @return {Buffer} - */ - ecdh: function (publicKey, privateKey, options) { - assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID) - assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID) + bl0 = al0; + bl1 = al1; + bl2 = al2; + bl3 = al3; + bl4 = al4; + bl5 = al5; + bl6 = al6; + bl7 = al7; - assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID) - assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID) + // add + h = ah7; + l = al7; - if (options !== undefined) { - assert.isObject(options, messages.OPTIONS_TYPE_INVALID) - } - } - } -} + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; -}).call(this,require("buffer").Buffer) -},{"./assert":390,"./messages.json":393,"buffer":99}],393:[function(require,module,exports){ -module.exports={ - "COMPRESSED_TYPE_INVALID": "compressed should be a boolean", - "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer", - "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid", - "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid", - "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range", - "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format", - "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format", - "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array", - "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element", - "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer", - "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid", - "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid", - "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again", - "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid", - "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range", - "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid", - "ECDH_FAIL": "scalar was invalid (zero or overflow)", - "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer", - "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid", - "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature", - "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature", - "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format", - "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid", - "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature", - "MSG32_TYPE_INVALID": "message should be a Buffer", - "MSG32_LENGTH_INVALID": "message length is invalid", - "OPTIONS_TYPE_INVALID": "options should be an Object", - "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer", - "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid", - "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function", - "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number", - "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4", - "TWEAK_TYPE_INVALID": "tweak should be a Buffer", - "TWEAK_LENGTH_INVALID": "tweak length is invalid" -} + // Sigma1 + h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); + l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); -},{}],394:[function(require,module,exports){ -arguments[4][138][0].apply(exports,arguments) -},{"../package.json":418,"./elliptic/curve":397,"./elliptic/curves":400,"./elliptic/ec":401,"./elliptic/eddsa":404,"./elliptic/hmac-drbg":407,"./elliptic/utils":409,"brorand":410,"dup":138}],395:[function(require,module,exports){ -arguments[4][139][0].apply(exports,arguments) -},{"../../elliptic":394,"bn.js":385,"dup":139}],396:[function(require,module,exports){ -arguments[4][140][0].apply(exports,arguments) -},{"../../elliptic":394,"../curve":397,"bn.js":385,"dup":140,"inherits":417}],397:[function(require,module,exports){ -arguments[4][59][0].apply(exports,arguments) -},{"./base":395,"./edwards":396,"./mont":398,"./short":399,"dup":59}],398:[function(require,module,exports){ -arguments[4][142][0].apply(exports,arguments) -},{"../../elliptic":394,"../curve":397,"bn.js":385,"dup":142,"inherits":417}],399:[function(require,module,exports){ -arguments[4][143][0].apply(exports,arguments) -},{"../../elliptic":394,"../curve":397,"bn.js":385,"dup":143,"inherits":417}],400:[function(require,module,exports){ -arguments[4][144][0].apply(exports,arguments) -},{"../elliptic":394,"./precomputed/secp256k1":408,"dup":144,"hash.js":411}],401:[function(require,module,exports){ -arguments[4][145][0].apply(exports,arguments) -},{"../../elliptic":394,"./key":402,"./signature":403,"bn.js":385,"dup":145}],402:[function(require,module,exports){ -arguments[4][146][0].apply(exports,arguments) -},{"bn.js":385,"dup":146}],403:[function(require,module,exports){ -arguments[4][147][0].apply(exports,arguments) -},{"../../elliptic":394,"bn.js":385,"dup":147}],404:[function(require,module,exports){ -arguments[4][148][0].apply(exports,arguments) -},{"../../elliptic":394,"./key":405,"./signature":406,"dup":148,"hash.js":411}],405:[function(require,module,exports){ -arguments[4][149][0].apply(exports,arguments) -},{"../../elliptic":394,"dup":149}],406:[function(require,module,exports){ -arguments[4][150][0].apply(exports,arguments) -},{"../../elliptic":394,"bn.js":385,"dup":150}],407:[function(require,module,exports){ -arguments[4][66][0].apply(exports,arguments) -},{"../elliptic":394,"dup":66,"hash.js":411}],408:[function(require,module,exports){ -arguments[4][67][0].apply(exports,arguments) -},{"dup":67}],409:[function(require,module,exports){ -arguments[4][153][0].apply(exports,arguments) -},{"bn.js":385,"dup":153}],410:[function(require,module,exports){ -arguments[4][69][0].apply(exports,arguments) -},{"dup":69}],411:[function(require,module,exports){ -arguments[4][70][0].apply(exports,arguments) -},{"./hash/common":412,"./hash/hmac":413,"./hash/ripemd":414,"./hash/sha":415,"./hash/utils":416,"dup":70}],412:[function(require,module,exports){ -arguments[4][71][0].apply(exports,arguments) -},{"../hash":411,"dup":71}],413:[function(require,module,exports){ -arguments[4][72][0].apply(exports,arguments) -},{"../hash":411,"dup":72}],414:[function(require,module,exports){ -arguments[4][73][0].apply(exports,arguments) -},{"../hash":411,"dup":73}],415:[function(require,module,exports){ -arguments[4][74][0].apply(exports,arguments) -},{"../hash":411,"dup":74}],416:[function(require,module,exports){ -arguments[4][75][0].apply(exports,arguments) -},{"dup":75,"inherits":417}],417:[function(require,module,exports){ -arguments[4][77][0].apply(exports,arguments) -},{"dup":77}],418:[function(require,module,exports){ -module.exports={ - "name": "elliptic", - "version": "6.2.3", - "description": "EC cryptography", - "main": "lib/elliptic.js", - "files": [ - "lib" - ], - "scripts": { - "coverage": "npm run unit --coverage", - "coveralls": "npm run coverage && cat ./coverage/lcov.info | coveralls", - "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", - "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js", - "lint": "npm run jscs && npm run jshint", - "test": "npm run lint && npm run unit", - "unit": "istanbul test _mocha --reporter=spec test/*-test.js" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/indutny/elliptic.git" - }, - "keywords": [ - "EC", - "Elliptic", - "curve", - "Cryptography" - ], - "author": { - "name": "Fedor Indutny", - "email": "fedor@indutny.com" - }, - "license": "MIT", - "bugs": { - "url": "https://github.com/indutny/elliptic/issues" - }, - "homepage": "https://github.com/indutny/elliptic", - "devDependencies": { - "coveralls": "^2.11.3", - "istanbul": "^0.4.2", - "jscs": "^2.9.0", - "jshint": "^2.6.0", - "mocha": "^2.1.0" - }, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "inherits": "^2.0.1" - }, - "gitHead": "c32f20b22b420eb6af3c6dda28963deb7facf823", - "_id": "elliptic@6.2.3", - "_shasum": "18e46d7306b0951275a2d42063270a14b74ebe99", - "_from": "elliptic@>=6.2.3 <7.0.0", - "_npmVersion": "3.3.12", - "_nodeVersion": "5.4.1", - "_npmUser": { - "name": "indutny", - "email": "fedor@indutny.com" - }, - "dist": { - "shasum": "18e46d7306b0951275a2d42063270a14b74ebe99", - "tarball": "http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz" - }, - "maintainers": [ - { - "name": "indutny", - "email": "fedor@indutny.com" - } - ], - "directories": {}, - "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz", - "readme": "ERROR: No README data found!" -} + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; -},{}],419:[function(require,module,exports){ -(function (Buffer){ -const assert = require('assert') -/** - * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP - * This function takes in a data, convert it to buffer if not, and a length for recursion - * - * @param {Buffer,String,Integer,Array} data - will be converted to buffer - * @returns {Buffer} - returns buffer of encoded data - **/ -exports.encode = function (input) { - if (input instanceof Array) { - var output = [] - for (var i = 0; i < input.length; i++) { - output.push(exports.encode(input[i])) - } - var buf = Buffer.concat(output) - return Buffer.concat([encodeLength(buf.length, 192), buf]) - } else { - input = toBuffer(input) - if (input.length === 1 && input[0] < 128) { - return input - } else { - return Buffer.concat([encodeLength(input.length, 128), input]) - } - } -} + // Ch + h = (ah4 & ah5) ^ (~ah4 & ah6); + l = (al4 & al5) ^ (~al4 & al6); -function safeParseInt (v, base) { - if (v.slice(0, 2) === '00') { - throw (new Error('invalid RLP: extra zeros')) - } + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - return parseInt(v, base) -} + // K + h = K[i*2]; + l = K[i*2+1]; -function encodeLength (len, offset) { - if (len < 56) { - return new Buffer([len + offset]) - } else { - var hexLength = intToHex(len) - var lLength = hexLength.length / 2 - var firstByte = intToHex(offset + 55 + lLength) - return new Buffer(firstByte + hexLength, 'hex') - } -} + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; -/** - * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP} - * @param {Buffer,String,Integer,Array} data - will be converted to buffer - * @returns {Array} - returns decode Array of Buffers containg the original message - **/ -exports.decode = function (input, stream) { - if (!input || input.length === 0) { - return new Buffer([]) - } + // w + h = wh[i%16]; + l = wl[i%16]; - input = toBuffer(input) - var decoded = _decode(input) + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - if (stream) { - return decoded - } + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; - assert.equal(decoded.remainder.length, 0, 'invalid remainder') - return decoded.data -} + th = c & 0xffff | d << 16; + tl = a & 0xffff | b << 16; -exports.getLength = function (input) { - if (!input || input.length === 0) { - return new Buffer([]) - } + // add + h = th; + l = tl; - input = toBuffer(input) - var firstByte = input[0] - if (firstByte <= 0x7f) { - return input.length - } else if (firstByte <= 0xb7) { - return firstByte - 0x7f - } else if (firstByte <= 0xbf) { - return firstByte - 0xb6 - } else if (firstByte <= 0xf7) { - // a list between 0-55 bytes long - return firstByte - 0xbf - } else { - // a list over 55 bytes long - var llength = firstByte - 0xf6 - var length = safeParseInt(input.slice(1, llength).toString('hex'), 16) - return llength + length - } -} + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; -function _decode (input) { - var length, llength, data, innerRemainder, d - var decoded = [] - var firstByte = input[0] + // Sigma0 + h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); + l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); - if (firstByte <= 0x7f) { - // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding. - return { - data: input.slice(0, 1), - remainder: input.slice(1) - } - } else if (firstByte <= 0xb7) { - // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string - // The range of the first byte is [0x80, 0xb7] - length = firstByte - 0x7f + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - // set 0x80 null to 0 - if (firstByte === 0x80) { - data = new Buffer([]) - } else { - data = input.slice(1, length) - } + // Maj + h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); + l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); - if (length === 2 && data[0] < 0x80) { - throw new Error('invalid rlp encoding: byte must be less 0x80') - } + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - return { - data: data, - remainder: input.slice(length) - } - } else if (firstByte <= 0xbf) { - llength = firstByte - 0xb6 - length = safeParseInt(input.slice(1, llength).toString('hex'), 16) - data = input.slice(llength, length + llength) - if (data.length < length) { - throw (new Error('invalid RLP')) - } + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; - return { - data: data, - remainder: input.slice(length + llength) - } - } else if (firstByte <= 0xf7) { - // a list between 0-55 bytes long - length = firstByte - 0xbf - innerRemainder = input.slice(1, length) - while (innerRemainder.length) { - d = _decode(innerRemainder) - decoded.push(d.data) - innerRemainder = d.remainder - } + bh7 = (c & 0xffff) | (d << 16); + bl7 = (a & 0xffff) | (b << 16); - return { - data: decoded, - remainder: input.slice(length) - } - } else { - // a list over 55 bytes long - llength = firstByte - 0xf6 - length = safeParseInt(input.slice(1, llength).toString('hex'), 16) - var totalLength = llength + length - if (totalLength > input.length) { - throw new Error('invalid rlp: total length is larger than the data') - } + // add + h = bh3; + l = bl3; - innerRemainder = input.slice(llength, totalLength) - if (innerRemainder.length === 0) { - throw new Error('invalid rlp, List has a invalid length') - } + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; - while (innerRemainder.length) { - d = _decode(innerRemainder) - decoded.push(d.data) - innerRemainder = d.remainder - } - return { - data: decoded, - remainder: input.slice(totalLength) - } - } -} + h = th; + l = tl; -function isHexPrefixed (str) { - return str.slice(0, 2) === '0x' -} + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; -// Removes 0x from a given String -function stripHexPrefix (str) { - if (typeof str !== 'string') { - return str - } - return isHexPrefixed(str) ? str.slice(2) : str -} + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; -function intToHex (i) { - var hex = i.toString(16) - if (hex.length % 2) { - hex = '0' + hex - } + bh3 = (c & 0xffff) | (d << 16); + bl3 = (a & 0xffff) | (b << 16); - return hex -} + ah1 = bh0; + ah2 = bh1; + ah3 = bh2; + ah4 = bh3; + ah5 = bh4; + ah6 = bh5; + ah7 = bh6; + ah0 = bh7; -function padToEven (a) { - if (a.length % 2) a = '0' + a - return a -} + al1 = bl0; + al2 = bl1; + al3 = bl2; + al4 = bl3; + al5 = bl4; + al6 = bl5; + al7 = bl6; + al0 = bl7; -function intToBuffer (i) { - var hex = intToHex(i) - return new Buffer(hex, 'hex') -} + if (i%16 === 15) { + for (j = 0; j < 16; j++) { + // add + h = wh[j]; + l = wl[j]; -function toBuffer (v) { - if (!Buffer.isBuffer(v)) { - if (typeof v === 'string') { - if (isHexPrefixed(v)) { - v = new Buffer(padToEven(stripHexPrefix(v)), 'hex') - } else { - v = new Buffer(v) - } - } else if (typeof v === 'number') { - if (!v) { - v = new Buffer([]) - } else { - v = intToBuffer(v) - } - } else if (v === null || v === undefined) { - v = new Buffer([]) - } else if (v.toArray) { - // converts a BN to a Buffer - v = new Buffer(v.toArray()) - } else { - throw new Error('invalid type') - } - } - return v -} + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; -}).call(this,require("buffer").Buffer) -},{"assert":97,"buffer":99}],420:[function(require,module,exports){ -/*! - * Fast "async" scrypt implementation in JavaScript. - * Copyright (c) 2013-2015 Dmitry Chestnykh | BSD License - * https://github.com/dchest/scrypt-async-js - */ + h = wh[(j+9)%16]; + l = wl[(j+9)%16]; -/* - * Limitation: doesn't support parallelization parameter greater than 1. - */ + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; -/** - * scrypt(password, salt, logN, r, dkLen, [interruptStep], callback, [encoding]) - * - * Derives a key from password and salt and calls callback - * with derived key as the only argument. - * - * Calculations are interrupted with setImmediate (or zero setTimeout) at the - * given interruptSteps to avoid freezing the browser. If interruptStep is not - * given, it defaults to 1000. If it's zero, the callback is called immediately - * after the calculation, avoiding setImmediate. - * - * @param {string|Array.} password Password. - * @param {string|Array.} salt Salt. - * @param {number} logN CPU/memory cost parameter (1 to 31). - * @param {number} r Block size parameter. - * @param {number} dkLen Length of derived key. - * @param {number?} interruptStep (optional) Steps to split calculation with timeouts (default 1000). - * @param {function(string|Array.)} callback Callback function. - * @param {string?} encoding (optional) Result encoding ("base64", "hex", or null). - * - */ -function scrypt(password, salt, logN, r, dkLen, interruptStep, callback, encoding) { - 'use strict'; + // sigma0 + th = wh[(j+1)%16]; + tl = wl[(j+1)%16]; + h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); + l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); - function SHA256(m) { - /** @const */ var K = [ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, - 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, - 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, - 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, - 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, - 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, - 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, - 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, - 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, - 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, - 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, - 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 - ]; + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, - h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19, - w = new Array(64); + // sigma1 + th = wh[(j+14)%16]; + tl = wl[(j+14)%16]; + h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); + l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); - function blocks(p) { - var off = 0, len = p.length; - while (len >= 64) { - var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, - u, i, j, t1, t2; + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - for (i = 0; i < 16; i++) { - j = off + i*4; - w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) | - ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff); + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + + wh[j] = (c & 0xffff) | (d << 16); + wl[j] = (a & 0xffff) | (b << 16); } + } + } - for (i = 16; i < 64; i++) { - u = w[i-2]; - t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10); + // add + h = ah0; + l = al0; - u = w[i-15]; - t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3); + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; - w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0; - } + h = hh[0]; + l = hl[0]; - for (i = 0; i < 64; i++) { - t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^ - ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) + - ((h + ((K[i] + w[i]) | 0)) | 0)) | 0; + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^ - ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0; + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; - h = g; - g = f; - f = e; - e = (d + t1) | 0; - d = c; - c = b; - b = a; - a = (t1 + t2) | 0; - } + hh[0] = ah0 = (c & 0xffff) | (d << 16); + hl[0] = al0 = (a & 0xffff) | (b << 16); - h0 = (h0 + a) | 0; - h1 = (h1 + b) | 0; - h2 = (h2 + c) | 0; - h3 = (h3 + d) | 0; - h4 = (h4 + e) | 0; - h5 = (h5 + f) | 0; - h6 = (h6 + g) | 0; - h7 = (h7 + h) | 0; + h = ah1; + l = al1; - off += 64; - len -= 64; - } - } + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; - blocks(m); + h = hh[1]; + l = hl[1]; - var i, bytesLeft = m.length % 64, - bitLenHi = (m.length / 0x20000000) | 0, - bitLenLo = m.length << 3, - numZeros = (bytesLeft < 56) ? 56 : 120, - p = m.slice(m.length - bytesLeft, m.length); + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - p.push(0x80); - for (i = bytesLeft + 1; i < numZeros; i++) p.push(0); - p.push((bitLenHi>>>24) & 0xff); - p.push((bitLenHi>>>16) & 0xff); - p.push((bitLenHi>>>8) & 0xff); - p.push((bitLenHi>>>0) & 0xff); - p.push((bitLenLo>>>24) & 0xff); - p.push((bitLenLo>>>16) & 0xff); - p.push((bitLenLo>>>8) & 0xff); - p.push((bitLenLo>>>0) & 0xff); + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; - blocks(p); + hh[1] = ah1 = (c & 0xffff) | (d << 16); + hl[1] = al1 = (a & 0xffff) | (b << 16); - return [ - (h0>>>24) & 0xff, (h0>>>16) & 0xff, (h0>>>8) & 0xff, (h0>>>0) & 0xff, - (h1>>>24) & 0xff, (h1>>>16) & 0xff, (h1>>>8) & 0xff, (h1>>>0) & 0xff, - (h2>>>24) & 0xff, (h2>>>16) & 0xff, (h2>>>8) & 0xff, (h2>>>0) & 0xff, - (h3>>>24) & 0xff, (h3>>>16) & 0xff, (h3>>>8) & 0xff, (h3>>>0) & 0xff, - (h4>>>24) & 0xff, (h4>>>16) & 0xff, (h4>>>8) & 0xff, (h4>>>0) & 0xff, - (h5>>>24) & 0xff, (h5>>>16) & 0xff, (h5>>>8) & 0xff, (h5>>>0) & 0xff, - (h6>>>24) & 0xff, (h6>>>16) & 0xff, (h6>>>8) & 0xff, (h6>>>0) & 0xff, - (h7>>>24) & 0xff, (h7>>>16) & 0xff, (h7>>>8) & 0xff, (h7>>>0) & 0xff - ]; - } + h = ah2; + l = al2; - function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) { - // compress password if it's longer than hash block length - password = password.length <= 64 ? password : SHA256(password); + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; - var i, innerLen = 64 + salt.length + 4, - inner = new Array(innerLen), - outerKey = new Array(64), - dk = []; + h = hh[2]; + l = hl[2]; - // inner = (password ^ ipad) || salt || counter - for (i = 0; i < 64; i++) inner[i] = 0x36; - for (i = 0; i < password.length; i++) inner[i] ^= password[i]; - for (i = 0; i < salt.length; i++) inner[64+i] = salt[i]; - for (i = innerLen - 4; i < innerLen; i++) inner[i] = 0; + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - // outerKey = password ^ opad - for (i = 0; i < 64; i++) outerKey[i] = 0x5c; - for (i = 0; i < password.length; i++) outerKey[i] ^= password[i]; + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; - // increments counter inside inner - function incrementCounter() { - for (var i = innerLen-1; i >= innerLen-4; i--) { - inner[i]++; - if (inner[i] <= 0xff) return; - inner[i] = 0; - } - } + hh[2] = ah2 = (c & 0xffff) | (d << 16); + hl[2] = al2 = (a & 0xffff) | (b << 16); - // output blocks = SHA256(outerKey || SHA256(inner)) ... - while (dkLen >= 32) { - incrementCounter(); - dk = dk.concat(SHA256(outerKey.concat(SHA256(inner)))); - dkLen -= 32; - } - if (dkLen > 0) { - incrementCounter(); - dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen)); - } - return dk; - } + h = ah3; + l = al3; - function salsaXOR(tmp, B, bin, bout) { - var j0 = tmp[0] ^ B[bin++], - j1 = tmp[1] ^ B[bin++], - j2 = tmp[2] ^ B[bin++], - j3 = tmp[3] ^ B[bin++], - j4 = tmp[4] ^ B[bin++], - j5 = tmp[5] ^ B[bin++], - j6 = tmp[6] ^ B[bin++], - j7 = tmp[7] ^ B[bin++], - j8 = tmp[8] ^ B[bin++], - j9 = tmp[9] ^ B[bin++], - j10 = tmp[10] ^ B[bin++], - j11 = tmp[11] ^ B[bin++], - j12 = tmp[12] ^ B[bin++], - j13 = tmp[13] ^ B[bin++], - j14 = tmp[14] ^ B[bin++], - j15 = tmp[15] ^ B[bin++], - u, i; + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; - var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, - x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, - x15 = j15; + h = hh[3]; + l = hl[3]; - for (i = 0; i < 8; i += 2) { - u = x0 + x12; x4 ^= u<<7 | u>>>(32-7); - u = x4 + x0; x8 ^= u<<9 | u>>>(32-9); - u = x8 + x4; x12 ^= u<<13 | u>>>(32-13); - u = x12 + x8; x0 ^= u<<18 | u>>>(32-18); + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - u = x5 + x1; x9 ^= u<<7 | u>>>(32-7); - u = x9 + x5; x13 ^= u<<9 | u>>>(32-9); - u = x13 + x9; x1 ^= u<<13 | u>>>(32-13); - u = x1 + x13; x5 ^= u<<18 | u>>>(32-18); + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; - u = x10 + x6; x14 ^= u<<7 | u>>>(32-7); - u = x14 + x10; x2 ^= u<<9 | u>>>(32-9); - u = x2 + x14; x6 ^= u<<13 | u>>>(32-13); - u = x6 + x2; x10 ^= u<<18 | u>>>(32-18); + hh[3] = ah3 = (c & 0xffff) | (d << 16); + hl[3] = al3 = (a & 0xffff) | (b << 16); - u = x15 + x11; x3 ^= u<<7 | u>>>(32-7); - u = x3 + x15; x7 ^= u<<9 | u>>>(32-9); - u = x7 + x3; x11 ^= u<<13 | u>>>(32-13); - u = x11 + x7; x15 ^= u<<18 | u>>>(32-18); + h = ah4; + l = al4; - u = x0 + x3; x1 ^= u<<7 | u>>>(32-7); - u = x1 + x0; x2 ^= u<<9 | u>>>(32-9); - u = x2 + x1; x3 ^= u<<13 | u>>>(32-13); - u = x3 + x2; x0 ^= u<<18 | u>>>(32-18); + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; - u = x5 + x4; x6 ^= u<<7 | u>>>(32-7); - u = x6 + x5; x7 ^= u<<9 | u>>>(32-9); - u = x7 + x6; x4 ^= u<<13 | u>>>(32-13); - u = x4 + x7; x5 ^= u<<18 | u>>>(32-18); + h = hh[4]; + l = hl[4]; - u = x10 + x9; x11 ^= u<<7 | u>>>(32-7); - u = x11 + x10; x8 ^= u<<9 | u>>>(32-9); - u = x8 + x11; x9 ^= u<<13 | u>>>(32-13); - u = x9 + x8; x10 ^= u<<18 | u>>>(32-18); + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - u = x15 + x14; x12 ^= u<<7 | u>>>(32-7); - u = x12 + x15; x13 ^= u<<9 | u>>>(32-9); - u = x13 + x12; x14 ^= u<<13 | u>>>(32-13); - u = x14 + x13; x15 ^= u<<18 | u>>>(32-18); - } + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; - B[bout++] = tmp[0] = (x0 + j0) | 0; - B[bout++] = tmp[1] = (x1 + j1) | 0; - B[bout++] = tmp[2] = (x2 + j2) | 0; - B[bout++] = tmp[3] = (x3 + j3) | 0; - B[bout++] = tmp[4] = (x4 + j4) | 0; - B[bout++] = tmp[5] = (x5 + j5) | 0; - B[bout++] = tmp[6] = (x6 + j6) | 0; - B[bout++] = tmp[7] = (x7 + j7) | 0; - B[bout++] = tmp[8] = (x8 + j8) | 0; - B[bout++] = tmp[9] = (x9 + j9) | 0; - B[bout++] = tmp[10] = (x10 + j10) | 0; - B[bout++] = tmp[11] = (x11 + j11) | 0; - B[bout++] = tmp[12] = (x12 + j12) | 0; - B[bout++] = tmp[13] = (x13 + j13) | 0; - B[bout++] = tmp[14] = (x14 + j14) | 0; - B[bout++] = tmp[15] = (x15 + j15) | 0; - } + hh[4] = ah4 = (c & 0xffff) | (d << 16); + hl[4] = al4 = (a & 0xffff) | (b << 16); - function blockCopy(dst, di, src, si, len) { - while (len--) dst[di++] = src[si++]; - } + h = ah5; + l = al5; - function blockXOR(dst, di, src, si, len) { - while (len--) dst[di++] ^= src[si++]; - } + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; - function blockMix(tmp, B, bin, bout, r) { - blockCopy(tmp, 0, B, bin + (2*r-1)*16, 16); - for (var i = 0; i < 2*r; i += 2) { - salsaXOR(tmp, B, bin + i*16, bout + i*8); - salsaXOR(tmp, B, bin + i*16 + 16, bout + i*8 + r*16); - } - } + h = hh[5]; + l = hl[5]; - function integerify(B, bi, r) { - return B[bi+(2*r-1)*16]; - } + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - function stringToUTF8Bytes(s) { - var arr = []; - for (var i = 0; i < s.length; i++) { - var c = s.charCodeAt(i); - if (c < 128) { - arr.push(c); - } else if (c > 127 && c < 2048) { - arr.push((c>>6) | 192); - arr.push((c & 63) | 128); - } else { - arr.push((c>>12) | 224); - arr.push(((c>>6) & 63) | 128); - arr.push((c & 63) | 128); - } - } - return arr; - } + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; - function bytesToHex(p) { - /** @const */ - var enc = '0123456789abcdef'.split(''); + hh[5] = ah5 = (c & 0xffff) | (d << 16); + hl[5] = al5 = (a & 0xffff) | (b << 16); - var len = p.length, - arr = [], - i = 0; + h = ah6; + l = al6; - for (; i < len; i++) { - arr.push(enc[(p[i]>>>4) & 15]); - arr.push(enc[(p[i]>>>0) & 15]); - } - return arr.join(''); - } + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; - function bytesToBase64(p) { - /** @const */ - var enc = ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' + - '0123456789+/').split(''); + h = hh[6]; + l = hl[6]; - var len = p.length, - arr = [], - i = 0, - a, b, c, t; + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - while (i < len) { - a = i < len ? p[i++] : 0; - b = i < len ? p[i++] : 0; - c = i < len ? p[i++] : 0; - t = (a << 16) + (b << 8) + c; - arr.push(enc[(t >>> 3 * 6) & 63]); - arr.push(enc[(t >>> 2 * 6) & 63]); - arr.push(enc[(t >>> 1 * 6) & 63]); - arr.push(enc[(t >>> 0 * 6) & 63]); - } - if (len % 3 > 0) { - arr[arr.length-1] = '='; - if (len % 3 === 1) arr[arr.length-2] = '='; - } - return arr.join(''); - } + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; + hh[6] = ah6 = (c & 0xffff) | (d << 16); + hl[6] = al6 = (a & 0xffff) | (b << 16); - // Generate key. + h = ah7; + l = al7; - // Set parallelization parameter to 1. - var p = 1; + a = l & 0xffff; b = l >>> 16; + c = h & 0xffff; d = h >>> 16; - if (logN < 1 || logN > 31) - throw new Error('scrypt: logN not be between 1 and 31'); + h = hh[7]; + l = hl[7]; - var MAX_INT = (1<<31)>>>0, - N = (1<>>0, - XY, V, B, tmp; + a += l & 0xffff; b += l >>> 16; + c += h & 0xffff; d += h >>> 16; - if (r*p >= 1<<30 || r > MAX_INT/128/p || r > MAX_INT/256 || N > MAX_INT/128/r) - throw new Error('scrypt: parameters are too large'); + b += a >>> 16; + c += b >>> 16; + d += c >>> 16; - // Decode strings. - if (typeof password === 'string') - password = stringToUTF8Bytes(password); - if (typeof salt === 'string') - salt = stringToUTF8Bytes(salt); + hh[7] = ah7 = (c & 0xffff) | (d << 16); + hl[7] = al7 = (a & 0xffff) | (b << 16); - if (typeof Int32Array !== 'undefined') { - //XXX We can use Uint32Array, but Int32Array is faster in Safari. - XY = new Int32Array(64*r); - V = new Int32Array(32*N*r); - tmp = new Int32Array(16); - } else { - XY = []; - V = []; - tmp = new Array(16); + pos += 128; + n -= 128; } - B = PBKDF2_HMAC_SHA256_OneIter(password, salt, p*128*r); - var xi = 0, yi = 32 * r; + return n; +} - function smixStart() { - for (var i = 0; i < 32*r; i++) { - var j = i*4; - XY[xi+i] = ((B[j+3] & 0xff)<<24) | ((B[j+2] & 0xff)<<16) | - ((B[j+1] & 0xff)<<8) | ((B[j+0] & 0xff)<<0); - } - } +function crypto_hash(out, m, n) { + var hh = new Int32Array(8), + hl = new Int32Array(8), + x = new Uint8Array(256), + i, b = n; - function smixStep1(start, end) { - for (var i = start; i < end; i += 2) { - blockCopy(V, i*(32*r), XY, xi, 32*r); - blockMix(tmp, XY, xi, yi, r); + hh[0] = 0x6a09e667; + hh[1] = 0xbb67ae85; + hh[2] = 0x3c6ef372; + hh[3] = 0xa54ff53a; + hh[4] = 0x510e527f; + hh[5] = 0x9b05688c; + hh[6] = 0x1f83d9ab; + hh[7] = 0x5be0cd19; - blockCopy(V, (i+1)*(32*r), XY, yi, 32*r); - blockMix(tmp, XY, yi, xi, r); - } - } + hl[0] = 0xf3bcc908; + hl[1] = 0x84caa73b; + hl[2] = 0xfe94f82b; + hl[3] = 0x5f1d36f1; + hl[4] = 0xade682d1; + hl[5] = 0x2b3e6c1f; + hl[6] = 0xfb41bd6b; + hl[7] = 0x137e2179; - function smixStep2(start, end) { - for (var i = start; i < end; i += 2) { - var j = integerify(XY, xi, r) & (N-1); - blockXOR(XY, xi, V, j*(32*r), 32*r); - blockMix(tmp, XY, xi, yi, r); + crypto_hashblocks_hl(hh, hl, m, n); + n %= 128; - j = integerify(XY, yi, r) & (N-1); - blockXOR(XY, yi, V, j*(32*r), 32*r); - blockMix(tmp, XY, yi, xi, r); - } - } + for (i = 0; i < n; i++) x[i] = m[b-n+i]; + x[n] = 128; - function smixFinish() { - for (var i = 0; i < 32*r; i++) { - var j = XY[xi+i]; - B[i*4+0] = (j>>>0) & 0xff; - B[i*4+1] = (j>>>8) & 0xff; - B[i*4+2] = (j>>>16) & 0xff; - B[i*4+3] = (j>>>24) & 0xff; - } - } + n = 256-128*(n<112?1:0); + x[n-9] = 0; + ts64(x, n-8, (b / 0x20000000) | 0, b << 3); + crypto_hashblocks_hl(hh, hl, x, n); - var nextTick = (typeof setImmediate !== 'undefined') ? setImmediate : setTimeout; + for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); - function interruptedFor(start, end, step, fn, donefn) { - (function performStep() { - nextTick(function() { - fn(start, start + step < end ? start + step : end); - start += step; - if (start < end) - performStep(); - else - donefn(); - }); - })(); - } + return 0; +} + +function add(p, q) { + var a = gf(), b = gf(), c = gf(), + d = gf(), e = gf(), f = gf(), + g = gf(), h = gf(), t = gf(); + + Z(a, p[1], p[0]); + Z(t, q[1], q[0]); + M(a, a, t); + A(b, p[0], p[1]); + A(t, q[0], q[1]); + M(b, b, t); + M(c, p[3], q[3]); + M(c, c, D2); + M(d, p[2], q[2]); + A(d, d, d); + Z(e, b, a); + Z(f, d, c); + A(g, d, c); + A(h, b, a); - function getResult(enc) { - var result = PBKDF2_HMAC_SHA256_OneIter(password, B, dkLen); - if (enc === 'base64') - return bytesToBase64(result); - else if (enc === 'hex') - return bytesToHex(result); - else - return result; - } + M(p[0], e, f); + M(p[1], h, g); + M(p[2], g, f); + M(p[3], e, h); +} - if (typeof interruptStep === 'function') { - // Called as: scrypt(..., callback, [encoding]) - // shifting: scrypt(..., interruptStep, callback, [encoding]) - encoding = callback; - callback = interruptStep; - interruptStep = 1000; +function cswap(p, q, b) { + var i; + for (i = 0; i < 4; i++) { + sel25519(p[i], q[i], b); } +} - if (interruptStep <= 0) { - // - // Blocking async variant, calls callback. - // - smixStart(); - smixStep1(0, N); - smixStep2(0, N); - smixFinish(); - callback(getResult(encoding)); +function pack(r, p) { + var tx = gf(), ty = gf(), zi = gf(); + inv25519(zi, p[2]); + M(tx, p[0], zi); + M(ty, p[1], zi); + pack25519(r, ty); + r[31] ^= par25519(tx) << 7; +} - } else { - // - // Async variant with interruptions, calls callback. - // - smixStart(); - interruptedFor(0, N, interruptStep*2, smixStep1, function() { - interruptedFor(0, N, interruptStep*2, smixStep2, function () { - smixFinish(); - callback(getResult(encoding)); - }); - }); +function scalarmult(p, q, s) { + var b, i; + set25519(p[0], gf0); + set25519(p[1], gf1); + set25519(p[2], gf1); + set25519(p[3], gf0); + for (i = 255; i >= 0; --i) { + b = (s[(i/8)|0] >> (i&7)) & 1; + cswap(p, q, b); + add(q, p); + add(p, p); + cswap(p, q, b); } } -if (typeof module !== 'undefined') module.exports = scrypt; - -},{}],421:[function(require,module,exports){ -(function (Buffer){ -(function(nacl) { -'use strict'; +function scalarbase(p, s) { + var q = [gf(), gf(), gf(), gf()]; + set25519(q[0], X); + set25519(q[1], Y); + set25519(q[2], gf1); + M(q[3], X, Y); + scalarmult(p, q, s); +} -// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri. -// Public domain. -// -// Implementation derived from TweetNaCl version 20140427. -// See for details: http://tweetnacl.cr.yp.to/ +function crypto_sign_keypair(pk, sk, seeded) { + var d = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()]; + var i; -var gf = function(init) { - var i, r = new Float64Array(16); - if (init) for (i = 0; i < init.length; i++) r[i] = init[i]; - return r; -}; + if (!seeded) randombytes(sk, 32); + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; -// Pluggable, initialized in high-level API below. -var randombytes = function(/* x, n */) { throw new Error('no PRNG'); }; + scalarbase(p, d); + pack(pk, p); -var _0 = new Uint8Array(16); -var _9 = new Uint8Array(32); _9[0] = 9; + for (i = 0; i < 32; i++) sk[i+32] = pk[i]; + return 0; +} -var gf0 = gf(), - gf1 = gf([1]), - _121665 = gf([0xdb41, 1]), - D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]), - D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]), - X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]), - Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]), - I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]); +var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); -function ts64(x, i, h, l) { - x[i] = (h >> 24) & 0xff; - x[i+1] = (h >> 16) & 0xff; - x[i+2] = (h >> 8) & 0xff; - x[i+3] = h & 0xff; - x[i+4] = (l >> 24) & 0xff; - x[i+5] = (l >> 16) & 0xff; - x[i+6] = (l >> 8) & 0xff; - x[i+7] = l & 0xff; +function modL(r, x) { + var carry, i, j, k; + for (i = 63; i >= 32; --i) { + carry = 0; + for (j = i - 32, k = i - 12; j < k; ++j) { + x[j] += carry - 16 * x[i] * L[j - (i - 32)]; + carry = (x[j] + 128) >> 8; + x[j] -= carry * 256; + } + x[j] += carry; + x[i] = 0; + } + carry = 0; + for (j = 0; j < 32; j++) { + x[j] += carry - (x[31] >> 4) * L[j]; + carry = x[j] >> 8; + x[j] &= 255; + } + for (j = 0; j < 32; j++) x[j] -= carry * L[j]; + for (i = 0; i < 32; i++) { + x[i+1] += x[i] >> 8; + r[i] = x[i] & 255; + } } -function vn(x, xi, y, yi, n) { - var i,d = 0; - for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i]; - return (1 & ((d - 1) >>> 8)) - 1; +function reduce(r) { + var x = new Float64Array(64), i; + for (i = 0; i < 64; i++) x[i] = r[i]; + for (i = 0; i < 64; i++) r[i] = 0; + modL(r, x); } -function crypto_verify_16(x, xi, y, yi) { - return vn(x,xi,y,yi,16); -} +// Note: difference from C - smlen returned, not passed as argument. +function crypto_sign(sm, m, n, sk) { + var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); + var i, j, x = new Float64Array(64); + var p = [gf(), gf(), gf(), gf()]; -function crypto_verify_32(x, xi, y, yi) { - return vn(x,xi,y,yi,32); -} + crypto_hash(d, sk, 32); + d[0] &= 248; + d[31] &= 127; + d[31] |= 64; -function core_salsa20(o, p, k, c) { - var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, - j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, - j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, - j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, - j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, - j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, - j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, - j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, - j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, - j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, - j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, - j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, - j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, - j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, - j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, - j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; + var smlen = n + 64; + for (i = 0; i < n; i++) sm[64 + i] = m[i]; + for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; - var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, - x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, - x15 = j15, u; + crypto_hash(r, sm.subarray(32), n+32); + reduce(r); + scalarbase(p, r); + pack(sm, p); - for (var i = 0; i < 20; i += 2) { - u = x0 + x12 | 0; - x4 ^= u<<7 | u>>>(32-7); - u = x4 + x0 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x4 | 0; - x12 ^= u<<13 | u>>>(32-13); - u = x12 + x8 | 0; - x0 ^= u<<18 | u>>>(32-18); + for (i = 32; i < 64; i++) sm[i] = sk[i]; + crypto_hash(h, sm, n + 64); + reduce(h); - u = x5 + x1 | 0; - x9 ^= u<<7 | u>>>(32-7); - u = x9 + x5 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x9 | 0; - x1 ^= u<<13 | u>>>(32-13); - u = x1 + x13 | 0; - x5 ^= u<<18 | u>>>(32-18); + for (i = 0; i < 64; i++) x[i] = 0; + for (i = 0; i < 32; i++) x[i] = r[i]; + for (i = 0; i < 32; i++) { + for (j = 0; j < 32; j++) { + x[i+j] += h[i] * d[j]; + } + } - u = x10 + x6 | 0; - x14 ^= u<<7 | u>>>(32-7); - u = x14 + x10 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x14 | 0; - x6 ^= u<<13 | u>>>(32-13); - u = x6 + x2 | 0; - x10 ^= u<<18 | u>>>(32-18); + modL(sm.subarray(32), x); + return smlen; +} - u = x15 + x11 | 0; - x3 ^= u<<7 | u>>>(32-7); - u = x3 + x15 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x3 | 0; - x11 ^= u<<13 | u>>>(32-13); - u = x11 + x7 | 0; - x15 ^= u<<18 | u>>>(32-18); +function unpackneg(r, p) { + var t = gf(), chk = gf(), num = gf(), + den = gf(), den2 = gf(), den4 = gf(), + den6 = gf(); - u = x0 + x3 | 0; - x1 ^= u<<7 | u>>>(32-7); - u = x1 + x0 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x1 | 0; - x3 ^= u<<13 | u>>>(32-13); - u = x3 + x2 | 0; - x0 ^= u<<18 | u>>>(32-18); + set25519(r[2], gf1); + unpack25519(r[1], p); + S(num, r[1]); + M(den, num, D); + Z(num, num, r[2]); + A(den, r[2], den); - u = x5 + x4 | 0; - x6 ^= u<<7 | u>>>(32-7); - u = x6 + x5 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x6 | 0; - x4 ^= u<<13 | u>>>(32-13); - u = x4 + x7 | 0; - x5 ^= u<<18 | u>>>(32-18); + S(den2, den); + S(den4, den2); + M(den6, den4, den2); + M(t, den6, num); + M(t, t, den); - u = x10 + x9 | 0; - x11 ^= u<<7 | u>>>(32-7); - u = x11 + x10 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x11 | 0; - x9 ^= u<<13 | u>>>(32-13); - u = x9 + x8 | 0; - x10 ^= u<<18 | u>>>(32-18); + pow2523(t, t); + M(t, t, num); + M(t, t, den); + M(t, t, den); + M(r[0], t, den); - u = x15 + x14 | 0; - x12 ^= u<<7 | u>>>(32-7); - u = x12 + x15 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x12 | 0; - x14 ^= u<<13 | u>>>(32-13); - u = x14 + x13 | 0; - x15 ^= u<<18 | u>>>(32-18); - } - x0 = x0 + j0 | 0; - x1 = x1 + j1 | 0; - x2 = x2 + j2 | 0; - x3 = x3 + j3 | 0; - x4 = x4 + j4 | 0; - x5 = x5 + j5 | 0; - x6 = x6 + j6 | 0; - x7 = x7 + j7 | 0; - x8 = x8 + j8 | 0; - x9 = x9 + j9 | 0; - x10 = x10 + j10 | 0; - x11 = x11 + j11 | 0; - x12 = x12 + j12 | 0; - x13 = x13 + j13 | 0; - x14 = x14 + j14 | 0; - x15 = x15 + j15 | 0; + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) M(r[0], r[0], I); - o[ 0] = x0 >>> 0 & 0xff; - o[ 1] = x0 >>> 8 & 0xff; - o[ 2] = x0 >>> 16 & 0xff; - o[ 3] = x0 >>> 24 & 0xff; + S(chk, r[0]); + M(chk, chk, den); + if (neq25519(chk, num)) return -1; - o[ 4] = x1 >>> 0 & 0xff; - o[ 5] = x1 >>> 8 & 0xff; - o[ 6] = x1 >>> 16 & 0xff; - o[ 7] = x1 >>> 24 & 0xff; + if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); - o[ 8] = x2 >>> 0 & 0xff; - o[ 9] = x2 >>> 8 & 0xff; - o[10] = x2 >>> 16 & 0xff; - o[11] = x2 >>> 24 & 0xff; + M(r[3], r[0], r[1]); + return 0; +} - o[12] = x3 >>> 0 & 0xff; - o[13] = x3 >>> 8 & 0xff; - o[14] = x3 >>> 16 & 0xff; - o[15] = x3 >>> 24 & 0xff; +function crypto_sign_open(m, sm, n, pk) { + var i, mlen; + var t = new Uint8Array(32), h = new Uint8Array(64); + var p = [gf(), gf(), gf(), gf()], + q = [gf(), gf(), gf(), gf()]; - o[16] = x4 >>> 0 & 0xff; - o[17] = x4 >>> 8 & 0xff; - o[18] = x4 >>> 16 & 0xff; - o[19] = x4 >>> 24 & 0xff; + mlen = -1; + if (n < 64) return -1; - o[20] = x5 >>> 0 & 0xff; - o[21] = x5 >>> 8 & 0xff; - o[22] = x5 >>> 16 & 0xff; - o[23] = x5 >>> 24 & 0xff; + if (unpackneg(q, pk)) return -1; - o[24] = x6 >>> 0 & 0xff; - o[25] = x6 >>> 8 & 0xff; - o[26] = x6 >>> 16 & 0xff; - o[27] = x6 >>> 24 & 0xff; + for (i = 0; i < n; i++) m[i] = sm[i]; + for (i = 0; i < 32; i++) m[i+32] = pk[i]; + crypto_hash(h, m, n); + reduce(h); + scalarmult(p, q, h); - o[28] = x7 >>> 0 & 0xff; - o[29] = x7 >>> 8 & 0xff; - o[30] = x7 >>> 16 & 0xff; - o[31] = x7 >>> 24 & 0xff; + scalarbase(q, sm.subarray(32)); + add(p, q); + pack(t, p); - o[32] = x8 >>> 0 & 0xff; - o[33] = x8 >>> 8 & 0xff; - o[34] = x8 >>> 16 & 0xff; - o[35] = x8 >>> 24 & 0xff; + n -= 64; + if (crypto_verify_32(sm, 0, t, 0)) { + for (i = 0; i < n; i++) m[i] = 0; + return -1; + } - o[36] = x9 >>> 0 & 0xff; - o[37] = x9 >>> 8 & 0xff; - o[38] = x9 >>> 16 & 0xff; - o[39] = x9 >>> 24 & 0xff; + for (i = 0; i < n; i++) m[i] = sm[i + 64]; + mlen = n; + return mlen; +} - o[40] = x10 >>> 0 & 0xff; - o[41] = x10 >>> 8 & 0xff; - o[42] = x10 >>> 16 & 0xff; - o[43] = x10 >>> 24 & 0xff; +var crypto_secretbox_KEYBYTES = 32, + crypto_secretbox_NONCEBYTES = 24, + crypto_secretbox_ZEROBYTES = 32, + crypto_secretbox_BOXZEROBYTES = 16, + crypto_scalarmult_BYTES = 32, + crypto_scalarmult_SCALARBYTES = 32, + crypto_box_PUBLICKEYBYTES = 32, + crypto_box_SECRETKEYBYTES = 32, + crypto_box_BEFORENMBYTES = 32, + crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, + crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, + crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, + crypto_sign_BYTES = 64, + crypto_sign_PUBLICKEYBYTES = 32, + crypto_sign_SECRETKEYBYTES = 64, + crypto_sign_SEEDBYTES = 32, + crypto_hash_BYTES = 64; - o[44] = x11 >>> 0 & 0xff; - o[45] = x11 >>> 8 & 0xff; - o[46] = x11 >>> 16 & 0xff; - o[47] = x11 >>> 24 & 0xff; +nacl.lowlevel = { + crypto_core_hsalsa20: crypto_core_hsalsa20, + crypto_stream_xor: crypto_stream_xor, + crypto_stream: crypto_stream, + crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, + crypto_stream_salsa20: crypto_stream_salsa20, + crypto_onetimeauth: crypto_onetimeauth, + crypto_onetimeauth_verify: crypto_onetimeauth_verify, + crypto_verify_16: crypto_verify_16, + crypto_verify_32: crypto_verify_32, + crypto_secretbox: crypto_secretbox, + crypto_secretbox_open: crypto_secretbox_open, + crypto_scalarmult: crypto_scalarmult, + crypto_scalarmult_base: crypto_scalarmult_base, + crypto_box_beforenm: crypto_box_beforenm, + crypto_box_afternm: crypto_box_afternm, + crypto_box: crypto_box, + crypto_box_open: crypto_box_open, + crypto_box_keypair: crypto_box_keypair, + crypto_hash: crypto_hash, + crypto_sign: crypto_sign, + crypto_sign_keypair: crypto_sign_keypair, + crypto_sign_open: crypto_sign_open, - o[48] = x12 >>> 0 & 0xff; - o[49] = x12 >>> 8 & 0xff; - o[50] = x12 >>> 16 & 0xff; - o[51] = x12 >>> 24 & 0xff; + crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, + crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, + crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, + crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, + crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, + crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, + crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, + crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, + crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, + crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, + crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, + crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, + crypto_sign_BYTES: crypto_sign_BYTES, + crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, + crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, + crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, + crypto_hash_BYTES: crypto_hash_BYTES +}; - o[52] = x13 >>> 0 & 0xff; - o[53] = x13 >>> 8 & 0xff; - o[54] = x13 >>> 16 & 0xff; - o[55] = x13 >>> 24 & 0xff; +/* High-level API */ - o[56] = x14 >>> 0 & 0xff; - o[57] = x14 >>> 8 & 0xff; - o[58] = x14 >>> 16 & 0xff; - o[59] = x14 >>> 24 & 0xff; +function checkLengths(k, n) { + if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); + if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +} - o[60] = x15 >>> 0 & 0xff; - o[61] = x15 >>> 8 & 0xff; - o[62] = x15 >>> 16 & 0xff; - o[63] = x15 >>> 24 & 0xff; +function checkBoxLengths(pk, sk) { + if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); + if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); } -function core_hsalsa20(o,p,k,c) { - var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24, - j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24, - j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24, - j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24, - j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24, - j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24, - j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24, - j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24, - j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24, - j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24, - j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24, - j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24, - j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24, - j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24, - j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24, - j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24; +function checkArrayTypes() { + var t, i; + for (i = 0; i < arguments.length; i++) { + if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') + throw new TypeError('unexpected type ' + t + ', use Uint8Array'); + } +} + +function cleanup(arr) { + for (var i = 0; i < arr.length; i++) arr[i] = 0; +} - var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7, - x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14, - x15 = j15, u; +nacl.util = {}; - for (var i = 0; i < 20; i += 2) { - u = x0 + x12 | 0; - x4 ^= u<<7 | u>>>(32-7); - u = x4 + x0 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x4 | 0; - x12 ^= u<<13 | u>>>(32-13); - u = x12 + x8 | 0; - x0 ^= u<<18 | u>>>(32-18); +nacl.util.decodeUTF8 = function(s) { + var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; +}; - u = x5 + x1 | 0; - x9 ^= u<<7 | u>>>(32-7); - u = x9 + x5 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x9 | 0; - x1 ^= u<<13 | u>>>(32-13); - u = x1 + x13 | 0; - x5 ^= u<<18 | u>>>(32-18); +nacl.util.encodeUTF8 = function(arr) { + var i, s = []; + for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i])); + return decodeURIComponent(escape(s.join(''))); +}; - u = x10 + x6 | 0; - x14 ^= u<<7 | u>>>(32-7); - u = x14 + x10 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x14 | 0; - x6 ^= u<<13 | u>>>(32-13); - u = x6 + x2 | 0; - x10 ^= u<<18 | u>>>(32-18); +nacl.util.encodeBase64 = function(arr) { + if (typeof btoa === 'undefined') { + return (new Buffer(arr)).toString('base64'); + } else { + var i, s = [], len = arr.length; + for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i])); + return btoa(s.join('')); + } +}; - u = x15 + x11 | 0; - x3 ^= u<<7 | u>>>(32-7); - u = x3 + x15 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x3 | 0; - x11 ^= u<<13 | u>>>(32-13); - u = x11 + x7 | 0; - x15 ^= u<<18 | u>>>(32-18); +nacl.util.decodeBase64 = function(s) { + if (typeof atob === 'undefined') { + return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0)); + } else { + var i, d = atob(s), b = new Uint8Array(d.length); + for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); + return b; + } +}; - u = x0 + x3 | 0; - x1 ^= u<<7 | u>>>(32-7); - u = x1 + x0 | 0; - x2 ^= u<<9 | u>>>(32-9); - u = x2 + x1 | 0; - x3 ^= u<<13 | u>>>(32-13); - u = x3 + x2 | 0; - x0 ^= u<<18 | u>>>(32-18); +nacl.randomBytes = function(n) { + var b = new Uint8Array(n); + randombytes(b, n); + return b; +}; - u = x5 + x4 | 0; - x6 ^= u<<7 | u>>>(32-7); - u = x6 + x5 | 0; - x7 ^= u<<9 | u>>>(32-9); - u = x7 + x6 | 0; - x4 ^= u<<13 | u>>>(32-13); - u = x4 + x7 | 0; - x5 ^= u<<18 | u>>>(32-18); +nacl.secretbox = function(msg, nonce, key) { + checkArrayTypes(msg, nonce, key); + checkLengths(key, nonce); + var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); + var c = new Uint8Array(m.length); + for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; + crypto_secretbox(c, m, m.length, nonce, key); + return c.subarray(crypto_secretbox_BOXZEROBYTES); +}; - u = x10 + x9 | 0; - x11 ^= u<<7 | u>>>(32-7); - u = x11 + x10 | 0; - x8 ^= u<<9 | u>>>(32-9); - u = x8 + x11 | 0; - x9 ^= u<<13 | u>>>(32-13); - u = x9 + x8 | 0; - x10 ^= u<<18 | u>>>(32-18); +nacl.secretbox.open = function(box, nonce, key) { + checkArrayTypes(box, nonce, key); + checkLengths(key, nonce); + var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); + var m = new Uint8Array(c.length); + for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; + if (c.length < 32) return false; + if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; + return m.subarray(crypto_secretbox_ZEROBYTES); +}; - u = x15 + x14 | 0; - x12 ^= u<<7 | u>>>(32-7); - u = x12 + x15 | 0; - x13 ^= u<<9 | u>>>(32-9); - u = x13 + x12 | 0; - x14 ^= u<<13 | u>>>(32-13); - u = x14 + x13 | 0; - x15 ^= u<<18 | u>>>(32-18); - } +nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; +nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; +nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; - o[ 0] = x0 >>> 0 & 0xff; - o[ 1] = x0 >>> 8 & 0xff; - o[ 2] = x0 >>> 16 & 0xff; - o[ 3] = x0 >>> 24 & 0xff; +nacl.scalarMult = function(n, p) { + checkArrayTypes(n, p); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult(q, n, p); + return q; +}; - o[ 4] = x5 >>> 0 & 0xff; - o[ 5] = x5 >>> 8 & 0xff; - o[ 6] = x5 >>> 16 & 0xff; - o[ 7] = x5 >>> 24 & 0xff; +nacl.scalarMult.base = function(n) { + checkArrayTypes(n); + if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); + var q = new Uint8Array(crypto_scalarmult_BYTES); + crypto_scalarmult_base(q, n); + return q; +}; - o[ 8] = x10 >>> 0 & 0xff; - o[ 9] = x10 >>> 8 & 0xff; - o[10] = x10 >>> 16 & 0xff; - o[11] = x10 >>> 24 & 0xff; +nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; +nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; - o[12] = x15 >>> 0 & 0xff; - o[13] = x15 >>> 8 & 0xff; - o[14] = x15 >>> 16 & 0xff; - o[15] = x15 >>> 24 & 0xff; +nacl.box = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox(msg, nonce, k); +}; - o[16] = x6 >>> 0 & 0xff; - o[17] = x6 >>> 8 & 0xff; - o[18] = x6 >>> 16 & 0xff; - o[19] = x6 >>> 24 & 0xff; +nacl.box.before = function(publicKey, secretKey) { + checkArrayTypes(publicKey, secretKey); + checkBoxLengths(publicKey, secretKey); + var k = new Uint8Array(crypto_box_BEFORENMBYTES); + crypto_box_beforenm(k, publicKey, secretKey); + return k; +}; - o[20] = x7 >>> 0 & 0xff; - o[21] = x7 >>> 8 & 0xff; - o[22] = x7 >>> 16 & 0xff; - o[23] = x7 >>> 24 & 0xff; +nacl.box.after = nacl.secretbox; - o[24] = x8 >>> 0 & 0xff; - o[25] = x8 >>> 8 & 0xff; - o[26] = x8 >>> 16 & 0xff; - o[27] = x8 >>> 24 & 0xff; +nacl.box.open = function(msg, nonce, publicKey, secretKey) { + var k = nacl.box.before(publicKey, secretKey); + return nacl.secretbox.open(msg, nonce, k); +}; - o[28] = x9 >>> 0 & 0xff; - o[29] = x9 >>> 8 & 0xff; - o[30] = x9 >>> 16 & 0xff; - o[31] = x9 >>> 24 & 0xff; -} +nacl.box.open.after = nacl.secretbox.open; -function crypto_core_salsa20(out,inp,k,c) { - core_salsa20(out,inp,k,c); -} +nacl.box.keyPair = function() { + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); + crypto_box_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; -function crypto_core_hsalsa20(out,inp,k,c) { - core_hsalsa20(out,inp,k,c); -} +nacl.box.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_box_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); + crypto_scalarmult_base(pk, secretKey); + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; -var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]); - // "expand 32-byte k" +nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; +nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; +nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; +nacl.box.nonceLength = crypto_box_NONCEBYTES; +nacl.box.overheadLength = nacl.secretbox.overheadLength; -function crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) { - var z = new Uint8Array(16), x = new Uint8Array(64); - var u, i; - for (i = 0; i < 16; i++) z[i] = 0; - for (i = 0; i < 8; i++) z[i] = n[i]; - while (b >= 64) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i]; - u = 1; - for (i = 8; i < 16; i++) { - u = u + (z[i] & 0xff) | 0; - z[i] = u & 0xff; - u >>>= 8; - } - b -= 64; - cpos += 64; - mpos += 64; - } - if (b > 0) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i]; - } - return 0; -} +nacl.sign = function(msg, secretKey) { + checkArrayTypes(msg, secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); + crypto_sign(signedMsg, msg, msg.length, secretKey); + return signedMsg; +}; -function crypto_stream_salsa20(c,cpos,b,n,k) { - var z = new Uint8Array(16), x = new Uint8Array(64); - var u, i; - for (i = 0; i < 16; i++) z[i] = 0; - for (i = 0; i < 8; i++) z[i] = n[i]; - while (b >= 64) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < 64; i++) c[cpos+i] = x[i]; - u = 1; - for (i = 8; i < 16; i++) { - u = u + (z[i] & 0xff) | 0; - z[i] = u & 0xff; - u >>>= 8; - } - b -= 64; - cpos += 64; - } - if (b > 0) { - crypto_core_salsa20(x,z,k,sigma); - for (i = 0; i < b; i++) c[cpos+i] = x[i]; - } - return 0; -} +nacl.sign.open = function(signedMsg, publicKey) { + if (arguments.length !== 2) + throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); + checkArrayTypes(signedMsg, publicKey); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var tmp = new Uint8Array(signedMsg.length); + var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); + if (mlen < 0) return null; + var m = new Uint8Array(mlen); + for (var i = 0; i < m.length; i++) m[i] = tmp[i]; + return m; +}; -function crypto_stream(c,cpos,d,n,k) { - var s = new Uint8Array(32); - crypto_core_hsalsa20(s,n,k,sigma); - var sn = new Uint8Array(8); - for (var i = 0; i < 8; i++) sn[i] = n[i+16]; - return crypto_stream_salsa20(c,cpos,d,sn,s); -} +nacl.sign.detached = function(msg, secretKey) { + var signedMsg = nacl.sign(msg, secretKey); + var sig = new Uint8Array(crypto_sign_BYTES); + for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; + return sig; +}; -function crypto_stream_xor(c,cpos,m,mpos,d,n,k) { - var s = new Uint8Array(32); - crypto_core_hsalsa20(s,n,k,sigma); - var sn = new Uint8Array(8); - for (var i = 0; i < 8; i++) sn[i] = n[i+16]; - return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s); -} +nacl.sign.detached.verify = function(msg, sig, publicKey) { + checkArrayTypes(msg, sig, publicKey); + if (sig.length !== crypto_sign_BYTES) + throw new Error('bad signature size'); + if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) + throw new Error('bad public key size'); + var sm = new Uint8Array(crypto_sign_BYTES + msg.length); + var m = new Uint8Array(crypto_sign_BYTES + msg.length); + var i; + for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; + for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; + return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); +}; -/* -* Port of Andrew Moon's Poly1305-donna-16. Public domain. -* https://github.com/floodyberry/poly1305-donna -*/ +nacl.sign.keyPair = function() { + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + crypto_sign_keypair(pk, sk); + return {publicKey: pk, secretKey: sk}; +}; -var poly1305 = function(key) { - this.buffer = new Uint8Array(16); - this.r = new Uint16Array(10); - this.h = new Uint16Array(10); - this.pad = new Uint16Array(8); - this.leftover = 0; - this.fin = 0; +nacl.sign.keyPair.fromSecretKey = function(secretKey) { + checkArrayTypes(secretKey); + if (secretKey.length !== crypto_sign_SECRETKEYBYTES) + throw new Error('bad secret key size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; + return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; +}; - var t0, t1, t2, t3, t4, t5, t6, t7; +nacl.sign.keyPair.fromSeed = function(seed) { + checkArrayTypes(seed); + if (seed.length !== crypto_sign_SEEDBYTES) + throw new Error('bad seed size'); + var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); + var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); + for (var i = 0; i < 32; i++) sk[i] = seed[i]; + crypto_sign_keypair(pk, sk, true); + return {publicKey: pk, secretKey: sk}; +}; - t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff; - t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff; - t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03; - t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff; - t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff; - this.r[5] = ((t4 >>> 1)) & 0x1ffe; - t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff; - t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81; - t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff; - this.r[9] = ((t7 >>> 5)) & 0x007f; +nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; +nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; +nacl.sign.seedLength = crypto_sign_SEEDBYTES; +nacl.sign.signatureLength = crypto_sign_BYTES; - this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8; - this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8; - this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8; - this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8; - this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8; - this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8; - this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8; - this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8; +nacl.hash = function(msg) { + checkArrayTypes(msg); + var h = new Uint8Array(crypto_hash_BYTES); + crypto_hash(h, msg, msg.length); + return h; }; -poly1305.prototype.blocks = function(m, mpos, bytes) { - var hibit = this.fin ? 0 : (1 << 11); - var t0, t1, t2, t3, t4, t5, t6, t7, c; - var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9; +nacl.hash.hashLength = crypto_hash_BYTES; - var h0 = this.h[0], - h1 = this.h[1], - h2 = this.h[2], - h3 = this.h[3], - h4 = this.h[4], - h5 = this.h[5], - h6 = this.h[6], - h7 = this.h[7], - h8 = this.h[8], - h9 = this.h[9]; +nacl.verify = function(x, y) { + checkArrayTypes(x, y); + // Zero length arguments are considered not equal. + if (x.length === 0 || y.length === 0) return false; + if (x.length !== y.length) return false; + return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +}; - var r0 = this.r[0], - r1 = this.r[1], - r2 = this.r[2], - r3 = this.r[3], - r4 = this.r[4], - r5 = this.r[5], - r6 = this.r[6], - r7 = this.r[7], - r8 = this.r[8], - r9 = this.r[9]; +nacl.setPRNG = function(fn) { + randombytes = fn; +}; - while (bytes >= 16) { - t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff; - t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff; - t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff; - t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff; - t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff; - h5 += ((t4 >>> 1)) & 0x1fff; - t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff; - t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff; - t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff; - h9 += ((t7 >>> 5)) | hibit; +(function() { + // Initialize PRNG if environment provides CSPRNG. + // If not, methods calling randombytes will throw. + var crypto; + if (typeof window !== 'undefined') { + // Browser. + if (window.crypto && window.crypto.getRandomValues) { + crypto = window.crypto; // Standard + } else if (window.msCrypto && window.msCrypto.getRandomValues) { + crypto = window.msCrypto; // Internet Explorer 11+ + } + if (crypto) { + nacl.setPRNG(function(x, n) { + var i, v = new Uint8Array(n); + crypto.getRandomValues(v); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } else if (typeof require !== 'undefined') { + // Node.js. + crypto = require('crypto'); + if (crypto) { + nacl.setPRNG(function(x, n) { + var i, v = crypto.randomBytes(n); + for (i = 0; i < n; i++) x[i] = v[i]; + cleanup(v); + }); + } + } +})(); - c = 0; +})(typeof module !== 'undefined' && module.exports ? module.exports : (window.nacl = window.nacl || {})); - d0 = c; - d0 += h0 * r0; - d0 += h1 * (5 * r9); - d0 += h2 * (5 * r8); - d0 += h3 * (5 * r7); - d0 += h4 * (5 * r6); - c = (d0 >>> 13); d0 &= 0x1fff; - d0 += h5 * (5 * r5); - d0 += h6 * (5 * r4); - d0 += h7 * (5 * r3); - d0 += h8 * (5 * r2); - d0 += h9 * (5 * r1); - c += (d0 >>> 13); d0 &= 0x1fff; +}).call(this,require("buffer").Buffer) +},{"buffer":100,"crypto":100}],294:[function(require,module,exports){ +(function (root) { + "use strict"; - d1 = c; - d1 += h0 * r1; - d1 += h1 * r0; - d1 += h2 * (5 * r9); - d1 += h3 * (5 * r8); - d1 += h4 * (5 * r7); - c = (d1 >>> 13); d1 &= 0x1fff; - d1 += h5 * (5 * r6); - d1 += h6 * (5 * r5); - d1 += h7 * (5 * r4); - d1 += h8 * (5 * r3); - d1 += h9 * (5 * r2); - c += (d1 >>> 13); d1 &= 0x1fff; +/***** unorm.js *****/ + +/* + * UnicodeNormalizer 1.0.0 + * Copyright (c) 2008 Matsuza + * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. + * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $ + * $Rev: 13309 $ + */ + + var DEFAULT_FEATURE = [null, 0, {}]; + var CACHE_THRESHOLD = 10; + var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28; + var NCount = VCount * TCount; // 588 + var SCount = LCount * NCount; // 11172 + + var UChar = function(cp, feature){ + this.codepoint = cp; + this.feature = feature; + }; + + // Strategies + var cache = {}; + var cacheCounter = []; + for (var i = 0; i <= 0xFF; ++i){ + cacheCounter[i] = 0; + } - d2 = c; - d2 += h0 * r2; - d2 += h1 * r1; - d2 += h2 * r0; - d2 += h3 * (5 * r9); - d2 += h4 * (5 * r8); - c = (d2 >>> 13); d2 &= 0x1fff; - d2 += h5 * (5 * r7); - d2 += h6 * (5 * r6); - d2 += h7 * (5 * r5); - d2 += h8 * (5 * r4); - d2 += h9 * (5 * r3); - c += (d2 >>> 13); d2 &= 0x1fff; + function fromCache(next, cp, needFeature){ + var ret = cache[cp]; + if(!ret){ + ret = next(cp, needFeature); + if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){ + cache[cp] = ret; + } + } + return ret; + } - d3 = c; - d3 += h0 * r3; - d3 += h1 * r2; - d3 += h2 * r1; - d3 += h3 * r0; - d3 += h4 * (5 * r9); - c = (d3 >>> 13); d3 &= 0x1fff; - d3 += h5 * (5 * r8); - d3 += h6 * (5 * r7); - d3 += h7 * (5 * r6); - d3 += h8 * (5 * r5); - d3 += h9 * (5 * r4); - c += (d3 >>> 13); d3 &= 0x1fff; + function fromData(next, cp, needFeature){ + var hash = cp & 0xFF00; + var dunit = UChar.udata[hash] || {}; + var f = dunit[cp]; + return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE); + } + function fromCpOnly(next, cp, needFeature){ + return !!needFeature ? next(cp, needFeature) : new UChar(cp, null); + } + function fromRuleBasedJamo(next, cp, needFeature){ + var j; + if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){ + return next(cp, needFeature); + } + if(LBase <= cp && cp < LBase + LCount){ + var c = {}; + var base = (cp - LBase) * VCount; + for (j = 0; j < VCount; ++j){ + c[VBase + j] = SBase + TCount * (j + base); + } + return new UChar(cp, [,,c]); + } - d4 = c; - d4 += h0 * r4; - d4 += h1 * r3; - d4 += h2 * r2; - d4 += h3 * r1; - d4 += h4 * r0; - c = (d4 >>> 13); d4 &= 0x1fff; - d4 += h5 * (5 * r9); - d4 += h6 * (5 * r8); - d4 += h7 * (5 * r7); - d4 += h8 * (5 * r6); - d4 += h9 * (5 * r5); - c += (d4 >>> 13); d4 &= 0x1fff; + var SIndex = cp - SBase; + var TIndex = SIndex % TCount; + var feature = []; + if(TIndex !== 0){ + feature[0] = [SBase + SIndex - TIndex, TBase + TIndex]; + } else { + feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)]; + feature[2] = {}; + for (j = 1; j < TCount; ++j){ + feature[2][TBase + j] = cp + j; + } + } + return new UChar(cp, feature); + } + function fromCpFilter(next, cp, needFeature){ + return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature); + } - d5 = c; - d5 += h0 * r5; - d5 += h1 * r4; - d5 += h2 * r3; - d5 += h3 * r2; - d5 += h4 * r1; - c = (d5 >>> 13); d5 &= 0x1fff; - d5 += h5 * r0; - d5 += h6 * (5 * r9); - d5 += h7 * (5 * r8); - d5 += h8 * (5 * r7); - d5 += h9 * (5 * r6); - c += (d5 >>> 13); d5 &= 0x1fff; + var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData]; - d6 = c; - d6 += h0 * r6; - d6 += h1 * r5; - d6 += h2 * r4; - d6 += h3 * r3; - d6 += h4 * r2; - c = (d6 >>> 13); d6 &= 0x1fff; - d6 += h5 * r1; - d6 += h6 * r0; - d6 += h7 * (5 * r9); - d6 += h8 * (5 * r8); - d6 += h9 * (5 * r7); - c += (d6 >>> 13); d6 &= 0x1fff; + UChar.fromCharCode = strategies.reduceRight(function (next, strategy) { + return function (cp, needFeature) { + return strategy(next, cp, needFeature); + }; + }, null); - d7 = c; - d7 += h0 * r7; - d7 += h1 * r6; - d7 += h2 * r5; - d7 += h3 * r4; - d7 += h4 * r3; - c = (d7 >>> 13); d7 &= 0x1fff; - d7 += h5 * r2; - d7 += h6 * r1; - d7 += h7 * r0; - d7 += h8 * (5 * r9); - d7 += h9 * (5 * r8); - c += (d7 >>> 13); d7 &= 0x1fff; + UChar.isHighSurrogate = function(cp){ + return cp >= 0xD800 && cp <= 0xDBFF; + }; + UChar.isLowSurrogate = function(cp){ + return cp >= 0xDC00 && cp <= 0xDFFF; + }; - d8 = c; - d8 += h0 * r8; - d8 += h1 * r7; - d8 += h2 * r6; - d8 += h3 * r5; - d8 += h4 * r4; - c = (d8 >>> 13); d8 &= 0x1fff; - d8 += h5 * r3; - d8 += h6 * r2; - d8 += h7 * r1; - d8 += h8 * r0; - d8 += h9 * (5 * r9); - c += (d8 >>> 13); d8 &= 0x1fff; + UChar.prototype.prepFeature = function(){ + if(!this.feature){ + this.feature = UChar.fromCharCode(this.codepoint, true).feature; + } + }; - d9 = c; - d9 += h0 * r9; - d9 += h1 * r8; - d9 += h2 * r7; - d9 += h3 * r6; - d9 += h4 * r5; - c = (d9 >>> 13); d9 &= 0x1fff; - d9 += h5 * r4; - d9 += h6 * r3; - d9 += h7 * r2; - d9 += h8 * r1; - d9 += h9 * r0; - c += (d9 >>> 13); d9 &= 0x1fff; + UChar.prototype.toString = function(){ + if(this.codepoint < 0x10000){ + return String.fromCharCode(this.codepoint); + } else { + var x = this.codepoint - 0x10000; + return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00); + } + }; - c = (((c << 2) + c)) | 0; - c = (c + d0) | 0; - d0 = c & 0x1fff; - c = (c >>> 13); - d1 += c; + UChar.prototype.getDecomp = function(){ + this.prepFeature(); + return this.feature[0] || null; + }; - h0 = d0; - h1 = d1; - h2 = d2; - h3 = d3; - h4 = d4; - h5 = d5; - h6 = d6; - h7 = d7; - h8 = d8; - h9 = d9; + UChar.prototype.isCompatibility = function(){ + this.prepFeature(); + return !!this.feature[1] && (this.feature[1] & (1 << 8)); + }; + UChar.prototype.isExclude = function(){ + this.prepFeature(); + return !!this.feature[1] && (this.feature[1] & (1 << 9)); + }; + UChar.prototype.getCanonicalClass = function(){ + this.prepFeature(); + return !!this.feature[1] ? (this.feature[1] & 0xff) : 0; + }; + UChar.prototype.getComposite = function(following){ + this.prepFeature(); + if(!this.feature[2]){ + return null; + } + var cp = this.feature[2][following.codepoint]; + return cp ? UChar.fromCharCode(cp) : null; + }; - mpos += 16; - bytes -= 16; - } - this.h[0] = h0; - this.h[1] = h1; - this.h[2] = h2; - this.h[3] = h3; - this.h[4] = h4; - this.h[5] = h5; - this.h[6] = h6; - this.h[7] = h7; - this.h[8] = h8; - this.h[9] = h9; -}; + var UCharIterator = function(str){ + this.str = str; + this.cursor = 0; + }; + UCharIterator.prototype.next = function(){ + if(!!this.str && this.cursor < this.str.length){ + var cp = this.str.charCodeAt(this.cursor++); + var d; + if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){ + cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000; + ++this.cursor; + } + return UChar.fromCharCode(cp); + } else { + this.str = null; + return null; + } + }; -poly1305.prototype.finish = function(mac, macpos) { - var g = new Uint16Array(10); - var c, mask, f, i; + var RecursDecompIterator = function(it, cano){ + this.it = it; + this.canonical = cano; + this.resBuf = []; + }; - if (this.leftover) { - i = this.leftover; - this.buffer[i++] = 1; - for (; i < 16; i++) this.buffer[i] = 0; - this.fin = 1; - this.blocks(this.buffer, 0, 16); - } + RecursDecompIterator.prototype.next = function(){ + function recursiveDecomp(cano, uchar){ + var decomp = uchar.getDecomp(); + if(!!decomp && !(cano && uchar.isCompatibility())){ + var ret = []; + for(var i = 0; i < decomp.length; ++i){ + var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i])); + ret = ret.concat(a); + } + return ret; + } else { + return [uchar]; + } + } + if(this.resBuf.length === 0){ + var uchar = this.it.next(); + if(!uchar){ + return null; + } + this.resBuf = recursiveDecomp(this.canonical, uchar); + } + return this.resBuf.shift(); + }; - c = this.h[1] >>> 13; - this.h[1] &= 0x1fff; - for (i = 2; i < 10; i++) { - this.h[i] += c; - c = this.h[i] >>> 13; - this.h[i] &= 0x1fff; - } - this.h[0] += (c * 5); - c = this.h[0] >>> 13; - this.h[0] &= 0x1fff; - this.h[1] += c; - c = this.h[1] >>> 13; - this.h[1] &= 0x1fff; - this.h[2] += c; + var DecompIterator = function(it){ + this.it = it; + this.resBuf = []; + }; - g[0] = this.h[0] + 5; - c = g[0] >>> 13; - g[0] &= 0x1fff; - for (i = 1; i < 10; i++) { - g[i] = this.h[i] + c; - c = g[i] >>> 13; - g[i] &= 0x1fff; - } - g[9] -= (1 << 13); + DecompIterator.prototype.next = function(){ + var cc; + if(this.resBuf.length === 0){ + do{ + var uchar = this.it.next(); + if(!uchar){ + break; + } + cc = uchar.getCanonicalClass(); + var inspt = this.resBuf.length; + if(cc !== 0){ + for(; inspt > 0; --inspt){ + var uchar2 = this.resBuf[inspt - 1]; + var cc2 = uchar2.getCanonicalClass(); + if(cc2 <= cc){ + break; + } + } + } + this.resBuf.splice(inspt, 0, uchar); + } while(cc !== 0); + } + return this.resBuf.shift(); + }; - mask = (g[9] >>> ((2 * 8) - 1)) - 1; - for (i = 0; i < 10; i++) g[i] &= mask; - mask = ~mask; - for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i]; + var CompIterator = function(it){ + this.it = it; + this.procBuf = []; + this.resBuf = []; + this.lastClass = null; + }; - this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff; - this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff; - this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff; - this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff; - this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff; - this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff; - this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff; - this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff; + CompIterator.prototype.next = function(){ + while(this.resBuf.length === 0){ + var uchar = this.it.next(); + if(!uchar){ + this.resBuf = this.procBuf; + this.procBuf = []; + break; + } + if(this.procBuf.length === 0){ + this.lastClass = uchar.getCanonicalClass(); + this.procBuf.push(uchar); + } else { + var starter = this.procBuf[0]; + var composite = starter.getComposite(uchar); + var cc = uchar.getCanonicalClass(); + if(!!composite && (this.lastClass < cc || this.lastClass === 0)){ + this.procBuf[0] = composite; + } else { + if(cc === 0){ + this.resBuf = this.procBuf; + this.procBuf = []; + } + this.lastClass = cc; + this.procBuf.push(uchar); + } + } + } + return this.resBuf.shift(); + }; - f = this.h[0] + this.pad[0]; - this.h[0] = f & 0xffff; - for (i = 1; i < 8; i++) { - f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0; - this.h[i] = f & 0xffff; - } + var createIterator = function(mode, str){ + switch(mode){ + case "NFD": + return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)); + case "NFKD": + return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)); + case "NFC": + return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true))); + case "NFKC": + return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false))); + } + throw mode + " is invalid"; + }; + var normalize = function(mode, str){ + var it = createIterator(mode, str); + var ret = ""; + var uchar; + while(!!(uchar = it.next())){ + ret += uchar.toString(); + } + return ret; + }; - mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff; - mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff; - mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff; - mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff; - mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff; - mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff; - mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff; - mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff; - mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff; - mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff; - mac[macpos+10] = (this.h[5] >>> 0) & 0xff; - mac[macpos+11] = (this.h[5] >>> 8) & 0xff; - mac[macpos+12] = (this.h[6] >>> 0) & 0xff; - mac[macpos+13] = (this.h[6] >>> 8) & 0xff; - mac[macpos+14] = (this.h[7] >>> 0) & 0xff; - mac[macpos+15] = (this.h[7] >>> 8) & 0xff; -}; + /* API functions */ + function nfd(str){ + return normalize("NFD", str); + } -poly1305.prototype.update = function(m, mpos, bytes) { - var i, want; + function nfkd(str){ + return normalize("NFKD", str); + } - if (this.leftover) { - want = (16 - this.leftover); - if (want > bytes) - want = bytes; - for (i = 0; i < want; i++) - this.buffer[this.leftover + i] = m[mpos+i]; - bytes -= want; - mpos += want; - this.leftover += want; - if (this.leftover < 16) - return; - this.blocks(this.buffer, 0, 16); - this.leftover = 0; - } + function nfc(str){ + return normalize("NFC", str); + } - if (bytes >= 16) { - want = bytes - (bytes % 16); - this.blocks(m, mpos, want); - mpos += want; - bytes -= want; - } + function nfkc(str){ + return normalize("NFKC", str); + } + +/* Unicode data */ +UChar.udata={ +0:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]}, +256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]}, +512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]}, +768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]}, +1024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]}, +1280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]}, +1536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]}, +1792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]}, +2048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]}, +2304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]}, +2560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]}, +2816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]}, +3072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]}, +3328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]}, +3584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]}, +3840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]}, +4096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]}, +4352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]}, +4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]}, +4864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]}, +5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]}, +5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]}, +5632:{71231:[,9],71350:[,9],71351:[,7]}, +5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]}, +6144:{6313:[,228]}, +6400:{6457:[,222],6458:[,230],6459:[,220]}, +6656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]}, +6912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]}, +7168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]}, +7424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]}, +7680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]}, +7936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]}, +8192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]}, +8448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]}, +8704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]}, +8960:{9001:[[12296]],9002:[[12297]]}, +9216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]}, +10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]}, +11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]}, +11520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]}, +11776:{11935:[[27597],256],12019:[[40863],256]}, +12032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]}, +12288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]}, +12544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]}, +12800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]}, +13056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]}, +27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]}, +27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]}, +42496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]}, +42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]}, +43008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]}, +43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]}, +43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]}, +43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]}, +48128:{113822:[,1]}, +53504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]}, +53760:{119362:[,230],119363:[,230],119364:[,230]}, +54272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]}, +54528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]}, +54784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]}, +55040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]}, +59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]}, +60928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]}, +61696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]}, +61952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]}, +63488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]}, +63744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]}, +64000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]}, +64256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]}, +64512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]}, +64768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]}, +65024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]}, +65280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]} - if (bytes) { - for (i = 0; i < bytes; i++) - this.buffer[this.leftover + i] = m[mpos+i]; - this.leftover += bytes; - } }; -function crypto_onetimeauth(out, outpos, m, mpos, n, k) { - var s = new poly1305(k); - s.update(m, mpos, n); - s.finish(out, outpos); - return 0; -} - -function crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) { - var x = new Uint8Array(16); - crypto_onetimeauth(x,0,m,mpos,n,k); - return crypto_verify_16(h,hpos,x,0); -} - -function crypto_secretbox(c,m,d,n,k) { - var i; - if (d < 32) return -1; - crypto_stream_xor(c,0,m,0,d,n,k); - crypto_onetimeauth(c, 16, c, 32, d - 32, c); - for (i = 0; i < 16; i++) c[i] = 0; - return 0; -} - -function crypto_secretbox_open(m,c,d,n,k) { - var i; - var x = new Uint8Array(32); - if (d < 32) return -1; - crypto_stream(x,0,32,n,k); - if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1; - crypto_stream_xor(m,0,c,0,d,n,k); - for (i = 0; i < 32; i++) m[i] = 0; - return 0; -} - -function set25519(r, a) { - var i; - for (i = 0; i < 16; i++) r[i] = a[i]|0; -} - -function car25519(o) { - var i, v, c = 1; - for (i = 0; i < 16; i++) { - v = o[i] + c + 65535; - c = Math.floor(v / 65536); - o[i] = v - c * 65536; - } - o[0] += c-1 + 37 * (c-1); -} - -function sel25519(p, q, b) { - var t, c = ~(b-1); - for (var i = 0; i < 16; i++) { - t = c & (p[i] ^ q[i]); - p[i] ^= t; - q[i] ^= t; - } -} + /***** Module to export */ + var unorm = { + nfc: nfc, + nfd: nfd, + nfkc: nfkc, + nfkd: nfkd + }; -function pack25519(o, n) { - var i, j, b; - var m = gf(), t = gf(); - for (i = 0; i < 16; i++) t[i] = n[i]; - car25519(t); - car25519(t); - car25519(t); - for (j = 0; j < 2; j++) { - m[0] = t[0] - 0xffed; - for (i = 1; i < 15; i++) { - m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1); - m[i-1] &= 0xffff; - } - m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1); - b = (m[15]>>16) & 1; - m[14] &= 0xffff; - sel25519(t, m, 1-b); - } - for (i = 0; i < 16; i++) { - o[2*i] = t[i] & 0xff; - o[2*i+1] = t[i]>>8; - } -} + /*globals module:true,define:true*/ -function neq25519(a, b) { - var c = new Uint8Array(32), d = new Uint8Array(32); - pack25519(c, a); - pack25519(d, b); - return crypto_verify_32(c, 0, d, 0); -} + // CommonJS + if (typeof module === "object") { + module.exports = unorm; -function par25519(a) { - var d = new Uint8Array(32); - pack25519(d, a); - return d[0] & 1; -} + // AMD + } else if (typeof define === "function" && define.amd) { + define("unorm", function () { + return unorm; + }); -function unpack25519(o, n) { - var i; - for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8); - o[15] &= 0x7fff; -} + // Global + } else { + root.unorm = unorm; + } -function A(o, a, b) { - for (var i = 0; i < 16; i++) o[i] = a[i] + b[i]; -} + /***** Export as shim for String::normalize method *****/ + /* + http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21 -function Z(o, a, b) { - for (var i = 0; i < 16; i++) o[i] = a[i] - b[i]; -} + 21.1.3.12 String.prototype.normalize(form="NFC") + When the normalize method is called with one argument form, the following steps are taken: -function M(o, a, b) { - var v, c, - t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, - t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, - t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, - t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, - b0 = b[0], - b1 = b[1], - b2 = b[2], - b3 = b[3], - b4 = b[4], - b5 = b[5], - b6 = b[6], - b7 = b[7], - b8 = b[8], - b9 = b[9], - b10 = b[10], - b11 = b[11], - b12 = b[12], - b13 = b[13], - b14 = b[14], - b15 = b[15]; + 1. Let O be CheckObjectCoercible(this value). + 2. Let S be ToString(O). + 3. ReturnIfAbrupt(S). + 4. If form is not provided or undefined let form be "NFC". + 5. Let f be ToString(form). + 6. ReturnIfAbrupt(f). + 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception. + 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms. + 9. Return ns. - v = a[0]; - t0 += v * b0; - t1 += v * b1; - t2 += v * b2; - t3 += v * b3; - t4 += v * b4; - t5 += v * b5; - t6 += v * b6; - t7 += v * b7; - t8 += v * b8; - t9 += v * b9; - t10 += v * b10; - t11 += v * b11; - t12 += v * b12; - t13 += v * b13; - t14 += v * b14; - t15 += v * b15; - v = a[1]; - t1 += v * b0; - t2 += v * b1; - t3 += v * b2; - t4 += v * b3; - t5 += v * b4; - t6 += v * b5; - t7 += v * b6; - t8 += v * b7; - t9 += v * b8; - t10 += v * b9; - t11 += v * b10; - t12 += v * b11; - t13 += v * b12; - t14 += v * b13; - t15 += v * b14; - t16 += v * b15; - v = a[2]; - t2 += v * b0; - t3 += v * b1; - t4 += v * b2; - t5 += v * b3; - t6 += v * b4; - t7 += v * b5; - t8 += v * b6; - t9 += v * b7; - t10 += v * b8; - t11 += v * b9; - t12 += v * b10; - t13 += v * b11; - t14 += v * b12; - t15 += v * b13; - t16 += v * b14; - t17 += v * b15; - v = a[3]; - t3 += v * b0; - t4 += v * b1; - t5 += v * b2; - t6 += v * b3; - t7 += v * b4; - t8 += v * b5; - t9 += v * b6; - t10 += v * b7; - t11 += v * b8; - t12 += v * b9; - t13 += v * b10; - t14 += v * b11; - t15 += v * b12; - t16 += v * b13; - t17 += v * b14; - t18 += v * b15; - v = a[4]; - t4 += v * b0; - t5 += v * b1; - t6 += v * b2; - t7 += v * b3; - t8 += v * b4; - t9 += v * b5; - t10 += v * b6; - t11 += v * b7; - t12 += v * b8; - t13 += v * b9; - t14 += v * b10; - t15 += v * b11; - t16 += v * b12; - t17 += v * b13; - t18 += v * b14; - t19 += v * b15; - v = a[5]; - t5 += v * b0; - t6 += v * b1; - t7 += v * b2; - t8 += v * b3; - t9 += v * b4; - t10 += v * b5; - t11 += v * b6; - t12 += v * b7; - t13 += v * b8; - t14 += v * b9; - t15 += v * b10; - t16 += v * b11; - t17 += v * b12; - t18 += v * b13; - t19 += v * b14; - t20 += v * b15; - v = a[6]; - t6 += v * b0; - t7 += v * b1; - t8 += v * b2; - t9 += v * b3; - t10 += v * b4; - t11 += v * b5; - t12 += v * b6; - t13 += v * b7; - t14 += v * b8; - t15 += v * b9; - t16 += v * b10; - t17 += v * b11; - t18 += v * b12; - t19 += v * b13; - t20 += v * b14; - t21 += v * b15; - v = a[7]; - t7 += v * b0; - t8 += v * b1; - t9 += v * b2; - t10 += v * b3; - t11 += v * b4; - t12 += v * b5; - t13 += v * b6; - t14 += v * b7; - t15 += v * b8; - t16 += v * b9; - t17 += v * b10; - t18 += v * b11; - t19 += v * b12; - t20 += v * b13; - t21 += v * b14; - t22 += v * b15; - v = a[8]; - t8 += v * b0; - t9 += v * b1; - t10 += v * b2; - t11 += v * b3; - t12 += v * b4; - t13 += v * b5; - t14 += v * b6; - t15 += v * b7; - t16 += v * b8; - t17 += v * b9; - t18 += v * b10; - t19 += v * b11; - t20 += v * b12; - t21 += v * b13; - t22 += v * b14; - t23 += v * b15; - v = a[9]; - t9 += v * b0; - t10 += v * b1; - t11 += v * b2; - t12 += v * b3; - t13 += v * b4; - t14 += v * b5; - t15 += v * b6; - t16 += v * b7; - t17 += v * b8; - t18 += v * b9; - t19 += v * b10; - t20 += v * b11; - t21 += v * b12; - t22 += v * b13; - t23 += v * b14; - t24 += v * b15; - v = a[10]; - t10 += v * b0; - t11 += v * b1; - t12 += v * b2; - t13 += v * b3; - t14 += v * b4; - t15 += v * b5; - t16 += v * b6; - t17 += v * b7; - t18 += v * b8; - t19 += v * b9; - t20 += v * b10; - t21 += v * b11; - t22 += v * b12; - t23 += v * b13; - t24 += v * b14; - t25 += v * b15; - v = a[11]; - t11 += v * b0; - t12 += v * b1; - t13 += v * b2; - t14 += v * b3; - t15 += v * b4; - t16 += v * b5; - t17 += v * b6; - t18 += v * b7; - t19 += v * b8; - t20 += v * b9; - t21 += v * b10; - t22 += v * b11; - t23 += v * b12; - t24 += v * b13; - t25 += v * b14; - t26 += v * b15; - v = a[12]; - t12 += v * b0; - t13 += v * b1; - t14 += v * b2; - t15 += v * b3; - t16 += v * b4; - t17 += v * b5; - t18 += v * b6; - t19 += v * b7; - t20 += v * b8; - t21 += v * b9; - t22 += v * b10; - t23 += v * b11; - t24 += v * b12; - t25 += v * b13; - t26 += v * b14; - t27 += v * b15; - v = a[13]; - t13 += v * b0; - t14 += v * b1; - t15 += v * b2; - t16 += v * b3; - t17 += v * b4; - t18 += v * b5; - t19 += v * b6; - t20 += v * b7; - t21 += v * b8; - t22 += v * b9; - t23 += v * b10; - t24 += v * b11; - t25 += v * b12; - t26 += v * b13; - t27 += v * b14; - t28 += v * b15; - v = a[14]; - t14 += v * b0; - t15 += v * b1; - t16 += v * b2; - t17 += v * b3; - t18 += v * b4; - t19 += v * b5; - t20 += v * b6; - t21 += v * b7; - t22 += v * b8; - t23 += v * b9; - t24 += v * b10; - t25 += v * b11; - t26 += v * b12; - t27 += v * b13; - t28 += v * b14; - t29 += v * b15; - v = a[15]; - t15 += v * b0; - t16 += v * b1; - t17 += v * b2; - t18 += v * b3; - t19 += v * b4; - t20 += v * b5; - t21 += v * b6; - t22 += v * b7; - t23 += v * b8; - t24 += v * b9; - t25 += v * b10; - t26 += v * b11; - t27 += v * b12; - t28 += v * b13; - t29 += v * b14; - t30 += v * b15; + The length property of the normalize method is 0. - t0 += 38 * t16; - t1 += 38 * t17; - t2 += 38 * t18; - t3 += 38 * t19; - t4 += 38 * t20; - t5 += 38 * t21; - t6 += 38 * t22; - t7 += 38 * t23; - t8 += 38 * t24; - t9 += 38 * t25; - t10 += 38 * t26; - t11 += 38 * t27; - t12 += 38 * t28; - t13 += 38 * t29; - t14 += 38 * t30; - // t15 left as is + *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method. + */ + unorm.shimApplied = false; - // first car - c = 1; - v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; - v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; - v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; - v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; - v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; - v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; - v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; - v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; - v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; - v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; - v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; - v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; - v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; - v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; - v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; - v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; - t0 += c-1 + 37 * (c-1); + if (!String.prototype.normalize) { + String.prototype.normalize = function(form) { + var str = "" + this; + form = form === undefined ? "NFC" : form; - // second car - c = 1; - v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536; - v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536; - v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536; - v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536; - v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536; - v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536; - v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536; - v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536; - v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536; - v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536; - v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536; - v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536; - v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536; - v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536; - v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536; - v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536; - t0 += c-1 + 37 * (c-1); + if (form === "NFC") { + return unorm.nfc(str); + } else if (form === "NFD") { + return unorm.nfd(str); + } else if (form === "NFKC") { + return unorm.nfkc(str); + } else if (form === "NFKD") { + return unorm.nfkd(str); + } else { + throw new RangeError("Invalid normalization form: " + form); + } + }; - o[ 0] = t0; - o[ 1] = t1; - o[ 2] = t2; - o[ 3] = t3; - o[ 4] = t4; - o[ 5] = t5; - o[ 6] = t6; - o[ 7] = t7; - o[ 8] = t8; - o[ 9] = t9; - o[10] = t10; - o[11] = t11; - o[12] = t12; - o[13] = t13; - o[14] = t14; - o[15] = t15; -} + unorm.shimApplied = true; + } +}(this)); -function S(o, a) { - M(o, a, a); -} +},{}],295:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. -function inv25519(o, i) { - var c = gf(); - var a; - for (a = 0; a < 16; a++) c[a] = i[a]; - for (a = 253; a >= 0; a--) { - S(c, c); - if(a !== 2 && a !== 4) M(c, c, i); - } - for (a = 0; a < 16; a++) o[a] = c[a]; -} +var punycode = require('punycode'); -function pow2523(o, i) { - var c = gf(); - var a; - for (a = 0; a < 16; a++) c[a] = i[a]; - for (a = 250; a >= 0; a--) { - S(c, c); - if(a !== 1) M(c, c, i); - } - for (a = 0; a < 16; a++) o[a] = c[a]; -} +exports.parse = urlParse; +exports.resolve = urlResolve; +exports.resolveObject = urlResolveObject; +exports.format = urlFormat; -function crypto_scalarmult(q, n, p) { - var z = new Uint8Array(32); - var x = new Float64Array(80), r, i; - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(); - for (i = 0; i < 31; i++) z[i] = n[i]; - z[31]=(n[31]&127)|64; - z[0]&=248; - unpack25519(x,p); - for (i = 0; i < 16; i++) { - b[i]=x[i]; - d[i]=a[i]=c[i]=0; - } - a[0]=d[0]=1; - for (i=254; i>=0; --i) { - r=(z[i>>>3]>>>(i&7))&1; - sel25519(a,b,r); - sel25519(c,d,r); - A(e,a,c); - Z(a,a,c); - A(c,b,d); - Z(b,b,d); - S(d,e); - S(f,a); - M(a,c,a); - M(c,b,e); - A(e,a,c); - Z(a,a,c); - S(b,a); - Z(c,d,f); - M(a,c,_121665); - A(a,a,d); - M(c,c,a); - M(a,d,f); - M(d,b,x); - S(b,e); - sel25519(a,b,r); - sel25519(c,d,r); - } - for (i = 0; i < 16; i++) { - x[i+16]=a[i]; - x[i+32]=c[i]; - x[i+48]=b[i]; - x[i+64]=d[i]; - } - var x32 = x.subarray(32); - var x16 = x.subarray(16); - inv25519(x32,x32); - M(x16,x16,x32); - pack25519(q,x16); - return 0; -} +exports.Url = Url; -function crypto_scalarmult_base(q, n) { - return crypto_scalarmult(q, n, _9); +function Url() { + this.protocol = null; + this.slashes = null; + this.auth = null; + this.host = null; + this.port = null; + this.hostname = null; + this.hash = null; + this.search = null; + this.query = null; + this.pathname = null; + this.path = null; + this.href = null; } -function crypto_box_keypair(y, x) { - randombytes(x, 32); - return crypto_scalarmult_base(y, x); -} +// Reference: RFC 3986, RFC 1808, RFC 2396 -function crypto_box_beforenm(k, y, x) { - var s = new Uint8Array(32); - crypto_scalarmult(s, x, y); - return crypto_core_hsalsa20(k, _0, s, sigma); -} +// define these here so at least they only have to be +// compiled once on the first module load. +var protocolPattern = /^([a-z0-9.+-]+:)/i, + portPattern = /:[0-9]*$/, -var crypto_box_afternm = crypto_secretbox; -var crypto_box_open_afternm = crypto_secretbox_open; + // RFC 2396: characters reserved for delimiting URLs. + // We actually just auto-escape these. + delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], -function crypto_box(c, m, d, n, y, x) { - var k = new Uint8Array(32); - crypto_box_beforenm(k, y, x); - return crypto_box_afternm(c, m, d, n, k); -} + // RFC 2396: characters not allowed for various reasons. + unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), -function crypto_box_open(m, c, d, n, y, x) { - var k = new Uint8Array(32); - crypto_box_beforenm(k, y, x); - return crypto_box_open_afternm(m, c, d, n, k); + // Allowed by RFCs, but cause of XSS attacks. Always escape these. + autoEscape = ['\''].concat(unwise), + // Characters that are never ever allowed in a hostname. + // Note that any invalid chars are also handled, but these + // are the ones that are *expected* to be seen, so we fast-path + // them. + nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), + hostEndingChars = ['/', '?', '#'], + hostnameMaxLen = 255, + hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/, + hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/, + // protocols that can allow "unsafe" and "unwise" chars. + unsafeProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that never have a hostname. + hostlessProtocol = { + 'javascript': true, + 'javascript:': true + }, + // protocols that always contain a // bit. + slashedProtocol = { + 'http': true, + 'https': true, + 'ftp': true, + 'gopher': true, + 'file': true, + 'http:': true, + 'https:': true, + 'ftp:': true, + 'gopher:': true, + 'file:': true + }, + querystring = require('querystring'); + +function urlParse(url, parseQueryString, slashesDenoteHost) { + if (url && isObject(url) && url instanceof Url) return url; + + var u = new Url; + u.parse(url, parseQueryString, slashesDenoteHost); + return u; } -var K = [ - 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, - 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, - 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, - 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, - 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, - 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, - 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, - 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, - 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, - 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, - 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, - 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, - 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, - 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, - 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, - 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, - 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, - 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, - 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, - 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, - 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, - 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, - 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, - 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, - 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, - 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, - 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, - 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, - 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, - 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, - 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, - 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, - 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, - 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, - 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, - 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, - 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, - 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, - 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, - 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 -]; +Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { + if (!isString(url)) { + throw new TypeError("Parameter 'url' must be a string, not " + typeof url); + } -function crypto_hashblocks_hl(hh, hl, m, n) { - var wh = new Int32Array(16), wl = new Int32Array(16), - bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7, - bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7, - th, tl, i, j, h, l, a, b, c, d; + var rest = url; - var ah0 = hh[0], - ah1 = hh[1], - ah2 = hh[2], - ah3 = hh[3], - ah4 = hh[4], - ah5 = hh[5], - ah6 = hh[6], - ah7 = hh[7], + // trim before proceeding. + // This is to support parse stuff like " http://foo.com \n" + rest = rest.trim(); - al0 = hl[0], - al1 = hl[1], - al2 = hl[2], - al3 = hl[3], - al4 = hl[4], - al5 = hl[5], - al6 = hl[6], - al7 = hl[7]; + var proto = protocolPattern.exec(rest); + if (proto) { + proto = proto[0]; + var lowerProto = proto.toLowerCase(); + this.protocol = lowerProto; + rest = rest.substr(proto.length); + } - var pos = 0; - while (n >= 128) { - for (i = 0; i < 16; i++) { - j = 8 * i + pos; - wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3]; - wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7]; + // figure out if it's got a host + // user@server is *always* interpreted as a hostname, and url + // resolution will treat //foo/bar as host=foo,path=bar because that's + // how the browser resolves relative URLs. + if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { + var slashes = rest.substr(0, 2) === '//'; + if (slashes && !(proto && hostlessProtocol[proto])) { + rest = rest.substr(2); + this.slashes = true; } - for (i = 0; i < 80; i++) { - bh0 = ah0; - bh1 = ah1; - bh2 = ah2; - bh3 = ah3; - bh4 = ah4; - bh5 = ah5; - bh6 = ah6; - bh7 = ah7; + } - bl0 = al0; - bl1 = al1; - bl2 = al2; - bl3 = al3; - bl4 = al4; - bl5 = al5; - bl6 = al6; - bl7 = al7; + if (!hostlessProtocol[proto] && + (slashes || (proto && !slashedProtocol[proto]))) { - // add - h = ah7; - l = al7; + // there's a hostname. + // the first instance of /, ?, ;, or # ends the host. + // + // If there is an @ in the hostname, then non-host chars *are* allowed + // to the left of the last @ sign, unless some host-ending character + // comes *before* the @-sign. + // URLs are obnoxious. + // + // ex: + // http://a@b@c/ => user:a@b host:c + // http://a@b?@c => user:a host:c path:/?@c - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + // v0.12 TODO(isaacs): This is not quite how Chrome does things. + // Review our test case against browsers more comprehensively. - // Sigma1 - h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32)))); - l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32)))); + // find the first instance of any hostEndingChars + var hostEnd = -1; + for (var i = 0; i < hostEndingChars.length; i++) { + var hec = rest.indexOf(hostEndingChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + // at this point, either we have an explicit point where the + // auth portion cannot go past, or the last @ char is the decider. + var auth, atSign; + if (hostEnd === -1) { + // atSign can be anywhere. + atSign = rest.lastIndexOf('@'); + } else { + // atSign must be in auth portion. + // http://a@b/c@d => host:b auth:a path:/c@d + atSign = rest.lastIndexOf('@', hostEnd); + } - // Ch - h = (ah4 & ah5) ^ (~ah4 & ah6); - l = (al4 & al5) ^ (~al4 & al6); + // Now we have a portion which is definitely the auth. + // Pull that off. + if (atSign !== -1) { + auth = rest.slice(0, atSign); + rest = rest.slice(atSign + 1); + this.auth = decodeURIComponent(auth); + } - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + // the host is the remaining to the left of the first non-host char + hostEnd = -1; + for (var i = 0; i < nonHostChars.length; i++) { + var hec = rest.indexOf(nonHostChars[i]); + if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) + hostEnd = hec; + } + // if we still have not hit it, then the entire thing is a host. + if (hostEnd === -1) + hostEnd = rest.length; - // K - h = K[i*2]; - l = K[i*2+1]; + this.host = rest.slice(0, hostEnd); + rest = rest.slice(hostEnd); - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + // pull out port. + this.parseHost(); - // w - h = wh[i%16]; - l = wl[i%16]; + // we've indicated that there is a hostname, + // so even if it's empty, it has to be present. + this.hostname = this.hostname || ''; - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + // if hostname begins with [ and ends with ] + // assume that it's an IPv6 address. + var ipv6Hostname = this.hostname[0] === '[' && + this.hostname[this.hostname.length - 1] === ']'; - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + // validate a little. + if (!ipv6Hostname) { + var hostparts = this.hostname.split(/\./); + for (var i = 0, l = hostparts.length; i < l; i++) { + var part = hostparts[i]; + if (!part) continue; + if (!part.match(hostnamePartPattern)) { + var newpart = ''; + for (var j = 0, k = part.length; j < k; j++) { + if (part.charCodeAt(j) > 127) { + // we replace non-ASCII char with a temporary placeholder + // we need this to make sure size of hostname is not + // broken by replacing non-ASCII by nothing + newpart += 'x'; + } else { + newpart += part[j]; + } + } + // we test again with ASCII char only + if (!newpart.match(hostnamePartPattern)) { + var validParts = hostparts.slice(0, i); + var notHost = hostparts.slice(i + 1); + var bit = part.match(hostnamePartStart); + if (bit) { + validParts.push(bit[1]); + notHost.unshift(bit[2]); + } + if (notHost.length) { + rest = '/' + notHost.join('.') + rest; + } + this.hostname = validParts.join('.'); + break; + } + } + } + } - th = c & 0xffff | d << 16; - tl = a & 0xffff | b << 16; + if (this.hostname.length > hostnameMaxLen) { + this.hostname = ''; + } else { + // hostnames are always lower case. + this.hostname = this.hostname.toLowerCase(); + } - // add - h = th; - l = tl; + if (!ipv6Hostname) { + // IDNA Support: Returns a puny coded representation of "domain". + // It only converts the part of the domain name that + // has non ASCII characters. I.e. it dosent matter if + // you call it with a domain that already is in ASCII. + var domainArray = this.hostname.split('.'); + var newOut = []; + for (var i = 0; i < domainArray.length; ++i) { + var s = domainArray[i]; + newOut.push(s.match(/[^A-Za-z0-9_-]/) ? + 'xn--' + punycode.encode(s) : s); + } + this.hostname = newOut.join('.'); + } - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + var p = this.port ? ':' + this.port : ''; + var h = this.hostname || ''; + this.host = h + p; + this.href += this.host; + + // strip [ and ] from the hostname + // the host field still retains them, though + if (ipv6Hostname) { + this.hostname = this.hostname.substr(1, this.hostname.length - 2); + if (rest[0] !== '/') { + rest = '/' + rest; + } + } + } - // Sigma0 - h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32)))); - l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32)))); + // now rest is set to the post-host stuff. + // chop off any delim chars. + if (!unsafeProtocol[lowerProto]) { - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + // First, make 100% sure that any "autoEscape" chars get + // escaped, even if encodeURIComponent doesn't think they + // need to be. + for (var i = 0, l = autoEscape.length; i < l; i++) { + var ae = autoEscape[i]; + var esc = encodeURIComponent(ae); + if (esc === ae) { + esc = escape(ae); + } + rest = rest.split(ae).join(esc); + } + } - // Maj - h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2); - l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2); - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + // chop off from the tail first. + var hash = rest.indexOf('#'); + if (hash !== -1) { + // got a fragment string. + this.hash = rest.substr(hash); + rest = rest.slice(0, hash); + } + var qm = rest.indexOf('?'); + if (qm !== -1) { + this.search = rest.substr(qm); + this.query = rest.substr(qm + 1); + if (parseQueryString) { + this.query = querystring.parse(this.query); + } + rest = rest.slice(0, qm); + } else if (parseQueryString) { + // no query string, but parseQueryString still requested + this.search = ''; + this.query = {}; + } + if (rest) this.pathname = rest; + if (slashedProtocol[lowerProto] && + this.hostname && !this.pathname) { + this.pathname = '/'; + } - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + //to support http.request + if (this.pathname || this.search) { + var p = this.pathname || ''; + var s = this.search || ''; + this.path = p + s; + } - bh7 = (c & 0xffff) | (d << 16); - bl7 = (a & 0xffff) | (b << 16); + // finally, reconstruct the href based on what has been validated. + this.href = this.format(); + return this; +}; - // add - h = bh3; - l = bl3; +// format a parsed object into a url string +function urlFormat(obj) { + // ensure it's an object, and not a string url. + // If it's an obj, this is a no-op. + // this way, you can call url_format() on strings + // to clean up potentially wonky urls. + if (isString(obj)) obj = urlParse(obj); + if (!(obj instanceof Url)) return Url.prototype.format.call(obj); + return obj.format(); +} - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; +Url.prototype.format = function() { + var auth = this.auth || ''; + if (auth) { + auth = encodeURIComponent(auth); + auth = auth.replace(/%3A/i, ':'); + auth += '@'; + } - h = th; - l = tl; + var protocol = this.protocol || '', + pathname = this.pathname || '', + hash = this.hash || '', + host = false, + query = ''; - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + if (this.host) { + host = auth + this.host; + } else if (this.hostname) { + host = auth + (this.hostname.indexOf(':') === -1 ? + this.hostname : + '[' + this.hostname + ']'); + if (this.port) { + host += ':' + this.port; + } + } - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + if (this.query && + isObject(this.query) && + Object.keys(this.query).length) { + query = querystring.stringify(this.query); + } - bh3 = (c & 0xffff) | (d << 16); - bl3 = (a & 0xffff) | (b << 16); + var search = this.search || (query && ('?' + query)) || ''; - ah1 = bh0; - ah2 = bh1; - ah3 = bh2; - ah4 = bh3; - ah5 = bh4; - ah6 = bh5; - ah7 = bh6; - ah0 = bh7; + if (protocol && protocol.substr(-1) !== ':') protocol += ':'; - al1 = bl0; - al2 = bl1; - al3 = bl2; - al4 = bl3; - al5 = bl4; - al6 = bl5; - al7 = bl6; - al0 = bl7; + // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. + // unless they had them to begin with. + if (this.slashes || + (!protocol || slashedProtocol[protocol]) && host !== false) { + host = '//' + (host || ''); + if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; + } else if (!host) { + host = ''; + } - if (i%16 === 15) { - for (j = 0; j < 16; j++) { - // add - h = wh[j]; - l = wl[j]; + if (hash && hash.charAt(0) !== '#') hash = '#' + hash; + if (search && search.charAt(0) !== '?') search = '?' + search; - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + pathname = pathname.replace(/[?#]/g, function(match) { + return encodeURIComponent(match); + }); + search = search.replace('#', '%23'); - h = wh[(j+9)%16]; - l = wl[(j+9)%16]; + return protocol + host + pathname + search + hash; +}; - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; +function urlResolve(source, relative) { + return urlParse(source, false, true).resolve(relative); +} - // sigma0 - th = wh[(j+1)%16]; - tl = wl[(j+1)%16]; - h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7); - l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7))); +Url.prototype.resolve = function(relative) { + return this.resolveObject(urlParse(relative, false, true)).format(); +}; - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; +function urlResolveObject(source, relative) { + if (!source) return relative; + return urlParse(source, false, true).resolveObject(relative); +} - // sigma1 - th = wh[(j+14)%16]; - tl = wl[(j+14)%16]; - h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6); - l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6))); +Url.prototype.resolveObject = function(relative) { + if (isString(relative)) { + var rel = new Url(); + rel.parse(relative, false, true); + relative = rel; + } - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + var result = new Url(); + Object.keys(this).forEach(function(k) { + result[k] = this[k]; + }, this); - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + // hash is always overridden, no matter what. + // even href="" will remove it. + result.hash = relative.hash; - wh[j] = (c & 0xffff) | (d << 16); - wl[j] = (a & 0xffff) | (b << 16); - } - } - } + // if the relative url is empty, then there's nothing left to do here. + if (relative.href === '') { + result.href = result.format(); + return result; + } - // add - h = ah0; - l = al0; + // hrefs like //foo/bar always cut to the protocol. + if (relative.slashes && !relative.protocol) { + // take everything except the protocol from relative + Object.keys(relative).forEach(function(k) { + if (k !== 'protocol') + result[k] = relative[k]; + }); - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + //urlParse appends trailing / to urls like http://www.example.com + if (slashedProtocol[result.protocol] && + result.hostname && !result.pathname) { + result.path = result.pathname = '/'; + } - h = hh[0]; - l = hl[0]; + result.href = result.format(); + return result; + } - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + if (relative.protocol && relative.protocol !== result.protocol) { + // if it's a known url protocol, then changing + // the protocol does weird things + // first, if it's not file:, then we MUST have a host, + // and if there was a path + // to begin with, then we MUST have a path. + // if it is file:, then the host is dropped, + // because that's known to be hostless. + // anything else is assumed to be absolute. + if (!slashedProtocol[relative.protocol]) { + Object.keys(relative).forEach(function(k) { + result[k] = relative[k]; + }); + result.href = result.format(); + return result; + } - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + result.protocol = relative.protocol; + if (!relative.host && !hostlessProtocol[relative.protocol]) { + var relPath = (relative.pathname || '').split('/'); + while (relPath.length && !(relative.host = relPath.shift())); + if (!relative.host) relative.host = ''; + if (!relative.hostname) relative.hostname = ''; + if (relPath[0] !== '') relPath.unshift(''); + if (relPath.length < 2) relPath.unshift(''); + result.pathname = relPath.join('/'); + } else { + result.pathname = relative.pathname; + } + result.search = relative.search; + result.query = relative.query; + result.host = relative.host || ''; + result.auth = relative.auth; + result.hostname = relative.hostname || relative.host; + result.port = relative.port; + // to support http.request + if (result.pathname || result.search) { + var p = result.pathname || ''; + var s = result.search || ''; + result.path = p + s; + } + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; + } - hh[0] = ah0 = (c & 0xffff) | (d << 16); - hl[0] = al0 = (a & 0xffff) | (b << 16); + var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), + isRelAbs = ( + relative.host || + relative.pathname && relative.pathname.charAt(0) === '/' + ), + mustEndAbs = (isRelAbs || isSourceAbs || + (result.host && relative.pathname)), + removeAllDots = mustEndAbs, + srcPath = result.pathname && result.pathname.split('/') || [], + relPath = relative.pathname && relative.pathname.split('/') || [], + psychotic = result.protocol && !slashedProtocol[result.protocol]; - h = ah1; - l = al1; + // if the url is a non-slashed url, then relative + // links like ../.. should be able + // to crawl up to the hostname, as well. This is strange. + // result.protocol has already been set by now. + // Later on, put the first path part into the host field. + if (psychotic) { + result.hostname = ''; + result.port = null; + if (result.host) { + if (srcPath[0] === '') srcPath[0] = result.host; + else srcPath.unshift(result.host); + } + result.host = ''; + if (relative.protocol) { + relative.hostname = null; + relative.port = null; + if (relative.host) { + if (relPath[0] === '') relPath[0] = relative.host; + else relPath.unshift(relative.host); + } + relative.host = null; + } + mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); + } - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + if (isRelAbs) { + // it's absolute. + result.host = (relative.host || relative.host === '') ? + relative.host : result.host; + result.hostname = (relative.hostname || relative.hostname === '') ? + relative.hostname : result.hostname; + result.search = relative.search; + result.query = relative.query; + srcPath = relPath; + // fall through to the dot-handling below. + } else if (relPath.length) { + // it's relative + // throw away the existing file, and take the new path instead. + if (!srcPath) srcPath = []; + srcPath.pop(); + srcPath = srcPath.concat(relPath); + result.search = relative.search; + result.query = relative.query; + } else if (!isNullOrUndefined(relative.search)) { + // just pull out the search. + // like href='?foo'. + // Put this after the other two cases because it simplifies the booleans + if (psychotic) { + result.hostname = result.host = srcPath.shift(); + //occationaly the auth can get stuck only in host + //this especialy happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } + result.search = relative.search; + result.query = relative.query; + //to support http.request + if (!isNull(result.pathname) || !isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.href = result.format(); + return result; + } - h = hh[1]; - l = hl[1]; + if (!srcPath.length) { + // no path at all. easy. + // we've already handled the other stuff above. + result.pathname = null; + //to support http.request + if (result.search) { + result.path = '/' + result.search; + } else { + result.path = null; + } + result.href = result.format(); + return result; + } - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + // if a url ENDs in . or .., then it must get a trailing slash. + // however, if it ends in anything else non-slashy, + // then it must NOT get a trailing slash. + var last = srcPath.slice(-1)[0]; + var hasTrailingSlash = ( + (result.host || relative.host) && (last === '.' || last === '..') || + last === ''); - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + // strip single dots, resolve double dots to parent dir + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = srcPath.length; i >= 0; i--) { + last = srcPath[i]; + if (last == '.') { + srcPath.splice(i, 1); + } else if (last === '..') { + srcPath.splice(i, 1); + up++; + } else if (up) { + srcPath.splice(i, 1); + up--; + } + } - hh[1] = ah1 = (c & 0xffff) | (d << 16); - hl[1] = al1 = (a & 0xffff) | (b << 16); + // if the path is allowed to go above the root, restore leading ..s + if (!mustEndAbs && !removeAllDots) { + for (; up--; up) { + srcPath.unshift('..'); + } + } - h = ah2; - l = al2; + if (mustEndAbs && srcPath[0] !== '' && + (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { + srcPath.unshift(''); + } - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { + srcPath.push(''); + } - h = hh[2]; - l = hl[2]; + var isAbsolute = srcPath[0] === '' || + (srcPath[0] && srcPath[0].charAt(0) === '/'); - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + // put the host back + if (psychotic) { + result.hostname = result.host = isAbsolute ? '' : + srcPath.length ? srcPath.shift() : ''; + //occationaly the auth can get stuck only in host + //this especialy happens in cases like + //url.resolveObject('mailto:local1@domain1', 'local2@domain2') + var authInHost = result.host && result.host.indexOf('@') > 0 ? + result.host.split('@') : false; + if (authInHost) { + result.auth = authInHost.shift(); + result.host = result.hostname = authInHost.shift(); + } + } - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + mustEndAbs = mustEndAbs || (result.host && srcPath.length); - hh[2] = ah2 = (c & 0xffff) | (d << 16); - hl[2] = al2 = (a & 0xffff) | (b << 16); + if (mustEndAbs && !isAbsolute) { + srcPath.unshift(''); + } - h = ah3; - l = al3; + if (!srcPath.length) { + result.pathname = null; + result.path = null; + } else { + result.pathname = srcPath.join('/'); + } - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + //to support request.http + if (!isNull(result.pathname) || !isNull(result.search)) { + result.path = (result.pathname ? result.pathname : '') + + (result.search ? result.search : ''); + } + result.auth = relative.auth || result.auth; + result.slashes = result.slashes || relative.slashes; + result.href = result.format(); + return result; +}; - h = hh[3]; - l = hl[3]; +Url.prototype.parseHost = function() { + var host = this.host; + var port = portPattern.exec(host); + if (port) { + port = port[0]; + if (port !== ':') { + this.port = port.substr(1); + } + host = host.substr(0, host.length - port.length); + } + if (host) this.hostname = host; +}; - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; +function isString(arg) { + return typeof arg === "string"; +} - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} - hh[3] = ah3 = (c & 0xffff) | (d << 16); - hl[3] = al3 = (a & 0xffff) | (b << 16); +function isNull(arg) { + return arg === null; +} +function isNullOrUndefined(arg) { + return arg == null; +} - h = ah4; - l = al4; +},{"punycode":243,"querystring":246}],296:[function(require,module,exports){ +(function (global){ +/*! https://mths.be/utf8js v2.0.0 by @mathias */ +;(function(root) { - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + // Detect free variables `exports` + var freeExports = typeof exports == 'object' && exports; - h = hh[4]; - l = hl[4]; + // Detect free variable `module` + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root` + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + /*--------------------------------------------------------------------------*/ - hh[4] = ah4 = (c & 0xffff) | (d << 16); - hl[4] = al4 = (a & 0xffff) | (b << 16); + var stringFromCharCode = String.fromCharCode; - h = ah5; - l = al5; + // Taken from https://mths.be/punycode + function ucs2decode(string) { + var output = []; + var counter = 0; + var length = string.length; + var value; + var extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + // Taken from https://mths.be/punycode + function ucs2encode(array) { + var length = array.length; + var index = -1; + var value; + var output = ''; + while (++index < length) { + value = array[index]; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + } + return output; + } - h = hh[5]; - l = hl[5]; + function checkScalarValue(codePoint) { + if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { + throw Error( + 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + + ' is not a scalar value' + ); + } + } + /*--------------------------------------------------------------------------*/ - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + function createByte(codePoint, shift) { + return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); + } - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + function encodeCodePoint(codePoint) { + if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence + return stringFromCharCode(codePoint); + } + var symbol = ''; + if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence + symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); + } + else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence + checkScalarValue(codePoint); + symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); + symbol += createByte(codePoint, 6); + } + else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence + symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); + symbol += createByte(codePoint, 12); + symbol += createByte(codePoint, 6); + } + symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); + return symbol; + } - hh[5] = ah5 = (c & 0xffff) | (d << 16); - hl[5] = al5 = (a & 0xffff) | (b << 16); + function utf8encode(string) { + var codePoints = ucs2decode(string); + var length = codePoints.length; + var index = -1; + var codePoint; + var byteString = ''; + while (++index < length) { + codePoint = codePoints[index]; + byteString += encodeCodePoint(codePoint); + } + return byteString; + } - h = ah6; - l = al6; + /*--------------------------------------------------------------------------*/ - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + function readContinuationByte() { + if (byteIndex >= byteCount) { + throw Error('Invalid byte index'); + } - h = hh[6]; - l = hl[6]; + var continuationByte = byteArray[byteIndex] & 0xFF; + byteIndex++; - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + if ((continuationByte & 0xC0) == 0x80) { + return continuationByte & 0x3F; + } - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + // If we end up here, it’s not a continuation byte + throw Error('Invalid continuation byte'); + } - hh[6] = ah6 = (c & 0xffff) | (d << 16); - hl[6] = al6 = (a & 0xffff) | (b << 16); + function decodeSymbol() { + var byte1; + var byte2; + var byte3; + var byte4; + var codePoint; - h = ah7; - l = al7; + if (byteIndex > byteCount) { + throw Error('Invalid byte index'); + } - a = l & 0xffff; b = l >>> 16; - c = h & 0xffff; d = h >>> 16; + if (byteIndex == byteCount) { + return false; + } - h = hh[7]; - l = hl[7]; + // Read first byte + byte1 = byteArray[byteIndex] & 0xFF; + byteIndex++; - a += l & 0xffff; b += l >>> 16; - c += h & 0xffff; d += h >>> 16; + // 1-byte sequence (no continuation bytes) + if ((byte1 & 0x80) == 0) { + return byte1; + } - b += a >>> 16; - c += b >>> 16; - d += c >>> 16; + // 2-byte sequence + if ((byte1 & 0xE0) == 0xC0) { + var byte2 = readContinuationByte(); + codePoint = ((byte1 & 0x1F) << 6) | byte2; + if (codePoint >= 0x80) { + return codePoint; + } else { + throw Error('Invalid continuation byte'); + } + } - hh[7] = ah7 = (c & 0xffff) | (d << 16); - hl[7] = al7 = (a & 0xffff) | (b << 16); + // 3-byte sequence (may include unpaired surrogates) + if ((byte1 & 0xF0) == 0xE0) { + byte2 = readContinuationByte(); + byte3 = readContinuationByte(); + codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; + if (codePoint >= 0x0800) { + checkScalarValue(codePoint); + return codePoint; + } else { + throw Error('Invalid continuation byte'); + } + } - pos += 128; - n -= 128; - } + // 4-byte sequence + if ((byte1 & 0xF8) == 0xF0) { + byte2 = readContinuationByte(); + byte3 = readContinuationByte(); + byte4 = readContinuationByte(); + codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) | + (byte3 << 0x06) | byte4; + if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { + return codePoint; + } + } - return n; -} + throw Error('Invalid UTF-8 detected'); + } -function crypto_hash(out, m, n) { - var hh = new Int32Array(8), - hl = new Int32Array(8), - x = new Uint8Array(256), - i, b = n; + var byteArray; + var byteCount; + var byteIndex; + function utf8decode(byteString) { + byteArray = ucs2decode(byteString); + byteCount = byteArray.length; + byteIndex = 0; + var codePoints = []; + var tmp; + while ((tmp = decodeSymbol()) !== false) { + codePoints.push(tmp); + } + return ucs2encode(codePoints); + } - hh[0] = 0x6a09e667; - hh[1] = 0xbb67ae85; - hh[2] = 0x3c6ef372; - hh[3] = 0xa54ff53a; - hh[4] = 0x510e527f; - hh[5] = 0x9b05688c; - hh[6] = 0x1f83d9ab; - hh[7] = 0x5be0cd19; + /*--------------------------------------------------------------------------*/ - hl[0] = 0xf3bcc908; - hl[1] = 0x84caa73b; - hl[2] = 0xfe94f82b; - hl[3] = 0x5f1d36f1; - hl[4] = 0xade682d1; - hl[5] = 0x2b3e6c1f; - hl[6] = 0xfb41bd6b; - hl[7] = 0x137e2179; + var utf8 = { + 'version': '2.0.0', + 'encode': utf8encode, + 'decode': utf8decode + }; - crypto_hashblocks_hl(hh, hl, m, n); - n %= 128; + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof define == 'function' && + typeof define.amd == 'object' && + define.amd + ) { + define(function() { + return utf8; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = utf8; + } else { // in Narwhal or RingoJS v0.7.0- + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + for (var key in utf8) { + hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); + } + } + } else { // in Rhino or a web browser + root.utf8 = utf8; + } - for (i = 0; i < n; i++) x[i] = m[b-n+i]; - x[n] = 128; +}(this)); - n = 256-128*(n<112?1:0); - x[n-9] = 0; - ts64(x, n-8, (b / 0x20000000) | 0, b << 3); - crypto_hashblocks_hl(hh, hl, x, n); +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],297:[function(require,module,exports){ +module.exports = function isBuffer(arg) { + return arg && typeof arg === 'object' + && typeof arg.copy === 'function' + && typeof arg.fill === 'function' + && typeof arg.readUInt8 === 'function'; +} +},{}],298:[function(require,module,exports){ +(function (process,global){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. - for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]); +var formatRegExp = /%[sdj%]/g; +exports.format = function(f) { + if (!isString(f)) { + var objects = []; + for (var i = 0; i < arguments.length; i++) { + objects.push(inspect(arguments[i])); + } + return objects.join(' '); + } - return 0; -} + var i = 1; + var args = arguments; + var len = args.length; + var str = String(f).replace(formatRegExp, function(x) { + if (x === '%%') return '%'; + if (i >= len) return x; + switch (x) { + case '%s': return String(args[i++]); + case '%d': return Number(args[i++]); + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + default: + return x; + } + }); + for (var x = args[i]; i < len; x = args[++i]) { + if (isNull(x) || !isObject(x)) { + str += ' ' + x; + } else { + str += ' ' + inspect(x); + } + } + return str; +}; -function add(p, q) { - var a = gf(), b = gf(), c = gf(), - d = gf(), e = gf(), f = gf(), - g = gf(), h = gf(), t = gf(); - Z(a, p[1], p[0]); - Z(t, q[1], q[0]); - M(a, a, t); - A(b, p[0], p[1]); - A(t, q[0], q[1]); - M(b, b, t); - M(c, p[3], q[3]); - M(c, c, D2); - M(d, p[2], q[2]); - A(d, d, d); - Z(e, b, a); - Z(f, d, c); - A(g, d, c); - A(h, b, a); +// Mark that a method should not be used. +// Returns a modified function which warns once by default. +// If --no-deprecation is set, then it is a no-op. +exports.deprecate = function(fn, msg) { + // Allow for deprecating things in the process of starting up. + if (isUndefined(global.process)) { + return function() { + return exports.deprecate(fn, msg).apply(this, arguments); + }; + } - M(p[0], e, f); - M(p[1], h, g); - M(p[2], g, f); - M(p[3], e, h); -} + if (process.noDeprecation === true) { + return fn; + } -function cswap(p, q, b) { - var i; - for (i = 0; i < 4; i++) { - sel25519(p[i], q[i], b); + var warned = false; + function deprecated() { + if (!warned) { + if (process.throwDeprecation) { + throw new Error(msg); + } else if (process.traceDeprecation) { + console.trace(msg); + } else { + console.error(msg); + } + warned = true; + } + return fn.apply(this, arguments); } -} -function pack(r, p) { - var tx = gf(), ty = gf(), zi = gf(); - inv25519(zi, p[2]); - M(tx, p[0], zi); - M(ty, p[1], zi); - pack25519(r, ty); - r[31] ^= par25519(tx) << 7; -} + return deprecated; +}; -function scalarmult(p, q, s) { - var b, i; - set25519(p[0], gf0); - set25519(p[1], gf1); - set25519(p[2], gf1); - set25519(p[3], gf0); - for (i = 255; i >= 0; --i) { - b = (s[(i/8)|0] >> (i&7)) & 1; - cswap(p, q, b); - add(q, p); - add(p, p); - cswap(p, q, b); + +var debugs = {}; +var debugEnviron; +exports.debuglog = function(set) { + if (isUndefined(debugEnviron)) + debugEnviron = process.env.NODE_DEBUG || ''; + set = set.toUpperCase(); + if (!debugs[set]) { + if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { + var pid = process.pid; + debugs[set] = function() { + var msg = exports.format.apply(exports, arguments); + console.error('%s %d: %s', set, pid, msg); + }; + } else { + debugs[set] = function() {}; + } } -} + return debugs[set]; +}; -function scalarbase(p, s) { - var q = [gf(), gf(), gf(), gf()]; - set25519(q[0], X); - set25519(q[1], Y); - set25519(q[2], gf1); - M(q[3], X, Y); - scalarmult(p, q, s); -} -function crypto_sign_keypair(pk, sk, seeded) { - var d = new Uint8Array(64); - var p = [gf(), gf(), gf(), gf()]; - var i; +/** + * Echos the value of a value. Trys to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Object} opts Optional options object that alters the output. + */ +/* legacy: obj, showHidden, depth, colors*/ +function inspect(obj, opts) { + // default options + var ctx = { + seen: [], + stylize: stylizeNoColor + }; + // legacy... + if (arguments.length >= 3) ctx.depth = arguments[2]; + if (arguments.length >= 4) ctx.colors = arguments[3]; + if (isBoolean(opts)) { + // legacy... + ctx.showHidden = opts; + } else if (opts) { + // got an "options" object + exports._extend(ctx, opts); + } + // set default options + if (isUndefined(ctx.showHidden)) ctx.showHidden = false; + if (isUndefined(ctx.depth)) ctx.depth = 2; + if (isUndefined(ctx.colors)) ctx.colors = false; + if (isUndefined(ctx.customInspect)) ctx.customInspect = true; + if (ctx.colors) ctx.stylize = stylizeWithColor; + return formatValue(ctx, obj, ctx.depth); +} +exports.inspect = inspect; - if (!seeded) randombytes(sk, 32); - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; - scalarbase(p, d); - pack(pk, p); +// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics +inspect.colors = { + 'bold' : [1, 22], + 'italic' : [3, 23], + 'underline' : [4, 24], + 'inverse' : [7, 27], + 'white' : [37, 39], + 'grey' : [90, 39], + 'black' : [30, 39], + 'blue' : [34, 39], + 'cyan' : [36, 39], + 'green' : [32, 39], + 'magenta' : [35, 39], + 'red' : [31, 39], + 'yellow' : [33, 39] +}; - for (i = 0; i < 32; i++) sk[i+32] = pk[i]; - return 0; -} +// Don't use 'blue' not visible on cmd.exe +inspect.styles = { + 'special': 'cyan', + 'number': 'yellow', + 'boolean': 'yellow', + 'undefined': 'grey', + 'null': 'bold', + 'string': 'green', + 'date': 'magenta', + // "name": intentionally not styling + 'regexp': 'red' +}; -var L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]); -function modL(r, x) { - var carry, i, j, k; - for (i = 63; i >= 32; --i) { - carry = 0; - for (j = i - 32, k = i - 12; j < k; ++j) { - x[j] += carry - 16 * x[i] * L[j - (i - 32)]; - carry = (x[j] + 128) >> 8; - x[j] -= carry * 256; - } - x[j] += carry; - x[i] = 0; - } - carry = 0; - for (j = 0; j < 32; j++) { - x[j] += carry - (x[31] >> 4) * L[j]; - carry = x[j] >> 8; - x[j] &= 255; - } - for (j = 0; j < 32; j++) x[j] -= carry * L[j]; - for (i = 0; i < 32; i++) { - x[i+1] += x[i] >> 8; - r[i] = x[i] & 255; +function stylizeWithColor(str, styleType) { + var style = inspect.styles[styleType]; + + if (style) { + return '\u001b[' + inspect.colors[style][0] + 'm' + str + + '\u001b[' + inspect.colors[style][1] + 'm'; + } else { + return str; } } -function reduce(r) { - var x = new Float64Array(64), i; - for (i = 0; i < 64; i++) x[i] = r[i]; - for (i = 0; i < 64; i++) r[i] = 0; - modL(r, x); + +function stylizeNoColor(str, styleType) { + return str; } -// Note: difference from C - smlen returned, not passed as argument. -function crypto_sign(sm, m, n, sk) { - var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64); - var i, j, x = new Float64Array(64); - var p = [gf(), gf(), gf(), gf()]; - crypto_hash(d, sk, 32); - d[0] &= 248; - d[31] &= 127; - d[31] |= 64; +function arrayToHash(array) { + var hash = {}; - var smlen = n + 64; - for (i = 0; i < n; i++) sm[64 + i] = m[i]; - for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i]; + array.forEach(function(val, idx) { + hash[val] = true; + }); - crypto_hash(r, sm.subarray(32), n+32); - reduce(r); - scalarbase(p, r); - pack(sm, p); + return hash; +} - for (i = 32; i < 64; i++) sm[i] = sk[i]; - crypto_hash(h, sm, n + 64); - reduce(h); - for (i = 0; i < 64; i++) x[i] = 0; - for (i = 0; i < 32; i++) x[i] = r[i]; - for (i = 0; i < 32; i++) { - for (j = 0; j < 32; j++) { - x[i+j] += h[i] * d[j]; +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (ctx.customInspect && + value && + isFunction(value.inspect) && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (!isString(ret)) { + ret = formatValue(ctx, ret, recurseTimes); } + return ret; } - modL(sm.subarray(32), x); - return smlen; -} + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } -function unpackneg(r, p) { - var t = gf(), chk = gf(), num = gf(), - den = gf(), den2 = gf(), den4 = gf(), - den6 = gf(); + // Look up the keys of the object. + var keys = Object.keys(value); + var visibleKeys = arrayToHash(keys); - set25519(r[2], gf1); - unpack25519(r[1], p); - S(num, r[1]); - M(den, num, D); - Z(num, num, r[2]); - A(den, r[2], den); + if (ctx.showHidden) { + keys = Object.getOwnPropertyNames(value); + } - S(den2, den); - S(den4, den2); - M(den6, den4, den2); - M(t, den6, num); - M(t, t, den); + // IE doesn't make error fields non-enumerable + // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx + if (isError(value) + && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { + return formatError(value); + } - pow2523(t, t); - M(t, t, num); - M(t, t, den); - M(t, t, den); - M(r[0], t, den); + // Some type of object without properties can be shortcutted. + if (keys.length === 0) { + if (isFunction(value)) { + var name = value.name ? ': ' + value.name : ''; + return ctx.stylize('[Function' + name + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } - S(chk, r[0]); - M(chk, chk, den); - if (neq25519(chk, num)) M(r[0], r[0], I); + var base = '', array = false, braces = ['{', '}']; - S(chk, r[0]); - M(chk, chk, den); - if (neq25519(chk, num)) return -1; + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } - if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]); + // Make functions say that they are functions + if (isFunction(value)) { + var n = value.name ? ': ' + value.name : ''; + base = ' [Function' + n + ']'; + } - M(r[3], r[0], r[1]); - return 0; -} + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } -function crypto_sign_open(m, sm, n, pk) { - var i, mlen; - var t = new Uint8Array(32), h = new Uint8Array(64); - var p = [gf(), gf(), gf(), gf()], - q = [gf(), gf(), gf(), gf()]; + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } - mlen = -1; - if (n < 64) return -1; + // Make error with message first say the error + if (isError(value)) { + base = ' ' + formatError(value); + } - if (unpackneg(q, pk)) return -1; + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } - for (i = 0; i < n; i++) m[i] = sm[i]; - for (i = 0; i < 32; i++) m[i+32] = pk[i]; - crypto_hash(h, m, n); - reduce(h); - scalarmult(p, q, h); + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } - scalarbase(q, sm.subarray(32)); - add(p, q); - pack(t, p); + ctx.seen.push(value); - n -= 64; - if (crypto_verify_32(sm, 0, t, 0)) { - for (i = 0; i < n; i++) m[i] = 0; - return -1; + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); } - for (i = 0; i < n; i++) m[i] = sm[i + 64]; - mlen = n; - return mlen; -} + ctx.seen.pop(); -var crypto_secretbox_KEYBYTES = 32, - crypto_secretbox_NONCEBYTES = 24, - crypto_secretbox_ZEROBYTES = 32, - crypto_secretbox_BOXZEROBYTES = 16, - crypto_scalarmult_BYTES = 32, - crypto_scalarmult_SCALARBYTES = 32, - crypto_box_PUBLICKEYBYTES = 32, - crypto_box_SECRETKEYBYTES = 32, - crypto_box_BEFORENMBYTES = 32, - crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES, - crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES, - crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES, - crypto_sign_BYTES = 64, - crypto_sign_PUBLICKEYBYTES = 32, - crypto_sign_SECRETKEYBYTES = 64, - crypto_sign_SEEDBYTES = 32, - crypto_hash_BYTES = 64; + return reduceToSingleString(output, base, braces); +} -nacl.lowlevel = { - crypto_core_hsalsa20: crypto_core_hsalsa20, - crypto_stream_xor: crypto_stream_xor, - crypto_stream: crypto_stream, - crypto_stream_salsa20_xor: crypto_stream_salsa20_xor, - crypto_stream_salsa20: crypto_stream_salsa20, - crypto_onetimeauth: crypto_onetimeauth, - crypto_onetimeauth_verify: crypto_onetimeauth_verify, - crypto_verify_16: crypto_verify_16, - crypto_verify_32: crypto_verify_32, - crypto_secretbox: crypto_secretbox, - crypto_secretbox_open: crypto_secretbox_open, - crypto_scalarmult: crypto_scalarmult, - crypto_scalarmult_base: crypto_scalarmult_base, - crypto_box_beforenm: crypto_box_beforenm, - crypto_box_afternm: crypto_box_afternm, - crypto_box: crypto_box, - crypto_box_open: crypto_box_open, - crypto_box_keypair: crypto_box_keypair, - crypto_hash: crypto_hash, - crypto_sign: crypto_sign, - crypto_sign_keypair: crypto_sign_keypair, - crypto_sign_open: crypto_sign_open, - crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES, - crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES, - crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES, - crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES, - crypto_scalarmult_BYTES: crypto_scalarmult_BYTES, - crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES, - crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES, - crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES, - crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES, - crypto_box_NONCEBYTES: crypto_box_NONCEBYTES, - crypto_box_ZEROBYTES: crypto_box_ZEROBYTES, - crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES, - crypto_sign_BYTES: crypto_sign_BYTES, - crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES, - crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES, - crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES, - crypto_hash_BYTES: crypto_hash_BYTES -}; +function formatPrimitive(ctx, value) { + if (isUndefined(value)) + return ctx.stylize('undefined', 'undefined'); + if (isString(value)) { + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + } + if (isNumber(value)) + return ctx.stylize('' + value, 'number'); + if (isBoolean(value)) + return ctx.stylize('' + value, 'boolean'); + // For some reason typeof null is "object", so special case here. + if (isNull(value)) + return ctx.stylize('null', 'null'); +} -/* High-level API */ -function checkLengths(k, n) { - if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size'); - if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size'); +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; } -function checkBoxLengths(pk, sk) { - if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size'); - if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size'); -} -function checkArrayTypes() { - var t, i; - for (i = 0; i < arguments.length; i++) { - if ((t = Object.prototype.toString.call(arguments[i])) !== '[object Uint8Array]') - throw new TypeError('unexpected type ' + t + ', use Uint8Array'); +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (hasOwnProperty(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } } + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; } -function cleanup(arr) { - for (var i = 0; i < arr.length; i++) arr[i] = 0; -} -nacl.util = {}; +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name, str, desc; + desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; + if (desc.get) { + if (desc.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (desc.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + if (!hasOwnProperty(visibleKeys, key)) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(desc.value) < 0) { + if (isNull(recurseTimes)) { + str = formatValue(ctx, desc.value, null); + } else { + str = formatValue(ctx, desc.value, recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (isUndefined(name)) { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } -nacl.util.decodeUTF8 = function(s) { - var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length); - for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); - return b; -}; + return name + ': ' + str; +} -nacl.util.encodeUTF8 = function(arr) { - var i, s = []; - for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i])); - return decodeURIComponent(escape(s.join(''))); -}; -nacl.util.encodeBase64 = function(arr) { - if (typeof btoa === 'undefined') { - return (new Buffer(arr)).toString('base64'); - } else { - var i, s = [], len = arr.length; - for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i])); - return btoa(s.join('')); - } -}; +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; + }, 0); -nacl.util.decodeBase64 = function(s) { - if (typeof atob === 'undefined') { - return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0)); - } else { - var i, d = atob(s), b = new Uint8Array(d.length); - for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i); - return b; + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; } -}; - -nacl.randomBytes = function(n) { - var b = new Uint8Array(n); - randombytes(b, n); - return b; -}; -nacl.secretbox = function(msg, nonce, key) { - checkArrayTypes(msg, nonce, key); - checkLengths(key, nonce); - var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length); - var c = new Uint8Array(m.length); - for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i]; - crypto_secretbox(c, m, m.length, nonce, key); - return c.subarray(crypto_secretbox_BOXZEROBYTES); -}; + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} -nacl.secretbox.open = function(box, nonce, key) { - checkArrayTypes(box, nonce, key); - checkLengths(key, nonce); - var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length); - var m = new Uint8Array(c.length); - for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i]; - if (c.length < 32) return false; - if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false; - return m.subarray(crypto_secretbox_ZEROBYTES); -}; -nacl.secretbox.keyLength = crypto_secretbox_KEYBYTES; -nacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES; -nacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES; +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. +function isArray(ar) { + return Array.isArray(ar); +} +exports.isArray = isArray; -nacl.scalarMult = function(n, p) { - checkArrayTypes(n, p); - if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); - if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size'); - var q = new Uint8Array(crypto_scalarmult_BYTES); - crypto_scalarmult(q, n, p); - return q; -}; +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; -nacl.scalarMult.base = function(n) { - checkArrayTypes(n); - if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size'); - var q = new Uint8Array(crypto_scalarmult_BYTES); - crypto_scalarmult_base(q, n); - return q; -}; +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; -nacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES; -nacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES; +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; -nacl.box = function(msg, nonce, publicKey, secretKey) { - var k = nacl.box.before(publicKey, secretKey); - return nacl.secretbox(msg, nonce, k); -}; +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; -nacl.box.before = function(publicKey, secretKey) { - checkArrayTypes(publicKey, secretKey); - checkBoxLengths(publicKey, secretKey); - var k = new Uint8Array(crypto_box_BEFORENMBYTES); - crypto_box_beforenm(k, publicKey, secretKey); - return k; -}; +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; -nacl.box.after = nacl.secretbox; +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; -nacl.box.open = function(msg, nonce, publicKey, secretKey) { - var k = nacl.box.before(publicKey, secretKey); - return nacl.secretbox.open(msg, nonce, k); -}; +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; -nacl.box.open.after = nacl.secretbox.open; +function isRegExp(re) { + return isObject(re) && objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; -nacl.box.keyPair = function() { - var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_box_SECRETKEYBYTES); - crypto_box_keypair(pk, sk); - return {publicKey: pk, secretKey: sk}; -}; +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; -nacl.box.keyPair.fromSecretKey = function(secretKey) { - checkArrayTypes(secretKey); - if (secretKey.length !== crypto_box_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES); - crypto_scalarmult_base(pk, secretKey); - return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; -}; +function isDate(d) { + return isObject(d) && objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; -nacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES; -nacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES; -nacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES; -nacl.box.nonceLength = crypto_box_NONCEBYTES; -nacl.box.overheadLength = nacl.secretbox.overheadLength; +function isError(e) { + return isObject(e) && + (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; -nacl.sign = function(msg, secretKey) { - checkArrayTypes(msg, secretKey); - if (secretKey.length !== crypto_sign_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length); - crypto_sign(signedMsg, msg, msg.length, secretKey); - return signedMsg; -}; +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; -nacl.sign.open = function(signedMsg, publicKey) { - if (arguments.length !== 2) - throw new Error('nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?'); - checkArrayTypes(signedMsg, publicKey); - if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) - throw new Error('bad public key size'); - var tmp = new Uint8Array(signedMsg.length); - var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey); - if (mlen < 0) return null; - var m = new Uint8Array(mlen); - for (var i = 0; i < m.length; i++) m[i] = tmp[i]; - return m; -}; +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; -nacl.sign.detached = function(msg, secretKey) { - var signedMsg = nacl.sign(msg, secretKey); - var sig = new Uint8Array(crypto_sign_BYTES); - for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i]; - return sig; -}; +exports.isBuffer = require('./support/isBuffer'); -nacl.sign.detached.verify = function(msg, sig, publicKey) { - checkArrayTypes(msg, sig, publicKey); - if (sig.length !== crypto_sign_BYTES) - throw new Error('bad signature size'); - if (publicKey.length !== crypto_sign_PUBLICKEYBYTES) - throw new Error('bad public key size'); - var sm = new Uint8Array(crypto_sign_BYTES + msg.length); - var m = new Uint8Array(crypto_sign_BYTES + msg.length); - var i; - for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i]; - for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i]; - return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0); -}; +function objectToString(o) { + return Object.prototype.toString.call(o); +} -nacl.sign.keyPair = function() { - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); - crypto_sign_keypair(pk, sk); - return {publicKey: pk, secretKey: sk}; -}; -nacl.sign.keyPair.fromSecretKey = function(secretKey) { - checkArrayTypes(secretKey); - if (secretKey.length !== crypto_sign_SECRETKEYBYTES) - throw new Error('bad secret key size'); - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i]; - return {publicKey: pk, secretKey: new Uint8Array(secretKey)}; -}; +function pad(n) { + return n < 10 ? '0' + n.toString(10) : n.toString(10); +} -nacl.sign.keyPair.fromSeed = function(seed) { - checkArrayTypes(seed); - if (seed.length !== crypto_sign_SEEDBYTES) - throw new Error('bad seed size'); - var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES); - var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES); - for (var i = 0; i < 32; i++) sk[i] = seed[i]; - crypto_sign_keypair(pk, sk, true); - return {publicKey: pk, secretKey: sk}; -}; -nacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES; -nacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES; -nacl.sign.seedLength = crypto_sign_SEEDBYTES; -nacl.sign.signatureLength = crypto_sign_BYTES; +var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', + 'Oct', 'Nov', 'Dec']; -nacl.hash = function(msg) { - checkArrayTypes(msg); - var h = new Uint8Array(crypto_hash_BYTES); - crypto_hash(h, msg, msg.length); - return h; -}; +// 26 Feb 16:19:34 +function timestamp() { + var d = new Date(); + var time = [pad(d.getHours()), + pad(d.getMinutes()), + pad(d.getSeconds())].join(':'); + return [d.getDate(), months[d.getMonth()], time].join(' '); +} -nacl.hash.hashLength = crypto_hash_BYTES; -nacl.verify = function(x, y) { - checkArrayTypes(x, y); - // Zero length arguments are considered not equal. - if (x.length === 0 || y.length === 0) return false; - if (x.length !== y.length) return false; - return (vn(x, 0, y, 0, x.length) === 0) ? true : false; +// log is just a thin wrapper to console.log that prepends a timestamp +exports.log = function() { + console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); }; -nacl.setPRNG = function(fn) { - randombytes = fn; -}; -(function() { - // Initialize PRNG if environment provides CSPRNG. - // If not, methods calling randombytes will throw. - var crypto; - if (typeof window !== 'undefined') { - // Browser. - if (window.crypto && window.crypto.getRandomValues) { - crypto = window.crypto; // Standard - } else if (window.msCrypto && window.msCrypto.getRandomValues) { - crypto = window.msCrypto; // Internet Explorer 11+ - } - if (crypto) { - nacl.setPRNG(function(x, n) { - var i, v = new Uint8Array(n); - crypto.getRandomValues(v); - for (i = 0; i < n; i++) x[i] = v[i]; - cleanup(v); - }); - } - } else if (typeof require !== 'undefined') { - // Node.js. - crypto = require('crypto'); - if (crypto) { - nacl.setPRNG(function(x, n) { - var i, v = crypto.randomBytes(n); - for (i = 0; i < n; i++) x[i] = v[i]; - cleanup(v); - }); - } +/** + * Inherit the prototype methods from one constructor into another. + * + * The Function.prototype.inherits from lang.js rewritten as a standalone + * function (not on Function.prototype). NOTE: If this file is to be loaded + * during bootstrapping this function needs to be rewritten using some native + * functions as prototype setup using normal JavaScript does not work as + * expected during bootstrapping (see mirror.js in r114903). + * + * @param {function} ctor Constructor function which needs to inherit the + * prototype. + * @param {function} superCtor Constructor function to inherit prototype from. + */ +exports.inherits = require('inherits'); + +exports._extend = function(origin, add) { + // Don't do anything if add isn't an object + if (!add || !isObject(add)) return origin; + + var keys = Object.keys(add); + var i = keys.length; + while (i--) { + origin[keys[i]] = add[keys[i]]; } -})(); + return origin; +}; -})(typeof module !== 'undefined' && module.exports ? module.exports : (window.nacl = window.nacl || {})); +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} -}).call(this,require("buffer").Buffer) -},{"buffer":98,"crypto":98}],422:[function(require,module,exports){ +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./support/isBuffer":297,"_process":235,"inherits":226}],299:[function(require,module,exports){ var f = require('./formatters'); var SolidityType = require('./type'); @@ -79849,7 +69461,7 @@ SolidityTypeAddress.prototype.staticPartLength = function (name) { module.exports = SolidityTypeAddress; -},{"./formatters":427,"./type":432}],423:[function(require,module,exports){ +},{"./formatters":304,"./type":309}],300:[function(require,module,exports){ var f = require('./formatters'); var SolidityType = require('./type'); @@ -79881,7 +69493,7 @@ SolidityTypeBool.prototype.staticPartLength = function (name) { module.exports = SolidityTypeBool; -},{"./formatters":427,"./type":432}],424:[function(require,module,exports){ +},{"./formatters":304,"./type":309}],301:[function(require,module,exports){ var f = require('./formatters'); var SolidityType = require('./type'); @@ -79921,7 +69533,7 @@ SolidityTypeBytes.prototype.staticPartLength = function (name) { module.exports = SolidityTypeBytes; -},{"./formatters":427,"./type":432}],425:[function(require,module,exports){ +},{"./formatters":304,"./type":309}],302:[function(require,module,exports){ /* This file is part of web3.js. @@ -80183,7 +69795,7 @@ var coder = new SolidityCoder([ module.exports = coder; -},{"./address":422,"./bool":423,"./bytes":424,"./dynamicbytes":426,"./formatters":427,"./int":428,"./real":430,"./string":431,"./uint":433,"./ureal":434}],426:[function(require,module,exports){ +},{"./address":299,"./bool":300,"./bytes":301,"./dynamicbytes":303,"./formatters":304,"./int":305,"./real":307,"./string":308,"./uint":310,"./ureal":311}],303:[function(require,module,exports){ var f = require('./formatters'); var SolidityType = require('./type'); @@ -80210,7 +69822,7 @@ SolidityTypeDynamicBytes.prototype.isDynamicType = function () { module.exports = SolidityTypeDynamicBytes; -},{"./formatters":427,"./type":432}],427:[function(require,module,exports){ +},{"./formatters":304,"./type":309}],304:[function(require,module,exports){ /* This file is part of web3.js. @@ -80462,7 +70074,7 @@ module.exports = { }; -},{"../utils/config":435,"../utils/utils":436,"./param":429,"bignumber.js":437}],428:[function(require,module,exports){ +},{"../utils/config":312,"../utils/utils":313,"./param":306,"bignumber.js":314}],305:[function(require,module,exports){ var f = require('./formatters'); var SolidityType = require('./type'); @@ -80500,7 +70112,7 @@ SolidityTypeInt.prototype.staticPartLength = function (name) { module.exports = SolidityTypeInt; -},{"./formatters":427,"./type":432}],429:[function(require,module,exports){ +},{"./formatters":304,"./type":309}],306:[function(require,module,exports){ /* This file is part of web3.js. @@ -80654,7 +70266,7 @@ SolidityParam.encodeList = function (params) { module.exports = SolidityParam; -},{"../utils/utils":436}],430:[function(require,module,exports){ +},{"../utils/utils":313}],307:[function(require,module,exports){ var f = require('./formatters'); var SolidityType = require('./type'); @@ -80692,7 +70304,7 @@ SolidityTypeReal.prototype.staticPartLength = function (name) { module.exports = SolidityTypeReal; -},{"./formatters":427,"./type":432}],431:[function(require,module,exports){ +},{"./formatters":304,"./type":309}],308:[function(require,module,exports){ var f = require('./formatters'); var SolidityType = require('./type'); @@ -80719,7 +70331,7 @@ SolidityTypeString.prototype.isDynamicType = function () { module.exports = SolidityTypeString; -},{"./formatters":427,"./type":432}],432:[function(require,module,exports){ +},{"./formatters":304,"./type":309}],309:[function(require,module,exports){ var f = require('./formatters'); var SolidityParam = require('./param'); @@ -80966,7 +70578,7 @@ SolidityType.prototype.decode = function (bytes, offset, name) { module.exports = SolidityType; -},{"./formatters":427,"./param":429}],433:[function(require,module,exports){ +},{"./formatters":304,"./param":306}],310:[function(require,module,exports){ var f = require('./formatters'); var SolidityType = require('./type'); @@ -81004,7 +70616,7 @@ SolidityTypeUInt.prototype.staticPartLength = function (name) { module.exports = SolidityTypeUInt; -},{"./formatters":427,"./type":432}],434:[function(require,module,exports){ +},{"./formatters":304,"./type":309}],311:[function(require,module,exports){ var f = require('./formatters'); var SolidityType = require('./type'); @@ -81042,7 +70654,7 @@ SolidityTypeUReal.prototype.staticPartLength = function (name) { module.exports = SolidityTypeUReal; -},{"./formatters":427,"./type":432}],435:[function(require,module,exports){ +},{"./formatters":304,"./type":309}],312:[function(require,module,exports){ /* This file is part of web3.js. @@ -81123,7 +70735,7 @@ module.exports = { }; -},{"bignumber.js":437}],436:[function(require,module,exports){ +},{"bignumber.js":314}],313:[function(require,module,exports){ /* This file is part of web3.js. @@ -81656,7 +71268,7 @@ module.exports = { isJson: isJson }; -},{"bignumber.js":437,"utf8":438}],437:[function(require,module,exports){ +},{"bignumber.js":314,"utf8":296}],314:[function(require,module,exports){ /*! bignumber.js v2.0.7 https://github.com/MikeMcl/bignumber.js/LICENCE */ ;(function (global) { @@ -84341,253 +73953,5 @@ module.exports = { } })(this); -},{"crypto":103}],438:[function(require,module,exports){ -(function (global){ -/*! https://mths.be/utf8js v2.0.0 by @mathias */ -;(function(root) { - - // Detect free variables `exports` - var freeExports = typeof exports == 'object' && exports; - - // Detect free variable `module` - var freeModule = typeof module == 'object' && module && - module.exports == freeExports && module; - - // Detect free variable `global`, from Node.js or Browserified code, - // and use it as `root` - var freeGlobal = typeof global == 'object' && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { - root = freeGlobal; - } - - /*--------------------------------------------------------------------------*/ - - var stringFromCharCode = String.fromCharCode; - - // Taken from https://mths.be/punycode - function ucs2decode(string) { - var output = []; - var counter = 0; - var length = string.length; - var value; - var extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - // Taken from https://mths.be/punycode - function ucs2encode(array) { - var length = array.length; - var index = -1; - var value; - var output = ''; - while (++index < length) { - value = array[index]; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - } - return output; - } - - function checkScalarValue(codePoint) { - if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { - throw Error( - 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + - ' is not a scalar value' - ); - } - } - /*--------------------------------------------------------------------------*/ - - function createByte(codePoint, shift) { - return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); - } - - function encodeCodePoint(codePoint) { - if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence - return stringFromCharCode(codePoint); - } - var symbol = ''; - if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence - symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); - } - else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence - checkScalarValue(codePoint); - symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); - symbol += createByte(codePoint, 6); - } - else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence - symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); - symbol += createByte(codePoint, 12); - symbol += createByte(codePoint, 6); - } - symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); - return symbol; - } - - function utf8encode(string) { - var codePoints = ucs2decode(string); - var length = codePoints.length; - var index = -1; - var codePoint; - var byteString = ''; - while (++index < length) { - codePoint = codePoints[index]; - byteString += encodeCodePoint(codePoint); - } - return byteString; - } - - /*--------------------------------------------------------------------------*/ - - function readContinuationByte() { - if (byteIndex >= byteCount) { - throw Error('Invalid byte index'); - } - - var continuationByte = byteArray[byteIndex] & 0xFF; - byteIndex++; - - if ((continuationByte & 0xC0) == 0x80) { - return continuationByte & 0x3F; - } - - // If we end up here, it’s not a continuation byte - throw Error('Invalid continuation byte'); - } - - function decodeSymbol() { - var byte1; - var byte2; - var byte3; - var byte4; - var codePoint; - - if (byteIndex > byteCount) { - throw Error('Invalid byte index'); - } - - if (byteIndex == byteCount) { - return false; - } - - // Read first byte - byte1 = byteArray[byteIndex] & 0xFF; - byteIndex++; - - // 1-byte sequence (no continuation bytes) - if ((byte1 & 0x80) == 0) { - return byte1; - } - - // 2-byte sequence - if ((byte1 & 0xE0) == 0xC0) { - var byte2 = readContinuationByte(); - codePoint = ((byte1 & 0x1F) << 6) | byte2; - if (codePoint >= 0x80) { - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 3-byte sequence (may include unpaired surrogates) - if ((byte1 & 0xF0) == 0xE0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; - if (codePoint >= 0x0800) { - checkScalarValue(codePoint); - return codePoint; - } else { - throw Error('Invalid continuation byte'); - } - } - - // 4-byte sequence - if ((byte1 & 0xF8) == 0xF0) { - byte2 = readContinuationByte(); - byte3 = readContinuationByte(); - byte4 = readContinuationByte(); - codePoint = ((byte1 & 0x0F) << 0x12) | (byte2 << 0x0C) | - (byte3 << 0x06) | byte4; - if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { - return codePoint; - } - } - - throw Error('Invalid UTF-8 detected'); - } - - var byteArray; - var byteCount; - var byteIndex; - function utf8decode(byteString) { - byteArray = ucs2decode(byteString); - byteCount = byteArray.length; - byteIndex = 0; - var codePoints = []; - var tmp; - while ((tmp = decodeSymbol()) !== false) { - codePoints.push(tmp); - } - return ucs2encode(codePoints); - } - - /*--------------------------------------------------------------------------*/ - - var utf8 = { - 'version': '2.0.0', - 'encode': utf8encode, - 'decode': utf8decode - }; - - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if ( - typeof define == 'function' && - typeof define.amd == 'object' && - define.amd - ) { - define(function() { - return utf8; - }); - } else if (freeExports && !freeExports.nodeType) { - if (freeModule) { // in Node.js or RingoJS v0.8.0+ - freeModule.exports = utf8; - } else { // in Narwhal or RingoJS v0.7.0- - var object = {}; - var hasOwnProperty = object.hasOwnProperty; - for (var key in utf8) { - hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); - } - } - } else { // in Rhino or a web browser - root.utf8 = utf8; - } - -}(this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}]},{},[1])(1) +},{"crypto":174}]},{},[1])(1) }); \ No newline at end of file diff --git a/dist/lightwallet.min.js b/dist/lightwallet.min.js index 60fd2fb0..135323ea 100644 --- a/dist/lightwallet.min.js +++ b/dist/lightwallet.min.js @@ -1,52 +1,32 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var a;a="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,a.lightwallet=e()}}(function(){var define,module,exports;return function e(a,t,f){function c(d,n){if(!t[d]){if(!a[d]){var i="function"==typeof require&&require;if(!n&&i)return i(d,!0);if(r)return r(d,!0);var b=new Error("Cannot find module '"+d+"'");throw b.code="MODULE_NOT_FOUND",b}var o=t[d]={exports:{}};a[d][0].call(o.exports,function(e){var t=a[d][1][e];return c(t?t:e)},o,o.exports,e,a,t,f)}return t[d].exports}for(var r="function"==typeof require&&require,d=0;d=2&&"0x"===e.slice(0,2)?e.slice(2):e}function c(e){return"string"!=typeof e?e:e.length<2||"0x"!==e.slice(0,2)?"0x"+e:e}function r(e,a,t){for(var f="",c=0;t>c;c++)f+=a;return(f+e).slice(-t)}function d(e){var a=g.util.encodeBase64(e);return new t(a,"base64").toString("hex")}function n(e){var a=new t(e,"hex").toString("base64");return g.util.decodeBase64(a)}var i=e("crypto-js"),b=e("ethereumjs-tx"),o=e("elliptic").ec,s=new o("secp256k1"),u=e("bitcore-lib"),h=u.crypto.Random,l=u.crypto.Hash,p=e("bitcore-mnemonic"),g=e("tweetnacl"),m=e("scrypt-async"),v=(e("./encryption"),e("./signing")),y=function(e,a,t){if(this.defaultHdPathString="m/0'/0'/0'",void 0===t&&(t=this.defaultHdPathString),this.ksData={},this.ksData[t]={},pathKsData=this.ksData[t],pathKsData.info={curve:"secp256k1",purpose:"sign"},this.encSeed=void 0,this.encHdRootPriv=void 0,this.version=2,pathKsData.encHdPathPriv=void 0,pathKsData.hdIndex=0,pathKsData.encPrivKeys={},pathKsData.addresses=[],"undefined"!=typeof a&&"undefined"!=typeof e){var f=e.split(" ");if(!p.isValid(e,p.Words.ENGLISH)||12!==f.length)throw new Error("KeyStore: Invalid mnemonic");var c=r(e," ",120);this.encSeed=y._encryptString(c,a);var d=new p(e).toHDPrivateKey().xprivkey;this.encHdRootPriv=y._encryptString(d,a);var n=new u.HDPrivateKey(d),i=n.derive(t).xprivkey;pathKsData.encHdPathPriv=y._encryptString(i,a)}};y._encryptString=function(e,a){var t=g.randomBytes(g.secretbox.nonceLength),f=g.secretbox(g.util.decodeUTF8(e),t,a),c={encStr:g.util.encodeBase64(f),nonce:g.util.encodeBase64(t)};return c},y._decryptString=function(e,a){var t=g.util.decodeBase64(e.encStr),f=g.util.decodeBase64(e.nonce),c=g.secretbox.open(t,f,a);return g.util.encodeUTF8(c)},y._encryptKey=function(e,a){var t=n(e),f=g.randomBytes(g.secretbox.nonceLength),c=g.secretbox(t,f,a);return c={key:g.util.encodeBase64(c),nonce:g.util.encodeBase64(f)}},y._decryptKey=function(e,a){var t=g.util.decodeBase64(e.key),f=g.util.decodeBase64(e.nonce),c=g.secretbox.open(t,f,a);return d(c)},y._computeAddressFromPrivKey=function(e){var a=s.genKeyPair();a._importPrivate(e,"hex");var t=!1,f=a.getPublic(t,"hex").slice(2),c=i.enc.Hex.parse(f),r=i.SHA3(c,{outputLength:256}),d=r.toString(i.enc.Hex).slice(24);return d},y._computePubkeyFromPrivKey=function(e,a){if("curve25519"!==a)throw new Error('KeyStore._computePubkeyFromPrivKey: Only "curve25519" supported.');var f=new t(e,"hex").toString("base64"),c=g.util.decodeBase64(f),r=g.box.keyPair.fromSecretKey(c).publicKey,d=g.util.encodeBase64(r),n=new t(d,"base64").toString("hex");return n},y.prototype.addHdDerivationPath=function(e,a,t){if("sign"!==t.purpose&&"asymEncrypt"!==t.purpose)throw new Error("KeyStore.addHdDerivationPath: info.purpose is '"+t.purpose+"' but must be either 'sign' or 'asymEncrypt'.");if("secp256k1"!==t.curve&&"curve25519"!==t.curve)throw new Error("KeyStore.addHdDerivationPath: info.curve is '"+t.curve+"' but must be either 'secp256k1' or 'curve25519'.");var f=y._decryptString(this.encHdRootPriv,a),c=new u.HDPrivateKey(f),r=c.derive(e).xprivkey;this.ksData[e]={},this.ksData[e].info=t,this.ksData[e].encHdPathPriv=y._encryptString(r,a),this.ksData[e].hdIndex=0,this.ksData[e].encPrivKeys={},"sign"===t.purpose?this.ksData[e].addresses=[]:"asymEncrypt"===t.purpose&&(this.ksData[e].pubKeys=[])},y.prototype.setDefaultHdDerivationPath=function(e){if(void 0===this.ksData[e])throw new Error("setDefaultHdDerivationPath: HD path does not exist. Cannot set default.");this.defaultHdPathString=e},y.prototype._generatePrivKeys=function(e,a,t){void 0===t&&(t=this.defaultHdPathString);for(var f=y._decryptString(this.ksData[t].encHdPathPriv,e),c=[],d=0;a>d;d++){var n=new u.HDPrivateKey(f).derive(this.ksData[t].hdIndex++),i=n.privateKey.toBuffer(),b=i.toString("hex");if(i.length<16)throw new Error("Private key suspiciously small: < 16 bytes. Aborting!");if(i.length<32)b=r(i.toString("hex"),"0",64);else if(i.length>32)throw new Error("Private key larger than 32 bytes. Aborting!");var o=y._encryptKey(b,e);c[d]={privKey:b,encPrivKey:o}}return c},y._concatAndSha256=function(e,a){var f=t.concat([e,a]);if(f.length!==e.length+a.length)throw new Error("generateRandomSeed: Logic error! Concatenation of entropy sources failed.");var c=l.sha256(f);return c},y.generateRandomSeed=function(e){var a="";if(void 0===e)a=new p(p.Words.ENGLISH);else{if("string"!=typeof e)throw new Error("generateRandomSeed: extraEntropy is set but not a string.");var f=new t(e),c=h.getRandomBuffer(32),r=this._concatAndSha256(c,f).slice(0,16);a=new p(r,p.Words.ENGLISH)}return a.toString()},y.isSeedValid=function(e){return p.isValid(e,p.Words.ENGLISH)},y.prototype.isDerivedKeyCorrect=function(e){var a=y._decryptString(this.encSeed,e);return a.length>0?!0:!1},y.deserialize=function(e){var a=JSON.parse(e);if(void 0===a.version||1===a.version)throw new Error("Old version of serialized keystore. Please use KeyStore.upgradeOldSerialized() to convert it to the latest version.");var t=new y;return t.encSeed=a.encSeed,t.encHdRootPriv=a.encHdRootPriv,t.ksData=a.ksData,t},y.prototype.serialize=function(){var e={encSeed:this.encSeed,ksData:this.ksData,encHdRootPriv:this.encHdRootPriv,version:this.version};return JSON.stringify(e)},y.prototype.getAddresses=function(e){if(void 0===e&&(e=this.defaultHdPathString),"sign"!==this.ksData[e].info.purpose)throw new Error('KeyStore.getAddresses: Addresses not defined when purpose is not "sign"');return this.ksData[e].addresses},y.prototype.getSeed=function(e){var a=y._decryptString(this.encSeed,e);return a.trim()},y.prototype.exportPrivateKey=function(e,a,t){void 0===t&&(t=this.defaultHdPathString);var e=f(e);if(void 0===this.ksData[t].encPrivKeys[e])throw new Error("KeyStore.exportPrivateKey: Address not found in KeyStore");var c=this.ksData[t].encPrivKeys[e],r=y._decryptKey(c,a);return r},y.prototype.generateNewAddress=function(e,a,t){if(void 0===t&&(t=this.defaultHdPathString),"sign"!==this.ksData[t].info.purpose)throw new Error('KeyStore.generateNewAddress: Address not defined when purpose is not "sign"');if(!this.encSeed)throw new Error("KeyStore.generateNewAddress: No seed set");a=a||1;for(var f=this._generatePrivKeys(e,a,t),c=0;a>c;c++){var r=f[c],d=y._computeAddressFromPrivKey(r.privKey);this.ksData[t].encPrivKeys[d]=r.encPrivKey,this.ksData[t].addresses.push(d)}},y.prototype.generateNewEncryptionKeys=function(e,a,t){if(void 0===t&&(t=this.defaultHdPathString),"asymEncrypt"!==this.ksData[t].info.purpose)throw new Error('KeyStore.generateNewEncryptionKeys: Address not defined when purpose is not "asymEncrypt"');if(!this.encSeed)throw new Error("KeyStore.generateNewEncryptionKeys: No seed set");a=a||1;for(var f=this._generatePrivKeys(e,a,t),c=this.ksData[t].info.curve,r=0;a>r;r++){var d=f[r],n=y._computePubkeyFromPrivKey(d.privKey,c);this.ksData[t].encPrivKeys[n]=d.encPrivKey,this.ksData[t].pubKeys.push(n)}},y.prototype.getPubKeys=function(e){if(void 0===e&&(e=this.defaultHdPathString),"asymEncrypt"!==this.ksData[e].info.purpose)throw new Error('KeyStore.getPubKeys: Not defined when purpose is not "asymEncrypt"');if(void 0===this.ksData[e].pubKeys)throw new Error("KeyStore.getPubKeys: No pubKeys data found!");return this.ksData[e].pubKeys},y.deriveKeyFromPassword=function(e,a){var t="lightwalletSalt",f=14,c=8,r=32,d=200,n=function(e){var t=new Uint8Array(e);a(null,t)};m(e,t,f,c,r,d,n,null)},y.prototype.passwordProvider=function(e){var a=prompt("Enter password to continue","Enter password");e(null,a)},y.prototype.hasAddress=function(e,a){var t=f(e);void 0===this.ksData[this.defaultHdPathString].encPrivKeys[t]?a("Address not found!",!1):a(null,!0)},y.prototype.signTransaction=function(e,a){var t={};t.from=c(e.from),t.to=c(e.to),t.gasLimit=c(e.gas),t.gasPrice=c(e.gasPrice),t.nonce=c(e.nonce),t.value=c(e.value),t.data=c(e.data);var r=new b(t),d=r.serialize().toString("hex"),n=f(e.from),i=this;this.passwordProvider(function(e,t){return e?a(e):void y.deriveKeyFromPassword(t,function(e,t){var f=v.signTx(i,t,d,n,i.defaultHdPathString);a(null,"0x"+f)})})},a.exports=y}).call(this,e("buffer").Buffer)},{"./encryption":2,"./signing":4,"bitcore-lib":7,"bitcore-mnemonic":86,buffer:99,"crypto-js":330,elliptic:356,"ethereumjs-tx":379,"scrypt-async":420,tweetnacl:421}],4:[function(e,a,t){(function(t){var f=e("ethereumjs-tx"),c=e("ethereumjs-util");signTx=function(e,a,r,d,n){void 0===n&&(n=e.defaultHdPathString),r=c.stripHexPrefix(r),d=c.stripHexPrefix(d);var i=new f(new t(r,"hex")),b=e.exportPrivateKey(d,a,n);return i.sign(new t(b,"hex")),b="",i.serialize().toString("hex")},a.exports.signTx=signTx}).call(this,e("buffer").Buffer)},{buffer:99,"ethereumjs-tx":379,"ethereumjs-util":384}],5:[function(e,a,t){(function(t){function f(e){return"string"!=typeof e?e:e.length<2||"0x"!==e.slice(0,2)?"0x"+e:e}function c(e,a,t){var f=e+"("+a.join()+")",c=h.SHA3(f,{outputLength:256}).toString(h.enc.Hex).slice(0,8),r=c+s.encodeParams(a,t);return r}function r(e,a){function t(e){return e.name===a&&"function"===e.type}function f(e){return e.type}var c=e.filter(t)[0];return c.inputs.map(f)}function d(e,a,t,d){var n=r(e,a),i=c(a,n,t),b={};return b.to=f(d.to),b.gasPrice=f(d.gasPrice),b.gasLimit=f(d.gasLimit),b.nonce=f(d.nonce),b.data=f(i),b.value=f(d.value),new o(b).serialize().toString("hex")}function n(e,a){var f=u.encode([new t(e,"hex"),a]).toString("hex"),c=h.enc.Hex.parse(f),r=h.SHA3(c,{outputLength:256}).toString(h.enc.Hex);return r.slice(24)}function i(e,a){var t={};t.to=f(a.to),t.gasPrice=f(a.gasPrice),t.gasLimit=f(a.gasLimit),t.nonce=f(a.nonce),t.data=f(a.data),t.value=f(a.value);var c=n(e,a.nonce),r=new o(t);return{tx:r.serialize().toString("hex"),addr:c}}function b(e){var a={};a.to=f(e.to),a.gasPrice=f(e.gasPrice),a.gasLimit=f(e.gasLimit),a.nonce=f(e.nonce),a.value=f(e.value);var t=new o(a);return t.serialize().toString("hex")}var o=e("ethereumjs-tx"),s=e("web3/lib/solidity/coder"),u=e("rlp"),h=e("crypto-js");a.exports={_encodeFunctionTxData:c,_getTypesFromAbi:r,functionTx:d,createdContractAddress:n,createContractTx:i,valueTx:b}}).call(this,e("buffer").Buffer)},{buffer:99,"crypto-js":330,"ethereumjs-tx":379,rlp:419,"web3/lib/solidity/coder":425}],6:[function(e,a,t){var f=e("crypto-js"),c=e("./keystore"),r=(e("ethereumjs-tx"),e("elliptic").ec),d=(new r("secp256k1"),e("bitcore-lib"));d.crypto.Random,d.crypto.Hash,e("bitcore-mnemonic"),e("tweetnacl"),e("scrypt-async");legacyDecryptString=function(e,a){var t=f.AES.decrypt(e.encStr,a,{iv:e.iv,salt:e.salt});return t.toString(f.enc.Latin1)},legacyGenerateEncKey=function(e,a,t){var c=f.PBKDF2(e,a,{keySize:16,iterations:150}).toString(),r=f.SHA3(c).toString();if(t!==r)throw new Error("Invalid Password");return c},upgradeOldSerialized=function(e,a,t){var f=JSON.parse(e);if(void 0!==f.version&&1!==f.version)throw new Error("Keystore is not of correct version.");var r=legacyGenerateEncKey(a,f.salt,f.keyHash),d=legacyDecryptString(f.encSeed,r);c.deriveKeyFromPassword(a,function(e,a){var r=new c(d,a),n=f.hdIndex;r.generateNewAddress(a,n),t(null,r.serialize())})},a.exports.upgradeOldSerialized=upgradeOldSerialized},{"./keystore":3,"bitcore-lib":7,"bitcore-mnemonic":86,"crypto-js":330,elliptic:356,"ethereumjs-tx":379,"scrypt-async":420,tweetnacl:421}],7:[function(e,a,t){(function(t,f){"use strict";var c=a.exports;c.version="v"+e("./package.json").version,c.versionGuard=function(e){if(void 0!==e){var a="More than one instance of bitcore-lib found. Please make sure to require bitcore-lib and check that submodules do not also include their own bitcore-lib dependency.";throw new Error(a)}},c.versionGuard(t._bitcore),t._bitcore=c.version,c.crypto={},c.crypto.BN=e("./lib/crypto/bn"),c.crypto.ECDSA=e("./lib/crypto/ecdsa"),c.crypto.Hash=e("./lib/crypto/hash"),c.crypto.Random=e("./lib/crypto/random"),c.crypto.Point=e("./lib/crypto/point"),c.crypto.Signature=e("./lib/crypto/signature"),c.encoding={},c.encoding.Base58=e("./lib/encoding/base58"),c.encoding.Base58Check=e("./lib/encoding/base58check"),c.encoding.BufferReader=e("./lib/encoding/bufferreader"),c.encoding.BufferWriter=e("./lib/encoding/bufferwriter"),c.encoding.Varint=e("./lib/encoding/varint"),c.util={},c.util.buffer=e("./lib/util/buffer"),c.util.js=e("./lib/util/js"),c.util.preconditions=e("./lib/util/preconditions"),c.errors=e("./lib/errors"),c.Address=e("./lib/address"),c.Block=e("./lib/block"),c.MerkleBlock=e("./lib/block/merkleblock"),c.BlockHeader=e("./lib/block/blockheader"),c.HDPrivateKey=e("./lib/hdprivatekey.js"),c.HDPublicKey=e("./lib/hdpublickey.js"),c.Networks=e("./lib/networks"),c.Opcode=e("./lib/opcode"),c.PrivateKey=e("./lib/privatekey"),c.PublicKey=e("./lib/publickey"),c.Script=e("./lib/script"),c.Transaction=e("./lib/transaction"),c.URI=e("./lib/uri"),c.Unit=e("./lib/unit"),c.deps={},c.deps.bnjs=e("bn.js"),c.deps.bs58=e("bs58"),c.deps.Buffer=f,c.deps.elliptic=e("elliptic"),c.deps._=e("lodash"),c._HDKeyCache=e("./lib/hdkeycache"),c.Transaction.sighash=e("./lib/transaction/sighash")}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"./lib/address":8,"./lib/block":11,"./lib/block/blockheader":10,"./lib/block/merkleblock":12,"./lib/crypto/bn":13,"./lib/crypto/ecdsa":14,"./lib/crypto/hash":15,"./lib/crypto/point":16,"./lib/crypto/random":17,"./lib/crypto/signature":18,"./lib/encoding/base58":19,"./lib/encoding/base58check":20,"./lib/encoding/bufferreader":21,"./lib/encoding/bufferwriter":22,"./lib/encoding/varint":23,"./lib/errors":24,"./lib/hdkeycache":26,"./lib/hdprivatekey.js":27,"./lib/hdpublickey.js":28,"./lib/networks":29,"./lib/opcode":30,"./lib/privatekey":31,"./lib/publickey":32,"./lib/script":33,"./lib/transaction":36,"./lib/transaction/sighash":44,"./lib/unit":48,"./lib/uri":49,"./lib/util/buffer":50,"./lib/util/js":51,"./lib/util/preconditions":52,"./package.json":85,"bn.js":53,bs58:54,buffer:99,elliptic:56,lodash:78}],8:[function(e,a,t){(function(t){"use strict";function f(e,a,t){if(!(this instanceof f))return new f(e,a,t);if(c.isArray(e)&&c.isNumber(a))return f.createMultisig(e,a,t);if(e instanceof f)return e;if(r.checkArgument(e,"First argument is required, please include address data.","guide/address.html"),a&&!i.get(a))throw new TypeError('Second argument must be "livenet" or "testnet".');if(t&&t!==f.PayToPublicKeyHash&&t!==f.PayToScriptHash)throw new TypeError('Third argument must be "pubkeyhash" or "scripthash".');var d=this._classifyArguments(e,a,t);return d.network=d.network||i.get(a)||i.defaultNetwork,d.type=d.type||t||f.PayToPublicKeyHash,o.defineImmutable(this,{hashBuffer:d.hashBuffer,network:d.network,type:d.type}),this}var c=e("lodash"),r=e("./util/preconditions"),d=e("./errors"),n=e("./encoding/base58check"),i=e("./networks"),b=e("./crypto/hash"),o=e("./util/js"),s=e("./publickey");f.prototype._classifyArguments=function(e,a,r){if((e instanceof t||e instanceof Uint8Array)&&20===e.length)return f._transformHash(e);if((e instanceof t||e instanceof Uint8Array)&&21===e.length)return f._transformBuffer(e,a,r);if(e instanceof s)return f._transformPublicKey(e);if(e instanceof u)return f._transformScript(e,a);if("string"==typeof e)return f._transformString(e,a,r);if(c.isObject(e))return f._transformObject(e);throw new TypeError("First argument is an unrecognized data format.")},f.PayToPublicKeyHash="pubkeyhash",f.PayToScriptHash="scripthash",f._transformHash=function(e){var a={};if(!(e instanceof t||e instanceof Uint8Array))throw new TypeError("Address supplied is not a buffer.");if(20!==e.length)throw new TypeError("Address hashbuffers must be exactly 20 bytes.");return a.hashBuffer=e,a},f._transformObject=function(e){return r.checkArgument(e.hash||e.hashBuffer,"Must provide a `hash` or `hashBuffer` property"),r.checkArgument(e.type,"Must provide a `type` property"),{hashBuffer:e.hash?new t(e.hash,"hex"):e.hashBuffer,network:i.get(e.network)||i.defaultNetwork,type:e.type}},f._classifyFromVersion=function(e){var a={},t=i.get(e[0],"pubkeyhash"),c=i.get(e[0],"scripthash");return t?(a.network=t,a.type=f.PayToPublicKeyHash):c&&(a.network=c,a.type=f.PayToScriptHash),a},f._transformBuffer=function(e,a,c){var r={};if(!(e instanceof t||e instanceof Uint8Array))throw new TypeError("Address supplied is not a buffer.");if(21!==e.length)throw new TypeError("Address buffers must be exactly 21 bytes.");a=i.get(a);var d=f._classifyFromVersion(e);if(!d.network||a&&a!==d.network)throw new TypeError("Address has mismatched network type.");if(!d.type||c&&c!==d.type)throw new TypeError("Address has mismatched type.");return r.hashBuffer=e.slice(1),r.network=d.network,r.type=d.type,r},f._transformPublicKey=function(e){var a={};if(!(e instanceof s))throw new TypeError("Address must be an instance of PublicKey.");return a.hashBuffer=b.sha256ripemd160(e.toBuffer()),a.type=f.PayToPublicKeyHash,a},f._transformScript=function(e,a){r.checkArgument(e instanceof u,"script must be a Script instance");var t=e.getAddressInfo(a);if(!t)throw new d.Script.CantDeriveAddress(e);return t},f.createMultisig=function(e,a,t){return t=t||e[0].network||i.defaultNetwork,f.payingTo(u.buildMultisigOut(e,a),t)},f._transformString=function(e,a,t){if("string"!=typeof e)throw new TypeError("data parameter supplied is not a string.");e=e.trim();var c=n.decode(e),r=f._transformBuffer(c,a,t);return r},f.fromPublicKey=function(e,a){var t=f._transformPublicKey(e);return a=a||i.defaultNetwork,new f(t.hashBuffer,a,t.type)},f.fromPublicKeyHash=function(e,a){var t=f._transformHash(e);return new f(t.hashBuffer,a,f.PayToPublicKeyHash)},f.fromScriptHash=function(e,a){r.checkArgument(e,"hash parameter is required");var t=f._transformHash(e);return new f(t.hashBuffer,a,f.PayToScriptHash)},f.payingTo=function(e,a){return r.checkArgument(e,"script is required"),r.checkArgument(e instanceof u,"script must be instance of Script"),f.fromScriptHash(b.sha256ripemd160(e.toBuffer()),a)},f.fromScript=function(e,a){r.checkArgument(e instanceof u,"script must be a Script instance");var t=f._transformScript(e,a);return new f(t.hashBuffer,a,t.type)},f.fromBuffer=function(e,a,t){var c=f._transformBuffer(e,a,t);return new f(c.hashBuffer,c.network,c.type)},f.fromString=function(e,a,t){var c=f._transformString(e,a,t);return new f(c.hashBuffer,c.network,c.type)},f.fromObject=function(e){r.checkState(o.isHexa(e.hash),'Unexpected hash property, "'+e.hash+'", expected to be hex.');var a=new t(e.hash,"hex");return new f(a,e.network,e.type)},f.getValidationError=function(e,a,t){var c;try{new f(e,a,t)}catch(r){c=r}return c},f.isValid=function(e,a,t){return!f.getValidationError(e,a,t)},f.prototype.isPayToPublicKeyHash=function(){return this.type===f.PayToPublicKeyHash},f.prototype.isPayToScriptHash=function(){return this.type===f.PayToScriptHash},f.prototype.toBuffer=function(){var e=new t([this.network[this.type]]),a=t.concat([e,this.hashBuffer]);return a},f.prototype.toObject=f.prototype.toJSON=function(){return{hash:this.hashBuffer.toString("hex"),type:this.type,network:this.network.toString()}},f.prototype.toString=function(){return n.encode(this.toBuffer())},f.prototype.inspect=function(){return""},a.exports=f;var u=e("./script")}).call(this,e("buffer").Buffer)},{"./crypto/hash":15,"./encoding/base58check":20,"./errors":24,"./networks":29,"./publickey":32,"./script":33,"./util/js":51,"./util/preconditions":52,buffer:99,lodash:78}],9:[function(e,a,t){(function(t){"use strict";function f(e){return this instanceof f?(c.extend(this,f._from(e)),this):new f(e)}var c=e("lodash"),r=e("./blockheader"),d=e("../crypto/bn"),n=e("../util/buffer"),i=e("../encoding/bufferreader"),b=e("../encoding/bufferwriter"),o=e("../crypto/hash"),s=e("../transaction"),u=e("../util/preconditions");f.MAX_BLOCK_SIZE=1e6,f._from=function(e){var a={};if(n.isBuffer(e))a=f._fromBufferReader(i(e));else{if(!c.isObject(e))throw new TypeError("Unrecognized argument for Block");a=f._fromObject(e)}return a},f._fromObject=function(e){var a=[];e.transactions.forEach(function(e){e instanceof s?a.push(e):a.push(s().fromObject(e))});var t={header:r.fromObject(e.header),transactions:a};return t},f.fromObject=function(e){var a=f._fromObject(e);return new f(a)},f._fromBufferReader=function(e){var a={};u.checkState(!e.finished(),"No block data received"),a.header=r.fromBufferReader(e);var t=e.readVarintNum();a.transactions=[];for(var f=0;t>f;f++)a.transactions.push(s().fromBufferReader(e));return a},f.fromBufferReader=function(e){u.checkArgument(e,"br is required");var a=f._fromBufferReader(e);return new f(a)},f.fromBuffer=function(e){return f.fromBufferReader(new i(e))},f.fromString=function(e){var a=new t(e,"hex");return f.fromBuffer(a)},f.fromRawBlock=function(e){n.isBuffer(e)||(e=new t(e,"binary"));var a=i(e);a.pos=f.Values.START_OF_BLOCK;var c=f._fromBufferReader(a);return new f(c)},f.prototype.toObject=f.prototype.toJSON=function(){var e=[];return this.transactions.forEach(function(a){e.push(a.toObject())}),{header:this.header.toObject(),transactions:e}},f.prototype.toBuffer=function(){return this.toBufferWriter().concat()},f.prototype.toString=function(){return this.toBuffer().toString("hex")},f.prototype.toBufferWriter=function(e){e||(e=new b),e.write(this.header.toBuffer()),e.writeVarintNum(this.transactions.length);for(var a=0;a1;f=Math.floor((f+1)/2)){for(var c=0;f>c;c+=2){var r=Math.min(c+1,f-1),d=t.concat([e[a+c],e[a+r]]);e.push(o.sha256sha256(d))}a+=f}return e},f.prototype.getMerkleRoot=function(){var e=this.getMerkleTree();return e[e.length-1]},f.prototype.validMerkleRoot=function(){var e=new d(this.header.merkleRoot.toString("hex"),"hex"),a=new d(this.getMerkleRoot().toString("hex"),"hex");return 0!==e.cmp(a)?!1:!0},f.prototype._getHash=function(){return this.header._getHash()};var h={configurable:!1,enumerable:!0,get:function(){return this._id||(this._id=this.header.id),this._id},set:c.noop};Object.defineProperty(f.prototype,"id",h),Object.defineProperty(f.prototype,"hash",h),f.prototype.inspect=function(){return""},f.Values={START_OF_BLOCK:8,NULL_HASH:new t("0000000000000000000000000000000000000000000000000000000000000000","hex")},a.exports=f}).call(this,e("buffer").Buffer)},{"../crypto/bn":13,"../crypto/hash":15,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../transaction":36,"../util/buffer":50,"../util/preconditions":52,"./blockheader":10,buffer:99,lodash:78}],10:[function(e,a,t){(function(t){"use strict";var f=e("lodash"),c=e("../crypto/bn"),r=e("../util/buffer"),d=e("../encoding/bufferreader"),n=e("../encoding/bufferwriter"),i=e("../crypto/hash"),b=(e("../util/js"),e("../util/preconditions")),o=486604799,s=function h(e){if(!(this instanceof h))return new h(e);var a=h._from(e);return this.version=a.version,this.prevHash=a.prevHash,this.merkleRoot=a.merkleRoot,this.time=a.time,this.timestamp=a.time,this.bits=a.bits,this.nonce=a.nonce,a.hash&&b.checkState(this.hash===a.hash,"Argument object hash property does not match block hash."),this};s._from=function(e){var a={};if(r.isBuffer(e))a=s._fromBufferReader(d(e));else{if(!f.isObject(e))throw new TypeError("Unrecognized argument for BlockHeader");a=s._fromObject(e)}return a},s._fromObject=function(e){b.checkArgument(e,"data is required");var a=e.prevHash,c=e.merkleRoot;f.isString(e.prevHash)&&(a=r.reverse(new t(e.prevHash,"hex"))),f.isString(e.merkleRoot)&&(c=r.reverse(new t(e.merkleRoot,"hex")));var d={hash:e.hash,version:e.version,prevHash:a,merkleRoot:c,time:e.time,timestamp:e.time,bits:e.bits,nonce:e.nonce};return d},s.fromObject=function(e){var a=s._fromObject(e);return new s(a)},s.fromRawBlock=function(e){r.isBuffer(e)||(e=new t(e,"binary"));var a=d(e);a.pos=s.Constants.START_OF_HEADER;var f=s._fromBufferReader(a);return new s(f)},s.fromBuffer=function(e){var a=s._fromBufferReader(d(e));return new s(a)},s.fromString=function(e){var a=new t(e,"hex");return s.fromBuffer(a)},s._fromBufferReader=function(e){var a={};return a.version=e.readUInt32LE(),a.prevHash=e.read(32),a.merkleRoot=e.read(32),a.time=e.readUInt32LE(),a.bits=e.readUInt32LE(),a.nonce=e.readUInt32LE(),a},s.fromBufferReader=function(e){var a=s._fromBufferReader(e);return new s(a)},s.prototype.toObject=s.prototype.toJSON=function(){return{hash:this.hash,version:this.version,prevHash:r.reverse(this.prevHash).toString("hex"),merkleRoot:r.reverse(this.merkleRoot).toString("hex"),time:this.time,bits:this.bits,nonce:this.nonce}},s.prototype.toBuffer=function(){return this.toBufferWriter().concat()},s.prototype.toString=function(){return this.toBuffer().toString("hex")},s.prototype.toBufferWriter=function(e){return e||(e=new n),e.writeUInt32LE(this.version),e.write(this.prevHash),e.write(this.merkleRoot),e.writeUInt32LE(this.time),e.writeUInt32LE(this.bits),e.writeUInt32LE(this.nonce),e},s.prototype.getTargetDifficulty=function(e){e=e||this.bits;for(var a=new c(16777215&e),t=8*((e>>>24)-3);t-- >0;)a=a.mul(new c(2));return a},s.prototype.getDifficulty=function(){var e=this.getTargetDifficulty(o).mul(new c(Math.pow(10,8))),a=this.getTargetDifficulty(),t=e.div(a).toString(10),f=t.length-8;return t=t.slice(0,f)+"."+t.slice(f),parseFloat(t)},s.prototype._getHash=function(){var e=this.toBuffer();return i.sha256sha256(e)};var u={configurable:!1,enumerable:!0,get:function(){return this._id||(this._id=d(this._getHash()).readReverse().toString("hex")),this._id},set:f.noop};Object.defineProperty(s.prototype,"id",u),Object.defineProperty(s.prototype,"hash",u),s.prototype.validTimestamp=function(){var e=Math.round((new Date).getTime()/1e3);return this.time>e+s.Constants.MAX_TIME_OFFSET?!1:!0},s.prototype.validProofOfWork=function(){var e=new c(this.id,"hex"),a=this.getTargetDifficulty();return e.cmp(a)>0?!1:!0},s.prototype.inspect=function(){return""},s.Constants={START_OF_HEADER:8,MAX_TIME_OFFSET:7200,LARGEST_HASH:new c("10000000000000000000000000000000000000000000000000000000000000000","hex")},a.exports=s}).call(this,e("buffer").Buffer)},{"../crypto/bn":13,"../crypto/hash":15,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,buffer:99,lodash:78}],11:[function(e,a,t){a.exports=e("./block"),a.exports.BlockHeader=e("./blockheader"),a.exports.MerkleBlock=e("./merkleblock")},{"./block":9,"./blockheader":10,"./merkleblock":12}],12:[function(e,a,t){(function(t){"use strict";function f(e){if(!(this instanceof f))return new f(e);var a={};if(d.isBuffer(e))a=f._fromBufferReader(n(e));else{if(!c.isObject(e))throw new TypeError("Unrecognized argument for MerkleBlock");var t;t=e.header instanceof r?e.header:r.fromObject(e.header),a={header:t,numTransactions:e.numTransactions,hashes:e.hashes,flags:e.flags}}return c.extend(this,a),this._flagBitsUsed=0,this._hashesUsed=0,this}var c=e("lodash"),r=e("./blockheader"),d=e("../util/buffer"),n=e("../encoding/bufferreader"),i=e("../encoding/bufferwriter"),b=e("../crypto/hash"),o=(e("../util/js"),e("../transaction")),s=e("../util/preconditions");f.fromBuffer=function(e){return f.fromBufferReader(n(e))},f.fromBufferReader=function(e){return new f(f._fromBufferReader(e))},f.prototype.toBuffer=function(){return this.toBufferWriter().concat()},f.prototype.toBufferWriter=function(e){e||(e=new i),e.write(this.header.toBuffer()),e.writeUInt32LE(this.numTransactions),e.writeVarintNum(this.hashes.length);for(var a=0;athis.numTransactions)return!1;if(8*this.flags.length8*this.flags.length)return null;var c=this.flags[f.flagBitsUsed>>3]>>>(7&f.flagBitsUsed++)&1;if(0!==e&&c){var r=this._traverseMerkleTree(e-1,2*a,f),d=r;return 2*a+1=this.hashes.length)return null;var n=this.hashes[f.hashesUsed++];return 0===e&&c&&f.txs.push(n),new t(n,"hex")},f.prototype._calcTreeWidth=function(e){return this.numTransactions+(1<>e},f.prototype._calcTreeHeight=function(){for(var e=0;this._calcTreeWidth(e)>1;)e++;return e},f.prototype.hasTransaction=function(e){s.checkArgument(!c.isUndefined(e),"tx cannot be undefined"),s.checkArgument(e instanceof o||"string"==typeof e,'Invalid tx given, tx must be a "string" or "Transaction"');var a=e;e instanceof o&&(a=d.reverse(new t(e.id,"hex")).toString("hex"));var f=[],r=this._calcTreeHeight();return this._traverseMerkleTree(r,0,{txs:f}),-1!==f.indexOf(a)},f._fromBufferReader=function(e){s.checkState(!e.finished(),"No merkleblock data received");var a={};a.header=r.fromBufferReader(e),a.numTransactions=e.readUInt32LE();var t=e.readVarintNum();a.hashes=[];for(var f=0;t>f;f++)a.hashes.push(e.read(32).toString("hex"));var c=e.readVarintNum();for(a.flags=[],f=0;c>f;f++)a.flags.push(e.readUInt8());return a},f.fromObject=function(e){return new f(e)},a.exports=f}).call(this,e("buffer").Buffer)},{"../crypto/hash":15,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../transaction":36,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,"./blockheader":10,buffer:99,lodash:78}],13:[function(e,a,t){(function(t){"use strict";var f=e("bn.js"),c=e("../util/preconditions"),r=e("lodash"),d=function(e){for(var a=new t(e.length),f=0;fe.size?a=f.trim(a,r):r0&&0===(127&e[e.length-1])&&(e.length<=1||0===(128&e[e.length-2])))throw new Error("non-minimally encoded script number");return f.fromSM(e,{endian:"little"})},f.prototype.toScriptNumBuffer=function(){return this.toSM({endian:"little"})},f.prototype.gt=function(e){return this.cmp(e)>0},f.prototype.gte=function(e){return this.cmp(e)>=0},f.prototype.lt=function(e){return this.cmp(e)<0},f.trim=function(e,a){return e.slice(a-e.length,e.length)},f.pad=function(e,a,f){for(var c=new t(f),r=0;rr;r++)c[r]=0;return c},a.exports=f}).call(this,e("buffer").Buffer)},{"../util/preconditions":52,"bn.js":53,buffer:99,lodash:78}],14:[function(e,a,t){(function(t){"use strict";var f=e("./bn"),c=e("./point"),r=e("./signature"),d=e("../publickey"),n=e("./random"),i=e("./hash"),b=e("../util/buffer"),o=e("lodash"),s=e("../util/preconditions"),u=function h(e){return this instanceof h?void(e&&this.set(e)):new h(e)};u.prototype.set=function(e){return this.hashbuf=e.hashbuf||this.hashbuf,this.endian=e.endian||this.endian,this.privkey=e.privkey||this.privkey,this.pubkey=e.pubkey||(this.privkey?this.privkey.publicKey:this.pubkey),this.sig=e.sig||this.sig,this.k=e.k||this.k,this.verified=e.verified||this.verified,this},u.prototype.privkey2pubkey=function(){this.pubkey=this.privkey.toPublicKey()},u.prototype.calci=function(){for(var e=0;4>e;e++){this.sig.i=e;var a;try{a=this.toPublicKey()}catch(t){console.error(t);continue}if(a.point.eq(this.pubkey.point))return this.sig.compressed=this.pubkey.compressed,this}throw this.sig.i=void 0,new Error("Unable to find valid recovery factor")},u.fromString=function(e){var a=JSON.parse(e);return new u(a)},u.prototype.randomK=function(){var e,a=c.getN();do e=f.fromBuffer(n.getRandomBuffer(32));while(!e.lt(a)||!e.gt(f.Zero));return this.k=e,this},u.prototype.deterministicK=function(e){o.isUndefined(e)&&(e=0);var a=new t(32);a.fill(1);var r=new t(32);r.fill(0);var d=this.privkey.bn.toBuffer({size:32});r=i.sha256hmac(t.concat([a,new t([0]),d,this.hashbuf]),r),a=i.sha256hmac(a,r),r=i.sha256hmac(t.concat([a,new t([1]),d,this.hashbuf]),r),a=i.sha256hmac(a,r),a=i.sha256hmac(a,r);for(var n=f.fromBuffer(a),b=c.getN(),s=0;e>s||!n.lt(b)||!n.gt(f.Zero);s++)r=i.sha256hmac(t.concat([a,new t([0])]),r),a=i.sha256hmac(a,r),a=i.sha256hmac(a,r),n=f.fromBuffer(a);return this.k=n,this},u.prototype.toPublicKey=function(){var e=this.sig.i;s.checkArgument(0===e||1===e||2===e||3===e,new Error("i must be equal to 0, 1, 2, or 3"));var a=f.fromBuffer(this.hashbuf),t=this.sig.r,r=this.sig.s,n=1&e,i=e>>1,b=c.getN(),o=c.getG(),u=i?t.add(b):t,h=c.fromX(n,u),l=h.mul(b);if(!l.isInfinity())throw new Error("nR is not a valid curve point");var p=a.neg().mod(b),g=t.invm(b),m=h.mul(r).add(o.mul(p)).mul(g),v=d.fromPoint(m,this.sig.compressed);return v},u.prototype.sigError=function(){if(!b.isBuffer(this.hashbuf)||32!==this.hashbuf.length)return"hashbuf must be a 32 byte buffer";var e=this.sig.r,a=this.sig.s;if(!(e.gt(f.Zero)&&e.lt(c.getN())&&a.gt(f.Zero)&&a.lt(c.getN())))return"r and s not in range";var t=f.fromBuffer(this.hashbuf,this.endian?{endian:this.endian}:void 0),r=c.getN(),d=a.invm(r),n=d.mul(t).mod(r),i=d.mul(e).mod(r),o=c.getG().mulAdd(n,this.pubkey.point,i);return o.isInfinity()?"p is infinity":0!==o.getX().mod(r).cmp(e)?"Invalid signature":!1},u.toLowS=function(e){return e.gt(f.fromBuffer(new t("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0","hex")))&&(e=c.getN().sub(e)),e},u.prototype._findSignature=function(e,a){var t,r,d,n,i=c.getN(),b=c.getG(),o=0;do(!this.k||o>0)&&this.deterministicK(o),o++,t=this.k,r=b.mul(t),d=r.x.mod(i),n=t.invm(i).mul(a.add(e.mul(d))).mod(i);while(d.cmp(f.Zero)<=0||n.cmp(f.Zero)<=0);return n=u.toLowS(n),{s:n,r:d}},u.prototype.sign=function(){var e=this.hashbuf,a=this.privkey,t=a.bn;s.checkState(e&&a&&t,new Error("invalid parameters")),s.checkState(b.isBuffer(e)&&32===e.length,new Error("hashbuf must be a 32 byte buffer"));var c=f.fromBuffer(e,this.endian?{endian:this.endian}:void 0),d=this._findSignature(t,c);return d.compressed=this.pubkey.compressed,this.sig=new r(d),this},u.prototype.signRandomK=function(){return this.randomK(),this.sign()},u.prototype.toString=function(){var e={};return this.hashbuf&&(e.hashbuf=this.hashbuf.toString("hex")),this.privkey&&(e.privkey=this.privkey.toString()),this.pubkey&&(e.pubkey=this.pubkey.toString()),this.sig&&(e.sig=this.sig.toString()),this.k&&(e.k=this.k.toString()),JSON.stringify(e)},u.prototype.verify=function(){return this.sigError()?this.verified=!1:this.verified=!0,this},u.sign=function(e,a,t){return u().set({hashbuf:e,endian:t,privkey:a}).sign().sig},u.verify=function(e,a,t,f){return u().set({hashbuf:e,endian:f,sig:a,pubkey:t}).verify().verified},a.exports=u}).call(this,e("buffer").Buffer)},{"../publickey":32,"../util/buffer":50,"../util/preconditions":52,"./bn":13,"./hash":15,"./point":16,"./random":17,"./signature":18,buffer:99,lodash:78}],15:[function(e,a,t){(function(t){"use strict";var f=e("sha512"),c=e("crypto"),r=e("../util/buffer"),d=e("../util/preconditions"),n=a.exports;n.sha1=function(e){return d.checkArgument(r.isBuffer(e)),c.createHash("sha1").update(e).digest()},n.sha1.blocksize=512,n.sha256=function(e){return d.checkArgument(r.isBuffer(e)),c.createHash("sha256").update(e).digest()},n.sha256.blocksize=512,n.sha256sha256=function(e){return d.checkArgument(r.isBuffer(e)),n.sha256(n.sha256(e))},n.ripemd160=function(e){return d.checkArgument(r.isBuffer(e)),c.createHash("ripemd160").update(e).digest()},n.sha256ripemd160=function(e){return d.checkArgument(r.isBuffer(e)),n.ripemd160(n.sha256(e))},n.sha512=function(e){d.checkArgument(r.isBuffer(e));var a=f(e);return new t(a)},n.sha512.blocksize=1024,n.hmac=function(e,a,f){d.checkArgument(r.isBuffer(a)),d.checkArgument(r.isBuffer(f)),d.checkArgument(e.blocksize);var c=e.blocksize/8;if(f.length>c)f=e(f);else if(c>f){var n=new t(c);n.fill(0),f.copy(n),f=n}var i=new t(c);i.fill(92);var b=new t(c);b.fill(54);for(var o=new t(c),s=new t(c),u=0;c>u;u++)o[u]=i[u]^f[u],s[u]=b[u]^f[u];return e(t.concat([o,e(t.concat([s,a]))]))},n.sha256hmac=function(e,a){return n.hmac(n.sha256,e,a)},n.sha512hmac=function(e,a){return n.hmac(n.sha512,e,a)}}).call(this,e("buffer").Buffer)},{"../util/buffer":50,"../util/preconditions":52,buffer:99,crypto:103,sha512:81}],16:[function(e,a,t){(function(t){"use strict";var f=e("./bn"),c=e("../util/buffer"),r=e("elliptic").curves.secp256k1,d=r.curve.point.bind(r.curve),n=r.curve.pointFromX.bind(r.curve),i=function(e,a,t){var f=d(e,a,t);return f.validate(),f};i.prototype=Object.getPrototypeOf(r.curve.point()),i.fromX=function(e,a){var t=n(e,a);return t.validate(),t},i.getG=function(){return r.curve.g},i.getN=function(){return new f(r.curve.n.toArray())},i.prototype._getX=i.prototype.getX,i.prototype.getX=function(){return new f(this._getX().toArray())},i.prototype._getY=i.prototype.getY,i.prototype.getY=function(){return new f(this._getY().toArray())},i.prototype.validate=function(){if(this.isInfinity())throw new Error("Point cannot be equal to Infinity");if(0===this.getX().cmp(f.Zero)||0===this.getY().cmp(f.Zero))throw new Error("Invalid x,y value for curve, cannot equal 0.");var e=n(this.getY().isOdd(),this.getX());if(0!==e.y.cmp(this.y))throw new Error("Invalid y value for curve.");var a=this.getX().gt(f.Minus1)&&this.getX().lt(i.getN()),t=this.getY().gt(f.Minus1)&&this.getY().lt(i.getN());if(!a||!t)throw new Error("Point does not lie on the curve");if(!this.mul(i.getN()).isInfinity())throw new Error("Point times N must be infinity");return this},i.pointToCompressed=function(e){var a,f=e.getX().toBuffer({size:32}),r=e.getY().toBuffer({size:32}),d=r[r.length-1]%2;return a=new t(d?[3]:[2]),c.concat([a,f])},a.exports=i}).call(this,e("buffer").Buffer)},{"../util/buffer":50,"./bn":13,buffer:99,elliptic:56}],17:[function(e,a,t){(function(t,f){"use strict";function c(){}c.getRandomBuffer=function(e){return t.browser?c.getRandomBufferBrowser(e):c.getRandomBufferNode(e)},c.getRandomBufferNode=function(a){var t=e("crypto");return t.randomBytes(a)},c.getRandomBufferBrowser=function(e){if(!window.crypto&&!window.msCrypto)throw new Error("window.crypto not available");if(window.crypto&&window.crypto.getRandomValues)var a=window.crypto;else{if(!window.msCrypto||!window.msCrypto.getRandomValues)throw new Error("window.crypto.getRandomValues not available");var a=window.msCrypto}var t=new Uint8Array(e);a.getRandomValues(t);var c=new f(t);return c},c.getPseudoRandomBuffer=function(e){for(var a,t=4294967296,c=new f(e),r=0;e>=r;r++){var d=Math.floor(r/4),n=r-4*d;0===n?(a=Math.random()*t,c[r]=255&a):c[r]=255&(a>>>=8)}return c},a.exports=c}).call(this,e("_process"),e("buffer").Buffer)},{_process:299,buffer:99,crypto:103}],18:[function(e,a,t){(function(t){"use strict";var f=e("./bn"),c=e("lodash"),r=e("../util/preconditions"),d=e("../util/buffer"),n=e("../util/js"),i=function b(e,a){if(!(this instanceof b))return new b(e,a);if(e instanceof f)this.set({r:e,s:a});else if(e){var t=e;this.set(t)}};i.prototype.set=function(e){return this.r=e.r||this.r||void 0,this.s=e.s||this.s||void 0,this.i="undefined"!=typeof e.i?e.i:this.i,this.compressed="undefined"!=typeof e.compressed?e.compressed:this.compressed,this.nhashtype=e.nhashtype||this.nhashtype||void 0,this},i.fromCompact=function(e){r.checkArgument(d.isBuffer(e),"Argument is expected to be a Buffer");var a=new i,t=!0,c=e.slice(0,1)[0]-27-4;0>c&&(t=!1,c+=4);var n=e.slice(1,33),b=e.slice(33,65);return r.checkArgument(0===c||1===c||2===c||3===c,new Error("i must be 0, 1, 2, or 3")),r.checkArgument(32===n.length,new Error("r must be 32 bytes")),r.checkArgument(32===b.length,new Error("s must be 32 bytes")),a.compressed=t,a.i=c,a.r=f.fromBuffer(n),a.s=f.fromBuffer(b),a},i.fromDER=i.fromBuffer=function(e,a){var t=i.parseDER(e,a),f=new i;return f.r=t.r,f.s=t.s,f},i.fromTxFormat=function(e){var a=e.readUInt8(e.length-1),t=e.slice(0,e.length-1),f=new i.fromDER(t,!1);return f.nhashtype=a,f},i.fromString=function(e){var a=new t(e,"hex");return i.fromDER(a)},i.parseDER=function(e,a){r.checkArgument(d.isBuffer(e),new Error("DER formatted signature should be a buffer")),c.isUndefined(a)&&(a=!0);var t=e[0];r.checkArgument(48===t,new Error("Header byte should be 0x30"));var n=e[1],i=e.slice(2).length;r.checkArgument(!a||n===i,new Error("Length byte should length of what follows")),n=i>n?n:i;var b=e[2];r.checkArgument(2===b,new Error("Integer byte for r should be 0x02"));var o=e[3],s=e.slice(4,4+o),u=f.fromBuffer(s),h=0===e[4]?!0:!1;r.checkArgument(o===s.length,new Error("Length of r incorrect"));var l=e[4+o+0];r.checkArgument(2===l,new Error("Integer byte for s should be 0x02"));var p=e[4+o+1],g=e.slice(4+o+2,4+o+2+p),m=f.fromBuffer(g),v=0===e[4+o+2+2]?!0:!1;r.checkArgument(p===g.length,new Error("Length of s incorrect"));var y=4+o+2+p;r.checkArgument(n===y-2,new Error("Length of signature incorrect"));var w={header:t,length:n,rheader:b,rlength:o,rneg:h,rbuf:s,r:u,sheader:l,slength:p,sneg:v,sbuf:g,s:m};return w},i.prototype.toCompact=function(e,a){if(e="number"==typeof e?e:this.i,a="boolean"==typeof a?a:this.compressed,0!==e&&1!==e&&2!==e&&3!==e)throw new Error("i must be equal to 0, 1, 2, or 3");var f=e+27+4;a===!1&&(f-=4);var c=new t([f]),r=this.r.toBuffer({size:32}),d=this.s.toBuffer({size:32});return t.concat([c,r,d])},i.prototype.toBuffer=i.prototype.toDER=function(){var e=this.r.toBuffer(),a=this.s.toBuffer(),f=128&e[0]?!0:!1,c=128&a[0]?!0:!1,r=f?t.concat([new t([0]),e]):e,d=c?t.concat([new t([0]),a]):a,n=r.length,i=d.length,b=2+n+2+i,o=2,s=2,u=48,h=t.concat([new t([u,b,o,n]),r,new t([s,i]),d]);return h},i.prototype.toString=function(){var e=this.toDER();return e.toString("hex")},i.isTxDER=function(e){if(e.length<9)return!1;if(e.length>73)return!1;if(48!==e[0])return!1;if(e[1]!==e.length-3)return!1;var a=e[3];if(5+a>=e.length)return!1;var t=e[5+a];if(a+t+7!==e.length)return!1;var f=e.slice(4);if(2!==e[2])return!1;if(0===a)return!1;if(128&f[0])return!1;if(a>1&&0===f[0]&&!(128&f[1]))return!1;var c=e.slice(6+a);return 2!==e[6+a-2]?!1:0===t?!1:128&c[0]?!1:t>1&&0===c[0]&&!(128&c[1])?!1:!0},i.prototype.hasLowS=function(){return this.s.lt(new f(1))||this.s.gt(new f("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0","hex"))?!1:!0},i.prototype.hasDefinedHashtype=function(){if(!n.isNaturalNumber(this.nhashtype))return!1;var e=this.nhashtype&~i.SIGHASH_ANYONECANPAY;return ei.SIGHASH_SINGLE?!1:!0},i.prototype.toTxFormat=function(){var e=this.toDER(),a=new t(1);return a.writeUInt8(this.nhashtype,0),t.concat([e,a])},i.SIGHASH_ALL=1,i.SIGHASH_NONE=2,i.SIGHASH_SINGLE=3,i.SIGHASH_ANYONECANPAY=128,a.exports=i}).call(this,e("buffer").Buffer)},{"../util/buffer":50,"../util/js":51,"../util/preconditions":52,"./bn":13,buffer:99,lodash:78}],19:[function(e,a,t){(function(t){"use strict";var f=e("lodash"),c=e("bs58"),r=e("buffer"),d="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".split(""),n=function i(e){if(!(this instanceof i))return new i(e);if(t.isBuffer(e)){var a=e;this.fromBuffer(a)}else if("string"==typeof e){var f=e;this.fromString(f)}else e&&this.set(e)};n.validCharacters=function(e){return r.Buffer.isBuffer(e)&&(e=e.toString()),f.all(f.map(e,function(e){return f.contains(d,e)}))},n.prototype.set=function(e){return this.buf=e.buf||this.buf||void 0,this},n.encode=function(e){if(!r.Buffer.isBuffer(e))throw new Error("Input should be a buffer");return c.encode(e)},n.decode=function(e){if("string"!=typeof e)throw new Error("Input should be a string");return new t(c.decode(e))},n.prototype.fromBuffer=function(e){return this.buf=e,this},n.prototype.fromString=function(e){var a=n.decode(e);return this.buf=a,this},n.prototype.toBuffer=function(){return this.buf},n.prototype.toString=function(){return n.encode(this.buf)},a.exports=n}).call(this,e("buffer").Buffer)},{bs58:54,buffer:99,lodash:78}],20:[function(e,a,t){(function(t){"use strict";var f=e("lodash"),c=e("./base58"),r=e("buffer"),d=e("../crypto/hash").sha256sha256,n=function i(e){if(!(this instanceof i))return new i(e);if(t.isBuffer(e)){var a=e;this.fromBuffer(a)}else if("string"==typeof e){var f=e;this.fromString(f)}else e&&this.set(e)};n.prototype.set=function(e){return this.buf=e.buf||this.buf||void 0,this},n.validChecksum=function(e,a){return f.isString(e)&&(e=new r.Buffer(c.decode(e))),f.isString(a)&&(a=new r.Buffer(c.decode(a))),a||(a=e.slice(-4),e=e.slice(0,-4)),n.checksum(e).toString("hex")===a.toString("hex")},n.decode=function(e){if("string"!=typeof e)throw new Error("Input must be a string");var a=new t(c.decode(e));if(a.length<4)throw new Error("Input string too short");var f=a.slice(0,-4),r=a.slice(-4),n=d(f),i=n.slice(0,4);if(r.toString("hex")!==i.toString("hex"))throw new Error("Checksum mismatch");return f},n.checksum=function(e){return d(e).slice(0,4)},n.encode=function(e){if(!t.isBuffer(e))throw new Error("Input must be a buffer");var a=new t(e.length+4),f=n.checksum(e);return e.copy(a),f.copy(a,e.length),c.encode(a)},n.prototype.fromBuffer=function(e){return this.buf=e,this},n.prototype.fromString=function(e){var a=n.decode(e);return this.buf=a,this},n.prototype.toBuffer=function(){return this.buf},n.prototype.toString=function(){return n.encode(this.buf)},a.exports=n}).call(this,e("buffer").Buffer)},{"../crypto/hash":15,"./base58":19,buffer:99,lodash:78}],21:[function(e,a,t){(function(t){"use strict";var f=e("lodash"),c=e("../util/preconditions"),r=e("../util/buffer"),d=e("../crypto/bn"),n=function i(e){if(!(this instanceof i))return new i(e);if(!f.isUndefined(e))if(t.isBuffer(e))this.set({buf:e});else if(f.isString(e))this.set({buf:new t(e,"hex")});else{if(!f.isObject(e))throw new TypeError("Unrecognized argument for BufferReader");var a=e;this.set(a)}};n.prototype.set=function(e){return this.buf=e.buf||this.buf||void 0,this.pos=e.pos||this.pos||0,this},n.prototype.eof=function(){return this.pos>=this.buf.length},n.prototype.finished=n.prototype.eof,n.prototype.read=function(e){c.checkArgument(!f.isUndefined(e),"Must specify a length");var a=this.buf.slice(this.pos,this.pos+e);return this.pos=this.pos+e,a},n.prototype.readAll=function(){var e=this.buf.slice(this.pos,this.buf.length);return this.pos=this.buf.length,e},n.prototype.readUInt8=function(){var e=this.buf.readUInt8(this.pos);return this.pos=this.pos+1,e},n.prototype.readUInt16BE=function(){var e=this.buf.readUInt16BE(this.pos);return this.pos=this.pos+2,e},n.prototype.readUInt16LE=function(){var e=this.buf.readUInt16LE(this.pos);return this.pos=this.pos+2,e},n.prototype.readUInt32BE=function(){var e=this.buf.readUInt32BE(this.pos);return this.pos=this.pos+4,e},n.prototype.readUInt32LE=function(){var e=this.buf.readUInt32LE(this.pos);return this.pos=this.pos+4,e},n.prototype.readUInt64BEBN=function(){var e=this.buf.slice(this.pos,this.pos+8),a=d.fromBuffer(e);return this.pos=this.pos+8,a},n.prototype.readUInt64LEBN=function(){var e,a=this.buf.readUInt32LE(this.pos),t=this.buf.readUInt32LE(this.pos+4),f=4294967296*t+a;if(9007199254740991>=f)e=new d(f);else{var c=Array.prototype.slice.call(this.buf,this.pos,this.pos+8);e=new d(c,10,"le")}return this.pos=this.pos+8,e},n.prototype.readVarintNum=function(){var e=this.readUInt8();switch(e){case 253:return this.readUInt16LE();case 254:return this.readUInt32LE();case 255:var a=this.readUInt64LEBN(),t=a.toNumber();if(t<=Math.pow(2,53))return t;throw new Error("number too large to retain precision - use readVarintBN");default:return e}},n.prototype.readVarLengthBuffer=function(){var e=this.readVarintNum(),a=this.read(e);return c.checkState(a.length===e,"Invalid length while reading varlength buffer. Expected to read: "+e+" and read "+a.length),a},n.prototype.readVarintBuf=function(){var e=this.buf.readUInt8(this.pos);switch(e){case 253:return this.read(3);case 254:return this.read(5);case 255:return this.read(9);default:return this.read(1)}},n.prototype.readVarintBN=function(){var e=this.readUInt8();switch(e){case 253:return new d(this.readUInt16LE());case 254:return new d(this.readUInt32LE());case 255:return this.readUInt64LEBN();default:return new d(e)}},n.prototype.reverse=function(){for(var e=new t(this.buf.length),a=0;ae?(a=new t(1),a.writeUInt8(e,0)):65536>e?(a=new t(3),a.writeUInt8(253,0),a.writeUInt16LE(e,1)):4294967296>e?(a=new t(5),a.writeUInt8(254,0),a.writeUInt32LE(e,1)):(a=new t(9),a.writeUInt8(255,0),a.writeInt32LE(-1&e,1),a.writeUInt32LE(Math.floor(e/4294967296),5)),a},r.varintBufBN=function(e){var a=void 0,f=e.toNumber();if(253>f)a=new t(1),a.writeUInt8(f,0);else if(65536>f)a=new t(3),a.writeUInt8(253,0),a.writeUInt16LE(f,1);else if(4294967296>f)a=new t(5),a.writeUInt8(254,0),a.writeUInt32LE(f,1);else{var c=new r;c.writeUInt8(255),c.writeUInt64LEBN(e);var a=c.concat()}return a},a.exports=r}).call(this,e("buffer").Buffer)},{"../util/buffer":50,assert:97,buffer:99}],23:[function(e,a,t){(function(t){"use strict";var f=e("./bufferwriter"),c=e("./bufferreader"),r=e("../crypto/bn"),d=function n(e){if(!(this instanceof n))return new n(e);if(t.isBuffer(e))this.buf=e;else if("number"==typeof e){var a=e;this.fromNumber(a)}else if(e instanceof r){var f=e;this.fromBN(f)}else if(e){var c=e;this.set(c)}};d.prototype.set=function(e){return this.buf=e.buf||this.buf,this},d.prototype.fromString=function(e){return this.set({buf:new t(e,"hex")}),this},d.prototype.toString=function(){return this.buf.toString("hex")},d.prototype.fromBuffer=function(e){return this.buf=e,this},d.prototype.fromBufferReader=function(e){return this.buf=e.readVarintBuf(),this},d.prototype.fromBN=function(e){return this.buf=f().writeVarintBN(e).concat(),this},d.prototype.fromNumber=function(e){return this.buf=f().writeVarintNum(e).concat(),this},d.prototype.toBuffer=function(){return this.buf},d.prototype.toBN=function(){return c(this.buf).readVarintBN()},d.prototype.toNumber=function(){return c(this.buf).readVarintNum()},a.exports=d}).call(this,e("buffer").Buffer)},{"../crypto/bn":13,"./bufferreader":21,"./bufferwriter":22,buffer:99}],24:[function(e,a,t){"use strict";function f(e,a){return e.replace("{0}",a[0]).replace("{1}",a[1]).replace("{2}",a[2])}var c=e("lodash"),r=function(e,a){var t=function(){if(c.isString(a.message))this.message=f(a.message,arguments);else{if(!c.isFunction(a.message))throw new Error("Invalid error definition for "+a.name);this.message=a.message.apply(null,arguments)}this.stack=this.message+"\n"+(new Error).stack};return t.prototype=Object.create(e.prototype),t.prototype.name=e.prototype.name+a.name,e[a.name]=t,a.errors&&d(t,a.errors),t},d=function(e,a){c.each(a,function(a){r(e,a)})},n=function(e,a){return d(e,a),e},i={};i.Error=function(){this.message="Internal error",this.stack=this.message+"\n"+(new Error).stack},i.Error.prototype=Object.create(Error.prototype),i.Error.prototype.name="bitcore.Error";var b=e("./spec");n(i.Error,b),a.exports=i.Error,a.exports.extend=function(e){return r(i.Error,e)}},{"./spec":25,lodash:78}],25:[function(e,a,t){"use strict";var f="http://bitcore.io/";a.exports=[{name:"InvalidB58Char",message:"Invalid Base58 character: {0} in {1}"},{name:"InvalidB58Checksum",message:"Invalid Base58 checksum for {0}"},{name:"InvalidNetwork",message:"Invalid version for network: got {0}"},{name:"InvalidState",message:"Invalid state: {0}"},{name:"NotImplemented",message:"Function {0} was not implemented yet"},{name:"InvalidNetworkArgument",message:'Invalid network: must be "livenet" or "testnet", got {0}'},{name:"InvalidArgument",message:function(){return"Invalid Argument"+(arguments[0]?": "+arguments[0]:"")+(arguments[1]?" Documentation: "+f+arguments[1]:"")}},{name:"AbstractMethodInvoked",message:"Abstract Method Invocation: {0}"},{name:"InvalidArgumentType",message:function(){return"Invalid Argument for "+arguments[2]+", expected "+arguments[1]+" but got "+typeof arguments[0]}},{name:"Unit",message:"Internal Error on Unit {0}",errors:[{name:"UnknownCode",message:"Unrecognized unit code: {0}"},{name:"InvalidRate",message:"Invalid exchange rate: {0}"}]},{name:"Transaction",message:"Internal Error on Transaction {0}",errors:[{name:"Input",message:"Internal Error on Input {0}",errors:[{name:"MissingScript",message:"Need a script to create an input"},{name:"UnsupportedScript",message:"Unsupported input script type: {0}"},{name:"MissingPreviousOutput",message:"No previous output information."}]},{name:"NeedMoreInfo",message:"{0}"},{name:"InvalidSorting",message:"The sorting function provided did not return the change output as one of the array elements"},{name:"InvalidOutputAmountSum",message:"{0}"},{name:"MissingSignatures",message:"Some inputs have not been fully signed"},{name:"InvalidIndex",message:"Invalid index: {0} is not between 0, {1}"},{name:"UnableToVerifySignature",message:"Unable to verify signature: {0}"},{name:"DustOutputs",message:"Dust amount detected in one output"},{name:"InvalidSatoshis",message:"Output satoshis are invalid"},{name:"FeeError",message:"Internal Error on Fee {0}",errors:[{name:"TooSmall",message:"Fee is too small: {0}"},{name:"TooLarge",message:"Fee is too large: {0}"},{name:"Different",message:"Unspent value is different from specified fee: {0}"}]},{name:"ChangeAddressMissing",message:"Change address is missing"},{name:"BlockHeightTooHigh",message:"Block Height can be at most 2^32 -1"},{name:"NLockTimeOutOfRange",message:"Block Height can only be between 0 and 499 999 999"},{name:"LockTimeTooEarly",message:"Lock Time can't be earlier than UNIX date 500 000 000"}]},{name:"Script",message:"Internal Error on Script {0}",errors:[{name:"UnrecognizedAddress",message:"Expected argument {0} to be an address"},{name:"CantDeriveAddress",message:"Can't derive address associated with script {0}, needs to be p2pkh in, p2pkh out, p2sh in, or p2sh out."},{name:"InvalidBuffer",message:"Invalid script buffer: can't parse valid script from given buffer {0}"}]},{name:"HDPrivateKey",message:"Internal Error on HDPrivateKey {0}",errors:[{name:"InvalidDerivationArgument",message:"Invalid derivation argument {0}, expected string, or number and boolean"},{name:"InvalidEntropyArgument",message:"Invalid entropy: must be an hexa string or binary buffer, got {0}",errors:[{name:"TooMuchEntropy",message:'Invalid entropy: more than 512 bits is non standard, got "{0}"'},{name:"NotEnoughEntropy",message:'Invalid entropy: at least 128 bits needed, got "{0}"'}]},{name:"InvalidLength",message:"Invalid length for xprivkey string in {0}"},{name:"InvalidPath",message:"Invalid derivation path: {0}"},{name:"UnrecognizedArgument",message:'Invalid argument: creating a HDPrivateKey requires a string, buffer, json or object, got "{0}"'}]},{name:"HDPublicKey",message:"Internal Error on HDPublicKey {0}",errors:[{name:"ArgumentIsPrivateExtended",message:"Argument is an extended private key: {0}"},{name:"InvalidDerivationArgument",message:"Invalid derivation argument: got {0}"},{name:"InvalidLength",message:'Invalid length for xpubkey: got "{0}"'},{name:"InvalidPath",message:'Invalid derivation path, it should look like: "m/1/100", got "{0}"'},{name:"InvalidIndexCantDeriveHardened",message:"Invalid argument: creating a hardened path requires an HDPrivateKey"},{name:"MustSupplyArgument",message:"Must supply an argument to create a HDPublicKey"},{name:"UnrecognizedArgument",message:"Invalid argument for creation, must be string, json, buffer, or object"}]}]},{}],26:[function(e,a,t){"use strict";a.exports={_cache:{},_count:0,_eraseIndex:0,_usedList:{},_usedIndex:{},_CACHE_SIZE:5e3,get:function(e,a,t){t=!!t;var f=e+"/"+a+"/"+t;return this._cache[f]?(this._cacheHit(f),this._cache[f]):void 0},set:function(e,a,t,f){t=!!t;var c=e+"/"+a+"/"+t;this._cache[c]=f,this._cacheHit(c)},_cacheHit:function(e){this._usedIndex[e]&&delete this._usedList[this._usedIndex[e]],this._usedList[this._count]=e,this._usedIndex[e]=this._count,this._count++,this._cacheRemove()},_cacheRemove:function(){for(;this._eraseIndex=0&&e=f.Hardened?!0:a,eA*S)throw new v.InvalidEntropyArgument.TooMuchEntropy(e);var c=s.sha512hmac(e,new r.Buffer("Bitcoin seed"));return new f({network:u.get(a)||u.defaultNetwork,depth:0,parentFingerPrint:0,childIndex:0,privateKey:c.slice(0,32),chainCode:c.slice(32,64)})},f.prototype._calcHDPublicKey=function(){if(!this._hdPublicKey){var a=e("./hdpublickey");this._hdPublicKey=new a(this)}},f.prototype._buildFromBuffers=function(e){f._validateBufferArguments(e),w.defineImmutable(this,{_buffers:e});var a=[e.version,e.depth,e.parentFingerPrint,e.childIndex,e.chainCode,y.emptyBuffer(1),e.privateKey],c=r.Buffer.concat(a);if(e.checksum&&e.checksum.length){if(e.checksum.toString()!==o.checksum(c).toString())throw new m.InvalidB58Checksum(c)}else e.checksum=o.checksum(c);var d,n=u.get(y.integerFromBuffer(e.version));d=o.encode(r.Buffer.concat(a)),e.xprivkey=new t(d);var b=new p(i.fromBuffer(e.privateKey),n),h=b.toPublicKey(),l=f.ParentFingerPrintSize,g=s.sha256ripemd160(h.toBuffer()).slice(0,l);return w.defineImmutable(this,{xprivkey:d,network:n,depth:y.integerFromSingleByteBuffer(e.depth),privateKey:b,publicKey:h,fingerPrint:g}),this._hdPublicKey=null,Object.defineProperty(this,"hdPublicKey",{configurable:!1,enumerable:!0,get:function(){return this._calcHDPublicKey(),this._hdPublicKey}}),Object.defineProperty(this,"xpubkey",{configurable:!1,enumerable:!0,get:function(){return this._calcHDPublicKey(),this._hdPublicKey.xpubkey}}),this},f._validateBufferArguments=function(e){var a=function(a,t){var f=e[a];c(y.isBuffer(f),a+" argument is not a buffer"),c(f.length===t,a+" has not the expected size: found "+f.length+", expected "+t)};a("version",f.VersionSize),a("depth",f.DepthSize),a("parentFingerPrint",f.ParentFingerPrintSize),a("childIndex",f.ChildIndexSize),a("chainCode",f.ChainCodeSize),a("privateKey",f.PrivateKeySize),e.checksum&&e.checksum.length&&a("checksum",f.CheckSumSize)},f.prototype.toString=function(){return this.xprivkey},f.prototype.inspect=function(){return""},f.prototype.toObject=f.prototype.toJSON=function(){return{network:u.get(y.integerFromBuffer(this._buffers.version),"xprivkey").name,depth:y.integerFromSingleByteBuffer(this._buffers.depth),fingerPrint:y.integerFromBuffer(this.fingerPrint),parentFingerPrint:y.integerFromBuffer(this._buffers.parentFingerPrint),childIndex:y.integerFromBuffer(this._buffers.childIndex),chainCode:y.bufferToHex(this._buffers.chainCode),privateKey:this.privateKey.toBuffer().toString("hex"),checksum:y.integerFromBuffer(this._buffers.checksum),xprivkey:this.xprivkey}},f.fromBuffer=function(e){return new f(e.toString())},f.prototype.toBuffer=function(){return y.copy(this._buffers.xprivkey)},f.DefaultDepth=0,f.DefaultFingerprint=0,f.DefaultChildIndex=0,f.Hardened=2147483648,f.MaxIndex=2*f.Hardened,f.RootElementAlias=["m","M","m'","M'"],f.VersionSize=4,f.DepthSize=1,f.ParentFingerPrintSize=4,f.ChildIndexSize=4,f.ChainCodeSize=32,f.PrivateKeySize=32,f.CheckSumSize=4,f.DataLength=78,f.SerializedByteSize=82,f.VersionStart=0,f.VersionEnd=f.VersionStart+f.VersionSize,f.DepthStart=f.VersionEnd,f.DepthEnd=f.DepthStart+f.DepthSize,f.ParentFingerPrintStart=f.DepthEnd,f.ParentFingerPrintEnd=f.ParentFingerPrintStart+f.ParentFingerPrintSize,f.ChildIndexStart=f.ParentFingerPrintEnd,f.ChildIndexEnd=f.ChildIndexStart+f.ChildIndexSize,f.ChainCodeStart=f.ChildIndexEnd,f.ChainCodeEnd=f.ChainCodeStart+f.ChainCodeSize,f.PrivateKeyStart=f.ChainCodeEnd+1,f.PrivateKeyEnd=f.PrivateKeyStart+f.PrivateKeySize,f.ChecksumStart=f.PrivateKeyEnd,f.ChecksumEnd=f.ChecksumStart+f.CheckSumSize,c(f.ChecksumEnd===f.SerializedByteSize),a.exports=f}).call(this,e("buffer").Buffer)},{"./crypto/bn":13,"./crypto/hash":15,"./crypto/point":16,"./crypto/random":17,"./encoding/base58":19,"./encoding/base58check":20,"./errors":24,"./hdkeycache":26,"./hdpublickey":28,"./networks":29,"./privatekey":31,"./util/buffer":50,"./util/js":51,"./util/preconditions":52,assert:97,buffer:99,lodash:78}],28:[function(e,a,t){(function(t){"use strict";function f(e){if(e instanceof f)return e;if(!(this instanceof f))return new f(e);if(e){if(c.isString(e)||w.isBuffer(e)){var a=f.getSerializedError(e);if(a){if(w.isBuffer(e)&&!f.getSerializedError(e.toString()))return this._buildFromSerialized(e.toString());if(a instanceof m.ArgumentIsPrivateExtended)return new o(e).hdPublicKey;throw a}return this._buildFromSerialized(e)}if(c.isObject(e))return e instanceof o?this._buildFromPrivate(e):this._buildFromObject(e);throw new m.UnrecognizedArgument(e)}throw new m.MustSupplyArgument}var c=e("lodash"),r=e("./util/preconditions"),d=e("./crypto/bn"),n=e("./encoding/base58"),i=e("./encoding/base58check"),b=e("./crypto/hash"),o=e("./hdprivatekey"),s=e("./hdkeycache"),u=e("./networks"),h=e("./crypto/point"),l=e("./publickey"),p=e("./errors"),g=p,m=p.HDPublicKey,v=e("assert"),y=e("./util/js"),w=e("./util/buffer");f.isValidPath=function(e){if(c.isString(e)){var a=o._getDerivationIndexes(e);return null!==a&&c.all(a,f.isValidPath)}return c.isNumber(e)?e>=0&&e=f.Hardened||a)throw new m.InvalidIndexCantDeriveHardened;if(0>e)throw new m.InvalidPath(e);var t=s.get(this.xpubkey,e,!1);if(t)return t;var c=w.integerAsBuffer(e),r=w.concat([this.publicKey.toBuffer(),c]),n=b.sha512hmac(r,this._buffers.chainCode),i=d.fromBuffer(n.slice(0,32),{size:32}),o=n.slice(32,64),u=l.fromPoint(h.getG().mul(i).add(this.publicKey.point)),p=new f({network:this.network,depth:this.depth+1,parentFingerPrint:this.fingerPrint,childIndex:e,chainCode:o,publicKey:u});return s.set(this.xpubkey,e,!1,p),p},f.prototype._deriveFromString=function(e){if(c.contains(e,"'"))throw new m.InvalidIndexCantDeriveHardened;if(!f.isValidPath(e))throw new m.InvalidPath(e);var a=o._getDerivationIndexes(e),t=a.reduce(function(e,a){return e._deriveWithNumber(a)},this);return t},f.isValidSerialized=function(e,a){return c.isNull(f.getSerializedError(e,a))},f.getSerializedError=function(e,a){if(!c.isString(e)&&!w.isBuffer(e))return new m.UnrecognizedArgument("expected buffer or string");if(!n.validCharacters(e))return new g.InvalidB58Char("(unknown)",e);try{e=i.decode(e)}catch(t){return new g.InvalidB58Checksum(e)}if(e.length!==f.DataSize)return new m.InvalidLength(e);if(!c.isUndefined(a)){var r=f._validateNetwork(e,a);if(r)return r}var d=w.integerFromBuffer(e.slice(0,4));return d===u.livenet.xprivkey||d===u.testnet.xprivkey?new m.ArgumentIsPrivateExtended:null},f._validateNetwork=function(e,a){var t=u.get(a);if(!t)return new g.InvalidNetworkArgument(a);var c=e.slice(f.VersionStart,f.VersionEnd);return w.integerFromBuffer(c)!==t.xpubkey?new g.InvalidNetwork(c):null},f.prototype._buildFromPrivate=function(e){var a=c.clone(e._buffers),t=h.getG().mul(d.fromBuffer(a.privateKey));return a.publicKey=h.pointToCompressed(t),a.version=w.integerAsBuffer(u.get(w.integerFromBuffer(a.version)).xpubkey),a.privateKey=void 0,a.checksum=void 0,a.xprivkey=void 0,this._buildFromBuffers(a)},f.prototype._buildFromObject=function(e){var a={version:e.network?w.integerAsBuffer(u.get(e.network).xpubkey):e.version,depth:c.isNumber(e.depth)?w.integerAsSingleByteBuffer(e.depth):e.depth,parentFingerPrint:c.isNumber(e.parentFingerPrint)?w.integerAsBuffer(e.parentFingerPrint):e.parentFingerPrint,childIndex:c.isNumber(e.childIndex)?w.integerAsBuffer(e.childIndex):e.childIndex,chainCode:c.isString(e.chainCode)?w.hexToBuffer(e.chainCode):e.chainCode,publicKey:c.isString(e.publicKey)?w.hexToBuffer(e.publicKey):w.isBuffer(e.publicKey)?e.publicKey:e.publicKey.toBuffer(),checksum:c.isNumber(e.checksum)?w.integerAsBuffer(e.checksum):e.checksum};return this._buildFromBuffers(a)},f.prototype._buildFromSerialized=function(e){var a=i.decode(e),t={version:a.slice(f.VersionStart,f.VersionEnd),depth:a.slice(f.DepthStart,f.DepthEnd),parentFingerPrint:a.slice(f.ParentFingerPrintStart,f.ParentFingerPrintEnd),childIndex:a.slice(f.ChildIndexStart,f.ChildIndexEnd),chainCode:a.slice(f.ChainCodeStart,f.ChainCodeEnd),publicKey:a.slice(f.PublicKeyStart,f.PublicKeyEnd),checksum:a.slice(f.ChecksumStart,f.ChecksumEnd),xpubkey:e};return this._buildFromBuffers(t)},f.prototype._buildFromBuffers=function(e){f._validateBufferArguments(e),y.defineImmutable(this,{_buffers:e});var a=[e.version,e.depth,e.parentFingerPrint,e.childIndex,e.chainCode,e.publicKey],c=w.concat(a),r=i.checksum(c);if(e.checksum&&e.checksum.length){if(e.checksum.toString("hex")!==r.toString("hex"))throw new g.InvalidB58Checksum(c,r)}else e.checksum=r;var d,n=u.get(w.integerFromBuffer(e.version));d=i.encode(w.concat(a)),e.xpubkey=new t(d);var o=new l(e.publicKey,{network:n}),s=f.ParentFingerPrintSize,h=b.sha256ripemd160(o.toBuffer()).slice(0,s);return y.defineImmutable(this,{xpubkey:d,network:n,depth:w.integerFromSingleByteBuffer(e.depth),publicKey:o,fingerPrint:h}),this},f._validateBufferArguments=function(e){var a=function(a,t){var f=e[a];v(w.isBuffer(f),a+" argument is not a buffer, it's "+typeof f),v(f.length===t,a+" has not the expected size: found "+f.length+", expected "+t)};a("version",f.VersionSize),a("depth",f.DepthSize),a("parentFingerPrint",f.ParentFingerPrintSize),a("childIndex",f.ChildIndexSize),a("chainCode",f.ChainCodeSize),a("publicKey",f.PublicKeySize),e.checksum&&e.checksum.length&&a("checksum",f.CheckSumSize)},f.fromString=function(e){return r.checkArgument(c.isString(e),"No valid string was provided"),new f(e)},f.fromObject=function(e){return r.checkArgument(c.isObject(e),"No valid argument was provided"),new f(e)},f.prototype.toString=function(){return this.xpubkey},f.prototype.inspect=function(){return""},f.prototype.toObject=f.prototype.toJSON=function(){return{network:u.get(w.integerFromBuffer(this._buffers.version)).name,depth:w.integerFromSingleByteBuffer(this._buffers.depth),fingerPrint:w.integerFromBuffer(this.fingerPrint),parentFingerPrint:w.integerFromBuffer(this._buffers.parentFingerPrint),childIndex:w.integerFromBuffer(this._buffers.childIndex),chainCode:w.bufferToHex(this._buffers.chainCode),publicKey:this.publicKey.toString(),checksum:w.integerFromBuffer(this._buffers.checksum),xpubkey:this.xpubkey}},f.fromBuffer=function(e){return new f(e)},f.prototype.toBuffer=function(){return w.copy(this._buffers.xpubkey)},f.Hardened=2147483648,f.RootElementAlias=["m","M"],f.VersionSize=4,f.DepthSize=1,f.ParentFingerPrintSize=4,f.ChildIndexSize=4,f.ChainCodeSize=32,f.PublicKeySize=33,f.CheckSumSize=4,f.DataSize=78,f.SerializedByteSize=82,f.VersionStart=0,f.VersionEnd=f.VersionStart+f.VersionSize,f.DepthStart=f.VersionEnd,f.DepthEnd=f.DepthStart+f.DepthSize,f.ParentFingerPrintStart=f.DepthEnd,f.ParentFingerPrintEnd=f.ParentFingerPrintStart+f.ParentFingerPrintSize,f.ChildIndexStart=f.ParentFingerPrintEnd,f.ChildIndexEnd=f.ChildIndexStart+f.ChildIndexSize,f.ChainCodeStart=f.ChildIndexEnd,f.ChainCodeEnd=f.ChainCodeStart+f.ChainCodeSize,f.PublicKeyStart=f.ChainCodeEnd,f.PublicKeyEnd=f.PublicKeyStart+f.PublicKeySize,f.ChecksumStart=f.PublicKeyEnd,f.ChecksumEnd=f.ChecksumStart+f.CheckSumSize,v(f.PublicKeyEnd===f.DataSize),v(f.ChecksumEnd===f.SerializedByteSize),a.exports=f}).call(this,e("buffer").Buffer)},{"./crypto/bn":13,"./crypto/hash":15,"./crypto/point":16,"./encoding/base58":19,"./encoding/base58check":20,"./errors":24,"./hdkeycache":26,"./hdprivatekey":27,"./networks":29,"./publickey":32,"./util/buffer":50,"./util/js":51,"./util/preconditions":52,assert:97,buffer:99,lodash:78}],29:[function(e,a,t){"use strict";function f(){}function c(e,a){if(~u.indexOf(e))return e;{if(!a)return h[e];b.isArray(a)||(a=[a]);var t=function(a){return u[f][a]===e};for(var f in u)if(b.any(a,t))return u[f]}}function r(e){var a=new f;return s.defineImmutable(a,{name:e.name,alias:e.alias,pubkeyhash:e.pubkeyhash,privatekey:e.privatekey,scripthash:e.scripthash,xpubkey:e.xpubkey,xprivkey:e.xprivkey}),e.networkMagic&&s.defineImmutable(a,{networkMagic:o.integerAsBuffer(e.networkMagic)}),e.port&&s.defineImmutable(a,{port:e.port}),e.dnsSeeds&&s.defineImmutable(a,{dnsSeeds:e.dnsSeeds}),b.each(a,function(e){b.isUndefined(e)||b.isObject(e)||(h[e]=a)}),u.push(a),a}function d(e){for(var a=0;a=0&&16>=e,"Invalid Argument: n must be between 0 and 16"),0===e?f("OP_0"):new f(f.map.OP_1+e-1)},f.map={OP_FALSE:0,OP_0:0,OP_PUSHDATA1:76,OP_PUSHDATA2:77,OP_PUSHDATA4:78,OP_1NEGATE:79,OP_RESERVED:80,OP_TRUE:81,OP_1:81,OP_2:82,OP_3:83,OP_4:84,OP_5:85,OP_6:86,OP_7:87,OP_8:88,OP_9:89,OP_10:90,OP_11:91,OP_12:92,OP_13:93,OP_14:94,OP_15:95,OP_16:96,OP_NOP:97,OP_VER:98,OP_IF:99,OP_NOTIF:100,OP_VERIF:101,OP_VERNOTIF:102,OP_ELSE:103,OP_ENDIF:104,OP_VERIFY:105,OP_RETURN:106,OP_TOALTSTACK:107,OP_FROMALTSTACK:108,OP_2DROP:109,OP_2DUP:110,OP_3DUP:111,OP_2OVER:112,OP_2ROT:113,OP_2SWAP:114,OP_IFDUP:115,OP_DEPTH:116,OP_DROP:117,OP_DUP:118,OP_NIP:119,OP_OVER:120,OP_PICK:121,OP_ROLL:122,OP_ROT:123,OP_SWAP:124,OP_TUCK:125,OP_CAT:126,OP_SUBSTR:127,OP_LEFT:128,OP_RIGHT:129,OP_SIZE:130,OP_INVERT:131,OP_AND:132,OP_OR:133,OP_XOR:134,OP_EQUAL:135,OP_EQUALVERIFY:136,OP_RESERVED1:137,OP_RESERVED2:138,OP_1ADD:139,OP_1SUB:140,OP_2MUL:141,OP_2DIV:142,OP_NEGATE:143,OP_ABS:144,OP_NOT:145,OP_0NOTEQUAL:146,OP_ADD:147,OP_SUB:148,OP_MUL:149,OP_DIV:150,OP_MOD:151,OP_LSHIFT:152,OP_RSHIFT:153,OP_BOOLAND:154,OP_BOOLOR:155,OP_NUMEQUAL:156,OP_NUMEQUALVERIFY:157,OP_NUMNOTEQUAL:158,OP_LESSTHAN:159,OP_GREATERTHAN:160,OP_LESSTHANOREQUAL:161,OP_GREATERTHANOREQUAL:162,OP_MIN:163,OP_MAX:164,OP_WITHIN:165,OP_RIPEMD160:166,OP_SHA1:167,OP_SHA256:168,OP_HASH160:169,OP_HASH256:170,OP_CODESEPARATOR:171,OP_CHECKSIG:172,OP_CHECKSIGVERIFY:173,OP_CHECKMULTISIG:174,OP_CHECKMULTISIGVERIFY:175,OP_CHECKLOCKTIMEVERIFY:177,OP_NOP1:176,OP_NOP2:177,OP_NOP3:178,OP_NOP4:179,OP_NOP5:180,OP_NOP6:181,OP_NOP7:182,OP_NOP8:183,OP_NOP9:184,OP_NOP10:185,OP_PUBKEYHASH:253,OP_PUBKEY:254,OP_INVALIDOPCODE:255},f.reverseMap=[];for(var i in f.map)f.reverseMap[f.map[i]]=i;c.extend(f,f.map),f.isSmallIntOp=function(e){return e instanceof f&&(e=e.toNumber()),e===f.map.OP_0||e>=f.map.OP_1&&e<=f.map.OP_16},f.prototype.inspect=function(){return""},a.exports=f}).call(this,e("buffer").Buffer)},{"./util/buffer":50,"./util/js":51,"./util/preconditions":52,buffer:99,lodash:78}],31:[function(e,a,t){(function(t){"use strict";function f(e,a){if(!(this instanceof f))return new f(e,a);if(e instanceof f)return e;var t=this._classifyArguments(e,a);if(!t.bn||0===t.bn.cmp(new n(0)))throw new TypeError("Number can not be equal to zero, undefined, null or false");if(!t.bn.lt(o.getN()))throw new TypeError("Number must be less than N");if("undefined"==typeof t.network)throw new TypeError('Must specify the network ("livenet" or "testnet")');return i.defineImmutable(this,{bn:t.bn,compressed:t.compressed,network:t.network}),Object.defineProperty(this,"publicKey",{configurable:!1,enumerable:!0,get:this.toPublicKey.bind(this)}),this}var c=e("lodash"),r=e("./address"),d=e("./encoding/base58check"),n=e("./crypto/bn"),i=e("./util/js"),b=e("./networks"),o=e("./crypto/point"),s=e("./publickey"),u=e("./crypto/random"),h=e("./util/preconditions");f.prototype._classifyArguments=function(e,a){var r={compressed:!0,network:a?b.get(a):b.defaultNetwork};if(c.isUndefined(e)||c.isNull(e))r.bn=f._getRandomBN();else if(e instanceof n)r.bn=e;else if(e instanceof t||e instanceof Uint8Array)r=f._transformBuffer(e,a);else if(e.bn&&e.network)r=f._transformObject(e);else if(!a&&b.get(e))r.bn=f._getRandomBN(),r.network=b.get(e);else{if("string"!=typeof e)throw new TypeError("First argument is an unrecognized data type.");i.isHexa(e)?r.bn=new n(new t(e,"hex")):r=f._transformWIF(e,a)}return r},f._getRandomBN=function(){var e,a;do{var t=u.getRandomBuffer(32);a=n.fromBuffer(t),e=a.lt(o.getN())}while(!e);return a},f._transformBuffer=function(e,a){var t={};if(32===e.length)return f._transformBNBuffer(e,a);if(t.network=b.get(e[0],"privatekey"),!t.network)throw new Error("Invalid network");if(a&&t.network!==b.get(a))throw new TypeError("Private key network mismatch");if(34===e.length&&1===e[33])t.compressed=!0;else{if(33!==e.length)throw new Error("Length of buffer must be 33 (uncompressed) or 34 (compressed)");t.compressed=!1}return t.bn=n.fromBuffer(e.slice(1,33)),t},f._transformBNBuffer=function(e,a){var t={};return t.network=b.get(a)||b.defaultNetwork,t.bn=n.fromBuffer(e),t.compressed=!1,t},f._transformWIF=function(e,a){return f._transformBuffer(d.decode(e),a)},f.fromBuffer=function(e,a){return new f(e,a)},f._transformObject=function(e){var a=new n(e.bn,"hex"),t=b.get(e.network);return{bn:a,network:t,compressed:e.compressed}},f.fromString=f.fromWIF=function(e){return h.checkArgument(c.isString(e),"First argument is expected to be a string."),new f(e)},f.fromObject=function(e){return h.checkArgument(c.isObject(e),"First argument is expected to be an object."),new f(e)},f.fromRandom=function(e){var a=f._getRandomBN();return new f(a,e)},f.getValidationError=function(e,a){var t;try{new f(e,a)}catch(c){t=c}return t},f.isValid=function(e,a){return e?!f.getValidationError(e,a):!1},f.prototype.toString=function(){return this.toBuffer().toString("hex")},f.prototype.toWIF=function(){var e,a=this.network,f=this.compressed;return e=f?t.concat([new t([a.privatekey]),this.bn.toBuffer({size:32}),new t([1])]):t.concat([new t([a.privatekey]),this.bn.toBuffer({size:32})]),d.encode(e)},f.prototype.toBigNumber=function(){return this.bn},f.prototype.toBuffer=function(){return this.bn.toBuffer()},f.prototype.toPublicKey=function(){return this._pubkey||(this._pubkey=s.fromPrivateKey(this)),this._pubkey},f.prototype.toAddress=function(e){var a=this.toPublicKey();return r.fromPublicKey(a,e||this.network)},f.prototype.toObject=f.prototype.toJSON=function(){return{bn:this.bn.toString("hex"),compressed:this.compressed,network:this.network.toString()}},f.prototype.inspect=function(){var e=this.compressed?"":", uncompressed";return""},a.exports=f}).call(this,e("buffer").Buffer)},{"./address":8,"./crypto/bn":13,"./crypto/point":16,"./crypto/random":17,"./encoding/base58check":20,"./networks":29,"./publickey":32,"./util/js":51,"./util/preconditions":52,buffer:99,lodash:78}],32:[function(e,a,t){(function(t){"use strict";function f(e,a){if(!(this instanceof f))return new f(e,a);if(o.checkArgument(e,"First argument is required, please include public key data."),e instanceof f)return e;a=a||{};var t=this._classifyArgs(e,a);return t.point.validate(),n.defineImmutable(this,{point:t.point,compressed:t.compressed,network:t.network||i.defaultNetwork}),this}var c=e("./crypto/bn"),r=e("./crypto/point"),d=e("./crypto/hash"),n=e("./util/js"),i=e("./networks"),b=e("lodash"),o=e("./util/preconditions");f.prototype._classifyArgs=function(e,a){var c={compressed:b.isUndefined(a.compressed)||a.compressed};if(e instanceof r)c.point=e;else if(e.x&&e.y)c=f._transformObject(e);else if("string"==typeof e)c=f._transformDER(new t(e,"hex"));else if(f._isBuffer(e))c=f._transformDER(e);else{if(!f._isPrivateKey(e))throw new TypeError("First argument is an unrecognized data format.");c=f._transformPrivateKey(e)}return c.network||(c.network=b.isUndefined(a.network)?void 0:i.get(a.network)),c},f._isPrivateKey=function(a){var t=e("./privatekey");return a instanceof t},f._isBuffer=function(e){return e instanceof t||e instanceof Uint8Array},f._transformPrivateKey=function(e){o.checkArgument(f._isPrivateKey(e),"Must be an instance of PrivateKey");var a={};return a.point=r.getG().mul(e.bn),a.compressed=e.compressed,a.network=e.network,a},f._transformDER=function(e,a){o.checkArgument(f._isBuffer(e),"Must be a hex buffer of DER encoded public key");var t={};a=b.isUndefined(a)?!0:a;var d,n,i,s;if(4!==e[0]&&(a||6!==e[0]&&7!==e[0]))if(3===e[0])i=e.slice(1),d=new c(i),t=f._transformX(!0,d),t.compressed=!0;else{if(2!==e[0])throw new TypeError("Invalid DER format public key");i=e.slice(1),d=new c(i),t=f._transformX(!1,d),t.compressed=!0}else{if(i=e.slice(1,33),s=e.slice(33,65),32!==i.length||32!==s.length||65!==e.length)throw new TypeError("Length of x and y must be 32 bytes");d=new c(i),n=new c(s),t.point=new r(d,n),t.compressed=!1}return t},f._transformX=function(e,a){o.checkArgument("boolean"==typeof e,"Must specify whether y is odd or not (true or false)");var t={};return t.point=r.fromX(e,a),t},f._transformObject=function(e){var a=new c(e.x,"hex"),t=new c(e.y,"hex"),d=new r(a,t);return new f(d,{compressed:e.compressed})},f.fromPrivateKey=function(e){o.checkArgument(f._isPrivateKey(e),"Must be an instance of PrivateKey");var a=f._transformPrivateKey(e);return new f(a.point,{compressed:a.compressed,network:a.network})},f.fromDER=f.fromBuffer=function(e,a){o.checkArgument(f._isBuffer(e),"Must be a hex buffer of DER encoded public key");var t=f._transformDER(e,a);return new f(t.point,{compressed:t.compressed})},f.fromPoint=function(e,a){return o.checkArgument(e instanceof r,"First argument must be an instance of Point."),new f(e,{compressed:a})},f.fromString=function(e,a){var c=new t(e,a||"hex"),r=f._transformDER(c);return new f(r.point,{compressed:r.compressed})},f.fromX=function(e,a){var t=f._transformX(e,a);return new f(t.point,{compressed:t.compressed})},f.getValidationError=function(e){var a;try{new f(e)}catch(t){a=t}return a},f.isValid=function(e){return!f.getValidationError(e)},f.prototype.toObject=f.prototype.toJSON=function(){return{x:this.point.getX().toString("hex",2),y:this.point.getY().toString("hex",2),compressed:this.compressed}},f.prototype.toBuffer=f.prototype.toDER=function(){var e,a=this.point.getX(),f=this.point.getY(),c=a.toBuffer({size:32}),r=f.toBuffer({size:32});if(this.compressed){var d=r[r.length-1]%2;return e=new t(d?[3]:[2]),t.concat([e,c])}return e=new t([4]),t.concat([e,c,r])},f.prototype._getID=function(){return d.sha256ripemd160(this.toBuffer())},f.prototype.toAddress=function(a){var t=e("./address");return t.fromPublicKey(this,a||this.network)},f.prototype.toString=function(){return this.toDER().toString("hex")},f.prototype.inspect=function(){return""},a.exports=f}).call(this,e("buffer").Buffer)},{"./address":8,"./crypto/bn":13,"./crypto/hash":15,"./crypto/point":16,"./networks":29,"./privatekey":31,"./util/js":51,"./util/preconditions":52,buffer:99,lodash:78}],33:[function(e,a,t){a.exports=e("./script"),a.exports.Interpreter=e("./interpreter")},{"./interpreter":34,"./script":35}],34:[function(e,a,t){(function(t){"use strict";var f=e("lodash"),c=e("./script"),r=e("../opcode"),d=e("../crypto/bn"),n=e("../crypto/hash"),i=e("../crypto/signature"),b=e("../publickey"),o=function s(e){return this instanceof s?void(e?(this.initialize(),this.set(e)):this.initialize()):new s(e)};o.prototype.verify=function(a,t,r,d,n){var i=e("../transaction");f.isUndefined(r)&&(r=new i),f.isUndefined(d)&&(d=0),f.isUndefined(n)&&(n=0),this.set({script:a,tx:r,nin:d,flags:n});var b;if(0!==(n&o.SCRIPT_VERIFY_SIGPUSHONLY)&&!a.isPushOnly())return this.errstr="SCRIPT_ERR_SIG_PUSHONLY",!1;if(!this.evaluate())return!1;n&o.SCRIPT_VERIFY_P2SH&&(b=this.stack.slice());var s=this.stack;if(this.initialize(),this.set({script:t,stack:s,tx:r,nin:d,flags:n}),!this.evaluate())return!1;if(0===this.stack.length)return this.errstr="SCRIPT_ERR_EVAL_FALSE_NO_RESULT",!1;var u=this.stack[this.stack.length-1];if(!o.castToBool(u))return this.errstr="SCRIPT_ERR_EVAL_FALSE_IN_STACK",!1;if(n&o.SCRIPT_VERIFY_P2SH&&t.isScriptHashOut()){if(!a.isPushOnly())return this.errstr="SCRIPT_ERR_SIG_PUSHONLY",!1;if(0===b.length)throw new Error("internal error - stack copy empty");var h=b[b.length-1],l=c.fromBuffer(h);return b.pop(),this.initialize(),this.set({script:l,stack:b,tx:r,nin:d,flags:n}),this.evaluate()?0===b.length?(this.errstr="SCRIPT_ERR_EVAL_FALSE_NO_P2SH_STACK",!1):o.castToBool(b[b.length-1])?!0:(this.errstr="SCRIPT_ERR_EVAL_FALSE_IN_P2SH_STACK",!1):!1}return!0},a.exports=o,o.prototype.initialize=function(e){this.stack=[],this.altstack=[],this.pc=0,this.pbegincodehash=0,this.nOpCount=0,this.vfExec=[],this.errstr="",this.flags=0},o.prototype.set=function(e){this.script=e.script||this.script,this.tx=e.tx||this.tx,this.nin="undefined"!=typeof e.nin?e.nin:this.nin,this.stack=e.stack||this.stack,this.altstack=e.altack||this.altstack,this.pc="undefined"!=typeof e.pc?e.pc:this.pc,this.pbegincodehash="undefined"!=typeof e.pbegincodehash?e.pbegincodehash:this.pbegincodehash,this.nOpCount="undefined"!=typeof e.nOpCount?e.nOpCount:this.nOpCount,this.vfExec=e.vfExec||this.vfExec,this.errstr=e.errstr||this.errstr,this.flags="undefined"!=typeof e.flags?e.flags:this.flags},o["true"]=new t([1]),o["false"]=new t([]),o.MAX_SCRIPT_ELEMENT_SIZE=520,o.LOCKTIME_THRESHOLD=5e8,o.LOCKTIME_THRESHOLD_BN=new d(o.LOCKTIME_THRESHOLD),o.SCRIPT_VERIFY_NONE=0, -o.SCRIPT_VERIFY_P2SH=1,o.SCRIPT_VERIFY_STRICTENC=2,o.SCRIPT_VERIFY_DERSIG=4,o.SCRIPT_VERIFY_LOW_S=8,o.SCRIPT_VERIFY_NULLDUMMY=16,o.SCRIPT_VERIFY_SIGPUSHONLY=32,o.SCRIPT_VERIFY_MINIMALDATA=64,o.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS=128,o.SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY=512,o.castToBool=function(e){for(var a=0;a1e4)return this.errstr="SCRIPT_ERR_SCRIPT_SIZE",!1;try{for(;this.pc1e3)return this.errstr="SCRIPT_ERR_STACK_SIZE",!1}catch(a){return this.errstr="SCRIPT_ERR_UNKNOWN_ERROR: "+a,!1}return this.vfExec.length>0?(this.errstr="SCRIPT_ERR_UNBALANCED_CONDITIONAL",!1):!0},o.prototype.checkLockTime=function(e){return this.tx.nLockTime=o.LOCKTIME_THRESHOLD&&e.gte(o.LOCKTIME_THRESHOLD_BN)?e.gt(new d(this.tx.nLockTime))?!1:this.tx.inputs[this.nin].isFinal()?!0:!1:!1},o.prototype.step=function(){var e,a,t,s,u,h,l,p,g,m,v,y,w,_,S,A,I,E=0!==(this.flags&o.SCRIPT_VERIFY_MINIMALDATA),k=-1===this.vfExec.indexOf(!1),x=this.script.chunks[this.pc];this.pc++;var P=x.opcodenum;if(f.isUndefined(P))return this.errstr="SCRIPT_ERR_UNDEFINED_OPCODE",!1;if(x.buf&&x.buf.length>o.MAX_SCRIPT_ELEMENT_SIZE)return this.errstr="SCRIPT_ERR_PUSH_SIZE",!1;if(P>r.OP_16&&++this.nOpCount>201)return this.errstr="SCRIPT_ERR_OP_COUNT",!1;if(P===r.OP_CAT||P===r.OP_SUBSTR||P===r.OP_LEFT||P===r.OP_RIGHT||P===r.OP_INVERT||P===r.OP_AND||P===r.OP_OR||P===r.OP_XOR||P===r.OP_2MUL||P===r.OP_2DIV||P===r.OP_MUL||P===r.OP_DIV||P===r.OP_MOD||P===r.OP_LSHIFT||P===r.OP_RSHIFT)return this.errstr="SCRIPT_ERR_DISABLED_OPCODE",!1;if(k&&P>=0&&P<=r.OP_PUSHDATA4){if(E&&!this.script.checkMinimalPush(this.pc-1))return this.errstr="SCRIPT_ERR_MINIMALDATA",!1;if(x.buf){if(x.len!==x.buf.length)throw new Error("Length of push value not equal to length of data");this.stack.push(x.buf)}else this.stack.push(o["false"])}else if(k||r.OP_IF<=P&&P<=r.OP_ENDIF)switch(P){case r.OP_1NEGATE:case r.OP_1:case r.OP_2:case r.OP_3:case r.OP_4:case r.OP_5:case r.OP_6:case r.OP_7:case r.OP_8:case r.OP_9:case r.OP_10:case r.OP_11:case r.OP_12:case r.OP_13:case r.OP_14:case r.OP_15:case r.OP_16:u=P-(r.OP_1-1),e=new d(u).toScriptNumBuffer(),this.stack.push(e);break;case r.OP_NOP:break;case r.OP_NOP2:case r.OP_CHECKLOCKTIMEVERIFY:if(!(this.flags&o.SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY)){if(this.flags&o.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS)return this.errstr="SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS",!1;break}if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;var B=d.fromScriptNumBuffer(this.stack[this.stack.length-1],E,5);if(B.lt(new d(0)))return this.errstr="SCRIPT_ERR_NEGATIVE_LOCKTIME",!1;if(!this.checkLockTime(B))return this.errstr="SCRIPT_ERR_UNSATISFIED_LOCKTIME",!1;break;case r.OP_NOP1:case r.OP_NOP3:case r.OP_NOP4:case r.OP_NOP5:case r.OP_NOP6:case r.OP_NOP7:case r.OP_NOP8:case r.OP_NOP9:case r.OP_NOP10:if(this.flags&o.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS)return this.errstr="SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS",!1;break;case r.OP_IF:case r.OP_NOTIF:if(A=!1,k){if(this.stack.length<1)return this.errstr="SCRIPT_ERR_UNBALANCED_CONDITIONAL",!1;e=this.stack.pop(),A=o.castToBool(e),P===r.OP_NOTIF&&(A=!A)}this.vfExec.push(A);break;case r.OP_ELSE:if(0===this.vfExec.length)return this.errstr="SCRIPT_ERR_UNBALANCED_CONDITIONAL",!1;this.vfExec[this.vfExec.length-1]=!this.vfExec[this.vfExec.length-1];break;case r.OP_ENDIF:if(0===this.vfExec.length)return this.errstr="SCRIPT_ERR_UNBALANCED_CONDITIONAL",!1;this.vfExec.pop();break;case r.OP_VERIFY:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;if(e=this.stack[this.stack.length-1],A=o.castToBool(e),!A)return this.errstr="SCRIPT_ERR_VERIFY",!1;this.stack.pop();break;case r.OP_RETURN:return this.errstr="SCRIPT_ERR_OP_RETURN",!1;case r.OP_TOALTSTACK:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.altstack.push(this.stack.pop());break;case r.OP_FROMALTSTACK:if(this.altstack.length<1)return this.errstr="SCRIPT_ERR_INVALID_ALTSTACK_OPERATION",!1;this.stack.push(this.altstack.pop());break;case r.OP_2DROP:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.pop(),this.stack.pop();break;case r.OP_2DUP:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;a=this.stack[this.stack.length-2],t=this.stack[this.stack.length-1],this.stack.push(a),this.stack.push(t);break;case r.OP_3DUP:if(this.stack.length<3)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;a=this.stack[this.stack.length-3],t=this.stack[this.stack.length-2];var M=this.stack[this.stack.length-1];this.stack.push(a),this.stack.push(t),this.stack.push(M);break;case r.OP_2OVER:if(this.stack.length<4)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;a=this.stack[this.stack.length-4],t=this.stack[this.stack.length-3],this.stack.push(a),this.stack.push(t);break;case r.OP_2ROT:if(this.stack.length<6)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;s=this.stack.splice(this.stack.length-6,2),this.stack.push(s[0]),this.stack.push(s[1]);break;case r.OP_2SWAP:if(this.stack.length<4)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;s=this.stack.splice(this.stack.length-4,2),this.stack.push(s[0]),this.stack.push(s[1]);break;case r.OP_IFDUP:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;e=this.stack[this.stack.length-1],A=o.castToBool(e),A&&this.stack.push(e);break;case r.OP_DEPTH:e=new d(this.stack.length).toScriptNumBuffer(),this.stack.push(e);break;case r.OP_DROP:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.pop();break;case r.OP_DUP:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.push(this.stack[this.stack.length-1]);break;case r.OP_NIP:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.splice(this.stack.length-2,1);break;case r.OP_OVER:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.push(this.stack[this.stack.length-2]);break;case r.OP_PICK:case r.OP_ROLL:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;if(e=this.stack[this.stack.length-1],p=d.fromScriptNumBuffer(e,E),u=p.toNumber(),this.stack.pop(),0>u||u>=this.stack.length)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;e=this.stack[this.stack.length-u-1],P===r.OP_ROLL&&this.stack.splice(this.stack.length-u-1,1),this.stack.push(e);break;case r.OP_ROT:if(this.stack.length<3)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;h=this.stack[this.stack.length-3],l=this.stack[this.stack.length-2];var O=this.stack[this.stack.length-1];this.stack[this.stack.length-3]=l,this.stack[this.stack.length-2]=O,this.stack[this.stack.length-1]=h;break;case r.OP_SWAP:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;h=this.stack[this.stack.length-2],l=this.stack[this.stack.length-1],this.stack[this.stack.length-2]=l,this.stack[this.stack.length-1]=h;break;case r.OP_TUCK:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.splice(this.stack.length-2,0,this.stack[this.stack.length-1]);break;case r.OP_SIZE:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;p=new d(this.stack[this.stack.length-1].length),this.stack.push(p.toScriptNumBuffer());break;case r.OP_EQUAL:case r.OP_EQUALVERIFY:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;a=this.stack[this.stack.length-2],t=this.stack[this.stack.length-1];var R=a.toString("hex")===t.toString("hex");if(this.stack.pop(),this.stack.pop(),this.stack.push(R?o["true"]:o["false"]),P===r.OP_EQUALVERIFY){if(!R)return this.errstr="SCRIPT_ERR_EQUALVERIFY",!1;this.stack.pop()}break;case r.OP_1ADD:case r.OP_1SUB:case r.OP_NEGATE:case r.OP_ABS:case r.OP_NOT:case r.OP_0NOTEQUAL:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;switch(e=this.stack[this.stack.length-1],p=d.fromScriptNumBuffer(e,E),P){case r.OP_1ADD:p=p.add(d.One);break;case r.OP_1SUB:p=p.sub(d.One);break;case r.OP_NEGATE:p=p.neg();break;case r.OP_ABS:p.cmp(d.Zero)<0&&(p=p.neg());break;case r.OP_NOT:p=new d((0===p.cmp(d.Zero))+0);break;case r.OP_0NOTEQUAL:p=new d((0!==p.cmp(d.Zero))+0)}this.stack.pop(),this.stack.push(p.toScriptNumBuffer());break;case r.OP_ADD:case r.OP_SUB:case r.OP_BOOLAND:case r.OP_BOOLOR:case r.OP_NUMEQUAL:case r.OP_NUMEQUALVERIFY:case r.OP_NUMNOTEQUAL:case r.OP_LESSTHAN:case r.OP_GREATERTHAN:case r.OP_LESSTHANOREQUAL:case r.OP_GREATERTHANOREQUAL:case r.OP_MIN:case r.OP_MAX:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;switch(g=d.fromScriptNumBuffer(this.stack[this.stack.length-2],E),m=d.fromScriptNumBuffer(this.stack[this.stack.length-1],E),p=new d(0),P){case r.OP_ADD:p=g.add(m);break;case r.OP_SUB:p=g.sub(m);break;case r.OP_BOOLAND:p=new d((0!==g.cmp(d.Zero)&&0!==m.cmp(d.Zero))+0);break;case r.OP_BOOLOR:p=new d((0!==g.cmp(d.Zero)||0!==m.cmp(d.Zero))+0);break;case r.OP_NUMEQUAL:p=new d((0===g.cmp(m))+0);break;case r.OP_NUMEQUALVERIFY:p=new d((0===g.cmp(m))+0);break;case r.OP_NUMNOTEQUAL:p=new d((0!==g.cmp(m))+0);break;case r.OP_LESSTHAN:p=new d((g.cmp(m)<0)+0);break;case r.OP_GREATERTHAN:p=new d((g.cmp(m)>0)+0);break;case r.OP_LESSTHANOREQUAL:p=new d((g.cmp(m)<=0)+0);break;case r.OP_GREATERTHANOREQUAL:p=new d((g.cmp(m)>=0)+0);break;case r.OP_MIN:p=g.cmp(m)<0?g:m;break;case r.OP_MAX:p=g.cmp(m)>0?g:m}if(this.stack.pop(),this.stack.pop(),this.stack.push(p.toScriptNumBuffer()),P===r.OP_NUMEQUALVERIFY){if(!o.castToBool(this.stack[this.stack.length-1]))return this.errstr="SCRIPT_ERR_NUMEQUALVERIFY",!1;this.stack.pop()}break;case r.OP_WITHIN:if(this.stack.length<3)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;g=d.fromScriptNumBuffer(this.stack[this.stack.length-3],E),m=d.fromScriptNumBuffer(this.stack[this.stack.length-2],E);var T=d.fromScriptNumBuffer(this.stack[this.stack.length-1],E);A=m.cmp(g)<=0&&g.cmp(T)<0,this.stack.pop(),this.stack.pop(),this.stack.pop(),this.stack.push(A?o["true"]:o["false"]);break;case r.OP_RIPEMD160:case r.OP_SHA1:case r.OP_SHA256:case r.OP_HASH160:case r.OP_HASH256:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;e=this.stack[this.stack.length-1];var C;P===r.OP_RIPEMD160?C=n.ripemd160(e):P===r.OP_SHA1?C=n.sha1(e):P===r.OP_SHA256?C=n.sha256(e):P===r.OP_HASH160?C=n.sha256ripemd160(e):P===r.OP_HASH256&&(C=n.sha256sha256(e)),this.stack.pop(),this.stack.push(C);break;case r.OP_CODESEPARATOR:this.pbegincodehash=this.pc;break;case r.OP_CHECKSIG:case r.OP_CHECKSIGVERIFY:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;v=this.stack[this.stack.length-2],y=this.stack[this.stack.length-1],w=(new c).set({chunks:this.script.chunks.slice(this.pbegincodehash)});var N=(new c).add(v);if(w.findAndDelete(N),!this.checkSignatureEncoding(v)||!this.checkPubkeyEncoding(y))return!1;try{_=i.fromTxFormat(v),S=b.fromBuffer(y,!1),I=this.tx.verifySignature(_,S,this.nin,w)}catch(j){I=!1}if(this.stack.pop(),this.stack.pop(),this.stack.push(I?o["true"]:o["false"]),P===r.OP_CHECKSIGVERIFY){if(!I)return this.errstr="SCRIPT_ERR_CHECKSIGVERIFY",!1;this.stack.pop()}break;case r.OP_CHECKMULTISIG:case r.OP_CHECKMULTISIGVERIFY:var L=1;if(this.stack.lengthD||D>20)return this.errstr="SCRIPT_ERR_PUBKEY_COUNT",!1;if(this.nOpCount+=D,this.nOpCount>201)return this.errstr="SCRIPT_ERR_OP_COUNT",!1;var U=++L;if(L+=D,this.stack.lengthz||z>D)return this.errstr="SCRIPT_ERR_SIG_COUNT",!1;var K=++L;if(L+=z,this.stack.lengthH;H++)v=this.stack[this.stack.length-K-H],w.findAndDelete((new c).add(v));for(I=!0;I&&z>0;){if(v=this.stack[this.stack.length-K],y=this.stack[this.stack.length-U],!this.checkSignatureEncoding(v)||!this.checkPubkeyEncoding(y))return!1;var F;try{_=i.fromTxFormat(v),S=b.fromBuffer(y,!1),F=this.tx.verifySignature(_,S,this.nin,w)}catch(j){F=!1}F&&(K++,z--),U++,D--,z>D&&(I=!1)}for(;L-- >1;)this.stack.pop();if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;if(this.flags&o.SCRIPT_VERIFY_NULLDUMMY&&this.stack[this.stack.length-1].length)return this.errstr="SCRIPT_ERR_SIG_NULLDUMMY",!1;if(this.stack.pop(),this.stack.push(I?o["true"]:o["false"]),P===r.OP_CHECKMULTISIGVERIFY){if(!I)return this.errstr="SCRIPT_ERR_CHECKMULTISIGVERIFY",!1;this.stack.pop()}break;default:return this.errstr="SCRIPT_ERR_BAD_OPCODE",!1}return!0}}).call(this,e("buffer").Buffer)},{"../crypto/bn":13,"../crypto/hash":15,"../crypto/signature":18,"../opcode":30,"../publickey":32,"../transaction":36,"./script":35,buffer:99,lodash:78}],35:[function(e,a,t){(function(t){"use strict";var f=e("../address"),c=e("../encoding/bufferreader"),r=e("../encoding/bufferwriter"),d=e("../crypto/hash"),n=e("../opcode"),i=e("../publickey"),b=e("../crypto/signature"),o=e("../networks"),s=e("../util/preconditions"),u=e("lodash"),h=e("../errors"),l=e("buffer"),p=e("../util/buffer"),g=e("../util/js"),m=function v(e){return this instanceof v?(this.chunks=[],p.isBuffer(e)?v.fromBuffer(e):e instanceof f?v.fromAddress(e):e instanceof v?v.fromBuffer(e.toBuffer()):"string"==typeof e?v.fromString(e):void("undefined"!=typeof e&&this.set(e))):new v(e)};m.prototype.set=function(e){return this.chunks=e.chunks||this.chunks,this},m.fromBuffer=function(e){var a=new m;a.chunks=[];for(var t=new c(e);!t.finished();)try{var f,r,d=t.readUInt8();d>0&&d0&&i0&&(c=f?c+" "+e.buf.toString("hex"):c+" "+e.len+" 0x"+e.buf.toString("hex"));else if("undefined"!=typeof n.reverseMap[t])c=c+" "+n(t).toString();else{var r=t.toString(16);r.length%2!==0&&(r="0"+r),c=f?c+" "+r:c+" 0x"+r}return c},m.prototype.toASM=function(){for(var e="",a=0;a"},m.prototype.isPublicKeyHashOut=function(){return!(5!==this.chunks.length||this.chunks[0].opcodenum!==n.OP_DUP||this.chunks[1].opcodenum!==n.OP_HASH160||!this.chunks[2].buf||20!==this.chunks[2].buf.length||this.chunks[3].opcodenum!==n.OP_EQUALVERIFY||this.chunks[4].opcodenum!==n.OP_CHECKSIG)},m.prototype.isPublicKeyHashIn=function(){if(2===this.chunks.length){var e=this.chunks[0].buf,a=this.chunks[1].buf;if(e&&e.length&&48===e[0]&&a&&a.length){var t=a[0];if((4===t||6===t||7===t)&&65===a.length)return!0;if((3===t||2===t)&&33===a.length)return!0}}return!1},m.prototype.getPublicKey=function(){return s.checkState(this.isPublicKeyOut(),"Can't retreive PublicKey from a non-PK output"),this.chunks[0].buf},m.prototype.getPublicKeyHash=function(){return s.checkState(this.isPublicKeyHashOut(),"Can't retrieve PublicKeyHash from a non-PKH output"),this.chunks[2].buf},m.prototype.isPublicKeyOut=function(){if(2===this.chunks.length&&this.chunks[0].buf&&this.chunks[0].buf.length&&this.chunks[1].opcodenum===n.OP_CHECKSIG){var e=this.chunks[0].buf,a=e[0],t=!1;if(4!==a&&6!==a&&7!==a||65!==e.length?3!==a&&2!==a||33!==e.length||(t=!0):t=!0,t)return i.isValid(e)}return!1},m.prototype.isPublicKeyIn=function(){if(1===this.chunks.length){var e=this.chunks[0].buf;if(e&&e.length&&48===e[0])return!0}return!1},m.prototype.isScriptHashOut=function(){var e=this.toBuffer();return 23===e.length&&e[0]===n.OP_HASH160&&20===e[1]&&e[e.length-1]===n.OP_EQUAL},m.prototype.isScriptHashIn=function(){if(this.chunks.length<=1)return!1;var e=this.chunks[this.chunks.length-1],a=e.buf;if(!a)return!1;var t;try{t=m.fromBuffer(a)}catch(f){if(f instanceof h.Script.InvalidBuffer)return!1;throw f}var c=t.classify();return c!==m.types.UNKNOWN},m.prototype.isMultisigOut=function(){return this.chunks.length>3&&n.isSmallIntOp(this.chunks[0].opcodenum)&&this.chunks.slice(1,this.chunks.length-2).every(function(e){return e.buf&&p.isBuffer(e.buf)})&&n.isSmallIntOp(this.chunks[this.chunks.length-2].opcodenum)&&this.chunks[this.chunks.length-1].opcodenum===n.OP_CHECKMULTISIG},m.prototype.isMultisigIn=function(){return this.chunks.length>=2&&0===this.chunks[0].opcodenum&&this.chunks.slice(1,this.chunks.length).every(function(e){return e.buf&&p.isBuffer(e.buf)&&b.isTxDER(e.buf)})},m.prototype.isDataOut=function(){return this.chunks.length>=1&&this.chunks[0].opcodenum===n.OP_RETURN&&(1===this.chunks.length||2===this.chunks.length&&this.chunks[1].buf&&this.chunks[1].buf.length<=m.OP_RETURN_STANDARD_SIZE&&this.chunks[1].length===this.chunks.len)},m.prototype.getData=function(){if(this.isDataOut()||this.isScriptHashOut())return new t(u.isUndefined(this.chunks[1])?0:this.chunks[1].buf);if(this.isPublicKeyHashOut())return new t(this.chunks[2].buf);throw new Error("Unrecognized script type to get data from")},m.prototype.isPushOnly=function(){return u.every(this.chunks,function(e){return e.opcodenum<=n.OP_16})},m.types={},m.types.UNKNOWN="Unknown",m.types.PUBKEY_OUT="Pay to public key",m.types.PUBKEY_IN="Spend from public key",m.types.PUBKEYHASH_OUT="Pay to public key hash",m.types.PUBKEYHASH_IN="Spend from public key hash",m.types.SCRIPTHASH_OUT="Pay to script hash",m.types.SCRIPTHASH_IN="Spend from script hash",m.types.MULTISIG_OUT="Pay to multisig",m.types.MULTISIG_IN="Spend from multisig",m.types.DATA_OUT="Data push",m.OP_RETURN_STANDARD_SIZE=80,m.identifiers={},m.identifiers.PUBKEY_OUT=m.prototype.isPublicKeyOut,m.identifiers.PUBKEY_IN=m.prototype.isPublicKeyIn,m.identifiers.PUBKEYHASH_OUT=m.prototype.isPublicKeyHashOut,m.identifiers.PUBKEYHASH_IN=m.prototype.isPublicKeyHashIn,m.identifiers.MULTISIG_OUT=m.prototype.isMultisigOut,m.identifiers.MULTISIG_IN=m.prototype.isMultisigIn,m.identifiers.SCRIPTHASH_OUT=m.prototype.isScriptHashOut,m.identifiers.SCRIPTHASH_IN=m.prototype.isScriptHashIn,m.identifiers.DATA_OUT=m.prototype.isDataOut,m.prototype.classify=function(){for(var e in m.identifiers)if(m.identifiers[e].bind(this)())return m.types[e];return m.types.UNKNOWN},m.prototype.isStandard=function(){return this.classify()!==m.types.UNKNOWN},m.prototype.prepend=function(e){return this._addByType(e,!0),this},m.prototype.equals=function(e){if(s.checkState(e instanceof m,"Must provide another script"),this.chunks.length!==e.chunks.length)return!1;var a;for(a=0;a=0&&f=1&&t[0]<=16?f===n.OP_1+(t[0]-1):1===t.length&&129===t[0]?f===n.OP_1NEGATE:t.length<=75?f===t.length:t.length<=255?f===n.OP_PUSHDATA1:t.length<=65535?f===n.OP_PUSHDATA2:!0:!0},m.prototype._decodeOP_N=function(e){if(e===n.OP_0)return 0;if(e>=n.OP_1&&e<=n.OP_16)return e-(n.OP_1-1);throw new Error("Invalid opcode: "+JSON.stringify(e))},m.prototype.getSignatureOperationsCount=function(e){e=u.isUndefined(e)?!0:e;var a=this,t=0,f=n.OP_INVALIDOPCODE;return u.each(a.chunks,function(c){var r=c.opcodenum;r==n.OP_CHECKSIG||r==n.OP_CHECKSIGVERIFY?t++:(r==n.OP_CHECKMULTISIG||r==n.OP_CHECKMULTISIGVERIFY)&&(t+=e&&f>=n.OP_1&&f<=n.OP_16?a._decodeOP_N(f):20),f=r}),t},a.exports=m}).call(this,e("buffer").Buffer)},{"../address":8,"../crypto/hash":15,"../crypto/signature":18,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../errors":24,"../networks":29,"../opcode":30,"../publickey":32,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,buffer:99,lodash:78}],36:[function(e,a,t){a.exports=e("./transaction"),a.exports.Input=e("./input"),a.exports.Output=e("./output"),a.exports.UnspentOutput=e("./unspentoutput"),a.exports.Signature=e("./signature"),a.exports.Sighash=e("./sighash")},{"./input":37,"./output":43,"./sighash":44,"./signature":45,"./transaction":46,"./unspentoutput":47}],37:[function(e,a,t){a.exports=e("./input"),a.exports.PublicKey=e("./publickey"),a.exports.PublicKeyHash=e("./publickeyhash"),a.exports.MultiSig=e("./multisig.js"),a.exports.MultiSigScriptHash=e("./multisigscripthash.js")},{"./input":38,"./multisig.js":39,"./multisigscripthash.js":40,"./publickey":41,"./publickeyhash":42}],38:[function(e,a,t){"use strict";function f(e){return this instanceof f?e?this._fromObject(e):void 0:new f(e)}var c=e("lodash"),r=e("../../util/preconditions"),d=e("../../errors"),n=e("../../encoding/bufferwriter"),i=e("buffer"),b=e("../../util/buffer"),o=e("../../util/js"),s=e("../../script"),u=e("../sighash"),h=e("../output"),l=4294967295,p=0;f.DEFAULT_SEQNUMBER=l,f.DEFAULT_LOCKTIME_SEQNUMBER=p,Object.defineProperty(f.prototype,"script",{configurable:!1,enumerable:!0,get:function(){return this.isNull()?null:(this._script||(this._script=new s(this._scriptBuffer),this._script._isInput=!0),this._script)}}),f.fromObject=function(e){r.checkArgument(c.isObject(e));var a=new f;return a._fromObject(e)},f.prototype._fromObject=function(e){var a;if(a=c.isString(e.prevTxId)&&o.isHexa(e.prevTxId)?new i.Buffer(e.prevTxId,"hex"):e.prevTxId,this.output=e.output?e.output instanceof h?e.output:new h(e.output):void 0,this.prevTxId=a||e.txidbuf,this.outputIndex=c.isUndefined(e.outputIndex)?e.txoutnum:e.outputIndex,this.sequenceNumber=c.isUndefined(e.sequenceNumber)?c.isUndefined(e.seqnum)?l:e.seqnum:e.sequenceNumber,c.isUndefined(e.script)&&c.isUndefined(e.scriptBuffer))throw new d.Transaction.Input.MissingScript;return this.setScript(e.scriptBuffer||e.script),this},f.prototype.toObject=f.prototype.toJSON=function(){var e={prevTxId:this.prevTxId.toString("hex"),outputIndex:this.outputIndex,sequenceNumber:this.sequenceNumber,script:this._scriptBuffer.toString("hex")};return this.script&&(e.scriptString=this.script.toString()),this.output&&(e.output=this.output.toObject()),e},f.fromBufferReader=function(e){var a=new f;return a.prevTxId=e.readReverse(32),a.outputIndex=e.readUInt32LE(),a._scriptBuffer=e.readVarLengthBuffer(),a.sequenceNumber=e.readUInt32LE(),a},f.prototype.toBufferWriter=function(e){e||(e=new n),e.writeReverse(this.prevTxId),e.writeUInt32LE(this.outputIndex);var a=this._scriptBuffer;return e.writeVarintNum(a.length),e.write(a),e.writeUInt32LE(this.sequenceNumber),e},f.prototype.setScript=function(e){if(this._script=null,e instanceof s)this._script=e,this._script._isInput=!0,this._scriptBuffer=e.toBuffer();else if(o.isHexa(e))this._scriptBuffer=new i.Buffer(e,"hex");else if(c.isString(e))this._script=new s(e),this._script._isInput=!0,this._scriptBuffer=this._script.toBuffer();else{if(!b.isBuffer(e))throw new TypeError("Invalid argument type: script");this._scriptBuffer=new i.Buffer(e)}return this},f.prototype.getSignatures=function(){throw new d.AbstractMethodInvoked("Trying to sign unsupported output type (only P2PKH and P2SH multisig inputs are supported) for input: "+JSON.stringify(this))},f.prototype.isFullySigned=function(){throw new d.AbstractMethodInvoked("Input#isFullySigned")},f.prototype.isFinal=function(){return 4294967295!==this.sequenceNumber},f.prototype.addSignature=function(){throw new d.AbstractMethodInvoked("Input#addSignature")},f.prototype.clearSignatures=function(){throw new d.AbstractMethodInvoked("Input#clearSignatures"); -},f.prototype.isValidSignature=function(e,a){return a.signature.nhashtype=a.sigtype,u.verify(e,a.signature,a.publicKey,a.inputIndex,this.output.script)},f.prototype.isNull=function(){return"0000000000000000000000000000000000000000000000000000000000000000"===this.prevTxId.toString("hex")&&4294967295===this.outputIndex},f.prototype._estimateSize=function(){return this.toBufferWriter().toBuffer().length},a.exports=f},{"../../encoding/bufferwriter":22,"../../errors":24,"../../script":33,"../../util/buffer":50,"../../util/js":51,"../../util/preconditions":52,"../output":43,"../sighash":44,buffer:99,lodash:78}],39:[function(e,a,t){"use strict";function f(e,a,t,f){d.apply(this,arguments);var r=this;a=a||e.publicKeys,t=t||e.threshold,f=f||e.signatures,this.publicKeys=c.sortBy(a,function(e){return e.toString("hex")}),i.checkState(b.buildMultisigOut(this.publicKeys,t).equals(this.output.script),"Provided public keys don't match to the provided output script"),this.publicKeyIndex={},c.each(this.publicKeys,function(e,a){r.publicKeyIndex[e.toString()]=a}),this.threshold=t,this.signatures=f?this._deserializeSignatures(f):new Array(this.publicKeys.length)}var c=e("lodash"),r=e("inherits"),d=(e("../transaction"),e("./input")),n=e("../output"),i=e("../../util/preconditions"),b=e("../../script"),o=e("../../crypto/signature"),s=e("../sighash"),u=(e("../../publickey"),e("../../util/buffer")),h=e("../signature");r(f,d),f.prototype.toObject=function(){var e=d.prototype.toObject.apply(this,arguments);return e.threshold=this.threshold,e.publicKeys=c.map(this.publicKeys,function(e){return e.toString()}),e.signatures=this._serializeSignatures(),e},f.prototype._deserializeSignatures=function(e){return c.map(e,function(e){return e?new h(e):void 0})},f.prototype._serializeSignatures=function(){return c.map(this.signatures,function(e){return e?e.toObject():void 0})},f.prototype.getSignatures=function(e,a,t,f){i.checkState(this.output instanceof n),f=f||o.SIGHASH_ALL;var r=this,d=[];return c.each(this.publicKeys,function(c){c.toString()===a.publicKey.toString()&&d.push(new h({publicKey:a.publicKey,prevTxId:r.prevTxId,outputIndex:r.outputIndex,inputIndex:t,signature:s.sign(e,a,f,t,r.output.script),sigtype:f}))}),d},f.prototype.addSignature=function(e,a){return i.checkState(!this.isFullySigned(),"All needed signatures have already been added"),i.checkArgument(!c.isUndefined(this.publicKeyIndex[a.publicKey.toString()]),"Signature has no matching public key"),i.checkState(this.isValidSignature(e,a)),this.signatures[this.publicKeyIndex[a.publicKey.toString()]]=a,this._updateScript(),this},f.prototype._updateScript=function(){return this.setScript(b.buildMultisigIn(this.publicKeys,this.threshold,this._createSignatures())),this},f.prototype._createSignatures=function(){return c.map(c.filter(this.signatures,function(e){return!c.isUndefined(e)}),function(e){return u.concat([e.signature.toDER(),u.integerAsSingleByteBuffer(e.sigtype)])})},f.prototype.clearSignatures=function(){this.signatures=new Array(this.publicKeys.length),this._updateScript()},f.prototype.isFullySigned=function(){return this.countSignatures()===this.threshold},f.prototype.countMissingSignatures=function(){return this.threshold-this.countSignatures()},f.prototype.countSignatures=function(){return c.reduce(this.signatures,function(e,a){return e+!!a},0)},f.prototype.publicKeysWithoutSignature=function(){var e=this;return c.filter(this.publicKeys,function(a){return!e.signatures[e.publicKeyIndex[a.toString()]]})},f.prototype.isValidSignature=function(e,a){return a.signature.nhashtype=a.sigtype,s.verify(e,a.signature,a.publicKey,a.inputIndex,this.output.script)},f.normalizeSignatures=function(e,a,t,f,c){return c.map(function(c){var r=null;return f=f.filter(function(f){if(r)return!0;var d=new h({signature:o.fromTxFormat(f),publicKey:c,prevTxId:a.prevTxId,outputIndex:a.outputIndex,inputIndex:t,sigtype:o.SIGHASH_ALL});d.signature.nhashtype=d.sigtype;var n=s.verify(e,d.signature,d.publicKey,d.inputIndex,a.output.script);return n?(r=d,!1):!0}),r?r:null})},f.OPCODES_SIZE=1,f.SIGNATURE_SIZE=73,f.prototype._estimateSize=function(){return f.OPCODES_SIZE+this.threshold*f.SIGNATURE_SIZE},a.exports=f},{"../../crypto/signature":18,"../../publickey":32,"../../script":33,"../../util/buffer":50,"../../util/preconditions":52,"../output":43,"../sighash":44,"../signature":45,"../transaction":46,"./input":38,inherits:77,lodash:78}],40:[function(e,a,t){"use strict";function f(e,a,t,f){d.apply(this,arguments);var r=this;a=a||e.publicKeys,t=t||e.threshold,f=f||e.signatures,this.publicKeys=c.sortBy(a,function(e){return e.toString("hex")}),this.redeemScript=b.buildMultisigOut(this.publicKeys,t),i.checkState(b.buildScriptHashOut(this.redeemScript).equals(this.output.script),"Provided public keys don't hash to the provided output"),this.publicKeyIndex={},c.each(this.publicKeys,function(e,a){r.publicKeyIndex[e.toString()]=a}),this.threshold=t,this.signatures=f?this._deserializeSignatures(f):new Array(this.publicKeys.length)}var c=e("lodash"),r=e("inherits"),d=e("./input"),n=e("../output"),i=e("../../util/preconditions"),b=e("../../script"),o=e("../../crypto/signature"),s=e("../sighash"),u=(e("../../publickey"),e("../../util/buffer")),h=e("../signature");r(f,d),f.prototype.toObject=function(){var e=d.prototype.toObject.apply(this,arguments);return e.threshold=this.threshold,e.publicKeys=c.map(this.publicKeys,function(e){return e.toString()}),e.signatures=this._serializeSignatures(),e},f.prototype._deserializeSignatures=function(e){return c.map(e,function(e){return e?new h(e):void 0})},f.prototype._serializeSignatures=function(){return c.map(this.signatures,function(e){return e?e.toObject():void 0})},f.prototype.getSignatures=function(e,a,t,f){i.checkState(this.output instanceof n),f=f||o.SIGHASH_ALL;var r=this,d=[];return c.each(this.publicKeys,function(c){c.toString()===a.publicKey.toString()&&d.push(new h({publicKey:a.publicKey,prevTxId:r.prevTxId,outputIndex:r.outputIndex,inputIndex:t,signature:s.sign(e,a,f,t,r.redeemScript),sigtype:f}))}),d},f.prototype.addSignature=function(e,a){return i.checkState(!this.isFullySigned(),"All needed signatures have already been added"),i.checkArgument(!c.isUndefined(this.publicKeyIndex[a.publicKey.toString()]),"Signature has no matching public key"),i.checkState(this.isValidSignature(e,a)),this.signatures[this.publicKeyIndex[a.publicKey.toString()]]=a,this._updateScript(),this},f.prototype._updateScript=function(){return this.setScript(b.buildP2SHMultisigIn(this.publicKeys,this.threshold,this._createSignatures(),{cachedMultisig:this.redeemScript})),this},f.prototype._createSignatures=function(){return c.map(c.filter(this.signatures,function(e){return!c.isUndefined(e)}),function(e){return u.concat([e.signature.toDER(),u.integerAsSingleByteBuffer(e.sigtype)])})},f.prototype.clearSignatures=function(){this.signatures=new Array(this.publicKeys.length),this._updateScript()},f.prototype.isFullySigned=function(){return this.countSignatures()===this.threshold},f.prototype.countMissingSignatures=function(){return this.threshold-this.countSignatures()},f.prototype.countSignatures=function(){return c.reduce(this.signatures,function(e,a){return e+!!a},0)},f.prototype.publicKeysWithoutSignature=function(){var e=this;return c.filter(this.publicKeys,function(a){return!e.signatures[e.publicKeyIndex[a.toString()]]})},f.prototype.isValidSignature=function(e,a){return a.signature.nhashtype=a.sigtype,s.verify(e,a.signature,a.publicKey,a.inputIndex,this.redeemScript)},f.OPCODES_SIZE=7,f.SIGNATURE_SIZE=74,f.PUBKEY_SIZE=34,f.prototype._estimateSize=function(){return f.OPCODES_SIZE+this.threshold*f.SIGNATURE_SIZE+this.publicKeys.length*f.PUBKEY_SIZE},a.exports=f},{"../../crypto/signature":18,"../../publickey":32,"../../script":33,"../../util/buffer":50,"../../util/preconditions":52,"../output":43,"../sighash":44,"../signature":45,"./input":38,inherits:77,lodash:78}],41:[function(e,a,t){"use strict";function f(){d.apply(this,arguments)}var c=e("inherits"),r=e("../../util/preconditions"),d=(e("../../util/buffer"),e("./input")),n=e("../output"),i=e("../sighash"),b=e("../../script"),o=e("../../crypto/signature"),s=e("../signature");c(f,d),f.prototype.getSignatures=function(e,a,t,f){r.checkState(this.output instanceof n),f=f||o.SIGHASH_ALL;var c=a.toPublicKey();return c.toString()===this.output.script.getPublicKey().toString("hex")?[new s({publicKey:c,prevTxId:this.prevTxId,outputIndex:this.outputIndex,inputIndex:t,signature:i.sign(e,a,f,t,this.output.script),sigtype:f})]:[]},f.prototype.addSignature=function(e,a){return r.checkState(this.isValidSignature(e,a),"Signature is invalid"),this.setScript(b.buildPublicKeyIn(a.signature.toDER(),a.sigtype)),this},f.prototype.clearSignatures=function(){return this.setScript(b.empty()),this},f.prototype.isFullySigned=function(){return this.script.isPublicKeyIn()},f.SCRIPT_MAX_SIZE=73,f.prototype._estimateSize=function(){return f.SCRIPT_MAX_SIZE},a.exports=f},{"../../crypto/signature":18,"../../script":33,"../../util/buffer":50,"../../util/preconditions":52,"../output":43,"../sighash":44,"../signature":45,"./input":38,inherits:77}],42:[function(e,a,t){"use strict";function f(){i.apply(this,arguments)}var c=e("inherits"),r=e("../../util/preconditions"),d=e("../../util/buffer"),n=e("../../crypto/hash"),i=e("./input"),b=e("../output"),o=e("../sighash"),s=e("../../script"),u=e("../../crypto/signature"),h=e("../signature");c(f,i),f.prototype.getSignatures=function(e,a,t,f,c){return r.checkState(this.output instanceof b),c=c||n.sha256ripemd160(a.publicKey.toBuffer()),f=f||u.SIGHASH_ALL,d.equals(c,this.output.script.getPublicKeyHash())?[new h({publicKey:a.publicKey,prevTxId:this.prevTxId,outputIndex:this.outputIndex,inputIndex:t,signature:o.sign(e,a,f,t,this.output.script),sigtype:f})]:[]},f.prototype.addSignature=function(e,a){return r.checkState(this.isValidSignature(e,a),"Signature is invalid"),this.setScript(s.buildPublicKeyHashIn(a.publicKey,a.signature.toDER(),a.sigtype)),this},f.prototype.clearSignatures=function(){return this.setScript(s.empty()),this},f.prototype.isFullySigned=function(){return this.script.isPublicKeyHashIn()},f.SCRIPT_MAX_SIZE=107,f.prototype._estimateSize=function(){return f.SCRIPT_MAX_SIZE},a.exports=f},{"../../crypto/hash":15,"../../crypto/signature":18,"../../script":33,"../../util/buffer":50,"../../util/preconditions":52,"../output":43,"../sighash":44,"../signature":45,"./input":38,inherits:77}],43:[function(e,a,t){"use strict";function f(e){if(!(this instanceof f))return new f(e);if(!c.isObject(e))throw new TypeError("Unrecognized argument for Output");if(this.satoshis=e.satoshis,n.isBuffer(e.script))this._scriptBuffer=e.script;else{var a;a=c.isString(e.script)&&i.isHexa(e.script)?new d.Buffer(e.script,"hex"):e.script,this.setScript(a)}}var c=e("lodash"),r=e("../crypto/bn"),d=e("buffer"),n=e("../util/buffer"),i=e("../util/js"),b=e("../encoding/bufferwriter"),o=e("../script"),s=e("../util/preconditions"),u=e("../errors"),h=9007199254740991;Object.defineProperty(f.prototype,"script",{configurable:!1,enumerable:!0,get:function(){return this._script?this._script:(this.setScriptFromBuffer(this._scriptBuffer),this._script)}}),Object.defineProperty(f.prototype,"satoshis",{configurable:!1,enumerable:!0,get:function(){return this._satoshis},set:function(e){e instanceof r?(this._satoshisBN=e,this._satoshis=e.toNumber()):c.isString(e)?(this._satoshis=parseInt(e),this._satoshisBN=r.fromNumber(this._satoshis)):(s.checkArgument(i.isNaturalNumber(e),"Output satoshis is not a natural number"),this._satoshisBN=r.fromNumber(e),this._satoshis=e),s.checkState(i.isNaturalNumber(this._satoshis),"Output satoshis is not a natural number")}}),f.prototype.invalidSatoshis=function(){return this._satoshis>h?"transaction txout satoshis greater than max safe integer":this._satoshis!==this._satoshisBN.toNumber()?"transaction txout satoshis has corrupted value":this._satoshis<0?"transaction txout negative":!1},f.prototype.toObject=f.prototype.toJSON=function(){var e={satoshis:this.satoshis};return e.script=this._scriptBuffer.toString("hex"),e},f.fromObject=function(e){return new f(e)},f.prototype.setScriptFromBuffer=function(e){this._scriptBuffer=e;try{this._script=o.fromBuffer(this._scriptBuffer),this._script._isOutput=!0}catch(a){if(!(a instanceof u.Script.InvalidBuffer))throw a;this._script=null}},f.prototype.setScript=function(e){if(e instanceof o)this._scriptBuffer=e.toBuffer(),this._script=e,this._script._isOutput=!0;else if(c.isString(e))this._script=o.fromString(e),this._scriptBuffer=this._script.toBuffer(),this._script._isOutput=!0;else{if(!n.isBuffer(e))throw new TypeError("Invalid argument type: script");this.setScriptFromBuffer(e)}return this},f.prototype.inspect=function(){var e;return e=this.script?this.script.inspect():this._scriptBuffer.toString("hex"),""},f.fromBufferReader=function(e){var a={};a.satoshis=e.readUInt64LEBN();var t=e.readVarintNum();return 0!==t?a.script=e.read(t):a.script=new d.Buffer([]),new f(a)},f.prototype.toBufferWriter=function(e){e||(e=new b),e.writeUInt64LEBN(this._satoshisBN);var a=this._scriptBuffer;return e.writeVarintNum(a.length),e.write(a),e},a.exports=f},{"../crypto/bn":13,"../encoding/bufferwriter":22,"../errors":24,"../script":33,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,buffer:99,lodash:78}],44:[function(e,a,t){(function(t){"use strict";function f(e,a,t,f,c){var r=v(e,t,f,c),d=h.sign(r,a,"little").set({nhashtype:t});return d}function c(e,a,t,f,c){l.checkArgument(!p.isUndefined(e)),l.checkArgument(!p.isUndefined(a)&&!p.isUndefined(a.nhashtype));var r=v(e,a.nhashtype,f,c);return h.verify(r,a,t,"little")}var r=e("buffer"),d=e("../crypto/signature"),n=e("../script"),i=e("./output"),b=e("../encoding/bufferreader"),o=e("../encoding/bufferwriter"),s=e("../crypto/bn"),u=e("../crypto/hash"),h=e("../crypto/ecdsa"),l=e("../util/preconditions"),p=e("lodash"),g="0000000000000000000000000000000000000000000000000000000000000001",m="ffffffffffffffff",v=function(a,f,c,h){var l,p=e("./transaction"),v=e("./input"),y=p.shallowCopy(a);for(h=new n(h),h.removeCodeseparators(),l=0;l=y.outputs.length)return new t(g,"hex");for(y.outputs.length=c+1,l=0;c>l;l++)y.outputs[l]=new i({satoshis:s.fromBuffer(new r.Buffer(m,"hex")),script:n.empty()})}f&d.SIGHASH_ANYONECANPAY&&(y.inputs=[y.inputs[c]]);var w=(new o).write(y.toBuffer()).writeInt32LE(f).toBuffer(),_=u.sha256sha256(w);return _=new b(_).readReverse()};a.exports={sighash:v,sign:f,verify:c}}).call(this,e("buffer").Buffer)},{"../crypto/bn":13,"../crypto/ecdsa":14,"../crypto/hash":15,"../crypto/signature":18,"../encoding/bufferreader":21,"../encoding/bufferwriter":22,"../script":33,"../util/preconditions":52,"./input":37,"./output":43,"./transaction":46,buffer:99,lodash:78}],45:[function(e,a,t){(function(t){"use strict";function f(e){if(!(this instanceof f))return new f(e);if(e instanceof f)return e;if(c.isObject(e))return this._fromObject(e);throw new o.InvalidArgument("TransactionSignatures must be instantiated from an object")}var c=e("lodash"),r=e("../util/preconditions"),d=e("inherits"),n=e("../util/buffer"),i=e("../util/js"),b=e("../publickey"),o=e("../errors"),s=e("../crypto/signature");d(f,s),f.prototype._fromObject=function(e){return this._checkObjectArgs(e),this.publicKey=new b(e.publicKey),this.prevTxId=n.isBuffer(e.prevTxId)?e.prevTxId:new t(e.prevTxId,"hex"),this.outputIndex=e.outputIndex,this.inputIndex=e.inputIndex,this.signature=e.signature instanceof s?e.signature:n.isBuffer(e.signature)?s.fromBuffer(e.signature):s.fromString(e.signature),this.sigtype=e.sigtype,this},f.prototype._checkObjectArgs=function(e){r.checkArgument(b(e.publicKey),"publicKey"),r.checkArgument(!c.isUndefined(e.inputIndex),"inputIndex"),r.checkArgument(!c.isUndefined(e.outputIndex),"outputIndex"),r.checkState(c.isNumber(e.inputIndex),"inputIndex must be a number"),r.checkState(c.isNumber(e.outputIndex),"outputIndex must be a number"),r.checkArgument(e.signature,"signature"),r.checkArgument(e.prevTxId,"prevTxId"),r.checkState(e.signature instanceof s||n.isBuffer(e.signature)||i.isHexa(e.signature),"signature must be a buffer or hexa value"),r.checkState(n.isBuffer(e.prevTxId)||i.isHexa(e.prevTxId),"prevTxId must be a buffer or hexa value"),r.checkArgument(e.sigtype,"sigtype"),r.checkState(c.isNumber(e.sigtype),"sigtype must be a number")},f.prototype.toObject=f.prototype.toJSON=function(){return{publicKey:this.publicKey.toString(),prevTxId:this.prevTxId.toString("hex"),outputIndex:this.outputIndex,inputIndex:this.inputIndex,signature:this.signature.toString(),sigtype:this.sigtype}},f.fromObject=function(e){return r.checkArgument(e),new f(e)},a.exports=f}).call(this,e("buffer").Buffer)},{"../crypto/signature":18,"../errors":24,"../publickey":32,"../util/buffer":50,"../util/js":51,"../util/preconditions":52,buffer:99,inherits:77,lodash:78}],46:[function(e,a,t){(function(t){"use strict";function f(e){if(!(this instanceof f))return new f(e);if(this.inputs=[],this.outputs=[],this._inputAmount=void 0,this._outputAmount=void 0,e){if(e instanceof f)return f.shallowCopy(e);if(o.isHexa(e))this.fromString(e);else if(b.isBuffer(e))this.fromBuffer(e);else{if(!c.isObject(e))throw new i.InvalidArgument("Must provide an object or string to deserialize a transaction");this.fromObject(e)}}else this._newTransaction()}var c=e("lodash"),r=e("../util/preconditions"),d=e("buffer"),n=t.compare||e("buffer-compare"),i=e("../errors"),b=e("../util/buffer"),o=e("../util/js"),s=e("../encoding/bufferreader"),u=e("../encoding/bufferwriter"),h=e("../crypto/hash"),l=e("../crypto/signature"),p=e("./sighash"),g=e("../address"),m=e("./unspentoutput"),v=e("./input"),y=v.PublicKeyHash,w=v.PublicKey,_=v.MultiSigScriptHash,S=v.MultiSig,A=e("./output"),I=e("../script"),E=e("../privatekey"),k=e("../crypto/bn"),x=1,P=0,B=1e6;f.DUST_AMOUNT=546,f.FEE_SECURITY_MARGIN=15,f.MAX_MONEY=21e14,f.NLOCKTIME_BLOCKHEIGHT_LIMIT=5e8,f.NLOCKTIME_MAX_VALUE=4294967295,f.FEE_PER_KB=1e4,f.CHANGE_OUTPUT_MAX_SIZE=62,f.MAXIMUM_EXTRA_SIZE=26,f.shallowCopy=function(e){var a=new f(e.toBuffer());return a};var M={configurable:!1,enumerable:!0,get:function(){return new s(this._getHash()).readReverse().toString("hex")}};Object.defineProperty(f.prototype,"hash",M),Object.defineProperty(f.prototype,"id",M);var O={configurable:!1,enumerable:!0,get:function(){return this._getInputAmount()}};Object.defineProperty(f.prototype,"inputAmount",O),O.get=function(){return this._getOutputAmount()},Object.defineProperty(f.prototype,"outputAmount",O),f.prototype._getHash=function(){return h.sha256sha256(this.toBuffer())},f.prototype.serialize=function(e){return!0===e||e&&e.disableAll?this.uncheckedSerialize():this.checkedSerialize(e)},f.prototype.uncheckedSerialize=f.prototype.toString=function(){return this.toBuffer().toString("hex")},f.prototype.checkedSerialize=function(e){var a=this.getSerializationError(e);if(a)throw a.message+=" Use Transaction#uncheckedSerialize if you want to skip security checks. See http://bitcore.io/guide/transaction.html#Serialization for more info.",a;return this.uncheckedSerialize()},f.prototype.invalidSatoshis=function(){for(var e=!1,a=0;at?e.disableMoreOutputThanInput||(a=new i.Transaction.InvalidOutputAmountSum):a=this._hasFeeError(e,t),a||this._hasDustOutputs(e)||this._isMissingSignatures(e)},f.prototype._hasFeeError=function(e,a){if(!c.isUndefined(this._fee)&&this._fee!==a)return new i.Transaction.FeeError.Different("Unspent value is "+a+" but specified fee is "+this._fee);if(!e.disableLargeFees){var t=Math.floor(f.FEE_SECURITY_MARGIN*this._estimateFee());if(a>t)return this._missingChange()?new i.Transaction.ChangeAddressMissing("Fee is too large and no change address was provided"):new i.Transaction.FeeError.TooLarge("expected less than "+t+" but got "+a)}if(!e.disableSmallFees){var r=Math.ceil(this._estimateFee()/f.FEE_SECURITY_MARGIN);if(r>a)return new i.Transaction.FeeError.TooSmall("expected more than "+r+" but got "+a)}},f.prototype._missingChange=function(){return!this._changeScript},f.prototype._hasDustOutputs=function(e){if(!e.disableDustOutputs){var a,t;for(a in this.outputs)if(t=this.outputs[a],t.satoshis"},f.prototype.toBuffer=function(){var e=new u;return this.toBufferWriter(e).toBuffer()},f.prototype.toBufferWriter=function(e){return e.writeUInt32LE(this.version),e.writeVarintNum(this.inputs.length),c.each(this.inputs,function(a){a.toBufferWriter(e)}),e.writeVarintNum(this.outputs.length),c.each(this.outputs,function(a){a.toBufferWriter(e)}),e.writeUInt32LE(this.nLockTime),e},f.prototype.fromBuffer=function(e){var a=new s(e);return this.fromBufferReader(a)},f.prototype.fromBufferReader=function(e){r.checkArgument(!e.finished(),"No transaction data received");var a,t,f;for(this.version=e.readUInt32LE(),t=e.readVarintNum(),a=0;t>a;a++){var c=v.fromBufferReader(e);this.inputs.push(c)}for(f=e.readVarintNum(),a=0;f>a;a++)this.outputs.push(A.fromBufferReader(e));return this.nLockTime=e.readUInt32LE(),this},f.prototype.toObject=f.prototype.toJSON=function(){var e=[];this.inputs.forEach(function(a){e.push(a.toObject())});var a=[];this.outputs.forEach(function(e){a.push(e.toObject())});var t={hash:this.hash,version:this.version,inputs:e,outputs:a,nLockTime:this.nLockTime};return this._changeScript&&(t.changeScript=this._changeScript.toString()),c.isUndefined(this._changeIndex)||(t.changeIndex=this._changeIndex),c.isUndefined(this._fee)||(t.fee=this._fee),t},f.prototype.fromObject=function(e){r.checkArgument(c.isObject(e)||e instanceof f);var a,t=this;return a=e instanceof f?a.toObject():e,c.each(a.inputs,function(e){if(!e.output||!e.output.script)return void t.uncheckedAddInput(new v(e));var a,f=new I(e.output.script);if(f.isPublicKeyHashOut())a=new v.PublicKeyHash(e);else if(f.isScriptHashOut()&&e.publicKeys&&e.threshold)a=new v.MultiSigScriptHash(e,e.publicKeys,e.threshold,e.signatures);else{if(!f.isPublicKeyOut())throw new i.Transaction.Input.UnsupportedScript(e.output.script);a=new v.PublicKey(e)}t.addInput(a)}),c.each(a.outputs,function(e){t.addOutput(new A(e))}),a.changeIndex&&(this._changeIndex=a.changeIndex),a.changeScript&&(this._changeScript=new I(a.changeScript)),a.fee&&(this._fee=a.fee),this.nLockTime=a.nLockTime,this.version=a.version,this._checkConsistency(e),this},f.prototype._checkConsistency=function(e){c.isUndefined(this._changeIndex)||(r.checkState(this._changeScript),r.checkState(this.outputs[this._changeIndex]),r.checkState(this.outputs[this._changeIndex].script.toString()===this._changeScript.toString())),e&&e.hash&&r.checkState(e.hash===this.hash,"Hash in object does not match transaction hash")},f.prototype.lockUntilDate=function(e){if(r.checkArgument(e),c.isNumber(e)&&e=f.NLOCKTIME_BLOCKHEIGHT_LIMIT)throw new i.Transaction.BlockHeightTooHigh;if(0>e)throw new i.Transaction.NLockTimeOutOfRange;for(var a=0;a0?(this._changeIndex=this.outputs.length,this._addOutput(new A({script:this._changeScript,satoshis:t}))):this._changeIndex=void 0}},f.prototype.getFee=function(){return this.isCoinbase()?0:c.isUndefined(this._fee)?this._changeScript?this._estimateFee():this._getUnspentValue():this._fee},f.prototype._estimateFee=function(){var e=this._estimateSize(),a=this._getUnspentValue();return f._estimateFee(e,a,this._feePerKb)},f.prototype._getUnspentValue=function(){return this._getInputAmount()-this._getOutputAmount()},f.prototype._clearSignatures=function(){c.each(this.inputs,function(e){e.clearSignatures()})},f._estimateFee=function(e,a,t){var c=Math.ceil(e/1e3)*(t||f.FEE_PER_KB);return a>c&&(e+=f.CHANGE_OUTPUT_MAX_SIZE),Math.ceil(e/1e3)*(t||f.FEE_PER_KB)},f.prototype._estimateSize=function(){var e=f.MAXIMUM_EXTRA_SIZE;return c.each(this.inputs,function(a){e+=a._estimateSize()}),c.each(this.outputs,function(a){e+=a.script.toBuffer().length+9}),e},f.prototype._removeOutput=function(e){var a=this.outputs[e];this.outputs=c.without(this.outputs,a),this._outputAmount=void 0},f.prototype.removeOutput=function(e){this._removeOutput(e),this._updateChangeOutput()},f.prototype.sort=function(){return this.sortInputs(function(e){var a=Array.prototype.concat.apply([],e);return a.sort(function(e,a){return n(e.prevTxId,a.prevTxId)||e.outputIndex-a.outputIndex}),a}),this.sortOutputs(function(e){var a=Array.prototype.concat.apply([],e);return a.sort(function(e,a){return e.satoshis-a.satoshis||n(e.script.toBuffer(),a.script.toBuffer())}),a}),this},f.prototype.shuffleOutputs=function(){return this.sortOutputs(c.shuffle)},f.prototype.sortOutputs=function(e){var a=e(this.outputs);return this._newOutputOrder(a)},f.prototype.sortInputs=function(e){return this.inputs=e(this.inputs),this._clearSignatures(),this},f.prototype._newOutputOrder=function(e){var a=this.outputs.length!==e.length||0!==c.difference(this.outputs,e).length;if(a)throw new i.Transaction.InvalidSorting;if(!c.isUndefined(this._changeIndex)){var t=this.outputs[this._changeIndex];this._changeIndex=c.findIndex(e,t)}return this.outputs=e,this},f.prototype.removeInput=function(e,a){var t;if(t=!a&&c.isNumber(e)?e:c.findIndex(this.inputs,function(t){return t.prevTxId.toString("hex")===e&&t.outputIndex===a}),0>t||t>=this.inputs.length)throw new i.Transaction.InvalidIndex(t,this.inputs.length);var f=this.inputs[t];this.inputs=c.without(this.inputs,f),this._inputAmount=void 0,this._updateChangeOutput()},f.prototype.sign=function(e,a){r.checkState(this.hasAllUtxoInfo());var t=this;return c.isArray(e)?(c.each(e,function(e){t.sign(e,a)}),this):(c.each(this.getSignatures(e,a),function(e){t.applySignature(e)}),this)},f.prototype.getSignatures=function(e,a){e=new E(e),a=a||l.SIGHASH_ALL;var t=this,f=[],r=h.sha256ripemd160(e.publicKey.toBuffer());return c.each(this.inputs,function(d,n){c.each(d.getSignatures(t,e,n,a,r),function(e){f.push(e)})}),f},f.prototype.applySignature=function(e){return this.inputs[e.inputIndex].addSignature(this,e),this},f.prototype.isFullySigned=function(){return c.each(this.inputs,function(e){if(e.isFullySigned===v.prototype.isFullySigned)throw new i.Transaction.UnableToVerifySignature("Unrecognized script kind, or not enough information to execute script.This usually happens when creating a transaction from a serialized transaction")}),c.all(c.map(this.inputs,function(e){return e.isFullySigned()}))},f.prototype.isValidSignature=function(e){var a=this;if(this.inputs[e.inputIndex].isValidSignature===v.prototype.isValidSignature)throw new i.Transaction.UnableToVerifySignature("Unrecognized script kind, or not enough information to execute script.This usually happens when creating a transaction from a serialized transaction");return this.inputs[e.inputIndex].isValidSignature(a,e)},f.prototype.verifySignature=function(e,a,t,f){ -return p.verify(this,e,a,t,f)},f.prototype.verify=function(){if(0===this.inputs.length)return"transaction txins empty";if(0===this.outputs.length)return"transaction txouts empty";for(var e=new k(0),a=0;aB)return"transaction over the maximum block size";var r={};for(a=0;a100)return"coinbase transaction script size invalid"}else for(a=0;a64)throw new Error("Invalid TXID in object",e);var o=c.isUndefined(e.vout)?e.outputIndex:e.vout;if(!c.isNumber(o))throw new Error("Invalid outputIndex, received "+o);r.checkArgument(!c.isUndefined(e.scriptPubKey)||!c.isUndefined(e.script),"Must provide the scriptPubKey for that output!");var s=new n(e.scriptPubKey||e.script);r.checkArgument(!c.isUndefined(e.amount)||!c.isUndefined(e.satoshis),"Must provide an amount for the output");var u=c.isUndefined(e.amount)?e.satoshis:new b.fromBTC(e.amount).toSatoshis();r.checkArgument(c.isNumber(u),"Amount must be a number"),d.defineImmutable(this,{address:a,txId:t,outputIndex:o,script:s,satoshis:u})}var c=e("lodash"),r=e("../util/preconditions"),d=e("../util/js"),n=e("../script"),i=e("../address"),b=e("../unit");f.prototype.inspect=function(){return""},f.prototype.toString=function(){return this.txId+":"+this.outputIndex},f.fromObject=function(e){return new f(e)},f.prototype.toObject=f.prototype.toJSON=function(){return{address:this.address?this.address.toString():void 0,txid:this.txId,vout:this.outputIndex,scriptPubKey:this.script.toBuffer().toString("hex"),amount:b.fromSatoshis(this.satoshis).toBTC()}},a.exports=f},{"../address":8,"../script":33,"../unit":48,"../util/js":51,"../util/preconditions":52,lodash:78}],48:[function(e,a,t){"use strict";function f(e,a){if(!(this instanceof f))return new f(e,a);if(c.isNumber(a)){if(0>=a)throw new r.Unit.InvalidRate(a);e/=a,a=f.BTC}this._value=this._from(e,a);var t=this,d=function(e){Object.defineProperty(t,e,{get:function(){return t.to(e)},enumerable:!0})};Object.keys(n).forEach(d)}var c=e("lodash"),r=e("./errors"),d=e("./util/preconditions"),n={BTC:[1e8,8],mBTC:[1e5,5],uBTC:[100,2],bits:[100,2],satoshis:[1,0]};Object.keys(n).forEach(function(e){f[e]=e}),f.fromObject=function(e){return d.checkArgument(c.isObject(e),"Argument is expected to be an object"),new f(e.amount,e.code)},f.fromBTC=function(e){return new f(e,f.BTC)},f.fromMillis=f.fromMilis=function(e){return new f(e,f.mBTC)},f.fromMicros=f.fromBits=function(e){return new f(e,f.bits)},f.fromSatoshis=function(e){return new f(e,f.satoshis)},f.fromFiat=function(e,a){return new f(e,a)},f.prototype._from=function(e,a){if(!n[a])throw new r.Unit.UnknownCode(a);return parseInt((e*n[a][0]).toFixed())},f.prototype.to=function(e){if(c.isNumber(e)){if(0>=e)throw new r.Unit.InvalidRate(e);return parseFloat((this.BTC*e).toFixed(2))}if(!n[e])throw new r.Unit.UnknownCode(e);var a=this._value/n[e][0];return parseFloat(a.toFixed(n[e][1]))},f.prototype.toBTC=function(){return this.to(f.BTC)},f.prototype.toMillis=f.prototype.toMilis=function(){return this.to(f.mBTC)},f.prototype.toMicros=f.prototype.toBits=function(){return this.to(f.bits)},f.prototype.toSatoshis=function(){return this.to(f.satoshis)},f.prototype.atRate=function(e){return this.to(e)},f.prototype.toString=function(){return this.satoshis+" satoshis"},f.prototype.toObject=f.prototype.toJSON=function(){return{amount:this.BTC,code:f.BTC}},f.prototype.inspect=function(){return""},a.exports=f},{"./errors":24,"./util/preconditions":52,lodash:78}],49:[function(e,a,t){"use strict";var f=e("lodash"),c=e("url"),r=e("./address"),d=e("./unit"),n=function(e,a){if(!(this instanceof n))return new n(e,a);if(this.extras={},this.knownParams=a||[],this.address=this.network=this.amount=this.message=null,"string"==typeof e){var t=n.parse(e);t.amount&&(t.amount=this._parseAmount(t.amount)),this._fromObject(t)}else{if("object"!=typeof e)throw new TypeError("Unrecognized data format.");this._fromObject(e)}};n.fromString=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return new n(e)},n.fromObject=function(e){return new n(e)},n.isValid=function(e,a){try{new n(e,a)}catch(t){return!1}return!0},n.parse=function(e){var a=c.parse(e,!0);if("bitcoin:"!==a.protocol)throw new TypeError("Invalid bitcoin URI");var t=/[^:]*:\/?\/?([^?]*)/.exec(e);return a.query.address=t&&t[1]||void 0,a.query},n.Members=["address","amount","message","label","r"],n.prototype._fromObject=function(e){if(!r.isValid(e.address))throw new TypeError("Invalid bitcoin address");this.address=new r(e.address),this.network=this.address.network,this.amount=e.amount;for(var a in e)if("address"!==a&&"amount"!==a){if(/^req-/.exec(a)&&-1===this.knownParams.indexOf(a))throw Error("Unknown required argument "+a);var t=n.Members.indexOf(a)>-1?this:this.extras;t[a]=e[a]}},n.prototype._parseAmount=function(e){if(e=Number(e),isNaN(e))throw new TypeError("Invalid amount");return d.fromBTC(e).toSatoshis()},n.prototype.toObject=n.prototype.toJSON=function(){for(var e={},a=0;a"},a.exports=n},{"./address":8,"./unit":48,lodash:78,url:317}],50:[function(e,a,t){(function(t){"use strict";function f(e,a){if(e.length!==a.length)return!1;for(var t=e.length,f=0;t>f;f++)if(e[f]!==a[f])return!1;return!0}var c=e("buffer"),r=e("assert"),d=e("./js"),n=e("./preconditions");a.exports={fill:function(e,a){n.checkArgumentType(e,"Buffer","buffer"),n.checkArgumentType(a,"number","value");for(var t=e.length,f=0;t>f;f++)e[f]=a;return e},copy:function(e){var a=new t(e.length);return e.copy(a),a},isBuffer:function(e){return c.Buffer.isBuffer(e)||e instanceof Uint8Array},emptyBuffer:function(e){n.checkArgumentType(e,"number","bytes");for(var a=new c.Buffer(e),t=0;e>t;t++)a.write("\x00",t);return a},concat:c.Buffer.concat,equals:f,equal:f,integerAsSingleByteBuffer:function(e){return n.checkArgumentType(e,"number","integer"),new c.Buffer([255&e])},integerAsBuffer:function(e){n.checkArgumentType(e,"number","integer");var a=[];return a.push(e>>24&255),a.push(e>>16&255),a.push(e>>8&255),a.push(255&e),new t(a)},integerFromBuffer:function(e){return n.checkArgumentType(e,"Buffer","buffer"),e[0]<<24|e[1]<<16|e[2]<<8|e[3]},integerFromSingleByteBuffer:function(e){return n.checkArgumentType(e,"Buffer","buffer"),e[0]},bufferToHex:function(e){return n.checkArgumentType(e,"Buffer","buffer"),e.toString("hex")},reverse:function(e){for(var a=new c.Buffer(e.length),t=0;t=0}}},{lodash:78}],52:[function(e,a,t){"use strict";var f=e("../errors"),c=e("lodash");a.exports={checkState:function(e,a){if(!e)throw new f.InvalidState(a)},checkArgument:function(e,a,t,c){if(!e)throw new f.InvalidArgument(a,t,c)},checkArgumentType:function(a,t,r){if(r=r||"(unknown name)",c.isString(t)){if("Buffer"===t){var d=e("./buffer");if(!d.isBuffer(a))throw new f.InvalidArgumentType(a,t,r)}else if(typeof a!==t)throw new f.InvalidArgumentType(a,t,r)}else if(!(a instanceof t))throw new f.InvalidArgumentType(a,t.name,r)}}},{"../errors":24,"./buffer":50,lodash:78}],53:[function(e,a,t){!function(e,a){"use strict";function t(e,a){if(!e)throw new Error(a||"Assertion failed")}function f(e,a){e.super_=a;var t=function(){};t.prototype=a.prototype,e.prototype=new t,e.prototype.constructor=e}function c(e,a,t){return null!==e&&"object"==typeof e&&Array.isArray(e.words)?e:(this.sign=!1,this.words=null,this.length=0,this.red=null,("le"===a||"be"===a)&&(t=a,a=10),void(null!==e&&this._init(e||0,a||10,t||"be")))}function r(e,a,t){for(var f=0,c=Math.min(e.length,t),r=a;c>r;r++){var d=e.charCodeAt(r)-48;f<<=4,f|=d>=49&&54>=d?d-49+10:d>=17&&22>=d?d-17+10:15&d}return f}function d(e,a,t,f){for(var c=0,r=Math.min(e.length,t),d=a;r>d;d++){var n=e.charCodeAt(d)-48;c*=f,c+=n>=49?n-49+10:n>=17?n-17+10:n}return c}function n(e,a){this.name=e,this.p=new c(a,16),this.n=this.p.bitLength(),this.k=new c(1).ishln(this.n).isub(this.p),this.tmp=this._tmp()}function i(){n.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){n.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function o(){n.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function s(){n.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function u(e){if("string"==typeof e){var a=c._prime(e);this.m=a.p,this.prime=a}else this.m=e,this.prime=null}function h(e){u.call(this,e),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new c(1).ishln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv.sign=!0,this.minv=this.minv.mod(this.r)}"object"==typeof e?e.exports=c:a.BN=c,c.BN=c,c.wordSize=26,c.prototype._init=function(e,a,f){if("number"==typeof e)return 0>e&&(this.sign=!0,e=-e),void(67108864>e?(this.words=[67108863&e],this.length=1):4503599627370496>e?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(t(9007199254740992>e),this.words=[67108863&e,e/67108864&67108863,1],this.length=3));if("object"==typeof e)return this._initArray(e,a,f);"hex"===a&&(a=16),t(a===(0|a)&&a>=2&&36>=a),e=e.toString().replace(/\s+/g,"");var c=0;"-"===e[0]&&c++,16===a?this._parseHex(e,c):this._parseBase(e,a,c),"-"===e[0]&&(this.sign=!0),this.strip()},c.prototype._initArray=function(e,a,f){if(t("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var c=0;c=0;c-=3){var n=e[c]|e[c-1]<<8|e[c-2]<<16;this.words[d]|=n<>>26-r&67108863,r+=24,r>=26&&(r-=26,d++)}else if("le"===f)for(var c=0,d=0;c>>26-r&67108863,r+=24,r>=26&&(r-=26,d++)}return this.strip()},c.prototype._parseHex=function(e,a){this.length=Math.ceil((e.length-a)/6),this.words=new Array(this.length);for(var t=0;t=a;t-=6){var d=r(e,t,t+6);this.words[c]|=d<>>26-f&4194303,f+=24,f>=26&&(f-=26,c++)}if(t+6!==a){var d=r(e,a,t+6);this.words[c]|=d<>>26-f&4194303}this.strip()},c.prototype._parseBase=function(e,a,t){this.words=[0],this.length=1;for(var f=0,c=1;67108863>=c;c*=a)f++;f--,c=c/a|0;for(var r=e.length-t,n=r%f,i=Math.min(r,r-n)+t,b=0,o=t;i>o;o+=f)b=d(e,o,o+f,a),this.imuln(c),this.words[0]+b<67108864?this.words[0]+=b:this._iaddn(b);if(0!==n){for(var s=1,b=d(e,o,e.length,a),o=0;n>o;o++)s*=a;this.imuln(s),this.words[0]+b<67108864?this.words[0]+=b:this._iaddn(b)}},c.prototype.copy=function(e){e.words=new Array(this.length);for(var a=0;a1&&0===this.words[this.length-1];)this.length--;return this._normSign()},c.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.sign=!1),this},c.prototype.inspect=function(){return(this.red?""};var l=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],p=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],g=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];c.prototype.toString=function(e,a){if(e=e||10,16===e||"hex"===e){for(var f="",c=0,a=0|a||1,r=0,d=0;d>>24-c&16777215,f=0!==r||d!==this.length-1?l[6-i.length]+i+f:i+f,c+=2,c>=26&&(c-=26,d--)}for(0!==r&&(f=r.toString(16)+f);f.length%a!==0;)f="0"+f;return this.sign&&(f="-"+f),f}if(e===(0|e)&&e>=2&&36>=e){var b=p[e],o=g[e],f="",s=this.clone();for(s.sign=!1;0!==s.cmpn(0);){var u=s.modn(o).toString(e);s=s.idivn(o),f=0!==s.cmpn(0)?l[b-u.length]+u+f:u+f}return 0===this.cmpn(0)&&(f="0"+f),this.sign&&(f="-"+f),f}t(!1,"Base should be between 2 and 36")},c.prototype.toJSON=function(){return this.toString(16)},c.prototype.toArray=function(){this.strip();var e=new Array(this.byteLength());e[0]=0;for(var a=this.clone(),t=0;0!==a.cmpn(0);t++){var f=a.andln(255);a.ishrn(8),e[e.length-t-1]=f}return e},Math.clz32?c.prototype._countBits=function(e){return 32-Math.clz32(e)}:c.prototype._countBits=function(e){var a=e,t=0;return a>=4096&&(t+=13,a>>>=13),a>=64&&(t+=7,a>>>=7),a>=8&&(t+=4,a>>>=4),a>=2&&(t+=2,a>>>=2),t+a},c.prototype._zeroBits=function(e){if(0===e)return 26;var a=e,t=0;return 0===(8191&a)&&(t+=13,a>>>=13),0===(127&a)&&(t+=7,a>>>=7),0===(15&a)&&(t+=4,a>>>=4),0===(3&a)&&(t+=2,a>>>=2),0===(1&a)&&t++,t},c.prototype.bitLength=function(){var e=0,a=this.words[this.length-1],e=this._countBits(a);return 26*(this.length-1)+e},c.prototype.zeroBits=function(){if(0===this.cmpn(0))return 0;for(var e=0,a=0;ae.length?this.clone().ior(e):e.clone().ior(this)},c.prototype.iand=function(e){this.sign=this.sign&&e.sign;var a;a=this.length>e.length?e:this;for(var t=0;te.length?this.clone().iand(e):e.clone().iand(this)},c.prototype.ixor=function(e){this.sign=this.sign||e.sign;var a,t;this.length>e.length?(a=this,t=e):(a=e,t=this);for(var f=0;fe.length?this.clone().ixor(e):e.clone().ixor(this)},c.prototype.setn=function(e,a){t("number"==typeof e&&e>=0);for(var f=e/26|0,c=e%26;this.length<=f;)this.words[this.length++]=0;return a?this.words[f]=this.words[f]|1<e.length?(t=this,f=e):(t=e,f=this);for(var c=0,r=0;r>>26}for(;0!==c&&r>>26}if(this.length=t.length,0!==c)this.words[this.length]=c,this.length++;else if(t!==this)for(;re.length?this.clone().iadd(e):e.clone().iadd(this)},c.prototype.isub=function(e){if(e.sign){e.sign=!1;var a=this.iadd(e);return e.sign=!0,a._normSign()}if(this.sign)return this.sign=!1,this.iadd(e),this.sign=!0,this._normSign();var t=this.cmp(e);if(0===t)return this.sign=!1,this.length=1,this.words[0]=0,this;var f,c;t>0?(f=this,c=e):(f=e,c=this);for(var r=0,d=0;d>26,this.words[d]=67108863&a}for(;0!==r&&d>26,this.words[d]=67108863&a}if(0===r&&d>>26,r=67108863&t,d=Math.min(f,e.length-1),n=Math.max(0,f-this.length+1);d>=n;n++){var i=f-n,b=0|this.words[i],o=0|e.words[n],s=b*o,u=67108863&s;c=c+(s/67108864|0)|0,u=u+r|0,r=67108863&u,c=c+(u>>>26)|0}a.words[f]=r,t=c}return 0!==t?a.words[f]=t:a.length--,a.strip()},c.prototype._bigMulTo=function(e,a){a.sign=e.sign!==this.sign,a.length=this.length+e.length;for(var t=0,f=0,c=0;c=i;i++){var b=c-i,o=0|this.words[b],s=0|e.words[i],u=o*s,h=67108863&u;r=r+(u/67108864|0)|0,h=h+d|0,d=67108863&h,r=r+(h>>>26)|0,f+=r>>>26,r&=67108863}a.words[c]=d,t=r,r=f}return 0!==t?a.words[c]=t:a.length--,a.strip()},c.prototype.mulTo=function(e,a){var t;return t=this.length+e.length<63?this._smallMulTo(e,a):this._bigMulTo(e,a)},c.prototype.mul=function(e){var a=new c(null);return a.words=new Array(this.length+e.length),this.mulTo(e,a)},c.prototype.imul=function(e){if(0===this.cmpn(0)||0===e.cmpn(0))return this.words[0]=0,this.length=1,this;var a=this.length,t=e.length;this.sign=e.sign!==this.sign,this.length=this.length+e.length,this.words[this.length-1]=0;for(var f=this.length-2;f>=0;f--){for(var c=0,r=0,d=Math.min(f,t-1),n=Math.max(0,f-a+1);d>=n;n++){var i=f-n,b=this.words[i],o=e.words[n],s=b*o,u=67108863&s;c+=s/67108864|0,u+=r,r=67108863&u,c+=u>>>26}this.words[f]=r,this.words[f+1]+=c,c=0}for(var c=0,i=1;i>>26}return this.strip()},c.prototype.imuln=function(e){t("number"==typeof e);for(var a=0,f=0;f>=26,a+=c/67108864|0,a+=r>>>26,this.words[f]=67108863&r}return 0!==a&&(this.words[f]=a,this.length++),this},c.prototype.sqr=function(){return this.mul(this)},c.prototype.isqr=function(){return this.mul(this)},c.prototype.ishln=function(e){t("number"==typeof e&&e>=0);var a=e%26,f=(e-a)/26,c=67108863>>>26-a<<26-a;if(0!==a){for(var r=0,d=0;d>>26-a}r&&(this.words[d]=r,this.length++)}if(0!==f){for(var d=this.length-1;d>=0;d--)this.words[d+f]=this.words[d];for(var d=0;f>d;d++)this.words[d]=0;this.length+=f}return this.strip()},c.prototype.ishrn=function(e,a,f){t("number"==typeof e&&e>=0);var c;c=a?(a-a%26)/26:0;var r=e%26,d=Math.min((e-r)/26,this.length),n=67108863^67108863>>>r<b;b++)i.words[b]=this.words[b];i.length=d}if(0===d);else if(this.length>d){this.length-=d;for(var b=0;b=0&&(0!==o||b>=c);b--){var s=this.words[b];this.words[b]=o<<26-r|s>>>r,o=s&n}return i&&0!==o&&(i.words[i.length++]=o),0===this.length&&(this.words[0]=0,this.length=1),this.strip(),this},c.prototype.shln=function(e){return this.clone().ishln(e)},c.prototype.shrn=function(e){return this.clone().ishrn(e)},c.prototype.testn=function(e){t("number"==typeof e&&e>=0);var a=e%26,f=(e-a)/26,c=1<=0);var a=e%26,f=(e-a)/26;if(t(!this.sign,"imaskn works only with positive numbers"),0!==a&&f++,this.length=Math.min(f,this.length),0!==a){var c=67108863^67108863>>>a<e?this.isubn(-e):this.sign?1===this.length&&this.words[0]=67108864;a++)this.words[a]-=67108864,a===this.length-1?this.words[a+1]=1:this.words[a+1]++;return this.length=Math.max(this.length,a+1),this},c.prototype.isubn=function(e){if(t("number"==typeof e),0>e)return this.iaddn(-e);if(this.sign)return this.sign=!1,this.iaddn(e),this.sign=!0,this;this.words[0]-=e;for(var a=0;a>26)-(b/67108864|0),this.words[c+f]=67108863&i}for(;c>26,this.words[c+f]=67108863&i}if(0===n)return this.strip();t(-1===n),n=0;for(var c=0;c>26,this.words[c]=67108863&i}return this.sign=!0,this.strip()},c.prototype._wordDiv=function(e,a){var t=this.length-e.length,f=this.clone(),r=e,d=r.words[r.length-1],n=this._countBits(d);t=26-n,0!==t&&(r=r.shln(t),f.ishln(t),d=r.words[r.length-1]);var i,b=f.length-r.length;if("mod"!==a){i=new c(null),i.length=b+1,i.words=new Array(i.length);for(var o=0;o=0;u--){var h=67108864*f.words[r.length+u]+f.words[r.length+u-1];for(h=Math.min(h/d|0,67108863),f._ishlnsubmul(r,h,u);f.sign;)h--,f.sign=!1,f._ishlnsubmul(r,1,u),0!==f.cmpn(0)&&(f.sign=!f.sign);i&&(i.words[u]=h)}return i&&i.strip(),f.strip(),"div"!==a&&0!==t&&f.ishrn(t),{div:i?i:null,mod:f}},c.prototype.divmod=function(e,a){if(t(0!==e.cmpn(0)),this.sign&&!e.sign){var f,r,d=this.neg().divmod(e,a);return"mod"!==a&&(f=d.div.neg()),"div"!==a&&(r=0===d.mod.cmpn(0)?d.mod:e.sub(d.mod)),{div:f,mod:r}}if(!this.sign&&e.sign){var f,d=this.divmod(e.neg(),a);return"mod"!==a&&(f=d.div.neg()),{div:f,mod:d.mod}}return this.sign&&e.sign?this.neg().divmod(e.neg(),a):e.length>this.length||this.cmp(e)<0?{div:new c(0),mod:this}:1===e.length?"div"===a?{div:this.divn(e.words[0]),mod:null}:"mod"===a?{div:null,mod:new c(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new c(this.modn(e.words[0]))}:this._wordDiv(e,a)},c.prototype.div=function(e){return this.divmod(e,"div").div},c.prototype.mod=function(e){return this.divmod(e,"mod").mod},c.prototype.divRound=function(e){var a=this.divmod(e);if(0===a.mod.cmpn(0))return a.div;var t=a.div.sign?a.mod.isub(e):a.mod,f=e.shrn(1),c=e.andln(1),r=t.cmp(f);return 0>r||1===c&&0===r?a.div:a.div.sign?a.div.isubn(1):a.div.iaddn(1)},c.prototype.modn=function(e){t(67108863>=e);for(var a=(1<<26)%e,f=0,c=this.length-1;c>=0;c--)f=(a*f+this.words[c])%e;return f},c.prototype.idivn=function(e){t(67108863>=e);for(var a=0,f=this.length-1;f>=0;f--){var c=this.words[f]+67108864*a;this.words[f]=c/e|0,a=c%e}return this.strip()},c.prototype.divn=function(e){return this.clone().idivn(e)},c.prototype.egcd=function(e){t(!e.sign),t(0!==e.cmpn(0));var a=this,f=e.clone();a=a.sign?a.mod(e):a.clone();for(var r=new c(1),d=new c(0),n=new c(0),i=new c(1),b=0;a.isEven()&&f.isEven();)a.ishrn(1),f.ishrn(1),++b;for(var o=f.clone(),s=a.clone();0!==a.cmpn(0);){for(;a.isEven();)a.ishrn(1),r.isEven()&&d.isEven()?(r.ishrn(1),d.ishrn(1)):(r.iadd(o).ishrn(1),d.isub(s).ishrn(1));for(;f.isEven();)f.ishrn(1),n.isEven()&&i.isEven()?(n.ishrn(1),i.ishrn(1)):(n.iadd(o).ishrn(1),i.isub(s).ishrn(1));a.cmp(f)>=0?(a.isub(f),r.isub(n),d.isub(i)):(f.isub(a),n.isub(r),i.isub(d))}return{a:n,b:i,gcd:f.ishln(b)}},c.prototype._invmp=function(e){t(!e.sign),t(0!==e.cmpn(0));var a=this,f=e.clone();a=a.sign?a.mod(e):a.clone();for(var r=new c(1),d=new c(0),n=f.clone();a.cmpn(1)>0&&f.cmpn(1)>0;){for(;a.isEven();)a.ishrn(1),r.isEven()?r.ishrn(1):r.iadd(n).ishrn(1);for(;f.isEven();)f.ishrn(1),d.isEven()?d.ishrn(1):d.iadd(n).ishrn(1);a.cmp(f)>=0?(a.isub(f),r.isub(d)):(f.isub(a),d.isub(r))}return 0===a.cmpn(1)?r:d},c.prototype.gcd=function(e){if(0===this.cmpn(0))return e.clone();if(0===e.cmpn(0))return this.clone();var a=this.clone(),t=e.clone();a.sign=!1,t.sign=!1;for(var f=0;a.isEven()&&t.isEven();f++)a.ishrn(1),t.ishrn(1);for(;;){for(;a.isEven();)a.ishrn(1);for(;t.isEven();)t.ishrn(1);var c=a.cmp(t);if(0>c){var r=a;a=t,t=r}else if(0===c||0===t.cmpn(1))break;a.isub(t)}return t.ishln(f)},c.prototype.invm=function(e){return this.egcd(e).a.mod(e)},c.prototype.isEven=function(){return 0===(1&this.words[0])},c.prototype.isOdd=function(){return 1===(1&this.words[0])},c.prototype.andln=function(e){return this.words[0]&e},c.prototype.bincn=function(e){t("number"==typeof e);var a=e%26,f=(e-a)/26,c=1<r;r++)this.words[r]=0;return this.words[f]|=c,this.length=f+1,this}for(var d=c,r=f;0!==d&&r>>26,n&=67108863,this.words[r]=n}return 0!==d&&(this.words[r]=d,this.length++),this},c.prototype.cmpn=function(e){var a=0>e;if(a&&(e=-e),this.sign&&!a)return-1;if(!this.sign&&a)return 1;e&=67108863,this.strip();var t;if(this.length>1)t=1;else{var f=this.words[0];t=f===e?0:e>f?-1:1}return this.sign&&(t=-t),t},c.prototype.cmp=function(e){if(this.sign&&!e.sign)return-1;if(!this.sign&&e.sign)return 1;var a=this.ucmp(e);return this.sign?-a:a},c.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length=0;t--){var f=this.words[t],c=e.words[t];if(f!==c){c>f?a=-1:f>c&&(a=1);break}}return a},c.red=function(e){return new u(e)},c.prototype.toRed=function(e){return t(!this.red,"Already a number in reduction context"),t(!this.sign,"red works only with positives"),e.convertTo(this)._forceRed(e)},c.prototype.fromRed=function(){return t(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},c.prototype._forceRed=function(e){return this.red=e,this},c.prototype.forceRed=function(e){return t(!this.red,"Already a number in reduction context"),this._forceRed(e)},c.prototype.redAdd=function(e){return t(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},c.prototype.redIAdd=function(e){return t(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},c.prototype.redSub=function(e){return t(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},c.prototype.redISub=function(e){return t(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},c.prototype.redShl=function(e){return t(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},c.prototype.redMul=function(e){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},c.prototype.redIMul=function(e){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},c.prototype.redSqr=function(){return t(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},c.prototype.redISqr=function(){return t(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},c.prototype.redSqrt=function(){return t(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},c.prototype.redInvm=function(){return t(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},c.prototype.redNeg=function(){return t(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},c.prototype.redPow=function(e){return t(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var m={k256:null,p224:null,p192:null,p25519:null};n.prototype._tmp=function(){var e=new c(null);return e.words=new Array(Math.ceil(this.n/13)),e},n.prototype.ireduce=function(e){var a,t=e;do this.split(t,this.tmp),t=this.imulK(t),t=t.iadd(this.tmp),a=t.bitLength();while(a>this.n);var f=a0?t.isub(this.p):t.strip(),t},n.prototype.split=function(e,a){e.ishrn(this.n,0,a)},n.prototype.imulK=function(e){return e.imul(this.k)},f(i,n),i.prototype.split=function(e,a){for(var t=4194303,f=Math.min(e.length,9),c=0;f>c;c++)a.words[c]=e.words[c];if(a.length=f,e.length<=9)return e.words[0]=0,void(e.length=1);var r=e.words[9];a.words[a.length++]=r&t;for(var c=10;c>>22, -r=d}e.words[c-10]=r>>>22,e.length-=9},i.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var a,t=0,f=0;f>>=26,e.words[t]=c,a=f}return 0!==a&&(e.words[e.length++]=a),e},c._prime=function v(e){if(m[e])return m[e];var v;if("k256"===e)v=new i;else if("p224"===e)v=new b;else if("p192"===e)v=new o;else{if("p25519"!==e)throw new Error("Unknown prime "+e);v=new s}return m[e]=v,v},u.prototype._verify1=function(e){t(!e.sign,"red works only with positives"),t(e.red,"red works only with red numbers")},u.prototype._verify2=function(e,a){t(!e.sign&&!a.sign,"red works only with positives"),t(e.red&&e.red===a.red,"red works only with red numbers")},u.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.mod(this.m)._forceRed(this)},u.prototype.neg=function(e){var a=e.clone();return a.sign=!a.sign,a.iadd(this.m)._forceRed(this)},u.prototype.add=function(e,a){this._verify2(e,a);var t=e.add(a);return t.cmp(this.m)>=0&&t.isub(this.m),t._forceRed(this)},u.prototype.iadd=function(e,a){this._verify2(e,a);var t=e.iadd(a);return t.cmp(this.m)>=0&&t.isub(this.m),t},u.prototype.sub=function(e,a){this._verify2(e,a);var t=e.sub(a);return t.cmpn(0)<0&&t.iadd(this.m),t._forceRed(this)},u.prototype.isub=function(e,a){this._verify2(e,a);var t=e.isub(a);return t.cmpn(0)<0&&t.iadd(this.m),t},u.prototype.shl=function(e,a){return this._verify1(e),this.imod(e.shln(a))},u.prototype.imul=function(e,a){return this._verify2(e,a),this.imod(e.imul(a))},u.prototype.mul=function(e,a){return this._verify2(e,a),this.imod(e.mul(a))},u.prototype.isqr=function(e){return this.imul(e,e)},u.prototype.sqr=function(e){return this.mul(e,e)},u.prototype.sqrt=function(e){if(0===e.cmpn(0))return e.clone();var a=this.m.andln(3);if(t(a%2===1),3===a){var f=this.m.add(new c(1)).ishrn(2),r=this.pow(e,f);return r}for(var d=this.m.subn(1),n=0;0!==d.cmpn(0)&&0===d.andln(1);)n++,d.ishrn(1);t(0!==d.cmpn(0));var i=new c(1).toRed(this),b=i.redNeg(),o=this.m.subn(1).ishrn(1),s=this.m.bitLength();for(s=new c(2*s*s).toRed(this);0!==this.pow(s,o).cmp(b);)s.redIAdd(b);for(var u=this.pow(s,d),r=this.pow(e,d.addn(1).ishrn(1)),h=this.pow(e,d),l=n;0!==h.cmp(i);){for(var p=h,g=0;0!==p.cmp(i);g++)p=p.redSqr();t(l>g);var m=this.pow(u,new c(1).ishln(l-g-1));r=r.redMul(m),u=m.redSqr(),h=h.redMul(u),l=g}return r},u.prototype.invm=function(e){var a=e._invmp(this.m);return a.sign?(a.sign=!1,this.imod(a).redNeg()):this.imod(a)},u.prototype.pow=function(e,a){var t=[];if(0===a.cmpn(0))return new c(1);for(var f=a.clone();0!==f.cmpn(0);)t.push(f.andln(1)),f.ishrn(1);for(var r=e,d=0;d=0?r=c.isub(this.m):c.cmpn(0)<0&&(r=c.iadd(this.m)),r._forceRed(this)},h.prototype.mul=function(e,a){if(0===e.cmpn(0)||0===a.cmpn(0))return new c(0)._forceRed(this);var t=e.mul(a),f=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=t.isub(f).ishrn(this.shift),d=r;return r.cmp(this.m)>=0?d=r.isub(this.m):r.cmpn(0)<0&&(d=r.iadd(this.m)),d._forceRed(this)},h.prototype.invm=function(e){var a=this.imod(e._invmp(this.m).mul(this.r2));return a._forceRed(this)}}("undefined"==typeof a||a,this)},{}],54:[function(e,a,t){function f(e){if(0===e.length)return"";var a,t,f=[0];for(a=0;a>8,f[t]&=255;for(;r;)f.push(255&r),r>>=8}for(a=0;"1"===e[a]&&aa[f]?1:0,0==t);++f);return 0==t&&(a.length>e.length?t=-1:e.length>a.length&&(t=1)),t}},{}],56:[function(e,a,t){"use strict";var f=t;f.version=e("../package.json").version,f.utils=e("./elliptic/utils"),f.rand=e("brorand"),f.hmacDRBG=e("./elliptic/hmac-drbg"),f.curve=e("./elliptic/curve"),f.curves=e("./elliptic/curves"),f.ec=e("./elliptic/ec")},{"../package.json":76,"./elliptic/curve":59,"./elliptic/curves":62,"./elliptic/ec":63,"./elliptic/hmac-drbg":66,"./elliptic/utils":68,brorand:69}],57:[function(e,a,t){"use strict";function f(e,a){this.type=e,this.p=new r(a.p,16),this.red=a.prime?r.red(a.prime):r.mont(this.p),this.zero=new r(0).toRed(this.red),this.one=new r(1).toRed(this.red),this.two=new r(2).toRed(this.red),this.n=a.n&&new r(a.n,16),this.g=a.g&&this.pointFromJSON(a.g,a.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4)}function c(e,a){this.curve=e,this.type=a,this.precomputed=null}var r=e("bn.js"),d=e("../../elliptic"),n=d.utils.getNAF,i=d.utils.getJSF,b=d.utils.assert;a.exports=f,f.prototype.point=function(){throw new Error("Not implemented")},f.prototype.validate=function(){throw new Error("Not implemented")},f.prototype._fixedNafMul=function(e,a){var t=e._getDoubles(),f=n(a,1),c=(1<=d;a--)i=(i<<1)+f[a];r.push(i)}for(var b=this.jpoint(null,null,null),o=this.jpoint(null,null,null),s=c;s>0;s--){for(var d=0;d=0;i--){for(var a=0;i>=0&&0===r[i];i--)a++;if(i>=0&&a++,d=d.dblp(a),0>i)break;var o=r[i];b(0!==o),d="affine"===e.type?o>0?d.mixedAdd(c[o-1>>1]):d.mixedAdd(c[-o-1>>1].neg()):o>0?d.add(c[o-1>>1]):d.add(c[-o-1>>1].neg())}return"affine"===e.type?d.toP():d},f.prototype._wnafMulAdd=function(e,a,t,f){for(var c=this._wnafT1,r=this._wnafT2,d=this._wnafT3,b=0,o=0;f>o;o++){var s=a[o],u=s._getNAFPoints(e);c[o]=u.wnd,r[o]=u.points}for(var o=f-1;o>=1;o-=2){var h=o-1,l=o;if(1===c[h]&&1===c[l]){var p=[a[h],null,null,a[l]];0===a[h].y.cmp(a[l].y)?(p[1]=a[h].add(a[l]),p[2]=a[h].toJ().mixedAdd(a[l].neg())):0===a[h].y.cmp(a[l].y.redNeg())?(p[1]=a[h].toJ().mixedAdd(a[l]),p[2]=a[h].add(a[l].neg())):(p[1]=a[h].toJ().mixedAdd(a[l]),p[2]=a[h].toJ().mixedAdd(a[l].neg()));var g=[-3,-1,-5,-7,0,7,5,1,3],m=i(t[h],t[l]);b=Math.max(m[0].length,b),d[h]=new Array(b),d[l]=new Array(b);for(var v=0;b>v;v++){var y=0|m[0][v],w=0|m[1][v];d[h][v]=g[3*(y+1)+(w+1)],d[l][v]=0,r[h]=p}}else d[h]=n(t[h],c[h]),d[l]=n(t[l],c[l]),b=Math.max(d[h].length,b),b=Math.max(d[l].length,b)}for(var _=this.jpoint(null,null,null),S=this._wnafT4,o=b;o>=0;o--){for(var A=0;o>=0;){for(var I=!0,v=0;f>v;v++)S[v]=0|d[v][o],0!==S[v]&&(I=!1);if(!I)break;A++,o--}if(o>=0&&A++,_=_.dblp(A),0>o)break;for(var v=0;f>v;v++){var s,E=S[v];0!==E&&(E>0?s=r[v][E-1>>1]:0>E&&(s=r[v][-E-1>>1].neg()),_="affine"===s.type?_.mixedAdd(s):_.add(s))}}for(var o=0;f>o;o++)r[o]=null;return _.toP()},f.BasePoint=c,c.prototype.validate=function(){return this.curve.validate(this)},c.prototype.precompute=function(e){if(this.precomputed)return this;var a={doubles:null,naf:null,beta:null};return a.naf=this._getNAFPoints(8),a.doubles=this._getDoubles(4,e),a.beta=this._getBeta(),this.precomputed=a,this},c.prototype._getDoubles=function(e,a){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var t=[this],f=this,c=0;a>c;c+=e){for(var r=0;e>r;r++)f=f.dbl();t.push(f)}return{step:e,points:t}},c.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var a=[this],t=(1<c;c++)a[c]=a[c-1].add(f);return{wnd:e,points:a}},c.prototype._getBeta=function(){return null},c.prototype.dblp=function(e){for(var a=this,t=0;e>t;t++)a=a.dbl();return a}},{"../../elliptic":56,"bn.js":53}],58:[function(e,a,t){"use strict";function f(e){this.twisted=1!==(0|e.a),this.mOneA=this.twisted&&-1===(0|e.a),this.extended=this.mOneA,b.call(this,"edwards",e),this.a=new n(e.a,16).mod(this.red.m).toRed(this.red),this.c=new n(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new n(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),o(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|e.c)}function c(e,a,t,f,c){b.BasePoint.call(this,e,"projective"),null===a&&null===t&&null===f?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new n(a,16),this.y=new n(t,16),this.z=f?new n(f,16):this.curve.one,this.t=c&&new n(c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var r=e("../curve"),d=e("../../elliptic"),n=e("bn.js"),i=e("inherits"),b=r.base,o=d.utils.assert;i(f,b),a.exports=f,f.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},f.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},f.prototype.jpoint=function(e,a,t,f){return this.point(e,a,t,f)},f.prototype.pointFromX=function(e,a){a=new n(a,16),a.red||(a=a.toRed(this.red));var t=a.redSqr(),f=this.c2.redSub(this.a.redMul(t)),c=this.one.redSub(this.c2.redMul(this.d).redMul(t)),d=f.redMul(c.redInvm()).redSqrt(),i=d.fromRed().isOdd();return(e&&!i||!e&&i)&&(d=d.redNeg()),this.point(a,d,r.one)},f.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var a=e.x.redSqr(),t=e.y.redSqr(),f=a.redMul(this.a).redAdd(t),c=this.c2.redMul(this.one.redAdd(this.d.redMul(a).redMul(t)));return 0===f.cmp(c)},i(c,b.BasePoint),f.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},f.prototype.point=function(e,a,t,f){return new c(this,e,a,t,f)},c.fromJSON=function(e,a){return new c(e,a[0],a[1],a[2])},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},c.prototype._extDbl=function(){var e=this.x.redSqr(),a=this.y.redSqr(),t=this.z.redSqr();t=t.redIAdd(t);var f=this.curve._mulA(e),c=this.x.redAdd(this.y).redSqr().redISub(e).redISub(a),r=f.redAdd(a),d=r.redSub(t),n=f.redSub(a),i=c.redMul(d),b=r.redMul(n),o=c.redMul(n),s=d.redMul(r);return this.curve.point(i,b,s,o)},c.prototype._projDbl=function(){var e,a,t,f=this.x.redAdd(this.y).redSqr(),c=this.x.redSqr(),r=this.y.redSqr();if(this.curve.twisted){var d=this.curve._mulA(c),n=d.redAdd(r);if(this.zOne)e=f.redSub(c).redSub(r).redMul(n.redSub(this.curve.two)),a=n.redMul(d.redSub(r)),t=n.redSqr().redSub(n).redSub(n);else{var i=this.z.redSqr(),b=n.redSub(i).redISub(i);e=f.redSub(c).redISub(r).redMul(b),a=n.redMul(d.redSub(r)),t=n.redMul(b)}}else{var d=c.redAdd(r),i=this.curve._mulC(this.c.redMul(this.z)).redSqr(),b=d.redSub(i).redSub(i);e=this.curve._mulC(f.redISub(d)).redMul(b),a=this.curve._mulC(d).redMul(c.redISub(r)),t=d.redMul(b)}return this.curve.point(e,a,t)},c.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},c.prototype._extAdd=function(e){var a=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),t=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),f=this.t.redMul(this.curve.dd).redMul(e.t),c=this.z.redMul(e.z.redAdd(e.z)),r=t.redSub(a),d=c.redSub(f),n=c.redAdd(f),i=t.redAdd(a),b=r.redMul(d),o=n.redMul(i),s=r.redMul(i),u=d.redMul(n);return this.curve.point(b,o,u,s)},c.prototype._projAdd=function(e){var a,t,f=this.z.redMul(e.z),c=f.redSqr(),r=this.x.redMul(e.x),d=this.y.redMul(e.y),n=this.curve.d.redMul(r).redMul(d),i=c.redSub(n),b=c.redAdd(n),o=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(r).redISub(d),s=f.redMul(i).redMul(o);return this.curve.twisted?(a=f.redMul(b).redMul(d.redSub(this.curve._mulA(r))),t=i.redMul(b)):(a=f.redMul(b).redMul(d.redSub(r)),t=this.curve._mulC(i).redMul(b)),this.curve.point(s,a,t)},c.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},c.prototype.mul=function(e){return this.precomputed&&this.precomputed.doubles?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,a,t){return this.curve._wnafMulAdd(1,[this,a],[e,t],2)},c.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},c.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()},c.prototype.getY=function(){return this.normalize(),this.y.fromRed()},c.prototype.toP=c.prototype.normalize,c.prototype.mixedAdd=c.prototype.add},{"../../elliptic":56,"../curve":59,"bn.js":53,inherits:77}],59:[function(e,a,t){"use strict";var f=t;f.base=e("./base"),f["short"]=e("./short"),f.mont=e("./mont"),f.edwards=e("./edwards")},{"./base":57,"./edwards":58,"./mont":60,"./short":61}],60:[function(e,a,t){"use strict";function f(e){i.call(this,"mont",e),this.a=new d(e.a,16).toRed(this.red),this.b=new d(e.b,16).toRed(this.red),this.i4=new d(4).toRed(this.red).redInvm(),this.two=new d(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function c(e,a,t){i.BasePoint.call(this,e,"projective"),null===a&&null===t?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new d(a,16),this.z=new d(t,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var r=e("../curve"),d=e("bn.js"),n=e("inherits"),i=r.base;n(f,i),a.exports=f,f.prototype.validate=function(e){var a=e.normalize().x,t=a.redSqr(),f=t.redMul(a).redAdd(t.redMul(this.a)).redAdd(a),c=f.redSqrt();return 0===c.redSqr().cmp(f)},n(c,i.BasePoint),f.prototype.point=function(e,a){return new c(this,e,a)},f.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},c.prototype.precompute=function(){},c.fromJSON=function(e,a){return new c(e,a[0],a[1]||e.one)},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},c.prototype.dbl=function(){var e=this.x.redAdd(this.z),a=e.redSqr(),t=this.x.redSub(this.z),f=t.redSqr(),c=a.redSub(f),r=a.redMul(f),d=c.redMul(f.redAdd(this.curve.a24.redMul(c)));return this.curve.point(r,d)},c.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.diffAdd=function(e,a){var t=this.x.redAdd(this.z),f=this.x.redSub(this.z),c=e.x.redAdd(e.z),r=e.x.redSub(e.z),d=r.redMul(t),n=c.redMul(f),i=a.z.redMul(d.redAdd(n).redSqr()),b=a.x.redMul(d.redISub(n).redSqr());return this.curve.point(i,b)},c.prototype.mul=function(e){for(var a=e.clone(),t=this,f=this.curve.point(null,null),c=this,r=[];0!==a.cmpn(0);a.ishrn(1))r.push(a.andln(1));for(var d=r.length-1;d>=0;d--)0===r[d]?(t=t.diffAdd(f,c),f=f.dbl()):(f=t.diffAdd(f,c),t=t.dbl());return f},c.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../curve":59,"bn.js":53,inherits:77}],61:[function(e,a,t){"use strict";function f(e){o.call(this,"short",e),this.a=new i(e.a,16).toRed(this.red),this.b=new i(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function c(e,a,t,f){o.BasePoint.call(this,e,"affine"),null===a&&null===t?(this.x=null,this.y=null,this.inf=!0):(this.x=new i(a,16),this.y=new i(t,16),f&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function r(e,a,t,f){o.BasePoint.call(this,e,"jacobian"),null===a&&null===t&&null===f?(this.x=this.curve.one,this.y=this.curve.one,this.z=new i(0)):(this.x=new i(a,16),this.y=new i(t,16),this.z=new i(f,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var d=e("../curve"),n=e("../../elliptic"),i=e("bn.js"),b=e("inherits"),o=d.base,s=n.utils.assert;b(f,o),a.exports=f,f.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var a,t;if(e.beta)a=new i(e.beta,16).toRed(this.red);else{var f=this._getEndoRoots(this.p);a=f[0].cmp(f[1])<0?f[0]:f[1],a=a.toRed(this.red)}if(e.lambda)t=new i(e.lambda,16);else{var c=this._getEndoRoots(this.n);0===this.g.mul(c[0]).x.cmp(this.g.x.redMul(a))?t=c[0]:(t=c[1],s(0===this.g.mul(t).x.cmp(this.g.x.redMul(a))))}var r;return r=e.basis?e.basis.map(function(e){return{a:new i(e.a,16),b:new i(e.b,16)}}):this._getEndoBasis(t),{beta:a,lambda:t,basis:r}}},f.prototype._getEndoRoots=function(e){var a=e===this.p?this.red:i.mont(e),t=new i(2).toRed(a).redInvm(),f=t.redNeg(),c=new i(3).toRed(a).redNeg().redSqrt().redMul(t),r=f.redAdd(c).fromRed(),d=f.redSub(c).fromRed();return[r,d]},f.prototype._getEndoBasis=function(e){for(var a,t,f,c,r,d,n,b,o,s=this.n.shrn(Math.floor(this.n.bitLength()/2)),u=e,h=this.n.clone(),l=new i(1),p=new i(0),g=new i(0),m=new i(1),v=0;0!==u.cmpn(0);){var y=h.div(u);b=h.sub(y.mul(u)),o=g.sub(y.mul(l));var w=m.sub(y.mul(p));if(!f&&b.cmp(s)<0)a=n.neg(),t=l,f=b.neg(),c=o;else if(f&&2===++v)break;n=b,h=u,u=b,g=l,l=o,m=p,p=w}r=b.neg(),d=o;var _=f.sqr().add(c.sqr()),S=r.sqr().add(d.sqr());return S.cmp(_)>=0&&(r=a,d=t),f.sign&&(f=f.neg(),c=c.neg()),r.sign&&(r=r.neg(),d=d.neg()),[{a:f,b:c},{a:r,b:d}]},f.prototype._endoSplit=function(e){var a=this.endo.basis,t=a[0],f=a[1],c=f.b.mul(e).divRound(this.n),r=t.b.neg().mul(e).divRound(this.n),d=c.mul(t.a),n=r.mul(f.a),i=c.mul(t.b),b=r.mul(f.b),o=e.sub(d).sub(n),s=i.add(b).neg();return{k1:o,k2:s}},f.prototype.pointFromX=function(e,a){a=new i(a,16),a.red||(a=a.toRed(this.red));var t=a.redSqr().redMul(a).redIAdd(a.redMul(this.a)).redIAdd(this.b),f=t.redSqrt(),c=f.fromRed().isOdd();return(e&&!c||!e&&c)&&(f=f.redNeg()),this.point(a,f)},f.prototype.validate=function(e){if(e.inf)return!0;var a=e.x,t=e.y,f=this.a.redMul(a),c=a.redSqr().redMul(a).redIAdd(f).redIAdd(this.b);return 0===t.redSqr().redISub(c).cmpn(0)},f.prototype._endoWnafMulAdd=function(e,a){for(var t=this._endoWnafT1,f=this._endoWnafT2,c=0;cb;b++)t[b]=null,f[b]=null;return i},b(c,o.BasePoint),f.prototype.point=function(e,a,t){return new c(this,e,a,t)},f.prototype.pointFromJSON=function(e,a){return c.fromJSON(this,e,a)},c.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var a=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var t=this.curve,f=function(e){return t.point(e.x.redMul(t.endo.beta),e.y)};e.beta=a,a.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(f)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(f)}}}return a}},c.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},c.fromJSON=function(e,a,t){function f(a){return e.point(a[0],a[1],t)}"string"==typeof a&&(a=JSON.parse(a));var c=e.point(a[0],a[1],t);if(!a[2])return c;var r=a[2];return c.precomputed={beta:null,doubles:r.doubles&&{step:r.doubles.step,points:[c].concat(r.doubles.points.map(f))},naf:r.naf&&{wnd:r.naf.wnd,points:[c].concat(r.naf.points.map(f))}},c},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return this.inf},c.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var a=this.y.redSub(e.y);0!==a.cmpn(0)&&(a=a.redMul(this.x.redSub(e.x).redInvm()));var t=a.redSqr().redISub(this.x).redISub(e.x),f=a.redMul(this.x.redSub(t)).redISub(this.y);return this.curve.point(t,f)},c.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var a=this.curve.a,t=this.x.redSqr(),f=e.redInvm(),c=t.redAdd(t).redIAdd(t).redIAdd(a).redMul(f),r=c.redSqr().redISub(this.x.redAdd(this.x)),d=c.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,d)},c.prototype.getX=function(){return this.x.fromRed()},c.prototype.getY=function(){return this.y.fromRed()},c.prototype.mul=function(e){return e=new i(e,16),this.precomputed&&this.precomputed.doubles?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,a,t){var f=[this,a],c=[e,t];return this.curve.endo?this.curve._endoWnafMulAdd(f,c):this.curve._wnafMulAdd(1,f,c,2)},c.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},c.prototype.neg=function(e){if(this.inf)return this;var a=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var t=this.precomputed,f=function(e){return e.neg()};a.precomputed={naf:t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(f)},doubles:t.doubles&&{step:t.doubles.step,points:t.doubles.points.map(f)}}}return a},c.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var e=this.curve.jpoint(this.x,this.y,this.curve.one);return e},b(r,o.BasePoint),f.prototype.jpoint=function(e,a,t){return new r(this,e,a,t)},r.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),a=e.redSqr(),t=this.x.redMul(a),f=this.y.redMul(a).redMul(e);return this.curve.point(t,f)},r.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},r.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var a=e.z.redSqr(),t=this.z.redSqr(),f=this.x.redMul(a),c=e.x.redMul(t),r=this.y.redMul(a.redMul(e.z)),d=e.y.redMul(t.redMul(this.z)),n=f.redSub(c),i=r.redSub(d);if(0===n.cmpn(0))return 0!==i.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var b=n.redSqr(),o=b.redMul(n),s=f.redMul(b),u=i.redSqr().redIAdd(o).redISub(s).redISub(s),h=i.redMul(s.redISub(u)).redISub(r.redMul(o)),l=this.z.redMul(e.z).redMul(n);return this.curve.jpoint(u,h,l)},r.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var a=this.z.redSqr(),t=this.x,f=e.x.redMul(a),c=this.y,r=e.y.redMul(a).redMul(this.z),d=t.redSub(f),n=c.redSub(r);if(0===d.cmpn(0))return 0!==n.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var i=d.redSqr(),b=i.redMul(d),o=t.redMul(i),s=n.redSqr().redIAdd(b).redISub(o).redISub(o),u=n.redMul(o.redISub(s)).redISub(c.redMul(b)),h=this.z.redMul(d);return this.curve.jpoint(s,u,h)},r.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var a=this,t=0;e>t;t++)a=a.dbl();return a}for(var f=this.curve.a,c=this.curve.tinv,r=this.x,d=this.y,n=this.z,i=n.redSqr().redSqr(),b=d.redAdd(d),t=0;e>t;t++){var o=r.redSqr(),s=b.redSqr(),u=s.redSqr(),h=o.redAdd(o).redIAdd(o).redIAdd(f.redMul(i)),l=r.redMul(s),p=h.redSqr().redISub(l.redAdd(l)),g=l.redISub(p),m=h.redMul(g);m=m.redIAdd(m).redISub(u);var v=b.redMul(n);e>t+1&&(i=i.redMul(u)),r=p,n=v,b=m}return this.curve.jpoint(r,b.redMul(c),n)},r.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},r.prototype._zeroDbl=function(){var e,a,t;if(this.zOne){var f=this.x.redSqr(),c=this.y.redSqr(),r=c.redSqr(),d=this.x.redAdd(c).redSqr().redISub(f).redISub(r);d=d.redIAdd(d);var n=f.redAdd(f).redIAdd(f),i=n.redSqr().redISub(d).redISub(d),b=r.redIAdd(r);b=b.redIAdd(b),b=b.redIAdd(b),e=i,a=n.redMul(d.redISub(i)).redISub(b),t=this.y.redAdd(this.y)}else{var o=this.x.redSqr(),s=this.y.redSqr(),u=s.redSqr(),h=this.x.redAdd(s).redSqr().redISub(o).redISub(u);h=h.redIAdd(h);var l=o.redAdd(o).redIAdd(o),p=l.redSqr(),g=u.redIAdd(u);g=g.redIAdd(g),g=g.redIAdd(g),e=p.redISub(h).redISub(h),a=l.redMul(h.redISub(e)).redISub(g),t=this.y.redMul(this.z),t=t.redIAdd(t)}return this.curve.jpoint(e,a,t)},r.prototype._threeDbl=function(){var e,a,t;if(this.zOne){var f=this.x.redSqr(),c=this.y.redSqr(),r=c.redSqr(),d=this.x.redAdd(c).redSqr().redISub(f).redISub(r);d=d.redIAdd(d);var n=f.redAdd(f).redIAdd(f).redIAdd(this.curve.a),i=n.redSqr().redISub(d).redISub(d);e=i;var b=r.redIAdd(r);b=b.redIAdd(b),b=b.redIAdd(b),a=n.redMul(d.redISub(i)).redISub(b),t=this.y.redAdd(this.y)}else{var o=this.z.redSqr(),s=this.y.redSqr(),u=this.x.redMul(s),h=this.x.redSub(o).redMul(this.x.redAdd(o));h=h.redAdd(h).redIAdd(h);var l=u.redIAdd(u);l=l.redIAdd(l);var p=l.redAdd(l);e=h.redSqr().redISub(p),t=this.y.redAdd(this.z).redSqr().redISub(s).redISub(o);var g=s.redSqr();g=g.redIAdd(g),g=g.redIAdd(g),g=g.redIAdd(g),a=h.redMul(l.redISub(e)).redISub(g)}return this.curve.jpoint(e,a,t)},r.prototype._dbl=function(){var e=this.curve.a,a=this.x,t=this.y,f=this.z,c=f.redSqr().redSqr(),r=a.redSqr(),d=t.redSqr(),n=r.redAdd(r).redIAdd(r).redIAdd(e.redMul(c)),i=a.redAdd(a);i=i.redIAdd(i);var b=i.redMul(d),o=n.redSqr().redISub(b.redAdd(b)),s=b.redISub(o),u=d.redSqr();u=u.redIAdd(u),u=u.redIAdd(u),u=u.redIAdd(u);var h=n.redMul(s).redISub(u),l=t.redAdd(t).redMul(f);return this.curve.jpoint(o,h,l)},r.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),a=this.y.redSqr(),t=this.z.redSqr(),f=a.redSqr(),c=e.redAdd(e).redIAdd(e),r=c.redSqr(),d=this.x.redAdd(a).redSqr().redISub(e).redISub(f);d=d.redIAdd(d),d=d.redAdd(d).redIAdd(d),d=d.redISub(r);var n=d.redSqr(),i=f.redIAdd(f);i=i.redIAdd(i),i=i.redIAdd(i),i=i.redIAdd(i);var b=c.redIAdd(d).redSqr().redISub(r).redISub(n).redISub(i),o=a.redMul(b);o=o.redIAdd(o),o=o.redIAdd(o);var s=this.x.redMul(n).redISub(o);s=s.redIAdd(s),s=s.redIAdd(s);var u=this.y.redMul(b.redMul(i.redISub(b)).redISub(d.redMul(n)));u=u.redIAdd(u),u=u.redIAdd(u),u=u.redIAdd(u);var h=this.z.redAdd(d).redSqr().redISub(t).redISub(n);return this.curve.jpoint(s,u,h)},r.prototype.mul=function(e,a){return e=new i(e,a),this.curve._wnafMul(this,e)},r.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var a=this.z.redSqr(),t=e.z.redSqr();if(0!==this.x.redMul(t).redISub(e.x.redMul(a)).cmpn(0))return!1;var f=a.redMul(this.z),c=t.redMul(e.z);return 0===this.y.redMul(c).redISub(e.y.redMul(f)).cmpn(0)},r.prototype.inspect=function(){return this.isInfinity()?"":""},r.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../../elliptic":56,"../curve":59,"bn.js":53,inherits:77}],62:[function(e,a,t){"use strict";function f(e){"short"===e.type?this.curve=new n.curve["short"](e):"edwards"===e.type?this.curve=new n.curve.edwards(e):this.curve=new n.curve.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,i(this.g.validate(),"Invalid curve"),i(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function c(e,a){Object.defineProperty(r,e,{configurable:!0,enumerable:!0,get:function(){var t=new f(a);return Object.defineProperty(r,e,{configurable:!0,enumerable:!0,value:t}),t}})}var r=t,d=e("hash.js"),n=e("../elliptic"),i=n.utils.assert;r.PresetCurve=f,c("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:d.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),c("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:d.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),c("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:d.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),c("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"0",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:d.sha256,gRed:!1,g:["9"]}),c("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:d.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var b;try{b=e("./precomputed/secp256k1")}catch(o){b=void 0}c("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141", -h:"1",hash:d.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",b]})},{"../elliptic":56,"./precomputed/secp256k1":67,"hash.js":70}],63:[function(e,a,t){"use strict";function f(e){return this instanceof f?("string"==typeof e&&(n(r.curves.hasOwnProperty(e),"Unknown curve "+e),e=r.curves[e]),e instanceof r.curves.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.shrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),void(this.hash=e.hash||e.curve.hash)):new f(e)}var c=e("bn.js"),r=e("../../elliptic"),d=r.utils,n=d.assert,i=e("./key"),b=e("./signature");a.exports=f,f.prototype.keyPair=function(e){return new i(this,e)},f.prototype.keyFromPrivate=function(e,a){return i.fromPrivate(this,e,a)},f.prototype.keyFromPublic=function(e,a){return i.fromPublic(this,e,a)},f.prototype.genKeyPair=function(e){e||(e={});for(var a=new r.hmacDRBG({hash:this.hash,pers:e.pers,entropy:e.entropy||r.rand(this.hash.hmacStrength),nonce:this.n.toArray()}),t=this.n.byteLength(),f=this.n.sub(new c(2));;){var d=new c(a.generate(t));if(!(d.cmp(f)>0))return d.iaddn(1),this.keyFromPrivate(d)}},f.prototype._truncateToN=function(e,a){var t=8*e.byteLength()-this.n.bitLength();return t>0&&(e=e.shrn(t)),!a&&e.cmp(this.n)>=0?e.sub(this.n):e},f.prototype.sign=function(e,a,t,f){"object"==typeof t&&(f=t,t=null),f||(f={}),a=this.keyFromPrivate(a,t),e=this._truncateToN(new c(e,16));for(var d=this.n.byteLength(),n=a.getPrivate().toArray(),i=n.length;21>i;i++)n.unshift(0);for(var o=e.toArray(),i=o.length;d>i;i++)o.unshift(0);for(var s=new r.hmacDRBG({hash:this.hash,entropy:n,nonce:o}),u=this.n.sub(new c(1));;){var h=new c(s.generate(this.n.byteLength()));if(h=this._truncateToN(h,!0),!(h.cmpn(1)<=0||h.cmp(u)>=0)){var l=this.g.mul(h);if(!l.isInfinity()){var p=l.getX().mod(this.n);if(0!==p.cmpn(0)){var g=h.invm(this.n).mul(p.mul(a.getPrivate()).iadd(e)).mod(this.n);if(0!==g.cmpn(0))return f.canonical&&g.cmp(this.nh)>0&&(g=this.n.sub(g)),new b({r:p,s:g})}}}}},f.prototype.verify=function(e,a,t,f){e=this._truncateToN(new c(e,16)),t=this.keyFromPublic(t,f),a=new b(a,"hex");var r=a.r,d=a.s;if(r.cmpn(1)<0||r.cmp(this.n)>=0)return!1;if(d.cmpn(1)<0||d.cmp(this.n)>=0)return!1;var n=d.invm(this.n),i=n.mul(e).mod(this.n),o=n.mul(r).mod(this.n),s=this.g.mulAdd(i,t.getPublic(),o);return s.isInfinity()?!1:0===s.getX().mod(this.n).cmp(r)}},{"../../elliptic":56,"./key":64,"./signature":65,"bn.js":53}],64:[function(e,a,t){"use strict";function f(e,a){this.ec=e,this.priv=null,this.pub=null,a.priv&&this._importPrivate(a.priv,a.privEnc),a.pub&&this._importPublic(a.pub,a.pubEnc)}var c=e("bn.js"),r=e("../../elliptic"),d=r.utils;a.exports=f,f.fromPublic=function(e,a,t){return a instanceof f?a:new f(e,{pub:a,pubEnc:t})},f.fromPrivate=function(e,a,t){return a instanceof f?a:new f(e,{priv:a,privEnc:t})},f.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},f.prototype.getPublic=function(e,a){if(this.pub||(this.pub=this.ec.g.mul(this.priv)),"string"==typeof e&&(a=e,e=null),!a)return this.pub;for(var t=this.ec.curve.p.byteLength(),f=this.pub.getX().toArray(),c=f.length;t>c;c++)f.unshift(0);var r;if("mont"!==this.ec.curve.type)if(e)r=[this.pub.getY().isEven()?2:3].concat(f);else{for(var n=this.pub.getY().toArray(),c=n.length;t>c;c++)n.unshift(0);var r=[4].concat(f,n)}else r=f;return d.encode(r,a)},f.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},f.prototype._importPrivate=function(e,a){this.priv=new c(e,a||16),this.priv=this.priv.mod(this.ec.curve.n)},f.prototype._importPublic=function(e,a){return e.x||e.y?void(this.pub=this.ec.curve.point(e.x,e.y)):(e=d.toArray(e,a),"mont"!==this.ec.curve.type?this._importPublicShort(e):this._importPublicMont(e))},f.prototype._importPublicShort=function(e){var a=this.ec.curve.p.byteLength();4===e[0]&&e.length-1===2*a?this.pub=this.ec.curve.point(e.slice(1,1+a),e.slice(1+a,1+2*a)):2!==e[0]&&3!==e[0]||e.length-1!==a||(this.pub=this.ec.curve.pointFromX(3===e[0],e.slice(1,1+a)))},f.prototype._importPublicMont=function(e){this.pub=this.ec.curve.point(e,1)},f.prototype.derive=function(e){return e.mul(this.priv).getX()},f.prototype.sign=function(e){return this.ec.sign(e,this)},f.prototype.verify=function(e,a){return this.ec.verify(e,a,this)},f.prototype.inspect=function(){return""}},{"../../elliptic":56,"bn.js":53}],65:[function(e,a,t){"use strict";function f(e,a){return e instanceof f?e:void(this._importDER(e,a)||(n(e.r&&e.s,"Signature without r or s"),this.r=new c(e.r,16),this.s=new c(e.s,16)))}var c=e("bn.js"),r=e("../../elliptic"),d=r.utils,n=d.assert;a.exports=f,f.prototype._importDER=function(e,a){if(e=d.toArray(e,a),e.length<6||48!==e[0]||2!==e[2])return!1;var t=e[1];if(1+t>e.length)return!1;var f=e[3];if(f>=128)return!1;if(4+f+2>=e.length)return!1;if(2!==e[4+f])return!1;var r=e[5+f];return r>=128?!1:4+f+2+r>e.length?!1:(this.r=new c(e.slice(4,4+f)),this.s=new c(e.slice(4+f+2,4+f+2+r)),!0)},f.prototype.toDER=function(e){var a=this.r.toArray(),t=this.s.toArray();128&a[0]&&(a=[0].concat(a)),128&t[0]&&(t=[0].concat(t));var f=a.length+t.length+4,c=[48,f,2,a.length];return c=c.concat(a,[2,t.length],t),d.encode(c,e)}},{"../../elliptic":56,"bn.js":53}],66:[function(e,a,t){"use strict";function f(e){if(!(this instanceof f))return new f(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this.reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var a=d.toArray(e.entropy,e.entropyEnc),t=d.toArray(e.nonce,e.nonceEnc),c=d.toArray(e.pers,e.persEnc);n(a.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(a,t,c)}var c=e("hash.js"),r=e("../elliptic"),d=r.utils,n=d.assert;a.exports=f,f.prototype._init=function(e,a,t){var f=e.concat(a).concat(t);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var c=0;c=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(t||[])),this.reseed=1},f.prototype.generate=function(e,a,t,f){if(this.reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof a&&(f=t,t=a,a=null),t&&(t=d.toArray(t,f),this._update(t));for(var c=[];c.length>8,d=255&c;r?t.push(r,d):t.push(d)}return t}function c(e){return 1===e.length?"0"+e:e}function r(e){for(var a="",t=0;t=0;){var r;if(c.isOdd()){var d=c.andln(f-1);r=d>(f>>1)-1?(f>>1)-d:d,c.isubn(r)}else r=0;t.push(r);for(var n=0!==c.cmpn(0)&&0===c.andln(f-1)?a+1:1,i=1;n>i;i++)t.push(0);c.ishrn(n)}return t}function n(e,a){var t=[[],[]];e=e.clone(),a=a.clone();for(var f=0,c=0;e.cmpn(-f)>0||a.cmpn(-c)>0;){var r=e.andln(3)+f&3,d=a.andln(3)+c&3;3===r&&(r=-1),3===d&&(d=-1);var n;if(0===(1&r))n=0;else{var i=e.andln(7)+f&7;n=3!==i&&5!==i||2!==d?r:-r}t[0].push(n);var b;if(0===(1&d))b=0;else{var i=a.andln(7)+c&7;b=3!==i&&5!==i||2!==r?d:-d}t[1].push(b),2*f===n+1&&(f=1-f),2*c===b+1&&(c=1-c),e.ishrn(1),a.ishrn(1)}return t}var i=t;i.assert=function(e,a){if(!e)throw new Error(a||"Assertion failed")},i.toArray=f,i.zero2=c,i.toHex=r,i.encode=function(e,a){return"hex"===a?r(e):e},i.getNAF=d,i.getJSF=n},{}],69:[function(e,a,t){function f(e){this.rand=e}var c;if(a.exports=function(e){return c||(c=new f(null)),c.generate(e)},a.exports.Rand=f,f.prototype.generate=function(e){return this._rand(e)},"object"==typeof window)window.crypto&&window.crypto.getRandomValues?f.prototype._rand=function(e){var a=new Uint8Array(e);return window.crypto.getRandomValues(a),a}:window.msCrypto&&window.msCrypto.getRandomValues?f.prototype._rand=function(e){var a=new Uint8Array(e);return window.msCrypto.getRandomValues(a),a}:f.prototype._rand=function(){throw new Error("Not implemented yet")};else try{var r=e("crypto");f.prototype._rand=function(e){return r.randomBytes(e)}}catch(d){f.prototype._rand=function(e){for(var a=new Uint8Array(e),t=0;t=this._delta8){e=this.pending;var t=e.length%this._delta8;this.pending=e.slice(e.length-t,e.length),0===this.pending.length&&(this.pending=null),e=r.join32(e,0,e.length-t,this.endian);for(var f=0;fc;c++)f[c]=0;if(e<<=3,"big"===this.endian){for(var r=8;r>>24&255,f[c++]=e>>>16&255,f[c++]=e>>>8&255,f[c++]=255&e}else{f[c++]=255&e,f[c++]=e>>>8&255,f[c++]=e>>>16&255,f[c++]=e>>>24&255,f[c++]=0,f[c++]=0,f[c++]=0,f[c++]=0;for(var r=8;rthis.blockSize&&(e=(new this.Hash).update(e).digest()),d(e.length<=this.blockSize);for(var a=e.length;a=e?a^t^f:31>=e?a&t|~a&f:47>=e?(a|~t)^f:63>=e?a&f|t&~f:a^(t|~f)}function r(e){return 15>=e?0:31>=e?1518500249:47>=e?1859775393:63>=e?2400959708:2840853838}function d(e){return 15>=e?1352829926:31>=e?1548603684:47>=e?1836072691:63>=e?2053994217:0}var n=e("../hash"),i=n.utils,b=i.rotl32,o=i.sum32,s=i.sum32_3,u=i.sum32_4,h=n.common.BlockHash;i.inherits(f,h),t.ripemd160=f,f.blockSize=512,f.outSize=160,f.hmacStrength=192,f.padLength=64,f.prototype._update=function(e,a){for(var t=this.h[0],f=this.h[1],n=this.h[2],i=this.h[3],h=this.h[4],v=t,y=f,w=n,_=i,S=h,A=0;80>A;A++){var I=o(b(u(t,c(A,f,n,i),e[l[A]+a],r(A)),g[A]),h);t=h,h=i,i=b(n,10),n=f,f=I,I=o(b(u(v,c(79-A,y,w,_),e[p[A]+a],d(A)),m[A]),S),v=S,S=_,_=b(w,10),w=y,y=I}I=s(this.h[1],n,_),this.h[1]=s(this.h[2],i,S),this.h[2]=s(this.h[3],h,v),this.h[3]=s(this.h[4],t,y),this.h[4]=s(this.h[0],f,w),this.h[0]=I},f.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h,"little"):i.split32(this.h,"little")};var l=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],p=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],g=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],m=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},{"../hash":70}],74:[function(e,a,t){function f(){return this instanceof f?(G.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=W,void(this.W=new Array(64))):new f}function c(){return this instanceof c?(f.call(this),void(this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])):new c}function r(){return this instanceof r?(G.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=J,void(this.W=new Array(160))):new r}function d(){return this instanceof d?(r.call(this),void(this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428])):new d}function n(){return this instanceof n?(G.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.W=new Array(80))):new n}function i(e,a,t){return e&a^~e&t}function b(e,a,t){return e&a^e&t^a&t}function o(e,a,t){return e^a^t}function s(e){return O(e,2)^O(e,13)^O(e,22)}function u(e){return O(e,6)^O(e,11)^O(e,25)}function h(e){return O(e,7)^O(e,18)^e>>>3}function l(e){return O(e,17)^O(e,19)^e>>>10}function p(e,a,t,f){return 0===e?i(a,t,f):1===e||3===e?o(a,t,f):2===e?b(a,t,f):void 0}function g(e,a,t,f,c,r){var d=e&t^~e&c;return 0>d&&(d+=4294967296),d}function m(e,a,t,f,c,r){var d=a&f^~a&r;return 0>d&&(d+=4294967296),d}function v(e,a,t,f,c,r){var d=e&t^e&c^t&c;return 0>d&&(d+=4294967296),d}function y(e,a,t,f,c,r){var d=a&f^a&r^f&r;return 0>d&&(d+=4294967296),d}function w(e,a){var t=j(e,a,28),f=j(a,e,2),c=j(a,e,7),r=t^f^c;return 0>r&&(r+=4294967296),r}function _(e,a){var t=L(e,a,28),f=L(a,e,2),c=L(a,e,7),r=t^f^c;return 0>r&&(r+=4294967296),r}function S(e,a){var t=j(e,a,14),f=j(e,a,18),c=j(a,e,9),r=t^f^c;return 0>r&&(r+=4294967296),r}function A(e,a){var t=L(e,a,14),f=L(e,a,18),c=L(a,e,9),r=t^f^c;return 0>r&&(r+=4294967296),r}function I(e,a){var t=j(e,a,1),f=j(e,a,8),c=D(e,a,7),r=t^f^c;return 0>r&&(r+=4294967296),r}function E(e,a){var t=L(e,a,1),f=L(e,a,8),c=U(e,a,7),r=t^f^c;return 0>r&&(r+=4294967296),r}function k(e,a){var t=j(e,a,19),f=j(a,e,29),c=D(e,a,6),r=t^f^c;return 0>r&&(r+=4294967296),r}function x(e,a){var t=L(e,a,19),f=L(a,e,29),c=U(e,a,6),r=t^f^c;return 0>r&&(r+=4294967296),r}var P=e("../hash"),B=P.utils,M=B.assert,O=B.rotr32,R=B.rotl32,T=B.sum32,C=B.sum32_4,N=B.sum32_5,j=B.rotr64_hi,L=B.rotr64_lo,D=B.shr64_hi,U=B.shr64_lo,z=B.sum64,K=B.sum64_hi,H=B.sum64_lo,F=B.sum64_4_hi,q=B.sum64_4_lo,V=B.sum64_5_hi,Y=B.sum64_5_lo,G=P.common.BlockHash,W=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],J=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],X=[1518500249,1859775393,2400959708,3395469782];B.inherits(f,G),t.sha256=f,f.blockSize=512,f.outSize=256,f.hmacStrength=192,f.padLength=64,f.prototype._update=function(e,a){for(var t=this.W,f=0;16>f;f++)t[f]=e[a+f];for(;ff;f++)t[f]=e[a+f];for(;ff;f++)t[f]=e[a+f];for(;f>8,d=255&c;r?t.push(r,d):t.push(d)}else for(var f=0;f>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24;return a>>>0}function d(e,a){for(var t="",f=0;f>>0}return r}function o(e,a){for(var t=new Array(4*e.length),f=0,c=0;f>>24,t[c+1]=r>>>16&255,t[c+2]=r>>>8&255,t[c+3]=255&r):(t[c+3]=r>>>24,t[c+2]=r>>>16&255,t[c+1]=r>>>8&255,t[c]=255&r)}return t}function s(e,a){return e>>>a|e<<32-a}function u(e,a){return e<>>32-a}function h(e,a){return e+a>>>0}function l(e,a,t){return e+a+t>>>0}function p(e,a,t,f){return e+a+t+f>>>0}function g(e,a,t,f,c){return e+a+t+f+c>>>0}function m(e,a){if(!e)throw new Error(a||"Assertion failed")}function v(e,a,t,f){var c=e[a],r=e[a+1],d=f+r>>>0,n=(f>d?1:0)+t+c;e[a]=n>>>0,e[a+1]=d}function y(e,a,t,f){var c=a+f>>>0,r=(a>c?1:0)+e+t;return r>>>0}function w(e,a,t,f){var c=a+f;return c>>>0}function _(e,a,t,f,c,r,d,n){var i=0,b=a;b=b+f>>>0,i+=a>b?1:0,b=b+r>>>0,i+=r>b?1:0,b=b+n>>>0,i+=n>b?1:0;var o=e+t+c+d+i;return o>>>0}function S(e,a,t,f,c,r,d,n){var i=a+f+r+n;return i>>>0}function A(e,a,t,f,c,r,d,n,i,b){var o=0,s=a;s=s+f>>>0,o+=a>s?1:0,s=s+r>>>0,o+=r>s?1:0,s=s+n>>>0,o+=n>s?1:0,s=s+b>>>0,o+=b>s?1:0;var u=e+t+c+d+i+o;return u>>>0}function I(e,a,t,f,c,r,d,n,i,b){var o=a+f+r+n+b;return o>>>0}function E(e,a,t){var f=a<<32-t|e>>>t;return f>>>0}function k(e,a,t){var f=e<<32-t|a>>>t;return f>>>0}function x(e,a,t){return e>>>t}function P(e,a,t){var f=e<<32-t|a>>>t;return f>>>0}var B=t,M=e("inherits");B.toArray=f,B.toHex=c,B.htonl=r,B.toHex32=d,B.zero2=n,B.zero8=i,B.join32=b,B.split32=o,B.rotr32=s,B.rotl32=u,B.sum32=h,B.sum32_3=l,B.sum32_4=p,B.sum32_5=g,B.assert=m,B.inherits=M,t.sum64=v,t.sum64_hi=y,t.sum64_lo=w,t.sum64_4_hi=_,t.sum64_4_lo=S,t.sum64_5_hi=A,t.sum64_5_lo=I,t.rotr64_hi=E,t.rotr64_lo=k,t.shr64_hi=x,t.shr64_lo=P},{inherits:77}],76:[function(e,a,t){a.exports={name:"elliptic",version:"3.0.3",description:"EC cryptography",main:"lib/elliptic.js",scripts:{test:"make lint && mocha --reporter=spec test/*-test.js"},repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},keywords:["EC","Elliptic","curve","Cryptography"],author:{name:"Fedor Indutny",email:"fedor@indutny.com"},license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{browserify:"^3.44.2",jscs:"^1.11.3",jshint:"^2.6.0",mocha:"^2.1.0","uglify-js":"^2.4.13"},dependencies:{"bn.js":"^2.0.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},readme:"# Elliptic [![Build Status](https://secure.travis-ci.org/indutny/elliptic.png)](http://travis-ci.org/indutny/elliptic)\n\nFast elliptic-curve cryptography in a plain javascript implementation.\n\nNOTE: Please take a look at http://safecurves.cr.yp.to/ before choosing a curve\nfor your cryptography operations.\n\n## Incentive\n\nECC is much slower than regular RSA cryptography, the JS implementations are\neven more slower.\n\n## Benchmarks\n\n```bash\n$ node benchmarks/index.js\nBenchmarking: sign\nelliptic#sign x 262 ops/sec ±0.51% (177 runs sampled)\neccjs#sign x 55.91 ops/sec ±0.90% (144 runs sampled)\n------------------------\nFastest is elliptic#sign\n========================\nBenchmarking: verify\nelliptic#verify x 113 ops/sec ±0.50% (166 runs sampled)\neccjs#verify x 48.56 ops/sec ±0.36% (125 runs sampled)\n------------------------\nFastest is elliptic#verify\n========================\nBenchmarking: gen\nelliptic#gen x 294 ops/sec ±0.43% (176 runs sampled)\neccjs#gen x 62.25 ops/sec ±0.63% (129 runs sampled)\n------------------------\nFastest is elliptic#gen\n========================\nBenchmarking: ecdh\nelliptic#ecdh x 136 ops/sec ±0.85% (156 runs sampled)\n------------------------\nFastest is elliptic#ecdh\n========================\n```\n\n## API\n\n### ECDSA\n\n```javascript\nvar EC = require('elliptic').ec;\n\n// Create and initialize EC context\n// (better do it once and reuse it)\nvar ec = new EC('secp256k1');\n\n// Generate keys\nvar key = ec.genKeyPair();\n\n// Sign message (must be an array, or it'll be treated as a hex sequence)\nvar msg = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];\nvar signature = key.sign(msg);\n\n// Export DER encoded signature in Array\nvar derSign = signature.toDER();\n\n// Verify signature\nconsole.log(key.verify(msg, derSign));\n```\n\n### ECDH\n\n```javascript\n// Generate keys\nvar key1 = ec.genKeyPair();\nvar key2 = ec.genKeyPair();\n\nvar shared1 = key1.derive(key2.getPublic());\nvar shared2 = key2.derive(key1.getPublic());\n\nconsole.log('Both shared secrets are BN instances');\nconsole.log(shared1.toString(16));\nconsole.log(shared2.toString(16));\n```\n\nNOTE: `.derive()` returns a [BN][1] instance.\n\n## Supported curves\n\nElliptic.js support following curve types:\n\n* Short Weierstrass\n* Montgomery\n* Edwards\n* Twisted Edwards\n\nFollowing curve 'presets' are embedded into the library:\n\n* `secp256k1`\n* `p192`\n* `p224`\n* `p256`\n* `curve25519`\n* `ed25519`\n\nNOTE: That `curve25519` could not be used for ECDSA, use `ed25519` instead.\n\n### Implementation details\n\nECDSA is using deterministic `k` value generation as per [RFC6979][0]. Most of\nthe curve operations are performed on non-affine coordinates (either projective\nor extended), various windowing techniques are used for different cases.\n\nAll operations are performed in reduction context using [bn.js][1], hashing is\nprovided by [hash.js][2]\n\n### Related projects\n\n* [eccrypto][3]: isomorphic implementation of ECDSA, ECDH and ECIES for both\n browserify and node (uses `elliptic` for browser and [secp256k1-node][4] for\n node)\n\n#### LICENSE\n\nThis software is licensed under the MIT License.\n\nCopyright Fedor Indutny, 2014.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n\n[0]: http://tools.ietf.org/html/rfc6979\n[1]: https://github.com/indutny/bn.js\n[2]: https://github.com/indutny/hash.js\n[3]: https://github.com/bitchan/eccrypto\n[4]: https://github.com/wanderer/secp256k1-node\n",readmeFilename:"README.md",_id:"elliptic@3.0.3",_shasum:"865c9b420bfbe55006b9f969f97a0d2c44966595",_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz",_from:"https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz"}},{}],77:[function(e,a,t){"function"==typeof Object.create?a.exports=function(e,a){e.super_=a,e.prototype=Object.create(a.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:a.exports=function(e,a){e.super_=a;var t=function(){};t.prototype=a.prototype,e.prototype=new t,e.prototype.constructor=e}},{}],78:[function(e,a,t){(function(e){(function(){function f(e,a){if(e!==a){var t=null===e,f=e===E,c=e===e,r=null===a,d=a===E,n=a===a;if(e>a&&!r||!c||t&&!d&&n||f&&n)return 1;if(a>e&&!t||!n||r&&!f&&c||d&&c)return-1}return 0}function c(e,a,t){for(var f=e.length,c=t?f:-1;t?c--:++c-1;);return t}function b(e,a){for(var t=e.length;t--&&a.indexOf(e.charAt(t))>-1;);return t}function o(e,a){return f(e.criteria,a.criteria)||e.index-a.index}function s(e,a,t){for(var c=-1,r=e.criteria,d=a.criteria,n=r.length,i=t.length;++c=i)return b;var o=t[c];return b*("asc"===o||o===!0?1:-1)}}return e.index-a.index}function u(e){return qe[e]}function h(e){return Ve[e]}function l(e,a,t){return a?e=We[e]:t&&(e=Je[e]),"\\"+e}function p(e){return"\\"+Je[e]}function g(e,a,t){for(var f=e.length,c=a+(t?0:-1);t?c--:++c=e&&e>=9&&13>=e||32==e||160==e||5760==e||6158==e||e>=8192&&(8202>=e||8232==e||8233==e||8239==e||8287==e||12288==e||65279==e)}function y(e,a){for(var t=-1,f=e.length,c=-1,r=[];++ta,c=t?e.length:0,r=Vt(0,c,this.__views__),d=r.start,n=r.end,i=n-d,b=f?n:d-1,o=this.__iteratees__,s=o.length,u=0,h=Sd(i,this.__takeCount__);if(!t||z>c||c==i&&h==i)return tt(f&&t?e.reverse():e,this.__actions__);var l=[];e:for(;i--&&h>u;){b+=a;for(var p=-1,g=e[b];++p=z?lt(a):null,b=a.length;i&&(d=Ze,n=!1,a=i);e:for(;++ct&&(t=-t>c?0:c+t),f=f===E||f>c?c:+f||0,0>f&&(f+=c),c=t>f?0:f>>>0,t>>>=0;c>t;)e[t++]=a;return e}function xa(e,a){var t=[];return Nd(e,function(e,f,c){a(e,f,c)&&t.push(e)}),t}function Pa(e,a,t,f){var c;return t(e,function(e,t,r){return a(e,t,r)?(c=f?t:e,!1):void 0}),c}function Ba(e,a,t,f){f||(f=[]);for(var c=-1,r=e.length;++cf;)e=e[a[f++]];return f&&f==c?e:E}}function Na(e,a,t,f,c,r){return e===a?!0:null==e||null==a||!Cc(e)&&!m(a)?e!==e&&a!==a:ja(e,a,Na,t,f,c,r)}function ja(e,a,t,f,c,r,d){var n=Bn(e),i=Bn(a),b=Y,o=Y;n||(b=td.call(e),b==V?b=Q:b!=Q&&(n=Fc(e))),i||(o=td.call(a),o==V?o=Q:o!=Q&&(i=Fc(a)));var s=b==Q,u=o==Q,h=b==o;if(h&&!n&&!s)return Dt(e,a,b);if(!c){var l=s&&ed.call(e,"__wrapped__"),p=u&&ed.call(a,"__wrapped__");if(l||p)return t(l?e.value():e,p?a.value():a,f,c,r,d)}if(!h)return!1;r||(r=[]),d||(d=[]);for(var g=r.length;g--;)if(r[g]==e)return d[g]==a;r.push(e),d.push(a);var m=(n?Lt:Ut)(e,a,t,f,c,r,d);return r.pop(),d.pop(),m}function La(e,a,t){var f=a.length,c=f,r=!t;if(null==e)return!c;for(e=sf(e);f--;){var d=a[f];if(r&&d[2]?d[1]!==e[d[0]]:!(d[0]in e))return!1}for(;++fa&&(a=-a>c?0:c+a),t=t===E||t>c?c:+t||0,0>t&&(t+=c),c=a>t?0:t-a>>>0,a>>>=0;for(var r=zr(c);++f=z,i=n?lt():null,b=[];i?(f=Ze,d=!1):(n=!1,i=a?[]:b);e:for(;++t=c){for(;c>f;){var r=f+c>>>1,d=e[r];(t?a>=d:a>d)&&null!==d?f=r+1:c=r}return c}return ct(e,a,xr,t)}function ct(e,a,t,f){a=t(a);for(var c=0,r=e?e.length:0,d=a!==a,n=null===a,i=a===E;r>c;){var b=md((c+r)/2),o=t(e[b]),s=o!==E,u=o===o;if(d)var h=u||f;else h=n?u&&s&&(f||null!=o):i?u&&(f||s):null==o?!1:f?a>=o:a>o;h?c=b+1:r=b}return Sd(r,Bd)}function rt(e,a,t){if("function"!=typeof e)return xr;if(a===E)return e;switch(t){case 1:return function(t){return e.call(a,t)};case 3:return function(t,f,c){return e.call(a,t,f,c)};case 4:return function(t,f,c,r){return e.call(a,t,f,c,r)};case 5:return function(t,f,c,r,d){return e.call(a,t,f,c,r,d)}}return function(){return e.apply(a,arguments)}}function dt(e){var a=new rd(e.byteLength),t=new hd(a);return t.set(new hd(e)),a}function nt(e,a,t){for(var f=t.length,c=-1,r=_d(e.length-f,0),d=-1,n=a.length,i=zr(n+r);++d2?t[c-2]:E,d=c>2?t[2]:E,n=c>1?t[c-1]:E;for("function"==typeof r?(r=rt(r,n,5),c-=2):(r="function"==typeof n?n:E,c-=r?1:0),d&&$t(t[0],t[1],d)&&(r=3>c?E:r,c=1);++f-1?t[d]:E}return Pa(t,f,e)}}function _t(e){return function(a,t,f){return a&&a.length?(t=zt(t,f,3),c(a,t,e)):-1}}function St(e){return function(a,t,f){return t=zt(t,f,3),Pa(a,t,e,!0)}}function At(e){return function(){for(var a,t=arguments.length,f=e?t:-1,c=0,r=zr(t);e?f--:++f=z)return a.plant(f).value();for(var c=0,d=t?r[c].apply(this,e):f;++cv){var I=n?ea(n):E,k=_d(b-v,0),B=l?A:E,M=l?E:A,O=l?_:E,C=l?E:_;a|=l?R:T,a&=~(l?T:R),p||(a&=~(x|P));var N=[e,a,t,O,B,C,M,I,i,k],j=Ot.apply(E,N);return ef(e)&&Hd(j,N),j.placeholder=S,j}}var L=u?t:this,D=h?L[e]:e;return n&&(_=nf(_,n)),s&&i<_.length&&(_.length=i),this&&this!==ta&&this instanceof o&&(D=m||gt(e)),D.apply(L,_)}var s=a&C,u=a&x,h=a&P,l=a&M,p=a&B,g=a&O,m=h?E:gt(e);return o}function Rt(e,a,t){var f=e.length;if(a=+a,f>=a||!yd(a))return"";var c=a-f;return t=null==t?" ":t+"",gr(t,pd(c/t.length)).slice(0,c)}function Tt(e,a,t,f){function c(){for(var a=-1,n=arguments.length,i=-1,b=f.length,o=zr(b+n);++ii))return!1;for(;++n-1&&e%1==0&&a>e}function $t(e,a,t){if(!Cc(t))return!1;var f=typeof a;if("number"==f?Xt(t)&&Zt(a,t.length):"string"==f&&a in t){var c=t[a];return e===e?e===c:c!==c}return!1}function Qt(e,a){var t=typeof e;if("string"==t&&Ee.test(e)||"number"==t)return!0;if(Bn(e))return!1;var f=!Ie.test(e);return f||null!=a&&e in sf(a)}function ef(e){var t=Kt(e);if(!(t in Z.prototype))return!1;var f=a[t];if(e===f)return!0;var c=zd(f);return!!c&&e===c[0]}function af(e){return"number"==typeof e&&e>-1&&e%1==0&&Od>=e}function tf(e){return e===e&&!Cc(e)}function ff(e,a){var t=e[1],f=a[1],c=t|f,r=C>c,d=f==C&&t==M||f==C&&t==N&&e[7].length<=a[8]||f==(C|N)&&t==M;if(!r&&!d)return e;f&x&&(e[2]=a[2],c|=t&x?0:B);var n=a[3];if(n){var i=e[3];e[3]=i?nt(i,n,a[4]):ea(n),e[4]=i?y(e[3],q):ea(a[4])}return n=a[5],n&&(i=e[5],e[5]=i?it(i,n,a[6]):ea(n),e[6]=i?y(e[5],q):ea(a[6])),n=a[7],n&&(e[7]=ea(n)),f&C&&(e[8]=null==e[8]?a[8]:Sd(e[8],a[8])),null==e[9]&&(e[9]=a[9]),e[0]=a[0],e[1]=c,e}function cf(e,a){return e===E?a:Mn(e,a,cf)}function rf(e,a){e=sf(e);for(var t=-1,f=a.length,c={};++tf;)d[++r]=Wa(e,f,f+=a);return d}function pf(e){for(var a=-1,t=e?e.length:0,f=-1,c=[];++aa?0:a)):[]}function mf(e,a,t){var f=e?e.length:0;return f?((t?$t(e,a,t):null==a)&&(a=1),a=f-(+a||0),Wa(e,0,0>a?0:a)):[]}function vf(e,a,t){return e&&e.length?at(e,zt(a,t,3),!0,!0):[]}function yf(e,a,t){return e&&e.length?at(e,zt(a,t,3),!0):[]}function wf(e,a,t,f){var c=e?e.length:0;return c?(t&&"number"!=typeof t&&$t(e,a,t)&&(t=0,f=c),ka(e,a,t,f)):[]}function _f(e){return e?e[0]:E}function Sf(e,a,t){var f=e?e.length:0;return t&&$t(e,a,t)&&(a=!1),f?Ba(e,a):[]}function Af(e){var a=e?e.length:0;return a?Ba(e,!0):[]}function If(e,a,t){var f=e?e.length:0;if(!f)return-1;if("number"==typeof t)t=0>t?_d(f+t,0):t;else if(t){var c=ft(e,a);return f>c&&(a===a?a===e[c]:e[c]!==e[c])?c:-1}return r(e,a,t||0)}function Ef(e){return mf(e,1)}function kf(e){var a=e?e.length:0;return a?e[a-1]:E}function xf(e,a,t){var f=e?e.length:0;if(!f)return-1;var c=f;if("number"==typeof t)c=(0>t?_d(f+t,0):Sd(t||0,f-1))+1;else if(t){c=ft(e,a,!0)-1;var r=e[c];return(a===a?a===r:r!==r)?c:-1}if(a!==a)return g(e,c,!0);for(;c--;)if(e[c]===a)return c;return-1}function Pf(){var e=arguments,a=e[0];if(!a||!a.length)return a;for(var t=0,f=Ht(),c=e.length;++t-1;)ud.call(a,r,1);return a}function Bf(e,a,t){var f=[];if(!e||!e.length)return f;var c=-1,r=[],d=e.length;for(a=zt(a,t,3);++ca?0:a)):[]}function Tf(e,a,t){var f=e?e.length:0;return f?((t?$t(e,a,t):null==a)&&(a=1),a=f-(+a||0),Wa(e,0>a?0:a)):[]}function Cf(e,a,t){return e&&e.length?at(e,zt(a,t,3),!1,!0):[]}function Nf(e,a,t){return e&&e.length?at(e,zt(a,t,3)):[]}function jf(e,a,t,f){var c=e?e.length:0;if(!c)return[];null!=a&&"boolean"!=typeof a&&(f=t,t=$t(e,a,f)?E:a,a=!1);var d=zt();return(null!=t||d!==wa)&&(t=d(t,f,3)),a&&Ht()==r?w(e,t):Qa(e,t)}function Lf(e){if(!e||!e.length)return[];var a=-1,t=0;e=na(e,function(e){return Xt(e)?(t=_d(e.length,t),!0):void 0});for(var f=zr(t);++at?_d(c+t,0):t||0,"string"==typeof e||!Bn(e)&&Hc(e)?c>=t&&e.indexOf(a,t)>-1:!!c&&Ht(e,a,t)>-1}function ec(e,a,t){var f=Bn(e)?ia:Da;return a=zt(a,t,3),f(e,a)}function ac(e,a){return ec(e,Tr(a))}function tc(e,a,t){var f=Bn(e)?na:xa;return a=zt(a,t,3),f(e,function(e,t,f){return!a(e,t,f)})}function fc(e,a,t){if(t?$t(e,a,t):null==a){e=of(e);var f=e.length;return f>0?e[Ya(0,f-1)]:E}var c=-1,r=Gc(e),f=r.length,d=f-1;for(a=Sd(0>a?0:+a||0,f);++c0&&(t=a.apply(this,arguments)),1>=e&&(a=E),t}}function hc(e,a,t){function f(){h&&dd(h),b&&dd(b),p=0,b=h=l=E}function c(a,t){t&&dd(t),b=h=l=E,a&&(p=pn(),o=e.apply(u,i),h||b||(i=u=E))}function r(){var e=a-(pn()-s);0>=e||e>a?c(l,b):h=sd(r,e)}function d(){c(m,h)}function n(){if(i=arguments,s=pn(),u=this,l=m&&(h||!v),g===!1)var t=v&&!h;else{b||v||(p=s);var f=g-(s-p),c=0>=f||f>g;c?(b&&(b=dd(b)),p=s,o=e.apply(u,i)):b||(b=sd(d,f))}return c&&h?h=dd(h):h||a===g||(h=sd(r,a)),t&&(c=!0,o=e.apply(u,i)),!c||h||b||(i=u=E),o}var i,b,o,s,u,h,l,p=0,g=!1,m=!0;if("function"!=typeof e)throw new Jr(F);if(a=0>a?0:+a||0,t===!0){var v=!0;m=!1}else Cc(t)&&(v=!!t.leading,g="maxWait"in t&&_d(+t.maxWait||0,a),m="trailing"in t?!!t.trailing:m);return n.cancel=f,n}function lc(e,a){if("function"!=typeof e||a&&"function"!=typeof a)throw new Jr(F);var t=function(){var f=arguments,c=a?a.apply(this,f):f[0],r=t.cache;if(r.has(c))return r.get(c);var d=e.apply(this,f);return t.cache=r.set(c,d),d};return t.cache=new lc.Cache,t}function pc(e){if("function"!=typeof e)throw new Jr(F);return function(){return!e.apply(this,arguments)}}function gc(e){return uc(2,e)}function mc(e,a){if("function"!=typeof e)throw new Jr(F);return a=_d(a===E?e.length-1:+a||0,0),function(){for(var t=arguments,f=-1,c=_d(t.length-a,0),r=zr(c);++fa}function Ic(e,a){return e>=a}function Ec(e){return m(e)&&Xt(e)&&ed.call(e,"callee")&&!bd.call(e,"callee")}function kc(e){return e===!0||e===!1||m(e)&&td.call(e)==G}function xc(e){return m(e)&&td.call(e)==W}function Pc(e){return!!e&&1===e.nodeType&&m(e)&&!zc(e)}function Bc(e){return null==e?!0:Xt(e)&&(Bn(e)||Hc(e)||Ec(e)||m(e)&&Tc(e.splice))?!e.length:!zn(e).length}function Mc(e,a,t,f){t="function"==typeof t?rt(t,f,3):E;var c=t?t(e,a):E;return c===E?Na(e,a,t):!!c}function Oc(e){return m(e)&&"string"==typeof e.message&&td.call(e)==J}function Rc(e){return"number"==typeof e&&yd(e)}function Tc(e){return Cc(e)&&td.call(e)==X}function Cc(e){var a=typeof e;return!!e&&("object"==a||"function"==a)}function Nc(e,a,t,f){return t="function"==typeof t?rt(t,f,3):E,La(e,Ft(a),t)}function jc(e){return Uc(e)&&e!=+e}function Lc(e){return null==e?!1:Tc(e)?cd.test(Qr.call(e)):m(e)&&Ce.test(e)}function Dc(e){return null===e}function Uc(e){return"number"==typeof e||m(e)&&td.call(e)==$}function zc(e){var a;if(!m(e)||td.call(e)!=Q||Ec(e)||!ed.call(e,"constructor")&&(a=e.constructor,"function"==typeof a&&!(a instanceof a)))return!1;var t;return Ma(e,function(e,a){t=a}),t===E||ed.call(e,t)}function Kc(e){return Cc(e)&&td.call(e)==ee}function Hc(e){return"string"==typeof e||m(e)&&td.call(e)==te}function Fc(e){return m(e)&&af(e.length)&&!!He[td.call(e)]}function qc(e){return e===E}function Vc(e,a){return a>e}function Yc(e,a){return a>=e}function Gc(e){var a=e?Kd(e):0;return af(a)?a?ea(e):[]:rr(e)}function Wc(e){return ya(e,er(e))}function Jc(e,a,t){var f=Cd(e);return t&&$t(e,a,t)&&(a=E),a?ma(f,a):f}function Xc(e){return Ta(e,er(e))}function Zc(e,a,t){var f=null==e?E:Ca(e,uf(a),a+"");return f===E?t:f}function $c(e,a){if(null==e)return!1;var t=ed.call(e,a);if(!t&&!Qt(a)){if(a=uf(a),e=1==a.length?e:Ca(e,Wa(a,0,-1)),null==e)return!1;a=kf(a),t=ed.call(e,a)}return t||af(e.length)&&Zt(a,e.length)&&(Bn(e)||Ec(e))}function Qc(e,a,t){t&&$t(e,a,t)&&(a=E);for(var f=-1,c=zn(e),r=c.length,d={};++f0;++f=Sd(a,t)&&e<_d(a,t)}function ir(e,a,t){t&&$t(e,a,t)&&(a=t=E);var f=null==e,c=null==a;if(null==t&&(c&&"boolean"==typeof e?(t=e,e=1):"boolean"==typeof a&&(t=a,c=!0)),f&&c&&(a=1,c=!1),e=+e||0,c?(a=e,e=0):a=+a||0,t||e%1||a%1){var r=Ed();return Sd(e+r*(a-e+nd("1e-"+((r+"").length-1))),a)}return Ya(e,a)}function br(e){return e=n(e),e&&e.charAt(0).toUpperCase()+e.slice(1)}function or(e){return e=n(e),e&&e.replace(je,u).replace(Be,"")}function sr(e,a,t){e=n(e),a+="";var f=e.length;return t=t===E?f:Sd(0>t?0:+t||0,f),t-=a.length,t>=0&&e.indexOf(a,t)==t}function ur(e){return e=n(e),e&&we.test(e)?e.replace(ve,h):e}function hr(e){return e=n(e),e&&Pe.test(e)?e.replace(xe,l):e||"(?:)"}function lr(e,a,t){e=n(e),a=+a;var f=e.length;if(f>=a||!yd(a))return e;var c=(a-f)/2,r=md(c),d=pd(c);return t=Rt("",d,t),t.slice(0,r)+e+t}function pr(e,a,t){return(t?$t(e,a,t):null==a)?a=0:a&&(a=+a),e=yr(e),Id(e,a||(Te.test(e)?16:10))}function gr(e,a){var t="";if(e=n(e),a=+a,1>a||!e||!yd(a))return t;do a%2&&(t+=e),a=md(a/2),e+=e;while(a);return t}function mr(e,a,t){return e=n(e),t=null==t?0:Sd(0>t?0:+t||0,e.length),e.lastIndexOf(a,t)==t}function vr(e,t,f){var c=a.templateSettings;f&&$t(e,t,f)&&(t=f=E),e=n(e),t=ga(ma({},f||t),c,pa);var r,d,i=ga(ma({},t.imports),c.imports,pa),b=zn(i),o=et(i,b),s=0,u=t.interpolate||Le,h="__p += '",l=Gr((t.escape||Le).source+"|"+u.source+"|"+(u===Ae?Oe:Le).source+"|"+(t.evaluate||Le).source+"|$","g"),g="//# sourceURL="+("sourceURL"in t?t.sourceURL:"lodash.templateSources["+ ++Ke+"]")+"\n";e.replace(l,function(a,t,f,c,n,i){return f||(f=c),h+=e.slice(s,i).replace(De,p),t&&(r=!0,h+="' +\n__e("+t+") +\n'"),n&&(d=!0,h+="';\n"+n+";\n__p += '"),f&&(h+="' +\n((__t = ("+f+")) == null ? '' : __t) +\n'"),s=i+a.length,a}),h+="';\n";var m=t.variable;m||(h="with (obj) {\n"+h+"\n}\n"),h=(d?h.replace(le,""):h).replace(pe,"$1").replace(ge,"$1;"),h="function("+(m||"obj")+") {\n"+(m?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(r?", __e = _.escape":"")+(d?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+h+"return __p\n}";var v=Zn(function(){return Fr(b,g+"return "+h).apply(E,o)});if(v.source=h,Oc(v))throw v;return v}function yr(e,a,t){var f=e;return(e=n(e))?(t?$t(f,a,t):null==a)?e.slice(_(e),S(e)+1):(a+="",e.slice(i(e,a),b(e,a)+1)):e}function wr(e,a,t){var f=e;return e=n(e),e?(t?$t(f,a,t):null==a)?e.slice(_(e)):e.slice(i(e,a+"")):e}function _r(e,a,t){var f=e;return e=n(e),e?(t?$t(f,a,t):null==a)?e.slice(0,S(e)+1):e.slice(0,b(e,a+"")+1):e}function Sr(e,a,t){t&&$t(e,a,t)&&(a=E);var f=j,c=L;if(null!=a)if(Cc(a)){var r="separator"in a?a.separator:r;f="length"in a?+a.length||0:f,c="omission"in a?n(a.omission):c}else f=+a||0;if(e=n(e),f>=e.length)return e;var d=f-c.length;if(1>d)return c;var i=e.slice(0,d);if(null==r)return i+c;if(Kc(r)){if(e.slice(d).search(r)){var b,o,s=e.slice(0,d);for(r.global||(r=Gr(r.source,(Re.exec(r)||"")+"g")),r.lastIndex=0;b=r.exec(s);)o=b.index;i=i.slice(0,null==o?d:o)}}else if(e.indexOf(r,d)!=d){var u=i.lastIndexOf(r);u>-1&&(i=i.slice(0,u))}return i+c}function Ar(e){return e=n(e),e&&ye.test(e)?e.replace(me,A):e}function Ir(e,a,t){return t&&$t(e,a,t)&&(a=E),e=n(e),e.match(a||Ue)||[]}function Er(e,a,t){return t&&$t(e,a,t)&&(a=E),m(e)?Pr(e):wa(e,a)}function kr(e){return function(){return e}}function xr(e){return e}function Pr(e){return Ua(_a(e,!0))}function Br(e,a){return za(e,_a(a,!0))}function Mr(e,a,t){if(null==t){var f=Cc(a),c=f?zn(a):E,r=c&&c.length?Ta(a,c):E;(r?r.length:f)||(r=!1,t=a,a=e,e=this)}r||(r=Ta(a,zn(a)));var d=!0,n=-1,i=Tc(e),b=r.length;t===!1?d=!1:Cc(t)&&"chain"in t&&(d=t.chain);for(;++ne||!yd(e))return[];var f=-1,c=zr(Sd(e,Pd));for(a=rt(a,t,1);++ff?c[f]=a(f):a(f);return c}function Lr(e){var a=++ad;return n(e)+a}function Dr(e,a){return(+e||0)+(+a||0)}function Ur(e,a,t){return t&&$t(e,a,t)&&(a=E),a=zt(a,t,3),1==a.length?ha(Bn(e)?e:of(e),a):$a(e,a)}e=e?fa.defaults(ta.Object(),e,fa.pick(ta,ze)):ta;var zr=e.Array,Kr=e.Date,Hr=e.Error,Fr=e.Function,qr=e.Math,Vr=e.Number,Yr=e.Object,Gr=e.RegExp,Wr=e.String,Jr=e.TypeError,Xr=zr.prototype,Zr=Yr.prototype,$r=Wr.prototype,Qr=Fr.prototype.toString,ed=Zr.hasOwnProperty,ad=0,td=Zr.toString,fd=ta._,cd=Gr("^"+Qr.call(ed).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),rd=e.ArrayBuffer,dd=e.clearTimeout,nd=e.parseFloat,id=qr.pow,bd=Zr.propertyIsEnumerable,od=qt(e,"Set"),sd=e.setTimeout,ud=Xr.splice,hd=e.Uint8Array,ld=qt(e,"WeakMap"),pd=qr.ceil,gd=qt(Yr,"create"),md=qr.floor,vd=qt(zr,"isArray"),yd=e.isFinite,wd=qt(Yr,"keys"),_d=qr.max,Sd=qr.min,Ad=qt(Kr,"now"),Id=e.parseInt,Ed=qr.random,kd=Vr.NEGATIVE_INFINITY,xd=Vr.POSITIVE_INFINITY,Pd=4294967295,Bd=Pd-1,Md=Pd>>>1,Od=9007199254740991,Rd=ld&&new ld,Td={};a.support={};a.templateSettings={escape:_e,evaluate:Se,interpolate:Ae,variable:"",imports:{_:a}};var Cd=function(){function e(){}return function(a){if(Cc(a)){e.prototype=a;var t=new e;e.prototype=E}return t||{}}}(),Nd=st(Oa),jd=st(Ra,!0),Ld=ut(),Dd=ut(!0),Ud=Rd?function(e,a){return Rd.set(e,a),e}:xr,zd=Rd?function(e){return Rd.get(e)}:Rr,Kd=Fa("length"),Hd=function(){var e=0,a=0;return function(t,f){var c=pn(),r=U-(c-a);if(a=c,r>0){if(++e>=D)return t}else e=0;return Ud(t,f)}}(),Fd=mc(function(e,a){return m(e)&&Xt(e)?Aa(e,Ba(a,!1,!0)):[]}),qd=_t(),Vd=_t(!0),Yd=mc(function(e){for(var a=e.length,t=a,f=zr(s),c=Ht(),d=c==r,n=[];t--;){var i=e[t]=Xt(i=e[t])?i:[];f[t]=d&&i.length>=120?lt(t&&i):null}var b=e[0],o=-1,s=b?b.length:0,u=f[0];e:for(;++o2?e[a-2]:E,f=a>1?e[a-1]:E;return a>2&&"function"==typeof t?a-=2:(t=a>1&&"function"==typeof f?(--a,f):E,f=E),e.length=a,Df(e,t,f)}),en=mc(function(e){return e=Ba(e),this.thru(function(a){return Qe(Bn(a)?a:[sf(a)],e)})}),an=mc(function(e,a){return va(e,Ba(a))}),tn=bt(function(e,a,t){ed.call(e,t)?++e[t]:e[t]=1}),fn=wt(Nd),cn=wt(jd,!0),rn=It(aa,Nd),dn=It(ca,jd),nn=bt(function(e,a,t){ed.call(e,t)?e[t].push(a):e[t]=[a]}),bn=bt(function(e,a,t){e[t]=a}),on=mc(function(e,a,t){var f=-1,c="function"==typeof a,r=Qt(a),d=Xt(e)?zr(e.length):[];return Nd(e,function(e){var n=c?a:r&&null!=e?e[a]:E;d[++f]=n?n.apply(e,t):Jt(e,a,t)}),d}),sn=bt(function(e,a,t){e[t?0:1].push(a)},function(){return[[],[]]}),un=Mt(oa,Nd),hn=Mt(sa,jd),ln=mc(function(e,a){if(null==e)return[];var t=a[2];return t&&$t(a[0],a[1],t)&&(a.length=1),Za(e,Ba(a),[])}),pn=Ad||function(){return(new Kr).getTime()},gn=mc(function(e,a,t){var f=x;if(t.length){var c=y(t,gn.placeholder);f|=R}return jt(e,f,a,t,c)}),mn=mc(function(e,a){a=a.length?Ba(a):Xc(e);for(var t=-1,f=a.length;++t0||0>a)?new Z(t):(0>e?t=t.takeRight(-e):e&&(t=t.drop(e)),a!==E&&(a=+a||0,t=0>a?t.dropRight(-a):t.take(a-e)),t)},Z.prototype.takeRightWhile=function(e,a){return this.reverse().takeWhile(e,a).reverse()},Z.prototype.toArray=function(){return this.take(xd)},Oa(Z.prototype,function(e,t){var f=/^(?:filter|map|reject)|While$/.test(t),c=/^(?:first|last)$/.test(t),r=a[c?"take"+("last"==t?"Right":""):t];r&&(a.prototype[t]=function(){var a=c?[1]:arguments,t=this.__chain__,d=this.__wrapped__,n=!!this.__actions__.length,i=d instanceof Z,b=a[0],o=i||Bn(d);o&&f&&"function"==typeof b&&1!=b.length&&(i=o=!1);var s=function(e){return c&&t?r(e,1)[0]:r.apply(E,ba([e],a))},u={func:Ff,args:[s],thisArg:E},h=i&&!n;if(c&&!t)return h?(d=d.clone(),d.__actions__.push(u),e.call(d)):r.call(E,this.value())[0];if(!c&&o){d=h?d:new Z(this);var l=e.apply(d,a);return l.__actions__.push(u),new v(l,t)}return this.thru(s)})}),aa(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(e){var t=(/^(?:replace|split)$/.test(e)?$r:Xr)[e],f=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",c=/^(?:join|pop|replace|shift)$/.test(e);a.prototype[e]=function(){var e=arguments;return c&&!this.__chain__?t.apply(this.value(),e):this[f](function(a){return t.apply(a,e)})}}),Oa(Z.prototype,function(e,t){var f=a[t];if(f){var c=f.name,r=Td[c]||(Td[c]=[]);r.push({name:t,func:f})}}),Td[Ot(E,P).name]=[{name:"wrapper",func:E}],Z.prototype.clone=ae,Z.prototype.reverse=fe,Z.prototype.value=qe,a.prototype.chain=qf,a.prototype.commit=Vf,a.prototype.concat=en,a.prototype.plant=Yf,a.prototype.reverse=Gf,a.prototype.toString=Wf,a.prototype.run=a.prototype.toJSON=a.prototype.valueOf=a.prototype.value=Jf,a.prototype.collect=a.prototype.map,a.prototype.head=a.prototype.first,a.prototype.select=a.prototype.filter,a.prototype.tail=a.prototype.rest,a}var E,k="3.10.1",x=1,P=2,B=4,M=8,O=16,R=32,T=64,C=128,N=256,j=30,L="...",D=150,U=16,z=200,K=1,H=2,F="Expected a function",q="__lodash_placeholder__",V="[object Arguments]",Y="[object Array]",G="[object Boolean]",W="[object Date]",J="[object Error]",X="[object Function]",Z="[object Map]",$="[object Number]",Q="[object Object]",ee="[object RegExp]",ae="[object Set]",te="[object String]",fe="[object WeakMap]",ce="[object ArrayBuffer]",re="[object Float32Array]",de="[object Float64Array]",ne="[object Int8Array]",ie="[object Int16Array]",be="[object Int32Array]",oe="[object Uint8Array]",se="[object Uint8ClampedArray]",ue="[object Uint16Array]",he="[object Uint32Array]",le=/\b__p \+= '';/g,pe=/\b(__p \+=) '' \+/g,ge=/(__e\(.*?\)|\b__t\)) \+\n'';/g,me=/&(?:amp|lt|gt|quot|#39|#96);/g,ve=/[&<>"'`]/g,ye=RegExp(me.source),we=RegExp(ve.source),_e=/<%-([\s\S]+?)%>/g,Se=/<%([\s\S]+?)%>/g,Ae=/<%=([\s\S]+?)%>/g,Ie=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,Ee=/^\w*$/,ke=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,xe=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,Pe=RegExp(xe.source),Be=/[\u0300-\u036f\ufe20-\ufe23]/g,Me=/\\(\\)?/g,Oe=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Re=/\w*$/,Te=/^0[xX]/,Ce=/^\[object .+?Constructor\]$/,Ne=/^\d+$/,je=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Le=/($^)/,De=/['\n\r\u2028\u2029\\]/g,Ue=function(){var e="[A-Z\\xc0-\\xd6\\xd8-\\xde]",a="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(e+"+(?="+e+a+")|"+e+"?"+a+"|"+e+"+|[0-9]+","g")}(),ze=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"],Ke=-1,He={};He[re]=He[de]=He[ne]=He[ie]=He[be]=He[oe]=He[se]=He[ue]=He[he]=!0,He[V]=He[Y]=He[ce]=He[G]=He[W]=He[J]=He[X]=He[Z]=He[$]=He[Q]=He[ee]=He[ae]=He[te]=He[fe]=!1;var Fe={};Fe[V]=Fe[Y]=Fe[ce]=Fe[G]=Fe[W]=Fe[re]=Fe[de]=Fe[ne]=Fe[ie]=Fe[be]=Fe[$]=Fe[Q]=Fe[ee]=Fe[te]=Fe[oe]=Fe[se]=Fe[ue]=Fe[he]=!0,Fe[J]=Fe[X]=Fe[Z]=Fe[ae]=Fe[fe]=!1;var qe={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Ve={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Ye={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},Ge={"function":!0,object:!0},We={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Je={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Xe=Ge[typeof t]&&t&&!t.nodeType&&t,Ze=Ge[typeof a]&&a&&!a.nodeType&&a,$e=Xe&&Ze&&"object"==typeof e&&e&&e.Object&&e,Qe=Ge[typeof self]&&self&&self.Object&&self,ea=Ge[typeof window]&&window&&window.Object&&window,aa=Ze&&Ze.exports===Xe&&Xe,ta=$e||ea!==(this&&this.window)&&ea||Qe||this,fa=I();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(ta._=fa,define(function(){return fa})):Xe&&Ze?aa?(Ze.exports=fa)._=fa:Xe._=fa:ta._=fa}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],79:[function(e,a,t){(function(t){var f=e("./word-array"),c=function(){function e(){}return{extend:function(a){e.prototype=this;var t=new e;return a&&t.mixIn(a),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var a in e)e.hasOwnProperty(a)&&(this[a]=e[a]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),r=c.extend({reset:function(){this._data=new f,this._nDataBytes=0},_append:function(e){t.isBuffer(e)&&(e=f.fromBuffer(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(e){var a=this._data,t=a.words,c=a.sigBytes,r=this.blockSize,d=4*r,n=c/d;n=e?Math.ceil(n):Math.max((0|n)-this._minBufferSize,0);var i=n*r,b=Math.min(4*i,c);if(i){for(var o=0;i>o;o+=r)this._doProcessBlock(t,o);var s=t.splice(0,i);a.sigBytes-=b}return new f(s,b)},clone:function(){var e=c.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0}),d=r.extend({cfg:c.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){r.reset.call(this),this._doReset()},update:function(e){return"string"==typeof e&&(e=f.fromBuffer(new t(e,"utf8"))),t.isBuffer(e)&&(e=f.fromBuffer(e)),this._append(e),this._process(),this},finalize:function(e){"string"==typeof e&&(e=f.fromBuffer(new t(e,"utf8"))),t.isBuffer(e)&&(e=f.fromBuffer(e)),e&&this._append(e);var a=this._doFinalize();return a.toBuffer()},blockSize:16,_createHelper:function(e){return function(a,t){return new e.init(t).finalize(a)}}});a.exports.Hasher=d}).call(this,e("buffer").Buffer)},{"./word-array":83,buffer:99}],80:[function(e,a,t){(function(t){function f(e){if(!(this instanceof f))return new f(e);var a=this._hasher=new c.init;"string"==typeof e&&(e=r.fromBuffer(new t(e,"utf8"))),t.isBuffer(e)&&(e=r.fromBuffer(e));var d=a.blockSize,n=4*d;e.sigBytes>n&&(e=a.finalize(e)),e.clamp();for(var i=this._oKey=e.clone(),b=this._iKey=e.clone(),o=i.words,s=b.words,u=0;d>u;u++)o[u]^=1549556828,s[u]^=909522486;i.sigBytes=b.sigBytes=n,this.reset()}var c=e("./sha512").sha512,r=e("./word-array");f.prototype.reset=function(){var e=this._hasher;e.reset(),e.update(this._iKey)},f.prototype.update=function(e){return"string"==typeof e&&(e=r.fromBuffer(new t(e,"utf8"))),t.isBuffer(e)&&(e=r.fromBuffer(e)),this._hasher.update(e),this},f.prototype.finalize=function(e){"string"==typeof e&&(e=r.fromBuffer(new t(e,"utf8"))),t.isBuffer(e)&&(e=r.fromBuffer(e));var a=this._hasher,f=a.finalize(e);a.reset();var c=a.finalize(this._oKey.clone().concat(f));return c},a.exports=f}).call(this,e("buffer").Buffer)},{"./sha512":82,"./word-array":83,buffer:99}],81:[function(e,a,t){a.exports=e("./sha512"),a.exports.hmac=e("./hmac")},{"./hmac":80,"./sha512":82}],82:[function(e,a,t){var f=e("./cryptojs").Hasher,c=e("./x64"),r=c.Word,d=c.WordArray,n=[r(1116352408,3609767458),r(1899447441,602891725),r(3049323471,3964484399),r(3921009573,2173295548),r(961987163,4081628472),r(1508970993,3053834265),r(2453635748,2937671579),r(2870763221,3664609560),r(3624381080,2734883394),r(310598401,1164996542),r(607225278,1323610764),r(1426881987,3590304994),r(1925078388,4068182383),r(2162078206,991336113),r(2614888103,633803317),r(3248222580,3479774868),r(3835390401,2666613458),r(4022224774,944711139),r(264347078,2341262773),r(604807628,2007800933),r(770255983,1495990901),r(1249150122,1856431235),r(1555081692,3175218132),r(1996064986,2198950837),r(2554220882,3999719339),r(2821834349,766784016),r(2952996808,2566594879),r(3210313671,3203337956),r(3336571891,1034457026),r(3584528711,2466948901),r(113926993,3758326383),r(338241895,168717936),r(666307205,1188179964),r(773529912,1546045734),r(1294757372,1522805485),r(1396182291,2643833823),r(1695183700,2343527390),r(1986661051,1014477480),r(2177026350,1206759142),r(2456956037,344077627),r(2730485921,1290863460),r(2820302411,3158454273),r(3259730800,3505952657),r(3345764771,106217008),r(3516065817,3606008344),r(3600352804,1432725776),r(4094571909,1467031594),r(275423344,851169720),r(430227734,3100823752),r(506948616,1363258195),r(659060556,3750685593),r(883997877,3785050280),r(958139571,3318307427),r(1322822218,3812723403),r(1537002063,2003034995),r(1747873779,3602036899),r(1955562222,1575990012),r(2024104815,1125592928),r(2227730452,2716904306),r(2361852424,442776044),r(2428436474,593698344),r(2756734187,3733110249),r(3204031479,2999351573),r(3329325298,3815920427),r(3391569614,3928383900),r(3515267271,566280711),r(3940187606,3454069534),r(4118630271,4000239992),r(116418474,1914138554),r(174292421,2731055270),r(289380356,3203993006),r(460393269,320620315),r(685471733,587496836),r(852142971,1086792851),r(1017036298,365543100),r(1126000580,2618297676),r(1288033470,3409855158),r(1501505948,4234509866),r(1607167915,987167468),r(1816402316,1246189591)],i=[];!function(){for(var e=0;80>e;e++)i[e]=r()}();var b=f.extend({_doReset:function(){this._hash=new d([r(1779033703,4089235720),r(3144134277,2227873595),r(1013904242,4271175723),r(2773480762,1595750129),r(1359893119,2917565137),r(2600822924,725511199),r(528734635,4215389547),r(1541459225,327033209)])},_doProcessBlock:function(e,a){for(var t=this._hash.words,f=t[0],c=t[1],r=t[2],d=t[3],b=t[4],o=t[5],s=t[6],u=t[7],h=f.high,l=f.low,p=c.high,g=c.low,m=r.high,v=r.low,y=d.high,w=d.low,_=b.high,S=b.low,A=o.high,I=o.low,E=s.high,k=s.low,x=u.high,P=u.low,B=h,M=l,O=p,R=g,T=m,C=v,N=y,j=w,L=_,D=S,U=A,z=I,K=E,H=k,F=x,q=P,V=0;80>V;V++){var Y=i[V];if(16>V)var G=Y.high=0|e[a+2*V],W=Y.low=0|e[a+2*V+1];else{var J=i[V-15],X=J.high,Z=J.low,$=(X>>>1|Z<<31)^(X>>>8|Z<<24)^X>>>7,Q=(Z>>>1|X<<31)^(Z>>>8|X<<24)^(Z>>>7|X<<25),ee=i[V-2],ae=ee.high,te=ee.low,fe=(ae>>>19|te<<13)^(ae<<3|te>>>29)^ae>>>6,ce=(te>>>19|ae<<13)^(te<<3|ae>>>29)^(te>>>6|ae<<26),re=i[V-7],de=re.high,ne=re.low,ie=i[V-16],be=ie.high,oe=ie.low,W=Q+ne,G=$+de+(Q>>>0>W>>>0?1:0),W=W+ce,G=G+fe+(ce>>>0>W>>>0?1:0),W=W+oe,G=G+be+(oe>>>0>W>>>0?1:0);Y.high=G,Y.low=W}var se=L&U^~L&K,ue=D&z^~D&H,he=B&O^B&T^O&T,le=M&R^M&C^R&C,pe=(B>>>28|M<<4)^(B<<30|M>>>2)^(B<<25|M>>>7),ge=(M>>>28|B<<4)^(M<<30|B>>>2)^(M<<25|B>>>7),me=(L>>>14|D<<18)^(L>>>18|D<<14)^(L<<23|D>>>9),ve=(D>>>14|L<<18)^(D>>>18|L<<14)^(D<<23|L>>>9),ye=n[V],we=ye.high,_e=ye.low,Se=q+ve,Ae=F+me+(q>>>0>Se>>>0?1:0),Se=Se+ue,Ae=Ae+se+(ue>>>0>Se>>>0?1:0),Se=Se+_e,Ae=Ae+we+(_e>>>0>Se>>>0?1:0),Se=Se+W,Ae=Ae+G+(W>>>0>Se>>>0?1:0),Ie=ge+le,Ee=pe+he+(ge>>>0>Ie>>>0?1:0);F=K,q=H,K=U,H=z,U=L,z=D,D=j+Se|0,L=N+Ae+(j>>>0>D>>>0?1:0)|0,N=T,j=C,T=O,C=R,O=B,R=M,M=Se+Ie|0,B=Ae+Ee+(Se>>>0>M>>>0?1:0)|0}l=f.low=l+M,f.high=h+B+(M>>>0>l>>>0?1:0),g=c.low=g+R,c.high=p+O+(R>>>0>g>>>0?1:0),v=r.low=v+C,r.high=m+T+(C>>>0>v>>>0?1:0),w=d.low=w+j,d.high=y+N+(j>>>0>w>>>0?1:0),S=b.low=S+D,b.high=_+L+(D>>>0>S>>>0?1:0),I=o.low=I+z,o.high=A+U+(z>>>0>I>>>0?1:0),k=s.low=k+H,s.high=E+K+(H>>>0>k>>>0?1:0),P=u.low=P+q,u.high=x+F+(q>>>0>P>>>0?1:0)},_doFinalize:function(){var e=this._data,a=e.words,t=8*this._nDataBytes,f=8*e.sigBytes;a[f>>>5]|=128<<24-f%32,a[(f+128>>>10<<5)+30]=Math.floor(t/4294967296),a[(f+128>>>10<<5)+31]=t,e.sigBytes=4*a.length,this._process();var c=this._hash.toX32();return c},clone:function(){var e=f.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32});a.exports=f._createHelper(b),a.exports.sha512=b},{"./cryptojs":79,"./x64":84}],83:[function(e,a,t){(function(e,t){function f(e,a){this.words=e||[],void 0!=a?this.sigBytes=a:this.sigBytes=4*this.words.length}a.exports=f,f.prototype.concat=function(e){t.isBuffer(e)&&(e=f.fromBuffer(e));var a=this.words,c=e.words,r=this.sigBytes,d=e.sigBytes;if(this.clamp(),r%4)for(var n=0;d>n;n++){var i=c[n>>>2]>>>24-n%4*8&255;a[r+n>>>2]|=i<<24-(r+n)%4*8}else if(c.length>65535)for(var n=0;d>n;n+=4)a[r+n>>>2]=c[n>>>2];else a.push.apply(a,c);return this.sigBytes+=d,this},f.prototype.clamp=function(){var e=this.words,a=this.sigBytes;e[a>>>2]&=4294967295<<32-a%4*8,e.length=Math.ceil(a/4)},f.prototype.clone=function(){var e=new f(this.words.slice(0));return e},f.prototype.toBuffer=function(){for(var e=new t(4*this.words.length),a=0;ad;d+=4){var n=a.readUInt32BE(d);r.push(n)}for(var i=0,b=t-c,o=0;c>o;o+=1)i|=a.readUInt8(b+o)<<8*(3-o);return c>0&&r.push(i),new f(r,a.length)}for(var d=0;t>d;d+=4){var n=a.readUInt32BE(d,!0);r.push(n)}return new f(r,a.length)}}).call(this,e("_process"),e("buffer").Buffer)},{_process:299,buffer:99}],84:[function(e,a,t){function f(e,a){return this instanceof f?(this.high=e,void(this.low=a)):new f(e,a)}function c(e){this.words=e||[]}var r=e("./word-array");c.prototype.toX32=function(){for(var e=this.words,a=e.length,t=[],f=0;a>f;f++){var c=e[f];t.push(c.high),t.push(c.low)}return new r(t,this.sigBytes)},a.exports.Word=f,a.exports.WordArray=c},{"./word-array":83}],85:[function(e,a,t){a.exports={name:"bitcore-lib",version:"0.13.13",description:"A pure and powerful JavaScript Bitcoin library.",author:{name:"BitPay",email:"dev@bitpay.com"},main:"index.js",scripts:{lint:"gulp lint",test:"gulp test",coverage:"gulp coverage",build:"gulp"},contributors:[{name:"Daniel Cousens",email:"bitcoin@dcousens.com"},{name:"Esteban Ordano",email:"eordano@gmail.com"},{name:"Gordon Hall",email:"gordon@bitpay.com"},{name:"Jeff Garzik",email:"jgarzik@bitpay.com"},{name:"Kyle Drake",email:"kyle@kyledrake.net"},{name:"Manuel Araoz",email:"manuelaraoz@gmail.com"},{name:"Matias Alejo Garcia",email:"ematiu@gmail.com"},{name:"Ryan X. Charles",email:"ryanxcharles@gmail.com"},{name:"Stefan Thomas",email:"moon@justmoon.net"},{name:"Stephen Pair",email:"stephen@bitpay.com"},{name:"Wei Lu",email:"luwei.here@gmail.com"}],keywords:["bitcoin","transaction","address","p2p","ecies","cryptocurrency","blockchain","payment","bip21","bip32","bip37","bip69","bip70","multisig"],repository:{type:"git",url:"git+https://github.com/bitpay/bitcore-lib.git"},browser:{request:"browser-request"},dependencies:{"bn.js":"=2.0.4",bs58:"=2.0.0","buffer-compare":"=1.0.0",elliptic:"=3.0.3",inherits:"=2.0.1",lodash:"=3.10.1",sha512:"=0.0.1"},devDependencies:{"bitcore-build":"github:bitpay/bitcore-build",brfs:"^1.2.0",chai:"^1.10.0",gulp:"^3.8.10",sinon:"^1.13.0"},license:"MIT",gitHead:"00b693d658cd1a8d9c4f68b0e587b60b298b79cb",bugs:{url:"https://github.com/bitpay/bitcore-lib/issues"},homepage:"https://github.com/bitpay/bitcore-lib#readme",_id:"bitcore-lib@0.13.13",_shasum:"fa63f4e3b1b52ab706815799da77936231354c9d",_from:"bitcore-lib@>=0.13.13 <0.14.0",_npmVersion:"2.14.7",_nodeVersion:"4.2.1",_npmUser:{name:"braydonf",email:"braydon@bitpay.com"},maintainers:[{name:"braydonf",email:"braydon@bitpay.com"},{name:"gabegattis",email:"gabegattis@gmail.com"},{name:"gasteve",email:"stephen@pairhome.net"},{name:"patrickbitpay",email:"patrick@bitpay.com"}],dist:{shasum:"fa63f4e3b1b52ab706815799da77936231354c9d",tarball:"http://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.13.13.tgz"},_npmOperationalInternal:{host:"packages-5-east.internal.npmjs.com",tmp:"tmp/bitcore-lib-0.13.13.tgz_1454685054368_0.7489039490465075"},directories:{},_resolved:"https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.13.13.tgz",readme:"ERROR: No README data found!"}},{}],86:[function(e,a,t){a.exports=e("./lib/mnemonic")},{"./lib/mnemonic":88}],87:[function(e,a,t){"use strict";var f={name:"Mnemonic",message:"Internal Error on bitcore-mnemonic module {0}",errors:[{name:"InvalidEntropy",message:"Entropy length must be an even multiple of 11 bits: {0}"},{name:"UnknownWordlist",message:"Could not detect the used word list: {0}"},{name:"InvalidMnemonic",message:"Mnemonic string is invalid: {0}"}]};a.exports=e("bitcore-lib").errors.extend(f)},{"bitcore-lib":7}],88:[function(e,a,t){(function(t){"use strict";var f=e("bitcore-lib"),c=f.crypto.BN,r=e("unorm"),d=f.deps._,n=e("./pbkdf2"),i=e("./errors"),b=f.crypto.Hash,o=f.crypto.Random,s=f.util.preconditions,u=function(e,a){if(!(this instanceof u))return new u(e,a);d.isArray(e)&&(a=e,e=null);var c,n,b;if(t.isBuffer(e))b=e;else if(d.isString(e))n=r.nfkd(e);else if(d.isNumber(e))c=e;else if(e)throw new f.errors.InvalidArgument("data","Must be a Buffer, a string or an integer");if(c=c||128,a=a||u._getDictionary(n),n&&!a)throw new i.UnknownWordlist(n);if(a=a||u.Words.ENGLISH,b&&(n=u._entropy2mnemonic(b,a)),n&&!u.isValid(n,a))throw new i.InvalidMnemonic(n);if(c%32!==0||128>c)throw new f.errors.InvalidArgument("ENT","Values must be ENT > 128 and ENT % 32 == 0");n=n||u._mnemonic(c,a),Object.defineProperty(this,"wordlist",{configurable:!1,value:a}),Object.defineProperty(this,"phrase",{configurable:!1,value:n})};u.Words=e("./words"),u.isValid=function(e,a){if(e=r.nfkd(e),a=a||u._getDictionary(e),!a)return!1;for(var f=e.split(" "),c="",d=0;dn)return!1;c+=("00000000000"+n.toString(2)).slice(-11)}var i=c.length/33,b=c.slice(-i),o=c.slice(0,c.length-i),s=new t(o.length/8);for(d=0;dc)return!1}return!0},u._getDictionary=function(e){if(!e)return null;for(var a=Object.keys(u.Words),t=0;t"},u._mnemonic=function(e,a){var t=o.getRandomBuffer(e/8);return u._entropy2mnemonic(t,a)},u._entropy2mnemonic=function(e,a){for(var t="",f=0;f(Math.pow(2,32)-1)*d)throw Error("Requested key length too long");if("string"!=typeof e&&!t.isBuffer(e))throw new TypeError("key must a string or Buffer");if("string"!=typeof a&&!t.isBuffer(a))throw new TypeError("salt must a string or Buffer");"string"==typeof e&&(e=new t(e)),"string"==typeof a&&(a=new t(a));var n=new t(r),i=new t(d),b=new t(d),o=new t(a.length+4),s=Math.ceil(r/d),u=r-(s-1)*d;a.copy(o,0,0,a.length);for(var h=1;s>=h;h++){o[a.length+0]=h>>24&255,o[a.length+1]=h>>16&255,o[a.length+2]=h>>8&255,o[a.length+3]=h>>0&255,i=c.createHmac("sha512",e).update(o).digest(),i.copy(b,0,0,d);for(var l=1;f>l;l++){i=c.createHmac("sha512",e).update(i).digest();for(var p=0;d>p;p++)b[p]^=i[p]}var g=(h-1)*d,m=h===s?u:d;b.copy(n,g,0,m)}return n}var c=e("crypto");a.exports=f}).call(this,e("buffer").Buffer)},{buffer:99,crypto:103}],90:[function(e,a,t){"use strict";var f=["的","一","是","在","不","了","有","和","人","这","中","大","为","上","个","国","我","以","要","他","时","来","用","们","生","到","作","地","于","出","就","分","对","成","会","可","主","发","年","动","同","工","也","能","下","过","子","说","产","种","面","而","方","后","多","定","行","学","法","所","民","得","经","十","三","之","进","着","等","部","度","家","电","力","里","如","水","化","高","自","二","理","起","小","物","现","实","加","量","都","两","体","制","机","当","使","点","从","业","本","去","把","性","好","应","开","它","合","还","因","由","其","些","然","前","外","天","政","四","日","那","社","义","事","平","形","相","全","表","间","样","与","关","各","重","新","线","内","数","正","心","反","你","明","看","原","又","么","利","比","或","但","质","气","第","向","道","命","此","变","条","只","没","结","解","问","意","建","月","公","无","系","军","很","情","者","最","立","代","想","已","通","并","提","直","题","党","程","展","五","果","料","象","员","革","位","入","常","文","总","次","品","式","活","设","及","管","特","件","长","求","老","头","基","资","边","流","路","级","少","图","山","统","接","知","较","将","组","见","计","别","她","手","角","期","根","论","运","农","指","几","九","区","强","放","决","西","被","干","做","必","战","先","回","则","任","取","据","处","队","南","给","色","光","门","即","保","治","北","造","百","规","热","领","七","海","口","东","导","器","压","志","世","金","增","争","济","阶","油","思","术","极","交","受","联","什","认","六","共","权","收","证","改","清","美","再","采","转","更","单","风","切","打","白","教","速","花","带","安","场","身","车","例","真","务","具","万","每","目","至","达","走","积","示","议","声","报","斗","完","类","八","离","华","名","确","才","科","张","信","马","节","话","米","整","空","元","况","今","集","温","传","土","许","步","群","广","石","记","需","段","研","界","拉","林","律","叫","且","究","观","越","织","装","影","算","低","持","音","众","书","布","复","容","儿","须","际","商","非","验","连","断","深","难","近","矿","千","周","委","素","技","备","半","办","青","省","列","习","响","约","支","般","史","感","劳","便","团","往","酸","历","市","克","何","除","消","构","府","称","太","准","精","值","号","率","族","维","划","选","标","写","存","候","毛","亲","快","效","斯","院","查","江","型","眼","王","按","格","养","易","置","派","层","片","始","却","专","状","育","厂","京","识","适","属","圆","包","火","住","调","满","县","局","照","参","红","细","引","听","该","铁","价","严","首","底","液","官","德","随","病","苏","失","尔","死","讲","配","女","黄","推","显","谈","罪","神","艺","呢","席","含","企","望","密","批","营","项","防","举","球","英","氧","势","告","李","台","落","木","帮","轮","破","亚","师","围","注","远","字","材","排","供","河","态","封","另","施","减","树","溶","怎","止","案","言","士","均","武","固","叶","鱼","波","视","仅","费","紧","爱","左","章","早","朝","害","续","轻","服","试","食","充","兵","源","判","护","司","足","某","练","差","致","板","田","降","黑","犯","负","击","范","继","兴","似","余","坚","曲","输","修","故","城","夫","够","送","笔","船","占","右","财","吃","富","春","职","觉","汉","画","功","巴","跟","虽","杂","飞","检","吸","助","升","阳","互","初","创","抗","考","投","坏","策","古","径","换","未","跑","留","钢","曾","端","责","站","简","述","钱","副","尽","帝","射","草","冲","承","独","令","限","阿","宣","环","双","请","超","微","让","控","州","良","轴","找","否","纪","益","依","优","顶","础","载","倒","房","突","坐","粉","敌","略","客","袁","冷","胜","绝","析","块","剂","测","丝","协","诉","念","陈","仍","罗","盐","友","洋","错","苦","夜","刑","移","频","逐","靠","混","母","短","皮","终","聚","汽","村","云","哪","既","距","卫","停","烈","央","察","烧","迅","境","若","印","洲","刻","括","激","孔","搞","甚","室","待","核","校","散","侵","吧","甲","游","久","菜","味","旧","模","湖","货","损","预","阻","毫","普","稳","乙","妈","植","息","扩","银","语","挥","酒","守","拿","序","纸","医","缺","雨","吗","针","刘","啊","急","唱","误","训","愿","审","附","获","茶","鲜","粮","斤","孩","脱","硫","肥","善","龙","演","父","渐","血","欢","械","掌","歌","沙","刚","攻","谓","盾","讨","晚","粒","乱","燃","矛","乎","杀","药","宁","鲁","贵","钟","煤","读","班","伯","香","介","迫","句","丰","培","握","兰","担","弦","蛋","沉","假","穿","执","答","乐","谁","顺","烟","缩","征","脸","喜","松","脚","困","异","免","背","星","福","买","染","井","概","慢","怕","磁","倍","祖","皇","促","静","补","评","翻","肉","践","尼","衣","宽","扬","棉","希","伤","操","垂","秋","宜","氢","套","督","振","架","亮","末","宪","庆","编","牛","触","映","雷","销","诗","座","居","抓","裂","胞","呼","娘","景","威","绿","晶","厚","盟","衡","鸡","孙","延","危","胶","屋","乡","临","陆","顾","掉","呀","灯","岁","措","束","耐","剧","玉","赵","跳","哥","季","课","凯","胡","额","款","绍","卷","齐","伟","蒸","殖","永","宗","苗","川","炉","岩","弱","零","杨","奏","沿","露","杆","探","滑","镇","饭","浓","航","怀","赶","库","夺","伊","灵","税","途","灭","赛","归","召","鼓","播","盘","裁","险","康","唯","录","菌","纯","借","糖","盖","横","符","私","努","堂","域","枪","润","幅","哈","竟","熟","虫","泽","脑","壤","碳","欧","遍","侧","寨","敢","彻","虑","斜","薄","庭","纳","弹","饲","伸","折","麦","湿","暗","荷","瓦","塞","床","筑","恶","户","访","塔","奇","透","梁","刀","旋","迹","卡","氯","遇","份","毒","泥","退","洗","摆","灰","彩","卖","耗","夏","择","忙","铜","献","硬","予","繁","圈","雪","函","亦","抽","篇","阵","阴","丁","尺","追","堆","雄","迎","泛","爸","楼","避","谋","吨","野","猪","旗","累","偏","典","馆","索","秦","脂","潮","爷","豆","忽","托","惊","塑","遗","愈","朱","替","纤","粗","倾","尚","痛","楚","谢","奋","购","磨","君","池","旁","碎","骨","监","捕","弟","暴","割","贯","殊","释","词","亡","壁","顿","宝","午","尘","闻","揭","炮","残","冬","桥","妇","警","综","招","吴","付","浮","遭","徐","您","摇","谷","赞","箱","隔","订","男","吹","园","纷","唐","败","宋","玻","巨","耕","坦","荣","闭","湾","键","凡","驻","锅","救","恩","剥","凝","碱","齿","截","炼","麻","纺","禁","废","盛","版","缓","净","睛","昌","婚","涉","筒","嘴","插","岸","朗","庄","街","藏","姑","贸","腐","奴","啦","惯","乘","伙","恢","匀","纱","扎","辩","耳","彪","臣","亿","璃","抵","脉","秀","萨","俄","网","舞","店","喷","纵","寸","汗","挂","洪","贺","闪","柬","爆","烯","津","稻","墙","软","勇","像","滚","厘","蒙","芳","肯","坡","柱","荡","腿","仪","旅","尾","轧","冰","贡","登","黎","削","钻","勒","逃","障","氨","郭","峰","币","港","伏","轨","亩","毕","擦","莫","刺","浪","秘","援","株","健","售","股","岛","甘","泡","睡","童","铸","汤","阀","休","汇","舍","牧","绕","炸","哲","磷","绩","朋","淡","尖","启","陷","柴","呈","徒","颜","泪","稍","忘","泵","蓝","拖","洞","授","镜","辛","壮","锋","贫","虚","弯","摩","泰","幼","廷","尊","窗","纲","弄","隶","疑","氏","宫","姐","震","瑞","怪","尤","琴","循","描","膜","违","夹","腰","缘","珠","穷","森","枝","竹","沟","催","绳","忆","邦","剩","幸","浆","栏","拥","牙","贮","礼","滤","钠","纹","罢","拍","咱","喊","袖","埃","勤","罚","焦","潜","伍","墨","欲","缝","姓","刊","饱","仿","奖","铝","鬼","丽","跨","默","挖","链","扫","喝","袋","炭","污","幕","诸","弧","励","梅","奶","洁","灾","舟","鉴","苯","讼","抱","毁","懂","寒","智","埔","寄","届","跃","渡","挑","丹","艰","贝","碰","拔","爹","戴","码","梦","芽","熔","赤","渔","哭","敬","颗","奔","铅","仲","虎","稀","妹","乏","珍","申","桌","遵","允","隆","螺","仓","魏","锐","晓","氮","兼","隐","碍","赫","拨","忠","肃","缸","牵","抢","博","巧","壳","兄","杜","讯","诚","碧","祥","柯","页","巡","矩","悲","灌","龄","伦","票","寻","桂","铺","圣","恐","恰","郑","趣","抬","荒","腾","贴","柔","滴","猛","阔","辆","妻","填","撤","储","签","闹","扰","紫","砂","递","戏","吊","陶","伐","喂","疗","瓶","婆","抚","臂","摸","忍","虾","蜡","邻","胸","巩","挤","偶","弃","槽","劲","乳","邓","吉","仁","烂","砖","租","乌","舰","伴","瓜","浅","丙","暂","燥","橡","柳","迷","暖","牌","秧","胆","详","簧","踏","瓷","谱","呆","宾","糊","洛","辉","愤","竞","隙","怒","粘","乃","绪","肩","籍","敏","涂","熙","皆","侦","悬","掘","享","纠","醒","狂","锁","淀","恨","牲","霸","爬","赏","逆","玩","陵","祝","秒","浙","貌","役","彼","悉","鸭","趋","凤","晨","畜","辈","秩","卵","署","梯","炎","滩","棋","驱","筛","峡","冒","啥","寿","译","浸","泉","帽","迟","硅","疆","贷","漏","稿","冠","嫩","胁","芯","牢","叛","蚀","奥","鸣","岭","羊","凭","串","塘","绘","酵","融","盆","锡","庙","筹","冻","辅","摄","袭","筋","拒","僚","旱","钾","鸟","漆","沈","眉","疏","添","棒","穗","硝","韩","逼","扭","侨","凉","挺","碗","栽","炒","杯","患","馏","劝","豪","辽","勃","鸿","旦","吏","拜","狗","埋","辊","掩","饮","搬","骂","辞","勾","扣","估","蒋","绒","雾","丈","朵","姆","拟","宇","辑","陕","雕","偿","蓄","崇","剪","倡","厅","咬","驶","薯","刷","斥","番","赋","奉","佛","浇","漫","曼","扇","钙","桃","扶","仔","返","俗","亏","腔","鞋","棱","覆","框","悄","叔","撞","骗","勘","旺","沸","孤","吐","孟","渠","屈","疾","妙","惜","仰","狠","胀","谐","抛","霉","桑","岗","嘛","衰","盗","渗","脏","赖","涌","甜","曹","阅","肌","哩","厉","烃","纬","毅","昨","伪","症","煮","叹","钉","搭","茎","笼","酷","偷","弓","锥","恒","杰","坑","鼻","翼","纶","叙","狱","逮","罐","络","棚","抑","膨","蔬","寺","骤","穆","冶","枯","册","尸","凸","绅","坯","牺","焰","轰","欣","晋","瘦","御","锭","锦","丧","旬","锻","垄","搜","扑","邀","亭","酯","迈","舒","脆","酶","闲","忧","酚","顽","羽","涨","卸","仗","陪","辟","惩","杭","姚","肚","捉","飘","漂","昆","欺","吾","郎","烷","汁","呵","饰","萧","雅","邮","迁","燕","撒","姻","赴","宴","烦","债","帐","斑","铃","旨","醇","董","饼","雏","姿","拌","傅","腹","妥","揉","贤","拆","歪","葡","胺","丢","浩","徽","昂","垫","挡","览","贪","慰","缴","汪","慌","冯","诺","姜","谊","凶","劣","诬","耀","昏","躺","盈","骑","乔","溪","丛","卢","抹","闷","咨","刮","驾","缆","悟","摘","铒","掷","颇","幻","柄","惠","惨","佳","仇","腊","窝","涤","剑","瞧","堡","泼","葱","罩","霍","捞","胎","苍","滨","俩","捅","湘","砍","霞","邵","萄","疯","淮","遂","熊","粪","烘","宿","档","戈","驳","嫂","裕","徙","箭","捐","肠","撑","晒","辨","殿","莲","摊","搅","酱","屏","疫","哀","蔡","堵","沫","皱","畅","叠","阁","莱","敲","辖","钩","痕","坝","巷","饿","祸","丘","玄","溜","曰","逻","彭","尝","卿","妨","艇","吞","韦","怨","矮","歇"]; -a.exports=f},{}],91:[function(e,a,t){"use strict";var f=["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"];a.exports=f},{}],92:[function(e,a,t){"use string";var f=["abaisser","abandon","abdiquer","abeille","abolir","aborder","aboutir","aboyer","abrasif","abreuver","abriter","abroger","abrupt","absence","absolu","absurde","abusif","abyssal","académie","acajou","acarien","accabler","accepter","acclamer","accolade","accroche","accuser","acerbe","achat","acheter","aciduler","acier","acompte","acquérir","acronyme","acteur","actif","actuel","adepte","adéquat","adhésif","adjectif","adjuger","admettre","admirer","adopter","adorer","adoucir","adresse","adroit","adulte","adverbe","aérer","aéronef","affaire","affecter","affiche","affreux","affubler","agacer","agencer","agile","agiter","agrafer","agréable","agrume","aider","aiguille","ailier","aimable","aisance","ajouter","ajuster","alarmer","alchimie","alerte","algèbre","algue","aliéner","aliment","alléger","alliage","allouer","allumer","alourdir","alpaga","altesse","alvéole","amateur","ambigu","ambre","aménager","amertume","amidon","amiral","amorcer","amour","amovible","amphibie","ampleur","amusant","analyse","anaphore","anarchie","anatomie","ancien","anéantir","angle","angoisse","anguleux","animal","annexer","annonce","annuel","anodin","anomalie","anonyme","anormal","antenne","antidote","anxieux","apaiser","apéritif","aplanir","apologie","appareil","appeler","apporter","appuyer","aquarium","aqueduc","arbitre","arbuste","ardeur","ardoise","argent","arlequin","armature","armement","armoire","armure","arpenter","arracher","arriver","arroser","arsenic","artériel","article","aspect","asphalte","aspirer","assaut","asservir","assiette","associer","assurer","asticot","astre","astuce","atelier","atome","atrium","atroce","attaque","attentif","attirer","attraper","aubaine","auberge","audace","audible","augurer","aurore","automne","autruche","avaler","avancer","avarice","avenir","averse","aveugle","aviateur","avide","avion","aviser","avoine","avouer","avril","axial","axiome","badge","bafouer","bagage","baguette","baignade","balancer","balcon","baleine","balisage","bambin","bancaire","bandage","banlieue","bannière","banquier","barbier","baril","baron","barque","barrage","bassin","bastion","bataille","bateau","batterie","baudrier","bavarder","belette","bélier","belote","bénéfice","berceau","berger","berline","bermuda","besace","besogne","bétail","beurre","biberon","bicycle","bidule","bijou","bilan","bilingue","billard","binaire","biologie","biopsie","biotype","biscuit","bison","bistouri","bitume","bizarre","blafard","blague","blanchir","blessant","blinder","blond","bloquer","blouson","bobard","bobine","boire","boiser","bolide","bonbon","bondir","bonheur","bonifier","bonus","bordure","borne","botte","boucle","boueux","bougie","boulon","bouquin","bourse","boussole","boutique","boxeur","branche","brasier","brave","brebis","brèche","breuvage","bricoler","brigade","brillant","brioche","brique","brochure","broder","bronzer","brousse","broyeur","brume","brusque","brutal","bruyant","buffle","buisson","bulletin","bureau","burin","bustier","butiner","butoir","buvable","buvette","cabanon","cabine","cachette","cadeau","cadre","caféine","caillou","caisson","calculer","calepin","calibre","calmer","calomnie","calvaire","camarade","caméra","camion","campagne","canal","caneton","canon","cantine","canular","capable","caporal","caprice","capsule","capter","capuche","carabine","carbone","caresser","caribou","carnage","carotte","carreau","carton","cascade","casier","casque","cassure","causer","caution","cavalier","caverne","caviar","cédille","ceinture","céleste","cellule","cendrier","censurer","central","cercle","cérébral","cerise","cerner","cerveau","cesser","chagrin","chaise","chaleur","chambre","chance","chapitre","charbon","chasseur","chaton","chausson","chavirer","chemise","chenille","chéquier","chercher","cheval","chien","chiffre","chignon","chimère","chiot","chlorure","chocolat","choisir","chose","chouette","chrome","chute","cigare","cigogne","cimenter","cinéma","cintrer","circuler","cirer","cirque","citerne","citoyen","citron","civil","clairon","clameur","claquer","classe","clavier","client","cligner","climat","clivage","cloche","clonage","cloporte","cobalt","cobra","cocasse","cocotier","coder","codifier","coffre","cogner","cohésion","coiffer","coincer","colère","colibri","colline","colmater","colonel","combat","comédie","commande","compact","concert","conduire","confier","congeler","connoter","consonne","contact","convexe","copain","copie","corail","corbeau","cordage","corniche","corpus","correct","cortège","cosmique","costume","coton","coude","coupure","courage","couteau","couvrir","coyote","crabe","crainte","cravate","crayon","créature","créditer","crémeux","creuser","crevette","cribler","crier","cristal","critère","croire","croquer","crotale","crucial","cruel","crypter","cubique","cueillir","cuillère","cuisine","cuivre","culminer","cultiver","cumuler","cupide","curatif","curseur","cyanure","cycle","cylindre","cynique","daigner","damier","danger","danseur","dauphin","débattre","débiter","déborder","débrider","débutant","décaler","décembre","déchirer","décider","déclarer","décorer","décrire","décupler","dédale","déductif","déesse","défensif","défiler","défrayer","dégager","dégivrer","déglutir","dégrafer","déjeuner","délice","déloger","demander","demeurer","démolir","dénicher","dénouer","dentelle","dénuder","départ","dépenser","déphaser","déplacer","déposer","déranger","dérober","désastre","descente","désert","désigner","désobéir","dessiner","destrier","détacher","détester","détourer","détresse","devancer","devenir","deviner","devoir","diable","dialogue","diamant","dicter","différer","digérer","digital","digne","diluer","dimanche","diminuer","dioxyde","directif","diriger","discuter","disposer","dissiper","distance","divertir","diviser","docile","docteur","dogme","doigt","domaine","domicile","dompter","donateur","donjon","donner","dopamine","dortoir","dorure","dosage","doseur","dossier","dotation","douanier","double","douceur","douter","doyen","dragon","draper","dresser","dribbler","droiture","duperie","duplexe","durable","durcir","dynastie","éblouir","écarter","écharpe","échelle","éclairer","éclipse","éclore","écluse","école","économie","écorce","écouter","écraser","écrémer","écrivain","écrou","écume","écureuil","édifier","éduquer","effacer","effectif","effigie","effort","effrayer","effusion","égaliser","égarer","éjecter","élaborer","élargir","électron","élégant","éléphant","élève","éligible","élitisme","éloge","élucider","éluder","emballer","embellir","embryon","émeraude","émission","emmener","émotion","émouvoir","empereur","employer","emporter","emprise","émulsion","encadrer","enchère","enclave","encoche","endiguer","endosser","endroit","enduire","énergie","enfance","enfermer","enfouir","engager","engin","englober","énigme","enjamber","enjeu","enlever","ennemi","ennuyeux","enrichir","enrobage","enseigne","entasser","entendre","entier","entourer","entraver","énumérer","envahir","enviable","envoyer","enzyme","éolien","épaissir","épargne","épatant","épaule","épicerie","épidémie","épier","épilogue","épine","épisode","épitaphe","époque","épreuve","éprouver","épuisant","équerre","équipe","ériger","érosion","erreur","éruption","escalier","espadon","espèce","espiègle","espoir","esprit","esquiver","essayer","essence","essieu","essorer","estime","estomac","estrade","étagère","étaler","étanche","étatique","éteindre","étendoir","éternel","éthanol","éthique","ethnie","étirer","étoffer","étoile","étonnant","étourdir","étrange","étroit","étude","euphorie","évaluer","évasion","éventail","évidence","éviter","évolutif","évoquer","exact","exagérer","exaucer","exceller","excitant","exclusif","excuse","exécuter","exemple","exercer","exhaler","exhorter","exigence","exiler","exister","exotique","expédier","explorer","exposer","exprimer","exquis","extensif","extraire","exulter","fable","fabuleux","facette","facile","facture","faiblir","falaise","fameux","famille","farceur","farfelu","farine","farouche","fasciner","fatal","fatigue","faucon","fautif","faveur","favori","fébrile","féconder","fédérer","félin","femme","fémur","fendoir","féodal","fermer","féroce","ferveur","festival","feuille","feutre","février","fiasco","ficeler","fictif","fidèle","figure","filature","filetage","filière","filleul","filmer","filou","filtrer","financer","finir","fiole","firme","fissure","fixer","flairer","flamme","flasque","flatteur","fléau","flèche","fleur","flexion","flocon","flore","fluctuer","fluide","fluvial","folie","fonderie","fongible","fontaine","forcer","forgeron","formuler","fortune","fossile","foudre","fougère","fouiller","foulure","fourmi","fragile","fraise","franchir","frapper","frayeur","frégate","freiner","frelon","frémir","frénésie","frère","friable","friction","frisson","frivole","froid","fromage","frontal","frotter","fruit","fugitif","fuite","fureur","furieux","furtif","fusion","futur","gagner","galaxie","galerie","gambader","garantir","gardien","garnir","garrigue","gazelle","gazon","géant","gélatine","gélule","gendarme","général","génie","genou","gentil","géologie","géomètre","géranium","germe","gestuel","geyser","gibier","gicler","girafe","givre","glace","glaive","glisser","globe","gloire","glorieux","golfeur","gomme","gonfler","gorge","gorille","goudron","gouffre","goulot","goupille","gourmand","goutte","graduel","graffiti","graine","grand","grappin","gratuit","gravir","grenat","griffure","griller","grimper","grogner","gronder","grotte","groupe","gruger","grutier","gruyère","guépard","guerrier","guide","guimauve","guitare","gustatif","gymnaste","gyrostat","habitude","hachoir","halte","hameau","hangar","hanneton","haricot","harmonie","harpon","hasard","hélium","hématome","herbe","hérisson","hermine","héron","hésiter","heureux","hiberner","hibou","hilarant","histoire","hiver","homard","hommage","homogène","honneur","honorer","honteux","horde","horizon","horloge","hormone","horrible","houleux","housse","hublot","huileux","humain","humble","humide","humour","hurler","hydromel","hygiène","hymne","hypnose","idylle","ignorer","iguane","illicite","illusion","image","imbiber","imiter","immense","immobile","immuable","impact","impérial","implorer","imposer","imprimer","imputer","incarner","incendie","incident","incliner","incolore","indexer","indice","inductif","inédit","ineptie","inexact","infini","infliger","informer","infusion","ingérer","inhaler","inhiber","injecter","injure","innocent","inoculer","inonder","inscrire","insecte","insigne","insolite","inspirer","instinct","insulter","intact","intense","intime","intrigue","intuitif","inutile","invasion","inventer","inviter","invoquer","ironique","irradier","irréel","irriter","isoler","ivoire","ivresse","jaguar","jaillir","jambe","janvier","jardin","jauger","jaune","javelot","jetable","jeton","jeudi","jeunesse","joindre","joncher","jongler","joueur","jouissif","journal","jovial","joyau","joyeux","jubiler","jugement","junior","jupon","juriste","justice","juteux","juvénile","kayak","kimono","kiosque","label","labial","labourer","lacérer","lactose","lagune","laine","laisser","laitier","lambeau","lamelle","lampe","lanceur","langage","lanterne","lapin","largeur","larme","laurier","lavabo","lavoir","lecture","légal","léger","légume","lessive","lettre","levier","lexique","lézard","liasse","libérer","libre","licence","licorne","liège","lièvre","ligature","ligoter","ligue","limer","limite","limonade","limpide","linéaire","lingot","lionceau","liquide","lisière","lister","lithium","litige","littoral","livreur","logique","lointain","loisir","lombric","loterie","louer","lourd","loutre","louve","loyal","lubie","lucide","lucratif","lueur","lugubre","luisant","lumière","lunaire","lundi","luron","lutter","luxueux","machine","magasin","magenta","magique","maigre","maillon","maintien","mairie","maison","majorer","malaxer","maléfice","malheur","malice","mallette","mammouth","mandater","maniable","manquant","manteau","manuel","marathon","marbre","marchand","mardi","maritime","marqueur","marron","marteler","mascotte","massif","matériel","matière","matraque","maudire","maussade","mauve","maximal","méchant","méconnu","médaille","médecin","méditer","méduse","meilleur","mélange","mélodie","membre","mémoire","menacer","mener","menhir","mensonge","mentor","mercredi","mérite","merle","messager","mesure","métal","météore","méthode","métier","meuble","miauler","microbe","miette","mignon","migrer","milieu","million","mimique","mince","minéral","minimal","minorer","minute","miracle","miroiter","missile","mixte","mobile","moderne","moelleux","mondial","moniteur","monnaie","monotone","monstre","montagne","monument","moqueur","morceau","morsure","mortier","moteur","motif","mouche","moufle","moulin","mousson","mouton","mouvant","multiple","munition","muraille","murène","murmure","muscle","muséum","musicien","mutation","muter","mutuel","myriade","myrtille","mystère","mythique","nageur","nappe","narquois","narrer","natation","nation","nature","naufrage","nautique","navire","nébuleux","nectar","néfaste","négation","négliger","négocier","neige","nerveux","nettoyer","neurone","neutron","neveu","niche","nickel","nitrate","niveau","noble","nocif","nocturne","noirceur","noisette","nomade","nombreux","nommer","normatif","notable","notifier","notoire","nourrir","nouveau","novateur","novembre","novice","nuage","nuancer","nuire","nuisible","numéro","nuptial","nuque","nutritif","obéir","objectif","obliger","obscur","observer","obstacle","obtenir","obturer","occasion","occuper","océan","octobre","octroyer","octupler","oculaire","odeur","odorant","offenser","officier","offrir","ogive","oiseau","oisillon","olfactif","olivier","ombrage","omettre","onctueux","onduler","onéreux","onirique","opale","opaque","opérer","opinion","opportun","opprimer","opter","optique","orageux","orange","orbite","ordonner","oreille","organe","orgueil","orifice","ornement","orque","ortie","osciller","osmose","ossature","otarie","ouragan","ourson","outil","outrager","ouvrage","ovation","oxyde","oxygène","ozone","paisible","palace","palmarès","palourde","palper","panache","panda","pangolin","paniquer","panneau","panorama","pantalon","papaye","papier","papoter","papyrus","paradoxe","parcelle","paresse","parfumer","parler","parole","parrain","parsemer","partager","parure","parvenir","passion","pastèque","paternel","patience","patron","pavillon","pavoiser","payer","paysage","peigne","peintre","pelage","pélican","pelle","pelouse","peluche","pendule","pénétrer","pénible","pensif","pénurie","pépite","péplum","perdrix","perforer","période","permuter","perplexe","persil","perte","peser","pétale","petit","pétrir","peuple","pharaon","phobie","phoque","photon","phrase","physique","piano","pictural","pièce","pierre","pieuvre","pilote","pinceau","pipette","piquer","pirogue","piscine","piston","pivoter","pixel","pizza","placard","plafond","plaisir","planer","plaque","plastron","plateau","pleurer","plexus","pliage","plomb","plonger","pluie","plumage","pochette","poésie","poète","pointe","poirier","poisson","poivre","polaire","policier","pollen","polygone","pommade","pompier","ponctuel","pondérer","poney","portique","position","posséder","posture","potager","poteau","potion","pouce","poulain","poumon","pourpre","poussin","pouvoir","prairie","pratique","précieux","prédire","préfixe","prélude","prénom","présence","prétexte","prévoir","primitif","prince","prison","priver","problème","procéder","prodige","profond","progrès","proie","projeter","prologue","promener","propre","prospère","protéger","prouesse","proverbe","prudence","pruneau","psychose","public","puceron","puiser","pulpe","pulsar","punaise","punitif","pupitre","purifier","puzzle","pyramide","quasar","querelle","question","quiétude","quitter","quotient","racine","raconter","radieux","ragondin","raideur","raisin","ralentir","rallonge","ramasser","rapide","rasage","ratisser","ravager","ravin","rayonner","réactif","réagir","réaliser","réanimer","recevoir","réciter","réclamer","récolter","recruter","reculer","recycler","rédiger","redouter","refaire","réflexe","réformer","refrain","refuge","régalien","région","réglage","régulier","réitérer","rejeter","rejouer","relatif","relever","relief","remarque","remède","remise","remonter","remplir","remuer","renard","renfort","renifler","renoncer","rentrer","renvoi","replier","reporter","reprise","reptile","requin","réserve","résineux","résoudre","respect","rester","résultat","rétablir","retenir","réticule","retomber","retracer","réunion","réussir","revanche","revivre","révolte","révulsif","richesse","rideau","rieur","rigide","rigoler","rincer","riposter","risible","risque","rituel","rival","rivière","rocheux","romance","rompre","ronce","rondin","roseau","rosier","rotatif","rotor","rotule","rouge","rouille","rouleau","routine","royaume","ruban","rubis","ruche","ruelle","rugueux","ruiner","ruisseau","ruser","rustique","rythme","sabler","saboter","sabre","sacoche","safari","sagesse","saisir","salade","salive","salon","saluer","samedi","sanction","sanglier","sarcasme","sardine","saturer","saugrenu","saumon","sauter","sauvage","savant","savonner","scalpel","scandale","scélérat","scénario","sceptre","schéma","science","scinder","score","scrutin","sculpter","séance","sécable","sécher","secouer","sécréter","sédatif","séduire","seigneur","séjour","sélectif","semaine","sembler","semence","séminal","sénateur","sensible","sentence","séparer","séquence","serein","sergent","sérieux","serrure","sérum","service","sésame","sévir","sevrage","sextuple","sidéral","siècle","siéger","siffler","sigle","signal","silence","silicium","simple","sincère","sinistre","siphon","sirop","sismique","situer","skier","social","socle","sodium","soigneux","soldat","soleil","solitude","soluble","sombre","sommeil","somnoler","sonde","songeur","sonnette","sonore","sorcier","sortir","sosie","sottise","soucieux","soudure","souffle","soulever","soupape","source","soutirer","souvenir","spacieux","spatial","spécial","sphère","spiral","stable","station","sternum","stimulus","stipuler","strict","studieux","stupeur","styliste","sublime","substrat","subtil","subvenir","succès","sucre","suffixe","suggérer","suiveur","sulfate","superbe","supplier","surface","suricate","surmener","surprise","sursaut","survie","suspect","syllabe","symbole","symétrie","synapse","syntaxe","système","tabac","tablier","tactile","tailler","talent","talisman","talonner","tambour","tamiser","tangible","tapis","taquiner","tarder","tarif","tartine","tasse","tatami","tatouage","taupe","taureau","taxer","témoin","temporel","tenaille","tendre","teneur","tenir","tension","terminer","terne","terrible","tétine","texte","thème","théorie","thérapie","thorax","tibia","tiède","timide","tirelire","tiroir","tissu","titane","titre","tituber","toboggan","tolérant","tomate","tonique","tonneau","toponyme","torche","tordre","tornade","torpille","torrent","torse","tortue","totem","toucher","tournage","tousser","toxine","traction","trafic","tragique","trahir","train","trancher","travail","trèfle","tremper","trésor","treuil","triage","tribunal","tricoter","trilogie","triomphe","tripler","triturer","trivial","trombone","tronc","tropical","troupeau","tuile","tulipe","tumulte","tunnel","turbine","tuteur","tutoyer","tuyau","tympan","typhon","typique","tyran","ubuesque","ultime","ultrason","unanime","unifier","union","unique","unitaire","univers","uranium","urbain","urticant","usage","usine","usuel","usure","utile","utopie","vacarme","vaccin","vagabond","vague","vaillant","vaincre","vaisseau","valable","valise","vallon","valve","vampire","vanille","vapeur","varier","vaseux","vassal","vaste","vecteur","vedette","végétal","véhicule","veinard","véloce","vendredi","vénérer","venger","venimeux","ventouse","verdure","vérin","vernir","verrou","verser","vertu","veston","vétéran","vétuste","vexant","vexer","viaduc","viande","victoire","vidange","vidéo","vignette","vigueur","vilain","village","vinaigre","violon","vipère","virement","virtuose","virus","visage","viseur","vision","visqueux","visuel","vital","vitesse","viticole","vitrine","vivace","vivipare","vocation","voguer","voile","voisin","voiture","volaille","volcan","voltiger","volume","vorace","vortex","voter","vouloir","voyage","voyelle","wagon","xénon","yacht","zèbre","zénith","zeste","zoologie"]; -a.exports=f},{}],93:[function(e,a,t){a.exports={CHINESE:e("./chinese"),ENGLISH:e("./english"),FRENCH:e("./french"),JAPANESE:e("./japanese"),SPANISH:e("./spanish")}},{"./chinese":90,"./english":91,"./french":92,"./japanese":94,"./spanish":95}],94:[function(e,a,t){"use strict";var f=["あいこくしん","あいさつ","あいだ","あおぞら","あかちゃん","あきる","あけがた","あける","あこがれる","あさい","あさひ","あしあと","あじわう","あずかる","あずき","あそぶ","あたえる","あたためる","あたりまえ","あたる","あつい","あつかう","あっしゅく","あつまり","あつめる","あてな","あてはまる","あひる","あぶら","あぶる","あふれる","あまい","あまど","あまやかす","あまり","あみもの","あめりか","あやまる","あゆむ","あらいぐま","あらし","あらすじ","あらためる","あらゆる","あらわす","ありがとう","あわせる","あわてる","あんい","あんがい","あんこ","あんぜん","あんてい","あんない","あんまり","いいだす","いおん","いがい","いがく","いきおい","いきなり","いきもの","いきる","いくじ","いくぶん","いけばな","いけん","いこう","いこく","いこつ","いさましい","いさん","いしき","いじゅう","いじょう","いじわる","いずみ","いずれ","いせい","いせえび","いせかい","いせき","いぜん","いそうろう","いそがしい","いだい","いだく","いたずら","いたみ","いたりあ","いちおう","いちじ","いちど","いちば","いちぶ","いちりゅう","いつか","いっしゅん","いっせい","いっそう","いったん","いっち","いってい","いっぽう","いてざ","いてん","いどう","いとこ","いない","いなか","いねむり","いのち","いのる","いはつ","いばる","いはん","いびき","いひん","いふく","いへん","いほう","いみん","いもうと","いもたれ","いもり","いやがる","いやす","いよかん","いよく","いらい","いらすと","いりぐち","いりょう","いれい","いれもの","いれる","いろえんぴつ","いわい","いわう","いわかん","いわば","いわゆる","いんげんまめ","いんさつ","いんしょう","いんよう","うえき","うえる","うおざ","うがい","うかぶ","うかべる","うきわ","うくらいな","うくれれ","うけたまわる","うけつけ","うけとる","うけもつ","うける","うごかす","うごく","うこん","うさぎ","うしなう","うしろがみ","うすい","うすぎ","うすぐらい","うすめる","うせつ","うちあわせ","うちがわ","うちき","うちゅう","うっかり","うつくしい","うったえる","うつる","うどん","うなぎ","うなじ","うなずく","うなる","うねる","うのう","うぶげ","うぶごえ","うまれる","うめる","うもう","うやまう","うよく","うらがえす","うらぐち","うらない","うりあげ","うりきれ","うるさい","うれしい","うれゆき","うれる","うろこ","うわき","うわさ","うんこう","うんちん","うんてん","うんどう","えいえん","えいが","えいきょう","えいご","えいせい","えいぶん","えいよう","えいわ","えおり","えがお","えがく","えきたい","えくせる","えしゃく","えすて","えつらん","えのぐ","えほうまき","えほん","えまき","えもじ","えもの","えらい","えらぶ","えりあ","えんえん","えんかい","えんぎ","えんげき","えんしゅう","えんぜつ","えんそく","えんちょう","えんとつ","おいかける","おいこす","おいしい","おいつく","おうえん","おうさま","おうじ","おうせつ","おうたい","おうふく","おうべい","おうよう","おえる","おおい","おおう","おおどおり","おおや","おおよそ","おかえり","おかず","おがむ","おかわり","おぎなう","おきる","おくさま","おくじょう","おくりがな","おくる","おくれる","おこす","おこなう","おこる","おさえる","おさない","おさめる","おしいれ","おしえる","おじぎ","おじさん","おしゃれ","おそらく","おそわる","おたがい","おたく","おだやか","おちつく","おっと","おつり","おでかけ","おとしもの","おとなしい","おどり","おどろかす","おばさん","おまいり","おめでとう","おもいで","おもう","おもたい","おもちゃ","おやつ","おやゆび","およぼす","おらんだ","おろす","おんがく","おんけい","おんしゃ","おんせん","おんだん","おんちゅう","おんどけい","かあつ","かいが","がいき","がいけん","がいこう","かいさつ","かいしゃ","かいすいよく","かいぜん","かいぞうど","かいつう","かいてん","かいとう","かいふく","がいへき","かいほう","かいよう","がいらい","かいわ","かえる","かおり","かかえる","かがく","かがし","かがみ","かくご","かくとく","かざる","がぞう","かたい","かたち","がちょう","がっきゅう","がっこう","がっさん","がっしょう","かなざわし","かのう","がはく","かぶか","かほう","かほご","かまう","かまぼこ","かめれおん","かゆい","かようび","からい","かるい","かろう","かわく","かわら","がんか","かんけい","かんこう","かんしゃ","かんそう","かんたん","かんち","がんばる","きあい","きあつ","きいろ","ぎいん","きうい","きうん","きえる","きおう","きおく","きおち","きおん","きかい","きかく","きかんしゃ","ききて","きくばり","きくらげ","きけんせい","きこう","きこえる","きこく","きさい","きさく","きさま","きさらぎ","ぎじかがく","ぎしき","ぎじたいけん","ぎじにってい","ぎじゅつしゃ","きすう","きせい","きせき","きせつ","きそう","きぞく","きぞん","きたえる","きちょう","きつえん","ぎっちり","きつつき","きつね","きてい","きどう","きどく","きない","きなが","きなこ","きぬごし","きねん","きのう","きのした","きはく","きびしい","きひん","きふく","きぶん","きぼう","きほん","きまる","きみつ","きむずかしい","きめる","きもだめし","きもち","きもの","きゃく","きやく","ぎゅうにく","きよう","きょうりゅう","きらい","きらく","きりん","きれい","きれつ","きろく","ぎろん","きわめる","ぎんいろ","きんかくじ","きんじょ","きんようび","ぐあい","くいず","くうかん","くうき","くうぐん","くうこう","ぐうせい","くうそう","ぐうたら","くうふく","くうぼ","くかん","くきょう","くげん","ぐこう","くさい","くさき","くさばな","くさる","くしゃみ","くしょう","くすのき","くすりゆび","くせげ","くせん","ぐたいてき","くださる","くたびれる","くちこみ","くちさき","くつした","ぐっすり","くつろぐ","くとうてん","くどく","くなん","くねくね","くのう","くふう","くみあわせ","くみたてる","くめる","くやくしょ","くらす","くらべる","くるま","くれる","くろう","くわしい","ぐんかん","ぐんしょく","ぐんたい","ぐんて","けあな","けいかく","けいけん","けいこ","けいさつ","げいじゅつ","けいたい","げいのうじん","けいれき","けいろ","けおとす","けおりもの","げきか","げきげん","げきだん","げきちん","げきとつ","げきは","げきやく","げこう","げこくじょう","げざい","けさき","げざん","けしき","けしごむ","けしょう","げすと","けたば","けちゃっぷ","けちらす","けつあつ","けつい","けつえき","けっこん","けつじょ","けっせき","けってい","けつまつ","げつようび","げつれい","けつろん","げどく","けとばす","けとる","けなげ","けなす","けなみ","けぬき","げねつ","けねん","けはい","げひん","けぶかい","げぼく","けまり","けみかる","けむし","けむり","けもの","けらい","けろけろ","けわしい","けんい","けんえつ","けんお","けんか","げんき","けんげん","けんこう","けんさく","けんしゅう","けんすう","げんそう","けんちく","けんてい","けんとう","けんない","けんにん","げんぶつ","けんま","けんみん","けんめい","けんらん","けんり","こあくま","こいぬ","こいびと","ごうい","こうえん","こうおん","こうかん","ごうきゅう","ごうけい","こうこう","こうさい","こうじ","こうすい","ごうせい","こうそく","こうたい","こうちゃ","こうつう","こうてい","こうどう","こうない","こうはい","ごうほう","ごうまん","こうもく","こうりつ","こえる","こおり","ごかい","ごがつ","ごかん","こくご","こくさい","こくとう","こくない","こくはく","こぐま","こけい","こける","ここのか","こころ","こさめ","こしつ","こすう","こせい","こせき","こぜん","こそだて","こたい","こたえる","こたつ","こちょう","こっか","こつこつ","こつばん","こつぶ","こてい","こてん","ことがら","ことし","ことば","ことり","こなごな","こねこね","このまま","このみ","このよ","ごはん","こひつじ","こふう","こふん","こぼれる","ごまあぶら","こまかい","ごますり","こまつな","こまる","こむぎこ","こもじ","こもち","こもの","こもん","こやく","こやま","こゆう","こゆび","こよい","こよう","こりる","これくしょん","ころっけ","こわもて","こわれる","こんいん","こんかい","こんき","こんしゅう","こんすい","こんだて","こんとん","こんなん","こんびに","こんぽん","こんまけ","こんや","こんれい","こんわく","ざいえき","さいかい","さいきん","ざいげん","ざいこ","さいしょ","さいせい","ざいたく","ざいちゅう","さいてき","ざいりょう","さうな","さかいし","さがす","さかな","さかみち","さがる","さぎょう","さくし","さくひん","さくら","さこく","さこつ","さずかる","ざせき","さたん","さつえい","ざつおん","ざっか","ざつがく","さっきょく","ざっし","さつじん","ざっそう","さつたば","さつまいも","さてい","さといも","さとう","さとおや","さとし","さとる","さのう","さばく","さびしい","さべつ","さほう","さほど","さます","さみしい","さみだれ","さむけ","さめる","さやえんどう","さゆう","さよう","さよく","さらだ","ざるそば","さわやか","さわる","さんいん","さんか","さんきゃく","さんこう","さんさい","ざんしょ","さんすう","さんせい","さんそ","さんち","さんま","さんみ","さんらん","しあい","しあげ","しあさって","しあわせ","しいく","しいん","しうち","しえい","しおけ","しかい","しかく","じかん","しごと","しすう","じだい","したうけ","したぎ","したて","したみ","しちょう","しちりん","しっかり","しつじ","しつもん","してい","してき","してつ","じてん","じどう","しなぎれ","しなもの","しなん","しねま","しねん","しのぐ","しのぶ","しはい","しばかり","しはつ","しはらい","しはん","しひょう","しふく","じぶん","しへい","しほう","しほん","しまう","しまる","しみん","しむける","じむしょ","しめい","しめる","しもん","しゃいん","しゃうん","しゃおん","じゃがいも","しやくしょ","しゃくほう","しゃけん","しゃこ","しゃざい","しゃしん","しゃせん","しゃそう","しゃたい","しゃちょう","しゃっきん","じゃま","しゃりん","しゃれい","じゆう","じゅうしょ","しゅくはく","じゅしん","しゅっせき","しゅみ","しゅらば","じゅんばん","しょうかい","しょくたく","しょっけん","しょどう","しょもつ","しらせる","しらべる","しんか","しんこう","じんじゃ","しんせいじ","しんちく","しんりん","すあげ","すあし","すあな","ずあん","すいえい","すいか","すいとう","ずいぶん","すいようび","すうがく","すうじつ","すうせん","すおどり","すきま","すくう","すくない","すける","すごい","すこし","ずさん","すずしい","すすむ","すすめる","すっかり","ずっしり","ずっと","すてき","すてる","すねる","すのこ","すはだ","すばらしい","ずひょう","ずぶぬれ","すぶり","すふれ","すべて","すべる","ずほう","すぼん","すまい","すめし","すもう","すやき","すらすら","するめ","すれちがう","すろっと","すわる","すんぜん","すんぽう","せあぶら","せいかつ","せいげん","せいじ","せいよう","せおう","せかいかん","せきにん","せきむ","せきゆ","せきらんうん","せけん","せこう","せすじ","せたい","せたけ","せっかく","せっきゃく","ぜっく","せっけん","せっこつ","せっさたくま","せつぞく","せつだん","せつでん","せっぱん","せつび","せつぶん","せつめい","せつりつ","せなか","せのび","せはば","せびろ","せぼね","せまい","せまる","せめる","せもたれ","せりふ","ぜんあく","せんい","せんえい","せんか","せんきょ","せんく","せんげん","ぜんご","せんさい","せんしゅ","せんすい","せんせい","せんぞ","せんたく","せんちょう","せんてい","せんとう","せんぬき","せんねん","せんぱい","ぜんぶ","ぜんぽう","せんむ","せんめんじょ","せんもん","せんやく","せんゆう","せんよう","ぜんら","ぜんりゃく","せんれい","せんろ","そあく","そいとげる","そいね","そうがんきょう","そうき","そうご","そうしん","そうだん","そうなん","そうび","そうめん","そうり","そえもの","そえん","そがい","そげき","そこう","そこそこ","そざい","そしな","そせい","そせん","そそぐ","そだてる","そつう","そつえん","そっかん","そつぎょう","そっけつ","そっこう","そっせん","そっと","そとがわ","そとづら","そなえる","そなた","そふぼ","そぼく","そぼろ","そまつ","そまる","そむく","そむりえ","そめる","そもそも","そよかぜ","そらまめ","そろう","そんかい","そんけい","そんざい","そんしつ","そんぞく","そんちょう","ぞんび","ぞんぶん","そんみん","たあい","たいいん","たいうん","たいえき","たいおう","だいがく","たいき","たいぐう","たいけん","たいこ","たいざい","だいじょうぶ","だいすき","たいせつ","たいそう","だいたい","たいちょう","たいてい","だいどころ","たいない","たいねつ","たいのう","たいはん","だいひょう","たいふう","たいへん","たいほ","たいまつばな","たいみんぐ","たいむ","たいめん","たいやき","たいよう","たいら","たいりょく","たいる","たいわん","たうえ","たえる","たおす","たおる","たおれる","たかい","たかね","たきび","たくさん","たこく","たこやき","たさい","たしざん","だじゃれ","たすける","たずさわる","たそがれ","たたかう","たたく","ただしい","たたみ","たちばな","だっかい","だっきゃく","だっこ","だっしゅつ","だったい","たてる","たとえる","たなばた","たにん","たぬき","たのしみ","たはつ","たぶん","たべる","たぼう","たまご","たまる","だむる","ためいき","ためす","ためる","たもつ","たやすい","たよる","たらす","たりきほんがん","たりょう","たりる","たると","たれる","たれんと","たろっと","たわむれる","だんあつ","たんい","たんおん","たんか","たんき","たんけん","たんご","たんさん","たんじょうび","だんせい","たんそく","たんたい","だんち","たんてい","たんとう","だんな","たんにん","だんねつ","たんのう","たんぴん","だんぼう","たんまつ","たんめい","だんれつ","だんろ","だんわ","ちあい","ちあん","ちいき","ちいさい","ちえん","ちかい","ちから","ちきゅう","ちきん","ちけいず","ちけん","ちこく","ちさい","ちしき","ちしりょう","ちせい","ちそう","ちたい","ちたん","ちちおや","ちつじょ","ちてき","ちてん","ちぬき","ちぬり","ちのう","ちひょう","ちへいせん","ちほう","ちまた","ちみつ","ちみどろ","ちめいど","ちゃんこなべ","ちゅうい","ちゆりょく","ちょうし","ちょさくけん","ちらし","ちらみ","ちりがみ","ちりょう","ちるど","ちわわ","ちんたい","ちんもく","ついか","ついたち","つうか","つうじょう","つうはん","つうわ","つかう","つかれる","つくね","つくる","つけね","つける","つごう","つたえる","つづく","つつじ","つつむ","つとめる","つながる","つなみ","つねづね","つのる","つぶす","つまらない","つまる","つみき","つめたい","つもり","つもる","つよい","つるぼ","つるみく","つわもの","つわり","てあし","てあて","てあみ","ていおん","ていか","ていき","ていけい","ていこく","ていさつ","ていし","ていせい","ていたい","ていど","ていねい","ていひょう","ていへん","ていぼう","てうち","ておくれ","てきとう","てくび","でこぼこ","てさぎょう","てさげ","てすり","てそう","てちがい","てちょう","てつがく","てつづき","でっぱ","てつぼう","てつや","でぬかえ","てぬき","てぬぐい","てのひら","てはい","てぶくろ","てふだ","てほどき","てほん","てまえ","てまきずし","てみじか","てみやげ","てらす","てれび","てわけ","てわたし","でんあつ","てんいん","てんかい","てんき","てんぐ","てんけん","てんごく","てんさい","てんし","てんすう","でんち","てんてき","てんとう","てんない","てんぷら","てんぼうだい","てんめつ","てんらんかい","でんりょく","でんわ","どあい","といれ","どうかん","とうきゅう","どうぐ","とうし","とうむぎ","とおい","とおか","とおく","とおす","とおる","とかい","とかす","ときおり","ときどき","とくい","とくしゅう","とくてん","とくに","とくべつ","とけい","とける","とこや","とさか","としょかん","とそう","とたん","とちゅう","とっきゅう","とっくん","とつぜん","とつにゅう","とどける","ととのえる","とない","となえる","となり","とのさま","とばす","どぶがわ","とほう","とまる","とめる","ともだち","ともる","どようび","とらえる","とんかつ","どんぶり","ないかく","ないこう","ないしょ","ないす","ないせん","ないそう","なおす","ながい","なくす","なげる","なこうど","なさけ","なたでここ","なっとう","なつやすみ","ななおし","なにごと","なにもの","なにわ","なのか","なふだ","なまいき","なまえ","なまみ","なみだ","なめらか","なめる","なやむ","ならう","ならび","ならぶ","なれる","なわとび","なわばり","にあう","にいがた","にうけ","におい","にかい","にがて","にきび","にくしみ","にくまん","にげる","にさんかたんそ","にしき","にせもの","にちじょう","にちようび","にっか","にっき","にっけい","にっこう","にっさん","にっしょく","にっすう","にっせき","にってい","になう","にほん","にまめ","にもつ","にやり","にゅういん","にりんしゃ","にわとり","にんい","にんか","にんき","にんげん","にんしき","にんずう","にんそう","にんたい","にんち","にんてい","にんにく","にんぷ","にんまり","にんむ","にんめい","にんよう","ぬいくぎ","ぬかす","ぬぐいとる","ぬぐう","ぬくもり","ぬすむ","ぬまえび","ぬめり","ぬらす","ぬんちゃく","ねあげ","ねいき","ねいる","ねいろ","ねぐせ","ねくたい","ねくら","ねこぜ","ねこむ","ねさげ","ねすごす","ねそべる","ねだん","ねつい","ねっしん","ねつぞう","ねったいぎょ","ねぶそく","ねふだ","ねぼう","ねほりはほり","ねまき","ねまわし","ねみみ","ねむい","ねむたい","ねもと","ねらう","ねわざ","ねんいり","ねんおし","ねんかん","ねんきん","ねんぐ","ねんざ","ねんし","ねんちゃく","ねんど","ねんぴ","ねんぶつ","ねんまつ","ねんりょう","ねんれい","のいず","のおづま","のがす","のきなみ","のこぎり","のこす","のこる","のせる","のぞく","のぞむ","のたまう","のちほど","のっく","のばす","のはら","のべる","のぼる","のみもの","のやま","のらいぬ","のらねこ","のりもの","のりゆき","のれん","のんき","ばあい","はあく","ばあさん","ばいか","ばいく","はいけん","はいご","はいしん","はいすい","はいせん","はいそう","はいち","ばいばい","はいれつ","はえる","はおる","はかい","ばかり","はかる","はくしゅ","はけん","はこぶ","はさみ","はさん","はしご","ばしょ","はしる","はせる","ぱそこん","はそん","はたん","はちみつ","はつおん","はっかく","はづき","はっきり","はっくつ","はっけん","はっこう","はっさん","はっしん","はったつ","はっちゅう","はってん","はっぴょう","はっぽう","はなす","はなび","はにかむ","はぶらし","はみがき","はむかう","はめつ","はやい","はやし","はらう","はろうぃん","はわい","はんい","はんえい","はんおん","はんかく","はんきょう","ばんぐみ","はんこ","はんしゃ","はんすう","はんだん","ぱんち","ぱんつ","はんてい","はんとし","はんのう","はんぱ","はんぶん","はんぺん","はんぼうき","はんめい","はんらん","はんろん","ひいき","ひうん","ひえる","ひかく","ひかり","ひかる","ひかん","ひくい","ひけつ","ひこうき","ひこく","ひさい","ひさしぶり","ひさん","びじゅつかん","ひしょ","ひそか","ひそむ","ひたむき","ひだり","ひたる","ひつぎ","ひっこし","ひっし","ひつじゅひん","ひっす","ひつぜん","ぴったり","ぴっちり","ひつよう","ひてい","ひとごみ","ひなまつり","ひなん","ひねる","ひはん","ひびく","ひひょう","ひほう","ひまわり","ひまん","ひみつ","ひめい","ひめじし","ひやけ","ひやす","ひよう","びょうき","ひらがな","ひらく","ひりつ","ひりょう","ひるま","ひるやすみ","ひれい","ひろい","ひろう","ひろき","ひろゆき","ひんかく","ひんけつ","ひんこん","ひんしゅ","ひんそう","ぴんち","ひんぱん","びんぼう","ふあん","ふいうち","ふうけい","ふうせん","ぷうたろう","ふうとう","ふうふ","ふえる","ふおん","ふかい","ふきん","ふくざつ","ふくぶくろ","ふこう","ふさい","ふしぎ","ふじみ","ふすま","ふせい","ふせぐ","ふそく","ぶたにく","ふたん","ふちょう","ふつう","ふつか","ふっかつ","ふっき","ふっこく","ぶどう","ふとる","ふとん","ふのう","ふはい","ふひょう","ふへん","ふまん","ふみん","ふめつ","ふめん","ふよう","ふりこ","ふりる","ふるい","ふんいき","ぶんがく","ぶんぐ","ふんしつ","ぶんせき","ふんそう","ぶんぽう","へいあん","へいおん","へいがい","へいき","へいげん","へいこう","へいさ","へいしゃ","へいせつ","へいそ","へいたく","へいてん","へいねつ","へいわ","へきが","へこむ","べにいろ","べにしょうが","へらす","へんかん","べんきょう","べんごし","へんさい","へんたい","べんり","ほあん","ほいく","ぼうぎょ","ほうこく","ほうそう","ほうほう","ほうもん","ほうりつ","ほえる","ほおん","ほかん","ほきょう","ぼきん","ほくろ","ほけつ","ほけん","ほこう","ほこる","ほしい","ほしつ","ほしゅ","ほしょう","ほせい","ほそい","ほそく","ほたて","ほたる","ぽちぶくろ","ほっきょく","ほっさ","ほったん","ほとんど","ほめる","ほんい","ほんき","ほんけ","ほんしつ","ほんやく","まいにち","まかい","まかせる","まがる","まける","まこと","まさつ","まじめ","ますく","まぜる","まつり","まとめ","まなぶ","まぬけ","まねく","まほう","まもる","まゆげ","まよう","まろやか","まわす","まわり","まわる","まんが","まんきつ","まんぞく","まんなか","みいら","みうち","みえる","みがく","みかた","みかん","みけん","みこん","みじかい","みすい","みすえる","みせる","みっか","みつかる","みつける","みてい","みとめる","みなと","みなみかさい","みねらる","みのう","みのがす","みほん","みもと","みやげ","みらい","みりょく","みわく","みんか","みんぞく","むいか","むえき","むえん","むかい","むかう","むかえ","むかし","むぎちゃ","むける","むげん","むさぼる","むしあつい","むしば","むじゅん","むしろ","むすう","むすこ","むすぶ","むすめ","むせる","むせん","むちゅう","むなしい","むのう","むやみ","むよう","むらさき","むりょう","むろん","めいあん","めいうん","めいえん","めいかく","めいきょく","めいさい","めいし","めいそう","めいぶつ","めいれい","めいわく","めぐまれる","めざす","めした","めずらしい","めだつ","めまい","めやす","めんきょ","めんせき","めんどう","もうしあげる","もうどうけん","もえる","もくし","もくてき","もくようび","もちろん","もどる","もらう","もんく","もんだい","やおや","やける","やさい","やさしい","やすい","やすたろう","やすみ","やせる","やそう","やたい","やちん","やっと","やっぱり","やぶる","やめる","ややこしい","やよい","やわらかい","ゆうき","ゆうびんきょく","ゆうべ","ゆうめい","ゆけつ","ゆしゅつ","ゆせん","ゆそう","ゆたか","ゆちゃく","ゆでる","ゆにゅう","ゆびわ","ゆらい","ゆれる","ようい","ようか","ようきゅう","ようじ","ようす","ようちえん","よかぜ","よかん","よきん","よくせい","よくぼう","よけい","よごれる","よさん","よしゅう","よそう","よそく","よっか","よてい","よどがわく","よねつ","よやく","よゆう","よろこぶ","よろしい","らいう","らくがき","らくご","らくさつ","らくだ","らしんばん","らせん","らぞく","らたい","らっか","られつ","りえき","りかい","りきさく","りきせつ","りくぐん","りくつ","りけん","りこう","りせい","りそう","りそく","りてん","りねん","りゆう","りゅうがく","りよう","りょうり","りょかん","りょくちゃ","りょこう","りりく","りれき","りろん","りんご","るいけい","るいさい","るいじ","るいせき","るすばん","るりがわら","れいかん","れいぎ","れいせい","れいぞうこ","れいとう","れいぼう","れきし","れきだい","れんあい","れんけい","れんこん","れんさい","れんしゅう","れんぞく","れんらく","ろうか","ろうご","ろうじん","ろうそく","ろくが","ろこつ","ろじうら","ろしゅつ","ろせん","ろてん","ろめん","ろれつ","ろんぎ","ろんぱ","ろんぶん","ろんり","わかす","わかめ","わかやま","わかれる","わしつ","わじまし","わすれもの","わらう","われる"];a.exports=f},{}],95:[function(e,a,t){"use strict";var f=["ábaco","abdomen","abeja","abierto","abogado","abono","aborto","abrazo","abrir","abuelo","abuso","acabar","academia","acceso","acción","aceite","acelga","acento","aceptar","ácido","aclarar","acné","acoger","acoso","activo","acto","actriz","actuar","acudir","acuerdo","acusar","adicto","admitir","adoptar","adorno","aduana","adulto","aéreo","afectar","afición","afinar","afirmar","ágil","agitar","agonía","agosto","agotar","agregar","agrio","agua","agudo","águila","aguja","ahogo","ahorro","aire","aislar","ajedrez","ajeno","ajuste","alacrán","alambre","alarma","alba","álbum","alcalde","aldea","alegre","alejar","alerta","aleta","alfiler","alga","algodón","aliado","aliento","alivio","alma","almeja","almíbar","altar","alteza","altivo","alto","altura","alumno","alzar","amable","amante","amapola","amargo","amasar","ámbar","ámbito","ameno","amigo","amistad","amor","amparo","amplio","ancho","anciano","ancla","andar","andén","anemia","ángulo","anillo","ánimo","anís","anotar","antena","antiguo","antojo","anual","anular","anuncio","añadir","añejo","año","apagar","aparato","apetito","apio","aplicar","apodo","aporte","apoyo","aprender","aprobar","apuesta","apuro","arado","araña","arar","árbitro","árbol","arbusto","archivo","arco","arder","ardilla","arduo","área","árido","aries","armonía","arnés","aroma","arpa","arpón","arreglo","arroz","arruga","arte","artista","asa","asado","asalto","ascenso","asegurar","aseo","asesor","asiento","asilo","asistir","asno","asombro","áspero","astilla","astro","astuto","asumir","asunto","atajo","ataque","atar","atento","ateo","ático","atleta","átomo","atraer","atroz","atún","audaz","audio","auge","aula","aumento","ausente","autor","aval","avance","avaro","ave","avellana","avena","avestruz","avión","aviso","ayer","ayuda","ayuno","azafrán","azar","azote","azúcar","azufre","azul","baba","babor","bache","bahía","baile","bajar","balanza","balcón","balde","bambú","banco","banda","baño","barba","barco","barniz","barro","báscula","bastón","basura","batalla","batería","batir","batuta","baúl","bazar","bebé","bebida","bello","besar","beso","bestia","bicho","bien","bingo","blanco","bloque","blusa","boa","bobina","bobo","boca","bocina","boda","bodega","boina","bola","bolero","bolsa","bomba","bondad","bonito","bono","bonsái","borde","borrar","bosque","bote","botín","bóveda","bozal","bravo","brazo","brecha","breve","brillo","brinco","brisa","broca","broma","bronce","brote","bruja","brusco","bruto","buceo","bucle","bueno","buey","bufanda","bufón","búho","buitre","bulto","burbuja","burla","burro","buscar","butaca","buzón","caballo","cabeza","cabina","cabra","cacao","cadáver","cadena","caer","café","caída","caimán","caja","cajón","cal","calamar","calcio","caldo","calidad","calle","calma","calor","calvo","cama","cambio","camello","camino","campo","cáncer","candil","canela","canguro","canica","canto","caña","cañón","caoba","caos","capaz","capitán","capote","captar","capucha","cara","carbón","cárcel","careta","carga","cariño","carne","carpeta","carro","carta","casa","casco","casero","caspa","castor","catorce","catre","caudal","causa","cazo","cebolla","ceder","cedro","celda","célebre","celoso","célula","cemento","ceniza","centro","cerca","cerdo","cereza","cero","cerrar","certeza","césped","cetro","chacal","chaleco","champú","chancla","chapa","charla","chico","chiste","chivo","choque","choza","chuleta","chupar","ciclón","ciego","cielo","cien","cierto","cifra","cigarro","cima","cinco","cine","cinta","ciprés","circo","ciruela","cisne","cita","ciudad","clamor","clan","claro","clase","clave","cliente","clima","clínica","cobre","cocción","cochino","cocina","coco","código","codo","cofre","coger","cohete","cojín","cojo","cola","colcha","colegio","colgar","colina","collar","colmo","columna","combate","comer","comida","cómodo","compra","conde","conejo","conga","conocer","consejo","contar","copa","copia","corazón","corbata","corcho","cordón","corona","correr","coser","cosmos","costa","cráneo","cráter","crear","crecer","creído","crema","cría","crimen","cripta","crisis","cromo","crónica","croqueta","crudo","cruz","cuadro","cuarto","cuatro","cubo","cubrir","cuchara","cuello","cuento","cuerda","cuesta","cueva","cuidar","culebra","culpa","culto","cumbre","cumplir","cuna","cuneta","cuota","cupón","cúpula","curar","curioso","curso","curva","cutis","dama","danza","dar","dardo","dátil","deber","débil","década","decir","dedo","defensa","definir","dejar","delfín","delgado","delito","demora","denso","dental","deporte","derecho","derrota","desayuno","deseo","desfile","desnudo","destino","desvío","detalle","detener","deuda","día","diablo","diadema","diamante","diana","diario","dibujo","dictar","diente","dieta","diez","difícil","digno","dilema","diluir","dinero","directo","dirigir","disco","diseño","disfraz","diva","divino","doble","doce","dolor","domingo","don","donar","dorado","dormir","dorso","dos","dosis","dragón","droga","ducha","duda","duelo","dueño","dulce","dúo","duque","durar","dureza","duro","ébano","ebrio","echar","eco","ecuador","edad","edición","edificio","editor","educar","efecto","eficaz","eje","ejemplo","elefante","elegir","elemento","elevar","elipse","élite","elixir","elogio","eludir","embudo","emitir","emoción","empate","empeño","empleo","empresa","enano","encargo","enchufe","encía","enemigo","enero","enfado","enfermo","engaño","enigma","enlace","enorme","enredo","ensayo","enseñar","entero","entrar","envase","envío","época","equipo","erizo","escala","escena","escolar","escribir","escudo","esencia","esfera","esfuerzo","espada","espejo","espía","esposa","espuma","esquí","estar","este","estilo","estufa","etapa","eterno","ética","etnia","evadir","evaluar","evento","evitar","exacto","examen","exceso","excusa","exento","exigir","exilio","existir","éxito","experto","explicar","exponer","extremo","fábrica","fábula","fachada","fácil","factor","faena","faja","falda","fallo","falso","faltar","fama","familia","famoso","faraón","farmacia","farol","farsa","fase","fatiga","fauna","favor","fax","febrero","fecha","feliz","feo","feria","feroz","fértil","fervor","festín","fiable","fianza","fiar","fibra","ficción","ficha","fideo","fiebre","fiel","fiera","fiesta","figura","fijar","fijo","fila","filete","filial","filtro","fin","finca","fingir","finito","firma","flaco","flauta","flecha","flor","flota","fluir","flujo","flúor","fobia","foca","fogata","fogón","folio","folleto","fondo","forma","forro","fortuna","forzar","fosa","foto","fracaso","frágil","franja","frase","fraude","freír","freno","fresa","frío","frito","fruta","fuego","fuente","fuerza","fuga","fumar","función","funda","furgón","furia","fusil","fútbol","futuro","gacela","gafas","gaita","gajo","gala","galería","gallo","gamba","ganar","gancho","ganga","ganso","garaje","garza","gasolina","gastar","gato","gavilán","gemelo","gemir","gen","género","genio","gente","geranio","gerente","germen","gesto","gigante","gimnasio","girar","giro","glaciar","globo","gloria","gol","golfo","goloso","golpe","goma","gordo","gorila","gorra","gota","goteo","gozar","grada","gráfico","grano","grasa","gratis","grave","grieta","grillo","gripe","gris","grito","grosor","grúa","grueso","grumo","grupo","guante","guapo","guardia","guerra","guía","guiño","guion","guiso","guitarra","gusano","gustar","haber","hábil","hablar","hacer","hacha","hada","hallar","hamaca","harina","haz","hazaña","hebilla","hebra","hecho","helado","helio","hembra","herir","hermano","héroe","hervir","hielo","hierro","hígado","higiene","hijo","himno","historia","hocico","hogar","hoguera","hoja","hombre","hongo","honor","honra","hora","hormiga","horno","hostil","hoyo","hueco","huelga","huerta","hueso","huevo","huida","huir","humano","húmedo","humilde","humo","hundir","huracán","hurto","icono","ideal","idioma","ídolo","iglesia","iglú","igual","ilegal","ilusión","imagen","imán","imitar","impar","imperio","imponer","impulso","incapaz","índice","inerte","infiel","informe","ingenio","inicio","inmenso","inmune","innato","insecto","instante","interés","íntimo","intuir","inútil","invierno","ira","iris","ironía","isla","islote","jabalí","jabón","jamón","jarabe","jardín","jarra","jaula","jazmín","jefe","jeringa","jinete","jornada","joroba","joven","joya","juerga","jueves","juez","jugador","jugo","juguete","juicio","junco","jungla","junio","juntar","júpiter","jurar","justo","juvenil","juzgar","kilo","koala","labio","lacio","lacra","lado","ladrón","lagarto","lágrima","laguna","laico","lamer","lámina","lámpara","lana","lancha","langosta","lanza","lápiz","largo","larva","lástima","lata","látex","latir","laurel","lavar","lazo","leal","lección","leche","lector","leer","legión","legumbre","lejano","lengua","lento","leña","león","leopardo","lesión","letal","letra","leve","leyenda","libertad","libro","licor","líder","lidiar","lienzo","liga","ligero","lima","límite","limón","limpio","lince","lindo","línea","lingote","lino","linterna","líquido","liso","lista","litera","litio","litro","llaga","llama","llanto","llave","llegar","llenar","llevar","llorar","llover","lluvia","lobo","loción","loco","locura","lógica","logro","lombriz","lomo","lonja","lote","lucha","lucir","lugar","lujo","luna","lunes","lupa","lustro","luto","luz","maceta","macho","madera","madre","maduro","maestro","mafia","magia","mago","maíz","maldad","maleta","malla","malo","mamá","mambo","mamut","manco","mando","manejar","manga","maniquí","manjar","mano","manso","manta","mañana","mapa","máquina","mar","marco","marea","marfil","margen","marido","mármol","marrón","martes","marzo","masa","máscara","masivo","matar","materia","matiz","matriz","máximo","mayor","mazorca","mecha","medalla","medio","médula","mejilla","mejor","melena","melón","memoria","menor","mensaje","mente","menú","mercado","merengue","mérito","mes","mesón","meta","meter","método","metro","mezcla","miedo","miel","miembro","miga","mil","milagro","militar","millón","mimo","mina","minero","mínimo","minuto","miope","mirar","misa","miseria","misil","mismo","mitad","mito","mochila","moción","moda","modelo","moho","mojar","molde","moler","molino","momento","momia","monarca","moneda","monja","monto","moño","morada","morder","moreno","morir","morro","morsa","mortal","mosca","mostrar","motivo","mover","móvil","mozo","mucho","mudar","mueble","muela","muerte","muestra","mugre","mujer","mula","muleta","multa","mundo","muñeca","mural","muro","músculo","museo","musgo","música","muslo","nácar","nación","nadar","naipe","naranja","nariz","narrar","nasal","natal","nativo","natural","náusea","naval","nave","navidad","necio","néctar","negar","negocio","negro","neón","nervio","neto","neutro","nevar","nevera","nicho","nido","niebla","nieto","niñez","niño","nítido","nivel","nobleza","noche","nómina","noria","norma","norte","nota","noticia","novato","novela","novio","nube","nuca","núcleo","nudillo","nudo","nuera","nueve","nuez","nulo","número","nutria","oasis","obeso","obispo","objeto","obra","obrero","observar","obtener","obvio","oca","ocaso","océano","ochenta","ocho","ocio","ocre","octavo","octubre","oculto","ocupar","ocurrir","odiar","odio","odisea","oeste","ofensa","oferta","oficio","ofrecer","ogro","oído","oír","ojo","ola","oleada","olfato","olivo","olla","olmo","olor","olvido","ombligo","onda","onza","opaco","opción","ópera","opinar","oponer","optar","óptica","opuesto","oración","orador","oral","órbita","orca","orden","oreja","órgano","orgía","orgullo","oriente","origen","orilla","oro","orquesta","oruga","osadía","oscuro","osezno","oso","ostra","otoño","otro","oveja","óvulo","óxido","oxígeno","oyente","ozono","pacto","padre","paella","página","pago","país","pájaro","palabra","palco","paleta","pálido","palma","paloma","palpar","pan","panal","pánico","pantera","pañuelo","papá","papel","papilla","paquete","parar","parcela","pared","parir","paro","párpado","parque","párrafo","parte","pasar","paseo","pasión","paso","pasta","pata","patio","patria","pausa","pauta","pavo","payaso","peatón","pecado","pecera","pecho","pedal","pedir","pegar","peine","pelar","peldaño","pelea","peligro","pellejo","pelo","peluca","pena","pensar","peñón","peón","peor","pepino","pequeño","pera","percha","perder","pereza","perfil","perico","perla","permiso","perro","persona","pesa","pesca","pésimo","pestaña","pétalo","petróleo","pez","pezuña","picar","pichón","pie","piedra","pierna","pieza","pijama","pilar","piloto","pimienta","pino","pintor","pinza","piña","piojo","pipa","pirata","pisar","piscina","piso","pista","pitón","pizca","placa","plan","plata","playa","plaza","pleito","pleno","plomo","pluma","plural","pobre","poco","poder","podio","poema","poesía","poeta","polen","policía","pollo","polvo","pomada","pomelo","pomo","pompa","poner","porción","portal","posada","poseer","posible","poste","potencia","potro","pozo","prado","precoz","pregunta","premio","prensa","preso","previo","primo","príncipe","prisión","privar","proa","probar","proceso","producto","proeza","profesor","programa","prole","promesa","pronto","propio","próximo","prueba","público","puchero","pudor","pueblo","puerta","puesto","pulga","pulir","pulmón","pulpo","pulso","puma","punto","puñal","puño","pupa","pupila","puré","quedar","queja","quemar","querer","queso","quieto","química","quince","quitar","rábano","rabia","rabo","ración","radical","raíz","rama","rampa","rancho","rango","rapaz","rápido","rapto","rasgo","raspa","rato","rayo","raza","razón","reacción","realidad","rebaño","rebote","recaer","receta","rechazo","recoger","recreo","recto","recurso","red","redondo","reducir","reflejo","reforma","refrán","refugio","regalo","regir","regla","regreso","rehén","reino","reír","reja","relato","relevo","relieve","relleno","reloj","remar","remedio","remo","rencor","rendir","renta","reparto","repetir","reposo","reptil","res","rescate","resina","respeto","resto","resumen","retiro","retorno","retrato","reunir","revés","revista","rey","rezar","rico","riego","rienda","riesgo","rifa","rígido","rigor","rincón","riñón","río","riqueza","risa","ritmo","rito","rizo","roble","roce","rociar","rodar","rodeo","rodilla","roer","rojizo","rojo","romero","romper","ron","ronco","ronda","ropa","ropero","rosa","rosca","rostro","rotar","rubí","rubor","rudo","rueda","rugir","ruido","ruina","ruleta","rulo","rumbo","rumor","ruptura","ruta","rutina","sábado","saber","sabio","sable","sacar","sagaz","sagrado","sala","saldo","salero","salir","salmón","salón","salsa","salto","salud","salvar","samba","sanción","sandía","sanear","sangre","sanidad","sano","santo","sapo","saque","sardina","sartén","sastre","satán","sauna","saxofón","sección","seco","secreto","secta","sed","seguir","seis","sello","selva","semana","semilla","senda","sensor","señal","señor","separar","sepia","sequía","ser","serie","sermón","servir","sesenta","sesión","seta","setenta","severo","sexo","sexto","sidra","siesta","siete","siglo","signo","sílaba","silbar","silencio","silla","símbolo","simio","sirena","sistema","sitio","situar","sobre","socio","sodio","sol","solapa","soldado","soledad","sólido","soltar","solución","sombra","sondeo","sonido","sonoro","sonrisa","sopa","soplar","soporte","sordo","sorpresa","sorteo","sostén","sótano","suave","subir","suceso","sudor","suegra","suelo","sueño","suerte","sufrir","sujeto","sultán","sumar","superar","suplir","suponer","supremo","sur","surco","sureño","surgir","susto","sutil","tabaco","tabique","tabla","tabú","taco","tacto","tajo","talar","talco","talento","talla","talón","tamaño","tambor","tango","tanque","tapa","tapete","tapia","tapón","taquilla","tarde","tarea","tarifa","tarjeta","tarot","tarro","tarta","tatuaje","tauro","taza","tazón","teatro","techo","tecla","técnica","tejado","tejer","tejido","tela","teléfono","tema","temor","templo","tenaz","tender","tener","tenis","tenso","teoría","terapia","terco","término","ternura","terror","tesis","tesoro","testigo","tetera","texto","tez","tibio","tiburón","tiempo","tienda","tierra","tieso","tigre","tijera","tilde","timbre","tímido","timo","tinta","tío","típico","tipo","tira","tirón","titán","títere","título","tiza","toalla","tobillo","tocar","tocino","todo","toga","toldo","tomar","tono","tonto","topar","tope","toque","tórax","torero","tormenta","torneo","toro","torpedo","torre","torso","tortuga","tos","tosco","toser","tóxico","trabajo","tractor","traer","tráfico","trago","traje","tramo","trance","trato","trauma","trazar","trébol","tregua","treinta","tren","trepar","tres","tribu","trigo","tripa","triste","triunfo","trofeo","trompa","tronco","tropa","trote","trozo","truco","trueno","trufa","tubería","tubo","tuerto","tumba","tumor","túnel","túnica","turbina","turismo","turno","tutor","ubicar","úlcera","umbral","unidad","unir","universo","uno","untar","uña","urbano","urbe","urgente","urna","usar","usuario","útil","utopía","uva","vaca","vacío","vacuna","vagar","vago","vaina","vajilla","vale","válido","valle","valor","válvula","vampiro","vara","variar","varón","vaso","vecino","vector","vehículo","veinte","vejez","vela","velero","veloz","vena","vencer","venda","veneno","vengar","venir","venta","venus","ver","verano","verbo","verde","vereda","verja","verso","verter","vía","viaje","vibrar","vicio","víctima","vida","vídeo","vidrio","viejo","viernes","vigor","vil","villa","vinagre","vino","viñedo","violín","viral","virgo","virtud","visor","víspera","vista","vitamina","viudo","vivaz","vivero","vivir","vivo","volcán","volumen","volver","voraz","votar","voto","voz","vuelo","vulgar","yacer","yate","yegua","yema","yerno","yeso","yodo","yoga","yogur","zafiro","zanja","zapato","zarza","zona","zorro","zumo","zurdo"]; -a.exports=f},{}],96:[function(e,a,t){!function(e){"use strict";function t(e,a,t){var f=A[a];return f||(f=e(a,t),f.feature&&++I[a>>8&255]>u&&(A[a]=f)),f}function f(e,a,t){var f=65280&a,c=S.udata[f]||{},r=c[a];return r?new S(a,r):new S(a,s)}function c(e,a,t){return t?e(a,t):new S(a,null)}function r(e,a,t){var f;if(l>a||a>=l+m&&h>a||a>h+_)return e(a,t);if(a>=l&&l+m>a){var c={},r=(a-l)*v;for(f=0;v>f;++f)c[p+f]=h+y*(f+r);return new S(a,[,,c])}var d=a-h,n=d%y,i=[];if(0!==n)i[0]=[h+d-n,g+n];else for(i[0]=[l+Math.floor(d/w),p+Math.floor(d%w/y)],i[2]={},f=1;y>f;++f)i[2][g+f]=a+f;return new S(a,i)}function d(e,a,t){return 60>a||a>13311&&42607>a?new S(a,s):e(a,t)}function n(e){return R("NFD",e)}function i(e){return R("NFKD",e)}function b(e){return R("NFC",e)}function o(e){return R("NFKC",e)}for(var s=[null,0,{}],u=10,h=44032,l=4352,p=4449,g=4519,m=19,v=21,y=28,w=v*y,_=m*w,S=function(e,a){this.codepoint=e,this.feature=a},A={},I=[],E=0;255>=E;++E)I[E]=0;var k=[d,t,c,r,f];S.fromCharCode=k.reduceRight(function(e,a){return function(t,f){return a(e,t,f)}},null),S.isHighSurrogate=function(e){return e>=55296&&56319>=e},S.isLowSurrogate=function(e){return e>=56320&&57343>=e},S.prototype.prepFeature=function(){this.feature||(this.feature=S.fromCharCode(this.codepoint,!0).feature)},S.prototype.toString=function(){if(this.codepoint<65536)return String.fromCharCode(this.codepoint);var e=this.codepoint-65536;return String.fromCharCode(Math.floor(e/1024)+55296,e%1024+56320)},S.prototype.getDecomp=function(){return this.prepFeature(),this.feature[0]||null},S.prototype.isCompatibility=function(){return this.prepFeature(),!!this.feature[1]&&256&this.feature[1]},S.prototype.isExclude=function(){return this.prepFeature(),!!this.feature[1]&&512&this.feature[1]},S.prototype.getCanonicalClass=function(){return this.prepFeature(),this.feature[1]?255&this.feature[1]:0},S.prototype.getComposite=function(e){if(this.prepFeature(),!this.feature[2])return null;var a=this.feature[2][e.codepoint];return a?S.fromCharCode(a):null};var x=function(e){this.str=e,this.cursor=0};x.prototype.next=function(){if(this.str&&this.cursor0;--t){var f=this.resBuf[t-1],c=f.getCanonicalClass();if(e>=c)break}this.resBuf.splice(t,0,a)}while(0!==e);return this.resBuf.shift()};var M=function(e){this.it=e,this.procBuf=[],this.resBuf=[],this.lastClass=null};M.prototype.next=function(){for(;0===this.resBuf.length;){var e=this.it.next();if(!e){this.resBuf=this.procBuf,this.procBuf=[];break}if(0===this.procBuf.length)this.lastClass=e.getCanonicalClass(),this.procBuf.push(e);else{var a=this.procBuf[0],t=a.getComposite(e),f=e.getCanonicalClass();t&&(this.lastClass=0;r--)if(d[r]!=n[r])return!1;for(r=d.length-1;r>=0;r--)if(c=d[r],!i(e[c],a[c]))return!1;return!0}function s(e,a){return e&&a?"[object RegExp]"==Object.prototype.toString.call(a)?a.test(e):e instanceof a?!0:a.call({},e)===!0?!0:!1:!1}function u(e,a,t,f){var c;h.isString(t)&&(f=t,t=null);try{a()}catch(r){c=r}if(f=(t&&t.name?" ("+t.name+").":".")+(f?" "+f:"."),e&&!c&&d(c,t,"Missing expected exception"+f),!e&&s(c,t)&&d(c,t,"Got unwanted exception"+f),e&&c&&t&&!s(c,t)||!e&&c)throw c}var h=e("util/"),l=Array.prototype.slice,p=Object.prototype.hasOwnProperty,g=a.exports=n;g.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=r(this),this.generatedMessage=!0);var a=e.stackStartFunction||d;if(Error.captureStackTrace)Error.captureStackTrace(this,a);else{var t=new Error;if(t.stack){var f=t.stack,c=a.name,n=f.indexOf("\n"+c);if(n>=0){var i=f.indexOf("\n",n+1);f=f.substring(i+1)}this.stack=f}}},h.inherits(g.AssertionError,Error),g.fail=d,g.ok=n,g.equal=function(e,a,t){e!=a&&d(e,a,t,"==",g.equal)},g.notEqual=function(e,a,t){e==a&&d(e,a,t,"!=",g.notEqual)},g.deepEqual=function(e,a,t){i(e,a)||d(e,a,t,"deepEqual",g.deepEqual)},g.notDeepEqual=function(e,a,t){i(e,a)&&d(e,a,t,"notDeepEqual",g.notDeepEqual)},g.strictEqual=function(e,a,t){e!==a&&d(e,a,t,"===",g.strictEqual)},g.notStrictEqual=function(e,a,t){e===a&&d(e,a,t,"!==",g.notStrictEqual)},g["throws"]=function(e,a,t){u.apply(this,[!0].concat(l.call(arguments)))},g.doesNotThrow=function(e,a){u.apply(this,[!1].concat(l.call(arguments)))},g.ifError=function(e){if(e)throw e};var m=Object.keys||function(e){var a=[];for(var t in e)p.call(e,t)&&a.push(t);return a}},{"util/":319}],98:[function(e,a,t){},{}],99:[function(e,a,t){(function(a){"use strict";function f(){function e(){}try{var a=new Uint8Array(1);return a.foo=function(){return 42},a.constructor=e,42===a.foo()&&a.constructor===e&&"function"==typeof a.subarray&&0===a.subarray(1,1).byteLength}catch(t){return!1}}function c(){return r.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function r(e){return this instanceof r?(r.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof e?d(this,e):"string"==typeof e?n(this,e,arguments.length>1?arguments[1]:"utf8"):i(this,e)):arguments.length>1?new r(e,arguments[1]):new r(e)}function d(e,a){if(e=p(e,0>a?0:0|g(a)),!r.TYPED_ARRAY_SUPPORT)for(var t=0;a>t;t++)e[t]=0;return e}function n(e,a,t){("string"!=typeof t||""===t)&&(t="utf8");var f=0|v(a,t);return e=p(e,f),e.write(a,t),e}function i(e,a){if(r.isBuffer(a))return b(e,a);if(X(a))return o(e,a);if(null==a)throw new TypeError("must start with number, buffer, array or string");if("undefined"!=typeof ArrayBuffer){if(a.buffer instanceof ArrayBuffer)return s(e,a);if(a instanceof ArrayBuffer)return u(e,a)}return a.length?h(e,a):l(e,a)}function b(e,a){var t=0|g(a.length);return e=p(e,t),a.copy(e,0,0,t),e}function o(e,a){var t=0|g(a.length);e=p(e,t);for(var f=0;t>f;f+=1)e[f]=255&a[f];return e}function s(e,a){var t=0|g(a.length);e=p(e,t);for(var f=0;t>f;f+=1)e[f]=255&a[f];return e}function u(e,a){return r.TYPED_ARRAY_SUPPORT?(a.byteLength,e=r._augment(new Uint8Array(a))):e=s(e,new Uint8Array(a)),e}function h(e,a){var t=0|g(a.length);e=p(e,t);for(var f=0;t>f;f+=1)e[f]=255&a[f];return e}function l(e,a){var t,f=0;"Buffer"===a.type&&X(a.data)&&(t=a.data,f=0|g(t.length)),e=p(e,f);for(var c=0;f>c;c+=1)e[c]=255&t[c];return e}function p(e,a){r.TYPED_ARRAY_SUPPORT?(e=r._augment(new Uint8Array(a)),e.__proto__=r.prototype):(e.length=a,e._isBuffer=!0);var t=0!==a&&a<=r.poolSize>>>1;return t&&(e.parent=Z),e}function g(e){if(e>=c())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+c().toString(16)+" bytes");return 0|e}function m(e,a){if(!(this instanceof m))return new m(e,a);var t=new r(e,a);return delete t.parent,t}function v(e,a){"string"!=typeof e&&(e=""+e);var t=e.length;if(0===t)return 0;for(var f=!1;;)switch(a){case"ascii":case"binary":case"raw":case"raws":return t;case"utf8":case"utf-8":return F(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*t;case"hex":return t>>>1;case"base64":return Y(e).length;default:if(f)return F(e).length;a=(""+a).toLowerCase(),f=!0}}function y(e,a,t){var f=!1;if(a=0|a,t=void 0===t||t===1/0?this.length:0|t,e||(e="utf8"),0>a&&(a=0),t>this.length&&(t=this.length),a>=t)return"";for(;;)switch(e){case"hex":return O(this,a,t);case"utf8":case"utf-8":return x(this,a,t);case"ascii":return B(this,a,t);case"binary":return M(this,a,t);case"base64":return k(this,a,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,a,t);default:if(f)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),f=!0}}function w(e,a,t,f){t=Number(t)||0;var c=e.length-t;f?(f=Number(f),f>c&&(f=c)):f=c;var r=a.length;if(r%2!==0)throw new Error("Invalid hex string");f>r/2&&(f=r/2);for(var d=0;f>d;d++){var n=parseInt(a.substr(2*d,2),16);if(isNaN(n))throw new Error("Invalid hex string");e[t+d]=n}return d}function _(e,a,t,f){return G(F(a,e.length-t),e,t,f)}function S(e,a,t,f){return G(q(a),e,t,f)}function A(e,a,t,f){return S(e,a,t,f)}function I(e,a,t,f){return G(Y(a),e,t,f)}function E(e,a,t,f){return G(V(a,e.length-t),e,t,f)}function k(e,a,t){return 0===a&&t===e.length?W.fromByteArray(e):W.fromByteArray(e.slice(a,t))}function x(e,a,t){t=Math.min(e.length,t);for(var f=[],c=a;t>c;){var r=e[c],d=null,n=r>239?4:r>223?3:r>191?2:1;if(t>=c+n){var i,b,o,s;switch(n){case 1:128>r&&(d=r);break;case 2:i=e[c+1],128===(192&i)&&(s=(31&r)<<6|63&i,s>127&&(d=s));break;case 3:i=e[c+1],b=e[c+2],128===(192&i)&&128===(192&b)&&(s=(15&r)<<12|(63&i)<<6|63&b,s>2047&&(55296>s||s>57343)&&(d=s));break;case 4:i=e[c+1],b=e[c+2],o=e[c+3],128===(192&i)&&128===(192&b)&&128===(192&o)&&(s=(15&r)<<18|(63&i)<<12|(63&b)<<6|63&o,s>65535&&1114112>s&&(d=s))}}null===d?(d=65533,n=1):d>65535&&(d-=65536,f.push(d>>>10&1023|55296),d=56320|1023&d),f.push(d),c+=n}return P(f)}function P(e){var a=e.length;if($>=a)return String.fromCharCode.apply(String,e);for(var t="",f=0;a>f;)t+=String.fromCharCode.apply(String,e.slice(f,f+=$));return t}function B(e,a,t){var f="";t=Math.min(e.length,t);for(var c=a;t>c;c++)f+=String.fromCharCode(127&e[c]);return f}function M(e,a,t){var f="";t=Math.min(e.length,t);for(var c=a;t>c;c++)f+=String.fromCharCode(e[c]);return f}function O(e,a,t){var f=e.length;(!a||0>a)&&(a=0),(!t||0>t||t>f)&&(t=f);for(var c="",r=a;t>r;r++)c+=H(e[r]);return c}function R(e,a,t){for(var f=e.slice(a,t),c="",r=0;re)throw new RangeError("offset is not uint");if(e+a>t)throw new RangeError("Trying to access beyond buffer length")}function C(e,a,t,f,c,d){if(!r.isBuffer(e))throw new TypeError("buffer must be a Buffer instance");if(a>c||d>a)throw new RangeError("value is out of bounds");if(t+f>e.length)throw new RangeError("index out of range")}function N(e,a,t,f){0>a&&(a=65535+a+1);for(var c=0,r=Math.min(e.length-t,2);r>c;c++)e[t+c]=(a&255<<8*(f?c:1-c))>>>8*(f?c:1-c)}function j(e,a,t,f){0>a&&(a=4294967295+a+1);for(var c=0,r=Math.min(e.length-t,4);r>c;c++)e[t+c]=a>>>8*(f?c:3-c)&255}function L(e,a,t,f,c,r){if(a>c||r>a)throw new RangeError("value is out of bounds");if(t+f>e.length)throw new RangeError("index out of range");if(0>t)throw new RangeError("index out of range")}function D(e,a,t,f,c){return c||L(e,a,t,4,3.4028234663852886e38,-3.4028234663852886e38),J.write(e,a,t,f,23,4),t+4}function U(e,a,t,f,c){return c||L(e,a,t,8,1.7976931348623157e308,-1.7976931348623157e308),J.write(e,a,t,f,52,8),t+8}function z(e){if(e=K(e).replace(ee,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function K(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function H(e){return 16>e?"0"+e.toString(16):e.toString(16)}function F(e,a){a=a||1/0;for(var t,f=e.length,c=null,r=[],d=0;f>d;d++){if(t=e.charCodeAt(d),t>55295&&57344>t){if(!c){if(t>56319){(a-=3)>-1&&r.push(239,191,189);continue}if(d+1===f){(a-=3)>-1&&r.push(239,191,189);continue}c=t;continue}if(56320>t){(a-=3)>-1&&r.push(239,191,189),c=t;continue}t=(c-55296<<10|t-56320)+65536}else c&&(a-=3)>-1&&r.push(239,191,189);if(c=null,128>t){if((a-=1)<0)break;r.push(t)}else if(2048>t){if((a-=2)<0)break;r.push(t>>6|192,63&t|128)}else if(65536>t){if((a-=3)<0)break;r.push(t>>12|224,t>>6&63|128,63&t|128)}else{if(!(1114112>t))throw new Error("Invalid code point");if((a-=4)<0)break;r.push(t>>18|240,t>>12&63|128,t>>6&63|128,63&t|128)}}return r}function q(e){for(var a=[],t=0;t>8,c=t%256,r.push(c),r.push(f);return r}function Y(e){return W.toByteArray(z(e))}function G(e,a,t,f){for(var c=0;f>c&&!(c+t>=a.length||c>=e.length);c++)a[c+t]=e[c];return c}var W=e("base64-js"),J=e("ieee754"),X=e("isarray");t.Buffer=r,t.SlowBuffer=m,t.INSPECT_MAX_BYTES=50,r.poolSize=8192;var Z={};r.TYPED_ARRAY_SUPPORT=void 0!==a.TYPED_ARRAY_SUPPORT?a.TYPED_ARRAY_SUPPORT:f(),r.TYPED_ARRAY_SUPPORT?(r.prototype.__proto__=Uint8Array.prototype,r.__proto__=Uint8Array):(r.prototype.length=void 0,r.prototype.parent=void 0),r.isBuffer=function(e){return!(null==e||!e._isBuffer)},r.compare=function(e,a){if(!r.isBuffer(e)||!r.isBuffer(a))throw new TypeError("Arguments must be Buffers");if(e===a)return 0;for(var t=e.length,f=a.length,c=0,d=Math.min(t,f);d>c&&e[c]===a[c];)++c;return c!==d&&(t=e[c],f=a[c]),f>t?-1:t>f?1:0},r.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},r.concat=function(e,a){if(!X(e))throw new TypeError("list argument must be an Array of Buffers.");if(0===e.length)return new r(0);var t;if(void 0===a)for(a=0,t=0;t0&&(e=this.toString("hex",0,a).match(/.{2}/g).join(" "),this.length>a&&(e+=" ... ")),""},r.prototype.compare=function(e){if(!r.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?0:r.compare(this,e)},r.prototype.indexOf=function(e,a){function t(e,a,t){for(var f=-1,c=0;t+c2147483647?a=2147483647:-2147483648>a&&(a=-2147483648),a>>=0,0===this.length)return-1;if(a>=this.length)return-1;if(0>a&&(a=Math.max(this.length+a,0)),"string"==typeof e)return 0===e.length?-1:String.prototype.indexOf.call(this,e,a);if(r.isBuffer(e))return t(this,e,a);if("number"==typeof e)return r.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,a):t(this,[e],a);throw new TypeError("val must be string, number or Buffer")},r.prototype.get=function(e){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(e)},r.prototype.set=function(e,a){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(e,a)},r.prototype.write=function(e,a,t,f){if(void 0===a)f="utf8",t=this.length,a=0;else if(void 0===t&&"string"==typeof a)f=a,t=this.length,a=0;else if(isFinite(a))a=0|a,isFinite(t)?(t=0|t,void 0===f&&(f="utf8")):(f=t,t=void 0);else{var c=f;f=a,a=0|t,t=c}var r=this.length-a;if((void 0===t||t>r)&&(t=r),e.length>0&&(0>t||0>a)||a>this.length)throw new RangeError("attempt to write outside buffer bounds");f||(f="utf8");for(var d=!1;;)switch(f){case"hex":return w(this,e,a,t);case"utf8":case"utf-8":return _(this,e,a,t);case"ascii":return S(this,e,a,t);case"binary":return A(this,e,a,t);case"base64":return I(this,e,a,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,a,t);default:if(d)throw new TypeError("Unknown encoding: "+f);f=(""+f).toLowerCase(),d=!0}},r.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var $=4096;r.prototype.slice=function(e,a){var t=this.length;e=~~e,a=void 0===a?t:~~a,0>e?(e+=t,0>e&&(e=0)):e>t&&(e=t),0>a?(a+=t,0>a&&(a=0)):a>t&&(a=t),e>a&&(a=e);var f;if(r.TYPED_ARRAY_SUPPORT)f=r._augment(this.subarray(e,a));else{var c=a-e;f=new r(c,void 0);for(var d=0;c>d;d++)f[d]=this[d+e]}return f.length&&(f.parent=this.parent||this),f},r.prototype.readUIntLE=function(e,a,t){e=0|e,a=0|a,t||T(e,a,this.length);for(var f=this[e],c=1,r=0;++r0&&(c*=256);)f+=this[e+--a]*c;return f},r.prototype.readUInt8=function(e,a){return a||T(e,1,this.length),this[e]},r.prototype.readUInt16LE=function(e,a){return a||T(e,2,this.length),this[e]|this[e+1]<<8},r.prototype.readUInt16BE=function(e,a){return a||T(e,2,this.length),this[e]<<8|this[e+1]},r.prototype.readUInt32LE=function(e,a){return a||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},r.prototype.readUInt32BE=function(e,a){return a||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},r.prototype.readIntLE=function(e,a,t){e=0|e,a=0|a,t||T(e,a,this.length);for(var f=this[e],c=1,r=0;++r=c&&(f-=Math.pow(2,8*a)),f},r.prototype.readIntBE=function(e,a,t){e=0|e,a=0|a,t||T(e,a,this.length);for(var f=a,c=1,r=this[e+--f];f>0&&(c*=256);)r+=this[e+--f]*c;return c*=128,r>=c&&(r-=Math.pow(2,8*a)),r},r.prototype.readInt8=function(e,a){return a||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},r.prototype.readInt16LE=function(e,a){a||T(e,2,this.length);var t=this[e]|this[e+1]<<8;return 32768&t?4294901760|t:t},r.prototype.readInt16BE=function(e,a){a||T(e,2,this.length);var t=this[e+1]|this[e]<<8;return 32768&t?4294901760|t:t},r.prototype.readInt32LE=function(e,a){return a||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},r.prototype.readInt32BE=function(e,a){return a||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},r.prototype.readFloatLE=function(e,a){return a||T(e,4,this.length),J.read(this,e,!0,23,4)},r.prototype.readFloatBE=function(e,a){return a||T(e,4,this.length),J.read(this,e,!1,23,4)},r.prototype.readDoubleLE=function(e,a){return a||T(e,8,this.length),J.read(this,e,!0,52,8)},r.prototype.readDoubleBE=function(e,a){return a||T(e,8,this.length),J.read(this,e,!1,52,8)},r.prototype.writeUIntLE=function(e,a,t,f){e=+e,a=0|a,t=0|t,f||C(this,e,a,t,Math.pow(2,8*t),0);var c=1,r=0;for(this[a]=255&e;++r=0&&(r*=256);)this[a+c]=e/r&255;return a+t},r.prototype.writeUInt8=function(e,a,t){return e=+e,a=0|a,t||C(this,e,a,1,255,0),r.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[a]=255&e,a+1},r.prototype.writeUInt16LE=function(e,a,t){return e=+e,a=0|a,t||C(this,e,a,2,65535,0),r.TYPED_ARRAY_SUPPORT?(this[a]=255&e,this[a+1]=e>>>8):N(this,e,a,!0),a+2},r.prototype.writeUInt16BE=function(e,a,t){return e=+e,a=0|a,t||C(this,e,a,2,65535,0),r.TYPED_ARRAY_SUPPORT?(this[a]=e>>>8,this[a+1]=255&e):N(this,e,a,!1),a+2},r.prototype.writeUInt32LE=function(e,a,t){return e=+e,a=0|a,t||C(this,e,a,4,4294967295,0),r.TYPED_ARRAY_SUPPORT?(this[a+3]=e>>>24,this[a+2]=e>>>16,this[a+1]=e>>>8,this[a]=255&e):j(this,e,a,!0),a+4},r.prototype.writeUInt32BE=function(e,a,t){return e=+e,a=0|a,t||C(this,e,a,4,4294967295,0),r.TYPED_ARRAY_SUPPORT?(this[a]=e>>>24,this[a+1]=e>>>16,this[a+2]=e>>>8,this[a+3]=255&e):j(this,e,a,!1),a+4},r.prototype.writeIntLE=function(e,a,t,f){if(e=+e,a=0|a,!f){var c=Math.pow(2,8*t-1);C(this,e,a,t,c-1,-c)}var r=0,d=1,n=0>e?1:0;for(this[a]=255&e;++r>0)-n&255;return a+t},r.prototype.writeIntBE=function(e,a,t,f){if(e=+e,a=0|a,!f){var c=Math.pow(2,8*t-1);C(this,e,a,t,c-1,-c)}var r=t-1,d=1,n=0>e?1:0;for(this[a+r]=255&e;--r>=0&&(d*=256);)this[a+r]=(e/d>>0)-n&255;return a+t},r.prototype.writeInt8=function(e,a,t){return e=+e,a=0|a,t||C(this,e,a,1,127,-128),r.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),0>e&&(e=255+e+1),this[a]=255&e,a+1},r.prototype.writeInt16LE=function(e,a,t){return e=+e,a=0|a,t||C(this,e,a,2,32767,-32768),r.TYPED_ARRAY_SUPPORT?(this[a]=255&e,this[a+1]=e>>>8):N(this,e,a,!0),a+2},r.prototype.writeInt16BE=function(e,a,t){return e=+e,a=0|a,t||C(this,e,a,2,32767,-32768),r.TYPED_ARRAY_SUPPORT?(this[a]=e>>>8,this[a+1]=255&e):N(this,e,a,!1),a+2},r.prototype.writeInt32LE=function(e,a,t){return e=+e,a=0|a,t||C(this,e,a,4,2147483647,-2147483648),r.TYPED_ARRAY_SUPPORT?(this[a]=255&e,this[a+1]=e>>>8,this[a+2]=e>>>16,this[a+3]=e>>>24):j(this,e,a,!0),a+4},r.prototype.writeInt32BE=function(e,a,t){return e=+e,a=0|a,t||C(this,e,a,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),r.TYPED_ARRAY_SUPPORT?(this[a]=e>>>24,this[a+1]=e>>>16,this[a+2]=e>>>8,this[a+3]=255&e):j(this,e,a,!1),a+4},r.prototype.writeFloatLE=function(e,a,t){return D(this,e,a,!0,t)},r.prototype.writeFloatBE=function(e,a,t){return D(this,e,a,!1,t)},r.prototype.writeDoubleLE=function(e,a,t){return U(this,e,a,!0,t)},r.prototype.writeDoubleBE=function(e,a,t){return U(this,e,a,!1,t)},r.prototype.copy=function(e,a,t,f){if(t||(t=0),f||0===f||(f=this.length),a>=e.length&&(a=e.length),a||(a=0),f>0&&t>f&&(f=t),f===t)return 0;if(0===e.length||0===this.length)return 0;if(0>a)throw new RangeError("targetStart out of bounds");if(0>t||t>=this.length)throw new RangeError("sourceStart out of bounds");if(0>f)throw new RangeError("sourceEnd out of bounds");f>this.length&&(f=this.length),e.length-at&&f>a)for(c=d-1;c>=0;c--)e[c+a]=this[c+t];else if(1e3>d||!r.TYPED_ARRAY_SUPPORT)for(c=0;d>c;c++)e[c+a]=this[c+t];else e._set(this.subarray(t,t+d),a);return d},r.prototype.fill=function(e,a,t){if(e||(e=0),a||(a=0),t||(t=this.length),a>t)throw new RangeError("end < start");if(t!==a&&0!==this.length){if(0>a||a>=this.length)throw new RangeError("start out of bounds");if(0>t||t>this.length)throw new RangeError("end out of bounds");var f;if("number"==typeof e)for(f=a;t>f;f++)this[f]=e;else{var c=F(e.toString()),r=c.length;for(f=a;t>f;f++)this[f]=c[f%r]}return this}},r.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(r.TYPED_ARRAY_SUPPORT)return new r(this).buffer;for(var e=new Uint8Array(this.length),a=0,t=e.length;t>a;a+=1)e[a]=this[a];return e.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser")};var Q=r.prototype;r._augment=function(e){return e.constructor=r,e._isBuffer=!0,e._set=e.set,e.get=Q.get,e.set=Q.set,e.write=Q.write,e.toString=Q.toString,e.toLocaleString=Q.toString,e.toJSON=Q.toJSON,e.equals=Q.equals,e.compare=Q.compare,e.indexOf=Q.indexOf,e.copy=Q.copy,e.slice=Q.slice,e.readUIntLE=Q.readUIntLE,e.readUIntBE=Q.readUIntBE,e.readUInt8=Q.readUInt8,e.readUInt16LE=Q.readUInt16LE,e.readUInt16BE=Q.readUInt16BE,e.readUInt32LE=Q.readUInt32LE,e.readUInt32BE=Q.readUInt32BE,e.readIntLE=Q.readIntLE,e.readIntBE=Q.readIntBE,e.readInt8=Q.readInt8,e.readInt16LE=Q.readInt16LE,e.readInt16BE=Q.readInt16BE,e.readInt32LE=Q.readInt32LE,e.readInt32BE=Q.readInt32BE,e.readFloatLE=Q.readFloatLE,e.readFloatBE=Q.readFloatBE,e.readDoubleLE=Q.readDoubleLE,e.readDoubleBE=Q.readDoubleBE,e.writeUInt8=Q.writeUInt8,e.writeUIntLE=Q.writeUIntLE,e.writeUIntBE=Q.writeUIntBE,e.writeUInt16LE=Q.writeUInt16LE,e.writeUInt16BE=Q.writeUInt16BE,e.writeUInt32LE=Q.writeUInt32LE,e.writeUInt32BE=Q.writeUInt32BE,e.writeIntLE=Q.writeIntLE,e.writeIntBE=Q.writeIntBE,e.writeInt8=Q.writeInt8,e.writeInt16LE=Q.writeInt16LE,e.writeInt16BE=Q.writeInt16BE,e.writeInt32LE=Q.writeInt32LE,e.writeInt32BE=Q.writeInt32BE,e.writeFloatLE=Q.writeFloatLE,e.writeFloatBE=Q.writeFloatBE,e.writeDoubleLE=Q.writeDoubleLE,e.writeDoubleBE=Q.writeDoubleBE,e.fill=Q.fill,e.inspect=Q.inspect,e.toArrayBuffer=Q.toArrayBuffer,e};var ee=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":100,ieee754:101,isarray:102}],100:[function(e,a,t){var f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(e){"use strict";function a(e){var a=e.charCodeAt(0);return a===d||a===s?62:a===n||a===u?63:i>a?-1:i+10>a?a-i+26+26:o+26>a?a-o:b+26>a?a-b+26:void 0}function t(e){function t(e){b[s++]=e}var f,c,d,n,i,b;if(e.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var o=e.length;i="="===e.charAt(o-2)?2:"="===e.charAt(o-1)?1:0,b=new r(3*e.length/4-i),d=i>0?e.length-4:e.length;var s=0;for(f=0,c=0;d>f;f+=4,c+=3)n=a(e.charAt(f))<<18|a(e.charAt(f+1))<<12|a(e.charAt(f+2))<<6|a(e.charAt(f+3)),t((16711680&n)>>16),t((65280&n)>>8),t(255&n);return 2===i?(n=a(e.charAt(f))<<2|a(e.charAt(f+1))>>4,t(255&n)):1===i&&(n=a(e.charAt(f))<<10|a(e.charAt(f+1))<<4|a(e.charAt(f+2))>>2,t(n>>8&255),t(255&n)),b}function c(e){function a(e){return f.charAt(e)}function t(e){return a(e>>18&63)+a(e>>12&63)+a(e>>6&63)+a(63&e)}var c,r,d,n=e.length%3,i="";for(c=0,d=e.length-n;d>c;c+=3)r=(e[c]<<16)+(e[c+1]<<8)+e[c+2],i+=t(r);switch(n){case 1:r=e[e.length-1],i+=a(r>>2),i+=a(r<<4&63),i+="==";break;case 2:r=(e[e.length-2]<<8)+e[e.length-1],i+=a(r>>10),i+=a(r>>4&63),i+=a(r<<2&63),i+="="}return i}var r="undefined"!=typeof Uint8Array?Uint8Array:Array,d="+".charCodeAt(0),n="/".charCodeAt(0),i="0".charCodeAt(0),b="a".charCodeAt(0),o="A".charCodeAt(0),s="-".charCodeAt(0),u="_".charCodeAt(0);e.toByteArray=t,e.fromByteArray=c}("undefined"==typeof t?this.base64js={}:t)},{}],101:[function(e,a,t){t.read=function(e,a,t,f,c){var r,d,n=8*c-f-1,i=(1<>1,o=-7,s=t?c-1:0,u=t?-1:1,h=e[a+s];for(s+=u,r=h&(1<<-o)-1,h>>=-o,o+=n;o>0;r=256*r+e[a+s], -s+=u,o-=8);for(d=r&(1<<-o)-1,r>>=-o,o+=f;o>0;d=256*d+e[a+s],s+=u,o-=8);if(0===r)r=1-b;else{if(r===i)return d?NaN:(h?-1:1)*(1/0);d+=Math.pow(2,f),r-=b}return(h?-1:1)*d*Math.pow(2,r-f)},t.write=function(e,a,t,f,c,r){var d,n,i,b=8*r-c-1,o=(1<>1,u=23===c?Math.pow(2,-24)-Math.pow(2,-77):0,h=f?0:r-1,l=f?1:-1,p=0>a||0===a&&0>1/a?1:0;for(a=Math.abs(a),isNaN(a)||a===1/0?(n=isNaN(a)?1:0,d=o):(d=Math.floor(Math.log(a)/Math.LN2),a*(i=Math.pow(2,-d))<1&&(d--,i*=2),a+=d+s>=1?u/i:u*Math.pow(2,1-s),a*i>=2&&(d++,i/=2),d+s>=o?(n=0,d=o):d+s>=1?(n=(a*i-1)*Math.pow(2,c),d+=s):(n=a*Math.pow(2,s-1)*Math.pow(2,c),d=0));c>=8;e[t+h]=255&n,h+=l,n/=256,c-=8);for(d=d<0;e[t+h]=255&d,h+=l,d/=256,b-=8);e[t+h-l]|=128*p}},{}],102:[function(e,a,t){var f={}.toString;a.exports=Array.isArray||function(e){return"[object Array]"==f.call(e)}},{}],103:[function(e,a,t){"use strict";t.randomBytes=t.rng=t.pseudoRandomBytes=t.prng=e("randombytes"),t.createHash=t.Hash=e("create-hash"),t.createHmac=t.Hmac=e("create-hmac");var f=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(Object.keys(e("browserify-sign/algos")));t.getHashes=function(){return f};var c=e("pbkdf2");t.pbkdf2=c.pbkdf2,t.pbkdf2Sync=c.pbkdf2Sync;var r=e("browserify-cipher");["Cipher","createCipher","Cipheriv","createCipheriv","Decipher","createDecipher","Decipheriv","createDecipheriv","getCiphers","listCiphers"].forEach(function(e){t[e]=r[e]});var d=e("diffie-hellman");["DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman"].forEach(function(e){t[e]=d[e]});var n=e("browserify-sign");["createSign","Sign","createVerify","Verify"].forEach(function(e){t[e]=n[e]}),t.createECDH=e("create-ecdh");var i=e("public-encrypt");["publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt"].forEach(function(e){t[e]=i[e]}),["createCredentials"].forEach(function(e){t[e]=function(){throw new Error(["sorry, "+e+" is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join("\n"))}})},{"browserify-cipher":104,"browserify-sign":134,"browserify-sign/algos":133,"create-ecdh":201,"create-hash":227,"create-hmac":240,"diffie-hellman":241,pbkdf2:248,"public-encrypt":249,randombytes:294}],104:[function(e,a,t){function f(e,a){var t,f;if(e=e.toLowerCase(),u[e])t=u[e].key,f=u[e].iv;else{if(!s[e])throw new TypeError("invalid suite type");t=8*s[e].key,f=s[e].iv}var c=i(a,!1,t,f);return r(e,c.key,c.iv)}function c(e,a){var t,f;if(e=e.toLowerCase(),u[e])t=u[e].key,f=u[e].iv;else{if(!s[e])throw new TypeError("invalid suite type");t=8*s[e].key,f=s[e].iv}var c=i(a,!1,t,f);return d(e,c.key,c.iv)}function r(e,a,t){if(e=e.toLowerCase(),u[e])return b.createCipheriv(e,a,t);if(s[e])return new o({key:a,iv:t,mode:e});throw new TypeError("invalid suite type")}function d(e,a,t){if(e=e.toLowerCase(),u[e])return b.createDecipheriv(e,a,t);if(s[e])return new o({key:a,iv:t,mode:e,decrypt:!0});throw new TypeError("invalid suite type")}function n(){return Object.keys(s).concat(b.getCiphers())}var i=e("evp_bytestokey"),b=e("browserify-aes/browser"),o=e("browserify-des"),s=e("browserify-des/modes"),u=e("browserify-aes/modes");t.createCipher=t.Cipher=f,t.createCipheriv=t.Cipheriv=r,t.createDecipher=t.Decipher=c,t.createDecipheriv=t.Decipheriv=d,t.listCiphers=t.getCiphers=n},{"browserify-aes/browser":107,"browserify-aes/modes":111,"browserify-des":122,"browserify-des/modes":123,evp_bytestokey:132}],105:[function(e,a,t){(function(e){function a(e){var a,t;return a=e>n||0>e?(t=Math.abs(e)%n,0>e?n-t:t):e}function f(e){for(var a=0;ae;a=++e)128>a?t.push(a<<1):t.push(a<<1^283);return t}(),c=0,i=0,a=b=0;256>b;a=++b)t=i^i<<1^i<<2^i<<3^i<<4,t=t>>>8^255&t^99,this.SBOX[c]=t,this.INV_SBOX[t]=c,r=e[c],d=e[r],n=e[d],f=257*e[t]^16843008*t,this.SUB_MIX[0][c]=f<<24|f>>>8,this.SUB_MIX[1][c]=f<<16|f>>>16,this.SUB_MIX[2][c]=f<<8|f>>>24,this.SUB_MIX[3][c]=f,f=16843009*n^65537*d^257*r^16843008*c,this.INV_SUB_MIX[0][t]=f<<24|f>>>8,this.INV_SUB_MIX[1][t]=f<<16|f>>>16,this.INV_SUB_MIX[2][t]=f<<8|f>>>24,this.INV_SUB_MIX[3][t]=f,0===c?c=i=1:(c=r^e[e[e[n^r]]],i^=e[e[i]]);return!0};var i=new c;d.blockSize=16,d.prototype.blockSize=d.blockSize,d.keySize=32,d.prototype.keySize=d.keySize,d.prototype._doReset=function(){var e,a,t,f,c,r;for(t=this._key,a=t.length,this._nRounds=a+6,c=4*(this._nRounds+1),this._keySchedule=[],f=0;c>f;f++)this._keySchedule[f]=a>f?t[f]:(r=this._keySchedule[f-1],f%a===0?(r=r<<8|r>>>24,r=i.SBOX[r>>>24]<<24|i.SBOX[r>>>16&255]<<16|i.SBOX[r>>>8&255]<<8|i.SBOX[255&r],r^=i.RCON[f/a|0]<<24):a>6&&f%a===4?r=i.SBOX[r>>>24]<<24|i.SBOX[r>>>16&255]<<16|i.SBOX[r>>>8&255]<<8|i.SBOX[255&r]:void 0,this._keySchedule[f-a]^r);for(this._invKeySchedule=[],e=0;c>e;e++)f=c-e,r=this._keySchedule[f-(e%4?0:4)],this._invKeySchedule[e]=4>e||4>=f?r:i.INV_SUB_MIX[0][i.SBOX[r>>>24]]^i.INV_SUB_MIX[1][i.SBOX[r>>>16&255]]^i.INV_SUB_MIX[2][i.SBOX[r>>>8&255]]^i.INV_SUB_MIX[3][i.SBOX[255&r]];return!0},d.prototype.encryptBlock=function(a){a=r(new e(a));var t=this._doCryptBlock(a,this._keySchedule,i.SUB_MIX,i.SBOX),f=new e(16);return f.writeUInt32BE(t[0],0),f.writeUInt32BE(t[1],4),f.writeUInt32BE(t[2],8),f.writeUInt32BE(t[3],12),f},d.prototype.decryptBlock=function(a){a=r(new e(a));var t=[a[3],a[1]];a[1]=t[0],a[3]=t[1];var f=this._doCryptBlock(a,this._invKeySchedule,i.INV_SUB_MIX,i.INV_SBOX),c=new e(16);return c.writeUInt32BE(f[0],0),c.writeUInt32BE(f[3],4),c.writeUInt32BE(f[2],8),c.writeUInt32BE(f[1],12),c},d.prototype.scrub=function(){f(this._keySchedule),f(this._invKeySchedule),f(this._key)},d.prototype._doCryptBlock=function(e,t,f,c){var r,d,n,i,b,o,s,u,h;d=e[0]^t[0],n=e[1]^t[1],i=e[2]^t[2],b=e[3]^t[3],r=4;for(var l=1;l>>24]^f[1][n>>>16&255]^f[2][i>>>8&255]^f[3][255&b]^t[r++],s=f[0][n>>>24]^f[1][i>>>16&255]^f[2][b>>>8&255]^f[3][255&d]^t[r++],u=f[0][i>>>24]^f[1][b>>>16&255]^f[2][d>>>8&255]^f[3][255&n]^t[r++],h=f[0][b>>>24]^f[1][d>>>16&255]^f[2][n>>>8&255]^f[3][255&i]^t[r++],d=o,n=s,i=u,b=h;return o=(c[d>>>24]<<24|c[n>>>16&255]<<16|c[i>>>8&255]<<8|c[255&b])^t[r++],s=(c[n>>>24]<<24|c[i>>>16&255]<<16|c[b>>>8&255]<<8|c[255&d])^t[r++],u=(c[i>>>24]<<24|c[b>>>16&255]<<16|c[d>>>8&255]<<8|c[255&n])^t[r++],h=(c[b>>>24]<<24|c[d>>>16&255]<<16|c[n>>>8&255]<<8|c[255&i])^t[r++],[a(o),a(s),a(u),a(h)]},t.AES=d}).call(this,e("buffer").Buffer)},{buffer:99}],106:[function(e,a,t){(function(t){function f(e,a,c,n){if(!(this instanceof f))return new f(e,a,c);d.call(this),this._finID=t.concat([c,new t([0,0,0,1])]),c=t.concat([c,new t([0,0,0,2])]),this._cipher=new r.AES(a),this._prev=new t(c.length),this._cache=new t(""),this._secCache=new t(""),this._decrypt=n,this._alen=0,this._len=0,c.copy(this._prev),this._mode=e;var b=new t(4);b.fill(0),this._ghash=new i(this._cipher.encryptBlock(b)),this._authTag=null,this._called=!1}function c(e,a){var t=0;e.length!==a.length&&t++;for(var f=Math.min(e.length,a.length),c=-1;++ca&&(a=new t(a),a.fill(0),this._ghash.update(a))}this._called=!0;var f=this._mode.encrypt(this,e);return this._decrypt?this._ghash.update(e):this._ghash.update(f),this._len+=e.length,f},f.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var e=b(this._ghash["final"](8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt){if(c(e,this._authTag))throw new Error("Unsupported state or unable to authenticate data")}else this._authTag=e;this._cipher.scrub()},f.prototype.getAuthTag=function(){if(!this._decrypt&&t.isBuffer(this._authTag))return this._authTag;throw new Error("Attempting to get auth tag in unsupported state")},f.prototype.setAuthTag=function(e){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=e},f.prototype.setAAD=function(e){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(e),this._alen+=e.length}}).call(this,e("buffer").Buffer)},{"./aes":105,"./ghash":110,buffer:99,"buffer-xor":119,"cipher-base":120,inherits:296}],107:[function(e,a,t){function f(){return Object.keys(d)}var c=e("./encrypter");t.createCipher=t.Cipher=c.createCipher,t.createCipheriv=t.Cipheriv=c.createCipheriv;var r=e("./decrypter");t.createDecipher=t.Decipher=r.createDecipher,t.createDecipheriv=t.Decipheriv=r.createDecipheriv;var d=e("./modes");t.listCiphers=t.getCiphers=f},{"./decrypter":108,"./encrypter":109,"./modes":111}],108:[function(e,a,t){(function(a){function f(e,t,r){return this instanceof f?(b.call(this),this._cache=new c,this._last=void 0,this._cipher=new i.AES(t),this._prev=new a(r.length),r.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new f(e,t,r)}function c(){return this instanceof c?void(this.cache=new a("")):new c}function r(e){for(var a=e[15],t=-1;++t16)return a=this.cache.slice(0,16),this.cache=this.cache.slice(16),a}else if(this.cache.length>=16)return a=this.cache.slice(0,16),this.cache=this.cache.slice(16),a;return null},c.prototype.flush=function(){return this.cache.length?this.cache:void 0};var p={ECB:e("./modes/ecb"),CBC:e("./modes/cbc"),CFB:e("./modes/cfb"),CFB8:e("./modes/cfb8"),CFB1:e("./modes/cfb1"),OFB:e("./modes/ofb"),CTR:e("./modes/ctr"),GCM:e("./modes/ctr")};t.createDecipher=n,t.createDecipheriv=d}).call(this,e("buffer").Buffer)},{"./aes":105,"./authCipher":106,"./modes":111,"./modes/cbc":112,"./modes/cfb":113,"./modes/cfb1":114,"./modes/cfb8":115,"./modes/ctr":116,"./modes/ecb":117,"./modes/ofb":118,"./streamCipher":121,buffer:99,"cipher-base":120,evp_bytestokey:132,inherits:296}],109:[function(e,a,t){(function(a){function f(e,t,r){return this instanceof f?(i.call(this),this._cache=new c,this._cipher=new n.AES(t),this._prev=new a(r.length),r.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new f(e,t,r)}function c(){return this instanceof c?void(this.cache=new a("")):new c}function r(e,t,c){var r=o[e.toLowerCase()];if(!r)throw new TypeError("invalid suite type");if("string"==typeof c&&(c=new a(c)),"string"==typeof t&&(t=new a(t)),t.length!==r.key/8)throw new TypeError("invalid key length "+t.length);if(c.length!==r.iv)throw new TypeError("invalid iv length "+c.length);return"stream"===r.type?new u(l[r.mode],t,c):"auth"===r.type?new h(l[r.mode],t,c):new f(l[r.mode],t,c)}function d(e,a){var t=o[e.toLowerCase()];if(!t)throw new TypeError("invalid suite type");var f=s(a,!1,t.key,t.iv);return r(e,f.key,f.iv)}var n=e("./aes"),i=e("cipher-base"),b=e("inherits"),o=e("./modes"),s=e("evp_bytestokey"),u=e("./streamCipher"),h=e("./authCipher");b(f,i),f.prototype._update=function(e){this._cache.add(e);for(var t,f,c=[];t=this._cache.get();)f=this._mode.encrypt(this,t),c.push(f);return a.concat(c)},f.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return e=this._mode.encrypt(this,e),this._cipher.scrub(),e;if("10101010101010101010101010101010"!==e.toString("hex"))throw this._cipher.scrub(),new Error("data not multiple of block length")},f.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},c.prototype.add=function(e){this.cache=a.concat([this.cache,e])},c.prototype.get=function(){if(this.cache.length>15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},c.prototype.flush=function(){for(var e=16-this.cache.length,t=new a(e),f=-1;++fi||0>e?(t=Math.abs(e)%i,0>e?i-t:t):e}function d(e,a){return[e[0]^a[0],e[1]^a[1],e[2]^a[2],e[3]^a[3]]}var n=new e(16);n.fill(0),a.exports=t,t.prototype.ghash=function(e){for(var a=-1;++a0;e--)r[e]=r[e]>>>1|(1&r[e-1])<<31;r[0]=r[0]>>>1,t&&(r[0]=r[0]^225<<24)}this.state=c(n)},t.prototype.update=function(a){this.cache=e.concat([this.cache,a]);for(var t;this.cache.length>=16;)t=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(t)},t.prototype["final"]=function(a,t){return this.cache.length&&this.ghash(e.concat([this.cache,n],16)),this.ghash(c([0,a,0,t])),this.state};var i=Math.pow(2,32)}).call(this,e("buffer").Buffer)},{buffer:99}],111:[function(e,a,t){t["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},t["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},t["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},t["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},t["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},t["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},t.aes128=t["aes-128-cbc"],t.aes192=t["aes-192-cbc"],t.aes256=t["aes-256-cbc"],t["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},t["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},t["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},t["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},t["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},t["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},t["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},t["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},t["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},t["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},t["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},t["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},t["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},t["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},t["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},t["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},t["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},t["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},{}],112:[function(e,a,t){var f=e("buffer-xor");t.encrypt=function(e,a){var t=f(a,e._prev);return e._prev=e._cipher.encryptBlock(t),e._prev},t.decrypt=function(e,a){var t=e._prev;e._prev=a;var c=e._cipher.decryptBlock(a);return f(c,t)}},{"buffer-xor":119}],113:[function(e,a,t){(function(a){function f(e,t,f){var r=t.length,d=c(t,e._cache);return e._cache=e._cache.slice(r),e._prev=a.concat([e._prev,f?t:d]),d}var c=e("buffer-xor");t.encrypt=function(e,t,c){for(var r,d=new a("");t.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=new a("")),!(e._cache.length<=t.length)){d=a.concat([d,f(e,t,c)]);break}r=e._cache.length,d=a.concat([d,f(e,t.slice(0,r),c)]),t=t.slice(r)}return d}}).call(this,e("buffer").Buffer)},{buffer:99,"buffer-xor":119}],114:[function(e,a,t){(function(e){function a(e,a,t){for(var c,r,d,n=-1,i=8,b=0;++n>n%8,e._prev=f(e._prev,t?r:d);return b}function f(a,t){var f=a.length,c=-1,r=new e(a.length);for(a=e.concat([a,new e([t])]);++c>7;return r}t.encrypt=function(t,f,c){for(var r=f.length,d=new e(r),n=-1;++nr;++r)c[r]=a[r]^t[r];return c}}).call(this,e("buffer").Buffer)},{buffer:99}],120:[function(e,a,t){(function(t){function f(e){c.call(this),this.hashMode="string"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this["final"]=this._finalOrDigest,this._decoder=null,this._encoding=null}var c=e("stream").Transform,r=e("inherits"),d=e("string_decoder").StringDecoder;a.exports=f,r(f,c),f.prototype.update=function(e,a,f){"string"==typeof e&&(e=new t(e,a));var c=this._update(e);return this.hashMode?this:(f&&(c=this._toString(c,f)),c)},f.prototype.setAutoPadding=function(){},f.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},f.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},f.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},f.prototype._transform=function(e,a,t){var f;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(c){f=c}finally{t(f)}},f.prototype._flush=function(e){var a;try{this.push(this._final())}catch(t){a=t}finally{e(a)}},f.prototype._finalOrDigest=function(e){var a=this._final()||new t("");return e&&(a=this._toString(a,e,!0)),a},f.prototype._toString=function(e,a,t){if(this._decoder||(this._decoder=new d(a),this._encoding=a),this._encoding!==a)throw new Error("can't switch encodings");var f=this._decoder.write(e);return t&&(f+=this._decoder.end()),f}}).call(this,e("buffer").Buffer)},{buffer:99,inherits:296,stream:315,string_decoder:316}],121:[function(e,a,t){(function(t){function f(e,a,d,n){return this instanceof f?(r.call(this),this._cipher=new c.AES(a),this._prev=new t(d.length),this._cache=new t(""),this._secCache=new t(""),this._decrypt=n,d.copy(this._prev),void(this._mode=e)):new f(e,a,d)}var c=e("./aes"),r=e("cipher-base"),d=e("inherits");d(f,r),a.exports=f,f.prototype._update=function(e){return this._mode.encrypt(this,e,this._decrypt)},f.prototype._final=function(){this._cipher.scrub()}}).call(this,e("buffer").Buffer)},{"./aes":105,buffer:99,"cipher-base":120,inherits:296}],122:[function(e,a,t){(function(t){function f(e){c.call(this);var a,f=e.mode.toLowerCase(),r=n[f];a=e.decrypt?"decrypt":"encrypt";var d=e.key;("des-ede"===f||"des-ede-cbc"===f)&&(d=t.concat([d,d.slice(0,8)]));var i=e.iv;this._des=r.create({key:d,iv:i,type:a})}var c=e("cipher-base"),r=e("des.js"),d=e("inherits"),n={"des-ede3-cbc":r.CBC.instantiate(r.EDE),"des-ede3":r.EDE,"des-ede-cbc":r.CBC.instantiate(r.EDE),"des-ede":r.EDE,"des-cbc":r.CBC.instantiate(r.DES),"des-ecb":r.DES};n.des=n["des-cbc"],n.des3=n["des-ede3-cbc"],a.exports=f,d(f,c),f.prototype._update=function(e){return new t(this._des.update(e))},f.prototype._final=function(){return new t(this._des["final"]())}}).call(this,e("buffer").Buffer)},{buffer:99,"cipher-base":124,"des.js":125,inherits:296}],123:[function(e,a,t){t["des-ecb"]={key:8,iv:0},t["des-cbc"]=t.des={key:8,iv:8},t["des-ede3-cbc"]=t.des3={key:24,iv:8},t["des-ede3"]={key:24,iv:0},t["des-ede-cbc"]={key:16,iv:8},t["des-ede"]={key:16,iv:0}},{}],124:[function(e,a,t){arguments[4][120][0].apply(t,arguments)},{buffer:99,dup:120,inherits:296,stream:315,string_decoder:316}],125:[function(e,a,t){"use strict";t.utils=e("./des/utils"),t.Cipher=e("./des/cipher"),t.DES=e("./des/des"),t.CBC=e("./des/cbc"),t.EDE=e("./des/ede")},{"./des/cbc":126,"./des/cipher":127,"./des/des":128,"./des/ede":129,"./des/utils":130}],126:[function(e,a,t){"use strict";function f(e){r.equal(e.length,8,"Invalid IV length"),this.iv=new Array(8);for(var a=0;af;f++)this.buffer[this.bufferOff+f]=e[a+f];return this.bufferOff+=t,t},f.prototype._flushBuffer=function(e,a){return this._update(this.buffer,0,e,a),this.bufferOff=0,this.blockSize},f.prototype._updateEncrypt=function(e){var a=0,t=0,f=(this.bufferOff+e.length)/this.blockSize|0,c=new Array(f*this.blockSize);0!==this.bufferOff&&(a+=this._buffer(e,a),this.bufferOff===this.buffer.length&&(t+=this._flushBuffer(c,t)));for(var r=e.length-(e.length-a)%this.blockSize;r>a;a+=this.blockSize)this._update(e,a,c,t),t+=this.blockSize;for(;a0;f--)a+=this._buffer(e,a),t+=this._flushBuffer(c,t);return a+=this._buffer(e,a),c},f.prototype["final"]=function(e){var a;e&&(a=this.update(e));var t;return t="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),a?a.concat(t):t},f.prototype._pad=function(e,a){if(0===a)return!1;for(;a>>1];t=i.r28shl(t,d),f=i.r28shl(f,d),i.pc2(t,f,e.keys,c)}},c.prototype._update=function(e,a,t,f){var c=this._desState,r=i.readUInt32BE(e,a),d=i.readUInt32BE(e,a+4);i.ip(r,d,c.tmp,0),r=c.tmp[0],d=c.tmp[1],"encrypt"===this.type?this._encrypt(c,r,d,c.tmp,0):this._decrypt(c,r,d,c.tmp,0),r=c.tmp[0],d=c.tmp[1],i.writeUInt32BE(t,r,f),i.writeUInt32BE(t,d,f+4)},c.prototype._pad=function(e,a){for(var t=e.length-a,f=a;f>>0,r=h}i.rip(d,r,f,c)},c.prototype._decrypt=function(e,a,t,f,c){for(var r=t,d=a,n=e.keys.length-2;n>=0;n-=2){var b=e.keys[n],o=e.keys[n+1];i.expand(r,e.tmp,0),b^=e.tmp[0],o^=e.tmp[1];var s=i.substitute(b,o),u=i.permute(s),h=r;r=(d^u)>>>0,d=h}i.rip(r,d,f,c)}},{"../des":125,inherits:296,"minimalistic-assert":131}],129:[function(e,a,t){"use strict";function f(e,a){r.equal(a.length,24,"Invalid key length");var t=a.slice(0,8),f=a.slice(8,16),c=a.slice(16,24);"encrypt"===e?this.ciphers=[b.create({type:"encrypt",key:t}),b.create({type:"decrypt",key:f}),b.create({type:"encrypt",key:c})]:this.ciphers=[b.create({type:"decrypt",key:c}),b.create({type:"encrypt",key:f}),b.create({type:"decrypt",key:t})]}function c(e){i.call(this,e);var a=new f(this.type,this.options.key);this._edeState=a}var r=e("minimalistic-assert"),d=e("inherits"),n=e("../des"),i=n.Cipher,b=n.DES;d(c,i),a.exports=c,c.create=function(e){return new c(e)},c.prototype._update=function(e,a,t,f){var c=this._edeState;c.ciphers[0]._update(e,a,t,f),c.ciphers[1]._update(t,f,t,f),c.ciphers[2]._update(t,f,t,f)},c.prototype._pad=b.prototype._pad,c.prototype._unpad=b.prototype._unpad},{"../des":125,inherits:296,"minimalistic-assert":131}],130:[function(e,a,t){"use strict";t.readUInt32BE=function(e,a){var t=e[0+a]<<24|e[1+a]<<16|e[2+a]<<8|e[3+a];return t>>>0},t.writeUInt32BE=function(e,a,t){e[0+t]=a>>>24,e[1+t]=a>>>16&255,e[2+t]=a>>>8&255,e[3+t]=255&a},t.ip=function(e,a,t,f){for(var c=0,r=0,d=6;d>=0;d-=2){for(var n=0;24>=n;n+=8)c<<=1,c|=a>>>n+d&1;for(var n=0;24>=n;n+=8)c<<=1,c|=e>>>n+d&1}for(var d=6;d>=0;d-=2){for(var n=1;25>=n;n+=8)r<<=1,r|=a>>>n+d&1;for(var n=1;25>=n;n+=8)r<<=1,r|=e>>>n+d&1}t[f+0]=c>>>0,t[f+1]=r>>>0},t.rip=function(e,a,t,f){for(var c=0,r=0,d=0;4>d;d++)for(var n=24;n>=0;n-=8)c<<=1,c|=a>>>n+d&1,c<<=1,c|=e>>>n+d&1;for(var d=4;8>d;d++)for(var n=24;n>=0;n-=8)r<<=1,r|=a>>>n+d&1,r<<=1,r|=e>>>n+d&1;t[f+0]=c>>>0,t[f+1]=r>>>0},t.pc1=function(e,a,t,f){for(var c=0,r=0,d=7;d>=5;d--){for(var n=0;24>=n;n+=8)c<<=1,c|=a>>n+d&1;for(var n=0;24>=n;n+=8)c<<=1,c|=e>>n+d&1}for(var n=0;24>=n;n+=8)c<<=1,c|=a>>n+d&1;for(var d=1;3>=d;d++){for(var n=0;24>=n;n+=8)r<<=1,r|=a>>n+d&1;for(var n=0;24>=n;n+=8)r<<=1,r|=e>>n+d&1}for(var n=0;24>=n;n+=8)r<<=1,r|=e>>n+d&1;t[f+0]=c>>>0,t[f+1]=r>>>0},t.r28shl=function(e,a){return e<>>28-a};var f=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];t.pc2=function(e,a,t,c){for(var r=0,d=0,n=f.length>>>1,i=0;n>i;i++)r<<=1,r|=e>>>f[i]&1;for(var i=n;i>>f[i]&1;t[c+0]=r>>>0,t[c+1]=d>>>0},t.expand=function(e,a,t){var f=0,c=0;f=(1&e)<<5|e>>>27;for(var r=23;r>=15;r-=4)f<<=6,f|=e>>>r&63;for(var r=11;r>=3;r-=4)c|=e>>>r&63,c<<=6;c|=(31&e)<<1|e>>>31,a[t+0]=f>>>0,a[t+1]=c>>>0};var c=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];t.substitute=function(e,a){for(var t=0,f=0;4>f;f++){var r=e>>>18-6*f&63,d=c[64*f+r];t<<=4,t|=d}for(var f=0;4>f;f++){var r=a>>>18-6*f&63,d=c[256+64*f+r];t<<=4,t|=d}return t>>>0};var r=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];t.permute=function(e){for(var a=0,t=0;t>>r[t]&1;return a>>>0},t.padSplit=function(e,a,t){for(var f=e.toString(2);f.lengthr;r+=t)c.push(f.slice(r,r+t));return c.join(" ")}},{}],131:[function(e,a,t){function f(e,a){if(!e)throw new Error(a||"Assertion failed")}a.exports=f,f.equal=function(e,a,t){if(e!=a)throw new Error(t||"Assertion failed: "+e+" != "+a)}},{}],132:[function(e,a,t){(function(t){function f(e,a,f,r){t.isBuffer(e)||(e=new t(e,"binary")),a&&!t.isBuffer(a)&&(a=new t(a,"binary")), -f/=8,r=r||0;for(var d,n,i=0,b=0,o=new t(f),s=new t(r),u=0,h=[];;){if(u++>0&&h.push(d),h.push(e),a&&h.push(a),d=c(t.concat(h)),h=[],n=0,f>0)for(;;){if(0===f)break;if(n===d.length)break;o[i++]=d[n],f--,n++}if(r>0&&n!==d.length)for(;;){if(0===r)break;if(n===d.length)break;s[b++]=d[n],r--,n++}if(0===f&&0===r)break}for(n=0;nr;r++){var d=e.charCodeAt(r)-48;f<<=4,f|=d>=49&&54>=d?d-49+10:d>=17&&22>=d?d-17+10:15&d}return f}function n(e,a,t,f){for(var c=0,r=Math.min(e.length,t),d=a;r>d;d++){var n=e.charCodeAt(d)-48;c*=f,c+=n>=49?n-49+10:n>=17?n-17+10:n}return c}function i(e){for(var a=new Array(e.bitLength()),t=0;t>>c}return a}function b(e,a,t){t.negative=a.negative^e.negative;var f=e.length+a.length|0;t.length=f,f=f-1|0;var c=0|e.words[0],r=0|a.words[0],d=c*r,n=67108863&d,i=d/67108864|0;t.words[0]=n;for(var b=1;f>b;b++){for(var o=i>>>26,s=67108863&i,u=Math.min(b,a.length-1),h=Math.max(0,b-e.length+1);u>=h;h++){var l=b-h|0;c=0|e.words[l],r=0|a.words[h],d=c*r+s,o+=d/67108864|0,s=67108863&d}t.words[b]=0|s,i=0|o}return 0!==i?t.words[b]=0|i:t.length--,t.strip()}function o(e,a,t){t.negative=a.negative^e.negative,t.length=e.length+a.length;for(var f=0,c=0,r=0;r=b;b++){var o=r-b,s=0|e.words[o],u=0|a.words[b],h=s*u,l=67108863&h;d=d+(h/67108864|0)|0,l=l+n|0,n=67108863&l,d=d+(l>>>26)|0,c+=d>>>26,d&=67108863}t.words[r]=n,f=d,d=c}return 0!==f?t.words[r]=f:t.length--,t.strip()}function s(e,a,t){var f=new u;return f.mulp(e,a,t)}function u(e,a){this.x=e,this.y=a}function h(e,a){this.name=e,this.p=new r(a,16),this.n=this.p.bitLength(),this.k=new r(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function l(){h.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function p(){h.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function g(){h.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function m(){h.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function v(e){if("string"==typeof e){var a=r._prime(e);this.m=a.p,this.prime=a}else this.m=e,this.prime=null}function y(e){v.call(this,e),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new r(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof a?a.exports=r:t.BN=r,r.BN=r,r.wordSize=26;var w;try{w=e("buffer").Buffer}catch(_){}r.max=function(e,a){return e.cmp(a)>0?e:a},r.min=function(e,a){return e.cmp(a)<0?e:a},r.prototype._init=function(e,a,t){if("number"==typeof e)return this._initNumber(e,a,t);if("object"==typeof e)return this._initArray(e,a,t);"hex"===a&&(a=16),f(a===(0|a)&&a>=2&&36>=a),e=e.toString().replace(/\s+/g,"");var c=0;"-"===e[0]&&c++,16===a?this._parseHex(e,c):this._parseBase(e,a,c),"-"===e[0]&&(this.negative=1),this.strip(),"le"===t&&this._initArray(this.toArray(),a,t)},r.prototype._initNumber=function(e,a,t){0>e&&(this.negative=1,e=-e),67108864>e?(this.words=[67108863&e],this.length=1):4503599627370496>e?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(f(9007199254740992>e),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===t&&this._initArray(this.toArray(),a,t)},r.prototype._initArray=function(e,a,t){if(f("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var c=0;c=0;c-=3)d=e[c]|e[c-1]<<8|e[c-2]<<16,this.words[r]|=d<>>26-n&67108863,n+=24,n>=26&&(n-=26,r++);else if("le"===t)for(c=0,r=0;c>>26-n&67108863,n+=24,n>=26&&(n-=26,r++);return this.strip()},r.prototype._parseHex=function(e,a){this.length=Math.ceil((e.length-a)/6),this.words=new Array(this.length);for(var t=0;t=a;t-=6)c=d(e,t,t+6),this.words[f]|=c<>>26-r&4194303,r+=24,r>=26&&(r-=26,f++);t+6!==a&&(c=d(e,a,t+6),this.words[f]|=c<>>26-r&4194303),this.strip()},r.prototype._parseBase=function(e,a,t){this.words=[0],this.length=1;for(var f=0,c=1;67108863>=c;c*=a)f++;f--,c=c/a|0;for(var r=e.length-t,d=r%f,i=Math.min(r,r-d)+t,b=0,o=t;i>o;o+=f)b=n(e,o,o+f,a),this.imuln(c),this.words[0]+b<67108864?this.words[0]+=b:this._iaddn(b);if(0!==d){var s=1;for(b=n(e,o,e.length,a),o=0;d>o;o++)s*=a;this.imuln(s),this.words[0]+b<67108864?this.words[0]+=b:this._iaddn(b)}},r.prototype.copy=function(e){e.words=new Array(this.length);for(var a=0;a1&&0===this.words[this.length-1];)this.length--;return this._normSign()},r.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},r.prototype.inspect=function(){return(this.red?""};var S=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],A=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],I=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];r.prototype.toString=function(e,a){e=e||10,a=0|a||1;var t;if(16===e||"hex"===e){t="";for(var c=0,r=0,d=0;d>>24-c&16777215,t=0!==r||d!==this.length-1?S[6-i.length]+i+t:i+t,c+=2,c>=26&&(c-=26,d--)}for(0!==r&&(t=r.toString(16)+t);t.length%a!==0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}if(e===(0|e)&&e>=2&&36>=e){var b=A[e],o=I[e];t="";var s=this.clone();for(s.negative=0;!s.isZero();){var u=s.modn(o).toString(e);s=s.idivn(o),t=s.isZero()?u+t:S[b-u.length]+u+t}for(this.isZero()&&(t="0"+t);t.length%a!==0;)t="0"+t;return 0!==this.negative&&(t="-"+t),t}f(!1,"Base should be between 2 and 36")},r.prototype.toNumber=function(){var e,a=this.bitLength();return 26>=a?e=this.words[0]:52>=a?e=67108864*this.words[1]+this.words[0]:53===a?e=4503599627370496+67108864*this.words[1]+this.words[0]:f(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},r.prototype.toJSON=function(){return this.toString(16)},r.prototype.toBuffer=function(e,a){return f("undefined"!=typeof w),this.toArrayLike(w,e,a)},r.prototype.toArray=function(e,a){return this.toArrayLike(Array,e,a)},r.prototype.toArrayLike=function(e,a,t){var c=this.byteLength(),r=t||Math.max(1,c);f(r>=c,"byte array longer than desired length"),f(r>0,"Requested array length <= 0"),this.strip();var d,n,i="le"===a,b=new e(r),o=this.clone();if(i){for(n=0;!o.isZero();n++)d=o.andln(255),o.iushrn(8),b[n]=d;for(;r>n;n++)b[n]=0}else{for(n=0;r-c>n;n++)b[n]=0;for(n=0;!o.isZero();n++)d=o.andln(255),o.iushrn(8),b[r-n-1]=d}return b},Math.clz32?r.prototype._countBits=function(e){return 32-Math.clz32(e)}:r.prototype._countBits=function(e){var a=e,t=0;return a>=4096&&(t+=13,a>>>=13),a>=64&&(t+=7,a>>>=7),a>=8&&(t+=4,a>>>=4),a>=2&&(t+=2,a>>>=2),t+a},r.prototype._zeroBits=function(e){if(0===e)return 26;var a=e,t=0;return 0===(8191&a)&&(t+=13,a>>>=13),0===(127&a)&&(t+=7,a>>>=7),0===(15&a)&&(t+=4,a>>>=4),0===(3&a)&&(t+=2,a>>>=2),0===(1&a)&&t++,t},r.prototype.bitLength=function(){var e=this.words[this.length-1],a=this._countBits(e);return 26*(this.length-1)+a},r.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,a=0;ae.length?this.clone().ior(e):e.clone().ior(this)},r.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},r.prototype.iuand=function(e){var a;a=this.length>e.length?e:this;for(var t=0;te.length?this.clone().iand(e):e.clone().iand(this)},r.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},r.prototype.iuxor=function(e){var a,t;this.length>e.length?(a=this,t=e):(a=e,t=this);for(var f=0;fe.length?this.clone().ixor(e):e.clone().ixor(this)},r.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},r.prototype.inotn=function(e){f("number"==typeof e&&e>=0);for(var a=0|Math.ceil(e/26),t=e%26;this.length0&&a--;for(var c=0;a>c;c++)this.words[c]=67108863&~this.words[c];return t>0&&(this.words[c]=~this.words[c]&67108863>>26-t),this.strip()},r.prototype.notn=function(e){return this.clone().inotn(e)},r.prototype.setn=function(e,a){f("number"==typeof e&&e>=0);for(var t=e/26|0,c=e%26;this.length<=t;)this.words[this.length++]=0;return a?this.words[t]=this.words[t]|1<e.length?(t=this,f=e):(t=e,f=this);for(var c=0,r=0;r>>26;for(;0!==c&&r>>26;if(this.length=t.length,0!==c)this.words[this.length]=c,this.length++;else if(t!==this)for(;re.length?this.clone().iadd(e):e.clone().iadd(this)},r.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var a=this.iadd(e);return e.negative=1,a._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var t=this.cmp(e);if(0===t)return this.negative=0,this.length=1,this.words[0]=0,this;var f,c;t>0?(f=this,c=e):(f=e,c=this);for(var r=0,d=0;d>26,this.words[d]=67108863&a;for(;0!==r&&d>26,this.words[d]=67108863&a;if(0===r&&d>>13,h=0|d[1],l=8191&h,p=h>>>13,g=0|d[2],m=8191&g,v=g>>>13,y=0|d[3],w=8191&y,_=y>>>13,S=0|d[4],A=8191&S,I=S>>>13,E=0|d[5],k=8191&E,x=E>>>13,P=0|d[6],B=8191&P,M=P>>>13,O=0|d[7],R=8191&O,T=O>>>13,C=0|d[8],N=8191&C,j=C>>>13,L=0|d[9],D=8191&L,U=L>>>13,z=0|n[0],K=8191&z,H=z>>>13,F=0|n[1],q=8191&F,V=F>>>13,Y=0|n[2],G=8191&Y,W=Y>>>13,J=0|n[3],X=8191&J,Z=J>>>13,$=0|n[4],Q=8191&$,ee=$>>>13,ae=0|n[5],te=8191&ae,fe=ae>>>13,ce=0|n[6],re=8191&ce,de=ce>>>13,ne=0|n[7],ie=8191&ne,be=ne>>>13,oe=0|n[8],se=8191&oe,ue=oe>>>13,he=0|n[9],le=8191&he,pe=he>>>13;t.negative=e.negative^a.negative,t.length=19,f=Math.imul(s,K),c=Math.imul(s,H),c+=Math.imul(u,K),r=Math.imul(u,H);var ge=b+f+((8191&c)<<13);b=r+(c>>>13)+(ge>>>26),ge&=67108863,f=Math.imul(l,K),c=Math.imul(l,H),c+=Math.imul(p,K),r=Math.imul(p,H),f+=Math.imul(s,q),c+=Math.imul(s,V),c+=Math.imul(u,q),r+=Math.imul(u,V);var me=b+f+((8191&c)<<13);b=r+(c>>>13)+(me>>>26),me&=67108863,f=Math.imul(m,K),c=Math.imul(m,H),c+=Math.imul(v,K),r=Math.imul(v,H),f+=Math.imul(l,q),c+=Math.imul(l,V),c+=Math.imul(p,q),r+=Math.imul(p,V),f+=Math.imul(s,G),c+=Math.imul(s,W),c+=Math.imul(u,G),r+=Math.imul(u,W);var ve=b+f+((8191&c)<<13);b=r+(c>>>13)+(ve>>>26),ve&=67108863,f=Math.imul(w,K),c=Math.imul(w,H),c+=Math.imul(_,K),r=Math.imul(_,H),f+=Math.imul(m,q),c+=Math.imul(m,V),c+=Math.imul(v,q),r+=Math.imul(v,V),f+=Math.imul(l,G),c+=Math.imul(l,W),c+=Math.imul(p,G),r+=Math.imul(p,W),f+=Math.imul(s,X),c+=Math.imul(s,Z),c+=Math.imul(u,X),r+=Math.imul(u,Z);var ye=b+f+((8191&c)<<13);b=r+(c>>>13)+(ye>>>26),ye&=67108863,f=Math.imul(A,K),c=Math.imul(A,H),c+=Math.imul(I,K),r=Math.imul(I,H),f+=Math.imul(w,q),c+=Math.imul(w,V),c+=Math.imul(_,q),r+=Math.imul(_,V),f+=Math.imul(m,G),c+=Math.imul(m,W),c+=Math.imul(v,G),r+=Math.imul(v,W),f+=Math.imul(l,X),c+=Math.imul(l,Z),c+=Math.imul(p,X),r+=Math.imul(p,Z),f+=Math.imul(s,Q),c+=Math.imul(s,ee),c+=Math.imul(u,Q),r+=Math.imul(u,ee);var we=b+f+((8191&c)<<13);b=r+(c>>>13)+(we>>>26),we&=67108863,f=Math.imul(k,K),c=Math.imul(k,H),c+=Math.imul(x,K),r=Math.imul(x,H),f+=Math.imul(A,q),c+=Math.imul(A,V),c+=Math.imul(I,q),r+=Math.imul(I,V),f+=Math.imul(w,G),c+=Math.imul(w,W),c+=Math.imul(_,G),r+=Math.imul(_,W),f+=Math.imul(m,X),c+=Math.imul(m,Z),c+=Math.imul(v,X),r+=Math.imul(v,Z),f+=Math.imul(l,Q),c+=Math.imul(l,ee),c+=Math.imul(p,Q),r+=Math.imul(p,ee),f+=Math.imul(s,te),c+=Math.imul(s,fe),c+=Math.imul(u,te),r+=Math.imul(u,fe);var _e=b+f+((8191&c)<<13);b=r+(c>>>13)+(_e>>>26),_e&=67108863,f=Math.imul(B,K),c=Math.imul(B,H),c+=Math.imul(M,K),r=Math.imul(M,H),f+=Math.imul(k,q),c+=Math.imul(k,V),c+=Math.imul(x,q),r+=Math.imul(x,V),f+=Math.imul(A,G),c+=Math.imul(A,W),c+=Math.imul(I,G),r+=Math.imul(I,W),f+=Math.imul(w,X),c+=Math.imul(w,Z),c+=Math.imul(_,X),r+=Math.imul(_,Z),f+=Math.imul(m,Q),c+=Math.imul(m,ee),c+=Math.imul(v,Q),r+=Math.imul(v,ee),f+=Math.imul(l,te),c+=Math.imul(l,fe),c+=Math.imul(p,te),r+=Math.imul(p,fe),f+=Math.imul(s,re),c+=Math.imul(s,de),c+=Math.imul(u,re),r+=Math.imul(u,de);var Se=b+f+((8191&c)<<13);b=r+(c>>>13)+(Se>>>26),Se&=67108863,f=Math.imul(R,K),c=Math.imul(R,H),c+=Math.imul(T,K),r=Math.imul(T,H),f+=Math.imul(B,q),c+=Math.imul(B,V),c+=Math.imul(M,q),r+=Math.imul(M,V),f+=Math.imul(k,G),c+=Math.imul(k,W),c+=Math.imul(x,G),r+=Math.imul(x,W),f+=Math.imul(A,X),c+=Math.imul(A,Z),c+=Math.imul(I,X),r+=Math.imul(I,Z),f+=Math.imul(w,Q),c+=Math.imul(w,ee),c+=Math.imul(_,Q),r+=Math.imul(_,ee),f+=Math.imul(m,te),c+=Math.imul(m,fe),c+=Math.imul(v,te),r+=Math.imul(v,fe),f+=Math.imul(l,re),c+=Math.imul(l,de),c+=Math.imul(p,re),r+=Math.imul(p,de),f+=Math.imul(s,ie),c+=Math.imul(s,be),c+=Math.imul(u,ie),r+=Math.imul(u,be);var Ae=b+f+((8191&c)<<13);b=r+(c>>>13)+(Ae>>>26),Ae&=67108863,f=Math.imul(N,K),c=Math.imul(N,H),c+=Math.imul(j,K),r=Math.imul(j,H),f+=Math.imul(R,q),c+=Math.imul(R,V),c+=Math.imul(T,q),r+=Math.imul(T,V),f+=Math.imul(B,G),c+=Math.imul(B,W),c+=Math.imul(M,G),r+=Math.imul(M,W),f+=Math.imul(k,X),c+=Math.imul(k,Z),c+=Math.imul(x,X),r+=Math.imul(x,Z),f+=Math.imul(A,Q),c+=Math.imul(A,ee),c+=Math.imul(I,Q),r+=Math.imul(I,ee),f+=Math.imul(w,te),c+=Math.imul(w,fe),c+=Math.imul(_,te),r+=Math.imul(_,fe),f+=Math.imul(m,re),c+=Math.imul(m,de),c+=Math.imul(v,re),r+=Math.imul(v,de),f+=Math.imul(l,ie),c+=Math.imul(l,be),c+=Math.imul(p,ie),r+=Math.imul(p,be),f+=Math.imul(s,se),c+=Math.imul(s,ue),c+=Math.imul(u,se),r+=Math.imul(u,ue);var Ie=b+f+((8191&c)<<13);b=r+(c>>>13)+(Ie>>>26),Ie&=67108863,f=Math.imul(D,K),c=Math.imul(D,H),c+=Math.imul(U,K),r=Math.imul(U,H),f+=Math.imul(N,q),c+=Math.imul(N,V),c+=Math.imul(j,q),r+=Math.imul(j,V),f+=Math.imul(R,G),c+=Math.imul(R,W),c+=Math.imul(T,G),r+=Math.imul(T,W),f+=Math.imul(B,X),c+=Math.imul(B,Z),c+=Math.imul(M,X),r+=Math.imul(M,Z),f+=Math.imul(k,Q),c+=Math.imul(k,ee),c+=Math.imul(x,Q),r+=Math.imul(x,ee),f+=Math.imul(A,te),c+=Math.imul(A,fe),c+=Math.imul(I,te),r+=Math.imul(I,fe),f+=Math.imul(w,re),c+=Math.imul(w,de),c+=Math.imul(_,re),r+=Math.imul(_,de),f+=Math.imul(m,ie),c+=Math.imul(m,be),c+=Math.imul(v,ie),r+=Math.imul(v,be),f+=Math.imul(l,se),c+=Math.imul(l,ue),c+=Math.imul(p,se),r+=Math.imul(p,ue),f+=Math.imul(s,le),c+=Math.imul(s,pe),c+=Math.imul(u,le),r+=Math.imul(u,pe);var Ee=b+f+((8191&c)<<13);b=r+(c>>>13)+(Ee>>>26),Ee&=67108863,f=Math.imul(D,q),c=Math.imul(D,V),c+=Math.imul(U,q),r=Math.imul(U,V),f+=Math.imul(N,G),c+=Math.imul(N,W),c+=Math.imul(j,G),r+=Math.imul(j,W),f+=Math.imul(R,X),c+=Math.imul(R,Z),c+=Math.imul(T,X),r+=Math.imul(T,Z),f+=Math.imul(B,Q),c+=Math.imul(B,ee),c+=Math.imul(M,Q),r+=Math.imul(M,ee),f+=Math.imul(k,te),c+=Math.imul(k,fe),c+=Math.imul(x,te),r+=Math.imul(x,fe),f+=Math.imul(A,re),c+=Math.imul(A,de),c+=Math.imul(I,re),r+=Math.imul(I,de),f+=Math.imul(w,ie),c+=Math.imul(w,be),c+=Math.imul(_,ie),r+=Math.imul(_,be),f+=Math.imul(m,se),c+=Math.imul(m,ue),c+=Math.imul(v,se),r+=Math.imul(v,ue),f+=Math.imul(l,le),c+=Math.imul(l,pe),c+=Math.imul(p,le),r+=Math.imul(p,pe);var ke=b+f+((8191&c)<<13);b=r+(c>>>13)+(ke>>>26),ke&=67108863,f=Math.imul(D,G),c=Math.imul(D,W),c+=Math.imul(U,G),r=Math.imul(U,W),f+=Math.imul(N,X),c+=Math.imul(N,Z),c+=Math.imul(j,X),r+=Math.imul(j,Z),f+=Math.imul(R,Q),c+=Math.imul(R,ee),c+=Math.imul(T,Q),r+=Math.imul(T,ee),f+=Math.imul(B,te),c+=Math.imul(B,fe),c+=Math.imul(M,te),r+=Math.imul(M,fe),f+=Math.imul(k,re),c+=Math.imul(k,de),c+=Math.imul(x,re),r+=Math.imul(x,de),f+=Math.imul(A,ie),c+=Math.imul(A,be),c+=Math.imul(I,ie),r+=Math.imul(I,be),f+=Math.imul(w,se),c+=Math.imul(w,ue),c+=Math.imul(_,se),r+=Math.imul(_,ue),f+=Math.imul(m,le),c+=Math.imul(m,pe),c+=Math.imul(v,le),r+=Math.imul(v,pe);var xe=b+f+((8191&c)<<13);b=r+(c>>>13)+(xe>>>26),xe&=67108863,f=Math.imul(D,X),c=Math.imul(D,Z),c+=Math.imul(U,X),r=Math.imul(U,Z),f+=Math.imul(N,Q),c+=Math.imul(N,ee),c+=Math.imul(j,Q),r+=Math.imul(j,ee),f+=Math.imul(R,te),c+=Math.imul(R,fe),c+=Math.imul(T,te),r+=Math.imul(T,fe),f+=Math.imul(B,re),c+=Math.imul(B,de),c+=Math.imul(M,re),r+=Math.imul(M,de),f+=Math.imul(k,ie),c+=Math.imul(k,be),c+=Math.imul(x,ie),r+=Math.imul(x,be),f+=Math.imul(A,se),c+=Math.imul(A,ue),c+=Math.imul(I,se),r+=Math.imul(I,ue),f+=Math.imul(w,le),c+=Math.imul(w,pe),c+=Math.imul(_,le),r+=Math.imul(_,pe);var Pe=b+f+((8191&c)<<13);b=r+(c>>>13)+(Pe>>>26),Pe&=67108863,f=Math.imul(D,Q),c=Math.imul(D,ee),c+=Math.imul(U,Q),r=Math.imul(U,ee),f+=Math.imul(N,te),c+=Math.imul(N,fe),c+=Math.imul(j,te),r+=Math.imul(j,fe),f+=Math.imul(R,re),c+=Math.imul(R,de),c+=Math.imul(T,re),r+=Math.imul(T,de),f+=Math.imul(B,ie),c+=Math.imul(B,be),c+=Math.imul(M,ie),r+=Math.imul(M,be),f+=Math.imul(k,se),c+=Math.imul(k,ue),c+=Math.imul(x,se),r+=Math.imul(x,ue),f+=Math.imul(A,le),c+=Math.imul(A,pe),c+=Math.imul(I,le),r+=Math.imul(I,pe);var Be=b+f+((8191&c)<<13);b=r+(c>>>13)+(Be>>>26),Be&=67108863,f=Math.imul(D,te),c=Math.imul(D,fe),c+=Math.imul(U,te),r=Math.imul(U,fe),f+=Math.imul(N,re),c+=Math.imul(N,de),c+=Math.imul(j,re),r+=Math.imul(j,de),f+=Math.imul(R,ie),c+=Math.imul(R,be),c+=Math.imul(T,ie),r+=Math.imul(T,be),f+=Math.imul(B,se),c+=Math.imul(B,ue),c+=Math.imul(M,se),r+=Math.imul(M,ue),f+=Math.imul(k,le),c+=Math.imul(k,pe),c+=Math.imul(x,le),r+=Math.imul(x,pe);var Me=b+f+((8191&c)<<13);b=r+(c>>>13)+(Me>>>26),Me&=67108863,f=Math.imul(D,re),c=Math.imul(D,de),c+=Math.imul(U,re),r=Math.imul(U,de),f+=Math.imul(N,ie),c+=Math.imul(N,be),c+=Math.imul(j,ie),r+=Math.imul(j,be),f+=Math.imul(R,se),c+=Math.imul(R,ue),c+=Math.imul(T,se),r+=Math.imul(T,ue),f+=Math.imul(B,le),c+=Math.imul(B,pe),c+=Math.imul(M,le),r+=Math.imul(M,pe);var Oe=b+f+((8191&c)<<13);b=r+(c>>>13)+(Oe>>>26),Oe&=67108863,f=Math.imul(D,ie),c=Math.imul(D,be),c+=Math.imul(U,ie),r=Math.imul(U,be),f+=Math.imul(N,se),c+=Math.imul(N,ue),c+=Math.imul(j,se),r+=Math.imul(j,ue),f+=Math.imul(R,le),c+=Math.imul(R,pe),c+=Math.imul(T,le),r+=Math.imul(T,pe);var Re=b+f+((8191&c)<<13);b=r+(c>>>13)+(Re>>>26),Re&=67108863,f=Math.imul(D,se),c=Math.imul(D,ue),c+=Math.imul(U,se),r=Math.imul(U,ue),f+=Math.imul(N,le),c+=Math.imul(N,pe),c+=Math.imul(j,le),r+=Math.imul(j,pe);var Te=b+f+((8191&c)<<13);b=r+(c>>>13)+(Te>>>26),Te&=67108863,f=Math.imul(D,le),c=Math.imul(D,pe),c+=Math.imul(U,le),r=Math.imul(U,pe);var Ce=b+f+((8191&c)<<13);return b=r+(c>>>13)+(Ce>>>26),Ce&=67108863,i[0]=ge,i[1]=me,i[2]=ve,i[3]=ye,i[4]=we,i[5]=_e,i[6]=Se,i[7]=Ae,i[8]=Ie,i[9]=Ee,i[10]=ke,i[11]=xe,i[12]=Pe,i[13]=Be,i[14]=Me,i[15]=Oe,i[16]=Re,i[17]=Te,i[18]=Ce,0!==b&&(i[19]=b,t.length++),t};Math.imul||(E=b),r.prototype.mulTo=function(e,a){var t,f=this.length+e.length;return t=10===this.length&&10===e.length?E(this,e,a):63>f?b(this,e,a):1024>f?o(this,e,a):s(this,e,a)},u.prototype.makeRBT=function(e){for(var a=new Array(e),t=r.prototype._countBits(e)-1,f=0;e>f;f++)a[f]=this.revBin(f,t,e);return a},u.prototype.revBin=function(e,a,t){if(0===e||e===t-1)return e;for(var f=0,c=0;a>c;c++)f|=(1&e)<>=1;return f},u.prototype.permute=function(e,a,t,f,c,r){for(var d=0;r>d;d++)f[d]=a[e[d]],c[d]=t[e[d]]},u.prototype.transform=function(e,a,t,f,c,r){this.permute(r,e,a,t,f,c);for(var d=1;c>d;d<<=1)for(var n=d<<1,i=Math.cos(2*Math.PI/n),b=Math.sin(2*Math.PI/n),o=0;c>o;o+=n)for(var s=i,u=b,h=0;d>h;h++){var l=t[o+h],p=f[o+h],g=t[o+h+d],m=f[o+h+d],v=s*g-u*m;m=s*m+u*g,g=v,t[o+h]=l+g,f[o+h]=p+m,t[o+h+d]=l-g,f[o+h+d]=p-m,h!==n&&(v=i*s-b*u,u=i*u+b*s,s=v)}},u.prototype.guessLen13b=function(e,a){var t=1|Math.max(a,e),f=1&t,c=0;for(t=t/2|0;t;t>>>=1)c++;return 1<=t))for(var f=0;t/2>f;f++){var c=e[f];e[f]=e[t-f-1],e[t-f-1]=c,c=a[f],a[f]=-a[t-f-1],a[t-f-1]=-c}},u.prototype.normalize13b=function(e,a){for(var t=0,f=0;a/2>f;f++){var c=8192*Math.round(e[2*f+1]/a)+Math.round(e[2*f]/a)+t;e[f]=67108863&c,t=67108864>c?0:c/67108864|0}return e},u.prototype.convert13b=function(e,a,t,c){for(var r=0,d=0;a>d;d++)r+=0|e[d],t[2*d]=8191&r,r>>>=13,t[2*d+1]=8191&r,r>>>=13;for(d=2*a;c>d;++d)t[d]=0;f(0===r),f(0===(-8192&r))},u.prototype.stub=function(e){for(var a=new Array(e),t=0;e>t;t++)a[t]=0;return a},u.prototype.mulp=function(e,a,t){var f=2*this.guessLen13b(e.length,a.length),c=this.makeRBT(f),r=this.stub(f),d=new Array(f),n=new Array(f),i=new Array(f),b=new Array(f),o=new Array(f),s=new Array(f),u=t.words;u.length=f,this.convert13b(e.words,e.length,d,f),this.convert13b(a.words,a.length,b,f),this.transform(d,r,n,i,f,c),this.transform(b,r,o,s,f,c);for(var h=0;f>h;h++){var l=n[h]*o[h]-i[h]*s[h];i[h]=n[h]*s[h]+i[h]*o[h],n[h]=l}return this.conjugate(n,i,f),this.transform(n,i,u,r,f,c),this.conjugate(u,r,f),this.normalize13b(u,f),t.negative=e.negative^a.negative,t.length=e.length+a.length,t.strip()},r.prototype.mul=function(e){var a=new r(null);return a.words=new Array(this.length+e.length),this.mulTo(e,a)},r.prototype.mulf=function(e){var a=new r(null);return a.words=new Array(this.length+e.length),s(this,e,a)},r.prototype.imul=function(e){return this.clone().mulTo(e,this)},r.prototype.imuln=function(e){f("number"==typeof e),f(67108864>e);for(var a=0,t=0;t>=26,a+=c/67108864|0,a+=r>>>26,this.words[t]=67108863&r}return 0!==a&&(this.words[t]=a,this.length++),this},r.prototype.muln=function(e){return this.clone().imuln(e)},r.prototype.sqr=function(){return this.mul(this)},r.prototype.isqr=function(){return this.imul(this.clone())},r.prototype.pow=function(e){var a=i(e);if(0===a.length)return new r(1);for(var t=this,f=0;f=0);var a,t=e%26,c=(e-t)/26,r=67108863>>>26-t<<26-t;if(0!==t){var d=0;for(a=0;a>>26-t}d&&(this.words[a]=d,this.length++)}if(0!==c){for(a=this.length-1;a>=0;a--)this.words[a+c]=this.words[a];for(a=0;c>a;a++)this.words[a]=0;this.length+=c}return this.strip()},r.prototype.ishln=function(e){return f(0===this.negative),this.iushln(e)},r.prototype.iushrn=function(e,a,t){f("number"==typeof e&&e>=0);var c;c=a?(a-a%26)/26:0;var r=e%26,d=Math.min((e-r)/26,this.length),n=67108863^67108863>>>r<b;b++)i.words[b]=this.words[b];i.length=d}if(0===d);else if(this.length>d)for(this.length-=d,b=0;b=0&&(0!==o||b>=c);b--){var s=0|this.words[b];this.words[b]=o<<26-r|s>>>r,o=s&n}return i&&0!==o&&(i.words[i.length++]=o),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},r.prototype.ishrn=function(e,a,t){return f(0===this.negative),this.iushrn(e,a,t)},r.prototype.shln=function(e){return this.clone().ishln(e)},r.prototype.ushln=function(e){return this.clone().iushln(e)},r.prototype.shrn=function(e){return this.clone().ishrn(e)},r.prototype.ushrn=function(e){return this.clone().iushrn(e)},r.prototype.testn=function(e){f("number"==typeof e&&e>=0);var a=e%26,t=(e-a)/26,c=1<=0);var a=e%26,t=(e-a)/26;if(f(0===this.negative,"imaskn works only with positive numbers"),0!==a&&t++,this.length=Math.min(t,this.length),0!==a){var c=67108863^67108863>>>a<e),0>e?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])=67108864;a++)this.words[a]-=67108864,a===this.length-1?this.words[a+1]=1:this.words[a+1]++;return this.length=Math.max(this.length,a+1),this},r.prototype.isubn=function(e){if(f("number"==typeof e),f(67108864>e),0>e)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var a=0;a>26)-(b/67108864|0),this.words[c+t]=67108863&n}for(;c>26,this.words[c+t]=67108863&n;if(0===i)return this.strip();for(f(-1===i),i=0,c=0;c>26,this.words[c]=67108863&n;return this.negative=1,this.strip()},r.prototype._wordDiv=function(e,a){var t=this.length-e.length,f=this.clone(),c=e,d=0|c.words[c.length-1],n=this._countBits(d);t=26-n,0!==t&&(c=c.ushln(t),f.iushln(t),d=0|c.words[c.length-1]);var i,b=f.length-c.length;if("mod"!==a){i=new r(null),i.length=b+1,i.words=new Array(i.length);for(var o=0;o=0;u--){var h=67108864*(0|f.words[c.length+u])+(0|f.words[c.length+u-1]);for(h=Math.min(h/d|0,67108863),f._ishlnsubmul(c,h,u);0!==f.negative;)h--,f.negative=0,f._ishlnsubmul(c,1,u),f.isZero()||(f.negative^=1);i&&(i.words[u]=h)}return i&&i.strip(),f.strip(),"div"!==a&&0!==t&&f.iushrn(t),{div:i||null,mod:f}},r.prototype.divmod=function(e,a,t){if(f(!e.isZero()),this.isZero())return{div:new r(0),mod:new r(0)};var c,d,n;return 0!==this.negative&&0===e.negative?(n=this.neg().divmod(e,a),"mod"!==a&&(c=n.div.neg()),"div"!==a&&(d=n.mod.neg(),t&&0!==d.negative&&d.iadd(e)),{div:c,mod:d}):0===this.negative&&0!==e.negative?(n=this.divmod(e.neg(),a),"mod"!==a&&(c=n.div.neg()),{div:c,mod:n.mod}):0!==(this.negative&e.negative)?(n=this.neg().divmod(e.neg(),a),"div"!==a&&(d=n.mod.neg(),t&&0!==d.negative&&d.isub(e)),{div:n.div,mod:d}):e.length>this.length||this.cmp(e)<0?{div:new r(0),mod:this}:1===e.length?"div"===a?{div:this.divn(e.words[0]),mod:null}:"mod"===a?{div:null,mod:new r(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new r(this.modn(e.words[0]))}:this._wordDiv(e,a)},r.prototype.div=function(e){return this.divmod(e,"div",!1).div},r.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},r.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},r.prototype.divRound=function(e){var a=this.divmod(e);if(a.mod.isZero())return a.div;var t=0!==a.div.negative?a.mod.isub(e):a.mod,f=e.ushrn(1),c=e.andln(1),r=t.cmp(f);return 0>r||1===c&&0===r?a.div:0!==a.div.negative?a.div.isubn(1):a.div.iaddn(1)},r.prototype.modn=function(e){f(67108863>=e);for(var a=(1<<26)%e,t=0,c=this.length-1;c>=0;c--)t=(a*t+(0|this.words[c]))%e;return t},r.prototype.idivn=function(e){f(67108863>=e);for(var a=0,t=this.length-1;t>=0;t--){var c=(0|this.words[t])+67108864*a;this.words[t]=c/e|0,a=c%e}return this.strip()},r.prototype.divn=function(e){return this.clone().idivn(e)},r.prototype.egcd=function(e){f(0===e.negative),f(!e.isZero());var a=this,t=e.clone();a=0!==a.negative?a.umod(e):a.clone();for(var c=new r(1),d=new r(0),n=new r(0),i=new r(1),b=0;a.isEven()&&t.isEven();)a.iushrn(1),t.iushrn(1),++b;for(var o=t.clone(),s=a.clone();!a.isZero();){for(var u=0,h=1;0===(a.words[0]&h)&&26>u;++u,h<<=1);if(u>0)for(a.iushrn(u);u-- >0;)(c.isOdd()||d.isOdd())&&(c.iadd(o),d.isub(s)),c.iushrn(1),d.iushrn(1);for(var l=0,p=1;0===(t.words[0]&p)&&26>l;++l,p<<=1);if(l>0)for(t.iushrn(l);l-- >0;)(n.isOdd()||i.isOdd())&&(n.iadd(o),i.isub(s)),n.iushrn(1),i.iushrn(1);a.cmp(t)>=0?(a.isub(t),c.isub(n),d.isub(i)):(t.isub(a),n.isub(c),i.isub(d))}return{a:n,b:i,gcd:t.iushln(b)}},r.prototype._invmp=function(e){f(0===e.negative),f(!e.isZero());var a=this,t=e.clone();a=0!==a.negative?a.umod(e):a.clone();for(var c=new r(1),d=new r(0),n=t.clone();a.cmpn(1)>0&&t.cmpn(1)>0;){for(var i=0,b=1;0===(a.words[0]&b)&&26>i;++i,b<<=1);if(i>0)for(a.iushrn(i);i-- >0;)c.isOdd()&&c.iadd(n),c.iushrn(1);for(var o=0,s=1;0===(t.words[0]&s)&&26>o;++o,s<<=1);if(o>0)for(t.iushrn(o);o-- >0;)d.isOdd()&&d.iadd(n),d.iushrn(1);a.cmp(t)>=0?(a.isub(t),c.isub(d)):(t.isub(a),d.isub(c))}var u;return u=0===a.cmpn(1)?c:d,u.cmpn(0)<0&&u.iadd(e),u},r.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var a=this.clone(),t=e.clone();a.negative=0,t.negative=0;for(var f=0;a.isEven()&&t.isEven();f++)a.iushrn(1),t.iushrn(1);for(;;){for(;a.isEven();)a.iushrn(1);for(;t.isEven();)t.iushrn(1);var c=a.cmp(t);if(0>c){var r=a;a=t,t=r}else if(0===c||0===t.cmpn(1))break;a.isub(t)}return t.iushln(f)},r.prototype.invm=function(e){return this.egcd(e).a.umod(e)},r.prototype.isEven=function(){return 0===(1&this.words[0])},r.prototype.isOdd=function(){return 1===(1&this.words[0])},r.prototype.andln=function(e){return this.words[0]&e},r.prototype.bincn=function(e){f("number"==typeof e);var a=e%26,t=(e-a)/26,c=1<r;r++)this.words[r]=0;return this.words[t]|=c,this.length=t+1,this}var d=c;for(r=t;0!==d&&r>>26,n&=67108863,this.words[r]=n}return 0!==d&&(this.words[r]=d,this.length++),this},r.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},r.prototype.cmpn=function(e){var a=0>e;if(0!==this.negative&&!a)return-1;if(0===this.negative&&a)return 1;this.strip();var t;if(this.length>1)t=1;else{a&&(e=-e),f(67108863>=e,"Number is too big");var c=0|this.words[0];t=c===e?0:e>c?-1:1}return 0!==this.negative&&(t=-t),t},r.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var a=this.ucmp(e);return 0!==this.negative?-a:a},r.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length=0;t--){var f=0|this.words[t],c=0|e.words[t];if(f!==c){c>f?a=-1:f>c&&(a=1);break}}return a},r.prototype.gtn=function(e){return 1===this.cmpn(e)},r.prototype.gt=function(e){return 1===this.cmp(e)},r.prototype.gten=function(e){return this.cmpn(e)>=0},r.prototype.gte=function(e){return this.cmp(e)>=0},r.prototype.ltn=function(e){return-1===this.cmpn(e)},r.prototype.lt=function(e){return-1===this.cmp(e)},r.prototype.lten=function(e){return this.cmpn(e)<=0},r.prototype.lte=function(e){return this.cmp(e)<=0},r.prototype.eqn=function(e){return 0===this.cmpn(e)},r.prototype.eq=function(e){return 0===this.cmp(e)},r.red=function(e){return new v(e)},r.prototype.toRed=function(e){return f(!this.red,"Already a number in reduction context"),f(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},r.prototype.fromRed=function(){return f(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},r.prototype._forceRed=function(e){return this.red=e,this},r.prototype.forceRed=function(e){return f(!this.red,"Already a number in reduction context"),this._forceRed(e)},r.prototype.redAdd=function(e){return f(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},r.prototype.redIAdd=function(e){return f(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},r.prototype.redSub=function(e){return f(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},r.prototype.redISub=function(e){return f(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},r.prototype.redShl=function(e){return f(this.red,"redShl works only with red numbers"),this.red.ushl(this,e)},r.prototype.redMul=function(e){return f(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},r.prototype.redIMul=function(e){return f(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},r.prototype.redSqr=function(){return f(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},r.prototype.redISqr=function(){return f(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},r.prototype.redSqrt=function(){return f(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},r.prototype.redInvm=function(){return f(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},r.prototype.redNeg=function(){return f(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},r.prototype.redPow=function(e){return f(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var k={k256:null,p224:null,p192:null,p25519:null};h.prototype._tmp=function(){var e=new r(null);return e.words=new Array(Math.ceil(this.n/13)),e},h.prototype.ireduce=function(e){var a,t=e;do this.split(t,this.tmp),t=this.imulK(t),t=t.iadd(this.tmp),a=t.bitLength();while(a>this.n);var f=a0?t.isub(this.p):t.strip(),t},h.prototype.split=function(e,a){e.iushrn(this.n,0,a)},h.prototype.imulK=function(e){return e.imul(this.k)},c(l,h),l.prototype.split=function(e,a){for(var t=4194303,f=Math.min(e.length,9),c=0;f>c;c++)a.words[c]=e.words[c];if(a.length=f,e.length<=9)return e.words[0]=0,void(e.length=1);var r=e.words[9];for(a.words[a.length++]=r&t,c=10;c>>22,r=d}r>>>=22,e.words[c-10]=r,0===r&&e.length>10?e.length-=10:e.length-=9},l.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var a=0,t=0;t>>=26,e.words[t]=c,a=f}return 0!==a&&(e.words[e.length++]=a),e},r._prime=function x(e){if(k[e])return k[e];var x;if("k256"===e)x=new l;else if("p224"===e)x=new p;else if("p192"===e)x=new g;else{if("p25519"!==e)throw new Error("Unknown prime "+e);x=new m}return k[e]=x,x},v.prototype._verify1=function(e){f(0===e.negative,"red works only with positives"),f(e.red,"red works only with red numbers")},v.prototype._verify2=function(e,a){f(0===(e.negative|a.negative),"red works only with positives"),f(e.red&&e.red===a.red,"red works only with red numbers")},v.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},v.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},v.prototype.add=function(e,a){this._verify2(e,a);var t=e.add(a);return t.cmp(this.m)>=0&&t.isub(this.m),t._forceRed(this)},v.prototype.iadd=function(e,a){this._verify2(e,a);var t=e.iadd(a);return t.cmp(this.m)>=0&&t.isub(this.m),t},v.prototype.sub=function(e,a){this._verify2(e,a);var t=e.sub(a);return t.cmpn(0)<0&&t.iadd(this.m),t._forceRed(this)},v.prototype.isub=function(e,a){this._verify2(e,a);var t=e.isub(a);return t.cmpn(0)<0&&t.iadd(this.m),t},v.prototype.shl=function(e,a){return this._verify1(e),this.imod(e.ushln(a))},v.prototype.imul=function(e,a){return this._verify2(e,a),this.imod(e.imul(a))},v.prototype.mul=function(e,a){return this._verify2(e,a),this.imod(e.mul(a))},v.prototype.isqr=function(e){return this.imul(e,e.clone())},v.prototype.sqr=function(e){return this.mul(e,e)},v.prototype.sqrt=function(e){if(e.isZero())return e.clone();var a=this.m.andln(3);if(f(a%2===1),3===a){var t=this.m.add(new r(1)).iushrn(2);return this.pow(e,t)}for(var c=this.m.subn(1),d=0;!c.isZero()&&0===c.andln(1);)d++,c.iushrn(1);f(!c.isZero());var n=new r(1).toRed(this),i=n.redNeg(),b=this.m.subn(1).iushrn(1),o=this.m.bitLength();for(o=new r(2*o*o).toRed(this);0!==this.pow(o,b).cmp(i);)o.redIAdd(i);for(var s=this.pow(o,c),u=this.pow(e,c.addn(1).iushrn(1)),h=this.pow(e,c),l=d;0!==h.cmp(n);){for(var p=h,g=0;0!==p.cmp(n);g++)p=p.redSqr();f(l>g);var m=this.pow(s,new r(1).iushln(l-g-1));u=u.redMul(m),s=m.redSqr(),h=h.redMul(s),l=g}return u},v.prototype.invm=function(e){var a=e._invmp(this.m);return 0!==a.negative?(a.negative=0,this.imod(a).redNeg()):this.imod(a)},v.prototype.pow=function(e,a){if(a.isZero())return new r(1);if(0===a.cmpn(1))return e.clone();var t=4,f=new Array(1<=0;c--){for(var o=a.words[c],s=b-1;s>=0;s--){var u=o>>s&1;d!==f[0]&&(d=this.sqr(d)),0!==u||0!==n?(n<<=1,n|=u,i++,(i===t||0===c&&0===s)&&(d=this.mul(d,f[n]),i=0,n=0)):i=0}b=26}return d},v.prototype.convertTo=function(e){var a=e.umod(this.m);return a===e?a.clone():a},v.prototype.convertFrom=function(e){var a=e.clone();return a.red=null,a},r.mont=function(e){return new y(e)},c(y,v),y.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},y.prototype.convertFrom=function(e){var a=this.imod(e.mul(this.rinv));return a.red=null,a},y.prototype.imul=function(e,a){if(e.isZero()||a.isZero())return e.words[0]=0,e.length=1,e;var t=e.imul(a),f=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),c=t.isub(f).iushrn(this.shift),r=c;return c.cmp(this.m)>=0?r=c.isub(this.m):c.cmpn(0)<0&&(r=c.iadd(this.m)),r._forceRed(this)},y.prototype.mul=function(e,a){if(e.isZero()||a.isZero())return new r(0)._forceRed(this);var t=e.mul(a),f=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),c=t.isub(f).iushrn(this.shift),d=c;return c.cmp(this.m)>=0?d=c.isub(this.m):c.cmpn(0)<0&&(d=c.iadd(this.m)),d._forceRed(this)},y.prototype.invm=function(e){var a=this.imod(e._invmp(this.m).mul(this.r2));return a._forceRed(this)}}("undefined"==typeof a||a,this)},{}],137:[function(e,a,t){(function(t){function f(e){var a=r(e),t=a.toRed(d.mont(e.modulus)).redPow(new d(e.publicExponent)).fromRed();return{blinder:t,unblinder:a.invm(e.modulus)}}function c(e,a){var c=f(a),r=a.modulus.byteLength(),n=(d.mont(a.modulus),new d(e).mul(c.blinder).umod(a.modulus)),i=n.toRed(d.mont(a.prime1)),b=n.toRed(d.mont(a.prime2)),o=a.coefficient,s=a.prime1,u=a.prime2,h=i.redPow(a.exponent1),l=b.redPow(a.exponent2);h=h.fromRed(),l=l.fromRed();var p=h.isub(l).imul(o).umod(s);return p.imul(u),l.iadd(p),new t(l.imul(c.unblinder).umod(a.modulus).toArray(!1,r))}function r(e){for(var a=e.modulus.byteLength(),t=new d(n(a));t.cmp(e.modulus)>=0||!t.umod(e.prime1)||!t.umod(e.prime2);)t=new d(n(a));return t}var d=e("bn.js"),n=e("randombytes");a.exports=c,c.getr=r}).call(this,e("buffer").Buffer)},{"bn.js":136,buffer:99,randombytes:294}],138:[function(e,a,t){"use strict";var f=t;f.version=e("../package.json").version,f.utils=e("./elliptic/utils"),f.rand=e("brorand"),f.hmacDRBG=e("./elliptic/hmac-drbg"),f.curve=e("./elliptic/curve"),f.curves=e("./elliptic/curves"),f.ec=e("./elliptic/ec"),f.eddsa=e("./elliptic/eddsa")},{"../package.json":161,"./elliptic/curve":141,"./elliptic/curves":144,"./elliptic/ec":145,"./elliptic/eddsa":148,"./elliptic/hmac-drbg":151,"./elliptic/utils":153,brorand:154}],139:[function(e,a,t){"use strict";function f(e,a){this.type=e,this.p=new r(a.p,16),this.red=a.prime?r.red(a.prime):r.mont(this.p),this.zero=new r(0).toRed(this.red),this.one=new r(1).toRed(this.red),this.two=new r(2).toRed(this.red),this.n=a.n&&new r(a.n,16),this.g=a.g&&this.pointFromJSON(a.g,a.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4)}function c(e,a){this.curve=e,this.type=a,this.precomputed=null}var r=e("bn.js"),d=e("../../elliptic"),n=d.utils,i=n.getNAF,b=n.getJSF,o=n.assert;a.exports=f,f.prototype.point=function(){throw new Error("Not implemented")},f.prototype.validate=function(){throw new Error("Not implemented")},f.prototype._fixedNafMul=function(e,a){o(e.precomputed);var t=e._getDoubles(),f=i(a,1),c=(1<=d;a--)n=(n<<1)+f[a];r.push(n)}for(var b=this.jpoint(null,null,null),s=this.jpoint(null,null,null),u=c;u>0;u--){for(var d=0;d=0;n--){for(var a=0;n>=0&&0===r[n];n--)a++;if(n>=0&&a++,d=d.dblp(a),0>n)break;var b=r[n];o(0!==b),d="affine"===e.type?b>0?d.mixedAdd(c[b-1>>1]):d.mixedAdd(c[-b-1>>1].neg()):b>0?d.add(c[b-1>>1]):d.add(c[-b-1>>1].neg())}return"affine"===e.type?d.toP():d},f.prototype._wnafMulAdd=function(e,a,t,f){for(var c=this._wnafT1,r=this._wnafT2,d=this._wnafT3,n=0,o=0;f>o;o++){var s=a[o],u=s._getNAFPoints(e);c[o]=u.wnd,r[o]=u.points}for(var o=f-1;o>=1;o-=2){var h=o-1,l=o;if(1===c[h]&&1===c[l]){var p=[a[h],null,null,a[l]];0===a[h].y.cmp(a[l].y)?(p[1]=a[h].add(a[l]),p[2]=a[h].toJ().mixedAdd(a[l].neg())):0===a[h].y.cmp(a[l].y.redNeg())?(p[1]=a[h].toJ().mixedAdd(a[l]),p[2]=a[h].add(a[l].neg())):(p[1]=a[h].toJ().mixedAdd(a[l]),p[2]=a[h].toJ().mixedAdd(a[l].neg()));var g=[-3,-1,-5,-7,0,7,5,1,3],m=b(t[h],t[l]);n=Math.max(m[0].length,n),d[h]=new Array(n),d[l]=new Array(n);for(var v=0;n>v;v++){var y=0|m[0][v],w=0|m[1][v];d[h][v]=g[3*(y+1)+(w+1)],d[l][v]=0,r[h]=p}}else d[h]=i(t[h],c[h]),d[l]=i(t[l],c[l]),n=Math.max(d[h].length,n),n=Math.max(d[l].length,n)}for(var _=this.jpoint(null,null,null),S=this._wnafT4,o=n;o>=0;o--){for(var A=0;o>=0;){for(var I=!0,v=0;f>v;v++)S[v]=0|d[v][o],0!==S[v]&&(I=!1);if(!I)break;A++,o--}if(o>=0&&A++,_=_.dblp(A),0>o)break;for(var v=0;f>v;v++){var s,E=S[v];0!==E&&(E>0?s=r[v][E-1>>1]:0>E&&(s=r[v][-E-1>>1].neg()),_="affine"===s.type?_.mixedAdd(s):_.add(s))}}for(var o=0;f>o;o++)r[o]=null;return _.toP()},f.BasePoint=c,c.prototype.eq=function(){throw new Error("Not implemented")},c.prototype.validate=function(){return this.curve.validate(this)},f.prototype.decodePoint=function(e,a){e=n.toArray(e,a);var t=this.p.byteLength();if(4===e[0]&&e.length-1===2*t)return this.point(e.slice(1,1+t),e.slice(1+t,1+2*t));if((2===e[0]||3===e[0])&&e.length-1===t)return this.pointFromX(e.slice(1,1+t),3===e[0]);throw new Error("Unknown point format")},c.prototype.encodeCompressed=function(e){return this.encode(e,!0)},c.prototype._encode=function(e){var a=this.curve.p.byteLength(),t=this.getX().toArray("be",a);return e?[this.getY().isEven()?2:3].concat(t):[4].concat(t,this.getY().toArray("be",a))},c.prototype.encode=function(e,a){return n.encode(this._encode(a),e)},c.prototype.precompute=function(e){if(this.precomputed)return this;var a={doubles:null,naf:null,beta:null};return a.naf=this._getNAFPoints(8),a.doubles=this._getDoubles(4,e),a.beta=this._getBeta(),this.precomputed=a,this},c.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var a=this.precomputed.doubles;return a?a.points.length>=Math.ceil((e.bitLength()+1)/a.step):!1},c.prototype._getDoubles=function(e,a){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var t=[this],f=this,c=0;a>c;c+=e){for(var r=0;e>r;r++)f=f.dbl();t.push(f)}return{step:e,points:t}},c.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var a=[this],t=(1<c;c++)a[c]=a[c-1].add(f);return{wnd:e,points:a}},c.prototype._getBeta=function(){return null},c.prototype.dblp=function(e){for(var a=this,t=0;e>t;t++)a=a.dbl();return a}},{"../../elliptic":138,"bn.js":136}],140:[function(e,a,t){"use strict";function f(e){this.twisted=1!==(0|e.a),this.mOneA=this.twisted&&-1===(0|e.a),this.extended=this.mOneA,b.call(this,"edwards",e),this.a=new n(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new n(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new n(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),o(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|e.c)}function c(e,a,t,f,c){b.BasePoint.call(this,e,"projective"),null===a&&null===t&&null===f?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new n(a,16),this.y=new n(t,16),this.z=f?new n(f,16):this.curve.one,this.t=c&&new n(c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var r=e("../curve"),d=e("../../elliptic"),n=e("bn.js"),i=e("inherits"),b=r.base,o=d.utils.assert;i(f,b),a.exports=f,f.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},f.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},f.prototype.jpoint=function(e,a,t,f){return this.point(e,a,t,f)},f.prototype.pointFromX=function(e,a){e=new n(e,16),e.red||(e=e.toRed(this.red));var t=e.redSqr(),f=this.c2.redSub(this.a.redMul(t)),c=this.one.redSub(this.c2.redMul(this.d).redMul(t)),r=f.redMul(c.redInvm()),d=r.redSqrt();if(0!==d.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var i=d.fromRed().isOdd();return(a&&!i||!a&&i)&&(d=d.redNeg()),this.point(e,d)},f.prototype.pointFromY=function(e,a){e=new n(e,16),e.red||(e=e.toRed(this.red));var t=e.redSqr(),f=t.redSub(this.one),c=t.redMul(this.d).redAdd(this.one),r=f.redMul(c.redInvm());if(0===r.cmp(this.zero)){if(a)throw new Error("invalid point");return this.point(this.zero,e)}var d=r.redSqrt();if(0!==d.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");return d.isOdd()!==a&&(d=d.redNeg()),this.point(d,e)},f.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var a=e.x.redSqr(),t=e.y.redSqr(),f=a.redMul(this.a).redAdd(t),c=this.c2.redMul(this.one.redAdd(this.d.redMul(a).redMul(t)));return 0===f.cmp(c)},i(c,b.BasePoint),f.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},f.prototype.point=function(e,a,t,f){return new c(this,e,a,t,f)},c.fromJSON=function(e,a){return new c(e,a[0],a[1],a[2])},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},c.prototype._extDbl=function(){var e=this.x.redSqr(),a=this.y.redSqr(),t=this.z.redSqr();t=t.redIAdd(t);var f=this.curve._mulA(e),c=this.x.redAdd(this.y).redSqr().redISub(e).redISub(a),r=f.redAdd(a),d=r.redSub(t),n=f.redSub(a),i=c.redMul(d),b=r.redMul(n),o=c.redMul(n),s=d.redMul(r);return this.curve.point(i,b,s,o)},c.prototype._projDbl=function(){var e,a,t,f=this.x.redAdd(this.y).redSqr(),c=this.x.redSqr(),r=this.y.redSqr();if(this.curve.twisted){var d=this.curve._mulA(c),n=d.redAdd(r);if(this.zOne)e=f.redSub(c).redSub(r).redMul(n.redSub(this.curve.two)),a=n.redMul(d.redSub(r)),t=n.redSqr().redSub(n).redSub(n);else{var i=this.z.redSqr(),b=n.redSub(i).redISub(i);e=f.redSub(c).redISub(r).redMul(b),a=n.redMul(d.redSub(r)),t=n.redMul(b)}}else{var d=c.redAdd(r),i=this.curve._mulC(this.c.redMul(this.z)).redSqr(),b=d.redSub(i).redSub(i);e=this.curve._mulC(f.redISub(d)).redMul(b),a=this.curve._mulC(d).redMul(c.redISub(r)),t=d.redMul(b)}return this.curve.point(e,a,t)},c.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},c.prototype._extAdd=function(e){var a=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),t=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),f=this.t.redMul(this.curve.dd).redMul(e.t),c=this.z.redMul(e.z.redAdd(e.z)),r=t.redSub(a),d=c.redSub(f),n=c.redAdd(f),i=t.redAdd(a),b=r.redMul(d),o=n.redMul(i),s=r.redMul(i),u=d.redMul(n);return this.curve.point(b,o,u,s)},c.prototype._projAdd=function(e){var a,t,f=this.z.redMul(e.z),c=f.redSqr(),r=this.x.redMul(e.x),d=this.y.redMul(e.y),n=this.curve.d.redMul(r).redMul(d),i=c.redSub(n),b=c.redAdd(n),o=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(r).redISub(d),s=f.redMul(i).redMul(o);return this.curve.twisted?(a=f.redMul(b).redMul(d.redSub(this.curve._mulA(r))),t=i.redMul(b)):(a=f.redMul(b).redMul(d.redSub(r)),t=this.curve._mulC(i).redMul(b)),this.curve.point(s,a,t)},c.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},c.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,a,t){return this.curve._wnafMulAdd(1,[this,a],[e,t],2)},c.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},c.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()},c.prototype.getY=function(){return this.normalize(),this.y.fromRed()},c.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},c.prototype.toP=c.prototype.normalize,c.prototype.mixedAdd=c.prototype.add},{"../../elliptic":138,"../curve":141,"bn.js":136,inherits:296}],141:[function(e,a,t){arguments[4][59][0].apply(t,arguments)},{"./base":139,"./edwards":140,"./mont":142,"./short":143,dup:59}],142:[function(e,a,t){"use strict";function f(e){i.call(this,"mont",e),this.a=new d(e.a,16).toRed(this.red),this.b=new d(e.b,16).toRed(this.red),this.i4=new d(4).toRed(this.red).redInvm(),this.two=new d(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function c(e,a,t){i.BasePoint.call(this,e,"projective"),null===a&&null===t?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new d(a,16),this.z=new d(t,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var r=e("../curve"),d=e("bn.js"),n=e("inherits"),i=r.base,b=e("../../elliptic"),o=b.utils;n(f,i),a.exports=f,f.prototype.validate=function(e){var a=e.normalize().x,t=a.redSqr(),f=t.redMul(a).redAdd(t.redMul(this.a)).redAdd(a),c=f.redSqrt();return 0===c.redSqr().cmp(f)},n(c,i.BasePoint),f.prototype.decodePoint=function(e,a){return this.point(o.toArray(e,a),1)},f.prototype.point=function(e,a){return new c(this,e,a)},f.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},c.prototype.precompute=function(){},c.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},c.fromJSON=function(e,a){return new c(e,a[0],a[1]||e.one)},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},c.prototype.dbl=function(){var e=this.x.redAdd(this.z),a=e.redSqr(),t=this.x.redSub(this.z),f=t.redSqr(),c=a.redSub(f),r=a.redMul(f),d=c.redMul(f.redAdd(this.curve.a24.redMul(c)));return this.curve.point(r,d)},c.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.diffAdd=function(e,a){var t=this.x.redAdd(this.z),f=this.x.redSub(this.z),c=e.x.redAdd(e.z),r=e.x.redSub(e.z),d=r.redMul(t),n=c.redMul(f),i=a.z.redMul(d.redAdd(n).redSqr()),b=a.x.redMul(d.redISub(n).redSqr());return this.curve.point(i,b)},c.prototype.mul=function(e){for(var a=e.clone(),t=this,f=this.curve.point(null,null),c=this,r=[];0!==a.cmpn(0);a.iushrn(1))r.push(a.andln(1));for(var d=r.length-1;d>=0;d--)0===r[d]?(t=t.diffAdd(f,c),f=f.dbl()):(f=t.diffAdd(f,c),t=t.dbl());return f},c.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},c.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../../elliptic":138,"../curve":141,"bn.js":136,inherits:296}],143:[function(e,a,t){"use strict";function f(e){o.call(this,"short",e),this.a=new i(e.a,16).toRed(this.red),this.b=new i(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function c(e,a,t,f){o.BasePoint.call(this,e,"affine"),null===a&&null===t?(this.x=null,this.y=null,this.inf=!0):(this.x=new i(a,16),this.y=new i(t,16),f&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function r(e,a,t,f){o.BasePoint.call(this,e,"jacobian"),null===a&&null===t&&null===f?(this.x=this.curve.one,this.y=this.curve.one,this.z=new i(0)):(this.x=new i(a,16),this.y=new i(t,16),this.z=new i(f,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var d=e("../curve"),n=e("../../elliptic"),i=e("bn.js"),b=e("inherits"),o=d.base,s=n.utils.assert;b(f,o),a.exports=f,f.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var a,t;if(e.beta)a=new i(e.beta,16).toRed(this.red);else{var f=this._getEndoRoots(this.p);a=f[0].cmp(f[1])<0?f[0]:f[1],a=a.toRed(this.red)}if(e.lambda)t=new i(e.lambda,16);else{var c=this._getEndoRoots(this.n);0===this.g.mul(c[0]).x.cmp(this.g.x.redMul(a))?t=c[0]:(t=c[1],s(0===this.g.mul(t).x.cmp(this.g.x.redMul(a))))}var r;return r=e.basis?e.basis.map(function(e){return{a:new i(e.a,16),b:new i(e.b,16)}}):this._getEndoBasis(t),{beta:a,lambda:t,basis:r}}},f.prototype._getEndoRoots=function(e){var a=e===this.p?this.red:i.mont(e),t=new i(2).toRed(a).redInvm(),f=t.redNeg(),c=new i(3).toRed(a).redNeg().redSqrt().redMul(t),r=f.redAdd(c).fromRed(),d=f.redSub(c).fromRed();return[r,d]},f.prototype._getEndoBasis=function(e){for(var a,t,f,c,r,d,n,b,o,s=this.n.ushrn(Math.floor(this.n.bitLength()/2)),u=e,h=this.n.clone(),l=new i(1),p=new i(0),g=new i(0),m=new i(1),v=0;0!==u.cmpn(0);){var y=h.div(u);b=h.sub(y.mul(u)),o=g.sub(y.mul(l));var w=m.sub(y.mul(p));if(!f&&b.cmp(s)<0)a=n.neg(),t=l,f=b.neg(),c=o;else if(f&&2===++v)break;n=b,h=u,u=b,g=l,l=o,m=p,p=w}r=b.neg(),d=o;var _=f.sqr().add(c.sqr()),S=r.sqr().add(d.sqr());return S.cmp(_)>=0&&(r=a,d=t),f.negative&&(f=f.neg(),c=c.neg()),r.negative&&(r=r.neg(),d=d.neg()),[{a:f,b:c},{a:r,b:d}]},f.prototype._endoSplit=function(e){var a=this.endo.basis,t=a[0],f=a[1],c=f.b.mul(e).divRound(this.n),r=t.b.neg().mul(e).divRound(this.n),d=c.mul(t.a),n=r.mul(f.a),i=c.mul(t.b),b=r.mul(f.b),o=e.sub(d).sub(n),s=i.add(b).neg();return{k1:o,k2:s}},f.prototype.pointFromX=function(e,a){e=new i(e,16),e.red||(e=e.toRed(this.red));var t=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),f=t.redSqrt();if(0!==f.redSqr().redSub(t).cmp(this.zero))throw new Error("invalid point");var c=f.fromRed().isOdd();return(a&&!c||!a&&c)&&(f=f.redNeg()),this.point(e,f)},f.prototype.validate=function(e){if(e.inf)return!0;var a=e.x,t=e.y,f=this.a.redMul(a),c=a.redSqr().redMul(a).redIAdd(f).redIAdd(this.b);return 0===t.redSqr().redISub(c).cmpn(0)},f.prototype._endoWnafMulAdd=function(e,a){for(var t=this._endoWnafT1,f=this._endoWnafT2,c=0;cb;b++)t[b]=null,f[b]=null;return i},b(c,o.BasePoint),f.prototype.point=function(e,a,t){return new c(this,e,a,t)},f.prototype.pointFromJSON=function(e,a){return c.fromJSON(this,e,a)},c.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var a=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var t=this.curve,f=function(e){return t.point(e.x.redMul(t.endo.beta),e.y)};e.beta=a,a.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(f)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(f) -}}}return a}},c.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},c.fromJSON=function(e,a,t){function f(a){return e.point(a[0],a[1],t)}"string"==typeof a&&(a=JSON.parse(a));var c=e.point(a[0],a[1],t);if(!a[2])return c;var r=a[2];return c.precomputed={beta:null,doubles:r.doubles&&{step:r.doubles.step,points:[c].concat(r.doubles.points.map(f))},naf:r.naf&&{wnd:r.naf.wnd,points:[c].concat(r.naf.points.map(f))}},c},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return this.inf},c.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var a=this.y.redSub(e.y);0!==a.cmpn(0)&&(a=a.redMul(this.x.redSub(e.x).redInvm()));var t=a.redSqr().redISub(this.x).redISub(e.x),f=a.redMul(this.x.redSub(t)).redISub(this.y);return this.curve.point(t,f)},c.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var a=this.curve.a,t=this.x.redSqr(),f=e.redInvm(),c=t.redAdd(t).redIAdd(t).redIAdd(a).redMul(f),r=c.redSqr().redISub(this.x.redAdd(this.x)),d=c.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,d)},c.prototype.getX=function(){return this.x.fromRed()},c.prototype.getY=function(){return this.y.fromRed()},c.prototype.mul=function(e){return e=new i(e,16),this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,a,t){var f=[this,a],c=[e,t];return this.curve.endo?this.curve._endoWnafMulAdd(f,c):this.curve._wnafMulAdd(1,f,c,2)},c.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},c.prototype.neg=function(e){if(this.inf)return this;var a=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var t=this.precomputed,f=function(e){return e.neg()};a.precomputed={naf:t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(f)},doubles:t.doubles&&{step:t.doubles.step,points:t.doubles.points.map(f)}}}return a},c.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var e=this.curve.jpoint(this.x,this.y,this.curve.one);return e},b(r,o.BasePoint),f.prototype.jpoint=function(e,a,t){return new r(this,e,a,t)},r.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),a=e.redSqr(),t=this.x.redMul(a),f=this.y.redMul(a).redMul(e);return this.curve.point(t,f)},r.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},r.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var a=e.z.redSqr(),t=this.z.redSqr(),f=this.x.redMul(a),c=e.x.redMul(t),r=this.y.redMul(a.redMul(e.z)),d=e.y.redMul(t.redMul(this.z)),n=f.redSub(c),i=r.redSub(d);if(0===n.cmpn(0))return 0!==i.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var b=n.redSqr(),o=b.redMul(n),s=f.redMul(b),u=i.redSqr().redIAdd(o).redISub(s).redISub(s),h=i.redMul(s.redISub(u)).redISub(r.redMul(o)),l=this.z.redMul(e.z).redMul(n);return this.curve.jpoint(u,h,l)},r.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var a=this.z.redSqr(),t=this.x,f=e.x.redMul(a),c=this.y,r=e.y.redMul(a).redMul(this.z),d=t.redSub(f),n=c.redSub(r);if(0===d.cmpn(0))return 0!==n.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var i=d.redSqr(),b=i.redMul(d),o=t.redMul(i),s=n.redSqr().redIAdd(b).redISub(o).redISub(o),u=n.redMul(o.redISub(s)).redISub(c.redMul(b)),h=this.z.redMul(d);return this.curve.jpoint(s,u,h)},r.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var a=this,t=0;e>t;t++)a=a.dbl();return a}for(var f=this.curve.a,c=this.curve.tinv,r=this.x,d=this.y,n=this.z,i=n.redSqr().redSqr(),b=d.redAdd(d),t=0;e>t;t++){var o=r.redSqr(),s=b.redSqr(),u=s.redSqr(),h=o.redAdd(o).redIAdd(o).redIAdd(f.redMul(i)),l=r.redMul(s),p=h.redSqr().redISub(l.redAdd(l)),g=l.redISub(p),m=h.redMul(g);m=m.redIAdd(m).redISub(u);var v=b.redMul(n);e>t+1&&(i=i.redMul(u)),r=p,n=v,b=m}return this.curve.jpoint(r,b.redMul(c),n)},r.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},r.prototype._zeroDbl=function(){var e,a,t;if(this.zOne){var f=this.x.redSqr(),c=this.y.redSqr(),r=c.redSqr(),d=this.x.redAdd(c).redSqr().redISub(f).redISub(r);d=d.redIAdd(d);var n=f.redAdd(f).redIAdd(f),i=n.redSqr().redISub(d).redISub(d),b=r.redIAdd(r);b=b.redIAdd(b),b=b.redIAdd(b),e=i,a=n.redMul(d.redISub(i)).redISub(b),t=this.y.redAdd(this.y)}else{var o=this.x.redSqr(),s=this.y.redSqr(),u=s.redSqr(),h=this.x.redAdd(s).redSqr().redISub(o).redISub(u);h=h.redIAdd(h);var l=o.redAdd(o).redIAdd(o),p=l.redSqr(),g=u.redIAdd(u);g=g.redIAdd(g),g=g.redIAdd(g),e=p.redISub(h).redISub(h),a=l.redMul(h.redISub(e)).redISub(g),t=this.y.redMul(this.z),t=t.redIAdd(t)}return this.curve.jpoint(e,a,t)},r.prototype._threeDbl=function(){var e,a,t;if(this.zOne){var f=this.x.redSqr(),c=this.y.redSqr(),r=c.redSqr(),d=this.x.redAdd(c).redSqr().redISub(f).redISub(r);d=d.redIAdd(d);var n=f.redAdd(f).redIAdd(f).redIAdd(this.curve.a),i=n.redSqr().redISub(d).redISub(d);e=i;var b=r.redIAdd(r);b=b.redIAdd(b),b=b.redIAdd(b),a=n.redMul(d.redISub(i)).redISub(b),t=this.y.redAdd(this.y)}else{var o=this.z.redSqr(),s=this.y.redSqr(),u=this.x.redMul(s),h=this.x.redSub(o).redMul(this.x.redAdd(o));h=h.redAdd(h).redIAdd(h);var l=u.redIAdd(u);l=l.redIAdd(l);var p=l.redAdd(l);e=h.redSqr().redISub(p),t=this.y.redAdd(this.z).redSqr().redISub(s).redISub(o);var g=s.redSqr();g=g.redIAdd(g),g=g.redIAdd(g),g=g.redIAdd(g),a=h.redMul(l.redISub(e)).redISub(g)}return this.curve.jpoint(e,a,t)},r.prototype._dbl=function(){var e=this.curve.a,a=this.x,t=this.y,f=this.z,c=f.redSqr().redSqr(),r=a.redSqr(),d=t.redSqr(),n=r.redAdd(r).redIAdd(r).redIAdd(e.redMul(c)),i=a.redAdd(a);i=i.redIAdd(i);var b=i.redMul(d),o=n.redSqr().redISub(b.redAdd(b)),s=b.redISub(o),u=d.redSqr();u=u.redIAdd(u),u=u.redIAdd(u),u=u.redIAdd(u);var h=n.redMul(s).redISub(u),l=t.redAdd(t).redMul(f);return this.curve.jpoint(o,h,l)},r.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),a=this.y.redSqr(),t=this.z.redSqr(),f=a.redSqr(),c=e.redAdd(e).redIAdd(e),r=c.redSqr(),d=this.x.redAdd(a).redSqr().redISub(e).redISub(f);d=d.redIAdd(d),d=d.redAdd(d).redIAdd(d),d=d.redISub(r);var n=d.redSqr(),i=f.redIAdd(f);i=i.redIAdd(i),i=i.redIAdd(i),i=i.redIAdd(i);var b=c.redIAdd(d).redSqr().redISub(r).redISub(n).redISub(i),o=a.redMul(b);o=o.redIAdd(o),o=o.redIAdd(o);var s=this.x.redMul(n).redISub(o);s=s.redIAdd(s),s=s.redIAdd(s);var u=this.y.redMul(b.redMul(i.redISub(b)).redISub(d.redMul(n)));u=u.redIAdd(u),u=u.redIAdd(u),u=u.redIAdd(u);var h=this.z.redAdd(d).redSqr().redISub(t).redISub(n);return this.curve.jpoint(s,u,h)},r.prototype.mul=function(e,a){return e=new i(e,a),this.curve._wnafMul(this,e)},r.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var a=this.z.redSqr(),t=e.z.redSqr();if(0!==this.x.redMul(t).redISub(e.x.redMul(a)).cmpn(0))return!1;var f=a.redMul(this.z),c=t.redMul(e.z);return 0===this.y.redMul(c).redISub(e.y.redMul(f)).cmpn(0)},r.prototype.inspect=function(){return this.isInfinity()?"":""},r.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../../elliptic":138,"../curve":141,"bn.js":136,inherits:296}],144:[function(e,a,t){"use strict";function f(e){"short"===e.type?this.curve=new n.curve["short"](e):"edwards"===e.type?this.curve=new n.curve.edwards(e):this.curve=new n.curve.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,i(this.g.validate(),"Invalid curve"),i(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function c(e,a){Object.defineProperty(r,e,{configurable:!0,enumerable:!0,get:function(){var t=new f(a);return Object.defineProperty(r,e,{configurable:!0,enumerable:!0,value:t}),t}})}var r=t,d=e("hash.js"),n=e("../elliptic"),i=n.utils.assert;r.PresetCurve=f,c("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:d.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),c("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:d.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),c("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:d.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),c("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:d.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),c("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:d.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),c("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"0",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:d.sha256,gRed:!1,g:["9"]}),c("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:d.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var b;try{b=e("./precomputed/secp256k1")}catch(o){b=void 0}c("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:d.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",b]})},{"../elliptic":138,"./precomputed/secp256k1":152,"hash.js":155}],145:[function(e,a,t){"use strict";function f(e){return this instanceof f?("string"==typeof e&&(n(r.curves.hasOwnProperty(e),"Unknown curve "+e),e=r.curves[e]),e instanceof r.curves.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),void(this.hash=e.hash||e.curve.hash)):new f(e)}var c=e("bn.js"),r=e("../../elliptic"),d=r.utils,n=d.assert,i=e("./key"),b=e("./signature");a.exports=f,f.prototype.keyPair=function(e){return new i(this,e)},f.prototype.keyFromPrivate=function(e,a){return i.fromPrivate(this,e,a)},f.prototype.keyFromPublic=function(e,a){return i.fromPublic(this,e,a)},f.prototype.genKeyPair=function(e){e||(e={});for(var a=new r.hmacDRBG({hash:this.hash,pers:e.pers,entropy:e.entropy||r.rand(this.hash.hmacStrength),nonce:this.n.toArray()}),t=this.n.byteLength(),f=this.n.sub(new c(2));;){var d=new c(a.generate(t));if(!(d.cmp(f)>0))return d.iaddn(1),this.keyFromPrivate(d)}},f.prototype._truncateToN=function(e,a){var t=8*e.byteLength()-this.n.bitLength();return t>0&&(e=e.ushrn(t)),!a&&e.cmp(this.n)>=0?e.sub(this.n):e},f.prototype.sign=function(e,a,t,f){"object"==typeof t&&(f=t,t=null),f||(f={}),a=this.keyFromPrivate(a,t),e=this._truncateToN(new c(e,16));for(var d=this.n.byteLength(),n=a.getPrivate().toArray("be",d),i=e.toArray("be",d),o=new r.hmacDRBG({hash:this.hash,entropy:n,nonce:i,pers:f.pers,persEnc:f.persEnc}),s=this.n.sub(new c(1)),u=0;!0;u++){var h=f.k?f.k(u):new c(o.generate(this.n.byteLength()));if(h=this._truncateToN(h,!0),!(h.cmpn(1)<=0||h.cmp(s)>=0)){var l=this.g.mul(h);if(!l.isInfinity()){var p=l.getX(),g=p.umod(this.n);if(0!==g.cmpn(0)){var m=h.invm(this.n).mul(g.mul(a.getPrivate()).iadd(e));if(m=m.umod(this.n),0!==m.cmpn(0)){var v=(l.getY().isOdd()?1:0)|(0!==p.cmp(g)?2:0);return f.canonical&&m.cmp(this.nh)>0&&(m=this.n.sub(m),v^=1),new b({r:g,s:m,recoveryParam:v})}}}}}},f.prototype.verify=function(e,a,t,f){e=this._truncateToN(new c(e,16)),t=this.keyFromPublic(t,f),a=new b(a,"hex");var r=a.r,d=a.s;if(r.cmpn(1)<0||r.cmp(this.n)>=0)return!1;if(d.cmpn(1)<0||d.cmp(this.n)>=0)return!1;var n=d.invm(this.n),i=n.mul(e).umod(this.n),o=n.mul(r).umod(this.n),s=this.g.mulAdd(i,t.getPublic(),o);return s.isInfinity()?!1:0===s.getX().umod(this.n).cmp(r)},f.prototype.recoverPubKey=function(e,a,t,f){n((3&t)===t,"The recovery param is more than two bits"),a=new b(a,f);var r=this.n,d=new c(e),i=a.r,o=a.s,s=1&t,u=t>>1;if(i.cmp(this.curve.p.umod(this.curve.n))>=0&&u)throw new Error("Unable to find sencond key candinate");i=u?this.curve.pointFromX(i.add(this.curve.n),s):this.curve.pointFromX(i,s);var h=r.sub(d),l=a.r.invm(r);return this.g.mulAdd(h,i,o).mul(l)},f.prototype.getKeyRecoveryParam=function(e,a,t,f){if(a=new b(a,f),null!==a.recoveryParam)return a.recoveryParam;for(var c=0;4>c;c++){var r;try{r=this.recoverPubKey(e,a,c)}catch(e){continue}if(r.eq(t))return c}throw new Error("Unable to find valid recovery factor")}},{"../../elliptic":138,"./key":146,"./signature":147,"bn.js":136}],146:[function(e,a,t){"use strict";function f(e,a){this.ec=e,this.priv=null,this.pub=null,a.priv&&this._importPrivate(a.priv,a.privEnc),a.pub&&this._importPublic(a.pub,a.pubEnc)}var c=e("bn.js");a.exports=f,f.fromPublic=function(e,a,t){return a instanceof f?a:new f(e,{pub:a,pubEnc:t})},f.fromPrivate=function(e,a,t){return a instanceof f?a:new f(e,{priv:a,privEnc:t})},f.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},f.prototype.getPublic=function(e,a){return"string"==typeof e&&(a=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),a?this.pub.encode(a,e):this.pub},f.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},f.prototype._importPrivate=function(e,a){this.priv=new c(e,a||16),this.priv=this.priv.umod(this.ec.curve.n)},f.prototype._importPublic=function(e,a){return e.x||e.y?void(this.pub=this.ec.curve.point(e.x,e.y)):void(this.pub=this.ec.curve.decodePoint(e,a))},f.prototype.derive=function(e){return e.mul(this.priv).getX()},f.prototype.sign=function(e,a,t){return this.ec.sign(e,this,a,t)},f.prototype.verify=function(e,a){return this.ec.verify(e,a,this)},f.prototype.inspect=function(){return""}},{"bn.js":136}],147:[function(e,a,t){"use strict";function f(e,a){return e instanceof f?e:void(this._importDER(e,a)||(s(e.r&&e.s,"Signature without r or s"),this.r=new i(e.r,16),this.s=new i(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam))}function c(){this.place=0}function r(e,a){var t=e[a.place++];if(!(128&t))return t;for(var f=15&t,c=0,r=0,d=a.place;f>r;r++,d++)c<<=8,c|=e[d];return a.place=d,c}function d(e){for(var a=0,t=e.length-1;!e[a]&&!(128&e[a+1])&&t>a;)a++;return 0===a?e:e.slice(a)}function n(e,a){if(128>a)return void e.push(a);var t=1+(Math.log(a)/Math.LN2>>>3);for(e.push(128|t);--t;)e.push(a>>>(t<<3)&255);e.push(a)}var i=e("bn.js"),b=e("../../elliptic"),o=b.utils,s=o.assert;a.exports=f,f.prototype._importDER=function(e,a){e=o.toArray(e,a);var t=new c;if(48!==e[t.place++])return!1;var f=r(e,t);if(f+t.place!==e.length)return!1;if(2!==e[t.place++])return!1;var d=r(e,t),n=e.slice(t.place,d+t.place);if(t.place+=d,2!==e[t.place++])return!1;var b=r(e,t);if(e.length!==b+t.place)return!1;var s=e.slice(t.place,b+t.place);return 0===n[0]&&128&n[1]&&(n=n.slice(1)),0===s[0]&&128&s[1]&&(s=s.slice(1)),this.r=new i(n),this.s=new i(s),this.recoveryParam=null,!0},f.prototype.toDER=function(e){var a=this.r.toArray(),t=this.s.toArray();for(128&a[0]&&(a=[0].concat(a)),128&t[0]&&(t=[0].concat(t)),a=d(a),t=d(t);!(t[0]||128&t[1]);)t=t.slice(1);var f=[2];n(f,a.length),f=f.concat(a),f.push(2),n(f,t.length);var c=f.concat(t),r=[48];return n(r,c.length),r=r.concat(c),o.encode(r,e)}},{"../../elliptic":138,"bn.js":136}],148:[function(e,a,t){"use strict";function f(e){if(n("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof f))return new f(e);var e=r.curves[e].curve;this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=c.sha512}var c=e("hash.js"),r=e("../../elliptic"),d=r.utils,n=d.assert,i=d.parseBytes,b=e("./key"),o=e("./signature");a.exports=f,f.prototype.sign=function(e,a){e=i(e);var t=this.keyFromSecret(a),f=this.hashInt(t.messagePrefix(),e),c=this.g.mul(f),r=this.encodePoint(c),d=this.hashInt(r,t.pubBytes(),e).mul(t.priv()),n=f.add(d).umod(this.curve.n);return this.makeSignature({R:c,S:n,Rencoded:r})},f.prototype.verify=function(e,a,t){e=i(e),a=this.makeSignature(a);var f=this.keyFromPublic(t),c=this.hashInt(a.Rencoded(),f.pubBytes(),e),r=this.g.mul(a.S()),d=a.R().add(f.pub().mul(c));return d.eq(r)},f.prototype.hashInt=function(){for(var e=this.hash(),a=0;a>8,d=255&c;r?t.push(r,d):t.push(d)}return t}function c(e){return 1===e.length?"0"+e:e}function r(e){for(var a="",t=0;t=0;){var r;if(c.isOdd()){var d=c.andln(f-1);r=d>(f>>1)-1?(f>>1)-d:d,c.isubn(r)}else r=0;t.push(r);for(var n=0!==c.cmpn(0)&&0===c.andln(f-1)?a+1:1,i=1;n>i;i++)t.push(0);c.iushrn(n)}return t}function n(e,a){var t=[[],[]];e=e.clone(),a=a.clone();for(var f=0,c=0;e.cmpn(-f)>0||a.cmpn(-c)>0;){var r=e.andln(3)+f&3,d=a.andln(3)+c&3;3===r&&(r=-1),3===d&&(d=-1);var n;if(0===(1&r))n=0;else{var i=e.andln(7)+f&7;n=3!==i&&5!==i||2!==d?r:-r}t[0].push(n);var b;if(0===(1&d))b=0;else{var i=a.andln(7)+c&7;b=3!==i&&5!==i||2!==r?d:-d}t[1].push(b),2*f===n+1&&(f=1-f),2*c===b+1&&(c=1-c),e.iushrn(1),a.iushrn(1)}return t}function i(e,a){var t=a.name,f="_"+t;e.prototype[t]=function(){return void 0!==this[f]?this[f]:this[f]=a.call(this)}}function b(e){return"string"==typeof e?s.toArray(e,"hex"):e}function o(e){return new u(e,"hex","le")}var s=t,u=e("bn.js");s.assert=function(e,a){if(!e)throw new Error(a||"Assertion failed")},s.toArray=f,s.zero2=c,s.toHex=r,s.encode=function(e,a){return"hex"===a?r(e):e},s.getNAF=d,s.getJSF=n,s.cachedProperty=i,s.parseBytes=b,s.intFromLE=o},{"bn.js":136}],154:[function(e,a,t){arguments[4][69][0].apply(t,arguments)},{dup:69}],155:[function(e,a,t){arguments[4][70][0].apply(t,arguments)},{"./hash/common":156,"./hash/hmac":157,"./hash/ripemd":158,"./hash/sha":159,"./hash/utils":160,dup:70}],156:[function(e,a,t){arguments[4][71][0].apply(t,arguments)},{"../hash":155,dup:71}],157:[function(e,a,t){arguments[4][72][0].apply(t,arguments)},{"../hash":155,dup:72}],158:[function(e,a,t){arguments[4][73][0].apply(t,arguments)},{"../hash":155,dup:73}],159:[function(e,a,t){arguments[4][74][0].apply(t,arguments)},{"../hash":155,dup:74}],160:[function(e,a,t){arguments[4][75][0].apply(t,arguments)},{dup:75,inherits:296}],161:[function(e,a,t){a.exports={name:"elliptic",version:"6.2.3",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{coverage:"npm run unit --coverage",coveralls:"npm run coverage && cat ./coverage/lcov.info | coveralls",jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",lint:"npm run jscs && npm run jshint",test:"npm run lint && npm run unit",unit:"istanbul test _mocha --reporter=spec test/*-test.js"},repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},keywords:["EC","Elliptic","curve","Cryptography"],author:{name:"Fedor Indutny",email:"fedor@indutny.com"},license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{coveralls:"^2.11.3",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},dependencies:{"bn.js":"^4.0.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},gitHead:"c32f20b22b420eb6af3c6dda28963deb7facf823",_id:"elliptic@6.2.3",_shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",_from:"elliptic@>=6.0.0 <7.0.0",_npmVersion:"3.3.12",_nodeVersion:"5.4.1",_npmUser:{name:"indutny",email:"fedor@indutny.com"},dist:{shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",tarball:"http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz"},maintainers:[{name:"indutny",email:"fedor@indutny.com"}],directories:{},_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz",readme:"ERROR: No README data found!"}},{}],162:[function(e,a,t){a.exports={"2.16.840.1.101.3.4.1.1":"aes-128-ecb","2.16.840.1.101.3.4.1.2":"aes-128-cbc","2.16.840.1.101.3.4.1.3":"aes-128-ofb","2.16.840.1.101.3.4.1.4":"aes-128-cfb","2.16.840.1.101.3.4.1.21":"aes-192-ecb","2.16.840.1.101.3.4.1.22":"aes-192-cbc","2.16.840.1.101.3.4.1.23":"aes-192-ofb","2.16.840.1.101.3.4.1.24":"aes-192-cfb","2.16.840.1.101.3.4.1.41":"aes-256-ecb","2.16.840.1.101.3.4.1.42":"aes-256-cbc","2.16.840.1.101.3.4.1.43":"aes-256-ofb","2.16.840.1.101.3.4.1.44":"aes-256-cfb"}},{}],163:[function(e,a,t){var f=e("asn1.js"),c=f.define("RSAPrivateKey",function(){this.seq().obj(this.key("version")["int"](),this.key("modulus")["int"](),this.key("publicExponent")["int"](),this.key("privateExponent")["int"](),this.key("prime1")["int"](),this.key("prime2")["int"](),this.key("exponent1")["int"](),this.key("exponent2")["int"](),this.key("coefficient")["int"]())});t.RSAPrivateKey=c;var r=f.define("RSAPublicKey",function(){this.seq().obj(this.key("modulus")["int"](),this.key("publicExponent")["int"]())});t.RSAPublicKey=r;var d=f.define("SubjectPublicKeyInfo",function(){this.seq().obj(this.key("algorithm").use(n),this.key("subjectPublicKey").bitstr())});t.PublicKey=d;var n=f.define("AlgorithmIdentifier",function(){this.seq().obj(this.key("algorithm").objid(),this.key("none").null_().optional(),this.key("curve").objid().optional(),this.key("params").seq().obj(this.key("p")["int"](),this.key("q")["int"](),this.key("g")["int"]()).optional())}),i=f.define("PrivateKeyInfo",function(){this.seq().obj(this.key("version")["int"](),this.key("algorithm").use(n),this.key("subjectPrivateKey").octstr())});t.PrivateKey=i;var b=f.define("EncryptedPrivateKeyInfo",function(){this.seq().obj(this.key("algorithm").seq().obj(this.key("id").objid(),this.key("decrypt").seq().obj(this.key("kde").seq().obj(this.key("id").objid(),this.key("kdeparams").seq().obj(this.key("salt").octstr(),this.key("iters")["int"]())),this.key("cipher").seq().obj(this.key("algo").objid(),this.key("iv").octstr()))),this.key("subjectPrivateKey").octstr())});t.EncryptedPrivateKey=b;var o=f.define("DSAPrivateKey",function(){this.seq().obj(this.key("version")["int"](),this.key("p")["int"](),this.key("q")["int"](),this.key("g")["int"](),this.key("pub_key")["int"](),this.key("priv_key")["int"]())});t.DSAPrivateKey=o,t.DSAparam=f.define("DSAparam",function(){this["int"]()});var s=f.define("ECPrivateKey",function(){this.seq().obj(this.key("version")["int"](),this.key("privateKey").octstr(),this.key("parameters").optional().explicit(0).use(u),this.key("publicKey").optional().explicit(1).bitstr())});t.ECPrivateKey=s;var u=f.define("ECParameters",function(){this.choice({namedCurve:this.objid()})});t.signature=f.define("signature",function(){this.seq().obj(this.key("r")["int"](),this.key("s")["int"]())})},{"asn1.js":166}],164:[function(e,a,t){(function(t){var f=/Proc-Type: 4,ENCRYPTED\r?\nDEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\r?\n\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n/m,c=/^-----BEGIN (.*) KEY-----\r?\n/m,r=/^-----BEGIN (.*) KEY-----\r?\n([0-9A-z\n\r\+\/\=]+)\r?\n-----END \1 KEY-----$/m,d=e("evp_bytestokey"),n=e("browserify-aes");a.exports=function(e,a){var i,b=e.toString(),o=b.match(f);if(o){var s="aes"+o[1],u=new t(o[2],"hex"),h=new t(o[3].replace(/\r?\n/g,""),"base64"),l=d(a,u.slice(0,8),parseInt(o[1],10)).key,p=[],g=n.createDecipheriv(s,l,u);p.push(g.update(h)),p.push(g["final"]()),i=t.concat(p)}else{var m=b.match(r);i=new t(m[2].replace(/\r?\n/g,""),"base64")}var v=b.match(c)[1]+" KEY";return{tag:v,data:i}}}).call(this,e("buffer").Buffer)},{"browserify-aes":183,buffer:99,evp_bytestokey:198}],165:[function(e,a,t){(function(t){function f(e){var a;"object"!=typeof e||t.isBuffer(e)||(a=e.passphrase,e=e.key),"string"==typeof e&&(e=new t(e));var f,d,i=n(e,a),b=i.tag,o=i.data;switch(b){case"PUBLIC KEY":switch(d=r.PublicKey.decode(o,"der"),f=d.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return r.RSAPublicKey.decode(d.subjectPublicKey.data,"der");case"1.2.840.10045.2.1":return d.subjectPrivateKey=d.subjectPublicKey,{type:"ec",data:d};case"1.2.840.10040.4.1":return d.algorithm.params.pub_key=r.DSAparam.decode(d.subjectPublicKey.data,"der"),{type:"dsa",data:d.algorithm.params};default:throw new Error("unknown key id "+f)}throw new Error("unknown key type "+b);case"ENCRYPTED PRIVATE KEY":o=r.EncryptedPrivateKey.decode(o,"der"),o=c(o,a);case"PRIVATE KEY":switch(d=r.PrivateKey.decode(o,"der"), -f=d.algorithm.algorithm.join(".")){case"1.2.840.113549.1.1.1":return r.RSAPrivateKey.decode(d.subjectPrivateKey,"der");case"1.2.840.10045.2.1":return{curve:d.algorithm.curve,privateKey:r.ECPrivateKey.decode(d.subjectPrivateKey,"der").privateKey};case"1.2.840.10040.4.1":return d.algorithm.params.priv_key=r.DSAparam.decode(d.subjectPrivateKey,"der"),{type:"dsa",params:d.algorithm.params};default:throw new Error("unknown key id "+f)}throw new Error("unknown key type "+b);case"RSA PUBLIC KEY":return r.RSAPublicKey.decode(o,"der");case"RSA PRIVATE KEY":return r.RSAPrivateKey.decode(o,"der");case"DSA PRIVATE KEY":return{type:"dsa",params:r.DSAPrivateKey.decode(o,"der")};case"EC PRIVATE KEY":return o=r.ECPrivateKey.decode(o,"der"),{curve:o.parameters.value,privateKey:o.privateKey};default:throw new Error("unknown key type "+b)}}function c(e,a){var f=e.algorithm.decrypt.kde.kdeparams.salt,c=parseInt(e.algorithm.decrypt.kde.kdeparams.iters.toString(),10),r=d[e.algorithm.decrypt.cipher.algo.join(".")],n=e.algorithm.decrypt.cipher.iv,o=e.subjectPrivateKey,s=parseInt(r.split("-")[1],10)/8,u=b.pbkdf2Sync(a,f,c,s),h=i.createDecipheriv(r,u,n),l=[];return l.push(h.update(o)),l.push(h["final"]()),t.concat(l)}var r=e("./asn1"),d=e("./aesid.json"),n=e("./fixProc"),i=e("browserify-aes"),b=e("pbkdf2");a.exports=f,f.signature=r.signature}).call(this,e("buffer").Buffer)},{"./aesid.json":162,"./asn1":163,"./fixProc":164,"browserify-aes":183,buffer:99,pbkdf2:248}],166:[function(e,a,t){var f=t;f.bignum=e("bn.js"),f.define=e("./asn1/api").define,f.base=e("./asn1/base"),f.constants=e("./asn1/constants"),f.decoders=e("./asn1/decoders"),f.encoders=e("./asn1/encoders")},{"./asn1/api":167,"./asn1/base":169,"./asn1/constants":173,"./asn1/decoders":175,"./asn1/encoders":178,"bn.js":136}],167:[function(e,a,t){function f(e,a){this.name=e,this.body=a,this.decoders={},this.encoders={}}var c=e("../asn1"),r=e("inherits"),d=t;d.define=function(e,a){return new f(e,a)},f.prototype._createNamed=function(a){var t;try{t=e("vm").runInThisContext("(function "+this.name+"(entity) {\n this._initNamed(entity);\n})")}catch(f){t=function(e){this._initNamed(e)}}return r(t,a),t.prototype._initNamed=function(e){a.call(this,e)},new t(this)},f.prototype._getDecoder=function(e){return this.decoders.hasOwnProperty(e)||(this.decoders[e]=this._createNamed(c.decoders[e])),this.decoders[e]},f.prototype.decode=function(e,a,t){return this._getDecoder(a).decode(e,t)},f.prototype._getEncoder=function(e){return this.encoders.hasOwnProperty(e)||(this.encoders[e]=this._createNamed(c.encoders[e])),this.encoders[e]},f.prototype.encode=function(e,a,t){return this._getEncoder(a).encode(e,t)}},{"../asn1":166,inherits:296,vm:320}],168:[function(e,a,t){function f(e,a){return d.call(this,a),n.isBuffer(e)?(this.base=e,this.offset=0,void(this.length=e.length)):void this.error("Input not Buffer")}function c(e,a){if(Array.isArray(e))this.length=0,this.value=e.map(function(e){return e instanceof c||(e=new c(e,a)),this.length+=e.length,e},this);else if("number"==typeof e){if(!(e>=0&&255>=e))return a.error("non-byte EncoderBuffer value");this.value=e,this.length=1}else if("string"==typeof e)this.value=e,this.length=n.byteLength(e);else{if(!n.isBuffer(e))return a.error("Unsupported type: "+typeof e);this.value=e,this.length=e.length}}var r=e("inherits"),d=e("../base").Reporter,n=e("buffer").Buffer;r(f,d),t.DecoderBuffer=f,f.prototype.save=function(){return{offset:this.offset,reporter:d.prototype.save.call(this)}},f.prototype.restore=function(e){var a=new f(this.base);return a.offset=e.offset,a.length=this.offset,this.offset=e.offset,d.prototype.restore.call(this,e.reporter),a},f.prototype.isEmpty=function(){return this.offset===this.length},f.prototype.readUInt8=function(e){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(e||"DecoderBuffer overrun")},f.prototype.skip=function(e,a){if(!(this.offset+e<=this.length))return this.error(a||"DecoderBuffer overrun");var t=new f(this.base);return t._reporterState=this._reporterState,t.offset=this.offset,t.length=this.offset+e,this.offset+=e,t},f.prototype.raw=function(e){return this.base.slice(e?e.offset:this.offset,this.length)},t.EncoderBuffer=c,c.prototype.join=function(e,a){return e||(e=new n(this.length)),a||(a=0),0===this.length?e:(Array.isArray(this.value)?this.value.forEach(function(t){t.join(e,a),a+=t.length}):("number"==typeof this.value?e[a]=this.value:"string"==typeof this.value?e.write(this.value,a):n.isBuffer(this.value)&&this.value.copy(e,a),a+=this.length),e)}},{"../base":169,buffer:99,inherits:296}],169:[function(e,a,t){var f=t;f.Reporter=e("./reporter").Reporter,f.DecoderBuffer=e("./buffer").DecoderBuffer,f.EncoderBuffer=e("./buffer").EncoderBuffer,f.Node=e("./node")},{"./buffer":168,"./node":170,"./reporter":171}],170:[function(e,a,t){function f(e,a){var t={};this._baseState=t,t.enc=e,t.parent=a||null,t.children=null,t.tag=null,t.args=null,t.reverseArgs=null,t.choice=null,t.optional=!1,t.any=!1,t.obj=!1,t.use=null,t.useDecoder=null,t.key=null,t["default"]=null,t.explicit=null,t.implicit=null,t.contains=null,t.parent||(t.children=[],this._wrap())}var c=e("../base").Reporter,r=e("../base").EncoderBuffer,d=e("../base").DecoderBuffer,n=e("minimalistic-assert"),i=["seq","seqof","set","setof","octstr","bitstr","objid","bool","gentime","utctime","null_","enum","int","ia5str","utf8str","bmpstr","numstr","printstr"],b=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(i),o=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];a.exports=f;var s=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit"];f.prototype.clone=function(){var e=this._baseState,a={};s.forEach(function(t){a[t]=e[t]});var t=new this.constructor(a.parent);return t._baseState=a,t},f.prototype._wrap=function(){var e=this._baseState;b.forEach(function(a){this[a]=function(){var t=new this.constructor(this);return e.children.push(t),t[a].apply(t,arguments)}},this)},f.prototype._init=function(e){var a=this._baseState;n(null===a.parent),e.call(this),a.children=a.children.filter(function(e){return e._baseState.parent===this},this),n.equal(a.children.length,1,"Root node can have only one child")},f.prototype._useArgs=function(e){var a=this._baseState,t=e.filter(function(e){return e instanceof this.constructor},this);e=e.filter(function(e){return!(e instanceof this.constructor)},this),0!==t.length&&(n(null===a.children),a.children=t,t.forEach(function(e){e._baseState.parent=this},this)),0!==e.length&&(n(null===a.args),a.args=e,a.reverseArgs=e.map(function(e){if("object"!=typeof e||e.constructor!==Object)return e;var a={};return Object.keys(e).forEach(function(t){t==(0|t)&&(t|=0);var f=e[t];a[f]=t}),a}))},o.forEach(function(e){f.prototype[e]=function(){var a=this._baseState;throw new Error(e+" not implemented for encoding: "+a.enc)}}),i.forEach(function(e){f.prototype[e]=function(){var a=this._baseState,t=Array.prototype.slice.call(arguments);return n(null===a.tag),a.tag=e,this._useArgs(t),this}}),f.prototype.use=function(e){var a=this._baseState;return n(null===a.use),a.use=e,this},f.prototype.optional=function(){var e=this._baseState;return e.optional=!0,this},f.prototype.def=function(e){var a=this._baseState;return n(null===a["default"]),a["default"]=e,a.optional=!0,this},f.prototype.explicit=function(e){var a=this._baseState;return n(null===a.explicit&&null===a.implicit),a.explicit=e,this},f.prototype.implicit=function(e){var a=this._baseState;return n(null===a.explicit&&null===a.implicit),a.implicit=e,this},f.prototype.obj=function(){var e=this._baseState,a=Array.prototype.slice.call(arguments);return e.obj=!0,0!==a.length&&this._useArgs(a),this},f.prototype.key=function(e){var a=this._baseState;return n(null===a.key),a.key=e,this},f.prototype.any=function(){var e=this._baseState;return e.any=!0,this},f.prototype.choice=function(e){var a=this._baseState;return n(null===a.choice),a.choice=e,this._useArgs(Object.keys(e).map(function(a){return e[a]})),this},f.prototype.contains=function(e){var a=this._baseState;return n(null===a.use),a.contains=e,this},f.prototype._decode=function(e){var a=this._baseState;if(null===a.parent)return e.wrapResult(a.children[0]._decode(e));var t,f=a["default"],c=!0;if(null!==a.key&&(t=e.enterKey(a.key)),a.optional){var r=null;if(null!==a.explicit?r=a.explicit:null!==a.implicit?r=a.implicit:null!==a.tag&&(r=a.tag),null!==r||a.any){if(c=this._peekTag(e,r,a.any),e.isError(c))return c}else{var n=e.save();try{null===a.choice?this._decodeGeneric(a.tag,e):this._decodeChoice(e),c=!0}catch(i){c=!1}e.restore(n)}}var b;if(a.obj&&c&&(b=e.enterObject()),c){if(null!==a.explicit){var o=this._decodeTag(e,a.explicit);if(e.isError(o))return o;e=o}if(null===a.use&&null===a.choice){if(a.any)var n=e.save();var s=this._decodeTag(e,null!==a.implicit?a.implicit:a.tag,a.any);if(e.isError(s))return s;a.any?f=e.raw(n):e=s}if(f=a.any?f:null===a.choice?this._decodeGeneric(a.tag,e):this._decodeChoice(e),e.isError(f))return f;if(!a.any&&null===a.choice&&null!==a.children){var u=a.children.some(function(a){a._decode(e)});if(u)return err}if(a.contains&&("octstr"===a.tag||"bitstr"===a.tag)){var h=new d(f);f=this._getUse(a.contains,e._reporterState.obj)._decode(h)}}return a.obj&&c&&(f=e.leaveObject(b)),null===a.key||null===f&&c!==!0||e.leaveKey(t,a.key,f),f},f.prototype._decodeGeneric=function(e,a){var t=this._baseState;return"seq"===e||"set"===e?null:"seqof"===e||"setof"===e?this._decodeList(a,e,t.args[0]):"octstr"===e||"bitstr"===e?this._decodeStr(a,e):"ia5str"===e||"utf8str"===e||"bmpstr"===e?this._decodeStr(a,e):"numstr"===e||"printstr"===e?this._decodeStr(a,e):"objid"===e&&t.args?this._decodeObjid(a,t.args[0],t.args[1]):"objid"===e?this._decodeObjid(a,null,null):"gentime"===e||"utctime"===e?this._decodeTime(a,e):"null_"===e?this._decodeNull(a):"bool"===e?this._decodeBool(a):"int"===e||"enum"===e?this._decodeInt(a,t.args&&t.args[0]):null!==t.use?this._getUse(t.use,a._reporterState.obj)._decode(a):a.error("unknown tag: "+e)},f.prototype._getUse=function(e,a){var t=this._baseState;return t.useDecoder=this._use(e,a),n(null===t.useDecoder._baseState.parent),t.useDecoder=t.useDecoder._baseState.children[0],t.implicit!==t.useDecoder._baseState.implicit&&(t.useDecoder=t.useDecoder.clone(),t.useDecoder._baseState.implicit=t.implicit),t.useDecoder},f.prototype._decodeChoice=function(e){var a=this._baseState,t=null,f=!1;return Object.keys(a.choice).some(function(c){var r=e.save(),d=a.choice[c];try{var n=d._decode(e);if(e.isError(n))return!1;t={type:c,value:n},f=!0}catch(i){return e.restore(r),!1}return!0},this),f?t:e.error("Choice not matched")},f.prototype._createEncoderBuffer=function(e){return new r(e,this.reporter)},f.prototype._encode=function(e,a,t){var f=this._baseState;if(null===f["default"]||f["default"]!==e){var c=this._encodeValue(e,a,t);if(void 0!==c&&!this._skipDefault(c,a,t))return c}},f.prototype._encodeValue=function(e,a,t){var f=this._baseState;if(null===f.parent)return f.children[0]._encode(e,a||new c);var r=null;if(this.reporter=a,f.optional&&void 0===e){if(null===f["default"])return;e=f["default"]}var d=null,n=!1;if(f.any)r=this._createEncoderBuffer(e);else if(f.choice)r=this._encodeChoice(e,a);else if(f.contains)d=this._getUse(f.contains,t)._encode(e,a),n=!0;else if(f.children)d=f.children.map(function(t){if("null_"===t._baseState.tag)return t._encode(null,a,e);if(null===t._baseState.key)return a.error("Child should have a key");var f=a.enterKey(t._baseState.key);if("object"!=typeof e)return a.error("Child expected, but input is not object");var c=t._encode(e[t._baseState.key],a,e);return a.leaveKey(f),c},this).filter(function(e){return e}),d=this._createEncoderBuffer(d);else if("seqof"===f.tag||"setof"===f.tag){if(!f.args||1!==f.args.length)return a.error("Too many args for : "+f.tag);if(!Array.isArray(e))return a.error("seqof/setof, but data is not Array");var i=this.clone();i._baseState.implicit=null,d=this._createEncoderBuffer(e.map(function(t){var f=this._baseState;return this._getUse(f.args[0],e)._encode(t,a)},i))}else null!==f.use?r=this._getUse(f.use,t)._encode(e,a):(d=this._encodePrimitive(f.tag,e),n=!0);var r;if(!f.any&&null===f.choice){var b=null!==f.implicit?f.implicit:f.tag,o=null===f.implicit?"universal":"context";null===b?null===f.use&&a.error("Tag could be ommited only for .use()"):null===f.use&&(r=this._encodeComposite(b,n,o,d))}return null!==f.explicit&&(r=this._encodeComposite(f.explicit,!1,"context",r)),r},f.prototype._encodeChoice=function(e,a){var t=this._baseState,f=t.choice[e.type];return f||n(!1,e.type+" not found in "+JSON.stringify(Object.keys(t.choice))),f._encode(e.value,a)},f.prototype._encodePrimitive=function(e,a){var t=this._baseState;if("octstr"===e||"bitstr"===e||"ia5str"===e)return this._encodeStr(a,e);if("utf8str"===e||"bmpstr"===e)return this._encodeStr(a,e);if("numstr"===e||"printstr"===e)return this._encodeStr(a,e);if("objid"===e&&t.args)return this._encodeObjid(a,t.reverseArgs[0],t.args[1]);if("objid"===e)return this._encodeObjid(a,null,null);if("gentime"===e||"utctime"===e)return this._encodeTime(a,e);if("null_"===e)return this._encodeNull();if("int"===e||"enum"===e)return this._encodeInt(a,t.args&&t.reverseArgs[0]);if("bool"===e)return this._encodeBool(a);throw new Error("Unsupported tag: "+e)},f.prototype._isNumstr=function(e){return/^[0-9 ]*$/.test(e)},f.prototype._isPrintstr=function(e){return/^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(e)}},{"../base":169,"minimalistic-assert":180}],171:[function(e,a,t){function f(e){this._reporterState={obj:null,path:[],options:e||{},errors:[]}}function c(e,a){this.path=e,this.rethrow(a)}var r=e("inherits");t.Reporter=f,f.prototype.isError=function(e){return e instanceof c},f.prototype.save=function(){var e=this._reporterState;return{obj:e.obj,pathLen:e.path.length}},f.prototype.restore=function(e){var a=this._reporterState;a.obj=e.obj,a.path=a.path.slice(0,e.pathLen)},f.prototype.enterKey=function(e){return this._reporterState.path.push(e)},f.prototype.leaveKey=function(e,a,t){var f=this._reporterState;f.path=f.path.slice(0,e-1),null!==f.obj&&(f.obj[a]=t)},f.prototype.enterObject=function(){var e=this._reporterState,a=e.obj;return e.obj={},a},f.prototype.leaveObject=function(e){var a=this._reporterState,t=a.obj;return a.obj=e,t},f.prototype.error=function(e){var a,t=this._reporterState,f=e instanceof c;if(a=f?e:new c(t.path.map(function(e){return"["+JSON.stringify(e)+"]"}).join(""),e.message||e,e.stack),!t.options.partial)throw a;return f||t.errors.push(a),a},f.prototype.wrapResult=function(e){var a=this._reporterState;return a.options.partial?{result:this.isError(e)?null:e,errors:a.errors}:e},r(c,Error),c.prototype.rethrow=function(e){return this.message=e+" at: "+(this.path||"(shallow)"),Error.captureStackTrace(this,c),this}},{inherits:296}],172:[function(e,a,t){var f=e("../constants");t.tagClass={0:"universal",1:"application",2:"context",3:"private"},t.tagClassByName=f._reverse(t.tagClass),t.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},t.tagByName=f._reverse(t.tag)},{"../constants":173}],173:[function(e,a,t){var f=t;f._reverse=function(e){var a={};return Object.keys(e).forEach(function(t){(0|t)==t&&(t=0|t);var f=e[t];a[f]=t}),a},f.der=e("./der")},{"./der":172}],174:[function(e,a,t){function f(e){this.enc="der",this.name=e.name,this.entity=e,this.tree=new c,this.tree._init(e.body)}function c(e){b.Node.call(this,"der",e)}function r(e,a){var t=e.readUInt8(a);if(e.isError(t))return t;var f=s.tagClass[t>>6],c=0===(32&t);if(31===(31&t)){var r=t;for(t=0;128===(128&r);){if(r=e.readUInt8(a),e.isError(r))return r;t<<=7,t|=127&r}}else t&=31;var d=s.tag[t];return{cls:f,primitive:c,tag:t,tagStr:d}}function d(e,a,t){var f=e.readUInt8(t);if(e.isError(f))return f;if(!a&&128===f)return null;if(0===(128&f))return f;var c=127&f;if(c>=4)return e.error("length octect is too long");f=0;for(var r=0;c>r;r++){f<<=8;var d=e.readUInt8(t);if(e.isError(d))return d;f|=d}return f}var n=e("inherits"),i=e("../../asn1"),b=i.base,o=i.bignum,s=i.constants.der;a.exports=f,f.prototype.decode=function(e,a){return e instanceof b.DecoderBuffer||(e=new b.DecoderBuffer(e,a)),this.tree._decode(e,a)},n(c,b.Node),c.prototype._peekTag=function(e,a,t){if(e.isEmpty())return!1;var f=e.save(),c=r(e,'Failed to peek tag: "'+a+'"');return e.isError(c)?c:(e.restore(f),c.tag===a||c.tagStr===a||t)},c.prototype._decodeTag=function(e,a,t){var f=r(e,'Failed to decode tag of "'+a+'"');if(e.isError(f))return f;var c=d(e,f.primitive,'Failed to get length of "'+a+'"');if(e.isError(c))return c;if(!t&&f.tag!==a&&f.tagStr!==a&&f.tagStr+"of"!==a)return e.error('Failed to match tag: "'+a+'"');if(f.primitive||null!==c)return e.skip(c,'Failed to match body of: "'+a+'"');var n=e.save(),i=this._skipUntilEnd(e,'Failed to skip indefinite length body: "'+this.tag+'"');return e.isError(i)?i:(c=e.offset-n.offset,e.restore(n),e.skip(c,'Failed to match body of: "'+a+'"'))},c.prototype._skipUntilEnd=function(e,a){for(;;){var t=r(e,a);if(e.isError(t))return t;var f=d(e,t.primitive,a);if(e.isError(f))return f;var c;if(c=t.primitive||null!==f?e.skip(f):this._skipUntilEnd(e,a),e.isError(c))return c;if("end"===t.tagStr)break}},c.prototype._decodeList=function(e,a,t){for(var f=[];!e.isEmpty();){var c=this._peekTag(e,"end");if(e.isError(c))return c;var r=t.decode(e,"der");if(e.isError(r)&&c)break;f.push(r)}return f},c.prototype._decodeStr=function(e,a){if("octstr"===a)return e.raw();if("bitstr"===a){var t=e.readUInt8();return e.isError(t)?t:{unused:t,data:e.raw()}}if("ia5str"===a||"utf8str"===a)return e.raw().toString();if("numstr"===a){var f=e.raw().toString("ascii");return this._isNumstr(f)?f:e.error("Decoding of string type: numstr unsupported characters")}if("printstr"===a){var c=e.raw().toString("ascii");return this._isPrintstr(c)?c:e.error("Decoding of string type: printstr unsupported characters")}if("bmpstr"===a){var r=e.raw();if(r.length%2===1)return e.error("Decoding of string type: bmpstr length mismatch");for(var d="",n=0;nf?2e3+f:1900+f}return Date.UTC(f,c-1,r,d,n,i,0)},c.prototype._decodeNull=function(e){return null},c.prototype._decodeBool=function(e){var a=e.readUInt8();return e.isError(a)?a:0!==a},c.prototype._decodeInt=function(e,a){var t=e.raw(),f=new o(t);return a&&(f=a[f.toString(10)]||f),f},c.prototype._use=function(e,a){return"function"==typeof e&&(e=e(a)),e._getDecoder("der").tree}},{"../../asn1":166,inherits:296}],175:[function(e,a,t){var f=t;f.der=e("./der"),f.pem=e("./pem")},{"./der":174,"./pem":176}],176:[function(e,a,t){function f(e){d.call(this,e),this.enc="pem"}var c=e("inherits"),r=e("buffer").Buffer,d=(e("../../asn1"),e("./der"));c(f,d),a.exports=f,f.prototype.decode=function(e,a){for(var t=e.toString().split(/[\r\n]+/g),f=a.label.toUpperCase(),c=/^-----(BEGIN|END) ([^-]+)-----$/,n=-1,i=-1,b=0;be?"0"+e:e}function d(e,a,t,f){var c;if("seqof"===e?e="seq":"setof"===e&&(e="set"),s.tagByName.hasOwnProperty(e))c=s.tagByName[e];else{if("number"!=typeof e||(0|e)!==e)return f.error("Unknown tag: "+e);c=e}return c>=31?f.error("Multi-octet tag encoding unsupported"):(a||(c|=32),c|=s.tagClassByName[t||"universal"]<<6)}var n=e("inherits"),i=e("buffer").Buffer,b=e("../../asn1"),o=b.base,s=(b.bignum,b.constants.der);a.exports=f,f.prototype.encode=function(e,a){return this.tree._encode(e,a).join()},n(c,o.Node),c.prototype._encodeComposite=function(e,a,t,f){var c=d(e,a,t,this.reporter);if(f.length<128){var r=new i(2);return r[0]=c,r[1]=f.length,this._createEncoderBuffer([r,f])}for(var n=1,b=f.length;b>=256;b>>=8)n++;var r=new i(2+n);r[0]=c,r[1]=128|n;for(var b=1+n,o=f.length;o>0;b--,o>>=8)r[b]=255&o;return this._createEncoderBuffer([r,f])},c.prototype._encodeStr=function(e,a){if("octstr"===a)return this._createEncoderBuffer(e);if("bitstr"===a)return this._createEncoderBuffer([0|e.unused,e.data]);if("ia5str"===a||"utf8str"===a)return this._createEncoderBuffer(e);if("bmpstr"===a){for(var t=new i(2*e.length),f=0;f=40)return this.reporter.error("Second objid identifier OOB");e.splice(0,2,40*e[0]+e[1])}for(var c=0,f=0;f=128;r>>=7)c++}for(var d=new i(c),n=d.length-1,f=e.length-1;f>=0;f--){var r=e[f];for(d[n--]=127&r;(r>>=7)>0;)d[n--]=128|127&r}return this._createEncoderBuffer(d)},c.prototype._encodeTime=function(e,a){var t,f=new Date(e);return"gentime"===a?t=[r(f.getFullYear()),r(f.getUTCMonth()+1),r(f.getUTCDate()),r(f.getUTCHours()),r(f.getUTCMinutes()),r(f.getUTCSeconds()),"Z"].join(""):"utctime"===a?t=[r(f.getFullYear()%100),r(f.getUTCMonth()+1),r(f.getUTCDate()),r(f.getUTCHours()),r(f.getUTCMinutes()),r(f.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+a+" time is not supported yet"),this._encodeStr(t,"octstr")},c.prototype._encodeNull=function(){return this._createEncoderBuffer("")},c.prototype._encodeInt=function(e,a){if("string"==typeof e){if(!a)return this.reporter.error("String int or enum given, but no values map");if(!a.hasOwnProperty(e))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(e));e=a[e]}if("number"!=typeof e&&!i.isBuffer(e)){var t=e.toArray();!e.sign&&128&t[0]&&t.unshift(0),e=new i(t)}if(i.isBuffer(e)){var f=e.length;0===e.length&&f++;var c=new i(f);return e.copy(c),0===e.length&&(c[0]=0),this._createEncoderBuffer(c)}if(128>e)return this._createEncoderBuffer(e);if(256>e)return this._createEncoderBuffer([0,e]);for(var f=1,r=e;r>=256;r>>=8)f++;for(var c=new Array(f),r=c.length-1;r>=0;r--)c[r]=255&e,e>>=8;return 128&c[0]&&c.unshift(0),this._createEncoderBuffer(new i(c))},c.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},c.prototype._use=function(e,a){return"function"==typeof e&&(e=e(a)),e._getEncoder("der").tree},c.prototype._skipDefault=function(e,a,t){var f,c=this._baseState;if(null===c["default"])return!1;var r=e.join();if(void 0===c.defaultBuffer&&(c.defaultBuffer=this._encodeValue(c["default"],a,t).join()),r.length!==c.defaultBuffer.length)return!1;for(f=0;f0&&t.ishrn(f),t}function b(e,a){e=i(e,a),e=e.mod(a);var f=new t(e.toArray());if(f.lengthu&&(p=1),i=Math.min(e.length,s.length),e.length!==s.length&&(p=1),h=-1;++h=a)throw new Error("invalid sig")}var n=e("./curves"),i=e("elliptic"),b=e("parse-asn1"),o=e("bn.js"),s=i.ec;a.exports=f}).call(this,e("buffer").Buffer)},{"./curves":135,"bn.js":136,buffer:99,elliptic:138,"parse-asn1":165}],201:[function(e,a,t){(function(t){function f(e){this.curveType=n[e],this.curveType||(this.curveType={name:e}),this.curve=new r.ec(this.curveType.name),this.keys=void 0}function c(e,a,f){Array.isArray(e)||(e=e.toArray());var c=new t(e);if(f&&c.length>5]|=128<>>9<<4)+14]=a;for(var t=1732584193,f=-271733879,c=-1732584194,o=271733878,s=0;s>16)+(a>>16)+(t>>16);return f<<16|65535&t}function o(e,a){return e<>>32-a}var s=e("./helpers");a.exports=function(e){return s.hash(e,f,16)}},{"./helpers":228}],230:[function(e,a,t){arguments[4][120][0].apply(t,arguments)},{buffer:99,dup:120,inherits:296,stream:315,string_decoder:316}],231:[function(e,a,t){(function(e){function t(e){for(var a=[],t=0,f=0;t>>5]|=e[t]<<24-f%32;return a}function f(e){for(var a=[],t=0;t<32*e.length;t+=8)a.push(e[t>>>5]>>>24-t%32&255);return a}function c(e,a,t){for(var f=0;16>f;f++){var c=t+f,s=a[c];a[c]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}var v,y,w,_,S,A,I,E,k,x;A=v=e[0],I=y=e[1],E=w=e[2],k=_=e[3],x=S=e[4];var P;for(f=0;80>f;f+=1)P=v+a[t+u[f]]|0,P+=16>f?r(y,w,_)+g[0]:32>f?d(y,w,_)+g[1]:48>f?n(y,w,_)+g[2]:64>f?i(y,w,_)+g[3]:b(y,w,_)+g[4],P=0|P,P=o(P,l[f]),P=P+S|0,v=S,S=_,_=o(w,10),w=y,y=P,P=A+a[t+h[f]]|0,P+=16>f?b(I,E,k)+m[0]:32>f?i(I,E,k)+m[1]:48>f?n(I,E,k)+m[2]:64>f?d(I,E,k)+m[3]:r(I,E,k)+m[4],P=0|P,P=o(P,p[f]),P=P+x|0,A=x,x=k,k=o(E,10),E=I,I=P;P=e[1]+w+k|0,e[1]=e[2]+_+x|0,e[2]=e[3]+S+A|0,e[3]=e[4]+v+I|0,e[4]=e[0]+y+E|0,e[0]=P}function r(e,a,t){return e^a^t}function d(e,a,t){return e&a|~e&t}function n(e,a,t){return(e|~a)^t}function i(e,a,t){return e&t|a&~t}function b(e,a,t){return e^(a|~t)}function o(e,a){return e<>>32-a}function s(a){var r=[1732584193,4023233417,2562383102,271733878,3285377520];"string"==typeof a&&(a=new e(a,"utf8"));var d=t(a),n=8*a.length,i=8*a.length;d[n>>>5]|=128<<24-n%32,d[(n+64>>>9<<4)+14]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8);for(var b=0;bb;b++){var o=r[b];r[b]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}var s=f(r);return new e(s)}var u=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],h=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],l=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],p=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],g=[0,1518500249,1859775393,2400959708,2840853838],m=[1352829926,1548603684,1836072691,2053994217,0];a.exports=s}).call(this,e("buffer").Buffer)},{buffer:99}],232:[function(e,a,t){(function(e){function t(a,t){this._block=new e(a),this._finalSize=t,this._blockSize=a,this._len=0,this._s=0}t.prototype.update=function(a,t){"string"==typeof a&&(t=t||"utf8",a=new e(a,t));for(var f=this._len+=a.length,c=this._s||0,r=0,d=this._block;f>c;){for(var n=Math.min(a.length,r+this._blockSize-c%this._blockSize),i=n-r,b=0;i>b;b++)d[c%this._blockSize+b]=a[b+r];c+=i,r+=i,c%this._blockSize===0&&this._update(d)}return this._s=c,this},t.prototype.digest=function(e){var a=8*this._len;this._block[this._len%this._blockSize]=128,this._block.fill(0,this._len%this._blockSize+1),a%(8*this._blockSize)>=8*this._finalSize&&(this._update(this._block),this._block.fill(0)),this._block.writeInt32BE(a,this._blockSize-4);var t=this._update(this._block)||this._hash();return e?t.toString(e):t},t.prototype._update=function(){throw new Error("_update must be implemented by subclass")},a.exports=t}).call(this,e("buffer").Buffer)},{buffer:99}],233:[function(e,a,t){var t=a.exports=function(e){e=e.toLowerCase();var a=t[e];if(!a)throw new Error(e+" is not supported (we accept pull requests)");return new a};t.sha=e("./sha"),t.sha1=e("./sha1"),t.sha224=e("./sha224"),t.sha256=e("./sha256"),t.sha384=e("./sha384"),t.sha512=e("./sha512")},{"./sha":234,"./sha1":235,"./sha224":236,"./sha256":237,"./sha384":238,"./sha512":239}],234:[function(e,a,t){(function(t){function f(){this.init(),this._w=n,d.call(this,64,56)}function c(e,a){return e<>>32-a}var r=e("inherits"),d=e("./hash"),n=new Array(80);r(f,d),f.prototype.init=function(){return this._a=1732584193,this._b=-271733879,this._c=-1732584194,this._d=271733878,this._e=-1009589776,this},f.prototype._update=function(e){function a(){return r[s-3]^r[s-8]^r[s-14]^r[s-16]}function t(e,a){r[s]=e;var t=c(d,5)+a+o+e+f;o=b,b=i,i=c(n,30),n=d,d=t,s++}var f,r=this._w,d=this._a,n=this._b,i=this._c,b=this._d,o=this._e,s=0;for(f=1518500249;16>s;)t(e.readInt32BE(4*s),n&i|~n&b);for(;20>s;)t(a(),n&i|~n&b);for(f=1859775393;40>s;)t(a(),n^i^b);for(f=-1894007588;60>s;)t(a(),n&i|n&b|i&b);for(f=-899497514;80>s;)t(a(),n^i^b);this._a=d+this._a|0,this._b=n+this._b|0,this._c=i+this._c|0,this._d=b+this._d|0,this._e=o+this._e|0},f.prototype._hash=function(){var e=new t(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},a.exports=f}).call(this,e("buffer").Buffer)},{"./hash":232,buffer:99,inherits:296}],235:[function(e,a,t){(function(t){function f(){this.init(),this._w=n,d.call(this,64,56)}function c(e,a){return e<>>32-a}var r=e("inherits"),d=e("./hash"),n=new Array(80);r(f,d),f.prototype.init=function(){return this._a=1732584193,this._b=-271733879,this._c=-1732584194,this._d=271733878,this._e=-1009589776,this},f.prototype._update=function(e){function a(){return c(r[s-3]^r[s-8]^r[s-14]^r[s-16],1)}function t(e,a){r[s]=e;var t=c(d,5)+a+o+e+f;o=b,b=i,i=c(n,30),n=d,d=t,s++}var f,r=this._w,d=this._a,n=this._b,i=this._c,b=this._d,o=this._e,s=0;for(f=1518500249;16>s;)t(e.readInt32BE(4*s),n&i|~n&b);for(;20>s;)t(a(),n&i|~n&b);for(f=1859775393;40>s;)t(a(),n^i^b);for(f=-1894007588;60>s;)t(a(),n&i|n&b|i&b);for(f=-899497514;80>s;)t(a(),n^i^b);this._a=d+this._a|0,this._b=n+this._b|0,this._c=i+this._c|0,this._d=b+this._d|0,this._e=o+this._e|0},f.prototype._hash=function(){var e=new t(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},a.exports=f}).call(this,e("buffer").Buffer)},{"./hash":232,buffer:99,inherits:296}],236:[function(e,a,t){(function(t){function f(){this.init(),this._w=n,d.call(this,64,56)}var c=e("inherits"),r=e("./sha256"),d=e("./hash"),n=new Array(64);c(f,r),f.prototype.init=function(){return this._a=-1056596264,this._b=914150663,this._c=812702999,this._d=-150054599,this._e=-4191439,this._f=1750603025,this._g=1694076839,this._h=-1090891868,this},f.prototype._hash=function(){var e=new t(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},a.exports=f}).call(this,e("buffer").Buffer)},{"./hash":232,"./sha256":237,buffer:99,inherits:296}],237:[function(e,a,t){(function(t){function f(){this.init(),this._w=h,s.call(this,64,56)}function c(e,a,t){return t^e&(a^t)}function r(e,a,t){return e&a|t&(e|a)}function d(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function n(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function i(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}function b(e){return(e>>>17|e<<15)^(e>>>19|e<<13)^e>>>10}var o=e("inherits"),s=e("./hash"),u=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],h=new Array(64);o(f,s),f.prototype.init=function(){return this._a=1779033703,this._b=-1150833019,this._c=1013904242,this._d=-1521486534,this._e=1359893119,this._f=-1694144372,this._g=528734635,this._h=1541459225,this},f.prototype._update=function(e){function a(){return b(f[y-2])+f[y-7]+i(f[y-15])+f[y-16]}function t(e){f[y]=e;var a=v+n(p)+c(p,g,m)+u[y]+e,t=d(o)+r(o,s,h);v=m,m=g,g=p,p=l+a,l=h,h=s,s=o,o=a+t,y++}for(var f=this._w,o=0|this._a,s=0|this._b,h=0|this._c,l=0|this._d,p=0|this._e,g=0|this._f,m=0|this._g,v=0|this._h,y=0;16>y;)t(e.readInt32BE(4*y));for(;64>y;)t(a());this._a=o+this._a|0,this._b=s+this._b|0,this._c=h+this._c|0,this._d=l+this._d|0,this._e=p+this._e|0,this._f=g+this._f|0,this._g=m+this._g|0,this._h=v+this._h|0},f.prototype._hash=function(){var e=new t(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},a.exports=f}).call(this,e("buffer").Buffer)},{"./hash":232,buffer:99,inherits:296}],238:[function(e,a,t){(function(t){function f(){this.init(),this._w=n,d.call(this,128,112)}var c=e("inherits"),r=e("./sha512"),d=e("./hash"),n=new Array(160);c(f,r),f.prototype.init=function(){return this._a=-876896931,this._b=1654270250,this._c=-1856437926,this._d=355462360,this._e=1731405415,this._f=-1900787065,this._g=-619958771,this._h=1203062813,this._al=-1056596264,this._bl=914150663,this._cl=812702999,this._dl=-150054599,this._el=-4191439,this._fl=1750603025,this._gl=1694076839,this._hl=-1090891868,this},f.prototype._hash=function(){function e(e,t,f){a.writeInt32BE(e,f),a.writeInt32BE(t,f+4)}var a=new t(48);return e(this._a,this._al,0),e(this._b,this._bl,8),e(this._c,this._cl,16),e(this._d,this._dl,24),e(this._e,this._el,32),e(this._f,this._fl,40),a},a.exports=f}).call(this,e("buffer").Buffer)},{"./hash":232,"./sha512":239,buffer:99,inherits:296}],239:[function(e,a,t){(function(t){function f(){this.init(),this._w=p,h.call(this,128,112)}function c(e,a,t){return t^e&(a^t)}function r(e,a,t){return e&a|t&(e|a)}function d(e,a){return(e>>>28|a<<4)^(a>>>2|e<<30)^(a>>>7|e<<25)}function n(e,a){return(e>>>14|a<<18)^(e>>>18|a<<14)^(a>>>9|e<<23)}function i(e,a){return(e>>>1|a<<31)^(e>>>8|a<<24)^e>>>7}function b(e,a){return(e>>>1|a<<31)^(e>>>8|a<<24)^(e>>>7|a<<25)}function o(e,a){return(e>>>19|a<<13)^(a>>>29|e<<3)^e>>>6}function s(e,a){return(e>>>19|a<<13)^(a>>>29|e<<3)^(e>>>6|a<<26)}var u=e("inherits"),h=e("./hash"),l=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],p=new Array(160);u(f,h),f.prototype.init=function(){return this._a=1779033703,this._b=-1150833019,this._c=1013904242,this._d=-1521486534,this._e=1359893119,this._f=-1694144372,this._g=528734635,this._h=1541459225,this._al=-205731576,this._bl=-2067093701,this._cl=-23791573,this._dl=1595750129,this._el=-1377402159,this._fl=725511199,this._gl=-79577749,this._hl=327033209,this},f.prototype._update=function(e){function a(){var e=h[R-30],a=h[R-30+1],t=i(e,a),c=b(a,e);e=h[R-4],a=h[R-4+1];var r=o(e,a),d=s(a,e),n=h[R-14],l=h[R-14+1],p=h[R-32],g=h[R-32+1];u=c+l,f=t+n+(c>>>0>u>>>0?1:0),u+=d,f=f+r+(d>>>0>u>>>0?1:0),u+=g,f=f+p+(g>>>0>u>>>0?1:0)}function t(){h[R]=f,h[R+1]=u;var e=r(p,g,m),a=r(A,I,E),t=d(p,A),i=d(A,p),b=n(y,x),o=n(x,y),s=l[R],T=l[R+1],C=c(y,w,_),N=c(x,P,B),j=M+o,L=S+b+(M>>>0>j>>>0?1:0);j+=N,L=L+C+(N>>>0>j>>>0?1:0),j+=T,L=L+s+(T>>>0>j>>>0?1:0),j+=u,L=L+f+(u>>>0>j>>>0?1:0);var D=i+a,U=t+e+(i>>>0>D>>>0?1:0);S=_,M=B,_=w,B=P,w=y,P=x,x=k+j|0,y=v+L+(k>>>0>x>>>0?1:0)|0,v=m,k=E,m=g,E=I,g=p,I=A,A=j+D|0,p=L+U+(j>>>0>A>>>0?1:0)|0,O++,R+=2}for(var f,u,h=this._w,p=0|this._a,g=0|this._b,m=0|this._c,v=0|this._d,y=0|this._e,w=0|this._f,_=0|this._g,S=0|this._h,A=0|this._al,I=0|this._bl,E=0|this._cl,k=0|this._dl,x=0|this._el,P=0|this._fl,B=0|this._gl,M=0|this._hl,O=0,R=0;16>O;)f=e.readInt32BE(4*R),u=e.readInt32BE(4*R+4),t();for(;80>O;)a(),t();this._al=this._al+A|0,this._bl=this._bl+I|0,this._cl=this._cl+E|0,this._dl=this._dl+k|0,this._el=this._el+x|0,this._fl=this._fl+P|0,this._gl=this._gl+B|0,this._hl=this._hl+M|0,this._a=this._a+p+(this._al>>>0>>0?1:0)|0,this._b=this._b+g+(this._bl>>>0>>0?1:0)|0,this._c=this._c+m+(this._cl>>>0>>0?1:0)|0,this._d=this._d+v+(this._dl>>>0>>0?1:0)|0,this._e=this._e+y+(this._el>>>0>>0?1:0)|0,this._f=this._f+w+(this._fl>>>0

>>0?1:0)|0,this._h=this._h+S+(this._hl>>>0>>0?1:0)|0},n.prototype._hash=function(){function e(e,r,n){t.writeInt32BE(e,n),t.writeInt32BE(r,n+4)}var t=new r(64);return e(this._a,this._al,0),e(this._b,this._bl,8),e(this._c,this._cl,16),e(this._d,this._dl,24),e(this._e,this._el,32),e(this._f,this._fl,40),e(this._g,this._gl,48),e(this._h,this._hl,56),t},t.exports=n}).call(this,e("buffer").Buffer)},{"./hash":283,buffer:147,inherits:226}],291:[function(e,t,r){function n(){i.call(this)}t.exports=n;var i=e("events").EventEmitter,o=e("inherits");o(n,i),n.Readable=e("readable-stream/readable.js"),n.Writable=e("readable-stream/writable.js"),n.Duplex=e("readable-stream/duplex.js"),n.Transform=e("readable-stream/transform.js"),n.PassThrough=e("readable-stream/passthrough.js"),n.Stream=n,n.prototype.pipe=function(e,t){function r(t){e.writable&&!1===e.write(t)&&f.pause&&f.pause()}function n(){f.readable&&f.resume&&f.resume()}function o(){h||(h=!0,e.end())}function s(){h||(h=!0,"function"==typeof e.destroy&&e.destroy())}function a(e){if(u(),0===i.listenerCount(this,"error"))throw e}function u(){f.removeListener("data",r),e.removeListener("drain",n),f.removeListener("end",o),f.removeListener("close",s),f.removeListener("error",a),e.removeListener("error",a),f.removeListener("end",u),f.removeListener("close",u),e.removeListener("close",u)}var f=this;f.on("data",r),e.on("drain",n),e._isStdio||t&&t.end===!1||(f.on("end",o),f.on("close",s));var h=!1;return f.on("error",a),e.on("error",a),f.on("end",u),f.on("close",u),e.on("close",u),e.emit("pipe",f),e}},{events:217,inherits:226,"readable-stream/duplex.js":248,"readable-stream/passthrough.js":254,"readable-stream/readable.js":255,"readable-stream/transform.js":256,"readable-stream/writable.js":257}],292:[function(e,t,r){function n(e){if(e&&!u(e))throw new Error("Unknown encoding: "+e)}function i(e){return e.toString(this.encoding)}function o(e){this.charReceived=e.length%2,this.charLength=this.charReceived?2:0}function s(e){this.charReceived=e.length%3,this.charLength=this.charReceived?3:0}var a=e("buffer").Buffer,u=a.isEncoding||function(e){switch(e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}},f=r.StringDecoder=function(e){switch(this.encoding=(e||"utf8").toLowerCase().replace(/[-_]/,""),n(e),this.encoding){case"utf8":this.surrogateSize=3;break;case"ucs2":case"utf16le":this.surrogateSize=2,this.detectIncompleteChar=o;break;case"base64":this.surrogateSize=3,this.detectIncompleteChar=s;break;default:return void(this.write=i)}this.charBuffer=new a(6),this.charReceived=0,this.charLength=0};f.prototype.write=function(e){for(var t="";this.charLength;){var r=e.length>=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,r),this.charReceived+=r,this.charReceived=55296&&56319>=n)){if(this.charReceived=this.charLength=0,0===e.length)return t;break}this.charLength+=this.surrogateSize,t=""}this.detectIncompleteChar(e);var i=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,i),i-=this.charReceived),t+=e.toString(this.encoding,0,i);var i=t.length-1,n=t.charCodeAt(i);if(n>=55296&&56319>=n){var o=this.surrogateSize;return this.charLength+=o,this.charReceived+=o,this.charBuffer.copy(this.charBuffer,o,0,o),e.copy(this.charBuffer,0,0,o),t.substring(0,i)}return t},f.prototype.detectIncompleteChar=function(e){for(var t=e.length>=3?3:e.length;t>0;t--){ +var r=e[e.length-t];if(1==t&&r>>5==6){this.charLength=2;break}if(2>=t&&r>>4==14){this.charLength=3;break}if(3>=t&&r>>3==30){this.charLength=4;break}}this.charReceived=t},f.prototype.end=function(e){var t="";if(e&&e.length&&(t=this.write(e)),this.charReceived){var r=this.charReceived,n=this.charBuffer,i=this.encoding;t+=n.slice(0,r).toString(i)}return t}},{buffer:147}],293:[function(e,t,r){(function(r){!function(t){"use strict";function n(e,t,r,n){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r,e[t+4]=n>>24&255,e[t+5]=n>>16&255,e[t+6]=n>>8&255,e[t+7]=255&n}function i(e,t,r,n,i){var o,s=0;for(o=0;i>o;o++)s|=e[t+o]^r[n+o];return(1&s-1>>>8)-1}function o(e,t,r,n){return i(e,t,r,n,16)}function s(e,t,r,n){return i(e,t,r,n,32)}function a(e,t,r,n){for(var i,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,s=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,a=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,u=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,f=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,h=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,c=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,d=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,p=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,g=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,m=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,b=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,v=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,y=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,w=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,_=o,S=s,A=a,I=u,E=f,k=h,x=c,M=d,P=l,B=p,O=g,R=m,T=b,N=v,C=y,j=w,L=0;20>L;L+=2)i=_+T|0,E^=i<<7|i>>>25,i=E+_|0,P^=i<<9|i>>>23,i=P+E|0,T^=i<<13|i>>>19,i=T+P|0,_^=i<<18|i>>>14,i=k+S|0,B^=i<<7|i>>>25,i=B+k|0,N^=i<<9|i>>>23,i=N+B|0,S^=i<<13|i>>>19,i=S+N|0,k^=i<<18|i>>>14,i=O+x|0,C^=i<<7|i>>>25,i=C+O|0,A^=i<<9|i>>>23,i=A+C|0,x^=i<<13|i>>>19,i=x+A|0,O^=i<<18|i>>>14,i=j+R|0,I^=i<<7|i>>>25,i=I+j|0,M^=i<<9|i>>>23,i=M+I|0,R^=i<<13|i>>>19,i=R+M|0,j^=i<<18|i>>>14,i=_+I|0,S^=i<<7|i>>>25,i=S+_|0,A^=i<<9|i>>>23,i=A+S|0,I^=i<<13|i>>>19,i=I+A|0,_^=i<<18|i>>>14,i=k+E|0,x^=i<<7|i>>>25,i=x+k|0,M^=i<<9|i>>>23,i=M+x|0,E^=i<<13|i>>>19,i=E+M|0,k^=i<<18|i>>>14,i=O+B|0,R^=i<<7|i>>>25,i=R+O|0,P^=i<<9|i>>>23,i=P+R|0,B^=i<<13|i>>>19,i=B+P|0,O^=i<<18|i>>>14,i=j+C|0,T^=i<<7|i>>>25,i=T+j|0,N^=i<<9|i>>>23,i=N+T|0,C^=i<<13|i>>>19,i=C+N|0,j^=i<<18|i>>>14;_=_+o|0,S=S+s|0,A=A+a|0,I=I+u|0,E=E+f|0,k=k+h|0,x=x+c|0,M=M+d|0,P=P+l|0,B=B+p|0,O=O+g|0,R=R+m|0,T=T+b|0,N=N+v|0,C=C+y|0,j=j+w|0,e[0]=_>>>0&255,e[1]=_>>>8&255,e[2]=_>>>16&255,e[3]=_>>>24&255,e[4]=S>>>0&255,e[5]=S>>>8&255,e[6]=S>>>16&255,e[7]=S>>>24&255,e[8]=A>>>0&255,e[9]=A>>>8&255,e[10]=A>>>16&255,e[11]=A>>>24&255,e[12]=I>>>0&255,e[13]=I>>>8&255,e[14]=I>>>16&255,e[15]=I>>>24&255,e[16]=E>>>0&255,e[17]=E>>>8&255,e[18]=E>>>16&255,e[19]=E>>>24&255,e[20]=k>>>0&255,e[21]=k>>>8&255,e[22]=k>>>16&255,e[23]=k>>>24&255,e[24]=x>>>0&255,e[25]=x>>>8&255,e[26]=x>>>16&255,e[27]=x>>>24&255,e[28]=M>>>0&255,e[29]=M>>>8&255,e[30]=M>>>16&255,e[31]=M>>>24&255,e[32]=P>>>0&255,e[33]=P>>>8&255,e[34]=P>>>16&255,e[35]=P>>>24&255,e[36]=B>>>0&255,e[37]=B>>>8&255,e[38]=B>>>16&255,e[39]=B>>>24&255,e[40]=O>>>0&255,e[41]=O>>>8&255,e[42]=O>>>16&255,e[43]=O>>>24&255,e[44]=R>>>0&255,e[45]=R>>>8&255,e[46]=R>>>16&255,e[47]=R>>>24&255,e[48]=T>>>0&255,e[49]=T>>>8&255,e[50]=T>>>16&255,e[51]=T>>>24&255,e[52]=N>>>0&255,e[53]=N>>>8&255,e[54]=N>>>16&255,e[55]=N>>>24&255,e[56]=C>>>0&255,e[57]=C>>>8&255,e[58]=C>>>16&255,e[59]=C>>>24&255,e[60]=j>>>0&255,e[61]=j>>>8&255,e[62]=j>>>16&255,e[63]=j>>>24&255}function u(e,t,r,n){for(var i,o=255&n[0]|(255&n[1])<<8|(255&n[2])<<16|(255&n[3])<<24,s=255&r[0]|(255&r[1])<<8|(255&r[2])<<16|(255&r[3])<<24,a=255&r[4]|(255&r[5])<<8|(255&r[6])<<16|(255&r[7])<<24,u=255&r[8]|(255&r[9])<<8|(255&r[10])<<16|(255&r[11])<<24,f=255&r[12]|(255&r[13])<<8|(255&r[14])<<16|(255&r[15])<<24,h=255&n[4]|(255&n[5])<<8|(255&n[6])<<16|(255&n[7])<<24,c=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,d=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,l=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,p=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,g=255&n[8]|(255&n[9])<<8|(255&n[10])<<16|(255&n[11])<<24,m=255&r[16]|(255&r[17])<<8|(255&r[18])<<16|(255&r[19])<<24,b=255&r[20]|(255&r[21])<<8|(255&r[22])<<16|(255&r[23])<<24,v=255&r[24]|(255&r[25])<<8|(255&r[26])<<16|(255&r[27])<<24,y=255&r[28]|(255&r[29])<<8|(255&r[30])<<16|(255&r[31])<<24,w=255&n[12]|(255&n[13])<<8|(255&n[14])<<16|(255&n[15])<<24,_=o,S=s,A=a,I=u,E=f,k=h,x=c,M=d,P=l,B=p,O=g,R=m,T=b,N=v,C=y,j=w,L=0;20>L;L+=2)i=_+T|0,E^=i<<7|i>>>25,i=E+_|0,P^=i<<9|i>>>23,i=P+E|0,T^=i<<13|i>>>19,i=T+P|0,_^=i<<18|i>>>14,i=k+S|0,B^=i<<7|i>>>25,i=B+k|0,N^=i<<9|i>>>23,i=N+B|0,S^=i<<13|i>>>19,i=S+N|0,k^=i<<18|i>>>14,i=O+x|0,C^=i<<7|i>>>25,i=C+O|0,A^=i<<9|i>>>23,i=A+C|0,x^=i<<13|i>>>19,i=x+A|0,O^=i<<18|i>>>14,i=j+R|0,I^=i<<7|i>>>25,i=I+j|0,M^=i<<9|i>>>23,i=M+I|0,R^=i<<13|i>>>19,i=R+M|0,j^=i<<18|i>>>14,i=_+I|0,S^=i<<7|i>>>25,i=S+_|0,A^=i<<9|i>>>23,i=A+S|0,I^=i<<13|i>>>19,i=I+A|0,_^=i<<18|i>>>14,i=k+E|0,x^=i<<7|i>>>25,i=x+k|0,M^=i<<9|i>>>23,i=M+x|0,E^=i<<13|i>>>19,i=E+M|0,k^=i<<18|i>>>14,i=O+B|0,R^=i<<7|i>>>25,i=R+O|0,P^=i<<9|i>>>23,i=P+R|0,B^=i<<13|i>>>19,i=B+P|0,O^=i<<18|i>>>14,i=j+C|0,T^=i<<7|i>>>25,i=T+j|0,N^=i<<9|i>>>23,i=N+T|0,C^=i<<13|i>>>19,i=C+N|0,j^=i<<18|i>>>14;e[0]=_>>>0&255,e[1]=_>>>8&255,e[2]=_>>>16&255,e[3]=_>>>24&255,e[4]=k>>>0&255,e[5]=k>>>8&255,e[6]=k>>>16&255,e[7]=k>>>24&255,e[8]=O>>>0&255,e[9]=O>>>8&255,e[10]=O>>>16&255,e[11]=O>>>24&255,e[12]=j>>>0&255,e[13]=j>>>8&255,e[14]=j>>>16&255,e[15]=j>>>24&255,e[16]=x>>>0&255,e[17]=x>>>8&255,e[18]=x>>>16&255,e[19]=x>>>24&255,e[20]=M>>>0&255,e[21]=M>>>8&255,e[22]=M>>>16&255,e[23]=M>>>24&255,e[24]=P>>>0&255,e[25]=P>>>8&255,e[26]=P>>>16&255,e[27]=P>>>24&255,e[28]=B>>>0&255,e[29]=B>>>8&255,e[30]=B>>>16&255,e[31]=B>>>24&255}function f(e,t,r,n){a(e,t,r,n)}function h(e,t,r,n){u(e,t,r,n)}function c(e,t,r,n,i,o,s){var a,u,h=new Uint8Array(16),c=new Uint8Array(64);for(u=0;16>u;u++)h[u]=0;for(u=0;8>u;u++)h[u]=o[u];for(;i>=64;){for(f(c,h,s,le),u=0;64>u;u++)e[t+u]=r[n+u]^c[u];for(a=1,u=8;16>u;u++)a=a+(255&h[u])|0,h[u]=255&a,a>>>=8;i-=64,t+=64,n+=64}if(i>0)for(f(c,h,s,le),u=0;i>u;u++)e[t+u]=r[n+u]^c[u];return 0}function d(e,t,r,n,i){var o,s,a=new Uint8Array(16),u=new Uint8Array(64);for(s=0;16>s;s++)a[s]=0;for(s=0;8>s;s++)a[s]=n[s];for(;r>=64;){for(f(u,a,i,le),s=0;64>s;s++)e[t+s]=u[s];for(o=1,s=8;16>s;s++)o=o+(255&a[s])|0,a[s]=255&o,o>>>=8;r-=64,t+=64}if(r>0)for(f(u,a,i,le),s=0;r>s;s++)e[t+s]=u[s];return 0}function l(e,t,r,n,i){var o=new Uint8Array(32);h(o,n,i,le);for(var s=new Uint8Array(8),a=0;8>a;a++)s[a]=n[a+16];return d(e,t,r,s,o)}function p(e,t,r,n,i,o,s){var a=new Uint8Array(32);h(a,o,s,le);for(var u=new Uint8Array(8),f=0;8>f;f++)u[f]=o[f+16];return c(e,t,r,n,i,u,a)}function g(e,t,r,n,i,o){var s=new pe(o);return s.update(r,n,i),s.finish(e,t),0}function m(e,t,r,n,i,s){var a=new Uint8Array(16);return g(a,0,r,n,i,s),o(e,t,a,0)}function b(e,t,r,n,i){var o;if(32>r)return-1;for(p(e,0,t,0,r,n,i),g(e,16,e,32,r-32,e),o=0;16>o;o++)e[o]=0;return 0}function v(e,t,r,n,i){var o,s=new Uint8Array(32);if(32>r)return-1;if(l(s,0,32,n,i),0!==m(t,16,t,32,r-32,s))return-1;for(p(e,0,t,0,r,n,i),o=0;32>o;o++)e[o]=0;return 0}function y(e,t){var r;for(r=0;16>r;r++)e[r]=0|t[r]}function w(e){var t,r,n=1;for(t=0;16>t;t++)r=e[t]+n+65535,n=Math.floor(r/65536),e[t]=r-65536*n;e[0]+=n-1+37*(n-1)}function _(e,t,r){for(var n,i=~(r-1),o=0;16>o;o++)n=i&(e[o]^t[o]),e[o]^=n,t[o]^=n}function S(e,t){var r,n,i,o=te(),s=te();for(r=0;16>r;r++)s[r]=t[r];for(w(s),w(s),w(s),n=0;2>n;n++){for(o[0]=s[0]-65517,r=1;15>r;r++)o[r]=s[r]-65535-(o[r-1]>>16&1),o[r-1]&=65535;o[15]=s[15]-32767-(o[14]>>16&1),i=o[15]>>16&1,o[14]&=65535,_(s,o,1-i)}for(r=0;16>r;r++)e[2*r]=255&s[r],e[2*r+1]=s[r]>>8}function A(e,t){var r=new Uint8Array(32),n=new Uint8Array(32);return S(r,e),S(n,t),s(r,0,n,0)}function I(e){var t=new Uint8Array(32);return S(t,e),1&t[0]}function E(e,t){var r;for(r=0;16>r;r++)e[r]=t[2*r]+(t[2*r+1]<<8);e[15]&=32767}function k(e,t,r){for(var n=0;16>n;n++)e[n]=t[n]+r[n]}function x(e,t,r){for(var n=0;16>n;n++)e[n]=t[n]-r[n]}function M(e,t,r){var n,i,o=0,s=0,a=0,u=0,f=0,h=0,c=0,d=0,l=0,p=0,g=0,m=0,b=0,v=0,y=0,w=0,_=0,S=0,A=0,I=0,E=0,k=0,x=0,M=0,P=0,B=0,O=0,R=0,T=0,N=0,C=0,j=r[0],L=r[1],D=r[2],z=r[3],U=r[4],K=r[5],F=r[6],H=r[7],q=r[8],V=r[9],Y=r[10],G=r[11],W=r[12],X=r[13],Z=r[14],J=r[15];n=t[0],o+=n*j,s+=n*L,a+=n*D,u+=n*z,f+=n*U,h+=n*K,c+=n*F,d+=n*H,l+=n*q,p+=n*V,g+=n*Y,m+=n*G,b+=n*W,v+=n*X,y+=n*Z,w+=n*J,n=t[1],s+=n*j,a+=n*L,u+=n*D,f+=n*z,h+=n*U,c+=n*K,d+=n*F,l+=n*H,p+=n*q,g+=n*V,m+=n*Y,b+=n*G,v+=n*W,y+=n*X,w+=n*Z,_+=n*J,n=t[2],a+=n*j,u+=n*L,f+=n*D,h+=n*z,c+=n*U,d+=n*K,l+=n*F,p+=n*H,g+=n*q,m+=n*V,b+=n*Y,v+=n*G,y+=n*W,w+=n*X,_+=n*Z,S+=n*J,n=t[3],u+=n*j,f+=n*L,h+=n*D,c+=n*z,d+=n*U,l+=n*K,p+=n*F,g+=n*H,m+=n*q,b+=n*V,v+=n*Y,y+=n*G,w+=n*W,_+=n*X,S+=n*Z,A+=n*J,n=t[4],f+=n*j,h+=n*L,c+=n*D,d+=n*z,l+=n*U,p+=n*K,g+=n*F,m+=n*H,b+=n*q,v+=n*V,y+=n*Y,w+=n*G,_+=n*W,S+=n*X,A+=n*Z,I+=n*J,n=t[5],h+=n*j,c+=n*L,d+=n*D,l+=n*z,p+=n*U,g+=n*K,m+=n*F,b+=n*H,v+=n*q,y+=n*V,w+=n*Y,_+=n*G,S+=n*W,A+=n*X,I+=n*Z,E+=n*J,n=t[6],c+=n*j,d+=n*L,l+=n*D,p+=n*z,g+=n*U,m+=n*K,b+=n*F,v+=n*H,y+=n*q,w+=n*V,_+=n*Y,S+=n*G,A+=n*W,I+=n*X,E+=n*Z,k+=n*J,n=t[7],d+=n*j,l+=n*L,p+=n*D,g+=n*z,m+=n*U,b+=n*K,v+=n*F,y+=n*H,w+=n*q,_+=n*V,S+=n*Y,A+=n*G,I+=n*W,E+=n*X,k+=n*Z,x+=n*J,n=t[8],l+=n*j,p+=n*L,g+=n*D,m+=n*z,b+=n*U,v+=n*K,y+=n*F,w+=n*H,_+=n*q,S+=n*V,A+=n*Y,I+=n*G,E+=n*W,k+=n*X,x+=n*Z,M+=n*J,n=t[9],p+=n*j,g+=n*L,m+=n*D,b+=n*z,v+=n*U,y+=n*K,w+=n*F,_+=n*H,S+=n*q,A+=n*V,I+=n*Y,E+=n*G,k+=n*W,x+=n*X,M+=n*Z,P+=n*J,n=t[10],g+=n*j,m+=n*L,b+=n*D,v+=n*z,y+=n*U,w+=n*K,_+=n*F,S+=n*H,A+=n*q,I+=n*V,E+=n*Y,k+=n*G,x+=n*W,M+=n*X,P+=n*Z,B+=n*J,n=t[11],m+=n*j,b+=n*L,v+=n*D,y+=n*z,w+=n*U,_+=n*K,S+=n*F,A+=n*H,I+=n*q,E+=n*V,k+=n*Y,x+=n*G,M+=n*W,P+=n*X,B+=n*Z,O+=n*J,n=t[12],b+=n*j,v+=n*L,y+=n*D,w+=n*z,_+=n*U,S+=n*K,A+=n*F,I+=n*H,E+=n*q,k+=n*V,x+=n*Y,M+=n*G,P+=n*W,B+=n*X,O+=n*Z,R+=n*J,n=t[13],v+=n*j,y+=n*L,w+=n*D,_+=n*z,S+=n*U,A+=n*K,I+=n*F,E+=n*H,k+=n*q,x+=n*V,M+=n*Y,P+=n*G,B+=n*W,O+=n*X,R+=n*Z,T+=n*J,n=t[14],y+=n*j,w+=n*L,_+=n*D,S+=n*z,A+=n*U,I+=n*K,E+=n*F,k+=n*H,x+=n*q,M+=n*V,P+=n*Y,B+=n*G,O+=n*W,R+=n*X,T+=n*Z,N+=n*J,n=t[15],w+=n*j,_+=n*L,S+=n*D,A+=n*z,I+=n*U,E+=n*K,k+=n*F,x+=n*H,M+=n*q,P+=n*V,B+=n*Y,O+=n*G,R+=n*W,T+=n*X,N+=n*Z,C+=n*J,o+=38*_,s+=38*S,a+=38*A,u+=38*I,f+=38*E,h+=38*k,c+=38*x,d+=38*M,l+=38*P,p+=38*B,g+=38*O,m+=38*R,b+=38*T,v+=38*N,y+=38*C,i=1,n=o+i+65535,i=Math.floor(n/65536),o=n-65536*i,n=s+i+65535,i=Math.floor(n/65536),s=n-65536*i,n=a+i+65535,i=Math.floor(n/65536),a=n-65536*i,n=u+i+65535,i=Math.floor(n/65536),u=n-65536*i,n=f+i+65535,i=Math.floor(n/65536),f=n-65536*i,n=h+i+65535,i=Math.floor(n/65536),h=n-65536*i,n=c+i+65535,i=Math.floor(n/65536),c=n-65536*i,n=d+i+65535,i=Math.floor(n/65536),d=n-65536*i,n=l+i+65535,i=Math.floor(n/65536),l=n-65536*i,n=p+i+65535,i=Math.floor(n/65536),p=n-65536*i,n=g+i+65535,i=Math.floor(n/65536),g=n-65536*i,n=m+i+65535,i=Math.floor(n/65536),m=n-65536*i,n=b+i+65535,i=Math.floor(n/65536),b=n-65536*i,n=v+i+65535,i=Math.floor(n/65536),v=n-65536*i,n=y+i+65535,i=Math.floor(n/65536),y=n-65536*i,n=w+i+65535,i=Math.floor(n/65536),w=n-65536*i,o+=i-1+37*(i-1),i=1,n=o+i+65535,i=Math.floor(n/65536),o=n-65536*i,n=s+i+65535,i=Math.floor(n/65536),s=n-65536*i,n=a+i+65535,i=Math.floor(n/65536),a=n-65536*i,n=u+i+65535,i=Math.floor(n/65536),u=n-65536*i,n=f+i+65535,i=Math.floor(n/65536),f=n-65536*i,n=h+i+65535,i=Math.floor(n/65536),h=n-65536*i,n=c+i+65535,i=Math.floor(n/65536),c=n-65536*i,n=d+i+65535,i=Math.floor(n/65536),d=n-65536*i,n=l+i+65535,i=Math.floor(n/65536),l=n-65536*i,n=p+i+65535,i=Math.floor(n/65536),p=n-65536*i,n=g+i+65535,i=Math.floor(n/65536),g=n-65536*i,n=m+i+65535,i=Math.floor(n/65536),m=n-65536*i,n=b+i+65535,i=Math.floor(n/65536),b=n-65536*i,n=v+i+65535,i=Math.floor(n/65536),v=n-65536*i,n=y+i+65535,i=Math.floor(n/65536),y=n-65536*i,n=w+i+65535,i=Math.floor(n/65536),w=n-65536*i,o+=i-1+37*(i-1),e[0]=o,e[1]=s,e[2]=a,e[3]=u,e[4]=f,e[5]=h,e[6]=c,e[7]=d,e[8]=l,e[9]=p,e[10]=g,e[11]=m,e[12]=b,e[13]=v,e[14]=y,e[15]=w}function P(e,t){M(e,t,t)}function B(e,t){var r,n=te();for(r=0;16>r;r++)n[r]=t[r];for(r=253;r>=0;r--)P(n,n),2!==r&&4!==r&&M(n,n,t);for(r=0;16>r;r++)e[r]=n[r]}function O(e,t){var r,n=te();for(r=0;16>r;r++)n[r]=t[r];for(r=250;r>=0;r--)P(n,n),1!==r&&M(n,n,t);for(r=0;16>r;r++)e[r]=n[r]}function R(e,t,r){var n,i,o=new Uint8Array(32),s=new Float64Array(80),a=te(),u=te(),f=te(),h=te(),c=te(),d=te();for(i=0;31>i;i++)o[i]=t[i];for(o[31]=127&t[31]|64,o[0]&=248,E(s,r),i=0;16>i;i++)u[i]=s[i],h[i]=a[i]=f[i]=0;for(a[0]=h[0]=1,i=254;i>=0;--i)n=o[i>>>3]>>>(7&i)&1,_(a,u,n),_(f,h,n),k(c,a,f),x(a,a,f),k(f,u,h),x(u,u,h),P(h,c),P(d,a),M(a,f,a),M(f,u,c),k(c,a,f),x(a,a,f),P(u,a),x(f,h,d),M(a,f,ae),k(a,a,h),M(f,f,a),M(a,h,d),M(h,u,s),P(u,c),_(a,u,n),_(f,h,n);for(i=0;16>i;i++)s[i+16]=a[i],s[i+32]=f[i],s[i+48]=u[i],s[i+64]=h[i];var l=s.subarray(32),p=s.subarray(16);return B(l,l),M(p,p,l),S(e,p),0}function T(e,t){return R(e,t,ie)}function N(e,t){return re(t,32),T(e,t)}function C(e,t,r){var n=new Uint8Array(32);return R(n,r,t),h(e,ne,n,le)}function j(e,t,r,n,i,o){var s=new Uint8Array(32);return C(s,i,o),ge(e,t,r,n,s)}function L(e,t,r,n,i,o){var s=new Uint8Array(32);return C(s,i,o),me(e,t,r,n,s)}function D(e,t,r,n){for(var i,o,s,a,u,f,h,c,d,l,p,g,m,b,v,y,w,_,S,A,I,E,k,x,M,P,B=new Int32Array(16),O=new Int32Array(16),R=e[0],T=e[1],N=e[2],C=e[3],j=e[4],L=e[5],D=e[6],z=e[7],U=t[0],K=t[1],F=t[2],H=t[3],q=t[4],V=t[5],Y=t[6],G=t[7],W=0;n>=128;){for(S=0;16>S;S++)A=8*S+W,B[S]=r[A+0]<<24|r[A+1]<<16|r[A+2]<<8|r[A+3],O[S]=r[A+4]<<24|r[A+5]<<16|r[A+6]<<8|r[A+7];for(S=0;80>S;S++)if(i=R,o=T,s=N,a=C,u=j,f=L,h=D,c=z,d=U,l=K,p=F,g=H,m=q,b=V,v=Y,y=G,I=z,E=G,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=(j>>>14|q<<18)^(j>>>18|q<<14)^(q>>>9|j<<23),E=(q>>>14|j<<18)^(q>>>18|j<<14)^(j>>>9|q<<23),k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,I=j&L^~j&D,E=q&V^~q&Y,k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,I=be[2*S],E=be[2*S+1],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,I=B[S%16],E=O[S%16],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,w=65535&M|P<<16,_=65535&k|x<<16,I=w,E=_,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=(R>>>28|U<<4)^(U>>>2|R<<30)^(U>>>7|R<<25),E=(U>>>28|R<<4)^(R>>>2|U<<30)^(R>>>7|U<<25),k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,I=R&T^R&N^T&N,E=U&K^U&F^K&F,k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,c=65535&M|P<<16,y=65535&k|x<<16,I=a,E=g,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=w,E=_,k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,a=65535&M|P<<16,g=65535&k|x<<16,T=i,N=o,C=s,j=a,L=u,D=f,z=h,R=c,K=d,F=l,H=p,q=g,V=m,Y=b,G=v,U=y,S%16===15)for(A=0;16>A;A++)I=B[A],E=O[A],k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=B[(A+9)%16],E=O[(A+9)%16],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,w=B[(A+1)%16],_=O[(A+1)%16],I=(w>>>1|_<<31)^(w>>>8|_<<24)^w>>>7,E=(_>>>1|w<<31)^(_>>>8|w<<24)^(_>>>7|w<<25),k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,w=B[(A+14)%16],_=O[(A+14)%16],I=(w>>>19|_<<13)^(_>>>29|w<<3)^w>>>6,E=(_>>>19|w<<13)^(w>>>29|_<<3)^(_>>>6|w<<26),k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,B[A]=65535&M|P<<16,O[A]=65535&k|x<<16;I=R,E=U,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=e[0],E=t[0],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,e[0]=R=65535&M|P<<16,t[0]=U=65535&k|x<<16,I=T,E=K,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=e[1],E=t[1],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,e[1]=T=65535&M|P<<16,t[1]=K=65535&k|x<<16,I=N,E=F,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=e[2],E=t[2],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,e[2]=N=65535&M|P<<16,t[2]=F=65535&k|x<<16,I=C,E=H,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=e[3],E=t[3],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,e[3]=C=65535&M|P<<16,t[3]=H=65535&k|x<<16,I=j,E=q,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=e[4],E=t[4],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,e[4]=j=65535&M|P<<16,t[4]=q=65535&k|x<<16,I=L,E=V,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=e[5],E=t[5],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,e[5]=L=65535&M|P<<16,t[5]=V=65535&k|x<<16,I=D,E=Y,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=e[6],E=t[6],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,e[6]=D=65535&M|P<<16,t[6]=Y=65535&k|x<<16,I=z,E=G,k=65535&E,x=E>>>16,M=65535&I,P=I>>>16,I=e[7],E=t[7],k+=65535&E,x+=E>>>16,M+=65535&I,P+=I>>>16,x+=k>>>16,M+=x>>>16,P+=M>>>16,e[7]=z=65535&M|P<<16,t[7]=G=65535&k|x<<16,W+=128,n-=128}return n}function z(e,t,r){var i,o=new Int32Array(8),s=new Int32Array(8),a=new Uint8Array(256),u=r;for(o[0]=1779033703,o[1]=3144134277,o[2]=1013904242,o[3]=2773480762,o[4]=1359893119,o[5]=2600822924,o[6]=528734635,o[7]=1541459225,s[0]=4089235720,s[1]=2227873595,s[2]=4271175723,s[3]=1595750129,s[4]=2917565137,s[5]=725511199,s[6]=4215389547,s[7]=327033209,D(o,s,t,r),r%=128,i=0;r>i;i++)a[i]=t[u-r+i];for(a[r]=128,r=256-128*(112>r?1:0),a[r-9]=0,n(a,r-8,u/536870912|0,u<<3),D(o,s,a,r),i=0;8>i;i++)n(e,8*i,o[i],s[i]);return 0}function U(e,t){var r=te(),n=te(),i=te(),o=te(),s=te(),a=te(),u=te(),f=te(),h=te();x(r,e[1],e[0]),x(h,t[1],t[0]),M(r,r,h),k(n,e[0],e[1]),k(h,t[0],t[1]),M(n,n,h),M(i,e[3],t[3]),M(i,i,fe),M(o,e[2],t[2]),k(o,o,o),x(s,n,r),x(a,o,i),k(u,o,i),k(f,n,r),M(e[0],s,a),M(e[1],f,u),M(e[2],u,a),M(e[3],s,f)}function K(e,t,r){var n;for(n=0;4>n;n++)_(e[n],t[n],r)}function F(e,t){var r=te(),n=te(),i=te();B(i,t[2]),M(r,t[0],i),M(n,t[1],i),S(e,n),e[31]^=I(r)<<7}function H(e,t,r){var n,i;for(y(e[0],oe),y(e[1],se),y(e[2],se),y(e[3],oe),i=255;i>=0;--i)n=r[i/8|0]>>(7&i)&1,K(e,t,n),U(t,e),U(e,e),K(e,t,n)}function q(e,t){var r=[te(),te(),te(),te()];y(r[0],he),y(r[1],ce),y(r[2],se),M(r[3],he,ce),H(e,r,t)}function V(e,t,r){var n,i=new Uint8Array(64),o=[te(),te(),te(),te()];for(r||re(t,32),z(i,t,32),i[0]&=248,i[31]&=127,i[31]|=64,q(o,i),F(e,o),n=0;32>n;n++)t[n+32]=e[n];return 0}function Y(e,t){var r,n,i,o;for(n=63;n>=32;--n){for(r=0,i=n-32,o=n-12;o>i;++i)t[i]+=r-16*t[n]*ve[i-(n-32)],r=t[i]+128>>8,t[i]-=256*r;t[i]+=r,t[n]=0}for(r=0,i=0;32>i;i++)t[i]+=r-(t[31]>>4)*ve[i],r=t[i]>>8,t[i]&=255;for(i=0;32>i;i++)t[i]-=r*ve[i];for(n=0;32>n;n++)t[n+1]+=t[n]>>8,e[n]=255&t[n]}function G(e){var t,r=new Float64Array(64);for(t=0;64>t;t++)r[t]=e[t];for(t=0;64>t;t++)e[t]=0;Y(e,r)}function W(e,t,r,n){var i,o,s=new Uint8Array(64),a=new Uint8Array(64),u=new Uint8Array(64),f=new Float64Array(64),h=[te(),te(),te(),te()];z(s,n,32),s[0]&=248,s[31]&=127,s[31]|=64;var c=r+64;for(i=0;r>i;i++)e[64+i]=t[i];for(i=0;32>i;i++)e[32+i]=s[32+i];for(z(u,e.subarray(32),r+32),G(u),q(h,u),F(e,h),i=32;64>i;i++)e[i]=n[i];for(z(a,e,r+64),G(a),i=0;64>i;i++)f[i]=0;for(i=0;32>i;i++)f[i]=u[i];for(i=0;32>i;i++)for(o=0;32>o;o++)f[i+o]+=a[i]*s[o];return Y(e.subarray(32),f),c}function X(e,t){var r=te(),n=te(),i=te(),o=te(),s=te(),a=te(),u=te();return y(e[2],se),E(e[1],t),P(i,e[1]),M(o,i,ue),x(i,i,e[2]),k(o,e[2],o),P(s,o),P(a,s),M(u,a,s),M(r,u,i),M(r,r,o),O(r,r),M(r,r,i),M(r,r,o),M(r,r,o),M(e[0],r,o),P(n,e[0]),M(n,n,o),A(n,i)&&M(e[0],e[0],de),P(n,e[0]),M(n,n,o),A(n,i)?-1:(I(e[0])===t[31]>>7&&x(e[0],oe,e[0]),M(e[3],e[0],e[1]),0)}function Z(e,t,r,n){var i,o,a=new Uint8Array(32),u=new Uint8Array(64),f=[te(),te(),te(),te()],h=[te(),te(),te(),te()];if(o=-1,64>r)return-1;if(X(h,n))return-1;for(i=0;r>i;i++)e[i]=t[i];for(i=0;32>i;i++)e[i+32]=n[i];if(z(u,e,r),G(u),H(f,h,u),q(h,t.subarray(32)),U(f,h),F(a,f),r-=64,s(t,0,a,0)){for(i=0;r>i;i++)e[i]=0;return-1}for(i=0;r>i;i++)e[i]=t[i+64];return o=r}function J(e,t){if(e.length!==ye)throw new Error("bad key size");if(t.length!==we)throw new Error("bad nonce size")}function $(e,t){if(e.length!==Ee)throw new Error("bad public key size");if(t.length!==ke)throw new Error("bad secret key size")}function Q(){var e,t;for(t=0;t>>13|r<<3),n=255&e[4]|(255&e[5])<<8,this.r[2]=7939&(r>>>10|n<<6),i=255&e[6]|(255&e[7])<<8,this.r[3]=8191&(n>>>7|i<<9),o=255&e[8]|(255&e[9])<<8,this.r[4]=255&(i>>>4|o<<12),this.r[5]=o>>>1&8190,s=255&e[10]|(255&e[11])<<8,this.r[6]=8191&(o>>>14|s<<2),a=255&e[12]|(255&e[13])<<8,this.r[7]=8065&(s>>>11|a<<5),u=255&e[14]|(255&e[15])<<8,this.r[8]=8191&(a>>>8|u<<8),this.r[9]=u>>>5&127,this.pad[0]=255&e[16]|(255&e[17])<<8,this.pad[1]=255&e[18]|(255&e[19])<<8,this.pad[2]=255&e[20]|(255&e[21])<<8,this.pad[3]=255&e[22]|(255&e[23])<<8,this.pad[4]=255&e[24]|(255&e[25])<<8,this.pad[5]=255&e[26]|(255&e[27])<<8,this.pad[6]=255&e[28]|(255&e[29])<<8,this.pad[7]=255&e[30]|(255&e[31])<<8};pe.prototype.blocks=function(e,t,r){for(var n,i,o,s,a,u,f,h,c,d,l,p,g,m,b,v,y,w,_,S=this.fin?0:2048,A=this.h[0],I=this.h[1],E=this.h[2],k=this.h[3],x=this.h[4],M=this.h[5],P=this.h[6],B=this.h[7],O=this.h[8],R=this.h[9],T=this.r[0],N=this.r[1],C=this.r[2],j=this.r[3],L=this.r[4],D=this.r[5],z=this.r[6],U=this.r[7],K=this.r[8],F=this.r[9];r>=16;)n=255&e[t+0]|(255&e[t+1])<<8,A+=8191&n,i=255&e[t+2]|(255&e[t+3])<<8,I+=8191&(n>>>13|i<<3),o=255&e[t+4]|(255&e[t+5])<<8,E+=8191&(i>>>10|o<<6),s=255&e[t+6]|(255&e[t+7])<<8,k+=8191&(o>>>7|s<<9),a=255&e[t+8]|(255&e[t+9])<<8,x+=8191&(s>>>4|a<<12),M+=a>>>1&8191,u=255&e[t+10]|(255&e[t+11])<<8,P+=8191&(a>>>14|u<<2),f=255&e[t+12]|(255&e[t+13])<<8,B+=8191&(u>>>11|f<<5),h=255&e[t+14]|(255&e[t+15])<<8,O+=8191&(f>>>8|h<<8),R+=h>>>5|S,c=0,d=c,d+=A*T,d+=I*(5*F),d+=E*(5*K),d+=k*(5*U),d+=x*(5*z),c=d>>>13,d&=8191,d+=M*(5*D),d+=P*(5*L),d+=B*(5*j),d+=O*(5*C),d+=R*(5*N),c+=d>>>13,d&=8191,l=c,l+=A*N,l+=I*T,l+=E*(5*F),l+=k*(5*K),l+=x*(5*U),c=l>>>13,l&=8191,l+=M*(5*z),l+=P*(5*D),l+=B*(5*L),l+=O*(5*j),l+=R*(5*C),c+=l>>>13,l&=8191,p=c,p+=A*C,p+=I*N,p+=E*T,p+=k*(5*F),p+=x*(5*K),c=p>>>13,p&=8191,p+=M*(5*U),p+=P*(5*z),p+=B*(5*D),p+=O*(5*L),p+=R*(5*j),c+=p>>>13,p&=8191,g=c,g+=A*j,g+=I*C,g+=E*N,g+=k*T,g+=x*(5*F),c=g>>>13,g&=8191,g+=M*(5*K),g+=P*(5*U),g+=B*(5*z),g+=O*(5*D),g+=R*(5*L),c+=g>>>13,g&=8191,m=c,m+=A*L,m+=I*j,m+=E*C,m+=k*N,m+=x*T,c=m>>>13,m&=8191,m+=M*(5*F),m+=P*(5*K),m+=B*(5*U),m+=O*(5*z),m+=R*(5*D),c+=m>>>13,m&=8191,b=c,b+=A*D,b+=I*L,b+=E*j,b+=k*C,b+=x*N,c=b>>>13,b&=8191,b+=M*T,b+=P*(5*F),b+=B*(5*K),b+=O*(5*U),b+=R*(5*z),c+=b>>>13,b&=8191,v=c,v+=A*z,v+=I*D,v+=E*L,v+=k*j,v+=x*C,c=v>>>13,v&=8191,v+=M*N,v+=P*T,v+=B*(5*F),v+=O*(5*K),v+=R*(5*U),c+=v>>>13,v&=8191,y=c,y+=A*U,y+=I*z,y+=E*D,y+=k*L,y+=x*j,c=y>>>13,y&=8191,y+=M*C,y+=P*N,y+=B*T,y+=O*(5*F),y+=R*(5*K),c+=y>>>13,y&=8191,w=c,w+=A*K,w+=I*U,w+=E*z,w+=k*D,w+=x*L,c=w>>>13,w&=8191,w+=M*j,w+=P*C,w+=B*N,w+=O*T,w+=R*(5*F),c+=w>>>13,w&=8191,_=c,_+=A*F,_+=I*K,_+=E*U,_+=k*z,_+=x*D,c=_>>>13,_&=8191,_+=M*L,_+=P*j,_+=B*C,_+=O*N,_+=R*T,c+=_>>>13,_&=8191,c=(c<<2)+c|0,c=c+d|0,d=8191&c,c>>>=13,l+=c,A=d,I=l,E=p,k=g,x=m,M=b,P=v,B=y,O=w,R=_,t+=16,r-=16;this.h[0]=A,this.h[1]=I,this.h[2]=E,this.h[3]=k,this.h[4]=x,this.h[5]=M,this.h[6]=P,this.h[7]=B,this.h[8]=O,this.h[9]=R},pe.prototype.finish=function(e,t){var r,n,i,o,s=new Uint16Array(10);if(this.leftover){for(o=this.leftover,this.buffer[o++]=1;16>o;o++)this.buffer[o]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(r=this.h[1]>>>13,this.h[1]&=8191,o=2;10>o;o++)this.h[o]+=r,r=this.h[o]>>>13,this.h[o]&=8191;for(this.h[0]+=5*r,r=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=r,r=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=r,s[0]=this.h[0]+5,r=s[0]>>>13,s[0]&=8191,o=1;10>o;o++)s[o]=this.h[o]+r,r=s[o]>>>13,s[o]&=8191;for(s[9]-=8192,n=(s[9]>>>15)-1,o=0;10>o;o++)s[o]&=n;for(n=~n,o=0;10>o;o++)this.h[o]=this.h[o]&n|s[o];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),i=this.h[0]+this.pad[0],this.h[0]=65535&i,o=1;8>o;o++)i=(this.h[o]+this.pad[o]|0)+(i>>>16)|0,this.h[o]=65535&i;e[t+0]=this.h[0]>>>0&255,e[t+1]=this.h[0]>>>8&255,e[t+2]=this.h[1]>>>0&255,e[t+3]=this.h[1]>>>8&255,e[t+4]=this.h[2]>>>0&255,e[t+5]=this.h[2]>>>8&255,e[t+6]=this.h[3]>>>0&255,e[t+7]=this.h[3]>>>8&255,e[t+8]=this.h[4]>>>0&255,e[t+9]=this.h[4]>>>8&255,e[t+10]=this.h[5]>>>0&255,e[t+11]=this.h[5]>>>8&255,e[t+12]=this.h[6]>>>0&255,e[t+13]=this.h[6]>>>8&255,e[t+14]=this.h[7]>>>0&255,e[t+15]=this.h[7]>>>8&255},pe.prototype.update=function(e,t,r){var n,i;if(this.leftover){for(i=16-this.leftover,i>r&&(i=r),n=0;i>n;n++)this.buffer[this.leftover+n]=e[t+n];if(r-=i,t+=i,this.leftover+=i,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(r>=16&&(i=r-r%16,this.blocks(e,t,i),t+=i,r-=i),r){for(n=0;r>n;n++)this.buffer[this.leftover+n]=e[t+n];this.leftover+=r}};var ge=b,me=v,be=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],ve=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]),ye=32,we=24,_e=32,Se=16,Ae=32,Ie=32,Ee=32,ke=32,xe=32,Me=we,Pe=_e,Be=Se,Oe=64,Re=32,Te=64,Ne=32,Ce=64;t.lowlevel={crypto_core_hsalsa20:h,crypto_stream_xor:p,crypto_stream:l,crypto_stream_salsa20_xor:c,crypto_stream_salsa20:d,crypto_onetimeauth:g,crypto_onetimeauth_verify:m,crypto_verify_16:o,crypto_verify_32:s,crypto_secretbox:b,crypto_secretbox_open:v,crypto_scalarmult:R,crypto_scalarmult_base:T,crypto_box_beforenm:C,crypto_box_afternm:ge,crypto_box:j,crypto_box_open:L,crypto_box_keypair:N,crypto_hash:z,crypto_sign:W,crypto_sign_keypair:V,crypto_sign_open:Z,crypto_secretbox_KEYBYTES:ye,crypto_secretbox_NONCEBYTES:we,crypto_secretbox_ZEROBYTES:_e,crypto_secretbox_BOXZEROBYTES:Se,crypto_scalarmult_BYTES:Ae,crypto_scalarmult_SCALARBYTES:Ie,crypto_box_PUBLICKEYBYTES:Ee,crypto_box_SECRETKEYBYTES:ke,crypto_box_BEFORENMBYTES:xe,crypto_box_NONCEBYTES:Me,crypto_box_ZEROBYTES:Pe,crypto_box_BOXZEROBYTES:Be,crypto_sign_BYTES:Oe,crypto_sign_PUBLICKEYBYTES:Re,crypto_sign_SECRETKEYBYTES:Te,crypto_sign_SEEDBYTES:Ne,crypto_hash_BYTES:Ce},t.util={},t.util.decodeUTF8=function(e){var t,r=unescape(encodeURIComponent(e)),n=new Uint8Array(r.length);for(t=0;tt;t++)n.push(String.fromCharCode(e[t]));return btoa(n.join(""))},t.util.decodeBase64=function(e){if("undefined"==typeof atob)return new Uint8Array(Array.prototype.slice.call(new r(e,"base64"),0));var t,n=atob(e),i=new Uint8Array(n.length);for(t=0;tn)return null;for(var i=new Uint8Array(n),o=0;on;n++)i[n]=t[n];for(n=0;n=0},t.sign.keyPair=function(){var e=new Uint8Array(Re),t=new Uint8Array(Te);return V(e,t),{publicKey:e,secretKey:t}},t.sign.keyPair.fromSecretKey=function(e){if(Q(e),e.length!==Te)throw new Error("bad secret key size");for(var t=new Uint8Array(Re),r=0;rn;n++)r[n]=e[n];return V(t,r,!0),{publicKey:t,secretKey:r}},t.sign.publicKeyLength=Re,t.sign.secretKeyLength=Te,t.sign.seedLength=Ne,t.sign.signatureLength=Oe,t.hash=function(e){Q(e);var t=new Uint8Array(Ce);return z(t,e,e.length),t},t.hash.hashLength=Ce,t.verify=function(e,t){return Q(e,t),0===e.length||0===t.length?!1:e.length!==t.length?!1:0===i(e,0,t,0,e.length)?!0:!1},t.setPRNG=function(e){re=e},function(){var r;"undefined"!=typeof window?(window.crypto&&window.crypto.getRandomValues?r=window.crypto:window.msCrypto&&window.msCrypto.getRandomValues&&(r=window.msCrypto),r&&t.setPRNG(function(e,t){var n,i=new Uint8Array(t);for(r.getRandomValues(i),n=0;t>n;n++)e[n]=i[n];ee(i)})):"undefined"!=typeof e&&(r=e("crypto"),r&&t.setPRNG(function(e,t){var n,i=r.randomBytes(t);for(n=0;t>n;n++)e[n]=i[n];ee(i)}))}()}("undefined"!=typeof t&&t.exports?t.exports:window.nacl=window.nacl||{})}).call(this,e("buffer").Buffer)},{buffer:100,crypto:100}],294:[function(t,r,n){!function(t){"use strict";function n(e,t,r){var n=I[t];return n||(n=e(t,r),n.feature&&++E[t>>8&255]>l&&(I[t]=n)),n}function i(e,t,r){var n=65280&t,i=A.udata[n]||{},o=i[t];return o?new A(t,o):new A(t,d)}function o(e,t,r){return r?e(t,r):new A(t,null)}function s(e,t,r){var n;if(g>t||t>=g+v&&p>t||t>p+S)return e(t,r);if(t>=g&&g+v>t){var i={},o=(t-g)*y;for(n=0;y>n;++n)i[m+n]=p+w*(n+o);return new A(t,[,,i])}var s=t-p,a=s%w,u=[];if(0!==a)u[0]=[p+s-a,b+a];else for(u[0]=[g+Math.floor(s/_),m+Math.floor(s%_/w)],u[2]={},n=1;w>n;++n)u[2][b+n]=t+n;return new A(t,u)}function a(e,t,r){return 60>t||t>13311&&42607>t?new A(t,d):e(t,r)}function u(e){return T("NFD",e)}function f(e){return T("NFKD",e)}function h(e){return T("NFC",e)}function c(e){return T("NFKC",e)}for(var d=[null,0,{}],l=10,p=44032,g=4352,m=4449,b=4519,v=19,y=21,w=28,_=y*w,S=v*_,A=function(e,t){this.codepoint=e,this.feature=t},I={},E=[],k=0;255>=k;++k)E[k]=0;var x=[a,n,o,s,i];A.fromCharCode=x.reduceRight(function(e,t){return function(r,n){return t(e,r,n)}},null),A.isHighSurrogate=function(e){return e>=55296&&56319>=e},A.isLowSurrogate=function(e){return e>=56320&&57343>=e},A.prototype.prepFeature=function(){this.feature||(this.feature=A.fromCharCode(this.codepoint,!0).feature)},A.prototype.toString=function(){if(this.codepoint<65536)return String.fromCharCode(this.codepoint);var e=this.codepoint-65536;return String.fromCharCode(Math.floor(e/1024)+55296,e%1024+56320)},A.prototype.getDecomp=function(){return this.prepFeature(),this.feature[0]||null},A.prototype.isCompatibility=function(){return this.prepFeature(),!!this.feature[1]&&256&this.feature[1]},A.prototype.isExclude=function(){return this.prepFeature(),!!this.feature[1]&&512&this.feature[1]},A.prototype.getCanonicalClass=function(){return this.prepFeature(),this.feature[1]?255&this.feature[1]:0},A.prototype.getComposite=function(e){if(this.prepFeature(),!this.feature[2])return null;var t=this.feature[2][e.codepoint];return t?A.fromCharCode(t):null};var M=function(e){this.str=e,this.cursor=0};M.prototype.next=function(){if(this.str&&this.cursor0;--r){var n=this.resBuf[r-1],i=n.getCanonicalClass();if(e>=i)break}this.resBuf.splice(r,0,t)}while(0!==e);return this.resBuf.shift()};var O=function(e){this.it=e,this.procBuf=[],this.resBuf=[],this.lastClass=null};O.prototype.next=function(){for(;0===this.resBuf.length;){var e=this.it.next();if(!e){this.resBuf=this.procBuf,this.procBuf=[];break}if(0===this.procBuf.length)this.lastClass=e.getCanonicalClass(),this.procBuf.push(e);else{var t=this.procBuf[0],r=t.getComposite(e),n=e.getCanonicalClass();r&&(this.lastClass",'"',"`"," ","\r","\n"," "],m=["{","}","|","\\","^","`"].concat(g),b=["'"].concat(m),v=["%","/","?",";","#"].concat(b),y=["/","?","#"],w=255,_=/^[a-z0-9A-Z_-]{0,63}$/,S=/^([a-z0-9A-Z_-]{0,63})(.*)$/,A={javascript:!0,"javascript:":!0},I={javascript:!0,"javascript:":!0},E={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},k=e("querystring");n.prototype.parse=function(e,t,r){if(!u(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var n=e;n=n.trim();var i=l.exec(n);if(i){i=i[0];var o=i.toLowerCase();this.protocol=o,n=n.substr(i.length)}if(r||i||n.match(/^\/\/[^@\/]+@[^@\/]+/)){var s="//"===n.substr(0,2);!s||i&&I[i]||(n=n.substr(2),this.slashes=!0)}if(!I[i]&&(s||i&&!E[i])){for(var a=-1,f=0;fh)&&(a=h)}var c,p;p=-1===a?n.lastIndexOf("@"):n.lastIndexOf("@",a),-1!==p&&(c=n.slice(0,p),n=n.slice(p+1),this.auth=decodeURIComponent(c)),a=-1;for(var f=0;fh)&&(a=h)}-1===a&&(a=n.length),this.host=n.slice(0,a),n=n.slice(a),this.parseHost(),this.hostname=this.hostname||"";var g="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!g)for(var m=this.hostname.split(/\./),f=0,x=m.length;x>f;f++){var M=m[f];if(M&&!M.match(_)){for(var P="",B=0,O=M.length;O>B;B++)P+=M.charCodeAt(B)>127?"x":M[B];if(!P.match(_)){var R=m.slice(0,f),T=m.slice(f+1),N=M.match(S);N&&(R.push(N[1]),T.unshift(N[2])),T.length&&(n="/"+T.join(".")+n),this.hostname=R.join(".");break}}}if(this.hostname.length>w?this.hostname="":this.hostname=this.hostname.toLowerCase(),!g){for(var C=this.hostname.split("."),j=[],f=0;ff;f++){var U=b[f],K=encodeURIComponent(U);K===U&&(K=escape(U)),n=n.split(U).join(K)}var F=n.indexOf("#");-1!==F&&(this.hash=n.substr(F),n=n.slice(0,F));var H=n.indexOf("?");if(-1!==H?(this.search=n.substr(H),this.query=n.substr(H+1),t&&(this.query=k.parse(this.query)),n=n.slice(0,H)):t&&(this.search="",this.query={}),n&&(this.pathname=n),E[o]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var D=this.pathname||"",L=this.search||"";this.path=D+L}return this.href=this.format(),this},n.prototype.format=function(){var e=this.auth||"";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,":"),e+="@");var t=this.protocol||"",r=this.pathname||"",n=this.hash||"",i=!1,o="";this.host?i=e+this.host:this.hostname&&(i=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&f(this.query)&&Object.keys(this.query).length&&(o=k.stringify(this.query));var s=this.search||o&&"?"+o||"";return t&&":"!==t.substr(-1)&&(t+=":"),this.slashes||(!t||E[t])&&i!==!1?(i="//"+(i||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):i||(i=""),n&&"#"!==n.charAt(0)&&(n="#"+n),s&&"?"!==s.charAt(0)&&(s="?"+s),r=r.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),s=s.replace("#","%23"),t+i+r+s+n},n.prototype.resolve=function(e){return this.resolveObject(i(e,!1,!0)).format()},n.prototype.resolveObject=function(e){if(u(e)){var t=new n;t.parse(e,!1,!0),e=t}var r=new n;if(Object.keys(this).forEach(function(e){r[e]=this[e]},this),r.hash=e.hash,""===e.href)return r.href=r.format(),r;if(e.slashes&&!e.protocol)return Object.keys(e).forEach(function(t){"protocol"!==t&&(r[t]=e[t])}),E[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r;if(e.protocol&&e.protocol!==r.protocol){if(!E[e.protocol])return Object.keys(e).forEach(function(t){r[t]=e[t]}),r.href=r.format(),r;if(r.protocol=e.protocol,e.host||I[e.protocol])r.pathname=e.pathname;else{for(var i=(e.pathname||"").split("/");i.length&&!(e.host=i.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==i[0]&&i.unshift(""),i.length<2&&i.unshift(""),r.pathname=i.join("/")}if(r.search=e.search,r.query=e.query,r.host=e.host||"",r.auth=e.auth,r.hostname=e.hostname||e.host,r.port=e.port,r.pathname||r.search){var o=r.pathname||"",s=r.search||"";r.path=o+s}return r.slashes=r.slashes||e.slashes,r.href=r.format(),r}var a=r.pathname&&"/"===r.pathname.charAt(0),f=e.host||e.pathname&&"/"===e.pathname.charAt(0),d=f||a||r.host&&e.pathname,l=d,p=r.pathname&&r.pathname.split("/")||[],i=e.pathname&&e.pathname.split("/")||[],g=r.protocol&&!E[r.protocol];if(g&&(r.hostname="",r.port=null,r.host&&(""===p[0]?p[0]=r.host:p.unshift(r.host)),r.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===i[0]?i[0]=e.host:i.unshift(e.host)),e.host=null),d=d&&(""===i[0]||""===p[0])),f)r.host=e.host||""===e.host?e.host:r.host,r.hostname=e.hostname||""===e.hostname?e.hostname:r.hostname,r.search=e.search,r.query=e.query,p=i;else if(i.length)p||(p=[]),p.pop(),p=p.concat(i),r.search=e.search,r.query=e.query;else if(!c(e.search)){if(g){r.hostname=r.host=p.shift();var m=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;m&&(r.auth=m.shift(),r.host=r.hostname=m.shift())}return r.search=e.search,r.query=e.query,h(r.pathname)&&h(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!p.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var b=p.slice(-1)[0],v=(r.host||e.host)&&("."===b||".."===b)||""===b,y=0,w=p.length;w>=0;w--)b=p[w],"."==b?p.splice(w,1):".."===b?(p.splice(w,1),y++):y&&(p.splice(w,1),y--);if(!d&&!l)for(;y--;y)p.unshift("..");!d||""===p[0]||p[0]&&"/"===p[0].charAt(0)||p.unshift(""),v&&"/"!==p.join("/").substr(-1)&&p.push("");var _=""===p[0]||p[0]&&"/"===p[0].charAt(0);if(g){r.hostname=r.host=_?"":p.length?p.shift():"";var m=r.host&&r.host.indexOf("@")>0?r.host.split("@"):!1;m&&(r.auth=m.shift(),r.host=r.hostname=m.shift())}return d=d||r.host&&p.length,d&&!_&&p.unshift(""),p.length?r.pathname=p.join("/"):(r.pathname=null,r.path=null),h(r.pathname)&&h(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=e.auth||r.auth,r.slashes=r.slashes||e.slashes,r.href=r.format(),r},n.prototype.parseHost=function(){var e=this.host,t=p.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},{punycode:243,querystring:246}],296:[function(t,r,n){(function(t){!function(i){function o(e){for(var t,r,n=[],i=0,o=e.length;o>i;)t=e.charCodeAt(i++),t>=55296&&56319>=t&&o>i?(r=e.charCodeAt(i++),56320==(64512&r)?n.push(((1023&t)<<10)+(1023&r)+65536):(n.push(t),i--)):n.push(t);return n}function s(e){for(var t,r=e.length,n=-1,i="";++n65535&&(t-=65536,i+=w(t>>>10&1023|55296),t=56320|1023&t),i+=w(t);return i}function a(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function u(e,t){return w(e>>t&63|128)}function f(e){if(0==(4294967168&e))return w(e);var t="";return 0==(4294965248&e)?t=w(e>>6&31|192):0==(4294901760&e)?(a(e),t=w(e>>12&15|224),t+=u(e,6)):0==(4292870144&e)&&(t=w(e>>18&7|240),t+=u(e,12),t+=u(e,6)),t+=w(63&e|128)}function h(e){for(var t,r=o(e),n=r.length,i=-1,s="";++i=v)throw Error("Invalid byte index");var e=255&b[y];if(y++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function d(){var e,t,r,n,i;if(y>v)throw Error("Invalid byte index");if(y==v)return!1;if(e=255&b[y],y++,0==(128&e))return e;if(192==(224&e)){var t=c();if(i=(31&e)<<6|t,i>=128)return i;throw Error("Invalid continuation byte")}if(224==(240&e)){if(t=c(),r=c(),i=(15&e)<<12|t<<6|r,i>=2048)return a(i),i;throw Error("Invalid continuation byte")}if(240==(248&e)&&(t=c(),r=c(),n=c(),i=(15&e)<<18|t<<12|r<<6|n,i>=65536&&1114111>=i))return i;throw Error("Invalid UTF-8 detected")}function l(e){b=o(e),v=b.length,y=0;for(var t,r=[];(t=d())!==!1;)r.push(t);return s(r)}var p="object"==typeof n&&n,g="object"==typeof r&&r&&r.exports==p&&r,m="object"==typeof t&&t;(m.global===m||m.window===m)&&(i=m);var b,v,y,w=String.fromCharCode,_={version:"2.0.0",encode:h,decode:l};if("function"==typeof e&&"object"==typeof e.amd&&e.amd)e(function(){return _});else if(p&&!p.nodeType)if(g)g.exports=_;else{var S={},A=S.hasOwnProperty;for(var I in _)A.call(_,I)&&(p[I]=_[I])}else i.utf8=_}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],297:[function(e,t,r){t.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},{}],298:[function(e,t,r){(function(t,n){function i(e,t){var n={seen:[],stylize:s};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),g(t)?n.showHidden=t:t&&r._extend(n,t),_(n.showHidden)&&(n.showHidden=!1),_(n.depth)&&(n.depth=2),_(n.colors)&&(n.colors=!1),_(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=o),u(n,e,n.depth)}function o(e,t){var r=i.styles[t];return r?"["+i.colors[r][0]+"m"+e+"["+i.colors[r][1]+"m":e}function s(e,t){return e}function a(e){var t={};return e.forEach(function(e,r){t[e]=!0}),t}function u(e,t,n){if(e.customInspect&&t&&k(t.inspect)&&t.inspect!==r.inspect&&(!t.constructor||t.constructor.prototype!==t)){var i=t.inspect(n,e);return y(i)||(i=u(e,i,n)),i}var o=f(e,t);if(o)return o;var s=Object.keys(t),g=a(s);if(e.showHidden&&(s=Object.getOwnPropertyNames(t)),E(t)&&(s.indexOf("message")>=0||s.indexOf("description")>=0))return h(t);if(0===s.length){if(k(t)){var m=t.name?": "+t.name:"";return e.stylize("[Function"+m+"]","special")}if(S(t))return e.stylize(RegExp.prototype.toString.call(t),"regexp");if(I(t))return e.stylize(Date.prototype.toString.call(t),"date");if(E(t))return h(t)}var b="",v=!1,w=["{","}"];if(p(t)&&(v=!0,w=["[","]"]),k(t)){var _=t.name?": "+t.name:"";b=" [Function"+_+"]"}if(S(t)&&(b=" "+RegExp.prototype.toString.call(t)),I(t)&&(b=" "+Date.prototype.toUTCString.call(t)),E(t)&&(b=" "+h(t)),0===s.length&&(!v||0==t.length))return w[0]+b+w[1];if(0>n)return S(t)?e.stylize(RegExp.prototype.toString.call(t),"regexp"):e.stylize("[Object]","special");e.seen.push(t);var A;return A=v?c(e,t,n,g,s):s.map(function(r){return d(e,t,n,g,r,v)}),e.seen.pop(),l(A,b,w)}function f(e,t){if(_(t))return e.stylize("undefined","undefined");if(y(t)){var r="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(r,"string")}return v(t)?e.stylize(""+t,"number"):g(t)?e.stylize(""+t,"boolean"):m(t)?e.stylize("null","null"):void 0}function h(e){return"["+Error.prototype.toString.call(e)+"]"}function c(e,t,r,n,i){for(var o=[],s=0,a=t.length;a>s;++s)O(t,String(s))?o.push(d(e,t,r,n,String(s),!0)):o.push("");return i.forEach(function(i){i.match(/^\d+$/)||o.push(d(e,t,r,n,i,!0))}),o}function d(e,t,r,n,i,o){var s,a,f;if(f=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]},f.get?a=f.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):f.set&&(a=e.stylize("[Setter]","special")),O(n,i)||(s="["+i+"]"),a||(e.seen.indexOf(f.value)<0?(a=m(r)?u(e,f.value,null):u(e,f.value,r-1),a.indexOf("\n")>-1&&(a=o?a.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+a.split("\n").map(function(e){return" "+e}).join("\n"))):a=e.stylize("[Circular]","special")),_(s)){if(o&&i.match(/^\d+$/))return a;s=JSON.stringify(""+i),s.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(s=s.substr(1,s.length-2),s=e.stylize(s,"name")):(s=s.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),s=e.stylize(s,"string"))}return s+": "+a}function l(e,t,r){var n=0,i=e.reduce(function(e,t){return n++,t.indexOf("\n")>=0&&n++,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0);return i>60?r[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+r[1]:r[0]+t+" "+e.join(", ")+" "+r[1]}function p(e){return Array.isArray(e)}function g(e){return"boolean"==typeof e}function m(e){return null===e}function b(e){return null==e}function v(e){return"number"==typeof e}function y(e){return"string"==typeof e}function w(e){return"symbol"==typeof e}function _(e){return void 0===e}function S(e){return A(e)&&"[object RegExp]"===M(e)}function A(e){return"object"==typeof e&&null!==e}function I(e){return A(e)&&"[object Date]"===M(e)}function E(e){return A(e)&&("[object Error]"===M(e)||e instanceof Error)}function k(e){return"function"==typeof e}function x(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||"undefined"==typeof e}function M(e){return Object.prototype.toString.call(e)}function P(e){return 10>e?"0"+e.toString(10):e.toString(10)}function B(){var e=new Date,t=[P(e.getHours()),P(e.getMinutes()),P(e.getSeconds())].join(":");return[e.getDate(),C[e.getMonth()],t].join(" ")}function O(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var R=/%[sdj%]/g;r.format=function(e){if(!y(e)){for(var t=[],r=0;r=o)return e;switch(e){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return e}}),a=n[r];o>r;a=n[++r])s+=m(a)||!A(a)?" "+a:" "+i(a);return s},r.deprecate=function(e,i){function o(){if(!s){if(t.throwDeprecation)throw new Error(i);t.traceDeprecation?console.trace(i):console.error(i),s=!0}return e.apply(this,arguments)}if(_(n.process))return function(){return r.deprecate(e,i).apply(this,arguments)};if(t.noDeprecation===!0)return e;var s=!1;return o};var T,N={};r.debuglog=function(e){if(_(T)&&(T=t.env.NODE_DEBUG||""),e=e.toUpperCase(),!N[e])if(new RegExp("\\b"+e+"\\b","i").test(T)){var n=t.pid;N[e]=function(){var t=r.format.apply(r,arguments);console.error("%s %d: %s",e,n,t)}}else N[e]=function(){};return N[e]},r.inspect=i,i.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},i.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=p,r.isBoolean=g,r.isNull=m,r.isNullOrUndefined=b,r.isNumber=v,r.isString=y,r.isSymbol=w,r.isUndefined=_,r.isRegExp=S,r.isObject=A,r.isDate=I,r.isError=E,r.isFunction=k,r.isPrimitive=x,r.isBuffer=e("./support/isBuffer");var C=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];r.log=function(){console.log("%s - %s",B(),r.format.apply(r,arguments))},r.inherits=e("inherits"),r._extend=function(e,t){if(!t||!A(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":297,_process:235,inherits:226}],299:[function(e,t,r){var n=e("./formatters"),i=e("./type"),o=function(){this._inputFormatter=n.formatInputInt,this._outputFormatter=n.formatOutputAddress};o.prototype=new i({}),o.prototype.constructor=o,o.prototype.isType=function(e){return!!e.match(/address(\[([0-9]*)\])?/)},o.prototype.staticPartLength=function(e){return 32*this.staticArrayLength(e)},t.exports=o},{"./formatters":304,"./type":309}],300:[function(e,t,r){var n=e("./formatters"),i=e("./type"),o=function(){this._inputFormatter=n.formatInputBool,this._outputFormatter=n.formatOutputBool};o.prototype=new i({}),o.prototype.constructor=o,o.prototype.isType=function(e){return!!e.match(/^bool(\[([0-9]*)\])*$/)},o.prototype.staticPartLength=function(e){return 32*this.staticArrayLength(e)},t.exports=o},{"./formatters":304,"./type":309}],301:[function(e,t,r){var n=e("./formatters"),i=e("./type"),o=function(){this._inputFormatter=n.formatInputBytes,this._outputFormatter=n.formatOutputBytes};o.prototype=new i({}),o.prototype.constructor=o,o.prototype.isType=function(e){return!!e.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/)},o.prototype.staticPartLength=function(e){var t=e.match(/^bytes([0-9]*)/),r=parseInt(t[1]);return r*this.staticArrayLength(e)},t.exports=o},{"./formatters":304,"./type":309}],302:[function(e,t,r){var n=e("./formatters"),i=e("./address"),o=e("./bool"),s=e("./int"),a=e("./uint"),u=e("./dynamicbytes"),f=e("./string"),h=e("./real"),c=e("./ureal"),d=e("./bytes"),l=function(e){this._types=e};l.prototype._requireType=function(e){var t=this._types.filter(function(t){return t.isType(e)})[0];if(!t)throw Error("invalid solidity type!: "+e);return t},l.prototype.encodeParam=function(e,t){return this.encodeParams([e],[t])},l.prototype.encodeParams=function(e,t){var r=this.getSolidityTypes(e),n=r.map(function(r,n){return r.encode(t[n],e[n])}),i=r.reduce(function(t,r,n){var i=r.staticPartLength(e[n]),o=32*Math.floor((i+31)/32);return t+o},0),o=this.encodeMultiWithOffset(e,r,n,i);return o},l.prototype.encodeMultiWithOffset=function(e,t,r,i){var o="",s=this,a=function(r){return t[r].isDynamicArray(e[r])||t[r].isDynamicType(e[r])};return e.forEach(function(u,f){if(a(f)){o+=n.formatInputInt(i).encode();var h=s.encodeWithOffset(e[f],t[f],r[f],i);i+=h.length/2}else o+=s.encodeWithOffset(e[f],t[f],r[f],i)}),e.forEach(function(n,u){if(a(u)){var f=s.encodeWithOffset(e[u],t[u],r[u],i);i+=f.length/2,o+=f}}),o},l.prototype.encodeWithOffset=function(e,t,r,i){var o=this;return t.isDynamicArray(e)?function(){var s=t.nestedName(e),a=t.staticPartLength(s),u=r[0];return function(){var e=2;if(t.isDynamicArray(s))for(var o=1;os;s++)o.push(r.encode(e[s],i));return o}():this._inputFormatter(e,t).encode()},o.prototype.decode=function(e,t,r){var n=this;if(this.isDynamicArray(r))return function(){for(var i=parseInt("0x"+e.substr(2*t,64)),o=parseInt("0x"+e.substr(2*i,64)),s=i+32,a=n.nestedName(r),u=n.staticPartLength(a),f=32*Math.floor((u+31)/32),h=[],c=0;o*f>c;c+=f)h.push(n.decode(e,s+c,a));return h}();if(this.isStaticArray(r))return function(){for(var i=n.staticArrayLength(r),o=t,s=n.nestedName(r),a=n.staticPartLength(s),u=32*Math.floor((a+31)/32),f=[],h=0;i*u>h;h+=u)f.push(n.decode(e,o+h,s));return f}();if(this.isDynamicType(r))return function(){var r=parseInt("0x"+e.substr(2*t,64)),o=parseInt("0x"+e.substr(2*r,64)),s=Math.floor((o+31)/32);return n._outputFormatter(new i(e.substr(2*r,64*(1+s)),0))}();var o=this.staticPartLength(r);return this._outputFormatter(new i(e.substr(2*t,2*o)))},t.exports=o},{"./formatters":304,"./param":306}],310:[function(e,t,r){var n=e("./formatters"),i=e("./type"),o=function(){this._inputFormatter=n.formatInputInt,this._outputFormatter=n.formatOutputUInt};o.prototype=new i({}),o.prototype.constructor=o,o.prototype.isType=function(e){return!!e.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/)},o.prototype.staticPartLength=function(e){return 32*this.staticArrayLength(e)},t.exports=o},{"./formatters":304,"./type":309}],311:[function(e,t,r){var n=e("./formatters"),i=e("./type"),o=function(){this._inputFormatter=n.formatInputReal,this._outputFormatter=n.formatOutputUReal};o.prototype=new i({}),o.prototype.constructor=o,o.prototype.isType=function(e){return!!e.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/)},o.prototype.staticPartLength=function(e){return 32*this.staticArrayLength(e)},t.exports=o},{"./formatters":304,"./type":309}],312:[function(e,t,r){var n=e("bignumber.js"),i=["wei","kwei","Mwei","Gwei","szabo","finney","femtoether","picoether","nanoether","microether","milliether","nano","micro","milli","ether","grand","Mether","Gether","Tether","Pether","Eether","Zether","Yether","Nether","Dether","Vether","Uether"];t.exports={ETH_PADDING:32,ETH_SIGNATURE_LENGTH:4,ETH_UNITS:i,ETH_BIGNUMBER_ROUNDING_MODE:{ROUNDING_MODE:n.ROUND_DOWN},ETH_POLLING_TIMEOUT:500,defaultBlock:"latest",defaultAccount:void 0}},{"bignumber.js":314}],313:[function(e,t,r){var n=e("bignumber.js"),i=e("utf8"),o={wei:"1",kwei:"1000",ada:"1000",femtoether:"1000",mwei:"1000000",babbage:"1000000",picoether:"1000000",gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",einstein:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"},s=function(e,t,r){return new Array(t-e.length+1).join(r?r:"0")+e},a=function(e,t,r){return e+new Array(t-e.length+1).join(r?r:"0")},u=function(e){var t="",r=0,n=e.length;for("0x"===e.substring(0,2)&&(r=2);n>r;r+=2){var o=parseInt(e.substr(r,2),16);if(0===o)break;t+=String.fromCharCode(o)}return i.decode(t)},f=function(e){var t="",r=0,n=e.length;for("0x"===e.substring(0,2)&&(r=2);n>r;r+=2){var i=parseInt(e.substr(r,2),16);t+=String.fromCharCode(i)}return t},h=function(e){e=i.encode(e);for(var t="",r=0;rn?"i":"").test(f))return m(h,f,a,n);a?(h.s=0>1/e?(f=f.slice(1),-1):1,q&&f.replace(/^0\.0*|\./,"").length>15&&R(C,S,e),a=!1):h.s=45===f.charCodeAt(0)?(f=f.slice(1),-1):1,f=r(f,10,n,h.s)}else{if(e instanceof t)return h.s=e.s,h.e=e.e,h.c=(e=e.c)?e.slice():e,void(C=0);if((a="number"==typeof e)&&0*e==0){if(h.s=0>1/e?(e=-e,-1):1,e===~~e){for(o=0,s=e;s>=10;s/=10,o++);return h.e=o,h.c=[e],void(C=0)}f=e+""}else{if(!b.test(f=e+""))return m(h,f,a);h.s=45===f.charCodeAt(0)?(f=f.slice(1),-1):1}}for((o=f.indexOf("."))>-1&&(f=f.replace(".","")),(s=f.search(/e/i))>0?(0>o&&(o=s),o+=+f.slice(s+1),f=f.substring(0,s)):0>o&&(o=f.length),s=0;48===f.charCodeAt(s);s++);for(u=f.length;48===f.charCodeAt(--u););if(f=f.slice(s,u+1))if(u=f.length,a&&q&&u>15&&R(C,S,h.s*e),o=o-s-1,o>H)h.c=h.e=null;else if(F>o)h.c=[h.e=0];else{if(h.e=o,h.c=[],s=(o+1)%E,0>o&&(s+=E),u>s){for(s&&h.c.push(+f.slice(0,s)),u-=E;u>s;)h.c.push(+f.slice(s,s+=E));f=f.slice(s),s=E-f.length}else s-=u;for(;s--;f+="0");h.c.push(+f)}else h.c=[h.e=0];C=0}function r(e,r,n,i){var o,a,u,f,c,l,p,g=e.indexOf("."),m=D,b=z;for(37>n&&(e=e.toLowerCase()),g>=0&&(u=W,W=0,e=e.replace(".",""),p=new t(n),c=p.pow(e.length-g),W=u,p.c=h(d(s(c.c),c.e),10,r),p.e=p.c.length),l=h(e,n,r),a=u=l.length;0==l[--u];l.pop());if(!l[0])return"0";if(0>g?--a:(c.c=l,c.e=a,c.s=i,c=N(c,p,m,b,r),l=c.c,f=c.r,a=c.e),o=a+m+1,g=l[o],u=r/2,f=f||0>o||null!=l[o+1],f=4>b?(null!=g||f)&&(0==b||b==(c.s<0?3:2)):g>u||g==u&&(4==b||f||6==b&&1&l[o-1]||b==(c.s<0?8:7)),1>o||!l[0])e=f?d("1",-m):"0";else{if(l.length=o,f)for(--r;++l[--o]>r;)l[o]=0,o||(++a,l.unshift(1));for(u=l.length;!l[--u];);for(g=0,e="";u>=g;e+=A.charAt(l[g++]));e=d(e,a)}return e}function n(e,r,n,i){var o,a,u,f,h;if(n=null!=n&&V(n,0,8,i,_)?0|n:z,!e.c)return e.toString();if(o=e.c[0],u=e.e,null==r)h=s(e.c),h=19==i||24==i&&U>=u?c(h,u):d(h,u);else if(e=T(new t(e),r,n),a=e.e,h=s(e.c),f=h.length,19==i||24==i&&(a>=r||U>=a)){for(;r>f;h+="0",f++);h=c(h,a)}else if(r-=u,h=d(h,a),a+1>f){if(--r>0)for(h+=".";r--;h+="0");}else if(r+=a-f,r>0)for(a+1==f&&(h+=".");r--;h+="0");return e.s<0&&o?"-"+h:h}function p(e,r){var n,i,o=0;for(f(e[0])&&(e=e[0]),n=new t(e[0]);++oe||e>r||e!=l(e))&&R(n,(i||"decimal places")+(t>e||e>r?" out of range":" not an integer"),e),!0}function O(e,t,r){for(var n=1,i=t.length;!t[--i];t.pop());for(i=t[0];i>=10;i/=10,n++);return(r=n+r*E-1)>H?e.c=e.e=null:F>r?e.c=[e.e=0]:(e.e=r,e.c=t),e}function R(e,t,r){var n=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+t+": "+r);throw n.name="BigNumber Error",C=0,n}function T(e,t,r,n){var i,o,s,a,u,f,h,c=e.c,d=x;if(c){e:{for(i=1,a=c[0];a>=10;a/=10,i++);if(o=t-i,0>o)o+=E,s=t,u=c[f=0],h=u/d[i-s-1]%10|0;else if(f=v((o+1)/E),f>=c.length){if(!n)break e;for(;c.length<=f;c.push(0));u=h=0,i=1,o%=E,s=o-E+1}else{for(u=a=c[f],i=1;a>=10;a/=10,i++);o%=E,s=o-E+i,h=0>s?0:u/d[i-s-1]%10|0}if(n=n||0>t||null!=c[f+1]||(0>s?u:u%d[i-s-1]),n=4>r?(h||n)&&(0==r||r==(e.s<0?3:2)):h>5||5==h&&(4==r||n||6==r&&(o>0?s>0?u/d[i-s]:0:c[f-1])%10&1||r==(e.s<0?8:7)),1>t||!c[0])return c.length=0,n?(t-=e.e+1,c[0]=d[t%E],e.e=-t||0):c[0]=e.e=0,e;if(0==o?(c.length=f,a=1,f--):(c.length=f+1,a=d[E-o],c[f]=s>0?y(u/d[i-s]%d[s])*a:0),n)for(;;){if(0==f){for(o=1,s=c[0];s>=10;s/=10,o++);for(s=c[0]+=a,a=1;s>=10;s/=10,a++);o!=a&&(e.e++,c[0]==I&&(c[0]=1));break}if(c[f]+=a,c[f]!=I)break;c[f--]=0,a=1}for(o=c.length;0===c[--o];c.pop());}e.e>H?e.c=e.e=null:e.er?null!=(e=i[r++]):void 0};return s(t="DECIMAL_PLACES")&&V(e,0,P,2,t)&&(D=0|e),n[t]=D,s(t="ROUNDING_MODE")&&V(e,0,8,2,t)&&(z=0|e),n[t]=z,s(t="EXPONENTIAL_AT")&&(f(e)?V(e[0],-P,0,2,t)&&V(e[1],0,P,2,t)&&(U=0|e[0],K=0|e[1]):V(e,-P,P,2,t)&&(U=-(K=0|(0>e?-e:e)))),n[t]=[U,K],s(t="RANGE")&&(f(e)?V(e[0],-P,-1,2,t)&&V(e[1],1,P,2,t)&&(F=0|e[0],H=0|e[1]):V(e,-P,P,2,t)&&(0|e?F=-(H=0|(0>e?-e:e)):q&&R(2,t+" cannot be zero",e))),n[t]=[F,H],s(t="ERRORS")&&(e===!!e||1===e||0===e?(C=0,V=(q=!!e)?B:u):q&&R(2,t+w,e)),n[t]=q,s(t="CRYPTO")&&(e===!!e||1===e||0===e?(Y=!(!e||!g||"object"!=typeof g),e&&!Y&&q&&R(2,"crypto unavailable",g)):q&&R(2,t+w,e)),n[t]=Y,s(t="MODULO_MODE")&&V(e,0,9,2,t)&&(G=0|e),n[t]=G,s(t="POW_PRECISION")&&V(e,0,P,2,t)&&(W=0|e),n[t]=W,s(t="FORMAT")&&("object"==typeof e?X=e:q&&R(2,t+" not an object",e)),n[t]=X,n},t.max=function(){return p(arguments,j.lt)},t.min=function(){return p(arguments,j.gt)},t.random=function(){var e=9007199254740992,r=Math.random()*e&2097151?function(){return y(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var n,i,o,s,a,u=0,f=[],h=new t(L);if(e=null!=e&&V(e,0,P,14)?0|e:D,s=v(e/E),Y)if(g&&g.getRandomValues){for(n=g.getRandomValues(new Uint32Array(s*=2));s>u;)a=131072*n[u]+(n[u+1]>>>11),a>=9e15?(i=g.getRandomValues(new Uint32Array(2)),n[u]=i[0],n[u+1]=i[1]):(f.push(a%1e14),u+=2);u=s/2}else if(g&&g.randomBytes){for(n=g.randomBytes(s*=7);s>u;)a=281474976710656*(31&n[u])+1099511627776*n[u+1]+4294967296*n[u+2]+16777216*n[u+3]+(n[u+4]<<16)+(n[u+5]<<8)+n[u+6],a>=9e15?g.randomBytes(7).copy(n,u):(f.push(a%1e14),u+=7);u=s/7}else q&&R(14,"crypto unavailable",g);if(!u)for(;s>u;)a=r(),9e15>a&&(f[u++]=a%1e14);for(s=f[--u],e%=E,s&&e&&(a=x[E-e],f[u]=y(s/a)*a);0===f[u];f.pop(),u--);if(0>u)f=[o=0];else{for(o=-1;0===f[0];f.shift(),o-=E);for(u=1,a=f[0];a>=10;a/=10,u++);E>u&&(o-=E-u)}return h.e=o,h.c=f,h}}(),N=function(){function e(e,t,r){var n,i,o,s,a=0,u=e.length,f=t%M,h=t/M|0;for(e=e.slice();u--;)o=e[u]%M,s=e[u]/M|0,n=h*o+s*f,i=f*o+n%M*M+a,a=(i/r|0)+(n/M|0)+h*s,e[u]=i%r;return a&&e.unshift(a),e}function r(e,t,r,n){var i,o;if(r!=n)o=r>n?1:-1;else for(i=o=0;r>i;i++)if(e[i]!=t[i]){o=e[i]>t[i]?1:-1;break}return o}function n(e,t,r,n){for(var i=0;r--;)e[r]-=i,i=e[r]1;e.shift());}return function(i,s,a,u,f){var h,c,d,l,p,g,m,b,v,w,_,S,A,k,x,M,P,B=i.s==s.s?1:-1,O=i.c,R=s.c;if(!(O&&O[0]&&R&&R[0]))return new t(i.s&&s.s&&(O?!R||O[0]!=R[0]:R)?O&&0==O[0]||!R?0*B:B/0:NaN);for(b=new t(B),v=b.c=[],c=i.e-s.e,B=a+c+1,f||(f=I,c=o(i.e/E)-o(s.e/E),B=B/E|0),d=0;R[d]==(O[d]||0);d++);if(R[d]>(O[d]||0)&&c--,0>B)v.push(1),l=!0;else{for(k=O.length,M=R.length,d=0,B+=2,p=y(f/(R[0]+1)),p>1&&(R=e(R,p,f),O=e(O,p,f),M=R.length,k=O.length),A=M,w=O.slice(0,M),_=w.length;M>_;w[_++]=0);P=R.slice(),P.unshift(0),x=R[0],R[1]>=f/2&&x++;do{if(p=0,h=r(R,w,M,_),0>h){if(S=w[0],M!=_&&(S=S*f+(w[1]||0)),p=y(S/x),p>1)for(p>=f&&(p=f-1),g=e(R,p,f),m=g.length,_=w.length;1==r(g,w,m,_);)p--,n(g,m>M?P:R,m,f),m=g.length,h=1;else 0==p&&(h=p=1),g=R.slice(),m=g.length;if(_>m&&g.unshift(0),n(w,g,_,f),_=w.length,-1==h)for(;r(R,w,M,_)<1;)p++,n(w,_>M?P:R,_,f),_=w.length}else 0===h&&(p++,w=[0]);v[d++]=p,w[0]?w[_++]=O[A]||0:(w=[O[A]],_=1)}while((A++=10;B/=10,d++);T(b,a+(b.e=d+c*E-1)+1,u,l)}else b.e=c,b.r=+l;return b}}(),m=function(){var e=/^(-?)0([xbo])/i,r=/^([^.]+)\.$/,n=/^\.([^.]+)$/,i=/^-?(Infinity|NaN)$/,o=/^\s*\+|^\s+|\s+$/g;return function(s,a,u,f){var h,c=u?a:a.replace(o,"");if(i.test(c))s.s=isNaN(c)?null:0>c?-1:1;else{if(!u&&(c=c.replace(e,function(e,t,r){return h="x"==(r=r.toLowerCase())?16:"b"==r?2:8,f&&f!=h?e:t}),f&&(h=f,c=c.replace(r,"$1").replace(n,"0.$1")),a!=c))return new t(c,h);q&&R(C,"not a"+(f?" base "+f:"")+" number",a),s.s=null}s.c=s.e=null,C=0}}(),j.absoluteValue=j.abs=function(){var e=new t(this);return e.s<0&&(e.s=1),e},j.ceil=function(){return T(new t(this),this.e+1,2)},j.comparedTo=j.cmp=function(e,r){return C=1,a(this,new t(e,r))},j.decimalPlaces=j.dp=function(){var e,t,r=this.c;if(!r)return null;if(e=((t=r.length-1)-o(this.e/E))*E,t=r[t])for(;t%10==0;t/=10,e--);return 0>e&&(e=0),e},j.dividedBy=j.div=function(e,r){return C=3,N(this,new t(e,r),D,z)},j.dividedToIntegerBy=j.divToInt=function(e,r){return C=4,N(this,new t(e,r),0,1)},j.equals=j.eq=function(e,r){return C=5,0===a(this,new t(e,r))},j.floor=function(){return T(new t(this),this.e+1,3)},j.greaterThan=j.gt=function(e,r){return C=6,a(this,new t(e,r))>0},j.greaterThanOrEqualTo=j.gte=function(e,r){return C=7,1===(r=a(this,new t(e,r)))||0===r},j.isFinite=function(){return!!this.c},j.isInteger=j.isInt=function(){return!!this.c&&o(this.e/E)>this.c.length-2},j.isNaN=function(){return!this.s},j.isNegative=j.isNeg=function(){return this.s<0},j.isZero=function(){return!!this.c&&0==this.c[0]},j.lessThan=j.lt=function(e,r){return C=8,a(this,new t(e,r))<0},j.lessThanOrEqualTo=j.lte=function(e,r){return C=9,-1===(r=a(this,new t(e,r)))||0===r},j.minus=j.sub=function(e,r){var n,i,s,a,u=this,f=u.s;if(C=10,e=new t(e,r),r=e.s,!f||!r)return new t(NaN);if(f!=r)return e.s=-r,u.plus(e);var h=u.e/E,c=e.e/E,d=u.c,l=e.c;if(!h||!c){if(!d||!l)return d?(e.s=-r,e):new t(l?u:NaN);if(!d[0]||!l[0])return l[0]?(e.s=-r,e):new t(d[0]?u:3==z?-0:0)}if(h=o(h),c=o(c),d=d.slice(),f=h-c){for((a=0>f)?(f=-f,s=d):(c=h,s=l),s.reverse(),r=f;r--;s.push(0));s.reverse()}else for(i=(a=(f=d.length)<(r=l.length))?f:r,f=r=0;i>r;r++)if(d[r]!=l[r]){a=d[r]0)for(;r--;d[n++]=0);for(r=I-1;i>f;){if(d[--i]0?(u=a,n=h):(s=-s,n=f),n.reverse();s--;n.push(0));n.reverse()}for(s=f.length,r=h.length,0>s-r&&(n=h,h=f,f=n,r=s),s=0;r;)s=(f[--r]=f[r]+h[r]+s)/I|0,f[r]%=I;return s&&(f.unshift(s),++u),O(e,f,u)},j.precision=j.sd=function(e){var t,r,n=this,i=n.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(q&&R(13,"argument"+w,e),e!=!!e&&(e=null)),!i)return null;if(r=i.length-1,t=r*E+1,r=i[r]){for(;r%10==0;r/=10,t--);for(r=i[0];r>=10;r/=10,t++);}return e&&n.e+1>t&&(t=n.e+1),t},j.round=function(e,r){var n=new t(this);return(null==e||V(e,0,P,15))&&T(n,~~e+this.e+1,null!=r&&V(r,0,8,15,_)?0|r:z),n},j.shift=function(e){var r=this;return V(e,-k,k,16,"argument")?r.times("1e"+l(e)):new t(r.c&&r.c[0]&&(-k>e||e>k)?r.s*(0>e?0:1/0):r)},j.squareRoot=j.sqrt=function(){var e,r,n,i,a,u=this,f=u.c,h=u.s,c=u.e,d=D+4,l=new t("0.5");if(1!==h||!f||!f[0])return new t(!h||0>h&&(!f||f[0])?NaN:f?u:1/0);if(h=Math.sqrt(+u),0==h||h==1/0?(r=s(f),(r.length+c)%2==0&&(r+="0"),h=Math.sqrt(r),c=o((c+1)/2)-(0>c||c%2),h==1/0?r="1e"+c:(r=h.toExponential(),r=r.slice(0,r.indexOf("e")+1)+c),n=new t(r)):n=new t(h+""),n.c[0])for(c=n.e,h=c+d,3>h&&(h=0);;)if(a=n,n=l.times(a.plus(N(u,a,d,1))),s(a.c).slice(0,h)===(r=s(n.c)).slice(0,h)){if(n.eh&&(m=w,w=_,_=m,s=h,h=l,l=s),s=h+l,m=[];s--;m.push(0));for(b=I,v=M,s=l;--s>=0;){for(n=0,p=_[s]%v,g=_[s]/v|0,u=h,a=s+u;a>s;)c=w[--u]%v,d=w[u]/v|0,f=g*c+d*p,c=p*c+f%v*v+m[a]+n,n=(c/b|0)+(f/v|0)+g*d,m[a--]=c%b;m[a]=n}return n?++i:m.shift(),O(e,m,i)},j.toDigits=function(e,r){var n=new t(this);return e=null!=e&&V(e,1,P,18,"precision")?0|e:null,r=null!=r&&V(r,0,8,18,_)?0|r:z,e?T(n,e,r):n},j.toExponential=function(e,t){return n(this,null!=e&&V(e,0,P,19)?~~e+1:null,t,19)},j.toFixed=function(e,t){return n(this,null!=e&&V(e,0,P,20)?~~e+this.e+1:null,t,20)},j.toFormat=function(e,t){var r=n(this,null!=e&&V(e,0,P,21)?~~e+this.e+1:null,t,21);if(this.c){var i,o=r.split("."),s=+X.groupSize,a=+X.secondaryGroupSize,u=X.groupSeparator,f=o[0],h=o[1],c=this.s<0,d=c?f.slice(1):f,l=d.length;if(a&&(i=s,s=a,a=i,l-=i),s>0&&l>0){for(i=l%s||s,f=d.substr(0,i);l>i;i+=s)f+=u+d.substr(i,s);a>0&&(f+=u+d.slice(i)),c&&(f="-"+f)}r=h?f+X.decimalSeparator+((a=+X.fractionGroupSize)?h.replace(new RegExp("\\d{"+a+"}\\B","g"),"$&"+X.fractionGroupSeparator):h):f}return r},j.toFraction=function(e){var r,n,i,o,a,u,f,h,c,d=q,l=this,p=l.c,g=new t(L),m=n=new t(L),b=f=new t(L);if(null!=e&&(q=!1,u=new t(e),q=d,(!(d=u.isInt())||u.lt(L))&&(q&&R(22,"max denominator "+(d?"out of range":"not an integer"),e),e=!d&&u.c&&T(u,u.e+1,1).gte(L)?u:null)),!p)return l.toString();for(c=s(p),o=g.e=c.length-l.e-1,g.c[0]=x[(a=o%E)<0?E+a:a],e=!e||u.cmp(g)>0?o>0?g:m:u,a=H,H=1/0,u=new t(c),f.c[0]=0;h=N(u,g,0,1),i=n.plus(h.times(b)),1!=i.cmp(e);)n=b,b=i,m=f.plus(h.times(i=m)),f=i,g=u.minus(h.times(i=g)),u=i;return i=N(e.minus(n),b,0,1),f=f.plus(i.times(m)),n=n.plus(i.times(b)),f.s=m.s=l.s,o*=2,r=N(m,b,o,z).minus(l).abs().cmp(N(f,n,o,z).minus(l).abs())<1?[m.toString(),b.toString()]:[f.toString(),n.toString()],H=a,r},j.toNumber=function(){var e=this;return+e||(e.s?0*e.s:NaN)},j.toPower=j.pow=function(e){var r,n,i=y(0>e?-e:+e),o=this;if(!V(e,-k,k,23,"exponent")&&(!isFinite(e)||i>k&&(e/=0)||parseFloat(e)!=e&&!(e=NaN)))return new t(Math.pow(+o,e));for(r=W?v(W/E+2):0,n=new t(L);;){if(i%2){if(n=n.times(o),!n.c)break;r&&n.c.length>r&&(n.c.length=r)}if(i=y(i/2),!i)break;o=o.times(o),r&&o.c&&o.c.length>r&&(o.c.length=r)}return 0>e&&(n=L.div(n)),r?T(n,W,z):n},j.toPrecision=function(e,t){return n(this,null!=e&&V(e,1,P,24,"precision")?0|e:null,t,24)},j.toString=function(e){var t,n=this,i=n.s,o=n.e;return null===o?i?(t="Infinity",0>i&&(t="-"+t)):t="NaN":(t=s(n.c),t=null!=e&&V(e,2,64,25,"base")?r(d(t,o),0|e,10,i):U>=o||o>=K?c(t,o):d(t,o),0>i&&n.c[0]&&(t="-"+t)),t},j.truncated=j.trunc=function(){return T(new t(this),this.e+1,1)},j.valueOf=j.toJSON=function(){return this.toString()},null!=e&&t.config(e),t}function o(e){var t=0|e;return e>0||e===t?t:t-1}function s(e){for(var t,r,n=1,i=e.length,o=e[0]+"";i>n;){for(t=e[n++]+"",r=E-t.length;r--;t="0"+t);o+=t}for(i=o.length;48===o.charCodeAt(--i););return o.slice(0,i+1||1)}function a(e,t){var r,n,i=e.c,o=t.c,s=e.s,a=t.s,u=e.e,f=t.e;if(!s||!a)return null;if(r=i&&!i[0],n=o&&!o[0],r||n)return r?n?0:-a:s;if(s!=a)return s;if(r=0>s,n=u==f,!i||!o)return n?0:!i^r?1:-1;if(!n)return u>f^r?1:-1;for(a=(u=i.length)<(f=o.length)?u:f,s=0;a>s;s++)if(i[s]!=o[s])return i[s]>o[s]^r?1:-1;return u==f?0:u>f^r?1:-1}function u(e,t,r){return(e=l(e))>=t&&r>=e}function f(e){return"[object Array]"==Object.prototype.toString.call(e)}function h(e,t,r){for(var n,i,o=[0],s=0,a=e.length;a>s;){for(i=o.length;i--;o[i]*=t);for(o[n=0]+=A.indexOf(e.charAt(s++));nr-1&&(null==o[n+1]&&(o[n+1]=0),o[n+1]+=o[n]/r|0,o[n]%=r)}return o.reverse()}function c(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>t?"e":"e+")+t}function d(e,t){var r,n;if(0>t){for(n="0.";++t;n+="0");e=n+e}else if(r=e.length,++t>r){for(n="0",t-=r;--t;n+="0");e+=n}else r>t&&(e=e.slice(0,t)+"."+e.slice(t));return e}function l(e){return e=parseFloat(e),0>e?v(e):y(e)}var p,g,m,b=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,v=Math.ceil,y=Math.floor,w=" not a boolean or binary digit",_="rounding mode",S="number type has more than 15 significant digits",A="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",I=1e14,E=14,k=9007199254740991,x=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],M=1e7,P=1e9;if(p=i(),"function"==typeof e&&e.amd)e(function(){return p});else if("undefined"!=typeof r&&r.exports){if(r.exports=p,!g)try{g=t("crypto")}catch(B){}}else n.BigNumber=p}(this)},{crypto:174}]},{},[1])(1)}); diff --git a/lib/keystore.js b/lib/keystore.js index 7ef25b84..8d7e886a 100644 --- a/lib/keystore.js +++ b/lib/keystore.js @@ -1,10 +1,8 @@ -var CryptoJS = require('crypto-js'); +var EthUtil = require('ethereumjs-util'); var Transaction = require('ethereumjs-tx'); var EC = require('elliptic').ec; var ec = new EC('secp256k1'); var bitcore = require('bitcore-lib'); -var Random = bitcore.crypto.Random; -var Hash = bitcore.crypto.Hash; var Mnemonic = require('bitcore-mnemonic'); var nacl = require('tweetnacl'); var scrypt = require('scrypt-async'); @@ -151,11 +149,10 @@ KeyStore._computeAddressFromPrivKey = function (privKey) { keyPair._importPrivate(privKey, 'hex'); var compact = false; var pubKey = keyPair.getPublic(compact, 'hex').slice(2); - var pubKeyWordArray = CryptoJS.enc.Hex.parse(pubKey); - var hash = CryptoJS.SHA3(pubKeyWordArray, { outputLength: 256 }); - var address = hash.toString(CryptoJS.enc.Hex).slice(24); + var pubKeyWordArray = new Buffer(pubKey, 'hex'); + var hash = EthUtil.sha3(pubKeyWordArray).toString('hex'); - return address; + return hash.slice(24); }; KeyStore._computePubkeyFromPrivKey = function (privKey, curve) { @@ -222,7 +219,7 @@ KeyStore.prototype._generatePrivKeys = function(pwDerivedKey, n, hdPathString) { for (var i = 0; i < n; i++){ var hdprivkey = new bitcore.HDPrivateKey(hdRoot).derive(this.ksData[hdPathString].hdIndex++); var privkeyBuf = hdprivkey.privateKey.toBuffer(); - + var privkeyHex = privkeyBuf.toString('hex'); if (privkeyBuf.length < 16) { // Way too small key, something must have gone wrong @@ -259,7 +256,7 @@ KeyStore._concatAndSha256 = function(entropyBuf0, entropyBuf1) { throw new Error('generateRandomSeed: Logic error! Concatenation of entropy sources failed.') } - var hashedEnt = Hash.sha256(totalEnt); + var hashedEnt = EthUtil.sha256(totalEnt); return hashedEnt; } @@ -284,7 +281,7 @@ KeyStore.generateRandomSeed = function(extraEntropy) { } else if (typeof extraEntropy === 'string') { var entBuf = new Buffer(extraEntropy); - var randBuf = Random.getRandomBuffer(256 / 8); + var randBuf = nacl.randomBytes(256 / 8); var hashedEnt = this._concatAndSha256(randBuf, entBuf).slice(0, 128 / 8); seed = new Mnemonic(hashedEnt, Mnemonic.Words.ENGLISH); } @@ -307,7 +304,7 @@ KeyStore.prototype.isDerivedKeyCorrect = function(pwDerivedKey) { } return false; - + }; // Takes keystore serialized as string and returns an instance of KeyStore diff --git a/lib/txutils.js b/lib/txutils.js index 296df397..f843e33b 100644 --- a/lib/txutils.js +++ b/lib/txutils.js @@ -1,7 +1,7 @@ var Transaction = require('ethereumjs-tx'); +var EthUtil = require('ethereumjs-util'); var coder = require('web3/lib/solidity/coder'); -var rlp = require('rlp'); -var CryptoJS = require('crypto-js'); +var rlp = EthUtil.rlp; function add0x (input) { if (typeof(input) !== 'string') { @@ -18,7 +18,7 @@ function add0x (input) { function _encodeFunctionTxData (functionName, types, args) { var fullName = functionName + '(' + types.join() + ')'; - var signature = CryptoJS.SHA3(fullName, { outputLength: 256 }).toString(CryptoJS.enc.Hex).slice(0, 8); + var signature = EthUtil.sha3(fullName).toString('hex').slice(0, 8); var dataHex = signature + coder.encodeParams(types, args); return dataHex; @@ -57,9 +57,8 @@ function functionTx (abi, functionName, args, txObject) { } function createdContractAddress (fromAddress, nonce) { - var rlpEncodedHex = rlp.encode([new Buffer(fromAddress, 'hex'), nonce]).toString('hex'); - var rlpEncodedWordArray = CryptoJS.enc.Hex.parse(rlpEncodedHex); - var hash = CryptoJS.SHA3(rlpEncodedWordArray, {outputLength: 256}).toString(CryptoJS.enc.Hex); + var rlpEncoded = rlp.encode([new Buffer(fromAddress, 'hex'), nonce]); + var hash = EthUtil.sha3(rlpEncoded).toString('hex'); return hash.slice(24); } diff --git a/lib/upgrade.js b/lib/upgrade.js index 4e05ced0..3a6397e0 100644 --- a/lib/upgrade.js +++ b/lib/upgrade.js @@ -1,4 +1,7 @@ -var CryptoJS = require('crypto-js'); +var AES = require('crypto-js/aes'); +var PBKDF2 = require('crypto-js/pbkdf2'); +var SHA3 = require('crypto-js/sha3'); +var EthUtil = require('ethereumjs-util'); var keystore = require('./keystore'); var Transaction = require('ethereumjs-tx'); @@ -11,14 +14,15 @@ var Mnemonic = require('bitcore-mnemonic'); var nacl = require('tweetnacl'); var scrypt = require('scrypt-async'); + legacyDecryptString = function (encryptedStr, password) { - var decryptedStr = CryptoJS.AES.decrypt(encryptedStr.encStr, password, {'iv': encryptedStr.iv, 'salt': encryptedStr.salt }); - return decryptedStr.toString(CryptoJS.enc.Latin1); + var decryptedStr = AES.decrypt(encryptedStr.encStr, password, {'iv': encryptedStr.iv, 'salt': encryptedStr.salt }); + return new Buffer(decryptedStr.toString(),'hex').toString(); }; legacyGenerateEncKey = function(password, salt, keyHash) { - var encKey = CryptoJS.PBKDF2(password, salt, { keySize: 512 / 32, iterations: 150 }).toString(); - var hash = CryptoJS.SHA3(encKey).toString(); + var encKey = PBKDF2(password, salt, { keySize: 512 / 32, iterations: 150 }).toString(); + var hash = SHA3(encKey).toString(); if (keyHash !== hash){ throw new Error('Invalid Password'); } @@ -30,7 +34,7 @@ upgradeOldSerialized = function (oldSerialized, password, callback) { // Upgrades old serialized version of the keystore // to the latest version var oldKS = JSON.parse(oldSerialized); - + if (oldKS.version === undefined || oldKS.version === 1) { var derivedKey = legacyGenerateEncKey(password, oldKS.salt, oldKS.keyHash); diff --git a/package.json b/package.json index ea1a69f0..b9693eac 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,8 @@ "url": "https://github.com/ConsenSys/eth-lightwallet.git" }, "scripts": { - "build-js": "browserify index.js --s lightwallet | uglifyjs -mc > dist/lightwallet.min.js", - "build-dev": "browserify index.js -o dist/lightwallet.js --s lightwallet", + "build-js": "browserify index.js --ignore parse-asn1 --s lightwallet | uglifyjs -mc > dist/lightwallet.min.js", + "build-dev": "browserify index.js --ignore parse-asn1 -o dist/lightwallet.js --s lightwallet", "test": "./node_modules/.bin/mocha --reporter spec", "coverage": "istanbul cover _mocha -- -R spec; open coverage/lcov-report/index.html" }, @@ -53,8 +53,8 @@ "bitcore-mnemonic": "^1.0.1", "crypto-js": "^3.1.5", "elliptic": "^3.1.0", - "ethereumjs-tx": "^1.0.0", - "ethereumjs-util": "^4.0.0", + "ethereumjs-tx": "^1.1.1", + "ethereumjs-util": "^4.0.2", "rlp": "^2.0.0", "scrypt-async": "^1.2.0", "tweetnacl": "0.13.2", @@ -70,4 +70,5 @@ "uglify-js": "^2.4.23", "hooked-web3-provider": "christianlundkvist/hooked-web3-provider#updates_web3_14" } + }

>>0?1:0)|0,this._g=this._g+_+(this._gl>>>0>>0?1:0)|0,this._h=this._h+S+(this._hl>>>0>>0?1:0)|0},f.prototype._hash=function(){function e(e,t,f){a.writeInt32BE(e,f),a.writeInt32BE(t,f+4)}var a=new t(64);return e(this._a,this._al,0),e(this._b,this._bl,8),e(this._c,this._cl,16),e(this._d,this._dl,24),e(this._e,this._el,32),e(this._f,this._fl,40),e(this._g,this._gl,48),e(this._h,this._hl,56),a},a.exports=f}).call(this,e("buffer").Buffer)},{"./hash":232,buffer:99,inherits:296}],240:[function(e,a,t){(function(t){"use strict";function f(e,a){d.call(this),e=e.toLowerCase(),"string"==typeof a&&(a=new t(a));var f="sha512"===e||"sha384"===e?128:64;this._alg=e,this._key=a,a.length>f?a=c(e).update(a).digest():a.lengthb;b++)r[b]=54^a[b],i[b]=92^a[b];this._hash=c(e).update(r)}var c=e("create-hash/browser"),r=e("inherits"),d=e("stream").Transform,n=new t(128);n.fill(0),r(f,d),f.prototype.update=function(e,a){return this._hash.update(e,a),this},f.prototype._transform=function(e,a,t){this._hash.update(e),t()},f.prototype._flush=function(e){this.push(this.digest()),e()},f.prototype.digest=function(e){var a=this._hash.digest();return c(this._alg).update(this._opad).update(a).digest(e)},a.exports=function(e,a){return new f(e,a)}}).call(this,e("buffer").Buffer)},{buffer:99,"create-hash/browser":227,inherits:296,stream:315}],241:[function(e,a,t){(function(a){function f(e){var t=new a(d[e].prime,"hex"),f=new a(d[e].gen,"hex");return new n(t,f)}function c(e,t,f,d){return a.isBuffer(t)||void 0===i[t]?c(e,"binary",t,f):(t=t||"binary",d=d||"binary",f=f||new a([2]),a.isBuffer(f)||(f=new a(f,d)),"number"==typeof e?new n(r(e,f),f,!0):(a.isBuffer(e)||(e=new a(e,t)),new n(e,f,!0)))}var r=e("./lib/generatePrime"),d=e("./lib/primes.json"),n=e("./lib/dh"),i={binary:!0,hex:!0,base64:!0};t.DiffieHellmanGroup=t.createDiffieHellmanGroup=t.getDiffieHellman=f,t.createDiffieHellman=t.DiffieHellman=c}).call(this,e("buffer").Buffer)},{"./lib/dh":242,"./lib/generatePrime":243,"./lib/primes.json":244,buffer:99}],242:[function(e,a,t){(function(t){function f(e,a){return a=a||"utf8",t.isBuffer(e)||(e=new t(e,a)),this._pub=new i(e),this}function c(e,a){return a=a||"utf8",t.isBuffer(e)||(e=new t(e,a)),this._priv=new i(e),this}function r(e,a){var t=a.toString("hex"),f=[t,e.toString(16)].join("_");if(f in v)return v[f];var c=0;if(e.isEven()||!g.simpleSieve||!g.fermatTest(e)||!o.test(e))return c+=1,c+="02"===t||"05"===t?8:4,v[f]=c,c;o.test(e.shrn(1))||(c+=2);var r;switch(t){case"02":e.mod(s).cmp(u)&&(c+=8);break;case"05":r=e.mod(h),r.cmp(l)&&r.cmp(p)&&(c+=8);break;default:c+=4}return v[f]=c,c}function d(e,a,t){this.setGenerator(a),this.__prime=new i(e),this._prime=i.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,t?(this.setPublicKey=f,this.setPrivateKey=c):this._primeCode=8}function n(e,a){var f=new t(e.toArray());return a?f.toString(a):f}var i=e("bn.js"),b=e("miller-rabin"),o=new b,s=new i(24),u=new i(11),h=new i(10),l=new i(3),p=new i(7),g=e("./generatePrime"),m=e("randombytes");a.exports=d;var v={};Object.defineProperty(d.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=r(this.__prime,this.__gen)),this._primeCode}}),d.prototype.generateKeys=function(){return this._priv||(this._priv=new i(m(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},d.prototype.computeSecret=function(e){e=new i(e),e=e.toRed(this._prime);var a=e.redPow(this._priv).fromRed(),f=new t(a.toArray()),c=this.getPrime();if(f.lengthf;f+=2){for(var c=Math.ceil(Math.sqrt(f)),r=0;t>r&&a[r]<=c&&f%a[r]!==0;r++);t!==r&&a[r]<=c||(a[t++]=f)}return y=a,a}function c(e){for(var a=f(),t=0;te)return new i(2===a||5===a?[140,123]:[140,39]);a=new i(a);for(var t,f;;){for(t=new i(n(Math.ceil(e/8)));t.bitLength()>e;)t.ishrn(1);if(t.isEven()&&t.iadd(u),t.testn(1)||t.iadd(h),a.cmp(h)){if(!a.cmp(l))for(;t.mod(p).cmp(g);)t.iadd(v)}else for(;t.mod(b).cmp(m);)t.iadd(v);if(f=t.shrn(1),c(f)&&c(t)&&r(f)&&r(t)&&s.test(f)&&s.test(t))return t}}var n=e("randombytes");a.exports=d,d.simpleSieve=c,d.fermatTest=r;var i=e("bn.js"),b=new i(24),o=e("miller-rabin"),s=new o,u=new i(1),h=new i(2),l=new i(5),p=(new i(16),new i(8),new i(10)),g=new i(3),m=(new i(7),new i(11)),v=new i(4),y=(new i(12),null)},{"bn.js":245,"miller-rabin":246,randombytes:294}],244:[function(e,a,t){a.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" -},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],245:[function(e,a,t){arguments[4][136][0].apply(t,arguments)},{dup:136}],246:[function(e,a,t){function f(e){this.rand=e||new r.Rand}var c=e("bn.js"),r=e("brorand");a.exports=f,f.create=function(e){return new f(e)},f.prototype._rand=function(e){var a=e.bitLength(),t=this.rand.generate(Math.ceil(a/8));t[0]|=3;var f=7&a;return 0!==f&&(t[t.length-1]>>=7-f),new c(t)},f.prototype.test=function(e,a,t){var f=e.bitLength(),r=c.mont(e),d=new c(1).toRed(r);a||(a=Math.max(1,f/48|0));for(var n=e.subn(1),i=n.subn(1),b=0;!n.testn(b);b++);for(var o=e.shrn(b),s=n.toRed(r),u=!0;a>0;a--){var h=this._rand(i);t&&t(h);var l=h.toRed(r).redPow(o);if(0!==l.cmp(d)&&0!==l.cmp(s)){for(var p=1;b>p;p++){if(l=l.redSqr(),0===l.cmp(d))return!1;if(0===l.cmp(s))break}if(p===b)return!1}}return u},f.prototype.getDivisor=function(e,a){var t=e.bitLength(),f=c.mont(e),r=new c(1).toRed(f);a||(a=Math.max(1,t/48|0));for(var d=e.subn(1),n=d.subn(1),i=0;!d.testn(i);i++);for(var b=e.shrn(i),o=d.toRed(f);a>0;a--){var s=this._rand(n),u=e.gcd(s);if(0!==u.cmpn(1))return u;var h=s.toRed(f).redPow(b);if(0!==h.cmp(r)&&0!==h.cmp(o)){for(var l=1;i>l;l++){if(h=h.redSqr(),0===h.cmp(r))return h.fromRed().subn(1).gcd(e);if(0===h.cmp(o))break}if(l===i)return h=h.redSqr(),h.fromRed().subn(1).gcd(e)}}return!1}},{"bn.js":245,brorand:247}],247:[function(e,a,t){arguments[4][69][0].apply(t,arguments)},{dup:69}],248:[function(e,a,t){(function(a){function f(e,a,t,f,r,d){if("function"==typeof r&&(d=r,r=void 0),"function"!=typeof d)throw new Error("No callback provided to pbkdf2");var n=c(e,a,t,f,r);setTimeout(function(){d(void 0,n)})}function c(e,t,f,c,n){if("number"!=typeof f)throw new TypeError("Iterations not a number");if(0>f)throw new TypeError("Bad iterations");if("number"!=typeof c)throw new TypeError("Key length not a number");if(0>c||c>d)throw new TypeError("Bad key length");n=n||"sha1",a.isBuffer(e)||(e=new a(e,"binary")),a.isBuffer(t)||(t=new a(t,"binary"));var i,b=1,o=new a(c),s=new a(t.length+4);t.copy(s,0,0,t.length);for(var u,h,l=1;b>=l;l++){s.writeUInt32BE(l,t.length);var p=r(n,e).update(s).digest();i||(i=p.length,h=new a(i),b=Math.ceil(c/i),u=c-(b-1)*i),p.copy(h,0,0,i);for(var g=1;f>g;g++){p=r(n,e).update(p).digest();for(var m=0;i>m;m++)h[m]^=p[m]}var v=(l-1)*i,y=l===b?u:i;h.copy(o,v,0,y)}return o}var r=e("create-hmac"),d=Math.pow(2,30)-1;t.pbkdf2=f,t.pbkdf2Sync=c}).call(this,e("buffer").Buffer)},{buffer:99,"create-hmac":240}],249:[function(e,a,t){t.publicEncrypt=e("./publicEncrypt"),t.privateDecrypt=e("./privateDecrypt"),t.privateEncrypt=function(e,a){return t.publicEncrypt(e,a,!0)},t.publicDecrypt=function(e,a){return t.privateDecrypt(e,a,!0)}},{"./privateDecrypt":290,"./publicEncrypt":291}],250:[function(e,a,t){(function(t){function f(e){var a=new t(4);return a.writeUInt32BE(e,0),a}var c=e("create-hash");a.exports=function(e,a){for(var r,d=new t(""),n=0;d.length=a.length){r++;break}var d=a.slice(2,c-1);a.slice(c-1,c);if(("0002"!==f.toString("hex")&&!t||"0001"!==f.toString("hex")&&t)&&r++,d.length<8&&r++,r)throw new Error("decryption error");return a.slice(c)}function r(e,a){e=new t(e),a=new t(a);var f=0,c=e.length;e.length!==a.length&&(f++,c=Math.min(e.length,a.length));for(var r=-1;++rs||new b(a).cmp(i.modulus)>=0)throw new Error("decryption error");var h;h=r?u(new b(a),i):o(a,i);var l=new t(s-h.length);if(l.fill(0),h=t.concat([l,h],s),4===n)return f(i,h);if(1===n)return c(i,h,r);if(3===n)return h;throw new Error("unknown padding")}}).call(this,e("buffer").Buffer)},{"./mgf":250,"./withPublic":292,"./xor":293,"bn.js":251,"browserify-rsa":252,buffer:99,"create-hash":227,"parse-asn1":256}],291:[function(e,a,t){(function(t){function f(e,a){var f=e.modulus.byteLength(),c=a.length,r=i("sha1").update(new t("")).digest(),d=r.length,u=2*d;if(c>f-u-2)throw new Error("message too long");var h=new t(f-c-u-2);h.fill(0);var l=f-d-1,p=n(d),g=o(t.concat([r,h,new t([1]),a],l),b(p,l)),m=o(p,b(g,d));return new s(t.concat([new t([0]),m,g],f))}function c(e,a,f){var c=a.length,d=e.modulus.byteLength();if(c>d-11)throw new Error("message too long");var n;return f?(n=new t(d-c-3),n.fill(255)):n=r(d-c-3),new s(t.concat([new t([0,f?1:2]),n,new t([0]),a],d))}function r(e,a){for(var f,c=new t(e),r=0,d=n(2*e),i=0;e>r;)i===d.length&&(d=n(2*e),i=0),f=d[i++],f&&(c[r++]=f);return c}var d=e("parse-asn1"),n=e("randombytes"),i=e("create-hash"),b=e("./mgf"),o=e("./xor"),s=e("bn.js"),u=e("./withPublic"),h=e("browserify-rsa");a.exports=function(e,a,t){var r;r=e.padding?e.padding:t?1:4;var n,i=d(e);if(4===r)n=f(i,a);else if(1===r)n=c(i,a,t);else{if(3!==r)throw new Error("unknown padding");if(n=new s(a),n.cmp(i.modulus)>=0)throw new Error("data too long for modulus")}return t?h(n,i):u(n,i)}}).call(this,e("buffer").Buffer)},{"./mgf":250,"./withPublic":292,"./xor":293,"bn.js":251,"browserify-rsa":252,buffer:99,"create-hash":227,"parse-asn1":256,randombytes:294}],292:[function(e,a,t){(function(t){function f(e,a){return new t(e.toRed(c.mont(a.modulus)).redPow(new c(a.publicExponent)).fromRed().toArray())}var c=e("bn.js");a.exports=f}).call(this,e("buffer").Buffer)},{"bn.js":251,buffer:99}],293:[function(e,a,t){a.exports=function(e,a){for(var t=e.length,f=-1;++f65536)throw new Error("requested too many random bytes");var r=new t.Uint8Array(a);d.getRandomValues(r);var n=new f(r.buffer);return"function"==typeof c?e.nextTick(function(){c(null,n)}):n}var d=t.crypto||t.msCrypto;d&&d.getRandomValues?a.exports=r:a.exports=c}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{_process:299,buffer:99}],295:[function(e,a,t){function f(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function c(e){return"function"==typeof e}function r(e){return"number"==typeof e}function d(e){return"object"==typeof e&&null!==e}function n(e){return void 0===e}a.exports=f,f.EventEmitter=f,f.prototype._events=void 0,f.prototype._maxListeners=void 0,f.defaultMaxListeners=10,f.prototype.setMaxListeners=function(e){if(!r(e)||0>e||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},f.prototype.emit=function(e){var a,t,f,r,i,b;if(this._events||(this._events={}),"error"===e&&(!this._events.error||d(this._events.error)&&!this._events.error.length)){if(a=arguments[1],a instanceof Error)throw a;throw TypeError('Uncaught, unspecified "error" event.')}if(t=this._events[e],n(t))return!1;if(c(t))switch(arguments.length){case 1:t.call(this);break;case 2:t.call(this,arguments[1]);break;case 3:t.call(this,arguments[1],arguments[2]);break;default:for(f=arguments.length,r=new Array(f-1),i=1;f>i;i++)r[i-1]=arguments[i];t.apply(this,r)}else if(d(t)){for(f=arguments.length,r=new Array(f-1),i=1;f>i;i++)r[i-1]=arguments[i];for(b=t.slice(),f=b.length,i=0;f>i;i++)b[i].apply(this,r)}return!0},f.prototype.addListener=function(e,a){var t;if(!c(a))throw TypeError("listener must be a function");if(this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,c(a.listener)?a.listener:a),this._events[e]?d(this._events[e])?this._events[e].push(a):this._events[e]=[this._events[e],a]:this._events[e]=a,d(this._events[e])&&!this._events[e].warned){var t;t=n(this._maxListeners)?f.defaultMaxListeners:this._maxListeners,t&&t>0&&this._events[e].length>t&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())}return this},f.prototype.on=f.prototype.addListener,f.prototype.once=function(e,a){function t(){this.removeListener(e,t),f||(f=!0,a.apply(this,arguments))}if(!c(a))throw TypeError("listener must be a function");var f=!1;return t.listener=a,this.on(e,t),this},f.prototype.removeListener=function(e,a){var t,f,r,n;if(!c(a))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(t=this._events[e],r=t.length,f=-1,t===a||c(t.listener)&&t.listener===a)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,a);else if(d(t)){for(n=r;n-- >0;)if(t[n]===a||t[n].listener&&t[n].listener===a){f=n;break}if(0>f)return this;1===t.length?(t.length=0,delete this._events[e]):t.splice(f,1),this._events.removeListener&&this.emit("removeListener",e,a)}return this},f.prototype.removeAllListeners=function(e){var a,t;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(a in this._events)"removeListener"!==a&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events={},this}if(t=this._events[e],c(t))this.removeListener(e,t);else for(;t.length;)this.removeListener(e,t[t.length-1]);return delete this._events[e],this},f.prototype.listeners=function(e){var a;return a=this._events&&this._events[e]?c(this._events[e])?[this._events[e]]:this._events[e].slice():[]},f.listenerCount=function(e,a){var t;return t=e._events&&e._events[a]?c(e._events[a])?1:e._events[a].length:0}},{}],296:[function(e,a,t){arguments[4][77][0].apply(t,arguments)},{dup:77}],297:[function(e,a,t){a.exports=function(e){return!(null==e||!(e._isBuffer||e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)))}},{}],298:[function(e,a,t){a.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},{}],299:[function(e,a,t){function f(){o=!1,n.length?b=n.concat(b):s=-1,b.length&&c()}function c(){if(!o){var e=setTimeout(f);o=!0;for(var a=b.length;a;){for(n=b,b=[];++s1)for(var t=1;t1&&(f=t[0]+"@",e=t[1]),e=e.replace(R,".");var c=e.split("."),d=r(c,a).join(".");return f+d}function n(e){for(var a,t,f=[],c=0,r=e.length;r>c;)a=e.charCodeAt(c++),a>=55296&&56319>=a&&r>c?(t=e.charCodeAt(c++),56320==(64512&t)?f.push(((1023&a)<<10)+(1023&t)+65536):(f.push(a),c--)):f.push(a);return f}function i(e){return r(e,function(e){var a="";return e>65535&&(e-=65536,a+=j(e>>>10&1023|55296),e=56320|1023&e),a+=j(e)}).join("")}function b(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:S}function o(e,a){return e+22+75*(26>e)-((0!=a)<<5)}function s(e,a,t){var f=0;for(e=t?N(e/k):e>>1,e+=N(e/a);e>C*I>>1;f+=S)e=N(e/C);return N(f+(C+1)*e/(e+E))}function u(e){var a,t,f,r,d,n,o,u,h,l,p=[],g=e.length,m=0,v=P,y=x;for(t=e.lastIndexOf(B),0>t&&(t=0),f=0;t>f;++f)e.charCodeAt(f)>=128&&c("not-basic"),p.push(e.charCodeAt(f));for(r=t>0?t+1:0;g>r;){for(d=m,n=1,o=S;r>=g&&c("invalid-input"),u=b(e.charCodeAt(r++)),(u>=S||u>N((_-m)/n))&&c("overflow"),m+=u*n,h=y>=o?A:o>=y+I?I:o-y,!(h>u);o+=S)l=S-h,n>N(_/l)&&c("overflow"),n*=l;a=p.length+1,y=s(m-d,a,0==d),N(m/a)>_-v&&c("overflow"),v+=N(m/a),m%=a,p.splice(m++,0,v)}return i(p)}function h(e){var a,t,f,r,d,i,b,u,h,l,p,g,m,v,y,w=[];for(e=n(e),g=e.length,a=P,t=0,d=x,i=0;g>i;++i)p=e[i],128>p&&w.push(j(p));for(f=r=w.length,r&&w.push(B);g>f;){for(b=_,i=0;g>i;++i)p=e[i],p>=a&&b>p&&(b=p);for(m=f+1,b-a>N((_-t)/m)&&c("overflow"),t+=(b-a)*m,a=b,i=0;g>i;++i)if(p=e[i],a>p&&++t>_&&c("overflow"),p==a){for(u=t,h=S;l=d>=h?A:h>=d+I?I:h-d,!(l>u);h+=S)y=u-l,v=S-l,w.push(j(o(l+y%v,0))),u=N(y/v);w.push(j(o(u,0))),d=s(t,m,f==r),t=0,++f}++t,++a}return w.join("")}function l(e){return d(e,function(e){return M.test(e)?u(e.slice(4).toLowerCase()):e})}function p(e){return d(e,function(e){return O.test(e)?"xn--"+h(e):e})}var g="object"==typeof t&&t&&!t.nodeType&&t,m="object"==typeof a&&a&&!a.nodeType&&a,v="object"==typeof e&&e;(v.global===v||v.window===v||v.self===v)&&(f=v);var y,w,_=2147483647,S=36,A=1,I=26,E=38,k=700,x=72,P=128,B="-",M=/^xn--/,O=/[^\x20-\x7E]/,R=/[\x2E\u3002\uFF0E\uFF61]/g,T={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},C=S-A,N=Math.floor,j=String.fromCharCode;if(y={version:"1.3.2",ucs2:{decode:n,encode:i},decode:u,encode:h,toASCII:p,toUnicode:l},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define("punycode",function(){return y});else if(g&&m)if(a.exports==g)m.exports=y;else for(w in y)y.hasOwnProperty(w)&&(g[w]=y[w]);else f.punycode=y}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],301:[function(e,a,t){"use strict";function f(e,a){return Object.prototype.hasOwnProperty.call(e,a)}a.exports=function(e,a,t,r){a=a||"&",t=t||"=";var d={};if("string"!=typeof e||0===e.length)return d;var n=/\+/g;e=e.split(a);var i=1e3;r&&"number"==typeof r.maxKeys&&(i=r.maxKeys);var b=e.length;i>0&&b>i&&(b=i);for(var o=0;b>o;++o){var s,u,h,l,p=e[o].replace(n,"%20"),g=p.indexOf(t);g>=0?(s=p.substr(0,g),u=p.substr(g+1)):(s=p,u=""),h=decodeURIComponent(s),l=decodeURIComponent(u),f(d,h)?c(d[h])?d[h].push(l):d[h]=[d[h],l]:d[h]=l}return d};var c=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],302:[function(e,a,t){"use strict";function f(e,a){if(e.map)return e.map(a);for(var t=[],f=0;ft;t++)a(e[t],t)}a.exports=f;var d=Object.keys||function(e){var a=[];for(var t in e)a.push(t);return a},n=e("core-util-is");n.inherits=e("inherits");var i=e("./_stream_readable"),b=e("./_stream_writable");n.inherits(f,i),r(d(b.prototype),function(e){f.prototype[e]||(f.prototype[e]=b.prototype[e])})}).call(this,e("_process"))},{"./_stream_readable":307,"./_stream_writable":309,_process:299,"core-util-is":310,inherits:296}],306:[function(e,a,t){function f(e){return this instanceof f?void c.call(this,e):new f(e)}a.exports=f;var c=e("./_stream_transform"),r=e("core-util-is");r.inherits=e("inherits"),r.inherits(f,c),f.prototype._transform=function(e,a,t){t(null,e)}},{"./_stream_transform":308,"core-util-is":310,inherits:296}],307:[function(e,a,t){(function(t){function f(a,t){var f=e("./_stream_duplex");a=a||{};var c=a.highWaterMark,r=a.objectMode?16:16384;this.highWaterMark=c||0===c?c:r,this.highWaterMark=~~this.highWaterMark,this.buffer=[],this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.objectMode=!!a.objectMode,t instanceof f&&(this.objectMode=this.objectMode||!!a.readableObjectMode),this.defaultEncoding=a.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,a.encoding&&(P||(P=e("string_decoder/").StringDecoder),this.decoder=new P(a.encoding),this.encoding=a.encoding)}function c(a){e("./_stream_duplex");return this instanceof c?(this._readableState=new f(a,this),this.readable=!0,void k.call(this)):new c(a)}function r(e,a,t,f,c){var r=b(a,t);if(r)e.emit("error",r);else if(x.isNullOrUndefined(t))a.reading=!1,a.ended||o(e,a);else if(a.objectMode||t&&t.length>0)if(a.ended&&!c){var n=new Error("stream.push() after EOF");e.emit("error",n)}else if(a.endEmitted&&c){var n=new Error("stream.unshift() after end event");e.emit("error",n)}else!a.decoder||c||f||(t=a.decoder.write(t)),c||(a.reading=!1),a.flowing&&0===a.length&&!a.sync?(e.emit("data",t),e.read(0)):(a.length+=a.objectMode?1:t.length,c?a.buffer.unshift(t):a.buffer.push(t),a.needReadable&&s(e)),h(e,a);else c||(a.reading=!1);return d(a)}function d(e){return!e.ended&&(e.needReadable||e.length=M)e=M;else{e--;for(var a=1;32>a;a<<=1)e|=e>>a;e++}return e}function i(e,a){return 0===a.length&&a.ended?0:a.objectMode?0===e?0:1:isNaN(e)||x.isNull(e)?a.flowing&&a.buffer.length?a.buffer[0].length:a.length:0>=e?0:(e>a.highWaterMark&&(a.highWaterMark=n(e)),e>a.length?a.ended?a.length:(a.needReadable=!0,0):e)}function b(e,a){var t=null;return x.isBuffer(a)||x.isString(a)||x.isNullOrUndefined(a)||e.objectMode||(t=new TypeError("Invalid non-string/buffer chunk")),t}function o(e,a){if(a.decoder&&!a.ended){var t=a.decoder.end();t&&t.length&&(a.buffer.push(t),a.length+=a.objectMode?1:t.length)}a.ended=!0,s(e)}function s(e){var a=e._readableState;a.needReadable=!1,a.emittedReadable||(B("emitReadable",a.flowing),a.emittedReadable=!0,a.sync?t.nextTick(function(){u(e)}):u(e))}function u(e){B("emit readable"),e.emit("readable"),v(e)}function h(e,a){a.readingMore||(a.readingMore=!0,t.nextTick(function(){l(e,a)}))}function l(e,a){for(var t=a.length;!a.reading&&!a.flowing&&!a.ended&&a.length=c)t=r?f.join(""):I.concat(f,c),f.length=0;else if(eb&&e>i;b++){var n=f[0],s=Math.min(e-i,n.length);r?t+=n.slice(0,s):n.copy(t,i,0,s),s0)throw new Error("endReadable called on non-empty stream");a.endEmitted||(a.ended=!0,t.nextTick(function(){a.endEmitted||0!==a.length||(a.endEmitted=!0,e.readable=!1,e.emit("end"))}))}function _(e,a){for(var t=0,f=e.length;f>t;t++)a(e[t],t)}function S(e,a){for(var t=0,f=e.length;f>t;t++)if(e[t]===a)return t;return-1}a.exports=c;var A=e("isarray"),I=e("buffer").Buffer;c.ReadableState=f;var E=e("events").EventEmitter;E.listenerCount||(E.listenerCount=function(e,a){return e.listeners(a).length});var k=e("stream"),x=e("core-util-is");x.inherits=e("inherits");var P,B=e("util");B=B&&B.debuglog?B.debuglog("stream"):function(){},x.inherits(c,k),c.prototype.push=function(e,a){var t=this._readableState;return x.isString(e)&&!t.objectMode&&(a=a||t.defaultEncoding,a!==t.encoding&&(e=new I(e,a),a="")),r(this,t,e,a,!1)},c.prototype.unshift=function(e){var a=this._readableState;return r(this,a,e,"",!0)},c.prototype.setEncoding=function(a){return P||(P=e("string_decoder/").StringDecoder),this._readableState.decoder=new P(a),this._readableState.encoding=a,this};var M=8388608;c.prototype.read=function(e){B("read",e);var a=this._readableState,t=e;if((!x.isNumber(e)||e>0)&&(a.emittedReadable=!1),0===e&&a.needReadable&&(a.length>=a.highWaterMark||a.ended))return B("read: emitReadable",a.length,a.ended),0===a.length&&a.ended?w(this):s(this),null;if(e=i(e,a),0===e&&a.ended)return 0===a.length&&w(this),null;var f=a.needReadable;B("need readable",f),(0===a.length||a.length-e0?y(e,a):null,x.isNull(c)&&(a.needReadable=!0,e=0),a.length-=e,0!==a.length||a.ended||(a.needReadable=!0),t!==e&&a.ended&&0===a.length&&w(this),x.isNull(c)||this.emit("data",c),c},c.prototype._read=function(e){this.emit("error",new Error("not implemented"))},c.prototype.pipe=function(e,a){function f(e){B("onunpipe"),e===s&&r()}function c(){B("onend"),e.end()}function r(){B("cleanup"),e.removeListener("close",i),e.removeListener("finish",b),e.removeListener("drain",g),e.removeListener("error",n),e.removeListener("unpipe",f),s.removeListener("end",c),s.removeListener("end",r),s.removeListener("data",d),!u.awaitDrain||e._writableState&&!e._writableState.needDrain||g()}function d(a){B("ondata");var t=e.write(a);!1===t&&(B("false write response, pause",s._readableState.awaitDrain),s._readableState.awaitDrain++,s.pause())}function n(a){B("onerror",a),o(),e.removeListener("error",n),0===E.listenerCount(e,"error")&&e.emit("error",a)}function i(){e.removeListener("finish",b),o()}function b(){B("onfinish"),e.removeListener("close",i),o()}function o(){B("unpipe"),s.unpipe(e)}var s=this,u=this._readableState;switch(u.pipesCount){case 0:u.pipes=e;break;case 1:u.pipes=[u.pipes,e];break;default:u.pipes.push(e)}u.pipesCount+=1,B("pipe count=%d opts=%j",u.pipesCount,a);var h=(!a||a.end!==!1)&&e!==t.stdout&&e!==t.stderr,l=h?c:r;u.endEmitted?t.nextTick(l):s.once("end",l),e.on("unpipe",f);var g=p(s);return e.on("drain",g),s.on("data",d),e._events&&e._events.error?A(e._events.error)?e._events.error.unshift(n):e._events.error=[n,e._events.error]:e.on("error",n),e.once("close",i),e.once("finish",b),e.emit("pipe",s),u.flowing||(B("pipe resume"),s.resume()),e},c.prototype.unpipe=function(e){var a=this._readableState;if(0===a.pipesCount)return this;if(1===a.pipesCount)return e&&e!==a.pipes?this:(e||(e=a.pipes),a.pipes=null,a.pipesCount=0,a.flowing=!1,e&&e.emit("unpipe",this),this);if(!e){var t=a.pipes,f=a.pipesCount;a.pipes=null,a.pipesCount=0,a.flowing=!1;for(var c=0;f>c;c++)t[c].emit("unpipe",this);return this}var c=S(a.pipes,e);return-1===c?this:(a.pipes.splice(c,1),a.pipesCount-=1,1===a.pipesCount&&(a.pipes=a.pipes[0]),e.emit("unpipe",this),this)},c.prototype.on=function(e,a){var f=k.prototype.on.call(this,e,a);if("data"===e&&!1!==this._readableState.flowing&&this.resume(),"readable"===e&&this.readable){var c=this._readableState;if(!c.readableListening)if(c.readableListening=!0,c.emittedReadable=!1,c.needReadable=!0,c.reading)c.length&&s(this,c);else{var r=this;t.nextTick(function(){B("readable nexttick read 0"),r.read(0)})}}return f},c.prototype.addListener=c.prototype.on,c.prototype.resume=function(){var e=this._readableState;return e.flowing||(B("resume"),e.flowing=!0,e.reading||(B("resume read 0"), -this.read(0)),g(this,e)),this},c.prototype.pause=function(){return B("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(B("pause"),this._readableState.flowing=!1,this.emit("pause")),this},c.prototype.wrap=function(e){var a=this._readableState,t=!1,f=this;e.on("end",function(){if(B("wrapped end"),a.decoder&&!a.ended){var e=a.decoder.end();e&&e.length&&f.push(e)}f.push(null)}),e.on("data",function(c){if(B("wrapped data"),a.decoder&&(c=a.decoder.write(c)),c&&(a.objectMode||c.length)){var r=f.push(c);r||(t=!0,e.pause())}});for(var c in e)x.isFunction(e[c])&&x.isUndefined(this[c])&&(this[c]=function(a){return function(){return e[a].apply(e,arguments)}}(c));var r=["error","close","destroy","pause","resume"];return _(r,function(a){e.on(a,f.emit.bind(f,a))}),f._read=function(a){B("wrapped _read",a),t&&(t=!1,e.resume())},f},c._fromList=y}).call(this,e("_process"))},{"./_stream_duplex":305,_process:299,buffer:99,"core-util-is":310,events:295,inherits:296,isarray:298,stream:315,"string_decoder/":316,util:98}],308:[function(e,a,t){function f(e,a){this.afterTransform=function(e,t){return c(a,e,t)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null}function c(e,a,t){var f=e._transformState;f.transforming=!1;var c=f.writecb;if(!c)return e.emit("error",new Error("no writecb in Transform class"));f.writechunk=null,f.writecb=null,i.isNullOrUndefined(t)||e.push(t),c&&c(a);var r=e._readableState;r.reading=!1,(r.needReadable||r.length1){for(var t=[],f=0;f=this.charLength-this.charReceived?this.charLength-this.charReceived:e.length;if(e.copy(this.charBuffer,this.charReceived,0,t),this.charReceived+=t,this.charReceived=55296&&56319>=f)){if(this.charReceived=this.charLength=0,0===e.length)return a;break}this.charLength+=this.surrogateSize,a=""}this.detectIncompleteChar(e);var c=e.length;this.charLength&&(e.copy(this.charBuffer,0,e.length-this.charReceived,c),c-=this.charReceived),a+=e.toString(this.encoding,0,c);var c=a.length-1,f=a.charCodeAt(c);if(f>=55296&&56319>=f){var r=this.surrogateSize;return this.charLength+=r,this.charReceived+=r,this.charBuffer.copy(this.charBuffer,r,0,r),e.copy(this.charBuffer,0,0,r),a.substring(0,c)}return a},b.prototype.detectIncompleteChar=function(e){for(var a=e.length>=3?3:e.length;a>0;a--){var t=e[e.length-a];if(1==a&&t>>5==6){this.charLength=2;break}if(2>=a&&t>>4==14){this.charLength=3;break}if(3>=a&&t>>3==30){this.charLength=4;break}}this.charReceived=a},b.prototype.end=function(e){var a="";if(e&&e.length&&(a=this.write(e)),this.charReceived){var t=this.charReceived,f=this.charBuffer,c=this.encoding;a+=f.slice(0,t).toString(c)}return a}},{buffer:99}],317:[function(e,a,t){function f(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function c(e,a,t){if(e&&b(e)&&e instanceof f)return e;var c=new f;return c.parse(e,a,t),c}function r(e){return i(e)&&(e=c(e)),e instanceof f?e.format():f.prototype.format.call(e)}function d(e,a){return c(e,!1,!0).resolve(a)}function n(e,a){return e?c(e,!1,!0).resolveObject(a):a}function i(e){return"string"==typeof e}function b(e){return"object"==typeof e&&null!==e}function o(e){return null===e}function s(e){return null==e}var u=e("punycode");t.parse=c,t.resolve=d,t.resolveObject=n,t.format=r,t.Url=f;var h=/^([a-z0-9.+-]+:)/i,l=/:[0-9]*$/,p=["<",">",'"',"`"," ","\r","\n"," "],g=["{","}","|","\\","^","`"].concat(p),m=["'"].concat(g),v=["%","/","?",";","#"].concat(m),y=["/","?","#"],w=255,_=/^[a-z0-9A-Z_-]{0,63}$/,S=/^([a-z0-9A-Z_-]{0,63})(.*)$/,A={javascript:!0,"javascript:":!0},I={javascript:!0,"javascript:":!0},E={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},k=e("querystring");f.prototype.parse=function(e,a,t){if(!i(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var f=e;f=f.trim();var c=h.exec(f);if(c){c=c[0];var r=c.toLowerCase();this.protocol=r,f=f.substr(c.length)}if(t||c||f.match(/^\/\/[^@\/]+@[^@\/]+/)){var d="//"===f.substr(0,2);!d||c&&I[c]||(f=f.substr(2),this.slashes=!0)}if(!I[c]&&(d||c&&!E[c])){for(var n=-1,b=0;bo)&&(n=o)}var s,l;l=-1===n?f.lastIndexOf("@"):f.lastIndexOf("@",n),-1!==l&&(s=f.slice(0,l),f=f.slice(l+1),this.auth=decodeURIComponent(s)),n=-1;for(var b=0;bo)&&(n=o)}-1===n&&(n=f.length),this.host=f.slice(0,n),f=f.slice(n),this.parseHost(),this.hostname=this.hostname||"";var p="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!p)for(var g=this.hostname.split(/\./),b=0,x=g.length;x>b;b++){var P=g[b];if(P&&!P.match(_)){for(var B="",M=0,O=P.length;O>M;M++)B+=P.charCodeAt(M)>127?"x":P[M];if(!B.match(_)){var R=g.slice(0,b),T=g.slice(b+1),C=P.match(S);C&&(R.push(C[1]),T.unshift(C[2])),T.length&&(f="/"+T.join(".")+f),this.hostname=R.join(".");break}}}if(this.hostname.length>w?this.hostname="":this.hostname=this.hostname.toLowerCase(),!p){for(var N=this.hostname.split("."),j=[],b=0;bb;b++){var z=m[b],K=encodeURIComponent(z);K===z&&(K=escape(z)),f=f.split(z).join(K)}var H=f.indexOf("#");-1!==H&&(this.hash=f.substr(H),f=f.slice(0,H));var F=f.indexOf("?");if(-1!==F?(this.search=f.substr(F),this.query=f.substr(F+1),a&&(this.query=k.parse(this.query)),f=f.slice(0,F)):a&&(this.search="",this.query={}),f&&(this.pathname=f),E[r]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var D=this.pathname||"",L=this.search||"";this.path=D+L}return this.href=this.format(),this},f.prototype.format=function(){var e=this.auth||"";e&&(e=encodeURIComponent(e),e=e.replace(/%3A/i,":"),e+="@");var a=this.protocol||"",t=this.pathname||"",f=this.hash||"",c=!1,r="";this.host?c=e+this.host:this.hostname&&(c=e+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(c+=":"+this.port)),this.query&&b(this.query)&&Object.keys(this.query).length&&(r=k.stringify(this.query));var d=this.search||r&&"?"+r||"";return a&&":"!==a.substr(-1)&&(a+=":"),this.slashes||(!a||E[a])&&c!==!1?(c="//"+(c||""),t&&"/"!==t.charAt(0)&&(t="/"+t)):c||(c=""),f&&"#"!==f.charAt(0)&&(f="#"+f),d&&"?"!==d.charAt(0)&&(d="?"+d),t=t.replace(/[?#]/g,function(e){return encodeURIComponent(e)}),d=d.replace("#","%23"),a+c+t+d+f},f.prototype.resolve=function(e){return this.resolveObject(c(e,!1,!0)).format()},f.prototype.resolveObject=function(e){if(i(e)){var a=new f;a.parse(e,!1,!0),e=a}var t=new f;if(Object.keys(this).forEach(function(e){t[e]=this[e]},this),t.hash=e.hash,""===e.href)return t.href=t.format(),t;if(e.slashes&&!e.protocol)return Object.keys(e).forEach(function(a){"protocol"!==a&&(t[a]=e[a])}),E[t.protocol]&&t.hostname&&!t.pathname&&(t.path=t.pathname="/"),t.href=t.format(),t;if(e.protocol&&e.protocol!==t.protocol){if(!E[e.protocol])return Object.keys(e).forEach(function(a){t[a]=e[a]}),t.href=t.format(),t;if(t.protocol=e.protocol,e.host||I[e.protocol])t.pathname=e.pathname;else{for(var c=(e.pathname||"").split("/");c.length&&!(e.host=c.shift()););e.host||(e.host=""),e.hostname||(e.hostname=""),""!==c[0]&&c.unshift(""),c.length<2&&c.unshift(""),t.pathname=c.join("/")}if(t.search=e.search,t.query=e.query,t.host=e.host||"",t.auth=e.auth,t.hostname=e.hostname||e.host,t.port=e.port,t.pathname||t.search){var r=t.pathname||"",d=t.search||"";t.path=r+d}return t.slashes=t.slashes||e.slashes,t.href=t.format(),t}var n=t.pathname&&"/"===t.pathname.charAt(0),b=e.host||e.pathname&&"/"===e.pathname.charAt(0),u=b||n||t.host&&e.pathname,h=u,l=t.pathname&&t.pathname.split("/")||[],c=e.pathname&&e.pathname.split("/")||[],p=t.protocol&&!E[t.protocol];if(p&&(t.hostname="",t.port=null,t.host&&(""===l[0]?l[0]=t.host:l.unshift(t.host)),t.host="",e.protocol&&(e.hostname=null,e.port=null,e.host&&(""===c[0]?c[0]=e.host:c.unshift(e.host)),e.host=null),u=u&&(""===c[0]||""===l[0])),b)t.host=e.host||""===e.host?e.host:t.host,t.hostname=e.hostname||""===e.hostname?e.hostname:t.hostname,t.search=e.search,t.query=e.query,l=c;else if(c.length)l||(l=[]),l.pop(),l=l.concat(c),t.search=e.search,t.query=e.query;else if(!s(e.search)){if(p){t.hostname=t.host=l.shift();var g=t.host&&t.host.indexOf("@")>0?t.host.split("@"):!1;g&&(t.auth=g.shift(),t.host=t.hostname=g.shift())}return t.search=e.search,t.query=e.query,o(t.pathname)&&o(t.search)||(t.path=(t.pathname?t.pathname:"")+(t.search?t.search:"")),t.href=t.format(),t}if(!l.length)return t.pathname=null,t.search?t.path="/"+t.search:t.path=null,t.href=t.format(),t;for(var m=l.slice(-1)[0],v=(t.host||e.host)&&("."===m||".."===m)||""===m,y=0,w=l.length;w>=0;w--)m=l[w],"."==m?l.splice(w,1):".."===m?(l.splice(w,1),y++):y&&(l.splice(w,1),y--);if(!u&&!h)for(;y--;y)l.unshift("..");!u||""===l[0]||l[0]&&"/"===l[0].charAt(0)||l.unshift(""),v&&"/"!==l.join("/").substr(-1)&&l.push("");var _=""===l[0]||l[0]&&"/"===l[0].charAt(0);if(p){t.hostname=t.host=_?"":l.length?l.shift():"";var g=t.host&&t.host.indexOf("@")>0?t.host.split("@"):!1;g&&(t.auth=g.shift(),t.host=t.hostname=g.shift())}return u=u||t.host&&l.length,u&&!_&&l.unshift(""),l.length?t.pathname=l.join("/"):(t.pathname=null,t.path=null),o(t.pathname)&&o(t.search)||(t.path=(t.pathname?t.pathname:"")+(t.search?t.search:"")),t.auth=e.auth||t.auth,t.slashes=t.slashes||e.slashes,t.href=t.format(),t},f.prototype.parseHost=function(){var e=this.host,a=l.exec(e);a&&(a=a[0],":"!==a&&(this.port=a.substr(1)),e=e.substr(0,e.length-a.length)),e&&(this.hostname=e)}},{punycode:300,querystring:303}],318:[function(e,a,t){a.exports=function(e){return e&&"object"==typeof e&&"function"==typeof e.copy&&"function"==typeof e.fill&&"function"==typeof e.readUInt8}},{}],319:[function(e,a,t){(function(a,f){function c(e,a){var f={seen:[],stylize:d};return arguments.length>=3&&(f.depth=arguments[2]),arguments.length>=4&&(f.colors=arguments[3]),p(a)?f.showHidden=a:a&&t._extend(f,a),_(f.showHidden)&&(f.showHidden=!1),_(f.depth)&&(f.depth=2),_(f.colors)&&(f.colors=!1),_(f.customInspect)&&(f.customInspect=!0),f.colors&&(f.stylize=r),i(f,e,f.depth)}function r(e,a){var t=c.styles[a];return t?"["+c.colors[t][0]+"m"+e+"["+c.colors[t][1]+"m":e}function d(e,a){return e}function n(e){var a={};return e.forEach(function(e,t){a[e]=!0}),a}function i(e,a,f){if(e.customInspect&&a&&k(a.inspect)&&a.inspect!==t.inspect&&(!a.constructor||a.constructor.prototype!==a)){var c=a.inspect(f,e);return y(c)||(c=i(e,c,f)),c}var r=b(e,a);if(r)return r;var d=Object.keys(a),p=n(d);if(e.showHidden&&(d=Object.getOwnPropertyNames(a)),E(a)&&(d.indexOf("message")>=0||d.indexOf("description")>=0))return o(a);if(0===d.length){if(k(a)){var g=a.name?": "+a.name:"";return e.stylize("[Function"+g+"]","special")}if(S(a))return e.stylize(RegExp.prototype.toString.call(a),"regexp");if(I(a))return e.stylize(Date.prototype.toString.call(a),"date");if(E(a))return o(a)}var m="",v=!1,w=["{","}"];if(l(a)&&(v=!0,w=["[","]"]),k(a)){var _=a.name?": "+a.name:"";m=" [Function"+_+"]"}if(S(a)&&(m=" "+RegExp.prototype.toString.call(a)),I(a)&&(m=" "+Date.prototype.toUTCString.call(a)),E(a)&&(m=" "+o(a)),0===d.length&&(!v||0==a.length))return w[0]+m+w[1];if(0>f)return S(a)?e.stylize(RegExp.prototype.toString.call(a),"regexp"):e.stylize("[Object]","special");e.seen.push(a);var A;return A=v?s(e,a,f,p,d):d.map(function(t){return u(e,a,f,p,t,v)}),e.seen.pop(),h(A,m,w)}function b(e,a){if(_(a))return e.stylize("undefined","undefined");if(y(a)){var t="'"+JSON.stringify(a).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(t,"string")}return v(a)?e.stylize(""+a,"number"):p(a)?e.stylize(""+a,"boolean"):g(a)?e.stylize("null","null"):void 0}function o(e){return"["+Error.prototype.toString.call(e)+"]"}function s(e,a,t,f,c){for(var r=[],d=0,n=a.length;n>d;++d)O(a,String(d))?r.push(u(e,a,t,f,String(d),!0)):r.push("");return c.forEach(function(c){c.match(/^\d+$/)||r.push(u(e,a,t,f,c,!0))}),r}function u(e,a,t,f,c,r){var d,n,b;if(b=Object.getOwnPropertyDescriptor(a,c)||{value:a[c]},b.get?n=b.set?e.stylize("[Getter/Setter]","special"):e.stylize("[Getter]","special"):b.set&&(n=e.stylize("[Setter]","special")),O(f,c)||(d="["+c+"]"),n||(e.seen.indexOf(b.value)<0?(n=g(t)?i(e,b.value,null):i(e,b.value,t-1),n.indexOf("\n")>-1&&(n=r?n.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+n.split("\n").map(function(e){return" "+e}).join("\n"))):n=e.stylize("[Circular]","special")),_(d)){if(r&&c.match(/^\d+$/))return n;d=JSON.stringify(""+c),d.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(d=d.substr(1,d.length-2),d=e.stylize(d,"name")):(d=d.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),d=e.stylize(d,"string"))}return d+": "+n}function h(e,a,t){var f=0,c=e.reduce(function(e,a){return f++,a.indexOf("\n")>=0&&f++,e+a.replace(/\u001b\[\d\d?m/g,"").length+1},0);return c>60?t[0]+(""===a?"":a+"\n ")+" "+e.join(",\n ")+" "+t[1]:t[0]+a+" "+e.join(", ")+" "+t[1]}function l(e){return Array.isArray(e)}function p(e){return"boolean"==typeof e}function g(e){return null===e}function m(e){return null==e}function v(e){return"number"==typeof e}function y(e){return"string"==typeof e}function w(e){return"symbol"==typeof e}function _(e){return void 0===e}function S(e){return A(e)&&"[object RegExp]"===P(e)}function A(e){return"object"==typeof e&&null!==e}function I(e){return A(e)&&"[object Date]"===P(e)}function E(e){return A(e)&&("[object Error]"===P(e)||e instanceof Error)}function k(e){return"function"==typeof e}function x(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||"undefined"==typeof e}function P(e){return Object.prototype.toString.call(e)}function B(e){return 10>e?"0"+e.toString(10):e.toString(10)}function M(){var e=new Date,a=[B(e.getHours()),B(e.getMinutes()),B(e.getSeconds())].join(":");return[e.getDate(),N[e.getMonth()],a].join(" ")}function O(e,a){return Object.prototype.hasOwnProperty.call(e,a)}var R=/%[sdj%]/g;t.format=function(e){if(!y(e)){for(var a=[],t=0;t=r)return e;switch(e){case"%s":return String(f[t++]);case"%d":return Number(f[t++]);case"%j":try{return JSON.stringify(f[t++])}catch(a){return"[Circular]"}default:return e}}),n=f[t];r>t;n=f[++t])d+=g(n)||!A(n)?" "+n:" "+c(n);return d},t.deprecate=function(e,c){function r(){if(!d){if(a.throwDeprecation)throw new Error(c);a.traceDeprecation?console.trace(c):console.error(c),d=!0}return e.apply(this,arguments)}if(_(f.process))return function(){return t.deprecate(e,c).apply(this,arguments)};if(a.noDeprecation===!0)return e;var d=!1;return r};var T,C={};t.debuglog=function(e){if(_(T)&&(T=a.env.NODE_DEBUG||""),e=e.toUpperCase(),!C[e])if(new RegExp("\\b"+e+"\\b","i").test(T)){var f=a.pid;C[e]=function(){var a=t.format.apply(t,arguments);console.error("%s %d: %s",e,f,a)}}else C[e]=function(){};return C[e]},t.inspect=c,c.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},c.styles={special:"cyan",number:"yellow","boolean":"yellow",undefined:"grey","null":"bold",string:"green",date:"magenta",regexp:"red"},t.isArray=l,t.isBoolean=p,t.isNull=g,t.isNullOrUndefined=m,t.isNumber=v,t.isString=y,t.isSymbol=w,t.isUndefined=_,t.isRegExp=S,t.isObject=A,t.isDate=I,t.isError=E,t.isFunction=k,t.isPrimitive=x,t.isBuffer=e("./support/isBuffer");var N=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];t.log=function(){console.log("%s - %s",M(),t.format.apply(t,arguments))},t.inherits=e("inherits"),t._extend=function(e,a){if(!a||!A(a))return e;for(var t=Object.keys(a),f=t.length;f--;)e[t[f]]=a[t[f]];return e}}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":318,_process:299,inherits:296}],320:[function(require,module,exports){function Context(){}var indexOf=require("indexof"),Object_keys=function(e){if(Object.keys)return Object.keys(e);var a=[];for(var t in e)a.push(t);return a},forEach=function(e,a){if(e.forEach)return e.forEach(a);for(var t=0;ta;a++)128>a?e[a]=a<<1:e[a]=a<<1^283;for(var t=0,f=0,a=0;256>a;a++){var c=f^f<<1^f<<2^f<<3^f<<4;c=c>>>8^255&c^99,r[t]=c,d[c]=t;var p=e[t],g=e[p],m=e[g],v=257*e[c]^16843008*c;n[t]=v<<24|v>>>8,i[t]=v<<16|v>>>16,b[t]=v<<8|v>>>24,o[t]=v;var v=16843009*m^65537*g^257*p^16843008*t;s[c]=v<<24|v>>>8,u[c]=v<<16|v>>>16,h[c]=v<<8|v>>>24,l[c]=v,t?(t=p^e[e[e[m^p]]],f^=e[e[f]]):t=f=1}}();var p=[0,1,2,4,8,16,32,64,128,27,54],g=c.AES=f.extend({_doReset:function(){for(var e=this._key,a=e.words,t=e.sigBytes/4,f=this._nRounds=t+6,c=4*(f+1),d=this._keySchedule=[],n=0;c>n;n++)if(t>n)d[n]=a[n];else{var i=d[n-1];n%t?t>6&&n%t==4&&(i=r[i>>>24]<<24|r[i>>>16&255]<<16|r[i>>>8&255]<<8|r[255&i]):(i=i<<8|i>>>24,i=r[i>>>24]<<24|r[i>>>16&255]<<16|r[i>>>8&255]<<8|r[255&i],i^=p[n/t|0]<<24),d[n]=d[n-t]^i}for(var b=this._invKeySchedule=[],o=0;c>o;o++){var n=c-o;if(o%4)var i=d[n];else var i=d[n-4];4>o||4>=n?b[o]=i:b[o]=s[r[i>>>24]]^u[r[i>>>16&255]]^h[r[i>>>8&255]]^l[r[255&i]]}},encryptBlock:function(e,a){this._doCryptBlock(e,a,this._keySchedule,n,i,b,o,r)},decryptBlock:function(e,a){var t=e[a+1];e[a+1]=e[a+3],e[a+3]=t,this._doCryptBlock(e,a,this._invKeySchedule,s,u,h,l,d);var t=e[a+1];e[a+1]=e[a+3],e[a+3]=t},_doCryptBlock:function(e,a,t,f,c,r,d,n){for(var i=this._nRounds,b=e[a]^t[0],o=e[a+1]^t[1],s=e[a+2]^t[2],u=e[a+3]^t[3],h=4,l=1;i>l;l++){var p=f[b>>>24]^c[o>>>16&255]^r[s>>>8&255]^d[255&u]^t[h++],g=f[o>>>24]^c[s>>>16&255]^r[u>>>8&255]^d[255&b]^t[h++],m=f[s>>>24]^c[u>>>16&255]^r[b>>>8&255]^d[255&o]^t[h++],v=f[u>>>24]^c[b>>>16&255]^r[o>>>8&255]^d[255&s]^t[h++];b=p,o=g,s=m,u=v}var p=(n[b>>>24]<<24|n[o>>>16&255]<<16|n[s>>>8&255]<<8|n[255&u])^t[h++],g=(n[o>>>24]<<24|n[s>>>16&255]<<16|n[u>>>8&255]<<8|n[255&b])^t[h++],m=(n[s>>>24]<<24|n[u>>>16&255]<<16|n[b>>>8&255]<<8|n[255&o])^t[h++],v=(n[u>>>24]<<24|n[b>>>16&255]<<16|n[o>>>8&255]<<8|n[255&s])^t[h++];e[a]=p,e[a+1]=g,e[a+2]=m,e[a+3]=v},keySize:8});a.AES=f._createHelper(g)}(),e.AES})},{"./cipher-core":323,"./core":324,"./enc-base64":325,"./evpkdf":327,"./md5":332}],323:[function(e,a,t){!function(f,c){"object"==typeof t?a.exports=t=c(e("./core")):"function"==typeof define&&define.amd?define(["./core"],c):c(f.CryptoJS)}(this,function(e){e.lib.Cipher||function(a){var t=e,f=t.lib,c=f.Base,r=f.WordArray,d=f.BufferedBlockAlgorithm,n=t.enc,i=(n.Utf8,n.Base64),b=t.algo,o=b.EvpKDF,s=f.Cipher=d.extend({cfg:c.extend(),createEncryptor:function(e,a){return this.create(this._ENC_XFORM_MODE,e,a)},createDecryptor:function(e,a){return this.create(this._DEC_XFORM_MODE,e,a)},init:function(e,a,t){this.cfg=this.cfg.extend(t),this._xformMode=e,this._key=a,this.reset()},reset:function(){d.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){e&&this._append(e);var a=this._doFinalize();return a},keySize:4,ivSize:4,_ENC_XFORM_MODE:1, -_DEC_XFORM_MODE:2,_createHelper:function(){function e(e){return"string"==typeof e?A:w}return function(a){return{encrypt:function(t,f,c){return e(f).encrypt(a,t,f,c)},decrypt:function(t,f,c){return e(f).decrypt(a,t,f,c)}}}}()}),u=(f.StreamCipher=s.extend({_doFinalize:function(){var e=this._process(!0);return e},blockSize:1}),t.mode={}),h=f.BlockCipherMode=c.extend({createEncryptor:function(e,a){return this.Encryptor.create(e,a)},createDecryptor:function(e,a){return this.Decryptor.create(e,a)},init:function(e,a){this._cipher=e,this._iv=a}}),l=u.CBC=function(){function e(e,t,f){var c=this._iv;if(c){var r=c;this._iv=a}else var r=this._prevBlock;for(var d=0;f>d;d++)e[t+d]^=r[d]}var t=h.extend();return t.Encryptor=t.extend({processBlock:function(a,t){var f=this._cipher,c=f.blockSize;e.call(this,a,t,c),f.encryptBlock(a,t),this._prevBlock=a.slice(t,t+c)}}),t.Decryptor=t.extend({processBlock:function(a,t){var f=this._cipher,c=f.blockSize,r=a.slice(t,t+c);f.decryptBlock(a,t),e.call(this,a,t,c),this._prevBlock=r}}),t}(),p=t.pad={},g=p.Pkcs7={pad:function(e,a){for(var t=4*a,f=t-e.sigBytes%t,c=f<<24|f<<16|f<<8|f,d=[],n=0;f>n;n+=4)d.push(c);var i=r.create(d,f);e.concat(i)},unpad:function(e){var a=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=a}},m=(f.BlockCipher=s.extend({cfg:s.cfg.extend({mode:l,padding:g}),reset:function(){s.reset.call(this);var e=this.cfg,a=e.iv,t=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var f=t.createEncryptor;else{var f=t.createDecryptor;this._minBufferSize=1}this._mode=f.call(t,this,a&&a.words)},_doProcessBlock:function(e,a){this._mode.processBlock(e,a)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var a=this._process(!0)}else{var a=this._process(!0);e.unpad(a)}return a},blockSize:4}),f.CipherParams=c.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}})),v=t.format={},y=v.OpenSSL={stringify:function(e){var a=e.ciphertext,t=e.salt;if(t)var f=r.create([1398893684,1701076831]).concat(t).concat(a);else var f=a;return f.toString(i)},parse:function(e){var a=i.parse(e),t=a.words;if(1398893684==t[0]&&1701076831==t[1]){var f=r.create(t.slice(2,4));t.splice(0,4),a.sigBytes-=16}return m.create({ciphertext:a,salt:f})}},w=f.SerializableCipher=c.extend({cfg:c.extend({format:y}),encrypt:function(e,a,t,f){f=this.cfg.extend(f);var c=e.createEncryptor(t,f),r=c.finalize(a),d=c.cfg;return m.create({ciphertext:r,key:t,iv:d.iv,algorithm:e,mode:d.mode,padding:d.padding,blockSize:e.blockSize,formatter:f.format})},decrypt:function(e,a,t,f){f=this.cfg.extend(f),a=this._parse(a,f.format);var c=e.createDecryptor(t,f).finalize(a.ciphertext);return c},_parse:function(e,a){return"string"==typeof e?a.parse(e,this):e}}),_=t.kdf={},S=_.OpenSSL={execute:function(e,a,t,f){f||(f=r.random(8));var c=o.create({keySize:a+t}).compute(e,f),d=r.create(c.words.slice(a),4*t);return c.sigBytes=4*a,m.create({key:c,iv:d,salt:f})}},A=f.PasswordBasedCipher=w.extend({cfg:w.cfg.extend({kdf:S}),encrypt:function(e,a,t,f){f=this.cfg.extend(f);var c=f.kdf.execute(t,e.keySize,e.ivSize);f.iv=c.iv;var r=w.encrypt.call(this,e,a,c.key,f);return r.mixIn(c),r},decrypt:function(e,a,t,f){f=this.cfg.extend(f),a=this._parse(a,f.format);var c=f.kdf.execute(t,e.keySize,e.ivSize,a.salt);f.iv=c.iv;var r=w.decrypt.call(this,e,a,c.key,f);return r}})}()})},{"./core":324}],324:[function(e,a,t){!function(e,f){"object"==typeof t?a.exports=t=f():"function"==typeof define&&define.amd?define([],f):e.CryptoJS=f()}(this,function(){var e=e||function(e,a){var t={},f=t.lib={},c=f.Base=function(){function e(){}return{extend:function(a){e.prototype=this;var t=new e;return a&&t.mixIn(a),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var a in e)e.hasOwnProperty(a)&&(this[a]=e[a]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),r=f.WordArray=c.extend({init:function(e,t){e=this.words=e||[],t!=a?this.sigBytes=t:this.sigBytes=4*e.length},toString:function(e){return(e||n).stringify(this)},concat:function(e){var a=this.words,t=e.words,f=this.sigBytes,c=e.sigBytes;if(this.clamp(),f%4)for(var r=0;c>r;r++){var d=t[r>>>2]>>>24-r%4*8&255;a[f+r>>>2]|=d<<24-(f+r)%4*8}else for(var r=0;c>r;r+=4)a[f+r>>>2]=t[r>>>2];return this.sigBytes+=c,this},clamp:function(){var a=this.words,t=this.sigBytes;a[t>>>2]&=4294967295<<32-t%4*8,a.length=e.ceil(t/4)},clone:function(){var e=c.clone.call(this);return e.words=this.words.slice(0),e},random:function(a){for(var t,f=[],c=function(a){var a=a,t=987654321,f=4294967295;return function(){t=36969*(65535&t)+(t>>16)&f,a=18e3*(65535&a)+(a>>16)&f;var c=(t<<16)+a&f;return c/=4294967296,c+=.5,c*(e.random()>.5?1:-1)}},d=0;a>d;d+=4){var n=c(4294967296*(t||e.random()));t=987654071*n(),f.push(4294967296*n()|0)}return new r.init(f,a)}}),d=t.enc={},n=d.Hex={stringify:function(e){for(var a=e.words,t=e.sigBytes,f=[],c=0;t>c;c++){var r=a[c>>>2]>>>24-c%4*8&255;f.push((r>>>4).toString(16)),f.push((15&r).toString(16))}return f.join("")},parse:function(e){for(var a=e.length,t=[],f=0;a>f;f+=2)t[f>>>3]|=parseInt(e.substr(f,2),16)<<24-f%8*4;return new r.init(t,a/2)}},i=d.Latin1={stringify:function(e){for(var a=e.words,t=e.sigBytes,f=[],c=0;t>c;c++){var r=a[c>>>2]>>>24-c%4*8&255;f.push(String.fromCharCode(r))}return f.join("")},parse:function(e){for(var a=e.length,t=[],f=0;a>f;f++)t[f>>>2]|=(255&e.charCodeAt(f))<<24-f%4*8;return new r.init(t,a)}},b=d.Utf8={stringify:function(e){try{return decodeURIComponent(escape(i.stringify(e)))}catch(a){throw new Error("Malformed UTF-8 data")}},parse:function(e){return i.parse(unescape(encodeURIComponent(e)))}},o=f.BufferedBlockAlgorithm=c.extend({reset:function(){this._data=new r.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=b.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(a){var t=this._data,f=t.words,c=t.sigBytes,d=this.blockSize,n=4*d,i=c/n;i=a?e.ceil(i):e.max((0|i)-this._minBufferSize,0);var b=i*d,o=e.min(4*b,c);if(b){for(var s=0;b>s;s+=d)this._doProcessBlock(f,s);var u=f.splice(0,b);t.sigBytes-=o}return new r.init(u,o)},clone:function(){var e=c.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0}),s=(f.Hasher=o.extend({cfg:c.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){o.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){e&&this._append(e);var a=this._doFinalize();return a},blockSize:16,_createHelper:function(e){return function(a,t){return new e.init(t).finalize(a)}},_createHmacHelper:function(e){return function(a,t){return new s.HMAC.init(e,t).finalize(a)}}}),t.algo={});return t}(Math);return e})},{}],325:[function(e,a,t){!function(f,c){"object"==typeof t?a.exports=t=c(e("./core")):"function"==typeof define&&define.amd?define(["./core"],c):c(f.CryptoJS)}(this,function(e){return function(){var a=e,t=a.lib,f=t.WordArray,c=a.enc;c.Base64={stringify:function(e){var a=e.words,t=e.sigBytes,f=this._map;e.clamp();for(var c=[],r=0;t>r;r+=3)for(var d=a[r>>>2]>>>24-r%4*8&255,n=a[r+1>>>2]>>>24-(r+1)%4*8&255,i=a[r+2>>>2]>>>24-(r+2)%4*8&255,b=d<<16|n<<8|i,o=0;4>o&&t>r+.75*o;o++)c.push(f.charAt(b>>>6*(3-o)&63));var s=f.charAt(64);if(s)for(;c.length%4;)c.push(s);return c.join("")},parse:function(e){var a=e.length,t=this._map,c=t.charAt(64);if(c){var r=e.indexOf(c);-1!=r&&(a=r)}for(var d=[],n=0,i=0;a>i;i++)if(i%4){var b=t.indexOf(e.charAt(i-1))<>>6-i%4*2,s=b|o;d[n>>>2]|=s<<24-n%4*8,n++}return f.create(d,n)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),e.enc.Base64})},{"./core":324}],326:[function(e,a,t){!function(f,c){"object"==typeof t?a.exports=t=c(e("./core")):"function"==typeof define&&define.amd?define(["./core"],c):c(f.CryptoJS)}(this,function(e){return function(){function a(e){return e<<8&4278255360|e>>>8&16711935}var t=e,f=t.lib,c=f.WordArray,r=t.enc;r.Utf16=r.Utf16BE={stringify:function(e){for(var a=e.words,t=e.sigBytes,f=[],c=0;t>c;c+=2){var r=a[c>>>2]>>>16-c%4*8&65535;f.push(String.fromCharCode(r))}return f.join("")},parse:function(e){for(var a=e.length,t=[],f=0;a>f;f++)t[f>>>1]|=e.charCodeAt(f)<<16-f%2*16;return c.create(t,2*a)}};r.Utf16LE={stringify:function(e){for(var t=e.words,f=e.sigBytes,c=[],r=0;f>r;r+=2){var d=a(t[r>>>2]>>>16-r%4*8&65535);c.push(String.fromCharCode(d))}return c.join("")},parse:function(e){for(var t=e.length,f=[],r=0;t>r;r++)f[r>>>1]|=a(e.charCodeAt(r)<<16-r%2*16);return c.create(f,2*t)}}}(),e.enc.Utf16})},{"./core":324}],327:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./sha1"),e("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],c):c(f.CryptoJS)}(this,function(e){return function(){var a=e,t=a.lib,f=t.Base,c=t.WordArray,r=a.algo,d=r.MD5,n=r.EvpKDF=f.extend({cfg:f.extend({keySize:4,hasher:d,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,a){for(var t=this.cfg,f=t.hasher.create(),r=c.create(),d=r.words,n=t.keySize,i=t.iterations;d.lengtho;o++)b=f.finalize(b),f.reset();r.concat(b)}return r.sigBytes=4*n,r}});a.EvpKDF=function(e,a,t){return n.create(t).compute(e,a)}}(),e.EvpKDF})},{"./core":324,"./hmac":329,"./sha1":348}],328:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return function(a){var t=e,f=t.lib,c=f.CipherParams,r=t.enc,d=r.Hex,n=t.format;n.Hex={stringify:function(e){return e.ciphertext.toString(d)},parse:function(e){var a=d.parse(e);return c.create({ciphertext:a})}}}(),e.format.Hex})},{"./cipher-core":323,"./core":324}],329:[function(e,a,t){!function(f,c){"object"==typeof t?a.exports=t=c(e("./core")):"function"==typeof define&&define.amd?define(["./core"],c):c(f.CryptoJS)}(this,function(e){!function(){var a=e,t=a.lib,f=t.Base,c=a.enc,r=c.Utf8,d=a.algo;d.HMAC=f.extend({init:function(e,a){e=this._hasher=new e.init,"string"==typeof a&&(a=r.parse(a));var t=e.blockSize,f=4*t;a.sigBytes>f&&(a=e.finalize(a)),a.clamp();for(var c=this._oKey=a.clone(),d=this._iKey=a.clone(),n=c.words,i=d.words,b=0;t>b;b++)n[b]^=1549556828,i[b]^=909522486;c.sigBytes=d.sigBytes=f,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var a=this._hasher,t=a.finalize(e);a.reset();var f=a.finalize(this._oKey.clone().concat(t));return f}})}()})},{"./core":324}],330:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./x64-core"),e("./lib-typedarrays"),e("./enc-utf16"),e("./enc-base64"),e("./md5"),e("./sha1"),e("./sha256"),e("./sha224"),e("./sha512"),e("./sha384"),e("./sha3"),e("./ripemd160"),e("./hmac"),e("./pbkdf2"),e("./evpkdf"),e("./cipher-core"),e("./mode-cfb"),e("./mode-ctr"),e("./mode-ctr-gladman"),e("./mode-ofb"),e("./mode-ecb"),e("./pad-ansix923"),e("./pad-iso10126"),e("./pad-iso97971"),e("./pad-zeropadding"),e("./pad-nopadding"),e("./format-hex"),e("./aes"),e("./tripledes"),e("./rc4"),e("./rabbit"),e("./rabbit-legacy")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./lib-typedarrays","./enc-utf16","./enc-base64","./md5","./sha1","./sha256","./sha224","./sha512","./sha384","./sha3","./ripemd160","./hmac","./pbkdf2","./evpkdf","./cipher-core","./mode-cfb","./mode-ctr","./mode-ctr-gladman","./mode-ofb","./mode-ecb","./pad-ansix923","./pad-iso10126","./pad-iso97971","./pad-zeropadding","./pad-nopadding","./format-hex","./aes","./tripledes","./rc4","./rabbit","./rabbit-legacy"],c):f.CryptoJS=c(f.CryptoJS)}(this,function(e){return e})},{"./aes":322,"./cipher-core":323,"./core":324,"./enc-base64":325,"./enc-utf16":326,"./evpkdf":327,"./format-hex":328,"./hmac":329,"./lib-typedarrays":331,"./md5":332,"./mode-cfb":333,"./mode-ctr":335,"./mode-ctr-gladman":334,"./mode-ecb":336,"./mode-ofb":337,"./pad-ansix923":338,"./pad-iso10126":339,"./pad-iso97971":340,"./pad-nopadding":341,"./pad-zeropadding":342,"./pbkdf2":343,"./rabbit":345,"./rabbit-legacy":344,"./rc4":346,"./ripemd160":347,"./sha1":348,"./sha224":349,"./sha256":350,"./sha3":351,"./sha384":352,"./sha512":353,"./tripledes":354,"./x64-core":355}],331:[function(e,a,t){!function(f,c){"object"==typeof t?a.exports=t=c(e("./core")):"function"==typeof define&&define.amd?define(["./core"],c):c(f.CryptoJS)}(this,function(e){return function(){if("function"==typeof ArrayBuffer){var a=e,t=a.lib,f=t.WordArray,c=f.init,r=f.init=function(e){if(e instanceof ArrayBuffer&&(e=new Uint8Array(e)),(e instanceof Int8Array||"undefined"!=typeof Uint8ClampedArray&&e instanceof Uint8ClampedArray||e instanceof Int16Array||e instanceof Uint16Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array)&&(e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),e instanceof Uint8Array){for(var a=e.byteLength,t=[],f=0;a>f;f++)t[f>>>2]|=e[f]<<24-f%4*8;c.call(this,t,a)}else c.apply(this,arguments)};r.prototype=f}}(),e.lib.WordArray})},{"./core":324}],332:[function(e,a,t){!function(f,c){"object"==typeof t?a.exports=t=c(e("./core")):"function"==typeof define&&define.amd?define(["./core"],c):c(f.CryptoJS)}(this,function(e){return function(a){function t(e,a,t,f,c,r,d){var n=e+(a&t|~a&f)+c+d;return(n<>>32-r)+a}function f(e,a,t,f,c,r,d){var n=e+(a&f|t&~f)+c+d;return(n<>>32-r)+a}function c(e,a,t,f,c,r,d){var n=e+(a^t^f)+c+d;return(n<>>32-r)+a}function r(e,a,t,f,c,r,d){var n=e+(t^(a|~f))+c+d;return(n<>>32-r)+a}var d=e,n=d.lib,i=n.WordArray,b=n.Hasher,o=d.algo,s=[];!function(){for(var e=0;64>e;e++)s[e]=4294967296*a.abs(a.sin(e+1))|0}();var u=o.MD5=b.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,a){for(var d=0;16>d;d++){var n=a+d,i=e[n];e[n]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var b=this._hash.words,o=e[a+0],u=e[a+1],h=e[a+2],l=e[a+3],p=e[a+4],g=e[a+5],m=e[a+6],v=e[a+7],y=e[a+8],w=e[a+9],_=e[a+10],S=e[a+11],A=e[a+12],I=e[a+13],E=e[a+14],k=e[a+15],x=b[0],P=b[1],B=b[2],M=b[3];x=t(x,P,B,M,o,7,s[0]),M=t(M,x,P,B,u,12,s[1]),B=t(B,M,x,P,h,17,s[2]),P=t(P,B,M,x,l,22,s[3]),x=t(x,P,B,M,p,7,s[4]),M=t(M,x,P,B,g,12,s[5]),B=t(B,M,x,P,m,17,s[6]),P=t(P,B,M,x,v,22,s[7]),x=t(x,P,B,M,y,7,s[8]),M=t(M,x,P,B,w,12,s[9]),B=t(B,M,x,P,_,17,s[10]),P=t(P,B,M,x,S,22,s[11]),x=t(x,P,B,M,A,7,s[12]),M=t(M,x,P,B,I,12,s[13]),B=t(B,M,x,P,E,17,s[14]),P=t(P,B,M,x,k,22,s[15]),x=f(x,P,B,M,u,5,s[16]),M=f(M,x,P,B,m,9,s[17]),B=f(B,M,x,P,S,14,s[18]),P=f(P,B,M,x,o,20,s[19]),x=f(x,P,B,M,g,5,s[20]),M=f(M,x,P,B,_,9,s[21]),B=f(B,M,x,P,k,14,s[22]),P=f(P,B,M,x,p,20,s[23]),x=f(x,P,B,M,w,5,s[24]),M=f(M,x,P,B,E,9,s[25]),B=f(B,M,x,P,l,14,s[26]),P=f(P,B,M,x,y,20,s[27]),x=f(x,P,B,M,I,5,s[28]),M=f(M,x,P,B,h,9,s[29]),B=f(B,M,x,P,v,14,s[30]),P=f(P,B,M,x,A,20,s[31]),x=c(x,P,B,M,g,4,s[32]),M=c(M,x,P,B,y,11,s[33]),B=c(B,M,x,P,S,16,s[34]),P=c(P,B,M,x,E,23,s[35]),x=c(x,P,B,M,u,4,s[36]),M=c(M,x,P,B,p,11,s[37]),B=c(B,M,x,P,v,16,s[38]),P=c(P,B,M,x,_,23,s[39]),x=c(x,P,B,M,I,4,s[40]),M=c(M,x,P,B,o,11,s[41]),B=c(B,M,x,P,l,16,s[42]),P=c(P,B,M,x,m,23,s[43]),x=c(x,P,B,M,w,4,s[44]),M=c(M,x,P,B,A,11,s[45]),B=c(B,M,x,P,k,16,s[46]),P=c(P,B,M,x,h,23,s[47]),x=r(x,P,B,M,o,6,s[48]),M=r(M,x,P,B,v,10,s[49]),B=r(B,M,x,P,E,15,s[50]),P=r(P,B,M,x,g,21,s[51]),x=r(x,P,B,M,A,6,s[52]),M=r(M,x,P,B,l,10,s[53]),B=r(B,M,x,P,_,15,s[54]),P=r(P,B,M,x,u,21,s[55]),x=r(x,P,B,M,y,6,s[56]),M=r(M,x,P,B,k,10,s[57]),B=r(B,M,x,P,m,15,s[58]),P=r(P,B,M,x,I,21,s[59]),x=r(x,P,B,M,p,6,s[60]),M=r(M,x,P,B,S,10,s[61]),B=r(B,M,x,P,h,15,s[62]),P=r(P,B,M,x,w,21,s[63]),b[0]=b[0]+x|0,b[1]=b[1]+P|0,b[2]=b[2]+B|0,b[3]=b[3]+M|0},_doFinalize:function(){var e=this._data,t=e.words,f=8*this._nDataBytes,c=8*e.sigBytes;t[c>>>5]|=128<<24-c%32;var r=a.floor(f/4294967296),d=f;t[(c+64>>>9<<4)+15]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t[(c+64>>>9<<4)+14]=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8),e.sigBytes=4*(t.length+1),this._process();for(var n=this._hash,i=n.words,b=0;4>b;b++){var o=i[b];i[b]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}return n},clone:function(){var e=b.clone.call(this);return e._hash=this._hash.clone(),e}});d.MD5=b._createHelper(u),d.HmacMD5=b._createHmacHelper(u)}(Math),e.MD5})},{"./core":324}],333:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return e.mode.CFB=function(){function a(e,a,t,f){var c=this._iv;if(c){var r=c.slice(0);this._iv=void 0}else var r=this._prevBlock;f.encryptBlock(r,0);for(var d=0;t>d;d++)e[a+d]^=r[d]}var t=e.lib.BlockCipherMode.extend();return t.Encryptor=t.extend({processBlock:function(e,t){var f=this._cipher,c=f.blockSize;a.call(this,e,t,c,f),this._prevBlock=e.slice(t,t+c)}}),t.Decryptor=t.extend({processBlock:function(e,t){var f=this._cipher,c=f.blockSize,r=e.slice(t,t+c);a.call(this,e,t,c,f),this._prevBlock=r}}),t}(),e.mode.CFB})},{"./cipher-core":323,"./core":324}],334:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return e.mode.CTRGladman=function(){function a(e){if(255===(e>>24&255)){var a=e>>16&255,t=e>>8&255,f=255&e;255===a?(a=0,255===t?(t=0,255===f?f=0:++f):++t):++a,e=0,e+=a<<16,e+=t<<8,e+=f}else e+=1<<24;return e}function t(e){return 0===(e[0]=a(e[0]))&&(e[1]=a(e[1])),e}var f=e.lib.BlockCipherMode.extend(),c=f.Encryptor=f.extend({processBlock:function(e,a){var f=this._cipher,c=f.blockSize,r=this._iv,d=this._counter;r&&(d=this._counter=r.slice(0),this._iv=void 0),t(d);var n=d.slice(0);f.encryptBlock(n,0);for(var i=0;c>i;i++)e[a+i]^=n[i]}});return f.Decryptor=c,f}(),e.mode.CTRGladman})},{"./cipher-core":323,"./core":324}],335:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return e.mode.CTR=function(){var a=e.lib.BlockCipherMode.extend(),t=a.Encryptor=a.extend({processBlock:function(e,a){var t=this._cipher,f=t.blockSize,c=this._iv,r=this._counter;c&&(r=this._counter=c.slice(0),this._iv=void 0);var d=r.slice(0);t.encryptBlock(d,0),r[f-1]=r[f-1]+1|0;for(var n=0;f>n;n++)e[a+n]^=d[n]}});return a.Decryptor=t,a}(),e.mode.CTR})},{"./cipher-core":323,"./core":324}],336:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return e.mode.ECB=function(){var a=e.lib.BlockCipherMode.extend();return a.Encryptor=a.extend({processBlock:function(e,a){this._cipher.encryptBlock(e,a)}}),a.Decryptor=a.extend({processBlock:function(e,a){this._cipher.decryptBlock(e,a)}}),a}(),e.mode.ECB})},{"./cipher-core":323,"./core":324}],337:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return e.mode.OFB=function(){var a=e.lib.BlockCipherMode.extend(),t=a.Encryptor=a.extend({processBlock:function(e,a){var t=this._cipher,f=t.blockSize,c=this._iv,r=this._keystream;c&&(r=this._keystream=c.slice(0),this._iv=void 0),t.encryptBlock(r,0);for(var d=0;f>d;d++)e[a+d]^=r[d]}});return a.Decryptor=t,a}(),e.mode.OFB})},{"./cipher-core":323,"./core":324}],338:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return e.pad.AnsiX923={pad:function(e,a){var t=e.sigBytes,f=4*a,c=f-t%f,r=t+c-1;e.clamp(),e.words[r>>>2]|=c<<24-r%4*8,e.sigBytes+=c},unpad:function(e){var a=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=a}},e.pad.Ansix923})},{"./cipher-core":323,"./core":324}],339:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return e.pad.Iso10126={pad:function(a,t){var f=4*t,c=f-a.sigBytes%f;a.concat(e.lib.WordArray.random(c-1)).concat(e.lib.WordArray.create([c<<24],1))},unpad:function(e){var a=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=a}},e.pad.Iso10126})},{"./cipher-core":323,"./core":324}],340:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return e.pad.Iso97971={pad:function(a,t){a.concat(e.lib.WordArray.create([2147483648],1)),e.pad.ZeroPadding.pad(a,t)},unpad:function(a){e.pad.ZeroPadding.unpad(a),a.sigBytes--}},e.pad.Iso97971})},{"./cipher-core":323,"./core":324}],341:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return e.pad.NoPadding={pad:function(){},unpad:function(){}},e.pad.NoPadding})},{"./cipher-core":323,"./core":324}],342:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return e.pad.ZeroPadding={pad:function(e,a){var t=4*a;e.clamp(),e.sigBytes+=t-(e.sigBytes%t||t)},unpad:function(e){for(var a=e.words,t=e.sigBytes-1;!(a[t>>>2]>>>24-t%4*8&255);)t--;e.sigBytes=t+1}},e.pad.ZeroPadding})},{"./cipher-core":323,"./core":324}],343:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./sha1"),e("./hmac")):"function"==typeof define&&define.amd?define(["./core","./sha1","./hmac"],c):c(f.CryptoJS)}(this,function(e){return function(){var a=e,t=a.lib,f=t.Base,c=t.WordArray,r=a.algo,d=r.SHA1,n=r.HMAC,i=r.PBKDF2=f.extend({cfg:f.extend({keySize:4,hasher:d,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,a){for(var t=this.cfg,f=n.create(t.hasher,e),r=c.create(),d=c.create([1]),i=r.words,b=d.words,o=t.keySize,s=t.iterations;i.lengthg;g++){p=f.finalize(p),f.reset();for(var m=p.words,v=0;l>v;v++)h[v]^=m[v]}r.concat(u),b[0]++}return r.sigBytes=4*o,r}});a.PBKDF2=function(e,a,t){return i.create(t).compute(e,a)}}(),e.PBKDF2})},{"./core":324,"./hmac":329,"./sha1":348}],344:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./enc-base64"),e("./md5"),e("./evpkdf"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return function(){function a(){for(var e=this._X,a=this._C,t=0;8>t;t++)n[t]=a[t];a[0]=a[0]+1295307597+this._b|0,a[1]=a[1]+3545052371+(a[0]>>>0>>0?1:0)|0,a[2]=a[2]+886263092+(a[1]>>>0>>0?1:0)|0,a[3]=a[3]+1295307597+(a[2]>>>0>>0?1:0)|0,a[4]=a[4]+3545052371+(a[3]>>>0>>0?1:0)|0,a[5]=a[5]+886263092+(a[4]>>>0>>0?1:0)|0,a[6]=a[6]+1295307597+(a[5]>>>0>>0?1:0)|0,a[7]=a[7]+3545052371+(a[6]>>>0>>0?1:0)|0,this._b=a[7]>>>0>>0?1:0;for(var t=0;8>t;t++){var f=e[t]+a[t],c=65535&f,r=f>>>16,d=((c*c>>>17)+c*r>>>15)+r*r,b=((4294901760&f)*f|0)+((65535&f)*f|0);i[t]=d^b}e[0]=i[0]+(i[7]<<16|i[7]>>>16)+(i[6]<<16|i[6]>>>16)|0,e[1]=i[1]+(i[0]<<8|i[0]>>>24)+i[7]|0,e[2]=i[2]+(i[1]<<16|i[1]>>>16)+(i[0]<<16|i[0]>>>16)|0,e[3]=i[3]+(i[2]<<8|i[2]>>>24)+i[1]|0,e[4]=i[4]+(i[3]<<16|i[3]>>>16)+(i[2]<<16|i[2]>>>16)|0,e[5]=i[5]+(i[4]<<8|i[4]>>>24)+i[3]|0,e[6]=i[6]+(i[5]<<16|i[5]>>>16)+(i[4]<<16|i[4]>>>16)|0,e[7]=i[7]+(i[6]<<8|i[6]>>>24)+i[5]|0}var t=e,f=t.lib,c=f.StreamCipher,r=t.algo,d=[],n=[],i=[],b=r.RabbitLegacy=c.extend({_doReset:function(){var e=this._key.words,t=this.cfg.iv,f=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],c=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var r=0;4>r;r++)a.call(this);for(var r=0;8>r;r++)c[r]^=f[r+4&7];if(t){var d=t.words,n=d[0],i=d[1],b=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),o=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),s=b>>>16|4294901760&o,u=o<<16|65535&b;c[0]^=b,c[1]^=s,c[2]^=o,c[3]^=u,c[4]^=b,c[5]^=s,c[6]^=o,c[7]^=u;for(var r=0;4>r;r++)a.call(this)}},_doProcessBlock:function(e,t){var f=this._X;a.call(this),d[0]=f[0]^f[5]>>>16^f[3]<<16,d[1]=f[2]^f[7]>>>16^f[5]<<16,d[2]=f[4]^f[1]>>>16^f[7]<<16,d[3]=f[6]^f[3]>>>16^f[1]<<16;for(var c=0;4>c;c++)d[c]=16711935&(d[c]<<8|d[c]>>>24)|4278255360&(d[c]<<24|d[c]>>>8),e[t+c]^=d[c]},blockSize:4,ivSize:2});t.RabbitLegacy=c._createHelper(b)}(),e.RabbitLegacy})},{"./cipher-core":323,"./core":324,"./enc-base64":325,"./evpkdf":327,"./md5":332}],345:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./enc-base64"),e("./md5"),e("./evpkdf"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return function(){function a(){for(var e=this._X,a=this._C,t=0;8>t;t++)n[t]=a[t];a[0]=a[0]+1295307597+this._b|0,a[1]=a[1]+3545052371+(a[0]>>>0>>0?1:0)|0,a[2]=a[2]+886263092+(a[1]>>>0>>0?1:0)|0,a[3]=a[3]+1295307597+(a[2]>>>0>>0?1:0)|0,a[4]=a[4]+3545052371+(a[3]>>>0>>0?1:0)|0,a[5]=a[5]+886263092+(a[4]>>>0>>0?1:0)|0,a[6]=a[6]+1295307597+(a[5]>>>0>>0?1:0)|0,a[7]=a[7]+3545052371+(a[6]>>>0>>0?1:0)|0,this._b=a[7]>>>0>>0?1:0;for(var t=0;8>t;t++){var f=e[t]+a[t],c=65535&f,r=f>>>16,d=((c*c>>>17)+c*r>>>15)+r*r,b=((4294901760&f)*f|0)+((65535&f)*f|0);i[t]=d^b}e[0]=i[0]+(i[7]<<16|i[7]>>>16)+(i[6]<<16|i[6]>>>16)|0,e[1]=i[1]+(i[0]<<8|i[0]>>>24)+i[7]|0,e[2]=i[2]+(i[1]<<16|i[1]>>>16)+(i[0]<<16|i[0]>>>16)|0,e[3]=i[3]+(i[2]<<8|i[2]>>>24)+i[1]|0,e[4]=i[4]+(i[3]<<16|i[3]>>>16)+(i[2]<<16|i[2]>>>16)|0,e[5]=i[5]+(i[4]<<8|i[4]>>>24)+i[3]|0,e[6]=i[6]+(i[5]<<16|i[5]>>>16)+(i[4]<<16|i[4]>>>16)|0,e[7]=i[7]+(i[6]<<8|i[6]>>>24)+i[5]|0}var t=e,f=t.lib,c=f.StreamCipher,r=t.algo,d=[],n=[],i=[],b=r.Rabbit=c.extend({_doReset:function(){for(var e=this._key.words,t=this.cfg.iv,f=0;4>f;f++)e[f]=16711935&(e[f]<<8|e[f]>>>24)|4278255360&(e[f]<<24|e[f]>>>8);var c=this._X=[e[0],e[3]<<16|e[2]>>>16,e[1],e[0]<<16|e[3]>>>16,e[2],e[1]<<16|e[0]>>>16,e[3],e[2]<<16|e[1]>>>16],r=this._C=[e[2]<<16|e[2]>>>16,4294901760&e[0]|65535&e[1],e[3]<<16|e[3]>>>16,4294901760&e[1]|65535&e[2],e[0]<<16|e[0]>>>16,4294901760&e[2]|65535&e[3],e[1]<<16|e[1]>>>16,4294901760&e[3]|65535&e[0]];this._b=0;for(var f=0;4>f;f++)a.call(this);for(var f=0;8>f;f++)r[f]^=c[f+4&7];if(t){var d=t.words,n=d[0],i=d[1],b=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),o=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),s=b>>>16|4294901760&o,u=o<<16|65535&b;r[0]^=b,r[1]^=s,r[2]^=o,r[3]^=u,r[4]^=b,r[5]^=s,r[6]^=o,r[7]^=u;for(var f=0;4>f;f++)a.call(this)}},_doProcessBlock:function(e,t){var f=this._X;a.call(this),d[0]=f[0]^f[5]>>>16^f[3]<<16,d[1]=f[2]^f[7]>>>16^f[5]<<16,d[2]=f[4]^f[1]>>>16^f[7]<<16,d[3]=f[6]^f[3]>>>16^f[1]<<16;for(var c=0;4>c;c++)d[c]=16711935&(d[c]<<8|d[c]>>>24)|4278255360&(d[c]<<24|d[c]>>>8),e[t+c]^=d[c]},blockSize:4,ivSize:2});t.Rabbit=c._createHelper(b)}(),e.Rabbit})},{"./cipher-core":323,"./core":324,"./enc-base64":325,"./evpkdf":327,"./md5":332}],346:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./enc-base64"),e("./md5"),e("./evpkdf"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return function(){function a(){for(var e=this._S,a=this._i,t=this._j,f=0,c=0;4>c;c++){a=(a+1)%256,t=(t+e[a])%256;var r=e[a];e[a]=e[t],e[t]=r,f|=e[(e[a]+e[t])%256]<<24-8*c}return this._i=a,this._j=t,f}var t=e,f=t.lib,c=f.StreamCipher,r=t.algo,d=r.RC4=c.extend({_doReset:function(){for(var e=this._key,a=e.words,t=e.sigBytes,f=this._S=[],c=0;256>c;c++)f[c]=c;for(var c=0,r=0;256>c;c++){var d=c%t,n=a[d>>>2]>>>24-d%4*8&255;r=(r+f[c]+n)%256;var i=f[c];f[c]=f[r],f[r]=i}this._i=this._j=0},_doProcessBlock:function(e,t){e[t]^=a.call(this)},keySize:8,ivSize:0});t.RC4=c._createHelper(d);var n=r.RC4Drop=d.extend({cfg:d.cfg.extend({drop:192}),_doReset:function(){d._doReset.call(this);for(var e=this.cfg.drop;e>0;e--)a.call(this)}});t.RC4Drop=c._createHelper(n)}(),e.RC4})},{"./cipher-core":323,"./core":324,"./enc-base64":325,"./evpkdf":327,"./md5":332}],347:[function(e,a,t){!function(f,c){"object"==typeof t?a.exports=t=c(e("./core")):"function"==typeof define&&define.amd?define(["./core"],c):c(f.CryptoJS)}(this,function(e){return function(a){function t(e,a,t){return e^a^t}function f(e,a,t){return e&a|~e&t}function c(e,a,t){return(e|~a)^t}function r(e,a,t){return e&t|a&~t}function d(e,a,t){return e^(a|~t)}function n(e,a){return e<>>32-a}var i=e,b=i.lib,o=b.WordArray,s=b.Hasher,u=i.algo,h=o.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),l=o.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),p=o.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),g=o.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),m=o.create([0,1518500249,1859775393,2400959708,2840853838]),v=o.create([1352829926,1548603684,1836072691,2053994217,0]),y=u.RIPEMD160=s.extend({_doReset:function(){this._hash=o.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,a){for(var i=0;16>i;i++){var b=a+i,o=e[b];e[b]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8)}var s,u,y,w,_,S,A,I,E,k,x=this._hash.words,P=m.words,B=v.words,M=h.words,O=l.words,R=p.words,T=g.words;S=s=x[0],A=u=x[1],I=y=x[2],E=w=x[3],k=_=x[4];for(var C,i=0;80>i;i+=1)C=s+e[a+M[i]]|0,C+=16>i?t(u,y,w)+P[0]:32>i?f(u,y,w)+P[1]:48>i?c(u,y,w)+P[2]:64>i?r(u,y,w)+P[3]:d(u,y,w)+P[4],C=0|C,C=n(C,R[i]),C=C+_|0,s=_,_=w,w=n(y,10),y=u,u=C,C=S+e[a+O[i]]|0,C+=16>i?d(A,I,E)+B[0]:32>i?r(A,I,E)+B[1]:48>i?c(A,I,E)+B[2]:64>i?f(A,I,E)+B[3]:t(A,I,E)+B[4],C=0|C,C=n(C,T[i]),C=C+k|0,S=k,k=E,E=n(I,10),I=A,A=C;C=x[1]+y+E|0,x[1]=x[2]+w+k|0,x[2]=x[3]+_+S|0,x[3]=x[4]+s+A|0,x[4]=x[0]+u+I|0,x[0]=C},_doFinalize:function(){var e=this._data,a=e.words,t=8*this._nDataBytes,f=8*e.sigBytes;a[f>>>5]|=128<<24-f%32,a[(f+64>>>9<<4)+14]=16711935&(t<<8|t>>>24)|4278255360&(t<<24|t>>>8),e.sigBytes=4*(a.length+1),this._process();for(var c=this._hash,r=c.words,d=0;5>d;d++){var n=r[d];r[d]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8)}return c},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}});i.RIPEMD160=s._createHelper(y),i.HmacRIPEMD160=s._createHmacHelper(y)}(Math),e.RIPEMD160})},{"./core":324}],348:[function(e,a,t){!function(f,c){"object"==typeof t?a.exports=t=c(e("./core")):"function"==typeof define&&define.amd?define(["./core"],c):c(f.CryptoJS); -}(this,function(e){return function(){var a=e,t=a.lib,f=t.WordArray,c=t.Hasher,r=a.algo,d=[],n=r.SHA1=c.extend({_doReset:function(){this._hash=new f.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(e,a){for(var t=this._hash.words,f=t[0],c=t[1],r=t[2],n=t[3],i=t[4],b=0;80>b;b++){if(16>b)d[b]=0|e[a+b];else{var o=d[b-3]^d[b-8]^d[b-14]^d[b-16];d[b]=o<<1|o>>>31}var s=(f<<5|f>>>27)+i+d[b];s+=20>b?(c&r|~c&n)+1518500249:40>b?(c^r^n)+1859775393:60>b?(c&r|c&n|r&n)-1894007588:(c^r^n)-899497514,i=n,n=r,r=c<<30|c>>>2,c=f,f=s}t[0]=t[0]+f|0,t[1]=t[1]+c|0,t[2]=t[2]+r|0,t[3]=t[3]+n|0,t[4]=t[4]+i|0},_doFinalize:function(){var e=this._data,a=e.words,t=8*this._nDataBytes,f=8*e.sigBytes;return a[f>>>5]|=128<<24-f%32,a[(f+64>>>9<<4)+14]=Math.floor(t/4294967296),a[(f+64>>>9<<4)+15]=t,e.sigBytes=4*a.length,this._process(),this._hash},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e}});a.SHA1=c._createHelper(n),a.HmacSHA1=c._createHmacHelper(n)}(),e.SHA1})},{"./core":324}],349:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./sha256")):"function"==typeof define&&define.amd?define(["./core","./sha256"],c):c(f.CryptoJS)}(this,function(e){return function(){var a=e,t=a.lib,f=t.WordArray,c=a.algo,r=c.SHA256,d=c.SHA224=r.extend({_doReset:function(){this._hash=new f.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var e=r._doFinalize.call(this);return e.sigBytes-=4,e}});a.SHA224=r._createHelper(d),a.HmacSHA224=r._createHmacHelper(d)}(),e.SHA224})},{"./core":324,"./sha256":350}],350:[function(e,a,t){!function(f,c){"object"==typeof t?a.exports=t=c(e("./core")):"function"==typeof define&&define.amd?define(["./core"],c):c(f.CryptoJS)}(this,function(e){return function(a){var t=e,f=t.lib,c=f.WordArray,r=f.Hasher,d=t.algo,n=[],i=[];!function(){function e(e){for(var t=a.sqrt(e),f=2;t>=f;f++)if(!(e%f))return!1;return!0}function t(e){return 4294967296*(e-(0|e))|0}for(var f=2,c=0;64>c;)e(f)&&(8>c&&(n[c]=t(a.pow(f,.5))),i[c]=t(a.pow(f,1/3)),c++),f++}();var b=[],o=d.SHA256=r.extend({_doReset:function(){this._hash=new c.init(n.slice(0))},_doProcessBlock:function(e,a){for(var t=this._hash.words,f=t[0],c=t[1],r=t[2],d=t[3],n=t[4],o=t[5],s=t[6],u=t[7],h=0;64>h;h++){if(16>h)b[h]=0|e[a+h];else{var l=b[h-15],p=(l<<25|l>>>7)^(l<<14|l>>>18)^l>>>3,g=b[h-2],m=(g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10;b[h]=p+b[h-7]+m+b[h-16]}var v=n&o^~n&s,y=f&c^f&r^c&r,w=(f<<30|f>>>2)^(f<<19|f>>>13)^(f<<10|f>>>22),_=(n<<26|n>>>6)^(n<<21|n>>>11)^(n<<7|n>>>25),S=u+_+v+i[h]+b[h],A=w+y;u=s,s=o,o=n,n=d+S|0,d=r,r=c,c=f,f=S+A|0}t[0]=t[0]+f|0,t[1]=t[1]+c|0,t[2]=t[2]+r|0,t[3]=t[3]+d|0,t[4]=t[4]+n|0,t[5]=t[5]+o|0,t[6]=t[6]+s|0,t[7]=t[7]+u|0},_doFinalize:function(){var e=this._data,t=e.words,f=8*this._nDataBytes,c=8*e.sigBytes;return t[c>>>5]|=128<<24-c%32,t[(c+64>>>9<<4)+14]=a.floor(f/4294967296),t[(c+64>>>9<<4)+15]=f,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=r.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=r._createHelper(o),t.HmacSHA256=r._createHmacHelper(o)}(Math),e.SHA256})},{"./core":324}],351:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],c):c(f.CryptoJS)}(this,function(e){return function(a){var t=e,f=t.lib,c=f.WordArray,r=f.Hasher,d=t.x64,n=d.Word,i=t.algo,b=[],o=[],s=[];!function(){for(var e=1,a=0,t=0;24>t;t++){b[e+5*a]=(t+1)*(t+2)/2%64;var f=a%5,c=(2*e+3*a)%5;e=f,a=c}for(var e=0;5>e;e++)for(var a=0;5>a;a++)o[e+5*a]=a+(2*e+3*a)%5*5;for(var r=1,d=0;24>d;d++){for(var i=0,u=0,h=0;7>h;h++){if(1&r){var l=(1<l?u^=1<e;e++)u[e]=n.create()}();var h=i.SHA3=r.extend({cfg:r.cfg.extend({outputLength:512}),_doReset:function(){for(var e=this._state=[],a=0;25>a;a++)e[a]=new n.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(e,a){for(var t=this._state,f=this.blockSize/2,c=0;f>c;c++){var r=e[a+2*c],d=e[a+2*c+1];r=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),d=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8);var n=t[c];n.high^=d,n.low^=r}for(var i=0;24>i;i++){for(var h=0;5>h;h++){for(var l=0,p=0,g=0;5>g;g++){var n=t[h+5*g];l^=n.high,p^=n.low}var m=u[h];m.high=l,m.low=p}for(var h=0;5>h;h++)for(var v=u[(h+4)%5],y=u[(h+1)%5],w=y.high,_=y.low,l=v.high^(w<<1|_>>>31),p=v.low^(_<<1|w>>>31),g=0;5>g;g++){var n=t[h+5*g];n.high^=l,n.low^=p}for(var S=1;25>S;S++){var n=t[S],A=n.high,I=n.low,E=b[S];if(32>E)var l=A<>>32-E,p=I<>>32-E;else var l=I<>>64-E,p=A<>>64-E;var k=u[o[S]];k.high=l,k.low=p}var x=u[0],P=t[0];x.high=P.high,x.low=P.low;for(var h=0;5>h;h++)for(var g=0;5>g;g++){var S=h+5*g,n=t[S],B=u[S],M=u[(h+1)%5+5*g],O=u[(h+2)%5+5*g];n.high=B.high^~M.high&O.high,n.low=B.low^~M.low&O.low}var n=t[0],R=s[i];n.high^=R.high,n.low^=R.low}},_doFinalize:function(){var e=this._data,t=e.words,f=(8*this._nDataBytes,8*e.sigBytes),r=32*this.blockSize;t[f>>>5]|=1<<24-f%32,t[(a.ceil((f+1)/r)*r>>>5)-1]|=128,e.sigBytes=4*t.length,this._process();for(var d=this._state,n=this.cfg.outputLength/8,i=n/8,b=[],o=0;i>o;o++){var s=d[o],u=s.high,h=s.low;u=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8),h=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8),b.push(h),b.push(u)}return new c.init(b,n)},clone:function(){for(var e=r.clone.call(this),a=e._state=this._state.slice(0),t=0;25>t;t++)a[t]=a[t].clone();return e}});t.SHA3=r._createHelper(h),t.HmacSHA3=r._createHmacHelper(h)}(Math),e.SHA3})},{"./core":324,"./x64-core":355}],352:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./x64-core"),e("./sha512")):"function"==typeof define&&define.amd?define(["./core","./x64-core","./sha512"],c):c(f.CryptoJS)}(this,function(e){return function(){var a=e,t=a.x64,f=t.Word,c=t.WordArray,r=a.algo,d=r.SHA512,n=r.SHA384=d.extend({_doReset:function(){this._hash=new c.init([new f.init(3418070365,3238371032),new f.init(1654270250,914150663),new f.init(2438529370,812702999),new f.init(355462360,4144912697),new f.init(1731405415,4290775857),new f.init(2394180231,1750603025),new f.init(3675008525,1694076839),new f.init(1203062813,3204075428)])},_doFinalize:function(){var e=d._doFinalize.call(this);return e.sigBytes-=16,e}});a.SHA384=d._createHelper(n),a.HmacSHA384=d._createHmacHelper(n)}(),e.SHA384})},{"./core":324,"./sha512":353,"./x64-core":355}],353:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./x64-core")):"function"==typeof define&&define.amd?define(["./core","./x64-core"],c):c(f.CryptoJS)}(this,function(e){return function(){function a(){return d.create.apply(d,arguments)}var t=e,f=t.lib,c=f.Hasher,r=t.x64,d=r.Word,n=r.WordArray,i=t.algo,b=[a(1116352408,3609767458),a(1899447441,602891725),a(3049323471,3964484399),a(3921009573,2173295548),a(961987163,4081628472),a(1508970993,3053834265),a(2453635748,2937671579),a(2870763221,3664609560),a(3624381080,2734883394),a(310598401,1164996542),a(607225278,1323610764),a(1426881987,3590304994),a(1925078388,4068182383),a(2162078206,991336113),a(2614888103,633803317),a(3248222580,3479774868),a(3835390401,2666613458),a(4022224774,944711139),a(264347078,2341262773),a(604807628,2007800933),a(770255983,1495990901),a(1249150122,1856431235),a(1555081692,3175218132),a(1996064986,2198950837),a(2554220882,3999719339),a(2821834349,766784016),a(2952996808,2566594879),a(3210313671,3203337956),a(3336571891,1034457026),a(3584528711,2466948901),a(113926993,3758326383),a(338241895,168717936),a(666307205,1188179964),a(773529912,1546045734),a(1294757372,1522805485),a(1396182291,2643833823),a(1695183700,2343527390),a(1986661051,1014477480),a(2177026350,1206759142),a(2456956037,344077627),a(2730485921,1290863460),a(2820302411,3158454273),a(3259730800,3505952657),a(3345764771,106217008),a(3516065817,3606008344),a(3600352804,1432725776),a(4094571909,1467031594),a(275423344,851169720),a(430227734,3100823752),a(506948616,1363258195),a(659060556,3750685593),a(883997877,3785050280),a(958139571,3318307427),a(1322822218,3812723403),a(1537002063,2003034995),a(1747873779,3602036899),a(1955562222,1575990012),a(2024104815,1125592928),a(2227730452,2716904306),a(2361852424,442776044),a(2428436474,593698344),a(2756734187,3733110249),a(3204031479,2999351573),a(3329325298,3815920427),a(3391569614,3928383900),a(3515267271,566280711),a(3940187606,3454069534),a(4118630271,4000239992),a(116418474,1914138554),a(174292421,2731055270),a(289380356,3203993006),a(460393269,320620315),a(685471733,587496836),a(852142971,1086792851),a(1017036298,365543100),a(1126000580,2618297676),a(1288033470,3409855158),a(1501505948,4234509866),a(1607167915,987167468),a(1816402316,1246189591)],o=[];!function(){for(var e=0;80>e;e++)o[e]=a()}();var s=i.SHA512=c.extend({_doReset:function(){this._hash=new n.init([new d.init(1779033703,4089235720),new d.init(3144134277,2227873595),new d.init(1013904242,4271175723),new d.init(2773480762,1595750129),new d.init(1359893119,2917565137),new d.init(2600822924,725511199),new d.init(528734635,4215389547),new d.init(1541459225,327033209)])},_doProcessBlock:function(e,a){for(var t=this._hash.words,f=t[0],c=t[1],r=t[2],d=t[3],n=t[4],i=t[5],s=t[6],u=t[7],h=f.high,l=f.low,p=c.high,g=c.low,m=r.high,v=r.low,y=d.high,w=d.low,_=n.high,S=n.low,A=i.high,I=i.low,E=s.high,k=s.low,x=u.high,P=u.low,B=h,M=l,O=p,R=g,T=m,C=v,N=y,j=w,L=_,D=S,U=A,z=I,K=E,H=k,F=x,q=P,V=0;80>V;V++){var Y=o[V];if(16>V)var G=Y.high=0|e[a+2*V],W=Y.low=0|e[a+2*V+1];else{var J=o[V-15],X=J.high,Z=J.low,$=(X>>>1|Z<<31)^(X>>>8|Z<<24)^X>>>7,Q=(Z>>>1|X<<31)^(Z>>>8|X<<24)^(Z>>>7|X<<25),ee=o[V-2],ae=ee.high,te=ee.low,fe=(ae>>>19|te<<13)^(ae<<3|te>>>29)^ae>>>6,ce=(te>>>19|ae<<13)^(te<<3|ae>>>29)^(te>>>6|ae<<26),re=o[V-7],de=re.high,ne=re.low,ie=o[V-16],be=ie.high,oe=ie.low,W=Q+ne,G=$+de+(Q>>>0>W>>>0?1:0),W=W+ce,G=G+fe+(ce>>>0>W>>>0?1:0),W=W+oe,G=G+be+(oe>>>0>W>>>0?1:0);Y.high=G,Y.low=W}var se=L&U^~L&K,ue=D&z^~D&H,he=B&O^B&T^O&T,le=M&R^M&C^R&C,pe=(B>>>28|M<<4)^(B<<30|M>>>2)^(B<<25|M>>>7),ge=(M>>>28|B<<4)^(M<<30|B>>>2)^(M<<25|B>>>7),me=(L>>>14|D<<18)^(L>>>18|D<<14)^(L<<23|D>>>9),ve=(D>>>14|L<<18)^(D>>>18|L<<14)^(D<<23|L>>>9),ye=b[V],we=ye.high,_e=ye.low,Se=q+ve,Ae=F+me+(q>>>0>Se>>>0?1:0),Se=Se+ue,Ae=Ae+se+(ue>>>0>Se>>>0?1:0),Se=Se+_e,Ae=Ae+we+(_e>>>0>Se>>>0?1:0),Se=Se+W,Ae=Ae+G+(W>>>0>Se>>>0?1:0),Ie=ge+le,Ee=pe+he+(ge>>>0>Ie>>>0?1:0);F=K,q=H,K=U,H=z,U=L,z=D,D=j+Se|0,L=N+Ae+(j>>>0>D>>>0?1:0)|0,N=T,j=C,T=O,C=R,O=B,R=M,M=Se+Ie|0,B=Ae+Ee+(Se>>>0>M>>>0?1:0)|0}l=f.low=l+M,f.high=h+B+(M>>>0>l>>>0?1:0),g=c.low=g+R,c.high=p+O+(R>>>0>g>>>0?1:0),v=r.low=v+C,r.high=m+T+(C>>>0>v>>>0?1:0),w=d.low=w+j,d.high=y+N+(j>>>0>w>>>0?1:0),S=n.low=S+D,n.high=_+L+(D>>>0>S>>>0?1:0),I=i.low=I+z,i.high=A+U+(z>>>0>I>>>0?1:0),k=s.low=k+H,s.high=E+K+(H>>>0>k>>>0?1:0),P=u.low=P+q,u.high=x+F+(q>>>0>P>>>0?1:0)},_doFinalize:function(){var e=this._data,a=e.words,t=8*this._nDataBytes,f=8*e.sigBytes;a[f>>>5]|=128<<24-f%32,a[(f+128>>>10<<5)+30]=Math.floor(t/4294967296),a[(f+128>>>10<<5)+31]=t,e.sigBytes=4*a.length,this._process();var c=this._hash.toX32();return c},clone:function(){var e=c.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32});t.SHA512=c._createHelper(s),t.HmacSHA512=c._createHmacHelper(s)}(),e.SHA512})},{"./core":324,"./x64-core":355}],354:[function(e,a,t){!function(f,c,r){"object"==typeof t?a.exports=t=c(e("./core"),e("./enc-base64"),e("./md5"),e("./evpkdf"),e("./cipher-core")):"function"==typeof define&&define.amd?define(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],c):c(f.CryptoJS)}(this,function(e){return function(){function a(e,a){var t=(this._lBlock>>>e^this._rBlock)&a;this._rBlock^=t,this._lBlock^=t<>>e^this._lBlock)&a;this._lBlock^=t,this._rBlock^=t<f;f++){var c=i[f]-1;t[f]=a[c>>>5]>>>31-c%32&1}for(var r=this._subKeys=[],d=0;16>d;d++){for(var n=r[d]=[],s=o[d],f=0;24>f;f++)n[f/6|0]|=t[(b[f]-1+s)%28]<<31-f%6,n[4+(f/6|0)]|=t[28+(b[f+24]-1+s)%28]<<31-f%6;n[0]=n[0]<<1|n[0]>>>31;for(var f=1;7>f;f++)n[f]=n[f]>>>4*(f-1)+3;n[7]=n[7]<<5|n[7]>>>27}for(var u=this._invSubKeys=[],f=0;16>f;f++)u[f]=r[15-f]},encryptBlock:function(e,a){this._doCryptBlock(e,a,this._subKeys)},decryptBlock:function(e,a){this._doCryptBlock(e,a,this._invSubKeys)},_doCryptBlock:function(e,f,c){this._lBlock=e[f],this._rBlock=e[f+1],a.call(this,4,252645135),a.call(this,16,65535),t.call(this,2,858993459),t.call(this,8,16711935),a.call(this,1,1431655765);for(var r=0;16>r;r++){for(var d=c[r],n=this._lBlock,i=this._rBlock,b=0,o=0;8>o;o++)b|=s[o][((i^d[o])&u[o])>>>0];this._lBlock=i,this._rBlock=n^b}var h=this._lBlock;this._lBlock=this._rBlock,this._rBlock=h,a.call(this,1,1431655765),t.call(this,8,16711935),t.call(this,2,858993459),a.call(this,16,65535),a.call(this,4,252645135),e[f]=this._lBlock,e[f+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});f.DES=d._createHelper(h);var l=n.TripleDES=d.extend({_doReset:function(){var e=this._key,a=e.words;this._des1=h.createEncryptor(r.create(a.slice(0,2))),this._des2=h.createEncryptor(r.create(a.slice(2,4))),this._des3=h.createEncryptor(r.create(a.slice(4,6)))},encryptBlock:function(e,a){this._des1.encryptBlock(e,a),this._des2.decryptBlock(e,a),this._des3.encryptBlock(e,a)},decryptBlock:function(e,a){this._des3.decryptBlock(e,a),this._des2.encryptBlock(e,a),this._des1.decryptBlock(e,a)},keySize:6,ivSize:2,blockSize:2});f.TripleDES=d._createHelper(l)}(),e.TripleDES})},{"./cipher-core":323,"./core":324,"./enc-base64":325,"./evpkdf":327,"./md5":332}],355:[function(e,a,t){!function(f,c){"object"==typeof t?a.exports=t=c(e("./core")):"function"==typeof define&&define.amd?define(["./core"],c):c(f.CryptoJS)}(this,function(e){return function(a){var t=e,f=t.lib,c=f.Base,r=f.WordArray,d=t.x64={};d.Word=c.extend({init:function(e,a){this.high=e,this.low=a}}),d.WordArray=c.extend({init:function(e,t){e=this.words=e||[],t!=a?this.sigBytes=t:this.sigBytes=8*e.length},toX32:function(){for(var e=this.words,a=e.length,t=[],f=0;a>f;f++){var c=e[f];t.push(c.high),t.push(c.low)}return r.create(t,this.sigBytes)},clone:function(){for(var e=c.clone.call(this),a=e.words=this.words.slice(0),t=a.length,f=0;t>f;f++)a[f]=a[f].clone();return e}})}(),e})},{"./core":324}],356:[function(e,a,t){arguments[4][56][0].apply(t,arguments)},{"../package.json":378,"./elliptic/curve":359,"./elliptic/curves":362,"./elliptic/ec":363,"./elliptic/hmac-drbg":366,"./elliptic/utils":368,brorand:370,dup:56}],357:[function(e,a,t){"use strict";function f(e,a){this.type=e,this.p=new r(a.p,16),this.red=a.prime?r.red(a.prime):r.mont(this.p),this.zero=new r(0).toRed(this.red),this.one=new r(1).toRed(this.red),this.two=new r(2).toRed(this.red),this.n=a.n&&new r(a.n,16),this.g=a.g&&this.pointFromJSON(a.g,a.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4)}function c(e,a){this.curve=e,this.type=a,this.precomputed=null}var r=e("bn.js"),d=e("../../elliptic"),n=d.utils.getNAF,i=d.utils.getJSF,b=d.utils.assert;a.exports=f,f.prototype.point=function(){throw new Error("Not implemented")},f.prototype.validate=function(){throw new Error("Not implemented")},f.prototype._fixedNafMul=function(e,a){b(e.precomputed);var t=e._getDoubles(),f=n(a,1),c=(1<=d;a--)i=(i<<1)+f[a];r.push(i)}for(var o=this.jpoint(null,null,null),s=this.jpoint(null,null,null),u=c;u>0;u--){for(var d=0;d=0;i--){for(var a=0;i>=0&&0===r[i];i--)a++;if(i>=0&&a++,d=d.dblp(a),0>i)break;var o=r[i];b(0!==o),d="affine"===e.type?o>0?d.mixedAdd(c[o-1>>1]):d.mixedAdd(c[-o-1>>1].neg()):o>0?d.add(c[o-1>>1]):d.add(c[-o-1>>1].neg())}return"affine"===e.type?d.toP():d},f.prototype._wnafMulAdd=function(e,a,t,f){for(var c=this._wnafT1,r=this._wnafT2,d=this._wnafT3,b=0,o=0;f>o;o++){var s=a[o],u=s._getNAFPoints(e);c[o]=u.wnd,r[o]=u.points}for(var o=f-1;o>=1;o-=2){var h=o-1,l=o;if(1===c[h]&&1===c[l]){var p=[a[h],null,null,a[l]];0===a[h].y.cmp(a[l].y)?(p[1]=a[h].add(a[l]),p[2]=a[h].toJ().mixedAdd(a[l].neg())):0===a[h].y.cmp(a[l].y.redNeg())?(p[1]=a[h].toJ().mixedAdd(a[l]),p[2]=a[h].add(a[l].neg())):(p[1]=a[h].toJ().mixedAdd(a[l]),p[2]=a[h].toJ().mixedAdd(a[l].neg()));var g=[-3,-1,-5,-7,0,7,5,1,3],m=i(t[h],t[l]);b=Math.max(m[0].length,b),d[h]=new Array(b),d[l]=new Array(b);for(var v=0;b>v;v++){var y=0|m[0][v],w=0|m[1][v];d[h][v]=g[3*(y+1)+(w+1)],d[l][v]=0,r[h]=p}}else d[h]=n(t[h],c[h]),d[l]=n(t[l],c[l]),b=Math.max(d[h].length,b),b=Math.max(d[l].length,b)}for(var _=this.jpoint(null,null,null),S=this._wnafT4,o=b;o>=0;o--){for(var A=0;o>=0;){for(var I=!0,v=0;f>v;v++)S[v]=0|d[v][o],0!==S[v]&&(I=!1);if(!I)break;A++,o--}if(o>=0&&A++,_=_.dblp(A),0>o)break;for(var v=0;f>v;v++){var s,E=S[v];0!==E&&(E>0?s=r[v][E-1>>1]:0>E&&(s=r[v][-E-1>>1].neg()),_="affine"===s.type?_.mixedAdd(s):_.add(s))}}for(var o=0;f>o;o++)r[o]=null;return _.toP()},f.BasePoint=c,c.prototype.validate=function(){return this.curve.validate(this)},c.prototype.precompute=function(e){if(this.precomputed)return this;var a={doubles:null,naf:null,beta:null};return a.naf=this._getNAFPoints(8),a.doubles=this._getDoubles(4,e),a.beta=this._getBeta(),this.precomputed=a,this},c.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var a=this.precomputed.doubles;return a?a.points.length>=Math.ceil((e.bitLength()+1)/a.step):!1},c.prototype._getDoubles=function(e,a){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var t=[this],f=this,c=0;a>c;c+=e){for(var r=0;e>r;r++)f=f.dbl();t.push(f)}return{step:e,points:t}},c.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var a=[this],t=(1<c;c++)a[c]=a[c-1].add(f);return{wnd:e,points:a}},c.prototype._getBeta=function(){return null},c.prototype.dblp=function(e){for(var a=this,t=0;e>t;t++)a=a.dbl();return a}},{"../../elliptic":356,"bn.js":369}],358:[function(e,a,t){"use strict";function f(e){this.twisted=1!==(0|e.a),this.mOneA=this.twisted&&-1===(0|e.a),this.extended=this.mOneA,b.call(this,"edwards",e),this.a=new n(e.a,16).mod(this.red.m).toRed(this.red),this.c=new n(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new n(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),o(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|e.c)}function c(e,a,t,f,c){b.BasePoint.call(this,e,"projective"),null===a&&null===t&&null===f?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new n(a,16),this.y=new n(t,16),this.z=f?new n(f,16):this.curve.one,this.t=c&&new n(c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var r=e("../curve"),d=e("../../elliptic"),n=e("bn.js"),i=e("inherits"),b=r.base,o=d.utils.assert;i(f,b),a.exports=f,f.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},f.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},f.prototype.jpoint=function(e,a,t,f){return this.point(e,a,t,f)},f.prototype.pointFromX=function(e,a){a=new n(a,16),a.red||(a=a.toRed(this.red));var t=a.redSqr(),f=this.c2.redSub(this.a.redMul(t)),c=this.one.redSub(this.c2.redMul(this.d).redMul(t)),d=f.redMul(c.redInvm()).redSqrt(),i=d.fromRed().isOdd();return(e&&!i||!e&&i)&&(d=d.redNeg()),this.point(a,d,r.one)},f.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var a=e.x.redSqr(),t=e.y.redSqr(),f=a.redMul(this.a).redAdd(t),c=this.c2.redMul(this.one.redAdd(this.d.redMul(a).redMul(t)));return 0===f.cmp(c)},i(c,b.BasePoint),f.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},f.prototype.point=function(e,a,t,f){return new c(this,e,a,t,f)},c.fromJSON=function(e,a){return new c(e,a[0],a[1],a[2])},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},c.prototype._extDbl=function(){var e=this.x.redSqr(),a=this.y.redSqr(),t=this.z.redSqr();t=t.redIAdd(t);var f=this.curve._mulA(e),c=this.x.redAdd(this.y).redSqr().redISub(e).redISub(a),r=f.redAdd(a),d=r.redSub(t),n=f.redSub(a),i=c.redMul(d),b=r.redMul(n),o=c.redMul(n),s=d.redMul(r);return this.curve.point(i,b,s,o)},c.prototype._projDbl=function(){var e,a,t,f=this.x.redAdd(this.y).redSqr(),c=this.x.redSqr(),r=this.y.redSqr();if(this.curve.twisted){var d=this.curve._mulA(c),n=d.redAdd(r);if(this.zOne)e=f.redSub(c).redSub(r).redMul(n.redSub(this.curve.two)),a=n.redMul(d.redSub(r)),t=n.redSqr().redSub(n).redSub(n);else{var i=this.z.redSqr(),b=n.redSub(i).redISub(i);e=f.redSub(c).redISub(r).redMul(b),a=n.redMul(d.redSub(r)),t=n.redMul(b)}}else{var d=c.redAdd(r),i=this.curve._mulC(this.c.redMul(this.z)).redSqr(),b=d.redSub(i).redSub(i);e=this.curve._mulC(f.redISub(d)).redMul(b),a=this.curve._mulC(d).redMul(c.redISub(r)),t=d.redMul(b)}return this.curve.point(e,a,t)},c.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},c.prototype._extAdd=function(e){var a=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),t=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),f=this.t.redMul(this.curve.dd).redMul(e.t),c=this.z.redMul(e.z.redAdd(e.z)),r=t.redSub(a),d=c.redSub(f),n=c.redAdd(f),i=t.redAdd(a),b=r.redMul(d),o=n.redMul(i),s=r.redMul(i),u=d.redMul(n);return this.curve.point(b,o,u,s)},c.prototype._projAdd=function(e){var a,t,f=this.z.redMul(e.z),c=f.redSqr(),r=this.x.redMul(e.x),d=this.y.redMul(e.y),n=this.curve.d.redMul(r).redMul(d),i=c.redSub(n),b=c.redAdd(n),o=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(r).redISub(d),s=f.redMul(i).redMul(o);return this.curve.twisted?(a=f.redMul(b).redMul(d.redSub(this.curve._mulA(r))),t=i.redMul(b)):(a=f.redMul(b).redMul(d.redSub(r)),t=this.curve._mulC(i).redMul(b)),this.curve.point(s,a,t)},c.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},c.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,a,t){return this.curve._wnafMulAdd(1,[this,a],[e,t],2)},c.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},c.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()},c.prototype.getY=function(){return this.normalize(),this.y.fromRed()},c.prototype.toP=c.prototype.normalize,c.prototype.mixedAdd=c.prototype.add},{"../../elliptic":356,"../curve":359,"bn.js":369,inherits:377}],359:[function(e,a,t){arguments[4][59][0].apply(t,arguments)},{"./base":357,"./edwards":358,"./mont":360,"./short":361,dup:59}],360:[function(e,a,t){arguments[4][60][0].apply(t,arguments)},{"../curve":359,"bn.js":369,dup:60,inherits:377}],361:[function(e,a,t){"use strict"; -function f(e){o.call(this,"short",e),this.a=new i(e.a,16).toRed(this.red),this.b=new i(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function c(e,a,t,f){o.BasePoint.call(this,e,"affine"),null===a&&null===t?(this.x=null,this.y=null,this.inf=!0):(this.x=new i(a,16),this.y=new i(t,16),f&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function r(e,a,t,f){o.BasePoint.call(this,e,"jacobian"),null===a&&null===t&&null===f?(this.x=this.curve.one,this.y=this.curve.one,this.z=new i(0)):(this.x=new i(a,16),this.y=new i(t,16),this.z=new i(f,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var d=e("../curve"),n=e("../../elliptic"),i=e("bn.js"),b=e("inherits"),o=d.base,s=n.utils.assert;b(f,o),a.exports=f,f.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var a,t;if(e.beta)a=new i(e.beta,16).toRed(this.red);else{var f=this._getEndoRoots(this.p);a=f[0].cmp(f[1])<0?f[0]:f[1],a=a.toRed(this.red)}if(e.lambda)t=new i(e.lambda,16);else{var c=this._getEndoRoots(this.n);0===this.g.mul(c[0]).x.cmp(this.g.x.redMul(a))?t=c[0]:(t=c[1],s(0===this.g.mul(t).x.cmp(this.g.x.redMul(a))))}var r;return r=e.basis?e.basis.map(function(e){return{a:new i(e.a,16),b:new i(e.b,16)}}):this._getEndoBasis(t),{beta:a,lambda:t,basis:r}}},f.prototype._getEndoRoots=function(e){var a=e===this.p?this.red:i.mont(e),t=new i(2).toRed(a).redInvm(),f=t.redNeg(),c=new i(3).toRed(a).redNeg().redSqrt().redMul(t),r=f.redAdd(c).fromRed(),d=f.redSub(c).fromRed();return[r,d]},f.prototype._getEndoBasis=function(e){for(var a,t,f,c,r,d,n,b,o,s=this.n.shrn(Math.floor(this.n.bitLength()/2)),u=e,h=this.n.clone(),l=new i(1),p=new i(0),g=new i(0),m=new i(1),v=0;0!==u.cmpn(0);){var y=h.div(u);b=h.sub(y.mul(u)),o=g.sub(y.mul(l));var w=m.sub(y.mul(p));if(!f&&b.cmp(s)<0)a=n.neg(),t=l,f=b.neg(),c=o;else if(f&&2===++v)break;n=b,h=u,u=b,g=l,l=o,m=p,p=w}r=b.neg(),d=o;var _=f.sqr().add(c.sqr()),S=r.sqr().add(d.sqr());return S.cmp(_)>=0&&(r=a,d=t),f.sign&&(f=f.neg(),c=c.neg()),r.sign&&(r=r.neg(),d=d.neg()),[{a:f,b:c},{a:r,b:d}]},f.prototype._endoSplit=function(e){var a=this.endo.basis,t=a[0],f=a[1],c=f.b.mul(e).divRound(this.n),r=t.b.neg().mul(e).divRound(this.n),d=c.mul(t.a),n=r.mul(f.a),i=c.mul(t.b),b=r.mul(f.b),o=e.sub(d).sub(n),s=i.add(b).neg();return{k1:o,k2:s}},f.prototype.pointFromX=function(e,a){a=new i(a,16),a.red||(a=a.toRed(this.red));var t=a.redSqr().redMul(a).redIAdd(a.redMul(this.a)).redIAdd(this.b),f=t.redSqrt(),c=f.fromRed().isOdd();return(e&&!c||!e&&c)&&(f=f.redNeg()),this.point(a,f)},f.prototype.validate=function(e){if(e.inf)return!0;var a=e.x,t=e.y,f=this.a.redMul(a),c=a.redSqr().redMul(a).redIAdd(f).redIAdd(this.b);return 0===t.redSqr().redISub(c).cmpn(0)},f.prototype._endoWnafMulAdd=function(e,a){for(var t=this._endoWnafT1,f=this._endoWnafT2,c=0;cb;b++)t[b]=null,f[b]=null;return i},b(c,o.BasePoint),f.prototype.point=function(e,a,t){return new c(this,e,a,t)},f.prototype.pointFromJSON=function(e,a){return c.fromJSON(this,e,a)},c.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var a=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var t=this.curve,f=function(e){return t.point(e.x.redMul(t.endo.beta),e.y)};e.beta=a,a.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(f)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(f)}}}return a}},c.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},c.fromJSON=function(e,a,t){function f(a){return e.point(a[0],a[1],t)}"string"==typeof a&&(a=JSON.parse(a));var c=e.point(a[0],a[1],t);if(!a[2])return c;var r=a[2];return c.precomputed={beta:null,doubles:r.doubles&&{step:r.doubles.step,points:[c].concat(r.doubles.points.map(f))},naf:r.naf&&{wnd:r.naf.wnd,points:[c].concat(r.naf.points.map(f))}},c},c.prototype.inspect=function(){return this.isInfinity()?"":""},c.prototype.isInfinity=function(){return this.inf},c.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var a=this.y.redSub(e.y);0!==a.cmpn(0)&&(a=a.redMul(this.x.redSub(e.x).redInvm()));var t=a.redSqr().redISub(this.x).redISub(e.x),f=a.redMul(this.x.redSub(t)).redISub(this.y);return this.curve.point(t,f)},c.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var a=this.curve.a,t=this.x.redSqr(),f=e.redInvm(),c=t.redAdd(t).redIAdd(t).redIAdd(a).redMul(f),r=c.redSqr().redISub(this.x.redAdd(this.x)),d=c.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,d)},c.prototype.getX=function(){return this.x.fromRed()},c.prototype.getY=function(){return this.y.fromRed()},c.prototype.mul=function(e){return e=new i(e,16),this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,a,t){var f=[this,a],c=[e,t];return this.curve.endo?this.curve._endoWnafMulAdd(f,c):this.curve._wnafMulAdd(1,f,c,2)},c.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},c.prototype.neg=function(e){if(this.inf)return this;var a=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var t=this.precomputed,f=function(e){return e.neg()};a.precomputed={naf:t.naf&&{wnd:t.naf.wnd,points:t.naf.points.map(f)},doubles:t.doubles&&{step:t.doubles.step,points:t.doubles.points.map(f)}}}return a},c.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var e=this.curve.jpoint(this.x,this.y,this.curve.one);return e},b(r,o.BasePoint),f.prototype.jpoint=function(e,a,t){return new r(this,e,a,t)},r.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),a=e.redSqr(),t=this.x.redMul(a),f=this.y.redMul(a).redMul(e);return this.curve.point(t,f)},r.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},r.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var a=e.z.redSqr(),t=this.z.redSqr(),f=this.x.redMul(a),c=e.x.redMul(t),r=this.y.redMul(a.redMul(e.z)),d=e.y.redMul(t.redMul(this.z)),n=f.redSub(c),i=r.redSub(d);if(0===n.cmpn(0))return 0!==i.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var b=n.redSqr(),o=b.redMul(n),s=f.redMul(b),u=i.redSqr().redIAdd(o).redISub(s).redISub(s),h=i.redMul(s.redISub(u)).redISub(r.redMul(o)),l=this.z.redMul(e.z).redMul(n);return this.curve.jpoint(u,h,l)},r.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var a=this.z.redSqr(),t=this.x,f=e.x.redMul(a),c=this.y,r=e.y.redMul(a).redMul(this.z),d=t.redSub(f),n=c.redSub(r);if(0===d.cmpn(0))return 0!==n.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var i=d.redSqr(),b=i.redMul(d),o=t.redMul(i),s=n.redSqr().redIAdd(b).redISub(o).redISub(o),u=n.redMul(o.redISub(s)).redISub(c.redMul(b)),h=this.z.redMul(d);return this.curve.jpoint(s,u,h)},r.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var a=this,t=0;e>t;t++)a=a.dbl();return a}for(var f=this.curve.a,c=this.curve.tinv,r=this.x,d=this.y,n=this.z,i=n.redSqr().redSqr(),b=d.redAdd(d),t=0;e>t;t++){var o=r.redSqr(),s=b.redSqr(),u=s.redSqr(),h=o.redAdd(o).redIAdd(o).redIAdd(f.redMul(i)),l=r.redMul(s),p=h.redSqr().redISub(l.redAdd(l)),g=l.redISub(p),m=h.redMul(g);m=m.redIAdd(m).redISub(u);var v=b.redMul(n);e>t+1&&(i=i.redMul(u)),r=p,n=v,b=m}return this.curve.jpoint(r,b.redMul(c),n)},r.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},r.prototype._zeroDbl=function(){var e,a,t;if(this.zOne){var f=this.x.redSqr(),c=this.y.redSqr(),r=c.redSqr(),d=this.x.redAdd(c).redSqr().redISub(f).redISub(r);d=d.redIAdd(d);var n=f.redAdd(f).redIAdd(f),i=n.redSqr().redISub(d).redISub(d),b=r.redIAdd(r);b=b.redIAdd(b),b=b.redIAdd(b),e=i,a=n.redMul(d.redISub(i)).redISub(b),t=this.y.redAdd(this.y)}else{var o=this.x.redSqr(),s=this.y.redSqr(),u=s.redSqr(),h=this.x.redAdd(s).redSqr().redISub(o).redISub(u);h=h.redIAdd(h);var l=o.redAdd(o).redIAdd(o),p=l.redSqr(),g=u.redIAdd(u);g=g.redIAdd(g),g=g.redIAdd(g),e=p.redISub(h).redISub(h),a=l.redMul(h.redISub(e)).redISub(g),t=this.y.redMul(this.z),t=t.redIAdd(t)}return this.curve.jpoint(e,a,t)},r.prototype._threeDbl=function(){var e,a,t;if(this.zOne){var f=this.x.redSqr(),c=this.y.redSqr(),r=c.redSqr(),d=this.x.redAdd(c).redSqr().redISub(f).redISub(r);d=d.redIAdd(d);var n=f.redAdd(f).redIAdd(f).redIAdd(this.curve.a),i=n.redSqr().redISub(d).redISub(d);e=i;var b=r.redIAdd(r);b=b.redIAdd(b),b=b.redIAdd(b),a=n.redMul(d.redISub(i)).redISub(b),t=this.y.redAdd(this.y)}else{var o=this.z.redSqr(),s=this.y.redSqr(),u=this.x.redMul(s),h=this.x.redSub(o).redMul(this.x.redAdd(o));h=h.redAdd(h).redIAdd(h);var l=u.redIAdd(u);l=l.redIAdd(l);var p=l.redAdd(l);e=h.redSqr().redISub(p),t=this.y.redAdd(this.z).redSqr().redISub(s).redISub(o);var g=s.redSqr();g=g.redIAdd(g),g=g.redIAdd(g),g=g.redIAdd(g),a=h.redMul(l.redISub(e)).redISub(g)}return this.curve.jpoint(e,a,t)},r.prototype._dbl=function(){var e=this.curve.a,a=this.x,t=this.y,f=this.z,c=f.redSqr().redSqr(),r=a.redSqr(),d=t.redSqr(),n=r.redAdd(r).redIAdd(r).redIAdd(e.redMul(c)),i=a.redAdd(a);i=i.redIAdd(i);var b=i.redMul(d),o=n.redSqr().redISub(b.redAdd(b)),s=b.redISub(o),u=d.redSqr();u=u.redIAdd(u),u=u.redIAdd(u),u=u.redIAdd(u);var h=n.redMul(s).redISub(u),l=t.redAdd(t).redMul(f);return this.curve.jpoint(o,h,l)},r.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),a=this.y.redSqr(),t=this.z.redSqr(),f=a.redSqr(),c=e.redAdd(e).redIAdd(e),r=c.redSqr(),d=this.x.redAdd(a).redSqr().redISub(e).redISub(f);d=d.redIAdd(d),d=d.redAdd(d).redIAdd(d),d=d.redISub(r);var n=d.redSqr(),i=f.redIAdd(f);i=i.redIAdd(i),i=i.redIAdd(i),i=i.redIAdd(i);var b=c.redIAdd(d).redSqr().redISub(r).redISub(n).redISub(i),o=a.redMul(b);o=o.redIAdd(o),o=o.redIAdd(o);var s=this.x.redMul(n).redISub(o);s=s.redIAdd(s),s=s.redIAdd(s);var u=this.y.redMul(b.redMul(i.redISub(b)).redISub(d.redMul(n)));u=u.redIAdd(u),u=u.redIAdd(u),u=u.redIAdd(u);var h=this.z.redAdd(d).redSqr().redISub(t).redISub(n);return this.curve.jpoint(s,u,h)},r.prototype.mul=function(e,a){return e=new i(e,a),this.curve._wnafMul(this,e)},r.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var a=this.z.redSqr(),t=e.z.redSqr();if(0!==this.x.redMul(t).redISub(e.x.redMul(a)).cmpn(0))return!1;var f=a.redMul(this.z),c=t.redMul(e.z);return 0===this.y.redMul(c).redISub(e.y.redMul(f)).cmpn(0)},r.prototype.inspect=function(){return this.isInfinity()?"":""},r.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../../elliptic":356,"../curve":359,"bn.js":369,inherits:377}],362:[function(e,a,t){arguments[4][62][0].apply(t,arguments)},{"../elliptic":356,"./precomputed/secp256k1":367,dup:62,"hash.js":371}],363:[function(e,a,t){"use strict";function f(e){return this instanceof f?("string"==typeof e&&(n(r.curves.hasOwnProperty(e),"Unknown curve "+e),e=r.curves[e]),e instanceof r.curves.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.shrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),void(this.hash=e.hash||e.curve.hash)):new f(e)}var c=e("bn.js"),r=e("../../elliptic"),d=r.utils,n=d.assert,i=e("./key"),b=e("./signature");a.exports=f,f.prototype.keyPair=function(e){return new i(this,e)},f.prototype.keyFromPrivate=function(e,a){return i.fromPrivate(this,e,a)},f.prototype.keyFromPublic=function(e,a){return i.fromPublic(this,e,a)},f.prototype.genKeyPair=function(e){e||(e={});for(var a=new r.hmacDRBG({hash:this.hash,pers:e.pers,entropy:e.entropy||r.rand(this.hash.hmacStrength),nonce:this.n.toArray()}),t=this.n.byteLength(),f=this.n.sub(new c(2));;){var d=new c(a.generate(t));if(!(d.cmp(f)>0))return d.iaddn(1),this.keyFromPrivate(d)}},f.prototype._truncateToN=function(e,a){var t=8*e.byteLength()-this.n.bitLength();return t>0&&(e=e.shrn(t)),!a&&e.cmp(this.n)>=0?e.sub(this.n):e},f.prototype.sign=function(e,a,t,f){"object"==typeof t&&(f=t,t=null),f||(f={}),a=this.keyFromPrivate(a,t),e=this._truncateToN(new c(e,16));for(var d=this.n.byteLength(),n=a.getPrivate().toArray(),i=n.length;21>i;i++)n.unshift(0);for(var o=e.toArray(),i=o.length;d>i;i++)o.unshift(0);for(var s=new r.hmacDRBG({hash:this.hash,entropy:n,nonce:o}),u=this.n.sub(new c(1));;){var h=new c(s.generate(this.n.byteLength()));if(h=this._truncateToN(h,!0),!(h.cmpn(1)<=0||h.cmp(u)>=0)){var l=this.g.mul(h);if(!l.isInfinity()){var p=l.getX(),g=p.mod(this.n);if(0!==g.cmpn(0)){var m=h.invm(this.n).mul(g.mul(a.getPrivate()).iadd(e)).mod(this.n);if(0!==m.cmpn(0)){f.canonical&&m.cmp(this.nh)>0&&(m=this.n.sub(m));var v=(l.getY().isOdd()?1:0)|(0!==p.cmp(g)?2:0);return new b({r:g,s:m,recoveryParam:v})}}}}}},f.prototype.verify=function(e,a,t,f){e=this._truncateToN(new c(e,16)),t=this.keyFromPublic(t,f),a=new b(a,"hex");var r=a.r,d=a.s;if(r.cmpn(1)<0||r.cmp(this.n)>=0)return!1;if(d.cmpn(1)<0||d.cmp(this.n)>=0)return!1;var n=d.invm(this.n),i=n.mul(e).mod(this.n),o=n.mul(r).mod(this.n),s=this.g.mulAdd(i,t.getPublic(),o);return s.isInfinity()?!1:0===s.getX().mod(this.n).cmp(r)},f.prototype.recoverPubKey=function(e,a,t,f){n((3&t)===t,"The recovery param is more than two bits"),a=new b(a,f);var r=this.n,d=new c(e),i=a.r,o=a.s,s=1&t,u=t>>1;if(i.cmp(this.curve.p.mod(this.curve.n))>=0&&u)throw new Error("Unable to find sencond key candinate");i=this.curve.pointFromX(s,i);var h=d.neg().mod(r),l=a.r.invm(r);return i.mul(o).add(this.g.mul(h)).mul(l)},f.prototype.getKeyRecoveryParam=function(e,a,t,f){if(a=new b(a,f),null!==a.recoveryParam)return a.recoveryParam;for(var c=0;4>c;c++){var r=this.recoverPubKey(e,a,c);if(r.eq(t))return c}throw new Error("Unable to find valid recovery factor")}},{"../../elliptic":356,"./key":364,"./signature":365,"bn.js":369}],364:[function(e,a,t){arguments[4][64][0].apply(t,arguments)},{"../../elliptic":356,"bn.js":369,dup:64}],365:[function(e,a,t){"use strict";function f(e,a){return e instanceof f?e:void(this._importDER(e,a)||(n(e.r&&e.s,"Signature without r or s"),this.r=new c(e.r,16),this.s=new c(e.s,16),null!==e.recoveryParam?this.recoveryParam=e.recoveryParam:this.recoveryParam=null))}var c=e("bn.js"),r=e("../../elliptic"),d=r.utils,n=d.assert;a.exports=f,f.prototype._importDER=function(e,a){if(e=d.toArray(e,a),e.length<6||48!==e[0]||2!==e[2])return!1;var t=e[1];if(1+t>e.length)return!1;var f=e[3];if(f>=128)return!1;if(4+f+2>=e.length)return!1;if(2!==e[4+f])return!1;var r=e[5+f];return r>=128?!1:4+f+2+r>e.length?!1:(this.r=new c(e.slice(4,4+f)),this.s=new c(e.slice(4+f+2,4+f+2+r)),this.recoveryParam=null,!0)},f.prototype.toDER=function(e){var a=this.r.toArray(),t=this.s.toArray();128&a[0]&&(a=[0].concat(a)),128&t[0]&&(t=[0].concat(t));var f=a.length+t.length+4,c=[48,f,2,a.length];return c=c.concat(a,[2,t.length],t),d.encode(c,e)}},{"../../elliptic":356,"bn.js":369}],366:[function(e,a,t){arguments[4][66][0].apply(t,arguments)},{"../elliptic":356,dup:66,"hash.js":371}],367:[function(e,a,t){arguments[4][67][0].apply(t,arguments)},{dup:67}],368:[function(e,a,t){arguments[4][68][0].apply(t,arguments)},{dup:68}],369:[function(e,a,t){!function(e,a){"use strict";function t(e,a){if(!e)throw new Error(a||"Assertion failed")}function f(e,a){e.super_=a;var t=function(){};t.prototype=a.prototype,e.prototype=new t,e.prototype.constructor=e}function c(e,a,t){return null!==e&&"object"==typeof e&&Array.isArray(e.words)?e:(this.sign=!1,this.words=null,this.length=0,this.red=null,("le"===a||"be"===a)&&(t=a,a=10),void(null!==e&&this._init(e||0,a||10,t||"be")))}function r(e,a,t){for(var f=0,c=Math.min(e.length,t),r=a;c>r;r++){var d=e.charCodeAt(r)-48;f<<=4,f|=d>=49&&54>=d?d-49+10:d>=17&&22>=d?d-17+10:15&d}return f}function d(e,a,t,f){for(var c=0,r=Math.min(e.length,t),d=a;r>d;d++){var n=e.charCodeAt(d)-48;c*=f,c+=n>=49?n-49+10:n>=17?n-17+10:n}return c}function n(e,a){this.name=e,this.p=new c(a,16),this.n=this.p.bitLength(),this.k=new c(1).ishln(this.n).isub(this.p),this.tmp=this._tmp()}function i(){n.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function b(){n.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function o(){n.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function s(){n.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function u(e){if("string"==typeof e){var a=c._prime(e);this.m=a.p,this.prime=a}else this.m=e,this.prime=null}function h(e){u.call(this,e),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new c(1).ishln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv.sign=!0,this.minv=this.minv.mod(this.r)}"object"==typeof e?e.exports=c:a.BN=c,c.BN=c,c.wordSize=26,c.prototype._init=function(e,a,f){if("number"==typeof e)return this._initNumber(e,a,f);if("object"==typeof e)return this._initArray(e,a,f);"hex"===a&&(a=16),t(a===(0|a)&&a>=2&&36>=a),e=e.toString().replace(/\s+/g,"");var c=0;"-"===e[0]&&c++,16===a?this._parseHex(e,c):this._parseBase(e,a,c),"-"===e[0]&&(this.sign=!0),this.strip(),"le"===f&&this._initArray(this.toArray(),a,f)},c.prototype._initNumber=function(e,a,f){0>e&&(this.sign=!0,e=-e),67108864>e?(this.words=[67108863&e],this.length=1):4503599627370496>e?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(t(9007199254740992>e),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===f&&this._initArray(this.toArray(),a,f)},c.prototype._initArray=function(e,a,f){if(t("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var c=0;c=0;c-=3){var n=e[c]|e[c-1]<<8|e[c-2]<<16;this.words[d]|=n<>>26-r&67108863,r+=24,r>=26&&(r-=26,d++)}else if("le"===f)for(var c=0,d=0;c>>26-r&67108863,r+=24,r>=26&&(r-=26,d++)}return this.strip()},c.prototype._parseHex=function(e,a){this.length=Math.ceil((e.length-a)/6),this.words=new Array(this.length);for(var t=0;t=a;t-=6){var d=r(e,t,t+6);this.words[c]|=d<>>26-f&4194303,f+=24,f>=26&&(f-=26,c++)}if(t+6!==a){var d=r(e,a,t+6);this.words[c]|=d<>>26-f&4194303}this.strip()},c.prototype._parseBase=function(e,a,t){this.words=[0],this.length=1;for(var f=0,c=1;67108863>=c;c*=a)f++;f--,c=c/a|0;for(var r=e.length-t,n=r%f,i=Math.min(r,r-n)+t,b=0,o=t;i>o;o+=f)b=d(e,o,o+f,a),this.imuln(c),this.words[0]+b<67108864?this.words[0]+=b:this._iaddn(b);if(0!==n){for(var s=1,b=d(e,o,e.length,a),o=0;n>o;o++)s*=a;this.imuln(s),this.words[0]+b<67108864?this.words[0]+=b:this._iaddn(b)}},c.prototype.copy=function(e){e.words=new Array(this.length);for(var a=0;a1&&0===this.words[this.length-1];)this.length--;return this._normSign()},c.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.sign=!1),this},c.prototype.inspect=function(){return(this.red?""};var l=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],p=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],g=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];c.prototype.toString=function(e,a){if(e=e||10,16===e||"hex"===e){for(var f="",c=0,a=0|a||1,r=0,d=0;d>>24-c&16777215,f=0!==r||d!==this.length-1?l[6-i.length]+i+f:i+f,c+=2,c>=26&&(c-=26,d--)}for(0!==r&&(f=r.toString(16)+f);f.length%a!==0;)f="0"+f;return this.sign&&(f="-"+f),f}if(e===(0|e)&&e>=2&&36>=e){var b=p[e],o=g[e],f="",s=this.clone();for(s.sign=!1;0!==s.cmpn(0);){var u=s.modn(o).toString(e);s=s.idivn(o),f=0!==s.cmpn(0)?l[b-u.length]+u+f:u+f}return 0===this.cmpn(0)&&(f="0"+f),this.sign&&(f="-"+f),f}t(!1,"Base should be between 2 and 36")},c.prototype.toJSON=function(){return this.toString(16)},c.prototype.toArray=function(e){this.strip();var a=new Array(this.byteLength());a[0]=0;var t=this.clone();if("le"!==e)for(var f=0;0!==t.cmpn(0);f++){var c=t.andln(255);t.ishrn(8),a[a.length-f-1]=c}else for(var f=0;0!==t.cmpn(0);f++){var c=t.andln(255);t.ishrn(8),a[f]=c}return a},Math.clz32?c.prototype._countBits=function(e){return 32-Math.clz32(e)}:c.prototype._countBits=function(e){var a=e,t=0;return a>=4096&&(t+=13,a>>>=13),a>=64&&(t+=7,a>>>=7),a>=8&&(t+=4,a>>>=4),a>=2&&(t+=2,a>>>=2),t+a},c.prototype._zeroBits=function(e){if(0===e)return 26;var a=e,t=0;return 0===(8191&a)&&(t+=13,a>>>=13),0===(127&a)&&(t+=7,a>>>=7),0===(15&a)&&(t+=4,a>>>=4),0===(3&a)&&(t+=2,a>>>=2),0===(1&a)&&t++,t},c.prototype.bitLength=function(){var e=0,a=this.words[this.length-1],e=this._countBits(a);return 26*(this.length-1)+e},c.prototype.zeroBits=function(){if(0===this.cmpn(0))return 0;for(var e=0,a=0;ae.length?this.clone().ior(e):e.clone().ior(this)},c.prototype.iand=function(e){this.sign=this.sign&&e.sign;var a;a=this.length>e.length?e:this;for(var t=0;te.length?this.clone().iand(e):e.clone().iand(this)},c.prototype.ixor=function(e){this.sign=this.sign||e.sign;var a,t;this.length>e.length?(a=this,t=e):(a=e,t=this);for(var f=0;fe.length?this.clone().ixor(e):e.clone().ixor(this)},c.prototype.setn=function(e,a){t("number"==typeof e&&e>=0);for(var f=e/26|0,c=e%26;this.length<=f;)this.words[this.length++]=0;return a?this.words[f]=this.words[f]|1<e.length?(t=this,f=e):(t=e,f=this);for(var c=0,r=0;r>>26}for(;0!==c&&r>>26}if(this.length=t.length,0!==c)this.words[this.length]=c,this.length++;else if(t!==this)for(;re.length?this.clone().iadd(e):e.clone().iadd(this)},c.prototype.isub=function(e){if(e.sign){e.sign=!1;var a=this.iadd(e);return e.sign=!0,a._normSign()}if(this.sign)return this.sign=!1,this.iadd(e),this.sign=!0,this._normSign();var t=this.cmp(e);if(0===t)return this.sign=!1,this.length=1,this.words[0]=0,this;var f,c;t>0?(f=this,c=e):(f=e,c=this);for(var r=0,d=0;d>26,this.words[d]=67108863&a}for(;0!==r&&d>26,this.words[d]=67108863&a}if(0===r&&d>>26,r=67108863&t,d=Math.min(f,e.length-1),n=Math.max(0,f-this.length+1);d>=n;n++){var i=f-n,b=0|this.words[i],o=0|e.words[n],s=b*o,u=67108863&s;c=c+(s/67108864|0)|0,u=u+r|0,r=67108863&u,c=c+(u>>>26)|0}a.words[f]=r,t=c}return 0!==t?a.words[f]=t:a.length--,a.strip()},c.prototype._bigMulTo=function(e,a){a.sign=e.sign!==this.sign,a.length=this.length+e.length;for(var t=0,f=0,c=0;c=i;i++){var b=c-i,o=0|this.words[b],s=0|e.words[i],u=o*s,h=67108863&u;r=r+(u/67108864|0)|0,h=h+d|0,d=67108863&h,r=r+(h>>>26)|0,f+=r>>>26,r&=67108863}a.words[c]=d,t=r,r=f}return 0!==t?a.words[c]=t:a.length--,a.strip()},c.prototype.mulTo=function(e,a){var t;return t=this.length+e.length<63?this._smallMulTo(e,a):this._bigMulTo(e,a)},c.prototype.mul=function(e){var a=new c(null);return a.words=new Array(this.length+e.length),this.mulTo(e,a)},c.prototype.imul=function(e){if(0===this.cmpn(0)||0===e.cmpn(0))return this.words[0]=0,this.length=1,this;var a=this.length,t=e.length;this.sign=e.sign!==this.sign,this.length=this.length+e.length,this.words[this.length-1]=0;for(var f=this.length-2;f>=0;f--){for(var c=0,r=0,d=Math.min(f,t-1),n=Math.max(0,f-a+1);d>=n;n++){var i=f-n,b=this.words[i],o=e.words[n],s=b*o,u=67108863&s;c+=s/67108864|0,u+=r,r=67108863&u,c+=u>>>26}this.words[f]=r,this.words[f+1]+=c,c=0}for(var c=0,i=1;i>>26}return this.strip()},c.prototype.imuln=function(e){t("number"==typeof e);for(var a=0,f=0;f>=26,a+=c/67108864|0,a+=r>>>26,this.words[f]=67108863&r}return 0!==a&&(this.words[f]=a,this.length++),this},c.prototype.muln=function(e){return this.clone().imuln(e)},c.prototype.sqr=function(){return this.mul(this)},c.prototype.isqr=function(){return this.mul(this)},c.prototype.ishln=function(e){t("number"==typeof e&&e>=0);var a=e%26,f=(e-a)/26,c=67108863>>>26-a<<26-a;if(0!==a){for(var r=0,d=0;d>>26-a}r&&(this.words[d]=r,this.length++)}if(0!==f){for(var d=this.length-1;d>=0;d--)this.words[d+f]=this.words[d];for(var d=0;f>d;d++)this.words[d]=0;this.length+=f}return this.strip()},c.prototype.ishrn=function(e,a,f){t("number"==typeof e&&e>=0);var c;c=a?(a-a%26)/26:0;var r=e%26,d=Math.min((e-r)/26,this.length),n=67108863^67108863>>>r<b;b++)i.words[b]=this.words[b];i.length=d}if(0===d);else if(this.length>d){this.length-=d;for(var b=0;b=0&&(0!==o||b>=c);b--){var s=this.words[b];this.words[b]=o<<26-r|s>>>r,o=s&n}return i&&0!==o&&(i.words[i.length++]=o),0===this.length&&(this.words[0]=0,this.length=1),this.strip(),this},c.prototype.shln=function(e){return this.clone().ishln(e)},c.prototype.shrn=function(e){return this.clone().ishrn(e)},c.prototype.testn=function(e){t("number"==typeof e&&e>=0);var a=e%26,f=(e-a)/26,c=1<=0);var a=e%26,f=(e-a)/26;if(t(!this.sign,"imaskn works only with positive numbers"),0!==a&&f++,this.length=Math.min(f,this.length),0!==a){var c=67108863^67108863>>>a<e?this.isubn(-e):this.sign?1===this.length&&this.words[0]=67108864;a++)this.words[a]-=67108864,a===this.length-1?this.words[a+1]=1:this.words[a+1]++;return this.length=Math.max(this.length,a+1),this},c.prototype.isubn=function(e){if(t("number"==typeof e),0>e)return this.iaddn(-e);if(this.sign)return this.sign=!1,this.iaddn(e),this.sign=!0,this;this.words[0]-=e;for(var a=0;a>26)-(b/67108864|0),this.words[c+f]=67108863&i}for(;c>26,this.words[c+f]=67108863&i}if(0===n)return this.strip();t(-1===n),n=0;for(var c=0;c>26,this.words[c]=67108863&i}return this.sign=!0,this.strip()},c.prototype._wordDiv=function(e,a){var t=this.length-e.length,f=this.clone(),r=e,d=r.words[r.length-1],n=this._countBits(d);t=26-n,0!==t&&(r=r.shln(t),f.ishln(t),d=r.words[r.length-1]);var i,b=f.length-r.length;if("mod"!==a){i=new c(null),i.length=b+1,i.words=new Array(i.length);for(var o=0;o=0;u--){var h=67108864*f.words[r.length+u]+f.words[r.length+u-1];for(h=Math.min(h/d|0,67108863),f._ishlnsubmul(r,h,u);f.sign;)h--,f.sign=!1,f._ishlnsubmul(r,1,u),0!==f.cmpn(0)&&(f.sign=!f.sign);i&&(i.words[u]=h)}return i&&i.strip(),f.strip(),"div"!==a&&0!==t&&f.ishrn(t),{div:i?i:null,mod:f}},c.prototype.divmod=function(e,a){if(t(0!==e.cmpn(0)),this.sign&&!e.sign){var f,r,d=this.neg().divmod(e,a);return"mod"!==a&&(f=d.div.neg()),"div"!==a&&(r=0===d.mod.cmpn(0)?d.mod:e.sub(d.mod)),{div:f,mod:r}}if(!this.sign&&e.sign){var f,d=this.divmod(e.neg(),a);return"mod"!==a&&(f=d.div.neg()),{div:f,mod:d.mod}}return this.sign&&e.sign?this.neg().divmod(e.neg(),a):e.length>this.length||this.cmp(e)<0?{div:new c(0),mod:this}:1===e.length?"div"===a?{div:this.divn(e.words[0]),mod:null}:"mod"===a?{div:null,mod:new c(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new c(this.modn(e.words[0]))}:this._wordDiv(e,a)},c.prototype.div=function(e){return this.divmod(e,"div").div},c.prototype.mod=function(e){return this.divmod(e,"mod").mod},c.prototype.divRound=function(e){var a=this.divmod(e);if(0===a.mod.cmpn(0))return a.div;var t=a.div.sign?a.mod.isub(e):a.mod,f=e.shrn(1),c=e.andln(1),r=t.cmp(f);return 0>r||1===c&&0===r?a.div:a.div.sign?a.div.isubn(1):a.div.iaddn(1)},c.prototype.modn=function(e){t(67108863>=e);for(var a=(1<<26)%e,f=0,c=this.length-1;c>=0;c--)f=(a*f+this.words[c])%e;return f},c.prototype.idivn=function(e){t(67108863>=e);for(var a=0,f=this.length-1;f>=0;f--){var c=this.words[f]+67108864*a;this.words[f]=c/e|0,a=c%e}return this.strip()},c.prototype.divn=function(e){return this.clone().idivn(e)},c.prototype.egcd=function(e){t(!e.sign),t(0!==e.cmpn(0));var a=this,f=e.clone();a=a.sign?a.mod(e):a.clone();for(var r=new c(1),d=new c(0),n=new c(0),i=new c(1),b=0;a.isEven()&&f.isEven();)a.ishrn(1),f.ishrn(1),++b;for(var o=f.clone(),s=a.clone();0!==a.cmpn(0);){for(;a.isEven();)a.ishrn(1),r.isEven()&&d.isEven()?(r.ishrn(1),d.ishrn(1)):(r.iadd(o).ishrn(1),d.isub(s).ishrn(1));for(;f.isEven();)f.ishrn(1),n.isEven()&&i.isEven()?(n.ishrn(1),i.ishrn(1)):(n.iadd(o).ishrn(1),i.isub(s).ishrn(1));a.cmp(f)>=0?(a.isub(f),r.isub(n),d.isub(i)):(f.isub(a),n.isub(r),i.isub(d))}return{a:n,b:i,gcd:f.ishln(b)}},c.prototype._invmp=function(e){t(!e.sign),t(0!==e.cmpn(0));var a=this,f=e.clone();a=a.sign?a.mod(e):a.clone();for(var r=new c(1),d=new c(0),n=f.clone();a.cmpn(1)>0&&f.cmpn(1)>0;){for(;a.isEven();)a.ishrn(1),r.isEven()?r.ishrn(1):r.iadd(n).ishrn(1);for(;f.isEven();)f.ishrn(1),d.isEven()?d.ishrn(1):d.iadd(n).ishrn(1);a.cmp(f)>=0?(a.isub(f),r.isub(d)):(f.isub(a),d.isub(r))}return 0===a.cmpn(1)?r:d},c.prototype.gcd=function(e){if(0===this.cmpn(0))return e.clone();if(0===e.cmpn(0))return this.clone();var a=this.clone(),t=e.clone();a.sign=!1,t.sign=!1;for(var f=0;a.isEven()&&t.isEven();f++)a.ishrn(1),t.ishrn(1);for(;;){for(;a.isEven();)a.ishrn(1);for(;t.isEven();)t.ishrn(1);var c=a.cmp(t);if(0>c){var r=a;a=t,t=r}else if(0===c||0===t.cmpn(1))break;a.isub(t)}return t.ishln(f)},c.prototype.invm=function(e){return this.egcd(e).a.mod(e)},c.prototype.isEven=function(){return 0===(1&this.words[0])},c.prototype.isOdd=function(){return 1===(1&this.words[0])},c.prototype.andln=function(e){return this.words[0]&e},c.prototype.bincn=function(e){t("number"==typeof e);var a=e%26,f=(e-a)/26,c=1<r;r++)this.words[r]=0;return this.words[f]|=c,this.length=f+1,this}for(var d=c,r=f;0!==d&&r>>26,n&=67108863,this.words[r]=n}return 0!==d&&(this.words[r]=d,this.length++),this},c.prototype.cmpn=function(e){var a=0>e;if(a&&(e=-e),this.sign&&!a)return-1;if(!this.sign&&a)return 1;e&=67108863,this.strip();var t;if(this.length>1)t=1;else{var f=this.words[0];t=f===e?0:e>f?-1:1}return this.sign&&(t=-t),t},c.prototype.cmp=function(e){if(this.sign&&!e.sign)return-1;if(!this.sign&&e.sign)return 1;var a=this.ucmp(e);return this.sign?-a:a},c.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length=0;t--){var f=this.words[t],c=e.words[t];if(f!==c){c>f?a=-1:f>c&&(a=1);break}}return a},c.red=function(e){return new u(e)},c.prototype.toRed=function(e){return t(!this.red,"Already a number in reduction context"),t(!this.sign,"red works only with positives"),e.convertTo(this)._forceRed(e)},c.prototype.fromRed=function(){return t(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},c.prototype._forceRed=function(e){return this.red=e,this},c.prototype.forceRed=function(e){return t(!this.red,"Already a number in reduction context"),this._forceRed(e)},c.prototype.redAdd=function(e){return t(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},c.prototype.redIAdd=function(e){return t(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},c.prototype.redSub=function(e){return t(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},c.prototype.redISub=function(e){return t(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},c.prototype.redShl=function(e){return t(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},c.prototype.redMul=function(e){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},c.prototype.redIMul=function(e){return t(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},c.prototype.redSqr=function(){return t(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},c.prototype.redISqr=function(){return t(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},c.prototype.redSqrt=function(){return t(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},c.prototype.redInvm=function(){return t(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},c.prototype.redNeg=function(){return t(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},c.prototype.redPow=function(e){return t(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var m={k256:null,p224:null,p192:null,p25519:null};n.prototype._tmp=function(){var e=new c(null);return e.words=new Array(Math.ceil(this.n/13)),e},n.prototype.ireduce=function(e){var a,t=e;do this.split(t,this.tmp),t=this.imulK(t),t=t.iadd(this.tmp),a=t.bitLength();while(a>this.n);var f=a0?t.isub(this.p):t.strip(),t},n.prototype.split=function(e,a){e.ishrn(this.n,0,a)},n.prototype.imulK=function(e){return e.imul(this.k)},f(i,n),i.prototype.split=function(e,a){for(var t=4194303,f=Math.min(e.length,9),c=0;f>c;c++)a.words[c]=e.words[c];if(a.length=f,e.length<=9)return e.words[0]=0,void(e.length=1);var r=e.words[9];a.words[a.length++]=r&t;for(var c=10;c>>22,r=d}e.words[c-10]=r>>>22,e.length-=9},i.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var a,t=0,f=0;f>>=26,e.words[t]=c,a=f}return 0!==a&&(e.words[e.length++]=a),e},c._prime=function v(e){if(m[e])return m[e];var v;if("k256"===e)v=new i;else if("p224"===e)v=new b;else if("p192"===e)v=new o;else{if("p25519"!==e)throw new Error("Unknown prime "+e);v=new s}return m[e]=v,v},u.prototype._verify1=function(e){t(!e.sign,"red works only with positives"),t(e.red,"red works only with red numbers")},u.prototype._verify2=function(e,a){t(!e.sign&&!a.sign,"red works only with positives"),t(e.red&&e.red===a.red,"red works only with red numbers")},u.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.mod(this.m)._forceRed(this)},u.prototype.neg=function(e){var a=e.clone();return a.sign=!a.sign,a.iadd(this.m)._forceRed(this)},u.prototype.add=function(e,a){this._verify2(e,a);var t=e.add(a);return t.cmp(this.m)>=0&&t.isub(this.m),t._forceRed(this)},u.prototype.iadd=function(e,a){this._verify2(e,a);var t=e.iadd(a);return t.cmp(this.m)>=0&&t.isub(this.m),t},u.prototype.sub=function(e,a){this._verify2(e,a);var t=e.sub(a);return t.cmpn(0)<0&&t.iadd(this.m),t._forceRed(this)},u.prototype.isub=function(e,a){this._verify2(e,a);var t=e.isub(a);return t.cmpn(0)<0&&t.iadd(this.m),t},u.prototype.shl=function(e,a){return this._verify1(e),this.imod(e.shln(a))},u.prototype.imul=function(e,a){return this._verify2(e,a),this.imod(e.imul(a))},u.prototype.mul=function(e,a){return this._verify2(e,a),this.imod(e.mul(a))},u.prototype.isqr=function(e){return this.imul(e,e)},u.prototype.sqr=function(e){return this.mul(e,e)},u.prototype.sqrt=function(e){if(0===e.cmpn(0))return e.clone();var a=this.m.andln(3);if(t(a%2===1),3===a){var f=this.m.add(new c(1)).ishrn(2),r=this.pow(e,f);return r}for(var d=this.m.subn(1),n=0;0!==d.cmpn(0)&&0===d.andln(1);)n++,d.ishrn(1);t(0!==d.cmpn(0));var i=new c(1).toRed(this),b=i.redNeg(),o=this.m.subn(1).ishrn(1),s=this.m.bitLength();for(s=new c(2*s*s).toRed(this);0!==this.pow(s,o).cmp(b);)s.redIAdd(b);for(var u=this.pow(s,d),r=this.pow(e,d.addn(1).ishrn(1)),h=this.pow(e,d),l=n;0!==h.cmp(i);){for(var p=h,g=0;0!==p.cmp(i);g++)p=p.redSqr();t(l>g);var m=this.pow(u,new c(1).ishln(l-g-1));r=r.redMul(m),u=m.redSqr(),h=h.redMul(u),l=g}return r},u.prototype.invm=function(e){var a=e._invmp(this.m);return a.sign?(a.sign=!1,this.imod(a).redNeg()):this.imod(a)},u.prototype.pow=function(e,a){var t=[];if(0===a.cmpn(0))return new c(1);for(var f=a.clone();0!==f.cmpn(0);)t.push(f.andln(1)),f.ishrn(1);for(var r=e,d=0;d=0?r=c.isub(this.m):c.cmpn(0)<0&&(r=c.iadd(this.m)),r._forceRed(this)},h.prototype.mul=function(e,a){if(0===e.cmpn(0)||0===a.cmpn(0))return new c(0)._forceRed(this);var t=e.mul(a),f=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),r=t.isub(f).ishrn(this.shift),d=r;return r.cmp(this.m)>=0?d=r.isub(this.m):r.cmpn(0)<0&&(d=r.iadd(this.m)),d._forceRed(this)},h.prototype.invm=function(e){var a=this.imod(e._invmp(this.m).mul(this.r2));return a._forceRed(this)}}("undefined"==typeof a||a,this)},{}],370:[function(e,a,t){arguments[4][69][0].apply(t,arguments)},{dup:69}],371:[function(e,a,t){arguments[4][70][0].apply(t,arguments)},{"./hash/common":372,"./hash/hmac":373,"./hash/ripemd":374,"./hash/sha":375,"./hash/utils":376,dup:70}],372:[function(e,a,t){arguments[4][71][0].apply(t,arguments)},{"../hash":371,dup:71}],373:[function(e,a,t){arguments[4][72][0].apply(t,arguments)},{"../hash":371,dup:72}],374:[function(e,a,t){arguments[4][73][0].apply(t,arguments)},{"../hash":371,dup:73}],375:[function(e,a,t){arguments[4][74][0].apply(t,arguments)},{"../hash":371,dup:74}],376:[function(e,a,t){arguments[4][75][0].apply(t,arguments)},{dup:75,inherits:377}],377:[function(e,a,t){arguments[4][77][0].apply(t,arguments)},{dup:77}],378:[function(e,a,t){a.exports={name:"elliptic",version:"3.1.0",description:"EC cryptography",main:"lib/elliptic.js",scripts:{test:"make lint && mocha --reporter=spec test/*-test.js"},repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},keywords:["EC","Elliptic","curve","Cryptography"],author:{name:"Fedor Indutny",email:"fedor@indutny.com"},license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{browserify:"^3.44.2",jscs:"^1.11.3",jshint:"^2.6.0",mocha:"^2.1.0","uglify-js":"^2.4.13"},dependencies:{"bn.js":"^2.0.3",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},gitHead:"d86cd2a8178f7e7cecbd6dd92eea084e2ab44c13",_id:"elliptic@3.1.0",_shasum:"c21682ef762769b56a74201609105da11d5f60cc",_from:"elliptic@>=3.1.0 <4.0.0",_npmVersion:"2.11.0",_nodeVersion:"2.2.1",_npmUser:{name:"indutny",email:"fedor@indutny.com"},maintainers:[{name:"indutny",email:"fedor@indutny.com"}],dist:{shasum:"c21682ef762769b56a74201609105da11d5f60cc",tarball:"http://registry.npmjs.org/elliptic/-/elliptic-3.1.0.tgz"},directories:{},_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-3.1.0.tgz",readme:"ERROR: No README data found!"}},{}],379:[function(e,a,t){(function(t,f){const c=e("ethereumjs-util"),r=e("ethereum-common"),d=c.BN,n=new d("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16);t.Buffer=f,t.ethUtil=c;var i=a.exports=function(e){const a=[{name:"nonce",length:32,allowLess:!0,"default":new f([])},{name:"gasPrice",length:32,allowLess:!0,"default":new f([])},{name:"gasLimit",alias:"gas",length:32,allowLess:!0,"default":new f([])},{name:"to",allowZero:!0,length:20,"default":new f([])},{name:"value",length:32,allowLess:!0,"default":new f([])},{name:"data",alias:"input",allowZero:!0,"default":new f([])},{name:"v",length:1,"default":new f([28])},{name:"r",length:32,allowLess:!0,"default":new f([])},{name:"s",length:32,allowLess:!0,"default":new f([])}];c.defineProperties(this,a,e),this._homestead=!0};i.prototype.toCreationAddress=function(){return""===this.to.toString("hex")},i.prototype.hash=function(e){var a;return"undefined"==typeof e&&(e=!0),a=e?this.raw:this.raw.slice(0,6),c.rlphash(a)},i.prototype.getSenderAddress=function(){if(this._from)return this._from;var e=this.getSenderPublicKey();return this._from=c.publicToAddress(e),this._from},i.prototype.getSenderPublicKey=function(){return this._senderPubKey&&this._senderPubKey.length||this.verifySignature(),this._senderPubKey},i.prototype.verifySignature=function(){var e=this.hash(!1);if(this._homestead&&1===new d(this.s).cmp(n))return!1;try{this._senderPubKey=c.ecrecover(e,this.v,this.r,this.s)}catch(a){return!1}return!!this._senderPubKey},i.prototype.sign=function(e){var a=this.hash(!1),t=c.ecsign(a,e);Object.assign(this,t)},i.prototype.getDataFee=function(){const e=this.raw[5];for(var a=new d(0),t=0;t0&&a.push(["gas limit is to low. Need at least "+this.getBaseFee()]),void 0===e||e===!1?0===a.length:a.join(" ")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{buffer:99,"ethereum-common":382,"ethereumjs-util":384}],380:[function(e,a,t){a.exports=[{ip:"52.16.188.185",port:"30303",id:"a979fb575495b8d6db44f750317d0f4622bf4c2aa3365d6af7c284339968eef29b69ad0dce72a4d8db5ebb4968de0e3bec910127f134779fbcb0cb6d3331163c"},{ip:"54.94.239.50",port:"30303",id:"de471bccee3d042261d52e9bff31458daecc406142b401d4cd848f677479f73104b9fdeb090af9583d3391b7f10cb2ba9e26865dd5fca4fcdc0fb1e3b723c786"},{ip:"52.74.57.123",port:"30303",id:"1118980bf48b0a3640bdba04e0fe78b1add18e1cd99bf22d53daac1fd9972ad650df52176e7c7d89d1114cfef2bc23a2959aa54998a46afcf7d91809f0855082"},{ip:"5.1.83.226",port:"30303",id:"979b7fa28feeb35a4741660a16076f1943202cb72b6af70d327f053e248bab9ba81760f39d0701ef1d8f89cc1fbd2cacba0710a12cd5314d5e0c9021aa3637f9"}]},{}],381:[function(e,a,t){a.exports={"3282791d6fd713f1e94f4bfd565eaa78b3a0599d":"1337000000000000000000","17961d633bcf20a7b029a7d94b7df4da2ec5427f":"229427000000000000000","493a67fe23decc63b10dda75f3287695a81bd5ab":"880000000000000000000","01fb8ec12425a04f813e46c54c05748ca6b29aa9":"259800000000000000000",d2a030ac8952325f9e1db378a71485a24e1b07b2:"2000000000000000000000","77a34907f305a54c85db09c363fde3c47e6ae21f":"985000000000000000000","391a77405c09a72b5e8436237aaaf95d68da1709":"49082000000000000000","00aada25ea2286709abb422d41923fd380cd04c7":"650100000000000000000",acc46a2a555c74ded4a2bd094e821b97843b40c0:"1940000000000000000000",de07fb5b7a464e3ba7fbe09e9acb271af5338c58:"50000000000000000000","4c696be99f3a690440c3436a59a7d7e937d6ba0d":"3460000000000000000000",fa33553285a973719a0d5f956ff861b2d89ed304:"20000000000000000000","67cfda6e70bf7657d39059b59790e5145afdbe61":"646000000000000000000",a321091d3018064279db399d2b2a88a6f440ae24:"3200000000000000000000",fb3fa1ac08aba9cc3bf0fe9d483820688f65b410:"30000000000000000000000","6715c14035fb57bb3d667f7b707498c41074b855":"700000000000000000000",d4344f7d5cad65d17e5c2d0e7323943d6f62fe92:"267400000000000000000",a3294626ec2984c43b43da4d5d8e4669b11d4b59:"1008000000000000000000","656018584130db83ab0591a8128d9381666a8d0e":"63960000000000000000","0fa010ce0c731d3b628e36b91f571300e49dbeab":"999800000000000000000","3098b65db93ecacaf7353c48808390a223d57684":"449965000000000000000",ae635bf73831119d2d29c0d04ff8f8d8d0a57a46:"1337000000000000000000","0f7515ff0e808f695e0c20485ff96ed2f7b79310":"1000169000000000000000","8b30c04098d7a7e6420c357ea7bfa49bac9a8a18":"8000200000000000000000","64dba2d6615b8bd7571836dc75bc79d314f5ecee":"10000000000000000000000",e7912d4cf4562c573ddc5b71e37310e378ef86c9:"394000000000000000000",a4da34450d22ec0ffcede0004b02f7872ee0b73a:"93342000000000000000","34437d1465640b136cb5841c3f934f9ba0b7097d":"173000000000000000000",c652871d192422c6bc235fa063b44a7e1d43e385:"155000000000000000000",a8a708e84f82db86a35502193b4c6ee9a76ebe8f:"1015200000000000000000","5c3f567faff7bad1b5120022e8cbcaa82b4917b3":"2000000000000000000000",dbc1d0ee2bab531140de137722cd36bdb4e47194:"200000000000000000000",f59dab1bf8df11327e61f9b7a14b563a96ec3554:"6000000000000000000000","456f8d746682b224679349064d1b368c7c05b176":"3700000000000000000000","5f13154631466dcb1353c890932a7c97e0878e90":"6000000000000000000000",f4b1626e24f30bcad9273c527fcc714b5d007b8f:"200000000000000000000",a8db0b9b201453333c757f6ad9bcb555c02da93b:"2199970000000000000000",a0fc7e53c5ebd27a2abdac45261f84ab3b51aefb:"3008250000000000000000","1b636b7a496f044d7359596e353a104616436f6b":"360354000000000000000","74bce9ec38362d6c94ccac26d5c0e13a8b3b1d40":"999954000000000000000","9834682180b982d166badb9d9d1d9bbf016d87ee":"2000000000000000000000","1e6e0153fc161bc05e656bbb144c7187bf4fe84d":"2000000000000000000000","989c0ccff654da03aeb11af701054561d6297e1d":"4000000000000000000000","78a1e254409fb1b55a7cb4dd8eba3b30c8bad9ef":"100000000000000000000","9ef1896b007c32a15114fb89d73dbd47f9122b69":"4000000000000000000000","33320dd90f2baa110dd334872a998f148426453c":"999972000000000000000",e72e1d335cc29a96b9b1c02f003a16d971e90b9d:"1580000000000000000000","0921605f99164e3bcc28f31caece78973182561d":"793744000000000000000",fc00a420a36107dfd5f495128a5fe5abb2db0f34:"5960000000000000000000",dfcbdf09454e1a5e4a40d3eef7c5cf1cd3de9486:"4000000000000000000000","646e043d0597a664948fbb0dc15475a3a4f3a6ed":"20000000000000000000","79aeb34566b974c35a5881dec020927da7df5d25":"2000000000000000000000",dbadc61ed5f0460a7f18e51b2fb2614d9264a0e0:"40000000000000000000","97b91efe7350c2d57e7e406bab18f3617bcde14a":"9999980000000000000000","8398e07ebcb4f75ff2116de77c1c2a99f303a4cf":"500000000000000000000",f02796295101674288c1d93467053d042219b794:"740000000000000000000",f4ed848ec961739c2c7e352f435ba70a7cd5db38:"1970000000000000000000","82485728d0e281563758c75ab27ed9e882a0002d":"147000000000000000000","427ec668ac9404e895cc861511d1620a4912be98":"40000000000000000000000","1bbc199e586790be87afedc849c04726745c5d7b":"4000000000000000000000","10d945334ecde47beb9ca3816c173dfbbd0b5333":"1400000000000000000000","1dcebcb7656df5dcaa3368a055d22f9ed6cdd940":"499800000000000000000","2ac1f8d7bf721f3cfe74d20fea9b87a28aaa982c":"161000000000000000000","0a47ad9059a249fc936b2662353da6905f75c2b9":"2000000000000000000000","768498934e37e905f1d0e77b44b574bcf3ec4ae8":"20000000000000000000000",f46b6b9c7cb552829c1d3dfd8ffb11aabae782f6:"21000000000000000000","7aea25d42b2612286e99c53697c6bc4100e2dbbf":"2000000000000000000000",af3615c789d0b1152ad4db25fe5dcf222804cf62:"1000000000000000000000","92e6581e1da1f9b846e09347333dc818e2d2ac66":"3640000000000000000000","240305727313d01e73542c775ff59d11cd35f819":"5931229000000000000000",b95cfda8465ba9c2661b249fc3ab661bdfa35ff0:"318949000000000000000","1b0d076817e8d68ee2df4e1da1c1142d198c4435":"1550000000000000000000","93c2e64e5de5589ed25006e843196ee9b1cf0b3e":"1670000000000000000000","0e2e504a2d1122b5a9feee5cb1451bf4c2ace87b":"3940000000000000000000","22b96ab2cad55db100b53001f9e4db378104c807":"10000000000000000000000",a927d48bb6cb814bc609cbcaa9151f5d459a27e1:"271600000000000000000","5cbd8daf27ddf704cdd0d909a789ba36ed4f37b2":"13400000000000000000","9adbd3bc7b0afc05d1d2eda49ff863939c48db46":"199955000000000000000",ac7e03702723cb16ee27e22dd0b815dc2d5cae9f:"16000000000000000000000","1e210e7047886daa52aaf70f4b991dac68e3025e":"200000000000000000000",c98048687f2bfcc9bd90ed18736c57edd352b65d:"1000000000000000000000","81c18c2a238ddc4cba230a072dd7dc101e620273":"1337000000000000000000",cb3d766c983f192bcecac70f4ee03dd9ff714d51:"100000000000000000000","44a63d18424587b9b307bfc3c364ae10cd04c713":"20000000000000000000","4ab2d34f04834fbf7479649cab923d2c4725c553":"3520000000000000000000",b834acf3015322c58382eeb2b79638906e88b6de:"24000000000000000000000","7d551397f79a2988b064afd0efebee802c7721bc":"39400000000000000000000",b537d36a70eeb8d3e5c80de815225c1158cb92c4:"1500000000000000000000","805ce51297a0793b812067f017b3e7b2df9bb1f9":"100000000000000000000","085ba65febe23eefc2c802666ab1262382cfc494":"400000000000000000000",b1c0d08b36e184f9952a4037e3e53a667d070a4e:"1000000000000000000000","83fe5a1b328bae440711beaf6aad6026eda6d220":"20000000000000000000000","7fd679e5fb0da2a5d116194dcb508318edc580f3":"6560000000000000000000","41ad369f758fef38a19aa3149379832c818ef2a0":"1000060000000000000000","6d846dc12657e91af25008519c3e857f51707dd6":"4590000000000000000000",c02d6eadeacf1b78b3ca85035c637bb1ce01f490:"4000000000000000000000","826eb7cd7319b82dd07a1f3b409071d96e39677f":"1000000000000000000000","4ac9905a4cb6ab1cfd62546ee5917300b87c4fde":"1015200000000000000000",cf6e52e6b77480b1867efec6446d9fc3cc3577e8:"222010000000000000000","2476b2bb751ce748e1a4c4ff7b230be0c15d2245":"4000000000000000000000","1a505e62a74e87e577473e4f3afa16bedd3cfa52":"500000000000000000000","21d02705f3f64905d80ed9147913ea8c7307d695":"1363740000000000000000","7b1daf14891b8a1e1bd429d8b36b9a4aa1d9afbf":"500000000000000000000","5338ef70eac9dd9af5a0503b5efad1039e67e725":"2674000000000000000000","50ca86b5eb1d01874df8e5f34945d49c6c1ab848":"1000000000000000000000",f3cc8bcb559465f81bfe583bd7ab0a2306453b9e:"20000000000000000000000","5c323457e187761a8276e359b7b7af3f3b6e3df6":"10000000000000000000000","4d82d7700c123bb919419bbaf046799c6b0e2c66":"20000000000000000000000","8a66abbc2d30ce21a833b0db8e561d5105e0a72c":"699958000000000000000","2ae53866fc2d14d572ab73b4a065a1188267f527":"8000000000000000000000","9af5c9894c33e42c2c518e3ac670ea9505d1b53e":"18200000000000000000",cba25c7a503cc8e0d04971ca05c762f9b762b48b:"500000000000000000000",fda3042819af3e662900e1b92b4358eda6e92590:"118200000000000000000000","9bd7c38a4210304a4d653edeff1b3ce45fce7843":"282000000000000000000",edc22fb92c638e1e21ff5cf039daa6e734dafb29:"298000000000000000000",a1f193a0592f1feb9fdfc90aa813784eb80471c9:"1400000000000000000000",e97fde0b67716325cf0ecce8a191a3761b2c791d:"1004700000000000000000","110237cf9117e767922fc4a1b78d7964da82df20":"3940000000000000000000",e32f95766d57b5cd4b173289d6876f9e64558194:"100000000000000000000",f2d59c8923759073d6f415aaf8eb065ff2f3b685:"7880000000000000000000",c53d79f7cb9b70952fd30fce58d54b9f0b59f647:"5089200000000000000000","9eb281c32719c40fdb3e216db0f37fbc73a026b7":"20000000000000000000","2d6511fd7a3800b26854c7ec39c0dcb5f4c4e8e8":"399910000000000000000","61ba87c77e9b596de7ba0e326fddfeec2163ef66":"200000000000000000000",de1121829c9a08284087a43fbd2fc1142a3233b4:"1000000000000000000000","22a25812ab56dcc423175ed1d8adacce33cd1810":"1850000000000000000000","518cef27b10582b6d14f69483ddaa0dd3c87bb5c":"600000000000000000000","59161749fedcf1c721f2202d13ade2abcf460b3d":"2000000000000000000000","3e36c17253c11cf38974ed0db1b759160da63783":"7000000000000000000000",cbfa76db04ce38fb205d37b8d377cf1380da0317:"1430000000000000000000",a7e83772bc200f9006aa2a260dbaa8483dc52b30:"207730000000000000000",e87eac6d602b4109c9671bf57b950c2cfdb99d55:"49932000000000000000","9b06ad841dffbe4ccf46f1039fc386f3c321446e":"2000000000000000000000",e0f903c1e48ac421ab48528f3d4a2648080fe043:"1015200000000000000000","5d872b122e994ef27c71d7deb457bf65429eca6c":"7999973000000000000000",f34083ecea385017aa40bdd35ef7effb4ce7762d:"400000000000000000000","7f3709391f3fbeba3592d175c740e87a09541d02":"480000000000000000000","888e94917083d152202b53163939869d271175b4":"4000000000000000000000",bed4c8f006a27c1e5f7ce205de75f516bfb9f764:"16000000000000000000000",b3a6bd41f9d9c3201e050b87198fbda399342210:"3622615000000000000000","550aadae1221b07afea39fba2ed62e05e5b7b5f9":"20000000000000000000",bcedc4267ccb89b31bb764d7211171008d94d44d:"200000000000000000000","6229dcc203b1edccfdf06e87910c452a1f4d7a72":"32500000000000000000000","94be3ae54f62d663b0d4cc9e1ea8fe9556ea9ebf":"23280000000000000000","0e0c9d005ea016c295cd795cc9213e87febc33eb":"198000000000000000000","55d057bcc04bd0f4af9642513aa5090bb3ff93fe":"1106680000000000000000",ed9e030ca75cb1d29ea01d0d4cdfdccd3844b6e4:"30895000000000000000","86c4ce06d9ac185bb148d96f7b7abe73f441006d":"10000000000000000000000","2c04115c3e52961b0dc0b0bf31fba4546f5966fd":"200000000000000000000",b959dce02e91d9db02b1bd8b7d17a9c41a97af09:"8000000000000000000000",e01547ba42fcafaf93938becf7699f74290af74f:"2000000000000000000000",c593d6e37d14b566643ac4135f243caa0787c182:"12000000000000000000000","2c0ee134d8b36145b47beee7af8d2738dbda08e8":"201000000000000000000","0ef54ac7264d2254abbb5f8b41adde875157db7c":"40000000000000000000","0349634dc2a9e80c3f7721ee2b5046aeaaedfbb5":"4000000000000000000000","873e49135c3391991060290aa7f6ccb8f85a78db":"20000000000000000000","05236d4c90d065f9e3938358aaffd777b86aec49":"500000000000000000000",d2abd84a181093e5e229136f42d835e8235de109:"100007000000000000000",b56a780028039c81caf37b6775c620e786954764:"2000000000000000000000","86df73bd377f2c09de63c45d67f283eaefa0f4ab":"1000000000000000000000","7670b02f2c3cf8fd4f4730f3381a71ea431c33c7":"267400000000000000000","24aa1151bb765fa3a89ca50eb6e1b1c706417fd4":"3100000000000000000000","43227d65334e691cf231b4a4e1d339b95d598afb":"10000000000000000000000","695550656cbf90b75d92ad9122d90d23ca68ca4d":"1000000000000000000000","5281733473e00d87f11e9955e589b59f4ac28e7a":"660360000000000000000000","99a96bf2242ea1b39ece6fcc0d18aed00c0179f3":"300000000000000000000",b1cf94f8091505055f010ab4bac696e0ca0f67a1:"1580000000000000000000","54391b4d176d476cea164e5fb535c69700cb2535":"100076000000000000000","152f2bd229ddf3cb0fdaf455c183209c0e1e39a2":"2000000000000000000000",affc99d5ebb4a84fe7788d97dce274b038240438:"5000000000000000000000","23df8f48ee009256ea797e1fa369beebcf6bc663":"2302671000000000000000","3a72d635aadeee4382349db98a1813a4cfeb3df1":"200000000000000000000000",ce26f9a5305f8381094354dbfc92664e84f902b5:"230200000000000000000",d283b8edb10a25528a4404de1c65e7410dbcaa67:"12000000000000000000000",a7859fc07f756ea7dcebbccd42f05817582d973f:"10000000000000000000000",b28181a458a440f1c6bb1de8400281a3148f4c35:"376000000000000000000","27b1694eafa165ebd7cc7bc99e74814a951419dc":"800000000000000000000","66cc8ab23c00d1b82acd7d73f38c99e0d05a4fa6":"100000000000000000000","926082cb7eed4b1993ad245a477267e1c33cd568":"374300000000000000000","4a47fc3e177f567a1e3893e000e36bba23520ab8":"2000000000000000000000","594a76f06935388dde5e234696a0668bc20d2ddc":"2800000000000000000000",e91fa0badaddb9a97e88d3f4db7c55d6bb7430fe:"376000000000000000000","574de1b3f38d915846ae3718564a5ada20c2f3ed":"4000000000000000000000","5816c2687777b6d7d2a2432d59a41fa059e3a406":"133700000000000000000000",b50955aa6e341571986608bdc891c2139f540cdf:"1970000000000000000000","6d44974a31d187eda16ddd47b9c7ec5002d61fbe":"940000000000000000000","80abec5aa36e5c9d098f1b942881bd5acac6963d":"2000000000000000000000","294f494b3f2e143c2ffc9738cbfd9501850b874e":"2240000000000000000000",bca3ffd4683fba0ad3bbc90734b611da9cfb457e:"200000000000000000000","5992624c54cdec60a5ae938033af8be0c50cbb0a":"3621678000000000000000","6560941328ff587cbc56c38c78238a7bb5f442f6":"744900000000000000000","74b7e0228baed65957aebb4d916d333aae164f0e":"2000000000000000000000","8516fcaf77c893970fcd1a958ba9a00e49044019":"196279000000000000000",b992a967308c02b98af91ee760fd3b6b4824ab0e:"2000000000000000000000","30bb4357cd6910c86d2238bf727cbe8156680e62":"100014000000000000000",b8cc0f060aad92d4eb8b36b3b95ce9e90eb383d7:"150000000000000000000000","28d4ebf41e3d3c451e943bdd7e1f175fae932a3d":"6000000000000000000000","8c83d424a3cf24d51f01923dd54a18d6b6fede7b":"4000000000000000000000","7efc90766a00bc52372cac97fabd8a3c831f8ecd":"158000000000000000000","7c2b9603884a4f2e464eceb97d17938d828bc02c":"3000000000000000000000","9d250ae4f110d71cafc7b0adb52e8d9acb6679b8":"9840000000000000000000","61b3df2e9e9fd968131f1e88f0a0eb5bd765464d":"4000000000000000000000","9ae13bd882f2576575921a94974cbea861ba0d35":"3160000000000000000000","3d09688d93ad07f3abe68c722723cd680990435e":"29999948000000000000000","5e58e255fc19870a04305ff2a04631f2ff294bb1":"17600000000000000000",bcaed0acb6a76f113f7c613555a2c3b0f5bf34a5:"193600000000000000000","159adce27aa10b47236429a34a5ac42cad5b6416":"31867951000000000000000",e834c64318205ca7dd4a21abcb08266cb21ff02c:"999999000000000000000","7b6a84718dd86e63338429ac811d7c8a860f21f1":"1790000000000000000000","2118c116ab0cdf6fd11d54a4309307b477c3fc0f":"10000000000000000000000","34a901a69f036bcf9f7843c0ba01b426e8c3dc2b":"4000000000000000000000",c7d44fe32c7f8cd5f1a97427b6cd3afc9e45023e:"1580000000000000000000",c6045b3c350b4ce9ca0c6b754fb41a69b97e9900:"925000000000000000000",cf5a6f9df75579c644f794711215b30d77a0ce40:"2000000000000000000000",e2904b1aefa056398b6234cb35811288d736db67:"40000000000000000000","7101bd799e411cde14bdfac25b067ac890eab8e8":"1450054000000000000000",cc45fb3a555bad807b388a0357c855205f7c75e8:"865000000000000000000",ff0c3c7798e8733dd2668152891bab80a8be955c:"80220000000000000000","3536453322c1466cb905af5c335ca8db74bff1e6":"447000000000000000000","08cac8952641d8fc526ec1ab4f2df826a5e7710f":"300000000000000000000","0d8aab8f74ea862cdf766805009d3f3e42d8d00b":"5820000000000000000000","8908760cd39b9c1e8184e6a752ee888e3f0b7045":"6000000000000000000000","8156360bbd370961ceca6b6691d75006ad204cf2":"40000000000000000000000",a304588f0d850cd8d38f76e9e83c1bf63e333ede:"39800000000000000000","14c63ba2dcb1dd4df33ddab11c4f0007fa96a62d":"15500000000000000000000",a009bf076f1ba3fa57d2a7217218bed5565a7a7a:"1000000000000000000000","1c89060f987c518fa079ec2c0a5ebfa30f5d20f7":"38000000000000000000000","8895eb726226edc3f78cc6a515077b3296fdb95e":"3940000000000000000000","7919e7627f9b7d54ea3b14bb4dd4649f4f39dee0":"1670000000000000000000",b3c65b845aba6cd816fbaae983e0e46c82aa8622:"1000000000000000000000",eff51d72adfae143edf3a42b1aec55a2ccdd0b90:"300000000000000000000","05bb64a916be66f460f5e3b64332110d209e19ae":"4200000000000000000000",d5b117ec116eb846418961eb7edb629cd0dd697f:"3000000000000000000000", -"05e97b09492cd68f63b12b892ed1d11d152c0eca":"1015200000000000000000","84cc7878da605fdb019fab9b4ccfc157709cdda5":"1336922000000000000000","79cac6494f11ef2798748cb53285bd8e22f97cda":"2000000000000000000000",bd5a8c94bd8be6470644f70c8f8a33a8a55c6341:"200000000000000000000",b119e79aa9b916526581cbf521ef474ae84dcff4:"1470700000000000000000",aff1045adf27a1aa329461b24de1bae9948a698b:"33400000000000000000","4398628ea6632d393e929cbd928464c568aa4a0c":"1400000000000000000000","99997668f7c1a4ff9e31f9977ae3224bcb887a85":"291200000000000000000",bc0e8745c3a549445c2be900f52300804ab56289:"33104697000000000000000",e5bab4f0afd8a9d1a381b45761aa18f3d3cce105:"1508010000000000000000",be60037e90714a4b917e61f193d834906703b13a:"1700000000000000000000","8ed4284c0f47449c15b8d9b3245de8beb6ce80bf":"800000000000000000000","333ad1596401e05aea2d36ca47318ef4cd2cb3df":"2910000000000000000000","22db559f2c3c1475a2e6ffe83a5979599196a7fa":"1000000000000000000000",fdf449f108c6fb4f5a2b081eed7e45e6919e4d25:"2000000000000000000000","0be1bcb90343fae5303173f461bd914a4839056c":"6000000000000000000000",b981ad5e6b7793a23fc6c1e8692eb2965d18d0da:"9999924000000000000000",c75d2259306aec7df022768c69899a652185dbc4:"4000000000000000000000","6c2e9be6d4ab450fd12531f33f028c614674f197":"3580000000000000000000","6dcc7e64fcafcbc2dc6c0e5e662cb347bffcd702":"20000000000000000000000",aabdb35c1514984a039213793f3345a168e81ff1:"309760000000000000000",d315deea1d8c1271f9d1311263ab47c007afb6f5:"69760000000000000000","4faf90b76ecfb9631bf9022176032d8b2c207009":"1000032000000000000000","3e7a966b5dc357ffb07e9fe067c45791fd8e3049":"59100000000000000000","2e64a8d71111a22f4c5de1e039b336f68d398a7c":"2000000000000000000000","181fbba852a7f50178b1c7f03ed9e58d54162929":"666000000000000000000","4f7330096f79ed264ee0127f5d30d2f73c52b3d8":"499970000000000000000",a8a8dbdd1a85d1beee2569e91ccc4d09ae7f6ea1:"5800000000000000000000","1f9c3268458da301a2be5ab08257f77bb5a98aa4":"200000000000000000000",fc372ff6927cb396d9cf29803500110da632bc52:"2000000000000000000000","4fa554ab955c249217386a4d3263bbf72895434e":"19982000000000000000","2a59e47ea5d8f0e7c028a3e8e093a49c1b50b9a3":"2000000000000000000000","5e32c72191b8392c55f510d8e3326e3a60501d62":"44000000000000000000000","1dfaee077212f1beaf0e6f2f1840537ae154ad86":"1000000000000000000000","7eaba035e2af3793fd74674b102540cf190addb9":"1273000000000000000000",d62edb96fce2969aaf6c545e967cf1c0bc805205:"85705000000000000000","220dc68df019b6b0ccbffb784b5a5ab4b15d4060":"3940000000000000000000","45bb829652d8bfb58b8527f0ecb621c29e212ec3":"2000000000000000000000","79b120eb8806732321288f675a27a9225f1cd2eb":"2465000000000000000000","740af1eefd3365d78ba7b12cb1a673e06a077246":"19700000000000000000000","0f042c9c2fb18766f836bb59f735f27dc329fe3c":"10000000000000000000000","6dda5f788a6c688ddf921fa3852eb6d6c6c62966":"40000000000000000000","96ad579bbfa8db8ebec9d286a72e4661eed8e356":"1070750000000000000000","0c2073ba44d3ddbdb639c04e191039a71716237f":"1430000000000000000000","1a3520453582c718a21c42375bc50773255253e1":"790000000000000000000",efcaae9ff64d2cd95b5249dcffe7faa0a0c0e44d:"401100000000000000000","0a3de155d5ecd8e81c1ff9bbf0378301f8d4c623":"4000000000000000000000","80f07ac09e7b2c3c0a3d1e9413a544c73a41becb":"20000000000000000000",c3631c7698b6c5111989bf452727b3f9395a6dea:"10683500000000000000000","4cc22c9bc9ad05d875a397dbe847ed221c920c67":"2000000000000000000000","1a987e3f83de75a42f1bde7c997c19217b4a5f24":"2000000000000000000000","5b2b64e9c058e382a8b299224eecaa16e09c8d92":"161000000000000000000","86caafacf32aa0317c032ac36babed974791dc03":"40000000000000000000000","1cd1f0a314cbb200de0a0cb1ef97e920709d97c2":"2000000000000000000000","7d980f4b566bb045517e4c14c87750de9346744b":"1337000000000000000000","8b5f29cc2faa262cdef30ef554f50eb488146eac":"5818250000000000000000","5153a0c3c8912881bf1c3501bf64b45649e48222":"4000000000000000000000",d21a7341eb84fd151054e5e387bb25d36e499c09:"14000000000000000000000","9560e8ac6718a6a1cdcff189d603c9063e413da6":"4000000000000000000000",e49ba0cd96816c4607773cf8a5970bb5bc16a1e6:"1670000000000000000000",b8ac117d9f0dba80901445823c4c9d4fa3fedc6e:"15759015000000000000000",af67fd3e127fd9dc36eb3fcd6a80c7be4f7532b2:"1670000000000000000000",b43c27f7a0a122084b98f483922541c8836cee2c:"715000000000000000000","4d9279962029a8bd45639737e98b511eff074c21":"1337000000000000000000",c667441e7f29799aba616451d53b3f489f9e0f48:"13920000000000000000000","275875ff4fbb0cf3a430213127487f7608d04cba":"500080000000000000000","9a953b5bcc709379fcb559d7b916afdaa50cadcc":"100000000000000000000","7ea791ebab0445a00efdfc4e4a8e9a7e7565136d":"18200000000000000000","6ffe5cf82cc9ea5e36cad7c2974ce7249f3749e6":"1940000000000000000000",f1b4ecc63525f7432c3d834ffe2b970fbeb87212:"3000064000000000000000","6b72a8f061cfe6996ad447d3c72c28c0c08ab3a7":"4271316000000000000000",bba3c68004248e489573abb2743677066b24c8a7:"2000000000000000000000",b7c0d0cc0b4d342d4062bac624ccc3c70cc6da3f:"4000000000000000000000",fe98c664c3e447a95e69bd582171b7176ea2a685:"4000000000000000000000",ce71086d4c602554b82dcbfce88d20634d53cc4d:"43250000000000000000000","1c601993789207f965bb865cbb4cd657cce76fc0":"98294000000000000000","476b5599089a3fb6f29c6c72e49b2e4740ea808d":"2800000000000000000000","3439998b247cb4bf8bc80a6d2b3527f1dfe9a6d2":"140000000000000000000",c4f7d2e2e22084c44f70feaab6c32105f3da376f:"1970000000000000000000",c1eba5684aa1b24cba63150263b7a9131aeec28d:"20000000000000000000","94ad4bad824bd0eb9ea49c58cebcc0ff5e08346b":"1940000000000000000000",ded877378407b94e781c4ef4af7cfc5bc220b516:"372500000000000000000","699c9ee47195511f35f862ca4c22fd35ae8ffbf4":"80000000000000000000",e3a89a1927cc4e2d43fbcda1e414d324a7d9e057:"205500000000000000000","4d93696fa24859f5d2939aebfa54b4b51ae1dccc":"19100000000000000000","0af65f14784e55a6f95667fd73252a1c94072d2a":"192987000000000000000","5b70c49cc98b3df3fbe2b1597f5c1b6347a388b7":"970000000000000000000","426f78f70db259ac8534145b2934f4ef1098b5d8":"360000000000000000000","58b8ae8f63ef35ed0762f0b6233d4ac14e64b64d":"2000000000000000000000","8eae29435598ba8f1c93428cdb3e2b4d31078e00":"2000000000000000000000","17fd9b551a98cb61c2e07fbf41d3e8c9a530cba5":"26989000000000000000",ab3e78294ba886a0cfd5d3487fb3a3078d338d6e:"1970000000000000000000",bdf6e68c0cd7584080e847d72cbb23aad46aeb1d:"1970000000000000000000",f989346772995ec1906faffeba2a7fe7de9c6bab:"6685000000000000000000",dc5f5ad663a6f263327d64cac9cb133d2c960597:"2000000000000000000000","68fe1357218d095849cd579842c4aa02ff888d93":"2000000000000000000000",e09c68e61998d9c81b14e4ee802ba7adf6d74cdb:"4000000000000000000000","890fe11f3c24db8732d6c2e772e2297c7e65f139":"62980000000000000000000",a76929890a7b47fb859196016c6fdd8289ceb755:"5000000000000000000000","2dc79d6e7f55bce2e2d0c02ad07ceca8bb529354":"1580000000000000000000","19687daa39c368139b6e7be60dc1753a9f0cbea3":"8000000000000000000000",c69be440134d6280980144a9f64d84748a37f349:"715000000000000000000","3d8d0723721e73a6c0d860aa0557abd14c1ee362":"5000000000000000000000","2b241f037337eb4acc61849bd272ac133f7cdf4b":"378000000000000000000000","24b95ebef79500baa0eda72e77f877415df75c33":"910000000000000000000","106ed5c719b5261477890425ae7551dc59bd255c":"11979600000000000000000","5b2e2f1618552eab0db98add55637c2951f1fb19":"12000000000000000000000","403145cb4ae7489fcc90cd985c6dc782b3cc4e44":"5999800000000000000000",e8be24f289443ee473bc76822f55098d89b91cc5:"2000000000000000000000",f6bc37b1d2a3788d589b6de212dc1713b2f6e78e:"5000000000000000000000","67fc527dce1785f0fb8bc7e518b1c669f7ecdfb5":"240000000000000000000","6580b1bc94390f04b397bd73e95d96ef11eaf3a8":"20000000000000000000","98bf4af3810b842387db70c14d46099626003d10":"4000000000000000000000","17993d312aa1106957868f6a55a5e8f12f77c843":"450065000000000000000","0729b4b47c09eb16158464c8aa7fd9690b438839":"1999800000000000000000",ae70e69d2c4a0af818807b1a2705f79fd0b5dbc4:"985000000000000000000","38b50146e71916a5448de12a4d742135dcf39833":"32200000000000000000000","38439aaa24e3636f3a18e020ea1da7e145160d86":"2600000000000000000000","54b4429b182f0377be7e626939c5db6440f75d7a":"1970000000000000000000","7179726f5c71ae1b6d16a68428174e6b34b23646":"7353500000000000000000",c2ee91d3ef58c9d1a589844ea1ae3125d6c5ba69:"970000000000000000000","912304118b80473d9e9fe3ee458fbe610ffda2bb":"200000000000000000000","3308b03466c27a17dfe1aafceb81e16d2934566f":"17000000000000000000000","10346414bec6d3dcc44e50e54d54c2b8c3734e3e":"4000000000000000000000","4fee50c5f988206b09a573469fb1d0b42ebb6dce":"2009400000000000000000","9ece1400800936c7c6485fcdd3626017d09afbf6":"310000000000000000000",ddf3ad76353810be6a89d731b787f6f17188612b:"20000000000000000000000","72402300e81d146c2e644e2bbda1da163ca3fb56":"7000000000000000000000",bb4b4a4b548070ff41432c9e08a0ca6fa7bc9f76:"850000000000000000000",c3dd58903886303b928625257ae1a013d71ae216:"2000000000000000000000",ca6c818befd251361e02744068be99d8aa60b84a:"6000000000000000000000",b8d2ddc66f308c0158ae3ccb7b869f7d199d7b32:"844800000000000000000","8e486a0442d171c8605be348fee57eb5085eff0d":"4000000000000000000000",a807104f2703d679f8deafc442befe849e42950b:"2000000000000000000000",bb61a04bffd57c10470d45c39103f64650347616:"1000000000000000000000",d1c45954a62b911ad701ff2e90131e8ceb89c95c:"1394000000000000000000","5e65458be964ae449f71773704979766f8898761":"528600000000000000000",f9b37825f03073d31e249378c30c795c33f83af2:"200152000000000000000",e309974ce39d60aadf2e69673251bf0e04760a10:"254030000000000000000",d541ac187ad7e090522de6da3213e9a7f4439673:"2000000000000000000000",f33efc6397aa65fb53a8f07a0f893aae30e8bcee:"2304850000000000000000",d2f1998e1cb1580cec4f6c047dcd3dcec54cf73c:"200000000000000000000","0ed76c2c3b5d50ff8fb50b3eeacd681590be1c2d":"100000000000000000000","637d67d87f586f0a5a479e20ee13ea310a10b647":"48300000000000000000000","1a5ee533acbfb3a2d76d5b685277b796c56a052b":"2000000000000000000000","323fca5ed77f699f9d9930f5ceeff8e56f59f03c":"1337000000000000000000",a5fe2ce97f0e8c3856be0de5f4dcb2ce5d389a16:"22892000000000000000","93258255b37c7f58f4b10673a932dd3afd90f4f2":"1000000000000000000000","950fe9c6cad50c18f11a9ed9c45740a6180612d0":"8000000000000000000000",ee31167f9cc93b3c6465609d79db0cde90e8484c:"2000000000000000000000","6ebb5e6957aa821ef659b6018a393a504cae4450":"2000000000000000000000",be305a796e33bbf7f9aeae6512959066efda1010:"10880000000000000000000","537f9d4d31ef70839d84b0d9cdb72b9afedbdf35":"70000000000000000000000",fe9e1197d7974a7648dcc7a03112a88edbc9045d:"4925000000000000000000","99f77f998b20e0bcdcd9fc838641526cf25918ef":"1790000000000000000000","76ffc157ad6bf8d56d9a1a7fddbc0fea010aabf4":"1000000000000000000000",defe9141f4704599159d7b223de42bffd80496b3:"100000000000000000000","7b1bf53a9cbe83a7dea434579fe72aac8d2a0cd0":"199800000000000000000","23ccc3c6acd85c2e460c4ffdd82bc75dc849ea14":"4000000000000000000000","9f86a066edb61fcb5856de93b75c8c791864b97b":"2000000000000000000000","871b8a8b51dea1989a5921f13ec1a955a515ad47":"8000000000000000000000","4efcd9c79fb4334ca6247b0a33bd9cc33208e272":"1337000000000000000000","35ac1d3ed7464fa3db14e7729213ceaa378c095e":"1520000000000000000000",c69d663c8d60908391c8d236191533fdf7775613:"485000000000000000000",c2ed5ffdd1add855a2692fe062b5d618742360d4:"1200000000000000000000","454f0141d721d33cbdc41018bd01119aa4784818":"6000000000000000000000","6c8687e3417710bb8a93559021a1469e6a86bc77":"11126675000000000000000",ec5b198a00cfb55a97b5d53644cffa8a04d2ab45:"2000000000000000000000",cd59f3dde77e09940befb6ee58031965cae7a336:"10000000000000000000000","8eebec1a62c08b05a7d1d59180af9ff0d18e3f36":"500000000000000000000","92a971a739799f8cb48ea8475d72b2d2474172e6":"3940000000000000000000",bed4649df646e2819229032d8868556fe1e053d3:"18200000000000000000",c50fe415a641b0856c4e75bf960515441afa358d:"2000000000000000000000","91f516146cda20281719978060c6be4149067c88":"2000000000000000000000","54a1370116fe22099e015d07cd2669dd291cc9d1":"20000000000000000000","80c04efd310f440483c73f744b5b9e64599ce3ec":"1200000000000000000000",a8914c95b560ec13f140577338c32bcbb77d3a7a:"180000000000000000000",e3c812737ac606baf7522ad817428a36050e7a34:"1940000000000000000000","6d1456fff0104ee844a3314737843338d24cd66c":"141840000000000000000","0e6ece99111cad1961c748ed3df51edd69d2a3b1":"100000000000000000000000","019d709579ff4bc09fdcdde431dc1447d2c260bc":"20000000000000000000",ebff84bbef423071e604c361bba677f5593def4e:"10000000000000000000000",e10c540088113fa6ec00b4b2c8824f8796e96ec4:"236400000000000000000000",e03220c697bcd28f26ef0b74404a8beb06b2ba7b:"8000000000000000000000",e69a6cdb3a8a7db8e1f30c8b84cd73bae02bc0f8:"16915503000000000000000",e5fb31a5caee6a96de393bdbf89fbe65fe125bb3:"1000000000000000000000","030fb3401f72bd3418b7d1da75bf8c519dd707dc":"3000000000000000000000","1c751e7f24df9d94a637a5dedeffc58277b5db19":"3220000000000000000000",bded7e07d0711e684de65ac8b2ab57c55c1a8645:"591000000000000000000",dd7ff441ba6ffe3671f3c0dabbff1823a5043370:"2000000000000000000000",b55474ba58f0f2f40e6cbabed4ea176e011fcad6:"1970000000000000000000",b92427ad7578b4bfe20a9f63a7c5506d5ca12dc8:"2000000000000000000000","91a8baaed012ea2e63803b593d0d0c2aab4c5b0a":"1500000000000000000000",a97e072144499fe5ebbd354acc7e7efb58985d08:"2674000000000000000000","75c2ffa1bef54919d2097f7a142d2e14f9b04a58":"2673866000000000000000","53faf165be031ec18330d9fce5bd1281a1af08db":"140000000000000000000","055ab658c6f0ed4f875ed6742e4bc7292d1abbf0":"83500000000000000000","6f18ec767e320508195f1374500e3f2e125689ff":"1000000000000000000000","90fc537b210658660a83baa9ac4a8402f65746a8":"1880000000000000000000","34664d220fa7f37958024a3332d684bcc6d4c8bd":"10000000000000000000000","15acb61568ec4af7ea2819386181b116a6c5ee70":"31000000000000000000000","69d98f38a3ba3dbc01fa5c2c1427d862832f2f70":"100000000000000000000000",ece1152682b7598fe2d1e21ec15533885435ac85:"4000000000000000000000",f618d9b104411480a863e623fc55232d1a4f48aa:"265793000000000000000",f9debaecb5f339beea4894e5204bfa340d067f25:"1665000000000000000000","5e731b55ced452bb3f3fe871ddc3ed7ee6510a8f":"3000000000000000000000","67df242d240dd4b8071d72f8fcf35bb3809d71e8":"4000000000000000000000",c4cf930e5d116ab8d13b9f9a7ec4ab5003a6abde:"320000000000000000000","01a25a5f5af0169b30864c3be4d7563ccd44f09e":"1430000000000000000000","7f6efb6f4318876d2ee624e27595f44446f68e93":"1550000000000000000000","82249fe70f61c6b16f19a324840fdc020231bb02":"9504014000000000000000","205237c4be146fba99478f3a7dad17b09138da95":"2000000000000000000000",fd1fb5a89a89a721b8797068fbc47f3e9d52e149:"236400000000000000000",e47fbaed99fc209962604ebd20e240f74f4591f1:"2000000000000000000000",a24c3ab62181e9a15b78c4621e4c7c588127be26:"162410000000000000000",b6cd7432d5161be79768ad45de3e447a07982063:"4000000000000000000000","32a70691255c9fc9791a4f75c8b81f388e0a2503":"985000000000000000000","562f16d79abfcec3943e34b20f05f97bdfcda605":"4000000000000000000000",dbc66965e426ff1ac87ad6eb78c1d95271158f9f:"18200000000000000000","7e87863ec43a481df04d017762edcb5caa629b5a":"39400000000000000000","587d6849b168f6c3332b7abae7eb6c42c37f48bf":"880000000000000000000","721158be5762b119cc9b2035e88ee4ee78f29b82":"10000000000000000000000","84b91e2e2902d05e2b591b41083bd7beb2d52c74":"9848621000000000000000","632cecb10cfcf38ec986b43b8770adece9200221":"20000000000000000000",c34e3ba1322ed0571183a24f94204ee49c186641:"58200000000000000000",ae78bb849139a6ba38ae92a09a69601cc4cb62d1:"500000000000000000000","5ce0b6862cce9162e87e0849e387cb5df4f9118c":"1670000000000000000000",f52c0a7877345fe0c233bb0f04fd6ab18b6f14ba:"400440000000000000000000",e016dc138e25815b90be3fe9eee8ffb2e105624f:"500000000000000000000","5789d01db12c816ac268e9af19dc0dd6d99f15df":"200000000000000000000",d8b77db9b81bbe90427b62f702b201ffc29ff618:"930200000000000000000","5dff811dad819ece3ba602c383fb5dc64c0a3a48":"186000000000000000000",af3087e62e04bf900d5a54dc3e946274da92423b:"20000000000000000000","8c1023fde1574db8bb54f1739670157ca47da652":"6969382000000000000000",bb3b010b18e6e2be1135871026b7ba15ea0fde24:"10044000000000000000000",cabdaf354f4720a466a764a528d60e3a482a393c:"1000000000000000000000","94bbc67d13f89ebca594be94bc5170920c30d9f3":"80200000000000000000","3275496fd4dd8931fd69fb0a0b04c4d1ff879ef5":"446000000000000000000","281250a29121270a4ee5d78d24feafe82c70ba3a":"1000000000000000000000","590ccb5911cf78f6f622f535c474375f4a12cfcf":"20000000000000000000000","542e8096bafb88162606002e8c8a3ed19814aeac":"2000000000000000000000",a65426cff378ed23253513b19f496de45fa7e18f:"7200000000000000000000","4aa693b122f314482a47b11cc77c68a497876162":"1970000000000000000000",d9b783d31d32adc50fa3eacaa15d92b568eaeb47:"34010000000000000000000","068e655766b944fb263619658740b850c94afa31":"35200000000000000000","9e23c5e4b782b00a5fadf1aead87dacf5b0367a1":"20000000000000000000",bf17f397f8f46f1bae45d187148c06eeb959fa4d:"1001440000000000000000","8578e10212ca14ff0732a8241e37467db85632a9":"6000000000000000000000","2cb5495a505336c2465410d1cae095b8e1ba5cdd":"20000000000000000000000","695b0f5242753701b264a67071a2dc880836b8db":"16400000000000000000",f2edde37f9a8c39ddea24d79f4015757d06bf786:"100000000000000000000000","480f31b989311e4124c6a7465f5a44094d36f9d0":"1025000000000000000000",cf157612764e0fd696c8cb5fba85df4c0ddc3cb0:"30000000000000000000000","27521deb3b6ef1416ea4c781a2e5d7b36ee81c61":"2000000000000000000000","6efd90b535e00bbd889fda7e9c3184f879a151db":"10100000000000000000000",b635a4bc71fb28fdd5d2c322983a56c284426e69:"170000000000000000000",a17c9e4323069518189d5207a0728dcb92306a3f:"1000000000000000000000","6af940f63ec9b8d876272aca96fef65cdacecdea":"3000000000000000000000","469358709332c82b887e20bcddd0220f8edba7d0":"17300000000000000000000",a257ad594bd88328a7d90fc0a907df95eecae316:"520510000000000000000","6f051666cb4f7bd2b1907221b829b555d7a3db74":"1760000000000000000000","46bfc5b207eb2013e2e60f775fecd71810c5990c":"1550000000000000000000","62b9081e7710345e38e02e16449ace1b85bcfc4e":"910000000000000000000",bc73f7b1ca3b773b34249ada2e2c8a9274cc17c2:"2000000000000000000000","1adaf4abfa867db17f99af6abebf707a3cf55df6":"6000000000000000000000","8d629c20608135491b5013f1002586a0383130e5":"1370000000000000000000","38e46de4453c38e941e7930f43304f94bb7b2be8":"2005500000000000000000","3485f621256433b98a4200dad857efe55937ec98":"2000000000000000000000","775c10c93e0db7205b2643458233c64fc33fd75b":"2000000000000000000000","7c4401ae98f12ef6de39ae24cf9fc51f80eba16b":"200000000000000000000","17b807afa3ddd647e723542e7b52fee39527f306":"400010000000000000000","0ab366e6e7d5abbce6b44a438d69a1cabb90d133":"320000000000000000000","194ffe78bbf5d20dd18a1f01da552e00b7b11db1":"7000000000000000000000",c45d47ab0c9aa98a5bd62d16223ea2471b121ca4:"593640000000000000000","2487c3c4be86a2723d917c06b458550170c3edba":"1000000000000000000000",ec4d08aa2e47496dca87225de33f2b40a8a5b36f:"158000000000000000000",aaa8defe11e3613f11067fb983625a08995a8dfc:"200000000000000000000","50bb67c8b8d8bd0f63c4760904f2d333f400aace":"2000000000000000000000","1227e10a4dbf9caca31b1780239f557615fc35c1":"200000000000000000000","44a8989e32308121f72466978db395d1f76c3a4b":"7236900000000000000000","59569a21d28fba4bda37753405a081f2063da150":"4000000000000000000000",c3756bcdcc7eec74ed896adfc335275930266e08:"6000000000000000000000",ce3a61f0461b00935e85fa1ead82c45e5a64d488:"500000000000000000000","012f396a2b5eb83559bac515e5210df2c8c362ba":"200000000000000000000","93bc7d9a4abd44c8bbb8fe8ba804c61ad8d6576c":"3999922000000000000000",e20bb9f3966419e14bbbaaaa6789e92496cfa479:"3465116000000000000000","9eef442d291a447d74c5d253c49ef324eac1d8f0":"3420000000000000000000",db6c2a73dac7424ab0d031b66761122566c01043:"3000000000000000000000","704d243c2978e46c2c86adbecd246e3b295ff633":"2012000000000000000000",d2ff672016f63b2f85398f4a6fedbb60a50d3cce:"342500000000000000000",d2051cb3cb6704f0548cc890ab0a19db3415b42a:"334000000000000000000","1111e5dbf45e6f906d62866f1708101788ddd571":"1300200000000000000000","6a686bf220b593deb9b7324615fb9144ded3f39d":"1460000000000000000000","911feea61fe0ed50c5b9e5a0d66071399d28bdc6":"60000000000000000000","3881defae1c07b3ce04c78abe26b0cdc8d73f010":"200000000000000000000",ea94f32808a2ef8a9bf0861d1d2404f7b7be258a:"20000000000000000000","2eef6b1417d7b10ecfc19b123a8a89e73e526c58":"600000000000000000000",dd8af9e7765223f4446f44d3d509819a3d3db411:"10000000000000000000000","2efc4c647dac6acac35577ad221758fef6616faa":"8000000000000000000000","1547b9bf7ad66274f3413827231ba405ee8c88c1":"17300000000000000000000","250a40cef3202397f240469548beb5626af4f23c":"92500000000000000000",c175be3194e669422d15fee81eb9f2c56c67d9c9:"200000000000000000000",c9e02608066828848aeb28c73672a12925181f4d:"500038000000000000000","8229ceb9f0d70839498d44e6abed93c5ca059f5d":"123300000000000000000000","39f198331e4b21c1b760a3155f4ab2fe00a74619":"2000000000000000000000","3ffcb870d4023d255d5167d8a507cefc366b68ba":"649400000000000000000","00dae27b350bae20c5652124af5d8b5cba001ec1":"40000000000000000000",fc5500825105cf712a318a5e9c3bfc69c89d0c12:"4000000000000000000000","1ed8bb3f06778b039e9961d81cb71a73e6787c8e":"2000000000000000000000","530ffac3bc3412e2ec0ea47b7981c770f5bb2f35":"133700000000000000000","5f344b01c7191a32d0762ac188f0ec2dd460911d":"1000000000000000000000","5cfa9877f719c79d9e494a08d1e41cf103fc87c9":"200000000000000000000",f6eaac7032d492ef17fd6095afc11d634f56b382:"500038000000000000000","962c0dec8a3d464bf39b1215eafd26480ae490cd":"2001680000000000000000","262a8bfd7d9dc5dd3ad78161b6bb560824373655":"1169820000000000000000","9b4824ff9fb2abda554dee4fb8cf549165570631":"20000000000000000000",bb3b9005f46fd2ca3b30162599928c77d9f6b601:"8000014000000000000000",f7dc251196fbcbb77c947d7c1946b0ff65021cea:"1000000000000000000000",af1148ef6c8e103d7530efc91679c9ac27000993:"200000000000000000000","0bb2650ea01aca755bc0c017b64b1ab5a66d82e3":"1337000000000000000000","0cda12bf72d461bbc479eb92e6491d057e6b5ad1":"10000000000000000000000","4e5b77f9066159e615933f2dda7477fa4e47d648":"200000000000000000000","391161b0e43c302066e8a68d2ce7e199ecdb1d57":"4000000000000000000000",c7e330cd0c890ac99fe771fcc7e7b009b7413d8a:"4000000000000000000000",d4b38a5fdb63e01714e9801db47bc990bd509183:"5999000000000000000000",bc0f98598f88056a26339620923b8f1eb074a9fd:"200000000000000000000",dbc59ed88973dead310884223af49763c05030f1:"20000000000000000000","0f85e42b1df321a4b3e835b50c00b06173968436":"985000000000000000000",d7788ef28658aa06cc53e1f3f0de58e5c371be78:"6685000000000000000000",ecd276af64c79d1bd9a92b86b5e88d9a95eb88f8:"20000000000000000000","81c9e1aee2d3365d53bcfdcd96c7c538b0fd7eec":"1820000000000000000000","5d39ef9ea6bdfff15d11fe91f561a6f9e31f5da5":"2000000000000000000000","99878f9d6e0a7ed9aec78297b73879a80195afe0":"3980000000000000000000","7294c918b1aefb4d25927ef9d799e71f93a28e85":"197000000000000000000",a33f70da7275ef057104dfa7db64f472e9f5d553:"80220000000000000000","255bdd6474cc8262f26a22c38f45940e1ceea69b":"4000000000000000000000","52f8b509fee1a874ab6f9d87367fbeaf15ac137f":"1000000000000000000000",e2728a3e8c2aaac983d05dc6877374a8f446eee9:"197600000000000000000",ed0206cb23315128f8caff26f6a30b985467d022:"40000000000000000000000","87cf36ad03c9eae9053abb5242de9117bb0f2a0b":"500000000000000000000",a929c8bd71db0c308dac06080a1747f21b1465aa:"500000000000000000000","9da6e075989c7419094cc9f6d2e49393bb199688":"11100000000000000000000","763eece0b08ac89e32bfa4bece769514d8cb5b85":"4000000000000000000000","5df3277ca85936c7a0d2c0795605ad25095e7159":"2000000000000000000000","7163758cbb6c4c525e0414a40a049dcccce919bb":"200000000000000000000","14cdddbc8b09e6675a9e9e05091cb92238c39e1e":"5100000000000000000000",b3b7f493b44a2c8d80ec78b1cdc75a652b73b06c:"2000000000000000000000",c69b855539ce1b04714728eec25a37f367951de7:"2000000000000000000000","052eab1f61b6d45517283f41d1441824878749d0":"4000000000000000000000","515651d6db4faf9ecd103a921bbbbe6ae970fdd4":"20000000000000000000000",c7aff91929797489555a2ff1d14d5c695a108355:"1000000000000000000000",d7ca7fdcfebe4588eff5421d1522b61328df7bf3:"4001070000000000000000",eefba12dfc996742db790464ca7d273be6e81b3e:"1000000000000000000000",ebaa216de9cc5a43031707d36fe6d5bedc05bdf0:"1969606000000000000000","559194304f14b1b93afe444f0624e053c23a0009":"400000000000000000000","4ecc19948dd9cd87b4c7201ab48e758f28e7cc76":"500200000000000000000",f224eb900b37b4490eee6a0b6420d85c947d8733:"970000000000000000000","97810bafc37e84306332aacb35e92ad911d23d24":"1000000000000000000000",bd67d2e2f82da8861341bc96a2c0791fddf39e40:"200014000000000000000","1b6495891240e64e594493c2662171db5e30ce13":"172400000000000000000","00bdd4013aa31c04616c2bc9785f2788f915679b":"13400000000000000000",c6ae287ddbe1149ba16ddcca4fe06aa2eaa988a9:"400000000000000000000",b7c9f12b038e73436d17e1c12ffe1aeccdb3f58c:"540000000000000000000",c1b500011cfba95d7cd636e95e6cbf6167464b25:"200000000000000000000","39e0db4d60568c800b8c5500026c2594f5768960":"1000000000000000000000","40e3c283f7e24de0410c121bee60a5607f3e29a6":"1000000000000000000000","2f7d3290851be5c6b4b43f7d4574329f61a792c3":"100000000000000000000",c33ece935a8f4ef938ea7e1bac87cb925d8490ca:"33122000000000000000000","57bddf078834009c89d88e6282759dc45335b470":"2148000000000000000000","50ad187ab21167c2b6e78be0153f44504a07945e":"100076000000000000000","5bd24aac3612b20c609eb46779bf95698407c57c":"1970000000000000000000","16526c9edf943efa4f6d0f0bae81e18b31c54079":"985000000000000000000","4c6a9dc2cab10abb2e7c137006f08fecb5b779e1":"499000000000000000000","02c9f7940a7b8b7a410bf83dc9c22333d4275dd3":"5000000000000000000000",b9fd3833e88e7cf1fa9879bdf55af4b99cd5ce3f:"1000000000000000000000","7e268f131ddf687cc325c412f78ba961205e9112":"16000600000000000000000","180478a655d78d0f3b0c4f202b61485bc4002fd5":"2000000000000000000000",ed4014538cee664a2fbcb6dc669f7ab16d0ba57c:"200000000000000000000",f63a579bc3eac2a9490410128dbcebe6d9de8243:"1490000000000000000000","5d822d9b3ef4b502627407da272f67814a6becd4":"20000000000000000000",eb52ab10553492329c1c54833ae610f398a65b9d:"152000000000000000000","63340a57716bfa63eb6cd133721202575bf796f0":"209967000000000000000","933bf33f8299702b3a902642c33e0bfaea5c1ca3":"15200000000000000000","25bc49ef288cd165e525c661a812cf84fbec8f33":"338464000000000000000",c8231ba5a411a13e222b29bfc1083f763158f226:"1000090000000000000000","6c15ec3520bf8ebbc820bd0ff19778375494cf9d":"2005500000000000000000",aaced8a9563b1bc311dbdffc1ae7f57519c4440c:"2000000000000000000000",d90f3009db437e4e11c780bec8896f738d65ef0d:"4000000000000000000000","5603241eb8f08f721e348c9d9ad92f48e390aa24":"200000000000000000000","53cec6c88092f756efe56f7db11228a2db45b122":"4000000000000000000000","194cebb4929882bf3b4bf9864c2b1b0f62c283f9":"571300000000000000000","4be8628a8154874e048d80c142181022b180bcc1":"60000000000000000000","5fd973af366aa5157c54659bcfb27cbfa5ac15d6":"4000000000000000000000","303139bc596403d5d3931f774c66c4ba467454db":"1699830000000000000000","87584a3f613bd4fac74c1e780b86d6caeb890cb2":"1700000000000000000000","77f4e3bdf056883cc87280dbe640a18a0d02a207":"193806000000000000000","4de3fe34a6fbf634c051997f47cc7f48791f5824":"1999000000000000000000",c45a1ca1036b95004187cdac44a36e33a94ab5c3:"254800000000000000000","65d33eb39cda6453b19e61c1fe4db93170ef9d34":"13370000000000000000",f65616be9c8b797e7415227c9138faa0891742d7:"790000000000000000000",e17812f66c5e65941e186c46922b6e7b2f0eeb46:"1820000000000000000000",d47f50df89a1cff96513bef1b2ae3a2971accf2c:"840000000000000000000","8ed1528b447ed4297902f639c514d0944a88f8c8":"198800000000000000000",a4fb14409a67b45688a8593e5cc2cf596ced6f11:"1790000000000000000000","855d9aef2c39c6230d09c99ef6494989abe68785":"161000000000000000000","778c43d11afe3b586ff374192d96a7f23d2b9b7f":"2577139000000000000000",e3ece1f632711d13bfffa1f8f6840871ee58fb27:"4000000000000000000000",beb3358c50cf9f75ffc76d443c2c7f55075a0589:"2674000000000000000000",f156dc0b2a981e5b55d3f2f03b8134e331dbadb7:"100000000000000000000",eb9cc9fe0869d2dab52cc7aae8fd57adb35f9feb:"1966000000000000000000","2467c6a5c696ede9a1e542bf1ad06bcc4b06aca0":"18500000000000000000",ec75b4a47513120ba5f86039814f1998e3817ac3:"178756000000000000000","9c3d0692ceeef80aa4965ceed262ffc7f069f2dc":"200000000000000000000",e05029aceb0778675bef1741ab2cd2931ef7c84b:"5000057000000000000000","41d3b731a326e76858baa5f4bd89b57b36932343":"394000000000000000000",c346cb1fbce2ab285d8e5401f42dd7234d37e86d:"83500000000000000000","45f4fc60f08eaca10598f0336329801e3c92cb46":"200000000000000000000",f04a6a379708b9428d722aa2b06b77e88935cf89:"300000000000000000000","232832cd5977e00a4c30d0163f2e24f088a6cb09":"3000000000000000000000",d2ac0d3a58605e1d0f0eb3de25b2cad129ed6058:"4000000000000000000000",a356551bb77d4f45a6d7e09f0a089e79cca249cb:"340000000000000000000",b50c9f5789ae44e2dce017c714caf00c830084c2:"394000000000000000000","21fd6c5d97f9c600b76821ddd4e776350fce2be0":"1999946000000000000000",f0d5c31ccb6cbe30c7c9ea19f268d159851f8c9c:"16700000000000000000000",ab7091932e4bc39dbb552380ca934fd7166d1e6e:"3340000000000000000000",acd8dd91f714764c45677c63d852e56eb9eece2e:"2000000000000000000000","57d032a43d164e71aa2ef3ffd8491b0a4ef1ea5b":"2000000000000000000000","5af46a25ac09cb73616b53b14fb42ff0a51cddb2":"4000000000000000000000","1ea6bf2f15ae9c1dbc64daa7f8ea4d0d81aad3eb":"4200000000000000000000","03337012ae1d7ff3ee7f697c403e7780188bf0ef":"200000000000000000000","32eb64be1b5dede408c6bdefbe6e405c16b7ed02":"1970000000000000000000","22e2488e2da26a49ae84c01bd54b21f2947891c6":"1730000000000000000000",be98a77fd41097b34f59d7589baad021659ff712:"900000000000000000000",dda4ed2a58a8dd20a73275347b580d71b95bf99a:"399000000000000000000","671110d96aaff11523cc546bf9940eedffb2faf7":"4000000000000000000000","5d71799c8df3bccb7ee446df50b8312bc4eb71c5":"200000000000000000000",ae179a460db66326743d24e67523a57b246daf7f:"4722920000000000000000","198bfcf1b07ae308fa2c02069ac9dafe7135fb47":"20000000000000000000","4662a1765ee921842ddc88898d1dc8627597bd7e":"10000000000000000000000","783eec8aa5dac77b2e6623ed5198a431abbaee07":"440000000000000000000",ed6643c0e8884b2d3211853785a08bf8f33ed29f:"1337000000000000000000","5cc7d3066d45d27621f78bb4b339473e442a860f":"9999908000000000000000","94ef8be45077c7d4c5652740de946a62624f713f":"100085000000000000000","2f853817afd3b8f3b86e9f60ee77b5d97773c0e3":"1451450000000000000000","3e0b8ed86ed669e12723af7572fbacfe829b1e16":"1499800000000000000000",fa68e0cb3edf51f0a6f211c9b2cb5e073c9bffe6:"291200000000000000000","2c234f505ca8dcc77d9b7e01d257c318cc19396d":"100000000000000000000",f3f24fc29e20403fc0e8f5ebbb553426f78270a2:"100000000000000000000","91546b79ecf69f936b5a561508b0d7e50cc5992f":"267400000000000000000","435443b81dfdb9bd8c6787bc2518e2d47e57c15f":"5968500000000000000000","3a06e3bb1edcfd0c44c3074de0bb606b049894a2":"10000000000000000000000","3a3108c1e680a33b336c21131334409d97e5adec":"20000000000000000000","2caf6bf4ec7d5a19c5e0897a5eeb011dcece4210":"139740000000000000000",f44f8551ace933720712c5c491cdb6f2f951736c:"4000000000000000000000","5bc1f95507b1018642e45cd9c0e22733b9b1a326":"100000000000000000000","94ca56de777fd453177f5e0694c478e66aff8a84":"500000000000000000000",afdd1b786162b8317e20f0e979f4b2ce486d765d:"20000000000000000000","3a805fa0f7387f73055b7858ca8519edd93d634f":"1850000000000000000000","8b36224c7356e751f0c066c35e3b44860364bfc2":"998987000000000000000",cfecbea07c27002f65fe534bb8842d0925c78402:"4000000000000000000000","482982ac1f1c6d1721feecd9b9c96cd949805055":"10000000000000000000000",af880fc7567d5595cacce15c3fc14c8742c26c9e:"133700000000000000000",acc1c78786ab4d2b3b277135b5ba123e0400486b:"78800000000000000000","41f27e744bd29de2b0598f02a0bb9f98e681eaa4":"7760000000000000000000","09a025316f967fa8b9a1d60700063f5a68001caa":"38200000000000000000","391f20176d12360d724d51470a90703675594a4d":"1600000000000000000000",fe4d8403216fd571572bf1bdb01d00578978d688:"9850000000000000000000","900f0b8e35b668f81ef252b13855aa5007d012e7":"425000000000000000000",c35b95a2a3737cb8f0f596b34524872bd30da234:"7540000000000000000000","412a68f6c645559cc977fc4964047a201d1bb0e2":"50000000000000000000000",d3dad1b6d08d4581ccae65a8732db6ac69f0c69e:"6000000000000000000000","35855ec641ab9e081ed0c2a6dcd81354d0244a87":"1201897000000000000000","88015d7203c5e0224aeda286ed12f1a51b789333":"4999711000000000000000","251c12722c6879227992a304eb3576cd18434ea5":"2000000000000000000000","1f6f0030349752061c96072bc3d6eb3549208d6b":"23891000000000000000","86153063a1ae7f02f1a88136d4d69c7c5e3e4327":"1000000000000000000000","78355df0a230f83d032c703154414de3eedab557":"2000000000000000000000",c5b56cd234267c28e89c6f6b2266b086a12f970c:"4000000000000000000000","3e3cd3bec06591d6346f254b621eb41c89008d31":"993800000000000000000", -"378ea1dc8edc19bae82638029ea8752ce98bcfcd":"2000000000000000000000","67632046dcb25a54936928a96f423f3320cbed92":"2000000000000000000000",ddbee6f094eae63420b003fb4757142aea6cd0fd:"2000000000000000000000",b555d00f9190cc3677aef314acd73fdc39399259:"2000000000000000000000",e230fe1bff03186d0219f15d4c481b7d59be286a:"36710000000000000000","3e4e9265223c9738324cf20bd06006d0073edb8c":"133700000000000000000","7450ff7f99eaa9116275deac68e428df5bbcd8b9":"2000000000000000000000","021f69043de88c4917ca10f1842897eec0589c7c":"1978760000000000000000","351787843505f8e4eff46566cce6a59f4d1c5fe7":"9250000000000000000000",ebd37b256563e30c6f9289a8e2702f0852880833:"1999944000000000000000",ed41e1a28f5caa843880ef4e8b08bd6c33141edf:"790174000000000000000","8d238e036596987643d73173c37b0ad06055b96c":"2089724000000000000000","478e524ef2a381d70c82588a93ca7a5fa9d51cbf":"254908000000000000000000","4419ac618d5dea7cdc6077206fb07dbdd71c1702":"4000000000000000000000",ca25ff34934c1942e22a4e7bd56f14021a1af088:"197000000000000000000","5552f4b3ed3e1da79a2f78bb13e8ae5a68a9df3b":"1000000000000000000000","4354221e62dc09e6406436163a185ef06d114a81":"2000000000000000000000",ca0432cb157b5179f02ebba5c9d1b54fec4d88ca:"1000000000000000000000","8a780ab87a9145fe10ed60fa476a740af4cab1d2":"334000000000000000000","4ff676e27f681a982d8fd9d20e648b3dce05e945":"2800000000000000000000","6c63fc85029a2654d79b2bea4de349e4524577c5":"660000000000000000000","1ac089c3bc4d82f06a20051a9d732dc0e734cb61":"700300000000000000000","4bf4479799ef82eea20943374f56a1bf54001e5e":"3940000000000000000000","08411652c871713609af0062a8a1281bf1bbcfd9":"1400000000000000000000",e1bfaa5a45c504428923c4a61192a55b1400b45d:"2674000000000000000000","5e1fbd4e58e2312b3c78d7aaaafa10bf9c3189e3":"40000000000000000000000",bb27c6a7f91075475ab229619040f804c8ec7a6a:"10000000000000000000000","5d8d31faa864e22159cd6f5175ccecc53fa54d72":"26980000000000000000000","2dd8eeef87194abc2ce7585da1e35b7cea780cb7":"999999000000000000000","0e1801e70b6262861b1134ccbc391f568afc92f7":"4000000000000000000000","61042b80fd6095d1b87be2f00f109fabafd157a6":"100000000000000000000",fb5518714cefc36d04865de5915ef0ff47dfe743:"2000000000000000000000",b5add1e7809f7d03069bfe883b0a932210be8712:"1000000000000000000000",c2e2d498f70dcd0859e50b023a710a6d4b2133bd:"1037130000000000000000","4ad047fae67ef162fe68fedbc27d3b65caf10c36":"1970000000000000000000","69cb3e2153998d86e5ee20c1fcd1a6baeeb2863f":"4000000000000000000000","683633010a88686bea5a98ea53e87997cbf73e69":"99960000000000000000","6cb11ecb32d3ce829601310636f5a10cf7cf9b5f":"20068370000000000000000",a613456996408af1c2e93e177788ab55895e2b32:"6366000000000000000000","8308ed0af7f8a3c1751fafc877b5a42af7d35882":"1000000000000000000000",e5edf8123f2403ce1a0299becf7aac744d075f23:"200200000000000000000","05665155cc49cbf6aabdd5ae92cbfaad82b8c0c1":"400000000000000000000","00b277b099a8e866ca0ec65bcb87284fd142a582":"1970000000000000000000","4b9e068fc4680976e61504912985fd5ce94bab0d":"668500000000000000000","12134e7f6b017bf48e855a399ca58e2e892fa5c8":"1000000000000000000000",dffcea5421ec15900c6ecfc777184e140e209e24:"19980000000000000000","2132c0516a2e17174ac547c43b7b0020d1eb4c59":"985000000000000000000",d39a5da460392b940b3c69bc03757bf3f2e82489:"7019250000000000000000","66c8331efe7198e98b2d32b938688e3241d0e24f":"9620000000000000000000",bdca2a0ff34588af625fa8e28fc3015ab5a3aa00:"2339800000000000000000","7dfc342dffcf45dfee74f84c0995397bd1a63172":"250000000000000000000",a202547242806f6e70e74058d6e5292defc8c8d4:"2002000000000000000000","3bbc13d04accc0707aebdcaef087d0b87e0b5ee3":"3520000000000000000000",be5cba8d37427986e8ca2600e858bb03c359520f:"2955000000000000000000","4174fa1bc12a3b7183cbabb77a0b59557ba5f1db":"2000000000000000000000","9eb3a7cb5e6726427a3a361cfa8d6164dbd0ba16":"804000000000000000000","25e661c939863acc044e6f17b5698cce379ec3cc":"1370000000000000000000","24bd5904059091d2f9e12d6a26a010ca22ab14e8":"1880000000000000000000",c96626728aaa4c4fb3d31c26df3af310081710d1:"3340000000000000000000","0fb5d2c673bfb1ddca141b9894fd6d3f05da6720":"100000000000000000000","2de31afd189a13a76ff6fe73ead9f74bb5c4a629":"6000000000000000000000",bd09126c891c4a83068059fe0e15796c4661a9f4:"800000000000000000000","496f5843f6d24cd98d255e4c23d1e1f023227545":"1754143000000000000000","540cf23dd95c4d558a279d778d2b3735b3164191":"10000000000000000000000","9b5ec18e8313887df461d2902e81e67a8f113bb1":"100000000000000000000",b7a7f77c348f92a9f1100c6bd829a8ac6d7fcf91:"1820000000000000000000","2590126870e0bde8a663ab040a72a5573d8d41c2":"5000000000000000000000","090fa9367bda57d0d3253a0a8ff76ce0b8e19a73":"1000000000000000000000","2a5ba9e34cd58da54c9a2712663a3be274c8e47b":"197000000000000000000","3e8641d43c42003f0a33c929f711079deb2b9e46":"500000000000000000000",f4d97664cc4eec9edbe7fa09f4750a663b507d79:"4000000000000000000000",b1540e94cff3465cc3d187e7c8e3bdaf984659e2:"2989950000000000000000",f96883582459908c827627e86f28e646f9c7fc7a:"8350000000000000000000",d4feed99e8917c5c5458635f3603ecb7e817a7d0:"300031000000000000000","14b1603ec62b20022033eec4d6d6655ac24a015a":"50000000000000000000",af8e1dcb314c950d3687434d309858e1a8739cd4:"267400000000000000000","4b9206ba6b549a1a7f969e1d5dba867539d1fa67":"7880000000000000000000","471010da492f4018833b088d9872901e06129174":"500000000000000000000",d243184c801e5d79d2063f3578dbae81e7b3a9cb:"1989700000000000000000","3eada8c92f56067e1bb73ce378da56dc2cdfd365":"2210000000000000000000","33ea6b7855e05b07ab80dab1e14de9b649e99b6c":"532000000000000000000","700711e311bb947355f755b579250ca7fd765a3e":"1790000000000000000000","87fb26c31e48644d693134205cae43b21f18614b":"1370000000000000000000","001d14804b399c6ef80e64576f657660804fec0b":"4200000000000000000000",f9642086b1fbae61a6804dbe5fb15ec2d2b537f4:"2000000000000000000000","6919dd5e5dfb1afa404703b9faea8cee35d00d70":"5910000000000000000000","9ac4da51d27822d1e208c96ea64a1e5b55299723":"100040000000000000000","1bd8ebaa7674bb18e19198db244f570313075f43":"150000000000000000000",e64ef012658d54f8e8609c4e9023c09fe865c83b:"28000000000000000000","43b079baf0727999e66bf743d5bcbf776c3b0922":"2000000000000000000000","06ac26ad92cb859bd5905ddce4266aa0ec50a9c5":"775000000000000000000","99c1d9f40c6ab7f8a92fce2fdce47a54a586c53f":"985000000000000000000","4ae93082e45187c26160e66792f57fad3551c73a":"21658000000000000000000","7da7613445a21299aa74f0ad71431ec43fbb1be9":"68000000000000000000","4a9a26fd0a8ba10f977da4f77c31908dab4a8016":"1790000000000000000000","972c2f96aa00cf8a2f205abcf8937c0c75f5d8d9":"200000000000000000000",b5046cb3dc1dedbd364514a2848e44c1de4ed147:"16445100000000000000000","48c2ee91a50756d8ce9abeeb7589d22c6fee5dfb":"3220000000000000000000","46c1aa2244b9c8a957ca8fac431b0595a3b86824":"4000000000000000000000","21fd0bade5f4ef7474d058b7f3d854cb1300524e":"20000000000000000000","1864a3c7b48155448c54c88c708f166709736d31":"133700000000000000000","5dd53ae897526b167d39f1744ef7c3da5b37a293":"8000000000000000000000",ece111670b563ccdbebca52384290ecd68fe5c92:"20000000000000000000","74d671d99cbea1ab57906375b63ff42b50451d17":"1000000000000000000000","5717cc9301511d4a81b9f583148beed3d3cc8309":"2600000000000000000000","8f92844f282a92999ee5b4a8d773d06b694dbd9f":"1940000000000000000000",b5a606f4ddcbb9471ec67f658caf2b00ee73025e:"4325000000000000000000",bdb60b823a1173d45a0792245fb496f1fd3301cf:"2000000000000000000000","1d2615f8b6ca5012b663bdd094b0c5137c778ddf":"10000000000000000000000","82ff716fdf033ec7e942c909d9831867b8b6e2ef":"1790000000000000000000","44c14765127cde11fab46c5d2cf4d4b2890023fd":"2000000000000000000000",c72cb301258e91bc08998a805dd192f25c2f9a35:"591000000000000000000",ad732c976593eec4783b4e2ecd793979780bfedb:"2000000000000000000000",d8f62036f03b7635b858f1103f8a1d9019a892b6:"50000000000000000000","0a06fad7dcd7a492cbc053eeabde6934b39d8637":"20000000000000000000","67f2bb78b8d3e11f7c458a10b5c8e0a1d374467d":"1790000000000000000000","4b5cdb1e428c91dd7cb54a6aed4571da054bfe52":"88000000000000000000",b3557d39b5411b84445f5f54f38f62d2714d0087:"600000000000000000000","0b0e055b28cbd03dc5ff44aa64f3dce04f5e63fb":"2000000000000000000000","9b2be7f56754f505e3441a10f7f0e20fd3ddf849":"340000000000000000000","0b93fca4a4f09cac20db60e065edcccc11e0a5b6":"200000000000000000000","3bc85d6c735b9cda4bba5f48b24b13e70630307b":"1970000000000000000000","52102354a6aca95d8a2e86d5debda6de69346076":"2000000000000000000000",cda4530f4b9bc50905b79d17c28fc46f95349bdf:"942000000000000000000",ff545bbb66fbd00eb5e6373ff4e326f5feb5fe12:"20000000000000000000","4030a925706b2c101c8c5cb9bd05fbb4f6759b18":"4000000000000000000000",f11e01c7a9d12499005f4dae7716095a34176277:"400000000000000000000",a4826b6c3882fad0ed5c8fbb25cc40cc4f33759f:"2068000000000000000000","28510e6eff1fc829b6576f4328bc3938ec7a6580":"10000000000000000000000","9ce5363b13e8238aa4dd15acd0b2e8afe0873247":"200000000000000000000",d97bc84abd47c05bbf457b2ef659d61ca5e5e48f:"122000000000000000000","4a719061f5285495b37b9d7ef8a51b07d6e6acac":"199800000000000000000","8b714522fa2839620470edcf0c4401b713663df1":"200000000000000000000",b6decf82969819ba02de29b9b593f21b64eeda0f:"740000000000000000000",c87d3ae3d88704d9ab0009dcc1a0067131f8ba3c:"1969606000000000000000",dccb370ed68aa922283043ef7cad1b9d403fc34a:"4000000000000000000000","2d532df4c63911d1ce91f6d1fcbff7960f78a885":"1669833000000000000000","1fcfd1d57f872290560cb62d600e1defbefccc1c":"1490000000000000000000",d9e27eb07dfc71a706060c7f079238ca93e88539:"1000000000000000000000",da7732f02f2e272eaf28df972ecc0ddeed9cf498:"205274000000000000000",bf09d77048e270b662330e9486b38b43cd781495:"436000000000000000000000","619f171445d42b02e2e07004ad8afe694fa53d6a":"20000000000000000000","2bdd03bebbee273b6ca1059b34999a5bbd61bb79":"20000000000000000000","8da1d359ba6cb4bcc57d7a437720d55db2f01c72":"80000000000000000000",be935793f45b70d8045d2654d8dd3ad24b5b6137:"880000000000000000000",ee71793e3acf12a7274f563961f537529d89c7de:"2000000000000000000000","86f05d19063e9369c6004eb3f123943a7cff4eab":"1999944000000000000000","87b10f9c280098179a2b76e9ce90be61fc844d0d":"1337000000000000000000","243c84d12420570cc4ef3baba1c959c283249520":"2345000000000000000000","6bc85acd5928722ef5095331ee88f484b8cf8357":"180000000000000000000","2561a138dcf83bd813e0e7f108642be3de3d6f05":"999940000000000000000","7d0350e40b338dda736661872be33f1f9752d755":"49933000000000000000",e5dc9349cb52e161196122cf87a38936e2c57f34:"2000000000000000000000","543a8c0efb8bcd15c543e2a6a4f807597631adef":"5893800000000000000000","0413d0cf78c001898a378b918cd6e498ea773c4d":"280000000000000000000","3708e59de6b4055088782902e0579c7201a8bf50":"200000000000000000000000","699fc6d68a4775573c1dcdaec830fefd50397c4e":"60000000000000000000","379a7f755a81a17edb7daaa28afc665dfa6be63a":"25000000000000000000","260a230e4465077e0b14ee4442a482d5b0c914bf":"1677935000000000000000","3daa01ceb70eaf9591fa521ba4a27ea9fb8ede4a":"1667400000000000000000","7f3a1e45f67e92c880e573b43379d71ee089db54":"100000000000000000000000","38643babea6011316cc797d9b093c897a17bdae7":"334400000000000000000","84675e9177726d45eaa46b3992a340ba7f710c95":"1000000000000000000000","0f83461ba224bb1e8fdd9dae535172b735acb4e0":"200000000000000000000","31aa3b1ebe8c4dbcb6a708b1d74831e60e497660":"400000000000000000000",a32cf7dde20c3dd5679ff5e325845c70c5962662:"20000000000000000000",c007f0bdb6e7009202b7af3ea90902697c721413:"2999966000000000000000","05c64004a9a826e94e5e4ee267fa2a7632dd4e6f":"16191931000000000000000",f622e584a6623eaaf99f2be49e5380c5cbcf5cd8:"200000000000000000000","9dc10fa38f9fb06810e11f60173ec3d2fd6a751e":"1970000000000000000000","423c3107f4bace414e499c64390a51f74615ca5e":"2000000000000000000000","92438e5203b6346ff886d7c36288aacccc78ceca":"1000000000000000000000",bef07d97c3481f9d6aee1c98f9d91a180a32442b:"100000000000000000000000","55aa5d313ebb084da0e7801091e29e92c5dec3aa":"2000000000000000000000","89c433d601fad714da6369308fd26c1dc9942bbf":"2000000000000000000000","25106ab6755df86d6b63a187703b0cfea0e594a0":"27400000000000000000","494256e99b0f9cd6e5ebca3899863252900165c8":"14000000000000000000000","5f4ace4c1cc13391e01f00b198e1f20b5f91cbf5":"5000196000000000000000","135cecd955e5798370769230159303d9b1839f66":"5000000000000000000000",ced81ec3533ff1bfebf3e3843ee740ad11758d3e:"1970000000000000000000","688eb3853bbcc50ecfee0fa87f0ab693cabdef02":"31600000000000000000000","2159240813a73095a7ebf7c3b3743e8028ae5f09":"2000000000000000000000","99d1579cd42682b7644e1d4f7128441eeffe339d":"20000000000000000000000","8a243a0a9fea49b839547745ff2d11af3f4b0522":"985000000000000000000",c1a41a5a27199226e4c7eb198b031b59196f9842:"191000000000000000000","7514adbdc63f483f304d8e94b67ff3309f180b82":"622911000000000000000","74aeec915de01cc69b2cb5a6356feea14658c6c5":"232500000000000000000","76f9ad3d9bbd04ae055c1477c0c35e7592cb2a20":"40200000000000000000000",a8a7b68adab4e3eadff19ffa58e34a3fcec0d96a:"6000000000000000000000","60de22a1507432a47b01cc68c52a0bf8a2e0d098":"19100000000000000000",ceb33d78e7547a9da2e87d51aec5f3441c87923a:"20000000000000000000","432809a2390f07c665921ff37d547d12f1c9966a":"30000000000000000000000",d5e656a1b916f9bf45afb07dd8afaf73b4c56f41:"97000000000000000000",e3410bb7557cf91d79fa69d0dfea0aa075402651:"2000000000000000000000",dee942d5caf5fac11421d86b010b458e5c392990:"4000000000000000000000",a98f109835f5eacd0543647c34a6b269e3802fac:"400000000000000000000","932b9c04d40d2ac83083d94298169dae81ab2ed0":"2000000000000000000000",ba10f2764290f875434372f79dbf713801caac01:"955000000000000000000",a2c7eaffdc2c9d937345206c909a52dfb14c478f:"143000000000000000000","6c67e0d7b62e2a08506945a5dfe38263339f1f22":"1970000000000000000000","60c3714fdddb634659e4a2b1ea42c4728cc7b8ba":"13370000000000000000","73b4d499de3f38bf35aaf769a6e318bc6d123692":"2000000000000000000000","3b22dea3c25f1b59c7bd27bb91d3a3eaecef3984":"100000000000000000000","1e3badb1b6e1380e27039c576ae6222e963a5b53":"20000000000000000000000",abd4d6c1666358c0406fdf3af248f78ece830104:"2112000000000000000000","0c925ad5eb352c8ef76d0c222d115b0791b962a1":"3180000000000000000000",be9186c34a52514abb9107860f674f97b821bd5b:"509600000000000000000",b7f67314cb832e32e63b15a40ce0d7ffbdb26985:"1060866000000000000000","3f30d3bc9f602232bc724288ca46cd0b0788f715":"4000000000000000000000","970abd53a54fca4a6429207c182d4d57bb39d4a0":"2000000000000000000000","36d85dc3683156e63bf880a9fab7788cf8143a27":"20000000000000000000000","2836123046b284e5ef102bfd22b1765e508116ad":"411880000000000000000",de06d5ea777a4eb1475e605dbcbf43444e8037ea:"50000000000000000000000","9af11399511c213181bfda3a8b264c05fc81b3ce":"14000000000000000000000",e2191215983f33fd33e22cd4a2490054da53fddc:"15800000000000000000","2eebf59432b52892f9380bd140aa99dcf8ad0c0f":"152000000000000000000",dc087f9390fb9e976ac23ab689544a0942ec2021:"1820000000000000000000",fd4b989558ae11be0c3b36e2d6f2a54a9343ca2e:"2000000000000000000000","770c2fb2c4a81753ac0182ea460ec09c90a516f8":"20000000000000000000",b28dbfc6499894f73a71faa00abe0f4bc9d19f2a:"100000000000000000000",b0cef8e8fb8984a6019f01c679f272bbe68f5c77:"152000000000000000000",f400f93d5f5c7e3fc303129ac8fb0c2f786407fa:"2000000000000000000000",f2133431d1d9a37ba2f0762bc40c5acc8aa6978e:"2000000000000000000000","9003d270891ba2df643da8341583193545e3e000":"4000000000000000000000","8938d1b4daee55a54d738cf17e4477f6794e46f7":"18200000000000000000","98e6f547db88e75f1f9c8ac2c5cf1627ba580b3e":"1000000000000000000000","009fdbf44e1f4a6362b769c39a475f95a96c2bc7":"564000000000000000000",d0f9597811b0b992bb7d3757aa25b4c2561d32e2:"500000000000000000000",dcd10c55bb854f754434f1219c2c9a98ace79f03:"4000086000000000000000","67048f3a12a4dd1f626c64264cb1d7971de2ca38":"180000000000000000000",d33cf82bf14c592640a08608914c237079d5be34:"2000000000000000000000",f5b068989df29c253577d0405ade6e0e7528f89e:"1610000000000000000000",a9a8eca11a23d64689a2aa3e417dbb3d336bb59a:"262025000000000000000","99413704b1a32e70f3bc0d69dd881c38566b54cb":"27382708000000000000000","2a085e25b64862f5e68d768e2b0f7a8529858eee":"1983618000000000000000","833d3fae542ad5f8b50ce19bde2bec579180c88c":"346000000000000000000",c3483d6e88ac1f4ae73cc4408d6c03abe0e49dca:"17000000000000000000000",fde395bc0b6d5cbb4c1d8fea3e0b4bff635e9db7:"2000000000000000000000",eddacd94ec89a2ef968fcf977a08f1fae2757869:"8000000000000000000000",dc29119745d2337320da51e19100c948d980b915:"160000000000000000000","640bf87415e0cf407301e5599a68366da09bbac8":"493207000000000000000",afcc7dbb8356d842d43ae7e23c8422b022a30803:"30400000000000000000000","9120e71173e1ba19ba8f9f4fdbdcaa34e1d6bb78":"2000000000000000000000","9092918707c621fdbd1d90fb80eb787fd26f7350":"2460000000000000000000","263e57dacbe0149f82fe65a2664898866ff5b463":"38000000000000000000000","315db7439fa1d5b423afa7dd7198c1cf74c918bc":"600000000000000000000","09b4668696f86a080f8bebb91db8e6f87015915a":"656010000000000000000","5c31996dcac015f9be985b611f468730ef244d90":"200000000000000000000",b1179589e19db9d41557bbec1cb24ccc2dec1c7f:"100000000000000000000000","3b1937d5e793b89b63fb8eb5f1b1c9ca6ba0fa8e":"2000000000000000000000",c9127b7f6629ee13fc3f60bc2f4467a20745a762:"16465639000000000000000","7306de0e288b56cfdf987ef0d3cc29660793f6dd":"508060000000000000000","2aa192777ca5b978b6b2c2ff800ac1860f753f47":"335000000000000000000","55da9dcdca61cbfe1f133c7bcefc867b9c8122f9":"880000000000000000000",cdd9efac4d6d60bd71d95585dce5d59705c13564:"100000000000000000000",ad8e48a377695de014363a523a28b1a40c78f208:"1000000000000000000000","252b6555afdc80f2d96d972d17db84ea5ad521ac":"7880000000000000000000","60ab71cd26ea6d6e59a7a0f627ee079c885ebbf6":"26740000000000000000",f40b134fea22c6b29c8457f49f000f9cda789adb:"600000000000000000000","85a2f6ea94d05e8c1d9ae2f4910338a358e98ded":"2000000000000000000000",ae13a08511110f32e53be4127845c843a1a57c7b:"500000000000000000000","40db1ba585ce34531edec5494849391381e6ccd3":"1790000000000000000000","0c5589a7a89b9ad15b02751930415948a875fbef":"126000000000000000000","89054430dcdc28ac15fa635ef87c105e602bf70c":"108000000000000000000","6c882c27732cef5c7c13a686f0a2ea77555ac289":"100000000000000000000000",de374299c1d07d79537385190f442ef9ca24061f:"133700000000000000000",b146a0b925553cf06fcaf54a1b4dfea621290757:"2000200000000000000000","09ae49e37f121df5dc158cfde806f173a06b0c7f":"3988000000000000000000",b758896f1baa864f17ebed16d953886fee68aae6:"1000000000000000000000","30730466b8eb6dc90d5496aa76a3472d7dbe0bbe":"1999800000000000000000",fc02734033e57f70517e0afc7ee62461f06fad8e:"394000000000000000000",a9b2d2e0494eab18e07d37bbb856d80e80f84cd3:"10000000000000000000000","95278b08dee7c0f2c8c0f722f9fcbbb9a5241fda":"2408672000000000000000",dab6bcdb83cf24a0ae1cb21b3b5b83c2f3824927:"50000000000000000000000","94439ca9cc169a79d4a09cae5e67764a6f871a21":"240000000000000000000",e06c29a81517e0d487b67fb0b6aabc4f57368388:"401100000000000000000","458e3cc99e947844a18e6a42918fef7e7f5f5eb3":"36400000000000000000000","0a9804137803ba6868d93a55f9985fcd540451e4":"13370000000000000000","40630024bd2c58d248edd8465617b2bf1647da0e":"1000000000000000000000","15224ad1c0face46f9f556e4774a3025ad06bd52":"13370000000000000000","2e2810dee44ae4dff3d86342ab126657d653c336":"200000000000000000000","48a30de1c919d3fd3180e97d5f2b2a9dbd964d2d":"44000000000000000000","46a30b8a808931217445c3f5a93e882c0345b426":"250019000000000000000","455396a4bbd9bae8af9fb7c4d64d471db9c24505":"161000000000000000000",edfda2d5db98f9380714664d54b4ee971a1cae03:"40044000000000000000",f5eadcd2d1b8657a121f33c458a8b13e76b65526:"249828000000000000000","90e7070f4d033fe6910c9efe5a278e1fc6234def":"100392000000000000000",d55508adbbbe9be81b80f97a6ea89add68da674f:"2000000000000000000000","66925de3e43f4b41bf9dadde27d5488ef569ea0d":"39400000000000000000",b7c077946674ba9341fb4c747a5d50f5d2da6415:"1000000000000000000000",c52d1a0c73c2a1be84915185f8b34faa0adf1de3:"1400001000000000000000","79b8aad879dd30567e8778d2d231c8f37ab8734e":"2000000000000000000000","3aae4872fd9093cbcad1406f1e8078bab50359e2":"39400000000000000000",b2e9d76bf50fc36bf7d3944b63e9ca889b699968:"2660000000000000000000","405f596b94b947344c033ce2dcbff12e25b79784":"2000000000000000000000","232cb1cd49993c144a3f88b3611e233569a86bd6":"15576000000000000000000","9e232c08c14dc1a6ed0b8a3b2868977ba5c17d10":"20000000000000000000","095270cc42141dd998ad2862dbd1fe9b44e7e650":"1200000000000000000000","15d99468507aa0413fb60dca2adc7f569cb36b54":"2000000000000000000000","04852732b4c652f6c2e58eb36587e60a62da14db":"20000000000000000000000",ecf24cdd7c22928c441e694de4aa31b0fab59778:"600000000000000000000","512b91bbfaa9e581ef683fc90d9db22a8f49f48b":"310000000000000000000000",a88577a073fbaf33c4cd202e00ea70ef711b4006:"2000000000000000000000","00acc6f082a442828764d11f58d6894ae408f073":"60000000000000000000000","0355bcacbd21441e95adeedc30c17218c8a408ce":"400000000000000000000","4e73cf2379f124860f73d6d91bf59acc5cfc845b":"40110000000000000000","2a742b8910941e0932830a1d9692cfd28494cf40":"499986000000000000000","41a8c2830081b102df6e0131657c07ab635b54ce":"1999944000000000000000",b63064bd3355e6e07e2d377024125a33776c4afa:"38800000000000000000000","1a25e1c5bc7e5f50ec16f8885f210ea1b938800e":"4000000000000000000000","09b59b8698a7fbd3d2f8c73a008988de3e406b2b":"40000000000000000000000",c555b93156f09101233c6f7cf6eb3c4f196d3346:"3000000000000000000000","12f32c0a1f2daab676fe69abd9e018352d4ccd45":"50000000000000000000","5956b28ec7890b76fc061a1feb52d82ae81fb635":"2000000000000000000000",c739259e7f85f2659bef5f609ed86b3d596c201e:"200000000000000000000",fae92c1370e9e1859a5df83b56d0f586aa3b404c:"106480000000000000000",d5a7bec332adde18b3104b5792546aa59b879b52:"2000000000000000000000","4f88dfd01091a45a9e2676021e64286cd36b8d34":"1000000000000000000000","102c477d69aadba9a0b0f62b7459e17fbb1c1561":"2000000000000000000000","34272d5e7574315dcae9abbd317bac90289d4765":"1820000000000000000000",fe615d975c0887e0c9113ec7298420a793af8b96:"8000000000000000000000","487adf7d70a6740f8d51cbdd68bb3f91c4a5ce68":"66850000000000000000","7e5d9993104e4cb545e179a2a3f971f744f98482":"2000000000000000000000","5529830a61c1f13c197e550beddfd6bd195c9d02":"10000000000000000000000","2f282abbb6d4a3c3cd3b5ca812f7643e80305f06":"1850000000000000000000","7352586d021ad0cf77e0e928404a59f374ff4582":"3400000000000000000000","03f7b92008813ae0a676eb212814afab35221069":"2000000000000000000000","056686078fb6bcf9ba0a8a8dc63a906f5feac0ea":"499800000000000000000","8063379a7bf2cb923a84c5093e68dac7f75481c5":"322102000000000000000","200264a09f8c68e3e6629795280f56254f8640d0":"20000000000000000000","5a891155f50e42074374c739baadf7df2651153a":"4775000000000000000000","80022a1207e910911fc92849b069ab0cdad043d3":"13370000000000000000",e781ec732d401202bb9bd13860910dd6c29ac0b6:"1240000000000000000000","4c2f1afef7c5868c44832fc77cb03b55f89e6d6e":"20000000000000000000000","34ff582952ff24458f7b13d51f0b4f987022c1fe":"2804400000000000000000","73914b22fc2f131584247d82be4fecbf978ad4ba":"2000000000000000000000","562be95aba17c5371fe2ba828799b1f55d2177d6":"38200000000000000000000","648f5bd2a2ae8902db37847d1cb0db9390b06248":"7769965000000000000000","6a9758743b603eea3aa0524b42889723c4153948":"10100000000000000000000","5985c59a449dfc5da787d8244e746c6d70caa55f":"100000000000000000000","56ee197f4bbf9f1b0662e41c2bbd9aa1f799e846":"1000000000000000000000",d47c242edffea091bc54d57df5d1fdb93101476c:"2914000000000000000000",d482e7f68e41f238fe517829de15477fe0f6dd1d:"500000000000000000000","05bf4fcfe772e45b826443852e6c351350ce72a2":"8000000000000000000000",f10462e58fcc07f39584a187639451167e859201:"169830000000000000000","1aa27699cada8dc3a76f7933aa66c71919040e88":"400000000000000000000","24046b91da9b61b629cb8b8ec0c351a07e0703e4":"2000000000000000000000","41033c1b6d05e1ca89b0948fc64453fbe87ab25e":"1337000000000000000000","369822f5578b40dd1f4471706b22cd971352da6b":"346000000000000000000","044e853144e3364495e7a69fa1d46abea3ac0964":"49225000000000000000",abf728cf9312f22128024e7046c251f5dc5901ed:"29550000000000000000000",d781f7fc09184611568570b4986e2c72872b7ed0:"20002000000000000000","6bb4a661a33a71d424d49bb5df28622ed4dffcf4":"630400000000000000000",fef3b3dead1a6926d49aa32b12c22af54d9ff985:"1000000000000000000000",fa410971ad229c3036f41acf852f2ac999281950:"3997400000000000000000",de176b5284bcee3a838ba24f67fc7cbf67d78ef6:"37600000000000000000","23120046f6832102a752a76656691c863e17e59c":"329800000000000000000",a2f472fe4f22b77db489219ea4023d11582a9329:"40000000000000000000000",f0d64cf9df09741133d170485fd24b005011d520:"498680000000000000000","8b505e2871f7deb7a63895208e8227dcaa1bff05":"61216600000000000000000","481e3a91bfdc2f1c8428a0119d03a41601417e1c":"1000000000000000000000",bc69a0d2a31c3dbf7a9122116901b2bdfe9802a0:"3000000000000000000000","20a81680e465f88790f0074f60b4f35f5d1e6aa5":"1279851000000000000000","194a6bb302b8aba7a5b579df93e0df1574967625":"500000000000000000000","264cc8086a8710f91b21720905912cd7964ae868":"26740000000000000000","24aca08d5be85ebb9f3132dfc1b620824edfedf9":"18200000000000000000","1851a063ccdb30549077f1d139e72de7971197d5":"2000000000000000000000",f64a4ac8d540a9289c68d960d5fb7cc45a77831c:"2000000000000000000000",c3db5657bb72f10d58f231fddf11980aff678693:"5910000000000000000000",b46ace865e2c50ea4698d216ab455dff5a11cd72:"1000000000000000000000","9faea13c733412dc4b490402bfef27a0397a9bc3":"310000000000000000000",b40594c4f3664ef849cca6227b8a25aa690925ee:"4000000000000000000000","672fa0a019088db3166f6119438d07a99f8ba224":"13370000000000000000000",c1ffad07db96138c4b2a530ec1c7de29b8a0592c:"17600000000000000000","87af25d3f6f8eea15313d5fe4557e810c524c083":"19700000000000000000000",d6a22e598dabd38ea6e958bd79d48ddd9604f4df:"1000000000000000000000",a2a435de44a01bd0ecb29e44e47644e46a0cdffb:"500171000000000000000","549b47649cfad993e4064d2636a4baa0623305cc":"601650000000000000000","1321b605026f4ffb296a3e0edcb390c9c85608b7":"2000000000000000000000",b4bf24cb83686bc469869fefb044b909716993e2:"2000000000000000000000","12d91a92d74fc861a729646db192a125b79f5374":"18200000000000000000","7f0662b410298c99f311d3a1454a1eedba2fea76":"200000000000000000000","83908aa7478a6d1c9b9b0281148f8f9f242b9fdc":"2000000000000000000000",c1438c99dd51ef1ca8386af0a317e9b041457888:"223500000000000000000","545bb070e781172eb1608af7fc2895d6cb87197e":"2244000000000000000000","161d26ef6759ba5b9f20fdcd66f16132c352415e":"2000000000000000000000",d7f370d4bed9d57c6f49c999de729ee569d3f4e4:"200000000000000000000","90e35aabb2deef408bb9b5acef714457dfde6272":"100076000000000000000","0fcfc4065008cfd323305f6286b57a4dd7eee23b":"20000000000000000000000",cd725d70be97e677e3c8e85c0b26ef31e9955045:"1337000000000000000000",dcf6b657266e91a4dae6033ddac15332dd8d2b34:"1760000000000000000000","31f006f3494ed6c16eb92aaf9044fa8abb5fd5a3":"500000000000000000000",cdea386f9d0fd804d02818f237b7d9fa7646d35e:"3012139000000000000000",d45b3341e8f15c80329320c3977e3b90e7826a7e:"500000000000000000000","0b649da3b96a102cdc6db652a0c07d65b1e443e6":"2000000000000000000000","0a58fddd71898de773a74fdae45e7bd84ef43646":"20000000000000000000","0256149f5b5063bea14e15661ffb58f9b459a957":"704000000000000000000","4438e880cb2766b0c1ceaec9d2418fceb952a044":"133712000000000000000","9ed80eda7f55054db9fb5282451688f26bb374c1":"300000000000000000000","8dab948ae81da301d972e3f617a912e5a753712e":"400000000000000000000","5b5d8c8eed6c85ac215661de026676823faa0a0c":"20000000000000000000000","46722a36a01e841d03f780935e917d85d5a67abd":"14900000000000000000",d4b8bdf3df9a51b0b91d16abbea05bb4783c8661:"1000000000000000000000","98f6b8e6213dbc9a5581f4cce6655f95252bdb07":"319968000000000000000","3599493ce65772cf93e98af1195ec0955dc98002":"1500048000000000000000",ecab5aba5b828de1705381f38bc744b32ba1b437:"940000000000000000000","9a82826d3c29481dcc2bd2950047e8b60486c338":"20000000000000000000000","6c474bc66a54780066aa4f512eefa773abf919c7":"94000000000000000000",d5903e9978ee20a38c3f498d63d57f31a39f6a06:"10380000000000000000000","341480cc8cb476f8d01ff30812e7c70e05afaf5d":"2000000000000000000000",af771039345a343001bc0f8a5923b126b60d509c:"985000000000000000000",b5a4679685fa14196c2e9230c8c4e33bffbc10e2:"1400000000000000000000","2a400dff8594de7228b4fd15c32322b75bb87da8":"95810000000000000000",a1336dfb96b6bcbe4b3edf3205be5723c90fad52:"5000000000000000000000",e9b1f1fca3fa47269f21b061c353b7f5e96d905a:"500000000000000000000","0ee414940487fd24e390378285c5d7b9334d8b65":"2680000000000000000000","6ab5b4c41cddb829690c2fda7f20c85e629dd5d5":"1860000000000000000000",dd63042f25ed32884ad26e3ad959eb94ea36bf67:"21340000000000000000000",c0b3f244bca7b7de5b48a53edb9cbeab0b6d88c0:"5820000000000000000000",ed1a5c43c574d4e934299b24f1472cdc9fd6f010:"200000000000000000000",b2d9ab9664bcf6df203c346fc692fd9cbab9205e:"438000000000000000000",ede8c2cb876fbe8a4cca8290361a7ea01a69fdf8:"7813091000000000000000","6a7c252042e7468a3ff773d6450bba85efa26391":"500000000000000000000",a106e6923edd53ca8ed650968a9108d6ccfd9670:"9499935000000000000000","031e25db516b0f099faebfd94f890cf96660836b":"2000000000000000000000","7fdbc3a844e40d96b2f3a635322e6065f4ca0e84":"2000000000000000000000",df47a61b72535193c561cccc75c3f3ce0804a20e:"398000000000000000000",ed31305c319f9273d3936d8f5b2f71e9b1b22963:"100000000000000000000",a6b2d573297360102c07a18fc21df2e7499ff4eb:"4011000000000000000000",f68464bf64f2411356e4d3250efefe5c50a5f65b:"20000000000000000000","927cc2bfda0e088d02eff70b38b08aa53cc30941":"1852700000000000000000","41cb9896445f70a10a14215296daf614e32cf4d5":"1910000000000000000000","3ad70243d88bf0400f57c8c1fd57811848af162a":"860000000000000000000","63b9754d75d12d384039ec69063c0be210d5e0e3":"2694055000000000000000",ad1799aad7602b4540cd832f9db5f11150f1687a:"2000000000000000000000",a8b65ba3171a3f77a6350b9daf1f8d55b4d201eb:"745000000000000000000",ad0a4ae478e9636e88c604f242cf5439c6d45639:"3520000000000000000000","4cd0b0a6436362595ceade052ebc9b929fb6c6c0":"2000000000000000000000",c1d4af38e9ba799040894849b8a8219375f1ac78:"20000000000000000000000","49ddee902e1d0c99d1b11af3cc8a96f78e4dcf1a":"199358000000000000000",ae842210f44d14c4a4db91fc9d3b3b50014f7bf7:"4000000000000000000000","10a1c42dc1ba746986b985a522a73c93eae64c63":"1000000000000000000000","5103bc09933e9921fd53dc536f11f05d0d47107d":"4000000000000000000000",c88eec54d305c928cc2848c2fee23531acb96d49:"1999946000000000000000","9a2ce43b5d89d6936b8e8c354791b8afff962425":"2000000000000000000000","562020e3ed792d2f1835fe5f55417d5111460c6a":"20000000000000000000000",ed16ce39feef3bd7f5d162045e0f67c0f00046bb:"20000000000000000000",ab948a4ae3795cbca13126e19253bdc21d3a8514:"200000000000000000000",c12b7f40df9a2f7bf983661422ab84c9c1f50858:"8000000000000000000000","62e6b2f5eb94fa7a43831fc87e254a3fe3bf8f89":"250000000000000000000","423bca47abc00c7057e3ad34fca63e375fbd8b4a":"18000000000000000000000","5ff326cd60fd136b245e29e9087a6ad3a6527f0d":"1880000000000000000000","79ffb4ac13812a0b78c4a37b8275223e176bfda5":"17300000000000000000",f757fc8720d3c4fa5277075e60bd5c411aebd977:"2000000000000000000000","0bdbc54cc8bdbbb402a08911e2232a5460ce866b":"3000000000000000000000","9ee9760cc273d4706aa08375c3e46fa230aff3d5":"8950000000000000000000",d23a24d7f9468343c143a41d73b88f7cbe63be5e:"200000000000000000000","46d80631284203f6288ecd4e5758bb9d41d05dbe":"2000000000000000000000","3f4cd1399f8a34eddb9a17a471fc922b5870aafc":"200000000000000000000","44c54eaa8ac940f9e80f1e74e82fc14f1676856a":"7880000000000000000000",aec27ff5d7f9ddda91183f46f9d52543b6cd2b2f:"450000000000000000000","203c6283f20df7bc86542fdfb4e763ecdbbbeef5":"25000000000000000000000",bcaf347918efb2d63dde03e39275bbe97d26df50:"100000000000000000000","974d0541ab4a47ec7f75369c0069b64a1b817710":"400000000000000000000","5da54785c9bd30575c89deb59d2041d20a39e17b":"1967031000000000000000","1fb463a0389983df7d593f7bdd6d78497fed8879":"20000000000000000000","6e1ea4b183e252c9bb7767a006d4b43696cb8ae9":"294245000000000000000",c2aa74847e86edfdd3f3db22f8a2152feee5b7f7:"2048852000000000000000",a13b9d82a99b3c9bba5ae72ef2199edc7d3bb36c:"1999944000000000000000","5135fb8757600cf474546252f74dc0746d06262c":"2000000000000000000000","43e7ec846358d7d0f937ad1c350ba069d7bf72bf":"118800000000000000000",f2ed3e77254acb83231dc0860e1a11242ba627db:"1980000000000000000000",c0a02ab94ebe56d045b41b629b98462e3a024a93:"100000000000000000000",f21549bdd1487912f900a7523db5f7626121bba3:"10000000000000000000000","886d0a9e17c9c095af2ea2358b89ec705212ee94":"28000000000000000000","211b29cefc79ae976744fdebcebd3cbb32c51303":"14000000000000000000000",b8c2703d8c3f2f44c584bc10e7c0a6b64c1c097e:"5550000000000000000000",ec30addd895b82ee319e54fb04cb2bb03971f36b:"2000000000000000000000",b71b62f4b448c02b1201cb5e394ae627b0a560ee:"500000000000000000000", -e1334e998379dfe983177062791b90f80ee22d8d:"500000000000000000000","1d633097a85225a1ff4321b12988fdd55c2b3844":"4000000000000000000000","8bd8d4c4e943f6c8073921dc17e3e8d7a0761627":"2933330000000000000000",a5d96e697d46358d119af7819dc7087f6ae47fef:"14605131000000000000000",d0809498c548047a1e2a2aa6a29cd61a0ee268bd:"2000000000000000000000","3cd6b7593cbee77830a8b19d0801958fcd4bc57a":"500000000000000000000",ead4d2eefb76abae5533961edd11400406b298fc:"3880000000000000000000","6331028cbb5a21485bc51b565142993bdb2582a9":"534800000000000000000","163bad4a122b457d64e8150a413eae4d07023e6b":"18800000000000000000",c522e20fbf04ed7f6b05a37b4718d6fce0142e1a:"4000000000000000000000","2d9bad6f1ee02a70f1f13def5cccb27a9a274031":"1790000000000000000000","5ed0d6338559ef44dc7a61edeb893fa5d83fa1b5":"220000000000000000000",ec8c1d7b6aaccd429db3a91ee4c9eb1ca4f6f73c:"4250000000000000000000","3896ad743579d38e2302454d1fb6e2ab69e01bfd":"1880000000000000000000",e73ccf436725c151e255ccf5210cfce5a43f13e3:"19982000000000000000","9483d98f14a33fdc118d403955c29935edfc5f70":"459600000000000000000","1cfcf7517f0c08459720942b647ad192aa9c8828":"800000000000000000000","8d378f0edc0bb0f0686d6a20be6a7692c4fa24b8":"100000000000000000000","06f68de3d739db41121eacf779aada3de8762107":"28000000000000000000","9909650dd5b1397b8b8b0eb69499b291b0ad1213":"200000000000000000000",b66675142e3111a1c2ea1eb2419cfa42aaf7a234:"1000000000000000000000","7836f7ef6bc7bd0ff3acaf449c84dd6b1e2c939f":"4142296000000000000000","3ddedbe48923fbf9e536bf9ffb0747c9cdd39eef":"16100000000000000000000",c47d610b399250f70ecf1389bab6292c91264f23:"288800000000000000000","51a6d627f66a8923d88d6094c4715380d3057cb6":"1152044000000000000000","6c0cc917cbee7d7c099763f14e64df7d34e2bf09":"250000000000000000000",aaaae68b321402c8ebc13468f341c63c0cf03fce:"1520000000000000000000","819cdaa5303678ef7cec59d48c82163acc60b952":"14523448000000000000000",d071192966eb69c3520fca3aa4dd04297ea04b4e:"110000000000000000000",e53425d8df1f11c341ff58ae5f1438abf1ca53cf:"322000000000000000000","8ffe322997b8e404422d19c54aadb18f5bc8e9b7":"3940000000000000000000","305f78d618b990b4295bac8a2dfa262884f804ea":"4000000000000000000000","274d69170fe7141401882b886ac4618c6ae40edb":"955000000000000000000","69c94e07c4a9be3384d95dfa3cb9290051873b7b":"70000000000000000000","859c600cf13d1d0273d5d1da3cd789e495899f27":"2674000000000000000000",c06cebbbf7f5149a66f7eb976b3e47d56516da2f:"2000000000000000000000","37bbc47212d82fcb5ee08f5225ecc2041ad2da7d":"3280000000000000000000","11e7997edd904503d77da6038ab0a4c834bbd563":"388000000000000000000",d333627445f2d787901ef33bb2a8a3675e27ffec:"400000000000000000000","16a58e985dccd707a594d193e7cca78b5d027849":"1360000000000000000000",f8ae857b67a4a2893a3fbe7c7a87ff1c01c6a6e7:"4000000000000000000000","491561db8b6fafb9007e62d050c282e92c4b6bc8":"30000000000000000000000","21df1ec24b4e4bfe79b0c095cebae198f291fbd1":"20000000000000000000000",e208812a684098f3da4efe6aba256256adfe3fe6:"2000000000000000000000",f4ec8e97a20aa5f8dd206f55207e06b813df2cc0:"200000000000000000000","29eb7eefdae9feb449c63ff5f279d67510eb1422":"19400000000000000000","0d678706d037187f3e22e6f69b99a592d11ebc59":"1580000000000000000000",de6d363106cc6238d2f092f0f0372136d1cd50c6:"5348000000000000000000",c8710d7e8b5a3bd69a42fe0fa8b87c357fddcdc8:"4000000000000000000000","5267f4d41292f370863c90d793296903843625c7":"1400000000000000000000","4cda41dd533991290794e22ae324143e309b3d3d":"2400000000000000000000",f8a50cee2e688ceee3aca4d4a29725d4072cc483:"2000000000000000000000","5ed3bbc05240e0d399eb6ddfe60f62de4d9509af":"193999806000000000000000","0befb54707f61b2c9fb04715ab026e1bb72042bd":"4000000000000000000000",cab9a301e6bd46e940355028eccd40ce4d5a1ac3:"400000000000000000000","64672da3ab052821a0243d1ce4b6e0a36517b8eb":"200000000000000000000",eac0827eff0c6e3ff28a7d4a54f65cb7689d7b99:"2856500000000000000000",f4b6cdcfcb24230b337d770df6034dfbd4e1503f:"19000000000000000000000","7be2f7680c802da6154c92c0194ae732517a7169":"18200000000000000000","869f1aa30e4455beb1822091de5cadec79a8f946":"8000000000000000000000",c4681e73bb0e32f6b726204831ff69baa4877e32:"1820000000000000000000","962cd22a8edf1e4f4e55b4b15ddbfb5d9d541971":"2000000000000000000000","131df8d330eb7cc7147d0a55576f05de8d26a8b7":"188000000000000000000","19f99f2c0b46ce8906875dc9f90ae104dae35594":"4507300000000000000000","91bb3f79022bf3c453f4ff256e269b15cf2c9cbd":"1519000000000000000000","7301dc4cf26d7186f2a11bf8b08bf229463f64a3":"2000000000000000000000","7cbca88fca6a0060b960985c9aa1b02534dc2208":"462500000000000000000",f3c1abd29dc57b41dc192d0e384d021df0b4f6d4:"2798000000000000000000","5d32f6f86e787ff78e63d78b0ef95fe6071852b8":"401100000000000000000","1678c5f2a522393225196361894f53cc752fe2f3":"1936000000000000000000","1cf04cb14380059efd3f238b65d5beb86afa14d8":"20000000000000000000","52e1731350f983cc2c4189842fde0613fad50ce1":"11640000000000000000000",d0b11d6f2bce945e0c6a5020c3b52753f803f9d1:"200000000000000000000","409bd75085821c1de70cdc3b11ffc3d923c74010":"4000000000000000000000","0bb7160aba293762f8734f3e0326ffc9a4cac190":"1000000000000000000000","7aad4dbcd3acf997df93586956f72b64d8ad94ee":"4000000000000000000000","2dec98329d1f96c3a59caa7981755452d4da49d5":"200000000000000000000",c18ab467feb5a0aadfff91230ff056464d78d800:"2000000000000000000000",c90c3765156bca8e4897ab802419153cbe5225a9:"200000000000000000000","85c8f3cc7a354feac99a5e7bfe7cdfa351cfe355":"400000000000000000000",f4fc4d39bc0c2c4068a36de50e4ab4d4db7e340a:"25380000000000000000",f50abbd4aa45d3eb88515465a8ba0b310fd9b521:"6685000000000000000000","4d200110124008d56f76981256420c946a6ff45c":"199955000000000000000",f4ba6a46d55140c439cbcf076cc657136262f4f8:"2000000000000000000000",fa7adf660b8d99ce15933d7c5f072f3cbeb99d33:"5910000000000000000000","84503334630d77f74147f68b2e086613c8f1ade9":"1600000000000000000000","31ed858788bda4d5270992221cc04206ec62610d":"1176000000000000000000",bfbca418d3529cb393081062032a6e1183c6b2dc:"8000000000000000000000","8263ece5d709e0d7ae71cca868ed37cd2fef807b":"990000000000000000000","23ba3864da583dab56f420873c37679690e02f00":"9800000000000000000000",cedcb3a1d6843fb6bef643617deaf38f8e98dd5f:"477500000000000000000","8fac748f784a0fed68dba43319b42a75b4649c6e":"910000000000000000000","18b8bcf98321da61fb4e3eacc1ec5417272dc27e":"880000000000000000000","776943ffb2ef5cdd35b83c28bc046bd4f4677098":"3000000000000000000000",fb8113f94d9173eefd5a3073f516803a10b286ae:"80000000000000000000","3e8349b67f5745449f659367d9ad4712db5b895a":"1820000000000000000000","79cfa9780ae6d87b2c31883f09276986c89a6735":"1000000000000000000000","5006fe4c22173980f00c74342b39cd231c653129":"2000000000000000000000","13848b46ea75beb7eaa85f59d866d77fd24cf21a":"50000000000000000000000",d64a2d50f8858537188a24e0f50df1681ab07ed7:"38800000000000000000000","4f9ce2af9b8c5e42c6808a3870ec576f313545d1":"10000000000000000000000","8764d02722000996ecd475b433298e9f540b05bf":"200000000000000000000","3b7c77dbe95dc2602ce3269a9545d04965fefdbd":"2000000000000000000000",c9dcbb056f4db7d9da39936202c5bd8230b3b477:"20000000000000000000000","9ecbabb0b22782b3754429e1757aaba04b81189f":"823743000000000000000","831c44b3084047184b2ad218680640903750c45d":"1970000000000000000000",ff8eb07de3d49d9d52bbe8e5b26dbe1d160fa834:"3986000000000000000000","8ccf3aa21ab742576ad8c422f71bb188591dea8a":"1000000000000000000000",ddac312a9655426a9c0c9efa3fd82559ef4505bf:"401100000000000000000","9a3e2b1bf346dd070b027357feac44a4b2c97db8":"10000000000000000000000","69d39d510889e552a396135bfcdb06e37e387633":"4000000000000000000000","83a3148833d9644984f7c475a7850716efb480ff":"3400000000000000000000","62b4a9226e61683c72c183254690daf511b4117a":"260000000000000000000","50763add868fd7361178342fc055eaa2b95f6846":"66838000000000000000","91898eab8c05c0222883cd4db23b7795e1a24ad7":"2000000000000000000000","066647cfc85d23d37605573d208ca154b244d76c":"10000000000000000000000",aaf9ee4b886c6d1e95496fd274235bf4ecfcb07d:"1400000000000000000000","06860a93525955ff624940fadcffb8e149fd599c":"1999800000000000000000",e81c2d346c0adf4cc56708f6394ba6c8c8a64a1e:"2000000000000000000000","41a8e236a30e6d63c1ff644d132aa25c89537e01":"20000000000000000000","6a679e378fdce6bfd97fe62f043c6f6405d79e99":"4000000000000000000000","933436c8472655f64c3afaaf7c4c621c83a62b38":"1000000000000000000000",abe07ced6ac5ddf991eff6c3da226a741bd243fe:"10000000000000000000000",bb56a404723cff20d0685488b05a02cdc35aacaa:"20000000000000000000","0d551ec1a2133c981d5fc6a8c8173f9e7c4f47af":"2000000000000000000000","23376ecabf746ce53321cf42c86649b92b67b2ff":"2000000000000000000000","644ba6c61082e989109f5c11d4b40e991660d403":"4000000000000000000000","680d5911ed8dd9eec45c060c223f89a7f620bbd5":"20000000000000000000000",cb1bb6f1da5eb10d4899f7e61d06c1b00fdfb52d:"1038000000000000000000","303a30ac4286ae17cf483dad7b870c6bd64d7b4a":"500000000000000000000","7b0b31ff6e24745ead8ed9bb85fc0bf2fe1d55d4":"800000000000000000000","854691ce714f325ced55ce5928ce9ba12facd1b8":"4380000000000000000000",a13cfe826d6d1841dcae443be8c387518136b5e8:"140000000000000000000000","5fcd84546896dd081db1a320bd4d8c1dd1528c4c":"20000000000000000000","3db5fe6a68bd3612ac15a99a61e555928eeceaf3":"1580000000000000000000","7a79e30ff057f70a3d0191f7f53f761537af7dff":"400000000000000000000","3d3fad49c9e5d2759c8e8e5a7a4d60a0dd135692":"20000000000000000000","05a830724302bc0f6ebdaa1ebeeeb46e6ce00b39":"98500000000000000000",e4b6ae22c7735f5b89f34dd77ad0975f0acc9181:"1000000000000000000000","3f2dd55db7eab0ebee65b33ed8202c1e992e958b":"820000000000000000000","395d6d255520a8db29abc47d83a5db8a1a7df087":"100000000000000000000","1cc90876004109cd79a3dea866cb840ac364ba1b":"2000000000000000000000",c83e9d6a58253beebeb793e6f28b054a58491b74:"281800000000000000000","901d99b699e5c6911519cb2076b4c76330c54d22":"2000000000000000000000","3a9132b7093d3ec42e1e4fb8cb31ecdd43ae773c":"2000000000000000000000",b41eaf5d51a5ba1ba39bb418dbb54fab750efb1f:"1000000000000000000000",aa493d3f4fb866491cf8f800efb7e2324ed7cfe5:"1700000000000000000000","509982f56237ee458951047e0a2230f804e2e895":"17500000000000000000000","316e92a91bbda68b9e2f98b3c048934e3cc0b416":"2000000000000000000000",a3430e1f647f321ed34739562323c7d623410b56:"999942000000000000000",fca43bbc23a0d321ba9e46b929735ce7d8ef0c18:"20000000000000000000",ff45cb34c928364d9cc9d8bb00373474618f06f3:"100000000000000000000","8c999591fd72ef7111efca7a9e97a2356b3b000a":"4084000000000000000000","8579dadf1a395a3471e20b6f763d9a0ff19a3f6f":"4000000000000000000000",c8d4e1599d03b79809e0130a8dc38408f05e8cd3:"2945500000000000000000","2abce1808940cd4ef5b5e05285f82df7a9ab5e03":"9800000000000000000000","0bb0c12682a2f15c9b5741b2385cbe41f034068e":"1500000000000000000000","08b7bdcf944d5570838be70460243a8694485858":"2000000000000000000000",c452e0e4b3d6ae06b836f032ca09db409ddfe0fb:"800000000000000000000","48d4f2468f963fd79a006198bb67895d2d5aa4d3":"1400000000000000000000",f9e7222faaf0f4da40c1c4a40630373a09bed7b6:"2865000000000000000000",bf59aee281fa43fe97194351a9857e01a3b897b2:"600000000000000000000",da0d4b7ef91fb55ad265f251142067f10376ced6:"20000000000000000000000","2c6f5c124cc789f8bb398e3f889751bc4b602d9e":"24928000000000000000",c85ef27d820403805fc9ed259fff64acb8d6346a:"2000000000000000000000","9aa8308f42910e5ade09c1a5e282d6d91710bdbf":"200000000000000000000","9e4cec353ac3e381835e3c0991f8faa5b7d0a8e6":"9999917000000000000000","137cf341e8516c815814ebcd73e6569af14cf7bc":"1000000000000000000000","889da662eb4a0a2a069d2bc24b05b4ee2e92c41b":"1663417000000000000000","0998d8273115b56af43c505e087aff0676ed3659":"3999984000000000000000","3e4d13c55a84e46ed7e9cb90fd355e8ad991e38f":"1000000000000000000000",abc068b4979b0ea64a62d3b7aa897d73810dc533:"1970000000000000000000",d8fdf546674738c984d8fab857880b3e4280c09e:"20000000000000000000",aff161740a6d909fe99c59a9b77945c91cc91448:"60000000000000000000","92ad1b3d75fba67d54663da9fc848a8ade10fa67":"2000000000000000000000","819eb4990b5aba5547093da12b6b3c1093df6d46":"1000000000000000000000","643d9aeed4b180947ed2b9207cce4c3ddc55e1f7":"200000000000000000000",ab3e62e77a8b225e411592b1af300752fe412463:"9850000000000000000000","650b425555e4e4c51718146836a2c1ee77a5b421":"20000000000000000000000",ba8e46d69d2e2343d86c60d82cf42c2041a0c1c2:"100000000000000000000",f9570e924c95debb7061369792cf2efec2a82d5e:"20000000000000000000","4dc4bf5e7589c47b28378d7503cf96488061dbbd":"1760000000000000000000","3d7ea5bf03528100ed8af8aed2653e921b6e6725":"1000000000000000000000",a02bde6461686e19ac650c970d0672e76dcb4fc2:"8865000000000000000000",b0e760bb07c081777345e0578e8bc898226d4e3b:"2000000000000000000000","979cbf21dfec8ace3f1c196d82df962534df394f":"2832860000000000000000","9f8245c3ab7d173164861cd3991b94f1ba40a93a":"2860000000000000000000",c25cf826550c8eaf10af2234fef904ddb95213be:"1000000000000000000000","967bfaf76243cdb9403c67d2ceefdee90a3feb73":"970582000000000000000","0b2113504534642a1daf102eee10b9ebde76e261":"2733351000000000000000","74bc4a5e2045f4ff8db184cf3a9b0c065ad807d2":"2000000000000000000000",f1da40736f99d5df3b068a5d745fafc6463fc9b1:"121546000000000000000","0fa6c7b0973d0bae2940540e247d3627e37ca347":"1000000000000000000000","72b05962fb2ad589d65ad16a22559eba1458f387":"133700000000000000000","6ceae3733d8fa43d6cd80c1a96e8eb93109c83b7":"298000000000000000000","28eaea78cd4d95faecfb68836eafe83520f3bbb7":"200000000000000000000",f49f6f9baabc018c8f8e119e0115f491fc92a8a4:"10000000000000000000000","833316985d47742bfed410604a91953c05fb12b0":"2000000000000000000000",ead75016e3a0815072b6b108bcc1b799acf0383e:"2000000000000000000000","0032403587947b9f15622a68d104d54d33dbd1cd":"77500000000000000000","8f64b9c1246d857831643107d355b5c75fef5d4f":"1999944000000000000000","15dcafcc2bace7b55b54c01a1c514626bf61ebd8":"9400000000000000000000","6886ada7bbb0617bda842191c68c922ea3a8ac82":"1160000000000000000000",f736dc96760012388fe88b66c06efe57e0d7cf0a:"2100000000000000000000","0b288a5a8b75f3dc4191eb0457e1c83dbd204d25":"4853000000000000000000","56b6c23dd2ec90b4728f3bb2e764c3c50c85f144":"1000000000000000000000","6310b020fd98044957995092090f17f04e52cdfd":"1580000000000000000000",b0baeb30e313776c4c6d247402ba4167afcda1cc:"1970000000000000000000","7641f7d26a86cddb2be13081810e01c9c83c4b20":"13370000000000000000","07a8dadec142571a7d53a4297051786d072cba55":"22729000000000000000",cc73dd356b4979b579b401d4cc7a31a268ddce5a:"500000000000000000000",adf1acfe99bc8c14b304c8d905ba27657b8a7bc4:"20000000000000000000000","72dabb5b6eed9e99be915888f6568056381608f8":"208433000000000000000","9de20ae76aa08263b205d5142461961e2408d266":"252000000000000000000","9d4ff989b7bed9ab109d10c8c7e55f02d76734ad":"1000000000000000000000",e58dd23238ee6ea7c2138d385df500c325f376be:"1820000000000000000000","4bd6dd0cff23400e1730ba7b894504577d14e74a":"206028000000000000000000","35147430c3106500e79fa2f502462e94703c23b1":"1999944000000000000000",c0ae14d724832e2fce2778de7f7b8daf7b12a93e:"20000000000000000000",b57413060af3f14eb479065f1e9d19b3757ae8cc:"40000000000000000000","7d04d2edc058a1afc761d9c99ae4fc5c85d4c8a6":"314807840000000000000000","1c94d636e684eb155895ce6db4a2588fba1d001b":"2000000000000000000000",c721b2a7aa44c21298e85039d00e2e460e670b9c:"140800000000000000000","2d89a8006a4f137a20dc2bec46fe2eb312ea9654":"200000000000000000000","646afba71d849e80c0ed59cac519b278e7f7abe4":"1000000000000000000000","71f2cdd1b046e2da2fbb5a26723422b8325e25a3":"99960000000000000000","2c9fa72c95f37d08e9a36009e7a4b07f29bad41a":"16100000000000000000","848fbd29d67cf4a013cb02a4b176ef244e9ee68d":"20116000000000000000","68190ca885da4231874c1cfb42b1580a21737f38":"3820000000000000000000","9adf458bff3599eee1a26398853c575bc38c6313":"280000000000000000000",b72220ade364d0369f2d2da783ca474d7b9b34ce:"499986000000000000000","38e2af73393ea98a1d993a74df5cd754b98d529a":"1790000000000000000000","4d38d90f83f4515c03cc78326a154d358bd882b7":"185000000000000000000",aa8eb0823b07b0e6d20aadda0e95cf3835be192e:"32000000000000000000","008639dabbe3aeac887b5dc0e43e13bcd287d76c":"310200000000000000000",fa3a0c4b903f6ea52ea7ab7b8863b6a616ad6650:"20000000000000000000",e26bf322774e18288769d67e3107deb7447707b8:"2000000000000000000000",e061a4f2fc77b296d19ada238e49a5cb8ecbfa70:"4000000000000000000000",b320834836d1dbfda9e7a3184d1ad1fd4320ccc0:"1000000000000000000000","0ed3bb3a4eb554cfca97947d575507cdfd6d21d8":"547863000000000000000","32fa0e86cd087dd68d693190f32d93310909ed53":"4000000000000000000000","5b759fa110a31c88469f54d44ba303d57dd3e10f":"1683760000000000000000","136f4907cab41e27084b9845069ff2fd0c9ade79":"4000000000000000000000","3d89e505cb46e211a53f32f167a877bec87f4b0a":"25019000000000000000","57a852fdb9b1405bf53ccf9508f83299d3206c52":"2000000000000000000000","747abc9649056d3926044d28c3ad09ed17b67d70":"5000057000000000000000","5c29f9e9a523c1f8669448b55c48cbd47c25e610":"964320000000000000000","30a9da72574c51e7ee0904ba1f73a6b7b83b9b9d":"20200000000000000000","220e2b92c0f6c902b513d9f1e6fab6a8b0def3d7":"800000000000000000000","5af7c072b2c5acd71c76addcce535cf7f8f93585":"20000000000000000000","81556db27349ab8b27004944ed50a46e941a0f5f":"3998000000000000000000","987618c85656207c7bac1507c0ffefa2fb64b092":"64419000000000000000",e0f372347c96b55f7d4306034beb83266fd90966:"400000000000000000000","71784c105117c1f68935797fe159abc74e43d16a":"2001600000000000000000","9284f96ddb47b5186ee558aa31324df5361c0f73":"16000000000000000000000",a60c1209754f5d87b181da4f0817a81859ef9fd8:"50000000000000000000","5afda9405c8e9736514574da928de67456010918":"6008500000000000000000","6978696d5150a9a263513f8f74c696f8b1397cab":"6640000000000000000000",a9ad1926bc66bdb331588ea8193788534d982c98:"30000000000000000000000",e3f80b40fb83fb97bb0d5230af4f6ed59b1c7cc8:"1337000000000000000000",e207578e1f4ddb8ff6d5867b39582d71b9812ac5:"3880000000000000000000","86883d54cd3915e549095530f9ab1805e8c5432d":"4000000000000000000000","6974c8a414ceaefd3c2e4dfdbef430568d9a960b":"334250000000000000000","532d32b00f305bcc24dcef56817d622f34fb2c24":"1800000000000000000000","761f8a3a2af0a8bdbe1da009321fb29764eb62a1":"10000000000000000000000","4677b04e0343a32131fd6abb39b1b6156bba3d5b":"200000000000000000000",ef69781f32ffce33346f2c9ae3f08493f3e82f89:"18200000000000000000",e3b3d2c9bf570be6a2f72adca1862c310936a43c:"100100000000000000000",d19caf39bb377fdf2cf19bd4fb52591c2631a63c:"1000000000000000000000","5d68324bcb776d3ffd0bf9fea91d9f037fd6ab0f":"2000000000000000000000","1c99fe9bb6c6d1066d912099547fd1f4809eacd9":"2000000000000000000000",bbfe0a830cace87b7293993a7e9496ce64f8e394:"6000000000000000000000","26c0054b700d3a7c2dcbe275689d4f4cad16a335":"2000000000000000000000","7d7e7c61779adb7706c94d32409a2bb4e994bf60":"865992000000000000000",d037d215d11d1df3d54fbd321cd295c5465e273b:"1400000000000000000000","08166f02313feae18bb044e7877c808b55b5bf58":"1970000000000000000000","781b1501647a2e06c0ed43ff197fccec35e1700b":"3000000000000000000000","74316adf25378c10f576d5b41a6f47fa98fce33d":"336082000000000000000","44e2fdc679e6bee01e93ef4a3ab1bcce012abc7c":"410231000000000000000","178eaf6b8554c45dfde16b78ce0c157f2ee31351":"320000000000000000000",cf923a5d8fbc3d01aa079d1cfe4b43ce071b1611:"2000000000000000000000","0c28847e4f09dfce5f9b25af7c4e530f59c880fe":"1000000000000000000000","54ce88275956def5f9458e3b95decacd484021a0":"2000000000000000000000","9d4213339a01551861764c87a93ce8f85f87959a":"200000000000000000000",e559b5fd337b9c5572a9bf9e0f2521f7d446dbe4:"200000000000000000000",dcb03bfa6c1131234e56b7ea7c4f721487546b7a:"1337000000000000000000",db6ff71b3db0928f839e05a7323bfb57d29c87aa:"910000000000000000000",eb7c202b462b7cc5855d7484755f6e26ef43a115:"2000000000000000000000","323486ca64b375474fb2b759a9e7a135859bd9f6":"400000000000000000000","2c1df8a76f48f6b54bcf9caf56f0ee1cf57ab33d":"10118000000000000000000","2cd87866568dd81ad47d9d3ad0846e5a65507373":"400000000000000000000","8566610901aace38b83244f3a9c831306a67b9dc":"3256000000000000000000","1c257ad4a55105ea3b58ed374b198da266c85f63":"10000000000000000000000",cf4f1138f1bd6bf5b6d485cce4c1017fcb85f07d:"882038000000000000000",c934becaf71f225f8b4a4bf7b197f4ac9630345c:"20000000000000000000000","1e2bf4ba8e5ef18d37de6d6ad636c4cae489d0cc":"2000000000000000000000","9d78a975b7db5e4d8e28845cfbe7e31401be0dd9":"1340000000000000000000","16aa52cb0b554723e7060f21f327b0a68315fea3":"250000000000000000000","97e28973b860c567402800fbb63ce39a048a3d79":"97000000000000000000","4ac5acad000b8877214cb1ae00eac9a37d59a0fd":"4000000000000000000000","01226e0ad8d62277b162621c62c928e96e0b9a8c":"2000000000000000000000","479abf2da4d58716fd973a0d13a75f530150260a":"20000000000000000000","31d81d526c195e3f10b5c6db52b5e59afbe0a995":"264000000000000000000","749087ac0f5a97c6fad021538bf1d6cda18e0daa":"1000000000000000000000","1565af837ef3b0bd4e2b23568d5023cd34b16498":"393284000000000000000","997d6592a31589acc31b9901fbeb3cc3d65b3215":"2000000000000000000000","9d207517422cc0d60de7c237097a4d4fce20940c":"500000000000000000000","24b8b446debd1947955dd084f2c544933346d3ad":"4324135000000000000000","107a03cf0842dbdeb0618fb587ca69189ec92ff5":"1970000000000000000000","7f603aec1759ea5f07c7f8d41a1428fbbaf9e762":"20000000000000000000","53a244672895480f4a2b1cdf7da5e5a242ec4dbc":"1000000000000000000000","7db4c7d5b797e9296e6382f203693db409449d62":"400000000000000000000","2ae82dab92a66389eea1abb901d1d57f5a7cca0b":"2000000000000000000000","16bc40215abbd9ae5d280b95b8010b4514ff1292":"200000000000000000000",bba4fac3c42039d828e742cde0efffe774941b39:"1999946000000000000000","5431ca427e6165a644bae326bd09750a178c650d":"2000000000000000000000",dcf33965531380163168fc11f67e89c6f1bc178a:"334885000000000000000","65fd02d704a12a4dace9471b0645f962a89671c8":"28615000000000000000","135d1719bf03e3f866312479fe338118cd387e70":"2000000000000000000000",f3159866c2bc86bba40f9d73bb99f1eee57bb9d7:"1000000000000000000000",e3a4621b66004588e31206f718cb00a319889cf0:"2000000000000000000000",abcdbc8f1dd13af578d4a4774a62182bedf9f9be:"36660000000000000000","9fbe066de57236dc830725d32a02aef9246c6c5e":"2000000000000000000000","81cfad760913d3c322fcc77b49c2ae3907e74f6e":"197000000000000000000","0ab59d390702c9c059db148eb4f3fcfa7d04c7e7":"18200000000000000000","2c2db28c3309375eea3c6d72cd6d0eec145afcc0":"2000000000000000000000","08306de51981e7aca1856859b7c778696a6b69f9":"3200000000000000000000",f814799f6ddf4dcb29c7ee870e75f9cc2d35326d:"1000000000000000000000",ee867d20916bd2e9c9ece08aa04385db667c912e:"50000000000000000000000","97a86f01ce3f7cfd4441330e1c9b19e1b10606ef":"2000000000000000000000","4c759813ad1386bed27ffae9e4815e3630cca312":"2000000000000000000000","8f226096c184ebb40105e08dac4d22e1c2d54d30":"306552000000000000000","13acada8980affc7504921be84eb4944c8fbb2bd":"1601600000000000000000","122dcfd81addb97d1a0e4925c4b549806e9f3beb":"1514954000000000000000","232f525d55859b7d4e608d20487faadb00293135":"4000000000000000000000","6f7ac681d45e418fce8b3a1db5bc3be6f06c9849":"2000000000000000000000","0c8692eeff2a53d6d1688ed56a9ddbbd68dabba1":"2000000000000000000000","6a6337833f8f6a6bf10ca7ec21aa810ed444f4cb":"1028200000000000000000","209377b6ad3fe101c9685b3576545c6b1684e73c":"1820000000000000000000","560fc08d079f047ed8d7df75551aa53501f57013":"7600000000000000000000","8e78f351457d016f4ad2755ec7424e5c21ba6d51":"146000000000000000000","2ce11a92fad024ff2b3e87e3b542e6c60dcbd996":"4000000000000000000000","8ab839aeaf2ad37cb78bacbbb633bcc5c099dc46":"2000000000000000000000","673144f0ec142e770f4834fee0ee311832f3087b":"500038000000000000000",ba8a63f3f40de4a88388bc50212fea8e064fbb86:"2000000000000000000000",ee899b02cbcb3939cd61de1342d50482abb68532:"1760000000000000000000",c2d9eedbc9019263d9d16cc5ae072d1d3dd9db03:"20000000000000000000000","355c0c39f5d5700b41d375b3f17851dcd52401f9":"3979000000000000000000","8179c80970182cc5b7d82a4df06ea94db63a25f3":"727432000000000000000",b388b5dfecd2c5e4b596577c642556dbfe277855:"20000000000000000000",a9e28337e6357193d9e2cb236b01be44b81427df:"2200000000000000000000","04ba4bb87140022c214a6fac42db5a16dd954045":"1000000000000000000000","67c926093e9b8927933810d98222d62e2b8206bb":"1910000000000000000000",ed7346766e1a676d0d06ec821867a276a083bf31:"4012890000000000000000","92558226b384626cad48e09d966bf1395ee7ea5d":"334250000000000000000",bdf693f833c3fe471753184788eb4bfe4adc3f96:"1970000000000000000000","4474299d0ee090dc90789a1486489c3d0d645e6d":"1000000000000000000000",b1178ad47383c31c8134a1941cbcd474d06244e2:"1000000000000000000000","979d681c617da16f21bcaca101ed16ed015ab696":"1880000000000000000000","6b20c080606a79c73bd8e75b11717a4e8db3f1c3":"299720000000000000000",b85218f342f8012eda9f274e63ce2152b2dcfdab:"3100000000000000000000","530b61e42f39426d2408d40852b9e34ab5ebebc5":"267400000000000000000","76afc225f4fa307de484552bbe1d9d3f15074c4a":"2998800000000000000000","1e783e522ab7df0acaac9eeed3593039e5ac7579":"203435800000000000000000","0f7bf6373f771a4601762c4dae5fbbf4fedd9cc9":"2000000000000000000000","7a8797690ab77b5470bf7c0c1bba612508e1ac7d":"8865000000000000000000","2a2ab6b74c7af1d9476bb5bcb4524797bedc3552":"1000000000000000000000","523e140dc811b186dee5d6c88bf68e90b8e096fd":"2000000000000000000000",ea8168fbf225e786459ca6bb18d963d26b505309:"500000000000000000000","20ff3ede8cadb5c37b48cb14580fb65e23090a7b":"42000000000000000000000",e482d255ede56b04c3e8df151f56e9ca62aaa8c2:"500000000000000000000","2e0880a34596230720f05ac8f065af8681dcb6c2":"100000000000000000000000",c674f28c8afd073f8b799691b2f0584df942e844:"2000000000000000000000",b646df98b49442746b61525c81a3b04ba3106250:"1970000000000000000000",d55c1c8dfbe1e02cacbca60fdbdd405b09f0b75f:"2000000000000000000000","65ebaed27edb9dcc1957aee5f452ac2105a65c0e":"43531987000000000000000",f079e1b1265f50e8c8a98ec0c7815eb3aeac9eb4:"20094000000000000000","867eba56748a5904350d2ca2a5ce9ca00b670a9b":"20000000000000000000000","51ee0cca3bcb10cd3e983722ced8493d926c0866":"999972000000000000000","88d541c840ce43cefbaf6d19af6b9859b573c145":"170000000000000000000",f851b010f633c40af1a8f06a73ebbaab65077ab5:"4400000000000000000000",e0aa69365555b73f282333d1e30c1bbd072854e8:"7000000000000000000000",c7b1c83e63203f9547263ef6282e7da33b6ed659:"18200000000000000000",af06f5fa6d1214ec43967d1bd4dde74ab814a938:"88000000000000000000","991173601947c2084a62d639527e961512579af9":"600000000000000000000","7a381122bada791a7ab1f6037dac80432753baad":"10000000000000000000000",e766f34ff16f3cfcc97321721f43ddf5a38b0cf4:"1550000000000000000000",d785a8f18c38b9bc4ffb9b8fa8c7727bd642ee1c:"1000000000000000000000",aebd4f205de799b64b3564b256d42a711d37ef99:"1177100000000000000000",a2fa17c0fb506ce494008b9557841c3f641b8cae:"20000000000000000000",a8aca748f9d312ec747f8b6578142694c7e9f399:"2000000000000000000000","950c68a40988154d2393fff8da7ccda99614f72c":"4597943000000000000000","075d15e2d33d8b4fa7dba8b9e607f04a261e340b":"1910000000000000000000","3616d448985f5d32aefa8b93a993e094bd854986":"205400000000000000000","4bb9655cfb2a36ea7c637a7b859b4a3154e26ebe":"16000000000000000000000","84949dba559a63bfc845ded06e9f2d9b7f11ef24":"2000000000000000000000","937563d8a80fd5a537b0e66d20a02525d5d88660":"2500000000000000000000",b183ebee4fcb42c220e47774f59d6c54d5e32ab1:"1604266000000000000000","21e5d77320304c201c1e53b261a123d0a1063e81":"86972000000000000000",fa14b566234abee73042c31d21717182cba14aa1:"328000000000000000000","2da617695009cc57d26ad490b32a5dfbeb934e5e":"20000000000000000000000","3326b88de806184454c40b27f309d9dd6dcfb978":"17900000000000000000000","95e6a54b2d5f67a24a4875af75107ca7ea9fd2fa":"1337000000000000000000","8db58e406e202df9bc703c480bd8ed248d52a032":"2000000000000000000000",f777361a3dd8ab62e5f1b9b047568cc0b555704c:"1000000000000000000000","83a93b5ba41bf88720e415790cdc0b67b4af34c4":"200000000000000000000","8a1cc5ac111c49bfcfd848f37dd768aa65c88802":"10000000000000000000000","52214378b54004056a7cc08c891327798ac6b248":"15200000000000000000000",ad80d865b85c34d2e6494b2e7aefea6b9af184db:"4000000000000000000000",e7d6240620f42c5edbb2ede6aec43da4ed9b5757:"1000000000000000000000",d0e35e047646e759f4517093d6408642517f084d:"3939507000000000000000","9340345ca6a3eabdb77363f2586043f29438ce0b":"530922000000000000000","6640ccf053555c130ae2b656647ea6e31637b9ab":"1970000000000000000000","184d86f3466ae6683b19729982e7a7e1a48347b2":"10000000000000000000000","84ec06f24700fe42414cb9897c154c88de2f6132":"1337000000000000000000",d1e5e234a9f44266a4a6241a84d7a1a55ad5a7fe:"20000000000000000000000",e8a9a41740f44f54c3688b53e1ddd42e43c9fe94:"4000000000000000000000","6e3a51db743d334d2fe88224b5fe7c008e80e624":"106000000000000000000","3e94df5313fa520570ef232bc3311d5f622ff183":"2000000000000000000000","8957727e72cf629020f4e05edf799aa7458062d0":"2200000000000000000000",cf5e0eacd1b39d0655f2f77535ef6608eb950ba0:"2000000000000000000000",f4aaa3a6163e3706577b49c0767e948a681e16ee:"2000000000000000000000","97f1fe4c8083e596212a187728dd5cf80a31bec5":"20000000000000000000","57d5fd0e3d3049330ffcdcd020456917657ba2da":"1991240000000000000000","49bdbc7ba5abebb6389e91a3285220d3451bd253":"1000000000000000000000",ae126b382cf257fad7f0bc7d16297e54cc7267da:"300000000000000000000",bbf8616d97724af3def165d0e28cda89b800009a:"114063000000000000000",adb948b1b6fefe207de65e9bbc2de98e605d0b57:"2000000000000000000000","8a217db38bc35f215fd92906be42436fe7e6ed19":"6000000000000000000000",e28b062259e96eeb3c8d4104943f9eb325893cf5:"1337000000000000000000","6a6b18a45a76467e2e5d5a2ef911c3e12929857b":"82000000000000000000000",cb68ae5abe02dcf8cbc5aa719c25814651af8b85:"500000000000000000000","4c7e2e2b77ad0cd6f44acb2861f0fb8b28750ef9":"20000000000000000000","58ba1569650e5bbbb21d35d3e175c0d6b0c651a9":"500000000000000000000","1eb4bf73156a82a0a6822080c6edf49c469af8b9":"1910000000000000000000","4103299671d46763978fa4aa19ee34b1fc952784":"200000000000000000000",e321bb4a946adafdade4571fb15c0043d39ee35f:"1575212000000000000000","893608751d68d046e85802926673cdf2f57f7cb8":"19700000000000000000","70fee08b00c6c2c04a3c625c1ff77caf1c32df01":"200000000000000000000","7b0fea1176d52159333a143c294943da36bbddb4":"9380000000000000000000",d331c823825a9e5263d052d8915d4dcde07a5c37:"564000000000000000000",a45432a6f2ac9d56577b938a37fabac8cc7c461c:"1000000000000000000000","764fc46d428b6dbc228a0f5f55c9508c772eab9f":"26000000000000000000000","1a95a8a8082e4652e4170df9271cb4bb4305f0b2":"50000000000000000000","08c9f1bfb689fdf804d769f82123360215aff93b":"1970000000000000000000","1572cdfab72a01ce968e78f5b5448da29853fbdd":"5061500000000000000000","379c7166849bc24a02d6535e2def13daeef8aa8d":"100000000000000000000",e0a254ac09b9725bebc8e460431dd0732ebcabbf:"6000000000000000000000","3225c1ca5f2a9c88156bb7d9cdc44a326653c214":"400000000000000000000","84686c7bad762c54b667d59f90943cd14d117a26":"20000000000000000000","3d5a8b2b80be8b35d8ecf789b5ed7a0775c5076c":"20000000000000000000","2ccf80e21898125eb4e807cd82e09b9d28592f6e":"2000000000000000000000",dde969aef34ea87ac299b7597e292b4a0155cc8a:"298819000000000000000","19e94e620050aad766b9e1bad931238312d4bf49":"2396000000000000000000","959f57fded6ae37913d900b81e5f48a79322c627":"255599000000000000000",b9b0a3219a3288d9b35b091b14650b8fe23dce2b:"14000000000000000000000","3575c770668a9d179f1ef768c293f80166e2aa3d":"474000000000000000000","58f05b262560503ca761c61890a4035f4c737280":"8000000000000000000000","3286d1bc657a312c8847d93cb3cb7950f2b0c6e3":"20000000000000000000000","1d9e6aaf8019a05f230e5def05af5d889bd4d0f2":"133700000000000000000",a375b4bc24a24e1f797593cc302b2f331063fa5c:"200000000000000000000","108ba7c2895c50e072dc6f964932d50c282d3034":"500000000000000000000",b6b34a263f10c3d2eceb0acc559a7b2ab85ce565:"4000000000000000000000",a4d2b429f1ad5349e31704969edc5f25ee8aca10:"10000000000000000000000","674adb21df4c98c7a347ac4c3c24266757dd7039":"2000000000000000000000","33565ba9da2c03e778ce12294f081dfe81064d24":"16000000000000000000000","4ddda7586b2237b053a7f3289cf460dc57d37a09":"10000000000000000000000",cc4faac00be6628f92ef6b8cb1b1e76aac81fa18:"205410000000000000000","5f99dc8e49e61d57daef606acdd91b4d7007326a":"3000000000000000000000",b8a979352759ba09e35aa5935df175bff678a108:"20000000000000000000","86fff220e59305c09f483860d6f94e96fbe32f57":"42900000000000000000","03e8b084537557e709eae2e1e1a5a6bce1ef8314":"20000000000000000000",dda4ff7de491c687df4574dd1b17ff8f246ba3d1:"19600000000000000000000","2538532936813c91e653284f017c80c3b8f8a36f":"2002000000000000000000","5a82f96cd4b7e2d93d10f3185dc8f43d4b75aa69":"1999400000000000000000","86740a46648e845a5d96461b18091ff57be8a16f":"98000000000000000000000","7e3f63e13129a221ba1ab06326342cd98b5126ae":"1597960000000000000000","1f5f3b34bd134b2781afe5a0424ac5846cdefd11":"99000000000000000000", -"39936c2719450b9420cc2522cf91db01f227c1c1":"500000000000000000000","967076a877b18ec15a415bb116f06ef32645dba3":"2000000000000000000000",a42908e7fe53980a9abf4044e957a54b70e99cbe:"2000000000000000000000","5eb371c407406c427b3b7de271ad3c1e04269579":"3000000000000000000000",a570223ae3caa851418a9843a1ac55db4824f4fd:"200000000000000000000","764692cccb33405dd0ab0c3379b49caf8e6221ba":"20000000000000000000",a365918bfe3f2627b9f3a86775d8756e0fd8a94b:"400000000000000000000","069ed0ab7aa77de571f16106051d92afe195f2d0":"200000000000000000000",bd432a3916249b4724293af9146e49b8280a7f2a:"4000000000000000000000","61c9dce8b2981cb40e98b0402bc3eb28348f03ac":"196910000000000000000","8f1fcc3c51e252b693bc5b0ec3f63529fe69281e":"6000000000000000000000","55fd08d18064bd202c0ec3d2cce0ce0b9d169c4d":"1970000000000000000000","383a7c899ee18bc214969870bc7482f6d8f3570e":"10000000000000000000000",b14cc8de33d6338236539a489020ce4655a32bc6:"8000000000000000000000","448bf410ad9bbc2fecc4508d87a7fc2e4b8561ad":"199955000000000000000","06f7dc8d1b9462cef6feb13368a7e3974b097f9f":"2000000000000000000000","9c9f89a3910f6a2ae8a91047a17ab788bddec170":"10000000000000000000000","5de598aba344378cab4431555b4f79992dc290c6":"1337000000000000000000","87e6034ecf23f8b5639d5f0ea70a22538a920423":"328000000000000000000","8b27392206b958cd375d7ef8af2cf8ef0598c0bc":"1000000000000000000000","49136fe6e28b7453fcb16b6bbbe9aaacba8337fd":"2000000000000000000000","6982fe8a867e93eb4a0bd051589399f2ec9a5292":"2000000000000000000000","9fd1052a60506bd1a9ef003afd9d033c267d8e99":"1000000000000000000000",d38fa2c4cc147ad06ad5a2f75579281f22a7cc1f:"20000000000000000000000","6f794dbdf623daa6e0d00774ad6962737c921ea4":"2000000000000000000000",e96b184e1f0f54924ac874f60bbf44707446b72b:"2910840000000000000000",b5ba29917c78a1d9e5c5c713666c1e411d7f693a:"3100000000000000000000","81d619ff5726f2405f12904c72eb1e24a0aaee4f":"20000000000000000000000",b02fa29387ec12e37f6922ac4ce98c5b09e0b00f:"2000000000000000000000",b7230d1d1ff2aca366963914a79df9f7c5ea2c98:"8000000000000000000000","7b4007c45e5a573fdbb6f8bd746bf94ad04a3c26":"15202564000000000000000","8d9a0c70d2262042df1017d6c303132024772712":"2000000000000000000000","323aad41df4b6fc8fece8c93958aa901fa680843":"970000000000000000000",db04fad9c49f9e880beb8fcf1d3a3890e4b3846f:"1242482000000000000000","27824666d278d70423f03dfe1dc7a3f02f43e2b5":"1000070000000000000000",e04920dc6ecc1d6ecc084f88aa0af5db97bf893a:"182000000000000000000",b0c1b177a220e41f7c74d07cde8569c21c75c2f9:"5600000000000000000000","7864dc999fe4f8e003c0f43decc39aae1522dc0f":"94400000000000000000",c75c37ce2da06bbc40081159c6ba0f976e3993b1:"1078640000000000000000","179a825e0f1f6e985309668465cffed436f6aea9":"20000000000000000000","2c6b699d9ead349f067f45711a074a641db6a897":"20000000000000000000","068ce8bd6e902a45cb83b51541b40f39c4469712":"5240000000000000000000","767ac690791c2e23451089fe6c7083fe55deb62b":"820000000000000000000",b34f04b8db65bba9c26efc4ce6efc50481f3d65d:"20000000000000000000000","29aef48de8c9fbad4b9e4ca970797a5533eb722d":"10000000000000000000000","0a0ecda6636f7716ef1973614687fd89a820a706":"394000000000000000000",b32825d5f3db249ef4e85cc4f33153958976e8bc:"501375000000000000000","7ef16fd8d15b378a0fba306b8d03dd98fc92619f":"700000000000000000000",b58b52865ea55d8036f2fab26098b352ca837e18:"18200000000000000000","9b658fb361e046d4fcaa8aef6d02a99111223625":"2000000000000000000000",b2a498f03bd7178bd8a789a00f5237af79a3e3f8:"19400000000000000000000",cb48fe8265d9af55eb7006bc335645b0a3a183be:"3000000000000000000000","3cf9a1d465e78b7039e3694478e2627b36fcd141":"1372000000000000000000","5db84400570069a9573cab04b4e6b69535e202b8":"9700000000000000000000","214c89c5bd8e7d22bc574bb35e48950211c6f776":"18903000000000000000","53396f4a26c2b4604496306c5442e7fcba272e36":"20055000000000000000000","720994dbe56a3a95929774e20e1fe525cf3704e4":"8000000000000000000000","3571cf7ad304ecaee595792f4bbfa484418549d6":"5825500000000000000000","6042c644bae2b96f25f94d31f678c90dc96690db":"2000000000000000000000","2e24b597873bb141bdb237ea8a5ab747799af02d":"20000000000000000000000","08c802f87758349fa03e6bc2e2fd0791197eea9a":"2000000000000000000000","297a88921b5fca10e5bb9ded60025437ae221694":"200000000000000000000",aee49d68adedb081fd43705a5f78c778fb90de48:"20000000000000000000","4cee901b4ac8b156c5e2f8a6f1bef572a7dceb7e":"1000000000000000000000",dfaf31e622c03d9e18a0ddb8be60fbe3e661be0a:"9999800000000000000000","00aa5381b2138ebeffc191d5d8c391753b7098d2":"990049000000000000000","5b4c0c60f10ed2894bdb42d9dd1d210587810a0d":"500000000000000000000",c44f4ab5bc60397c737eb0683391b633f83c48fa:"1000000000000000000000","50bef2756248f9a7a380f91b051ba3be28a649ed":"1999884000000000000000","1bd909ac0d4a1102ec98dcf2cca96a0adcd7a951":"20055000000000000000","9ec03e02e587b7769def538413e97f7e55be71d8":"19700000000000000000000","9874803fe1f3a0365e7922b14270eaeb032cc1b5":"1124500000000000000000","4e2310191ead8d3bc6489873a5f0c2ec6b87e1be":"1000000000000000000000","93678a3c57151aeb68efdc43ef4d36cb59a009f3":"30060000000000000000",f483f607a21fcc28100a018c568ffbe140380410:"1000000000000000000000","2a91a9fed41b7d0e5cd2d83158d3e8a41a9a2d71":"1940000000000000000000","240e559e274aaef0c258998c979f671d1173b88b":"4000000000000000000000","108a2b7c336f784779d8b54d02a8d31d9a139c0a":"10000000000000000000000","9c98fdf1fdcd8ba8f4c5b04c3ae8587efdf0f6e6":"6000000000000000000000","194ff44aefc17bd20efd7a204c47d1620c86db5d":"2999400000000000000000","1f8116bd0af5570eaf0c56c49c7ab5e37a580458":"2000000000000000000000",d79835e404fb86bf845fba090d6ba25e0c8866a6:"2400000000000000000000",a8e7201ff619faffc332e6ad37ed41e301bf014a:"600000000000000000000","286906b6bd4972e3c71655e04baf36260c7cb153":"340000000000000000000",db4bc83b0e6baadb1156c5cf06e0f721808c52c7:"880000000000000000000",a158148a2e0f3e92dc2ce38febc20107e3253c96:"2000000000000000000000","9f6a322a6d469981426ae844865d7ee0bb15c7b3":"50003000000000000000","32f29e8727a74c6b4301e3ffff0687c1b870dae9":"1000000000000000000000","19918aa09e7d494e98ffa5db50350892f7156ac6":"10000000000000000000000","5a5f8508da0ebebb90be9033bd4d9e274105ae00":"6685000000000000000000","6fc25e7e00ca4f60a9fe6f28d1fde3542e2d1079":"792000000000000000000","72094f3951ffc9771dced23ada080bcaf9c7cca7":"6000000000000000000000","43f7e86e381ec51ec4906d1476cba97a3db584e4":"1000000000000000000000","05696b73916bd3033e05521e3211dfec026e98e4":"2000000000000000000000","5e7f70378775589fc66a81d3f653e954f55560eb":"2434000000000000000000","895613236f3584216ad75c5d3e07e3fa6863a778":"2000000000000000000000","4eb1454b573805c8aca37edec7149a41f61202f4":"300000000000000000000",d99999a2490d9494a530cae4daf38554f4dd633e:"120000000000000000000","1704cefcfb1331ec7a78388b29393e85c1af7916":"400000000000000000000",ac4acfc36ed6094a27e118ecc911cd473e8fb91f:"1799800000000000000000",a975b077fcb4cc8efcbf838459b6fa243a4159d6:"40000000000000000000","9c405cf697956138065e11c5f7559e67245bd1a5":"200000000000000000000",cafde855864c2598da3cafc05ad98df2898e8048:"14179272000000000000000","8ef711e43a13918f1303e81d0ea78c9eefd67eb2":"4000000000000000000000","0b14891999a65c9ef73308efe3100ca1b20e8192":"800000000000000000000","47cf9cdaf92fc999cc5efbb7203c61e4f1cdd4c3":"131400000000000000000","04ba8a3f03f08b895095994dda619edaacee3e7a":"2000000000000000000000","02b6d65cb00b7b36e1fb5ed3632c4cb20a894130":"20000000000000000000000",f99aee444b5783c093cfffd1c4632cf93c6f050c:"400000000000000000000","2541314a0b408e95a694444977712a50713591ab":"1634706000000000000000","3096dca34108085bcf04ae72b94574a13e1a3e1d":"200000000000000000000","56df05bad46c3f00ae476ecf017bb8c877383ff1":"197248000000000000000","6d59b21cd0e2748804d9abe064eac2bef0c95f27":"2000000000000000000000",b29f5b7c1930d9f97a115e067066f0b54db44b3b:"1000000000000000000000","888c16144933197cac26504dd76e06fd6600c789":"100000000000000000000",dfe3c52a92c30396a4e33a50170dc900fcf8c9cf:"50000000000000000000",f76f69cee4faa0a63b30ae1e7881f4f715657010:"200000000000000000000",ee0007b0960d00908a94432a737557876aac7c31:"53053000000000000000",effc15e487b1beda0a8d1325bdb4172240dc540a:"64940000000000000000","40ab0a3e83d0c8ac9366910520eab1772bac3b1a":"976600000000000000000","1895a0eb4a4372722fcbc5afe6936f289c88a419":"910000000000000000000","81efe296ae76c860d1c5fbd33d47e8ce9996d157":"1000000000000000000000","9ddd355e634ee9927e4b7f6c97e7bf3a2f1e687a":"50000000000000000000",f2b4ab2c9427a9015ef6eefff5edb60139b719d1:"716800000000000000000","765be2e12f629e6349b97d21b62a17b7c830edab":"6000000000000000000000",ff61c9c1b7a3d8b53bba20b34466544b7b216644:"2000000000000000000000","36a08fd6fd1ac17ce15ed57eefb12a2be28188bf":"1337000000000000000000","17049311101d817efb1d65910f663662a699c98c":"1999800000000000000000","30511832918d8034a7bee72ef2bfee440ecbbcf6":"16100000000000000000000",d27c234ff7accace3d996708f8f9b04970f97d36:"1337000000000000000000",a961171f5342b173dd70e7bfe5b5ca238b13bcdd:"3397053000000000000000","30bf61b2d877fe10635126326fa189e4b0b1c3b0":"1027580000000000000000","4bb6d86b8314c22d8d37ea516d0019f156aae12d":"1000000000000000000000","5f363e0ab747e02d1b3b66abb69ea53c7baf523a":"11640000000000000000000","283e11203749b1fa4f32febb71e49d135919382a":"1000000000000000000000",ac5999a89d2dd286d5a80c6dee7e86aad40f9e12:"3880000000000000000000","3f6dd3650ee428dcb7759553b017a96a94286ac9":"1337000000000000000000",b3fc1d6881abfcb8becc0bb021b8b73b7233dd91:"50000000000000000000",f0832a6bb25503eeca435be31b0bf905ca1fcf57:"6685000000000000000000","9d7fda7070bf3ee9bbd9a41f55cad4854ae6c22c":"11027380000000000000000","4b0bd8acfcbc53a6010b40d4d08ddd2d9d69622d":"668500000000000000000",f3b668b3f14d920ebc379092db98031b67b219b3:"199955000000000000000",d91d889164479ce436ece51763e22cda19b22d6b:"3365200000000000000000",ffe28db53c9044b4ecd4053fd1b4b10d7056c688:"100000000000000000000",c77b01a6e911fa988d01a3ab33646beef9c138f3:"721400000000000000000",c0064f1d9474ab915d56906c9fb320a2c7098c9b:"358000000000000000000","4e3edad4864dab64cae4c5417a76774053dc6432":"590943000000000000000","71d2cc6d02578c65f73c575e76ce8fbcfadcf356":"72400000000000000000","9971df60f0ae66dce9e8c84e17149f09f9c52f64":"200000000000000000000","58e661d0ba73d6cf24099a5562b808f7b3673b68":"2000000000000000000000","84b0ee6bb837d3a4c4c5011c3a228c0edab4634a":"20000000000000000000","84375afbf59b3a1d61a1be32d075e0e15a4fbca5":"200000000000000000000","9ae9476bfecd3591964dd325cf8c2a24faed82c1":"4000000000000000000000","6a4c8907b600248057b1e46354b19bdc859c991a":"20000000000000000000","1c045649cd53dc23541f8ed4d341812808d5dd9c":"7000000000000000000000",c5e488cf2b5677933971f64cb8202dd05752a2c0:"1000000000000000000000",eb25481fcd9c221f1ac7e5fd1ecd9307a16215b8:"197000000000000000000",a61887818f914a20e31077290b83715a6b2d6ef9:"1880000000000000000000","679437eacf437878dc293d48a39c87b7421a216c":"64528000000000000000","331a1c26cc6994cdd3c14bece276ffff4b9df77c":"18049000000000000000","75b95696e8ec4510d56868a7c1a735c68b244890":"6400000000000000000000",a77f3ee19e9388bbbb2215c62397b96560132360:"200000000000000000000",bc7afc8477412274fc265df13c054473427d43c6:"130034000000000000000","91050a5cffadedb4bb6eaafbc9e5013428e96c80":"1700000000000000000000","24586ec5451735eeaaeb470dc8736aae752f82e5":"17600000000000000000","51039377eed0c573f986c5e8a95fb99a59e9330f":"1970000000000000000000",fbb161fe875f09290a4b262bc60110848f0d2226:"2000000000000000000000",ed52a2cc0869dc9e9f842bd0957c47a8e9b0c9ff:"9550000000000000000000",bad235d5085dc7b068a67c412677b03e1836884c:"2000000000000000000000","055eac4f1ad3f58f0bd024d68ea60dbe01c6afb3":"100000000000000000000","4058808816fdaa3a5fc98ed47cfae6c18315422e":"199800000000000000000","3540c7bd7a8442d5bee21a2180a1c4edff1649e0":"1239295000000000000000",c5edbbd2ca0357654ad0ea4793f8c5cecd30e254:"6000000000000000000000",b5906b0ae9a28158e8ac550e39da086ee3157623:"200000000000000000000","4d801093c19ca9b8f342e33cc9c77bbd4c8312cf":"345005000000000000000","206482ee6f138a778fe1ad62b180ce856fbb23e6":"2000000000000000000000",c0ed0d4ad10de03435b153a0fc25de3b93f45204:"3160000000000000000000","29e67990e1b6d52e1055ffe049c53195a81542cf":"20000000000000000000000",e6d22209ffd0b87509ade3a8e2ef429879cb89b5:"17260000000000000000000",d6644d40e90bc97fe7dfe7cabd3269fd579ba4b3:"159000000000000000000",ece1290877b583e361a2d41b009346e6274e2538:"300000000000000000000",ab3861226ffec1289187fb84a08ec3ed043264e8:"1000000000000000000000","60e0bdd0a259bb9cb09d3f37e5cd8b9daceabf8a":"1370000000000000000000","28b77585cb3d55a199ab291d3a18c68fe89a848a":"1960000000000000000000","73128173489528012e76b41a5e28c68ba4e3a9d4":"1000000000000000000000","018492488ba1a292342247b31855a55905fef269":"140000000000000000000","0bb54c72fd6610bfa4363397e020384b022b0c49":"1337000000000000000000","520f66a0e2657ff0ac4195f2f064cf2fa4b24250":"40000000000000000000",a1432ed2c6b7777a88e8d46d388e70477f208ca5:"7999538000000000000000","149ba10f0da2725dc704733e87f5a524ca88515e":"7880000000000000000000",b287f7f8d8c3872c1b586bcd7d0aedbf7e732732:"20000000000000000000",c46bbdef76d4ca60d316c07f5d1a780e3b165f7e:"2000000000000000000000",b5a589dd9f4071dbb6fba89b3f5d5dae7d96c163:"2000000000000000000000",d218efb4db981cdd6a797f4bd48c7c26293ceb40:"2975000000000000000000",af87d2371ef378957fbd05ba2f1d66931b01e2b8:"700000000000000000000","86ef6426211949cc37f4c75e7850369d0cf5f479":"13399196000000000000000",fb3a0b0d6b6a718f6fc0292a825dc9247a90a5d0:"199950000000000000000",da16dd5c3d1a2714358fe3752cae53dbab2be98c:"19400000000000000000000","9eb7834e171d41e069a77947fca87622f0ba4e48":"100000000000000000000",e1d91b0954cede221d6f24c7985fc59965fb98b8:"2000000000000000000000","85d0d88754ac84b8b21ba93dd2bfec72626faba8":"1000000000000000000000","695b4cce085856d9e1f9ff3e79942023359e5fbc":"5000000000000000000000","9156d18029350e470408f15f1aa3be9f040a67c6":"1000000000000000000000",a9d64b4f3bb7850722b58b478ba691375e224e42:"6000000000000000000000","17e4a0e52bac3ee44efe0954e753d4b85d644e05":"2000000000000000000000",b8a79c84945e47a9c3438683d6b5842cff7684b1:"2000000000000000000000",cfac2e1bf33205b05533691a02267ee19cd81836:"1000000000000000000000","6b992521ec852370848ad697cc2df64e63cc06ff":"1000000000000000000000","60af0ee118443c9b37d2fead77f5e521debe1573":"1910000000000000000000",c6dbdb9efd5ec1b3786e0671eb2279b253f215ed:"1000000000000000000000","659c0a72c767a3a65ced0e1ca885a4c51fd9b779":"2000000000000000000000",ed1276513b6fc68628a74185c2e20cbbca7817bf:"191000000000000000000","5ad12c5ed4fa827e2150cfa0d68c0aa37b1769b8":"800000000000000000000","17c0fef6986cfb2e4041f9979d9940b69dff3de2":"4000000000000000000000",ca98c7988efa08e925ef9c9945520326e9f43b99:"4000000000000000000000",fe8f1fdcab7fbec9a6a3fcc507619600505c36a3:"19700000000000000000","4420aa35465be617ad2498f370de0a3cc4d230af":"2000000000000000000000","8232d1f9742edf8dd927da353b2ae7b4cbce7592":"668500000000000000000",eca5f58792b8c62d2af556717ee3ee3028be4dce:"2000000000000000000000","6bf86f1e2f2b8032a95c4d7738a109d3d0ed8104":"1820000000000000000000","3ac2f0ff1612e4a1c346d53382abf6d8a25baa53":"2000000000000000000000",daa1bd7a9148fb865cd612dd35f162861d0f3bdc:"3066243000000000000000","5169c60aee4ceed1849ab36d664cff97061e8ea8":"3000000000000000000000","2a5e3a40d2cd0325766de73a3d671896b362c73b":"100000000000000000000000",a83382b6e15267974a8550b98f7176c1a353f9be:"3541608000000000000000",b50c149a1906fad2786ffb135aab501737e9e56f:"388000000000000000000",d9775965b716476675a8d513eb14bbf7b07cd14a:"5076200000000000000000","66662006015c1f8e3ccfcaebc8ee6807ee196303":"500024000000000000000","78746a958dced4c764f876508c414a68342cecb9":"50600000000000000000",e982e6f28c548f5f96f45e63f7ab708724f53fa1:"396238000000000000000","740bfd52e01667a3419b029a1b8e45576a86a2db":"16800000000000000000000","2bd252e0d732ff1d7c78f0a02e6cb25423cf1b1a":"2674000000000000000000","2e2d7ea66b9f47d8cc52c01c52b6e191bc7d4786":"3999800000000000000000","3e3161f1ea2fbf126e79da1801da9512b37988c9":"49250000000000000000000","7e2ba86da52e785d8625334f3397ba1c4bf2e8d1":"197000000000000000000","7608f437b31f18bc0b64d381ae86fd978ed7b31f":"50000000000000000000","25a5a44d38a2f44c6a9db9cdbc6b1e2e97abb509":"17000000000000000000000","745ad3abc6eeeb2471689b539e789ce2b8268306":"1129977000000000000000","09e437d448861228a232b62ee8d37965a904ed9c":"21708305000000000000000",be53322f43fbb58494d7cce19dda272b2450e827:"200018000000000000000","4166fc08ca85f766fde831460e9dc93c0e21aa6c":"1000000000000000000000","99c0174cf84e0783c220b4eb6ae18fe703854ad3":"2074800000000000000000","3cf484524fbdfadae26dc185e32b2b630fd2e726":"448798000000000000000",fdcd5d80b105897a57abc47865768b2900524295:"6400000000000000000000",f22f4078febbbaa8b0e78e642c8a42f35d433905:"1999944000000000000000",eac768bf14b8f9432e69eaa82a99fbeb94cd0c9c:"98500000000000000000000","2639eee9873ceec26fcc9454b548b9e7c54aa65c":"1000000000000000000000",c3c3c2510d678020485a63735d1307ec4ca6302b:"1000000000000000000000",b73d6a77559c86cf6574242903394bacf96e3570:"91200000000000000000","5ce2e7ceaaa18af0f8aafa7fbad74cc89e3cd436":"20000000000000000000000","03377c0e556b640103289a6189e1aeae63493467":"20000000000000000000000","6eb0a5a9ae96d22cf01d8fd6483b9f38f08c2c8b":"4000000000000000000000",fc8215a0a69913f62a43bf1c8590b9ddcd0d8ddb:"2000000000000000000000","4a835c25824c47ecbfc79439bf3f5c3481aa75cd":"1400000000000000000000",b5493ef173724445cf345c035d279ba759f28d51:"20000000000000000000",b9e90c1192b3d5d3e3ab0700f1bf655f5dd4347a:"499928000000000000000","419bde7316cc1ed295c885ace342c79bf7ee33ea":"6000000000000000000000",e4625501f52b7af52b19ed612e9d54fdd006b492:"209440000000000000000",e9d599456b2543e6db80ea9b210e908026e2146e:"200000000000000000000","2c06dd922b61514aafedd84488c0c28e6dcf0e99":"100000000000000000000000","06b5ede6fdf1d6e9a34721379aeaa17c713dd82a":"2000000000000000000000",d8930a39c77357c30ad3a060f00b06046331fd62:"820000000000000000000",b2a2c2111612fb8bbb8e7dd9378d67f1a384f050:"20000000000000000000","1f174f40a0447234e66653914d75bc003e5690dc":"160000000000000000000",e06cb6294704eea7437c2fc3d30773b7bf38889a:"20094000000000000000",cd06f8c1b5cdbd28e2d96b6346c3e85a0483ba24:"1000000000000000000000",f316ef1df2ff4d6c1808dba663ec8093697968e0:"1794400000000000000000","1e6915ebd9a19c81b692ad99b1218a592c1ac7b1":"4000000000000000000000","885493bda36a0432976546c1ddce71c3f4570021":"216700000000000000000","18b0407cdad4ce52600623bd5e1f6a81ab61f026":"319489000000000000000","187d9f0c07f8eb74faaad15ebc7b80447417f782":"20000000000000000000","5d6ccf806738091042ad97a6e095fe8c36aa79c5":"188000000000000000000","53437fecf34ab9d435f4deb8ca181519e2592035":"188000000000000000000",fd1faa347b0fcc804c2da86c36d5f1d18b7087bb:"52380000000000000000","650cf67db060cce17568d5f2a423687c49647609":"100000000000000000000",bcd95ef962462b6edfa10fda87d72242fe3edb5c:"334133000000000000000","3b5e8b3c77f792decb7a8985df916efb490aac23":"2000000000000000000000",f13b083093ba564e2dc631568cf7540d9a0ec719:"1999944000000000000000","373c547e0cb5ce632e1c5ad66155720c01c40995":"4691588000000000000000","7313461208455455465445a459b06c3773b0eb30":"2000000000000000000000","441f37e8a029fd02482f289c49b5d06d00e408a4":"333333000000000000000",d30d4c43adcf55b2cb53d68323264134498d89ce:"1000000000000000000000",f648ea89c27525710172944e79edff847803b775:"100000000000000000000000","0c7f869f8e90d53fdc03e8b2819b016b9d18eb26":"20000000000000000000000",c71f92a3a54a7b8c2f5ea44305fccb84eee23148:"49980000000000000000","7988901331e387f713faceb9005cb9b65136eb14":"1970000000000000000000",e9a39a8bac0f01c349c64cedb69897f633234ed2:"3980000000000000000000",ad2a5c00f923aaf21ab9f3fb066efa0a03de2fb2:"999996000000000000000",f25259a5c939cd25966c9b6303d3731c53ddbc4c:"200000000000000000000",d1682c2159018dc3d07f08240a8c606daf65f8e1:"200000000000000000000000",a99991cebd98d9c838c25f7a7416d9e244ca250d:"1000000000000000000000","5a285755391e914e58025faa48cc685f4fd4f5b8":"26000000000000000000000","4d24b7ac47d2f27de90974ba3de5ead203544bcd":"100000000000000000000","21b182f2da2b384493cf5f35f83d9d1ee14f2a21":"2000000000000000000000","31ab088966ecc7229258f6098fce68cf39b38485":"1000000000000000000000","4977a7939d0939689455ce2639d0ee5a4cd910ed":"1820000000000000000000","07af938c1237a27c9030094dcf240750246e3d2c":"500000000000000000000","4e2bfa4a466f82671b800eee426ad00c071ba170":"4000000000000000000000","107379d4c467464f235bc18e55938aad3e688ad7":"50000000000000000000",f7b29b82195c882dab7897c2ae95e77710f57875:"2199000000000000000000","56586391040c57eec6f5affd8cd4abde10b50acc":"4000000000000000000000",ac608e2bac9dd20728d2947effbbbf900a9ce94b:"6000600000000000000000","48548b4ba62bcb2f0d34a88dc69a680e539cf046":"100084000000000000000","1665ab1739d71119ee6132abbd926a279fe67948":"100000000000000000000",af4493e8521ca89d95f5267c1ab63f9f45411e1b:"200000000000000000000",bf6925c00751008440a6739a02bf2b6cdaab5e3a:"1000000000000000000000","3fe40fbd919aad2818df01ee4df46c46842ac539":"6000000000000000000000","455b9296921a74d1fc41617f43b8303e6f3ed76c":"4200000000000000000000","7086b4bde3e35d4aeb24b825f1a215f99d85f745":"1999800000000000000000",d4ee4919fb37f2bb970c3fff54aaf1f3dda6c03f:"40000000000000000000000",a4489a50ead5d5445a7bee4d2d5536c2a76c41f8:"200000000000000000000","505e4f7c275588c533a20ebd2ac13b409bbdea3c":"17600000000000000000","3bb53598cc20e2055dc553b049404ac9b7dd1e83":"615020000000000000000","52cd20403ba7eda6bc307a3d63b5911b817c1263":"20000000000000000000",a211da03cc0e31ecce5309998718515528a090df:"200000000000000000000",bcb422dc4dd2aae94abae95ea45dd1731bb6b0ba:"447500000000000000000",cbde9734b8e6aa538c291d6d7facedb0f338f857:"2000000000000000000000","171ca02a8b6d62bf4ca47e906914079861972cb2":"200000000000000000000",d40d0055fd9a38488aff923fd03d35ec46d711b3:"4999711000000000000000","3887192c7f705006b630091276b39ac680448d6b":"60000000000000000000","3f3c8e61e5604cef0605d436dd22accd862217fc":"1337000000000000000000","4258fd662fc4ce3295f0d4ed8f7bb1449600a0a9":"6719600000000000000000","4571de672b9904bad8743692c21c4fdcea4c2e01":"4000000000000000000000","5be045512a026e3f1cebfd5a7ec0cfc36f2dc16b":"120000000000000000000",d6300b3215b11de762ecde4b70b7927d01291582:"2000000000000000000000",f9e37447406c412197b2e2aebc001d6e30c98c60:"8346700000000000000000",bd047ff1e69cc6b29ad26497a9a6f27a903fc4dd:"865000000000000000000","23fa7eb51a48229598f97e762be0869652dffc66":"1000000000000000000000","6679aeecd87a57a73f3356811d2cf49d0c4d96dc":"600000000000000000000","23c55aeb5739876f0ac8d7ebea13be729685f000":"1337000000000000000000","757b65876dbf29bf911d4f0692a2c9beb1139808":"4124263000000000000000",e8fc36b0131ec120ac9e85afc10ce70b56d8b6ba:"200000000000000000000","1a89899cbebdbb64bb26a195a63c08491fcd9eee":"2000000000000000000000","6edf7f5283725c953ee64317f66188af1184b033":"8050000000000000000000","297385e88634465685c231a314a0d5dcd146af01":"1550000000000000000000","018f20a27b27ec441af723fd9099f2cbb79d6263":"2167000000000000000000",a5a4227f6cf98825c0d5baff5315752ccc1a1391:"10000000000000000000000","69517083e303d4fbb6c2114514215d69bc46a299":"100000000000000000000","1dab172effa6fbee534c94b17e794edac54f55f8":"1970000000000000000000",c6ee35934229693529dc41d9bb71a2496658b88e:"19700000000000000000000",a8ee1df5d44b128469e913569ef6ac81eeda4fc8:"500000000000000000000","35bd246865fab490ac087ac1f1d4f2c10d0cda03":"400000000000000000000","4bf8bf1d35a231315764fc8001809a949294fc49":"66850000000000000000",c70fa45576bf9c865f983893002c414926f61029:"400400000000000000000",fdeaac2acf1d138e19f2fc3f9fb74592e3ed818a:"668500000000000000000",bfbfbcb656c2992be8fcde8219fbc54aadd59f29:"9999924000000000000000","1722c4cbe70a94b6559d425084caeed4d6e66e21":"4000000000000000000000","00e681bc2d10db62de85848324492250348e90bf":"20000000000000000000000","5c308bac4857d33baea074f3956d3621d9fa28e1":"4999711000000000000000","68c08490c89bf0d6b6f320b1aca95c8312c00608":"4000000000000000000000",ce1884ddbbb8e10e4dba6e44feeec2a7e5f92f05:"4000000000000000000000","427417bd16b1b3d22dbb902d8f9657016f24a61c":"2000000000000000000000","5ff93de6ee054cad459b2d5eb0f6870389dfcb74":"220000000000000000000","71946b7117fc915ed107385f42d99ddac63249c2":"2000000000000000000000","11ec00f849b6319cf51aa8dd8f66b35529c0be77":"2000000000000000000000","610fd6ee4eebab10a8c55d0b4bd2e7d6ef817156":"20002000000000000000",a422e4bf0bf74147cc895bed8f16d3cef3426154:"349281000000000000000","745aecbaf9bb39b74a67ea1ce623de368481baa6":"10000000000000000000000","9f496cb2069563144d0811677ba0e4713a0a4143":"1122000000000000000000",c500b720734ed22938d78c5e48b2ba9367a575ba:"33400000000000000000000",cd072e6e1833137995196d7bb1725fef8761f655:"6000000000000000000000","94644ad116a41ce2ca7fbec609bdef738a2ac7c7":"5000000000000000000000",e8d942d82f175ecb1c16a405b10143b3f46b963a:"568600000000000000000",f73dd9c142b71bce11d06e30e7e7d032f2ec9c9e:"1970000000000000000000","1327d759d56e0ab87af37ecf63fe01f310be100a":"659200000000000000000","28fa2580f9ebe420f3e5eefdd371638e3b7af499":"6000000000000000000000","024bdd2c7bfd500ee7404f7fb3e9fb31dd20fbd1":"180000000000000000000",b4b14bf45455d0ab0803358b7524a72be1a2045b:"500000000000000000000",b1e2dd95e39ae9775c55aeb13f12c2fa233053ba:"2000000000000000000000","35b03ea4245736f57b85d2eb79628f036ddcd705":"4000000000000000000000",eb2ef3d38fe652403cd4c9d85ed7f0682cd7c2de:"42784000000000000000000","690594d306613cd3e2fd24bca9994ad98a3d73f8":"2000000000000000000000","8397a1bc47acd647418159b99cea57e1e6532d6e":"9169160000000000000000",b44815a0f28e569d0e921a4ade8fb2642526497a:"55500000000000000000",e24109be2f513d87498e926a286499754f9ed49e:"886500000000000000000","37ac29bda93f497bc4aeaab935452c431510341e":"985000000000000000000","4a81abe4984c7c6bef63d69820e55743c61f201c":"16011846000000000000000","66dcc5fb4ee7fee046e141819aa968799d644491":"1337000000000000000000","43ff38743ed0cd43308c066509cc8e7e72c862aa":"1940000000000000000000",b8f20005b61352ffa7699a1b52f01f5ab39167f1:"10000000000000000000000","1cda411bd5163baeca1e558563601ce720e24ee1":"18200000000000000000","86245f596691093ece3f3d3ca2263eace81941d9":"188000000000000000000",f52a5882e8927d944b359b26366ba2b9cacfbae8:"25000080000000000000000","118c18b2dce170e8f445753ba5d7513cb7636d2d":"8800000000000000000000","7168b3bb8c167321d9bdb023a6e9fd11afc9afd9":"1790000000000000000000",d9103bb6b67a55a7fece2d1af62d457c2178946d:"1000000000000000000000","8b9fda7d981fe9d64287f85c94d83f9074849fcc":"14000000000000000000000","91211712719f2b084d3b3875a85069f466363141":"1000000000000000000000","4863849739265a63b0a2bf236a5913e6f959ce15":"1520000000000000000000",c2d1778ef6ee5fe488c145f3586b6ebbe3fbb445:"1146000000000000000000","2b77a4d88c0d56a3dbe3bae04a05f4fcd1b757e1":"300000000000000000000",fe9c0fffefb803081256c0cf4d6659e6d33eb4fb:"1528000000000000000000","893017ff1adad499aa065401b4236ce6e92b625a":"1999944000000000000000","073c67e09b5c713c5221c8a0c7f3f74466c347b0":"19400000000000000000000","93e303411afaf6c107a44101c9ac5b36e9d6538b":"66000000000000000000000","0ec50aa823f465b9464b0bc0c4a57724a555f5d6":"59100000000000000000000",a3e3a6ea509573e21bd0239ece0523a7b7d89b2f:"1970000000000000000000",c069ef0eb34299abd2e32dabc47944b272334824:"120000000000000000000","28a3da09a8194819ae199f2e6d9d1304817e28a5":"2000000000000000000000",e9495ba5842728c0ed97be37d0e422b98d69202c:"2000000000000000000000",bba976f1a1215f7512871892d45f7048acd356c8:"2000000000000000000000","887cac41cd706f3345f2d34ac34e01752a6e5909":"595366000000000000000",e0e0b2e29dde73af75987ee4446c829a189c95bc:"149000000000000000000","4a5fae3b0372c230c125d6d470140337ab915656":"1600000000000000000000","425177eb74ad0a9d9a5752228147ee6d6356a6e6":"13370000000000000000","5db7bba1f9573f24115d8c8c62e9ce8895068e9f":"49984000000000000000",fa6a37f018e97967937fc5e8617ba1d786dd5f77:"19999800000000000000000","45e3a93e72144ada860cbc56ff85145ada38c6da":"1610000000000000000000","67da922effa472a6b124e84ea8f86b24e0f515aa":"20000000000000000000",aa9bd4589535db27fa2bc903ca17d679dd654806:"2000000000000000000000","16a9e9b73ae98b864d1728798b8766dbc6ea8d12":"957480000000000000000",d6580ab5ed4c7dfa506fa6fe64ad5ce129707732:"4000000000000000000000","984a7985e3cc7eb5c93691f6f8cc7b8f245d01b2":"6000000000000000000000","7746b6c6699c8f34ca2768a820f1ffa4c207fe05":"4000086000000000000000","2fa491fb5920a6574ebd289f39c1b2430d2d9a6a":"2000000000000000000000",fae76719d97eac41870428e940279d97dd57b2f6:"98500000000000000000000","41b2dbd79dda9b864f6a7030275419c39d3efd3b":"3200000000000000000000",dd8254121a6e942fc90828f2431f511dad7f32e6:"3018000000000000000000","37fac1e6bc122e936dfb84de0c4bef6e0d60c2d7":"2000000000000000000000","3a10888b7e149cae272c01302c327d0af01a0b24":"17000000000000000000","401354a297952fa972ad383ca07a0a2811d74a71":"14000000000000000000","51865db148881951f51251710e82b9be0d7eadb2":"2000000000000000000000",bbbd6ecbb5752891b4ceb3cce73a8f477059376f:"36000000000000000000","3f236108eec72289bac3a65cd283f95e041d144c":"999925000000000000000",dc83b6fd0d512131204707eaf72ea0c8c9bef976:"2000000000000000000000","036eeff5ba90a6879a14dff4c5043b18ca0460c9":"100000000000000000000",fac5ca94758078fbfccd19db3558da7ee8a0a768:"1017500000000000000000",d0d62c47ea60fb90a3639209bbfdd4d933991cc6:"194000000000000000000","891cb8238c88e93a1bcf61db49bd82b47a7f4f84":"2680000000000000000000",df53003346d65c5e7a646bc034f2b7d32fcbe56a:"2000000000000000000000","6e89c51ea6de13e06cdc748b67c4410fe9bcab03":"4000000000000000000000",a61cdbadf04b1e54c883de6005fcdf16beb8eb2f:"2000000000000000000000",e3951de5aefaf0458768d774c254f7157735e505:"1600930000000000000000",f2732cf2c13b8bb8e7492a988f5f89e38273ddc8:"600000000000000000000","4752218e54de423f86c0501933917aea08c8fed5":"20000000000000000000000","152f4e860ef3ee806a502777a1b8dbc91a907668":"600000000000000000000","15b96f30c23b8664e7490651066b00c4391fbf84":"410650000000000000000","8693e9b8be94425eef7969bc69f9d42f7cad671e":"1000090000000000000000",f41557dfdfb1a1bdcefefe2eba1e21fe0a4a9942:"1970000000000000000000","38458e0685573cb4d28f53098829904570179266":"40000000000000000000","53e4d9696dcb3f4d7b3f70dcaa4eecb71782ff5c":"200000000000000000000","2dca0e449ab646dbdfd393a96662960bcab5ae1e":"40000000000000000000000","87d7ac0653ccc67aa9c3469eef4352193f7dbb86":"200000000000000000000000",ae9f5c3fbbe0c9bcbf1af8ff74ea280b3a5d8b08:"1730000000000000000000","7751f363a0a7fd0533190809ddaf9340d8d11291":"20000000000000000000","708a2af425ceb01e87ffc1be54c0f532b20eacd6":"134159000000000000000",ac122a03cd058c122e5fe17b872f4877f9df9572:"1969606000000000000000","5da4ca88935c27f55c311048840e589e04a8a049":"80000000000000000000",e67c2c1665c88338688187629f49e99b60b2d3ba:"200000000000000000000",dec82373ade8ebcf2acb6f8bc2414dd7abb70d77:"200000000000000000000","47c247f53b9fbeb17bba0703a00c009fdb0f6eae":"20000000000000000000000","9a522e52c195bfb7cf5ffaaedb91a3ba7468161d":"1000000000000000000000","3159e90c48a915904adfe292b22fa5fd5e72796b":"1008800000000000000000",defddfd59b8d2c154eecf5c7c167bf0ba2905d3e:"93588000000000000000",ad1d68a038fd2586067ef6d135d9628e79c2c924:"4686168000000000000000","038e45eadd3d88b87fe4dab066680522f0dfc8f9":"10000000000000000000000","2561ec0f379218fe5ed4e028a3f744aa41754c72":"13370000000000000000",b95396daaa490df2569324fcc6623be052f132ca:"2000000000000000000000","2376ada90333b1d181084c97e645e810aa5b76f1":"750000000000000000000","07800d2f8068e448c79a4f69b1f15ef682aae5f6":"19400000000000000000000",adeb204aa0c38e179e81a94ed8b3e7d53047c26b:"608000000000000000000","0dc100b107011c7fc0a1339612a16ccec3285208":"2000000000000000000000",f0b1340b996f6f0bf0d9561c849caf7f4430befa:"100000000000000000000",e1443dbd95cc41237f613a48456988a04f683282:"4000086000000000000000",d3c6f1e0f50ec3d2a67e6bcd193ec7ae38f1657f:"6618150000000000000000",b68899e7610d4c93a23535bcc448945ba1666f1c:"200000000000000000000",a7253763cf4a75df92ca1e766dc4ee8a2745147b:"10740000000000000000000","75d67ce14e8d29e8c2ffe381917b930b1aff1a87":"3000000000000000000000","493d48bda015a9bfcf1603936eab68024ce551e0":"22528000000000000000","7ddd57165c87a2707f025dcfc2508c09834759bc":"1400000000000000000000",cff7f89a4d4219a38295251331568210ffc1c134:"1760000000000000000000","168d30e53fa681092b52e9bae15a0dcb41a8c9bb":"100000000000000000000","99b743d1d9eff90d9a1934b4db21d519d89b4a38":"100000000000000000000",a3d0b03cffbb269f796ac29d80bfb07dc7c6ad06:"2000000000000000000000","816d9772cf11399116cc1e72c26c6774c9edd739":"200000000000000000000",a880e2a8bf88a1a82648b4013c49c4594c433cc8:"4728000000000000000000","2a44a7218fe44d65a1b4b7a7d9b1c2c52c8c3e34":"62221355000000000000000",cb86edbc8bbb1f9131022be649565ebdb09e32a1:"2000000000000000000000","3915eab5ab2e5977d075dec47d96b68b4b5cf515":"61520000000000000000000", -"8165cab0eafb5a328fc41ac64dae715b2eef2c65":"1000000000000000000000","416c86b72083d1f8907d84efd2d2d783dffa3efb":"1999944000000000000000",c524086d46c8112b128b2faf6f7c7d8160a8386c:"400000000000000000000","902d74a157f7d2b9a3378b1f56703730e03a1719":"4000000000000000000000","74ef2869cbe608856045d8c2041118579f2236ea":"59724000000000000000",af992dd669c0883e5515d3f3112a13f617a4c367:"2000000000000000000000","4c6a248fc97d705def495ca20759169ef0d36471":"760000000000000000000","974d2f17895f2902049deaaecf09c3046507402d":"14707000000000000000","0239b4f21f8e05cd01512b2be7a0e18a6d974607":"1000000000000000000000",b97a6733cd5fe99864b3b33460d1672434d5cafd:"1999579000000000000000",f558a2b2dd26dd9593aae04531fd3c3cc3854b67:"198000000000000000000",b577b6befa054e9c040461855094b002d7f57bd7:"114000000000000000000000","73bfe7710f31cab949b7a2604fbf5239cee79015":"2000000000000000000000","5717f2d8f18ffcc0e5fe247d3a4219037c3a649c":"3998000000000000000000","20707e425d2a11d2c89f391b2b809f556c592421":"2000000000000000000000","9a6708ddb8903c289f83fe889c1edcd61f854423":"1000000000000000000000",fa27cc49d00b6c987336a875ae39da58fb041b2e:"10000000000000000000000",d688e785c98f00f84b3aa1533355c7a258e87948:"500000000000000000000","927cb7dc187036b5427bc7e200c5ec450c1d27d4":"216000000000000000000",b2bfaa58b5196c5cb7f89de15f479d1838de713d:"21000000000000000000",e180de9e86f57bafacd7904f9826b6b4b26337a3:"830400000000000000000",a1204dad5f560728a35c0d8fc79481057bf77386:"1000000000000000000000","6b0da25af267d7836c226bcae8d872d2ce52c941":"6000000000000000000000","0517448dada761cc5ba4033ee881c83037036400":"1998000000000000000000","7ed0a5a847bef9a9da7cba1d6411f5c316312619":"39842000000000000000","5b5d517029321562111b43086d0b043591109a70":"2600000000000000000000","56fc1a7bad4047237ce116146296238e078f93ad":"178000000000000000000","6c5422fb4b14e6d98b6091fdec71f1f08640419d":"400000000000000000000","108fe8ee2a13da487b22c6ab6d582ea71064d98c":"399800000000000000000","0ad3e44d3c001fa290b393617030544108ac6eb9":"1969019000000000000000","25aee68d09afb71d8817f3f184ec562f7897b734":"2000000000000000000000",c2340a4ca94c9678b7494c3c852528ede5ee529f:"48669000000000000000","44901e0d0e08ac3d5e95b8ec9d5e0ff5f12e0393":"417500000000000000000","8775a610c502b9f1e6ad4cdadb8ce29bff75f6e4":"600000000000000000000","682897bc4f8e89029120fcffb787c01a93e64184":"10000000000000000000000",f7acff934b84da0969dc37a8fcf643b7d7fbed41:"1999944000000000000000",f05fcd4c0d73aa167e5553c8c0d6d4f2faa39757:"13334000000000000000000",c981d312d287d558871edd973abb76b979e5c35e:"1970000000000000000000","9da61ccd62bf860656e0325d7157e2f160d93bb5":"4999980000000000000000",d284a50382f83a616d39b8a9c0f396e0ebbfa95d:"1000070000000000000000",d6cf5c1bcf9da662bcea2255905099f9d6e84dcc:"8349332000000000000000",c71b2a3d7135d2a85fb5a571dcbe695e13fc43cd:"1000000000000000000000",b22dadd7e1e05232a93237baed98e0df92b1869e:"2000000000000000000000",b09fe6d4349b99bc37938054022d54fca366f7af:"200000000000000000000000","427e4751c3babe78cff8830886febc10f9908d74":"1970000000000000000000","60b358cb3dbefa37f47df2d7365840da8e3bc98c":"20000000000000000000",dcd5bca2005395b675fde5035659b26bfefc49ee:"197000000000000000000","81186931184137d1192ac88cd3e1e5d0fdb86a74":"2900000000000000000000",de212293f8f1d231fa10e609470d512cb8ffc512:"2000000000000000000000","1937c5c515057553ccbd46d5866455ce66290284":"1000000000000000000000000","592777261e3bd852c48eca95b3a44c5b7f2d422c":"20000000000000000000000",bbf84292d954acd9e4072fb860b1504106e077ae:"1500000000000000000000","3b4100e30a73b0c734b18ffa8426d19b19312f1a":"55300000000000000000000",a03a3dc7c533d1744295be955d61af3f52b51af5:"40000000000000000000","4aa148c2c33401e66a2b586e6577c4b292d3f240":"216200000000000000000",ff850e3be1eb6a4d726c08fa73aad358f39706da:"1940000000000000000000","743651b55ef8429df50cf81938c2508de5c8870f":"2000000000000000000000","3700e3027424d939dbde5d42fb78f6c4dbec1a8f":"40000000000000000000",c1cbd2e2332a524cf219b10d871ccc20af1fb0fa:"1000000000000000000000",e25b9f76b8ad023f057eb11ad94257a0862e4e8c:"2000000000000000000000","719e891fbcc0a33e19c12dc0f02039ca05b801df":"6185800000000000000000","39636b25811b176abfcfeeca64bc87452f1fdff4":"400000000000000000000","631030a5b27b07288a45696f189e1114f12a81c0":"499970000000000000000",bcc84597b91e73d5c5b4d69c80ecf146860f779a:"4380000000000000000000","095e0174829f34c3781be1a5e38d1541ea439b7f":"6000000000000000000000","2e7e05e29edda7e4ae25c5173543efd71f6d3d80":"6000000000000000000000",dbb6ac484027041642bbfd8d80f9d0c1cf33c1eb:"2000000000000000000000","153c08aa8b96a611ef63c0253e2a4334829e579d":"394000000000000000000","10f4bff0caa5027c0a6a2dcfc952824de2940909":"2000000000000000000000","2ef869f0350b57d53478d701e3fee529bc911c75":"50000000000000000000","70ab34bc17b66f9c3b63f151274f2a727c539263":"2000000000000000000000","3201259caf734ad7581c561051ba0bca7fd6946b":"180000000000000000000000","84e9cf8166c36abfa49053b7a1ad4036202681ef":"2000000000000000000000","4ebc5629f9a6a66b2cf3363ac4895c0348e8bf87":"1000090000000000000000",e50b464ac9de35a5618b7cbf254674182b81b97e:"4100000000000000000000","2abdf1a637ef6c42a7e2fe217773d677e804ebdd":"5000000000000000000000","7a0a78a9cc393f91c3d9e39a6b8c069f075e6bf5":"1337000000000000000000","2d9c5fecd2b44fbb6a1ec732ea059f4f1f9d2b5c":"1010694000000000000000","7b712c7af11676006a66d2fc5c1ab4c479ce6037":"8000000000000000000000","3466f67e39636c01f43b3a21a0e8529325c08624":"842864000000000000000",fdd502a74e813bcfa355ceda3c176f6a6871af7f:"400000000000000000000","26475419c06d5f147aa597248eb46cf7befa64a5":"1640000000000000000000","9243d7762d77287b12638688b9854e88a769b271":"1000000000000000000000","723d8baa2551d2addc43c21b45e8af4ca2bfb2c2":"1760000000000000000000",f2fbb6d887f8b8cc3a869aba847f3d1f643c53d6:"3999000000000000000000","2cdb3944650616e47cb182e060322fa1487978ce":"1820000000000000000000",f0d21663d8b0176e05fde1b90ef31f8530fda95f:"1999944000000000000000","77cc02f623a9cf98530997ea67d95c3b491859ae":"1354900000000000000000",d1b5a454ac3405bb4179208c6c84de006bcb9be9:"500000000000000000000",b9920fd0e2c735c256463caa240fb7ac86a93dfa:"1760000000000000000000",ed1f1e115a0d60ce02fb25df014d289e3a0cbe7d:"500000000000000000000","23e2c6a8be8e0acfa5c4df5e36058bb7cbac5a81":"2000000000000000000000",f0be0faf4d7923fc444622d1980cf2d990aab307:"2000000000000000000000","0829d0f7bb7c446cfbb0deadb2394d9db7249a87":"40110000000000000000","2ecac504b233866eb5a4a99e7bd2901359e43b3d":"20000000000000000000000","06d6cb308481c336a6e1a225a912f6e6355940a1":"1760000000000000000000",d4879fd12b1f3a27f7e109761b23ca343c48e3d8:"666000000000000000000","857f100b1a5930225efc7e9020d78327b41c02cb":"2000000000000000000000","3aa42c21b9b31c3e27ccd17e099af679cdf56907":"8000000000000000000000","764d5212263aff4a2a14f031f04ec749dc883e45":"1850000000000000000000",d03a2da41e868ed3fef5745b96f5eca462ff6fda:"3000000000000000000000","4f26690c992b7a312ab12e1385d94acd58288e7b":"14000000000000000000000","7b122162c913e7146cad0b7ed37affc92a0bf27f":"1506799000000000000000",c87352dba582ee2066b9c002a962e003134f78b1:"500000000000000000000","9f4ac9c9e7e24cb2444a0454fa5b9ad9d92d3853":"835000000000000000000",ccf62a663f1353ba2ef8e6521dc1ecb673ec8ef7:"152000000000000000000","557f5e65e0da33998219ad4e99570545b2a9d511":"11024000000000000000000",a5f0077b351f6c505cd515dfa6d2fa7f5c4cd287:"40000000000000000000000","79c6002f8452ca157f1317e80a2faf24475559b7":"20000000000000000000","3aa07a34a1afc8967d3d1383b96b62cf96d5fa90":"20000000000000000000000","7f389c12f3c6164f6446566c77669503c2792527":"98500000000000000000",ac4cc256ae74d624ace80db078b2207f57198f6b:"2001000000000000000000","823ba7647238d113bce9964a43d0a098118bfe4d":"200000000000000000000",f5a7676ad148ae9c1ef8b6f5e5a0c2c473be850b:"200000000000000000000","7d34803569e00bd6b59fff081dfa5c0ab4197a62":"1712700000000000000000","061ea4877cd08944eb64c2966e9db8dedcfec06b":"1000000000000000000000",df37c22e603aedb60a627253c47d8ba866f6d972:"24000000000000000000000","529aa002c6962a3a8545027fd8b05f22b5bf9564":"1670000000000000000000",eb89a882670909cf377e9e78286ee97ba78d46c2:"802200000000000000000","9ac85397792a69d78f286b86432a07aeceb60e64":"14300000000000000000","9610592202c282ab9bd8a884518b3e0bd4758137":"268000000000000000000","73932709a97f02c98e51b091312865122385ae8e":"1430000000000000000000","5ef8c96186b37984cbfe04c598406e3b0ac3171f":"9400000000000000000000",b6f78da4f4d041b3bc14bc5ba519a5ba0c32f128:"172326253000000000000000","6f0edd23bcd85f6015f9289c28841fe04c83efeb":"19100000000000000000",a8a43c009100616cb4ae4e033f1fc5d7e0b6f152:"3939015000000000000000","7081fa6baad6cfb7f51b2cca16fb8970991a64ba":"233953000000000000000","9de7386dde401ce4c67b71b6553f8aa34ea5a17d":"60000000000000000000","54ec7300b81ac84333ed1b033cd5d7a33972e234":"200000000000000000000","67a80e0190721f94390d6802729dd12c31a895ad":"1999964000000000000000","3a4297da3c555e46c073669d0478fce75f2f790e":"1969606000000000000000",c2e0584a71348cc314b73b2029b6230b92dbb116:"2000000000000000000000","0a2ade95b2e8c66d8ae6f0ba64ca57d783be6d44":"4000000000000000000000","544b5b351d1bc82e9297439948cf4861dac9ae11":"22000000000000000000000","3ae62bd271a760637fad79c31c94ff62b4cd12f7":"2000000000000000000000","0d8023929d917234ae40512b1aabb5e8a4512771":"148000000000000000000","2858acacaf21ea81cab7598fdbd86b452e9e8e15":"666000000000000000000",c033b1325a0af45472c25527853b1f1c21fa35de:"2000000000000000000000",bbf85aaaa683738f073baef44ac9dc34c4c779ea:"2000000000000000000000","6ae57f27917c562a132a4d1bf7ec0ac785832926":"6000000000000000000000","88e6f9b247f988f6c0fc14c56f1de53ec69d43cc":"100000000000000000000",b72c2a011c0df50fbb6e28b20ae1aad217886790:"4000000000000000000000","161caf5a972ace8379a6d0a04ae6e163fe21df2b":"100000000000000000000000","2a63590efe9986c3fee09b0a0a338b15bed91f21":"6458400000000000000000","50e1c8ec98415bef442618708799437b86e6c205":"6000000000000000000000","33f4a6471eb1bca6a9f85b3b4872e10755c82be1":"2000000000000000000000","9c49deff47085fc09704caa2dca8c287a9a137da":"8000000000000000000000",e1173a247d29d8238df0922f4df25a05f2af77c3:"40007051000000000000000","51891b2ccdd2f5a44b2a8bc49a5d9bca6477251c":"310000000000000000000",ecaf3350b7ce144d068b186010852c84dd0ce0f0:"2000000000000000000000","72393d37b451effb9e1ff3b8552712e2a970d8c2":"985000000000000000000","1bbc60bcc80e5cdc35c5416a1f0a40a83dae867b":"2000000000000000000000",b8ab39805bd821184f6cbd3d2473347b12bf175c:"118200000000000000000",c55a6b4761fd11e8c85f15174d74767cd8bd9a68:"133700000000000000000","99d1b585965f406a42a49a1ca70f769e765a3f98":"16700000000000000000000","9ab988b505cfee1dbe9cd18e9b5473b9a2d4f536":"320000000000000000000","7fef8c38779fb307ec6f044bebe47f3cfae796f1":"168561000000000000000","322d6f9a140d213f4c80cd051afe25c620bf4c7d":"20000000000000000000","3bd9a06d1bd36c4edd27fc0d1f5b088ddae3c72a":"499970000000000000000","5dcdb6b87a503c6d8a3c65c2cf9a9aa883479a1e":"9200000000000000000000","6e84c2fd18d8095714a96817189ca21cca62bab1":"340935000000000000000",a5bad86509fbe0e0e3c0e93f6d381f1af6e9d481:"6000000000000000000000","3954bdfe0bf587c695a305d9244c3d5bdddac9bb":"19187461000000000000000","63f0e5a752f79f67124eed633ad3fd2705a397d4":"3940000000000000000000","33fd718f0b91b5cec88a5dc15eecf0ecefa4ef3d":"432500000000000000000","68027d19558ed7339a08aee8de3559be063ec2ea":"2000000000000000000000","96f0462ae6f8b96088f7e9c68c74b9d8ad34b347":"1790000000000000000000",f1f391ca92808817b755a8b8f4e2ca08d1fd1108:"6000000000000000000000","7fcf5ba6666f966c5448c17bf1cb0bbcd8019b06":"99999000000000000000",e9b9a2747510e310241d2ece98f56b3301d757e0:"2000000000000000000000","2100381d60a5b54adc09d19683a8f6d5bb4bfbcb":"10000000000000000000000","7495ae78c0d90261e2140ef2063104731a60d1ed":"34250000000000000000",dc911cf7dc5dd0813656670528e9338e67034786:"2000000000000000000000","262aed4bc0f4a4b2c6fb35793e835a49189cdfec":"10000000000000000000000","9ee93f339e6726ec65eea44f8a4bfe10da3d3282":"2000000000000000000000",a3a57b0716132804d60aac281197ff2b3d237b01:"1400000000000000000000",c799e34e88ff88be7de28e15e4f2a63d0b33c4cb:"200000000000000000000",c7506c1019121ff08a2c8c1591a65eb4bdfb4a3f:"600000000000000000000","795ebc2626fc39b0c86294e0e837dcf523553090":"1000000000000000000000","441aca82631324acbfa2468bda325bbd78477bbf":"6000000000000000000000","9f271d285500d73846b18f733e25dd8b4f5d4a8b":"722000000000000000000",d77892e2273b235d7689e430e7aeed9cbce8a1f3:"2000000000000000000000","4f8972838f70c903c9b6c6c46162e99d6216d451":"4610000000000000000000","4c85ed362f24f6b9f04cdfccd022ae535147cbb9":"1500000000000000000000","3807eff43aa97c76910a19752dd715ee0182d94e":"250190000000000000000","3a9e5441d44b243be55b75027a1ceb9eacf50df2":"1000000000000000000000","3deae43327913f62808faa1b6276a2bd6368ead9":"2000000000000000000000",c270456885342b640b4cfc1b520e1a544ee0d571:"1820000000000000000000","77798f201257b9c35204957057b54674aefa51df":"149000000000000000000","225f9eb3fb6ff3e9e3c8447e14a66e8d4f3779f6":"2000000000000000000000","78df2681d6d602e22142d54116dea15d454957aa":"298000000000000000000","283396ce3cac398bcbe7227f323e78ff96d08767":"400000000000000000000","747ff7943b71dc4dcdb1668078f83dd7cc4520c2":"60000000000000000000",a4ed11b072d89fb136759fc69b428c48aa5d4ced:"262800000000000000000",cc043c4388d345f884c6855e71142a9f41fd6935:"20000000000000000000",ab14d221e33d544629198cd096ed63dfa28d9f47:"6000000000000000000000","251e6838f7cec5b383c1d90146341274daf8e502":"147510000000000000000","36a0e61e1be47fa87e30d32888ee0330901ca991":"20000000000000000000",bcfc98e5c82b6adb180a3fcb120b9a7690c86a3f:"1970000000000000000000","18a6d2fc52be73084023c91802f05bc24a4be09f":"2000000000000000000000","80591a42179f34e64d9df75dcd463b28686f5574":"20000000000000000000000","881230047c211d2d5b00d8de4c5139de5e3227c7":"10000000000000000000000","9eb1ff71798f28d6e989fa1ea0588e27ba86cb7d":"140800000000000000000",a01fd1906a908506dedae1e208128872b56ee792:"3000000000000000000000","1b05ea6a6ac8af7cb6a8b911a8cce8fe1a2acfc8":"2000000000000000000000","6add932193cd38494aa3f03aeccc4b7ab7fabca2":"89600000000000000000","2aaa35274d742546670b7426264521032af4f4c3":"10000000000000000000000","67b8a6e90fdf0a1cac441793301e8750a9fa7957":"895000000000000000000","5b5be0d8c67276baabd8edb30d48ea75640b8b29":"824480000000000000000","28d7e5866f1d85fd1ceb32bfbe1dfc36db434566":"7199000000000000000000","98e3e90b28fccaee828779b8d40a5568c4116e21":"40000000000000000000","2dd578f7407dfbd548d05e95ccc39c485429626a":"4200000000000000000000","8ca6989746b06e32e2487461b1ce996a273acfd7":"20000000000000000000",a6f93307f8bce03195fece872043e8a03f7bd11a:"2886000000000000000000",efbd52f97da5fd3a673a46cbf330447b7e8aad5c:"100033000000000000000","52bdd9af5978850bc24110718b3723759b437e59":"1730000000000000000000","6e073b66d1b8c66744d88096a8dd99ec7e0228da":"4000000000000000000000",a29d661a6376f66d0b74e2fe9d8f26c0247ec84c:"4117300000000000000000","7d34ff59ae840a7413c6ba4c5bb2ba2c75eab018":"3000000000000000000000","2eca6a3c5d9f449d0956bd43fa7b4d7be8435958":"2000020000000000000000",f59f9f02bbc98efe097eabb78210979021898bfd:"9999800000000000000000","90e300ac71451e401f887f6e7728851647a80e07":"400000000000000000000","05ae7fd4bbcc80ca11a90a1ec7a301f7cccc83db":"910000000000000000000",e54102534de8f23effb093b31242ad3b233facfd:"4000000000000000000000",c127aab59065a28644a56ba3f15e2eac13da2995:"600000000000000000000",ed60c4ab6e540206317e35947a63a9ca6b03e2cb:"57275000000000000000",d855b03ccb029a7747b1f07303e0a664793539c8:"2000000000000000000000","1178501ff94add1c5881fe886136f6dfdbe61a94":"158000000000000000000",f447108b98df64b57e871033885c1ad71db1a3f9:"6916709000000000000000",deee2689fa9006b59cf285237de53b3a7fd01438:"450034000000000000000","7f01dc7c3747ca608f983dfc8c9b39e755a3b914":"206980000000000000000","9edeac4c026b93054dc5b1d6610c6f3960f2ad73":"1200000000000000000000",e3cffe239c64e7e20388e622117391301b298696:"500000000000000000000",ebbb4f2c3da8be3eb62d1ffb1f950261cf98ecda:"2000000000000000000000","38c10b90c859cbb7815692f99dae520ab5febf5e":"13169000000000000000000","23f9ecf3e5dddca38815d3e59ed34b5b90b4a353":"204608000000000000000",d7fa5ffb6048f96fb1aba09ef87b1c11dd7005e4:"1000000000000000000000","9ca42ee7a0b898f6a5cc60b5a5d7b1bfa3c33231":"2000000000000000000000","8b9577920053b1a00189304d888010d9ef2cb4bf":"500000000000000000000",fcd0b4827cd208ffbf5e759dba8c3cc61d8c2c3c:"8000000000000000000000","01ff1eb1dead50a7f2f9638fdee6eccf3a7b2ac8":"600000000000000000000",abde147b2af789eaa586547e66c4fa2664d328a4:"247545000000000000000","64042ba68b12d4c151651ca2813b7352bd56f08e":"600000000000000000000",dccca42045ec3e16508b603fd936e7fd7de5f36a:"19700000000000000000",e77a89bd45dc04eeb4e41d7b596b707e6e51e74c:"12000000000000000000000",f77c7b845149efba19e261bc7c75157908afa990:"2000000000000000000000",fa5201fe1342af11307b9142a041243ca92e2f09:"152150000000000000000000","40df495ecf3f8b4cef2a6c189957248fe884bc2b":"12000000000000000000000","3d79a853d71be0621b44e29759656ca075fdf409":"2000000000000000000000","6de02f2dd67efdb7393402fa9eaacbcf589d2e56":"1182000000000000000000","729aad4627744e53f5d66309aa74448b3acdf46f":"2000000000000000000000","4e4318f5e13e824a54edfe30a7ed4f26cd3da504":"2000000000000000000000",c6a286e065c85f3af74812ed8bd3a8ce5d25e21d:"18200000000000000000",fd686de53fa97f99639e2568549720bc588c9efc:"1969606000000000000000","06b0ff834073cce1cbc9ea557ea87b605963e8b4":"300000000000000000000","72b5633fe477fe542e742facfd690c137854f216":"1670000000000000000000","8bf373d076814cbc57e1c6d16a82c5be13c73d37":"200000000000000000000",cf264e6925130906c4d7c18591aa41b2a67f6f58:"2000000000000000000000","0ea2a210312b3e867ee0d1cc682ce1d666f18ed5":"10000000000000000000000",d02afecf8e2ec2b62ac8ad204161fd1fae771d0e:"2000000000000000000000",e6b20f980ad853ad04cbfc887ce6601c6be0b24c:"4000000000000000000000","4280a58f8bb10b9440de94f42b4f592120820191":"2000000000000000000000",a914cdb571bfd93d64da66a4e108ea134e50d000:"1430143000000000000000","60864236930d04d8402b5dcbeb807f3caf611ea2":"4000000000000000000000",f9dd239008182fb519fb30eedd2093fed1639be8:"500000000000000000000","18e53243981aabc8767da10c73449f1391560eaa":"6000000000000000000000",c3a9226ae275df2cab312b911040634a9c9c9ef6:"4000000000000000000000","4fcc19ea9f4c57dcbce893193cfb166aa914edc5":"7001380000000000000000",c1e1409ca52c25435134d006c2a6a8542dfb7273:"34380000000000000000","981ddf0404e4d22dda556a0726f00b2d98ab9569":"999972000000000000000",e5bcc88c3b256f6ed5fe550e4a18198b943356ad:"2000000000000000000000","74a17f064b344e84db6365da9591ff1628257643":"20000000000000000000","2720f9ca426ef2f2cbd2fecd39920c4f1a89e16d":"2000000000000000000000","8d04a5ebfb5db409db0617c9fa5631c192861f4a":"970000000000000000000",f18b14cbf6694336d0fe12ac1f25df2da0c05dbb:"3999800000000000000000","56ac20d63bd803595cec036da7ed1dc66e0a9e07":"63927000000000000000","92c94c2820dfcf7156e6f13088ece7958b3676fd":"95500000000000000000","968dea60df3e09ae3c8d3505e9c080454be0e819":"6000000000000000000000","9268d62646563611dc3b832a30aa2394c64613e3":"2000000000000000000000","5a192b964afd80773e5f5eda6a56f14e25e0c6f3":"500000000000000000000",df8d48b1eb07b3c217790e6c2df04dc319e7e848:"500000000000000000000","7f61fa6cf5f898b440dac5abd8600d6d691fdef9":"280000000000000000000","929d368eb46a2d1fbdc8ffa0607ede4ba88f59ad":"2000000000000000000000","9982a5890ffb5406d3aca8d2bfc1dd70aaa80ae0":"2000000000000000000000",bf2aea5a1dcf6ed3b5e8323944e983fedfd1acfb:"1580000000000000000000","46aa501870677e7f0a504876b4e8801a0ad01c46":"800000000000000000000","8f473d0ab876ddaa15608621d7013e6ff714b675":"470400000000000000000","02290fb5f9a517f82845acdeca0fc846039be233":"2000000000000000000000","8a5831282ce14a657a730dc18826f7f9b99db968":"4330268000000000000000","0328510c09dbcd85194a98d67c33ac49f2f94d60":"11000000000000000000000",cf883a20329667ea226a1e3c765dbb6bab32219f:"3038972000000000000000","2615100ea7e25bba9bca746058afbbb4ffbe4244":"500000000000000000000",b115ee3ab7641e1aa6d000e41bfc1ec7210c2f32:"13000000000000000000000","5cfa8d568575658ca4c1a593ac4c5d0e44c60745":"291000000000000000000",d3c24d4b3a5e0ff8a4622d518edd73f16ab28610:"20000000000000000000",a639acd96b31ba53b0d08763229e1f06fd105e9d:"8000000000000000000000",ffa4aff1a37f984b0a67272149273ae9bd41e3bc:"10000000000000000000000",cf684dfb8304729355b58315e8019b1aa2ad1bac:"432500000000000000000","5797b60fd2894ab3c2f4aede86daf2e788d745ad":"6000000000000000000000",a6a0de421ae54f6d17281308f5646d2f39f7775d:"2000000000000000000000","08504f05643fab5919f5eea55925d7a3ed7d807a":"20000000000000000000","7a7068e1c3375c0e599db1fbe6b2ea23b8f407d2":"2000000000000000000000","1078d7f61b0e56c74ee6635b2e1819ef1e3d8785":"1000000000000000000000","6e12b51e225b4a4372e59ad7a2a1a13ea3d3a137":"14172200000000000000000","6a2e86469a5bf37cee82e88b4c3863895d28fcaf":"519000000000000000000","197672fd39d6f246ce66a790d13aa922d70ea109":"1000000000000000000000","8009a7cbd192b3aed4adb983d5284552c16c7451":"4000000000000000000000",f6c3c48a1ac0a34799f04db86ec7a975fe7768f3:"1970000000000000000000","16be75e98a995a395222d00bd79ff4b6e638e191":"36000000000000000000000","6c05e34e5ef2f42ed09deff1026cd66bcb6960bb":"2000000000000000000000","5d6ae8cbd6b3393c22d16254100d0238e808147c":"719992000000000000000","1a376e1b2d2f590769bb858d4575320d4e149970":"4841200000000000000000",f6ead67dbf5b7eb13358e10f36189d53e643cfcf:"40000000000000000000000","467d5988249a68614716659840ed0ae6f6f457bc":"387500000000000000000",aa960e10c52391c54e15387cc67af827b5316dcc:"2000000000000000000000","483ba99034e900e3aedf61499d3b2bce39beb7aa":"985000000000000000000","86f23e9c0aafc78b9c404dcd60339a925bffa266":"400000000000000000000",d05a447c911dbb275bfb2e5a37e5a703a56f9997:"200000000000000000000",edb71ec41bda7dce86e766e6e8c3e9907723a69b:"20000000000000000000",f86a3ea8071f7095c7db8a05ae507a8929dbb876:"336000000000000000000","323b3cfe3ee62bbde2a261e53cb3ecc05810f2c6":"13790000000000000000000","936f3813f5f6a13b8e4ffec83fe7f826186a71cd":"520000000000000000000","6db72bfd43fef465ca5632b45aab7261404e13bf":"2000000000000000000000","9bb76204186af2f63be79168601687fc9bad661f":"300000000000000000000","28ab165ffb69eda0c549ae38e9826f5f7f92f853":"1296890000000000000000",c73e2112282215dc0762f32b7e807dcd1a7aae3e:"6900000000000000000000",f8086e42661ea929d2dda1ab6c748ce3055d111e:"1000000000000000000000","4db21284bcd4f787a7556500d6d7d8f36623cf35":"1939806000000000000000",c48651c1d9c16bff4c9554886c3f3f26431f6f68:"658000000000000000000","9bdbdc9b973431d13c89a3f9757e9b3b6275bfc7":"499971000000000000000","560da37e956d862f81a75fd580a7135c1b246352":"10000000000000000000000","4b60a3e253bf38c8d5662010bb93a473c965c3e5":"1490000000000000000000","64e02abb016cc23a2934f6bcddb681905021d563":"1000000000000000000000",ac2c8e09d06493a63858437bd20be01962450365:"1910000000000000000000","9bf9b3b2f23cf461eb591f28340bc719931c8364":"1000000000000000000000","9b5c39f7e0ac168c8ed0ed340477117d1b682ee9":"98000000000000000000",f75bb39c799779ebc04a336d260da63146ed98d0:"25000000000000000000",a7966c489f4c748a7ae980aa27a574251767caf9:"3000000000000000000000",ea53c954f4ed97fd4810111bdab69ef981ef25b9:"17300000000000000000000","03a26cfc4c18316f70d59e9e1a79ee3e8b962f4c":"2000000000000000000000","3e63ce3b24ca2865b4c5a687b7aea3597ef6e548":"2000000000000000000000","500c902958f6421594d1b6ded712490d52ed6c44":"1970000000000000000000","6f44ca09f0c6a8294cbd519cdc594ad42c67579f":"50000000000000000000","3616fb46c81578c9c8eb4d3bf880451a88379d7d":"200000000000000000000","57bc20e2d62b3d19663cdb4c309d5b4f2fc2db8f":"100000000000000000000","1cebf0985d7f680aaa915c44cc62edb49eab269e":"1000000000000000000000",c0cbf6032fa39e7c46ff778a94f7d445fe22cf30:"310000000000000000000",c58b9cc61dedbb98c33f224d271f0e228b583433:"3880000000000000000000",e9c6dfae97f7099fc5f4e94b784db802923a1419:"48800000000000000000","9bacd3d40f3b82ac91a264d9d88d908eac8664b9":"20000000000000000000000","63d80048877596e0c28489e650cd4ac180096a49":"280000000000000000000",e6a6f6dd6f70a456f4ec15ef7ad5e5dbb68bd7dc:"200000000000000000000",d418870bc2e4fa7b8a6121ae0872d55247b62501:"1580000000000000000000",e2f9383d5810ea7b43182b8704b62b27f5925d39:"400000000000000000000",bd5e473abce8f97a6932f77c2facaf9cc0a00514:"1117350000000000000000","2ff1ca55fd9cec1b1fe9f0a9abb74c513c1e2aaa":"3000000000000000000000","9d99b189bbd9a48fc2e16e8fcda33bb99a317bbb":"1126900000000000000000","6e96faeda3054302c45f58f161324c99a3eebb62":"20000000000000000000",ef93818f684db0c3675ec81332b3183ecc28a495:"1550000000000000000000","2659facb1e83436553b5b42989adb8075f9953ed":"29356000000000000000",c4ffadaaf2823fbea7bff702021bffc4853eb5c9:"42233000000000000000",e9864c1afc8eaad37f3ba56fcb7477cc622009b7:"79000000000000000000","87ef6d8b6a7cbf9b5c8c97f67ee2adc2a73b3f77":"200400000000000000000",c043f2452dcb9602ef62bd360e033dd23971fe84:"2000000000000000000000","0fdd65402395df9bd19fee4507ef5345f745104c":"5000000000000000000000","939c4313d2280edf5e071bced846063f0a975d54":"120000000000000000000000",b28245037cb192f75785cb86cbfe7c930da258b0:"16000000000000000000000",a80cb1738bac08d4f9c08b4deff515545fa8584f:"500000000000000000000","62971bf2634cee0be3c9890f51a56099dbb9519b":"656000000000000000000",f2efe96560c9d97b72bd36447843885c1d90c231:"2000000000000000000000","0e390f44053ddfcef0d608b35e4d9c2cbe9871bb":"1970000000000000000000","61d101a033ee0e2ebb3100ede766df1ad0244954":"500000000000000000000","6785513cf732e47e87670770b5419be10cd1fc74":"2000000000000000000000","167699f48a78c615512515739958993312574f07":"39000000000000000000","68ec79d5be7155716c40941c79d78d17de9ef803":"500600000000000000000",a0e8ba661b48154cf843d4c2a5c0f792d528ee29:"400000000000000000000","1a201b4327cea7f399046246a3c87e6e03a3cda8":"1000000000000000000000",f60f62d73937953fef35169e11d872d2ea317eec:"5348000000000000000000",c0c04d0106810e3ec0e54a19f2ab8597e69a573d:"50000000000000000000",ef47cf073e36f271d522d7fa4e7120ad5007a0bc:"2500000000000000000000",a44fe800d96fcad73b7170d0f610cb8c0682d6ce:"4000000000000000000000","010f4a98dfa1d9799bf5c796fb550efbe7ecd877":"8023366000000000000000","708fa11fe33d85ad1befcbae3818acb71f6a7d7e":"18200000000000000000",b38c4e537b5df930d65a74d043831d6b485bbde4:"400000000000000000000","250a69430776f6347703f9529783955a6197b682":"1940000000000000000000","2d35a9df62757f7ffad1049afb06ca4afc464c51":"20000000000000000000","6aff1466c2623675e3cb0e75e423d37a25e442eb":"1730000000000000000000",fc15cb99a8d1030b12770add033a79ee0d0c908c:"350056000000000000000",e784dcc873aa8c1513ec26ff36bc92eac6d4c968:"200000000000000000000",b1c328fb98f2f19ab6646f0a7c8c566fda5a8540:"2500000000000000000000","247a0a11c57f0383b949de540b66dee68604b0a1":"1069600000000000000000","1af60343360e0b2d75255210375720df21db5c7d":"1000000000000000000000","8794bf47d54540ece5c72237a1ffb511ddb74762":"2000000000000000000000",e76d945aa89df1e457aa342b31028a5e9130b2ce:"1015200000000000000000",a30e0acb534c9b3084e8501da090b4eb16a2c0cd:"2000000000000000000000","7099d12f6ec656899b049a7657065d62996892c8":"400000000000000000000","7be7f2456971883b9a8dbe4c91dec08ac34e8862":"3000000000000000000000","42746aeea14f27beff0c0da64253f1e7971890a0":"1550000000000000000000","736b44503dd2f6dd5469ff4c5b2db8ea4fec65d0":"313950000000000000000","822edff636563a6106e52e9a2598f7e6d0ef2782":"36099000000000000000","03c647a9f929b0781fe9ae01caa3e183e876777e":"445800000000000000000","63612e7862c27b587cfb6daf9912cb051f030a9f":"43458000000000000000",d46bae61b027e5bb422e83a3f9c93f3c8fc77d27:"2000000000000000000000","5f23ba1f37a96c45bc490259538a54c28ba3b0d5":"1200000000000000000000",d41d7fb49fe701baac257170426cc9b38ca3a9b2:"176000000000000000000","1ebacb7844fdc322f805904fbf1962802db1537c":"10000000000000000000000","9c80bc18e9f8d4968b185da8c79fa6e11ffc3e23":"240000000000000000000",e4ca0a5238564dfc91e8bf22bade2901619a1cd4:"1000000000000000000000","1ad72d20a76e7fcc6b764058f48d417d496fa6cd":"2000000000000000000000",d3bc730937fa75d8452616ad1ef1fe7fffe0d0e7:"83363000000000000000",eac1482826acb6111e19d340a45fb851576bed60:"32177000000000000000","01e40521122530d9ac91113c06a0190b6d63850b":"1337000000000000000000","9e20e5fd361eabcf63891f5b87b09268b8eb3793":"100000000000000000000","69ff429074cb9b6c63bc914284bce5f0c8fbf7d0":"500000000000000000000","0d3265d3e7bdb93d5e8e8b1ca47f210a793ecc8e":"200000000000000000000","5b4ea16db6809b0352d4b6e81c3913f76a51bb32":"400000000000000000000",d8fe088fffce948f5137ee23b01d959e84ac4223:"227942000000000000000","7e4e9409704121d1d77997026ff06ea9b19a8b90":"2602600000000000000000","96b434fe0657e42acc8212b6865139dede15979c":"4000000000000000000000","22f004df8de9e6ebf523ccace457accb26f97281":"10000000000000000000000",d8f9240c55cff035523c6d5bd300d370dc8f0c95:"285000000000000000000","9d9e57fde30e5068c03e49848edce343b7028358":"1730000000000000000000","317cf4a23cb191cdc56312c29d15e210b3b9b784":"144000000000000000000","79f08e01ce0988e63c7f8f2908fade43c7f9f5c9":"18200000000000000000","04e5f5bc7c923fd1e31735e72ef968fd67110c6e":"1611000000000000000000","1ec4ec4b77bf19d091a868e6f49154180541f90e":"2000000000000000000000","8737dae671823a8d5917e0157ace9c43468d946b":"1999944000000000000000",f998ca3411730a6cd10e7455b0410fb0f6d3ff80:"2000000000000000000000","6e2eab85dc89fe29dc0aa1853247dab43a523d56":"80000000000000000000","72c083beadbdc227c5fb43881597e32e83c26056":"20000000000000000000000","5902e44af769a87246a21e079c08bf36b06efeb3":"1000000000000000000000",cc2d04f0a4017189b340ca77198641dcf6456b91:"3940000000000000000000",bde4c73f969b89e9ceae66a2b51844480e038e9a:"1000000000000000000000",adff0d1d0b97471e76d789d2e49c8a74f9bd54ff:"1880000000000000000000","397cdb8c80c67950b18d654229610e93bfa6ee1a":"1172938000000000000000",a3e051fb744aa3410c3b88f899f5d57f168df12d:"2955000000000000000000","810db25675f45ea4c7f3177f37ce29e22d67999c":"200000000000000000000","1e13ec51142cebb7a26083412c3ce35144ba56a1":"5000000000000000000000","25bdfa3ee26f3849617b230062588a97e3cae701":"1000008000000000000000",ae538c73c5b38d8d584d7ebdadefb15cabe48357:"999000000000000000000",a2ecce2c49f72a0995a0bda57aacf1e9f001e22a:"4000000000000000000000","7e24fbdad290175eb2df6d180a19b9a9f41370be":"1000000000000000000000",e8cc43bc4f8acf39bff04ebfbf42aac06a328470:"400000000000000000000",c2779771f0536d79a8708f6931abc44b3035e999:"20002000000000000000000",ab27ba78c8e5e3daef31ad05aef0ff0325721e08:"468000000000000000000","563cb8803c1d32a25b27b64114852bd04d9c20cd":"204400000000000000000","08d4267feb15da9700f7ccc3c84a8918bf17cfde":"1790000000000000000000",d1778c13fbd968bc083cb7d1024ffe1f49d02caa:"4020000000000000000000","1796bcc97b8abc717f4b4a7c6b1036ea2182639f":"355242000000000000000",beecd6af900c8b064afcc6073f2d85d59af11956:"2000000000000000000000","045ed7f6d9ee9f252e073268db022c6326adfc5b":"100000000000000000000",b88a37c27f78a617d5c091b7d5b73a3761e65f2a:"2000000000000000000000","72fb49c29d23a18950c4b2dc0ddf410f532d6f53":"2000000000000000000000","6ecaefa6fc3ee534626db02c6f85a0c395571e77":"600000000000000000000",d1811c55976980f083901d8a0db269222dfb5cfe:"1550000000000000000000","98855c7dfbee335344904a12c40c731795b13a54":"1069600000000000000000","92a898d46f19719c38126a8a3c27867ae2cee596":"2000000000000000000000",ca428863a5ca30369892d612183ef9fb1a04bcea:"1520000000000000000000","797427e3dbf0feae7a2506f12df1dc40326e8505":"1000000000000000000000","3d574fcf00fae1d98cc8bf9ddfa1b3953b9741bc":"1970000000000000000000","28818e18b610001321b31df6fe7d2815cdadc9f5":"1000000000000000000000","5f3e1e6739b0c62200e00a003691d9efb238d89f":"3000000000000000000000",d9d370fec63576ab15b318bf9e58364dc2a3552a:"100000000000000000000",b223bf1fbf80485ca2b5567d98db7bc3534dd669:"4000000000000000000000","7b27d0d1f3dd3c140294d0488b783ebf4015277d":"400000000000000000000","7930c2d9cbfa87f510f8f98777ff8a8448ca5629":"199955000000000000000","820c19291196505b65059d9914b7090be1db87de":"140000000000000000000",e545ee84ea48e564161e9482d59bcf406a602ca2:"1850000000000000000000",af4cf41785161f571d0ca69c94f8021f41294eca:"9850000000000000000000","7a4f9b850690c7c94600dbee0ca4b0a411e9c221":"1910000000000000000000",ddab6b51a9030b40fb95cf0b748a059c2417bec7:"2000000000000000000000","315ef2da620fd330d12ee55de5f329a696e0a968":"150000000000000000000","4db1c43a0f834d7d0478b8960767ec1ac44c9aeb":"872870000000000000000","2fef81478a4b2e8098db5ff387ba2153f4e22b79":"999000000000000000000","6c6aa0d30b64721990b9504a863fa0bfb5e57da7":"2700000000000000000000","33380c6fff5acd2651309629db9a71bf3f20c5ba":"16100000000000000000000","4eebf1205d0cc20cee6c7f8ff3115f56d48fba26":"19400000000000000000","03cc9d2d21f86b84ac8ceaf971dba78a90e62570":"1610000000000000000000","728f9ab080157db3073156dbca1a169ef3179407":"500000000000000000000", -"30ed11b77bc17e5e6694c8bc5b6e4798f68d9ca7":"143731500000000000000000",f617b967b9bd485f7695d2ef51fb7792d898f500:"500000000000000000000",c0cbad3ccdf654da22cbcf5c786597ca1955c115:"2000000000000000000000","80522ddf944ec52e27d724ed4c93e1f7be6083d6":"200000000000000000000","4e90ccb13258acaa9f4febc0a34292f95991e230":"15800000000000000000",ff207308ced238a6c01ad0213ca9eb4465d42590:"1999944000000000000000","35f2949cf78bc219bb4f01907cf3b4b3d3865482":"289800000000000000000","68f525921dc11c329b754fbf3e529fc723c834cd":"1610000000000000000000","81139bfdcca656c430203f72958c543b6580d40c":"2000000000000000000000","9d511543b3d9dc60d47f09d49d01b6c498d82078":"11245000000000000000000","084d103254759b343cb2b9c2d8ff9e1ac5f14596":"7600000000000000000000",b323dcbf2eddc5382ee4bbbb201ca3931be8b438:"2000000000000000000000","349d2c918fd09e2807318e66ce432909176bd50b":"1120000000000000000000",b535f8db879fc67fec58824a5cbe6e5498aba692:"1910000000000000000000","824074312806da4748434266ee002140e3819ac2":"1507000000000000000000",e8ef100d7ce0895832f2678df72d4acf8c28b8e3:"500038000000000000000","84af1b157342d54368260d17876230a534b54b0e":"985000000000000000000","419a71a36c11d105e0f2aef5a3e598078e85c80b":"5000000000000000000000","55af092f94ba6a79918b0cf939eab3f01b3f51c7":"149940000000000000000","35a549e8fd6c368d6dcca6d2e7d18e4db95f5284":"499938000000000000000",f0e2649c7e6a3f2c5dfe33bbfbd927ca3c350a58:"2000000000000000000000",f4b759cc8a1c75f80849ebbcda878dc8f0d66de4:"400000000000000000000","21846f2fdf5a41ed8df36e5ed8544df75988ece3":"1999944000000000000000","229ff80bf5708009a9f739e0f8b560914016d5a6":"333333000000000000000",da505537537ffb33c415fec64e69bae090c5f60f:"160000000000000000000",b91d9e916cd40d193db60e79202778a0087716fc:"404800000000000000000",bb6823a1bd819f13515538264a2de052b4442208:"25610000000000000000","459393d63a063ef3721e16bd9fde45ee9dbd77fb":"1968818000000000000000","95f62d0243ede61dad9a3165f53905270d54e242":"1610000000000000000000",b0bb29a861ea1d424d45acd4bfc492fb8ed809b7:"80000000000000000000","5e74ed80e9655788e1bb269752319667fe754e5a":"56000000000000000000",a276b058cb98d88beedb67e543506c9a0d9470d8:"2668652000000000000000","8ae9ef8c8a8adfa6ab798ab2cdc405082a1bbb70":"2000000000000000000000",e5102c3b711b810344197419b1cd8a7059f13e32:"299999000000000000000",c32038ca52aee19745be5c31fcdc54148bb2c4d0:"49984000000000000000","13e321728c9c57628058e93fc866a032dd0bda90":"714580000000000000000",c2bae4a233c2d85724f0dabebda0249d833e37d3:"5000000000000000000000","10d32416722ca4e648630548ead91edd79c06aff":"100000000000000000000",d5f07552b5c693c20067b378b809cee853b8f136:"505540000000000000000","8668af868a1e98885f937f2615ded6751804eb2d":"20000000000000000000","139d3531c9922ad56269f6309aa789fb2485f98c":"4000000000000000000000","1d29c7aab42b2048d2b25225d498dba67a03fbb2":"200000000000000000000",d35075ca61fe59d123969c36a82d1ab2d918aa38:"2674000000000000000000",d6fc0446c6a8d40ae3551db7e701d1fa876e4a49:"2000000000000000000000",fccd0d1ecee27addea95f6857aeec8c7a04b28ee:"10000000000000000000000",c12cfb7b3df70fceca0ede263500e27873f8ed16:"1000000000000000000000",d0db456178206f5c4430fe005063903c3d7a49a7:"706245000000000000000","73cf80ae9688e1580e68e782cd0811f7aa494d2c":"7760000000000000000000",d60651e393783423e5cc1bc5f889e44ef7ea243e:"398800000000000000000","048a8970ea4145c64d5517b8de5b46d0595aad06":"20000000000000000000000",dd9b485a3b1cd33a6a9c62f1e5bee92701856d25:"225073000000000000000","5b287c7e734299e727626f93fb1187a60d5057fe":"101230000000000000000","635c00fdf035bca15fa3610df3384e0fb79068b1":"9000000000000000000000","630a913a9031c9492abd4c41dbb15054cfec4416":"5688000000000000000000",af3614dcb68a36e45a4e911e62796247222d595b:"2259800000000000000000","335e22025b7a77c3a074c78b8e3dfe071341946e":"10178744000000000000000",f0e1dfa42adeac2f17f6fdf584c94862fd563393:"500000000000000000000","1a9e702f385dcd105e8b9fa428eea21c57ff528a":"1400000000000000000000","8ce4949d8a16542d423c17984e6739fa72ceb177":"24999975000000000000000","5f29c9de765dde25852af07d33f2ce468fd20982":"2000000000000000000000",dbf5f061a0f48e5e69618739a77d2ec19768d201:"152000000000000000000",b247cf9c72ec482af3eaa759658f793d670a570c:"912000000000000000000","99f4147ccc6bcb80cc842e69f6d00e30fa4133d9":"400000000000000000000",ba6d31b9a261d640b5dea51ef2162c3109f1eba8:"5000000000000000000000",f05ba8d7b68539d933300bc9289c3d9474d0419e:"126400000000000000000","682e96276f518d31d7e56e30dfb009c1218201bd":"20000000000000000000","0927220492194b2eda9fc4bbe38f25d681dfd36c":"6000000000000000000000",a3c33afc8cb4704e23153de2049d35ae71332472:"799600000000000000000","05c736d365aa37b5c0be9c12c8ad5cd903c32cf9":"6002000000000000000000",d8eef4cf4beb01ee20d111748b61cb4d3f641a01:"2740000000000000000000","16c1bf5b7dc9c83c179efacbcf2eb174e3561cb3":"1000000000000000000000",d79db5ab43621a7a3da795e58929f3dd25af67d9:"1999944000000000000000","28efae6356509edface89fc61a7fdcdb39eea8e5":"5348000000000000000000",c55005a6c37e8ca7e543ce259973a3cace961a4a:"2000000000000000000000",ab3d86bc82927e0cd421d146e07f919327cdf6f9:"1910000000000000000000",b74ed2666001c16333cf7af59e4a3d4860363b9c:"193600000000000000000","1899f69f653b05a5a6e81f480711d09bbf97588c":"1955000000000000000000","27fc85a49cff90dbcfdadc9ddd40d6b9a2210a6c":"100000000000000000000",cd1ed263fbf6f6f7b48aef8f733d329d4382c7c7:"18500000000000000000",d97fe6f53f2a58f6d76d752adf74a8a2c18e9074:"309990000000000000000","80da2fdda29a9e27f9e115975e69ae9cfbf3f27e":"200000000000000000000","09146ea3885176f07782e1fe30dce3ce24c49e1f":"20000000000000000000","393ff4255e5c658f2e7f10ecbd292572671bc2d2":"2000000000000000000000",a390ca122b8501ee3e5e07a8ca4b419f7e4dae15:"100000000000000000000","6d9193996b194617211106d1635eb26cc4b66c6c":"399640000000000000000","999c49c174ca13bc836c1e0a92bff48b271543ca":"3280000000000000000000","7421ce5be381738ddc83f02621974ff0686c79b8":"1632000000000000000000","6be9030ee6e2fbc491aca3de4022d301772b7b7d":"26740000000000000000","81bd75abd865e0c3f04a0b4fdbcb74d34082fbb7":"4000000000000000000000","8bc1ff8714828bf286ff7e8a7709106548ed1b18":"10000000000000000000000",a0aadbd9509722705f6d2358a5c79f37970f00f6:"200000000000000000000","3d881433f04a7d0d27f84944e08a512da3555287":"1200000000000000000000",cc1d6ead01aada3e8dc7b95dca25df26eefa639d:"2000000000000000000000","35106ba94e8563d4b3cb3c5c692c10e604b7ced8":"2000000000000000000000","4d8697af0fbf2ca36e8768f4af22133570685a60":"20000000000000000000","1afcc585896cd0ede129ee2de5c19ea811540b64":"3231259000000000000000",e5215631b14248d45a255296bed1fbfa0330ff35:"1310000000000000000000",e3878f91ca86053fced5444686a330e09cc388fb:"194000000000000000000","555df19390c16d01298772bae8bc3a1152199cbd":"200000000000000000000",dc3dae59ed0fe18b58511e6fe2fb69b219689423:"100000000000000000000","74648caac748dd135cd91ea14c28e1bd4d7ff6ae":"3100000000000000000000",cf2e2ad635e9861ae95cb9bafcca036b5281f5ce:"35200000000000000000000","14eec09bf03e352bd6ff1b1e876be664ceffd0cf":"20094000000000000000","856e5ab3f64c9ab56b009393b01664fc0324050e":"1790000000000000000000","632b9149d70178a7333634275e82d5953f27967b":"700000000000000000000","2a39190a4fde83dfb3ddcb4c5fbb83ac6c49755c":"1000000000000000000000","369ef761195f3a373e24ece6cd22520fe0b9e86e":"534933000000000000000","16afa787fc9f94bdff6976b1a42f430a8bf6fb0f":"2000000000000000000000","1b0b31afff4b6df3653a94d7c87978ae35f34aae":"354600000000000000000",b4d82f2e69943f7de0f5f7743879406fac2e9cec:"40000000000000000000","09d6cefd75b0c4b3f8f1d687a522c96123f1f539":"6000000000000000000000","01577afd4e50890247c9b10d44af73229aec884f":"680000000000000000000",a35606d51220ee7f2146d411582ee4ee4a45596e:"3996800000000000000000","352e77c861696ef96ad54934f894aa8ea35151dd":"1000000000000000000000",b87f5376c2de0b6cc3c179c06087aa473d6b4674:"1337000000000000000000","5b49afcd75447838f6e7ceda8d21777d4fc1c3c0":"4000000000000000000000",b884add88d83dc564ab8e0e02cbdb63919aea844:"2000000000000000000000","5c312a56c784b122099b764d059c21ece95e84ca":"95000000000000000000","4697baaf9ccb603fd30430689d435445e9c98bf5":"199600000000000000000",c625f8c98d27a09a1bcabd5128b1c2a94856af30:"200000000000000000000","19f5caf4c40e6908813c0745b0aea9586d9dd931":"664000000000000000000","1e596a81b357c6f24970cc313df6dbdaabd0d09e":"2000000000000000000000",c1631228efbf2a2e3a4092ee8900c639ed34fbc8:"955000000000000000000","6f6cf20649a9e973177ac67dbadee4ebe5c7bdda":"5080000000000000000000","5fa7bfe043886127d4011d8356a47e947963aca8":"1820000000000000000000","6af8e55969682c715f48ad4fc0fbb67eb59795a3":"2000000000000000000000","122f56122549d168a5c5e267f52662e5c5cce5c8":"185000000000000000000","7713ab8037411c09ba687f6f9364f0d3239fac28":"10000000000000000000000","31ccc616b3118268e75d9ab8996c8858ebd7f3c3":"399924000000000000000","09c88f917e4d6ad473fa12e98ea3c4472a5ed6da":"10000000000000000000000",e796fd4e839b4c95d7510fb7c5c72b83c6c3e3c7:"512200000000000000000",a8285539869d88f8a961533755717d7eb65576ae:"200000000000000000000",d929c65d69d5bbaea59762662ef418bc21ad924a:"1000000000000000000000",f7418aa0e713d248228776b2e7434222ae75e3a5:"2000000000000000000000","7f0b90a1fdd48f27b268feb38382e55ddb50ef0f":"940000000000000000000","34a0431fff5ead927f3c69649616dc6e97945f6f":"400000000000000000000","1b3cb81e51011b549d78bf720b0d924ac763a7c2":"560000000000000000000000","155b3779bb6d56342e2fda817b5b2d81c7f41327":"50200000000000000000",ecd486fc196791b92cf612d348614f9156488b7e:"12000000000000000000000","82a8cbbfdff02b2e38ae4bbfca15f1f0e83b1aea":"84999000000000000000","06b0c1e37f5a5ec4bbf50840548f9d3ac0288897":"4000098000000000000000",e6d49f86c228f47367a35e886caacb271e539429:"412656000000000000000","704a6eb41ba34f13addde7d2db7df04915c7a221":"1820000000000000000000","745ccf2d819edbbddea8117b5c49ed3c2a066e93":"4000000000000000000000","6d3b7836a2b9d899721a4d237b522385dce8dfcd":"1000070000000000000000","856aa23c82d7215bec8d57f60ad75ef14fa35f44":"20000000000000000000000",ea79057dabef5e64e7b44f7f18648e7e533718d2:"200000000000000000000","9df057cd03a4e27e8e032f857985fd7f01adc8d7":"2000000000000000000000","5f2f07d2d697e8c567fcfdfe020f49f360be2139":"2000000000000000000000","5efbdfe5389999633c26605a5bfc2c1bb5959393":"69200000000000000000","047e87c8f7d1fce3b01353a85862a948ac049f3e":"1490000000000000000000","265383d68b52d034161bfab01ae1b047942fbc32":"21000600000000000000000","760ff3354e0fde938d0fb5b82cef5ba15c3d2916":"10000000000000000000000",bc46d537cf2edd403565bde733b2e34b215001bd:"20000000000000000000000",ee58fb3db29070d0130188ce472be0a172b89055:"10021400000000000000000","75abe5270f3a78ce007cf37f8fbc045d489b7bb1":"1999944000000000000000","5fc6c11426b4a1eae7e51dd512ad1090c6f1a85b":"2730000000000000000000","26cfffd052152bb3f957b478d5f98b233a7c2b92":"4000000000000000000000","0a4a011995c681bc999fdd79754e9a324ae3b379":"41350300000000000000000","6fa60df818a5446418b1bbd62826e0b9825e1318":"13200000000000000000000","63d55ad99b9137fd1b20cc2b4f03d42cbaddf334":"400000000000000000000","679b9a109930517e8999099ccf2a914c4c8dd934":"60000000000000000000","3e83544f0082552572c782bee5d218f1ef064a9d":"100076000000000000000","968b14648f018333687cd213fa640aec04ce6323":"1000000000000000000000","427b462ab84e5091f48a46eb0cdc92ddcb26e078":"2000000000000000000000",df8510793eee811c2dab1c93c6f4473f30fbef5b:"1000000000000000000000","362fbcb10662370a068fc2652602a2577937cce6":"200000000000000000000","5d83b21bd2712360436b67a597ee3378db3e7ae4":"2000000000000000000000","5777441c83e03f0be8dd340bde636850847c620b":"10000000000000000000000",c94a585203da7bbafd93e15884e660d4b1ead854:"7000000000000000000000","35a08081799173e001cc5bd46a02406dc95d1787":"10000000000000000000000","21d13f0c4024e967d9470791b50f22de3afecf1b":"4452210000000000000000",fdfd6134c04a8ab7eb16f00643f8fed7daaaecb2:"400000000000000000000",fd812bc69fb170ef57e2327e80affd14f8e4b6d2:"2000000000000000000000","7148aef33261d8031fac3f7182ff35928daf54d9":"4100000000000000000000","0b06390f2437b20ec4a3d3431b3279c6583e5ed7":"194000000000000000000","4909b31998ead414b8fb0e846bd5cbde393935be":"4000000000000000000000",b70dba9391682b4a364e77fe99256301a6c0bf1f:"200000000000000000000","6b83bae7b565244558555bcf4ba8da2011891c17":"2000000000000000000000","70a03549aa6168e97e88a508330a5a0bea74711a":"1337000000000000000000","0fc9a0e34145fbfdd2c9d2a499b617d7a02969b9":"180000000000000000000","2ddf40905769bcc426cb2c2938ffe077e1e89d98":"3000000000000000000000","794b51c39e53d9e762b0613b829a44b472f4fff3":"667965000000000000000",d062588171cf99bbeb58f126b870f9a3728d61ec:"4500000000000000000000","8db185fe1b70a94a6a080e7e23a8bedc4acbf34b":"1400000000000000000000",e73bfeada6f0fd016fbc843ebcf6e370a65be70c:"1970000000000000000000","79ed10cf1f6db48206b50919b9b697081fbdaaf3":"2000000000000000000000","276b0521b0e68b277df0bb32f3fd48326350bfb2":"50000000000000000000","2e439348df8a4277b22a768457d1158e97c40904":"776970000000000000000","6c25327f8dcbb2f45e561e86e35d8850e53ab059":"1103200000000000000000","04d73896cf6593a691972a13a6e4871ff2c42b13":"2000000000000000000000",b10fd2a647102f881f74c9fbc37da632949f2375:"40000000000000000000","615f82365c5101f071e7d2cb6af14f7aad2c16c6":"20000000000000000000","93aa8f92ebfff991fc055e906e651ac768d32bc8":"940000000000000000000","0cbf8770f0d1082e5c20c5aead34e5fca9ae7ae2":"1000000000000000000000",ffc9cc3094b041ad0e076f968a0de3b167255866:"432400000000000000000","46531e8b1bde097fdf849d6d119885608a008df7":"200000000000000000000","23cd2598a20e149ead2ad69379576ecedb60e38e":"2000000000000000000000","85ca8bc6da2803d0725f5e1a456c89f9bc774e2f":"600000000000000000000",c0725ec2bdc33a1d826071dea29d62d4385a8c25:"40740000000000000000000","0e4765790352656bc656682c24fc5ef3e76a23c7":"46610000000000000000","2ef9e465716acacfb8c8252fa8e7bc7969ebf6e4":"2760000000000000000000","0ec5308b31282e218fc9e759d4fec5db3708cec4":"1001000000000000000000",bf7701fc6225d5a17815438a8941d21ebc5d059d:"1880000000000000000000",c489c83ffbb0252ac0dbe3521217630e0f491f14:"4000000000000000000000","8eb51774af206b966b8909c45aa6722748802c0c":"500000000000000000000","7b9226d46fe751940bc416a798b69ccf0dfab667":"4200000000000000000000","8f660f8b2e4c7cc2b4ac9c47ed28508d5f8f8650":"20000000000000000000000","9f19fac8a32437d80ac6837a0bb7841729f4972e":"650100000000000000000","201864a8f784c2277b0b7c9ee734f7b377eab648":"4467000000000000000000",a6101c961e8e1c15798ffcd0e3201d7786ec373a:"6000000000000000000000",d4ff46203efa23064b1caf00516e28704a82a4f8:"1337000000000000000000",aa136b47962bb8b4fb540db4ccf5fdd042ffb8cf:"500038000000000000000","704ae21d762d6e1dde28c235d13104597236db1a":"2000000000000000000000",f17a92e0361dbacecdc5de0d1894955af6a9b606:"2000000000000000000000","8b48e19d39dd35b66e6e1bb6b9c657cb2cf59d04":"17844175000000000000000","9ad47fdcf9cd942d28effd5b84115b31a658a13e":"3290000000000000000000",df0d08617bd252a911df8bd41a39b83ddf809673:"10000000000000000000000","4c666b86f1c5ee8ca41285f5bde4f79052081406":"500000000000000000000","88dec5bd3f4eba2d18b8aacefa7b721548c319ba":"1370000000000000000000","9f9fe0c95f10fee87af1af207236c8f3614ef02f":"6000000000000000000000",f7d0d310acea18406138baaabbfe0571e80de85f:"1337000000000000000000","9569c63a9284a805626db3a32e9d236393476151":"1970000000000000000000","5d5c2c1099bbeefb267e74b58880b444d94449e0":"253574000000000000000","8c6ae7a05a1de57582ae2768204276c0ff47ed03":"208000000000000000000000","432d884bd69db1acc0d89c64ade4cb4fc3a88b7a":"2483000000000000000000","672cbca8440a8577097b19aff593a2ad9d28a756":"80000000000000000000","19df9445a81c1b3d804aeaeb6f6e204e4236663f":"37387000000000000000","1cb5f33b4d488936d13e3161da33a1da7df70d1b":"200000000000000000000",df60f18c812a11ed4e2776e7a80ecf5e5305b3d6:"900000000000000000000",c99a9cd6c9c1be3534eecd92ecc22f5c38e9515b:"4821030000000000000000","00c40fe2095423509b9fd9b754323158af2310f3":"0",da4a5f557f3bab390a92f49b9b900af30c46ae80:"10000000000000000000000",f36df02fbd89607347afce2969b9c4236a58a506:"2000000000000000000000",c549df83c6f65eec0f1dc9a0934a5c5f3a50fd88:"2910000000000000000000","9f662e95274121f177566e636d23964cf1fd686f":"2000000000000000000000","5a267331facb262daaecd9dd63a9700c5f5259df":"100000000000000000000","117d9aa3c4d13bee12c7500f09f5dd1c66c46504":"206000000000000000000","1b4d07acd38183a61bb2783d2b7b178dd502ac8d":"200000000000000000000","3c0c3defac9cea7acc319a96c30b8e1fedab4574":"1940000000000000000000",e4dc22ed595bf0a337c01e03cc6be744255fc9e8:"191000000000000000000","8f067c7c1bbd57780b7b9eeb9ec0032f90d0dcf9":"20000000000000000000000","40e2440ae142c880366a12c6d4102f4b8434b62a":"1000000000000000000000",f9ece022bccd2c92346911e79dd50303c01e0188:"1000000000000000000000",f70328ef97625fe745faa49ee0f9d4aa3b0dfb69:"1000000000000000000000",b6aacb8cb30bab2ae4a2424626e6e12b02d04605:"8000000000000000000000","154459fa2f21318e3434449789d826cdc1570ce5":"2000000000000000000000","684a44c069339d08e19a75668bdba303be855332":"70000000000000000000000","9fe501aa57ead79278937cd6308c5cfa7a5629fe":"50003000000000000000","3e45bd55db9060eced923bb9cb733cb3573fb531":"1640000000000000000000","9c9f3b8a811b21f3ff3fe20fe970051ce66a824f":"1157740000000000000000",e99aece90541cae224b87da673965e0aeb296afd:"920000000000000000000","2f6dce1330c59ef921602154572d4d4bacbd048a":"1000000000000000000000","6a6353b971589f18f2955cba28abe8acce6a5761":"3000000000000000000000","98c10ebf2c4f97cba5a1ab3f2aafe1cac423f8cb":"300000000000000000000","8077c3e4c445586e094ce102937fa05b737b568c":"100000000000000000000","13371f92a56ea8381e43059a95128bdc4d43c5a6":"1000000000000000000000","35a6885083c899dabbf530ed6c12f4dd3a204cf5":"200000000000000000000","36b2c85e3aeeebb70d63c4a4730ce2e8e88a3624":"10000000000000000000000","5ce44068b8f4a3fe799e6a8311dbfdeda29dee0e":"2000000000000000000000","6fa6388d402b30afe59934c3b9e13d1186476018":"670000000000000000000","8251358ca4e060ddb559ca58bc0bddbeb4070203":"2000000000000000000000","17e86f3b5b30c0ba59f2b2e858425ba89f0a10b0":"2000000000000000000000","298ec76b440d8807b3f78b5f90979bee42ed43db":"30000000000000000000000",ce4b065dbcb23047203262fb48c1188364977470:"500000000000000000000",c8e2adeb545e499d982c0c117363ceb489c5b11f:"985000000000000000000","9928ff715afc3a2b60f8eb4cc4ba4ee8dab6e59d":"440000000000000000000",c76130c73cb9210238025c9df95d0be54ac67fbe:"1500000000000000000000","72d03d4dfab3500cf89b86866f15d4528e14a195":"4488000000000000000000",d193e583d6070563e7b862b9614a47e99489f3e5:"999972000000000000000","4df140ba796585dd5489315bca4bba680adbb818":"2674000000000000000000","009eef0a0886056e3f69211853b9b7457f3782e4":"3000512000000000000000","6e255b700ae7138a4bacf22888a9e2c00a285eec":"4000000000000000000000",aa47a4ffc979363232c99b99fada0f2734b0aeee:"8121800000000000000000","9d069197d1de50045a186f5ec744ac40e8af91c6":"2000000000000000000000",b514882c979bb642a80dd38754d5b8c8296d9a07:"955000000000000000000","17c0478657e1d3d17aaa331dd429cecf91f8ae5d":"999942000000000000000","5f9616c47b4a67f406b95a14fe6fc268396f1721":"200000000000000000000",f70a998a717b338d1dd99854409b1a338deea4b0:"2000000000000000000000",d1ee905957fe7cc70ec8f2868b43fe47b13febff:"44000000000000000000",fc018a690ad6746dbe3acf9712ddca52b6250039:"10000000000000000000000","5118557d600d05c2fcbf3806ffbd93d02025d730":"11360000000000000000000","1ef5c9c73650cfbbde5c885531d427c7c3fe5544":"6000000000000000000000",d1a396dcdab2c7494130b3fd307820340dfd8c1f:"17952000000000000000","2d8e061892a5dcce21966ae1bb0788fd3e8ba059":"250066000000000000000","8834b2453471f324fb26be5b25166b5b5726025d":"573000000000000000000","14f221159518783bc4a706676fc4f3c5ee405829":"200000000000000000000",c056d4bd6bf3cbacac65f8f5a0e3980b852740ae:"100000000000000000000","560536794a9e2b0049d10233c41adc5f418a264a":"1000000000000000000000",bc9e0ec6788f7df4c7fc210aacd220c27e45c910:"500000000000000000000","54bcb8e7f73cda3d73f4d38b2d0847e600ba0df8":"1078000000000000000000","4361d4846fafb377b6c0ee49a596a78ddf3516a3":"3580000000000000000000","41c3c2367534d13ba2b33f185cdbe6ac43c2fa31":"4000000000000000000000","5dc6f45fef26b06e3302313f884daf48e2746fb9":"500000000000000000000",ad414d29cb7ee973fec54e22a388491786cf5402:"14000000000000000000000","802dc3c4ff2d7d925ee2859f4a06d7ba60f1308c":"98040000000000000000","2aed2ce531c056b0097efc3c6de10c4762004ed9":"10430000000000000000000","39782ffe06ac78822a3c3a8afe305e50a56188ce":"10000000000000000000000",ec73833de4b810bb027810fc8f69f544e83c12d1:"1000000000000000000000","8d51a4cc62011322c696fd725b9fb8f53feaaa07":"1000000000000000000000","29298ccbdff689f87fe41aa6e98fdfb53deaf37a":"19800000000000000000000","827531a6c5817ae35f82b00b9754fcf74c55e232":"3600000000000000000000","9c581a60b61028d934167929b22d70b313c34fd0":"50000000000000000000000","0a077db13ffeb09484c217709d5886b8bf9c5a8b":"4000000000000000000000","07b7a57033f8f11330e4665e185d234e83ec140b":"4325683000000000000000","17f523f117bc9fe978aa481eb4f5561711371bc8":"1999884000000000000000",de42fcd24ce4239383304367595f068f0c610740:"45120000000000000000","2a46d353777176ff8e83ffa8001f4f70f9733aa5":"106000000000000000000","92e4392816e5f2ef5fb65837cec2c2325cc64922":"10000000000000000000000","9a3da65023a13020d22145cfc18bab10bd19ce4e":"456516000000000000000","1a085d43ec92414ea27b914fe767b6d46b1eef44":"29550000000000000000000","3b2367f8494b5fe18d683c055d89999c9f3d1b34":"10000000000000000000000","84244fc95a6957ed7c1504e49f30b8c35eca4b79":"2000000000000000000000","5e031b0a724471d476f3bcd2eb078338bf67fbef":"18200000000000000000","97e5cc6127c4f885be02f44b42d1c8b0ac91e493":"200000000000000000000",eb1cea7b45d1bd4d0e2a007bd3bfb354759e2c16:"198000000000000000000","72feaf124579523954645b7fafff0378d1c8242e":"1000000000000000000000","8d07d42d831c2d7c838aa1872b3ad5d277176823":"349200000000000000000","9637dc12723d9c78588542eab082664f3f038d9d":"1000000000000000000000",e84b55b525f1039e744b918cb3332492e45eca7a:"200000000000000000000",b1d6b01b94d854fe8b374aa65e895cf22aa2560e:"940000000000000000000","8161d940c3760100b9080529f8a60325030f6edc":"300000000000000000000",d30ee9a12b4d68abace6baca9ad7bf5cd1faf91c:"1499936000000000000000","057949e1ca0570469e4ce3c690ae613a6b01c559":"200000000000000000000","4bf8e26f4c2790da6533a2ac9abac3c69a199433":"200000000000000000000","36fec62c2c425e219b18448ad757009d8c54026f":"400000000000000000000","77bfe93ccda750847e41a1affee6b2da96e7214e":"300000000000000000000",cc48414d2ac4d42a5962f29eee4497092f431352:"161000000000000000000",ddbddd1bbd38ffade0305d30f02028d92e9f3aa8:"2000000000000000000000","30c01142907acb1565f70438b9980ae731818738":"2000000000000000000000",cffc49c1787eebb2b56cabe92404b636147d4558:"5679305000000000000000",f99eeece39fa7ef5076d855061384009792cf2e0:"500000000000000000000",e9b6a790009bc16642c8d820b7cde0e9fd16d8f5:"3640000000000000000000","03b41b51f41df20dd279bae18c12775f77ad771c":"1000000000000000000000","787d313fd36b053eeeaedbce74b9fb0678333289":"27160000000000000000000","35d2970f49dcc81ea9ee707e9c8a0ab2a8bb7463":"1440000000000000000000","4c0aca508b3caf5ee028bc707dd1e800b838f453":"18200000000000000000","514632efbd642c04de6ca342315d40dd90a2dba6":"2674000000000000000000","36810ff9d213a271eda2b8aa798be654fa4bbe06":"2000000000000000000000","0c088006c64b30c4ddafbc36cb5f05469eb62834":"2000000000000000000000","568df31856699bb5acfc1fe1d680df9960ca4359":"1379999000000000000000",d48e3f9357e303513841b3f84bda83fc89727587:"1000000000000000000000","953ef652e7b769f53d6e786a58952fa93ee6abe7":"2860000000000000000000","7c60a05f7a4a5f8cf2784391362e755a8341ef59":"1892300000000000000000","7a6b26f438d9a352449155b8876cbd17c9d99b64":"6000000000000000000000","68f719ae342bd7fef18a05cbb02f705ad38ed5b2":"1050000000000000000000","45ca8d956608f9e00a2f9974028640888465668f":"2000000000000000000000","3eaf316b87615d88f7adc77c58e712ed4d77966b":"100141000000000000000","1f0412bfedcd964e837d092c71a5fcbaf30126e2":"20000000000000000000","7471f72eeb300624eb282eab4d03723c649b1b58":"8000000000000000000000","9bf71f7fb537ac54f4e514947fa7ff6728f16d2f":"33400000000000000000","1098c774c20ca1daac5ddb620365316d353f109c":"100000000000000000000","7dd8d7a1a34fa1f8e73ccb005fc2a03a15b8229c":"200000000000000000000","0151fa5d17a2dce2d7f1eb39ef7fe2ad213d5d89":"4000000000000000000000",ad6628352ed3390bafa86d923e56014cfcb360f4:"2000000000000000000000","02af2459a93d0b3f4d062636236cd4b29e3bcecf":"1910000000000000000000",ace2abb63b0604409fbde3e716d2876d44e8e5dd:"152000000000000000000",e710dcd09b8101f9437bd97db90a73ef993d0bf4:"386100000000000000000",d43ee438d83de9a37562bb4e286cb1bd19f4964d:"1000000000000000000000",ea3779d14a13f6c78566bcde403591413a6239db:"197000000000000000000000","6704f169e0d0b36b57bbc39f3c45437b5ee3d28d":"394000000000000000000","5584423050e3c2051f0bbd8f44bd6dbc27ecb62c":"3000000000000000000000","2f315d9016e8ee5f536681202f9084b032544d4d":"1037400000000000000000",e1b63201fae1f129f95c7a116bd9dde5159c6cda:"22837462000000000000000","2bbe62eac80ca7f4d6fdee7e7d8e28b63acf770e":"2396000000000000000000","38da1ba2de9e2c954b092dd9d81204fd016ba016":"10156000000000000000000","8a86e4a51c013b1fb4c76bcf30667c78d52eedef":"2000000000000000000000","8f717ec1552f4c440084fba1154a81dc003ebdc0":"10000000000000000000000",c760971bbc181c6a7cf77441f24247d19ce9b4cf:"2000000000000000000000","7f150afb1a77c2b45928c268c1e9bdb4641d47d8":"2000000000000000000000","1ea334b5750807ea74aac5ab8694ec5f28aa77cf":"492500000000000000000","2afb058c3d31032b353bf24f09ae20d54de57dbe":"1100000000000000000000",caef027b1ab504c73f41f2a10979b474f97e309f:"200000000000000000000","5dd112f368c0e6ceff77a9df02a5481651a02fb7":"169800000000000000000",bd93e550403e2a06113ed4c3fba1a8913b19407e:"2000000000000000000000","500c16352e901d48ba8d04e2c767121772790b02":"30239000000000000000",d2a80327cbe55c4c7bd51ff9dde4ca648f9eb3f8:"50000000000000000000","355ccfe0e77d557b971be1a558bc02df9eee0594":"1759120000000000000000","5aed0e6cfe95f9d680c76472a81a2b680a7f93e2":"197000000000000000000",f56442f60e21691395d0bffaa9194dcaff12e2b7:"260000000000000000000","7db9eacc52e429dc83b461c5f4d86010e5383a28":"1000000000000000000000","4b984ef26c576e815a2eaed2f5177f07dbb1c476":"1560000000000000000000","9846648836a307a057184fd51f628a5f8c12427c":"19100000000000000000000","4af0db077bb9ba5e443e21e148e59f379105c592":"600000000000000000000",e96e2d3813efd1165f12f602f97f4a62909d3c66:"2300000000000000000000","30e789b3d2465e946e6210fa5b35de4e8c93085f":"2000000000000000000000","97f99b6ba31346cd98a9fe4c308f87c5a58c5151":"6000000000000000000000","595e23d788a2d4bb85a15df7136d264a635511b3":"3940000000000000000000","2f61efa5819d705f2b1e4ee754aeb8a819506a75":"1460000000000000000000","3554947b7b947b0040da52ca180925c6d3b88ffe":"66850000000000000000","8feffadb387a1547fb284da9b8147f3e7c6dc6da":"837200000000000000000","258939bbf00c9de9af5338f5d714abf6d0c1c671":"1550000000000000000000","5b333696e04cca1692e71986579c920d6b2916f9":"500000000000000000000","5381448503c0c702542b1de7cc5fb5f6ab1cf6a5":"8000000000000000000000","7e81f6449a03374191f3b7cb05d938b72e090dff":"100000000000000000000","4ef1c214633ad9c0703b4e2374a2e33e3e429291":"1337000000000000000000",fed8476d10d584b38bfa6737600ef19d35c41ed8:"1820000000000000000000","1a95c9b7546b5d1786c3858fb1236446bc0ca4ce":"1970000000000000000000","3b07db5a357f5af2484cbc9d77d73b1fd0519fc7":"500000000000000000000","5f68a24c7eb4117667737b33393fb3c2148a53b6":"51800000000000000000",d8f665fd8cd5c2bcc6ddc0a8ae521e4dc6aa6060:"1700000000000000000000",d66acc0d11b689cea6d9ea5ff4014c224a5dc7c4:"18200000000000000000","6e72b2a1186a8e2916543b1cb36a68870ea5d197":"186000000000000000000","5102a4a42077e11c58df4773e3ac944623a66d9f":"2000325000000000000000","72480bede81ad96423f2228b5c61be44fb523100":"6400000000000000000000",e076db30ab486f79194ebbc45d8fab9a9242f654:"4840000000000000000000","8ceea15eec3bdad8023f98ecf25b2b8fef27db29":"2000000000000000000000","40652360d6716dc55cf9aab21f3482f816cc2cbd":"10000000000000000000000","13e02fb448d6c84ae17db310ad286d056160da95":"2000000000000000000000",d6598b1386e93c5ccb9602ff4bbbecdbd3701dc4:"224096000000000000000",d5ea472cb9466018110af00c37495b5c2c713112:"4997800000000000000000",bb75cb5051a0b0944b4673ca752a97037f7c8c15:"200000000000000000000","8af626a5f327d7506589eeb7010ff9c9446020d2":"1400000000000000000000","318c76ecfd8af68d70555352e1f601e35988042d":"501600000000000000000","5c3d19441d196cb443662020fcad7fbb79b29e78":"14300000000000000000","27101a0f56d39a88c5a84f9b324cdde33e5cb68c":"2000000000000000000000",e229e746a83f2ce253b0b03eb1472411b57e5700:"5730000000000000000000","604cdf18628dbfa8329194d478dd5201eecc4be7":"23000000000000000000","657473774f63ac3d6279fd0743d5790c4f161503":"200000000000000000000","1ddefefd35ab8f658b2471e54790bc17af98dea4":"1000000000000000000000",ac3900298dd14d7cc96d4abb428da1bae213ffed:"24730250000000000000000","944f07b96f90c5f0d7c0c580533149f3f585a078":"74000000000000000000","232c6d03b5b6e6711efff190e49c28eef36c82b0":"1337000000000000000000",c87c77e3c24adecdcd1038a38b56e18dead3b702:"8800000000000000000000",c4b6e5f09cc1b90df07803ce3d4d13766a9c46f4:"6000000000000000000000",d44334b4e23a169a0c16bd21e866bba52d970587:"2600000000000000000000","7757a4b9cc3d0247ccaaeb9909a0e56e1dd6dcc2":"20000000000000000000",cf694081c76d18c64ca71382be5cd63b3cb476f8:"1000000000000000000000","133e4f15e1e39c53435930aaedf3e0fe56fde843":"20000000000000000000",f067fb10dfb293e998abe564c055e3348f9fbf1e:"2000000000000000000000","94449c01b32a7fa55af8104f42cdd844aa8cbc40":"16548000000000000000000","0e2094ac1654a46ba1c4d3a40bb8c17da7f39688":"358000000000000000000","738ca94db7ce8be1c3056cd6988eb376359f3353":"25500000000000000000000","0cfb172335b16c87d519cd1475530d20577f5e0e":"100000000000000000000000","3cb561ce86424b359891e364ec925ffeff277df7":"200000000000000000000","5f981039fcf50225e2adf762752112d1cc26b6e3":"499954000000000000000",b43657a50eecbc3077e005d8f8d94f377876bad4:"35460000000000000000",d07e511864b1cf9969e3560602829e32fc4e71f5:"50000000000000000000","11306c7d57588637780fc9fde8e98ecb008f0164":"1999944000000000000000","45ca9862003b4e40a3171fb5cafa9028cac8de19":"13790000000000000000000","231d94155dbcfe2a93a319b6171f63b20bd2b6fa":"3819952000000000000000",e7533e270cc61fa164ac1553455c105d04887e14:"121550000000000000000","070d5d364cb7bbf822fc2ca91a35bdd441b215d5":"2000000000000000000000",d475477fa56390d33017518d6711027f05f28dbf:"1975032000000000000000",cea34a4dd93dd9aefd399002a97d997a1b4b89cd:"1500000000000000000000","560becdf52b71f3d8827d927610f1a980f33716f":"429413000000000000000",f632adff490da4b72d1236d04b510f74d2faa3cd:"1400000000000000000000","2fdd9b79df8df530ad63c20e62af431ae99216b8":"21000000000000000000","535201a0a1d73422801f55ded4dfaee4fbaa6e3b":"39641000000000000000","409d5a962edeeebea178018c0f38b9cdb213f289":"20000000000000000000","9d911f3682f32fe0792e9fb6ff3cfc47f589fca5":"4000000000000000000000","9f7a0392f857732e3004a375e6b1068d49d83031":"2000000000000000000000","6a04f5d53fc0f515be942b8f12a9cb7ab0f39778":"3129800000000000000000",be478e8e3dde6bd403bb2d1c657c4310ee192723:"492500000000000000000","007622d84a234bb8b078230fcf84b67ae9a8acae":"698800000000000000000","9475c510ec9a26979247744c3d8c3b0e0b5f44d3":"10000000000000000000000",df47a8ef95f2f49f8e6f58184154145d11f72797:"1910000000000000000000","13ce332dff65a6ab933897588aa23e000980fa82":"258400000000000000000","9c4bbcd5f1644a6f075824ddfe85c571d6abf69c":"1800000000000000000000",d42b20bd0311608b66f8a6d15b2a95e6de27c5bf:"2000000000000000000000",a4dd59ab5e517d398e49fa537f899fed4c15e95d:"20000000000000000000000","1a8a5ce414de9cd172937e37f2d59cff71ce57a0":"10000000000000000000000","55c564664166a1edf3913e0169f1cd451fdb5d0c":"2399800000000000000000","58ae2ddc5f4c8ada97e06c0086171767c423f5d7":"1610000000000000000000",fb79abdb925c55b9f98efeef64cfc9eb61f51bb1:"1794000000000000000000",e7a42f59fee074e4fb13ea9e57ecf1cc48282249:"20000000000000000000000","07e2b4cdeed9d087b12e556d9e770c13c099615f":"668500000000000000000","68473b7a7d965904bedba556dfbc17136cd5d434":"100000000000000000000","6c5c3a54cda7c2f118edba434ed81e6ebb11dd7a":"200000000000000000000","24c117d1d2b3a97ab11a4679c99a774a9eade8d1":"1000000000000000000000",f68c5e33fa97139df5b2e63886ce34ebf3e4979c:"3320000000000000000000",bd7419dc2a090a46e2873d7de6eaaad59e19c479:"6802000000000000000000","1a0a1ddfb031e5c8cc1d46cf05842d50fddc7130":"1000000000000000000000","2b3a68db6b0cae8a7c7a476bdfcfbd6205e10687":"2400000000000000000000","426d15f407a01135b13a6b72f8f2520b3531e302":"20000000000000000000","0394b90fadb8604f86f43fc1e35d3124b32a5989":"764000000000000000000","7412c9bc30b4df439f023100e63924066afd53af":"500000000000000000000","80e7b3205230a566a1f061d922819bb4d4d2a0e1":"14000000000000000000000",ff4fc66069046c525658c337a917f2d4b832b409:"2000000000000000000000", -f5061ee2e5ee26b815503677130e1de07a52db07:"100000000000000000000","49793463e1681083d6abd6e725d5bba745dccde8":"545974000000000000000","23551f56975fe92b31fa469c49ea66ee6662f41e":"1910000000000000000000",fad96ab6ac768ad5099452ac4777bd1a47edc48f:"100000000000000000000","2a746cd44027af3ebd37c378c85ef7f754ab5f28":"394000000000000000000",b8d389e624a3a7aebce4d3e5dbdf6cdc29932aed:"200000000000000000000","7b761feb7fcfa7ded1f0eb058f4a600bf3a708cb":"4600000000000000000000","5435c6c1793317d32ce13bba4c4ffeb973b78adc":"250070000000000000000",dd04eee74e0bf30c3f8d6c2c7f52e0519210df93:"80000000000000000000","4331ab3747d35720a9d8ca25165cd285acd4bda8":"2000000000000000000000",b84c8b9fd33ece00af9199f3cf5fe0cce28cd14a:"3820000000000000000000","393f783b5cdb86221bf0294fb714959c7b45899c":"5910000000000000000000","259ec4d265f3ab536b7c70fa97aca142692c13fc":"20400000000000000000","5d2f7f0b04ba4be161e19cb6f112ce7a5e7d7fe4":"35200000000000000000",d54ba2d85681dc130e5b9b02c4e8c851391fd9b9:"3940000000000000000000","5cd8af60de65f24dc3ce5730ba92653022dc5963":"1790000000000000000000","3b42a66d979f582834747a8b60428e9b4eeccd23":"620400000000000000000","4b19eb0c354bc1393960eb06063b83926f0d67b2":"29000000000000000000","8cf3546fd1cda33d58845fc8fcfecabca7c5642a":"574027000000000000000","113612bc3ba0ee4898b49dd20233905f2f458f62":"14000000000000000000000","1f2afc0aed11bfc71e77a907657b36ea76e3fb99":"4000000000000000000000","03714b41d2a6f751008ef8dd4d2b29aecab8f36e":"6000000000000000000000","25721c87b0dc21377c7200e524b14a22f0af69fb":"4000000000000000000000","335858f749f169cabcfe52b796e3c11ec47ea3c2":"200000000000000000000","52fb46ac5d00c3518b2c3a1c177d442f8165555f":"1500000000000000000000","7a8c89c014509d56d7b68130668ff6a3ecec7370":"300000000000000000000","7d5d2f73949dadda0856b206989df0078d51a1e5":"10560000000000000000000",be538246dd4e6f0c20bf5ad1373c3b463a131e86:"200000000000000000000","62680a15f8ccb8bdc02f7360c25ad8cfb57b8ccd":"1000000000000000000000",aa0ca3737337178a0caac3099c584b056c56301c:"880000000000000000000","1d341fa5a3a1bd051f7db807b6db2fc7ba4f9b45":"18200000000000000000","6463f715d594a1a4ace4bb9c3b288a74decf294d":"1970000000000000000000",e00d153b10369143f97f54b8d4ca229eb3e8f324:"152000000000000000000","8d0b9ea53fd263415eac11391f7ce9123c447062":"2000000000000000000000",cacb675e0996235404efafbb2ecb8152271b55e0:"700000000000000000000",b615e940143eb57f875893bc98a61b3d618c1e8c:"20000000000000000000","606f177121f7855c21a5062330c8762264a97b31":"4000000000000000000000",e3925509c8d0b2a6738c5f6a72f35314491248ce:"1012961000000000000000","3f08d9ad894f813e8e2148c160d24b353a8e74b0":"60000000000000000000000","40f4f4c06c732cd35b119b893b127e7d9d0771e4":"10000000000000000000000","1406854d149e081ac09cb4ca560da463f3123059":"1337000000000000000000",ecf05d07ea026e7ebf4941002335baf2fed0f002:"200000000000000000000","9a990b8aeb588d7ee7ec2ed8c2e64f7382a9fee2":"33518000000000000000",a2e0683a805de6a05edb2ffbb5e96f0570b637c3:"20000000000000000000",fba5486d53c6e240494241abf87e43c7600d413a:"1987592000000000000000",d81bd54ba2c44a6f6beb1561d68b80b5444e6dc6:"1163806000000000000000","5298ab182a19359ffcecafd7d1b5fa212dede6dd":"20000000000000000000",d1acb5adc1183973258d6b8524ffa28ffeb23de3:"4000000000000000000000","4e7aa67e12183ef9d7468ea28ad239c2eef71b76":"4925000000000000000000","509a20bc48e72be1cdaf9569c711e8648d957334":"2000000000000000000000","949f84f0b1d7c4a7cf49ee7f8b2c4a134de32878":"685000000000000000000",edbac9527b54d6df7ae2e000cca3613ba015cae3:"1970000000000000000000",c697b70477cab42e2b8b266681f4ae7375bb2541:"5577200000000000000000","86c934e38e53be3b33f274d0539cfca159a4d0d1":"970000000000000000000","0877eeaeab78d5c00e83c32b2d98fa79ad51482f":"439420000000000000000","5e11ecf69d551d7f4f84df128046b3a13240a328":"20000000000000000000","43ff8853e98ed8406b95000ada848362d6a0392a":"22100000000000000000000",f11cf5d363746fee6864d3ca336dd80679bb87ae:"40000000000000000000000",fb223c1e22eac1269b32ee156a5385922ed36fb8:"2000000000000000000000","4e6600806289454acda330a2a3556010dfacade6":"6000000000000000000000",cfe2caaf3cec97061d0939748739bffe684ae91f:"10000000000000000000000",adeb52b604e5f77faaac88275b8d6b49e9f9f97f:"2089268000000000000000",d53c567f0c3ff2e08b7d59e2b5c73485437fc58d:"600000000000000000000",fbf75933e01b75b154ef0669076be87f62dffae1:"78000000000000000000000","7dfd2962b575bcbeee97f49142d63c30ab009f66":"4000000000000000000000",df6485c4297ac152b289b19dde32c77ec417f47d:"1000000000000000000000",ffb974673367f5c07be5fd270dc4b7138b074d57:"2470407000000000000000",f7d7af204c56f31fd94398e40df1964bd8bf123c:"150011000000000000000","4506fe19fa4b006baa3984529d8516db2b2b50ab":"2000000000000000000000",f4dc7ba85480bbb3f535c09568aaa3af6f3721c6:"7214962000000000000000",d171c3f2258aef35e599c7da1aa07300234da9a6:"2000000000000000000000","33581cee233088c0860d944e0cf1ceabb8261c2e":"13370000000000000000","1c2e3607e127caca0fbd5c5948adad7dd830b285":"19700000000000000000000",fd7ede8f5240a06541eb699d782c2f9afb2170f6:"1337000000000000000000","368c5414b56b8455171fbf076220c1cba4b5ca31":"557940000000000000000","3e8745ba322f5fd6cb50124ec46688c7a69a7fae":"4925000000000000000000","76506eb4a780c951c74a06b03d3b8362f0999d71":"500000000000000000000","96d62dfd46087f62409d93dd606188e70e381257":"2000000000000000000000","37eada93c475ded2f7e15e7787d400470fa52062":"200000000000000000000","26babf42b267fdcf3861fdd4236a5e474848b358":"1000000000000000000000","3526eece1a6bdc3ee7b400fe935b48463f31bed7":"82400000000000000000","27b62816e1e3b8d19b79d1513d5dfa855b0c3a2a":"99941000000000000000",b3e3c439069880156600c2892e448d4136c92d9b:"850000000000000000000","574ad9355390e4889ef42acd138b2a27e78c00ae":"1557000000000000000000",f0b9d683cea12ba600baace219b0b3c97e8c00e4:"100000000000000000000",a437fe6ec103ca8d158f63b334224eccac5b3ea3:"8000000000000000000000","7a48d877b63a8f8f9383e9d01e53e80c528e955f":"8000000000000000000000",e965daa34039f7f0df62375a37e5ab8a72b301e7:"4796000000000000000000","72cd048a110574482983492dfb1bd27942a696ba":"2000000000000000000000","6611ce59a98b072ae959dc49ad511daaaaa19d6b":"200000000000000000000","0d92582fdba05eabc3e51538c56db8813785b328":"191000000000000000000",e87e9bbfbbb71c1a740c74c723426df55d063dd9:"7998000000000000000000","9c99a1da91d5920bc14e0cb914fdf62b94cb8358":"20000000000000000000000",fe8e6e3665570dff7a1bda697aa589c0b4e9024a:"2000000000000000000000","811461a2b0ca90badac06a9ea16e787b33b196cc":"164000000000000000000",d211b21f1b12b5096181590de07ef81a89537ead:"2000000000000000000000","01155057002f6b0d18acb9388d3bc8129f8f7a20":"1340000000000000000000","8ce22f9fa372449a420610b47ae0c8d565481232":"2000000000000000000000",e02b74a47628be315b1f76b315054ad44ae9716f:"4000000000000000000000","92a7c5a64362e9f842a23deca21035857f889800":"1999944000000000000000","5213f459e078ad3ab95a0920239fcf1633dc04ca":"2599989000000000000000",c9957ba94c1b29e5277ec36622704904c63dc023:"1923000000000000000000","6ac40f532dfee5118117d2ad352da77d4f6da2c8":"400000000000000000000",ea1efb3ce789bedec3d67c3e1b3bc0e9aa227f90:"734000000000000000000",b01e389b28a31d8e4995bdd7d7c81beeab1e4119:"1000000000000000000000",ee97aa8ac69edf7a987d6d70979f8ec1fbca7a94:"376000000000000000000","0fad05507cdc8f24b2be4cb7fa5d927ddb911b88":"3004447000000000000000",b6e8afd93dfa9af27f39b4df06076710bee3dfab:"25000000000000000000","7d0b255efb57e10f7008aa22d40e9752dfcf0378":"29944000000000000000",aef5b12258a18dec07d5ec2e316574919d79d6d6:"2000000000000000000000","63666755bd41b5986997783c13043008242b3cb5":"500000000000000000000","921f5261f4f612760706892625c75e7bce96b708":"2000000000000000000000","10e1e3377885c42d7df218522ee7766887c05e6a":"300031000000000000000","134163be9fbbe1c5696ee255e90b13254395c318":"200000000000000000000","870f15e5df8b0eabd02569537a8ef93b56785c42":"388000000000000000000","68eec1e288ac31b6eaba7e1fbd4f04ad579a6b5d":"2000000000000000000000","1a2694ec07cf5e4d68ba40f3e7a14c53f3038c6e":"1000073000000000000000",cd9b4cef73390c83a8fd71d7b540a7f9cf8b8c92:"90000000000000000000",c8de7a564c7f4012a6f6d10fd08f47890fbf07d4:"300000000000000000000",c0345b33f49ce27fe82cf7c84d141c68f590ce76:"1000000000000000000000",fe53b94989d89964da2061539526bbe979dd2ea9:"1930600000000000000000","14410fb310711be074a80883c635d0ef6afb2539":"2000000000000000000000","1d344e962567cb27e44db9f2fac7b68df1c1e6f7":"1940000000000000000000",fe016ec17ec5f10e3bb98ff4a1eda045157682ab:"375804000000000000000",e89da96e06beaf6bd880b378f0680c43fd2e9d30:"601400000000000000000","0fee81ac331efd8f81161c57382bb4507bb9ebec":"400030000000000000000","40cf90ef5b768c5da585002ccbe6617650d8e837":"999800000000000000000","256fa150cc87b5056a07d004efc84524739e62b5":"200000000000000000000","1b9b2dc2960e4cb9408f7405827c9b59071612fd":"1000000000000000000000","0efd1789eb1244a3dede0f5de582d8963cb1f39f":"1500000000000000000000","049c5d4bc6f25d4e456c697b52a07811ccd19fb1":"300048000000000000000","02b7b1d6b34ce053a40eb65cd4a4f7dddd0e9f30":"685000000000000000000",c1827686c0169485ec15b3a7c8c01517a2874de1:"40000000000000000000",d8e5c9675ef4deed266b86956fc4590ea7d4a27d:"1000000000000000000000","48f883e567b436a27bb5a3124dbc84dec775a800":"771840000000000000000",a34076f84bd917f20f8342c98ba79e6fb08ecd31:"4200000000000000000000","21ce6d5b9018cec04ad6967944bea39e8030b6b8":"20000000000000000000","0596a27dc3ee115fce2f94b481bc207a9e261525":"1000000000000000000000","717cf9beab3638308ded7e195e0c86132d163fed":"15097428000000000000000",d5ce55d1b62f59433c2126bcec09bafc9dfaa514:"197000000000000000000","7dd46da677e161825e12e80dc446f58276e1127c":"820000000000000000000","98c5494a03ac91a768dffc0ea1dde0acbf889019":"200000000000000000000000","617ff2cc803e31c9082233b825d025be3f7b1056":"1970000000000000000000","1091176be19b9964a8f72e0ece6bf8e3cfad6e9c":"10020000000000000000000","4ea56e1112641c038d0565a9c296c463afefc17e":"182000000000000000000",e303167f3d4960fe881b32800a2b4aeff1b088d4:"2000000000000000000000","773141127d8cf318aebf88365add3d5527d85b6a":"1000076000000000000000",b916b1a01cdc4e56e7657715ea37e2a0f087d106:"2406017000000000000000","46a430a2d4a894a0d8aa3feac615361415c3f81f":"2000000000000000000000",e6a3010f0201bc94ff67a2f699dfc206f9e76742:"879088000000000000000",d7ad09c6d32657685355b5c6ec8e9f57b4ebb982:"1970000000000000000000","95e80a82c20cbe3d2060242cb92d735810d034a2":"32511000000000000000","9a390162535e398877e416787d6239e0754e937c":"1000000000000000000000",d85fdeaf2a61f95db902f9b5a53c9b8f9266c3ac:"2010000000000000000000",c3e20c96df8d4e38f50b265a98a906d61bc51a71:"2000000000000000000000","2949fd1def5c76a286b3872424809a07db3966f3":"5236067000000000000000","86cdb7e51ac44772be3690f61d0e59766e8bfc18":"4000000000000000000000","749a4a768b5f237248938a12c623847bd4e688dc":"72000000000000000000","3524a000234ebaaf0789a134a2a417383ce5282a":"5635000000000000000000","7b43c7eea8d62355b0a8a81da081c6446b33e9e0":"4000000000000000000000","0eb189ef2c2d5762a963d6b7bdf9698ea8e7b48a":"1337000000000000000000","767fd7797d5169a05f7364321c19843a8c348e1e":"18800000000000000000","1b2639588b55c344b023e8de5fd4087b1f040361":"1500000000000000000000","1e33d1c2fb5e084f2f1d54bc5267727fec3f985d":"500000000000000000000","06b106649aa8c421ddcd1b8c32cd0418cf30da1f":"40000000000000000000000","3c5a241459c6abbf630239c98a30d20b8b3ac561":"157600000000000000000","0f4f94b9191bb7bb556aaad7c74ddb288417a50b":"1400000000000000000000",d6f4a7d04e8faf20e8c6eb859cf7f78dd23d7a15:"131784000000000000000","61adf5929a5e2981684ea243baa01f7d1f5e148a":"110302000000000000000","8f58d8348fc1dc4e0dd8343b6543c857045ee940":"13632400000000000000000",a6e3baa38e104a1e27a4d82869afb1c0ae6eff8d:"19690000000000000000","67350b5331926f5e28f3c1e986f96443809c8b8c":"352000000000000000000","0b5d66b13c87b392e94d91d5f76c0d450a552843":"2000000000000000000000","562a8dcbbeeef7b360685d27303bd69e094accf6":"10000000000000000000000",b5d9934d7b292bcf603b2880741eb760288383a0:"16700000000000000000","6fc53662371dca587b59850de78606e2359df383":"180000000000000000000",e069c0173352b10bf6834719db5bed01adf97bbc:"18894000000000000000","10a93457496f1108cd98e140a1ecdbae5e6de171":"399600000000000000000","69ff8901b541763f817c5f2998f02dcfc1df2997":"40000000000000000000","00c27d63fde24b92ee8a1e7ed5d26d8dc5c83b03":"2000000000000000000000","77f81b1b26fc84d6de97ef8b9fbd72a33130cc4a":"1000000000000000000000","6d20ef9704670a500bb269b5832e859802049f01":"130000000000000000000","186afdc085f2a3dce4615edffbadf71a11780f50":"200000000000000000000","7ff0c63f70241bece19b737e5341b12b109031d8":"346000000000000000000","9d4174aa6af28476e229dadb46180808c67505c1":"1219430000000000000000","5fec49c665e64ee89dd441ee74056e1f01e92870":"6320000000000000000000","6cd228dc712169307fe27ceb7477b48cfc8272e5":"77600000000000000000",fd918536a8efa6f6cefe1fa1153995fef5e33d3b:"500000000000000000000","2fbb504a5dc527d3e3eb0085e2fc3c7dd538cb7a":"1249961000000000000000","6ab323ae5056ed0a453072c5abe2e42fcf5d7139":"880000000000000000000","67d682a282ef73fb8d6e9071e2614f47ab1d0f5e":"1000000000000000000000","1858cf11aea79f5398ad2bb22267b5a3c952ea74":"9850000000000000000000","39d6caca22bccd6a72f87ee7d6b59e0bde21d719":"2002000000000000000000",daa63cbda45dd487a3f1cd4a746a01bb5e060b90:"4797800000000000000000",a90476e2efdfee4f387b0f32a50678b0efb573b5:"10000000000000000000000",ae5aa1e6c2b60f6fd3efe721bb4a719cbe3d6f5d:"795860000000000000000",ac2e766dac3f648f637ac6713fddb068e4a4f04d:"197000000000000000000","6191ddc9b64a8e0890b4323709d7a07c48b92a64":"775000000000000000000",cc4f0ff2aeb67d54ce3bc8c6510b9ae83e9d328b:"400000000000000000000",ca23f62dff0d6460036c62e840aec5577e0befd2:"140800000000000000000","97dc26ec670a31e0221d2a75bc5dc9f90c1f6fd4":"50000000000000000000","848c994a79003fe7b7c26cc63212e1fc2f9c19eb":"2000000000000000000000","20c284ba10a20830fc3d699ec97d2dfa27e1b95e":"2000000000000000000000","4fa3f32ef4086448b344d5f0a9890d1ce4d617c3":"1500000000000000000000","255abc8d08a096a88f3d6ab55fbc7352bddcb9ce":"82161000000000000000","7c60e51f0be228e4d56fdd2992c814da7740c6bc":"200000000000000000000","1c356cfdb95febb714633b28d5c132dd84a9b436":"25000000000000000000","5062e5134c612f12694dbd0e131d4ce197d1b6a4":"1000000000000000000000",ed862616fcbfb3becb7406f73c5cbff00c940755:"1700000000000000000000","62c9b271ffd5b770a5eee4edc9787b5cdc709714":"2000000000000000000000","3c925619c9b33144463f0537d896358706c520b0":"2000000000000000000000",ffe2e28c3fb74749d7e780dc8a5d422538e6e451:"253319000000000000000","37195a635dcc62f56a718049d47e8f9f96832891":"1970000000000000000000","90e9a9a82edaa814c284d232b6e9ba90701d4952":"100007000000000000000",e0c4ab9072b4e6e3654a49f8a8db026a4b3386a9:"2000000000000000000000","439dee3f7679ff1030733f9340c096686b49390b":"2000000000000000000000","548558d08cfcb101181dac1eb6094b4e1a896fa6":"1999944000000000000000","3090f8130ec44466afadb36ed3c926133963677b":"4000000000000000000000",d1648503b1ccc5b8be03fa1ec4f3ee267e6adf7b:"5828000000000000000000","65b42faecc1edfb14283ca979af545f63b30e60c":"18200000000000000000","6420f8bcc8164a6152a99d6b99693005ccf7e053":"999972000000000000000","84b4b74e6623ba9d1583e0cfbe49643f16384149":"20000000000000000000",b8310a16cc6abc465007694b930f978ece1930bd:"740000000000000000000","16019a4dafab43f4d9bf4163fae0847d848afca2":"25060000000000000000","479298a9de147e63a1c7d6d2fce089c7e64083bd":"9999999000000000000000","030973807b2f426914ad00181270acd27b8ff61f":"5348000000000000000000",b07bcf1cc5d4462e5124c965ecf0d70dc27aca75:"1600000000000000000000",a2f798e077b07d86124e1407df32890dbb4b6379:"200000000000000000000","0cbd921dbe121563b98a6871fecb14f1cc7e88d7":"200000000000000000000","6042276df2983fe2bc4759dc1943e18fdbc34f77":"1970000000000000000000",be2b2280523768ea8ac35cd9e888d60a719300d4:"2000000000000000000000","2f4da753430fc09e73acbccdcde9da647f2b5d37":"200000000000000000000","734223d27ff23e5906caed22595701bb34830ca1":"2000000000000000000000","5b430d779696a3653fc60e74fbcbacf6b9c2baf1":"14000000000000000000000","84232107932b12e03186583525ce023a703ef8d9":"2000000000000000000000","4ed14d81b60b23fb25054d8925dfa573dcae6168":"340000000000000000000","8b338411f26ccf37658cc75521d77629099e467d":"2000000000000000000000",a37622ac9bbdc4d82b75015d745b9f8de65a28ec:"2910000000000000000000","1dd77441844afe9cc18f15d8c77bccfb655ee034":"4850000000000000000000","65849be1af20100eb8a3ba5a5be4d3ae8db5a70e":"400000000000000000000",d5586da4e59583c8d86cccf71a86197f17996749:"2000000000000000000000","4b53ae59c784b6b5c43616b9a0809558e684e10c":"1200000000000000000000","55d42eb495bf46a634997b5f2ea362814918e2b0":"106128000000000000000","959ff17f1d51b473b44010052755a7fa8c75bd54":"1970000000000000000000","5a2daab25c31a61a92a4c82c9925a1d2ef58585e":"225400000000000000000","24c0c88b54a3544709828ab4ab06840559f6c5e2":"2674000000000000000000","7e8649e690fc8c1bfda1b5e186581f649b50fe33":"98500000000000000000","4acfa9d94eda6625c9dfa5f9f4f5d107c4031fdf":"39400000000000000000","5778ffdc9b94c5a59e224eb965b6de90f222d170":"335320000000000000000","825a7f4e10949cb6f8964268f1fa5f57e712b4c4":"20000000000000000000","6f39cc37caaa2ddc9b610f6131e0619fae772a3c":"500000000000000000000","5b437365ae3a9a2ff97c68e6f90a7620188c7d19":"2002000000000000000000","6710c2c03c65992b2e774be52d3ab4a6ba217ef7":"11600000000000000000000","896e335ca47af57962fa0f4dbf3e45e688cba584":"1368500000000000000000",b57549bfbc9bdd18f736b22650e48a73601fa65c:"446000000000000000000","85ca1e727e9d1a87991cc2c41840ebb9edf21d1b":"13370000000000000000",cf4166746e1d3bc1f8d0714b01f17e8a62df1464:"1004700000000000000000","4a75c3d4fa6fccbd5dd5a703c15379a1e783e9b7":"1820000000000000000000","9e5811b40be1e2a1e1d28c3b0774acde0a09603d":"3000000000000000000000","763886e333c56feff85be3951ab0b889ce262e95":"2000000000000000000000","2b101e822cd962962a06800a2c08d3b15d82b735":"152000000000000000000",a01e9476df84431825c836e8803a97e22fa5a0cd:"6000000000000000000000",be4e7d983f2e2a636b1102ec7039efebc842e98d:"66000000000000000000","9e427272516b3e67d4fcbf82f59390d04c8e28e5":"4000000000000000000000",e0d231e144ec9107386c7c9b02f1702ceaa4f700:"5000057000000000000000","6a0f056066c2d56628850273d7ecb7f8e6e9129e":"5000016000000000000000",d1538e9a87e59ca9ec8e5826a5b793f99f96c4c3:"1000000000000000000000",f85bab1cb3710fc05fa19ffac22e67521a0ba21d:"2003000000000000000000",f7cbdba6be6cfe68dbc23c2b0ff530ee05226f84:"20000000000000000000","4eb87ba8788eba0df87e5b9bd50a8e45368091c1":"20000000000000000000","1479a9ec7480b74b5db8fc499be352da7f84ee9c":"1000000000000000000000",d311bcd7aa4e9b4f383ff3d0d6b6e07e21e3705d:"200000000000000000000","425c1816868f7777cc2ba6c6d28c9e1e796c52b3":"10000000000000000000000","8510ee934f0cbc900e1007eb38a21e2a5101b8b2":"106000000000000000000","01e864d354741b423e6f42851724468c74f5aa9c":"20000000000000000000000",a543a066fb32a8668aa0736a0c9cd40d78098727:"1000000000000000000000",f3eb1948b951e22df1617829bf3b8d8680ec6b68:"4000000000000000000000",f6b782f4dcd745a6c0e2e030600e04a24b25e542:"400000000000000000000","229f4f1a2a4f540774505b4707a81de44410255b":"2000000000000000000000",cff8d06b00e3f50c191099ad56ba6ae26571cd88:"1000000000000000000000","910b7d577a7e39aa23acf62ad7f1ef342934b968":"10000000000000000000000","392433d2ce83d3fb4a7602cca3faca4ec140a4b0":"51000000000000000000","8ff46045687723dc33e4d099a06904f1ebb584dc":"2000000000000000000000","9ca0429f874f8dcee2e9c062a9020a842a587ab9":"2000000000000000000000","160ceb6f980e04315f53c4fc988b2bf69e284d7d":"19100000000000000000",c340f9b91c26728c31d121d5d6fc3bb56d3d8624:"2000000000000000000000",afa1d5ad38fed44759c05b8993c1aa0dace19f40:"80000000000000000000","3969b4f71bb8751ede43c016363a7a614f76118e":"2000000000000000000000","2bb6f578adfbe7b2a116b3554facf9969813c319":"7400000000000000000000","8334764b7b397a4e578f50364d60ce44899bff94":"92500000000000000000","9dd2196624a1ddf14a9d375e5f07152baf22afa2":"1211747000000000000000",f242da845d42d4bf779a00f295b40750fe49ea13:"1000000000000000000000",c6234657a807384126f8968ca1708bb07baa493c:"20000000000000000000","94c055e858357aaa30cf2041fa9059ce164a1f91":"19999000000000000000000","74c73c90528a157336f1e7ea20620ae53fd24728":"8969310000000000000000","19e7f3eb7bf67f3599209ebe08b62ad3327f8cde":"2000000000000000000000",b2b516fdd19e7f3864b6d2cf1b252a4156f1b03b:"53720000000000000000","8164e78314ae16b28926cc553d2ccb16f356270d":"8450000000000000000000","4d828894752f6f25175daf2177094487954b6f9f":"1459683000000000000000",ab84a0f147ad265400002b85029a41fc9ce57f85:"1000000000000000000000",f3fe51fde34413c73318b9c85437fe7e820f561a:"1003200000000000000000","16c7b31e8c376282ac2271728c31c95e35d952c3":"2000000000000000000000","80d5c40c59c7f54ea3a55fcfd175471ea35099b3":"1000000000000000000000","7abb10f5bd9bc33b8ec1a82d64b55b6b18777541":"20000000000000000000000","095b0ea2b218d82e0aea7c2889238a39c9bf9077":"20000000000000000000000","5d5cdbe25b2a044b7b9be383bcaa5807b06d3c6b":"2000000000000000000000","323749a3b971959e46c8b4822dcafaf7aaf9bd6e":"20064000000000000000",e0272213e8d2fd3e96bd6217b24b4ba01b617079:"20000000000000000000","00acbfb2f25a5485c739ef70a44eeeeb7c65a66f":"100000000000000000000","52f15423323c24f19ae2ab673717229d3f747d9b":"1026115000000000000000",cb4abfc282aed76e5d57affda542c1f382fcacf4:"8136100000000000000000",f71b4534f286e43093b1e15efea749e7597b8b57:"104410000000000000000000","44cd77535a893fa7c4d5eb3a240e79d099a72d2d":"820000000000000000000",eb3ce7fc381c51db7d5fbd692f8f9e058a4c703d:"200000000000000000000",f1c8c4a941b4628c0d6c30fda56452d99c7e1b64:"1449000000000000000000","277677aba1e52c3b53bfa2071d4e859a0af7e8e1":"1000000000000000000000",a5f075fd401335577b6683c281e6d101432dc6e0:"2680000000000000000000",e28dbc8efd5e416a762ec0e018864bb9aa83287b:"24533161000000000000000","2b717cd432a323a4659039848d3b87de26fc9546":"500000000000000000000000",b358e97c70b605b1d7d729dfb640b43c5eafd1e7:"20000000000000000000000","293c2306df3604ae4fda0d207aba736f67de0792":"200000000000000000000","74d366b07b2f56477d7c7077ac6fe497e0eb6559":"5000000000000000000000","490145afa8b54522bb21f352f06da5a788fa8f1d":"9231182000000000000000","862569211e8c6327b5415e3a67e5738b15baaf6e":"140000000000000000000","5a74ba62e7c81a3474e27d894fed33dd24ad95fe":"18200000000000000000","536e4d8029b73f5579dca33e70b24eba89e11d7e":"1970000000000000000000","25c6e74ff1d928df98137af4df8430df24f07cd7":"390000000000000000000","19b36b0c87ea664ed80318dc77b688dde87d95a5":"1948386000000000000000",abc4caeb474d4627cb6eb456ecba0ecd08ed8ae1:"3940000000000000000000","8ea656e71ec651bfa17c5a5759d86031cc359977":"100000000000000000000","8d620bde17228f6cbba74df6be87264d985cc179":"100000000000000000000",b2aa2f1f8e93e79713d92cea9ffce9a40af9c82d:"2000000000000000000000","198ef1ec325a96cc354c7266a038be8b5c558f67":"608334724000000000000000","6a13d5e32c1fd26d7e91ff6e053160a89b2c8aad":"53480000000000000000",e056bf3ff41c26256fef51716612b9d39ade999c:"100009000000000000000","2c128c95d957215101f043dd8fc582456d41016d":"835000000000000000000","2560b09b89a4ae6849ed5a3c9958426631714466":"1700000000000000000000",d3d6e9fb82542fd29ed9ea3609891e151396b6f7:"54000000000000000000000",a7607b42573bb6f6b4d4f23c7e2a26b3a0f6b6f0:"1610000000000000000000","020362c3ade878ca90d6b2d889a4cc5510eed5f3":"1042883000000000000000","14830704e99aaad5c55e1f502b27b22c12c91933":"620000000000000000000","8030b111c6983f0485ddaca76224c6180634789f":"80000000000000000000","2c5b7d7b195a371bf9abddb42fe04f2f1d9a9910":"200000000000000000000","77d43fa7b481dbf3db530cfbf5fdced0e6571831":"2000000000000000000000","2d90b415a38e2e19cdd02ff3ad81a97af7cbf672":"109800000000000000000","2fc82ef076932341264f617a0c80dd571e6ae939":"7160000000000000000000",dfe549fe8430e552c6d07cc3b92ccd43b12fb50f:"83620000000000000000","1e8e689b02917cdc29245d0c9c68b094b41a9ed6":"2000000000000000000000","21c3a8bba267c8cca27b1a9afabad86f607af708":"8940000000000000000000","143c639752caeecf6a997d39709fc8f19878c7e8":"1970000000000000000000","02603d7a3bb297c67c877e5d34fbd5b913d4c63a":"20000000000000000000",a166f911c644ac3213d29e0e1ae010f794d5ad26:"2000000000000000000000","6eb3819617404058268f0c3cff3596bfe9148c1c":"1670000000000000000000","7a67dd043a504fc2f2fc7194e9becf484cecb1fb":"250000000000000000000",f824ee331e4ac3cc587693395b57ecf625a6c0c2:"1600930000000000000000","1179c60dbd068b150b074da4be23033b20c68558":"680000000000000000000",d2a479404347c5543aab292ae1bb4a6f158357fa:"4000000000000000000000",b0d32bd7e4e695b7b01aa3d0416f80557dba9903:"16300000000000000000000",f734ec03724ddee5bb5279aa1afcf61b0cb448a1:"4238080000000000000000",c04069dfb18b096c7867f8bee77a6dc7477ad062:"2674000000000000000000","80c53ee7e3357f94ce0d7868009c208b4a130125":"2000000000000000000000","0f32d9cb4d0fdaa0150656bb608dcc43ed7d9301":"753978000000000000000","6ddb6092779d5842ead378e21e8120fd4c6bc132":"2000000000000000000000","82ea01e3bf2e83836e71704e22a2719377efd9c3":"3040000000000000000000","44c1110b18870ec81178d93d215838c551d48e64":"199958000000000000000","7727af101f0aaba4d23a1cafe17c6eb5dab1c6dc":"2000000000000000000000",a11a03c4bb26d21eff677d5d555c80b25453ee7a:"69979000000000000000","19e5dea3370a2c746aae34a37c531f41da264e83":"200000000000000000000",c325c352801ba883b3226c5feb0df9eae2d6e653:"3940000000000000000000",ae5055814cb8be0c117bb8b1c8d2b63b4698b728:"32035000000000000000",deb1bc34d86d4a4dde2580d8beaf074eb0e1a244:"1580000000000000000000","558360206883dd1b6d4a59639e5629d0f0c675d0":"2000000000000000000000",a9d6f871ca781a759a20ac3adb972cf12829a208:"925000000000000000000",b0ac4eff6680ee14169cdadbffdb30804f6d25f5:"2000000000000000000000",f1b58faffa8794f50af8e88309c7a6265455d51a:"999800000000000000000",a61a54df784a44d71b771b87317509211381f200:"1000000000000000000000",baa4b64c2b15b79f5f204246fd70bcbd86e4a92a:"500000000000000000000",a20d8ff60caae31d02e0b665fa435d76f77c9442:"489600000000000000000",f3e74f470c7d3a3f0033780f76a89f3ef691e6cb:"3021800000000000000000",d330728131fe8e3a15487a34573c93457e2afe95:"4000000000000000000000","9af9dbe47422d177f945bdead7e6d82930356230":"3940000000000000000000","0eb5b662a1c718608fd52f0c25f9378830178519":"6091400000000000000000",fda6810ea5ac985d6ffbf1c511f1c142edcfddf7:"4000000000000000000000","832c54176bdf43d2c9bcd7b808b89556b89cbf31":"200000000000000000000","704d5de4846d39b53cd21d1c49f096db5c19ba29":"152000000000000000000","344a8db086faed4efc37131b3a22b0782dad7095":"500000000000000000000","8c7fa5cae82fedb69ab189d3ff27ae209293fb93":"400030000000000000000",ad660dec825522a9f62fcec3c5b731980dc286ea:"3000000000000000000000","13b9b10715714c09cfd610cf9c9846051cb1d513":"1970000000000000000000","40467d80e74c35407b7db51789234615fea66818":"388000000000000000000","30e9d5a0088f1ddb2fd380e2a049192266c51cbf":"196910000000000000000",b2d1e99af91231858e7065dd1918330dc4c747d5:"16700000000000000000000","9f21302ca5096bea7402b91b0fd506254f999a3d":"1246832000000000000000",d24b6644f439c8051dfc64d381b8c86c75c17538:"2000000000000000000000","8228ebc087480fd64547ca281f5eace3041453b9":"1970000000000000000000","29da3e35b23bb1f72f8e2258cf7f553359d24bac":"20000000000000000000000",c8e558a3c5697e6fb23a2594c880b7a1b68f9860:"10000000000000000000000","6b951a43274eeafc8a0903b0af2ec92bf1efc839":"100000000000000000000",d015f6fcb84df7bb410e8c8f04894a881dcac237:"1038000000000000000000","6ccb03acf7f53ce87aadcc21a9932de915f89804":"8000000000000000000000","388c85a9b9207d8146033fe38143f6d34b595c47":"200000000000000000000","429c06b487e8546abdfc958a25a3f0fba53f6f00":"13503000000000000000","771507aeee6a255dc2cd9df55154062d0897b297":"334250000000000000000","5a2b1c853aeb28c45539af76a00ac2d8a8242896":"25000000000000000000",f4d67a9044b435b66e8977ff39a28dc4bd53729a:"200000000000000000000","063759dd1c4e362eb19398951ff9f8fad1d31068":"10000000000000000000000",cb58990bcd90cfbf6d8f0986f6fa600276b94e2d:"999925000000000000000","6df5c84f7b909aab3e61fe0ecb1b3bf260222ad2":"4000000000000000000000",deb2495d6aca7b2a6a2d138b6e1a42e2dc311fdd:"2000000000000000000000","59203cc37599b648312a7cc9e06dacb589a9ae6a":"148689000000000000000",fc9b347464b2f9929d807e039dae48d3d98de379:"14000000000000000000000","48d2434b7a7dbbff08223b6387b05da2e5093126":"18000000000000000000000",c9d76446d5aadff80b68b91b08cd9bc8f5551ac1:"714000000000000000000","3d31587b5fd5869845788725a663290a49d3678c":"500000000000000000000",d8715ef9176f850b2e30eb8e382707f777a6fbe9:"2000000000000000000000","2c2147947ae33fb098b489a5c16bfff9abcd4e2a":"200000000000000000000",d6c0d0bc93a62e257174700e10f024c8b23f1f87:"2000000000000000000000",d1978f2e34407fab1dc2183d95cfda6260b35982:"788000000000000000000","1bf974d9904f45ce81a845e11ef4cbcf27af719e":"100000000000000000000","6e761eaa0f345f777b5441b73a0fa5b56b85f22d":"2000000000000000000000",ea60436912de6bf187d3a472ff8f5333a0f7ed06:"19700000000000000000","94f8f057db7e60e675ad940f155885d1a477348e":"401100000000000000000","8933491760c8f0b4df8caac78ed835caee21046d":"20000000000000000000000",a7775e4af6a23afa201fb78b915e51a515b7a728:"120000000000000000000",d8d64384249b776794063b569878d5e3b530a4b2:"177569000000000000000",be633a3737f68439bac7c90a52142058ee8e8a6f:"960000000000000000000","90bd62a050845261fa4a9f7cf241ea630b05efb8":"500000000000000000000","552987f0651b915b2e1e5328c121960d4bdd6af4":"1790000000000000000000","0baf6ecdb91acb3606a8357c0bc4f45cfd2d7e6f":"1000000000000000000000","9e5a311d9f69898a7c6a9d6360680438e67a7b2f":"1490000000000000000000","78859c5b548b700d9284cee4b6633c2f52e529c2":"2955000000000000000000",d572309169b1402ec8131a17a6aac3222f89e6eb:"13800000000000000000000","8e6d7485cbe990acc1ad0ee9e8ccf39c0c93440e":"955000000000000000000","75c11d024d12ae486c1095b7a7b9c4af3e8edeb9":"20000000000000000000","903413878aea3bc1086309a3fe768b65559e8cab":"8000000000000000000000","6d0569e5558fc7df2766f2ba15dc8aeffc5beb75":"4001070000000000000000","3815b0743f94fc8cc8654fd9d597ed7d8b77c57e":"738578000000000000000","0f26480a150961b8e30750713a94ee6f2e47fc00":"1000000000000000000000",ede5de7c7fb7eee0f36e64530a41440edfbefacf:"617200000000000000000","763a7cbab70d7a64d0a7e52980f681472593490c":"600000000000000000000","6e270ad529f1f0b8d9cb6d2427ec1b7e2dc64a74":"200000000000000000000",eb3bdd59dcdda5a9bb2ac1641fd02180f5f36560:"6600000000000000000000",f4ebf50bc7e54f82e9b9bd24baef29438e259ce6:"10000000000000000000000","882c8f81872c79fed521cb5f950d8b032322ea69":"40000000000000000000000","394132600f4155e07f4d45bc3eb8d9fb72dcd784":"2941000000000000000000","0be2b94ad950a2a62640c35bfccd6c67dae450f6":"1940000000000000000000",d4c6ac742e7c857d4a05a04c33d4d05c1467571d:"200000000000000000000","1fddd85fc98be9c4045961f40f93805ecc4549e5":"164000000000000000000","534065361cb854fac42bfb5c9fcde0604ac919da":"2000000000000000000000","9a6ff5f6a7af7b7ae0ed9c20ecec5023d281b786":"2547000000000000000000","4f3a4854911145ea01c644044bdb2e5a960a982f":"4000000000000000000000","00497e92cdc0e0b963d752b2296acb87da828b24":"194800000000000000000","4ff67fb87f6efba9279930cfbd1b7a343c79fade":"400000000000000000000","62f2e5ccecd52cc4b95e0597df27cc079715608c":"143000000000000000000","1eda084e796500ba14c5121c0d90846f66e4be62":"534800000000000000000","9836b4d30473641ab56aeee19242761d72725178":"2000000000000000000000",de55de0458f850b37e4d78a641dd2eb2dd8f38ce:"4000000000000000000000","140ca28ff33b9f66d7f1fc0078f8c1eef69a1bc0":"1600000000000000000000","2014261f01089f53795630ba9dd24f9a34c2d942":"1337000000000000000000","11415fab61e0dfd4b90676141a557a869ba0bde9":"2048000000000000000000","88344909644c7ad4930fd873ca1c0da2d434c07f":"131970000000000000000","88b217ccb786a254cf4dc57f5d9ac3c455a30483":"925000000000000000000",dfdbcec1014b96da2158ca513e9c8d3b9af1c3d0:"2000000000000000000000","1ba9f7997e5387b6b2aa0135ac2452fe36b4c20d":"850000000000000000000",d70ad2c4e9eebfa637ef56bd486ad2a1e5bce093:"200000000000000000000","9ce27f245e02d1c312c1d500788c9def7690453b":"200000000000000000000","8234f463d18485501f8f85ace4972c9b632dbccc":"2000000000000000000000","994152fc95d5c1ca8b88113abbad4d710e40def6":"500000000000000000000",e5b980d28eece2c06fca6c9473068b37d4a6d6e9:"695200000000000000000","2d426912d059fad9740b2e390a2eeac0546ff01b":"1400000000000000000000","6d9997509882027ea947231424bedede2965d0ba":"2001600000000000000000","167ce7de65e84708595a525497a3eb5e5a665073":"575400000000000000000",e430c0024fdbf73a82e21fccf8cbd09138421c21:"4000000000000000000000","2e52912bc10ea39d54e293f7aed6b99a0f4c73be":"400000000000000000000","12cf8b0e465213211a5b53dfb0dd271a282c12c9":"15200000000000000000","06964e2d17e9189f88a8203936b40ac96e533c06":"18200000000000000000","66b1a63da4dcd9f81fe54f5e3fcb4055ef7ec54f":"201412000000000000000","0a77e7f72b437b574f00128b21f2ac265133528c":"2000000000000000000000","78f5c74785c5668a838072048bf8b453594ddaab":"400000000000000000000", -"58e554af3d87629620da61d538c7f5b4b54c4afe":"1297081000000000000000","37a10451f36166cf643dd2de6c1cbba8a011cfa3":"380000000000000000000",fe9ad12ef05d6d90261f96c8340a0381974df477:"2000000000000000000000","057f7f81cd7a406fc45994408b5049912c566463":"1700000000000000000000","55a3df57b7aaec16a162fd5316f35bec082821cf":"1970000000000000000000",c0e0b903088e0c63f53dd069575452aff52410c3:"3000000000000000000000","63e88e2e539ffb450386b4e46789b223f5476c45":"6292000000000000000000","3727341f26c12001e378405ee38b2d8464ec7140":"2000000000000000000000",c96751656c0a8ef4357b7344322134b983504aca:"2000000000000000000000","1e060dc6c5f1cb8cc7e1452e02ee167508b56542":"12715500000000000000000","18136c9df167aa17b6f18e22a702c88f4bc28245":"4000000000000000000000","116108c12084612eeda7a93ddcf8d2602e279e5c":"2000000000000000000000",bbb643d2187b364afc10a6fd368d7d55f50d1a3c:"1000000000000000000000",ec83e798c396b7a55e2a2224abcd834b27ea459c:"12000000000000000000000","973f4e361fe5decd989d4c8f7d7cc97990385daf":"388500000000000000000",c0f29ed0076611b5e55e130547e68a48e26df5e4:"3000000000000000000000",fd4b551f6fdbcda6c511b5bb372250a6b783e534:"20600000000000000000","144b19f1f66cbe318347e48d84b14039466c5909":"2000000000000000000000",bf183641edb886ce60b8190261e14f42d93cce01:"25019000000000000000","94db807873860aac3d5aea1e885e52bff2869954":"3220000000000000000000","7a74cee4fa0f6370a7894f116cd00c1147b83e59":"800000000000000000000",cd32a4a8a27f1cc63954aa634f7857057334c7a3:"1085000000000000000000","7cbeb99932e97e6e02058cfc62d0b26bc7cca52b":"2000000000000000000000","8cde8b732e6023878eb23ed16229124b5f7afbec":"133700000000000000000","45c4ecb4ee891ea984a7c5cefd8dfb00310b2850":"1980000000000000000000","8b393fb0813ee101db1e14ecc7d322c72b8c0473":"455578000000000000000","7b66126879844dfa34fe65c9f288117fefb449ad":"6000000000000000000000","162ba503276214b509f97586bd842110d103d517":"9002000000000000000000","7dece6998ae1900dd3770cf4b93812bad84f0322":"100000000000000000000",ec0927bac7dc36669c28354ab1be83d7eec30934:"2000000000000000000000","8d7f3e61299c2db9b9c0487cf627519ed00a9123":"1742400000000000000000","4fc46c396e674869ad9481638f0013630c87caac":"1000000000000000000000",bf68d28aaf1eeefef646b65e8cc8d190f6c6da9c:"2000000000000000000000","00969747f7a5b30645fe00e44901435ace24cc37":"1700000000000000000000","494dec4d5ee88a2771a815f1ee7264942fb58b28":"2000000000000000000000",ffeac0305ede3a915295ec8e61c7f881006f4474:"98500000000000000000",b39139576194a0866195151f33f2140ad1cc86cf:"100000000000000000000000",fead1803e5e737a68e18472d9ac715f0994cc2be:"500000000000000000000","698ab9a2f33381e07c0c47433d0d21d6f336b127":"20000000000000000000",e5edc73e626f5d3441a45539b5f7a398c593edf6:"865000000000000000000",dd4f5fa2111db68f6bde3589b63029395b69a92d:"158400000000000000000","8c93c3c6db9d37717de165c3a1b4fe51952c08de":"400000000000000000000",f87bb07b289df7301e54c0efda6a2cf291e89200:"1400000000000000000000",e7a4560c84b20e0fb54c49670c2903b0a96c42a4:"598000000000000000000","00a5797f52c9d58f189f36b1d45d1bf6041f2f6b":"5456900000000000000000","9da3302240af0511c6fd1857e6ddb7394f77ab6b":"3100000000000000000000","2c2d15ff39561c1b72eda1cc027ffef23743a144":"3920000000000000000000","9b4c2715780ca4e99e60ebf219f1590c8cad500a":"1600000000000000000000",ff5e7ee7d5114821e159dca5e81f18f1bfffbff9:"2000000000000000000000","0169c1c210eae845e56840412e1f65993ea90fb4":"2000000000000000000000",abc45f84db7382dde54c5f7d8938c42f4f3a3bc4:"200000000000000000000",d9383d4b6d17b3f9cd426e10fb944015c0d44bfb:"800000000000000000000",c090fe23dcd86b358c32e48d2af91024259f6566:"200000000000000000000","9ffedcc36b7cc312ad2a9ede431a514fccb49ba3":"669800000000000000000","2ffe93ec1a5636e9ee34af70dff52682e6ff7079":"2000000000000000000000","6e01e4ad569c95d007ada30d5e2db12888492294":"4000000000000000000000",d4d92c62b280e00f626d8657f1b86166cb1f740f:"200028000000000000000","1d36683063b7e9eb99462dabd569bddce71686f2":"1000000000000000000000","3a48e0a7098b06a905802b87545731118e89f439":"2000000000000000000000",bd9e56e902f4be1fc8768d8038bac63e2acbbf8e:"999972000000000000000","4d67f2ab8599fef5fc413999aa01fd7fce70b43d":"10000000000000000000000","8e74e0d1b77ebc823aca03f119854cb12027f6d7":"107200000000000000000000","7e5b19ae1be94ff4dee635492a1b012d14db0213":"100000000000000000000","5de9e7d5d1b667d095dd34099c85b0421a0bc681":"20000000000000000000","316eb4e47df71b42e16d6fe46825b7327baf3124":"4000000000000000000000","772c297f0ad194482ee8c3f036bdeb01c201d5cc":"200000000000000000000",d7052519756af42590f15391b723a03fa564a951:"4615591000000000000000","2c6846a1aa999a2246a287056000ba4dcba8e63d":"10020000000000000000000",de5b005fe8daae8d1f05de3eda042066c6c4691c:"1100000000000000000000","254c1ecc630c2877de8095f0a8dba1e8bf1f550c":"1700000000000000000000",f8f226142a428434ab17a1864a2597f64aab2f06:"172473000000000000000",a6c910ce4d494a919ccdaaa1fc3b82aa74ba06cf:"8000000000000000000000",e587b16abc8a74081e3613e14342c03375bf0847:"2000000000000000000000","6f176065e88e3c6fe626267d18a088aaa4db80bc":"3520000000000000000000","50dcbc27bcad984093a212a9b4178eabe9017561":"145512000000000000000",e1953c6e975814c571311c34c0f6a99cdf48ab82:"50000000000000000000",be0a2f385f09dbfce96732e12bb40ac349871ba8:"1610348000000000000000","4712540265cbeec3847022c59f1b318d43400a9e":"3500000000000000000000","29bdc4f28de0180f433c2694eb74f5504ce94337":"2000000000000000000000","2f66bfbf2262efcc8d2bd0444fc5b0696298ff1e":"9940000000000000000000","506411fd79003480f6f2b6aac26b7ba792f094b2":"500000000000000000000","23ea669e3564819a83b0c26c00a16d9e826f6c46":"1430590000000000000000",e3ffb02cb7d9ea5243701689afd5d417d7ed2ece:"78000000000000000000","38e7dba8fd4f1f850dbc2649d8e84f0952e3eb3c":"50000000000000000000","8644cc281be332ccced36da483fb2a0746d9ba2e":"400000000000000000000",e8a91da6cf1b9d65c74a02ec1f96eecb6dd241f3:"1940000000000000000000","0631dc40d74e5095e3729eddf49544ecd4396f67":"160000000000000000000","83c897a84b695eebe46679f7da19d776621c2694":"500000000000000000000",db73460b59d8e85045d5e752e62559875e42502e:"999800000000000000000","0dd4e674bbadb1b0dc824498713dce3b5156da29":"170000000000000000000",e3933d61b77dcdc716407f8250bc91e4ffaeb09d:"86600000000000000000000","58c90754d2f20a1cb1dd330625e04b45fa619d5c":"2000000000000000000000","895ec5545644e0b78330fffab8ddeac9e833156c":"600000000000000000000","7e1e29721d6cb91057f6c4042d8a0bbc644afe73":"159800000000000000000","72b90a4dc097239492c5b9777dcd1e52ba2be2c2":"6000000000000000000000","64241a7844290e0ab855f1d4aa75b55345032224":"1600000000000000000000","6fd4e0f3f32bee6d3767fdbc9d353a6d3aab7899":"695240000000000000000","3a035594c747476d42d1ee966c36224cdd224993":"355890000000000000000",de97f4330700b48c496d437c91ca1de9c4b01ba4:"2910840000000000000000","716ad3c33a9b9a0a18967357969b94ee7d2abc10":"482000000000000000000",bfbe05e88c9cbbcc0e92a405fac1d85de248ee24:"100000000000000000000",cfc4e6f7f8b011414bfba42f23adfaa78d4ecc5e:"1850000000000000000000",d931ac2668ba6a84481ab139735aec14b7bfbabf:"2000000000000000000000",e3263ce8af6db3e467584502ed7109125eae22a5:"2000000000000000000000",f78258c12481bcdddbb72a8ca0c043097261c6c5:"20000000000000000000","4493123c021ece3b33b1a452c9268de14007f9d3":"6685000000000000000000","431f2c19e316b044a4b3e61a0c6ff8c104a1a12f":"1000000000000000000000",e63e787414b9048478a50733359ecdd7e3647aa6:"1580000000000000000000",e4715956f52f15306ee9506bf82bccc406b3895e:"274944000000000000000",f7f91e7acb5b8129a306877ce3168e6f438b66a1:"176000000000000000000",dcdbbd4e2604e40e1710cc6730289dccfad3892d:"4600000000000000000000","2b5f4b3f1e11707a227aa5e69fa49dded33fb321":"6000000000000000000000","01488ad3da603c4cdd6cb0b7a1e30d2a30c8fc38":"200000000000000000000","841145b44840c946e21dbc190264b8e0d5029369":"300000000000000000000000",bf05070c2c34219311c4548b2614a438810ded6d:"2000000000000000000000","38f387e1a4ed4a73106ef2b462e474e2e3143ad0":"6000000000000000000000",f116b0b4680f53ab72c968ba802e10aa1be11dc8:"20000000000000000000",bea0afc93aae2108a3fac059623bf86fa582a75e:"1700000000000000000000","4c997992036c5b433ac33d25a8ea1dc3d4e4e6d8":"29200000000000000000",ab7e0b83ed9a424c6d1e6a6f87a4dbf06409c7d6:"2400000000000000000000",d71fb130f0150c565269e00efb43902b52a455a6:"200000000000000000000","99b018932bcad355b6792b255db6702dec8ce5dd":"4000086000000000000000","4b904e934bd0cc8b20705f879e905b93ea0ccc30":"2000000000000000000000","672ec42faa8cd69aaa71b32cc7b404881d52ff91":"10000000000000000000000",acbc2d19e06c3babbb5b6f052b6bf7fc37e07229:"200000000000000000000",cea8743341533cb2f0b9c6efb8fda80d77162825:"100000000000000000000","9568b7de755628af359a84543de23504e15e41e6":"40000000000000000000000","6ec96d13bdb24dc7a557293f029e02dd74b97a55":"4000000000000000000000",d95c90ffbe5484864780b867494a83c89256d6e4:"1640000000000000000000",ade6f8163bf7c7bb4abe8e9893bd0cc112fe8872:"327600000000000000000","250eb7c66f869ddf49da85f3393e980c029aa434":"4000000000000000000000",a35c19132cac1935576abfed6c0495fb07881ba0:"2000000000000000000000",d5550caaf743b037c56fd2558a1c8ed235130750:"5347598000000000000000","03097923ba155e16d82f3ad3f6b815540884b92c":"1820000000000000000000",d6d9e30f0842012a7176a917d9d2048ca0738759:"4000000000000000000000",ab9ad36e5c74ce2e96399f57839431d0e79f96ab:"164000000000000000000","75be8ff65e5788aec6b2a52d5fa7b1e7a03ba675":"67720000000000000000","4f6d4737d7a940382487264886697cf7637f8015":"1670000000000000000000","5f7b3bbac16dab831a4a0fc53b0c549dc36c31ca":"1940000000000000000000",d843ee0863ce933e22f89c802d31287b9671e81c:"13370000000000000000","361f3ba9ed956b770f257d3672fe1ff9f7b0240c":"600000000000000000000","6c0ae9f043c834d44271f13406593dfe094f389f":"1517545000000000000000",db34745ede8576b499db01beb7c1ecda85cf4abe:"80000000000000000000","7be8ccb4f11b66ca6e1d57c0b5396221a31ba53a":"20000000000000000000","128b908fe743a434203de294c441c7e20a86ea67":"713304000000000000000",df236bf6abf4f3293795bf0c28718f93e3b1b36b:"1337000000000000000000","14254ea126b52d0142da0a7e188ce255d8c47178":"775000000000000000000",ceed47ca5b899fd1623f21e9bd4db65a10e5b09d:"133196000000000000000","30acd858875fa24eef0d572fc7d62aad0ebddc35":"400000000000000000000","47a281dff64167197855bf6e705eb9f2cef632ea":"1000072000000000000000","297d5dbe222f2fb52531acbd0b013dc446ac7368":"20000000000000000000000",adf85203c8376a5fde9815384a350c3879c4cb93:"1147300000000000000000",c3e0471c64ff35fa5232cc3121d1d38d1a0fb7de:"2000000000000000000000",fdecc82ddfc56192e26f563c3d68cb544a96bfed:"440000000000000000000","2614f42d5da844377578e6b448dc24305bef2b03":"2000000000000000000000","1d96bcd58457bbf1d3c2a46ffaf16dbf7d836859":"171313000000000000000",bd66ffedb530ea0b2e856dd12ac2296c31fe29e0:"200000000000000000000","6e84876dbb95c40b6656e42ba9aea08a993b54dc":"1101932000000000000000",a1c4f45a82e1c478d845082eb18875c4ea6539ab:"200000000000000000000000","2c964849b1f69cc7cea4442538ed87fdf16cfc8f":"2000000000000000000000","45b47105fe42c4712dce6e2a21c05bffd5ea47a9":"2000000000000000000000","31e9c00f0c206a4e4e7e0522170dc81e88f3eb70":"2685000000000000000000","5fe77703808f823e6c399352108bdb2c527cb87c":"1960000000000000000000","2272186ef27dcbe2f5fc373050fdae7f2ace2316":"16100000000000000000000",b7576e9d314df41ec5506494293afb1bd5d3f65d:"20000000000000000000",ac9fff68c61b011efbecf038ed72db97bb9e7281:"9550000000000000000000",cd9529492b5c29e475acb941402b3d3ba50686b0:"1970000000000000000000",f19b39389d47b11b8a2c3f1da9124decffbefaf7:"2000000000000000000000","9e951f6dc5e352afb8d04299d2478a451259bf56":"72004000000000000000","8eb1fbe4e5d3019cd7d30dae9c0d5b4c76fb6331":"2000000000000000000000","29cc804d922be91f5909f348b0aaa5d21b607830":"4000000000000000000000","5c7b9ec7a2438d1e3c7698b545b9c3fd77b7cd55":"1000000000000000000000",a16160851d2b9c349b92e46f829abfb210943595:"1790000000000000000000",eac6b98842542ea10bb74f26d7c7488f698b6452:"20000000000000000000000","57825aeb09076caa477887fbc9ae37e8b27cc962":"100000000000000000000",b35e8a1c0dac7e0e66dbac736a592abd44012561:"14974000000000000000","756b84eb85fcc1f4fcdcc2b08db6a86e135fbc25":"3220000000000000000000",e13b3d2bbfdcbc8772a23315724c1425167c5688:"1032115000000000000000","0a2dcb7a671701dbb8f495728088265873356c8e":"152120000000000000000","03cb4c4f4516c4ff79a1b6244fbf572e1c7fea79":"2740000000000000000000","98ba4e9ca72fddc20c69b4396f76f8183f7a2a4e":"12800000000000000000000",f8087786b42da04ed6d1e0fe26f6c0eefe1e9f5a:"10000000000000000000000","02f7f67209b16a17550c694c72583819c80b54ad":"98400000000000000000","32bb2e9693e4e085344d2f0dbd46a283e3a087fd":"400000000000000000000","9c78963fbc263c09bd72e4f8def74a9475f7055c":"13790000000000000000000","27144ca9a7771a836ad50f803f64d869b2ae2b20":"4000000000000000000000",cc758d071d25a6320af68c5dc9c4f6955ba94520:"6000000000000000000000",cb42b44eb5fd60b5837e4f9eb47267523d1a229c:"865000000000000000000",aaf5b207b88b0de4ac40d747cee06e172df6e745:"31428000000000000000000","52d380511df19d5ec2807bbcb676581b67fd37a3":"13400000000000000000",aa1b3768c16d821f580e76c8e4c8e86d7dc78853:"400000000000000000000","41098a81452317c19e3eef0bd123bbe178e9e9ca":"2800000000000000000000","267148fd72c54f620a592fb92799319cc4532b5c":"410000000000000000000",d7cdbd41fff20df727c70b6255c1ba7606055468:"200000000000000000000","0e33fcbbc003510be35785b52a9c5d216bc005f4":"1880000000000000000000","6727daf5b9d68efcab489fedec96d7f7325dd423":"2000000000000000000000",cd0a161bc367ae0927a92aac9cf6e5086714efca:"2000000000000000000000","612667f172135b950b2cd1de10afdece6857b873":"1000000000000000000000","900194c4b1074305d19de405b0ac78280ecaf967":"1000000000000000000000","51f55ef47e6456a418ab32b9221ed27dba6608ee":"4200000000000000000000","0da532c910e3ac0dfb14db61cd739a93353fd05f":"1336866000000000000000","21df2dcdaf74b2bf803404dd4de6a35eabec1bbd":"6920000000000000000000",f0e7fb9e420a5340d536f40408344feaefc06aef:"1000000000000000000000","6742a2cfce8d79a2c4a51b77747498912245cd6a":"258064000000000000000","8663a241a0a89e70e182c845e2105c8ad7264bcf":"14825507000000000000000","18e113d8177c691a61be785852fa5bb47aeebdaf":"1337000000000000000000","1bec4d02ce85fc48feb62489841d85b170586a9b":"2400000000000000000000","287cf9d0902ef819a7a5f149445bf1775ee8c47c":"16000000000000000000000","28967280214e218a120c5dda37041b111ea36d74":"200000000000000000000",a0b771951ce1deee363ae2b771b73e07c4b5e800:"1400000000000000000000","29f8fba4c30772b057edbbe62ae7420c390572e1":"1000000000000000000000",ee34c7e7995db9f187cff156918cfb6f13f6e003:"1960000000000000000000","916bf7e3c545921d3206d900c24f14127cbd5e70":"18020000000000000000000","93235f340d2863e18d2f4c52996516138d220267":"73800000000000000000","7efec0c6253caf397f71287c1c07f6c9582b5b86":"482839000000000000000","8d2e31b08803b2c5f13d398ecad88528209f6057":"9993000000000000000000","964eab4b276b4cd8983e15ca72b106900fe41fce":"500000000000000000000",eea1e97988de75d821cd28ad6822b22cce988b31:"520000000000000000000","278c0bde630ec393b1e7267fc9d7d97019e4145b":"2000000000000000000000","82e4461eb9d849f0041c1404219e4272c4900ab4":"2000000000000000000000","4a73389298031b8816cca946421c199e18b343d6":"631254000000000000000","9a5af31c7e06339ac8b4628d7c4db0ce0f45c8a4":"500000000000000000000",cb9b5103e4ce89af4f64916150bff9eecb9faa5c:"500000000000000000000","740f641614779dcfa88ed1d425d60db42a060ca6":"998630000000000000000",a4e623451e7e94e7e89ba5ed95c8a83a62ffc4ea:"20000000000000000000","25a500eeec7a662a841552b5168b707b0de21e9e":"10020000000000000000000","185a7fc4ace368d233e620b2a45935661292bdf2":"20000000000000000000000","9b68f67416a63bf4451a31164c92f672a68759e9":"60000000000000000000000",a38b5bd81a9db9d2b21d5ec7c60552cd02ed561b:"6000000000000000000000","61c830f1654718f075ccaba316faacb85b7d120b":"400000000000000000000","8392e53776713578015bff4940cf43849d7dcba1":"153190000000000000000",dc57477dafa42f705c7fe40eae9c81756e0225f1:"500044000000000000000",febc3173bc9072136354002b7b4fb3bfc53f22f1:"370000000000000000000",d78f84e38944a0e0255faece48ba4950d4bd39d2:"5000000000000000000000",a7a3bb6139b0ada00c1f7f1f9f56d994ba4d1fa8:"2000000000000000000000",aa3f29601a1331745e05c42830a15e71938a6237:"1700000000000000000000",bec6640f4909b58cbf1e806342961d607595096c:"1999944000000000000000","9be3c329b62a28b8b0886cbd8b99f8bc930ce3e6":"74500000000000000000",e3eb2c0a132a524f72ccc0d60fee8b41685d39e2:"1970000000000000000000","90b1f370f9c1eb0be0fb8e2b8ad96a416371dd8a":"900000000000000000000",f2742e6859c569d5f2108351e0bf4dca352a48a8:"10000000000000000000000",b134c004391ab4992878337a51ec242f42285742:"2000000000000000000000",ab7416ff32254951cbbc624ec7fb45fc7ecaa872:"340000000000000000000","9795f64319fc17dd0f8261f9d206fb66b64cd0c9":"200000000000000000000","64e03ef070a54703b7184e48276c5c0077ef4b34":"320000000000000000000","3430a16381f869f6ea5423915855e800883525a9":"17900000000000000000000",f4a367b166d2991a2bfda9f56463a09f252c1b1d:"1970000000000000000000","77c4a697e603d42b12056cbba761e7f51d0443f5":"680000000000000000000","153ef58a1e2e7a3eb6b459a80ab2a547c94182a2":"96000000000000000000000","6dbe8abfa1742806263981371bf3d35590806b6e":"20000000000000000000000","4c99dae96481e807c1f99f8b7fbde29b7547c5bf":"150000000000000000000",d5b9d277d8aad20697a51f76e20978996bffe055:"143250000000000000000","0f24105abbdaa03fa6309ef6c188e51f714a6e59":"200000000000000000000","1cb6b2d7cfc559b7f41e6f56ab95c7c958cd0e4c":"1337000000000000000000",f37b426547a1642d8033324814f0ede3114fc212:"401100000000000000000","318f1f8bd220b0558b95fb33100ffdbb640d7ca6":"4000000000000000000000","206d55d5792a514ec108e090599f2a065e501185":"200550000000000000000","11d2247a221e70c2d66d17ee138d38c55ffb8640":"10000000000000000000000",e8de725eca5def805ff7941d31ac1c2e342dfe95:"2462500000000000000000",d561cbbc05515de73ab8cf9eae1357341e7dfdf4:"6000000000000000000000","0455dcec8a7fc4461bfd7f37456fce3f4c3caac7":"400000000000000000000","5161fd49e847f67455f1c8bb7abb36e985260d03":"1200000000000000000000","8e073bad25e42218615f4a0e6b2ea8f8de2230c0":"2402500000000000000000","6c08a6dc0173c7342955d1d3f2c065d62f83aec7":"20000000000000000000","95cb6d8a6379f94aba8b885669562c4d448e56a7":"2000000000000000000000","2805415e1d7fdec6dedfb89e521d10592d743c10":"100000000000000000000",daacdaf42226d15cb1cf98fa15048c7f4ceefe69:"300000000000000000000",e33df4ce80ccb62a76b12bcdfcecc46289973aa9:"6000000000000000000000","8f8cd26e82e7c6defd02dfad07979021cbf7150c":"3000000000000000000000","77a17122fa31b98f1711d32a99f03ec326f33d08":"1700000000000000000000","6f791d359bc3536a315d6382b88311af8ed6da47":"92000000000000000000",de30e49e5ab313214d2f01dcabce8940b81b1c76:"197000000000000000000",cf9be9b9ab86c66b59968e67b8d4dcff46b1814a:"660000000000000000000","7fdfc88d78bf1b285ac64f1adb35dc11fcb03951":"2287900000000000000000",c5134cfbb1df7a20b0ed7057622eeed280947dad:"3800000000000000000000",fa9ec8efe08686fa58c181335872ba698560ecab:"1999944000000000000000",f6a8635757c5e8c134d20d028cf778cf8609e46a:"1459416000000000000000","6265b2e7730f36b776b52d0c9d02ada55d8e3cb6":"1000000000000000000000","6a8cea2de84a8df997fd3f84e3083d93de57cda9":"100007000000000000000","1b7ed974b6e234ce81247498429a5bd4a0a2d139":"2000000000000000000000","9ba53dc8c95e9a472feba2c4e32c1dc4dd7bab46":"1337000000000000000000",d7b740dff8c457668fdf74f6a266bfc1dcb723f9:"20000000000000000000","07bc2cc8eedc01970700efc9c4fb36735e98cd71":"4000000000000000000000","3e1c962063e0d5295941f210dca3ab531eec8809":"3000000000000000000000",b447571dacbb3ecbb6d1cf0b0c8f3838e52324e2:"30199000000000000000","87764e3677eef604cbc59aed24abdc566b09fc25":"3000000000000000000000","03aa622881236dd0f4940c24c324ff8b7b7e2186":"3200000000000000000000",a4a7d306f510cd58359428c0d2f7c3609d5674d7:"3349000000000000000000","3c83c1701db0388b68210d00f5717cd9bd322c6a":"30000000000000000000000","047d5a26d7ad8f8e70600f70a398ddaa1c2db26f":"6000000000000000000000","43767bf7fd2af95b72e9312da9443cb1688e4343":"300000000000000000000","34a85d6d243fb1dfb7d1d2d44f536e947a4cee9e":"20000000000000000000000","65a9dad42e1632ba3e4e49623fab62a17e4d3611":"93120000000000000000","48e0cbd67f18acdb7a6291e1254db32e0972737f":"100007000000000000000",a5de5e434fdcdd688f1c31b6fb512cb196724701:"800000000000000000000","6d63d38ee8b90e0e6ed8f192eda051b2d6a58bfd":"30000000000000000000",b079bb4d9866143a6da72ae7ac0022062981315c:"760000000000000000000",c0413f5a7c2d9a4b8108289ef6ecd271781524f4:"50000000000000000000000",a91a5a7b341f99c535144e20be9c6b3bb4c28e4d:"5431790000000000000000","993f146178605e66d517be782ef0b3c61a4e1925":"7011998000000000000000","966c04781cb5e67dde3235d7f8620e1ab663a9a5":"75800000000000000000000",b3f82a87e59a39d0d2808f0751eb72c2329cdcc5:"5000000000000000000000","9b77ebced7e215f0920e8c2b870024f6ecb2ff31":"1000000000000000000000",fe697ff22ca547bfc95e33d960da605c6763f35b:"1325000000000000000000","480af52076009ca73781b70e43b95916a62203ab":"924171000000000000000",a9dc0424c6969d798358b393b1933a1f51bee00a:"20000000000000000000000","7aba56f63a48bc0817d6b97039039a7ad62fae2e":"600000000000000000000","59d139e2e40c7b97239d23dfaca33858f602d22b":"2000000000000000000000","8d6170ff66978e773bb621bf72b1ba7be3a7f87e":"200000000000000000000",d668523a90f0293d65c538d2dd6c57673710196e:"39500000000000000000",bbb5a0f4802c8648009e8a6998af352cde87544f:"95500000000000000000",fc43829ac787ff88aaf183ba352aadbf5a15b193:"3960000000000000000000",fe22a0b388668d1ae2643e771dacf38a434223cc:"4000304000000000000000","092acb624b08c05510189bbbe21e6524d644ccad":"18200000000000000000","8f0538ed71da1155e0f3bde5667ceb84318a1a87":"1940000000000000000000","06994cd83aa2640a97b2600b41339d1e0d3ede6c":"250000000000000000000","9d460c1b379ddb19a8c85b4c6747050ddf17a875":"3340000000000000000000","77a769fafdecf4a638762d5ba3969df63120a41d":"2000000000000000000000","5f375b86600c40cca8b2676b7a1a1d1644c5f52c":"78838000000000000000","15ee0fc63ebf1b1fc49d7bb38f8863823a2e17d2":"1910000000000000000000","6651736fb59b91fee9c93aa0bd6ea2f7b2506180":"500000000000000000000","361d9ed80b5bd27cf9f1226f26753258ee5f9b3f":"3530900000000000000000",c9b6b686111691ee6aa197c7231a88dc60bd295d:"500000000000000000000",e9b4a4853577a9dbcc2e795be0310d1bed28641a:"1000000000000000000000","36758e049cd98bcea12277a676f9297362890023":"4000000000000000000000","6bb50813146a9add42ee22038c9f1f7469d47f47":"200200000000000000000","6de4b581385cf7fc9fe8c77d131fe2ee7724c76a":"2308840000000000000000",d2a5a024230a57ccc666760b89b0e26cafd189c7:"49997115000000000000000","65af9087e05167715497c9a5a749189489004def":"835000000000000000000",ead21c1deccfbf1c5cd96688a2476b69ba07ce4a:"72800000000000000000",e308435204793764f5fcbe65eb510f5a744a655a:"200000000000000000000","9376dce2af2ec8dcda741b7e7345664681d93668":"1000000000000000000000",a1b47c4d0ed6018842e6cfc8630ac3a3142e5e6b:"20000000000000000000",e2198c8ca1b399f7521561fd5384a7132fba486b:"1015200000000000000000","92c13fe0d6ce87fd50e03def9fa6400509bd7073":"40000000000000000000","7517f16c28d132bb40e3ba36c6aef131c462da17":"18200000000000000000","6a023af57d584d845e698736f130db9db40dfa9a":"98800000000000000000","1518627b88351fede796d3f3083364fbd4887b0c":"16000000000000000000000",f5b6e9061a4eb096160777e26762cf48bdd8b55d:"254030000000000000000","28073efc17d05cab3195c2db332b61984777a612":"1000000000000000000000",f06a854a3c5dc36d1c49f4c87d6db333b57e4add:"10000000000000000000000","9225983860a1cb4623c72480ac16272b0c95e5f5":"2000000000000000000000","5260dc51ee07bddaababb9ee744b393c7f4793a6":"34040000000000000000","0f127bbf8e311caea2ba502a33feced3f730ba42":"188000000000000000000","17d521a8d9779023f7164d233c3b6420ffd223ed":"20000000000000000000","8c2b7d8b608d28b77f5caa9cd645242a823e4cd9":"1820000000000000000000","6e866d032d405abdd65cf651411d803796c22311":"2000000000000000000000",dc51b2dc9d247a1d0e5bc36ca3156f7af21ff9f6:"1000000000000000000000",c84d9bea0a7b9f140220fd8b9097cfbfd5edf564:"123047000000000000000",ff86e5e8e15b53909600e41308dab75f0e24e46b:"902400000000000000000",d7164aa261c09ad9b2b5068d453ed8eb6aa13083:"3000000000000000000000","76aaf8c1ac012f8752d4c09bb46607b6651d5ca8":"20000000000000000000","41786a10d447f484d33244ccb7facd8b427b5b8c":"1000000000000000000000","2e0c57b47150f95aa6a7e16ab9b1cbf54328979a":"100000000000000000000","3f747237806fed3f828a6852eb0867f79027af89":"1500000000000000000000",a568db4d57e4d67462d733c69a9e0fe26e218327:"1096140000000000000000","1f88f8a1338fc7c10976abcd3fb8d38554b5ec9c":"13400000000000000000",d1ea4d72a67b5b3e0f315559f52bd0614d713069:"2000000000000000000000",bfaeb91067617dcf8b44172b02af615674835dba:"160661000000000000000",b71a13ba8e95167b80331b52d69e37054fe7a826:"200000000000000000000",b67a80f170197d96cdcc4ab6cba627b4afa6e12c:"2400000000000000000000","35af040a0cc2337a76af288154c7561e1a233349":"1000000000000000000000",c86190904b8d079ec010e462cbffc90834ffaa5c:"10100000000000000000000","383304dd7a5720b29c1a10f60342219f48032f80":"5600000000000000000000","191313525238a21c767457a91374f02200c55448":"116400000000000000000",cc4a2f2cf86cf3e43375f360a4734691195f1490:"1348127000000000000000","4e020779b5ddd3df228a00cb48c2fc979da6ae38":"2000000000000000000000",e206fb7324e9deb79e19903496d6961b9be56603:"100000000000000000000","3ae160e3cd60ae31b9d6742d68e14e76bd96c517":"30000000000000000000","1f7d8e86d6eeb02545aad90e91327bd369d7d2f3":"20000000000000000000","68c7d1711b011a33f16f1f55b5c902cce970bdd7":"152000000000000000000","637be71b3aa815ff453d5642f73074450b64c82a":"2000000000000000000000","1584a2c066b7a455dbd6ae2807a7334e83c35fa5":"130000000000000000000","9c05e9d0f0758e795303717e31da213ca157e686":"1000000000000000000000","4f1a2da54a4c6da19d142412e56e815741db2325":"100000000000000000000","9a4ca8b82117894e43db72b9fa78f0b9b93ace09":"50000000000000000000","26c99f8849c9802b83c861217fd07a9e84cdb79d":"300000000000000000000","45c0d19f0b8e054f9e893836d5ecae7901af2812":"5000000000000000000000","00dc01cbf44978a42e8de8e436edf94205cfb6ec":"1458440000000000000000",de7dee220f0457a7187d56c1c41f2eb00ac56021:"629924000000000000000","1c128bd6cda5fca27575e4b43b3253c8c4172afe":"2000000000000000000000","666746fb93d1935c5a3c684e725010c4fad0b1d8":"20000000000000000000","51d78b178d707e396e8710965c4f41b1a1d9179d":"110600000000000000000","68f7573cd457e14c03fea43e302d30347c10705c":"5000000000000000000000","9d30cb237bc096f17036fc80dd21ca68992ca2d9":"30380000000000000000000",fbcfcc4a7b0f26cf26e9f3332132e2fc6a230766:"8000000000000000000000",b166e37d2e501ae73c84142b5ffb5aa655dd5a99:"1999000000000000000000","6df24f6685a62f791ba337bf3ff67e91f3d4bc3a":"2166000000000000000000","92e435340e9d253c00256389f52b067d55974e76":"268000000000000000000",ea53d26564859d9e90bb0e53b7abf560e0162c38:"400000000000000000000",e26657f0ed201ea2392c9222b80a7003608ddf30:"40000000000000000000",f4177a0d85d48b0e264211ce2aa2efd3f1b47f08:"3593425000000000000000","9d47ba5b4c8505ad8da42934280b61a0e1e8b971":"100000000000000000000","63c2a3d235e5eeabd0d4a6afdb89d94627396495":"1241620000000000000000","446a8039cecf9dce4879cbcaf3493bf545a88610":"7000000000000000000000","7fa37ed67887751a471f0eb306be44e0dbcd6089":"1060000000000000000000","26d4a16891f52922789217fcd886f7fce296d400":"2000000000000000000000","487e108502b0b189ef9c8c6da4d0db6261eec6c0":"1910000000000000000000","7484d26becc1eea8c6315ec3ee0a450117dc86a0":"12000000000000000000000",ad9e97a0482f353a05c0f792b977b6c7e811fa5f:"200000000000000000000","2273bad7bc4e487622d175ef7a66988b6a93c4ee":"20000000000000000000","3b93b16136f11eaf10996c95990d3b2739ccea5f":"10000000000000000000000",f3f1fa3918ca34e2cf7e84670b1f4d8eca160db3:"680000000000000000000","88a2154430c0e41147d3c1fee3b3b006f851edbd":"999972000000000000000","25185f325acf2d64500698f65c769ddf68301602":"5000000000000000000000",e9cafe41a5e8bbd90ba02d9e06585b4eb546c57f:"2000000000000000000000","95681cdae69b2049ce101e325c759892cac3f811":"2857600000000000000000","475066f9ad26655196d5535327bbeb9b7929cb04":"3040000000000000000000","6685fd2e2544702c360b8bb9ee78f130dad16da5":"2000000000000000000000","45e68db94c7d0ab7ac41857a71d67147870f4e71":"400000000000000000000000","4ad95d188d6464709add2555fb4d97fe1ebf311f":"346000000000000000000","73bedd6fda7ba3272185087b6351fc133d484e37":"5057200000000000000000","1ea4715504c6af107b0194f4f7b1cb6fcccd6f4b":"590598000000000000000","77306ffe2e4a8f3ca826c1a249f7212da43aeffd":"20000000000000000000000",eb453f5a3adddd8ab56750fadb0fe7f94d9c89e7:"20000000000000000000","7201d1c06920cd397ae8ad869bcda6e47ffb1b5a":"20000000000000000000","821cb5cd05c7ef909fe1be60733d8963d760dc41":"4000000000000000000000","496e319592b341eaccd778dda7c8196d54cac775":"9250000000000000000000","88609e0a465b6e99fce907166d57e9da0814f5c8":"20000000000000000000000",c7ec62b804b1f69b1e3070b5d362c62fb309b070:"13068074000000000000000","3eb9ef06d0c259040319947e8c7a6812aa0253d8":"167000000000000000000",cbf37ff854a2f1ce53934494777892d3ec655782:"10000000000000000000000","02b1af72339b2a2256389fd64607de24f0de600a":"2000000000000000000000",a8beb91c2b99c8964aa95b6b4a184b1269fc3483:"400000000000000000000","922a20c79a1d3a26dd3829677bf1d45c8f672bb6":"4000000000000000000000",c5843399d150066bf7979c34ba294620368ad7c0:"200000000000000000000","8cd0cd22e620eda79c0461e896c93c44837e2968":"2000000000000000000000","6170dd0687bd55ca88b87adef51cfdc55c4dd458":"2005160000000000000000",eed384ef2d41d9d203974e57c12328ea760e08ea:"1000000000000000000000",b129a5cb7105fe810bd895dc7206a991a4545488:"30000000000000000000","3872f48dc5e3f817bc6b2ad2d030fc5e0471193d":"4000000000000000000000","514b7512c9ae5ea63cbf11715b63f21e18d296c1":"1999944000000000000000","7ab256b204800af20137fabcc916a23258752501":"20000000000000000000000",fc66faba277f4b5de64ad45eb19c31e00ced3ed5:"5640000000000000000000","39824f8bced176fd3ea22ec6a493d0ccc33fc147":"4000000000000000000000",e338e859fe2e8c15554848b75caecda877a0e832:"1801800000000000000000",e53c68796212033e4e6f9cff56e19c461eb454f9:"1000000000000000000000","8461ecc4a6a45eb1a5b947fb86b88069b91fcd6f":"2000000000000000000000","6b4b99cb3fa9f7b74ce3a48317b1cd13090a1a7a":"57300000000000000000","97de21e421c37fe4b8025f9a51b7b390b5df7804":"80000000000000000000000",d25aecd7eb8bd6345b063b5dbd271c77d3514494:"1820000000000000000000","57b23d6a1adc06c652a779c6a7fb6b95b9fead66":"200000000000000000000","0d658014a199061cf6b39433140303c20ffd4e5a":"8200000000000000000000","30eac740e4f02cb56eef0526e5d300322600d03e":"1970000000000000000000","4eead40aad8c73ef08fc84bc0a92c9092f6a36bf":"26740000000000000000","30f7d025d16f7bee105580486f9f561c7bae3fef":"500000000000000000000","0977bfba038a44fb49b03970d8d8cf2cb61f8b25":"420000000000000000000",b14bbeff70720975dc6191b2a44ff49f2672873c:"143000000000000000000",d588c3a5df228185d98ee7e60748255cdea68b01:"4000000000000000000000","225d35faedb391c7bc2db7fa9071160405996d00":"167774000000000000000",c0e457bd56ec36a1246bfa3230fff38e5926ef22:"1940000000000000000000","2a9c57fe7b6b138a920d676f3c76b6c2a0eef699":"9400000000000000000000","36df8f883c1273ec8a171f7a33cfd649b1fe6075":"227290000000000000000","234f46bab73fe45d31bf87f0a1e0466199f2ebac":"485000000000000000000",a2e1b8aa900e9c139b3fa122354f6156d92a18b1:"500000000000000000000","517cd7608e5d0d83a26b717f3603dac2277dc3a4":"2000000000000000000000","75f7539d309e9039989efe2e8b2dbd865a0df088":"2460000000000000000000","4b792e29683eb586e394bb33526c6001b397999e":"600000000000000000000",a34f9d568bf7afd94c2a5b8a5ff55c66c4087999:"2444000000000000000000","4b31bf41abc75c9ae2cd8f7f35163b6e2b745054":"382000000000000000000",e35453eef2cc3c7a044d0ac134ba615908fa82ee:"147510000000000000000","7aa79ac04316cc8d08f20065baa6d4142897d54e":"1400000000000000000000",f1dc8ac81042c67a9c3c6792b230c46ac016ca10:"200000000000000000000","2bb366b9edcb0da680f0e10b3b6e28748190d6c3":"5799400000000000000000",a567770b6ae320bdde50f904d663e746a61dace6:"2000000000000000000000",d9d42fd13ebd4bf69cac5e9c7e82483ab46dd7e9:"5348000000000000000000","27830c5f6023afaaf79745676c204a0faccda0ba":"240000000000000000000","3cb179cb4801a99b95c3b0c324a2bdc101a65360":"26000000000000000000","976e3ceaf3f1af51f8c29aff5d7fa21f0386d8ee":"240000000000000000000","752a5ee232612cd3005fb26e5b597de19f776be6":"5460000000000000000000","7d5aa33fc14b51841a06906edb2bb49c2a117269":"300048000000000000000","55ca6abe79ea2497f46fdbb830346010fe469cbe":"5730000000000000000000","6bec311ad05008b4af353c958c40bd06739a3ff3":"16380000000000000000000","30e9698cf1e08a9d048bd8d8048f28be7ed9409f":"6685000000000000000000","9afa536b4c66bc38d875c4b30099d9261fdb38eb":"205981000000000000000","6b63a2dfb2bcd0caec0022b88be30c1451ea56aa":"809021000000000000000",d07be0f90997caf903c8ac1d53cde904fb190741:"1000200000000000000000","893cdddf5377f3c751bf2e541120045a47cba101":"100000000000000000000",c1cdc601f89c0428b31302d187e0dc08ad7d1c57:"6000000000000000000000", -"8f8acb107607388479f64baaabea8ff007ada97d":"27281800000000000000000","88bc43012edb0ea9f062ac437843250a39b78fbb":"20000000000000000000000",fcfc3a5004d678613f0b36a642269a7f371c3f6a:"1000000000000000000000",f509557e90183fbf0f0651a786487bcc428ba175:"194000000000000000000",e3d915eda3b825d6ee4af9328d32ac18ada35497:"500000000000000000000",f237ef05261c34d79cc22b860de0f17f793c3860:"200000000000000000000",a3a2e319e7d3a1448b5aa2468953160c2dbcba71:"2000000000000000000000","3a368efe4ad786e26395ec9fc6ad698cae29fe01":"632200000000000000000","8e3240b0810e1cf407a500804740cf8d616432a4":"40309000000000000000","5691dd2f6745f20e22d2e1d1b955aa2903d65656":"1969606000000000000000","5f93ff832774db5114c55bb4bf44ccf3b58f903f":"192026650000000000000000","2c1cc6e18c152488ba11c2cc1bcefa2df306abd1":"1670000000000000000000",bde9786a84e75b48f18e726dd78d70e4af3ed802:"5730000000000000000000","79551cede376f747e3716c8d79400d766d2e0195":"46250000000000000000000","49f028395b5a86c9e07f7778630e4c2e3d373a77":"122735000000000000000","6a3694424c7cc6b8bcd9bccaba540cc1f5df18d7":"2000000000000000000000","068e29b3f191c812a6393918f71ab933ae6847f2":"1999944000000000000000","6e64e6129f224e378c0e6e736a7e7a06c211e9ec":"1000000000000000000000",c4c15318d370c73318cc18bdd466dbaa4c6603bf:"19700000000000000000","8035bcffaefdeeea35830c497d14289d362023de":"300000000000000000000",a997dfc7986a27050848fa1c64d7a7d6e07acca2:"143000000000000000000","2fe13a8d0785de8758a5e41876c36e916cf75074":"4000000000000000000000","6f24c9af2b763480515d1b0951bb77a540f1e3f9":"1970000000000000000000","4c23b370fc992bb67cec06e26715b62f0b3a4ac3":"10000000000000000000000","4ac07673e42f64c1a25ec2fa2d86e5aa2b34e039":"2000000000000000000000","117db836377fe15455e02c2ebda40b1ceb551b19":"6000000000000000000000",ef1c0477f1184d60accab374d374557a0a3e10f3:"152000000000000000000","99fe0d201228a753145655d428eb9fd94985d36d":"1939268000000000000000",b3731b046c8ac695a127fd79d0a5d5fa6ae6d12e:"1998000000000000000000",dce30c31f3ca66721ecb213c809aab561d9b52e4:"2000000000000000000000",ddd69c5b9bf5eb5a39cee7c3341a120d973fdb34:"1987730000000000000000","216e41864ef98f060da08ecae19ad1166a17d036":"5730000000000000000000","6a53d41ae4a752b21abed5374649953a513de5e5":"2000000000000000000000","20dd8fcbb46ea46fe381a68b8ca0ea5be21fe9a5":"2000000000000000000000","19732bf973055dbd91a4533adaa2149a91d38380":"2000000000000000000000","51ea1c0934e3d04022ed9c95a087a150ef705e81":"6280000000000000000000",a0de5c601e696635c698b7ae9ca4539fc7b941ec:"346150000000000000000","94e1f5cb9b8abace03a1a6428256553b690c2355":"20000000000000000000",a539b4a401b584dfe0f344b1b422c65543167e2e:"200000000000000000000","50584d9206a46ce15c301117ee28f15c30e60e75":"13400000000000000000","856eb204241a87830fb229031343dc30854f581a":"1000000000000000000000","9dd46b1c6d3f05e29e9c6f037eed9a595af4a9aa":"500000000000000000000","8925da4549e15155e57a628522cea9dddf627d81":"1000070000000000000000",a89df34859edd7c820db887740d8ff9e15157c7b:"2000000000000000000000",ad9f4c890a3b511cee51dfe6cfd7f1093b76412c:"506600000000000000000",f8c7f34a38b31801da43063477b12b27d0f203ff:"494800000000000000000",a642501004c90ea9c9ed1998ba140a4cd62c6f5f:"250543000000000000000","508cf19119db70aa86454253da764a2cb1b2be1a":"1000000000000000000000","2979741174a8c1ea0b7f9edf658177859417f512":"461283000000000000000","654f524847b3a6acc0d3d5f1f362b603edf65f96":"8000000000000000000000","5cf18fa7c8a7c0a2b3d5efd1990f64ddc569242c":"1000000000000000000000","17e82e7078dc4fd9e879fb8a50667f53a5c54591":"200000000000000000000","8b07d050754dc9ba230db01c310afdb5395aa1b3":"118080000000000000000","5f77a107ab1226b3f95f10ee83aefc6c5dff3edc":"500000000000000000000","475a6193572d4a4e59d7be09cb960ddd8c530e2f":"667323000000000000000","6470a4f92ec6b0fccd01234fa59023e9ff1f3aac":"3000000000000000000000","2fbcef3384d420e4bf61a0669990bc7054f1a5af":"2000000000000000000000",bbabf6643beb4bd01c120bd0598a0987d82967d1:"3342500000000000000000","41a2f2e6ecb86394ec0e338c0fc97e9c5583ded2":"2009400000000000000000",fb9473cf7712350a1fa0395273fc80560752e4fb:"123300000000000000000","38b2197106123387a0d4de368431a8bacdda30e2":"20000000000000000000","5ed56115bd6505a88273df5c56839470d24a2db7":"65601000000000000000","523f6d64690fdacd942853591bb0ff20d3656d95":"1820000000000000000000","55caff4bba04d220c9a5d2018672ec85e31ef83e":"2000000000000000000000","65af8d8b5b1d1eedfa77bcbc96c1b133f83306df":"98000000000000000000","7456c5b2c5436e3e571008933f1805ccfe34e9ec":"1000000000000000000000",a6eebbe464d39187bf80ca9c13d72027ec5ba8be:"3000000000000000000000",dd35cfdbcb993395537aecc9f59085a8d5ddb6f5:"1000000000000000000000","98e2b6d606fd2d6991c9d6d4077fdf3fdd4585da":"901520000000000000000","860f5ffc10de767ded807f71e861d647dfd219b1":"10000000000000000000000","1a644a50cbc2aee823bd2bf243e825be4d47df02":"100007000000000000000",a8455b411765d6901e311e726403091e42c56683:"3380000000000000000000","3a86ee94862b743dd34f410969d94e2c5652d4ad":"201610000000000000000",a57360f002e0d64d2d74457d8ca4857ee00bcddf:"335780000000000000000",e59b3bd300893f97233ef947c46f7217e392f7e9:"1000000000000000000000","9f3a74fd5e7edcc1162993171381cbb632b7cff0":"10000000000000000000000","675d5caa609bf70a18aca580465d8fb7310d1bbb":"20000000000000000000000","77f609ca8720a023262c55c46f2d26fb3930ac69":"17300000000000000000",f8ac4a39b53c11307820973b441365cffe596f66:"2000000000000000000000","112634b4ec30ff786e024159f796a57939ea144e":"1999944000000000000000","49d2c28ee9bc545eaaf7fd14c27c4073b4bb5f1a":"1474134000000000000000","91cc46aa379f856a6640dccd5a648a7902f849d9":"200000000000000000000",b46440c797a556e04c7d9104660491f96bb076bf:"14900000000000000000",e5968797468ef767101b761d431fce14abffdbb4:"8040000000000000000000",c0895efd056d9a3a81c3da578ada311bfb9356cf:"200000000000000000000","76846f0de03b5a76971ead298cdd08843a4bc6c6":"15500000000000000000","5f708eaf39d823946c51b3a3e9b7b3c003e26341":"1820000000000000000000","24f7450ddbf18b020feb1a2032d9d54b633edf37":"50000000000000000000",cae3a253bcb2cf4e13ba80c298ab0402da7c2aa0:"5400000000000000000000","91e8810652e8e6161525d63bb7751dc20f676076":"725000000000000000000","543629c95cdef428ad37d453ca9538a9f90900ac":"43250000000000000000000","6e79edd4845b076e4cd88d188b6e432dd93f35aa":"955000000000000000000",bd325d4029e0d8729f6d399c478224ae9e7ae41e:"3880000000000000000000","42cecfd2921079c2d7df3f08b07aa3beee5e219a":"1000000000000000000000","3690246ba3c80679e22eac4412a1aefce6d7cd82":"20000000000000000000000","577aeee8d4bc08fc97ab156ed57fb970925366be":"333046000000000000000",fe00bf439911a553982db638039245bcf032dbdc:"394000000000000000000","91f624b24a1fa5a056fe571229e7379db14b9a1e":"11999974000000000000000",f206d328e471d0117b246d2a4619827709e96df3:"3001000000000000000000","073f1ed1c9c3e9c52a9b0249a5c1caa0571fdf05":"70400000000000000000",f56048dd2181d4a36f64fcecc6215481e42abc15:"200000000000000000000",ef76a4cd8febcbc9b818f17828f8d93473f3f3cb:"4000000000000000000000","1031e0ecb54985ae21af1793950dc811888fde7c":"20000000000000000000","8e0fee38685a94aabcd7ce857b6b1409824f75b8":"500000000000000000000",f0cbef84e169630098d4e301b20208ef05846ac9:"259084000000000000000",bbca65b3266ea2fb73a03f921635f912c7bede00:"1970000000000000000000","0aec2e426ed6cc0cf3c249c1897eac47a7faa9bd":"200000000000000000000",b8f30758faa808dbc919aa7b425ec922b93b8129:"1000076000000000000000","936dcf000194e3bff50ac5b4243a3ba014d661d8":"10000000000000000000000",b14ddb0386fb606398b8cc47565afae00ff1d66a:"2973024000000000000000","2ec95822eb887bc113b4712a4dfd7f13b097b5e7":"1000000000000000000000","0136a5af6c3299c6b5f005fdaddb148c070b299b":"20368000000000000000","37cb868d2c3f95b257611eb34a4188d58b749802":"2000000000000000000000",cd7f09d7ed66d0c38bc5ad4e32b7f2b08dc1b30d:"1148000000000000000000",b5fa8184e43ed3e0b8ab91216461b3528d84fd09:"2680000000000000000000","3dbf0dbfd77890800533f09dea8301b9f025d2a6":"1000000000000000000000",b553d25d6b5421e81c2ad05e0b8ba751f8f010e3:"2000000000000000000000",dbf8b13967f55125272de0562536c450ba5655a0:"2046830000000000000000","0f6e840a3f2a24647d8e43e09d45c7c335df4248":"2500000000000000000000",fa2fd29d03fee9a07893df3a269f56b72f2e1e64:"10000000000000000000000","8b57b2bc83cc8d4de331204e893f2f3b1db1079a":"40000000000000000000","7f541491d2ac00d2612f94aa7f0bcb014651fbd4":"376000000000000000000","4f4a9be10cd5d3fb5de48c17be296f895690645b":"40000000000000000000000","45d1c9eedf7cab41a779057b79395f5428d80528":"2000000000000000000000","662334814724935b7931ddca6100e00d467727cd":"637000000000000000000","2c52c984102ee0cd3e31821b84d408930efa1ac7":"2000000000000000000000","000d836201318ec6899a67540690382780743280":"200000000000000000000","81498ca07b0f2f17e8bbc7e61a7f4ae7be66b78b":"101600000000000000000","7860a3de38df382ae4a4dce18c0c07b98bce3dfa":"1000000000000000000000","5e8e4df18cf0af770978a8df8dac90931510a679":"2000000000000000000000","05d68dad61d3bbdfb3f779265c49474aff3fcd30":"39399000000000000000","96eafbf2fb6f4db9a436a74c45b5654452e23819":"20000000000000000000",d7d7f2caa462a41b3b30a34aeb3ba61010e2626f:"2000000000000000000000","0b71f554122469ef978e2f1fefd7cbb410982772":"3880000000000000000000","504666ce8931175e11a5ed11c1dcaa06e57f4e66":"11792000000000000000000",d00f067286c0fbd082f9f4a61083ec76deb3cee6:"1000000000000000000000","02e4cb22be46258a40e16d4338d802fffd00c151":"379786000000000000000","1c13d38637b9a47ce79d37a86f50fb409c060728":"1337000000000000000000",e30212b2011bb56bdbf1bc35690f3a4e0fd905ea:"8022000000000000000000","1df6911672679bb0ef3509038c0c27e394fdfe30":"540000000000000000000","2b8fe4166e23d11963c0932b8ade8e0145ea0770":"43250000000000000000000","6509eeb1347e842ffb413e37155e2cbc738273fd":"2000000000000000000000","8b7e9f6f05f7e36476a16e3e7100c9031cf404af":"1000000000000000000000",bec8caf7ee49468fee552eff3ac5234eb9b17d42:"2000000000000000000000","38898bbb4553e00bbfd0cf268b2fc464d154add5":"320000000000000000000",cbb3189e4bd7f45f178b1c30c76e26314d4a4b0a:"295007000000000000000",be1cd7f4c472070968f3bde268366b21eeea8321:"4300000000000000000000","976a18536af41874426308871bcd1512a775c9f8":"10000000000000000000000",e9c758f8da41e3346e4350e5ac3976345c6c1082:"1930050000000000000000","64ec8a5b743f3479e707dae9ee20ddaa4f40f1d9":"200000000000000000000","9e01765aff08bc220550aca5ea2e1ce8e5b09923":"1000000000000000000000",ba0f39023bdb29eb1862a9f9059cab5d306e662f:"2000000000000000000000","2baf8d6e221174124820ee492b9459ec4fadafbb":"2000000000000000000000","655d5cd7489629e2413c2105b5a172d933c27af8":"4040060000000000000000",badc2aef9f5951a8d78a6b35c3d0b3a4e6e2e739:"6000000000000000000000",e64f6e1d6401b56c076b64a1b0867d0b2f310d4e:"51570000000000000000","7a8563867901206f3f2bf0fa3e1c8109cabccd85":"137000000000000000000",d17fbe22d90462ed37280670a2ea0b3086a0d6d6:"199955000000000000000",e96d7d4cdd15553a4e4d316d6d6480ca3cea1e38:"12200000000000000000000",f04d2c91efb6e9c45ffbe74b434c8c5f2b028f1f:"1000000000000000000000","81164deb10814ae08391f32c08667b6248c27d7a":"394000000000000000000","7f5ae05ae0f8cbe5dfe721f044d7a7bef4c27997":"60000000000000000000",c982586d63b0d74c201b1af8418372e30c7616be:"100000000000000000000","64cf0935bf19d2cebbecd8780d27d2e2b2c34166":"1970000000000000000000",cd566ad7b883f01fd3998a9a58a9dee4724ddca5:"58848000000000000000","9da609fa3a7e6cf2cc0e70cdabe78dc4e382e11e":"1200000000000000000000","0d69100c395ce6c5eaadf95d05d872837ededd21":"400000000000000000000",fe91eccf2bd566afa11696c5049fa84c69630a52:"1940000000000000000000","005d0ee8155ec0a6ff6808552ca5f16bb5be323a":"197000000000000000000","3e5cb8928c417825c03a3bfcc52183e5c91e42d7":"4264790000000000000000","9c1b771f09af882af0643083de2aa79dc097c40e":"2480000000000000000000",eba388b0da27c87b1cc0eac6c57b2c5a0b459c1a:"6800000000000000000000","7529f3797bb6a20f7ea6492419c84c867641d81c":"2000000000000000000000","532a7da0a5ad7407468d3be8e07e69c7dd64e861":"500000000000000000000",de82cc8d4a1bb1d9434392965b3e80bad3c03d4f:"1477500000000000000000","4a82694fa29d9e213202a1a209285df6e745c209":"4000000000000000000000","3e53ff2107a8debe3328493a92a586a7e1f49758":"23143470000000000000000",b2ddb786d3794e270187d0451ad6c8b79e0e8745:"400000000000000000000","6ebcf9957f5fc5e985add475223b04b8c14a7aed":"1730000000000000000000",c5c7590b5621ecf8358588de9b6890f2626143f1:"3000000000000000000000",ae4f122e35c0b1d1e4069291457c83c07f965fa3:"1000000000000000000000","47885ababedf4d928e1c3c71d7ca40d563ed595f":"1820000000000000000000","78ce3e3d474a8a047b92c41542242d0a08c70f99":"10000000000000000000000","6134d942f037f2cc3d424a230c603d67abd3edf7":"2000000000000000000000","1360e87df24c69ee6d51c76e73767ffe19a2131c":"92000000000000000000","5fd1c3e31778276cb42ea740f5eae9c641dbc701":"194000000000000000000","98397342ec5f3d4cb877e54ef5d6f1d366731bd4":"5910000000000000000000","6d4b5c05d06a20957e1748ab6df206f343f92f01":"10020475000000000000000",e6115b13f9795f7e956502d5074567dab945ce6b:"100000000000000000000000","23730c357a91026e44b1d0e2fc2a51d071d8d77b":"4000000000000000000000",fae881937047895a660cf229760f27e66828d643:"182000000000000000000",ff3ef6ba151c21b59986ae64f6e8228bc9a2c733:"2000000000000000000000",dfbd4232c17c407a980db87ffbcda03630e5c459:"553150000000000000000","4429a29fee198450672c0c1d073162250bec6474":"999200000000000000000","7e8f96cc29f57b0975120cb593b7dd833d606b53":"197000000000000000000","5ed3f1ebe2ae6756b5d8dc19cad02c419aa5778b":"0",daa776a6754469d7b9267a89b86725e740da0fa0:"1970000000000000000000","139e479764b499d666208c4a8a047a97043163dd":"598880000000000000000","5ad5e420755613886f35aa56ac403eebdfe4b0d0":"80000000000000000000000","3fe801e61335c5140dc7eda2ef5204460a501230":"2000000000000000000000",ce8a6b6d5033b1498b1ffeb41a41550405fa03a2:"4000000000000000000000","26c2ffc30efdc5273e76183a16c2698d6e531286":"776000000000000000000","71ec3aec3f8f9221f9149fede06903a0f9a232f2":"200000000000000000000",ef35f6d4b1075e6aa139151c974b2f4658f70538:"1111111000000000000000","26a68eab905a8b3dce00e317308225dab1b9f6b8":"1980000000000000000000","63f5b53d79bf2e411489526530223845fac6f601":"30000000000000000000000","481115296ab7db52492ff7b647d63329fb5cbc6b":"16100000000000000000000",f19f193508393e4d2a127b20b2031f39c82581c6:"3500088000000000000000","500e34cde5bd9e2b71bb92d7cf55eee188d5fa0c":"5348000000000000000000","65ea67ad3fb56ad5fb94387dd38eb383001d7c68":"100000000000000000000","7f9f9b56e4289dfb58e70fd5f12a97b56d35c6a5":"1970000000000000000000","60be6f953f2a4d25b6256ffd2423ac1438252e4e":"150000000000000000000",ac1dfc984b71a19929a81d81f04a7cbb14073703:"600000000000000000000",a3c14ace28b192cbb062145fcbbd5869c67271f6:"8000000000000000000000","2da76b7c39b420e388ba2c1020b0856b0270648a":"2000000000000000000000","622be4b45495fcd93143efc412d699d6cdc23dc5":"17300000000000000000",d3f873bd9956135789ab00ebc195b922e94b259d:"2000000000000000000000","975f3764e97bbccf767cbd3b795ba86d8ba9840e":"346000000000000000000",fc39be41094b1997d2169e8264c2c3baa6c99bc4:"2000000000000000000000","12ffc1128605cb0c13709a7290506f2690977193":"3340000000000000000000","9b1168de8ab64b47552f3389800a9cc08b4666cf":"1730000000000000000000","9f1aa8fcfc89a1a5328cbd6344b71f278a2ca4a0":"500000000000000000000","505a33a18634dd4800693c67f48a1d693d4833f8":"7252000000000000000000",d08fc09a0030fd0928cd321198580182a76aae9f:"1000000000000000000000","6acddca3cd2b4990e25cd65c24149d0912099e79":"3000037000000000000000","397a6ef8763a18f00fac217e055c0d3094101011":"2000000000000000000000","4e0bd32473c4c51bf25654def69f797c6b29a232":"1600930000000000000000","28d8c35fb7eea622582135e3ad47a227c9a663bd":"18200000000000000000",f96488698590dc3b2c555642b871348dfa067ad5:"500000000000000000000","4eebe80cb6f3ae5904f6f4b28d907f907189fcab":"1999944000000000000000","8d1abd897dacd4312e18080c88fb9647eab44052":"216000000000000000000","457029c469c4548d168cec3e65872e4428d42b67":"2000000000000000000000","1296acded1e063af39fe8ba0b4b63df789f70517":"100014000000000000000","71762c63678c18d1c6378ce068e666381315147e":"2000000000000000000000","6cc1c878fa6cde8a9a0b8311247e741e4642fe6d":"985000000000000000000","8d9ed7f4553058c26f7836a3802d3064eb1b363d":"90000000000000000000","5032e4bcf7932b49fdba377b6f1499636513cfc3":"100000000000000000000","462b678b51b584f3ed7ada070b5cd99c0bf7b87f":"100000000000000000000",c8aa49e3809f0899f28ab57e6743709d58419033:"880000000000000000000","01b1cae91a3b9559afb33cdc6d689442fdbfe037":"200000000000000000000",b1043004ec1941a8cf4f2b00b15700ddac6ff17e:"1000000000000000000000","5ba2c6c35dfaec296826591904d544464aeabd5e":"20000000000000000000",b32400fd13c5500917cb037b29fe22e7d5228f2d:"40000000000000000000000",d59d92d2c8701980cc073c375d720af064743c0c:"19000000000000000000000","11dd6185d9a8d73ddfdaa71e9b7774431c4dfec2":"1000000000000000000000",d4cb21e590c5a0e06801366aff342c7d7db16424:"494000000000000000000","5b6d55f6712967405c659129f4b1de09acf2cb7b":"267400000000000000000","6179979907fe7f037e4c38029d60bcbab832b3d6":"1610000000000000000000","33c407133b84b3ca4c3ded1f4658900c38101624":"2800000000000000000000",cd2a36d753e9e0ed012a584d716807587b41d56a:"261400000000000000000","8155fa6c51eb31d808412d748aa086105018122f":"1880000000000000000000","3ecc8e1668dde995dc570fe414f44211c534a615":"2000000000000000000000",d6395db5a4bb66e60f4cfbcdf0057bb4d97862e2:"910000000000000000000",b6fb39786250081426a342c70d47ee521e5bc563:"15000000000000000000000","510eda5601499a0d5e1a006bfffd833672f2e267":"2000000000000000000000","98c19dba810ba611e68f2f83ee16f6e7744f0c1f":"200000000000000000000","34ff26eb60a8d1a95a489fae136ee91d4e58084c":"600000000000000000000","6ad90be252d9cd464d998125fab693060ba8e429":"4000000000000000000000","038323b184cff7a82ae2e1bda7793fe4319ca0bf":"20000000000000000000000",dc5305b4020a06b49d657c7ca34c35c91c5f2c56:"7045990000000000000000",c9c80dc12e7bab86e949d01e4c3ed35f2b9bba5f:"2000000000000000000000","7beb81fb2f5e91526b2ac9795e76c69bcff04bc0":"69400000000000000000000",b8bc9bca7f71b4ed12e620438d620f53c114342f:"500000000000000000000",d288e7cb7ba9f620ab0f7452e508633d1c5aa276:"4000000000000000000000",a2e460a989cb15565f9ecca7d121a18e4eb405b6:"2000000000000000000000","7489cc8abe75cda4ef0d01cef2605e47eda67ab1":"133700000000000000000","38b403fb1fb7c14559a2d6f6564a5552bca39aff":"2000000000000000000000",e55c80520a1b0f755b9a2cd3ce214f7625653e8a:"2000000000000000000000","451b7070259bdba27100e36e23428a53dfe304e9":"13370000000000000000","8b5c914b128bf1695c088923fa467e7911f351fa":"98500000000000000000","17df49518d73b129f0da36b1c9b40cb66420fdc7":"10000000000000000000000",c1950543554d8a713003f662bb612c10ad4cdf21:"18200000000000000000",fa7606435b356cee257bd2fcd3d9eacb3cd1c4e1:"100000000000000000000",e0bad98eee9698dbf6d76085b7923de5754e906d:"167000000000000000000",ce53c8cdd74296aca987b2bc19c2b875a48749d0:"3000000000000000000000",d0c55abf976fdc3db2afe9be99d499484d576c02:"1000000000000000000000","238a6b7635252f5244486c0af0a73a207385e039":"1370000000000000000000",ceb389381d48a8ae4ffc483ad0bb5e204cfdb1ec:"740745000000000000000","3847667038f33b01c1cc795d8daf5475eff5a0d4":"728330000000000000000",a08d215b5b6aac4861a281ac7e400b78fef04cbf:"20000000000000000000","2d0dec51a6e87330a6a8fa2a0f65d88d4abcdf73":"185000000000000000000","9e8f64ddcde9b8b451bafaa235a9bf511a25ac91":"2674000000000000000000",ddac6bf4bbdd7d597d9c686d0695593bedccc7fa:"865000000000000000000","22e15158b5ee3e86eb0332e3e6a9ac6cd9b55ecd":"160000000000000000000","3aea4e82d2400248f99871a41ca257060d3a221b":"1000000000000000000000",fb126f0ec769f49dcefca2f200286451583084b8:"5013750000000000000000","1b8bd6d2eca20185a78e7d98e8e185678dac4830":"16700000000000000000000","664cd67dccc9ac8228b45c55db8d76550b659cdc":"394000000000000000000","553f37d92466550e9fd775ae74362df030179132":"2000000000000000000000","730d8763c6a4fd824ab8b859161ef7e3a96a1200":"20000000000000000000000","04c2c64bb54c3eccd05585e10ec6f99a0cdb01a3":"100000000000000000000",f1624d980b65336feac5a6d54125005cfcf2aacb:"2000000000000000000000","0b7fc9ddf70576f6330669eaaa71b6a831e99528":"140000000000000000000",fa2bbca15d3fe39f8a328e91f90da14f7ac6253d:"200000000000000000000","07feef54c136850829badc4b49c3f2a73c89fb9e":"118200000000000000000","3703350c4d6fe337342cddc65bf1e2386bf3f9b2":"2020000000000000000000","6d7d1c949511f88303808c60c5ea0640fcc02683":"10000000000000000000000","34fa7792bad8bbd7ff64056214a33eb6600c1ea8":"50000000000000000000","994cc2b5227ec3cf048512467c41b7b7b748909f":"2000000000000000000000","08da3a7a0f452161cfbcec311bb68ebfdee17e88":"2000000000000000000000",bbb4ee1d82f2e156442cc93338a2fc286fa28864:"1370000000000000000000","7a2dfc770e24368131b7847795f203f3d50d5b56":"11400000000000000000000","7cef4d43aa417f9ef8b787f8b99d53f1fea1ee88":"1910000000000000000000",c6a30ef5bb3320f40dc5e981230d52ae3ac19322:"182000000000000000000","6a74844d8e9cb5581c45079a2e94462a6cee8821":"1082970000000000000000",c3110be01dc9734cfc6e1ce07f87d77d1345b7e1:"4999998000000000000000",aeb916ebf49d0f86c13f7331cef19e129937512d:"599908000000000000000","3e5abd09ce5af7ba8487c359e0f2a93a986b0b18":"10000000000000000000000",cdd60d73efaad873c9bbfb178ca1b7105a81a681:"32000000000000000000","31eb123c95c82bf685ace7a75a1881a289efca10":"920034000000000000000","86e8670e27598ea09c3899ab7711d3b9fe901c17":"200000000000000000000",a144f6b60f72d64a21e330dadb62d8990ade2b09:"1000000000000000000000","68883e152e5660fee59626e7e3b4f05110e6222f":"54683300000000000000000",fe4249127950e2f896ec0e7e2e3d055aab10550f:"668500000000000000000","403d53cf620f0922b417848dee96c190b5bc8271":"9850000000000000000000",bec2e6de39c07c2bae556acfbee2c4728b9982e3:"573000000000000000000",f3c4716d1ee5279a86d0163a14618181e16136c7:"1000000000000000000000",e38ef28a5ed984a7db24a1ae782dfb87f397dfc6:"143000000000000000000","30fbe5885f9fcce9ea5edb82ed4a1196dd259aed":"5200000000000000000000","48bf14d7b1fc84ebf3c96be12f7bce01aa69b03e":"120000000000000000000",b8d5c324a8209d7c8049d0d4aede02ba80ab578b:"16889329000000000000000","43d5a71ce8b8f8ae02b2eaf8eaf2ca2840b93fb6":"6000000000000000000000",f9a59c3cc5ffacbcb67be0fc7256f64c9b127cb4:"2000000000000000000000","0e21af1b8dbf27fcf63f37e047b87a825cbe7c27":"3000000000000000000000","1c35aab688a0cd8ef82e76541ba7ac39527f743b":"500000000000000000000","91ac5cfe67c54aa7ebfba448666c461a3b1fe2e1":"401880000000000000000","4ba53ab549e2016dfa223c9ed5a38fad91288d07":"1400000000000000000000","99a4de19ded79008cfdcd45d014d2e584b8914a8":"1500000000000000000000","4adbf4aae0e3ef44f7dd4d8985cfaf096ec48e98":"150000000000000000000","9a633fcd112cceeb765fe0418170732a9705e79c":"18200000000000000000","292f228b0a94748c8eec612d246f989363e08f08":"185000000000000000000","9f3497f5ef5fe63095836c004eb9ce02e9013b4b":"633424000000000000000","0e6dfd553b2e873d2aec15bd5fbb3f8472d8d394":"12000000000000000000000","74ebf4425646e6cf81b109ce7bf4a2a63d84815f":"40000000000000000000","8ce5e3b5f591d5eca38abf228f2e3c35134bdac0":"2319920000000000000000","90c41eba008e20cbe927f346603fc88698125969":"42000000000000000000","382ba76db41b75606dd48a48f0137e9174e031b6":"20000000000000000000","5d24bdbc1c47f0eb83d128cae48ac33c4817e91f":"1000000000000000000000",a64e5ffb704c2c9139d77ef61d8cdfa31d7a88e9:"143000000000000000000",a18360e985f2062e8f8efe02ad2cbc91ad9a5aad:"3000000000000000000000",d251f903ae18727259eee841a189a1f569a5fd76:"10000000000000000000000",efa6b1f0db603537826891b8b4bc163984bb40cd:"985000000000000000000","47fff42c678551d141eb75a6ee398117df3e4a8d":"100010000000000000000",f2294adbb6f0dcc76e632ebef48ab49f124dbba4:"1443690000000000000000","53700d53254d430f22781a4a76a463933b5d6b08":"1970000000000000000000",b14a7aaa8f49f2fb9a8102d6bbe4c48ae7c06fb2:"8000000000000000000000","9ed4e63f526542d44fddd34d59cd25388ffd6bda":"3885000000000000000000","4cac91fb83a147d2f76c3267984b910a79933348":"2167000000000000000000","9b32cf4f5115f4b34a00a64c617de06387354323":"105501000000000000000",b8bedd576a4b4c2027da735a5bc3f533252a1808:"2000000000000000000000",c5a3b98e4593fea0b38c4f455a5065f051a2f815:"20309030000000000000000",eaf52388546ec35aca6f6c6393d8d609de3a4bf3:"20000000000000000000","4c423c76930d07f93c47a5cc4f615745c45a9d72":"100000000000000000000","9052f2e4a3e3c12dd1c71bf78a4ec3043dc88b7e":"267400000000000000000","2bade91d154517620fd4b439ac97157a4102a9f7":"4000000000000000000000",da698d64c65c7f2b2c7253059cd3d181d899b6b7:"295500000000000000000",c6d8954e8f3fc533d2d230ff025cb4dce14f3426:"400000000000000000000","349a816b17ab3d27bbc0ae0051f6a070be1ff29d":"10000000000000000000000",ff4d9c8484c43c42ff2c5ab759996498d323994d:"4000000000000000000000","22944fbca9b57963084eb84df7c85fb9bcdfb856":"4649845000000000000000",bfd93c90c29c07bc5fb5fc49aeea55a40e134f35:"28000000000000000000000","3caedb5319fe806543c56e5021d372f71be9062e":"40000000000000000000000","9a079c92a629ca15c8cafa2eb28d5bc17af82811":"500000000000000000000","7d2a52a7cf0c8436a8e007976b6c26b7229d1e15":"438040000000000000000",cf89f7460ba3dfe83c5a1d3a019ee1250f242f0f:"985177000000000000000","577bfe64e3a1e3800e94db1c6c184d8dc8aafc66":"1498000000000000000000","7ffd02ed370c7060b2ae53c078c8012190dfbb75":"10000000000000000000000","90b62f131a5f29b45571513ee7a74a8f0b232202":"158000000000000000000","6e8212b722afd408a7a73ed3e2395ee6454a0330":"159000000000000000000","515f30bc90cdf4577ee47d65d785fbe2e837c6bc":"10166128000000000000000",c27376f45d21e15ede3b26f2655fcee02ccc0f2a:"20000000000000000000","3da39ce3ef4a7a3966b32ee7ea4ebc2335a8f11f":"2000000000000000000000","25259d975a21d83ae30e33f800f53f37dfa01938":"20000000000000000000","8ed143701f2f72280fd04a7b4164281979ea87c9":"14000000000000000000","5ac99ad7816ae9020ff8adf79fa9869b7cea6601":"21000000000000000000000",f51fded80acb502890e87369741f3722514cefff:"20000042000000000000000",f657fcbe682eb4e8db152ecf892456000b513d15:"1940000000000000000000","62c37c52b97f4b040b1aa391d6dec152893c4707":"1000000000000000000000","89fc8e4d386b0d0bb4a707edf3bd560df1ad8f4e":"2955000000000000000000","53c0bb7fc88ea422d2ef7e540e2d8f28b1bb8183":"20000000000000000000","56f493a3d108aaa2d18d98922f8efe1662cfb73d":"2020000000000000000000",e9458f68bb272cb5673a04f781b403556fd3a387:"61000000000000000000",be525a33ea916177f17283fca29e8b350b7f530b:"2638000000000000000000","4feb846be43041fd6b34202897943e3f21cb7f04":"83226000000000000000","15aa530dc36958b4edb38eee6dd9e3c77d4c9145":"2000000000000000000000","2458d6555ff98a129cce4037953d00206eff4287":"197000000000000000000","8035fe4e6b6af27ae492a578515e9d39fa6fa65b":"4000000000000000000000","296b71c0015819c242a7861e6ff7eded8a5f71e3":"1999800000000000000000","8f1952eed1c548d9ee9b97d0169a07933be69f63":"1000000000000000000000",a421dbb89b3a07419084ad10c3c15dfe9b32d0c2:"20000000000000000000000","554336ee4ea155f9f24f87bca9ca72e253e12cd2":"100000000000000000000",ffc5fc4b7e8a0293ff39a3a0f7d60d2646d37a74:"2000000000000000000000",ea2c197d26e98b0da83e1b72c787618c979d3db0:"19700000000000000000","96aa573fed2f233410dbae5180145b23c31a02f0":"1730000000000000000000",c23b2f921ce4a37a259ee4ad8b2158d15d664f59:"25403000000000000000",d874b9dfae456a929ba3b1a27e572c9b2cecdfb3:"170000000000000000000",bf8b8005d636a49664f74275ef42438acd65ac91:"200000000000000000000","441a52001661fac718b2d7b351b7c6fb521a7afd":"400000000000000000000","812a55c43caedc597218379000ce510d548836fd":"18200000000000000000","5e90c85877198756b0366c0e17b28e52b446505a":"374288000000000000000",da3017c150dd0dce7fcf881b0a48d0d1c756c4c7:"100014000000000000000","6baf7a2a02ae78801e8904ad7ac05108fc56cff6":"1000000000000000000000","177dae78bc0113d8d39c4402f2a641ae2a105ab8":"1818320000000000000000","01b5b5bc5a117fa08b34ed1db9440608597ac548":"200000000000000000000",aae732eda65988c3a00c7f472f351c463b1c968e:"2000000000000000000000",d95342953c8a21e8b635eefac7819bea30f17047:"94160000000000000000000","8d616b1eee77eef6f176e0698db3c0c141b2fc8f":"500000000000000000000","12d20790b7d3dbd88c81a279b812039e8a603bd0":"1604400000000000000000","3734cb187491ede713ae5b3b2d12284af46b8101":"3000000000000000000000",dd967c4c5f8ae47e266fb416aad1964ee3e7e8c3:"7750000000000000000000","3dcef19c868b15d34eda426ec7e04b18b6017002":"1999800000000000000000",ce9d21c692cd3c01f2011f505f870036fa8f6cd2:"400000000000000000000",d44f6ac3923b5fd731a4c45944ec4f7ec52a6ae4:"10000000000000000000000",b424d68d9d0d00cec1938c854e15ffb880ba0170:"200000000000000000000","1f2186ded23e0cf9521694e4e164593e690a9685":"300000000000000000000","7f4b5e278578c046cceaf65730a0e068329ed5b6":"1880000000000000000000","8c50aa2a9212bcde56418ae261f0b35e7a9dbb82":"400000000000000000000","1953313e2ad746239cb2270f48af34d8bb9c4465":"2000000000000000000000",a15025f595acdbf3110f77c5bf24477e6548f9e8:"2000000000000000000000","53af32c22fef99803f178cf90b802fb571c61cb9":"3880000000000000000000",d0a8abd80a199b54b08b65f01d209c27fef0115b:"6525979000000000000000","2b68306ba7f8daaf73f4c644ef7d2743c0f26856":"864800000000000000000","96924191b7df655b3319dc6d6137f481a73a0ff3":"4020000000000000000000","6fa72015fa78696efd9a86174f7f1f21019286b1":"1337000000000000000000","0b119df99c6b8de58a1e2c3f297a6744bf552277":"2000000000000000000000","61733947fab820dbd351efd67855ea0e881373a0":"20000000000000000000","8ae6f80b70e1f23c91fbd5a966b0e499d95df832":"197000000000000000000","01a7d9fa7d0eb1185c67e54da83c2e75db69e39f":"7623900000000000000000","9932ef1c85b75a9b2a80057d508734c51085becc":"50170000000000000000",aefcfe88c826ccf131d54eb4ea9eb80e61e1ee25:"340000000000000000000",c21fa6643a1f14c02996ad7144b75926e87ecb4b:"20000000000000000000000","97d9e46a7604d7b5a4ea4ee61a42b3d2350fc3ed":"2000000000000000000000","3cafaf5e62505615068af8eb22a13ad8a9e55070":"1999600000000000000000","22f2dcff5ad78c3eb6850b5cb951127b659522e6":"13700000000000000000",aaad1baade5af04e2b17439e935987bf8c2bb4b9:"2000000000000000000000","298887bab57c5ba4f0615229d7525fa113b7ea89":"40000000000000000000","7539333046deb1ef3c4daf50619993f444e1de68":"1182000000000000000000","9752d14f5e1093f071711c1adbc4e3eb1e5c57f3":"2000000000000000000000",ed641e06368fb0efaa1703e01fe48f4a685309eb:"200000000000000000000",d0ee4d02cf24382c3090d3e99560de3678735cdf:"2400000000000000000000","47e25df8822538a8596b28c637896b4d143c351d":"80500000000000000000000","559706c332d20779c45f8a6d046a699159b74921":"380123000000000000000","3a4da78dce05aeb87de9aead9185726da1926798":"200000000000000000000","3041445a33ba158741160d9c344eb88e5c306f94":"60000000000000000000","08d4311c9c1bbaf87fabe1a1d01463828d5d98ce":"90000000000000000000000","6bd3e59f239fafe4776bb9bddd6bee83ba5d9d9f":"1000000000000000000000","29eaae82761762f4d2db53a9c68b0f6b0b6d4e66":"2000000000000000000000","0b7d339371e5be6727e6e331b5821fa24bdb9d5a":"857738000000000000000","4714cfa4f46bd6bd70737d75878197e08f88e631":"11792000000000000000000",ad92ca066edb7c711dfc5b166192d1edf8e77185:"36000000000000000000000",f97b56ebd5b77abc9fbacbabd494b9d2c221cd03:"1970000000000000000000","591bef3171d1c5957717a4e98d17eb142c214e56":"20000000000000000000000","899b3c249f0c4b81df75d212004d3d6d952fd223":"2000000000000000000000",a819d2ece122e028c8e8a04a064d02b9029b08b9:"1000000000000000000000",e341642d40d2afce2e9107c67079ac7a2660086c:"400000000000000000000","0329188f080657ab3a2afa522467178279832085":"216700000000000000000","03317826d1f70aa4bddfa09be0c4105552d2358b":"38800000000000000000","3ac9dc7a436ae98fd01c7a9621aa8e9d0b8b531d":"1790000000000000000000","93c88e2d88621e30f58a9586bed4098999eb67dd":"31200000000000000000000",cd1e66ed539dd92fc40bbaa1fa16de8c02c14d45:"230000000000000000000",e6c81ffcecb47ecdc55c0b71e4855f3e5e97fc1e:"334250000000000000000","50f8fa4bb9e2677c990a4ee8ce70dd1523251e4f":"26030000000000000000","4f64a85e8e9a40498c0c75fceb0337fb49083e5e":"1000000000000000000000","4b29437c97b4a844be71cca3b648d4ca0fdd9ba4":"150200000000000000000","1eee6cbee4fe96ad615a9cf5857a647940df8c78":"19400000000000000000","29f0edc60338e7112085a1d114da8c42ce8f55d6":"2958000000000000000000","23b1c4917fbd93ee3d48389306957384a5496cbf":"4000086000000000000000","1767525c5f5a22ed80e9d4d7710f0362d29efa33":"400000000000000000000","3064899a963c4779cbf613cd6980846af1e6ec65":"6999908000000000000000","68531f4dda808f5320767a03113428ca0ce2f389":"19400000000000000000","1db9ac9a9eaeec0a523757050c71f47278c72d50":"1337000000000000000000","7592c69d067b51b6cc639d1164d5578c60d2d244":"20000000000000000000",cf3fbfa1fd32d7a6e0e6f8ef4eab57be34025c4c:"1063120000000000000000","8efec058cc546157766a632775404a334aaada87":"1999000000000000000000",faf5f0b7b6d558f5090d9ea1fb2d42259c586078:"6401000000000000000000","19ecf2abf40c9e857b252fe1dbfd3d4c5d8f816e":"2000000000000000000000","6e8a26689f7a2fdefd009cbaaa5310253450daba":"2049982000000000000000",e2f40d358f5e3fe7463ec70480bd2ed398a7063b:"20000000000000000000",fa19d6f7a50f4f079893d167bf14e21d0073d196:"530000000000000000000", -"3e2ca0d234baf607ad466a1b85f4a6488ef00ae7":"89505000000000000000",f8a49ca2390c1f6d5c0e62513b079571743f7cc6:"3000000000000000000000","5d3f3b1f7130b0bb21a0fd32396239179a25657f":"62474000000000000000000",f332c0f3e05a27d9126fd0b641a8c2d4060608fd:"5001041000000000000000",e304a32f05a83762744a9542976ff9b723fa31ea:"1576256000000000000000",f768f321fd6433d96b4f354d3cc1652c1732f57f:"10000000000000000000000","147af46ae9ccd18bb35ca01b353b51990e49dce1":"4000000000000000000000","21eae6feffa9fbf4cd874f4739ace530ccbe5937":"5000000000000000000000","6994fb3231d7e41d491a9d68d1fa4cae2cc15960":"4000000000000000000000","51126446ab3d8032557e8eba65597d75fadc815c":"322000000000000000000","24daaaddf7b06bbcea9b80590085a88567682b4e":"319008000000000000000",cd020f8edfcf524798a9b73a640334bbf72f80a5:"133700000000000000000","56febf9e1003af15b1bd4907ec089a4a1b91d268":"200000000000000000000","3c79c863c3d372b3ff0c6f452734a7f97042d706":"176000000000000000000",e1203eb3a723e99c2220117ca6afeb66fa424f61:"9461996000000000000000","18fb09188f27f1038e654031924f628a2106703d":"2000000000000000000000","2eba0c6ee5a1145c1c573984963a605d880a7a20":"500000000000000000000","4cefbe2398e47d52e78db4334c8b697675f193ae":"4011000000000000000000",c02471e3fc2ea0532615a7571d493289c13c36ef:"20000000000000000000",ba469aa5c386b19295d4a1b5473b540353390c85:"2000000000000000000000","7b11673cc019626b290cbdce26046f7e6d141e21":"500000000000000000000","26784ade91c8a83a8e39658c8d8277413ccc9954":"6000000000000000000000","57d3df804f2beee6ef53ab94cb3ee9cf524a18d3":"393606000000000000000",ccae0d3d852a7da3860f0636154c0a6ca31628d4:"106560000000000000000",bfe3a1fc6e24c8f7b3250560991f93cba2cf8047:"80000000000000000000000","724ce858857ec5481c86bd906e83a04882e5821d":"3000000000000000000000",fb37cf6b4f81a9e222fba22e9bd24b5098b733cf:"38800000000000000000","9b22a80d5c7b3374a05b446081f97d0a34079e7f":"3000000000000000000000","0a29a8a4d5fd950075ffb34d77afeb2d823bd689":"200000000000000000000",d01af9134faf5257174e8b79186f42ee354e642d:"1000000000000000000000","7f1619988f3715e94ff1d253262dc5581db3de1c":"900000000000000000000","6f137a71a6f197df2cbbf010dcbd3c444ef5c925":"2000000000000000000000","11efb8a20451161b644a8ccebbc1d343a3bbcb52":"3200000000000000000000","46504e6a215ac83bccf956befc82ab5a679371c8":"518898000000000000000",b523fff9749871b35388438837f7e6e0dea9cb6b:"2000000000000000000000",c5c6a4998a33feb764437a8be929a73ba34a0764:"50000000000000000000000","3cd7f7c7c2353780cde081eeec45822b25f2860c":"200000000000000000000",b3050beff9de33c80e1fa15225e28f2c413ae313:"700000000000000000000","59268171b833e0aa13c54b52ccc0422e4fa03aeb":"3000000000000000000000","7169724ee72271c534cad6420fb04ee644cb86fe":"410164000000000000000","6e6d5bbbb9053b89d744a27316c2a7b8c09b547d":"909831000000000000000","3f3f46b75cabe37bfacc8760281f4341ca7f463d":"602709000000000000000","7a33834e8583733e2d52aead589bd1affb1dd256":"1000000000000000000000",e94ded99dcb572b9bb1dcba32f6dee91e057984e:"394000000000000000000","19336a236ded755872411f2e0491d83e3e00159e":"940000000000000000000","63ac545c991243fa18aec41d4f6f598e555015dc":"600000000000000000000",cfee05c69d1f29e7714684c88de5a16098e91399:"1970000000000000000000","77be6b64d7c733a436adec5e14bf9ad7402b1b46":"1000000000000000000000","233bdddd5da94852f4ade8d212885682d9076bc6":"4000000000000000000000","952c57d2fb195107d4cd5ca300774119dfad2f78":"2000000000000000000000",e237baa4dbc9926e32a3d85d1264402d54db012f:"2000000000000000000000",aa91237e740d25a92f7fa146faa18ce56dc6e1f3:"925000000000000000000","2339e9492870afea2537f389ac2f838302a33c06":"2000000000000000000000","1d45586eb803ca2190650bf748a2b174312bb507":"1400000000000000000000",c61446b754c24e3b1642d9e51765b4d3e46b34b6:"2000000000000000000000",ac28b5edea05b76f8c5f97084541277c96696a4c:"1000000000000000000000","1a1c9a26e0e02418a5cf687da75a275c622c9440":"5000000000000000000000","299368609042a858d1ecdf1fc0ada5eaceca29cf":"2000000000000000000000","095f5a51d06f6340d80b6d29ea2e88118ad730fe":"2000200000000000000000","751a2ca34e7187c163d28e3618db28b13c196d26":"500000000000000000000","75b0e9c942a4f0f6f86d3f95ff998022fa67963b":"1490000000000000000000",d1b37f03cb107424e9c4dd575ccd4f4cee57e6cd:"2000000000000000000000","7f993ddb7e02c282b898f6155f680ef5b9aff907":"20000000000000000000000",a3d583a7b65b23f60b7905f3e4aa62aac87f4227:"1046779000000000000000","526bb533b76e20c8ee1ebf123f1e9ff4148e40be":"197000000000000000000","2160b4c02cac0a81de9108de434590a8bfe68735":"1970000000000000000000","010007394b8b7565a1658af88ce463499135d6b7":"100000000000000000000","64457fa33b0832506c4f7d1180dce48f46f3e0ff":"2000000000000000000000",b51e558eb5512fbcfa81f8d0bd938c79ebb5242b:"715000000000000000000","94f13f9f0836a3ee2437a84922d2984dc0f7d53b":"2999916000000000000000","6bd457ade051795df3f2465c3839aed3c5dee978":"999925000000000000000",f3dbcf135acb9dee1a489c593c024f03c2bbaece:"2000000000000000000000","61b902c5a673885826820d1fe14549e4865fbdc2":"334703000000000000000","2acc9c1a32240b4d5b2f777a2ea052b42fc1271c":"41764000000000000000000","6ddfef639155daab0a5cb4953aa8c5afaa880453":"1820000000000000000000","96ff6f509968f36cb42cba48db32f21f5676abf8":"1970000000000000000000",b4c8170f7b2ab536d1d9a25bdd203ae1288dc3d5:"200000000000000000000","78d4f8c71c1e68a69a98f52fcb45da8af56ea1a0":"2000000000000000000000",dec99e972fca7177508c8e1a47ac22d768acab7c:"2000000000000000000000",a07aa16d74aee8a9a3288d52db1551d593883297:"600000000000000000000",cf1169041c1745e45b172435a2fc99b49ace2b00:"31960000000000000000","526cb09ce3ada3672eec1deb46205be89a4b563e":"2468000000000000000000",ee6959de2b67967b71948c891ab00d8c8f38c7dc:"118200000000000000000",ca7ba3ff536c7e5f0e153800bd383db8312998e0:"169600000000000000000","1ed06ee51662a86c634588fb62dc43c8f27e7c17":"200000000000000000000","730447f97ce9b25f22ba1afb36df27f9586beb9b":"820000000000000000000",ae5c9bdad3c5c8a1220444aea5c229c1839f1d64:"477500000000000000000",a38306cb70baa8e49186bd68aa70a83d242f2907:"2000000000000000000000","71213fca313404204ecba87197741aa9dfe96338":"60000000000000000000","10e390ad2ba33d82b37388d09c4544c6b0225de5":"200000000000000000000","3b6e814f770748a7c3997806347605480a3fd509":"2000000000000000000000",fd452c3969ece3801c542020f1cdcaa1c71ed23d:"100000000000000000000000",e742b1e6069a8ffc3c4767235defb0d49cbed222:"800000000000000000000",d7225738dcf3578438f8e7c8b3837e42e04a262f:"445860000000000000000",cd0b0257e783a3d2c2e3ba9d6e79b75ef98024d4:"2945500000000000000000",e80e7fef18a5db15b01473f3ad6b78b2a2f8acd9:"500000000000000000000","261575e9cf59c8226fa7aaf91de86fb70f5ac3ae":"300022000000000000000","7e71171f2949fa0c3ac254254b1f0440e5e6a038":"40000000000000000000","96ea6ac89a2bac95347b51dba63d8bd5ebdedce1":"2000000000000000000000",e6ec5cf0c49b9c317e1e706315ef9eb7c0bf11a7:"17200000000000000000000","2b99b42e4f42619ee36baa7e4af2d65eacfcba35":"40000000000000000000000",c6e4cc0c7283fc1c85bc4813effaaf72b49823c0:"276926000000000000000",dbc1ce0e49b1a705d22e2037aec878ee0d75c703:"250000000000000000000","806f44bdeb688037015e84ff218049e382332a33":"1999000000000000000000","1a3a330e4fcb69dbef5e6901783bf50fd1c15342":"4200000000000000000000",d2a84f75675c62d80c88756c428eee2bcb185421:"1200000000000000000000",c593b546b7698710a205ad468b2c13152219a342:"1550000000000000000000","3f627a769e6a950eb87017a7cd9ca20871136831":"13790000000000000000000",f2d5763ce073127e2cedde6faba786c73ca94141:"7900000000000000000000","162110f29eac5f7d02b543d8dcd5bb59a5e33b73":"2000000000000000000000","59473cd300fffae240f5785626c65dfec792b9af":"20000000000000000000","4dcd11815818ae29b85d01367349a8a7fb12d06b":"7900000000000000000000","9329ffdc268babde8874b366406c81445b9b2d35":"422415000000000000000","0ab4281ebb318590abb89a81df07fa3af904258a":"500000000000000000000","875061ee12e820041a01942cb0e65bb427b00060":"2800000000000000000000",c9b698e898d20d4d4f408e4e4d061922aa856307:"40000000000000000000",ca49a5f58adbefae23ee59eea241cf0482622eaa:"1430000000000000000000","196e85df7e732b4a8f0ed03623f4db9db0b8fa31":"21165000000000000000","4c760cd9e195ee4f2d6bce2500ff96da7c43ee91":"60000000000000000000000","024a098ae702bef5406c9c22b78bd4eb2cc7a293":"4000000000000000000000","9d81aea69aed6ad07089d61445348c17f34bfc5b":"300000000000000000000","76ab87dd5a05ad839a4e2fc8c85aa6ba05641730":"2000000000000000000000",c6e2f5af979a03fd723a1b6efa728318cf9c1800:"668500000000000000000","5db69fe93e6fb6fbd450966b97238b110ad8279a":"40000000000000000000000",a4259f8345f7e3a8b72b0fec2cf75e321fda4dc2:"1910000000000000000000","095030e4b82692dcf8b8d0912494b9b378ec9328":"1340000000000000000000","4b470f7ba030bc7cfcf338d4bf0432a91e2ea5ff":"2000000000000000000000","99c9f93e45fe3c1418c353e4c5ac3894eef8121e":"101870000000000000000",ffac3db879a6c7158e8dec603b407463ba0d31cf:"1970000000000000000000",ac8e87ddda5e78fcbcb9fa7fc3ce038f9f7d2e34:"2000000000000000000000","7a0589b143a8e5e107c9ac66a9f9f8597ab3e7ab":"1510990000000000000000",b7d581fe0af1ec383f3b3c416783f385146a7612:"20000000000000000000000",bb3fc0a29c034d710812dcc775c8cab9d28d6975:"1066806000000000000000","2c603ff0fe93616c43573ef279bfea40888d6ae7":"4740000000000000000000","15f2b7b16432ee50a5f55b41232f6334ed58bdc0":"400000000000000000000","7f3d7203c8a447f7bf36d88ae9b6062a5eee78ae":"6000000000000000000000",f067e1f1d683556a4cc4fd0c0313239f32c4cfd8:"1000000000000000000000","52738c90d860e04cb12f498d96fdb5bf36fc340e":"30000000000000000000","45781bbe7714a1c8f73b1c747921df4f84278b70":"2000000000000000000000","4a97e8fcf4635ea7fc5e96ee51752ec388716b60":"546000000000000000000","54939ff08921b467cf2946751d856378296c63ed":"1000000000000000000000","6485470e61db110aebdbafd536769e3c599cc908":"600000000000000000000",e20d1bcb71286dc7128a9fc7c6ed7f733892eef5:"1003400000000000000000",d6eea898d4ae2b718027a19ce9a5eb7300abe3ca:"27475000000000000000","014974a1f46bf204944a853111e52f1602617def":"2000000000000000000000","6aa5732f3b86fb8c81efbe6b5b47b563730b06c8":"1000000000000000000000","6107d71dd6d0eefb11d4c916404cb98c753e117d":"2000000000000000000000",dd7bcda65924aaa49b80984ae173750258b92847:"10000000000000000000000","4e7b54474d01fefd388dfcd53b9f662624418a05":"8000000000000000000000","24fc73d20793098e09ddab5798506224fa1e1850":"200000000000000000000","2b8488bd2d3c197a3d26151815b5a798d27168dc":"6680000000000000000000","949131f28943925cfc97d41e0cea0b262973a730":"2800000000000000000000","60b8d6b73b79534fb08bb8cbcefac7f393c57bfe":"1760000000000000000000",d6acc220ba2e51dfcf21d443361eea765cbd35d8:"20000000000000000000",c4c6cb723dd7afa7eb535615e53f3cef14f18118:"1999999000000000000000","4c9a862ad115d6c8274ed0b944bdd6a5500510a7":"100000000000000000000","85732c065cbd64119941aed430ac59670b6c51c4":"731345000000000000000","0126e12ebc17035f35c0e9d11dd148393c405d7a":"1999600000000000000000","472048cc609aeb242165eaaa8705850cf3125de0":"1000000000000000000000",d2edd1ddd6d86dc005baeb541d22b640d5c7cae5:"20000000000000000000","4549b15979255f7e65e99b0d5604db98dfcac8bf":"4000000000000000000000",c6c7c191379897dd9c9d9a33839c4a5f62c0890d:"4000085000000000000000",d367009ab658263b62c2333a1c9e4140498e1389:"2000000000000000000000","143f5f1658d9e578f4f3d95f80c0b1bd3933cbda":"1490000000000000000000","1a09fdc2c7a20e23574b97c69e93deba67d37220":"1998000000000000000000",ac8b509aefea1dbfaf2bb33500d6570b6fd96d51:"1820000000000000000000","16ffac84032940f0121a09668b858a7e79ffa3bb":"3879210000000000000000",f338459f32a159b23db30ac335769ab2351aa63c:"30000000000000000000000",d82251456dc1380f8f5692f962828640ab9f2a03:"4879980000000000000000","47f4696bd462b20da09fb83ed2039818d77625b3":"149000000000000000000","3dde8b15b3ccbaa5780112c3d674f313bba68026":"1773000000000000000000",f70d637a845c06db6cdc91e6371ce7c4388a628e:"20000000000000000000","68295e8ea5afd9093fc0a465d157922b5d2ae234":"19982000000000000000","614e8bef3dd2c59b59a4145674401018351884ea":"20000000000000000000","4737d042dc6ae73ec73ae2517acea2fdd96487c5":"1000000000000000000000",cec6fc65853f9cce5f8e844676362e1579015f02:"2000000000000000000000",ae47e2609cfafe369d66d415d939de05081a9872:"27060000000000000000000","09a928d528ec1b3e25ffc83e218c1e0afe8928c7":"18200000000000000000","9b444fd337e5d75293adcfff70e1ea01db023222":"100000000000000000000","168bdec818eafc6d2992e5ef54aa0e1601e3c561":"1000110000000000000000","353dbec42f92b50f975129b93c4c997375f09073":"1999000000000000000000","6fcc2c732bdd934af6ccd16846fb26ef89b2aa9b":"10001242000000000000000","6f2576da4de283bbe8e3ee69ddd66e5e711db3f5":"1260800000000000000000","3a3dd104cd7eb04f21932fd433ea7affd39369f5":"357500000000000000000",d44f4ac5fad76bdc1537a3b3af6472319b410d9d:"1600000000000000000000","3d9d6be57ff83e065985664f12564483f2e600b2":"2041600000000000000000","88f1045f19f2d3191816b1df18bb6e1435ad1b38":"240000000000000000000",ddab75fb2ff9fecb88f89476688e2b00e367ebf9:"19400000000000000000000","092e815558402d67f90d6bfe6da0b2fffa91455a":"60000000000000000000",a7024cfd742c1ec13c01fea18d3042e65f1d5dee:"11272229000000000000000","7f46bb25460dd7dae4211ca7f15ad312fc7dc75c":"6685000000000000000000","93f18cd2526040761488c513174d1e7963768b2c":"2416500000000000000000","352f25babf4a690673e35195efa8f79d05848aad":"66800000000000000000000",f7b151cc5e571c17c76539dbe9964cbb6fe5de79:"2148000000000000000000",ff3eee57c34d6dae970d8b311117c53586cd3502:"1700000000000000000000",ae6f0c73fdd77c489727512174d9b50296611c4c:"6000000000000000000000","7819b0458e314e2b53bfe00c38495fd4b9fdf8d6":"20000000000000000000","7fdba031c78f9c096d62d05a369eeab0bccc55e5":"2800000000000000000000","735e328666ed5637142b3306b77ccc5460e72c3d":"1968682000000000000000","0bfbb6925dc75e52cf2684224bbe0550fea685d3":"1970000000000000000000","6be16313643ebc91ff9bb1a2e116b854ea933a45":"500000000000000000000",d6acffd0bfd99c382e7bd56ff0e6144a9e52b08e:"160000000000000000000","276a006e3028ecd44cdb62ba0a77ce94ebd9f10f":"1800000000000000000000","10711c3dda32317885f0a2fd8ae92e82069b0d0b":"4000000000000000000000","43cb9652818c6f4d6796b0e89409306c79db6349":"2000000000000000000000","7109dd011d15f3122d9d3a27588c10d77744508b":"2000000000000000000000","3497dd66fd118071a78c2cb36e40b6651cc82598":"109600000000000000000","9bf672d979b36652fc5282547a6a6bc212ae4368":"656000000000000000000",eaed16eaf5daab5bf0295e5e077f59fb8255900b:"4000000000000000000000","7ac58f6ffc4f8107ae6e30378e4e9f99c57fbb24":"40000000000000000000","45a570dcc2090c86a6b3ea29a60863dde41f13b5":"232500000000000000000","433a3b68e56b0df1862b90586bbd39c840ff1936":"2000000000000000000000",e8eaf12944092dc3599b3953fa7cb1c9761cc246:"1800000000000000000000",ec11362cec810985d0ebbd7b73451444985b369f:"30000047000000000000000","78e83f80b3678c7a0a4e3e8c84dccde064426277":"1790000000000000000000","0cc67f8273e1bae0867fd42e8b8193d72679dbf8":"500000000000000000000",c70d856d621ec145303c0a6400cd17bbd6f5eaf7:"20000000000000000000",f468906e7edf664ab0d8be3d83eb7ab3f7ffdc78:"1700000000000000000000","3c286cfb30146e5fd790c2c8541552578de334d8":"10203000000000000000000",c401c427cccff10decb864202f36f5808322a0a8:"3329300000000000000000",afd019ff36a09155346b69974815a1c912c90aa4:"2000000000000000000000","96fe59c3dbb3aa7cc8cb62480c65e56e6204a7e2":"20000000000000000000000",a47779d8bc1c7bce0f011ccb39ef68b854f8de8f:"2000000000000000000000","58c650ced40bb65641b8e8a924a039def46854df":"18500000000000000000","86f4f40ad984fbb80933ae626e0e42f9333fdd41":"1000000000000000000000",b22d5055d9623135961e6abd273c90deea16a3e7:"1400000000000000000000",ee3564f5f1ba0f94ec7bac164bddbf31c6888b55:"100000000000000000000",cf26b47bd034bc508e6c4bcfd6c7d30034925761:"1800000000000000000000",e87dbac636a37721df54b08a32ef4959b5e4ff82:"2000000000000000000000","3bf86ed8a3153ec933786a02ac090301855e576b":"450000000000000000000000",cfd2728dfb8bdbf3bf73598a6e13eaf43052ea2b:"170000000000000000000","85b16f0b8b34dff3804f69e2168a4f7b24d1042b":"317000000000000000000","84db1459bb00812ea67ecb3dc189b72187d9c501":"148851000000000000000","8c3a9ee71f729f236cba3867b4d79d8ceee25dbc":"100000000000000000000",e677c31fd9cb720075dca49f1abccd59ec33f734:"7800000000000000000000","8889448316ccf14ed86df8e2f478dc63c4338340":"15200000000000000000",b279c7d355c2880392aad1aa21ee867c3b3507df:"1261000000000000000000","12b5e28945bb2969f9c64c63cc05b6f1f8d6f4d5":"7722162000000000000000","8d2303341e1e1eb5e8189bde03f73a60a2a54861":"100000000000000000000","94d81074db5ae197d2bb1373ab80a87d121c4bd3":"9400000000000000000000","752c9febf42f66c4787bfa7eb17cf5333bba5070":"1966448000000000000000","16816aac0ede0d2d3cd442da79e063880f0f1d67":"2000000000000000000000",daac91c1e859d5e57ed3084b50200f9766e2c52b:"400000000000000000000","32c2fde2b6aabb80e5aea2b949a217f3cb092283":"5614827000000000000000",cdab46a5902080646fbf954204204ae88404822b:"544942000000000000000",fdf42343019b0b0c6bf260b173afab7e45b9d621:"1999944000000000000000","791f6040b4e3e50dcf3553f182cd97a90630b75d":"4000000000000000000000","4b762166dd1118e84369f804c75f9cd657bf730c":"500000000000000000000",a76d3f156251b72c0ccf4b47a3393cbd6f49a9c5:"1337000000000000000000",c5eb42295e9cadeaf2af12dede8a8d53c579c469:"3820000000000000000000",db9371b30c4c844e59e03e924be606a938d1d310:"2000000000000000000000","2cd39334ac7eac797257abe3736195f5b4b5ce0f":"99964000000000000000",ad44357e017e244f476931c7b8189efee80a5d0a:"300000000000000000000","4ca7b717d9bc8793b04e051a8d23e1640f5ba5e3":"1248980000000000000000","73e4a2b60cf48e8baf2b777e175a5b1e4d0c2d8f":"100000000000000000000","5a1d2d2d1d520304b6208849570437eb3091bb9f":"1970000000000000000000","53047dc8ac9083d90672e8b3473c100ccd278323":"40000000000000000000","26fe174cbf526650e0cd009bd6126502ce8e684d":"11640000000000000000000",e2df23f6ea04becf4ab701748dc0963184555cdb:"2000000000000000000000",c1170dbaadb3dee6198ea544baec93251860fda5:"1200000000000000000000","8bbeacfc29cfe93402db3c41d99ab759662e73ec":"2000000000000000000000","165305b787322e25dc6ad0cefe6c6f334678d569":"2000000000000000000000","095457f8ef8e2bdc362196b9a9125da09c67e3ab":"200000000000000000000","702802f36d00250fab53adbcd696f0176f638a49":"2000000000000000000000","489334c2b695c8ee0794bd864217fb9fd8f8b135":"18200000000000000000",fa8cf4e627698c5d5788abb7880417e750231399:"4244640000000000000000","3329eb3baf4345d600ced40e6e9975656f113742":"4999711000000000000000",b4dd5499daeb2507fb2de12297731d4c72b16bb0:"20000000000000000000","88c2516a7cdb09a6276d7297d30f5a4db1e84b86":"4000000000000000000000","612ced8dc0dc9e899ee46f7962333315f3f55e44":"338830000000000000000",d71e43a45177ad51cbe0f72184a5cb503917285a:"200000000000000000000","2fb566c94bbba4e3cb67cdda7d5fad7131539102":"2000000000000000000000","03be5b4629aefbbcab9de26d39576cb7f691d764":"200550000000000000000","025367960304beee34591118e9ac2d1358d8021a":"2000000000000000000000",a5d5b8b62d002def92413710d13b6ff8d4fc7dd3:"400000000000000000000",df3b72c5bd71d4814e88a62321a93d4011e3578b:"4000000000000000000000","3588895ac9fbafec012092dc05c0c302d90740fa":"3000000000000000000000","6021e85a8814fce1e82a41abd1d3b2dad2faefe0":"2000000000000000000000","17ee9f54d4ddc84d670eff11e54a659fd72f4455":"16000000000000000000000","873c6f70efb6b1d0f2bbc57eebcd70617c6ce662":"1013478000000000000000","1fcc7ce6a8485895a3199e16481f72e1f762defe":"1000000000000000000000",d0a7209b80cf60db62f57d0a5d7d521a69606655:"160000000000000000000",a514d00edd7108a6be839a638db2415418174196:"30000000000000000000000","046377f864b0143f282174a892a73d3ec8ec6132":"191000000000000000000",c126573d87b0175a5295f1dd07c575cf8cfa15f2:"10000000000000000000000","0e123d7da6d1e6fac2dcadd27029240bb39052fe":"1000000000000000000000",ad5a8d3c6478b69f657db3837a2575ef8e1df931:"36990000000000000000",db882eacedd0eff263511b312adbbc59c6b8b25b:"9100000000000000000000","0b43bd2391025581d8956ce42a072579cbbfcb14":"18800000000000000000",affea0473722cb7f0e0e86b9e11883bf428d8d54:"1940000000000000000000",e32b1c4725a1875449e98f970eb3e54062d15800:"200000000000000000000","98f4af3af0aede5fafdc42a081ecc1f89e3ccf20":"9400000000000000000000","3b4768fd71e2db2cbe7fa050483c27b4eb931df3":"2000000000000000000000",d5f7c41e07729dfa6dfc64c4423160a22c609fd3:"1790000000000000000000",d944c8a69ff2ca1249690c1229c7192f36251062:"1970000000000000000000","5ae64e853ba0a51282cb8db52e41615e7c9f733f":"2000000000000000000000",b13f93af30e8d7667381b2b95bc1a699d5e3e129:"420000000000000000000","8a20e5b5cee7cd1f5515bace3bf4f77ffde5cc07":"80000000000000000000","2448596f91c09baa30bc96106a2d37b5705e5d28":"2000000000000000000000",ccca24d8c56d6e2c07db086ec07e585be267ac8d:"200000000000000000000",f67bb8e2118bbcd59027666eedf6943ec9f880a5:"4000000000000000000000","7ae659eb3bc46852fa86fac4e21c768d50388945":"286000000000000000000","467e0ed54f3b76ae0636176e07420815a021736e":"2000000000000000000000",a46cd237b63eea438c8e3b6585f679e4860832ac:"1000000000000000000000","6b760d4877e6a627c1c967bee451a8507ddddbab":"910000000000000000000","593044670faeff00a55b5ae051eb7be870b11694":"133700000000000000000","533c06928f19d0a956cc28866bf6c8d8f4191a94":"292320000000000000000","262dc1364ccf6df85c43268ee182554dae692e29":"4927600000000000000000",e4368bc1420b35efda95fafbc73090521916aa34:"4000000000000000000000",feb92d30bf01ff9a1901666c5573532bfa07eeec:"1000000000000000000000",ee25b9a7032679b113588ed52c137d1a053a1e94:"199820000000000000000","20134cbff88bfadc466b52eceaa79857891d831e":"1000000000000000000000","07b1a306cb4312df66482c2cae72d1e061400fcd":"20000000000000000000000",e791d585b89936b25d298f9d35f9f9edc25a2932:"2000000000000000000000","2e6933543d4f2cc00b5350bd8068ba9243d6beb0":"2000000000000000000000",dae0d33eaa341569fa9ff5982684854a4a328a6e:"1000000000000000000000","125cc5e4d56b2bcc2ee1c709fb9e68fb177440bd":"2000000000000000000000",ec99e95dece46ffffb175eb6400fbebb08ee9b95:"100000000000000000000",c538a0ff282aaa5f4b75cfb62c70037ee67d4fb5:"2000000000000000000000","60676d1fa21fca052297e24bf96389c5b12a70d7":"241500000000000000000","4b3dfbdb454be5279a3b8addfd0ed1cd37a9420d":"2000000000000000000000",cdb597299030183f6e2d238533f4642aa58754b6:"400000000000000000000","1ef2dcbfe0a500411d956eb8c8939c3d6cfe669d":"776000000000000000000",a7247c53d059eb7c9310f628d7fc6c6a0a773f08:"500000000000000000000","9799ca21dbcf69bfa1b3f72bac51b9e3ca587cf9":"1700000000000000000000",ddf95c1e99ce2f9f5698057c19d5c94027ee4a6e:"6000000000000000000000","83563bc364ed81a0c6da3b56ff49bbf267827a9c":"17332000000000000000000",a192698007cc11aa603d221d5feea076bcf7c30d:"2000000000000000000000","0134ff38155fabae94fd35c4ffe1d79de7ef9c59":"985000000000000000000","80977316944e5942e79b0e3abad38da746086519":"38800000000000000000","193d37ed347d1c2f4e35350d9a444bc57ca4db43":"60000000000000000000","009a6d7db326679b77c90391a7476d238f3ba33e":"200200000000000000000","337b3bdf86d713dbd07b5dbfcc022b7a7b1946ae":"3980000000000000000000","7de7fe419cc61f91f408d234cc80d5ca3d054d99":"20000000000000000000",f47bb134da30a812d003af8dccb888f44bbf5724:"5190000000000000000000",fd920f722682afb5af451b0544d4f41b3b9d5742:"2330200000000000000000","0a917f3b5cb0b883047fd9b6593dbcd557f453b9":"1000000000000000000000",ce9786d3712fa200e9f68537eeaa1a06a6f45a4b:"1790000000000000000000","9ab98d6dbb1eaae16d45a04568541ad3d8fe06cc":"272451000000000000000","0b7bb342f01bc9888e6a9af4a887cbf4c2dd2caf":"16000000000000000000000","4c0b1515dfced7a13e13ee12c0f523ae504f032b":"50000000000000000000000",ac2889b5966f0c7f9edb42895cb69d1c04f923a2:"5000000000000000000000",d008513b27604a89ba1763b6f84ce688b346945b:"1000000000000000000000",a4b09de6e713dc69546e76ef0acf40b94f0241e6:"322656000000000000000",b153f828dd076d4a7c1c2574bb2dee1a44a318a8:"400000000000000000000","02ade5db22f8b758ee1443626c64ec2f32aa0a15":"20000000000000000000000","0a0650861f785ed8e4bf1005c450bbd06eb48fb6":"3066860000000000000000",b75149e185f6e3927057739073a1822ae1cf0df2:"4000086000000000000000","84cb7da0502df45cf561817bbd2362f451be02da":"1337000000000000000000",c91bb562e42bd46130e2d3ae4652b6a4eb86bc0f:"540000000000000000000",b234035f7544463ce1e22bc553064684c513cd51:"249750000000000000000",e5e33800a1b2e96bde1031630a959aa007f26e51:"1337000000000000000000",ae5ce3355a7ba9b332760c0950c2bc45a85fa9a0:"400000000000000000000",e6f5eb649afb99599c414b27a9c9c855357fa878:"2674000000000000000000","7010be2df57bd0ab9ae8196cd50ab0c521aba9f9":"1970000000000000000000",ca4288014eddc5632f5facb5e38517a8f8bc5d98:"340000000000000000000","2784903f1d7c1b5cd901f8875d14a79b3cbe2a56":"22388000000000000000000",f8dce867f0a39c5bef9eeba609229efa02678b6c:"2000000000000000000000",e020e86362b487752836a6de0bc02cd8d89a8b6a:"6000000000000000000000",c4088c025f3e85013f5439fb3440a17301e544fe:"2325000000000000000000",befb448c0c5f683fb67ee570baf0db5686599751:"1970000000000000000000","2f187d5a704d5a338c5b2876a090dce964284e29":"4000000000000000000000",ec0e18a01dc4dc5daae567c3fa4c7f8f9b590205:"315900000000000000000","637f5869d6e4695f0eb9e27311c4878aff333380":"1969212000000000000000",d1100dd00fe2ddf18163ad964d0b69f1f2e9658a:"5959598000000000000000","17ef4acc1bf147e326749d10e677dcffd76f9e06":"39980000000000000000000","200dfc0b71e359b2b465440a36a6cdc352773007":"1500000000000000000000",efe0675da98a5dda70cd96196b87f4e726b43348:"1164000000000000000000",d5bd5e8455c130169357c471e3e681b7996a7276:"841500000000000000000","9c7b6dc5190fe2912963fcd579683ec7395116b0":"776000000000000000000",b105dd3d987cffd813e9c8500a80a1ad257d56c6:"1999944000000000000000","145250b06e4fa7cb2749422eb817bdda8b54de5f":"219000000000000000000",d96db33b7b5a950c3efa2dc31b10ba10a532ef87:"2000000000000000000000",af529bdb459cc185bee5a1c58bf7e8cce25c150d:"197000000000000000000","185546e8768d506873818ac9751c1f12116a3bef":"200000000000000000000","51d24bc3736f88dd63b7222026886630b6eb878d":"2000000000000000000000","69af28b0746cac0da17084b9398c5e36bb3a0df2":"1004700000000000000000","76f83ac3da30f7092628c7339f208bfc142cb1ee":"2842600000000000000000","00f463e137dcf625fbf3bca39eca98d2b968cf7f":"5910000000000000000000","2084fce505d97bebf1ad8c5ff6826fc645371fb2":"30000000000000000000","53a714f99fa00fef758e23a2e746326dad247ca7":"1490000000000000000000","0bf064428f83626722a7b5b26a9ab20421a7723e":"133700000000000000000",ac6f68e837cf1961cb14ab47446da168a16dde89:"1337000000000000000000","4b3c7388cc76da3d62d40067dabccd7ef0433d23":"100076000000000000000",deb9a49a43873020f0759185e20bbb4cf381bb8f:"211628000000000000000","5bf9f2226e5aeacf1d80ae0a59c6e38038bc8db5":"6000000000000000000000","9d0e7d92fb305853d798263bf15e97c72bf9d7e0":"1000000000000000000000","2b5c60e84535eeb4d580de127a12eb2677ccb392":"20000000000000000000000",d8d65420c18c2327cc5af97425f857e4a9fd51b3:"1760000000000000000000","30ec9392244a2108c987bc5cdde0ed9f837a817b":"1560562000000000000000","56a1d60d40f57f308eebf087dee3b37f1e7c2cba":"1159600000000000000000",a9a1cdc33bfd376f1c0d76fb6c84b6b4ac274d68:"5000000000000000000000",a67f38819565423aa85f3e3ab61bc763cbab89dd:"2130000000000000000000","62d5cc7117e18500ac2f9e3c26c86b0a94b0de15":"105000000000000000000","4970d3acf72b5b1f32a7003cf102c64ee0547941":"140000000000000000000000","76628150e2995b5b279fc83e0dd5f102a671dd1c":"40000000000000000000000","3d8f39881b9edfe91227c33fa4cdd91e678544b0":"86111000000000000000",ff0b7cb71da9d4c1ea6ecc28ebda504c63f82fd1:"1043000000000000000000","8d795c5f4a5689ad62da961671f028065286d554":"2048000000000000000000",be2346a27ff9b702044f500deff2e7ffe6824541:"20000000000000000000","0dbd417c372b8b0d01bcd944706bd32e60ae28d1":"340000000000000000000","467fbf41441600757fe15830c8cd5f4ffbbbd560":"10000000000000000000000","090cd67b60e81d54e7b5f6078f3e021ba65b9a1e":"1000000000000000000000","55a4cac0cb8b582d9fef38c5c9fff9bd53093d1f":"1970000000000000000000","3b7b4f53c45655f3dc5f017edc23b16f9bc536fa":"100000000000000000000",d508d39c70916f6abc4cc7f999f011f077105802:"100470000000000000000","037dd056e7fdbd641db5b6bea2a8780a83fae180":"140000000000000000000","660557bb43f4be3a1b8b85e7df7b3c5bcd548057":"6000000000000000000000","02089361a3fe7451fb1f87f01a2d866653dc0b07":"39976000000000000000",c4bec96308a20f90cab18399c493fd3d065abf45:"14000000000000000000000",cca07bb794571d4acf041dad87f0d1ef3185b319:"2000000000000000000000",f2d0e986d814ea13c8f466a0538c53dc922651f0:"1380000000000000000000","662cfa038fab37a01745a364e1b98127c503746d":"3940000000000000000000","3336c3ef6e8b50ee90e037b164b7a8ea5faac65d":"272712000000000000000","30e33358fc21c85006e40f32357dc8895940aaf0":"1910000000000000000000","41a9a404fc9f5bfee48ec265b12523338e29a8bf":"388000000000000000000","6af235d2bbe050e6291615b71ca5829658810142":"3000000000000000000000",fd5a63157f914fd398eab19c137dd9550bb7715c:"100000000000000000000","8a4314fb61cd938fc33e15e816b113f2ac89a7fb":"432800000000000000000",b216dc59e27c3d7279f5cd5bb2becfb2606e14d9:"400000000000000000000",f5a5459fcdd5e5b273830df88eea4cb77ddadfb9:"74500000000000000000",df31025f5649d2c6eea41ed3bdd3471a790f759a:"20000000000000000000","721f9d17e5a0e74205947aeb9bc6a7938961038f":"51900000000000000000","08d0864dc32f9acb36bf4ea447e8dd6726906a15":"2000200000000000000000","54575c3114751e3c631971da6a2a02fd3ffbfcc8":"1940000000000000000000","8f60895fbebbb5017fcbff3cdda397292bf25ba6":"429177000000000000000","91fe8a4c6164df8fa606995d6ba7adcaf1c893ce":"17000000000000000000000","889087f66ff284f8b5efbd29493b706733ab1447":"9850000000000000000000","051633080d07a557adde319261b074997f14692d":"5800000000000000000000","59a12df2e3ef857aceff9306b309f6a500f70134":"1000000000000000000000","9f64a8e8dacf4ade30d10f4d59b0a3d5abfdbf74":"1000060000000000000000","8846928d683289a2d11df8db7a9474988ef01348":"10000000000000000000000",dff1b220de3d8e9ca4c1b5be34a799bcded4f61c:"385428000000000000000","7e7c1e9a61a08a83984835c70ec31d34d3eaa87f":"191000000000000000000",fe210b8f04dc6d4f76216acfcbd59ba83be9b630:"20000000000000000000",dc8c2912f084a6d184aa73638513ccbc326e0102:"1295000000000000000000",dddd7b9e6eab409b92263ac272da801b664f8a57:"500000000000000000000000","86a5f8259ed5b09e188ce346ee92d34aa5dd93fa":"200000000000000000000",dc1f1979615f082140b8bb78c67b27a1942713b1:"60000000000000000000",ea66e7b84dcdbf36eea3e75b85382a75f1a15d96:"1729135000000000000000","039e7a4ebc284e2ccd42b1bdd60bd6511c0f7706":"17300000000000000000","36bfe1fa3b7b70c172eb042f6819a8972595413e":"1000000000000000000000","039ef1ce52fe7963f166d5a275c4b1069fe3a832":"400008000000000000000",f1df55dcc34a051012b575cb968bc9c458ea09c9:"4000000000000000000000","168b5019b818691644835fe69bf229e17112d52c":"28000000000000000000000",f60bd735543e6bfd2ea6f11bff627340bc035a23:"2000000000000000000000","2cbb0c73df91b91740b6693b774a7d05177e8e58":"1850000000000000000000","9ffcf5ef46d933a519d1d16c6ba3189b27496224":"1000000000000000000000","0e11d77a8977fac30d268445e531149b31541a24":"2000000000000000000000",dfb1626ef48a1d7d7552a5e0298f1fc23a3b482d:"1713860000000000000000",cc943be1222cd1400a2399dd1b459445cf6d54a9:"12530000000000000000000",b37c2b9f50637bece0ca959208aefee6463ba720:"400000000000000000000","96b906ea729f4655afe3e57d35277c967dfa1577":"1000000000000000000000","7995bd8ce2e0c67bf1c7a531d477bca1b2b97561":"5945100000000000000000","96f820500b70f4a3e3239d619cff8f222075b135":"200000000000000000000",ad3565d52b688added08168b2d3872d17d0a26ae:"100000000000000000000","9e7c2050a227bbfd60937e268cea3e68fea8d1fe":"100000000000000000000","7e59dc60be8b2fc19abd0a5782c52c28400bce97":"1000000000000000000000","01ed5fba8d2eab673aec042d30e4e8a611d8c55a":"2000000000000000000000","59a087b9351ca42f58f36e021927a22988284f38":"18500000000000000000","2fe0023f5722650f3a8ac01009125e74e3f82e9b":"3000000000000000000000",bd1803370bddb129d239fd16ea8526a6188ae58e:"500000000000000000000",c70527d444c490e9fc3f5cc44e66eb4f306b380f:"4000000000000000000000","0f206e1a1da7207ea518b112418baa8b06260328":"600000000000000000000","6e1a046caf5b4a57f4fd4bc173622126b4e2fd86":"1790000000000000000000","84008a72f8036f3feba542e35078c057f32a8825":"100000000000000000000","246291165b59332df5f18ce5c98856fae95897d6":"1700000000000000000000","7e99dfbe989d3ba529d19751b7f4317f8953a3e2":"400000000000000000000","748c285ef1233fe4d31c8fb1378333721c12e27a":"2000000000000000000000","3dd12e556a603736feba4a6fa8bd4ac45d662a04":"167450000000000000000000",d0ae735d915e946866e1fea77e5ea466b5cadd16:"2000000000000000000000","4f767bc8794aef9a0a38fea5c81f14694ff21a13":"512200000000000000000","0e2f8e28a681f77c583bd0ecde16634bdd7e00cd":"95060000000000000000",d74a6e8d6aab34ce85976814c1327bd6ea0784d2:"100000000000000000000000","629be7ab126a5398edd6da9f18447e78c692a4fd":"2000000000000000000000","2e46fcee6a3bb145b594a243a3913fce5dad6fba":"10000000000000000000000",e39b11a8ab1ff5e22e5ae6517214f73c5b9b55dc:"2000000000000000000000","119aa64d5b7d181dae9d3cb449955c89c1f963fa":"700000000000000000000",ce079f51887774d8021cb3b575f58f18e9acf984:"180000000000000000000", -"550c306f81ef5d9580c06cb1ab201b95c748a691":"665800000000000000000","06dc7f18cee7edab5b795337b1df6a9e8bd8ae59":"400000000000000000000",e21c778ef2a0d7f751ea8c074d1f812243863e4e:"5308559000000000000000","45d4b54d37a8cf599821235f062fa9d170ede8a4":"324000000000000000000","893a6c2eb8b40ab096b4f67e74a897b840746e86":"1730000000000000000000",d44d81e18f46e2cfb5c1fcf5041bc8569767d100:"36381800000000000000000",c5de1203d3cc2cea31c82ee2de5916880799eafd:"5000000000000000000000","7f0f04fcf37a53a4e24ede6e93104e78be1d3c9e":"2000000000000000000000","3ce1dc97fcd7b7c4d3a18a49d6f2a5c1b1a906d7":"200000000000000000000",ac4ee9d502e7d2d2e99e59d8ca7d5f00c94b4dd6:"1000000000000000000000","7640a37f8052981515bce078da93afa4789b5734":"2000000000000000000000","76cac488111a4fd595f568ae3a858770fc915d5f":"200000000000000000000",ff4a408f50e9e72146a28ce4fc8d90271f116e84:"1970000000000000000000","249db29dbc19d1235da7298a04081c315742e9ac":"1801800000000000000000","3a04572847d31e81f7765ca5bfc9d557159f3683":"133031000000000000000",b6771b0bf3427f9ae7a93e7c2e61ee63941fdb08:"18800000000000000000000","30c26a8e971baa1855d633ba703f028cc7873140":"10000000000000000000000","167e3e3ae2003348459392f7dfce44af7c21ad59":"500000000000000000000","43f16f1e75c3c06a9478e8c597a40a3cb0bf04cc":"2914000000000000000000","056b1546894f9a85e203fb336db569b16c25e04f":"169397000000000000000","70616e2892fa269705b2046b8fe3e72fa55816d3":"20000000000000000000000","8f4d1d41693e462cf982fd81d0aa701d3a5374c9":"4000000000000000000000",c518799a5925576213e21896e0539abb85b05ae3:"1000000000000000000000","0e3a28c1dfafb0505bdce19fe025f506a6d01ceb":"2000000000000000000000",e4a47e3933246c3fd62979a1ea19ffdf8c72ef37:"148273000000000000000",d231929735132102471ba59007b6644cc0c1de3e:"1000090000000000000000","555d8d3ce1798aca902754f164b8be2a02329c6c":"10000000000000000000000","5ab1a5615348001c7c775dc75748669b8be4de14":"690200000000000000000","2fee36a49ee50ecf716f1047915646779f8ba03f":"1056230000000000000000","54db5e06b4815d31cb56a8719ba33af2d73e7252":"670000000000000000000","7c8bb65a6fbb49bd413396a9d7e31053bbb37aa9":"6000000000000000000000",c1384c6e717ebe4b23014e51f31c9df7e4e25b31:"500000000000000000000","474158a1a9dc693c133f65e47b5c3ae2f773a86f":"200200000000000000000","2934c0df7bbc172b6c186b0b72547ace8bf75454":"60000000000000000000","6966063aa5de1db5c671f3dd699d5abe213ee902":"8000000000000000000000","9225d46a5a80943924a39e5b84b96da0ac450581":"40000000000000000000000","671bbca099ff899bab07ea1cf86965c3054c8960":"50000000000000000000",f1f766b0e46d73fcd4d52e7a72e1b9190cc632b3:"8000000000000000000000",ef0dc7dd7a53d612728bcbd2b27c19dd4d7d666f:"705668000000000000000","38d2e9154964b41c8d50a7487d391e7ee2c3d3c2":"3500000000000000000000","352a785f4a921632504ce5d015f83c49aa838d6d":"4314800000000000000000","743de50026ca67c94df54f066260e1d14acc11ac":"2000000000000000000000",b188078444027e386798a8ae68698919d5cc230d:"267400000000000000000","53608105ce4b9e11f86bf497ffca3b78967b5f96":"20000000000000000000000","3b159099075207c6807663b1f0f7eda54ac8cce3":"1969543000000000000000","141a5e39ee2f680a600fbf6fa297de90f3225cdd":"10000000000000000000000","44fff37be01a3888d3b8b8e18880a7ddefeeead3":"259145000000000000000",c5a629a3962552cb8eded889636aafbd0c18ce65:"10000000000000000000000",fdba5359f7ec3bc770ac49975d844ec9716256f1:"1000000000000000000000","7c1df24a4f7fb2c7b472e0bb006cb27dcd164156":"1000000000000000000000",ab7d54c7c6570efca5b4b8ce70f52a5773e5d53b:"279600000000000000000","3f173aa6edf469d185e59bd26ae4236b92b4d8e1":"320000000000000000000",a3f4ad14e0bb44e2ce2c14359c75b8e732d37054:"200000000000000000000",ac5f627231480d0d95302e6d89fc32cb1d4fe7e3:"200000000000000000000",d0775dba2af4c30a3a78365939cd71c2f9de95d2:"1940000000000000000000",ad94235fc3b3f47a2413af31e884914908ef0c45:"500008000000000000000",eaedcc6b8b6962d5d9288c156c579d47c0a9fcff:"85000000000000000000","7ac48d40c664cc9a6d89f1c5f5c80a1c70e744e6":"3008000000000000000000",ec73114c5e406fdbbe09b4fa621bd70ed54ea1ef:"24500000000000000000000",a690f1a4b20ab7ba34628620de9ca040c43c1963:"4000000000000000000000",cad14f9ebba76680eb836b079c7f7baaf481ed6d:"238600000000000000000","6c714a58fff6e97d14b8a5e305eb244065688bbd":"4000000000000000000000","3e618350fa01657ab0ef3ebac8e37012f8fc2b6f":"2804400000000000000000",c946d5acc1346eba0a7279a0ac1d465c996d827e:"16385128000000000000000","1164caaa8cc5977afe1fad8a7d6028ce2d57299b":"400000000000000000000","7917e5bd82a9790fd650d043cdd930f7799633db":"3999800000000000000000",d52aecc6493938a28ca1c367b701c21598b6a02e:"1100000000000000000000","98bed3a72eccfbafb923489293e429e703c7e25b":"2000000000000000000000","42db0b902559e04087dd5c441bc7611934184b89":"2014420000000000000000","43bc2d4ddcd6583be2c7bc094b28fb72e62ba83b":"2000000000000000000000","85f0e7c1e3aff805a627a2aaf2cff6b4c0dbe9cb":"20000000000000000000","581b9fd6eae372f3501f42eb9619eec820b78a84":"19699015000000000000000","541db20a80cf3b17f1621f1b3ff79b882f50def3":"1000000000000000000000","4e8a6d63489ccc10a57f885f96eb04ecbb546024":"18500000000000000000000","28349f7ef974ea55fe36a1583b34cec3c45065f0":"234490000000000000000",a3241d890a92baf52908dc4aa049726be426ebd3:"19999560000000000000000",b4b11d109f608fa8edd3fea9f8c315649aeb3d11:"5000000000000000000000","5f321b3daaa296cadf29439f9dab062a4bffedd6":"81868000000000000000",c5ae86b0c6c7e3900f1368105c56537faf8d743e:"188000000000000000000","9a8eca4189ff4aa8ff7ed4b6b7039f0902219b15":"20000000000000000000",a3facc50195c0b4933c85897fecc5bbd995c34b8:"20000000000000000000",f07bd0e5c2ce69c7c4a724bd26bbfa9d2a17ca03:"5910000000000000000000","640aba6de984d94517377803705eaea7095f4a11":"10000000000000000000000","204ac98867a7c9c7ed711cb82f28a878caf69b48":"6000000000000000000000","9d34dac25bd15828faefaaf28f710753b39e89dc":"1090400000000000000000",fe418b421a9c6d373602790475d2303e11a75930:"1015200000000000000000","3f472963197883bbda5a9b7dfcb22db11440ad31":"481445000000000000000","1578bdbc371b4d243845330556fff2d5ef4dff67":"100000000000000000000",dba4796d0ceb4d3a836b84c96f910afc103f5ba0:"166666000000000000000","466fda6b9b58c5532750306a10a2a8c768103b07":"199955000000000000000","2770f14efb165ddeba79c10bb0af31c31e59334c":"3000000000000000000000","7c382c0296612e4e97e440e02d3871273b55f53b":"197600000000000000000","1fb7bd310d95f2a6d9baaf8a8a430a9a04453a8b":"3000000000000000000000",a9acf600081bb55bb6bfbab1815ffc4e17e85a95:"200000000000000000000",f93d5bcb0644b0cce5fcdda343f5168ffab2877d:"209978000000000000000",db0cc78f74d9827bdc8a6473276eb84fdc976212:"2000000000000000000000",b66411e3a02dedb726fa79107dc90bc1cae64d48:"2000000000000000000000","4d6e8fe109ccd2158e4db114132fe75fecc8be5b":"25019000000000000000","6fd947d5a73b175008ae6ee8228163da289b167d":"30000000000000000000000","32d950d5e93ea1d5b48db4714f867b0320b31c0f":"1015200000000000000000","9c99b62606281b5cefabf36156c8fe62839ef5f3":"4000000000000000000000","86c8d0d982b539f48f9830f9891f9d607a942659":"13260000000000000000000",f2127d54188fedef0f338a5f38c7ff73ad9f6f42:"20000000000000000000000",e864fec07ed1214a65311e11e329de040d04f0fd:"1656353000000000000000","1d09ad2412691cc581c1ab36b6f9434cd4f08b54":"7000000000000000000000","4ea70f04313fae65c3ff224a055c3d2dab28dddf":"19999800000000000000000",e0668fa82c14d6e8d93a53113ef2862fa81581bc:"870400000000000000000",f0d858105e1b648101ac3f85a0f8222bf4f81d6a:"600000000000000000000","0f3a1023cac04dbf44f5a5fa6a9cf8508cd4fddf":"1820000000000000000000","5793abe6f1533311fd51536891783b3f9625ef1c":"827268000000000000000","8d667637e29eca05b6bfbef1f96d460eefbf9984":"4000000000000000000000",d76dbaebc30d4ef67b03e6e6ecc6d84e004d502d:"2019250000000000000000","42d1a6399b3016a8597f8b640927b8afbce4b215":"2980000000000000000000","21fd47c5256012198fa5abf131c06d6aa1965f75":"7880000000000000000000","2f2bba1b1796821a766fce64b84f28ec68f15aea":"20000000000000000000",d24bf12d2ddf457decb17874efde2052b65cbb49:"14000000000000000000000","88de13b09931877c910d593165c364c8a1641bd3":"3000000000000000000000","555ca9f05cc134ab54ae9bea1c3ff87aa85198ca":"100000000000000000000",ae9ecd6bdd952ef497c0050ae0ab8a82a91898ce:"30000000000000000000",ad8bfef8c68a4816b3916f35cb7bfcd7d3040976:"40000000000000000000000",dad136b88178b4837a6c780feba226b98569a94c:"200000000000000000000","800e7d631c6e573a90332f17f71f5fd19b528cb9":"152000000000000000000","94a9a71691317c2064271b51c9353fbded3501a8":"3340000000000000000000","80a0f6cc186cf6201400736e065a391f52a9df4a":"10000000000000000000000","712ff7370a13ed360973fedc9ff5d2c93a505e9e":"3940000000000000000000","42399659aca6a5a863ea2245c933fe9a35b7880e":"2044000000000000000000",ae239acffd4ebe2e1ba5b4170572dc79cc6533ec:"12000000000000000000000","007b9fc31905b4994b04c9e2cfdc5e2770503f42":"1999000000000000000000","7480de62254f2ba82b578219c07ba5be430dc3cb":"7040000000000000000000","917b8f9f3a8d09e9202c52c29e724196b897d35e":"161000000000000000000","708ea707bae4357f1ebea959c3a250acd6aa21b3":"500000000000000000000","6dc7053a718616cfc78bee6382ee51add0c70330":"2000000000000000000000",c4dac5a8a0264fbc1055391c509cc3ee21a6e04c:"6501000000000000000000",c1b2a0fb9cad45cd699192cd27540b88d3384279:"500000000000000000000",b07cb9c12405b711807543c4934465f87f98bd2d:"2000000000000000000000",c7f72bb758016b374714d4899bce22b4aec70a31:"1072706000000000000000","0c480de9f7461002908b49f60fc61e2b62d3140b":"10000000000000000000000","83d532d38d6dee3f60adc68b936133c7a2a1b0dd":"500000000000000000000","12afbcba1427a6a39e7ba4849f7ab1c4358ac31b":"20000000000000000000000",f8f6645e0dee644b3dad81d571ef9baf840021ad:"2000000000000000000000","40cf890591eae4a18f812a2954cb295f633327e6":"48132000000000000000","735b97f2fc1bd24b12076efaf3d1288073d20c8c":"20000000000000000000","47c7e5efb48b3aed4b7c6e824b435f357df4c723":"18200000000000000000",d34d708d7398024533a5a2b2309b19d3c55171bb:"400000000000000000000","64370e87202645125a35b207af1231fb6072f9a7":"200000000000000000000",b055af4cadfcfdb425cf65ba6431078f07ecd5ab:"100000000000000000000",c7de5e8eafb5f62b1a0af2195cf793c7894c9268:"1000000000000000000000",c63cd7882118b8a91e074d4c8f4ba91851303b9a:"260000000000000000000","164d7aac3eecbaeca1ad5191b753f173fe12ec33":"744090000000000000000",e4fb26d1ca1eecba3d8298d9d148119ac2bbf580:"400000000000000000000","613ac53be565d46536b820715b9b8d3ae68a4b95":"3760000000000000000000","7f616c6f008adfa082f34da7d0650460368075fb":"1000000000000000000000","9af100cc3dae83a33402051ce4496b16615483f6":"2000000000000000000000",b45cca0d36826662683cf7d0b2fdac687f02d0c4:"1000000000000000000000","93a6b3ab423010f981a7489d4aad25e2625c5741":"20190033000000000000000",ee049af005974dd1c7b3a9ca8d9aa77175ba53aa:"333333000000000000000","687927e3048bb5162ae7c15cf76bd124f9497b9e":"2000000000000000000000","1aa40270d21e5cde86b6316d1ac3c533494b79ed":"20000000000000000000","426259b0a756701a8b663528522156c0288f0f24":"9900000000000000000000","91c75e3cb4aa89f34619a164e2a47898f5674d9c":"2000000000000000000000","437983388ab59a4ffc215f8e8269461029c3f1c1":"20000000000000000000000","272a131a5a656a7a3aca35c8bd202222a7592258":"2674000000000000000000",bc0ca4f217e052753614d6b019948824d0d8688b:"400000000000000000000",cc6c03bd603e09de54e9c4d5ac6d41cbce715724:"98500000000000000000",d79aff13ba2da75d46240cac0a2467c656949823:"1730000000000000000000","477b24eee8839e4fd19d1250bd0b6645794a61ca":"8000000000000000000000","79fd6d48315066c204f9651869c1096c14fc9781":"2000000000000000000000","1463a873555bc0397e575c2471cf77fa9db146e0":"10000000000000000000000","89ab13ee266d779c35e8bb04cd8a90cc2103a95b":"60000000000000000000000","90acced7e48c08c6b934646dfa0adf29dc94074f":"56154000000000000000","31ea6eab19d00764e9a95e183f2b1b22fc7dc40f":"20000000000000000000","87a53ea39f59a35bada8352521645594a1a714cb":"1910000000000000000000","1e1aed85b86c6562cb8fa1eb6f8f3bc9dcae6e79":"4516200000000000000000",e36a8ea87f1e99e8a2dc1b2608d166667c9dfa01:"100000000000000000000",ec2cb8b9378dff31aec3c22e0e6dadff314ab5dd:"2000000000000000000000","3cadeb3d3eed3f62311d52553e70df4afce56f23":"4000000000000000000000","3ceca96bb1cdc214029cbc5e181d398ab94d3d41":"80000000000000000000000","3283eb7f9137dd39bed55ffe6b8dc845f3e1a079":"66224000000000000000","0954a8cb5d321fc3351a7523a617d0f58da676a7":"2506000000000000000000",de33d708a3b89e909eaf653b30fdc3a5d5ccb4b3:"177300000000000000000","1c6702b3b05a5114bdbcaeca25531aeeb34835f4":"26071500000000000000000",e5b96fc9ac03d448c1613ac91d15978145dbdfd1:"200000000000000000000",fbf204c813f836d83962c7870c7808ca347fd33e:"20000000000000000000","3b13631a1b89cb566548899a1d60915cdcc4205b":"2000000000000000000000",a87f7abd6fa31194289678efb63cf584ee5e2a61:"4000000000000000000000",c0a39308a80e9e84aaaf16ac01e3b01d74bd6b2d:"136499000000000000000",ffd6da958eecbc016bab91058440d39b41c7be83:"20000000000000000000000","0e3dd7d4e429fe3930a6414035f52bdc599d784d":"40110000000000000000",e0663e8cd66792a641f56e5003660147880f018e:"2000000000000000000000","5b78eca27fbdea6f26befba8972b295e7814364b":"2000000000000000000000",ec9851bd917270610267d60518b54d3ca2b35b17:"40000000000000000000000",bc9c95dfab97a574cea2aa803b5caa197cef0cff:"420000000000000000000","100b4d0977fcbad4debd5e64a0497aeae5168fab":"314500000000000000000","1b6610fb68bad6ed1cfaa0bbe33a24eb2e96fafb":"152000000000000000000",b4524c95a7860e21840296a616244019421c4aba:"8000000000000000000000","88975a5f1ef2528c300b83c0c607b8e87dd69315":"83500000000000000000","853e6abaf44469c72f151d4e223819aced4e3728":"2000000000000000000000",d604abce4330842e3d396ca73ddb5519ed3ec03f:"163940000000000000000",d209482bb549abc4777bea6d7f650062c9c57a1c:"320880000000000000000","590acbda37290c0d3ec84fc2000d7697f9a4b15d":"500000000000000000000","571950ea2c90c1427d939d61b4f2de4cf1cfbfb0":"20000000000000000000",cb94e76febe208116733e76e805d48d112ec9fca:"1000000000000000000000",fa8e3b1f13433900737daaf1f6299c4887f85b5f:"715000000000000000000","162d76c2e6514a3afb6fe3d3cb93a35c5ae783f1":"2000000000000000000000","4bea288eea42c4955eb9faad2a9faf4783cbddac":"28790618000000000000000",c8ab1a3cf46cb8b064df2e222d39607394203277:"2000000000000000000000","318b2ea5f0aaa879c4d5e548ac9d92a0c67487b7":"200000000000000000000","53c5fe0119e1e848640cee30adea96940f2a5d8b":"21746000000000000000000","0701f9f147ec486856f5e1b71de9f117e99e2105":"173360000000000000000","337cfe1157a5c6912010dd561533791769c2b6a6":"1000000000000000000000",fd60d2b5af3d35f7aaf0c393052e79c4d823d985:"56400000000000000000","0f049a8bdfd761de8ec02cee2829c4005b23c06b":"252000000000000000000","924bce7a853c970bb5ec7bb759baeb9c7410857b":"13700000000000000000","16abb8b021a710bdc78ea53494b20614ff4eafe8":"158000000000000000000","9e7f65a90e8508867bccc914256a1ea574cf07e3":"1240000000000000000000","01d03815c61f416b71a2610a2daba59ff6a6de5b":"9553100000000000000000","3df762049eda8ac6927d904c7af42f94e5519601":"2000000000000000000000","5593c9d4b664730fd93ca60151c25c2eaed93c3b":"200000000000000000000",e023f09b2887612c7c9cf1988e3a3a602b3394c9:"2000000000000000000000","4c13980c32dcf3920b78a4a7903312907c1b123f":"60024000000000000000",a282e969cac9f7a0e1c0cd90f5d0c438ac570da3:"627760000000000000000","3b22da2a0271c8efe102532773636a69b1c17e09":"502000000000000000000","1aa1021f550af158c747668dd13b463160f95a40":"1470000000000000000000",f15178ffc43aa8070ece327e930f809ab1a54f9d:"197600000000000000000",db1293a506e90cad2a59e1b8561f5e66961a6788:"2000000000000000000000","88c361640d6b69373b081ce0c433bd590287d5ec":"50000000000000000000000","3737216ee91f177732fb58fa4097267207e2cf55":"1520000000000000000000",a16d9e3d63986159a800b46837f45e8bb980ee0b:"2030400000000000000000",ec76f12e57a65504033f2c0bce6fc03bd7fa0ac4:"3580000000000000000000",d9f1b26408f0ec67ad1d0d6fe22e8515e1740624:"24000000000000000000","716ba01ead2a91270635f95f25bfaf2dd610ca23":"44750000000000000000000","42a98bf16027ce589c4ed2c95831e2724205064e":"10000000000000000000000","0f88aac9346cb0e7347fba70905475ba8b3e5ece":"10000000000000000000000","2d8c52329f38d2a2fa9cbaf5c583daf1490bb11c":"20000000000000000000","3cea302a472a940379dd398a24eafdbadf88ad79":"3000000000000000000000",a29d5bda74e003474872bd5894b88533ff64c2b5:"10000000000000000000000","2d23766b6f6b05737dad80a419c40eda4d77103e":"3820000000000000000000",b07249e055044a9155359a402937bbd954fe48b6:"100000000000000000000",f1e980c559a1a8e5e50a47f8fffdc773b7e06a54:"30104784000000000000000","8275cd684c3679d5887d03664e338345dc3cdde1":"15800000000000000000",b27c1a24204c1e118d75149dd109311e07c073ab:"3100000000000000000000","451b3699475bed5d7905f8905aa3456f1ed788fc":"2560000000000000000000","31ad4d9946ef09d8e988d946b1227f9141901736":"22880000000000000000000","52b8a9592634f7300b7c5c59a3345b835f01b95c":"2000000000000000000000",b161725fdcedd17952d57b23ef285b7e4b1169e8:"50071000000000000000","74fc5a99c0c5460503a13b0509459da19ce7cd90":"200000000000000000000",d99df7421b9382e42c89b006c7f087702a0757c0:"480000000000000000000","8a4f4a7f52a355ba105fca2072d3065fc8f7944b":"500000000000000000000","12316fc7f178eac22eb2b25aedeadf3d75d00177":"19999999000000000000000",f598db2e09a8a5ee7d720d2b5c43bb126d11ecc2:"200000000000000000000","37b8beac7b1ca38829d61ab552c766f48a10c32f":"400000000000000000000","851dc38adb4593729a76f33a8616dab6f5f59a77":"100000000000000000000",bf4096bc547dbfc4e74809a31c039e7b389d5e17:"3940000000000000000000","98d3731992d1d40e1211c7f735f2189afa0702e0":"8000000000000000000000","0f4073c1b99df60a1549d69789c7318d9403a814":"20000000000000000000000",a430995ddb185b9865dbe62539ad90d22e4b73c2:"10000000000000000000000","898c72dd736558ef9e4be9fdc34fef54d7fc7e08":"1000000000000000000000",f9b617f752edecae3e909fbb911d2f8192f84209:"2674000000000000000000",e1ae029b17e373cde3de5a9152201a14cac4e119:"99968000000000000000",d8e8474292e7a051604ca164c0707783bb2885e8:"13370000000000000000000",f476f2cb7208a32e051fd94ea8662992638287a2:"100000000000000000000","3a84e950ed410e51b7e8801049ab2634b285fea1":"18690000000000000000000","5b7784caea01799ca30227827667ce207c5cbc76":"2000000000000000000000","3af65b3e28895a4a001153391d1e69c31fb9db39":"3940000000000000000000","95fb5afb14c1ef9ab7d179c5c300503fd66a5ee2":"34225000000000000000",a8446c4781a737ac4328b1e15b8a0b3fbb0fd668:"21390500000000000000000","4888fb25cd50dbb9e048f41ca47d78b78a27c7d9":"17300000000000000000000","566c10d638e8b88b47d6e6a414497afdd00600d4":"99960000000000000000",bd47f5f76e3b930fd9485209efa0d4763da07568:"1000000000000000000000","1e1c6351776ac31091397ecf16002d979a1b2d51":"1400000000000000000000",edf603890228d7d5de9309942b5cad4219ef9ad7:"5000000000000000000000","1923cfc68b13ea7e2055803645c1e320156bd88d":"1337000000000000000000","8f8f37d0ad8f335d2a7101b41156b688a81a9cbe":"70000000000000000000","63334fcf1745840e4b094a3bb40bb76f9604c04c":"3978000000000000000000","001762430ea9c3a26e5749afdb70da5f78ddbb8c":"200000000000000000000","512116817ba9aaf843d1507c65a5ea640a7b9eec":"50000000000000000000","2961fb391c61957cb5c9e407dda29338d3b92c80":"999942000000000000000",fc2952b4c49fedd0bc0528a308495e6d6a1c71d6:"2000000000000000000000","13ec812284026e409bc066dfebf9d5a4a2bf801e":"1610000000000000000000",ef463c2679fb279164e20c3d2691358773a0ad95:"2000000000000000000000","3aadf98b61e5c896e7d100a3391d3250225d61df":"234000000000000000000",e8137fc1b2ec7cc7103af921899b4a39e1d959a1:"1490000000000000000000",b1a2b43a7433dd150bb82227ed519cd6b142d382:"2738000000000000000000",c1f39bd35dd9cec337b96f47c677818160df37b7:"20000000000000000000",b587b44a2ca79e4bc1dd8bfdd43a207150f2e7e0:"630400000000000000000","41485612d03446ec4c05e5244e563f1cbae0f197":"970000000000000000000",a12623e629df93096704b16084be2cd89d562da4:"8500000000000000000000","3f2f381491797cc5c0d48296c14fd0cd00cdfa2d":"804000000000000000000","9470cc36594586821821c5c996b6edc83b6d5a32":"24000000000000000000","3605372d93a9010988018f9f315d032ed1880fa1":"500066000000000000000","12632388b2765ee4452b50161d1fffd91ab81f4a":"740000000000000000000","274a3d771a3d709796fbc4d5f48fce2fe38c79d6":"20000000000000000000",d60a52580728520df7546bc1e283291788dbae0c:"999910000000000000000","1ab53a11bcc63ddfaa40a02b9e186496cdbb8aff":"1996800000000000000000",c282e6993fbe7a912ea047153ffd9274270e285b:"139939000000000000000",a291e9c7990d552dd1ae16cebc3fca342cbaf1d1:"20000000000000000000000","5547fdb4ae11953e01292b7807fa9223d0e4606a":"98940000000000000000",bded11612fb5c6da99d1e30e320bc0995466141e:"400000000000000000000",b73b4ff99eb88fd89b0b6d57a9bc338e886fa06a:"32000000000000000000",b1c751786939bba0d671a677a158c6abe7265e46:"10000000000000000000000",e881bbbe69722d81efecaa48d1952a10a2bfac8f:"16000000000000000000000",fe96c4cd381562401aa32a86e65b9d52fa8aee27:"2640000000000000000000","683dba36f7e94f40ea6aea0d79b8f521de55076e":"140000000000000000000","5ac2908b0f398c0df5bac2cb13ca7314fba8fa3d":"199800000000000000000","8914a680a5aec5226d4baaec2e5552b44dd7c874":"100076000000000000000","041170f581de80e58b2a045c8f7c1493b001b7cb":"889800000000000000000","4665e47396c7db97eb2a03d90863d5d4ba319a94":"600000000000000000000",ed4be04a052d7accb3dcce90319dba4020ab2c68:"37547947000000000000000","4b0619d9d8aa313a9531ac7dbe04ca0d6a5ad1b6":"2000000000000000000000",a21442ab05340ade68c915f3c3399b9955f3f7eb:"775000000000000000000","655934da8e744eaa3de34dbbc0894c4eda0b61f2":"200000000000000000000","6038740ae28d66ba93b0be08482b3205a0f7a07b":"316000000000000000000","99924a9816bb7ddf3fec1844828e9ad7d06bf4e6":"1760000000000000000000","6847825bdee8240e28042c83cad642f286a3bddc":"1500000000000000000000",a718aaad59bf395cba2b23e09b02fe0c89816247:"999600000000000000000","2c89f5fdca3d155409b638b98a742e55eb4652b7":"98500000000000000000000","1a7044e2383f8708305b495bd1176b92e7ef043a":"200000000000000000000","282e80a554875a56799fa0a97f5510e795974c4e":"1000000000000000000000",ffb3bcc3196a8c3cb834cec94c34fed35b3e1054:"1340000000000000000000",d135794b149a18e147d16e621a6931f0a40a969a:"20000000000000000000000","6b94615db750656ac38c7e1cf29a9d13677f4e15":"12000000000000000000000",ecbe425e670d39094e20fb5643a9d818eed236de:"5000000000000000000000","511e0efb04ac4e3ff2e6550e498295bfcd56ffd5":"668500000000000000000",ff65511cada259260c1ddc41974ecaecd32d6357:"1760000000000000000000","9ffc5fe06f33f5a480b75aa94eb8556d997a16c0":"20000000000000000000","57df23bebdc65eb75feb9cb2fad1c073692b2baf":"4000000000000000000000","207ef80b5d60b6fbffc51f3a64b8c72036a5abbd":"6685000000000000000000",c573e841fa08174a208b060ccb7b4c0d7697127f:"668500000000000000000","411610b178d5617dfab934d293f512a93e5c10e1":"170000000000000000000","9991614c5baa47dd6c96874645f97add2c3d8380":"1970000000000000000000","2d3480bf0865074a72c7759ee5137b4d70c51ce9":"200000000000000000000","9d40e012f60425a340d82d03a1c757bfabc706fb":"169799000000000000000","47648bed01f3cd3249084e635d14daa9e7ec3c8a":"194000000000000000000",a5ff62222d80c013cec1a0e8850ed4d354dac16d:"207600000000000000000",f80d3619702fa5838c48391859a839fb9ce7160f:"1992800000000000000000","7c0f5e072043c9ee740242197e78cc4b98cdf960":"200000000000000000000",a40aa2bbce0c72b4d0dfffcc42715b2b54b01bfa:"1000000000000000000000","2eeed50471a1a2bf53ee30b1232e6e9d80ef866d":"20000000000000000000","0c2808b951ed9e872d7b32790fcc5994ae41ffdc":"102000000000000000000000","7f06c89d59807fa60bc60136fcf814cbaf2543bd":"10000000000000000000000","8d4b603c5dd4570c34669515fdcc665890840c77":"18200000000000000000",d5e5c135d0c4c3303934711993d0d16ff9e7baa0:"2000000000000000000000","241361559feef80ef137302153bd9ed2f25db3ef":"20000000000000000000000",db63122de7037da4971531fae9af85867886c692:"277000000000000000000","417e4e2688b1fd66d821529e46ed4f42f8b3db3d":"2000000000000000000000","127db1cadf1b771cbd7475e1b272690f558c8565":"14000000000000000000000","48659d8f8c9a2fd44f68daa55d23a608fbe500dc":"2000000000000000000000",b3a64b1176724f5409e1414a3523661baee74b4a:"25610000000000000000",aa14422d6f0ae5a758194ed15780c838d67f1ee1:"28503824000000000000000",a0a0e65204541fca9b2fb282cd95138fae16f809:"10000000000000000000000",d2107b353726c3a2b46566eaa7d9f80b5d21dbe3:"20000000000000000000",e4cafb727fb5c6b70bb27533b8a9ccc9ef6888e1:"300443000000000000000","09f3f601f605441140586ce0656fa24aa5b1d9ae":"1539400000000000000000","87fcbe7c4193ffcb08143779c9bec83fe7fda9fc":"100275000000000000000","03ebc63fda6660a465045e235fbe6e5cf195735f":"141840000000000000000",bdbaf6434d40d6355b1e80e40cc4ab9c68d96116:"100000000000000000000","4e2225a1bb59bc88a2316674d333b9b0afca6655":"155000000000000000000","4dc3da13b2b4afd44f5d0d3189f444d4ddf91b1b":"2000000000000000000000","4ba8e0117fc0b6a3e56b24a3a58fe6cef442ff98":"5640000000000000000000","27146913563aa745e2588430d9348e86ea7c3510":"400000000000000000000","4c5afe40f18ffc48d3a1aec41fc29de179f4d297":"2000000000000000000000","8a810114b2025db9fbb50099a6e0cb9e2efa6bdc":"1910000000000000000000","2dee90a28f192d676a8773232b56f18f239e2fad":"18587970000000000000000","60676e92d18b000509c61de540e6c5ddb676d509":"1200000000000000000000","9bfc659c9c601ea42a6b21b8f17084ec87d70212":"10000000000000000000000","5d5d6e821c6eef96810c83c491468560ef70bfb5":"2000000000000000000000",d5787668c2c5175b01a8ee1ac3ecc9c8b2aba95a:"1999944000000000000000","33b336f5ba5edb7b1ccc7eb1a0d984c1231d0edc":"2000000000000000000000","3abb8adfc604f48d5984811d7f1d52fef6758270":"4475000000000000000000","980a84b686fc31bdc83c221058546a71b11f838a":"779471000000000000000","0b507cf553568daaf65504ae4eaa17a8ea3cdbf5":"2000000000000000000000","896009526a2c7b0c09a6f63a80bdf29d9c87de9c":"3462830000000000000000","9696052138338c722f1140815cf7749d0d3b3a74":"500000000000000000000","3831757eae7557cb8a37a4b10644b63e4d3b3c75":"200000000000000000000","62dc72729024375fc37cbb9c7c2393d10233330f":"2000000000000000000000","44098866a69b68c0b6bc168229b9603587058967":"188000000000000000000","25adb8f96f39492c9bb47c5edc88624e46075697":"26740000000000000000000",fd4de8e3748a289cf7d060517d9d38388db01fb8:"250000000000000000000","6be7595ea0f068489a2701ec4649158ddc43e178":"2000000000000000000000",d402b4f6a099ebe716cb14df4f79c0cd01c6071b:"2000000000000000000000",a07682000b1bcf3002f85c80c0fa2949bd1e82fd:"4000000000000000000000",eb4f00e28336ea09942588eeac921811c522143c:"2000000000000000000000","8f31c7005197ec997a87e69bec48649ab94bb2a5":"4000000000000000000000",e7fd8fd959aed2767ea7fa960ce1db53af802573:"1000000000000000000000",a8ef9ad274436042903e413c3b0c62f5f52ed584:"10000000000000000000000",d83ad260e9a6f432fb6ea28743299b4a09ad658c:"2000000000000000000000",b5c816a8283ca4df68a1a73d63bd80260488df08:"200000000000000000000",d7d3c75920590438b82c3e9515be2eb6ed7a8b1a:"60000000000000000000000",af3cb5965933e7dad883693b9c3e15beb68a4873:"2000000000000000000000","6e899e59a9b41ab7ea41df7517860f2acb59f4fd":"20000000000000000000000","527a8ca1268633a6c939c5de1b929aee92aeac8d":"900000000000000000000","1680cec5021ee93050f8ae127251839e74c1f1fd":"13098657000000000000000",ff7843c7010aa7e61519b762dfe49124a76b0e4e:"933580000000000000000000","140fba58dbc04803d84c2130f01978f9e0c73129":"400000000000000000000","0261ad3a172abf1315f0ffec3270986a8409cb25":"203500000000000000000",ab5a79016176320973e8cd38f6375530022531c0:"1000000000000000000000",fca73eff8771c0103ba3cc1a9c259448c72abf0b:"1000000000000000000000","07d41217badca5e0e60327d845a3464f0f27f84a":"4000000000000000000000","2c1c19114e3d6de27851484b8d2715e50f8a1065":"100000000000000000000",abd21eff954fc6a7de26912a7cbb303a6607804e:"1517000000000000000000",f303d5a816affd97e83d9e4dac2f79072bb0098f:"960000000000000000000","114cfefe50170dd97ae08f0a44544978c599548d":"863000000000000000000","647b85044df2cf0b4ed4882e88819fe22ae5f793":"1000032000000000000000","1b130d6fa51d5c48ec8d1d52dc8a227be8735c8a":"2000000000000000000000","0d9d3f9bc4a4c6efbd59679b69826bc1f63d9916":"600000000000000000000",c765e00476810947816af142d46d2ee7bca8cc4f:"500000000000000000000",b57b04fa23d1203fae061eac4542cb60f3a57637:"191000000000000000000",e192489b85a982c1883246d915b229cb13207f38:"5000000000000000000000","5f483ffb8f680aedf2a38f7833afdcde59b61e4b":"2000000000000000000000",b46d1182e5aacaff0d26b2fcf72f3c9ffbcdd97d:"3139000000000000000000","59c7f785c93160e5807ed34e5e534bc6188647a7":"640000000000000000000","18e4ce47483b53040adbab35172c01ef64506e0c":"9000000000000000000000","296d66b521571a4e4103a7f562c511e6aa732d81":"668500000000000000000",bcd99edc2160f210a05e3a1fa0b0434ced00439b:"2000000000000000000000",f14f0eb86db0eb68753f16918e5d4b807437bd3e:"200000000000000000000","60d5667140d12614b21c8e5e8a33082e32dfcf23":"20000000000000000000000","8ccabf25077f3aa41545344d53be1b2b9c339000":"1695400000000000000000","8cc0d7c016fa7aa950114aa1db094882eda274ea":"159800000000000000000",c71145e529c7a714e67903ee6206e4c3042b6727:"1430000000000000000000",c5e9939334f1252ed2ba26814487dfd2982b3128:"70000000000000000000",f09b3e87f913ddfd57ae8049c731dba9b636dfc3:"608000000000000000000","4349225a62f70aea480a029915a01e5379e64fa5":"2598000000000000000000","666b4f37d55d63b7d056b615bb74c96b3b01991a":"4000000000000000000000","8bd6b1c6d74d010d1008dba6ef835d4430b35c32":"50000000000000000000","7363cd90fbab5bb8c49ac20fc62c398fe6fb744c":"2000000000000000000000",b7479dab5022c4d5dbaaf8de171b4e951dd1a457:"80000000000000000000","5a5468fa5ca226c7532ecf06e1bc1c45225d7ec9":"1910000000000000000000","32a20d028e2c6218b9d95b445c771524636a22ef":"9500000000000000000000","1bd28cd5c78aee51357c95c1ef9235e7c18bc854":"2000000000000000000000","693492a5c51396a482881669ccf6d8d779f00951":"345827000000000000000",bd723b289a7367b6ece2455ed61edb49670ab9c4:"4999995000000000000000","1be3542c3613687465f15a70aeeb81662b65cca8":"2000000000000000000000","5803e68b34da121aef08b602badbafb4d12481ca":"18000000000000000000000","9ac907ee85e6f3e223459992e256a43fa08fa8b2":"10000000000000000000000","833b6a8ec8da408186ac8a7d2a6dd61523e7ce84":"16000000000000000000000","64628c6fb8ec743adbd87ce5e018d531d9210437":"26740000000000000000","566c28e34c3808d9766fe8421ebf4f2b1c4f7d77":"1970000000000000000000","171ad9a04bedc8b861e8ed4bddf5717813b1bb48":"400000000000000000000","4f85bc1fc5cbc9c001e8f1372e07505370d8c71f":"940000000000000000000","6d2f976734b9d0070d1883cf7acab8b3e4920fc1":"10000000000000000000000","357a02c0a9dfe287de447fb67a70ec5b62366647":"26740000000000000000","44a01fb04ac0db2cce5dbe281e1c46e28b39d878":"1999944000000000000000","3630c5e565ceaa8a0f0ffe32875eae2a6ce63c19":"170016000000000000000","334340ee4b9cdc81f850a75116d50ee9b69825bf":"2000000000000000000000",c0afb7d8b79370cfd663c68cc6b9702a37cd9eff:"1000000000000000000000","2016895df32c8ed5478269468423aea7b7fbce50":"20000000000000000000","1e2fe4e4a77d141ff49a0c7fbc95b0a2b283eeeb":"2000000000000000000000","260df8943a8c9a5dba7945327fd7e0837c11ad07":"200000000000000000000","32fbeed6f626fcdfd51acafb730b9eeff612f564":"2000000000000000000000","9bd88068e13075f3a8cac464a5f949d6d818c0f6":"6000000000000000000000",ab4572fbb1d72b575d69ec6ad17333873e8552fc:"1999942000000000000000",e44ea51063405154aae736be2bf1ee3b9be639ae:"4000000000000000000000","617f20894fa70e94a86a49cd74e03238f64d3cd9":"5000057000000000000000","3e914e3018ac00449341c49da71d04dfeeed6221":"4000000000000000000000","590181d445007bd0875aaf061c8d51153900836a":"2000000000000000000000","27987110221a880826adb2e7ab5eca78c6e31aec":"4000000000000000000000","06618e9d5762df62028601a81d4487d6a0ecb80e":"1337000000000000000000","8cc652dd13e7fe14dabbb36d5d320db9ffee8a54":"1790000000000000000000","8973aefd5efaee96095d9e288f6a046c97374b43":"141000000000000000000",dbd51cdf2c3bfacdff106221de2e19ad6d420414:"1760000000000000000000","25697ef20cccaa70d32d376f8272d9c1070c3d78":"200000000000000000000","0726c42e00f45404836eb1e280d073e7059687f5":"1623331000000000000000","5e0785532c7723e4c0af9357d5274b73bdddddde":"25000088000000000000000","38430e931d93be01b4c3ef0dc535f1e0a9610063":"10000000000000000000000","143d536b8b1cb84f56a39e0bc81fd5442bcacce1":"100000000000000000000","5c6d041da7af4487b9dc48e8e1f60766d0a56dbc":"1457800000000000000000",f9bfb59d538afc4874d4f5941b08c9730e38e24b:"40000000000000000000","83dbfd8eda01d0de8e158b16d0935fc2380a5dc7":"600000000000000000000","0e6cd664ad9c1ed64bf98749f40644b626e3792c":"60000000000000000000000",ce2e0da8934699bb1a553e55a0b85c169435bea3:"4999962000000000000000",a39bfee4aec9bd75bd22c6b672898ca9a1e95d32:"10000000000000000000000","1bc44c8761231ba1f11f5faa40fa669a013e12ce":"203586000000000000000","68809af5d532a11c1a4d6e32aac75c4c52b08ead":"10000000000000000000000","80cc21bd99f39005c58fe4a448909220218f66cb":"1000072000000000000000","1080c1d8358a15bc84dac8253c6883319020df2c":"2674000000000000000000","9eaf6a328a4076024efa6b67b48b21eedcc0f0b8":"158000000000000000000","1e7b5e4d1f572becf2c00fc90cb4767b4a6e33d4":"112970000000000000000",acbd185589f7a68a67aa4b1bd65077f8c64e4e21:"200000000000000000000",ff78541756ab2b706e0d70b18adb700fc4f1643d:"43250000000000000000000", -"7f0ec3db804692d4d1ea3245365aab0590075bc4":"4000000000000000000000","4a918032439159bb315b6725b6830dc83697739f":"343800000000000000000",bc1b021a78fde42d9b5226d6ec26e06aa3670090:"80000000000000000000","2f2523cc834f0086052402626296675186a8e582":"16000000000000000000000","9db2e15ca681f4c66048f6f9b7941ed08b1ff506":"4000000000000000000000","20b9a9e6bd8880d9994ae00dd0b9282a0beab816":"500000000000000000000","3bddbc8134f77d55597fc97c26d26698090604eb":"13700000000000000000","80c3a9f695b16db1597286d1b3a8b7696c39fa27":"100000000000000000000","53194d8afa3e883502767edbc30586af33b114d3":"2000000000000000000000",e2efd0a9bc407ece03d67e8ec8e9d283f48d2a49:"12280000000000000000000","1cb450920078aab2317c7db3b38af7dd298b2d41":"340000000000000000000",ca8276c477b4a07b80107b843594189607b53bec:"6000000000000000000000","147f4210ab5804940a0b7db8c14c28396b62a6bf":"2000000000000000000000",d3df3b53cb3b4755de54e180451cc44c9e8ae0aa:"659801000000000000000",f7c708015071d4fb0a3a2a09a45d156396e3349e:"3000000000000000000000",a8cafac32280d021020bf6f2a9782883d7aabe12:"100000000000000000000","399aa6f5d078cb0970882bc9992006f8fbdf3471":"1000000000000000000000","15669180dee29598869b08a721c7d24c4c0ee63f":"1000000000000000000000",bba8ab22d2fedbcfc63f684c08afdf1c175090b5:"99091000000000000000","5e5a441974a83d74c687ebdc633fb1a49e7b1ad7":"3000000000000000000000","98b769cc305cecfb629a00c907069d7ef9bc3a12":"26000000000000000000",c820c711f07705273807aaaa6de44d0e4b48be2e:"155000000000000000000","12aa7d86ddfbad301692feac8a08f841cb215c37":"137000000000000000000","6ff5d361b52ad0b68b1588607ec304ae5665fc98":"1940000000000000000000","2382a9d48ec83ea3652890fd0ee79c907b5b2dc1":"133700000000000000000",b2a144b1ea67b9510f2267f9da39d3f93de26642:"2000000000000000000000",b3e20eb4de18bd060221689894bee5aeb25351ee:"73535000000000000000","101a0a64f9afcc448a8a130d4dfcbee89537d854":"15200000000000000000000","1b826fb3c012b0d159e294ba5b8a499ff3c0e03c":"2000000000000000000000",aafb7b013aa1f8541c7e327bf650adbd194c208f:"1358000000000000000000","96eb523e832f500a017de13ec27f5d366c560eff":"307600000000000000000",c7bf17c4c11f98941f507e77084fffbd2dbd3db5:"1000000000000000000000","840ec83ea93621f034e7bb3762bb8e29ded4c479":"2500000000000000000000","0e9c511864a177f49be78202773f60489fe04e52":"6000000000000000000000",f6f1a44309051c6b25e47dff909b179bb9ab591c:"1940000000000000000000","63fe6bcc4b8a9850abbe75803730c932251f145b":"18200000000000000000",f88b58db37420b464c0be88b45ee2b95290f8cfa:"40000000000000000000","9d4d321177256ebd9afbda304135d517c3dc5693":"616000000000000000000","8c1fbe5f0aea359c5aa1fa08c8895412ca8e05a6":"1000000000000000000000",cb0dd7cf4e5d8661f6028943a4b9b75c914436a7:"120000000000000000000000",a3979a92760a135adf69d72f75e167755f1cb8c3:"100000000000000000000",ca22cda3606da5cad013b8074706d7e9e721a50c:"6816200000000000000000","157559adc55764cc6df79323092534e3d6645a66":"6000000000000000000000","4f52ad6170d25b2a2e850eadbb52413ff2303e7f":"3040000000000000000000",eed28c3f068e094a304b853c950a6809ebcb03e0:"17300000000000000000000","2e47f287f498233713850d3126823cc67dcee255":"14600000000000000000","6c359e58a13d4578a9338e335c67e7639f5fb4d7":"218000000000000000000","4968a2cedb457555a139295aea28776e54003c87":"10092310000000000000000","4041374b0feef4792e4b33691fb86897a4ff560c":"365000000000000000000","83e48055327c28b5936fd9f4447e73bdb2dd3376":"2674000000000000000000","32b7feebc5c59bf65e861c4c0be42a7611a5541a":"2212000000000000000000","21a6db6527467bc6dad54bc16e9fe2953b6794ed":"14000000000000000000000",e8ead1bb90ccc3aea2b0dcc5b58056554655d1d5:"7760000000000000000000","7a94b19992ceb8ce63bc92ee4b5aded10c4d9725":"16770000000000000000000","90e93e4dc17121487952333614002be42356498e":"1910000000000000000000",aab00abf5828d7ebf26b47ceaccdb8ba03325166:"10000000000000000000000","0a9ab2638b1cfd654d25dab018a0aebddf85fd55":"21801000000000000000",b12ed07b8a38ad5506363fc07a0b6d799936bdaf:"10000000000000000000000",f4a9d00cefa97b7a58ef9417fc6267a5069039ee:"21800000000000000000","04a1cada1cc751082ff8da928e3cfa000820a9e9":"40000000000000000000","9018cc1f48d2308e252ab6089fb99a7c1d569410":"200000000000000000000","895d694e880b13ccd0848a86c5ce411f88476bbf":"199955000000000000000","40a7f72867a7dc86770b162b7557a434ed50cce9":"1000000000000000000000","467ea10445827ef1e502daf76b928a209e0d4032":"2000000000000000000000","7553aa23b68aa5f57e135fe39fdc235eaca8c98c":"1000000000000000000000","31b43b015d0081643c6cda46a7073a6dfdbca825":"50019600000000000000000",d82fd9fdf6996bedad2843159c06f37e0924337d:"1688800000000000000000","24a4eb36a7e498c36f99975c1a8d729fd6b305d7":"258000000000000000000","91d66ea6288faa4b3d606c2aa45c7b6b8a252739":"2000000000000000000000","83a402438e0519773d5448326bfb61f8b20cf52d":"1520000000000000000000",c2fafdd30acb6d6706e9293cb02641f9edbe07b5:"1494224000000000000000","79dba256472db4e058f2e4cdc3ea4e8a42773833":"1460000000000000000000","498abdeb14c26b7b7234d70fceaef361a76dff72":"3000000000000000000000","7b73242d75ca9ad558d650290df17692d54cd8b8":"2000200000000000000000","6ec3659571b11f889dd439bcd4d67510a25be57e":"123000000000000000000",ab098633eeee0ccefdf632f9575456f6dd80fc86:"200000000000000000000000",f4a51fce4a1d5b94b0718389ba4e7814139ca738:"300000000000000000000","8f561b41b209f248c8a99f858788376250609cf3":"1700000000000000000000","05d0f4d728ebe82e84bf597515ad41b60bf28b39":"4200000000000000000000",dfdf43393c649caebe1bb18059decb39f09fb4e8:"400000000000000000000","0089508679abf8c71bf6781687120e3e6a84584d":"1800000000000000000000","80907f593148b57c46c177e23d25abc4aae18361":"100000000000000000000","94fcceadfe5c109c5eaeaf462d43873142c88e22":"4800000000000000000000",e89249738b7eced7cb666a663c49cbf6de8343ea:"2000000000000000000000","23c99ba087448e19c9701df66e0cab52368331fa":"2000000000000000000000",a68e0c30cba3bc5a883e540320f999c7cd558e5c:"1799869000000000000000","88888a57bd9687cbf950aeeacf9740dcc4d1ef59":"1820000000000000000000",e9b36fe9b51412ddca1a521d6e94bc901213dda8:"10000000000000000000000",a9145046fa3628cf5fd4c613927be531e6db1fdd:"112000000000000000000",e82c58c579431b673546b53a86459acaf1de9b93:"1000000000000000000000",bd6a474d66345bcdd707594adb63b30c7822af54:"4000000000000000000000","6a6159074ab573e0ee581f0f3df2d6a594629b74":"310000000000000000000","2e7f465520ec35cc23d68e75651bb6689544a196":"1050049000000000000000",ac6d02e9a46b379fac4ac9b1d7b5d47bc850ce16:"1760000000000000000000",bd59094e074f8d79142ab1489f148e32151f2089:"20000000000000000000","0ba6e46af25a13f57169255a34a4dac7ce12be04":"500000000000000000000","35145f620397c69cb8e00962961f0f4886643989":"6000000000000000000000",d84b922f7841fc5774f00e14604ae0df42c8551e:"4011000000000000000000","44232ff66ddad1fd841266380036afd7cf7d7f42":"200000000000000000000","516954025fca2608f47da81c215eedfd844a09ff":"382000000000000000000",e5aa0b833bb916dc19a8dd683f0ede241d988eba:"3000000000000000000000","80ea1acc136eca4b68c842a95adf6b7fee7eb8a2":"4000000000000000000000","98a0e54c6d9dc8be96276cebf4fec460f6235d85":"1969803000000000000000","91620f3eb304e813d28b0297556d65dc4e5de5aa":"3820000000000000000000","7bb984c6dbb9e279966afafda59c01d02627c804":"8050000000000000000000","41f489a1ec747bc29c3e5f9d8db97877d4d1b4e9":"133700000000000000000","8dbc3e6cb433e194f40f82b40faadb1f8b856116":"1910000000000000000000","889da40fb1b60f9ea9bd7a453e584cf7b1b4d9f7":"40000000000000000000",debbdd831e0f20ae6e378252decdf92f7cf0c658:"2000000000000000000000",a22ade0ddb5c6ef8d0cd8de94d82b11082cb2e91:"1020000000000000000000","823219a25976bb2aa4af8bad41ac3526b493361f":"2000000000000000000000","6d39a9e98f81f769d73aad2cead276ac1387babe":"394000000000000000000","751abcb6cc033059911815c96fd191360ab0442d":"8000000000000000000000","64d80c3b8ba68282290b75e65d8978a15a87782c":"1970000000000000000000","6ba8f7e25fc2d871618e24e40184199137f9f6aa":"400020000000000000000","25a74c2ac75dc8baa8b31a9c7cb4b7829b2456da":"2000000000000000000000","0f7b61c59b016322e8226cafaee9d9e76d50a1b3":"4000000000000000000000","7526e482529f0a14eec98871dddd0e721b0cd9a2":"20000000000000000000","071dd90d14d41f4ff7c413c24238d3359cd61a07":"36400000000000000000000",a986762f7a4f294f2e0b173279ad2c81a2223458:"20000000000000000000",e667f652f957c28c0e66d0b63417c80c8c9db878:"601650000000000000000","7b98e23cb96beee80a168069ebba8f20edd55ccf":"214500000000000000000","2d8e5bb8d3521695c77e7c834e0291bfacee7408":"1970000000000000000000",f23d01589eb12d439f7448ff54307529f191858d:"2000000000000000000000",abd9605b3e91acfd777830d16463478ae0fc7720:"133700000000000000000",eabb90d37989aab31feae547e0e6f3999ce6a35d:"2000000000000000000000","0abfb39b11486d79572866195ba26c630b6784db":"121500000000000000000000",d56a144d7af0ae8df649abae535a15983aa04d02:"5000000000000000000000","998c1f93bcdb6ff23c10d0dc924728b73be2ff9f":"1002750000000000000000",bc62b3096a91e7dc11a1592a293dd2542150d751:"1000000000000000000000","0c8f66c6017bce5b20347204b602b743bad78d60":"2000000000000000000000","4c5b3dc0e2b9360f91289b1fe13ce12c0fbda3e1":"2000000000000000000000",b44605552471a6eee4daab71ff3bb41326d473e0:"839200000000000000000",fc3d226bb36a58f526568857b0bb12d109ec9301:"2000000000000000000000",adc8228ef928e18b2a807d00fb3c6c79cd1d9e96:"22800000000000000000","9df32a501c0b781c0281022f42a1293ffd7b892a":"9000000000000000000000",e7da609d40cde80f00ce5b4ffb6aa9d0b03494fc:"1000000000000000000000","9b64d3cd8d2b73f66841b5c46bb695b88a9ab75d":"20769000000000000000","8e9c08f738661f9676236eff82ba6261dd3f4822":"100000000000000000000",deb97254474c0d2f5a7970dcdb2f52fb1098b896:"1000000000000000000000",b4256273962bf631d014555cc1da0dcc31616b49:"2000000000000000000000","23abd9e93e7957e5b636be6579051c15e5ce0b0e":"17188400000000000000000","382591e7217b435e8e884cdbf415fe377a6fe29e":"8022000000000000000000",f17adb740f45cbbde3094e7e13716f8103f563bd:"2000000000000000000000","61ed5596c697207f3d55b2a51aa7d50f07fa09e8":"2000000000000000000000","788e809741a3b14a22a4b1d937c82cfea489eebe":"7000000000000000000000","992646ac1acaabf5ddaba8f9429aa6a94e7496a7":"1000110000000000000000","51296f5044270d17707646129c86aad1645eadc1":"1337133000000000000000","6ee8aad7e0a065d8852d7c3b9a6e5fdc4bf50c00":"20000000000000000000","30db6b9b107e62102f434a9dd0960c2021f5ce4c":"599742000000000000000","63fc93001305adfbc9b85d29d9291a05f8f1410b":"1000000000000000000000",df6ed6006a6abe886ed33d95a4de28fc12183927:"910000000000000000000","4745ab181a36aa8cbf2289d0c45165bc7ebe2381":"39400000000000000000","7bb0fdf5a663b5fba28d9c902af0c811e252f298":"200000000000000000000",e0ff0bd9154439c4a5b7233e291d7d868af53f33:"396110000000000000000","09261f9acb451c3788844f0c1451a35bad5098e3":"8664000000000000000000","2813d263fc5ff2479e970595d6b6b560f8d6d6d1":"2000000000000000000000","2cd19694d1926a0fa9189edebafc671cf1b2caa5":"1000000000000000000000","05336e9a722728d963e7a1cf2759fd0274530fca":"915583000000000000000",e5b7af146986c0ff8f85d22e6cc334077d84e824:"2000000000000000000000","3e4fbd661015f6461ed6735cefef01f31445de3a":"16200000000000000000000","4f5df5b94357de948604c51b7893cddf6076baad":"3760000000000000000000","9567a0de811de6ff095b7ee64e7f1b83c2615b80":"267400000000000000000","955db3b74360b9a268677e73cea821668af6face":"30000000000000000000000","3e040d40cb80ba0125f3b15fdefcc83f3005da1b":"1038000000000000000000","43f470ed659e2991c375957e5ddec5bd1d382231":"100000000000000000000","047f9bf1529daf87d407175e6f171b5e59e9ff3e":"650000000000000000000","15e3b584056b62c973cf5eb096f1733e54c15c91":"936702000000000000000",c03de42a109b657a64e92224c08dc1275e80d9b2:"20000000000000000000",e4fc13cfcbac1b17ce7783acd423a845943f6b3a:"20000000000000000000","65ff874fafce4da318d6c93d57e2c38a0d73e820":"1000160000000000000000","8b997dbc078ad02961355da0a159f2927ed43d64":"197000000000000000000","2f5080b83f7e2dc0a1dd11b092ad042bff788f4c":"3338355000000000000000","1b3920d001c43e72b24e7ca46f0fd6e0c20a5ff2":"2000000000000000000000","5ade77fd81c25c0af713b10702768c1eb2f975e7":"20000000000000000000",acaaddcbf286cb0e215dda55598f7ff0f4ada5c6:"1000000000000000000000","64e0217a5b38aa40583625967fa9883690388b6f":"200000000000000000000",ae648155a658370f929be384f7e001047e49dd46:"13561000000000000000000",f7c1b443968b117b5dd9b755572fcd39ca5ec04b:"456082000000000000000",de027efbb38503226ed871099cb30bdb02af1335:"1000000000000000000000","49cf1e54be363106b920729d2d0ba46f0867989a":"268000000000000000000",e7f4d7fe6f561f7fa1da3005fd365451ad89df89:"200000000000000000000",b036916bdacf94b69e5a8a65602975eb026104dd:"20000000000000000000",e923c06177b3427ea448c0a6ff019b54cc548d95:"36281000000000000000",ad927e03d1599a78ca2bf0cad2a183dceb71eac0:"1970000000000000000000",ef39ca9173df15531d73e6b72a684b51ba0f2bb4:"1598000000000000000000","6443b8ae639de91cf73c5ae763eeeed3ddbb9253":"2000000000000000000000","8026435aac728d497b19b3e7e57c28c563954f2b":"1730000000000000000000",ed327a14d5cfadd98103fc0999718d7ed70528ea:"1440000000000000000000","38a3dccf2fcfe0c91a2624bd0cbf88ee4a076c33":"2000000000000000000000",f0b1f9e27832c6de6914d70afc238c749995ace4:"2000000000000000000000","770d98d31b4353fceee8560c4ccf803e88c0c4e0":"600000000000000000000",ba1f0e03cb9aa021f4dcebfa94e5c889c9c7bc9e:"32200000000000000000000","233842b1d0692fd11140cf5acda4bf9630bae5f8":"2000000000000000000000",b5dd50a15da34968890a53b4f13fe1af081baaaa:"4000000000000000000000","72072a0ef1cff3d567cdd260e708ddc11cbc9a31":"100000000000000000000","81a88196fac5f23c3e12a69dec4b880eb7d97310":"2000000000000000000000","6c63f84556d290bfcd99e434ee9997bfd779577a":"2000000000000000000000","5f167aa242bc4c189adecb3ac4a7c452cf192fcf":"1999980000000000000000","445cb8de5e3df520b499efc980f52bff40f55c76":"2000000000000000000000",aec27ce2133e82d052520afb5c576d9f7eb93ed2:"65232380000000000000000","07dc2bf83bc6af19a842ffea661af5b41b67fda1":"1500000000000000000000",febd48d0ffdbd5656cd5e686363a61145228f279:"2800000000000000000000",a86db07d9f812f4796622d40e03d135874a88a74:"20000000000000000000","5413c97ffa4a6e2a7bba8961dc9fce8530a787d7":"1000000000000000000000",e2ff9ee4b6ecc14141cc74ca52a9e7a2ee14d908:"1400000000000000000000","2e8eb30a716e5fe15c74233e039bfb1106e81d12":"100000000000000000000",fd88d114220f081cb3d5e15be8152ab07366576a:"300000000000000000000",e408fceaa1b98f3c640f48fcba39f056066d6308:"10000000000000000000000","057dd29f2d19aa3da42327ea50bce86ff5c911d9":"4000000000000000000000",ed1065dbcf9d73c04ffc7908870d881468c1e132:"2000000000000000000000",bbc9d8112e5beb02dd29a2257b1fe69b3536a945:"2000000000000000000000","79c1be19711f73bee4e6316ae7549459aacea2e0":"400000000000000000000","1bcf3441a866bdbe963009ce33c81cbb0261b02c":"182000000000000000000",e2e26e4e1dcf30d048cc6ecf9d51ec1205a4e926:"4000000000000000000000","77701e2c493da47c1b58f421b5495dee45bea39b":"6068279000000000000000","37a05aceb9395c8635a39a7c5d266ae610d10bf2":"30000000000000000000000",c6355ec4768c70a49af69513cd83a5bca7e3b9cd:"6000000000000000000000",e3c0c128327a9ad80148139e269773428e638cb0:"2000000000000000000000",f7f4898c4c526d955f21f055cb6e47b915e51964:"2288000000000000000000","29824e94cc4348bc963279dcdf47391715324cd3":"1940000000000000000000",eaa45cea02d87d2cc8fda9434e2d985bd4031584:"1920750000000000000000",e08b9aba6bd9d28bc2056779d2fbf0f2855a3d9d:"2000000000000000000000","87c498170934b8233d1ad1e769317d5c475f2f40":"1015200000000000000000","352d29a26e8a41818181746467f582e6e84012e0":"6000000000000000000000","403220600a36f73f24e190d1edb2d61be3f41354":"304000000000000000000","0a48296f7631708c95d2b74975bc4ab88ac1392a":"5000000000000000000000",ffe0e997f1977a615f5a315af413fd4869343ba0:"100076000000000000000",ca66b2280fa282c5b67631ce552b62ee55ad8474:"1969488000000000000000","2b6ed29a95753c3ad948348e3e7b1a251080ffb9":"250000000000000000000000","492e70f04d18408cb41e25603730506b35a2876b":"39400000000000000000","0e6baaa3deb989f289620076668618e9ac332865":"200000000000000000000",b753a75f9ed10b21643a0a3dc0517ac96b1a4068:"401800000000000000000","3ad915d550b723415620f5a9b5b88a85f382f035":"1000000000000000000000",c992be59c6721caf4e028f9e8f05c25c55515bd4:"20000000000000000000","02b643d6fabd437a851accbe79abb7fde126dccf":"7200000000000000000000","88797e58675ed5cc4c19980783dbd0c956085153":"2000000000000000000000",ac142eda1157b9a9a64390df7e6ae694fac98905:"200000000000000000000","656579daedd29370d9b737ee3f5cd9d84bc2b342":"1430000000000000000000","9bb9b02a26bfe1ccc3f0c6219e261c397fc5ca78":"1337000000000000000000",bee8d0b008421954f92d000d390fb8f8e658eaee:"1000000000000000000000","7989d09f3826c3e5af8c752a8115723a84d80970":"415554000000000000000","7cd5d81eab37e11e6276a3a1091251607e0d7e38":"62856000000000000000","6ce1b0f6adc47051e8ab38b39edb4186b03babcc":"1207800000000000000000",abfcf5f25091ce57875fc674dcf104e2a73dd2f2:"19700000000000000000","1c3ef05dae9dcbd489f3024408669de244c52a02":"20000000000000000000000",cfa8b37127149bdbfee25c34d878510951ea10eb:"2000000000000000000000","74863acec75d03d53e860e64002f2c165e538377":"1000000000000000000000","59b9e733cba4be00429b4bd9dfa64732053a7d55":"20000000000000000000",aeadfcd0978edad74a32bd01a0a51d37f246e661:"260000000000000000000","08090876baadfee65c3d363ba55312748cfa873d":"1700170000000000000000",e589fa76984db5ec4004b46ee8a59492c30744ce:"2800000000000000000000","3485361ee6bf06ef6508ccd23d94641f814d3e2f":"2000000000000000000000","5cb731160d2e8965670bde925d9de5510935347d":"40000000000000000000","8ef4d8a2c23c5279187b64e96f741404085385f3":"299598000000000000000",e246683cc99db7c4a52bcbacaab0b32f6bfc93d7:"2000000000000000000000","7d273e637ef1eac481119413b91c989dc5eac122":"500000000000000000000","6efba8fb2ac5b6730729a972ec224426a287c3ad":"283152000000000000000","0773eeacc050f74720b4a1bd57895b1cceeb495d":"10000000000000000000000","88a122a2382c523931fb51a0ccad3beb5b7259c3":"2000000000000000000000",b0b779b94bfa3c2e1f587bcc9c7e21789222378f:"1550000000000000000000","86f95c5b11a293940e35c0b898d8b75f08aab06d":"29605000000000000000000",cf2288ef4ebf88e86db13d8a0e0bf52a056582c3:"2533000000000000000000","71ea5b11ad8d29b1a4cb67bf58ca6c9f9c338c16":"1600000000000000000000","9917d68d4af341d651e7f0075c6de6d7144e7409":"5660000000000000000000","1e5800227d4dcf75e30f5595c5bed3f72e341e3b":"248300000000000000000","123759f333e13e3069e2034b4f05398918119d36":"20000000000000000000000",f798d16da4e460c460cd485fae0fa0599708eb82:"1000000000000000000000","864bec5069f855a4fd5892a6c4491db07c88ff7c":"1000000000000000000000",fa283299603d8758e8cab082125d2c8f7d445429:"6415633000000000000000",c811c2e9aa1ac3462eba5e88fcb5120e9f6e2ca2:"1400140000000000000000","61547d376e5369bcf978fc162c3c56ae453547e8":"200000000000000000000","0d747ee5969bf79d57381d6fe3a2406cd0d8ce27":"100000000000000000000000",f8962b75db5d24c7e8b7cef1068c3e67cebb30a5:"280000000000000000000","35bf6688522f35467a7f75302314c02ba176800e":"17400000000000000000000","05cb6c3b0072d3116761b532b218443b53e8f6c5":"141722000000000000000000","91c80caa081b38351d2a0e0e00f80a34e56474c1":"1000000000000000000000",d75a502a5b677287470f65c5aa51b87c10150572:"907400000000000000000","3e194b4ecef8bb711ea2ff24fec4e87bd032f7d1":"2575465000000000000000","736bf1402c83800f893e583192582a134eb532e9":"9999996000000000000000",c2cb1ada5da9a0423873814793f16144ef36b2f3:"1334326000000000000000",efcce06bd6089d0e458ef561f5a689480afe7000:"600000000000000000000",bfe6bcb0f0c07852643324aa5df5fd6225abc3ca:"74500000000000000000","9d799e943e306ba2e5b99c8a6858cbb52c0cf735":"300000000000000000000",f45b1dcb2e41dc27ffa024daadf619c11175c087:"19700000000000000000","08e38ee0ce48c9ca645c1019f73b5355581c56e6":"1600000000000000000000","2cb4c3c16bb1c55e7c6b7a19b127a1ac9390cc09":"3397053000000000000000",bdc02cd4330c93d6fbda4f6db2a85df22f43c233:"2000000000000000000000",acec91ef6941cf630ba9a3e787a012f4a2d91dd4:"80000000000000000000000","27ac073be79ce657a93aa693ee43bf0fa41fef04":"50000000000000000000000","22fe884d9037291b4d52e6285ae68dea0be9ffb5":"2000000000000000000000",c3107a9af3322d5238df0132419131629539577d:"492650000000000000000",b5cac5ed03477d390bb267d4ebd46101fbc2c3da:"197000000000000000000","58fb947364e7695765361ebb1e801ffb8b95e6d0":"200000000000000000000","32860997d730b2d83b73241a25d3667d51c908ef":"499938000000000000000",c79d5062c796dd7761f1f13e558d73a59f82f38b:"8000000000000000000000",fa142fe47eda97e6503b386b18a2bedd73ccb5b1:"850080000000000000000","6ca5de00817de0cedce5fd000128dede12648b3c":"20000000000000000000","214b743955a512de6e0d886a8cbd0282bee6d2a2":"2000000000000000000000",ede79ae1ff4f1606d59270216fa46ab2ddd4ecaa:"146000000000000000000","528101ce46b720a2214dcdae6618a53177ffa377":"508876000000000000000",b5870ce342d43343333673038b4764a46e925f3e:"1000000000000000000000","843bd3502f45f8bc4da370b323bdac3fcf5f19a6":"1476000000000000000000","5067f4549afbfe884c59cbc12b96934923d45db0":"1000000000000000000000","6f2a42e6e033d01061131929f7a6ee1538021e52":"2000000000000000000000",e9e1f7cb00a110edd0ebf8b377ef8a7bb856117f:"200000000000000000000",a387ecde0ee4c8079499fd8e03473bd88ad7522a:"1970000000000000000000","6dff90e6dc359d2590882b1483edbcf887c0e423":"1000000000000000000000","22e512149a18d369b73c71efa43e86c9edabaf1d":"1455000000000000000000",a3203095edb7028e6871ce0a84f548459f83300a:"4000000000000000000000","93b4bf3fdff6de3f4e56ba6d7799dc4b93a6548f":"19100000000000000000","8c75956e8fed50f5a7dd7cfd27da200f6746aea6":"1000000000000000000000",afc8ebe8988bd4105acc4c018e546a1e8f9c7888:"500000000000000000000",bf9acd4445d9c9554689cabbbab18800ff1741c2:"1000000000000000000000","603f2fab7afb6e017b94766069a4b43b38964923":"1656954000000000000000",a1f765c44fe45f790677944844be4f2d42165fbd:"3687750000000000000000","4dc9d5bb4b19cecd94f19ec25d200ea72f25d7ed":"2000000000000000000000","48f60a35484fe7792bcc8a7b6393d0dda1f6b717":"3600000000000000000000","588ed990a2aff44a94105d58c305257735c868ac":"16100000000000000000000","710be8fd5e2918468be2aabea80d828435d79612":"17600000000000000000","03ea6d26d080e57aee3926b18e8ed73a4e5b2826":"200000000000000000000","20824ba1dbebbef9846ef3d0f6c1b017e6912ec4":"7170194000000000000000",f7500c166f8bea2f82347606e5024be9e4f4ce99:"20000000000000000000","9d369165fb70b81a3a765f188fd60cbe5e7b0968":"2000000000000000000000","6fddbd9bca66e28765c2162c8433548c1052ed11":"82720000000000000000000","8b81156e698639943c01a75272ad3d35851ab282":"344946000000000000000","75804aac64b4199083982902994d9c5ed8828f11":"557800000000000000000",d6e8e97ae9839b9ee507eedb28edfb7477031439:"2000000000000000000000","6c808cabb8ff5fbb6312d9c8e84af8cf12ef0875":"4000086000000000000000",afa539586e4719174a3b46b9b3e663a7d1b5b987:"5000000000000000000000",f8a065f287d91d77cd626af38ffa220d9b552a2b:"1910000000000000000000","30e60900cacc7203f314dc604347255167fc2a0f":"2000000000000000000000","796f87ba617a2930b1670be92ed1281fb0b346e1":"128400000000000000000",f114ff0d0f24eff896edde5471dea484824a99b3:"13700000000000000000","0b80fc70282cbdd5fde35bf78984db3bdb120188":"1000160000000000000000",da7ad025ebde25d22243cb830ea1d3f64a566323:"500000000000000000000","65a52141f56bef98991724c6e7053381da8b5925":"60140000000000000000",bbc8eaff637e94fcc58d913c7770c88f9b479277:"200000000000000000000","0469e8c440450b0e512626fe817e6754a8152830":"2000000000000000000000","0727be0a2a00212048b5520fbefb953ebc9d54a0":"10000000000000000000000","7d858493f07415e0912d05793c972113eae8ae88":"1818000000000000000000","7091303116d5f2389b23238b4d656a8596d984d3":"1094014000000000000000","3702e704cc21617439ad4ea27a5714f2fda1e932":"1000000000000000000000",b87de1bcd29269d521b8761cc39cfb4319d2ead5:"1000000000000000000000",f639ac31da9f67271bd10402b7654e5ce763bd47:"399996000000000000000",e7735ec76518fc6aa92da8715a9ee3f625788f13:"1997803000000000000000","51277fe7c81eebd252a03df69a6b9f326e272207":"59965000000000000000","3b8098533f7d9bdcd307dbb23e1777ca18418936":"2000000000000000000000","2cba6d5d0dc204ea8a25ada2e26f5675bd5f2fdc":"1330755000000000000000","5c3c1c645b917543113b3e6c1c054da1fe742b9a":"800000000000000000000","5ecdbaeab9106ffe5d7b519696609a05baeb85ad":"20000000000000000000","45a820a0672f17dc74a08112bc643fd1167736c3":"199943000000000000000",beef94213879e02622142bea61290978939a60d7:"5728109000000000000000","6cd212aee04e013f3d2abad2a023606bfb5c6ac7":"1999944000000000000000","92698e345378c62d8eda184d94366a144b0c105b":"1400000000000000000000","2d5b42fc59ebda0dfd66ae914bc28c1b0a6ef83a":"206764195000000000000000",b7a6791c16eb4e2162f14b6537a02b3d63bfc602:"780700000000000000000",fa105f1a11b6e4b1f56012a27922e2ac2da4812f:"9550000000000000000000","2306df931a940d58c01665fa4d0800802c02edfe":"1000000000000000000000",f37bf78c5875154711cb640d37ea6d28cfcb1259:"200000000000000000000","66201bd227ae6dc6bdfed5fbde811fecfe5e9dd9":"594808000000000000000","2bafbf9e9ed2c219f7f2791374e7d05cb06777e7":"220000000000000000000","8e9b35ad4a0a86f758446fffde34269d940ceacd":"4000000000000000000000","1b43232ccd4880d6f46fa751a96cd82473315841":"80000000000000000000","6eefdc850e87b715c72791773c0316c3559b58a4":"4000000000000000000000",f2c03e2a38998c21648760f1e5ae7ea3077d8522:"2642456000000000000000","0625d06056968b002206ff91980140242bfaa499":"1000000000000000000000","6158e107c5eb54cb7604e0cd8dc1e07500d91c3c":"50000000000000000000","02477212ffdd75e5155651b76506b1646671a1eb":"1760000000000000000000",fa44a855e404c86d0ca8ef3324251dfb349c539e:"1552000000000000000000","49897fe932bbb3154c95d3bce6d93b6d732904dd":"4000000000000000000000","9b6641b13e172fc072ca4b8327a3bc28a15b66a9":"120000000000000000000",a46b4387fb4dcce011e76e4d73547d4481e09be5:"1337000000000000000000","72bb27cb99f3e2c2cf90a98f707d30e4a201a071":"1640000000000000000000",b6bfe1c3ef94e1846fb9e3acfe9b50c3e9069233:"1999944000000000000000",e6cb3f3124c9c9cc3834b1274bc3336456a38bac:"427382000000000000000",fcbc5c71ace79741450b012cf6b8d3f17db68a70:"9550000000000000000000","15dbb48c98309764f99ced3692dcca35ee306bac":"150000000000000000000000","2e10910ba6e0bc17e055556614cb87090f4d7e5b":"200000000000000000000",e5fbe34984b637196f331c679d0c0c47d83410e1:"2000050000000000000000","6d120f0caae44fd94bcafe55e2e279ef96ba5c7a":"4000000000000000000000",aa5afcfd8309c2df9d15be5e6a504e7d706624c5:"5846763000000000000000","37959c20b7e9931d72f5a8ae869dafddad3b6d5c":"200000000000000000000",b041310fe9eed6864cedd4bee58df88eb4ed3cac:"10000000000000000000000","986df47e76e4d7a789cdee913cc9831650936c9d":"5000000000000000000000","35aaa0465d1c260c420fa30e2629869fb6559207":"704976000000000000000","7f655c6789eddf455cb4b88099720639389eebac":"6000000000000000000000","9e3eb509278fe0dcd8e0bbe78a194e06b6803943":"940000000000000000000","3e9410d3b9a87ed5e451a6b91bb8923fe90fb2b5":"200000000000000000000","9e960dcd03d5ba99cb115d17ff4c09248ad4d0be":"200000000000000000000",f057aa66ca767ede124a1c5b9cc5fc94ef0b0137:"2077730000000000000000",f38a6ca80168537e974d14e1c3d13990a44c2c1b:"6000000000000000000000","229e430de2b74f442651ddcdb70176bc054cad54":"13545000000000000000","27bf9f44ba7d05c33540c3a53bb02cbbffe7c3c6":"2000000000000000000000","10389858b800e8c0ec32f51ed61a355946cc409b":"200000000000000000000",fd2929271e9d2095a264767e7b0df52ea0d1d400:"3000040000000000000000","44250d476e062484e9080a3967bf3a4a732ad73f":"20000000000000000000","0c67033dd8ee7f0c8ae534d42a51f7d9d4f7978f":"200000000000000000000",e083d34863e0e17f926b7928edff317e998e9c4b:"400000000000000000000","7f7192c0df1c7db6d9ed65d71184d8e4155a17ba":"79800000000000000000","51e7b55c2f9820eed73884361b5066a59b6f45c6":"2000000000000000000000","4fa983bb5e3073a8edb557effeb4f9fb1d60ef86":"1599800000000000000000","5a5ee8e9bb0e8ab2fecb4b33d29478be50bbd44b":"776000000000000000000","1f3959fc291110e88232c36b7667fc78a379613f":"18200000000000000000","2d7d5c40ddafc450b04a74a4dabc2bb5d665002e":"2000000000000000000000","5215183b8f80a9bc03d26ce91207832a0d39e620":"1000000000000000000000","5607590059a9fec1881149a44b36949aef85d560":"2000000000000000000000",f7c50f922ad16b61c6d1baa045ed816815bac48f:"12566370000000000000000",da10978a39a46ff0bb848cf65dd9c77509a6d70e:"2000000000000000000000",a7dcbba9b9bf6762c145416c506a71e3b497209c:"1999944000000000000000","54e01283cc8b384538dd646770b357c960d6cacd":"5000000000000000000000","78cf8336b328db3d87813a472b9e89b75e0cf3bc":"1000000000000000000000",ba24fc436753a739db2c8d40e6d4d04c528e86fa:"13000000000000000000000",dfe929a61c1b38eddbe82c25c2d6753cb1e12d68:"402500000000000000000","2b49fba29830360fcdb6da23bbfea5c0bbac5281":"20000000000000000000","76becae4a31d36f3cb577f2a43594fb1abc1bb96":"24860000000000000000000",e0cf698a053327ebd16b7d7700092fe2e8542446:"95275000000000000000",a3802d8a659e89a2c47e905430b2a827978950a7:"1000000000000000000000","75636cdb109050e43d5d6ec47e359e218e857eca":"22886800000000000000000","3d813ff2b6ed57b937dabf2b381d148a411fa085":"100000000000000000000",a9252551a624ae513719dabe5207fbefb2fd7749:"40000000000000000000",c749668042e71123a648975e08ed6382f83e05e2:"14000000000000000000000","04eca501630abce35218b174956b891ba25efb23":"1000060000000000000000","790f91bd5d1c5cc4739ae91300db89e1c1303c93":"2000000000000000000000","009560a3de627868f91fa8bfe1c1b7afaf08186b":"524000000000000000000","1329dd19cd4baa9fc64310efeceab22117251f12":"200000000000000000000","7005a772282b1f62afda63f89b5dc6ab64c84cb9":"18000000000000000000000",abfe936425dcc7b74b955082bbaaf2a11d78bc05:"1400000000000000000000","97d0d9725e3b70e675843173938ed371b62c7fac":"170000000000000000000","41ed2d8e7081482c919fc23d8f0091b3c82c4685":"1295460000000000000000","992365d764c5ce354039ddfc912e023a75b8e168":"18200000000000000000",e1c607c0a8a060da8f02a8eb38a013ea8cda5b8c:"805000000000000000000","3b2c45990e21474451cf4f59f01955b331c7d7c9":"2000000000000000000000","29ac2b458454a36c7e96c73a8667222a12242c71":"4000000000000000000000",b8555010776e3c5cb311a5adeefe9e92bb9a64b9:"4000000000000000000000","30380087786965149e81423b15e313ba32c5c783":"18200000000000000000",a2f86bc061884e9eef05640edd51a2f7c0596c69:"2000050000000000000000","9f98eb34d46979b0a6de8b05aa533a89b825dcf1":"86500000000000000000",c81fb7d20fd2800192f0aac198d6d6a37d3fcb7d:"259500000000000000000",a4035ab1e5180821f0f380f1131b7387c8d981cd:"20000000000000000000","782f52f0a676c77716d574c81ec4684f9a020a97":"850055000000000000000","261e0fa64c51137465eecf5b90f197f7937fdb05":"18000000000000000000000","276fd7d24f8f883f5a7a28295bf17151c7a84b03":"2000000000000000000000",a1f5b840140d5a9acef402ac3cc3886a68cad248:"2000000000000000000000",d2bf67a7f3c6ce56b7be41675dbbadfe7ea93a33:"400000000000000000000","8ee584337ddbc80f9e3498df55f0a21eacb57fb1":"20000000000000000000","34393c5d91b9de597203e75bac4309b5fa3d28c3":"194000000000000000000","114cbbbf6fb52ac414be7ec61f7bb71495ce1dfa":"3000000000000000000000",ab7c42c5e52d641a07ad75099c62928b7f86622f:"335940000000000000000","80bf995ed8ba92701d10fec49f9e7d014dbee026":"572153000000000000000","4a192035e2619b24b0709d56590e9183ccf2c1d9":"10000000000000000000000","376cd7577383e902951b60a2017ba7ea29e33576":"2000000000000000000000",f5437e158090b2a2d68f82b54a5864b95dd6dbea:"4010732000000000000000","13a5eecb38305df94971ef2d9e179ae6cebab337":"330000000000000000000",efc8cf1963c9a95267b228c086239889f4dfd467:"10000000000000000000000",db77b88dcb712fd17ee91a5b94748d720c90a994:"2000000000000000000000","9aaafa0067647ed999066b7a4ca5b4b3f3feaa6f":"1000000000000000000000",ae36f7452121913e800e0fcd1a65a5471c23846f:"164000000000000000000",b124bcb6ffa430fcae2e86b45f27e3f21e81ee08:"2000000000000000000000",f2813a64c5265d020235cb9c319b6c96f906c41e:"350000000000000000000",e848ca7ebff5c24f9b9c316797a43bf7c356292d:"114000000000000000000","21a6feb6ab11c766fdd977f8df4121155f47a1c0":"57200000000000000000",e95e92bbc6de07bf3a660ebf5feb1c8a3527e1c5:"18200000000000000000","0b369e002e1b4c7913fcf00f2d5e19c58165478f":"64520000000000000000","0909648c18a3ce5bae7a047ec2f868d24cdda81d":"3820000000000000000000",d32b45564614516c91b07fa9f72dcf787cce4e1c:"291000000000000000000",cf1bdb799b2ea63ce134668bdc198b54840f180b:"18200000000000000000",ae062c448618643075de7a0030342dced63dbad7:"825982000000000000000","99dfd0504c06c743e46534fd7b55f1f9c7ec3329":"2000000000000000000000","87fc4635263944ce14a46c75fa4a821f39ce7f72":"20000000000000000000","27c2d7ca504daa3d9066dc09137dc42f3aaab452":"600000000000000000000",cc60f836acdef3548a1fefcca13ec6a937db44a0:"86500000000000000000",c910a970556c9716ea53af66ddef93143124913d:"1580000000000000000000","8173c835646a672e0152be10ffe84162dd256e4c":"492000000000000000000",e989733ca1d58d9e7b5029ba5d444858bec03172:"581595000000000000000","86806474c358047d9406e6a07f40945bc8328e67":"6884000000000000000000","5395a4455d95d178b4532aa4725b193ffe512961":"1000000000000000000000","56397638bb3cebf1f62062794b5eb942f916171d":"2000000000000000000000","6958f83bb2fdfb27ce0409cd03f9c5edbf4cbedd":"20000000000000000000000", -"26ff0a51e7cece8400276978dbd6236ef162c0e6":"100020000000000000000000","4ca783b556e5bf53aa13c8116613d65782c9b642":"25200000000000000000000","15a0aec37ff9ff3d5409f2a4f0c1212aaccb0296":"1000000000000000000000","50378af7ef54043f892ab7ce97d647793511b108":"19700000000000000000",e7c6b5fc05fc748e5b4381726449a1c0ad0fb0f1:"2000000000000000000000","5317ecb023052ca7f5652be2fa854cfe4563df4d":"499986000000000000000",c94f7c35c027d47df8ef4f9df85a9248a17dd23b:"29944000000000000000","6a63fc89abc7f36e282d80787b7b04afd6553e71":"160000000000000000000","5fd3d6777ec2620ae83a05528ed425072d3ca8fd":"2000000000000000000000","29adcf83b6b20ac6a434abb1993cbd05c60ea2e4":"10000000000000000000000","8c6f9f4e5b7ae276bf58497bd7bf2a7d25245f64":"2730000000000000000000",d94a57882a52739bbe2a0647c80c24f58a2b4f1c:"1341230000000000000000","7286e89cd9de8f7a8a00c86ffdb53992dd9251d1":"1940000000000000000000","5773b6026721a1dd04b7828cd62b591bfb34534c":"27000000000000000000000","11fefb5dc1a4598aa712640c517775dfa1d91f8c":"10000000000000000000000",c6e324beeb5b36765ecd464260f7f26006c5c62e:"2000000000000000000000","118fbd753b9792395aef7a4d78d263cdcaabd4f7":"999800000000000000000",f8298591523e50b103f0b701d623cbf0f74556f6:"200000000000000000000",ab0ced762e1661fae1a92afb1408889413794825:"1910000000000000000000",fa67b67b4f37a0150915110ede073b05b853bda2:"647490000000000000000",ca122cf0f2948896b74843f49afed0ba1618eed7:"560000000000000000000","186b95f8e5effddcc94f1a315bf0295d3b1ea588":"1999944000000000000000","2915624bcb679137b8dae9ab57d11b4905eaee4b":"20000000000000000000","0c6845bf41d5ee273c3ee6b5b0d69f6fd5eabbf7":"3000026000000000000000",cb7479109b43b26657f4465f4d18c6f974be5f42:"1820000000000000000000","8dd6a9bae57f518549ada677466fea8ab04fd9b4":"4000000000000000000000","34958a46d30e30b273ecc6e5d358a212e5307e8c":"2000000000000000000000","2003717907a72560f4307f1beecc5436f43d21e7":"500000000000000000000","55ab99b0e0e55d7bb874b7cfe834de631c97ec23":"1031400000000000000000","79b48d2d6137c3854d611c01ea42427a0f597bb7":"191000000000000000000",d609ec0be70d0ad26f6e67c9d4762b52ee51122c:"1000000000000000000000",e8c3f045bb7d38c9d2f395b0ba8492b253230901:"9000000000000000000000",aaca60d9d700e78596bbbbb1f1e2f70f4627f9d8:"999996000000000000000","89d75b8e0831e46f80bc174188184e006fde0eae":"1000000000000000000000",b3667894b7863c068ad344873fcff4b5671e0689:"20000000000000000000000",bc1609d685b76b48ec909aa099219022f89b2ccd:"1182000000000000000000","88ee7f0efc8f778c6b687ec32be9e7d6f020b674":"2000000000000000000000","470ac5d1f3efe28f3802af925b571e63868b397d":"2000000000000000000000",abf8ffe0708a99b528cc1ed4e9ce4b0d0630be8c:"2263600000000000000000","8cee38d6595788a56e3fb94634b3ffe1fbdb26d6":"20000000000000000000000","19798cbda715ea9a9b9d6aab942c55121e98bf91":"1200000000000000000000",e25a167b031e84616d0f013f31bda95dcc6350b9:"10560000000000000000000","6196c3d3c0908d254366b7bca55745222d9d4db1":"4000000000000000000000",e8e9850586e94f5299ab494bb821a5f40c00bd04:"3820000000000000000000","1059cbc63e36c43e88f30008aca7ce058eeaa096":"100000000000000000000000",c4f2913b265c430fa1ab8adf26c333fc1d9b66f2:"20000000000000000000","26e9e2ad729702626417ef25de0dc800f7a779b3":"1000000000000000000000","0dfbd4817050d91d9d625c02053cf61a3ee28572":"340000000000000000000","709fe9d2c1f1ce42207c9585044a60899f35942f":"2000000000000000000000","7ad82caea1a8b4ed05319b9c9870173c814e06ee":"616000000000000000000","2a595f16eee4cb0c17d9a2d939b3c10f6c677243":"1100000000000000000000",a8f89dd5cc6e64d7b1eeace00702022cd7d2f03d:"700000000000000000000",c0a6cbad77692a3d88d141ef769a99bb9e3c9951:"100000000000000000000","868c23be873466d4c74c220a19b245d1787e807f":"1366481000000000000000","2905b192e83ce659aa355b9d0c204e3e95f9bb9a":"2160817000000000000000","50b9fef0a1329b02d16506255f5a2db71ec92d1f":"1325464000000000000000",fc10b7a67b3268d5331bfb6a14def5ea4a162ca3:"200000000000000000000","85eb256b51c819d60ea61a82d12c9358d59c1cae":"460000000000000000000","75de7e9352e90b13a59a5878ffecc7831cac4d82":"2740000000000000000000",d32b2c79c36478c5431901f6d700b04dbe9b8810:"396000000000000000000","2d0326b23f0409c0c0e9236863a133075a94ba18":"210380000000000000000",d2e21ed56868fab28e0947927adaf29f23ebad6c:"1994000000000000000000","2ad6c9d10c261819a1a0ca2c48d8c7b2a71728df":"1000000000000000000000","7d445267c59ab8d2a2d9e709990e09682580c49f":"1000000000000000000000",b6047cdf932db3e4045f4976122341537ed5961e:"20000000000000000000","2b3cf97311ff30f460945a9d8099f4a88e26d456":"2000000000000000000000","7f4f593b618c330ba2c3d5f41eceeb92e27e426c":"2775000000000000000000","72a2fc8675feb972fa41b50dffdbbae7fa2adfb7":"2853840000000000000000","076561a856455d7ef86e63f87c73dbb628a55f45":"900000000000000000000","03d1724fd00e54aabcd2de2a91e8462b1049dd3a":"2640000000000000000000","7ea0f96ee0a573a330b56897761f3d4c0130a8e3":"1337000000000000000000",fe65c4188d7922576909642044fdc52395560165:"4000000000000000000000","57883010b4ac857fedac03eab2551723a8447ffb":"1000000000000000000000","0729a8a4a5ba23f579d0025b1ad0f8a0d35cdfd2":"9700000000000000000000",e75c1fb177089f3e58b1067935a6596ef1737fb5:"99910000000000000000",e0e978753d982f7f9d1d238a18bd4889aefe451b:"9700000000000000000000","5620f46d1451c2353d6243a5d4b427130be2d407":"60000000000000000000",f3d688f06bbdbf50f9932c4145cbe48ecdf68904:"20000000000000000000","3aa948ea02397755effb2f9dc9392df1058f7e33":"850000000000000000000","20d1417f99c569e3beb095856530fe12d0fceaaa":"1182175000000000000000",ac77bdf00fd5985b5db12bbef800380abc2a0677:"1000000000000000000000","267a7e6e82e1b91d51deddb644f0e96dbb1f7f7e":"20000000000000000000","4bbcbf38b3c90163a84b1cd2a93b58b2a3348d87":"8000000000000000000000","4c6b93a3bec16349540cbfcae96c9621d6645010":"2000000000000000000000",c9308879056dfe138ef8208f79a915c6bc7e70a8:"10000000000000000000000",c48b693cacefdbd6cb5d7895a42e3196327e261c:"1000000000000000000000",a0951970dfd0832fb83bda12c23545e79041756c:"600000000000000000000","7cdf74213945953db39ad0e8a9781add792e4d1d":"2000000000000000000000","75621865b6591365606ed378308c2d1def4f222c":"3100000000000000000000","67d6a8aa1bf8d6eaf7384e993dfdf10f0af68a61":"198067000000000000000","8f0af37566d152802f1ae8f928b25af9b139b448":"200000000000000000000","2c6afcd4037c1ed14fa74ff6758e0945a185a8e8":"17600000000000000000",c1b2aa8cb2bf62cdc13a47ecc4657facaa995f98:"1000129000000000000000","9e8144e08e89647811fe6b72d445d6a5f80ad244":"10000000000000000000000",e04ff5e5a7e2af995d8857ce0290b53a2b0eda5d:"1000000000000000000000","03dedfcd0b3c2e17c705da248790ef98a6bd5751":"1337000000000000000000","698a8a6f01f9ab682f637c7969be885f6c5302bf":"19400000000000000000",d82c6fedbdac98af2eed10b00f32b00056ca5a6d:"200000000000000000000","2697b339813b0c2d964b2471eb1c606f4ecb9616":"1154000000000000000000","987c9bcd6e3f3990a52be3eda4710c27518f4f72":"400000000000000000000",c5d48ca2db2f85d8c555cb0e9cfe826936783f9e:"200000000000000000000",da214c023e2326ff696c00393168ce46ffac39ec:"1000000000000000000000","86570ab259c9b1c32c9729202f77f590c07dd612":"200000000000000000000",a646a95c6d6f59f104c6541d7760757ab392b08c:"4200000000000000000000","1933e334c40f3acbad0c0b851158206924beca3a":"7551541000000000000000","3552a496eba67f12be6eedab360cd13661dc7480":"300000000000000000000","2a9c96c19151ffcbe29a4616d0c52b3933b4659f":"69263000000000000000","3b7b8e27de33d3ce7961b98d19a52fe79f6c25be":"100000000000000000000000",a1911405cf6e999ed011f0ddcd2a4ff7c28f2526:"40000000000000000000","0cae108e6db99b9e637876b064c6303eda8a65c8":"3000000000000000000000","3883becc08b9be68ad3b0836aac3b620dc0017ef":"2000000000000000000000",d0abcc70c0420e0e172f97d43b87d5e80c336ea9:"10000000000000000000000",cbf16a0fe2745258cd52db2bf21954c975fc6a15:"300000000000000000000","1b23cb8663554871fbbe0d9e60397efb6faedc3e":"200000000000000000000",fbede32c349f3300ef4cd33b4de7dc18e443d326:"3160000000000000000000","5e806e845730f8073e6cc9018ee90f5c05f909a3":"9480000000000000000000","425c338a1325e3a1578efa299e57d986eb474f81":"2000000000000000000000","8bf297f8f453523ed66a1acb7676856337b93bf0":"4000000000000000000000","38e8a31af2d265e31a9fff2d8f46286d1245a467":"20000000000000000000","7edafba8984baf631a820b6b92bbc2c53655f6bd":"2000000000000000000000",aa0200f1d17e9c54da0647bb96395d57a78538d8:"1056000000000000000000","433eb94a339086ed12d9bde9cd1d458603c97dd6":"100000000000000000000000",cd7e47909464d871b9a6dc76a8e9195db3485e7a:"9850000000000000000000","5975d78d974ee5bb9e4d4ca2ae77c84b9c3b4b82":"1370000000000000000000",cea2896623f4910287a2bdc5be83aea3f2e6de08:"9359000000000000000000",cb4ad0c723da46ab56d526da0c1d25c73daff10a:"510000000000000000000",e2cf360aa2329eb79d2bf7ca04a27a17c532e4d8:"102000000000000000000",ea60549ec7553f511d2149f2d4666cbd9243d93c:"2000000000000000000000",cbb7be17953f2ccc93e1bc99805bf45511434e4c:"50440000000000000000000","3549bd40bbbc2b30095cac8be2c07a0588e0aed6":"20000000000000000000","6510df42a599bcb0a519cca961b488759a6f6777":"2000000000000000000000",ed12a1ba1fb8adfcb20dfa19582e525aa3b74524:"6685000000000000000000","135eb8c0e9e101deedec11f2ecdb66ae1aae8867":"20000000000000000000000",ee906d7d5f1748258174be4cbc38930302ab7b42:"200000000000000000000","253f1e742a2cec86b0d7b306e5eacb6ccb2f8554":"20040000000000000000000",ecd1a62802351a41568d23033004acc6c005a5d3:"50000000000000000000","558c54649a8a6e94722bd6d21d14714f71780534":"2000000000000000000000",ca657ec06fe5bc09cf23e52af7f80cc3689e6ede:"900000000000000000000","74bf7a5ab59293149b5c60cf364263e5ebf1aa0d":"115800000000000000000","7a6d781c77c4ba1fcadf687341c1e31799e93d27":"274000000000000000000","77028e409cc43a3bd33d21a9fc53ec606e94910e":"3880000000000000000000","4781a10a4df5eebc82f4cfe107ba1d8a7640bd66":"1790000000000000000000","78e08bc533413c26e291b3143ffa7cc9afb97b78":"200000000000000000000","03ef6ad20ff7bd4f002bac58d47544cf879ae728":"6895000000000000000000","0e3696cf1f4217b163d1bc12a5ea730f1c32a14a":"4000000000000000000000","825135b1a7fc1605614c8aa4d0ac6dbad08f480e":"1430000000000000000000","286b186d61ea1fd78d9930fe12b06537b05c3d51":"1000000000000000000000","8d6657f59711b1f803c6ebef682f915b62f92dc9":"2000000000000000000000",da8bbee182e455d2098acb338a6d45b4b17ed8b6:"2000000000000000000000","3f2da093bb16eb064f8bfa9e30b929d15f8e1c4c":"2000000000000000000000",f5d9cf00d658dd45517a48a9d3f5f633541a533d:"116400000000000000000",c5f64babb7033142f20e46d7aa6201ed86f67103:"2000000000000000000000",a2e2b5941e0c01944bfe1d5fb4e8a34b922ccfb1:"200000000000000000000","6114b0eae5576903f80bfb98842d24ed92237f1e":"100000000000000000000","38df0c4abe7ded5fe068eadf154ac691774324a4":"1790000000000000000000","1c2010bd662df417f2a271879afb13ef4c88a3ae":"4000000000000000000000","918967918cd897dd0005e36dc6c883ef438fc8c7":"140000000000000000000",a522de7eb6ae1250522a513133a93bd42849475c:"20000000000000000000000","7de442c82386154d2e993cbd1280bb7ca6b12ada":"4002000000000000000000","66424bd8785b8cb461102a900283c35dfa07ef6a":"40221000000000000000","7bbbec5e70bdead8bb32b42805988e9648c0aa97":"1000076000000000000000",fec06fe27b44c784b2396ec92f7b923ad17e9077:"2000000000000000000000","95d550427b5a514c751d73a0f6d29fb65d22ed10":"300000000000000000000","8dde60eb08a099d7daa356daaab2470d7b025a6b":"197000000000000000000","81bccbff8f44347eb7fca95b27ce7c952492aaad":"152240000000000000000","3995e096b08a5a726800fcd17d9c64c64e088d2b":"200000000000000000000","4ee13c0d41200b46d19dee5c4bcec71d82bb8e38":"7893915000000000000000",c41461a3cfbd32c9865555a4813137c076312360:"999999000000000000000","3300fb149aded65bcba6c04e9cd6b7a03b893bb1":"18200000000000000000","29f9286c0e738d1721a691c6b95ab3d9a797ede8":"200000000000000000000000","34c8e5f1330fcb4b14ca75cb2580a4b93d204e36":"2000000000000000000000",ec5df227bfa85d7ad76b426e1cee963bc7f519dd:"1000000000000000000000","797510e386f56393ced8f477378a444c484f7dad":"1000000000000000000000","0191eb547e7bf6976b9b1b577546761de65622e2":"1999980000000000000000","615a6f36777f40d6617eb5819896186983fd3731":"5910000000000000000000","17580b766f7453525ca4c6a88b01b50570ea088c":"100000000000000000000","945d96ea573e8df7262bbfa572229b4b16016b0f":"209300000000000000000","2de0964400c282bdd78a919c6bf77c6b5f796179":"200000000000000000000","304ec69a74545721d7316aef4dcfb41ac59ee2f0":"200000000000000000000",be2b326e78ed10e550fee8efa8f8070396522f5a:"39400000000000000000000","1a0841b92a7f7075569dc4627e6b76cab05ade91":"1520000000000000000000","5fa61f152de6123516c751242979285f796ac791":"204000000000000000000","68c8791dc342c373769ea61fb7b510f251d32088":"1000000000000000000000","4167cd48e733418e8f99ffd134121c4a4ab278c4":"3640000000000000000000","598aaabae9ed833d7bc222e91fcaa0647b77580b":"1800000000000000000000","979f30158b574b999aab348107b9eed85b1ff8c1":"970000000000000000000","3ad06149b21c55ff867cc3fb9740d2bcc7101231":"197000000000000000000000","7133843a78d939c69d4486e10ebc7b602a349ff7":"329000000000000000000","8bdfda6c215720eda2136f91052321af4e936c1f":"1000008000000000000000","3e1c53300e4c168912163c7e99b95da268ad280a":"1003200000000000000000",e07ebbc7f4da416e42c8d4f842aba16233c12580:"2000000000000000000000",bac8922c4acc7d2cb6fd59a14eb45cf3e702214b:"800000000000000000000",bb6c284aac8a69b75cddb00f28e145583b56bece:"2000000000000000000000","0372ee5508bf8163ed284e5eef94ce4d7367e522":"100000000000000000000","17125b59ac51cee029e4bd78d7f5947d1ea49bb2":"22000000000000000000000",c88ca1e6e5f4d558d13780f488f10d4ad3130d34:"1550000000000000000000",a825fd5abb7926a67cf36ba246a24bd27be6f6ed:"17600000000000000000","04241b41ecbd0bfdf1295e9d4fa59ea09e6c6186":"1870000000000000000000","6de4d15219182faf3aa2c5d4d2595ff23091a727":"1580000000000000000000",b203d29e6c56b92699c4b92d1f6f84648dc4cfbc:"400000000000000000000","80b42de170dbd723f454e88f7716452d92985092":"300202000000000000000","0a5b79d8f23b6483dbe2bdaa62b1064cc76366ae":"1969803000000000000000","32034e8581d9484e8af42a28df190132ec29c466":"3460000000000000000000","7ee604c7a9dc2909ce321de6b9b24f5767577555":"5533575000000000000000",a387ce4e961a7847f560075c64e1596b5641d21c:"668500000000000000000",fcc9d4a4262e7a027ab7519110d802c495ceea39:"6370000000000000000000",ff8a2ca5a81333f19998255f203256e1a819c0aa:"224000000000000000000",f9811fa19dadbf029f8bfe569adb18228c80481a:"200000000000000000000","0d1f2a57713ebc6e94de29846e8844d376665763":"5000000000000000000000",eab0bd148309186cf8cbd13b7232d8095acb833a:"10691800000000000000000","36928b55bc861509d51c8cf1d546bfec6e3e90af":"1970000000000000000000","30480164bcd84974ebc0d90c9b9afab626cd1c73":"800000000000000000000","36339f84a5c2b44ce53dfdb6d4f97df78212a7df":"321600000000000000000",cfeacaaed57285e0ac7268ce6a4e35ecfdb242d7:"1086400000000000000000","572dd8cd3fe399d1d0ec281231b7cefc20b9e4bb":"10400000000000000000000","5dded049a6e1f329dc4b971e722c9c1f2ade83f0":"1000000000000000000000","9756e176c9ef693ee1eec6b9f8b151d313beb099":"1200000000000000000000","01e6415d587b065490f1ed7f21d6e0f386ee6747":"2000000000000000000000",b4413576869c08f9512ad311fe925988a52d3414:"10000000000000000000000",da9f55460946d7bfb570ddec757ca5773b58429a:"507600000000000000000","7180b83ee5574317f21c8072b191d895d46153c3":"460000000000000000000","0aca9a5626913b08cfc9a66d40508dce52b60f87":"1910000000000000000000","5cd0e475b54421bdfc0c12ea8e082bd7a5af0a6a":"59000000000000000000","7edb02c61a227287611ad950696369cc4e647a68":"274000000000000000000",b2676841ee9f2d31c172e82303b0fe9bbf9f1e09:"200000000000000000000",a2222259dd9c3e3ded127084f808e92a1887302c:"162000000000000000000","4b3a7cc3a7d7b00ed5282221a60259f25bf6538a":"1000000000000000000000",e33ff987541dde5cdee0a8a96dcc3f33c3f24cc2:"200000000000000000000000","1e1a4828119be309bd88236e4d482b504dc55711":"2955000000000000000000","9b1811c3051f46e664ae4bc9c824d18592c4574a":"199955000000000000000","59fe00696dbd87b7976b29d1156c8842a2e17914":"2000000000000000000000","48010ef3b8e95e3f308f30a8cb7f4eb4bf60d965":"2000000000000000000000",c90300cb1d4077e6a6d7e169a460468cf4a492d7:"2000000000000000000000","6dedf62e743f4d2c2a4b87a787f5424a7aeb393c":"180000000000000000000",fb744b951d094b310262c8f986c860df9ab1de65:"52009000000000000000","193ac65183651800e23580f8f0ead3bb597eb8a4":"50020000000000000000",bf05ff5ecf0df2df887759fb8274d93238ac267d:"800000000000000000000","6c0e712f405c59725fe829e9774bf4df7f4dd965":"57413800000000000000000","2744ff67464121e35afc2922177164fa2fcb0267":"100000000000000000000",d09cb2e6082d693a13e8d2f68dd1dd8461f55840:"1000000000000000000000",bc171e53d17ac9b61241ae436deec7af452e7496:"5348000000000000000000","71fa22cc6d33206b7d701a163a0dab31ae4d31d6":"1610000000000000000000","4da8030769844bc34186b85cd4c7348849ff49e9":"10000000000000000000000",c8616b4ec09128cdff39d6e4b9ac86eec471d5f2:"19400000000000000000","407295ebd94b48269c2d569c9b9af9aa05e83e5e":"10000000000000000000000",d45d5daa138dd1d374c71b9019916811f4b20a4e:"576000000000000000000","42c6edc515d35557808d13cd44dcc4400b2504e4":"197876000000000000000","0bc95cb32dbb574c832fa8174a81356d38bc92ac":"2000000000000000000000","5a6071bcebfcba4ab57f4db96fc7a68bece2ba5b":"2000000000000000000000","54c93e03a9b2e8e4c3672835a9ee76f9615bc14e":"19400000000000000000","3c03bbc023e1e93fa3a3a6e428cf0cd8f95e1ec6":"1520000000000000000000",ba1531fb9e791896bcf3a80558a359f6e7c144bd:"3940000000000000000000",aa56a65dc4abb72f11bae32b6fbb07444791d5c9:"748600000000000000000",e437acbe0f6227b0e36f36e4bcf7cf613335fb68:"200000000000000000000","39d4a931402c0c79c457186f24df8729cf957031":"4000000000000000000000",e22b20c77894463baf774cc256d5bddbbf7ddd09:"1000000000000000000000","70a4067d448cc25dc8e70e651cea7cf84e92109e":"176000000000000000000",aa3925dc220bb4ae2177b2883078b6dc346ca1b2:"8000000000000000000000",ad57aa9d00d10c439b35efcc0becac2e3955c313:"200000000000000000000",e93d47a8ca885d540c4e526f25d5c6f2c108c4b8:"112640000000000000000000","232ce782506225fd9860a2edc14a7a3047736da2":"20000000000000000000","49a645e0667dfd7b32d075cc2467dd8c680907c4":"129560000000000000000",cf2e734042a355d05ffb2e3915b16811f45a695e:"2000000000000000000000","39b1c471ae94e12164452e811fbbe2b3cd7275ac":"2000000000000000000000",ffad3dd74e2c1f796ac640de56dc99b4c792a402:"5000000000000000000000",a69d7cd17d4842fe03f62a90b2fbf8f6af7bb380:"100000000000000000000","2001bef77b66f51e1599b02fb110194a0099b78d":"2000000000000000000000","95e7616424cd0961a71727247437f0069272280e":"400000000000000000000",c04f4bd4049f044685b883b62959ae631d667e35:"5820000000000000000000",ede0147ec032c3618310c1ff25690bf172193dac:"2000000000000000000000","66719c0682b2ac7f9e27abebec7edf8decf0ae0d":"20000000000000000000","45272b8f62e9f9fa8ce04420e1aea3eba9686eac":"4000000000000000000000",d1da0c8fb7c210e0f2ec618f85bdae7d3e734b1c:"1970000000000000000000",e9133e7d31845d5f2b66a2618792e869311acf66:"24050000000000000000000",ebb62cf8e22c884b1b28c6fa88fbbc17938aa787:"798000000000000000000","6205c2d5647470848a3840f3887e9b015d34755c":"1800000000000000000000","76ca22bcb8799e5327c4aa2a7d0949a1fcce5f29":"1524180000000000000000","6b925dd5d8ed6132ab6d0860b82c44e1a51f1fee":"1480000000000000000000","797bb7f157d9feaa17f76da4f704b74dc1038341":"3340000000000000000000",ae8954f8d6166de507cf61297d0fc7ca6b9e7128:"300000000000000000000","75c1ad23d23f24b384d0c3149177e86697610d21":"6426082000000000000000","805d846fb0bc02a7337226d685be9ee773b9198a":"19999800000000000000000",c3cb6b36af443f2c6e258b4a39553a818747811f:"1610000000000000000000",cea43f7075816b60bbfce68b993af0881270f6c4:"2000000000000000000000",e0388aeddd3fe2ad56f85748e80e710a34b7c92e:"500000000000000000000",e131f87efc5ef07e43f0f2f4a747b551d750d9e6:"19999000000000000000000",c2b2cbe65bc6c2ee7a3c75b2e47c189c062e8d8b:"20000000000000000000000",bd8765f41299c7f479923c4fd18f126d7229047d:"4000000000000000000000",c83ba6dd9549be1d3287a5a654d106c34c6b5da2:"7000000000000000000000",f870995fe1e522321d754337a45c0c9d7b38951c:"20000000000000000000","0d8ed7d0d15638330ed7e4eaccab8a458d75737e":"2000000000000000000000","36c510bf8d6e569bf2f37d47265dbcb502ff2bce":"30000000000000000000000","0eccf617844fd61fba62cb0e445b7ac68bcc1fbe":"387260000000000000000",ae10e27a014f0d306baf266d4897c89aeee2e974:"20000000000000000000000","1827039f09570294088fddf047165c33e696a492":"9550000000000000000000","23378f42926d0184b793b0c827a6dd3e3d334fcd":"56000000000000000000","467124ae7f452f26b3d574f6088894fa5d1cfb3b":"2700000000000000000000",aae61e43cb0d0c96b30699f77e00d711d0a3979b:"1000000000000000000000","15c7edb8118ee27b342285eb5926b47a855bc7a5":"20000000000000000000","0d5d98565c647ca5f177a2adb9d3022fac287f21":"200000000000000000000","7222fec7711781d26eaa4e8485f7aa3fac442483":"456000000000000000000",dc44275b1715baea1b0345735a29ac42c9f51b4f:"1164000000000000000000","04d82af9e01a936d97f8f85940b970f9d4db9936":"200000000000000000000","45533390e340fe0de3b3cf5fb9fc8ea552e29e62":"1460000000000000000000","1284f0cee9d2ff2989b65574d06ffd9ab0f7b805":"400000000000000000000",ed9ebccba42f9815e78233266dd6e835b6afc31b:"6000000000000000000000",e4324912d64ea3aef76b3c2ff9df82c7e13ae991:"2000000000000000000000","94c742fd7a8b7906b3bfe4f8904fc0be5c768033":"20000000000000000000000","62fb8bd1f0e66b90533e071e6cbe6111fef0bc63":"17600000000000000000000","2c83aeb02fcf067d65a47082fd977833ab1cec91":"150400000000000000000","06cbfa08cdd4fba737bac407be8224f4eef35828":"593459000000000000000","67ee406ea4a7ae6a3a381eb4edd2f09f174b4928":"1036000000000000000000","83c23d8a502124ee150f08d71dc6727410a0f901":"33999600000000000000000",f7c00cdb1f020310d5acab7b496aaa44b779085e:"1670000000000000000000",d096565b7c7407d06536580355fdd6d239144aa1:"250000000000000000000",f8d52dcc5f96cc28007b3ecbb409f7e22a646caa:"149200000000000000000","0c222c7c41c9b048efcce0a232434362e12d673b":"10007600000000000000000","503bdbd8bc421c32a443032deb2e3e4cd5ba8b4e":"2000000000000000000000","77da5e6c72fb36bce1d9798f7bcdf1d18f459c2e":"22380000000000000000",e62f98650712eb158753d82972b8e99ca3f61877:"2000000000000000000000","87a7c508ef71582dd9a54372f89cb01f252fb180":"200000000000000000000",f61283b4bd8504058ca360e993999b62cbc8cd67:"255000000000000000000","9ccddcb2cfc2b25b08729a0a98d9e6f0202ea2c1":"100000000000000000000",d460a4b908dd2b056759b488850b66a838fc77a8:"1970000000000000000000","5431b1d18751b98fc9e2888ac7759f1535a2db47":"2000000000000000000000",da2a14f9724015d79014ed8e5909681d596148f1:"48499000000000000000",c989434f825aaf9c552f685eba7c11db4a5fc73a:"501000000000000000000","2b701d16c0d3cc1e4cd85445e6ad02eea4ac012d":"600000000000000000000","78b978a9d7e91ee529ea4fc4b76feaf8762f698c":"32000000000000000000000",c89cf504b9f3f835181fd8424f5ccbc8e1bddf7d:"10000000000000000000000",e94941b6036019b4016a30c1037d5a6903babaad:"780000000000000000000","95d98d0c1069908f067a52acac2b8b534da37afd":"2054053000000000000000","8284923b62e68bbf7c2b9f3414d13ef6c812a904":"3880000000000000000000","3e5a39fdda70df1126ab0dc49a7378311a537a1f":"2400000000000000000000",a2ace4c993bb1e5383f8ac74e179066e814f0591:"100000000000000000000","0609d83a6ce1ffc9b690f3e9a81e983e8bdc4d9d":"70000000000000000000000",d119417c46732cf34d1a1afb79c3e7e2cd8eece4:"2000000000000000000000",fdb33944f2360615e5be239577c8a19ba52d9887:"601650000000000000000",dd95dbe30f1f1877c5dd7684aeef302ab6885192:"8372000000000000000000","413f4b02669ccff6806bc826fcb7deca3b0ea9bc":"20000000000000000000","5800cd8130839e94495d2d8415a8ea2c90e0c5cb":"200000000000000000000","65053191319e067a25e6361d47f37f6318f83419":"394000000000000000000","9bc573bcda23b8b26f9073d90c230e8e71e0270b":"999544000000000000000","97f7760657c1e202759086963eb4211c5f8139b9":"49770000000000000000000","126897a311a14ad43b78e0920100c4426bfd6bdd":"973581000000000000000",d5276f0cd5ffd5ffb63f98b5703d5594ede0838b:"400000000000000000000",e9c35c913ca1fceab461582fe1a5815164b4fd21:"8000000000000000000000",b43067fe70d9b55973ba58dc64dd7f311e554259:"200000000000000000000","6f8f0d15cc96fb7fe94f1065bc6940f8d12957b2":"1000000000000000000000",b1dba5250ba9625755246e067967f2ad2f0791de:"80000000000000000000000","72b7a03dda14ca9c661a1d469fd33736f673c8e8":"2000000000000000000000",e792349ce9f6f14f81d0674096befa1f9221cdea:"1685365000000000000000","1815279dff9952da3be8f77249dbe22243377be7":"4749800000000000000000","33481e856ebed48ea708a27426ef28e867f57cd1":"200000000000000000000","8eb8c71982a00fb84275293253f8044544b66b49":"400000000000000000000","65f5870f26bce089677dfc23b5001ee492483428":"5067230000000000000000","8e23facd12c765c36ab81a6dd34d8aa9e68918ae":"167310000000000000000","4912d902931676ff39fc34fe3c3cc8fb2182fa7a":"20000000000000000000",c09a66172aea370d9a63da04ff71ffbbfcff7f94:"2000000000000000000000",e969ea1595edc5c4a707cfde380929633251a2b0:"200000000000000000000","4f2b47e2775a1fa7178dad92985a5bbe493ba6d6":"200000000000000000000",cab9a97ada065c87816e6860a8f1426fe6b3d775:"1000000000000000000000",cdfd8217339725d7ebac11a63655f265eff1cc3d:"4999962000000000000000",ab4004c0403f7eabb0ea586f212156c4203d67f1:"1999944000000000000000","1c7cb2fe6bf3e09cbcdc187af38fa8f5053a70b6":"9970823000000000000000",a951b244ff50cfae591d5e1a148df6a938ef2a1a:"1734000000000000000000",b158db43fa62d30e65f3d09bf781c7b67372ebaa:"1999000000000000000000","25e037f00a18270ba5ec3420229ddb0a2ce38fa2":"10000000000000000000000","2aaea1f1046f30f109faec1c63ef5c7594eb08da":"4000000000000000000000","73d7269ff06c9ffd33754ce588f74a966abbbbba":"6600000000000000000000","4c767b65fd91161f4fbdcc6a69e2f6ad711bb918":"720000000000000000000","92ae5b7c7eb492ff1ffa16dd42ad9cad40b7f8dc":"865000000000000000000",a04f2ae02add14c12faf65cb259022d0830a8e26:"100000000000000000000000","63ef2fbc3daf5edaf4a295629ccf31bcdf4038e5":"1460000000000000000000","749ad6f2b5706bbe2f689a44c4b640b58e96b992":"100000000000000000000","4d836d9d3b0e2cbd4de050596faa490cffb60d5d":"300000000000000000000","59f6247b0d582aaa25e5114765e4bf3c774f43c2":"50000000000000000000","1293c78c7d6a443b9d74b0ba5ee7bb47fd418588":"6685000000000000000000","67bc85e87dc34c4e80aafa066ba8d29dbb8e438e":"402500000000000000000",a09f4d5eaa65a2f4cb750a49923401dae59090af:"140000000000000000000",ebbd4db9019952d68b1b0f6d8cf0683c00387bb5:"332330000000000000000",b16479ba8e7df8f63e1b95d149cd8529d735c2da:"846477000000000000000",e1b2aca154b8e0766c4eba30bc10c7f35036f368:"19980000000000000000","5c464197791c8a3da3c925436f277ab13bf2faa2":"8000000000000000000000","170a88a8997f92d238370f1affdee6347050b013":"3000800000000000000000",dadbfafd8b62b92a24efd75256dd83abdbd7bbdb:"19700000000000000000",bb993b96ee925ada7d99d786573d3f89180ce3aa:"2000000000000000000000",f2c362b0ef991bc82fb36e66ff75932ae8dd8225:"74000000000000000000","7f2382ffd8f83956467937f9ba72374623f11b38":"600000000000000000000","74d1a4d0c7524e018d4e06ed3b648092b5b6af2c":"50000000000000000000","24a750eae5874711116dd7d47b7186ce990d3103":"200000000000000000000",a8e42a4e33d7526cca19d9a36dcd6e8040d0ea73:"1080000000000000000000","3e1b2230afbbd310b4926a4c776d5ae7819c661d":"30000000000000000000000","6af9f0dfeeaebb5f64bf91ab771669bf05295553":"400000000000000000000","41e4a20275e39bdcefeb655c0322744b765140c2":"10000000000000000000000",ceb089ec8a78337e8ef88de11b49e3dd910f748f:"1000000000000000000000",e6bcd30a8fa138c5d9e5f6c7d2da806992812dcd:"260000000000000000000000",e08c60313106e3f9334fe6f7e7624d211130c077:"40000000000000000000",f5cffbba624e7eb321bc83c60ca68199b4e36671:"2000000000000000000000",d7c2803ed7b0e0837351411a8e6637d168bc5b05:"29549015000000000000000","0f3665d48e9f1419cd984fc7fa92788710c8f2e4":"2000000000000000000000",b48921c9687d5510744584936e8886bdbf2df69b:"1000000000000000000000",a94bbb8214cf8da0c2f668a2ac73e86248528d4b:"960000000000000000000",be0c2a80b9de084b172894a76cf4737a4f529e1a:"1999944000000000000000",fcf199f8b854222f182e4e1d099d4e323e2aae01:"1000000000000000000000",b52dfb45de5d74e3df208332bc571c809b8dcf32:"6000000000000000000000","704819d2e44d6ed1da25bfce84c49fcca25613e5":"400000000000000000000","6ff6cc90d649de4e96cffee1077a5b302a848dcb":"28600000000000000000","4d9c77d0750c5e6fbc247f2fd79274686cb353d6":"20000000000000000000","68e8022740f4af29eb48db32bcecddfd148d3de3":"1000000000000000000000","2cb615073a40dcdb99faa848572e987b3b056efb":"799600000000000000000","64adcceec53dd9d9dd15c8cc1a9e736de4241d2c":"56000000000000000000","2aec809df9325b9f483996e99f7331097f08aa0e":"4000000000000000000000","438c2f54ff8e629bab36b1442b760b12a88f02ae":"2000000000000000000000","9e35399071a4a101e9194daa3f09f04a0b5f9870":"4000000000000000000000",a5c336083b04f9471b8c6ed73679b74d66c363ec:"3014100000000000000000","7ad3f307616f19dcb143e6444dab9c3c33611f52":"50000000000000000000","455cb8ee39ffbc752331e5aefc588ef0ee593454":"999963000000000000000",c4c01afc3e0f045221da1284d7878574442fb9ac:"7419944000000000000000","99268327c373332e06c3f6164287d455b9d5fa4b":"2000000000000000000000","4367ae4b0ce964f4a54afd4b5c368496db169e9a":"2000000000000000000000","2cd79eb52027b12c18828e3eaab2969bfcd287e9":"20000000000000000000",b96841cabbc7dbd69ef0cf8f81dff3c8a5e21570:"12000000000000000000000",d7ebddb9f93987779b680155375438db65afcb6a:"100600000000000000000","0631d18bbbbd30d9e1732bf36edae2ce8901ab80":"3024800000000000000000","5fad960f6b2c84569c9f4d47bf1985fcb2c65da6":"999972000000000000000","01d599ee0d5f8c38ab2d392e2c65b74c3ce31820":"510000000000000000000",ff0cc8dac824fa24fc3caa2169e6e057cf638ad6:"4000000000000000000000",c25266c7676632f13ef29be455ed948add567792:"1337000000000000000000","9c344098ba615a398f11d009905b177c44a7b602":"1000000000000000000000","3b0accaf4b607cfe61d17334c214b75cdefdbd89":"2000000000000000000000","6d6634b5b8a40195d949027af4828802092ceeb6":"3000000000000000000000","208c45732c0a378f17ac8324926d459ba8b658b4":"2955000000000000000000",c24399b4bf86f7338fbf645e3b22b0e0b7973912:"2000000000000000000000","29763dd6da9a7c161173888321eba6b63c8fb845":"328000000000000000000","9c2fd54089af665df5971d73b804616039647375":"1000000000000000000000","0e09646c99af438e99fa274cb2f9c856cb65f736":"1910000000000000000000",be73274d8c5aa44a3cbefc8263c37ba121b20ad3:"500000000000000000000",ecfd004d02f36cd4d8b4a8c1a9533b6af85cd716:"5003800000000000000000",f978b025b64233555cc3c19ada7f4199c9348bf7:"400000000000000000000000","705ddd38355482b8c7d3b515bda1500dd7d7a817":"400000000000000000000","2b8a0dee5cb0e1e97e15cfca6e19ad21f995efad":"504206000000000000000","1098cc20ef84bad5146639c4cd1ca6c3996cb99b":"18200000000000000000",afdac5c1cb56e245bf70330066a817eaafac4cd1:"20000000000000000000","910e996543344c6815fb97cda7af4b8698765a5b":"103400000000000000000","94612781033b57b146ee74e753c672017f5385e4":"3600000000000000000000",d03fc165576aaed525e5502c8e140f8b2e869639:"6850000000000000000000","293384c42b6f8f2905ce52b7205c2274376c612b":"1400000000000000000000","09ee12b1b42b05af9cf207d5fcac255b2ec411f2":"58929000000000000000",dbd71efa4b93c889e76593de609c3b04cbafbe08:"20000000000000000000",fa86ca27bf2854d98870837fb6f6dfe4bf6453fc:"322061000000000000000","61ff8e67b34d9ee6f78eb36ffea1b9f7c15787af":"1640000000000000000000","6d4cbf3d8284833ae99344303e08b4d614bfda3b":"12000000000000000000000","2ff160c44f72a299b5ec2d71e28ce5446d2fcbaf":"360000000000000000000","94a7cda8f481f9d89d42c303ae1632b3b709db1d":"300000000000000000000","7566496162ba584377be040a4f87777a707acaeb":"4000000000000000000000",bdc461462b6322b462bdb33f22799e8108e2417d:"668500000000000000000","7e47637e97c14622882be057bea229386f4052e5":"440000000000000000000","3b5c251d7fd7893ba209fe541cecd0ce253a990d":"30000000000000000000000","0e498800447177b8c8afc3fdfa7f69f4051bb629":"2140234000000000000000",b71623f35107cf7431a83fb3d204b29ee0b1a7f4:"19700000000000000000","1d395b30adda1cf21f091a4f4a7b753371189441":"100000000000000000000000","2c2428e4a66974edc822d5dbfb241b2728075158":"2000000000000000000000",a575f2891dcfcda83c5cf01474af11ee01b72dc2:"100076000000000000000",ad728121873f0456d0518b80ab6580a203706595:"500000000000000000000","48669eb5a801d8b75fb6aa58c3451b7058c243bf":"30940000000000000000000",b3ae54fba09d3ee1d6bdd1e957923919024c35fa:"65513000000000000000","0d35408f226566116fb8acdaa9e2c9d59b76683f":"940000000000000000000",df211cd21288d6c56fae66c3ff54625dd4b15427:"2500024000000000000000","8a746c5d67064711bfca685b95a4fe291a27028e":"40000000000000000000","1cf105ab23023b554c583e86d7921179ee83169f":"1970000000000000000000","8cfedef198db0a9143f09129b3fd64dcbb9b4956":"2000000000000000000000","1e381adcf801a3bf9fd7bfac9ccc2b8482ad5e66":"600200000000000000000",e74608f506866ada6bfbfdf20fea440be76989ef:"1999944000000000000000","27e63989ca1e903bc620cf1b9c3f67b9e2ae6581":"1337000000000000000000",bb0857f1c911b24b86c8a70681473fe6aaa1cce2:"100000000000000000000","4f8e8d274fb22a3fd36a47fe72980471544b3434":"200000000000000000000","127d3fc5003bf63c0d83e93957836515fd279045":"111890000000000000000","95809e8da3fbe4b7f281f0b8b1715f420f7d7d63":"2000000000000000000000", -"28904bb7c4302943b709b14d7970e42b8324e1a1":"10027500000000000000000",c07e3867ada096807a051a6c9c34cc3b3f4ad34a:"1788210000000000000000",f0b469eae89d400ce7d5d66a9695037036b88903:"20000000000000000000000","7445202f0c74297a004eb3726aa6a82dd7c02fa1":"2000000000000000000000",c58f62fee9711e6a05dc0910b618420aa127f288:"3980000000000000000000","801d65c518b11d0e3f4f470221417013c8e53ec5":"4000000000000000000000","41010fc8baf8437d17a04369809a168a17ca56fb":"100000000000000000000",a1998144968a5c70a6415554cefec2824690c4a5:"20000000000000000000",e9559185f166fc9513cc71116144ce2deb0f1d4b:"20000000000000000000000",ed5b4c41e762d942404373caf21ed4615d25e6c1:"2013960000000000000000","665b000f0b772750cc3c217a5ef429a92bf1ccbb":"4000000000000000000000",febd9f81cf78bd5fb6c4b9a24bd414bb9bfa4c4e:"1990019000000000000000",a072691c8dd7cd4237ff72a75c1a9506d0ce5b9e:"370000000000000000000","6765df25280e8e4f38d4b1cf446fc5d7eb659e34":"100000000000000000000","524fb210522c5e23bb67dfbf8c26aa616da49955":"999971000000000000000",e987e6139e6146a717fef96bc24934a5447fe05d:"2000000000000000000000",d6110276cfe31e42825a577f6b435dbcc10cf764:"1000000000000000000000","5e51b8a3bb09d303ea7c86051582fd600fb3dc1a":"20000000000000000000","5c4f24e994ed8f850ea7818f471c8fac3bcf0452":"1724800000000000000000","85b2998d0c73302cb2ba13f489313301e053be15":"10000000000000000000000","0af6c8d539c96d50259e1ba6719e9c8060f388c2":"1000000000000000000000","7d901b28bf7f88ef73d8f73cca97564913ea8a24":"955000000000000000000",e01859f242f1a0ec602fa8a3b0b57640ec89075e:"555000000000000000000",c66ae4cee87fb3353219f77f1d6486c580280332:"29550000000000000000","2d40558b06f90a3923145592123b6774e46e31f4":"1000000000000000000000",ccf43975b76bfe735fec3cb7d4dd24f805ba0962:"60000000000000000000","1703b4b292b8a9deddede81bb25d89179f6446b6":"19690000000000000000000","0e9096d343c060db581a120112b278607ec6e52b":"20000000000000000000",f65819ac4cc14c137f05dd7977c7dae08d1a4ab5:"102000000000000000000",ca373fe3c906b8c6559ee49ccd07f37cd4fb5266:"1790000000000000000000",d28298524df5ec4b24b0ffb9df85170a145a9eb5:"287700000000000000000","5fcda847aaf8d7fa8bca08029ca2849166aa15a3":"623350000000000000000",bdc739a699700b2e8e2c4a4c7b058a0e513ddebe:"2000000000000000000000","0bb05f7224bb5804856556c07eeadbed87ba8f7c":"401100000000000000000",ab416fe30d58afe5d9454c7fce7f830bcc750356:"114515000000000000000","3eee6f1e96360b7689b3069adaf9af8eb60ce481":"1000000000000000000000","9a0d3cee3d9892ea3b3700a27ff84140d9025493":"60000000000000000000","5dc36de5359450a1ec09cb0c44cf2bb42b3ae435":"1117500000000000000000","35c8adc11125432b3b77acd64625fe58ebee9d66":"2000000000000000000000",a5e9cd4b74255d22b7d9b27ae8dd43ed6ed0252b:"766527000000000000000","31ea12d49a35a740780ddeeaece84c0835b26270":"200000000000000000000","7aef7b551f0b9c46e755c0f38e5b3a73fe1199f5":"1490000000000000000000",cc6d7b12061bc96d104d606d65ffa32b0036eb07:"10000000000000000000000","322021022678a0166d204b3aaa7ad4ec4b88b7d0":"400000000000000000000",b31196714a48dff726ea9433cd2912f1a414b3b3:"2680000000000000000000","0f2fb884c8aaff6f543ac6228bd08e4f60b0a5fd":"3145000000000000000000","7d9d221a3df89ddd7b5f61c1468c6787d6b333e6":"138000000000000000000","367f59cc82795329384e41e1283115e791f26a01":"2000000000000000000000",fd9579f119bbc819a02b61e38d8803c942f24d32:"105600000000000000000","3e2f26235e137a7324e4dc154b5df5af46ea1a49":"22458000000000000000","4c1579af3312e4f88ae93c68e9449c2e9a68d9c4":"2000000000000000000000",ffb04726dfa41afdc819168418610472970d7bfc:"4000000000000000000000","403c64896a75cad816a9105e18d8aa5bf80f238e":"985000000000000000000","5cd588a14ec648ccf64729f9167aa7bf8be6eb3d":"1000000000000000000000","24b2be118b16d8b2174769d17b4cf84f07ca946d":"2000000000000000000000",d3bb59fa31258be62f8ed232f1a7d47b4a0b41ee:"100000000000000000000",cc9ac715cd6f2610c52b58676456884297018b29:"13370000000000000000","6f2a31900e240395b19f159c1d00dfe4d898ebdf":"1999600000000000000000",d60b247321a32a5affb96b1e279927cc584de943:"2265500000000000000000",f7a1ade2d0f529123d1055f19b17919f56214e67:"500000000000000000000",bea00df17067a43a82bc1daecafb6c14300e89e6:"1820000000000000000000",a2968fc1c64bac0b7ae0d68ba949874d6db253f4:"20000000000000000000000","92d8ad9a4d61683b80d4a6672e84c20d62421e80":"20000000000000000000","6ed2a12b02f8c688c7b5d3a6ea14d63687dab3b6":"2000000000000000000000","7a63869fc767a4c6b1cd0e0649f3634cb121d24b":"77500000000000000000","84f522f0520eba52dd18ad21fa4b829f2b89cb97":"4949566000000000000000",d6234aaf45c6f22e66a225ffb93add629b4ef80f:"1000000000000000000000",e3d8bf4efe84b1616d1b89e427ddc6c8830685ae:"2000000000000000000000",a3db364a332d884ba93b2617ae4d85a1489bea47:"1700000000000000000000","9f7986924aeb02687cd64189189fb167ded2dd5c":"985000000000000000000","2eaf4e2a46b789ccc288c8d1d9294e3fb0853896":"2000000000000000000000",a02dc6aa328b880de99eac546823fccf774047fb:"1970000000000000000000","873b7f786d3c99ff012c4a7cae2677270240b9c5":"1730000000000000000000","1d69c83d28ff0474ceebeacb3ad227a144ece7a3":"5474937000000000000000","7b827cae7ff4740918f2e030ab26cb98c4f46cf5":"7460000000000000000000","3083ef0ed4c4401196774a95cf4edc83edc1484f":"170000000000000000000000","40ad74bc0bce2a45e52f36c3debb1b3ada1b7619":"6790000000000000000000","05423a54c8d0f9707e704173d923b946edc8e700":"127543000000000000000","22eb7db0ba56b0f8b816ccb206e615d929185b0d":"80500000000000000000","66082c75a8de31a53913bbd44de3a0374f7faa41":"1460000000000000000000",e3d3eaa299887865569e88be219be507189be1c9:"456156000000000000000",ae57cc129a96a89981dac60d2ffb877d5dc5e432:"1110994000000000000000","1a2434cc774422d48d53d59c5d562cce8407c94b":"30000000000000000000","21546914dfd3af2add41b0ff3e83ffda7414e1e0":"5969100000000000000000","4dcf62a3de3f061db91498fd61060f1f6398ff73":"1999944000000000000000","6fd98e563d12ce0fd60f4f1f850ae396a9823c02":"1261000000000000000000",edf8a3e1d40f13b79ec8e3e1ecf262fd92116263:"158000000000000000000",c09e3cfc19f605ff3ec9c9c70e2540d7ee974366:"500000000000000000000","953572f0ea6df9b197cae40e4b8ecc056c4371c5":"1000000000000000000000","163cc8be227646cb09719159f28ed09c5dc0dce0":"1337000000000000000000",a3932a31d6ff75fb3b1271ace7caa7d5e1ff1051:"20000000000000000000000",f9a94bd56198da245ed01d1e6430b24b2708dcc0:"749938000000000000000","3eb8b33b21d23cda86d8288884ab470e164691b5":"500000000000000000000","84bcbf22c09607ac84341d2edbc03bfb1739d744":"500000000000000000000","961c59adc74505d1864d1ecfcb8afa0412593c93":"40000000000000000000000",f068dfe95d15cd3a7f98ffa688b4346842be2690:"1255160000000000000000","291efe0081dce8c14799f7b2a43619c0c3b3fc1f":"1200000000000000000000",be4fd073617022b67f5c13499b827f763639e4e3:"2000000000000000000000",e40a7c82e157540a0b00901dbb86c716e1a062da:"49800000000000000000","6635b46f711d2da6f0e16370cd8ee43efb2c2d52":"2000000000000000000000","43748928e8c3ec4436a1d092fbe43ac749be1251":"400000000000000000000",b557ab9439ef50d237b553f02508364a466a5c03:"200000000000000000000","11928378d27d55c520ceedf24ceb1e822d890df0":"8000000000000000000000","61518464fdd8b73c1bb6ac6db600654938dbf17a":"200000000000000000000","004bfbe1546bc6c65b5c7eaa55304b38bbfec6d3":"2000000000000000000000",a5e0fc3c3affed3db6710947d1d6fb017f3e276d:"2000000000000000000000","8ecbcfacbfafe9f00c3922a24e2cf0026756ca20":"5640000000000000000000",fb5ffaa0f7615726357891475818939d2037cf96:"20000000000000000000",ae222865799079aaf4f0674a0cdaab02a6d570ff:"2000000000000000000000","9edc90f4be210865214ab5b35e5a8dd77415279d":"4000000000000000000000","9d7831e834c20b1baa697af1d8e0c621c5afff9a":"86500000000000000000","046d274b1af615fb505a764ad8dda770b1db2f3d":"2000000000000000000000",eaea23aa057200e7c9c15e8ff190d0e66c0c0e83:"2000000000000000000000","417a3cd19496530a6d4204c3b5a17ce0f207b1a5":"8000000000000000000000",a035a3652478f82dbd6d115faa8ca946ec9e681d:"109880000000000000000","4f5801b1eb30b712d8a0575a9a71ff965d4f34eb":"300000000000000000000","91dbb6aaad149585be47375c5d6de5ff09191518":"20000000000000000000000",d043a011ec4270ee7ec8b968737515e503f83028:"500000000000000000000",bb371c72c9f0316cea2bd9c6fbb4079e775429ef:"1760000000000000000000",aa1df92e51dff70b1973e0e924c66287b494a178:"534400000000000000000",bd5f46caab2c3d4b289396bbb07f203c4da82530:"80000000000000000000","4d29fc523a2c1629532121da9998e9b5ab9d1b45":"15800000000000000000",addb26317227f45c87a2cb90dc4cfd02fb23caf8:"1000000000000000000000","52e46783329a769301b175009d346768f4c87ee4":"2000000000000000000000",caad9dc20d589ce428d8fda3a9d53a607b7988b5:"4000000000000000000000","95034e1621865137cd4739b346dc17da3a27c34e":"1580000000000000000000","0c3239e2e841242db989a61518c22247e8c55208":"263656000000000000000","5a0d609aae2332b137ab3b2f26615a808f37e433":"160000000000000000000000","2334c590c7a48769103045c5b6534c8a3469f44a":"17443200000000000000000",ddfcca13f934f0cfbe231da13039d70475e6a1d0:"1000169000000000000000",ee7288d91086d9e2eb910014d9ab90a02d78c2a0:"2000000000000000000000",fb91fb1a695553f0c68e21276decf0b83909b86d:"100016000000000000000","38695fc7e1367ceb163ebb053751f9f68ddb07a0":"2000000000000000000000","65093b239bbfba23c7775ca7da5a8648a9f54cf7":"400000000000000000000","73d8fee3cb864dce22bb26ca9c2f086d5e95e63b":"1000000000000000000000",f7155213449892744bc60f2e04400788bd041fdd:"66850000000000000000",d1a71b2d0858e83270085d95a3b1549650035e23:"14900000000000000000000",eac17b81ed5191fb0802aa54337313834107aaa4:"8000000000000000000000",bb076aac92208069ea318a31ff8eeb14b7e996e3:"149000000000000000000","9f46e7c1e9078cae86305ac7060b01467d6685ee":"668500000000000000000","1598127982f2f8ad3b6b8fc3cf27bf617801ba2b":"173000000000000000000",e91dac0195b19e37b59b53f7c017c0b2395ba44c:"1880000000000000000000",a436c75453ccca4a1f1b62e5c4a30d86dde4be68:"2000000000000000000000","11001b89ed873e3aaec1155634b4681643986323":"1000000000000000000000",ab93b26ece0a0aa21365afed1fa9aea31cd54468:"1608000000000000000000",e77febabdf080f0f5dca1d3f5766f2a79c0ffa7c:"1386000000000000000000","1c4af0e863d2656c8635bc6ffec8dd9928908cb5":"2000000000000000000000","0c48ae62d1539788eba013d75ea60b64eeba4e80":"2213311000000000000000","423cc4594cf4abb6368de59fd2b1230734612143":"2000000000000000000000","7f6b28c88421e4857e459281d78461692489d3fb":"2000000000000000000000","806854588ecce541495f81c28a290373df0274b2":"582000000000000000000",dc76e85ba50b9b31ec1e2620bce6e7c8058c0eaf:"20000000000000000000",b00996b0566ecb3e7243b8227988dcb352c21899:"12000000000000000000000",f5d14552b1dce0d6dc1f320da6ffc8a331cd6f0c:"1337000000000000000000","55a61b109480b5b2c4fcfdef92d90584160c0d35":"44700000000000000000",b8947822d5ace7a6ad8326e95496221e0be6b73d:"20000000000000000000","492de46aaf8f1d708d59d79af1d03ad2cb60902f":"2000000000000000000000","0e0d6633db1e0c7f234a6df163a10e0ab39c200f":"200000000000000000000",f8bf9c04874e5a77f38f4c38527e80c676f7b887:"2000000000000000000000","15528350e0d9670a2ea27f7b4a33b9c0f9621d21":"4000086000000000000000",eccf7a0457b566b346ca673a180f444130216ac3:"100000000000000000000","10cf560964ff83c1c9674c783c0f73fcd89943fc":"40000000000000000000000",e7f06f699be31c440b43b4db0501ec0e25261644:"500000000000000000000",b6ce4dc560fc73dc69fb7a62e388db7e72ea764f:"966000000000000000000",f456055a11ab91ff668e2ec922961f2a23e3db25:"18200000000000000000","8dfbafbc0e5b5c86cd1ad697feea04f43188de96":"390060000000000000000","085b4ab75d8362d914435cedee1daa2b1ee1a23b":"3880000000000000000000",e400d651bb3f2d23d5f849e6f92d9c5795c43a8a:"2674000000000000000000","851aa91c82f42fad5dd8e8bb5ea69c8f3a5977d1":"148607000000000000000","4c935bb250778b3c4c7f7e07fc251fa630314aab":"1500000000000000000000",ebd356156a383123343d48843bffed6103e866b3:"1970000000000000000000",da0b48e489d302b4b7bf204f957c1c9be383b0df:"2000000000000000000000","7085ae7e7e4d932197b5c7858c00a3674626b7a5":"6000000000000000000000","5b06d1e6930c1054692b79e3dbe6ecce53966420":"205400000000000000000","8df53d96191471e059de51c718b983e4a51d2afd":"32000000000000000000000","0678654ac6761db904a2f7e8595ec1eaac734308":"878000000000000000000","89fee30d1728d96cecc1dab3da2e771afbcfaa41":"1999944000000000000000","59c5d06b170ee4d26eb0a0eb46cb7d90c1c91019":"10000000000000000000000","2b129c26b75dde127f8320bd0f63410c92a9f876":"2200000000000000000000","3d6ae053fcbc318d6fd0fbc353b8bf542e680d27":"14300000000000000000","755a60bf522fbd8fff9723446b7e343a7068567e":"20000000000000000000000","947e11e5ea290d6fc3b38048979e0cd44ec7c17f":"2000000000000000000000","711ecf77d71b3d0ea95ce4758afecdb9c131079d":"760000000000000000000",de9eff4c798811d968dccb460d9b069cf30278e0:"400000000000000000000","4e892e8081bf36e488fddb3b2630f3f1e8da30d2":"12003800000000000000000","8ede7e3dc50749c6c50e2e28168478c34db81946":"19999800000000000000000","0c30cacc3f72269f8b4f04cf073d2b05a83d9ad1":"2001000000000000000000",e51eb87e7fb7311f5228c479b48ec9878831ac4c:"2000000000000000000000","8b01da34d470c1d115acf4d8113c4dd8a8c338e4":"25220000000000000000000","4329fc0931cbeb033880fe4c9398ca45b0e2d11a":"2000400000000000000000","540c072802014ef0d561345aec481e8e11cb3570":"8000000000000000000000","21e5d2bae995ccfd08a5c16bb524e1f630448f82":"2800000000000000000000","5cf8c03eb3e872e50f7cfd0c2f8d3b3f2cb5183a":"200000000000000000000","5c0f2e51378f6b0d7bab617331580b6e39ad3ca5":"9600000000000000000000",d2f241255dd7c3f73c07043071ec08ddd9c5cde5:"500000000000000000000",cbe1b948864d8474e765145858fca4550f784b92:"10000000000000000000000","30742ccdf4abbcd005681f8159345c9e79054b1a":"668500000000000000000","6aeb9f74742ea491813dbbf0d6fcde1a131d4db3":"440800000000000000000","821eb90994a2fbf94bdc3233910296f76f9bf6e7":"10000000000000000000000","25c1a37ee5f08265a1e10d3d90d5472955f97806":"1820000000000000000000","7ef98b52bee953bef992f305fda027f8911c5851":"514717000000000000000","8adc53ef8c18ed3051785d88e996f3e4b20ecd51":"42000000000000000000000","007f4a23ca00cd043d25c2888c1aa5688f81a344":"773658000000000000000","4a735d224792376d331367c093d31c8794341582":"1900000000000000000000","05440c5b073b529b4829209dff88090e07c4f6f5":"1288000000000000000000","5e772e27f28800c50dda973bb33e10762e6eea20":"1790000000000000000000",a429fa88731fdd350e8ecd6ea54296b6484fe695:"1969606000000000000000",e0d76b7166b1f3a12b4091ee2b29de8caa7d07db:"2000000000000000000000","7ebd95e9c470f7283583dc6e9d2c4dce0bea8f84":"14000000000000000000000","883a78aeabaa50d8ddd8570bcd34265f14b19363":"3879951000000000000000","51f9c432a4e59ac86282d6adab4c2eb8919160eb":"530000000000000000000000",b86607021b62d340cf2652f3f95fd2dc67698bdf:"5000000000000000000000",acc0909fda2ea6b7b7a88db7a0aac868091ddbf6:"22155000000000000000","69b80ed90f84834afa3ff82eb964703b560977d6":"26740000000000000000",ca4ca9e4779d530ecbacd47e6a8058cfde65d98f:"800000000000000000000","5d6c5c720d66a6abca8397142e63d26818eaab54":"40000000000000000000",c2c13e72d268e7150dc799e7c6cf03c88954ced7:"700000000000000000000","6bbd1e719390e6b91043f8b6b9df898ea8001b34":"2000053000000000000000",a9ba6f413b82fcddf3affbbdd09287dcf50415ca:"4000000000000000000000",ced3c7be8de7585140952aeb501dc1f876ecafb0:"4000000000000000000000","1c63fa9e2cbbf23c49fcdef1cbabfe6e0d1e14c1":"1000000000000000000000","7d6e990daa7105de2526339833f77b5c0b85d84f":"20000000000000000000000","68addf019d6b9cab70acb13f0b3117999f062e12":"49941000000000000000",a77428bcb2a0db76fc8ef1e20e461a0a32c5ac15:"401100000000000000000","26048fe84d9b010a62e731627e49bc2eb73f408f":"4000000000000000000000",ff26138330274df4e0a3081e6df7dd983ec6e78f:"2000000000000000000000",b7382d37db0398ac72410cf9813de9f8e1ec8dad:"1000070000000000000000","44f62f2aaabc29ad3a6b04e1ff6f9ce452d1c140":"17000000000000000000000","47fef58584465248a0810d60463ee93e5a6ee8d3":"283100000000000000000",bd2b70fecc37640f69514fc7f3404946aad86b11:"1200000000000000000000","649a85b93653075fa6562c409a565d087ba3e1ba":"2000000000000000000000","55866486ec168f79dbe0e1abb18864d98991ae2c":"16100000000000000000",d7e74afdbad55e96cebc5a374f2c8b768680f2b0:"99000000000000000000",a8c1d6aa41fe3d65f67bd01de2a866ed1ed9ae52:"30000000000000000000","744c0c77ba7f236920d1e434de5da33e48ebf02c":"1970000000000000000000","9445ba5c30e98961b8602461d0385d40fbd80311":"10000000000000000000000",eb835c1a911817878a33d167569ea3cdd387f328:"1000000000000000000000","761a6e362c97fbbd7c5977acba2da74687365f49":"183840000000000000000","38202c5cd7078d4f887673ab07109ad8ada89720":"1000000000000000000000","5abfec25f74cd88437631a7731906932776356f9":"11901484239480000000000000","28e4af30cd93f686a122ad7bb19f8a8785eee342":"2101000000000000000000","3a9b111029ce1f20c9109c7a74eeeef34f4f2eb2":"4000000000000000000000","7bb9571f394b0b1a8eba5664e9d8b5e840677bea":"19700000000000000000","50fb36c27107ee2ca9a3236e2746cca19ace6b49":"2000000000000000000000",a3bc979b7080092fa1f92f6e0fb347e28d995045:"2800000000000000000000",d04b861b3d9acc563a901689941ab1e1861161a2:"20000000000000000000","58c555bc293cdb16c6362ed97ae9550b92ea180e":"20000000000000000000","8bf02bd748690e1fd1c76d270833048b66b25fd3":"11800000000000000000000",fbc01db54e47cdc3c438694ab717a856c23fe6e9:"8456774000000000000000","9c9a07a8e57c3172a919ef64789474490f0d9f51":"10000000000000000000000",fc7e22a503ec5abe9b08c50bd14999f520fa4884:"6387725000000000000000","9b773669e87d76018c090f8255e54409b9dca8b2":"20000000000000000000",ffe8cbc1681e5e9db74a0f93f8ed25897519120f:"1507000000000000000000","4d4cf5807429615e30cdface1e5aae4dad3055e6":"600000000000000000000",cfde0fc75d6f16c443c3038217372d99f5d907f7:"2419000000000000000000","818ffe271fc3973565c303f213f6d2da89897ebd":"5734655000000000000000",ba1fcaf223937ef89e85675503bdb7ca6a928b78:"640000000000000000000",a30a45520e5206d9004070e6af3e7bb2e8dd5313:"400000000000000000000",a747439ad0d393b5a03861d77296326de8bb9db9:"1000000000000000000000","14d00aad39a0a7d19ca05350f7b03727f08dd82e":"500000000000000000000","551999ddd205563327b9b530785acff9bc73a4ba":"6000000000000000000000",a4670731175893bbcff4fa85ce97d94fc51c4ba8:"8000000000000000000000",f858171a04d357a13b4941c16e7e55ddd4941329:"41984000000000000000",a6484cc684c4c91db53eb68a4da45a6a6bda3067:"6000000000000000000000","00d75ed60c774f8b3a5a5173fb1833ad7105a2d9":"2005500000000000000000",bf92418a0c6c31244d220260cb3e867dd7b4ef49:"99800000000000000000","716d50cca01e938500e6421cc070c3507c67d387":"2000000000000000000000","82a8b96b6c9e13ebec1e9f18ac02a60ea88a48ff":"1999998000000000000000","5a565285374a49eedd504c957d510874d00455bc":"100000000000000000000","778c79f4de1953ebce98fe8006d53a81fb514012":"999800000000000000000","41b2d34fde0b1029262b4172c81c1590405b03ae":"1000000000000000000000","4039bd50a2bde15ffe37191f410390962a2b8886":"200000000000000000000",c033be10cb48613bd5ebcb33ed4902f38b583003:"3000000000000000000000","5d5751819b4f3d26ed0c1ac571552735271dbefa":"1000000000000000000000",b600429752f399c80d0734744bae0a022eca67c6:"20000000000000000000",f875619d8a23e45d8998d184d480c0748970822a:"4000000000000000000000","71c7230a1d35bdd6819ed4b9a88e94a0eb0786dd":"4365000000000000000000",b2f9c972c1e9737755b3ff1b3088738396395b26:"20000000000000000000000",a66a4963b27f1ee1932b172be5964e0d3ae54b51:"173000000000000000000","53ce88e66c5af2f29bbd8f592a56a3d15f206c32":"140840000000000000000","433e3ba1c51b810fc467d5ba4dea42f7a9885e69":"40000000000000000000000",c7837ad0a0bf14186937ace06c5546a36aa54f46:"4000000000000000000000",c3f8f67295a5cd049364d05d23502623a3e52e84:"6000000000000000000000","3fd0bb47798cf44cdfbe4d333de637df4a00e45c":"100040000000000000000",a1ae8d4540d4db6fdde7146f415b431eb55c7983:"197000000000000000000","5cccf1508bfd35c20530aa642500c10dee65eaed":"850000000000000000000",a53ead54f7850af21438cbe07af686279a315b86:"10000000000000000000000","8cf6da0204dbc4860b46ad973fc111008d9e0c46":"200000000000000000000","8e7936d592008fdc7aa04edeeb755ab513dbb89d":"20000000000000000000","4a53dcdb56ce4cdce9f82ec0eb13d67352e7c88b":"4200000000000000000000","2b4f4507bb6b9817942ce433781b708fbcd166fd":"18200000000000000000","026432af37dc5113f1f46d480a4de0b28052237e":"355800000000000000000",e780a56306ba1e6bb331952c22539b858af9f77d:"50000000000000000000000",d1f1694d22671b5aad6a94995c369fbe6133676f:"1000000000000000000000","7c45f0f8442a56dbd39dbf159995415c52ed479b":"2000000000000000000000",b65941d44c50d24666670d364766e991c02e11c2:"600000000000000000000","45e68db8dbbaba5fc2cb337c62bcd0d61b059189":"2000000000000000000000","05f3631f5664bdad5d0132c8388d36d7d8920918":"20000000000000000000","5475d7f174bdb1f789017c7c1705989646079d49":"9400000000000000000000",c7bf2ed1ed312940ee6aded1516e268e4a604856:"6000000000000000000000","39aaf0854db6eb39bc7b2e43846a76171c0445de":"1850000000000000000000",c817df1b91faf30fe3251571727c9711b45d8f06:"1999944000000000000000","7d13d6705884ab2157dd8dcc7046caf58ee94be4":"137200000000000000000000","478dc09a1311377c093f9cc8ae74111f65f82f39":"4000000000000000000000","8043ed22f997e5a2a4c16e364486ae64975692c4":"1130513000000000000000",b9a985501ee950829b17fae1c9cf348c3156542c:"294100000000000000000",d5cba5b26bea5d73fabb1abafacdef85def368cc:"200000000000000000000","6776e133d9dc354c12a951087b639650f539a433":"120000000000000000000","804ca94972634f633a51f3560b1d06c0b293b3b1":"200000000000000000000","0be1fdf626ee6189102d70d13b31012c95cd1cd6":"2000000000000000000000",f848fce9ab611c7d99206e23fac69ad488b94fe1:"48500000000000000000",f01195d657ef3c942e6cb83949e5a20b5cfa8b1e:"25760000000000000000000","78a5e89900bd3f81dd71ba869d25fec65261df15":"51900000000000000000000",d6f1e55b1694089ebcb4fe7d7882aa66c8976176:"19998846000000000000000",d5294b666242303b6df0b1c88d37429bc8c965aa:"300700000000000000000","3171877e9d820cc618fc0919b29efd333fda4934":"1000000000000000000000","2901f8077f34190bb47a8e227fa29b30ce113b31":"100000000000000000000","6b2284440221ce16a8382de5ff0229472269deec":"1000000000000000000000","1bba03ff6b4ad5bf18184acb21b188a399e9eb4a":"1790000000000000000000","80744618de396a543197ee4894abd06398dd7c27":"2000000000000000000000","1b799033ef6dc7127822f74542bb22dbfc09a308":"100000000000000000000",d513a45080ff2febe62cd5854abe29ee4467f996:"153200000000000000000",e761d27fa3502cc76bb1a608740e1403cf9dfc69:"280000000000000000000","53989ed330563fd57dfec9bd343c3760b0799390":"6208000000000000000000",ccf7110d1bd9a74bfd1d7d7d2d9d55607e7b837d:"900000000000000000000",f373e9daac0c8675f53b797a160f6fc034ae6b23:"100000000000000000000",abc9a99e8a2148a55a6d82bd51b98eb5391fdbaf:"6000000000000000000000",ffec0913c635baca2f5e57a37aa9fb7b6c9b6e26:"805000000000000000000","581a3af297efa4436a29af0072929abf9826f58b":"2000000000000000000000","924efa6db595b79313277e88319625076b580a10":"2000000000000000000000","65d8dd4e251cbc021f05b010f2d5dc520c3872e0":"834956000000000000000","6c67d6db1d03516c128b8ff234bf3d49b26d2941":"100000000000000000000000","496d365534530a5fc1577c0a5241cb88c4da7072":"1790000000000000000000",b85ff03e7b5fc422981fae5e9941dacbdaba7584:"1337000000000000000000",e13540ecee11b212e8b775dc8e71f374aae9b3f8:"2000000000000000000000",a02e3f8f5959a7aab7418612129b701ca1b80010:"20000000000000000000",a7a3f153cdc38821c20c5d8c8241b294a3f82b24:"500000000000000000000","366175403481e0ab15bb514615cbb989ebc68f82":"2000000000000000000000","5104ecc0e330dd1f81b58ac9dbb1a9fbf88a3c85":"100000000000000000000000",a466d770d898d8c9d405e4a0e551efafcde53cf9:"492500000000000000000","5fa8a54e68176c4fe2c01cf671c515bfbdd528a8":"330000000000000000000000",e2e15c60dd381e3a4be25071ab249a4c5c5264da:"2350502000000000000000","0628bfbe5535782fb588406bc96660a49b011af5":"1520000000000000000000","04d6b8d4da867407bb997749debbcdc0b358538a":"1000000000000000000000","0e6ec313376271dff55423ab5422cc3a8b06b22b":"4000000000000000000000","8787d12677a5ec291e57e31ffbfad105c3324b87":"12438777000000000000000","58e2f11223fc8237f69d99c6289c148c0604f742":"24000000000000000000000","5600730a55f6b20ebd24811faa3de96d1662abab":"1880000000000000000000",fce089635ce97abac06b44819be5bb0a3e2e0b37:"92491000000000000000",fa0c1a988c8a17ad3528eb28b3409daa58225f26:"200000000000000000000","7ae1c19e53c71cee4c73fae2d7fc73bf9ab5e392":"1000000000000000000000",bd17eed82b9a2592019a1b1b3c0fbad45c408d22:"250000000000000000000","884a7a39d0916e05f1c242df55607f37df8c5fda":"23400000000000000000000",ca70f4ddbf069d2143bd6bbc7f696b52789b32e7:"3000000000000000000000","7b25bb9ca8e702217e9333225250e53c36804d48":"1880000000000000000000",ea8317197959424041d9d7c67a3ece1dbb78bb55:"394000000000000000000","5cb953a0e42f5030812226217fffc3ce230457e4":"100000000000000000000",d1f4dc1ddb8abb8848a8b14e25f3b55a8591c266:"250000000000000000000","6a42ca971c6578d5ade295c3e7f4ad331dd3424e":"6000000000000000000000","07e1162ceae3cf21a3f62d105990302e307f4e3b":"1530000000000000000000","5d1dc3387b47b8451e55106c0cc67d6dc72b7f0b":"2000000000000000000000","5d2819e8d57821922ee445650ccaec7d40544a8d":"200000000000000000000","4c24b78baf2bafc7fcc69016426be973e20a50b2":"3000000000000000000000","630c5273126d517ce67101811cab16b8534cf9a8":"9422595000000000000000","291f929ca59b54f8443e3d4d75d95dee243cef78":"499938000000000000000","2dd325fdffb97b19995284afa5abdb574a1df16a":"500000000000000000000","4fce8429ba49caa0369d1e494db57e89eab2ad39":"200000000000000000000000","712b76510214dc620f6c3a1dd29aa22bf6d214fb":"6000000000000000000000","266f2da7f0085ef3f3fa09baee232b93c744db2e":"60000000000000000000000","0770c61be78772230cb5a3bb2429a72614a0b336":"6767695000000000000000","02dfcb17a1b87441036374b762a5d3418b1cb4d4":"1340860000000000000000","5e67df8969101adabd91accd6bb1991274af8df2":"500000000000000000000","7d9c59631e2ba2e8e82891f3979922aaa3b567a1":"8000000000000000000000","949f8c107bc7f0aceaa0f17052aadbd2f9732b2e":"2000000000000000000000",ea4e809e266ae5f13cdbe38f9d0456e6386d1274:"4500000000000000000000",cd5510a242dfb0183de925fba866e312fabc1657:"2400000000000000000000",a36e0d94b95364a82671b608cb2d373245612909:"150011000000000000000","0ec46696ffac1f58005fa8439824f08eed1df89b":"10000000000000000000000",c6fb1ee37417d080a0d048923bdabab095d077c6:"200000000000000000000","53c9eca40973f63bb5927be0bc6a8a8be1951f74":"2000000000000000000000",ea14bfda0a6e76668f8788321f07df37824ec5df:"200000000000000000000000",dfb4d4ade52fcc818acc7a2c6bb2b00224658f78:"7750000000000000000000","5997ffefb3c1d9d10f1ae2ac8ac3c8e2d2292783":"1000000000000000000000","8eceb2e124536c5b5ffc640ed14ff15ed9a8cb71":"2000000000000000000000","8f02bda6c36922a6be6a509be51906d393f7b99b":"1019835000000000000000","530077c9f7b907ff9cec0c77a41a70e9029add4a":"2000000000000000000000","08936a37df85b3a158cafd9de021f58137681347":"18200000000000000000","8e9c429266df057efa78dd1d5f77fc40742ad466":"300061000000000000000",acc59f3b30ceffc56461cc5b8df48902240e0e7b:"2000000000000000000000",f5534815dc635efa5cc84b2ac734723e21b29372:"1580000000000000000000",f873e57a65c93b6e18cb75f0dc077d5b8933dc5c:"197000000000000000000","25b78c9fad85b43343f0bfcd0fac11c9949ca5eb":"2000000000000000000000",aad2b7f8106695078e6c138ec81a7486aaca1eb2:"200000000000000000000","509c8668036d143fb8ae70b11995631f3dfcad87":"1000000000000000000000","3602458da86f6d6a9d9eb03daf97fe5619d442fa":"2000000000000000000000","9f607b3f12469f446121cebf3475356b71b4328c":"4000000000000000000000",fe3827d57630cf8761d512797b0b858e478bbd12:"20000000000000000000","9d9c4efe9f433989e23be94049215329fa55b4cb":"256215000000000000000","9bd905f1719fc7acd0159d4dc1f8db2f21472338":"1000000000000000000000","7d82e523cc2dc591da3954e8b6bb2caf6461e69c":"2316058000000000000000","74afe54902d615782576f8baac13ac970c050f6e":"177670000000000000000",aff11ccf699304d5f5862af86083451c26e79ae5:"1999000000000000000000","3885fee67107dc3a3c741ee290c98918c9b99397":"20000000000000000000","36343aeca07b6ed58a0e62fa4ecb498a124fc971":"300000000000000000000",c94a28fb3230a9ddfa964e770f2ce3c253a7be4f:"200000000000000000000","9882967cee68d2a839fad8ab4a7c3dddf6c0adc8":"1336866000000000000000","95df4e3445d7662624c48eba74cf9e0a53e9f732":"56000000000000000000000",ca9faa17542fafbb388eab21bc4c94e8a7b34788:"1999999000000000000000",c8b1850525d946f2ae84f317b15188c536a5dc86:"2685000000000000000000","39bac68d947859f59e9226089c96d62e9fbe3cde":"40000000000000000000",a9bfc410dddb20711e45c07387eab30a054e19ac:"1154750000000000000000","540a1819bd7c35861e791804e5fbb3bc97c9abb1":"1454400000000000000000","667b61c03bb937a9f5d0fc5a09f1ea3363c77035":"4250000000000000000000","010df1df4bed23760d2d1c03781586ddf7918e54":"60000000000000000000",bd51ee2ea143d7b1d6b77e7e44bdd7da12f485ac:"1318800000000000000000",fb5125bf0f5eb0b6f020e56bfc2fdf3d402c097e:"5910000000000000000000","3f0c83aac5717962734e5ceaeaecd39b28ad06be":"2000000000000000000000",f10661ff94140f203e7a482572437938bec9c3f7:"20000000000000000000000",bd3097a79b3c0d2ebff0e6e86ab0edadbed47096:"1670000000000000000000",edeb4894aadd0081bbddd3e8846804b583d19f27:"2000000000000000000000","49c9771fca19d5b9d245c891f8158fe49f47a062":"10000000000000000000000","6405dd13e93abcff377e700e3c1a0086eca27d29":"18200000000000000000",ce5e04f0184369bcfa06aca66ffa91bf59fa0fb9:"40000000000000000000","4364309a9fa07095600f79edc65120cdcd23dc64":"10000000000000000000000",b749b54e04d5b19bdcedfb84da7701ab478c27ae:"2680000000000000000000",f593c65285ee6bbd6637f3be8f89ad40d489f655:"3000000000000000000000",d224f880f9479a89d32f09e52be990b288135cef:"17300000000000000000000","85bb51bc3bfe9a1b2a2f6b1cda95bca8b38c8d5e":"321750000000000000000",caf4481d9db78dc4f25f7b4ac8bd3b1ca0106b31:"5000000000000000000000","51ca8bd4dc644fac47af675563d5804a0da21eeb":"788000000000000000000","19f643e1a8fa04ae16006028138333a59a96de87":"20000000000000000000","58b808a65b51e6338969afb95ec70735e451d526":"39998000000000000000000","574921838cc77d6c98b17d903a3ae0ee0da95bd0":"53480000000000000000000","7c6924d07c3ef5891966fe0a7856c87bef9d2034":"2000000000000000000000",f9767e4ecb4a5980527508d7bec3d45e4c649c13:"1910000000000000000000",f3be99b9103ce7550aa74ff1db18e09dfe32e005:"2000000000000000000000","625644c95a873ef8c06cdb9e9f6d8d7680043d62":"1800000000000000000000","6a44af96b3f032ae641beb67f4b6c83342d37c5d":"29000000000000000000",d3a10ec7a5c9324999dd9e9b6bde7c911e584bda:"600000000000000000000",e8ddbed732ebfe754096fde9086b8ea4a4cdc616:"2000000000000000000000","235fa66c025ef5540070ebcf0d372d8177c467ab":"33400000000000000000000","4d08471d68007aff2ae279bc5e3fe4156fbbe3de":"40000000000000000000000",dadc00ab7927603c2fcf31cee352f80e6c4d6351:"1999664000000000000000","7393cbe7f9ba2165e5a7553500b6e75da3c33abf":"100000000000000000000","77617ebc4bebc5f5ddeb1b7a70cdeb6ae2ffa024":"1970000000000000000000","7fea1962e35d62059768c749bedd96cab930d378":"2000000000000000000000","243b3bca6a299359e886ce33a30341fafe4d573d":"20000000000000000000000",b94d47b3c052a5e50e4261ae06a20f45d8eee297:"2000000000000000000000",e727e67ef911b81f6cf9c73fcbfebc2b02b5bfc6:"2000000000000000000000",e510d6797fba3d6693835a844ea2ad540691971b:"17381000000000000000000","0cdc960b998c141998160dc179b36c15d28470ed":"500038000000000000000","3e76a62db187aa74f63817533b306cead0e8cebe":"31200000000000000000000","495b641b1cdea362c3b4cbbd0f5cc50b1e176b9c":"1000000000000000000000","5126460d692c71c9af6f05574d93998368a23799":"52000000000000000000",a008019863c1a77c1499eb39bbd7bf2dd7a31cb9:"137000000000000000000","65ee20b06d9ad589a7e7ce04b9f5f795f402aece":"2000000000000000000000",f432b9dbaf11bdbd73b6519fc0a904198771aac6:"152000000000000000000","85946d56a4d371a93368539690b60ec825107454":"1730000000000000000000","26f9f7cefd7e394b9d3924412bf2c2831faf1f85":"4000000000000000000000",d4ebb1929a23871cf77fe049ab9602be08be0a73:"1910000000000000000000","4fdac1aa517007e0089430b3316a1badd12c01c7":"500000000000000000000","05e671de55afec964b074de574d5158d5d21b0a3":"3940000000000000000000","20181c4b41f6f972b66958215f19f570c15ddff1":"1600000000000000000000",cc9519d1f3985f6b255eaded12d5624a972721e1:"1000000000000000000000","169bbefc41cfd7d7cbb8dfc63020e9fb06d49546":"2000000000000000000000","175a183a3a235ffbb03ba835675267229417a091":"16000000000000000000000","8dde3cb8118568ef4503fe998ccdf536bf19a098":"4000000000000000000000","6a05b21c4f17f9d73f5fb2b0cb89ff5356a6cc7e":"1500000000000000000000","5cc4cba621f220637742057f6055b80dffd77e13":"39997692000000000000000",ecb94c568bfe59ade650645f4f26306c736cace4:"267400000000000000000",dfa6b8b8ad3184e357da282951d79161cfb089bc:"400000000000000000000",a3058c51737a4e96c55f2ef6bd7bb358167ec2a7:"606093000000000000000","051d424276b21239665186133d653bb8b1862f89":"1000000000000000000000",d05ffb2b74f867204fe531653b0248e21c13544e:"1000000000000000000000",e1f63ebbc62c7b7444040eb99623964f7667b376:"20000000000000000000",e5a3d7eb13b15c100177236d1beb30d17ee15420:"2000000000000000000000","18fa8625c9dc843c78c7ab259ff87c9599e07f10":"1000000000000000000000","64264aedd52dcae918a012fbcd0c030ee6f71821":"1000000000000000000000","6f1f4907b8f61f0c51568d692806b382f50324f5":"2000000000000000000000", -becef61c1c442bef7ce04b73adb249a8ba047e00:"1000400000000000000000","7b893286427e72db219a21fc4dcd5fbf59283c31":"10000000000000000000000",ce5eb63a7bf4fbc2f6e4baa0c68ab1cb4cf98fb4:"2000000000000000000000","66ec16ee9caab411c55a6629e318de6ee216491d":"865000000000000000000","30b66150f1a63457023fdd45d0cc6cb54e0c0f06":"1000000000000000000000","87183160d172d2e084d327b86bcb7c1d8e6784ef":"4000086000000000000000",c420388fbee84ad656dd68cdc1fbaa9392780b34:"187767000000000000000","90f774c9147dde90853ddc43f08f16d455178b8c":"4000000000000000000000","1e1d7a5f2468b94ea826982dbf2125793c6e4a5a":"999940000000000000000","8043fdd0bc4c973d1663d55fc135508ec5d4f4fa":"20000000000000000000","7bca1da6c80a66baa5db5ac98541c4be276b447d":"679000000000000000000","73550beb732ba9ddafda7ae406e18f7feb0f8bb2":"2800000000000000000000",adc19ec835afe3e58d87dc93a8a9213c90451326:"1971200000000000000000","821d798af19989c3ae5b84a7a7283cd7fda1fabe":"20000000000000000000000","4c4e6f13fb5e3f70c3760262a03e317982691d10":"100000000000000000000","664e43119870af107a448db1278b044838ffcdaf":"400000000000000000000","8da1178f55d97772bb1d24111a404a4f8715b95d":"878149000000000000000","5e6e9747e162f8b45c656e0f6cae7a84bac80e4e":"2000000000000000000000",c7eac31abce6d5f1dea42202b6a674153db47a29:"591000000000000000000",d96711540e2e998343d4f590b6fc8fac3bb8b31d:"1758944000000000000000","9da4ec407077f4b9707b2d9d2ede5ea5282bf1df":"4000000000000000000000",f60c1b45f164b9580e20275a5c39e1d71e35f891:"2000000000000000000000",eb6394a7bfa4d28911d5a5b23e93f35e340c2294:"78000000000000000000",a89ac93b23370472daac337e9afdf642543f3e57:"10000000000000000000000",bb618e25221ad9a740b299ed1406bc3934b0b16d:"1000000000000000000000","817ac33bd8f847567372951f4a10d7a91ce3f430":"200015000000000000000",fe6a895b795cb4bf85903d3ce09c5aa43953d3bf:"3400000000000000000000","3673954399f6dfbe671818259bb278e2e92ee315":"200000000000000000000000",df0ff1f3d27a8ec9fb8f6b0cb254a63bba8224a5:"4367636000000000000000",ff12e49d8e06aa20f886293c0b98ed7eff788805:"4000000000000000000000","5aef16a226dd68071f2483e1da42598319f69b2c":"2000000000000000000000","0266ab1c6b0216230b9395443d5fa75e684568c6":"1000000000000000000000","14a7352066364404db50f0d0d78d754a22198ef4":"1880000000000000000000","444caf79b71338ee9aa7c733b02acaa7dc025948":"40000000000000000000","64e2de21200b1899c3a0c0653b5040136d0dc842":"20000000000000000000000","36e156610cd8ff64e780d89d0054385ca76755aa":"14000000000000000000000","0a6ebe723b6ed1f9a86a69ddda68dc47465c2b1b":"1185000000000000000000","38bf2a1f7a69de0e2546adb808b36335645da9ff":"2000320000000000000000","39f44663d92561091b82a70dcf593d754005973a":"199999000000000000000","24b9e6644f6ba4cde126270d81f6ab60f286dff4":"133700000000000000000","9b59eb213b1e7565e45047e04ea0374f10762d16":"2000000000000000000000","309544b6232c3dd737f945a03193d19b5f3f65b9":"1087440000000000000000",b28bb39f3466517cd46f979cf59653ee7d8f152e:"450000000000000000000","9da8e22ca10e67fea44e525e4751eeac36a31194":"260000000000000000000","4f8ae80238e60008557075ab6afe0a7f2e74d729":"100000000000000000000","74ed33acf43f35b98c9230b9e6642ecb5330839e":"681872000000000000000","22842ab830da509913f81dd1f04f10af9edd1c55":"2000000000000000000000",a8f37f0ab3a1d448a9e3ce40965f97a646083a34:"329800000000000000000","582b70669c97aab7d68148d8d4e90411e2810d56":"999972000000000000000",d5e55100fbd1956bbed2ca518d4b1fa376032b0b:"100000000000000000000",b7cc6b1acc32d8b295df68ed9d5e60b8f64cb67b:"300000000000000000000",e081ca1f4882db6043d5a9190703fde0ab3bf56d:"400000000000000000000",c02077449a134a7ad1ef7e4d927affeceeadb5ae:"18200000000000000000",e09fea755aee1a44c0a89f03b5deb762ba33006f:"1100070000000000000000",b3717731dad65132da792d876030e46ac227bb8a:"1000000000000000000000","157eb3d3113bd3b597714d3a954edd018982a5cb":"2000000000000000000000",dc57345b38e0f067c9a31d9deac5275a10949321:"200000000000000000000","40ea5044b204b23076b1a5803bf1d30c0f88871a":"14000000000000000000000","2bab0fbe28d58420b52036770a12f9952aea6911":"3820000000000000000000",adaa0e548c035affed64ca678a963fabe9a26bfd:"70000000000000000000",bb48eaf516ce2dec3e41feb4c679e4957641164f:"3820000000000000000000","7693bdeb6fc82b5bca721355223175d47a084b4d":"22000000000000000000000","03cb98d7acd817de9d886d22fab3f1b57d92a608":"1600000000000000000000",f88900db737955b1519b1a7d170a18864ce590eb:"18200000000000000000","757fa55446c460968bb74b5ebca96c4ef2c709c5":"1015200000000000000000",da855d53477f505ec4c8d5e8bb9180d38681119c:"5600000000000000000000",e41aea250b877d423a63ba2bce2f3a61c0248d56:"260000000000000000000","8262169b615870134eb4ac6c5f471c6bf2f789fc":"462500000000000000000","66b0c100c49149935d14c0dc202cce907cea1a3d":"1970000000000000000000","854c0c469c246b83b5d1b3eca443b39af5ee128a":"1600000000000000000000",eb6810691d1ae0d19e47bd22cebee0b3ba27f88a:"2499922000000000000000","24dcc24bd9c7210ceacfb30da98ae04a4d7b8ab9":"1000000000000000000000",e31b4eef184c24ab098e36c802714bd4743dd0d4:"200000000000000000000","99b8c824869de9ed24f3bff6854cb6dd45cc3f9f":"1880000000000000000000","2ae73a79aea0278533accf21070922b1613f8f32":"3097417000000000000000",ddbd2b932c763ba5b1b7ae3b362eac3e8d40121a:"10000000000000000000000","1b4bbcb18165211b265b280716cb3f1f212176e8":"472325000000000000000",e177e0c201d335ba3956929c571588b51c5223ae:"2000000000000000000000","1945fe377fe6d4b71e3e791f6f17db243c9b8b0f":"2185500000000000000000","3e9b34a57f3375ae59c0a75e19c4b641228d9700":"17900000000000000000",a4d6c82eddae5947fbe9cdfbd548ae33d91a7191:"8000000000000000000000",bad4425e171c3e72975eb46ac0a015db315a5d8f:"2000000000000000000000",a2d2aa626b09d6d4e4b13f7ffc5a88bd7ad36742:"4639390000000000000000",b61c34fcacda701a5aa8702459deb0e4ae838df8:"35000000000000000000000","145e0600e2a927b2dd8d379356b45a2e7d51d3ae":"2545843000000000000000","8df339214b6ad1b24663ce716034749d6ef838d9":"11000000000000000000000","8fd9a5c33a7d9edce0997bdf77ab306424a11ea9":"2000000000000000000000","097da12cfc1f7c1a2464def08c29bed5e2f851e9":"20000000000000000000",ddabf13c3c8ea4e3d73d78ec717afafa430e5479:"41600000000000000000000","9eeb07bd2b7890195e7d46bdf2071b6617514ddb":"2000000000000000000000","819af9a1c27332b1c369bbda1b3de1c6e933d640":"314308000000000000000",d7d2c6fca8ad1f75395210b57de5dfd673933909:"340000000000000000000",cdd5d881a7362c9070073bdfbc75e72453ac510e:"842000000000000000000",e9ac36376efa06109d40726307dd1a57e213eaa9:"194000000000000000000","1bea4df5122fafdeb3607eddda1ea4ffdb9abf2a":"346000000000000000000","3e5e93fb4c9c9d1246f8f247358e22c3c5d17b6a":"150000000000000000000","6c1ddd33c81966dc8621776071a4129482f2c65f":"40000000000000000000000","2ccb66494d0af689abf9483d365d782444e7dead":"1000000000000000000000","19571a2b8f81c6bcf66ab3a10083295617150003":"492500000000000000000","38ac664ee8e0795e4275cb852bcba6a479ad9c8d":"20000000000000000000",c4803bb407c762f90b7596e6fde194931e769590:"4000000000000000000000","93507e9e8119cbceda8ab087e7ecb071383d6981":"14000000000000000000000",b672734afcc224e2e609fc51d4f059732744c948:"295500000000000000000",fbbbebcfbe235e57dd2306ad1a9ec581c7f9f48f:"40000000000000000000","8c81410ea8354cc5c65c41be8bd5de733c0b111d":"9550000000000000000000","942c6b8c955bc0d88812678a236725b32739d947":"1550000000000000000000",d2e817738abf1fb486583f80c350318bed860c80:"240010000000000000000",bff5df769934b8943ca9137d0efef2fe6ebbb34e:"100000000000000000000","6c4e426e8dc005dfa3516cb8a680b02eea95ae8e":"1337000000000000000000",f645dd7c890093e8e4c8aa92a6bb353522d3dc98:"134000000000000000000","4bac846af4169f1d95431b341d8800b22180af1a":"20000000000000000000","0514954c3c2fb657f9a06f510ea22748f027cdd3":"400000000000000000000","163dca73d7d6ea3f3e6062322a8734180c0b78ef":"2941400000000000000000",feaca2ac74624bf348dac9985143cfd652a4be55:"26148245000000000000000",fe80e9232deaff19baf99869883a4bdf0004e53c:"855680000000000000000","17108dab2c50f99de110e1b3b3b4cd82f5df28e7":"980000000000000000000","837a645dc95c49549f899c4e8bcf875324b2f57c":"600400000000000000000","762998e1d75227fced7a70be109a4c0b4ed86414":"20000000000000000000",c0a7e8435dff14c25577739db55c24d5bf57a3d9:"49250000000000000000000",aead88d689416b1c91f2364421375b7d3c70fb2e:"2000000000000000000000","9279b2228cec8f7b4dda3f320e9a0466c2f585ca":"5000000000000000000000","36726f3b885a24f92996da81625ec8ad16d8cbe6":"1543723000000000000000","3951e48e3c869e6b72a143b6a45068cdb9d466d0":"20000000000000000000",f5d61ac4ca95475e5b7bffd5f2f690b316759615:"31040000000000000000000","158a0d619253bf4432b5cd02c7b862f7c2b75636":"135733000000000000000",e56d431324c92911a1749df292709c14b77a65cd:"8200000000000000000000","9976947eff5f6ae5da08dd541192f378b428ff94":"8000000000000000000000","83210583c16a4e1e1dac84ebd37e3d0f7c57eba4":"2000000000000000000000",dcb64df43758c7cf974fa660484fbb718f8c67c1:"20000000000000000000000",d4205592844055b3c7a1f80cefe3b8eb509bcde7:"178973000000000000000",d0648a581b3508e135a2935d12c9657045d871ca:"8022000000000000000000",e7d17524d00bad82497c0f27156a647ff51d2792:"20000000000000000000","21582e99e502cbf3d3c23bdffb76e901ac6d56b2":"100000000000000000000",e61f280915c774a31d223cf80c069266e5adf19b:"880000000000000000000","03c91d92943603e752203e05340e566013b90045":"802200000000000000000","22561c5931143536309c17e832587b625c390b9a":"4000000000000000000000",e399c81a1d701b44f0b66f3399e66b275aaaf8c1:"1000000000000000000000","7f8dbce180ed9c563635aad2d97b4cbc428906d9":"2674000000000000000000","9f61beb46f5e853d0a8521c7446e68e34c7d0973":"560000000000000000000","6d3f2ba856ccbb0237fa7661156b14b013f21240":"1000000000000000000000","5f742e487e3ab81af2f94afdbe1b9b8f5ccc81bc":"2172412000000000000000",b600feab4aa96c537504d96057223141692c193a:"400000000000000000000",fab487500df20fb83ebed916791d561772adbebf:"1999980000000000000000",f8704c16d2fd5ba3a2c01d0eb20484e6ecfa3109:"200000000000000000000","3f1bc420c53c002c9e90037c44fe6a8ef4ddc962":"173000000000000000000","82e577b515cb2b0860aafe1ce09a59e09fe7d040":"600000000000000000000",bc999e385c5aebcac8d6f3f0d60d5aa725336d0d:"2000000000000000000000",e16ce35961cd74bd590d04c4ad4a1989e05691c6:"146000000000000000000",eb76424c0fd597d3e341a9642ad1ee118b2b579d:"4000000000000000000000",c440c7ca2f964b6972ef664a2261dde892619d9c:"20000000000000000000000","460d5355b2ceeb6e62107d81e51270b26bf45620":"2005500000000000000000",fcada300283f6bcc134a91456760b0d77de410e0:"2000000000000000000000",be8d7f18adfe5d6cc775394989e1930c979d007d:"1000000000000000000000",a7f9220c8047826bd5d5183f4e676a6d77bfed36:"153368000000000000000","98d204f9085f8c8e7de23e589b64c6eff692cc63":"2000000000000000000000","5a2916b8d2e8cc12e207ab464d433e2370d823d9":"2000000000000000000000",c42d6aeb710e3a50bfb44d6c31092969a11aa7f3:"150052000000000000000","04ce45f600db18a9d0851b29d9393ebdaafe3dc5":"20000000000000000000","7a1370a742ec2687e761a19ac5a794329ee67404":"2999988000000000000000",da2ad58e77deddede2187646c465945a8dc3f641:"660000000000000000000",ec58bc0d0c20d8f49465664153c5c196fe59e6be:"400000000000000000000",f8063af4cc1dd9619ab5d8bff3fcd1faa8488221:"2000000000000000000000",b9231eb26e5f9e4b4d288f03906704fab96c87d6:"19700000000000000000000","6e5c2d9b1c546a86eefd5d0a5120c9e4e730190e":"199600000000000000000",e49936a92a8ccf710eaac342bc454b9b14ebecb1:"2000000000000000000000","21dbdb817a0d8404c6bdd61504374e9c43c9210e":"9999917000000000000000","5cebe30b2a95f4aefda665651dc0cf7ef5758199":"18200000000000000000","597038ff91a0900cbbab488af483c790e6ec00a0":"10000000000000000000000","0fa5d8c5b3f294efd495ab69d768f81872508548":"2000000000000000000000",feef3b6eabc94affd3310c1c4d0e65375e131119:"20000000000000000000","1ce81d31a7923022e125bf48a3e03693b98dc9dd":"2000000000000000000000","5887dc6a33dfed5ac1edefe35ef91a216231ac96":"250000000000000000000","4e8e47ae3b1ef50c9d54a38e14208c1abd3603c2":"2235000000000000000000",e845e387c4cbdf982280f6aa01c40e4be958ddb2:"25000000000000000000000","71d9494e50c5dd59c599dba3810ba1755e6537f0":"4000000000000000000000","6eb5578a6bb7c32153195b0d8020a6914852c059":"660000000000000000000000","543f8c674e2462d8d5daa0e80195a8708e11a29e":"63940000000000000000",a0459ef3693aacd1647cd5d8929839204cef53be:"1000000000000000000000",dda371e600d30688d4710e088e02fdf2b9524d5f:"6920000000000000000000",dd4dd6d36033b0636fcc8d0938609f4dd64f4a86:"60000000000000000000","3bd624b548cb659736907ed8aa3c0c705e24b575":"2000000000000000000000","414599092e879ae25372a84d735af5c4e510cd6d":"400000000000000000000","3d66cd4bd64d5c8c1b5eea281e106d1c5aad2373":"1951100000000000000000","5948bc3650ed519bf891a572679fd992f8780c57":"197000000000000000000","8b74a7cb1bb8c58fce267466a30358adaf527f61":"13620000000000000000000","3f10800282d1b7ddc78fa92d8230074e1bf6aeae":"4925000000000000000000","32dbb6716c54e83165829a4abb36757849b6e47d":"1000000000000000000000",e6b3ac3f5d4da5a8857d0b3f30fc4b2b692b77d7:"1460000000000000000000","052a58e035f1fe9cdd169bcf20970345d12b9c51":"1490000000000000000000","581bdf1bb276dbdd86aedcdb397a01efc0e00c5b":"1000000000000000000000","604e9477ebf4727c745bcabbedcb6ccf29994022":"1000060000000000000000","59b96deb8784885d8d3b4a166143cc435d2555a1":"1337000000000000000000","37d980a12ee3bf23cc5cdb63b4ae45691f74c837":"2000000000000000000000","3bfbd3847c17a61cf3f17b52f8eba1b960b3f39f":"3000000000000000000000","49c941e0e5018726b7290fc473b471d41dae80d1":"500000000000000000000",f26bcedce3feadcea3bc3e96eb1040dfd8ffe1a0:"775000000000000000000",d0944aa185a1337061ae20dc9dd96c83b2ba4602:"200000000000000000000","904caa429c619d940f8e6741826a0db692b19728":"1000000000000000000000",b95c9b10aa981cf4a67a71cc52c504dee8cf58bd:"4000000000000000000000","15874686b6733d10d703c9f9bec6c52eb8628d67":"2000000000000000000000","1374facd7b3f8d68649d60d4550ee69ff0484133":"269700000000000000000",b0e469c886593815b3495638595daef0665fae62:"1940000000000000000000","47ff6feb43212060bb1503d7a397fc08f4e70352":"2000000000000000000000",c60b04654e003b4683041f1cbd6bc38fda7cdbd6:"2000000000000000000000","3ecdb532e397579662b2a46141e78f8235936a5f":"66850000000000000000",b3a8c2cb7d358e5739941d945ba9045a023a8bbb:"1000000000000000000000","32ef5cdc671df5562a901aee5db716b9be76dcf6":"2000000000000000000000",c94110e71afe578aa218e4fc286403b0330ace8d:"2000000000000000000000","9b43dcb95fde318075a567f1e6b57617055ef9e8":"3940000000000000000000",efeea010756f81da4ba25b721787f058170befbd:"32470000000000000000",c88255eddcf521c6f81d97f5a42181c9073d4ef1:"290793000000000000000",dd47189a3e64397167f0620e484565b762bfbbf4:"1850000000000000000000","82f39b2758ae42277b86d69f75e628d958ebcab0":"40000000000000000000000",e37f5fdc6ec97d2f866a1cfd0d3a4da4387b22b5:"10000000000000000000000","62331df2a3cbee3520e911dea9f73e905f892505":"2000000000000000000000","8c5d16ed65e3ed7e8b96ca972bc86173e3500b03":"2000000000000000000000","8b9841862e77fbbe919470935583a93cf027e450":"2000054000000000000000",c8dd27f16bf22450f5771b9fe4ed4ffcb30936f4:"197000000000000000000",dec8a1a898f1b895d8301fe64ab3ad5de941f689:"787803000000000000000","61c4ee7c864c4d6b5e37ea1331c203739e826b2f":"30063000000000000000","3250e3e858c26adeccadf36a5663c22aa84c4170":"5000000000000000000000","299e0bca55e069de8504e89aca6eca21d38a9a5d":"55500000000000000000",d50f7fa03e389876d3908b60a537a6706304fb56:"100000000000000000000","69073269729e6414b26ec8dc0fd935c73b579f1e":"30000000000000000000000","14fcd1391e7d732f41766cdacd84fa1deb9ffdd2":"2000000000000000000000","823768746737ce6da312d53e54534e106f967cf3":"20000000000000000000","882f75708386653c80171d0663bfe30b017ed0ad":"2000000000000000000000",a25b086437fd2192d0a0f64f6ed044f38ef3da32:"335000000000000000000","5a9c8b69fc614d69564999b00dcb42db67f97e90":"3429227000000000000000",a2b701f9f5cdd09e4ba62baebae3a88257105885:"1000000000000000000000","5e7b8c54dc57b0402062719dee7ef5e37ea35d62":"2877224000000000000000","7ffabfbc390cbe43ce89188f0868b27dcb0f0cad":"6370000000000000000000",b5cdbc4115406f52e5aa85d0fea170d2979cc7ba:"1337000000000000000000","263814309de4e635cf585e0d365477fc40e66cf7":"146000000000000000000","24cff0e9336a9f80f9b1cb968caf6b1d1c4932a4":"200200000000000000000",d3a941c961e8ca8b1070f23c6d6d0d2a758a4444:"200000000000000000000",a97beb3a48c45f1528284cb6a95f7de453358ec6:"31000000000000000000000","4dd131c74a068a37c90aded4f309c2409f6478d3":"400008000000000000000","653675b842d7d8b461f722b4117cb81dac8e639d":"31000000000000000000","561be9299b3e6b3e63b79b09169d1a948ae6db01":"500000000000000000000",dc067ed3e12d711ed475f5156ef7e71a80d934b9:"9550000000000000000000","08d97eadfcb7b064e1ccd9c8979fbee5e77a9719":"266063000000000000000","6e4c2ab7db026939dbd3bc68384af660a61816b2":"167000000000000000000",bf4c73a7ede7b164fe072114843654e4d8781dde:"2000000000000000000000",f504943aaf16796e0b341bbcdf21d11cc586cdd1:"9000000000000000000000",ea81ca8638540cd9d4d73d060f2cebf2241ffc3e:"1970000000000000000000","9944fee9d34a4a880023c78932c00b59d5c82a82":"750022000000000000000","12f460ae646cd2780fd35c50a6af4b9accfa85c6":"1000000000000000000000","4e232d53b3e6be8f895361d31c34d4762b12c82e":"1760000000000000000000","6bb2aca23fa1626d18efd6777fb97db02d8e0ae4":"40000000000000000000000",bc4e471560c99c8a2a4b1b1ad0c36aa6502b7c4b:"12000000000000000000000","2e2cbd7ad82547b4f5ff8b3ab56f942a6445a3b0":"200000000000000000000","21ecb2dfa65779c7592d041cd2105a81f4fd4e46":"1000000000000000000000","34318625818ec13f11835ae97353ce377d6f590a":"1520000000000000000000",a7ef35ce87eda6c28df248785815053ec97a5045:"4999998000000000000000","6a514e6242f6b68c137e97fea1e78eb555a7e5f7":"20000000000000000000","9340b5f678e45ee05eb708bb7abb6ec8f08f1b6b":"6000000000000000000000","43cc08d0732aa58adef7619bed46558ad7774173":"4443926000000000000000","12e9a4ad2ad57484dd700565bddb46423bd9bd31":"19999800000000000000000",ebbeeb259184a6e01cccfc2207bbd883785ac90a:"619966000000000000000","704ab1150d5e10f5e3499508f0bf70650f028d4b":"4000000000000000000000",fc361105dd90f9ede566499d69e9130395f12ac8:"395000000000000000000000",c1b9a5704d351cfe983f79abeec3dbbbae3bb629:"20000000000000000000","66f50406eb1b11a946cab45927cca37470e5a208":"2000000000000000000000","53942e7949d6788bb780a7e8a0792781b1614b84":"15899600000000000000000","32ba9a7d0423e03a525fe2ebeb661d2085778bd8":"20000000000000000000000","11c0358aa6479de21866fe21071924b65e70f8b9":"36400000000000000000000","76cb9c8b69f4387675c48253e234cb7e0d74a426":"7396300000000000000000","9f5f44026b576a4adb41e95961561d41039ca391":"250000000000000000000","533a73a4a2228eee05c4ffd718bbf3f9c1b129a7":"6000000000000000000000",dcc52d8f8d9fc742a8b82767f0555387c563efff:"500000000000000000000",f456a75bb99655a7412ce97da081816dfdb2b1f2:"200000000000000000000",d0c101fd1f01c63f6b1d19bc920d9f932314b136:"20000000000000000000000",dabc225042a6592cfa13ebe54efa41040878a5a2:"259550000000000000000","38eec6e217f4d41aa920e424b9525197041cd4c6":"4428166000000000000000","8a247d186510809f71cffc4559471c3910858121":"1790000000000000000000","4f152b2fb8659d43776ebb1e81673aa84169be96":"2000000000000000000000",b4496ddb27799a222457d73979116728e8a1845b:"2610331000000000000000","4a4053b31d0ee5dbafb1d06bd7ac7ff3222c47d6":"1400000000000000000000","0f7bea4ef3f73ae0233df1e100718cbe29310bb0":"2000000000000000000000",c836e24a6fcf29943b3608e662290a215f6529ea:"292000000000000000000","1765361c2ec2f83616ce8363aae21025f2566f40":"5000000000000000000000",b6e6c3222b6b6f9be2875d2a89f127fb64100fe2:"8008000000000000000000","01bbc14f67af0639aab1441e6a08d4ce7162090f":"1309500000000000000000",af2058c7282cf67c8c3cf930133c89617ce75d29:"6920000000000000000000","464d9c89cce484df000277198ed8075fa63572d1":"20000000000000000000","50cd97e9378b5cf18f173963236c9951ef7438a5":"1400000000000000000000",cb47bd30cfa8ec5468aaa6a94642ced9c819c8d4:"4000000000000000000000","6b10f8f8b3e3b60de90aa12d155f9ff5ffb22c50":"2000000000000000000000","09b7a988d13ff89186736f03fdf46175b53d16e0":"6000000000000000000000","5bfafe97b1dd1d712be86d41df79895345875a87":"500000000000000000000",a06cd1f396396c0a64464651d7c205efaf387ca3:"1999944000000000000000",fc0096b21e95acb8d619d176a4a1d8d529badbef:"384601000000000000000",a74444f90fbb54e56f3ac9b6cfccaa4819e4614a:"20000000000000000000","3c15b3511df6f0342e7348cc89af39a168b7730f":"1000000000000000000000","3d6ff82c9377059fb30d9215723f60c775c891fe":"250066000000000000000",a524a8cccc49518d170a328270a2f88133fbaf5d:"294500000000000000000","8a7a06be199a3a58019d846ac9cbd4d95dd757de":"3000200000000000000000",d744ac7e5310be696a63b003c40bd039370561c6:"1670000000000000000000",fe362688845fa244cc807e4b1130eb3741a8051e:"1000000000000000000000",b2d0360515f17daba90fcbac8205d569b915d6ac:"6000000000000000000000",c53594c7cfb2a08f284cc9d7a63bbdfc0b319732:"49200000000000000000000",b3c228731d186d2ded5b5fbe004c666c8e469b86:"29000000000000000000","63e414603e80d4e5a0f5c18774204642258208e4":"5000000000000000000000","826ce5790532e0548c6102a30d3eac836bd6388f":"18000000000000000000000",c5e812f76f15f2e1f2f9bc4823483c8804636f67:"73000000000000000000","116fef5e601642c918cb89160fc2293ba71da936":"802200000000000000000","08b84536b74c8c01543da88b84d78bb95747d822":"200000000000000000000","04a80afad53ef1f84165cfd852b0fdf1b1c24ba8":"58000000000000000000","2b0362633614bfcb583569438ecc4ea57b1d337e":"20000000000000000000000",e95179527deca5916ca9a38f215c1e9ce737b4c9:"10000000000000000000000","2c5df866666a194b26cebb407e4a1fd73e208d5e":"1000000000000000000000","529e824fa072582b4032683ac7eecc1c04b4cac1":"2000000000000000000000","78634371e17304cbf339b1452a4ce438dc764cce":"10000000000000000000000",e172dfc8f80cd1f8cd8539dc26082014f5a8e3e8:"3000000000000000000000",b07618328a901307a1b7a0d058fcd5786e9e72fe:"30239500000000000000000",b0571153db1c4ed7acaefe13ecdfdb72e7e4f06a:"80520000000000000000000",ad910a23d6850613654af786337ad2a70868ac6d:"1999800000000000000000","4da5edc688b0cb62e1403d1700d9dcb99ffe3fd3":"2000000000000000000000",be2471a67f6047918772d0e36839255ed9d691ae:"4000000000000000000000","28868324337e11ba106cb481da962f3a8453808d":"2000000000000000000000",d8f94579496725b5cb53d7985c989749aff849c0:"17000000000000000000000","4981c5ff66cc4e9680251fc4cd2ff907cb327865":"750000000000000000000",fd2872d19e57853cfa16effe93d0b1d47b4f93fb:"4000000000000000000000","63c8dfde0b8e01dadc2e748c824cc0369df090b3":"3880000000000000000000",c4dd048bfb840e2bc85cb53fcb75abc443c7e90f:"3716000000000000000000",f579714a45eb8f52c3d57bbdefd2c15b2e2f11df:"1560000000000000000000",cc7b0481cc32e6faef2386a07022bcb6d2c3b4fc:"3160000000000000000000",a0aa5f0201f04d3bbeb898132f7c11679466d901:"36600000000000000000",f3df63a97199933330383b3ed7570b96c4812334:"2000000000000000000000","42732d8ef49ffda04b19780fd3c18469fb374106":"425068000000000000000","6f92d6e4548c78996509ee684b2ee29ba3c532b4":"1000000000000000000000",fff4bad596633479a2a29f9a8b3f78eefd07e6ee:"100000000000000000000",ac4460a76e6db2b9fcd152d9c7718d9ac6ed8c6f:"200000000000000000000","553b6b1c57050e88cf0c31067b8d4cd1ff80cb09":"400000000000000000000","84b6b6adbe2f5b3e2d682c66af1bc4905340c3ed":"619333000000000000000","9f4a7195ac7c151ca258cafda0cab083e049c602":"1537100000000000000000","2955c357fd8f75d5159a3dfa69c5b87a359dea8c":"2000000000000000000000","11d7844a471ef89a8d877555583ceebd1439ea26":"10098000000000000000000","34b454416e9fb4274e6addf853428a0198d62ee1":"407000000000000000000","308dd21cebe755126704b48c0f0dc234c60ba9b1":"200000000000000000000","381db4c8465df446a4ce15bf81d47e2f17c980bf":"32000000000000000000000","1abc4e253b080aeb437984ab05bca0979aa43e1c":"1000000000000000000000","53e35b12231f19c3fd774c88fec8cbeedf1408b2":"512000000000000000000","69e2e2e704307ccc5b5ca3f164fece2ea7b2e512":"7000000000000000000000","1914f1eb95d1277e93b6e61b668b7d77f13a11a1":"970000000000000000000","50e13023bd9ca96ad4c53fdfd410cb6b1f420bdf":"200000000000000000000","46224f32f4ece5c8867090d4409d55e50b18432d":"6000000000000000000000",ff83855051ee8ffb70b4817dba3211ed2355869d:"400000000000000000000",fb39189af876e762c71d6c3e741893df226cedd6:"4000000000000000000000","9875623495a46cdbf259530ff838a1799ec38991":"2000000000000000000000",e1b39b88d9900dbc4a6cdc481e1060080a8aec3c:"2000000000000000000000","5baf6d749620803e8348af3710e5c4fbf20fc894":"5003680000000000000000","9c54e4ed479a856829c6bb42da9f0b692a75f728":"7520000000000000000000","486a6c8583a84484e3df43a123837f8c7e2317d0":"323378000000000000000",d235d15cb5eceebb61299e0e827fa82748911d89:"4000000000000000000000","47d792a756779aedf1343e8883a6619c6c281184":"2000000000000000000000","70c213488a020c3cfb39014ef5ba6404724bcaa3":"1940000000000000000000","133c490fa5bf7f372888e607d958fab7f955bae1":"1580000000000000000000",a9e194661aac704ee9dea043974e9692ded84a5d:"482400000000000000000",bc6b58364bf7f1951c309e0cba0595201cd73f9a:"1812400000000000000000","2309d34091445b3232590bd70f4f10025b2c9509":"10000000000000000000000",d89bc271b27ba3ab6962c94a559006ae38d5f56a:"2000000000000000000000",ff0e2fec304207467e1e3307f64cbf30af8fd9cd:"2000000000000000000000",c0b0b7a8a6e1acdd05e47f94c09688aa16c7ad8d:"64234000000000000000",b66f92124b5e63035859e390628869dbdea9485e:"9850000000000000000000",a9e6e25e656b762558619f147a21985b8874edfe:"2000000000000000000000",a43e1947a9242b355561c30a829dfeeca2815af8:"3878255000000000000000","8b20ad3b94656dbdc0dd21a393d8a7d9e02138cb":"3000000000000000000000",aca2a838330b17302da731d30db48a04f0f207c1:"1337000000000000000000",fa60868aafd4ff4c5c57914b8ed58b425773dfa9:"8557400000000000000000","1848003c25bfd4aa90e7fcb5d7b16bcd0cffc0d8":"1000000000000000000000",b4b185d943ee2b58631e33dff5af6854c17993ac:"1000000000000000000000","7719888795ad745924c75760ddb1827dffd8cda8":"1999980000000000000000",ccd521132d986cb96869842622a7dda26c3ed057:"2000000000000000000000","253e32b74ea4490ab92606fda0aa257bf23dcb8b":"10000000000000000000000","3712367e5e55a96d5a19168f6eb2bc7e9971f869":"1000000000000000000000","8f29a14a845ad458f2d108b568d813166bcdf477":"10000000000000000000000","51a8c2163602a32ee24cf4aa97fd9ea414516941":"62904000000000000000","61cea71fa464d62a07063f920b0cc917539733d8":"1670000000000000000000","6f81f3abb1f933b1df396b8e9cc723a89b7c9806":"280000000000000000000","61b1b8c012cd4c78f698e470f90256e6a30f48dd":"200000000000000000000","4f3f2c673069ac97c2023607152981f5cd6063a0":"600000000000000000000",e2efa5fca79538ce6068bf31d2c516d4d53c08e5:"131200000000000000000","2383c222e67e969190d3219ef14da37850e26c55":"2000000000000000000000",eac3af5784927fe9a598fc4eec38b8102f37bc58:"1000000000000000000000","4fe56ab3bae1b0a44433458333c4b05a248f8241":"2180000000000000000000",fe9cfc3bb293ddb285e625f3582f74a6b0a5a6cd:"1970000000000000000000",f48e1f13f6af4d84b371d7de4b273d03a263278e:"600000000000000000000","1ba9228d388727f389150ea03b73c82de8eb2e09":"7258000000000000000000","37a7a6ff4ea3d60ec307ca516a48d3053bb79cbb":"2000000000000000000000",e33840d8bca7da98a6f3d096d83de78b70b71ef8:"2000000000000000000000","8e7fd23848f4db07906a7d10c04b21803bb08227":"1000000000000000000000","07d4334ec385e8aa54eedaeadb30022f0cdfa4ab":"2629946000000000000000",d4b085fb086f3d0d68bf12926b1cc3142cae8770:"3700000000000000000000","5a87f034e6f68f4e74ffe60c64819436036cf7d7":"20000000000000000000",c00ab080b643e1c2bae363e0d195de2efffc1c44:"500000000000000000000","22f3c779dd79023ea92a78b65c1a1780f62d5c4a":"1970000000000000000000",c7d5c7054081e918ec687b5ab36e973d18132935:"182000000000000000000","9662ee021926682b31c5f200ce457abea76c6ce9":"670500000000000000000","116a09df66cb150e97578e297fb06e13040c893c":"2000000000000000000000",b7240af2af90b33c08ae9764103e35dce3638428:"8464547000000000000000",e8b28acda971725769db8f563d28666d41ddab6c:"10000000000000000000000","17d4918dfac15d77c47f9ed400a850190d64f151":"2000000000000000000000",c42250b0fe42e6b7dcd5c890a6f0c88f5f5fb574:"149800000000000000000","5da2a9a4c2c0a4a924cbe0a53ab9d0c627a1cfa0":"733202000000000000000","5869fb867d71f1387f863b698d09fdfb87c49b5c":"3666000000000000000000",d49a75bb933fca1fca9aa1303a64b6cb44ea30e1:"10000000000000000000000","76331e30796ce664b2700e0d4153700edc869777":"2000000000000000000000","8a5fb75793d043f1bcd43885e037bd30a528c927":"356500000000000000000",fc0ee6f7c2b3714ae9916c45566605b656f32441:"1760000000000000000000",bf50ce2e264b9fe2b06830617aedf502b2351b45:"1000000000000000000000","0f6000de1578619320aba5e392706b131fb1de6f":"499986000000000000000",c953f934c0eb2d0f144bdab00483fd8194865ce7:"2000000000000000000000","24fd9a6c874c2fab3ff36e9afbf8ce0d32c7de92":"1337000000000000000000",c6cd68ec35362c5ad84c82ad4edc232125912d99:"27750000000000000000000","2a67660a1368efcd626ef36b2b1b601980941c05":"133700000000000000000","9deb39027af877992b89f2ec4a1f822ecdf12693":"2000000000000000000000",c12f881fa112b8199ecbc73ec4185790e614a20f:"2000000000000000000000",d58a52e078a805596b0d56ea4ae1335af01c66eb:"267400000000000000000","4d7cfaa84cb33106800a8c802fb8aa463896c599":"1790000000000000000000","0ee391f03c765b11d69026fd1ab35395dc3802a0":"200000000000000000000",a192f06ab052d5fd7f94eea8318e827815fe677a:"131400000000000000000","8f0ab894bd3f4e697dbcfb859d497a9ba195994a":"39501652000000000000000","387eeafd6b4009deaf8bd5b85a72983a8dcc3487":"4000000000000000000000","03b0f17cd4469ddccfb7da697e82a91a5f9e7774":"20000000000000000000","11172b278ddd44eea2fdf4cb1d16962391c453d9":"935900000000000000000000","33d172ab075c51db1cd40a8ca8dbff0d93b843bb":"5727139000000000000000","909b5e763a39dcc795223d73a1dbb7d94ca75ac8":"2000000000000000000000","0ca12ab0b9666cf0cec6671a15292f2653476ab2":"210000600000000000000000","6b5ae7bf78ec75e90cb503c778ccd3b24b4f1aaf":"800000000000000000000",d9e3857efd1e202a441770a777a49dcc45e2e0d3:"223500000000000000000",d703c6a4f11d60194579d58c2766a7ef16c30a29:"2000000000000000000000","838bd565f99fde48053f7917fe333cf84ad548ab":"200000000000000000000","8168edce7f2961cf295b9fcd5a45c06cdeda6ef5":"200000000000000000000",de50868eb7e3c71937ec73fa89dd8b9ee10d45aa:"1000000000000000000000","087498c0464668f31150f4d3c4bcdda5221ba102":"20000000000000000000","613fab44b16bbe554d44afd178ab1d02f37aeaa5":"2000000000000000000000",e2ee691f237ee6529b6557f2fcdd3dcf0c59ec63:"5450048000000000000000",a9ed377b7d6ec25971c1a597a3b0f3bead57c98f:"400000000000000000000","175feeea2aa4e0efda12e1588d2f483290ede81a":"200000000000000000000",b51ddcb4dd4e8ae6be336dd9654971d9fec86b41:"421133000000000000000","92c0f573eccf62c54810ee6ba8d1f113542b301b":"3384000000000000000000",a109e18bb0a39c9ef82fa19597fc5ed8e9eb6d58:"1640000000000000000000",f74e6e145382b4db821fe0f2d98388f45609c69f:"100000000000000000000","378f37243f3ff0bef5e1dc85eb4308d9340c29f9":"2000200000000000000000","84e9949680bece6841b9a7e5250d08acd87d16cd":"200000000000000000000","882bd3a2e9d74110b24961c53777f22f1f46dc5d":"13370000000000000000000",acce01e0a70610dc70bb91e9926fa9957f372fba:"537000000000000000000",c5f687717246da8a200d20e5e9bcac60b67f3861:"28650000000000000000",e14617f6022501e97e7b3e2d8836aa61f0ff2dba:"200000000000000000000","076ee99d3548623a03b5f99859d2d785a1778d48":"200000000000000000000","2c424ee47f583cdce07ae318b6fad462381d4d2b":"4000000000000000000000",f98250730c4c61c57f129835f2680894794542f3:"4000000000000000000000",ed1b24b6912d51b334ac0de6e771c7c0454695ea:"40000000000000000000",ffd5170fd1a8118d558e7511e364b24906c4f6b3:"60085000000000000000",bf49c14898316567d8b709c2e50594b366c6d38c:"733202000000000000000","65ea26eabbe2f64ccccfe06829c25d4637520225":"700000000000000000000","5c5419565c3aad4e714e0739328e3521c98f05cc":"528000000000000000000",c53b50fd3b2b72bc6c430baf194a515585d3986d:"20000000000000000000","2b74c373d04bfb0fd60a18a01a88fbe84770e58c":"40000000000000000000",d97f4526dea9b163f8e8e33a6bcf92fb907de6ec:"284000000000000000000",a4a49f0bc8688cc9e6dc04e1e08d521026e65574:"200000000000000000000","575c00c2818210c28555a0ff29010289d3f82309":"10000000000000000000000","3f1233714f204de9de4ee96d073b368d8197989f":"38606000000000000000",f964d98d281730ba35b2e3a314796e7b42fedf67:"1543800000000000000000","1deec01abe5c0d952de9106c3dc30639d85005d6":"2000000000000000000000","12d60d65b7d9fc48840be5f891c745ce76ee501e":"21359400000000000000000","5c6136e218de0a61a137b2b3962d2a6112b809d7":"294273000000000000000",cd43258b7392a930839a51b2ef8ad23412f75a9f:"2000000000000000000000",db3f258ab2a3c2cf339c4499f75a4bd1d3472e9e:"1500000000000000000000","0edd4b580ff10fe06c4a03116239ef96622bae35":"197000000000000000000","1d157c5876c5cad553c912caf6ce2d5277e05c73":"2000000000000000000000",cda1b886e3a795c9ba77914e0a2fe5676f0f5ccf:"106024000000000000000",f50cbafd397edd556c0678988cb2af5c2617e0a2:"716000000000000000000","327bb49e754f6fb4f733c6e06f3989b4f65d4bee":"20000000000000000000",c44bdec8c36c5c68baa2ddf1d431693229726c43:"100000000000000000000000","34e2849bea583ab0cc37975190f322b395055582":"7780340000000000000000","9221c9ce01232665741096ac07235903ad1fe2fc":"126489000000000000000", -ff3ded7a40d3aff0d7a8c45fa6136aa0433db457:"1999800000000000000000","10b5b34d1248fcf017f8c8ffc408ce899ceef92f":"267400000000000000000",f1a1f320407964fd3c8f2e2cc8a4580da94f01ea:"2000040000000000000000","6c800d4b49ba07250460f993b8cbe00b266a2553":"492500000000000000000",f827d56ed2d32720d4abf103d6d0ef4d3bcd559b:"26265000000000000000",ffb9c7217e66743031eb377af65c77db7359dcda:"40000000000000000000","530319db0a8f93e5bb7d4dbf4816314fbed8361b":"2000000000000000000000","9c28a2c4086091cb5da226a657ce3248e8ea7b6f":"280000000000000000000",db23a6fef1af7b581e772cf91882deb2516fc0a7:"200000000000000000000","6636d7ac637a48f61d38b14cfd4865d36d142805":"500000000000000000000",b3c260609b9df4095e6c5dff398eeb5e2df49985:"254030000000000000000","58e5c9e344c806650dacfc904d33edba5107b0de":"19100000000000000000","4f67396d2553f998785f704e07a639197dd1948d":"300080000000000000000","510d8159cc945768c7450790ba073ec0d9f89e30":"2560000000000000000000","593c48935beaff0fde19b04d309cd530a28e52ce":"4000000000000000000000",c27f4e08099d8cf39ee11601838ef9fc06d7fc41:"1790000000000000000000","07723e3c30e8b731ee456a291ee0e798b0204a77":"2000000000000000000000","0a652e2a8b77bd97a790d0e91361c98890dbb04e":"1000000000000000000000","671015b97670b10d5e583f3d62a61c1c79c5143f":"400000000000000000000","7cc24a6a958c20c7d1249660f7586226950b0d9a":"1970000000000000000000","6ef9e8c9b6217d56769af97dbb1c8e1b8be799d2":"182000000000000000000","5c4368918ace6409c79eca80cdaae4391d2b624e":"4000000000000000000000","043707071e2ae21eed977891dc79cd5d8ee1c2da":"2000000000000000000000","39bfd978689bec048fc776aa15247f5e1d7c39a2":"20000000000000000000000","05915d4e225a668162aee7d6c25fcfc6ed18db03":"66348000000000000000","3f551ba93cd54693c183fb9ad60d65e1609673c9":"2000000000000000000000",a8c0b02faf02cb5519dda884de7bbc8c88a2da81:"16700000000000000000",bd0c5cd799ebc48642ef97d74e8e429064fee492:"326000000000000000000","0a931b449ea8f12cdbd5e2c8cc76bad2c27c0639":"23031000000000000000","2ea5fee63f337a376e4b918ea82148f94d48a626":"1864242000000000000000",cc6c2df00e86eca40f21ffda1a67a1690f477c65:"3160000000000000000000",e5e37e19408f2cfbec83349dd48153a4a795a08f:"4200000000000000000000",f555a27bb1e2fd4e2cc784caee92939fc06e2fc9:"2000000000000000000000",dcf9719be87c6f46756db4891db9b611d2469c50:"1000000000000000000000","8e2f9034c9254719c38e50c9aa64305ed696df1e":"4728000000000000000000",a01f12d70f44aa7b113b285c22dcdb45873454a7:"18200000000000000000",bce40475d345b0712dee703d87cd7657fc7f3b62:"7750000000000000000000",bb19bf91cbad74cceb5f811db27e411bc2ea0656:"17600000000000000000",acc062702c59615d3444ef6214b8862b009a02ed:"1499936000000000000000","449ac4fbe383e36738855e364a57f471b2bfa131":"197000000000000000000000",ad59a78eb9a74a7fbdaefafa82eada8475f07f95:"500000000000000000000","6b6577f3909a4d6de0f411522d4570386400345c":"1880000000000000000000","79bf2f7b6e328aaf26e0bb093fa22da29ef2f471":"1790000000000000000000","940f715140509ffabf974546fab39022a41952d2":"1400000000000000000000","1d572edd2d87ca271a6714c15a3b37761dcca005":"127674000000000000000",d78ecd25adc86bc2051d96f65364866b42a426b7:"3877300000000000000000",f9729d48282c9e87166d5eef2d01eda9dbf78821:"99981000000000000000","17762560e82a93b3f522e0e524adb8612c3a7470":"1000000000000000000000",d500e4d1c9824ba9f5b635cfa3a8c2c38bbd4ced:"400000000000000000000",a11effab6cf0f5972cffe4d56596e98968144a8f:"1670000000000000000000",f64ecf2117931c6d535a311e4ffeaef9d49405b8:"2674000000000000000000","229cc4711b62755ea296445ac3b77fc633821cf2":"39481000000000000000",fc989cb487bf1a7d17e4c1b7c4b7aafdda6b0a8d:"20000000000000000000",ea8527febfa1ade29e26419329d393b940bbb7dc:"1999944000000000000000",bce13e22322acfb355cd21fd0df60cf93add26c6:"200000000000000000000","19ff244fcfe3d4fa2f4fd99f87e55bb315b81eb6":"200000000000000000000",d2581a55ce23ab10d8ad8c44378f59079bd6f658:"8800000000000000000000","4073fa49b87117cb908cf1ab512da754a932d477":"1970000000000000000000",b6a82933c9eadabd981e5d6d60a6818ff806e36b:"400000000000000000000",c79806032bc7d828f19ac6a640c68e3d820fa442:"20000000000000000000","577b2d073c590c50306f5b1195a4b2ba9ecda625":"373600000000000000000","7f13d760498d7193ca6859bc95c901386423d76c":"5000000000000000000000","416784af609630b070d49a8bcd12235c6428a408":"20000000000000000000000",fbe71622bcbd31c1a36976e7e5f670c07ffe16de:"400000000000000000000",a5698035391e67a49013c0002079593114feb353:"240000000000000000000",ab2871e507c7be3965498e8fb462025a1a1c4264:"775000000000000000000","9c78fbb4df769ce2c156920cfedfda033a0e254a":"1970000000000000000000","95e6f93dac228bc7585a25735ac2d076cc3a4017":"6000000000000000000000","3c1f91f301f4b565bca24751aa1f761322709ddd":"1790000000000000000000",f77f9587ff7a2d7295f1f571c886bd33926a527c:"1999800000000000000000","755f587e5efff773a220726a13d0f2130d9f896b":"1000000000000000000000","8c6aa882ee322ca848578c06cb0fa911d3608305":"600000000000000000000","492cb5f861b187f9df21cd4485bed90b50ffe22d":"499928000000000000000","95a577dc2eb3ae6cb9dfc77af697d7efdfe89a01":"136000000000000000000","4173419d5c9f6329551dc4d3d0ceac1b701b869e":"88000000000000000000","456ae0aca48ebcfae166060250525f63965e760f":"300000000000000000000","81f8de2c283d5fd4afbda85dedf9760eabbbb572":"3000000000000000000000",cd0af3474e22f069ec3407870dd770443d5b12b0:"2626262000000000000000","283c2314283c92d4b064f0aef9bb5246a7007f39":"200000000000000000000","29b3f561ee7a6e25941e98a5325b78adc79785f3":"100000000000000000000",cd4306d7f6947ac1744d4e13b8ef32cb657e1c00:"499986000000000000000",d9ec2efe99ff5cf00d03a8317b92a24aef441f7e:"2000000000000000000000","83dbf8a12853b40ac61996f8bf1dc8fdbaddd329":"970000000000000000000","9d93fab6e22845f8f45a07496f11de71530debc7":"1998000000000000000000",fd204f4f4aba2525ba728afdf78792cbdeb735ae:"2000000000000000000000","99fad50038d0d9d4c3fbb4bce05606ecadcd5121":"2000000000000000000000",d206aaddb336d45e7972e93cb075471d15897b5d:"600000000000000000000","428a1ee0ed331d7952ccbe1c7974b2852bd1938a":"2208370000000000000000","690228e4bb12a8d4b5e0a797b0c5cf2a7509131e":"1880000000000000000000",fa3a1aa4488b351aa7560cf5ee630a2fd45c3222:"878850000000000000000","0372e852582e0934344a0fed2178304df25d4628":"20000000000000000000000","35ea2163a38cdf9a123f82a5ec00258dae0bc767":"4000000000000000000000",d1fed0aee6f5dfd7e25769254c3cfad15adeccaa:"730000000000000000000",c05b740620f173f16e52471dc38b9c514a0b1526:"140000000000000000000","87e3062b2321e9dfb0875ce3849c9b2e3522d50a":"10000000000000000000000","303fbaebbe46b35b6e5b74946a5f99bc1585cae7":"878148000000000000000",e7a8e471eafb798f4554cc6e526730fd56e62c7d:"1000000000000000000000",ad7dd053859edff1cb6f9d2acbed6dd5e332426f:"1970000000000000000000",dc4345d6812e870ae90c568c67d2c567cfb4f03c:"6700000000000000000000",a6a08252c8595177cc2e60fc27593e2379c81fb1:"20055000000000000000",a9af21acbe482f8131896a228036ba51b19453c3:"49999000000000000000","86e3fe86e93da486b14266eadf056cbfa4d91443":"2000000000000000000000","744b03bba8582ae5498e2dc22d19949467ab53fc":"500000000000000000000",d3118ea3c83505a9d893bb67e2de142d537a3ee7:"20000000000000000000",b32f1c2689a5ce79f1bc970b31584f1bcf2283e7:"20000000000000000000","4828e4cbe34e1510afb72c2beeac8a4513eaebd9":"3940000000000000000000",b07bcc085ab3f729f24400416837b69936ba8873:"2000140000000000000000",bdc74873af922b9df474853b0fa7ff0bf8c82695:"3999000000000000000000","15ebd1c7cad2aff19275c657c4d808d010efa0f5":"200550000000000000000",cbc04b4d8b82caf670996f160c362940d66fcf1a:"6000000000000000000000","8197948121732e63d9c148194ecad46e30b749c8":"4000000000000000000000","69797bfb12c9bed682b91fbc593591d5e4023728":"10000000000000000000000",be9b8c34b78ee947ff81472eda7af9d204bc8466:"150000000000000000000",df3f57b8ee6434d047223def74b20f63f9e4f955:"250500000000000000000",a3ae1879007d801cb5f352716a4dd8ba2721de3d:"200000000000000000000000",cb4bb1c623ba28dc42bdaaa6e74e1d2aa1256c2a:"1999944000000000000000",e03c00d00388ecbf4f263d0ac778bb41a57a40d9:"1000072000000000000000",fc2c1f88961d019c3e9ea33009152e0693fbf88a:"8000000000000000000000","8599cbd5a6a9dcd4b966be387d69775da5e33c6f":"58180000000000000000000",b7a31a7c38f3db09322eae11d2272141ea229902:"2000000000000000000000","231a15acc199c89fa9cb22441cc70330bdcce617":"500000000000000000000","3fbed6e7e0ca9c84fbe9ebcf9d4ef9bb49428165":"2000000000000000000000","92cfd60188efdfb2f8c2e7b1698abb9526c1511f":"2000000000000000000000","5c936f3b9d22c403db5e730ff177d74eef42dbbf":"75000000000000000000","931fe712f64207a2fd5022728843548bfb8cbb05":"2000000000000000000000","08d54e83ad486a934cfaeae283a33efd227c0e99":"1039000000000000000000",a339a3d8ca280e27d2415b26d1fc793228b66043:"1013600000000000000000","581f34b523e5b41c09c87c298e299cbc0e29d066":"1131607000000000000000",caaa68ee6cdf0d34454a769b0da148a1faaa1865:"7216000000000000000000","0838a7768d9c2aca8ba279adfee4b1f491e326f1":"200000000000000000000",dde77a4740ba08e7f73fbe3a1674912931742eeb:"19867021000000000000000",cbe810fe0fecc964474a1db97728bc87e973fcbd:"10000000000000000000000","86c28b5678af37d727ec05e4447790f15f71f2ea":"200000000000000000000",dd6c062193eac23d2fdbf997d5063a346bb3b470:"20000000000000000000","5975b9528f23af1f0e2ec08ac8ebaa786a2cb8e0":"345827000000000000000",e29d8ae452dcf3b6ac645e630409385551faae0a:"80276000000000000000","2fbc85798a583598b522166d6e9dda121d627dbc":"200000000000000000000","7a36aba5c31ea0ca7e277baa32ec46ce93cf7506":"20000000000000000000000",dbcbcd7a57ea9db2349b878af34b1ad642a7f1d1:"200000000000000000000","92aae59768eddff83cfe60bb512e730a05a161d7":"1708015000000000000000",a5e93b49ea7c509de7c44d6cfeddef5910deaaf2:"2000000000000000000000",e33d980220fab259af6a1f4b38cf0ef3c6e2ea1a:"2000000000000000000000","8ed0af11ff2870da0681004afe18b013f7bd3882":"4000000000000000000000",f23e5c633221a8f7363e65870c9f287424d2a960:"1380000000000000000000","96334bfe04fffa590213eab36514f338b864b736":"400000000000000000000",fa1f1971a775c3504fef5079f640c2c4bce7ac05:"2000000000000000000000",df44c47fc303ac76e74f97194cca67b5bb3c023f:"591000000000000000000","4b74f5e58e2edf76daf70151964a0b8f1de0663c":"324020000000000000000",e38b91b35190b6d9deed021c30af094b953fdcaa:"33340000000000000000","6b38de841fad7f53fe02da115bd86aaf662466bd":"1730000000000000000000","11675a25554607a3b6c92a9ee8f36f75edd3e336":"159800000000000000000","0ba8705bf55cf219c0956b5e3fc01c4474a6cdc1":"94963000000000000000","0f05f120c89e9fbc93d4ab0c5e2b4a0df092b424":"30000000000000000000000",fdd1195f797d4f35717d15e6f9810a9a3ff55460:"18200000000000000000","63a61dc30a8e3b30a763c4213c801cbf98738178":"1000000000000000000000",e5bdf34f4ccc483e4ca530cc7cf2bb18febe92b3:"126260000000000000000",d6e09e98fe1300332104c1ca34fbfac554364ed9:"2000000000000000000000","5bd6862d517d4de4559d4eec0a06cad05e2f946e":"200000000000000000000","7294ec9da310bc6b4bbdf543b0ef45abfc3e1b4d":"22000000000000000000000",ae34861d342253194ffc6652dfde51ab44cad3fe:"466215000000000000000",f50ae7fab4cfb5a646ee04ceadf9bf9dd5a8e540:"3999952000000000000000",dd2bdfa917c1f310e6fa35aa8af16939c233cd7d:"400000000000000000000",e0060462c47ff9679baef07159cae08c29f274a9:"2000000000000000000000",b7d12e84a2e4c4a6345af1dd1da9f2504a2a996e:"200000000000000000000",f5500178cb998f126417831a08c2d7abfff6ab5f:"1308923000000000000000",fd377a385272900cb436a3bb7962cdffe93f5dad:"2000000000000000000000",a4a83a0738799b971bf2de708c2ebf911ca79eb2:"600000000000000000000","52a5e4de4393eeccf0581ac11b52c683c76ea15d":"19999800000000000000000",b07fdeaff91d4460fe6cd0e8a1b0bd8d22a62e87:"5260000000000000000000","35f5860149e4bbc04b8ac5b272be55ad1aca58e0":"200000000000000000000",fb135eb15a8bac72b69915342a60bbc06b7e077c:"20000000000000000000000","02d4a30968a39e2b3498c3a6a4ed45c1c6646822":"2000000000000000000000",e44b7264dd836bee8e87970340ed2b9aed8ed0a5:"5772100000000000000000",e90a354cec04d69e5d96ddc0c5138d3d33150aa0:"499971000000000000000","693d83be09459ef8390b2e30d7f7c28de4b4284e":"2000000000000000000000","87bf7cd5d8a929e1c785f9e5449106ac232463c9":"77800000000000000000",e5f8ef6d970636b0dcaa4f200ffdc9e75af1741c:"2000000000000000000000",fef09d70243f39ed8cd800bf9651479e8f4aca3c:"200000000000000000000",e98c91cadd924c92579e11b41217b282956cdaa1:"135800000000000000000",c2836188d9a29253e0cbda6571b058c289a0bb32:"2000000000000000000000",afa6946effd5ff53154f82010253df47ae280ccc:"1970000000000000000000","43c7ebc5b3e7af16f47dc5617ab10e0f39b4afbb":"1910000000000000000000","097ecda22567c2d91cb03f8c5215c22e9dcda949":"20055000000000000000","3e66b84769566ab67945d5fa81373556bcc3a1fa":"152000000000000000000","56373daab46316fd7e1576c61e6affcb6559ddd7":"215340000000000000000",faaeba8fc0bbda553ca72e30ef3d732e26e82041:"1338337000000000000000",f54c19d9ef3873bfd1f7a622d02d86249a328f06:"44284729000000000000000","825309a7d45d1812f51e6e8df5a7b96f6c908887":"2365000000000000000000","89009e3c6488bd5e570d1da34eabe28ed024de1b":"20000000000000000000000","63977cad7d0dcdc52b9ac9f2ffa136e8642882b8":"75000000000000000000",c239abdfae3e9af5457f52ed2b91fd0ab4d9c700:"2000000000000000000000","1a4ec6a0ae7f5a9427d23db9724c0d0cffb2ab2f":"179000000000000000000",a12a6c2d985daf0e4f5f207ae851aaf729b332cd:"100000000000000000000000",cbe52fc533d7dd608c92a260b37c3f45deb4eb33:"1000000000000000000000",abb2e6a72a40ba6ed908cdbcec3c5612583132fe:"1460000000000000000000","6503860b191008c15583bfc88158099301762828":"1000000000000000000000",a0228240f99e1de9cb32d82c0f2fa9a3d44b0bf3:"1600000000000000000000",e154daeadb545838cbc6aa0c55751902f528682a:"4925000000000000000000","8e92aba38e72a098170b92959246537a2e5556c0":"267400000000000000000",d23d7affacdc3e9f3dae7afcb4006f58f8a44600:"3600000000000000000000","00d78d89b35f472716eceafebf600527d3a1f969":"27750000000000000000000","120f9de6e0af7ec02a07c609ca8447f157e6344c":"267400000000000000000",e0352fdf819ba265f14c06a6315c4ac1fe131b2e:"1000000000000000000000","8f47328ee03201c9d35ed2b5412b25decc859362":"2000000000000000000000","453e359a3397944c5a275ab1a2f70a5e5a3f6989":"240000000000000000000","9bf58efbea0784eb068adecfa0bb215084c73a35":"5800000000000000000000","21bfe1b45cacde6274fd8608d9a178bf3eeb6edc":"2009400000000000000000",d1d5b17ffe2d7bbb79cc7d7930bcb2e518fb1bbf:"3000000000000000000000","20a29c5079e26b3f18318bb2e50e8e8b346e5be8":"499986000000000000000","7d392852f3abd92ff4bb5bb26cb60874f2be6795":"1000070000000000000000","55852943492970f8d629a15366cdda06a94f4513":"2000000000000000000000",ab5dfc1ea21adc42cf8c3f6e361e243fd0da61e5:"300000000000000000000","9d2bfc36106f038250c01801685785b16c86c60d":"380000000000000000000000","6e60aee1a78f8eda8b424c73e353354ae67c3042":"3490300000000000000000","7e29290038493559194e946d4e460b96fc38a156":"309072000000000000000","6006e36d929bf45d8f16231b126a011ae283d925":"176000000000000000000",d6d03572a45245dbd4368c4f82c95714bd2167e2:"1162200000000000000000",d1432538e35b7664956ae495a32abdf041a7a21c:"19700000000000000000000","2276264bec8526c0c0f270677abaf4f0e441e167":"1000000000000000000000",c8814e34523e38e1f927a7dce8466a447a093603:"10000000000000000000000","688a569e965524eb1d0ac3d3733eab909fb3d61e":"1320000000000000000000","90dc09f717fc2a5b69fd60ba08ebf40bf4e8246c":"4000086000000000000000","239a733e6b855ac592d663156186a8a174d2449e":"1637020000000000000000",bcdfacb9d9023c3417182e9100e8ea1d373393a3:"59100000000000000000",ba6440aeb3737b8ef0f1af9b0c15f4c214ffc7cf:"1000000000000000000000","322e5c43b0f524389655a9b3ff24f2d4db3da10f":"4650000000000000000000",be5a60689998639ad75bc105a371743eef0f7940:"501700000000000000000",b727a9fc82e1cffc5c175fa1485a9befa2cdbdd1:"999000000000000000000",a3883a24f7f166205f1a6a9949076c26a76e7178:"1820000000000000000000","5e95fe5ffcf998f9f9ac0e9a81dab83ead77003d":"539766000000000000000",e60955dc0bc156f6c41849f6bd776ba44b0ef0a1:"299982000000000000000",af203e229d7e6d419df4378ea98715515f631485:"1970000000000000000000","86499a1228ff2d7ee307759364506f8e8c8307a5":"1970000000000000000000","1a04cec420ad432215246d77fe178d339ed0b595":"316000000000000000000",cc2b5f448f3528d3fe41cc7d1fa9c0dc76f1b776:"60000000000000000000",cb50587412822304ebcba07dab3a0f09fffee486:"1370000000000000000000","4ae2a04d3909ef454e544ccfd614bfefa71089ae":"442800000000000000000",c8a2c4e59e1c7fc54805580438aed3e44afdf00e:"44000000000000000000","5792814f59a33a1843faa01baa089eb02ffb5cf1":"499986000000000000000",a1f2854050f872658ed82e52b0ad7bbc1cb921f6:"2010918000000000000000","92dca5e102b3b81b60f1a504634947c374a88ccb":"2000000000000000000000","732fead60f7bfdd6a9dec48125e3735db1b6654f":"20000000000000000000","6bf7b3c065f2c1e7c6eb092ba0d15066f393d1b8":"400000000000000000000",cde36d81d128c59da145652193eec2bfd96586ef:"4000000000000000000000","40eddb448d690ed72e05c225d34fc8350fa1e4c5":"7000000000000000000000","454b61b344c0ef965179238155f277c3829d0b38":"2000000000000000000000",ac3da526cfce88297302f34c49ca520dc271f9b2:"800000000000000000000",c989eec307e8839b9d7237cfda08822962abe487:"400000000000000000000",e99de258a4173ce9ac38ede26c0b3bea3c0973d5:"1656800000000000000000",ff0cb06c42e3d88948e45bd7b0d4e291aefeea51:"1910000000000000000000","0990e81cd785599ea236bd1966cf526302c35b9c":"1000000000000000000000","6da0ed8f1d69339f059f2a0e02471cb44fb8c3bb":"935900000000000000000","5d958a9bd189c2985f86c58a8c69a7a78806e8da":"10200000000000000000000","98be696d51e390ff1c501b8a0f6331b628ddc5ad":"2000000000000000000000","09d0b8cd077c69d9f32d9cca43b3c208a21ed48b":"150011000000000000000","96e7c0c9d5bf10821bf140c558a145b7cac21397":"1056000000000000000000","5b736eb18353629bde9676dadd165034ce5ecc68":"1970000000000000000000",e5a365343cc4eb1e770368e1f1144a77b832d7e0:"20000000000000000000","4cf5537b85842f89cfee359eae500fc449d2118f":"1000000000000000000000",c71f1d75873f33dcb2dd4b3987a12d0791a5ce27:"1015200000000000000000","9bf703b41c3624e15f4054962390bcba3052f0fd":"6055000000000000000000","145e1de0147911ccd880875fbbea61f6a142d11d":"4000000000000000000000","68419c6dd2d3ce6fcbb3c73e2fa079f06051bde6":"1970000000000000000000",d8eb78503ec31a54a90136781ae109004c743257:"1000000000000000000000",f25e4c70bc465632c89e5625a832a7722f6bffab:"4488000000000000000000","7b4d2a38269069c18557770d591d24c5121f5e83":"700000000000000000000","27d158ac3d3e1109ab6e570e90e85d3892cd7680":"100000000000000000000",d3679a47df2d99a49b01c98d1c3e0c987ce1e158:"280000000000000000000","095b949de3333a377d5019d893754a5e4656ff97":"340000000000000000000","6b17598a8ef54f797ae515ccb6517d1859bf8011":"100000000000000000000","3eaf0879b5b6db159b589f84578b6a74f6c10357":"7253657000000000000000","40d45d9d7625d15156c932b771ca7b0527130958":"100000000000000000000000","0392549a727f81655429cb928b529f25df4d1385":"26248000000000000000",c5b009baeaf788a276bd35813ad65b400b849f3b:"1000000000000000000000","6ed884459f809dfa1016e770edaf3e9fef46fa30":"3400170000000000000000","439d2f2f5110a4d58b1757935015408740fec7f8":"3830421000000000000000",dc46c13325cd8edf0230d068896486f007bf4ef1:"1337000000000000000000","8c54c7f8b9896e75d7d5f5c760258699957142ad":"40000000000000000000","61c8f1fa43bf846999ecf47b2b324dfb6b63fe3a":"800000000000000000000","935069444a6a984de2084e46692ab99f671fc727":"9000000000000000000000",fc49c1439a41d6b3cf26bb67e0365224e5e38f5f:"1000076000000000000000",e1dfb5cc890ee8b2877e885d267c256187d019e6:"100000000000000000000",ee7c3ded7c28f459c92fe13b4d95bafbab02367d:"700000000000000000000",a5874d754635a762b381a5c4c792483af8f23d1d:"50000000000000000000",cfbb32b7d024350e3321fa20c9a914035372ffc6:"401100000000000000000","2bc429d618a66a4cf82dbb2d824e9356effa126a":"1999944000000000000000",db244f97d9c44b158a40ed9606d9f7bd38913331:"102000000000000000000","55e220876262c218af4f56784798c7e55da09e91":"133566000000000000000",ca41ccac30172052d522cd2f2f957d248153409f:"1970000000000000000000",b11fa7fb270abcdf5a2eab95aa30c4b53636efbf:"800000000000000000000","0ffea06d7113fb6aec2869f4a9dfb09007facef4":"225416000000000000000","646628a53c2c4193da88359ce718dadd92b7a48d":"200032000000000000000",ca8409083e01b397cf12928a05b68455ce6201df:"1600000000000000000000",dbbcbb79bf479a42ad71dbcab77b5adfaa872c58:"1730000000000000000000",db7d4037081f6c65f9476b0687d97f1e044d0a1d:"660000000000000000000","4be90d412129d5a4d0424361d6649d4e47a62316":"1015200000000000000000",e3ab3ca9b870e3f548517306bba4de2591afafc2:"1200062000000000000000","5c61ab79b408dd3229f662593705d72f1e147bb8":"22729000000000000000000","4f177f9d56953ded71a5611f393322c30279895c":"246000000000000000000",e6cb260b716d4c0ab726eeeb07c8707204e276ae:"1000000000000000000000","44355253b27748e3f34fe9cae1fb718c8f249529":"200000000000000000000",a309df54cabce70c95ec3033149cd6678a6fd4cf:"223600000000000000000",ec4867d2175ab5b9469361595546554684cda460:"3000000000000000000000","8d06e464245cad614939e0af0845e6d730e20374":"200359000000000000000","9810e34a94db6ed156d0389a0e2b80f4fd6b0a8a":"2000000000000000000000",dcfff3e8d23c2a34b56bd1b3bd45c79374432239:"5000000000000000000000","7d7dd5ee614dbb6fbfbcd26305247a058c41faa1":"2000000000000000000000","8a9eca9c5aba8e139f8003edf1163afb70aa3aa9":"660000000000000000000",d942de4784f7a48716c0fd4b9d54a6e54c5f2f3e:"20000000000000000000000","07dae622630d1136381933d2ad6b22b839d82102":"200000000000000000000",abf12fa19e82f76c718f01bdca0003674523ef30:"2000000000000000000000","411c831cc6f44f1965ec5757ab4e5b3ca4cffd1f":"425000000000000000000","99129d5b3c0cde47ea0def4dfc070d1f4a599527":"2000000000000000000000",c5cdcee0e85d117dabbf536a3f4069bf443f54e7:"1969606000000000000000",f218bd848ee7f9d38bfdd1c4eb2ed2496ae4305f:"500000000000000000000",fe549bbfe64740189892932538daaf46d2b61d4f:"40000000000000000000",dc3f0e7672f71fe7525ba30b9755183a20b9166a:"9603617000000000000000","0e83b850481ab44d49e0a229a2e464902c69539b":"100000000000000000000","07ddd0422c86ef65bf0c7fc3452862b1228b08b8":"2065302000000000000000",a68c313445c22d919ee46cc2d0cdff043a755825:"75189000000000000000",a9e9dbce7a2cb03694799897bed7c54d155fdaa8:"197559000000000000000","18fccf62d2c3395453b7587b9e26f5cff9eb7482":"1000000000000000000000",ff41d9e1b4effe18d8b0d1f63fc4255fb4e06c3d:"1337000000000000000000","8f69eafd0233cadb4059ab779c46edf2a0506e48":"1788210000000000000000","9aa48c66e4fb4ad099934e32022e827427f277ba":"10000000000000000000000",f46980e3a4a9d29a6a6e90604537a3114bcb2897:"500000000000000000000","801732a481c380e57ed62d6c29de998af3fa3b13":"100000000000000000000","0cd6a141918d126b106d9f2ebf69e102de4d3277":"20000000000000000000","17589a6c006a54cad70103123aae0a82135fdeb4":"4000000000000000000000","8725e8c753b3acbfdca55f3c62dfe1a59454968a":"1000090000000000000000",d20dcb0b78682b94bc3000281448d557a20bfc83:"895000000000000000000",e84f8076a0f2969ecd333eef8de41042986291f2:"432000000000000000000",b3145b74506d1a8d047cdcdc55392a7b5350799a:"129314663000000000000000","0d9a825ff2bcd397cbad5b711d9dcc95f1cc112d":"12800000000000000000000","0ca670eb2c8b96cba379217f5929c2b892f39ef6":"2000000000000000000000","25cfc4e25c35c13b69f7e77dbfb08baf58756b8d":"40000000000000000000000","182db85293f606e88988c3704cb3f0c0bbbfca5a":"133700000000000000000",bd73c3cbc26a175062ea0320dd84b253bce64358:"394000000000000000000","2680713d40808e2a50ed013150a2a694b96a7f1d":"1790000000000000000000","51e32f14f4ca5e287cdac057a7795ea9e0439953":"500000000000000000000",b1e9c5f1d21e61757a6b2ee75913fc5a1a4101c3:"2000000000000000000000",d4c4d1a7c3c74984f6857b2f5f07e8face68056d:"2000000000000000000000","4651dc420e08c3293b27d2497890eb50223ae2f4":"20000000000000000000000",c74a3995f807de1db01a2eb9c62e97d0548f696f:"1000000000000000000000","0505a08e22a109015a22f685305354662a5531d5":"2600000000000000000000","39c773367c8825d3596c686f42bf0d14319e3f84":"133700000000000000000","0f929cf895db017af79f3ead2216b1bd69c37dc7":"2000000000000000000000",bdd3254e1b3a6dc6cc2c697d45711aca21d516b2:"2000000000000000000000",ae5d221afcd3d29355f508eadfca408ce33ca903:"100000000000000000000000","916cf17d71412805f4afc3444a0b8dd1d9339d16":"14300000000000000000","4319263f75402c0b5325f263be4a5080651087f0":"983086000000000000000","0f1c249cd962b00fd114a9349f6a6cc778d76c4d":"2000000000000000000000","54febcce20fe7a9098a755bd90988602a48c089e":"640000000000000000000","2c1800f35fa02d3eb6ff5b25285f5e4add13b38d":"906400000000000000000","72b904440e90e720d6ac1c2ad79c321dcc1c1a86":"1550000000000000000000",b0aa00950c0e81fa3210173e729aaf163a27cd71:"40000000000000000000000","663604b0503046e624cd26a8b6fb4742dce02a6f":"65400000000000000000","3c98594bf68b57351e8814ae9e6dfd2d254aa06f":"300000000000000000000","9c45202a25f6ad0011f115a5a72204f2f2198866":"5014000000000000000000",b02d062873334545cea29218e4057760590f7423:"3186000000000000000000","7bddb2ee98de19ee4c91f661ee8e67a91d054b97":"1000000000000000000000","9cf2928beef09a40f9bfc953be06a251116182fb":"6000000000000000000000","51b4758e9e1450e7af4268c3c7b1e7bd6f5c7550":"1000000000000000000000",eb570dba975227b1c42d6e8dea2c56c9ad960670:"2000000000000000000000","970d8b8a0016d143054f149fb3b8e550dc0797c7":"1000000000000000000000",c7b39b060451000ca1049ba154bcfa00ff8af262:"100000000000000000000000","945e18769d7ee727c7013f92de24d117967ff317":"2000000000000000000000",d18eb9e1d285dabe93e5d4bae76beefe43b521e8:"668500000000000000000",c618521321abaf5b26513a4a9528086f220adc6f:"27000000000000000000",dd65f6e17163b5d203641f51cc7b24b00f02c8fb:"200000000000000000000","131faed12561bb7aee04e5185af802b1c3438d9b":"219000000000000000000","1ced6715f862b1ff86058201fcce5082b36e62b2":"6684522000000000000000",a0ff5b4cf016027e8323497d4428d3e5a83b8795:"6596500000000000000000","02e816afc1b5c0f39852131959d946eb3b07b5ad":"1000000000000000000000","153cf2842cb9de876c276fa64767d1a8ecf573bb":"2000000000000000000000","3bc6e3ee7a56ce8f14a37532590f63716b9966e8":"2000000000000000000000",f6d25d3f3d846d239f525fa8cac97bc43578dbac:"896000000000000000000","2066774d822793ff25f1760909479cf62491bf88":"55160000000000000000000","46779a5656ff00d73eac3ad0c38b6c853094fb40":"230752000000000000000","22eed327f8eb1d1338a3cb7b0f8a4baa5907cd95":"23445000000000000000",ff88ebacc41b3687f39e4b59e159599b80cba33f:"400000000000000000000","2874f3e2985d5f7b406627e17baa772b01abcc9e":"6014000000000000000000",eb10458daca79e4a6b24b29a8a8ada711b7f2eb6:"3998000000000000000000","541060fc58c750c40512f83369c0a63340c122b6":"1970000000000000000000",fd2757cc3551a095878d97875615fe0c6a32aa8a:"598200000000000000000",be659d85e7c34f8833ea7f488de1fbb5d4149bef:"9072500000000000000000",e149b5726caf6d5eb5bf2acc41d4e2dc328de182:"1940000000000000000000","2fe0cc424b53a31f0916be08ec81c50bf8eab0c1":"600000000000000000000",e3712701619ca7623c55db3a0ad30e867db0168b:"20000000000000000000",f8ca336c8e91bd20e314c20b2dd4608b9c8b9459:"846000000000000000000","68acdaa9fb17d3c309911a77b05f5391fa034ee9":"8950000000000000000000",e77d7deab296c8b4fa07ca3be184163d5a6d606c:"92538000000000000000",e6b9545f7ed086e552924639f9a9edbbd5540b3e:"3760000000000000000000","2866b81decb02ee70ae250cee5cdc77b59d7b679":"2000000000000000000000","60e3cc43bcdb026aad759c7066f555bbf2ac66f5":"2000000000000000000000",fcbd85feea6a754fcf3449449e37ff9784f7773c:"3086000000000000000000","38a744efa6d5c2137defef8ef9187b649eee1c78":"4000000000000000000000","9d7655e9f3e5ba5d6e87e412aebe9ee0d49247ee":"2620100000000000000000","2020b81ae53926ace9f7d7415a050c031d585f20":"341200000000000000000","4244f1331158b9ce26bbe0b9236b9203ca351434":"10000000000000000000000","99c236141daec837ece04fdaee1d90cf8bbdc104":"2184000000000000000000","943d37864a4a537d35c8d99723cd6406ce2562e6":"2000000000000000000000",d79483f6a8444f2549d611afe02c432d15e11051:"20000000000000000000","9fd64373f2fbcd9c0faca60547cad62e26d9851f":"1000000000000000000000",b89c036ed7c492879921be41e10ca1698198a74c:"1820000000000000000000","7462c89caa9d8d7891b2545def216f7464d5bb21":"109162000000000000000",bb0366a7cfbd3445a70db7fe5ae34885754fd468:"6160000000000000000000","6c52cf0895bb35e656161e4dc46ae0e96dd3e62c":"4000086000000000000000",b9cf71b226583e3a921103a5316f855a65779d1b:"24000000000000000000000","016b60bb6d67928c29fd0313c666da8f1698d9c5":"2000000000000000000000","9454b3a8bff9709fd0e190877e6cb6c89974dbd6":"2674000000000000000000","84aac7fa197ff85c30e03b7a5382b957f41f3afb":"157600000000000000000",db6e560c9bc620d4bea3a94d47f7880bf47f2d5f:"89500000000000000000",eefd05b0e3c417d55b3343060486cdd5e92aa7a6:"1430000000000000000000","3a59a08246a8206f8d58f70bb1f0d35c5bcc71bd":"185000000000000000000","9bfff50db36a785555f07652a153b0c42b1b8b76":"2000000000000000000000",d44f5edf2bcf2433f211dadd0cc450db1b008e14:"267400000000000000000","2378fd4382511e968ed192106737d324f454b535":"1000000000000000000000",c94089553ae4c22ca09fbc98f57075cf2ec59504:"4000000000000000000000","08ef3fa4c43ccdc57b22a4b9b2331a82e53818f2":"4000000000000000000000",e48e65125421880d42bdf1018ab9778d96928f3f:"4200000000000000000000","67518e5d02b205180f0463a32004471f753c523e":"1984289000000000000000","0da7401262384e2e8b4b26dd154799b55145efa0":"300000000000000000000","0b6920a64b363b8d5d90802494cf564b547c430d":"1200000000000000000000",a5ab4bd3588f46cb272e56e93deed386ba8b753d:"1332989000000000000000","1788da9b57fd05edc4ff99e7fef301519c8a0a1e":"2000000000000000000000","17b2d6cf65c6f4a347ddc6572655354d8a412b29":"2000000000000000000000",d0319139fbab2e8e2accc1d924d4b11df6696c5a:"200000000000000000000","4c377bb03ab52c4cb79befa1dd114982924c4ae9":"1827814000000000000000",fb949c647fdcfd2514c7d58e31f28a532d8c5833:"20000000000000000000000","70e5e9da735ff077249dcb9aaf3db2a48d9498c0":"1000000000000000000000",fe6f5f42b6193b1ad16206e4afb5239d4d7db45e:"1730000000000000000000",bda4be317e7e4bed84c0495eee32d607ec38ca52:"2309457000000000000000","5910106debd291a1cd80b0fbbb8d8d9e93a7cc1e":"2000000000000000000000",ba42f9aace4c184504abf5425762aca26f71fbdc:"37400000000000000000",beb4fd315559436045dcb99d49dcec03f40c42dc:"2000000000000000000000","452b64db8ef7d6df87c788639c2290be8482d575":"8000000000000000000000","66e09427c1e63deed7e12b8c55a6a19320ef4b6a":"170000000000000000000",faad905d847c7b23418aeecbe3addb8dd3f8924a:"1970000000000000000000",a29319e81069e5d60df00f3de5adee3505ecd5fb:"2000000000000000000000",cf348f2fe47b7e413c077a7baf3a75fbf8428692:"2000000000000000000000",e1e8c50b80a352b240ce7342bbfdf5690cc8cb14:"394000000000000000000","131c792c197d18bd045d7024937c1f84b60f4438":"4000000000000000000000",e49af4f34adaa2330b0e49dc74ec18ab2f92f827:"2000000000000000000000",f2e99f5cbb836b7ad36247571a302cbe4b481c69:"1970000000000000000000",c93fbde8d46d2bcc0fa9b33bd8ba7f8042125565:"1400000000000000000000","038779ca2dbe663e63db3fe75683ea0ec62e2383":"1670000000000000000000",a33cb450f95bb46e25afb50fe05feee6fb8cc8ea:"776000000000000000000","40ab66fe213ea56c3afb12c75be33f8e32fd085d":"4000000000000000000000","6403d062549690c8e8b63eae41d6c109476e2588":"2000000000000000000000",bfb0ea02feb61dec9e22a5070959330299c43072:"20000000000000000000000","99c475bf02e8b9214ada5fad02fdfd15ba365c0c":"591000000000000000000","904966cc2213b5b8cb5bd6089ef9cddbef7edfcc":"2000000000000000000000","767a03655af360841e810d83f5e61fb40f4cd113":"985000000000000000000",ab209fdca979d0a647010af9a8b52fc7d20d8cd1:"9129000000000000000000","6294eae6e420a3d5600a39c4141f838ff8e7cc48":"2955000000000000000000","9777cc61cf756be3b3c20cd4491c69d275e7a120":"10000000000000000000000",bcbf6ba166e2340db052ea23d28029b0de6aa380:"3880000000000000000000","9f10f2a0463b65ae30b070b3df18cf46f51e89bd":"1910000000000000000000","8d9952d0bb4ebfa0efd01a3aa9e8e87f0525742e":"3460000000000000000000","4f23b6b817ffa5c664acdad79bb7b726d30af0f9":"1760000000000000000000",b4c20040ccd9a1a3283da4d4a2f365820843d7e2:"1000000000000000000000","7f49e7a4269882bd8722d4a6f566347629624079":"2000000000000000000000","33629bd52f0e107bc071176c64df108f64777d49":"33425000000000000000","6a7b2e0d88867ff15d207c222bebf94fa6ce8397":"60000000000000000000000",b7ce684b09abda53389a875369f71958aeac3bdd:"2000000000000000000000",ffbc3da0381ec339c1c049eb1ed9ee34fdcea6ca:"4000000000000000000000","849ab80790b28ff1ffd6ba394efc7463105c36f7":"34600000000000000000",b0b36af9aeeedf97b6b02280f114f13984ea3260:"985000000000000000000","4d57e716876c0c95ef5eaebd35c8f41b069b6bfe":"2000000000000000000000","2d2b032359b363964fc11a518263bfd05431e867":"149600000000000000000","2ccc1f1cb5f4a8002e186b20885d9dbc030c0894":"2000000000000000000000","016c85e1613b900fa357b8283b120e65aefcdd08":"799954000000000000000","710b0274d712c77e08a5707d6f3e70c0ce3d92cf":"6400000000000000000000","3cd3a6e93579c56d494171fc533e7a90e6f59464":"2000000000000000000000",fe0e30e214290d743dd30eb082f1f0a5225ade61:"200000000000000000000",d0718520eae0a4d62d70de1be0ca431c5eea2482:"2000000000000000000000",af7f79cb415a1fb8dbbd094607ee8d41fb7c5a3b:"10000000000000000000000",b7d252ee9402b0eef144295f0e69f0db586c0871:"660000000000000000000",c3b928a76fad6578f04f0555e63952cd21d1520a:"2000000000000000000000", -a7a517d7ad35820b09d497fa7e5540cde9495853:"2000000000000000000000",e6e886317b6a66a5b4f81bf164c538c264351765:"2000000000000000000000","0770b43dbae4b1f35a927b4fa8124d3866caf97b":"1016390000000000000000","52b4257cf41b6e28878d50d57b99914ffa89873a":"3930150000000000000000",e08bc29c2b48b169ff2bdc16714c586e6cb85ccf:"20000000000000000000","2372c4c1c9939f7aaf6cfac04090f00474840a09":"10000000000000000000000",ab6b65eab8dfc917ec0251b9db0ecfa0fa032849:"500000000000000000000","582e7cc46f1d7b4e6e9d95868bfd370573178f4c":"2000000000000000000000",f167f5868dcf4233a7830609682caf2df4b1b807:"2396150000000000000000",ec82f50d06475f684df1b392e00da341aa145444:"2000000000000000000000","0968ee5a378f8cadb3bafdbed1d19aaacf936711":"1000000000000000000000",a86613e6c4a4c9c55f5c10bcda32175dcbb4af60:"10696140000000000000000",a5cd123992194b34c4781314303b03c54948f4b9:"2010462000000000000000","52f058d46147e9006d29bf2c09304ad1cddd6e15":"1500000000000000000000","160226efe7b53a8af462d117a0108089bdecc2d1":"200550000000000000000","256292a191bdda34c4da6b6bd69147bf75e2a9ab":"14051000000000000000","1b8aa0160cd79f005f88510a714913d70ad3be33":"201760000000000000000",d4b2ff3bae1993ffea4d3b180231da439f7502a2:"2000000000000000000000",e408aa99835307eea4a6c5eb801fe694117f707d:"500000000000000000000",e60a55f2df996dc3aedb696c08dde039b2641de8:"2000000000000000000000","73df3c3e7955f4f2d859831be38000b1076b3884":"1970000000000000000000","6228ade95e8bb17d1ae23bfb0518414d497e0eb8":"400000000000000000000","0f46c81db780c1674ac73d314f06539ee56ebc83":"9850000000000000000000","762d6f30dab99135e4eca51d5243d6c8621102d5":"282000000000000000000","4ba0d9e89601772b496847a2bb4340186787d265":"1000000000000000000000",ca747576446a4c8f30b08340fee198de63ec92cf:"7020000000000000000000","99c31fe748583787cdd3e525b281b218961739e3":"1015200000000000000000","1210f80bdb826c175462ab0716e69e46c24ad076":"100000000000000000000","3f75ae61cc1d8042653b5baec4443e051c5e7abd":"95500000000000000000","5c4892907a0720df6fd3413e63ff767d6b398023":"13189467000000000000000","17f14632a7e2820be6e8f6df823558283dadab2d":"2000000000000000000000","1dc7f7dad85df53f1271152403f4e1e4fdb3afa0":"200000000000000000000","5a30feac37ac9f72d7b4af0f2bc73952c74fd5c3":"2000000000000000000000","136d4b662bbd1080cfe4445b0fa213864435b7f1":"4000000000000000000000",c1ec81dd123d4b7c2dd9b4d438a7072c11dc874c:"2000000000000000000000","09f9575be57d004793c7a4eb84b71587f97cbb6a":"200000000000000000000","2c4b470307a059854055d91ec3794d80b53d0f4a":"20000000000000000000000","6af6c7ee99df271ba15bf384c0b764adcb4da182":"999972000000000000000","0dae3ee5b915b36487f9161f19846d101433318a":"1910000000000000000000","0dcf9d8c9804459f647c14138ed50fad563b4154":"173000000000000000000",bfa8c858df102cb12421008b0a31c4c7190ad560:"200000000000000000000",c2fd0bf7c725ef3e047e5ae1c29fe18f12a7299c:"1337000000000000000000",d70a612bd6dda9eab0dddcff4aaf4122d38feae4:"540000000000000000000",e07137ae0d116d033533c4eab496f8a9fb09569c:"1400000000000000000000","7f49f20726471ac1c7a83ef106e9775ceb662566":"5910000000000000000000","1e706655e284dcf0bb37fe075d613a18dc12ff4a":"4376760000000000000000","03af7ad9d5223cf7c8c13f20df67ebe5ffc5bb41":"200000000000000000000","228242f8336eecd8242e1f000f41937e71dffbbf":"5000000000000000000000",e8ed51bbb3ace69e06024b33f86844c47348db9e:"165170600000000000000000","3b566a8afad19682dc2ce8679a3ce444a5b0fd4f":"2000000000000000000000",dc738fb217cead2f69594c08170de1af10c419e3:"100000000000000000000000","13032446e7d610aa00ec8c56c9b574d36ca1c016":"2000000000000000000000","6ca6a132ce1cd288bee30ec7cfeffb85c1f50a54":"2000000000000000000000",b85f26dd0e72d9c29ebaf697a8af77472c2b58b5:"11900000000000000000000","055bd02caf19d6202bbcdc836d187bd1c01cf261":"100000000000000000000","3c322e611fdb820d47c6f8fc64b6fad74ca95f5e":"242514000000000000000","8daddf52efbd74da95b969a5476f4fbbb563bfd2":"835000000000000000000",c63ac417992e9f9b60386ed953e6d7dff2b090e8:"4000086000000000000000","27f03cf1abc5e1b51dbc444b289e542c9ddfb0e6":"5000000000000000000000",d8f4bae6f84d910d6d7d5ac914b1e68372f94135:"100000000000000000000","9f83a293c324d4106c18faa8888f64d299054ca0":"200000000000000000000","39ee4fe00fbced647068d4f57c01cb22a80bccd1":"6000000000000000000000","404100db4c5d0eec557823b58343758bcc2c8083":"20000000000000000000","02751dc68cb5bd737027abf7ddb77390cd77c16b":"20000000000000000000",d10302faa1929a326904d376bf0b8dc93ad04c4c:"1790000000000000000000",cc419fd9912b85135659e77a93bc3df182d45115:"10000000000000000000000","10097198b4e7ee91ff82cc2f3bd95fed73c540c0":"2000000000000000000000","7e24d9e22ce1da3ce19f219ccee523376873f367":"5900150000000000000000","2e4ee1ae996aa0a1d92428d06652a6bea6d2d15d":"2000000000000000000000","91a4149a2c7b1b3a67ea28aff34725e0bf8d7524":"1940000000000000000000",ead65262ed5d122df2b2751410f98c32d1238f51:"101680000000000000000",e20954d0f4108c82d4dcb2148d26bbd924f6dd24:"10000000000000000000000",ebb7d2e11bc6b58f0a8d45c2f6de3010570ac891:"26740000000000000000",ef115252b1b845cd857f002d630f1b6fa37a4e50:"1970000000000000000000","01a818135a414210c37c62b625aca1a54611ac36":"260000000000000000000",ea1ea0c599afb9cd36caacbbb52b5bbb97597377:"1069600000000000000000","7a7a4f807357a4bbe68e1aa806393210c411ccb3":"30000000000000000000000","6d40ca27826d97731b3e86effcd7b92a4161fe89":"2000000000000000000000","8431277d7bdd10457dc017408c8dbbbd414a8df3":"39400000000000000000","69b81d5981141ec7a7141060dfcf8f3599ffc63e":"5000000000000000000000","47688410ff25d654d72eb2bc06e4ad24f833b094":"160440000000000000000","6c101205b323d77544d6dc52af37aca3cec6f7f1":"10000000000000000000000",fb685c15e439965ef626bf0d834cd1a89f2b5695:"3940000000000000000000","673706b1b0e4dc7a949a7a796258a5b83bb5aa83":"16100000000000000000000",ecdaf93229b45ee672f65db506fb5eca00f7fce6:"1605009000000000000000",ec6904bae1f69790591709b0609783733f2573e3:"500000000000000000000","812ea7a3b2c86eed32ff4f2c73514cc63bacfbce":"1000000000000000000000","196c02210a450ab0b36370655f717aa87bd1c004":"259456000000000000000",d96ac2507409c7a383ab2eee1822a5d738b36b56:"200000000000000000000",ae2f9c19ac76136594432393b0471d08902164d3:"698600000000000000000","9d32962ea99700d93228e9dbdad2cc37bb99f07e":"3327560000000000000000","17e584e810e567702c61d55d434b34cdb5ee30f6":"5000000000000000000000",a3a93ef9dbea2636263d06d8492f6a41de907c22:"60000000000000000000","2b5016e2457387956562587115aa8759d8695fdf":"200000000000000000000000","140129eaa766b5a29f5b3af2574e4409f8f6d3f1":"6400000000000000000000","7025965d2b88da197d4459be3dc9386344cc1f31":"2005500000000000000000","388bdcdae794fc44082e667501344118ea96cd96":"1670000000000000000000",eee9d0526eda01e43116a395322dda8970578f39:"9999980000000000000000","6ec89b39f9f5276a553e8da30e6ec17aa47eefc7":"447500000000000000000","7e236666b2d06e63ea4e2ab84357e2dfc977e50e":"999972000000000000000","68df947c495bebaeb8e889b3f953d533874bf106":"546000000000000000000",d40ed66ab3ceff24ca05ecd471efb492c15f5ffa:"500000000000000000000",f0c70d0d6dab7663aa9ed9ceea567ee2c6b02765:"2089349000000000000000",b589676d15a04448344230d4ff27c95edf122c49:"1000000000000000000000",a0347f0a98776390165c166d32963bf74dcd0a2f:"1000000000000000000000",d47d8685faee147c520fd986709175bf2f886bef:"2000000000000000000000",a1dcd0e5b05a977c9623e5ae2f59b9ada2f33e31:"100000000000000000000","4979194ec9e97db9bee8343b7c77d9d7f3f1dc9f":"20000000000000000000","7cd20eccb518b60cab095b720f571570caaa447e":"500000000000000000000","2ff830cf55fb00d5a0e03514fecd44314bd6d9f1":"10000000000000000000000","0bb25ca7d188e71e4d693d7b170717d6f8f0a70a":"336870000000000000000",e9a2b4914e8553bf0d7c00ca532369b879f931bf:"2000000000000000000000","720e6b22bf430966fa32b6acb9a506eebf662c61":"152000000000000000000","7ade5d66b944bb860c0efdc86276d58f4653f711":"2000000000000000000000","2eaff9f8f8113064d3957ac6d6e11eee42c8195d":"1970000000000000000000","0c8fd7775e54a6d9c9a3bf890e761f6577693ff0":"9850000000000000000000","290a56d41f6e9efbdcea0342e0b7929a8cdfcb05":"344000000000000000000",d73ed2d985b5f21b55b274643bc6da031d8edd8d:"49250000000000000000000","80156d10efa8b230c99410630d37e269d4093cea":"2000000000000000000000","0989c200440b878991b69d6095dfe69e33a22e70":"1910000000000000000000",ec8014efc7cbe5b0ce50f3562cf4e67f8593cd32:"17300000000000000000",de612d0724e84ea4a7feaa3d2142bd5ee82d3201:"20000000000000000000","0f832a93df9d7f74cd0fb8546b7198bf5377d925":"143000000000000000000",aa2c670096d3f939305325427eb955a8a60db3c5:"2003010000000000000000","25287b815f5c82380a73b0b13fbaf982be24c4d3":"40000000000000000000",e75c3b38a58a3f33d55690a5a59766be185e0284:"500000000000000000000","1940dc9364a852165f47414e27f5002445a4f143":"10850000000000000000000",e5b826196c0e1bc1119b021cf6d259a610c99670:"200000000000000000000","82a15cef1d6c8260eaf159ea3f0180d8677dce1c":"2000000000000000000000",da06044e293c652c467fe74146bf185b21338a1c:"1000000000000000000000",f815c10a032d13c34b8976fa6e3bd2c9131a8ba9:"1337000000000000000000",cd95fa423d6fc120274aacde19f4eeb766f10420:"200000000000000000000",e3a4f83c39f85af9c8b1b312bfe5fc3423afa634:"28650000000000000000","768ce0daa029b7ded022e5fc574d11cde3ecb517":"322000000000000000000",e3ec18a74ed43855409a26ade7830de8e42685ef:"19700000000000000000",b2bdbedf95908476d7148a370cc693743628057f:"4000000000000000000000",bbb8ffe43f98de8eae184623ae5264e424d0b8d7:"107600000000000000000","090cebef292c3eb081a05fd8aaf7d39bf07b89d4":"4000000000000000000000",dd2a233adede66fe1126d6c16823b62a021feddb:"2000000000000000000000",d8cd64e0284eec53aa4639afc4750810b97fab56:"20000000000000000000",e5953fea497104ef9ad2d4e5841c271f073519c2:"704000000000000000000","967d4142af770515dd7062af93498dbfdff29f20":"20200000000000000000",fd191a35157d781373fb411bf9f25290047c5eef:"1000000000000000000000","8967d7b9bdb7b4aed22e65a15dc803cb7a213f10":"400000000000000000000","51e43fe0d25c782860af81ea89dd793c13f0cbb1":"60000000000000000000",a38476691d34942eea6b2f76889223047db4617a:"2000000000000000000000","1321ccf29739b974e5a516f18f3a843671e39642":"4000000000000000000000","4d71a6eb3d7f327e1834278e280b039eddd31c2f":"6000000000000000000000",dc2d15a69f6bb33b246aef40450751c2f6756ad2:"1996000000000000000000",ec89f2b678a1a15b9134ec5eb70c6a62071fbaf9:"200000000000000000000","27bf943c1633fe32f8bcccdb6302b407a5724e44":"940229000000000000000",d0a6c6f9e9c4b383d716b31de78d56414de8fa91:"300000000000000000000","7b6175ec9befc738249535ddde34688cd36edf25":"10000000000000000000000","41ce79950935cff55bf78e4ccec2fe631785db95":"2000000000000000000000","5598b3a79a48f32b1f5fc915b87b645d805d1afe":"500000000000000000000","5c4881165cb42bb82e97396c8ef44adbf173fb99":"110600000000000000000","25b0533b81d02a617b9229c7ec5d6f2f672e5b5a":"1000000000000000000000","015f097d9acddcddafaf2a107eb93a40fc94b04c":"20000000000000000000000",b84b53d0bb125656cddc52eb852ab71d7259f3d5:"16000000000000000000000","1a79c7f4039c67a39d7513884cdc0e2c34222490":"20000000000000000000","926209b7fda54e8ddb9d9e4d3d19ebdc8e88c29f":"2000000000000000000000",c2fe7d75731f636dcd09dbda0671393ba0c82a7d:"2200000000000000000000","30248d58e414b20fed3a6c482b59d9d8f5a4b7e2":"60000000000000000000",d0e194f34b1db609288509ccd2e73b6131a2538b:"999972000000000000000",e8f29969e75c65e01ce3d86154207d0a9e7c76f2:"2991807000000000000000",cb93199b9c90bc4915bd859e3d42866dc8c18749:"231800000000000000000",e6fe0afb9dcedd37b2e22c451ba6feab67348033:"10000000000000000000000","82f854c9c2f087dffa985ac8201e626ca5467686":"100000000000000000000000","63bb664f9117037628594da7e3c5089fd618b5b5":"20000000000000000000",f8d17424c767bea31205739a2b57a7277214eebe:"42000000000000000000","4ca8db4a5efefc80f4cd9bbcccb03265931332b6":"200000000000000000000",c56e6b62ba6e40e52aab167d21df025d0055754b:"2000000000000000000000","0d8c40a79e18994ff99ec251ee10d088c3912e80":"114600000000000000000","40a331195b977325c2aa28fa2f42cb25ec3c253c":"2000000000000000000000",a2c5854ff1599f98892c5725d262be1da98aadac:"314315000000000000000","23ab09e73f87aa0f3be0139df0c8eb6be5634f95":"8000000000000000000000",b8040536958d5998ce4bec0cfc9c2204989848e9:"24472420000000000000000","42d6b263d9e9f4116c411424fc9955783c763030":"2000000000000000000000",c496cbb0459a6a01600fc589a55a32b454217f9d:"274000000000000000000","48302c311ef8e5dc664158dd583c81194d6e0d58":"3364760000000000000000",d5b284040130abf7c1d163712371cc7e28ad66da:"1970000000000000000000",d22f0ca4cd479e661775053bcc49e390f670dd8a:"1000000000000000000000",e597f083a469c4591c3d2b1d2c772787befe27b2:"280000000000000000000","668b6ba8ab08eace39c502ef672bd5ccb6a67a20":"31135320000000000000000",a3bff1dfa9971668360c0d82828432e27bf54e67:"200000000000000000000",ee655bb4ee0e8d5478526fb9f15e4064e09ff3dd:"200000000000000000000","121f855b70149ac83473b9706fb44d47828b983b":"1400000000000000000000","20a15256d50ce058bf0eac43aa533aa16ec9b380":"20000000000000000000","69bcfc1d43b4ba19de7b274bdffb35139412d3d7":"985000000000000000000",db288f80ffe232c2ba47cc94c763cf6fc9b82b0d:"85000000000000000000",e1cb83ec5eb6f1eeb85e99b2fc63812fde957184:"20000000000000000000000",a419a984142363267575566089340eea0ea20819:"1999944000000000000000","8489f6ad1d9a94a297789156899db64154f1dbb5":"358849000000000000000",d609bf4f146eea6b0dc8e06ddcf4448a1fccc9fa:"2000000000000000000000",df1fa2e20e31985ebe2c0f0c93b54c0fb67a264b:"200000000000000000000",efe8ff87fc260e0767638dd5d02fc4672e0ec06d:"2000000000000000000000",eef1bbb1e5a83fde8248f88ee3018afa2d1332eb:"200000000000000000000","4b3aab335ebbfaa870cc4d605e7d2e74c668369f":"60000000000000000000000","8f4fb1aea7cd0f570ea5e61b40a4f4510b6264e4":"4000000000000000000000","0b0b3862112aeec3a03492b1b05f440eca54256e":"4000000000000000000000",dff4007931786593b229efe5959f3a4e219e51af:"4925000000000000000000",fec14e5485de2b3eef5e74c46146db8e454e0335:"179000000000000000000",ac21c1e5a3d7e0b50681679dd6c792dbca87decb:"100000000000000000000000","796ebbf49b3e36d67694ad79f8ff36767ac6fab0":"60800000000000000000",ae7739124ed153052503fc101410d1ffd8cd13b7:"999942000000000000000","86026cad3fe4ea1ce7fca260d3d45eb09ea6a364":"200000000000000000000",b2fc84a3e50a50af02f94da0383ed59f71ff01d7:"30000000000000000000000",bbab000b0408ed015a37c04747bc461ab14e151b:"6000000000000000000000",c4ff6fbb1f09bd9e102ba033d636ac1c4c0f5304:"1000000000000000000000",cc606f511397a38fc7872bd3b0bd03c71bbd768b:"1000000000000000000000",f346d7de92741c08fc58a64db55b062dde012d14:"295106000000000000000","33f15223310d44de8b6636685f3a4c3d9c5655a5":"250500000000000000000","3c860e2e663f46db53427b29fe3ea5e5bf62bbcc":"98500000000000000000",acb94338554bc488cc88ae2d9d94080d6bdf8410:"1000000000000000000000","9c5cc111092c122116f1a85f4ee31408741a7d2f":"492500000000000000000","5f76f0a306269c78306b3d650dc3e9c37084db61":"2400000000000000000000","2c0cc3f951482cc8a2925815684eb9f94e060200":"6000000000000000000000",b74372dbfa181dc9242f39bf1d3731dffe2bdacf:"2000000000000000000000","3bab4b01a7c84ba13feea9b0bb191b77a3aadca3":"200000000000000000000","39aa05e56d7d32385421cf9336e90d3d15a9f859":"26000000000000000000","4a52bad20357228faa1e996bed790c93674ba7d0":"1337000000000000000000",ff128f4b355be1dc4a6f94fa510d7f15d53c2aff:"2720000000000000000000","92793ac5b37268774a7130de2bbd330405661773":"40110000000000000000",db19a3982230368f0177219cb10cb259cdb2257c:"2000000000000000000000","8d1794da509cb297053661a14aa892333231e3c1":"199600000000000000000","9b7c8810cc7cc89e804e6d3e38121850472877fe":"2000000000000000000000",ed3cbc3782cebd67989b305c4133b2cde32211eb:"400000000000000000000","8532490897bbb4ce8b7f6b837e4cba848fbe9976":"100000000000000000000",c384ac6ee27c39e2f278c220bdfa5baed626d9d3:"600000000000000000000",b1459285863ea2db3759e546ceb3fb3761f5909c:"1122309000000000000000","634efc24371107b4cbf03f79a93dfd93e431d5fd":"1221341000000000000000",ef9f59aeda418c1494682d941aab4924b5f4929a:"100000000000000000000000",e7311c9533f0092c7248c9739b5b2c864a34b1ce:"2803436000000000000000",e6e621eaab01f20ef0836b7cad47464cb5fd3c96:"316014000000000000000",cd102cd6db3df14ad6af0f87c72479861bfc3d24:"2000000000000000000000","005a9c03f69d17d66cbb8ad721008a9ebbb836fb":"2000000000000000000000",a072cebe62a9e9f61cc3fbf88a9efbfe3e9a8d70:"400000000000000000000",f2ab1161750244d0ecd048ee0d3e51abb143a2fd:"1235800000000000000000",f686785b89720b61145fea80978d6acc8e0bc196:"4000000000000000000000","0a2b4fc5d81ace67dc4bba03f7b455413d46fe3d":"197000000000000000000",c32ec7e42ad16ce3e2555ad4c54306eda0b26758:"2000000000000000000000",f3fa723552a5d0512e2b62f48dca7b2b8105305b:"137000000000000000000","6dc3f92baa1d21dab7382b893261a0356fa7c187":"1730000000000000000000","4627c606842671abde8295ee5dd94c7f549534f4":"286600000000000000000",e39e46e15d22ce56e0c32f1877b7d1a264cf94f3:"20000000000000000000000",d7d157e4c0a96437a6d285741dd23ec4361fa36b:"2000000000000000000000","68f8f45155e98c5029a4ebc5b527a92e9fa83120":"4436101000000000000000","9aba2b5e27ff78baaab5cdc988b7be855cebbdce":"9999000000000000000000","66b39837cb3cac8a802afe3f12a258bbca62dacd":"400000000000000000000",d39b7cbc94003fc948f0cde27b100db8ccd6e063:"400000000000000000000","3db9ed7f024c7e26372feacf2b050803445e3810":"1285600000000000000000","3fbc1e4518d73400c6d046359439fb68ea1a49f4":"16400000000000000000000",e3da4f3240844c9b6323b4996921207122454399:"11539639000000000000000","09afa73bc047ef46b977fd9763f87286a6be68c6":"501500000000000000000","1dbe8e1c2b8a009f85f1ad3ce80d2e05350ee39c":"135400000000000000000","2c5a2d0abda03bbe215781b4ff296c8c61bdbaf6":"30617000000000000000","9a9d1dc0baa77d6e20c3d849c78862dd1c054c87":"880000000000000000000","3ccef88679573947e94997798a1e327e08603a65":"807700000000000000000","850b9db18ff84bf0c7da49ea3781d92090ad7e64":"2600000000000000000000","361c75931696bc3d427d93e76c77fd13b241f6f4":"549212000000000000000",c8f2b320e6dfd70906c597bad2f9501312c78259:"1504800000000000000000","8dc1d5111d09af25fdfcac455c7cec283e6d6775":"2000000000000000000000",cd7ece086b4b619b3b369352ee38b71ddb06439a:"200000000000000000000",f607c2150d3e1b99f24fa1c7d540add35c4ebe1e:"3098020000000000000000","32485c818728c197fea487fbb6e829159eba8370":"1053893000000000000000","8e670815fb67aeaea57b86534edc00cdf564fee5":"3300000000000000000000","10df681506e34930ac7a5c67a54c3e89ce92b981":"2153800000000000000000","1cf2eb7a8ccac2adeaef0ee87347d535d3b94058":"2000000000000000000000",f0dc43f205619127507b2b1c1cfdf32d28310920:"301973000000000000000",f2c2904e9fa664a11ee25656d8fd2cc0d9a522a0:"13370000000000000000","70670fbb05d33014444b8d1e8e7700258b8caa6d":"2000000000000000000000","5160ed612e1b48e73f3fc15bc4321b8f23b8a24b":"562800000000000000000","54a62bf9233e146ffec3876e45f20ee8414adeba":"10000000000000000000000","26d4ec17d5ceb2c894bdc59d0a6a695dad2b43cc":"2935300000000000000000","205fc843e19a4913d1881eb69b69c0fa3be5c50b":"9700000000000000000000",e001aba77c02e172086c1950fffbcaa30b83488f:"1970000000000000000000","21efbca09b3580b98e73f5b2f7f4dc0bf02c529c":"2000000000000000000000",c4d916574e68c49f7ef9d3d82d1638b2b7ee0985:"1580000000000000000000",cab0d32cf3767fa6b3537c84328baa9f50458136:"8960000000000000000000","7ce4686446f1949ebed67215eb0d5a1dd72c11b8":"2217776000000000000000","7837fcb876da00d1eb3b88feb3df3fa4042fac82":"1760000000000000000000","71e38ff545f30fe14ca863d4f5297fd48c73a5ce":"3580000000000000000000",e528a0e5a267d667e9393a6584e19b34dc9be973:"5600000000000000000000",c5374928cdf193705443b14cc20da423473cd9cf:"138139000000000000000",e406f5dd72cab66d8a6ecbd6bfb494a7b6b09afe:"100000000000000000000",d7ef340e66b0d7afcce20a19cb7bfc81da33d94e:"3000000000000000000000",e012db453827a58e16c1365608d36ed658720507:"2000000000000000000000",d59638d3c5faa7711bf085745f9d5bdc23d498d8:"2000000000000000000000","008fc7cbadffbd0d7fe44f8dfd60a79d721a1c9c":"1000000000000000000000","8a3470282d5e2a2aefd7a75094c822c4f5aeef8a":"242743000000000000000","38b3965c21fa893931079beacfffaf153678b6eb":"170374000000000000000","57dd9471cbfa262709f5f486bcb774c5f527b8f8":"197000000000000000000","5a60c924162873fc7ea4da7f972e350167376031":"83583000000000000000",b9013c51bd078a098fae05bf2ace0849c6be17a5:"80000000000000000000",dc23b260fcc26e7d10f4bd044af794579460d9da:"500038000000000000000","45db03bccfd6a5f4d0266b82a22a368792c77d83":"8000000000000000000000","3e0cbe6a6dcb61f110c45ba2aa361d7fcad3da73":"8022000000000000000000","42d3a5a901f2f6bd9356f112a70180e5a1550b60":"925000000000000000000","47219229e8cd56659a65c2a943e2dd9a8f4bfd89":"1520000000000000000000",a20d071b1b003063497d7990e1249dabf36c35f7:"1000000000000000000000","6835c8e8b74a2ca2ae3f4a8d0f6b954a3e2a8392":"60140000000000000000","0c2d5c920538e953caaf24f0737f554cc6927742":"1000000000000000000000",eedf6c4280e6eb05b934ace428e11d4231b5905b:"200000000000000000000",ffa696ecbd787e66abae4fe87b635f07ca57d848:"1337000000000000000000","3e81772175237eb4cbe0fe2dcafdadffeb6a1999":"8800000000000000000000",b44783c8e57b480793cbd69a45d90c7b4f0c48ac:"20000000000000000000",f84f090adf3f8db7e194b350fbb77500699f66fd:"1970000000000000000000","2e9824b5c132111bca24ddfba7e575a5cd7296c1":"17201900000000000000000","5cce72d068c7c3f55b1d2819545e77317cae8240":"1940000000000000000000",d815e1d9f4e2b5e57e34826b7cfd8881b8546890:"17300000000000000000",f901c00fc1db88b69c4bc3252b5ca70ea6ee5cf6:"400000000000000000000",a960b1cadd3b5c1a8e6cb3abcaf52ee7c3d9fa88:"1522704000000000000000",f7e45a12aa711c709acefe95f33b78612d2ad22a:"66230000000000000000000",c332df50b13c013490a5d7c75dbfa366da87b6d6:"4000000000000000000000",d467cf064c0871989b90d8b2eb14ccc63b360823:"200000000000000000000",b9144b677c2dc614ceefdf50985f1183208ea64c:"2000000000000000000000",ea7c4d6dc729cd6b157c03ad237ca19a209346c3:"2000000000000000000000","9c9de44724a4054da0eaa605abcc802668778bea":"200020000000000000000",d7140c8e5a4307fab0cc27badd9295018bf87970:"109600000000000000000",c33acdb3ba1aab27507b86b15d67faf91ecf6293:"2000000000000000000000",db2a0c9ab64df58ddfb1dbacf8ba0d89c85b31b4:"4000000000000000000000",bfcb9730246304700da90b4153e71141622e1c41:"1000000000000000000000","07dc8c8b927adbedfa8f5d639b4352351f2f36d2":"314382000000000000000","2d5391e938b34858cf965b840531d5efda410b09":"1400000000000000000000","0b5e2011ebc25a007f21362960498afb8af280fb":"2000000000000000000000",ed9fb1f5af2fbf7ffc5029cee42b70ff5c275bf5:"280000000000000000000",a3232d068d50064903c9ebc563b515acc8b7b097:"2002000000000000000000","66274fea82cd30b6c29b23350e4f4f3d310a5899":"2070000000000000000000",dbfb1bb464b8a58e500d2ed8de972c45f5f1c0fb:"1600000000000000000000",a1f8d8bcf90e777f19b3a649759ad95027abdfc3:"200000000000000000000","5bd23547477f6d09d7b2a005c5ee650c510c56d7":"10000000000000000000000",ec3b8b58a12703e581ce5ffd7e21c57d1e5c663f:"1700000000000000000000","54310b3aa88703a725dfa57de6e646935164802c":"1910000000000000000000","8f41b1fbf54298f5d0bc2d122f4eb95da4e5cd3d":"354200000000000000000",c80b36d1beafba5fcc644d60ac6e46ed2927e7dc:"13370000000000000000","1ea492bce1ad107e337f4bd4a7ac9a7babcccdab":"100000000000000000000",aaf023fef290a49bb78bb7abc95d669c50d528b0:"200000000000000000000","80b79f338390d1ba1b3737a29a0257e5d91e0731":"20000000000000000000",f382e4c20410b951089e19ba96a2fee3d91cce7e:"5054000000000000000000","0748713145ef83c3f0ef4d31d823786f7e9cc689":"4500000000000000000000","21e219c89ca8ac14ae4cba6130eeb77d9e6d3962":"789580000000000000000",ca9a042a6a806ffc92179500d24429e8ab528117:"1100000000000000000000",bcc9593b2da6df6a34d71b1aa38dacf876f95b88:"20000000000000000000",d1438267231704fc7280d563adf4763844a80722:"200000000000000000000","4989e1ab5e7cd00746b3938ef0f0d064a2025ba5":"2000000000000000000000",bd4b60faec740a21e3071391f96aa534f7c1f44e:"182000000000000000000","8c7cb4e48b25031aa1c4f92925d631a8c3edc761":"1000000000000000000000","322788b5e29bf4f5f55ae1ddb32085fda91b8ebe":"200000000000000000000",f15e182c4fbbad79bd93342242d4dccf2be58925:"1940000000000000000000","1548b770a5118ede87dba2f690337f616de683ab":"527558000000000000000","69c2d835f13ee90580408e6a3283c8cca6a434a2":"656000000000000000000",a1e4380a3b1f749673e270229993ee55f35663b4:"2000000000000000000000",c7675e5647b9d8daf4d3dff1e552f6b07154ac38:"180000000000000000000",a02c1e34064f0475f7fa831ccb25014c3aa31ca2:"60000000000000000000","517c75430de401c341032686112790f46d4d369e":"388000000000000000000","29681d9912ddd07eaabb88d05d90f766e862417d":"1000000000000000000000","544dda421dc1eb73bb24e3e56a248013b87c0f44":"1970000000000000000000","2ab97e8d59eee648ab6caf8696f89937143864d6":"3820000000000000000000","79c130c762b8765b19d2abc9a083ab8f3aad7940":"3940000000000000000000",f9650d6989f199ab1cc479636ded30f241021f65:"850000000000000000000",d1c96e70f05ae0e6cd6021b2083750a7717cde56:"500000000000000000000","88106c27d20b74b4b98ca62b232bd5c97411171f":"197000000000000000000","37ab66083a4fa23848b886f9e66d79cdc150cc70":"88510000000000000000000","8e6156336be2cdbe32140df08a2ba55fd0a58463":"74480000000000000000","2982d76a15f847dd41f1922af368fe678d0e681e":"100000000000000000000","209e8e29d33beae8fb6baa783d133e1d9ec1bc0b":"835000000000000000000",b325674c01e3f7290d5226339fbeac67d221279f:"2800000000000000000000",f20c9a99b74759d782f25c1ceca802a27e0b436c:"1670000000000000000000","61bf84d5ab026f58c873f86ff0dfca82b55733ae":"2000000000000000000000","0734a0a81c9562f4d9e9e10a8503da15db46d76e":"18200000000000000000","0521bc3a9f8711fecb10f50797d71083e341eb9d":"20000000000000000000","3301d9ca2f3bfe026279cd6819f79a293d98156e":"50000000000000000000000","549d51af29f724c967f59423b85b2681e7b15136":"3760000000000000000000","2053ac97548a0c4e8b80bc72590cd6a098fe7516":"187000000000000000000",aa321fdbd449180db8ddd34f0fe906ec18ee0914:"685000000000000000000","697f55536bf85ada51841f0287623a9f0ed09a17":"10000000000000000000000",df57353aaff2aadb0a04f9014e8da7884e86589c:"152800000000000000000","6807ddc88db489b033e6b2f9a81553571ab3c805":"29944000000000000000","90057af9aa66307ec9f033b29724d3b2f41eb6f9":"121930000000000000000000","3ff836b6f57b901b440c30e4dbd065cf37d3d48c":"200000000000000000000","91051764af6b808e4212c77e30a5572eaa317070":"1000000000000000000000","7faa30c31519b584e97250ed2a3cf3385ed5fd50":"2000000000000000000000",fb842ca2c5ef133917a236a0d4ac40690110b038:"306000000000000000000",aa167026d39ab7a85635944ed9edb2bfeba11850:"8298000000000000000000","57beea716cbd81700a73d67f9ff039529c2d9025":"200000000000000000000","654b7e808799a83d7287c67706f2abf49a496404":"1970000000000000000000",dde8f0c31b7415511dced1cd7d46323e4bd12232:"1610000000000000000000","8667fa1155fed732cfb8dca5a0d765ce0d0705ed":"81770000000000000000","905526568ac123afc0e84aa715124febe83dc87c":"17900000000000000000","8e98766524b0cf2747c50dd43b9567594d9731de":"1997200000000000000000",c6df2075ebd240d44869c2be6bdf82e63d4ef1f5:"20000000000000000000","2ff5cab12c0d957fd333f382eeb75107a64cb8e8":"10000000000000000000000","3055efd26029e0d11b930df4f53b162c8c3fd2ce":"499938000000000000000",b2c53efa33fe4a3a1a80205c73ec3b1dbcad0602:"1918595000000000000000","766b3759e8794e926dac473d913a8fb61ad0c2c9":"86500000000000000000","882aa798bf41df179f85520130f15ccdf59b5e58":"2000000000000000000000","80b23d380b825c46e0393899a85556462da0e18c":"2000000000000000000000","51f4663ab44ff79345f427a0f6f8a6c8a53ff234":"20000000000000000000000","8d5ef172bf77315ea64e85d0061986c794c6f519":"3940000000000000000000","75ac547017134c04ae1e11d60e63ec04d18db4ef":"6000000000000000000000",ce1b0cb46aaecfd79b880cad0f2dda8a8dedd0b1:"20000000000000000000","21408b4d7a2c0e6eca4143f2cacdbbccba121bd8":"20000000000000000000000","9c526a140683edf1431cfaa128a935e2b614d88b":"111000000000000000000","599728a78618d1a17b9e34e0fed8e857d5c40622":"14000000000000000000000","6ac4d4be2db0d99da3faaaf7525af282051d6a90":"80185000000000000000","785c8ea774d73044a734fa790a1b1e743e77ed7c":"238750000000000000000",ff2726294148b86c78a9372497e459898ed3fee3:"1970000000000000000000","68a86c402388fddc59028fec7021e98cbf830eac":"19100000000000000000","6121af398a5b2da69f65c6381aec88ce9cc6441f":"640000000000000000000","5a6686b0f17e07edfc59b759c77d5bef164d3879":"1490000000000000000000",a2d38de1c73906f6a7ca6efeb97cf6f69cc421be:"1000000000000000000000",ae3f98a443efe00f3e711d525d9894dc9a61157b:"295500000000000000000","5f1c8a04c90d735b8a152909aeae636fb0ce1665":"6999974000000000000000",d687cec0059087fdc713d4d2d65e77daefedc15f:"60000000000000000000","845203750f7148a9aa262921e86d43bf641974fd":"100000000000000000000","64464a6805b462412a901d2db8174b06c22deea6":"475600000000000000000","053471cd9a41925b3904a5a8ffca3659e034be23":"199600000000000000000","911ff233e1a211c0172c92b46cf997030582c83a":"1970000000000000000000",d930b27a78876485d0f48b70dd5336549679ca8f:"40000000000000000000","6ba9b21b35106be159d1c1c2657ac56cd29ffd44":"4480000000000000000000",ebac2b4408ef5431a13b8508e86250982114e145:"4000000000000000000000","931df34d1225bcd4224e63680d5c4c09bce735a6":"68000000000000000000","23eb6fd85671a9063ab7678ebe265a20f61a02b3":"2000000000000000000000",b32af3d3e8d075344926546f2e32887bf93b16bd:"200000000000000000000","8261fa230c901d43ff579f4780d399f31e6076bc":"2000000000000000000000","84a74ceecff65cb93b2f949d773ef1ad7fb4a245":"92998000000000000000",da982e9643ffece723075a40fe776e5ace04b29b:"160884000000000000000",ba70e8b4759c0c3c82cc00ac4e9a94dd5bafb2b8:"890342000000000000000","82f2e991fd324c5f5d17768e9f61335db6319d6c":"500000000000000000000","3e84b35c5b2265507061d30b6f12da033fe6f8b9":"1790000000000000000000","2895e80999d406ad592e2b262737d35f7db4b699":"1940000000000000000000","65f534346d2ffb787fa9cf185d745ba42986bd6e":"500000000000000000000",c7368b9709a5c1b51c0adf187a65df14e12b7dba:"9489681000000000000000",ba176dbe3249e345cd4fa967c0ed13b24c47e586:"399990000000000000000",cff6a6fe3e9a922a12f21faa038156918c4fcb9c:"78800000000000000000",bcbd31252ec288f91e298cd812c92160e738331a:"1975802000000000000000","5543dd6d169eec8a213bbf7a8af9ffd15d4ff759":"18200000000000000000",b65bd780c7434115162027565223f44e5498ff8c:"19999800000000000000000","4cadf573ce4ceec78b8e1b21b0ed78eb113b2c0e":"2000000000000000000000","04aafc8ae5ce6f4903c89d7fac9cb19512224777":"500000000000000000000",fdc4d4765a942f5bf96931a9e8cc7ab8b757ff4c:"87000000000000000000000","38c7851f5ffd4cee98df30f3b25597af8a6ca263":"2631920000000000000000","0e320219838e859b2f9f18b72e3d4073ca50b37d":"2000000000000000000000",bbbf39b1b67995a42241504f9703d2a14a515696:"1580000000000000000000","5b800bfd1b3ed4a57d875aed26d42f1a7708d72a":"6392000000000000000000","5b85e60e2af0544f2f01c64e2032900ebd38a3c7":"2000000000000000000000",c9ac01c3fb0929033f0ccc7e1acfeaaba7945d47:"12459235000000000000000",f355d3ec0cfb907d8dbb1bf3464e458128190bac:"4925600000000000000000","69c08d744754de709ce96e15ae0d1d395b3a2263":"1000000000000000000000",cef77451dfa2c643e00b156d6c6ff84e2373eb66:"188000000000000000000",f3034367f87d24d3077fa9a2e38a8b0ccb1104ef:"1000000000000000000000","73473e72115110d0c3f11708f86e77be2bb0983c":"20000000000000000000","761e6caec189c230a162ec006530193e67cf9d19":"2000000000000000000000",e9caf827be9d607915b365c83f0d3b7ea8c79b50:"3000000000000000000000",eda4b2fa59d684b27a810df8978a73df308a63c2:"4000000000000000000000","065ff575fd9c16d3cb6fd68ffc8f483fc32ec835":"200000000000000000000",a72ee666c4b35e82a506808b443cebd5c632c7dd:"800000000000000000000","5b30608c678e1ac464a8994c3b33e5cdf3497112":"400000000000000000000",b0c7ce4c0dc3c2bbb99cc1857b8a455f611711ce:"4000000000000000000000",d7274d50804d9c77da93fa480156efe57ba501de:"1940000000000000000000",a609c26dd350c235e44b2b9c1dddccd0a9d9f837:"1000000000000000000000",bddfa34d0ebf1b04af53b99b82494a9e3d8aa100:"12000000000000000000000",fd40242bb34a70855ef0fd90f3802dec2136b327:"1930600000000000000000","58aed6674affd9f64233272a578dd9386b99c263":"3400000000000000000000","24434a3e32e54ecf272fe3470b5f6f512f675520":"5910000000000000000000",a379a5070c503d2fac89b8b3afa080fd45ed4bec:"19700000000000000000000","37e169a93808d8035698f815c7235613c1e659f2":"1000000000000000000000","849b116f596301c5d8bb62e0e97a8248126e39f3":"300000000000000000000",fe7011b698bf3371132d7445b19eb5b094356aee:"2000000000000000000000",f16de1891d8196461395f9b136265b3b9546f6ef:"31313000000000000000","6c6564e5c9c24eaaa744c9c7c968c9e2c9f1fbae":"1357800000000000000000","8bb0212f3295e029cab1d961b04133a1809e7b91":"2000000000000000000000","408a69a40715e1b313e1354e600800a1e6dc02a5":"35144000000000000000",ddf0cce1fe996d917635f00712f4052091dff9ea:"2000000000000000000000","50fef296955588caae74c62ec32a23a454e09ab8":"1201200000000000000000",d913f0771949753c4726acaa2bd3619c5c20ff77:"3000000000000000000000","9d6ecfa03af2c6e144b7c4692a86951e902e9e1f":"3000310000000000000000",ecbe5e1c9ad2b1dccf0a305fc9522f4669dd3ae7:"5000000000000000000000","33e9b71823952e1f66958c278fc28b1196a6c5a4":"100000000000000000000","9de20bc37e7f48a80ffd7ad84ffbf1a1abe1738c":"200000000000000000000", -"16f313cf8ad000914a0a176dc6a4342b79ec2538":"2000000000000000000000","991ac7ca7097115f26205eee0ef7d41eb4e311ae":"20000000000000000000",ddfafdbc7c90f1320e54b98f374617fbd01d109f:"13370000000000000000","26b11d066588ce74a572a85a6328739212aa8b40":"2000000000000000000000",ef2c34bb487d3762c3cca782ccdd7a8fbb0a9931:"180000000000000000000",a9be88ad1e518b0bbb024ab1d8f0e73f790e0c76:"2800000000000000000000","4a7494cce44855cc80582842be958a0d1c0072ee":"2400000000000000000000","23569542c97d566018c907acfcf391d14067e87e":"2000000000000000000000",d252960b0bf6b2848fdead80136db5f507f8be02:"2000000000000000000000","2c0f5b9df43625798e7e03c1a5fd6a6d091af82b":"31200000000000000000",a7c9d388ebd873e66b1713448397d0f37f8bd3a8:"5000000000000000000000","3259bd2fddfbbc6fbad3b6e874f0bbc02cda18b5":"11886645000000000000000",f287ff52f461117adb3e1daa71932d1493c65f2e:"3640000000000000000000",c852428d2b586497acd30c56aa13fb5582f84402:"945600000000000000000","296f00de1dc3bb01d47a8ccd1e5d1dd9a1eb7791":"1000000000000000000000","817493cd9bc623702a24a56f9f82e3fd48f3cd31":"2920000000000000000000","7adfedb06d91f3cc7390450b85550270883c7bb7":"322312000000000000000","8d544c32c07fd0842c761d53a897d6c950bb7599":"200000000000000000000","86297d730fe0f7a9ee24e08fb1087b31adb306a7":"2000000000000000000000",f64fe0939a8d1eea2a0ecd9a9730fd7958e33109:"20600000000000000000",b06eab09a610c6a53d56a946b2c43487ac1d5b2d:"1000000000000000000000",bae9b82f7299631408659dd74e891cb8f3860fe5:"1970000000000000000000","0eda80f4ed074aea697aeddf283b63dbca3dc4da":"2000000000000000000000",ea686c5057093c171c66db99e01b0ececb308683:"384907000000000000000","425725c0f08f0811f5f006eec91c5c5c126b12ae":"150000000000000000000",b18e67a5050a1dc9fb190919a33da838ef445014:"20000000000000000000","8dd484ff8a307364eb66c525a571aac701c5c318":"4000000000000000000000","6671b182c9f741a0cd3c356c73c23126d4f9e6f4":"200000000000000000000",ba0249e01d945bef93ee5ec61925e03c5ca509fd:"4000000000000000000000",b2968f7d35f208871631c6687b3f3daeabc6616c:"156060000000000000000",a6f62b8a3d7f11220701ab9ffffcb327959a2785:"506000000000000000000",c885a18aabf4541b7b7b7ecd30f6fae6869d9569:"2000000000000000000000","33fb577a4d214fe010d32cca7c3eeda63f87ceef":"1000000000000000000000",be86d0b0438419ceb1a038319237ba5206d72e46:"999942000000000000000","466292f0e80d43a78774277590a9eb45961214f4":"970000000000000000000",b33c0323fbf9c26c1d8ac44ef74391d0804696da:"20000000000000000000",f7bc4c44910d5aedd66ed2355538a6b193c361ec:"96980000000000000000",d0f04f52109aebec9a7b1e9332761e9fe2b97bb5:"4000000000000000000000",cb4a914d2bb029f32e5fef5c234c4fec2d2dd577:"1800000000000000000000","2e619f57abc1e987aa936ae3a2264962e7eb2d9a":"756000000000000000000","166bf6dab22d841b486c38e7ba6ab33a1487ed8c":"20000000000000000000000",c3a046e3d2b2bf681488826e32d9c061518cfe8c:"2600000000000000000000",d082275f745a2cac0276fbdb02d4b2a3ab1711fe:"30000000000000000000",a701df79f594901afe1444485e6b20c3bda2b9b3:"1000000000000000000000",dec3eec2640a752c466e2b7e7ee685afe9ac41f4:"1324245000000000000000","8134dd1c9df0d6c8a5812426bb55c761ca831f08":"122360000000000000000",bfc57aa666fae28e9f107a49cb5089a4e22151dd:"1000000000000000000000",c3c2297329a6fd99117e54fc6af379b4d556547e:"6000000000000000000000","40585200683a403901372912a89834aadcb55fdb":"2000000000000000000000",cd49bf185e70d04507999f92a4de4455312827d0:"1000000000000000000000","9c6bc9a46b03ae5404f043dfcf21883e4110cc33":"200000000000000000000","1f49b86d0d3945590698a6aaf1673c37755ca80d":"700000000000000000000",efeb1997aad277cc33430e6111ed0943594048b8:"2000000000000000000000","7c0883054c2d02bc7a852b1f86c42777d0d5c856":"500000000000000000000",ff49a775814ec00051a795a875de24592ea400d4:"200000000000000000000000",f039683d7b3d225bc7d8dfadef63163441be41e2:"34380000000000000000",a3ba0d3a3617b1e31b4e422ce269e873828d5d69:"850000000000000000000",d116f3dcd5db744bd008887687aa0ec9fd7292aa:"1000000000000000000000","5719f49b720da68856f4b9e708f25645bdbc4b41":"640000000000000000000","870796abc0db84af82da52a0ed68734de7e636f5":"300000000000000000000","68b6854788a7c6496cdbf5f84b9ec5ef392b78bb":"19700000000000000000000","8c2fbeee8eacc5c5d77c16abd462ee9c8145f34b":"1940000000000000000000","421684baa9c0b4b5f55338e6f6e7c8e146d41cb7":"1500000000000000000000",dd26b429fd43d84ec179825324bad5bfb916b360:"5142000000000000000000","3821862493242c0aeb84b90de05d250c1e50c074":"322200000000000000000","68a7425fe09eb28cf86eb1793e41b211e57bd68d":"668500000000000000000",da875e4e2f3cabe4f37e0eaed7d1f6dcc6ffef43:"2000000000000000000000",c2663f8145dbfec6c646fc5c49961345de1c9f11:"690000000000000000000",e89c22f1a4e1d4746ecfaa59ed386fee12d51e37:"44932000000000000000",eff86b5123bcdc17ed4ce8e05b7e12e51393a1f7:"500000000000000000000","6c3d18704126aa99ee3342ce60f5d4c85f1867cd":"50000000000000000000",b8d531a964bcea13829620c0ced72422dadb4cca:"169990000000000000000","7c29d47d57a733f56b9b217063b513dc3b315923":"4000000000000000000000",bc1e80c181616342ebb3fb3992072f1b28b802c6:"4000000000000000000000","31313ffd635bf2f3324841a88c07ed146144ceeb":"1970000000000000000000",cc4feb72df98ff35a138e01761d1203f9b7edf0a:"7000000000000000000000","741693c30376508513082020cc2b63e9fa92131b":"1200000000000000000000",aa3135cb54f102cbefe09e96103a1a796718ff54:"57800000000000000000",ef61155ba009dcdebef10b28d9da3d1bc6c9ced4:"59100000000000000000",b3c94811e7175b148b281c1a845bfc9bb6fbc115:"200000000000000000000","96d9cca8f55eea0040ec6eb348a1774b95d93ef4":"4000000000000000000000",ce62125adec3370ac52110953a4e760be9451e3b:"152000000000000000000",aca1e6bc64cc3180f620e94dc5b1bcfd8158e45d:"2000000000000000000000",bc237148d30c13836ffa2cad520ee4d2e5c4eeff:"1970000000000000000000","0e024e7f029c6aaf3a8b910f5e080873b85795aa":"1000000000000000000000","7283cd4675da58c496556151dafd80c7f995d318":"760000000000000000000","39b299327490d72f9a9edff11b83afd0e9d3c450":"200000000000000000000","5f333a3b2310765a0d1832b9be4c0a03704c1c09":"1000000000000000000000","5aaf1c31254a6e005fba7f5ab0ec79d7fc2b630e":"5910000000000000000000","833db42c14163c7be4cab86ac593e06266d699d5":"174212000000000000000000",f32d25eb0ea2b8b3028a4c7a155dc1aae865784d:"5710684000000000000000","1fa2319fed8c2d462adf2e17feec6a6f30516e95":"125300000000000000000",c49cfaa967f3afbf55031061fc4cef88f85da584:"2000000000000000000000","43db7ff95a086d28ebbfb82fb8fb5f230a5ebccd":"16100000000000000000",cf3f9128b07203a3e10d7d5755c0c4abc6e2cac2:"5000000000000000000000","8f4d1e7e4561284a34fef9673c0d34e12af4aa03":"2000000000000000000000","934af21b7ebfa467e2ced65aa34edd3a0ec71332":"35420000000000000000000","5d231a70c1dfeb360abd97f616e2d10d39f3cab5":"400000000000000000000","2d5d7335acb0362b47dfa3a8a4d3f5949544d380":"200000000000000000000",d1e1f2b9c16c309874dee7fac32675aff129c398:"72800000000000000000",a43b6da6cb7aac571dff27f09d39f846f53769b1:"380000000000000000000","779274bf1803a336e4d3b00ddd93f2d4f5f4a62e":"1000000000000000000000",a644ed922cc237a3e5c4979a995477f36e50bc62:"583900000000000000000",ee6c03429969ca1262cb3f0a4a54afa7d348d7f5:"256100000000000000000","4f06246b8d4bd29661f43e93762201d286935ab1":"4818730000000000000000",e04972a83ca4112bc871c72d4ae1616c2f0728db:"267606000000000000000",df098f5e4e3dffa51af237bda8652c4f73ed9ca6:"502000000000000000000",dfded2574b27d1613a7d98b715159b0d00baab28:"20000000000000000000000","17d931d4c56294dcbe77c8655be4695f006d4a3c":"2000000000000000000000","3ccb71aa6880cb0b84012d90e60740ec06acd78f":"2000000000000000000000",e57d2995b0ebdf3f3ca6c015eb04260dbb98b7c6:"2000000000000000000000",fb3860f4121c432ebdc8ec6a0331b1b709792e90:"600400000000000000000",fa00c376e89c05e887817a9dd0748d96f341aa89:"300700000000000000000",c7a018f0968a51d1f6603c5c49dc545bcb0ff293:"4000000000000000000000","7d73863038ccca22f96affda10496e51e1e6cd48":"20000000000000000000","38ea6f5b5a7b88417551b4123dc127dfe9342da6":"400000000000000000000","014b7f67b14f5d983d87014f570c8b993b9872b5":"200000000000000000000","8ac89bd9b8301e6b0677fa25fcf0f58f0cc7b611":"20000000000000000000","7eb4b0185c92b6439a08e7322168cb353c8a774a":"10165988000000000000000",d29dc08efbb3d72e263f78ab7610d0226de76b00:"12000000000000000000000","72a8260826294726a75bf39cd9aa9e07a3ea14cd":"2000000000000000000000","4cb5c6cd713ca447b848ae2f56b761ca14d7ad57":"267400000000000000000","49185dd7c23632f46c759473ebae966008cd3598":"254030000000000000000","13d67a7e25f2b12cdb85585009f8acc49b967301":"1999944000000000000000","9d913b5d339c95d87745562563fea98b23c60cc4":"170718000000000000000",abdc9f1bcf4d19ee96591030e772c334302f7d83:"40110000000000000000000",e9a5ae3c9e05977dd1069e9fd9d3aefbae04b8df:"1970000000000000000000","1fd296be03ad737c92f9c6869e8d80a71c5714aa":"13370000000000000000","2f13657526b177cad547c3908c840eff647b45d9":"1170685000000000000000",e69fcc26ed225f7b2e379834c524d70c1735e5bc:"2000000000000000000000",bade43599e02f84f4c3014571c976b13a36c65ab:"4000000000000000000000","184a4f0beb71ffd558a6b6e8f228b78796c4cf3e":"12000000000000000000000",d1de5aad3a5fd803f1b1aeb6103cb8e14fe723b7:"20000000000000000000","0bd67dbde07a856ebd893b5edc4f3a5be4202616":"2000000000000000000000","6b30f1823910b86d3acb5a6afc9defb6f3a30bf8":"4200000000000000000000","9a63d185a79129fdab19b58bb631ea36a420544e":"42000000000000000000",df660a91dab9f730f6190d50c8390561500756ca:"2000000000000000000000",a1a1f0fa6d20b50a794f02ef52085c9d036aa6ca:"1000000000000000000000","4ec768295eeabafc42958415e22be216cde77618":"59600000000000000000",c348fc5a461323b57be303cb89361b991913df28:"100000000000000000000000","3a7db224acae17de7798797d82cdf8253017dfa8":"5000000000000000000000","8bea40379347a5c891d59a6363315640f5a7e07a":"1999992000000000000000","2257fca16a6e5c2a647c3c29f36ce229ab93b17e":"4000000000000000000000",e492818aa684e5a676561b725d42f3cc56ae5198:"800000000000000000000",c841884fa4785fb773b28e9715fae99a5134305d:"2000000000000000000000","0d9443a79468a5bbf7c13c6e225d1de91aee07df":"70000000000000000000","6d4008b4a888a826f248ee6a0b0dfde9f93210b9":"5460000000000000000000","884980eb4565c1048317a8f47fdbb461965be481":"3999922000000000000000","985d70d207892bed398590024e2421b1cc119359":"20000000000000000000000",d9ec8fe69b7716c0865af888a11b2b12f720ed33:"4000000000000000000000","49b74e169265f01a89ec4c9072c5a4cd72e4e835":"16100000000000000000000","4c3e95cc3957d252ce0bf0c87d5b4f2234672e70":"2500000000000000000000",d9ff115d01266c9f73b063c1c238ef3565e63b36:"680000000000000000000","48c5c6970b9161bb1c7b7adfed9cdede8a1ba864":"4000000000000000000000",ea6afe2cc928ac8391eb1e165fc40040e37421e7:"2997569000000000000000","08ccda50e4b26a0ffc0ef92e9205310706bec2c7":"6077440000000000000000",e6e9a39d750fe994394eb68286e5ea62a6997882:"600000000000000000000","4b58101f44f7e389e12d471d1635b71614fdd605":"160000000000000000000","8d93dac785f88f1a84bf927d53652b45a154ccdd":"158000000000000000000","415d096ab06293183f3c033d25f6cf7178ac3bc7":"40000000000000000000",c3e387b03ce95ccfd7fa51dd840183bc43532809:"2000000000000000000000",da34b2eae30bafe8daeccde819a794cd89e09549:"2000000000000000000000",fa279bfd8767f956bf7fa0bd5660168da75686bd:"2674000000000000000000",b98ca31785ef06be49a1e47e864f60d076ca472e:"4000000000000000000000",b768b5234eba3a9968b34d6ddb481c8419b3655d:"14974000000000000000","31047d703f63b93424fbbd6e2f1f9e74de13e709":"2850123000000000000000","9a24ce8d485cc4c86e49deb39022f92c7430e67e":"1300000000000000000000",e62f9d7c64e8e2635aeb883dd73ba684ee7c1079:"8000000000000000000000",f15d9d5a21b1929e790371a17f16d95f0c69655c:"2000000000000000000000","285ae51b9500c58d541365d97569f14bb2a3709b":"2000000000000000000000","09c177f1ae442411ddacf187d46db956148360e7":"8950000000000000000000","12173074980153aeaa4b0dcbc7132eadcec21b64":"240000000000000000000","351f16e5e0735af56751b0e225b2421171394090":"13370000000000000000000",ac52b77e15664814f39e4f271be641308d91d6cc:"220000000000000000000","99c883258546cc7e4e971f522e389918da5ea63a":"4000000000000000000000",aa16269aac9c0d803068d82fc79151dadd334b66:"4000000000000000000000","7c9a110cb11f2598b2b20e2ca400325e41e9db33":"26000000000000000000000","583e83ba55e67e13e0e76f8392d873cd21fbf798":"20000000000000000000","555ebe84daa42ba256ea789105cec4b693f12f18":"100000000000000000000","978c430ce4359b06bc2cdf5c2985fc950e50d5c8":"480000000000000000000",dc1eb9b6e64351f56424509645f83e79eee76cf4:"4000000000000000000000","5b290c01967c812e4dc4c90b174c1b4015bae71e":"149946000000000000000",e7d213947fcb904ad738480b1eed2f5c329f27e8:"18718000000000000000",c517d0315c878813c717e18cafa1eab2654e01da:"10000000000000000000000","7e972a8a7c2a44c93b21436c38d21b9252c345fe":"1790000000000000000000","9cb28ac1a20a106f7f373692c5ce4c73f13732a1":"1000000000000000000000","14ab164b3b524c82d6abfbc0de831126ae8d1375":"2000000000000000000000",d46f8223452982a1eea019a8816efc2d6fc00768:"137000000000000000000","5cdc4708f14f40dcc15a795f7dc8cb0b7faa9e6e":"537000000000000000000","66fdc9fee351fa1538eb0d87d819fcf09e7c106a":"6016500000000000000000",e7be82c6593c1eeddd2ae0b15001ff201ab57b2f:"19100000000000000000","47d20e6ae4cad3f829eac07e5ac97b66fdd56cf5":"1000000000000000000000","0f2d8daf04b5414a0261f549ff6477b80f2f1d07":"200000000000000000000000","84bfcef0491a0ae0694b37ceac024584f2aa0467":"1999944000000000000000",ec5feafe210c12bfc9a5d05925a123f1e73fbef8:"456000000000000000000000","7023c70956e04a92d70025aad297b539af355869":"2000000000000000000000",d66ddf1159cf22fd8c7a4bc8d5807756d433c43e:"2200000000000000000000",d0638ea57189a6a699024ad78c71d939c1c2ff8c:"2632000000000000000000","70d25ed2c8ada59c088cf70dd22bf2db93acc18a":"1056600000000000000000",a4875928458ec2005dbb578c5cd33580f0cf1452:"1000000000000000000000",b5ad5157dda921e6bafacd9086ae73ae1f611d3f:"2000000000000000000000",c493489e56c3bdd829007dc2f956412906f76bfa:"48968000000000000000",c57612de91110c482e6f505bcd23f3c5047d1d61:"3580000000000000000000","9b18478655a4851cc906e660feac61f7f4c8bffc":"4174120000000000000000",b21b7979bf7c5ca01fa82dd640b41c39e6c6bc75:"1999944000000000000000",a9d4a2bcbe5b9e0869d70f0fe2e1d6aacd45edc5:"198800000000000000000","6f29bb375be5ed34ed999bb830ee2957dde76d16":"2000000000000000000000",a006268446643ec5e81e7acb3f17f1c351ee2ed9:"4000000000000000000000","42ddd014dc52bfbcc555325a40b516f4866a1dd3":"2000000000000000000000",d6d6776958ee23143a81adadeb08382009e996c2:"3000000000000000000000",d34e03d36a2bd4d19a5fa16218d1d61e3ffa0b15:"320000000000000000000",dac0c177f11c5c3e3e78f2efd663d13221488574:"1000000000000000000000","814135da8f9811075783bf1ab67062af8d3e9f40":"20000000000000000000","7c3eb713c4c9e0381cd8154c7c9a7db8645cde17":"200000000000000000000",f49c47b3efd86b6e6a5bc9418d1f9fec814b69ef:"20000000000000000000000","35f1da127b83376f1b88c82a3359f67a5e67dd50":"1910000000000000000000","44dfba50b829becc5f4f14d1b04aab3320a295e5":"1000000000000000000000","0b924df007e9c0878417cfe63b976ea1a382a897":"40000000000000000000","82438fd2b32a9bdd674b49d8cc5fa2eff9781847":"20000000000000000000","794529d09d017271359730027075b87ad83dae6e":"310000000000000000000",f4b49100757772f33c177b9a76ba95226c8f3dd8:"6700000000000000000000","8563c49361b625e768771c96151dbfbd1c906976":"2000000000000000000000","0b9df80fbe232009dacf0aa8cac59376e2476203":"2000000000000000000000","149b6dbde632c19f5af47cb493114bebd9b03c1f":"12000000000000000000000",d7a1431ee453d1e49a0550d1256879b4f5d10201:"1670000000000000000000","1d37616b793f94911838ac8e19ee9449df921ec4":"1500000000000000000000",d6670c036df754be43dadd8f50feea289d061fd6:"5988459000000000000000","02778e390fa17510a3428af2870c4273547d386c":"16163700000000000000000",b89f4632df5909e58b2a9964f74feb9a3b01e0c5:"21406707000000000000000","76c27535bcb59ce1fa2d8c919cabeb4a6bba01d1":"2000000000000000000000","36bf43ff35df90908824336c9b31ce33067e2f50":"346837200000000000000000",b53bcb174c2518348b818aece020364596466ba3:"2000000000000000000000",b4dd460cd016725a64b22ea4f8e06e06674e033e:"5370000000000000000000",cda1741109c0265b3fb2bf8d5ec9c2b8a3346b63:"20000000000000000000",feb8b8e2af716ae41fc7c04bcf29540156461e6b:"1555396000000000000000",a49f523aa51364cbc7d995163d34eb590ded2f08:"2659160000000000000000",a7e74f0bdb278ff0a805a648618ec52b166ff1be:"100000000000000000000","5ead29037a12896478b1296ab714e9cb95428c81":"71500000000000000000",cdecf5675433cdb0c2e55a68db5d8bbe78419dd2:"20000000000000000000",c24ccebc2344cce56417fb684cf81613f0f4b9bd:"1550000000000000000000","5a70106f20d63f875265e48e0d35f00e17d02bc9":"20000000000000000000","2606c3b3b4ca1b091498602cb1978bf3b95221c0":"400000000000000000000","1ad4563ea5786be1159935abb0f1d5879c3e7372":"6000000000000000000000",b782bfd1e2de70f467646f9bc09ea5b1fcf450af:"267400000000000000000","649a2b9879cd8fb736e6703b0c7747849796f10f":"7358102000000000000000","1cc1d3c14f0fb8640e36724dc43229d2ea7a1e48":"1700000000000000000000","824b3c3c443e19295d7ef6faa7f374a4798486a8":"20000000000000000000",a7758cecb60e8f614cce96137ef72b4fbd07774a:"500000000000000000000","981f712775c0dad97518ffedcb47b9ad1d6c2762":"6685000000000000000000","26e801b62c827191dd68d31a011990947fd0ebe0":"20000000000000000000","95447046313b2f3a5e19b948fd3b8bedc82c717c":"500000000000000000000","0b701101a4109f9cb360dc57b77442673d5e5983":"2000000000000000000000","5b25cae86dcafa2a60e7723631fc5fa49c1ad87d":"2491200000000000000000",f73ac46c203be1538111b151ec8220c786d84144:"294515000000000000000",e8c3d3b0e17f97d1e756e684f94e1470f99c95a1:"400000000000000000000","8c900a8236b08c2b65405d39d75f20062a7561fd":"1640000000000000000000","43898c49a34d509bfed4f76041ee91caf3aa6aa5":"300000000000000000000",c85325eab2a59b3ed863c86a5f2906a04229ffa9:"465600000000000000000","4a430170152de5172633dd8262d107a0afd96a0f":"3160000000000000000000","6e0ee70612c976287d499ddfa6c0dcc12c06deea":"129980000000000000000","21c07380484f6cbc8724ad32bc864c3b5ad500b7":"1000000000000000000000",ff5162f2354dc492c75fd6e3a107268660eecb47:"1700000000000000000000","8845e9f90e96336bac3c616be9d88402683e004c":"2000000000000000000000",f23c7b0cb8cd59b82bd890644a57daf40c85e278:"50038000000000000000","1784948bf99848c89e445638504dd698271b5924":"6037580000000000000000",b39f4c00b2630cab7db7295ef43d47d501e17fd7:"4000000000000000000000","3fb7d197b3ba4fe045efc23d50a14585f558d9b2":"20000000000000000000",bd043b67c63e60f841ccca15b129cdfe6590c8e3:"200000000000000000000","86ca0145957e6b0dfe36875fbe7a0dec55e17a28":"10000000000000000000000",dae7201eab8c063302930d693929d07f95e71962:"2687370000000000000000",cc034985d3f28c2d39b1a34bced4d3b2b6ca234e:"182000000000000000000","40e0dbf3efef9084ea1cd7e503f40b3b4a8443f6":"4000000000000000000000",b1896a37e5d8825a2d01765ae5de629977de8352:"200000000000000000000",d9f547f2c1de0ed98a53d161df57635dd21a00bd:"98500000000000000000","2fea1b2f834f02fc54333f8a809f0438e5870aa9":"20200000000000000000","68b31836a30a016ada157b638ac15da73f18cfde":"26000000000000000000",bc967fe4418c18b99858966d870678dca2b88879:"8740000000000000000000","16bae5d24eff91778cd98b4d3a1cc3162f44aa77":"401100000000000000000",f476e1267f86247cc908816f2e7ad5388c952db0:"4000000000000000000000","0203ae01d4c41cae1865e04b1f5b53cdfaecae31":"1006054000000000000000",bd4bd5b122d8ef7b7c8f0667450320db2116142e:"600000000000000000000",a394ad4fd9e6530e6f5c53faecbede81cb172da1:"5600000000000000000000","3a9960266df6492063538a99f487c950a3a5ec9e":"24000000000000000000000",d8069f84b521493f4715037f3226b25f33b60586:"1910000000000000000000","136c834bf111326d207395295b2e583ea7f33572":"100000000000000000000",c5c73d61cce7c8fe4c8fce29f39092cd193e0fff:"8000000000000000000000","3cfbf066565970639e130df2a7d16b0e14d6091c":"1700000000000000000000","61b905de663fc17386523b3a28e2f7d037a655cd":"500000000000000000000",fda0ce15330707f10bce3201172d2018b9ddea74:"51900000000000000000",f7fc45abf76f5088e2e5b5a8d132f28a4d4ec1c0:"2000000000000000000000",c3db9fb6f46c480af34465d79753b4e2b74a67ce:"20000000000000000000000",ebe46cc3c34c32f5add6c3195bb486c4713eb918:"1000000000000000000000","91d2a9ee1a6db20f5317cca7fbe2313895db8ef8":"8499600000000000000000",c4cc45a2b63c27c0b4429e58cd42da59be739bd6:"1000000000000000000000",a43b81f99356c0af141a03010d77bd042c71c1ee:"2000000000000000000000","4c45d4c9a725d11112bfcbca00bf31186ccaadb7":"400000000000000000000",bf9f271f7a7e12e36dd2fe9facebf385fe6142bd:"62760000000000000000",e0ce80a461b648a501fd0b824690c8868b0e4de8:"500000000000000000000",a1f7dde1d738d8cd679ea1ee965bee224be7d04d:"1127000000000000000000","7f1c81ee1697fc144b7c0be5493b5615ae7fddca":"500200000000000000000",b508f987b2de34ae4cf193de85bff61389621f88:"6000000000000000000000","5f26cf34599bc36ea67b9e7a9f9b4330c9d542a3":"1000000000000000000000",d02108d2ae3cab10cbcf1657af223e027c8210f6:"2000140000000000000000","952183cfd38e352e579d36decec5b18450f7fba0":"2000000000000000000000",eb90c793b3539761e1c814a29671148692193eb4:"12000000000000000000000","1076212d4f758c8ec7121c1c7d74254926459284":"35000056000000000000000",f05ceeab65410564709951773c8445ad9f4ec797:"299982000000000000000","05361d8eb6941d4e90fb7e1418a95a32d5257732":"20000000000000000000",a5783bf33432ff82ac498985d7d460ae67ec3673:"1820000000000000000000",b1cd4bdfd104489a026ec99d597307a04279f173:"20000000000000000000000","876c3f218b4776df3ca9dbfb270de152d94ed252":"100000000000000000000","8a36869ad478997cbf6d8924d20a3c8018e9855b":"20000000000000000000",fb3fe09bb836861529d7518da27635f538505615:"1399904000000000000000",d093e829819fd2e25b973800bb3d5841dd152d05:"4000000000000000000000","126d91f7ad86debb0557c612ca276eb7f96d00a1":"100000000000000000000","2a81d27cb6d4770ff4f3c4a3ba18e5e57f07517c":"2000000000000000000000",c4f7b13ac6d4eb4db3d4e6a252af8a07bd5957da:"200000000000000000000","305d26c10bdc103f6b9c21272eb7cb2d9108c47e":"500000000000000000000",d0d0a2ad45f59a9dccc695d85f25ca46ed31a5a3:"840000000000000000000","522323aad71dbc96d85af90f084b99c3f09decb7":"6000000000000000000000",f43da3a4e3f5fab104ca9bc1a0f7f3bb4a56f351:"1999944000000000000000",a2dc65ee256b59a5bd7929774f904b358df3ada1:"21319600000000000000000",f382df583155d8548f3f93440cd5f68cb79d6026:"266619800000000000000000","0c967e3061b87a753e84507eb60986782c8f3013":"100000000000000000000",a3a262afd2936819230892fde84f2d5a594ab283:"1880000000000000000000","93868ddb2a794d02ebda2fa4807c76e3609858dc":"2027851000000000000000",cd35ff010ec501a721a1b2f07a9ca5877dfcf95a:"4011000000000000000000","5824a7e22838277134308c5f4b50dab65e43bb31":"6000000000000000000000","7f7a3a21b3f5a65d81e0fcb7d52dd00a1aa36dba":"100000000000000000000","30513fca9f36fd788cfea7a340e86df98294a244":"447000000000000000000","283e6252b4efcf4654391acb75f903c59b78c5fb":"12000000000000000000000",eddbaafbc21be8f25562f1ed6d05d6afb58f02c2:"2000000000000000000000","0dcfe837ea1cf28c65fccec3bef1f84e59d150c0":"200000000000000000000","828ba651cb930ed9787156299a3de44cd08b7212":"1337000000000000000000",cfd47493c9f89fe680bda5754dd7c9cfe7cb5bbe:"54508000000000000000","0e89eddd3fa0d71d8ab0ff8da5580686e3d4f74f":"2000000000000000000000","205f5166f12440d85762c967d3ae86184f8f4d98":"432500000000000000000","25dad495a11a86b9eeece1eeec805e57f157faff":"16000000000000000000000","6c84cba77c6db4f7f90ef13d5ee21e8cfc7f8314":"2000000000000000000000","91a787bc5196f34857fe0c372f4df376aaa76613":"2000000000000000000000",b0d3c9872b85056ea0c0e6d1ecf7a77e3ce6ab85:"4999711000000000000000","6e4d2e39c8836629e5b487b1918a669aebdd9536":"1000000000000000000000",dc703a5f3794c84d6cb3544918cae14a35c3bd4f:"1850000000000000000000","47beb20f759100542aa93d41118b3211d664920e":"2000000000000000000000","5a7735007d70b06844da9901cdfadb11a2582c2f":"6000000000000000000000",aff107960b7ec34ed690b665024d60838c190f70:"500000000000000000000","563a03ab9c56b600f6d25b660c21e16335517a75":"1000000000000000000000",a106465bbd19e1b6bce50d1b1157dc59095a3630:"2000000000000000000000",ca9dec02841adf5cc920576a5187edd2bd434a18:"500000000000000000000","572ac1aba0de23ae41a7cae1dc0842d8abfc103b":"1910000000000000000000","5f74ed0e24ff80d9b2c4a44baa9975428cd6b935":"2980000000000000000000",f2049532fd458a83ca1bff2eebacb6d5ca63f4a4:"3625693000000000000000",cee699c0707a7836252b292f047ce8ad289b2f55:"324700000000000000000","8b3696f3c60de32432a2e4c395ef0303b7e81e75":"30000000000000000000000","13dee03e3799952d0738843d4be8fc0a803fb20e":"2000000000000000000000",c853215b9b9f2d2cd0741e585e987b5fb80c212e:"1550000000000000000000","851c0d62be4635d4777e8035e37e4ba8517c6132":"500000000000000000000",a76b743f981b693072a131b22ba510965c2fefd7:"18200000000000000000","69bd25ade1a3346c59c4e930db2a9d715ef0a27a":"4000000000000000000000","0fec4ee0d7ca180290b6bd20f9992342f60ff68d":"334383000000000000000",ccfd725760a68823ff1e062f4cc97e1360e8d997:"399800000000000000000","9f017706b830fb9c30efb0a09f506b9157457534":"2000000000000000000000","420fb86e7d2b51401fc5e8c72015decb4ef8fc2e":"1000000000000000000000",cb7d2b8089e9312cc9aeaa2773f35308ec6c2a7b:"10000000000000000000000","6c822029218ac8e98a260c1e064029348839875b":"5010000000000000000000","1c68a66138783a63c98cc675a9ec77af4598d35e":"50100000000000000000",f270792576f05d514493ffd1f5e84bec4b2df810:"1000000000000000000000","9191f94698210516cf6321a142070e20597674ed":"17194000000000000000",c0ca3277942e7445874be31ceb902972714f1823:"250000000000000000000","35e096120deaa5c1ecb1645e2ccb8b4edbd9299a":"500000000000000000000",e2bbf84641e3541f6c33e6ed683a635a70bde2ec:"502763000000000000000",d12d77ae01a92d35117bac705aacd982d02e74c1:"1000000000000000000000",dabb0889fc042926b05ef57b2520910abc4b4149:"2000000000000000000000","5a1a336962d6e0c63031cc83c6a5c6a6f4478ecb":"1000000000000000000000",abd154903513b8da4f019f68284b0656a1d0169b:"1000000000000000000000",ad377cd25eb53e83ae091a0a1d2b4516f484afde:"1940000000000000000000","08c2f236ac4adcd3fda9fbc6e4532253f9da3bec":"20000000000000000000","71135d8f05963c905a4a07922909235a896a52ea":"3000000000000000000000","080546508a3d2682c8b9884f13637b8847b44db3":"2000000000000000000000","2d61bfc56873923c2b00095dc3eaa0f590d8ae0f":"20760000000000000000000",cbfa6af6c283b046e2772c6063b0b21553c40106:"2000000000000000000000",ccabc6048a53464424fcf76eeb9e6e1801fa23d4:"49250000000000000000","60cc3d445ebdf76a7d7ae571c6971dff68cc8585":"1000000000000000000000",fff33a3bd36abdbd412707b8e310d6011454a7ae:"8000000000000000000000",d2dbebe89b0357aea98bbe8e496338debb28e805:"4000000000000000000000","5f521282e9b278dc8c034c72af53ee29e5443d78":"6520000000000000000000",c5a48a8500f9b4e22f0eb16c6f4649687674267d:"812721000000000000000","8cb3aa3fcd212854d7578fcc30fdede6742a312a":"300000000000000000000","90d2809ae1d1ffd8f63eda01de49dd552df3d1bc":"3998000000000000000000","96a55f00dff405dc4de5e58c57f6f6f0cac55d2f":"1962711000000000000000",ae842e81858ecfedf6506c686dc204ac15bf8b24:"40000000000000000000","0be6a09e4307fe48d412b8d1a1a8284dce486261":"19180000000000000000000",c9c7ac0bdd9342b5ead4360923f68c72a6ba633a:"500000000000000000000",ea8f30b6e4c5e65290fb9864259bc5990fa8ee8a:"20000000000000000000","74d37a51747bf8b771bfbf43943933d100d21483":"1000000000000000000000","1a04d5389eb006f9ce880c30d15353f8d11c4b31":"17072800000000000000000","726a14c90e3f84144c765cffacba3e0df11b48be":"10000000000000000000000","86b7bd563ceab686f96244f9ddc02ad7b0b14bc2":"10000000000000000000000","2bbe672a1857508f630f2a5edb563d9e9de92815":"2000000000000000000000",a17070c2e9c5a940a4ec0e4954c4d7d643be8f49:"1999965000000000000000",f2d1b7357724ec4c03185b879b63f57e26589153:"6000000000000000000000",d6a7ac4de7b510f0e8de519d973fa4c01ba83400:"1880000000000000000000","593b45a1864ac5c7e8f0caaeba0d873cd5d113b2":"6000000000000000000000","0837539b5f6a522a482cdcd3a9bb7043af39bdd2":"6000000000000000000000",b927abd2d28aaaa24db31778d27419df8e1b04bb:"27531000000000000000",b2e085fddd1468ba07415b274e734e11237fb2a9:"100000000000000000000","970938522afb5e8f994873c9fbdc26e3b37e314c":"1000000000000000000000",f3de5f26ef6aded6f06d3b911346ee70401da4a0:"354718000000000000000",bffb6929241f788693273e7022e60e3eab1fe84f:"2000000000000000000000",b56ad2aec6c8c3f19e1515bbb7dd91285256b639:"1000000000000000000000","47730f5f8ebf89ac72ef80e46c12195038ecdc49":"3160000000000000000000",f39a9d7aa3581df07ee4279ae6c312ef21033658:"4000000000000000000000","36227cdfa0fd3b9d7e6a744685f5be9aa366a7f0":"198479000000000000000","89e3b59a15864737d493c1d23cc53dbf8dcb1362":"4000000000000000000000",bd08e0cddec097db7901ea819a3d1fd9de8951a2:"20000000000000000000","533444584082eba654e1ad30e149735c6f7ba922":"1730000000000000000000","6a8a4317c45faa0554ccdb482548183e295a24b9":"1000000000000000000000","22ce349159eeb144ef06ff2636588aef79f62832":"188000000000000000000","3cd1d9731bd548c1dd6fcea61beb75d91754f7d3":"5130285000000000000000","8b7056f6abf3b118d026e944d5c073433ca451d7":"999999000000000000000","15f1b352110d68901d8f67aac46a6cfafe031477":"200000000000000000000","0f789e30397c53bf256fc364e6ef39f853504114":"3640000000000000000000","750bbb8c06bbbf240843cc75782ee02f08a97453":"835000000000000000000",fff7ac99c8e4feb60c9750054bdc14ce1857f181:"1000000000000000000000","5c6f36af90ab1a656c6ec8c7d521512762bba3e1":"1999800000000000000000","6811b54cd19663b11b94da1de2448285cd9f68d9":"1100000000000000000000","6f50929777824c291a49c46dc854f379a6bea080":"360000000000000000000",e83604e4ff6be7f96f6018d3ec3072ec525dff6b:"182000000000000000000",d731bb6b5f3c37395e09ceaccd14a918a6060789:"3940000000000000000000","372e453a6b629f27678cc8aeb5e57ce85ec0aef9":"200000000000000000000","86924fb211aad23cf5ce600e0aae806396444087":"10000000000000000000000","18c6723a6753299cb914477d04a3bd218df8c775":"1000000000000000000000",e00484788db50fc6a48e379d123e508b0f6e5ab1:"1000000000000000000000","150e3dbcbcfc84ccf89b73427763a565c23e60d0":"40000000000000000000","8ffa062122ac307418821adb9311075a3703bfa3":"1000000000000000000000","21206ce22ea480e85940d31314e0d64f4e4d3a04":"1000000000000000000000",ac024f594f9558f04943618eb0e6b2ee501dc272:"2000000000000000000000",b2b7cdb4ff4b61d5b7ce0b2270bbb5269743ec04:"2000000000000000000000",abc74706964960dfe0dca3dca79e9216056f1cf4:"40000000000000000000000",d7eb903162271c1afa35fe69e37322c8a4d29b11:"10000000000000000000000",d7c6265dea11876c903b718e4cd8ab24fe265bde:"2000000000000000000000",cba288cd3c1eb4d59ddb06a6421c14c345a47b24:"4000000000000000000000","8c22426055b76f11f0a2de1a7f819a619685fe60":"1980000000000000000000",f463a90cb3f13e1f0643423636beab84c123b06d:"40000000000000000000","2b5ced9987c0765f900e49cf9da2d9f9c1138855":"400000000000000000000","9bb760d5c289a3e1db18db095345ca413b9a43c2":"197000000000000000000",d66ab79294074c8b627d842dab41e17dd70c5de5:"1000000000000000000000","0bdd58b96e7c916dd2fb30356f2aebfaaf1d8630":"2000000000000000000000",d612597bc31743c78633f633f239b1e9426bd925:"76000000000000000000000","140518a3194bad1350b8949e650565debe6db315":"2000000000000000000000",daedd4ad107b271e89486cbf80ebd621dd974578:"2000000000000000000000",c36c0b63bfd75c2f8efb060883d868cccd6cbdb4:"3000000000000000000000",e646665872e40b0d7aa2ff82729caaba5bc3e89e:"400000000000000000000",b5fb7ea2ddc1598b667a9d57dd39e85a38f35d56:"500000000000000000000",e51421f8ee2210c71ed870fe618276c8954afbe9:"1337000000000000000000","08a9a44e1f41de3dbba7a363a3ab412c124cd15e":"200000000000000000000","562bced38ab2ab6c080f3b0541b8456e70824b3f":"641760000000000000000","1e484d0621f0f5331b35d5408d9aae4eb1acf21e":"20000000000000000000","3a476bd2c9e664c63ab266aa4c6e4a4825f516c3":"200000000000000000000","8d6df209484d7b94702b03a53e56b9fb0660f6f0":"2000000000000000000000","5970fb1b144dd751e4ce2eca7caa20e363dc4da3":"10000000000000000000000",d1dd79fb158160e5b4e8e23f312e6a907fbc4d4e:"500000000000000000000","7ee5ca805dce23af89c2d444e7e40766c54c7404":"240660000000000000000","93e0f37ecdfb0086e3e862a97034447b1e4dec1a":"30000000000000000000",e10ac19c546fc2547c61c139f5d1f45a6666d5b0:"4775000000000000000000","1c73d00b6e25d8eb9c1ff4ad827b6b9e9cf6d20c":"200000000000000000000",d771d9e0ca8a08a113775731434eb3270599c40d:"20000000000000000000",e69d1c378b771e0feff051db69d966ac6779f4ed:"553000000000000000000","0ef85b49d08a75198692914eddb4b22cf5fa4450":"2004800000000000000000",ed70a37cdd1cbda9746d939658ae2a6181288578:"9600000000000000000000",eee761847e33fd61d99387ee14628694d1bfd525:"2000000000000000000000","271d3d481cb88e7671ad216949b6365e06303de0":"4000000000000000000000","5255dc69155a45b970c604d30047e2f530690e7f":"20000000000000000000",cabab6274ed15089737e287be878b757934864e2:"20000000000000000000000","9defe56a0ff1a1947dba0923f7dd258d8f12fa45":"26880000000000000000000",b7a2c103728b7305b5ae6e961c94ee99c9fe8e2b:"50000000000000000000000",b498bb0f520005b6216a4425b75aa9adc52d622b:"4000000000000000000000",c1132878235c5ddba5d9f3228b5236e47020dc6f:"1000000000000000000000",f81622e55757daea6675975dd93538da7d16991e:"2000000000000000000000",ce2deab51c0a9ae09cd212c4fa4cc52b53cc0dec:"2000000000000000000000","86a1eadeeb30461345d9ef6bd05216fa247c0d0c":"2000000000000000000000", -"7b1fe1ab4dfd0088cdd7f60163ef59ec2aee06f5":"2000000000000000000000","6bbc3f358a668dd1a11f0380f3f73108426abd4a":"4000000000000000000000",b1e6e810c24ab0488de9e01e574837829f7c77d0:"400000000000000000000","03eb3cb860f6028da554d344a2bb5a500ae8b86f":"2000000000000000000000",e5481a7fed42b901bbed20789bd4ade50d5f83b9:"2000000000000000000000","1f3da68fe87eaf43a829ab6d7ec5a6e009b204fb":"554988000000000000000","30037988702671acbe892c03fe5788aa98af287a":"2800000000000000000000",edb473353979a206879de144c10a3c51d7d7081a:"6000000000000000000000","22bdffc240a88ff7431af3bff50e14da37d5183e":"1000000000000000000000","9374869d4a9911ee1eaf558bc4c2b63ec63acfdd":"1000000000000000000000",b756ad52f3bf74a7d24c67471e0887436936504c:"20000000000000000000000","8bd0b65a50ef5cef84fec420be7b89ed1470ceb9":"11999000000000000000000",af26f7c6bf453e2078f08953e4b28004a2c1e209:"100000000000000000000","7c532db9e0c06c26fd40acc56ac55c1ee92d3c3a":"300000000000000000000000",dde670d01639667576a22dd05d3246d61f06e083:"26740000000000000000","5cf44e10540d65716423b1bcb542d21ff83a94cd":"10000000000000000000000",f96b4c00766f53736a8574f822e6474c2f21da2d:"400000000000000000000","8d89170b92b2be2c08d57c48a7b190a2f146720f":"19700000000000000000000","142b87c5043ffb5a91df18c2e109ced6fe4a71db":"200000000000000000000","42d34940edd2e7005d46e2188e4cfece8311d74d":"158000000000000000000","562105e82b099735de49f62692cc87cd38a8edcd":"6000000000000000000000","457bcef37dd3d60b2dd019e3fe61d46b3f1e7252":"20000000000000000000",cf8882359c0fb23387f5674074d8b17ade512f98:"6000000000000000000000",f0c081da52a9ae36642adf5e08205f05c54168a6:"111000000000000000000","551e7784778ef8e048e495df49f2614f84a4f1dc":"600000000000000000000","3c869c09696523ced824a070414605bb76231ff2":"1000000000000000000000","7e7f18a02eccaa5d61ab8fbf030343c434a25ef7":"66850000000000000000","9328d55ccb3fce531f199382339f0e576ee840a3":"4000000000000000000000","9d0f347e826b7dceaad279060a35c0061ecf334b":"4000000000000000000000","680640838bd07a447b168d6d923b90cf6c43cdca":"1730000000000000000000",c951900c341abbb3bafbf7ee2029377071dbc36a:"327600000000000000000",ddf5810a0eb2fb2e32323bb2c99509ab320f24ac:"17900000000000000000000","2489ac126934d4d6a94df08743da7b7691e9798e":"1000000000000000000000",f42f905231c770f0a406f2b768877fb49eee0f21:"197000000000000000000","756f45e3fa69347a9a973a725e3c98bc4db0b5a0":"200000000000000000000"}},{}],382:[function(e,a,t){var f=e("./params.json");f.genesisState=e("./genesisState.json"),f.bootstrapNodes=e("./bootstrapNodes.json"),a.exports=f},{"./bootstrapNodes.json":380,"./genesisState.json":381,"./params.json":383}],383:[function(e,a,t){a.exports={genesisGasLimit:{v:5e3,d:"Gas limit of the Genesis block."},genesisDifficulty:{v:17179869184,d:"Difficulty of the Genesis block."},genesisNonce:{v:"0x0000000000000042",d:"the geneis nonce"},genesisExtraData:{v:"0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",d:"extra data "},genesisHash:{v:"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",d:"genesis hash"},genesisStateRoot:{v:"0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544",d:"the genesis state root"},minGasLimit:{v:5e3,d:"Minimum the gas limit may ever be."},gasLimitBoundDivisor:{v:1024,d:"The bound divisor of the gas limit, used in update calculations."},minimumDifficulty:{v:131072,d:"The minimum that the difficulty may ever be."},difficultyBoundDivisor:{v:2048,d:"The bound divisor of the difficulty, used in the update calculations."},durationLimit:{v:13,d:"The decision boundary on the blocktime duration used to determine whether difficulty should go up or not."},maximumExtraDataSize:{v:32,d:"Maximum size extra data may be after Genesis."},epochDuration:{v:3e4,d:"Duration between proof-of-work epochs."},stackLimit:{v:1024,d:"Maximum size of VM stack allowed."},callCreateDepth:{v:1024,d:"Maximum depth of call/create stack."},tierStepGas:{v:[0,2,3,5,8,10,20],d:"Once per operation, for a selection of them."},expGas:{v:10,d:"Once per EXP instuction."},expByteGas:{v:10,d:"Times ceil(log256(exponent)) for the EXP instruction."},sha3Gas:{v:30,d:"Once per SHA3 operation."},sha3WordGas:{v:6,d:"Once per word of the SHA3 operation's data."},sloadGas:{v:50,d:"Once per SLOAD operation."},sstoreSetGas:{v:2e4,d:"Once per SSTORE operation if the zeroness changes from zero."},sstoreResetGas:{v:5e3,d:"Once per SSTORE operation if the zeroness does not change from zero."},sstoreRefundGas:{v:15e3,d:"Once per SSTORE operation if the zeroness changes to zero."},jumpdestGas:{v:1,d:"Refunded gas, once per SSTORE operation if the zeroness changes to zero."},logGas:{v:375,d:"Per LOG* operation."},logDataGas:{v:8,d:"Per byte in a LOG* operation's data."},logTopicGas:{v:375,d:"Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas."},createGas:{v:32e3,d:"Once per CREATE operation & contract-creation transaction."},callGas:{v:40,d:"Once per CALL operation & message call transaction."},callStipend:{v:2300,d:"Free gas given at beginning of call."},callValueTransferGas:{v:9e3,d:"Paid for CALL when the value transfor is non-zero."},callNewAccountGas:{v:25e3,d:"Paid for CALL when the destination address didn't exist prior."},suicideRefundGas:{v:24e3,d:"Refunded following a suicide operation."},memoryGas:{v:3,d:"Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL."},quadCoeffDiv:{v:512,d:"Divisor for the quadratic particle of the memory cost equation."},createDataGas:{v:200,d:""},txGas:{v:21e3,d:"Per transaction. NOTE: Not payable on data of calls between transactions."},txCreation:{v:32e3,d:"the cost of creating a contract via tx"},txDataZeroGas:{v:4,d:"Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions."},txDataNonZeroGas:{v:68,d:"Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions."},copyGas:{v:3,d:"Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added."},ecrecoverGas:{v:3e3,d:""},sha256Gas:{v:60,d:""},sha256WordGas:{v:12,d:""},ripemd160Gas:{v:600,d:""},ripemd160WordGas:{v:120,d:""},identityGas:{v:15,d:""},identityWordGas:{v:3,d:""},minerReward:{v:"5000000000000000000",d:"the amount a miner get rewarded for mining a block"},ommerReward:{v:"625000000000000000",d:"The amount of wei a miner of an uncle block gets for being inculded in the blockchain"},niblingReward:{v:"156250000000000000",d:"the amount a miner gets for inculding a uncle"},homeSteadForkNumber:{v:1e6,d:"the block that the homestead fork started at"},timebombPeriod:{v:1e5,d:"Exponential difficulty timebomb period"},freeBlockPeriod:{v:2}}},{}],384:[function(e,a,t){(function(a){const f=e("keccakjs"),c=e("secp256k1"),r=e("assert"),d=e("rlp"),n=e("bn.js"),i=e("crypto");t.MAX_INTEGER=new n("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",16),t.TWO_POW256=new n("10000000000000000000000000000000000000000000000000000000000000000",16),t.SHA3_NULL_S="c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",t.SHA3_NULL=new a(t.SHA3_NULL_S,"hex"),t.SHA3_RLP_ARRAY_S="1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",t.SHA3_RLP_ARRAY=new a(t.SHA3_RLP_ARRAY_S,"hex"),t.SHA3_RLP_S="56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",t.SHA3_RLP=new a(t.SHA3_RLP_S,"hex"),t.BN=n,t.rlp=d,t.secp256k1=c,t.zeros=function(e){var t=new a(e);return t.fill(0),t},t.setLengthLeft=t.setLength=function(e,a,f){var c=t.zeros(a);return e=t.toBuffer(e),f?e.length0&&"0"===a.toString();)e=e.slice(1),a=e[0];return e},t.toBuffer=function(e){if(!a.isBuffer(e))if(Array.isArray(e))e=new a(e);else if("string"==typeof e)e=t.isHexPrefixed(e)?new a(t.padToEven(t.stripHexPrefix(e)),"hex"):new a(e);else if("number"==typeof e)e=t.intToBuffer(e);else if(null===e||void 0===e)e=new a([]);else{if(!e.toArray)throw new Error("invalid type");e=new a(e.toArray())}return e},t.intToHex=function(e){r(e%1===0,"number is not a integer"),r(e>=0,"number must be positive");var a=e.toString(16);return a.length%2&&(a="0"+a),"0x"+a},t.intToBuffer=function(e){var f=t.intToHex(e);return new a(f.slice(2),"hex")},t.bufferToInt=function(e){return e=t.toBuffer(e),0===e.length?0:parseInt(e.toString("hex"),16)},t.fromSigned=function(e){return new n(e).fromTwos(256)},t.toUnsigned=function(e){return new a(e.toTwos(256).toArray())},t.sha3=function(e,c){e=t.toBuffer(e),c||(c=256);var r=new f(c);return e&&r.update(e),new a(r.digest("hex"),"hex")},t.sha256=function(e){return e=t.toBuffer(e),i.createHash("SHA256").update(e).digest()},t.ripemd160=function(e,a){e=t.toBuffer(e);var f=i.createHash("rmd160").update(e).digest();return a===!0?t.setLength(f,32):f},t.rlphash=function(e){return t.sha3(d.encode(e))},t.pubToAddress=t.publicToAddress=function(e,a){return e=t.toBuffer(e),a&&64!==e.length&&(e=c.publicKeyConvert(e,!1).slice(1)),r(64===e.length),t.sha3(e).slice(-20)};var b=t.privateToPublic=function(e){return e=t.toBuffer(e),c.publicKeyConvert(c.publicKeyCreate(e),!1).slice(1)};t.privateToAddress=function(e){return t.publicToAddress(b(e))},t.generateAddress=function(e,f){return e=t.toBuffer(e),f=new n(f),f=f.isZero()?null:new a(f.toArray()),t.rlphash([e,f]).slice(-20)},t.isPrecompiled=function(e){var a=t.unpad(e);return 1===a.length&&a[0]>0&&a[0]<5},t.isHexPrefixed=function(e){return"0x"===e.slice(0,2)},t.stripHexPrefix=function(e){return"string"!=typeof e?e:t.isHexPrefixed(e)?e.slice(2):e},t.addHexPrefix=function(e){return"string"!=typeof e?e:t.isHexPrefixed(e)?e:"0x"+e},t.padToEven=function(e){return e.length%2&&(e="0"+e),e},t.ecsign=function(e,a){var t=c.sign(e,a),f={};return f.r=t.signature.slice(0,32),f.s=t.signature.slice(32,64),f.v=t.recovery+27,f},t.ecrecover=function(e,f,r,d){var n=a.concat([t.setLength(r,32),t.setLength(d,32)],64),i=t.bufferToInt(f)-27,b=c.recover(e,n,i);return c.publicKeyConvert(b,!1).slice(1)},t.baToJSON=function(e){if(a.isBuffer(e))return"0x"+e.toString("hex");if(e instanceof Array){for(var f=[],c=0;c=d.length,"The field "+f.name+" must not have more "+f.length+" bytes")):f.allowZero&&0===d.length||!f.length||r(f.length===d.length,"The field "+f.name+" must have byte length of "+f.length),e.raw[c]=d}e._fields.push(f.name),Object.defineProperty(e,f.name,{enumerable:!0,configurable:!0,get:d,set:n}),f["default"]&&(e[f.name]=f["default"]),f.alias&&Object.defineProperty(e,f.alias,{enumerable:!1,configurable:!0,set:n,get:d})}),c)if("string"==typeof c&&(c=new a(t.stripHexPrefix(c),"hex")),a.isBuffer(c)&&(c=d.decode(c)),Array.isArray(c)){if(c.length>e._fields.length)throw new Error("wrong number of fields in data");c.forEach(function(a,f){e[e._fields[f]]=t.toBuffer(a)})}else{if("object"!=typeof c)throw new Error("invalid data");for(var n in c)-1!==e._fields.indexOf(n)&&(e[n]=c[n])}}}).call(this,e("buffer").Buffer)},{assert:97,"bn.js":385,buffer:99,crypto:103,keccakjs:386,rlp:419,secp256k1:389}],385:[function(e,a,t){arguments[4][136][0].apply(t,arguments)},{dup:136}],386:[function(e,a,t){a.exports=e("sha3").SHA3Hash},{sha3:387}],387:[function(e,a,t){(function(t){const f=e("js-sha3"),c=[224,256,384,512];var r=function(e){if(void 0!==e&&-1==c.indexOf(e))throw new Error("Unsupported hash length");this.content=[],this.bitcount=e?"keccak_"+e:"keccak_512"};r.prototype.update=function(e){if(t.isBuffer(e))this.content.push(e);else{if("string"!=typeof e)throw new Error("Unsupported argument to update");this.content.push(new t(e))}return this},r.prototype.digest=function(e){var a=f[this.bitcount](t.concat(this.content));if("hex"===e)return a;if("binary"===e||void 0===e)return new t(a,"hex").toString("binary");throw new Error("Unsupported encoding for digest: "+e)},a.exports={SHA3Hash:r}}).call(this,e("buffer").Buffer)},{buffer:99,"js-sha3":388}],388:[function(e,a,t){(function(e){!function(t,f){"use strict";var c="undefined"!=typeof a;c&&(t=e,t.JS_SHA3_TEST&&(t.navigator={userAgent:"Chrome"}));var r=(t.JS_SHA3_TEST||!c)&&-1!=navigator.userAgent.indexOf("Chrome"),d="0123456789abcdef".split(""),n=[1,256,65536,16777216],i=[6,1536,393216,100663296],b=[0,8,16,24],o=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],s=[],u=[],h=function(e){return w(e,224,n)},l=function(e){return w(e,256,n)},p=function(e){return w(e,384,n)},g=function(e){return w(e,224,i)},m=function(e){return w(e,256,i)},v=function(e){return w(e,384,i)},y=function(e){return w(e,512,i)},w=function(e,a,c){var i="string"!=typeof e;i&&e.constructor==t.ArrayBuffer&&(e=new Uint8Array(e)),a===f&&(a=512,c=n);var h,l,p,g,m,v,y,w,_,S,A,I,E,k,x,P,B,M,O,R,T,C,N,j,L,D,U,z,K,H,F,q,V,Y,G,W,J,X,Z,$,Q,ee,ae,te,fe,ce,re,de,ne,ie,be,oe,se,ue,he,le,pe,ge,me,ve,ye,we,_e,Se,Ae,Ie,Ee=!1,ke=0,xe=0,Pe=e.length,Be=(1600-2*a)/32,Me=4*Be;for(g=0;50>g;++g)u[g]=0;h=0;do{for(s[0]=h,g=1;Be+1>g;++g)s[g]=0;if(i)for(g=xe;Pe>ke&&Me>g;++ke)s[g>>2]|=e[ke]<ke&&Me>g;++ke)l=e.charCodeAt(ke),128>l?s[g>>2]|=l<l?(s[g>>2]|=(192|l>>6)<>2]|=(128|63&l)<l||l>=57344?(s[g>>2]|=(224|l>>12)<>2]|=(128|l>>6&63)<>2]|=(128|63&l)<>2]|=(240|l>>18)<>2]|=(128|l>>12&63)<>2]|=(128|l>>6&63)<>2]|=(128|63&l)<>2]|=c[3&g],++ke),h=s[Be],ke>Pe&&Me>g&&(s[Be-1]|=2147483648,Ee=!0),g=0;Be>g;++g)u[g]^=s[g];for(p=0;48>p;p+=2)y=u[0]^u[10]^u[20]^u[30]^u[40],w=u[1]^u[11]^u[21]^u[31]^u[41],_=u[2]^u[12]^u[22]^u[32]^u[42],S=u[3]^u[13]^u[23]^u[33]^u[43],A=u[4]^u[14]^u[24]^u[34]^u[44],I=u[5]^u[15]^u[25]^u[35]^u[45],E=u[6]^u[16]^u[26]^u[36]^u[46],k=u[7]^u[17]^u[27]^u[37]^u[47],x=u[8]^u[18]^u[28]^u[38]^u[48],P=u[9]^u[19]^u[29]^u[39]^u[49],m=x^(_<<1|S>>>31),v=P^(S<<1|_>>>31),u[0]^=m,u[1]^=v,u[10]^=m,u[11]^=v,u[20]^=m,u[21]^=v,u[30]^=m,u[31]^=v,u[40]^=m,u[41]^=v,m=y^(A<<1|I>>>31),v=w^(I<<1|A>>>31),u[2]^=m,u[3]^=v,u[12]^=m,u[13]^=v,u[22]^=m,u[23]^=v,u[32]^=m,u[33]^=v,u[42]^=m,u[43]^=v,m=_^(E<<1|k>>>31),v=S^(k<<1|E>>>31),u[4]^=m,u[5]^=v,u[14]^=m,u[15]^=v,u[24]^=m,u[25]^=v,u[34]^=m,u[35]^=v,u[44]^=m,u[45]^=v,m=A^(x<<1|P>>>31),v=I^(P<<1|x>>>31),u[6]^=m,u[7]^=v,u[16]^=m,u[17]^=v,u[26]^=m,u[27]^=v,u[36]^=m,u[37]^=v,u[46]^=m,u[47]^=v,m=E^(y<<1|w>>>31),v=k^(w<<1|y>>>31),u[8]^=m,u[9]^=v,u[18]^=m,u[19]^=v,u[28]^=m,u[29]^=v,u[38]^=m,u[39]^=v,u[48]^=m,u[49]^=v,B=u[0],M=u[1],ne=u[11]<<4|u[10]>>>28,ie=u[10]<<4|u[11]>>>28,F=u[20]<<3|u[21]>>>29,q=u[21]<<3|u[20]>>>29,_e=u[31]<<9|u[30]>>>23,Se=u[30]<<9|u[31]>>>23,fe=u[40]<<18|u[41]>>>14,ce=u[41]<<18|u[40]>>>14,J=u[2]<<1|u[3]>>>31,X=u[3]<<1|u[2]>>>31,O=u[13]<<12|u[12]>>>20,R=u[12]<<12|u[13]>>>20,be=u[22]<<10|u[23]>>>22,oe=u[23]<<10|u[22]>>>22,V=u[33]<<13|u[32]>>>19,Y=u[32]<<13|u[33]>>>19,Ae=u[42]<<2|u[43]>>>30,Ie=u[43]<<2|u[42]>>>30,pe=u[5]<<30|u[4]>>>2,ge=u[4]<<30|u[5]>>>2,Z=u[14]<<6|u[15]>>>26,$=u[15]<<6|u[14]>>>26,T=u[25]<<11|u[24]>>>21,C=u[24]<<11|u[25]>>>21,se=u[34]<<15|u[35]>>>17,ue=u[35]<<15|u[34]>>>17,G=u[45]<<29|u[44]>>>3,W=u[44]<<29|u[45]>>>3,U=u[6]<<28|u[7]>>>4,z=u[7]<<28|u[6]>>>4,me=u[17]<<23|u[16]>>>9,ve=u[16]<<23|u[17]>>>9,Q=u[26]<<25|u[27]>>>7,ee=u[27]<<25|u[26]>>>7,N=u[36]<<21|u[37]>>>11,j=u[37]<<21|u[36]>>>11,he=u[47]<<24|u[46]>>>8,le=u[46]<<24|u[47]>>>8,re=u[8]<<27|u[9]>>>5,de=u[9]<<27|u[8]>>>5,K=u[18]<<20|u[19]>>>12,H=u[19]<<20|u[18]>>>12,ye=u[29]<<7|u[28]>>>25,we=u[28]<<7|u[29]>>>25,ae=u[38]<<8|u[39]>>>24,te=u[39]<<8|u[38]>>>24,L=u[48]<<14|u[49]>>>18,D=u[49]<<14|u[48]>>>18,u[0]=B^~O&T,u[1]=M^~R&C,u[10]=U^~K&F,u[11]=z^~H&q,u[20]=J^~Z&Q,u[21]=X^~$&ee,u[30]=re^~ne&be,u[31]=de^~ie&oe,u[40]=pe^~me&ye,u[41]=ge^~ve&we,u[2]=O^~T&N,u[3]=R^~C&j,u[12]=K^~F&V,u[13]=H^~q&Y,u[22]=Z^~Q&ae,u[23]=$^~ee&te,u[32]=ne^~be&se,u[33]=ie^~oe&ue,u[42]=me^~ye&_e,u[43]=ve^~we&Se,u[4]=T^~N&L,u[5]=C^~j&D,u[14]=F^~V&G,u[15]=q^~Y&W,u[24]=Q^~ae&fe,u[25]=ee^~te&ce,u[34]=be^~se&he,u[35]=oe^~ue&le,u[44]=ye^~_e&Ae,u[45]=we^~Se&Ie,u[6]=N^~L&B,u[7]=j^~D&M,u[16]=V^~G&U,u[17]=Y^~W&z,u[26]=ae^~fe&J,u[27]=te^~ce&X,u[36]=se^~he&re,u[37]=ue^~le&de,u[46]=_e^~Ae&pe,u[47]=Se^~Ie&ge,u[8]=L^~B&O,u[9]=D^~M&R,u[18]=G^~U&K,u[19]=W^~z&H,u[28]=fe^~J&Z,u[29]=ce^~X&$,u[38]=he^~re&ne,u[39]=le^~de&ie,u[48]=Ae^~pe&me,u[49]=Ie^~ge&ve,u[0]^=o[p],u[1]^=o[p+1]}while(!Ee);var Oe="";if(r)B=u[0],M=u[1],O=u[2],R=u[3],T=u[4],C=u[5],N=u[6],j=u[7],L=u[8],D=u[9],U=u[10],z=u[11],K=u[12],H=u[13],F=u[14],q=u[15],Oe+=d[B>>4&15]+d[15&B]+d[B>>12&15]+d[B>>8&15]+d[B>>20&15]+d[B>>16&15]+d[B>>28&15]+d[B>>24&15]+d[M>>4&15]+d[15&M]+d[M>>12&15]+d[M>>8&15]+d[M>>20&15]+d[M>>16&15]+d[M>>28&15]+d[M>>24&15]+d[O>>4&15]+d[15&O]+d[O>>12&15]+d[O>>8&15]+d[O>>20&15]+d[O>>16&15]+d[O>>28&15]+d[O>>24&15]+d[R>>4&15]+d[15&R]+d[R>>12&15]+d[R>>8&15]+d[R>>20&15]+d[R>>16&15]+d[R>>28&15]+d[R>>24&15]+d[T>>4&15]+d[15&T]+d[T>>12&15]+d[T>>8&15]+d[T>>20&15]+d[T>>16&15]+d[T>>28&15]+d[T>>24&15]+d[C>>4&15]+d[15&C]+d[C>>12&15]+d[C>>8&15]+d[C>>20&15]+d[C>>16&15]+d[C>>28&15]+d[C>>24&15]+d[N>>4&15]+d[15&N]+d[N>>12&15]+d[N>>8&15]+d[N>>20&15]+d[N>>16&15]+d[N>>28&15]+d[N>>24&15],a>=256&&(Oe+=d[j>>4&15]+d[15&j]+d[j>>12&15]+d[j>>8&15]+d[j>>20&15]+d[j>>16&15]+d[j>>28&15]+d[j>>24&15]),a>=384&&(Oe+=d[L>>4&15]+d[15&L]+d[L>>12&15]+d[L>>8&15]+d[L>>20&15]+d[L>>16&15]+d[L>>28&15]+d[L>>24&15]+d[D>>4&15]+d[15&D]+d[D>>12&15]+d[D>>8&15]+d[D>>20&15]+d[D>>16&15]+d[D>>28&15]+d[D>>24&15]+d[U>>4&15]+d[15&U]+d[U>>12&15]+d[U>>8&15]+d[U>>20&15]+d[U>>16&15]+d[U>>28&15]+d[U>>24&15]+d[z>>4&15]+d[15&z]+d[z>>12&15]+d[z>>8&15]+d[z>>20&15]+d[z>>16&15]+d[z>>28&15]+d[z>>24&15]),512==a&&(Oe+=d[K>>4&15]+d[15&K]+d[K>>12&15]+d[K>>8&15]+d[K>>20&15]+d[K>>16&15]+d[K>>28&15]+d[K>>24&15]+d[H>>4&15]+d[15&H]+d[H>>12&15]+d[H>>8&15]+d[H>>20&15]+d[H>>16&15]+d[H>>28&15]+d[H>>24&15]+d[F>>4&15]+d[15&F]+d[F>>12&15]+d[F>>8&15]+d[F>>20&15]+d[F>>16&15]+d[F>>28&15]+d[F>>24&15]+d[q>>4&15]+d[15&q]+d[q>>12&15]+d[q>>8&15]+d[q>>20&15]+d[q>>16&15]+d[q>>28&15]+d[q>>24&15]);else for(g=0,p=a/32;p>g;++g)m=u[g],Oe+=d[m>>4&15]+d[15&m]+d[m>>12&15]+d[m>>8&15]+d[m>>20&15]+d[m>>16&15]+d[m>>28&15]+d[m>>24&15];return Oe};!t.JS_SHA3_TEST&&c?a.exports={sha3_512:y,sha3_384:v,sha3_256:m,sha3_224:g,keccak_512:w,keccak_384:p,keccak_256:l,keccak_224:h}:t&&(t.sha3_512=y,t.sha3_384=v,t.sha3_256=m,t.sha3_224=g,t.keccak_512=w,t.keccak_384=p,t.keccak_256=l,t.keccak_224=h)}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],389:[function(e,a,t){"use strict";a.exports=e("./lib")(e("./lib/elliptic"))},{"./lib":392,"./lib/elliptic":391}],390:[function(e,a,t){(function(e){"use strict";var a=Object.prototype.toString;t.isArray=function(e,a){if(!Array.isArray(e))throw TypeError(a)},t.isBoolean=function(e,t){if("[object Boolean]"!==a.call(e))throw TypeError(t)},t.isBuffer=function(a,t){if(!e.isBuffer(a))throw TypeError(t)},t.isFunction=function(e,t){if("[object Function]"!==a.call(e))throw TypeError(t)},t.isNumber=function(e,t){if("[object Number]"!==a.call(e))throw TypeError(t)},t.isObject=function(e,t){if("[object Object]"!==a.call(e))throw TypeError(t)},t.isBufferLength=function(e,a,t){if(e.length!==a)throw RangeError(t)},t.isBufferLength2=function(e,a,t,f){if(e.length!==a&&e.length!==t)throw RangeError(f)},t.isLengthGTZero=function(e,a){if(0===e.length)throw RangeError(a)},t.isNumberInInterval=function(e,a,t,f){if(a>=e||e>=t)throw RangeError(f)}}).call(this,{isBuffer:e("../../../../browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js")})},{"../../../../browserify/node_modules/insert-module-globals/node_modules/is-buffer/index.js":297}],391:[function(e,a,t){(function(a){"use strict";function f(e){var a,t,f=e[0];if(33!==e.length||2!==f&&3!==f){if(65!==e.length||4!==f&&6!==f&&7!==f)return null;if(a=new c(e.slice(1,33)),t=new c(e.slice(33,65)),a.cmp(i.p)>=0||t.cmp(i.p)>=0)return null;if(a=a.toRed(i.red),t=t.toRed(i.red),(6===f||7===f)&&t.isOdd()!==(7===f))return null;var r=a.redSqr().redIMul(a);if(!t.redSqr().redISub(r.redIAdd(i.b)).isZero())return null}else{if(a=new c(e.slice(1,33)),a.cmp(i.p)>=0)return null;a=a.toRed(i.red),t=a.redSqr().redIMul(a).redIAdd(i.b).redSqrt(),3===f!==t.isOdd()&&(t=t.redNeg())}return n.keyPair({pub:{x:a,y:t}})}var c=e("bn.js"),r=e("elliptic").ec,d=e("../messages.json"),n=new r("secp256k1"),i=n.curve;t.privateKeyVerify=function(e){var a=new c(e);return!(a.cmp(i.n)>=0||a.isZero())},t.privateKeyExport=function(e,t){var f=new c(e);if(f.cmp(i.n)>=0||f.isZero())throw new Error(d.EC_PRIVATE_KEY_EXPORT_DER_FAIL);return new a(n.keyFromPrivate(e).getPublic(t,!0))},t.privateKeyTweakAdd=function(e,t){var f=new c(t);if(f.cmp(i.n)>=0)throw new Error(d.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);if(f.iadd(new c(e)),f.cmp(i.n)>=0&&f.isub(i.n),f.isZero())throw new Error(d.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);return f.toArrayLike(a,null,32)},t.privateKeyTweakMul=function(e,t){var f=new c(t);if(f.cmp(i.n)>=0||f.isZero())throw new Error(d.EC_PRIVATE_KEY_TWEAK_MUL_FAIL);return f.imul(new c(e)),f.cmp(i.n)&&(f=f.umod(i.n)),f.toArrayLike(a,null,32)},t.publicKeyCreate=function(e,t){var f=new c(e);if(f.cmp(i.n)>=0||f.isZero())throw new Error(d.EC_PUBLIC_KEY_CREATE_FAIL);return new a(n.keyFromPrivate(e).getPublic(t,!0))},t.publicKeyConvert=function(e,t){var c=f(e);if(null===c)throw new Error(d.EC_PUBLIC_KEY_PARSE_FAIL);return new a(c.getPublic(t,!0))},t.publicKeyVerify=function(e){return null!==f(e)},t.publicKeyTweakAdd=function(e,t,r){var n=f(e);if(null===n)throw new Error(d.EC_PUBLIC_KEY_PARSE_FAIL);if(t=new c(t),t.cmp(i.n)>=0)throw new Error(d.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);return new a(i.g.mul(t).add(n.pub).encode(!0,r))},t.publicKeyTweakMul=function(e,t,r){var n=f(e);if(null===n)throw new Error(d.EC_PUBLIC_KEY_PARSE_FAIL);if(t=new c(t),t.cmp(i.n)>=0||t.isZero())throw new Error(d.EC_PUBLIC_KEY_TWEAK_MUL_FAIL);return new a(n.pub.mul(t).encode(!0,r))},t.publicKeyCombine=function(e,t){for(var c=new Array(e.length),r=0;r=0||f.cmp(i.n)>=0)throw new Error(d.ECDSA_SIGNATURE_PARSE_FAIL);var r=new a(e);return 1===f.cmp(n.nh)&&new a(i.n.sub(f).toArray(null,32)).copy(r,32),r},t.signatureExport=function(e){var a=e.slice(0,32),t=e.slice(32,64);if(new c(a).cmp(i.n)>=0||new c(t).cmp(i.n)>=0)throw new Error(d.ECDSA_SIGNATURE_PARSE_FAIL);return{r:a,s:t}},t.signatureImport=function(e){var t=new c(e.r);t.cmp(i.n)>=0&&(t=new c(0));var f=new c(e.s);return f.cmp(i.n)>=0&&(f=new c(0)),new a(t.toArray(null,32).concat(f.toArray(null,32)))},t.sign=function(e,t,f,r){if("function"==typeof f){var b=f;f=function(f){var n=b(e,t,null,r,f);if(!a.isBuffer(n)||32!==n.length)throw new Error(d.ECDSA_SIGN_FAIL);return new c(n)}}var o=new c(t);if(o.cmp(i.n)>=0||o.isZero())throw new Error(d.ECDSA_SIGN_FAIL);var s=n.sign(e,t,{canonical:!0,k:f,pers:r});return{signature:new a(s.r.toArray(null,32).concat(s.s.toArray(null,32))),recovery:s.recoveryParam}},t.verify=function(e,a,t){var r={r:a.slice(0,32),s:a.slice(32,64)},b=new c(r.r),o=new c(r.s);if(b.cmp(i.n)>=0||o.cmp(i.n)>=0)throw new Error(d.ECDSA_SIGNATURE_PARSE_FAIL);if(1===o.cmp(n.nh)||b.isZero()||o.isZero())return!1;var s=f(t);if(null===s)throw new Error(d.EC_PUBLIC_KEY_PARSE_FAIL);return n.verify(e,r,{x:s.pub.x,y:s.pub.y})},t.recover=function(e,t,f,r){var b={r:t.slice(0,32),s:t.slice(32,64)},o=new c(b.r),s=new c(b.s);if(o.cmp(i.n)>=0||s.cmp(i.n)>=0)throw new Error(d.ECDSA_SIGNATURE_PARSE_FAIL);try{if(o.isZero()||s.isZero())throw new Error;var u=n.recoverPubKey(e,b,f);return new a(u.encode(!0,r))}catch(h){throw new Error(d.ECDSA_RECOVER_FAIL)}},t.ecdh=function(e,a){}}).call(this,e("buffer").Buffer)},{"../messages.json":393,"bn.js":385,buffer:99,elliptic:394}],392:[function(e,a,t){(function(t){"use strict";function f(e,a){return void 0===e?a:(r.isBoolean(e,d.COMPRESSED_TYPE_INVALID),e)}function c(e){if(2!==e.sig[e.idx++])return null;var a=e.sig[e.idx++];if(0===a||a>33||a>1&&0===e.sig[e.idx]&&e.sig[e.idx+1]<128||255===e.sig[e.idx]&&e.sig[e.idx+1]>=128)return null;0===e.sig[e.idx]&&33===a&&(e.idx+=1,a-=1),e.idx+=a;var f=new t(32);return f.fill(0),32>=a&&e.sig.slice(e.idx-a,e.idx).copy(f,32-a),f}var r=e("./assert"),d=e("./messages.json"),n=new t("3081d30201010420","hex"),i=new t("a08185308182020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a124032200","hex"),b=new t("308201130201010420","hex"),o=new t("a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a144034200","hex");a.exports=function(e){return{privateKeyVerify:function(a){return r.isBuffer(a,d.EC_PRIVATE_KEY_TYPE_INVALID),32===a.length&&e.privateKeyVerify(a)},privateKeyExport:function(a,c){r.isBuffer(a,d.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(a,32,d.EC_PRIVATE_KEY_LENGTH_INVALID),c=f(c,!0);var s=e.privateKeyExport(a,c),u=new t(c?214:279),h=0;return c?(n.copy(u,h),h+=n.length,a.copy(u,h),h+=a.length,i.copy(u,h),h+=i.length,s.copy(u,h)):(b.copy(u,h),h+=b.length,a.copy(u,h),h+=a.length,o.copy(u,h),h+=o.length,s.copy(u,h)),u},privateKeyImport:function(a){r.isBuffer(a,d.EC_PRIVATE_KEY_TYPE_INVALID);do{var t=a.length,f=0;if(f+1>t||48!==a[f])break;if(f+=1,f+1>t||!(128&a[f]))break;var c=127&a[f];if(f+=1,1>c||c>2)break;if(f+c>t)break;var n=a[f+c-1]|(c>1?a[f+c-2]<<8:0);if(f+=c,f+n>t)break;if(f+3>t||2!==a[f]||1!==a[f+1]||1!==a[f+2])break;if(f+=3,f+2>t||4!==a[f]||a[f+1]>32||t1&&0===c[b]&&c[b+1]<128;)--i,++b;for(var o=33,s=0;o>1&&0===n[s]&&n[s+1]<128;)--o,++s;var u=new t(i+o+6);return u[0]=48,u[1]=4+i+o,u[2]=2,u[3]=i,c.copy(u,4,b),u[i+4]=2,u[i+5]=o,n.copy(u,i+6,s),u},signatureImport:function(a){r.isBuffer(a,d.ECDSA_SIGNATURE_TYPE_INVALID),r.isLengthGTZero(a,d.ECDSA_SIGNATURE_LENGTH_INVALID);do{var t={sig:a,idx:0};if(t.sig.length128||t.idx+t.sig[t.idx+1]+2!==t.sig.length)break;t.idx+=2;var f=c(t);if(null===f)break;var n=c(t);if(null===n)break;return e.signatureImport({r:f,s:n})}while(!1);throw new Error(d.ECDSA_SIGNATURE_PARSE_DER_FAIL)},sign:function(a,t,f){r.isBuffer(a,d.MSG32_TYPE_INVALID),r.isBufferLength(a,32,d.MSG32_LENGTH_INVALID),r.isBuffer(t,d.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(t,32,d.EC_PRIVATE_KEY_LENGTH_INVALID);var c=null,n=null;return void 0!==f&&(r.isObject(f,d.OPTIONS_TYPE_INVALID),void 0!==f.data&&(r.isBuffer(f.data,d.OPTIONS_DATA_TYPE_INVALID),r.isBufferLength(f.data,32,d.OPTIONS_DATA_LENGTH_INVALID),c=f.data),void 0!==f.noncefn&&(r.isFunction(f.noncefn,d.OPTIONS_NONCEFN_TYPE_INVALID),n=f.noncefn)),e.sign(a,t,n,c)},verify:function(a,t,f){return r.isBuffer(a,d.MSG32_TYPE_INVALID),r.isBufferLength(a,32,d.MSG32_LENGTH_INVALID),r.isBuffer(t,d.ECDSA_SIGNATURE_TYPE_INVALID),r.isBufferLength(t,64,d.ECDSA_SIGNATURE_LENGTH_INVALID),r.isBuffer(f,d.EC_PUBLIC_KEY_TYPE_INVALID),r.isBufferLength2(f,33,65,d.EC_PUBLIC_KEY_LENGTH_INVALID),e.verify(a,t,f)},recover:function(a,t,c,n){return r.isBuffer(a,d.MSG32_TYPE_INVALID),r.isBufferLength(a,32,d.MSG32_LENGTH_INVALID),r.isBuffer(t,d.ECDSA_SIGNATURE_TYPE_INVALID),r.isBufferLength(t,64,d.ECDSA_SIGNATURE_LENGTH_INVALID),r.isNumber(c,d.RECOVERY_ID_TYPE_INVALID),r.isNumberInInterval(c,-1,4,d.RECOVERY_ID_VALUE_INVALID),n=f(n,!0),e.recover(a,t,c,n)},ecdh:function(e,a,t){r.isBuffer(e,d.EC_PUBLIC_KEY_TYPE_INVALID),r.isBufferLength2(e,33,65,d.EC_PUBLIC_KEY_LENGTH_INVALID),r.isBuffer(a,d.EC_PRIVATE_KEY_TYPE_INVALID),r.isBufferLength(a,32,d.EC_PRIVATE_KEY_LENGTH_INVALID),void 0!==t&&r.isObject(t,d.OPTIONS_TYPE_INVALID)}}}}).call(this,e("buffer").Buffer)},{"./assert":390,"./messages.json":393,buffer:99}],393:[function(e,a,t){a.exports={COMPRESSED_TYPE_INVALID:"compressed should be a boolean",EC_PRIVATE_KEY_TYPE_INVALID:"private key should be a Buffer",EC_PRIVATE_KEY_LENGTH_INVALID:"private key length is invalid",EC_PRIVATE_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting private key is invalid",EC_PRIVATE_KEY_TWEAK_MUL_FAIL:"tweak out of range",EC_PRIVATE_KEY_EXPORT_DER_FAIL:"couldn't export to DER format",EC_PRIVATE_KEY_IMPORT_DER_FAIL:"couldn't import from DER format",EC_PUBLIC_KEYS_TYPE_INVALID:"public keys should be an Array", -EC_PUBLIC_KEYS_LENGTH_INVALID:"public keys Array should have at least 1 element",EC_PUBLIC_KEY_TYPE_INVALID:"public key should be a Buffer",EC_PUBLIC_KEY_LENGTH_INVALID:"public key length is invalid",EC_PUBLIC_KEY_PARSE_FAIL:"the public key could not be parsed or is invalid",EC_PUBLIC_KEY_CREATE_FAIL:"private was invalid, try again",EC_PUBLIC_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting public key is invalid",EC_PUBLIC_KEY_TWEAK_MUL_FAIL:"tweak out of range",EC_PUBLIC_KEY_COMBINE_FAIL:"the sum of the public keys is not valid",ECDH_FAIL:"scalar was invalid (zero or overflow)",ECDSA_SIGNATURE_TYPE_INVALID:"signature should be a Buffer",ECDSA_SIGNATURE_LENGTH_INVALID:"signature length is invalid",ECDSA_SIGNATURE_PARSE_FAIL:"couldn't parse signature",ECDSA_SIGNATURE_PARSE_DER_FAIL:"couldn't parse DER signature",ECDSA_SIGNATURE_SERIALIZE_DER_FAIL:"couldn't serialize signature to DER format",ECDSA_SIGN_FAIL:"nonce generation function failed or private key is invalid",ECDSA_RECOVER_FAIL:"couldn't recover public key from signature",MSG32_TYPE_INVALID:"message should be a Buffer",MSG32_LENGTH_INVALID:"message length is invalid",OPTIONS_TYPE_INVALID:"options should be an Object",OPTIONS_DATA_TYPE_INVALID:"options.data should be a Buffer",OPTIONS_DATA_LENGTH_INVALID:"options.data length is invalid",OPTIONS_NONCEFN_TYPE_INVALID:"options.noncefn should be a Function",RECOVERY_ID_TYPE_INVALID:"recovery should be a Number",RECOVERY_ID_VALUE_INVALID:"recovery should have value between -1 and 4",TWEAK_TYPE_INVALID:"tweak should be a Buffer",TWEAK_LENGTH_INVALID:"tweak length is invalid"}},{}],394:[function(e,a,t){arguments[4][138][0].apply(t,arguments)},{"../package.json":418,"./elliptic/curve":397,"./elliptic/curves":400,"./elliptic/ec":401,"./elliptic/eddsa":404,"./elliptic/hmac-drbg":407,"./elliptic/utils":409,brorand:410,dup:138}],395:[function(e,a,t){arguments[4][139][0].apply(t,arguments)},{"../../elliptic":394,"bn.js":385,dup:139}],396:[function(e,a,t){arguments[4][140][0].apply(t,arguments)},{"../../elliptic":394,"../curve":397,"bn.js":385,dup:140,inherits:417}],397:[function(e,a,t){arguments[4][59][0].apply(t,arguments)},{"./base":395,"./edwards":396,"./mont":398,"./short":399,dup:59}],398:[function(e,a,t){arguments[4][142][0].apply(t,arguments)},{"../../elliptic":394,"../curve":397,"bn.js":385,dup:142,inherits:417}],399:[function(e,a,t){arguments[4][143][0].apply(t,arguments)},{"../../elliptic":394,"../curve":397,"bn.js":385,dup:143,inherits:417}],400:[function(e,a,t){arguments[4][144][0].apply(t,arguments)},{"../elliptic":394,"./precomputed/secp256k1":408,dup:144,"hash.js":411}],401:[function(e,a,t){arguments[4][145][0].apply(t,arguments)},{"../../elliptic":394,"./key":402,"./signature":403,"bn.js":385,dup:145}],402:[function(e,a,t){arguments[4][146][0].apply(t,arguments)},{"bn.js":385,dup:146}],403:[function(e,a,t){arguments[4][147][0].apply(t,arguments)},{"../../elliptic":394,"bn.js":385,dup:147}],404:[function(e,a,t){arguments[4][148][0].apply(t,arguments)},{"../../elliptic":394,"./key":405,"./signature":406,dup:148,"hash.js":411}],405:[function(e,a,t){arguments[4][149][0].apply(t,arguments)},{"../../elliptic":394,dup:149}],406:[function(e,a,t){arguments[4][150][0].apply(t,arguments)},{"../../elliptic":394,"bn.js":385,dup:150}],407:[function(e,a,t){arguments[4][66][0].apply(t,arguments)},{"../elliptic":394,dup:66,"hash.js":411}],408:[function(e,a,t){arguments[4][67][0].apply(t,arguments)},{dup:67}],409:[function(e,a,t){arguments[4][153][0].apply(t,arguments)},{"bn.js":385,dup:153}],410:[function(e,a,t){arguments[4][69][0].apply(t,arguments)},{dup:69}],411:[function(e,a,t){arguments[4][70][0].apply(t,arguments)},{"./hash/common":412,"./hash/hmac":413,"./hash/ripemd":414,"./hash/sha":415,"./hash/utils":416,dup:70}],412:[function(e,a,t){arguments[4][71][0].apply(t,arguments)},{"../hash":411,dup:71}],413:[function(e,a,t){arguments[4][72][0].apply(t,arguments)},{"../hash":411,dup:72}],414:[function(e,a,t){arguments[4][73][0].apply(t,arguments)},{"../hash":411,dup:73}],415:[function(e,a,t){arguments[4][74][0].apply(t,arguments)},{"../hash":411,dup:74}],416:[function(e,a,t){arguments[4][75][0].apply(t,arguments)},{dup:75,inherits:417}],417:[function(e,a,t){arguments[4][77][0].apply(t,arguments)},{dup:77}],418:[function(e,a,t){a.exports={name:"elliptic",version:"6.2.3",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{coverage:"npm run unit --coverage",coveralls:"npm run coverage && cat ./coverage/lcov.info | coveralls",jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",lint:"npm run jscs && npm run jshint",test:"npm run lint && npm run unit",unit:"istanbul test _mocha --reporter=spec test/*-test.js"},repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},keywords:["EC","Elliptic","curve","Cryptography"],author:{name:"Fedor Indutny",email:"fedor@indutny.com"},license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{coveralls:"^2.11.3",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},dependencies:{"bn.js":"^4.0.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},gitHead:"c32f20b22b420eb6af3c6dda28963deb7facf823",_id:"elliptic@6.2.3",_shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",_from:"elliptic@>=6.2.3 <7.0.0",_npmVersion:"3.3.12",_nodeVersion:"5.4.1",_npmUser:{name:"indutny",email:"fedor@indutny.com"},dist:{shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",tarball:"http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz"},maintainers:[{name:"indutny",email:"fedor@indutny.com"}],directories:{},_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz",readme:"ERROR: No README data found!"}},{}],419:[function(e,a,t){(function(a){function f(e,a){if("00"===e.slice(0,2))throw new Error("invalid RLP: extra zeros");return parseInt(e,a)}function c(e,t){if(56>e)return new a([e+t]);var f=i(e),c=f.length/2,r=i(t+55+c);return new a(r+f,"hex")}function r(e){var t,c,d,n,i,b=[],o=e[0];if(127>=o)return{data:e.slice(0,1),remainder:e.slice(1)};if(183>=o){if(t=o-127,d=128===o?new a([]):e.slice(1,t),2===t&&d[0]<128)throw new Error("invalid rlp encoding: byte must be less 0x80");return{data:d,remainder:e.slice(t)}}if(191>=o){if(c=o-182,t=f(e.slice(1,c).toString("hex"),16),d=e.slice(c,t+c),d.length=o){for(t=o-191,n=e.slice(1,t);n.length;)i=r(n),b.push(i.data),n=i.remainder;return{data:b,remainder:e.slice(t)}}c=o-246,t=f(e.slice(1,c).toString("hex"),16);var s=c+t;if(s>e.length)throw new Error("invalid rlp: total length is larger than the data");if(n=e.slice(c,s),0===n.length)throw new Error("invalid rlp, List has a invalid length");for(;n.length;)i=r(n),b.push(i.data),n=i.remainder;return{data:b,remainder:e.slice(s)}}function d(e){return"0x"===e.slice(0,2)}function n(e){return"string"!=typeof e?e:d(e)?e.slice(2):e}function i(e){var a=e.toString(16);return a.length%2&&(a="0"+a),a}function b(e){return e.length%2&&(e="0"+e),e}function o(e){var t=i(e);return new a(t,"hex")}function s(e){if(!a.isBuffer(e))if("string"==typeof e)e=d(e)?new a(b(n(e)),"hex"):new a(e);else if("number"==typeof e)e=e?o(e):new a([]);else if(null===e||void 0===e)e=new a([]);else{if(!e.toArray)throw new Error("invalid type");e=new a(e.toArray())}return e}const u=e("assert");t.encode=function(e){if(e instanceof Array){for(var f=[],r=0;r=t)return e.length;if(183>=t)return t-127;if(191>=t)return t-182;if(247>=t)return t-191;var c=t-246,r=f(e.slice(1,c).toString("hex"),16);return c+r}}).call(this,e("buffer").Buffer)},{assert:97,buffer:99}],420:[function(e,a,t){function f(e,a,t,f,c,r,d,n){"use strict";function i(e){function a(e){for(var a=0,u=e.length;u>=64;){var h,l,p,g,m,v=f,y=c,w=r,_=d,S=n,A=i,I=b,E=o;for(l=0;16>l;l++)p=a+4*l,s[l]=(255&e[p])<<24|(255&e[p+1])<<16|(255&e[p+2])<<8|255&e[p+3];for(l=16;64>l;l++)h=s[l-2],g=(h>>>17|h<<15)^(h>>>19|h<<13)^h>>>10,h=s[l-15],m=(h>>>7|h<<25)^(h>>>18|h<<14)^h>>>3,s[l]=(g+s[l-7]|0)+(m+s[l-16]|0)|0;for(l=0;64>l;l++)g=(((S>>>6|S<<26)^(S>>>11|S<<21)^(S>>>25|S<<7))+(S&A^~S&I)|0)+(E+(t[l]+s[l]|0)|0)|0,m=((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+(v&y^v&w^y&w)|0,E=I,I=A,A=S,S=_+g|0,_=w,w=y,y=v,v=g+m|0;f=f+v|0,c=c+y|0,r=r+w|0,d=d+_|0,n=n+S|0,i=i+A|0,b=b+I|0,o=o+E|0,a+=64,u-=64}}var t=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],f=1779033703,c=3144134277,r=1013904242,d=2773480762,n=1359893119,i=2600822924,b=528734635,o=1541459225,s=new Array(64);a(e);var u,h=e.length%64,l=e.length/536870912|0,p=e.length<<3,g=56>h?56:120,m=e.slice(e.length-h,e.length);for(m.push(128),u=h+1;g>u;u++)m.push(0);return m.push(l>>>24&255),m.push(l>>>16&255),m.push(l>>>8&255),m.push(l>>>0&255),m.push(p>>>24&255),m.push(p>>>16&255),m.push(p>>>8&255),m.push(p>>>0&255),a(m),[f>>>24&255,f>>>16&255,f>>>8&255,f>>>0&255,c>>>24&255,c>>>16&255,c>>>8&255,c>>>0&255,r>>>24&255,r>>>16&255,r>>>8&255,r>>>0&255,d>>>24&255,d>>>16&255,d>>>8&255,d>>>0&255,n>>>24&255,n>>>16&255,n>>>8&255,n>>>0&255,i>>>24&255,i>>>16&255,i>>>8&255,i>>>0&255,b>>>24&255,b>>>16&255,b>>>8&255,b>>>0&255,o>>>24&255,o>>>16&255,o>>>8&255,o>>>0&255]}function b(e,a,t){function f(){for(var e=r-1;e>=r-4;e--){if(d[e]++,d[e]<=255)return;d[e]=0}}e=e.length<=64?e:i(e);var c,r=64+a.length+4,d=new Array(r),n=new Array(64),b=[];for(c=0;64>c;c++)d[c]=54;for(c=0;cc;c++)d[c]=0;for(c=0;64>c;c++)n[c]=92;for(c=0;c=32;)f(),b=b.concat(i(n.concat(i(d)))),t-=32;return t>0&&(f(),b=b.concat(i(n.concat(i(d))).slice(0,t))),b}function o(e,a,t,f){var c,r,d=e[0]^a[t++],n=e[1]^a[t++],i=e[2]^a[t++],b=e[3]^a[t++],o=e[4]^a[t++],s=e[5]^a[t++],u=e[6]^a[t++],h=e[7]^a[t++],l=e[8]^a[t++],p=e[9]^a[t++],g=e[10]^a[t++],m=e[11]^a[t++],v=e[12]^a[t++],y=e[13]^a[t++],w=e[14]^a[t++],_=e[15]^a[t++],S=d,A=n,I=i,E=b,k=o,x=s,P=u,B=h,M=l,O=p,R=g,T=m,C=v,N=y,j=w,L=_;for(r=0;8>r;r+=2)c=S+C,k^=c<<7|c>>>25,c=k+S,M^=c<<9|c>>>23,c=M+k,C^=c<<13|c>>>19,c=C+M,S^=c<<18|c>>>14,c=x+A,O^=c<<7|c>>>25,c=O+x,N^=c<<9|c>>>23,c=N+O,A^=c<<13|c>>>19,c=A+N,x^=c<<18|c>>>14,c=R+P,j^=c<<7|c>>>25,c=j+R,I^=c<<9|c>>>23,c=I+j,P^=c<<13|c>>>19,c=P+I,R^=c<<18|c>>>14,c=L+T,E^=c<<7|c>>>25,c=E+L,B^=c<<9|c>>>23,c=B+E,T^=c<<13|c>>>19,c=T+B,L^=c<<18|c>>>14,c=S+E,A^=c<<7|c>>>25,c=A+S,I^=c<<9|c>>>23,c=I+A,E^=c<<13|c>>>19,c=E+I,S^=c<<18|c>>>14,c=x+k,P^=c<<7|c>>>25,c=P+x,B^=c<<9|c>>>23,c=B+P,k^=c<<13|c>>>19,c=k+B,x^=c<<18|c>>>14,c=R+O,T^=c<<7|c>>>25,c=T+R,M^=c<<9|c>>>23,c=M+T,O^=c<<13|c>>>19,c=O+M,R^=c<<18|c>>>14,c=L+j,C^=c<<7|c>>>25,c=C+L,N^=c<<9|c>>>23,c=N+C,j^=c<<13|c>>>19,c=j+N,L^=c<<18|c>>>14;a[f++]=e[0]=S+d|0,a[f++]=e[1]=A+n|0,a[f++]=e[2]=I+i|0,a[f++]=e[3]=E+b|0,a[f++]=e[4]=k+o|0,a[f++]=e[5]=x+s|0,a[f++]=e[6]=P+u|0,a[f++]=e[7]=B+h|0,a[f++]=e[8]=M+l|0,a[f++]=e[9]=O+p|0,a[f++]=e[10]=R+g|0,a[f++]=e[11]=T+m|0,a[f++]=e[12]=C+v|0,a[f++]=e[13]=N+y|0,a[f++]=e[14]=j+w|0,a[f++]=e[15]=L+_|0}function s(e,a,t,f,c){for(;c--;)e[a++]=t[f++]}function u(e,a,t,f,c){for(;c--;)e[a++]^=t[f++]}function h(e,a,t,f,c){s(e,0,a,t+16*(2*c-1),16);for(var r=0;2*c>r;r+=2)o(e,a,t+16*r,f+8*r),o(e,a,t+16*r+16,f+8*r+16*c)}function l(e,a,t){return e[a+16*(2*t-1)]}function p(e){for(var a=[],t=0;tf?a.push(f):f>127&&2048>f?(a.push(f>>6|192),a.push(63&f|128)):(a.push(f>>12|224),a.push(f>>6&63|128),a.push(63&f|128))}return a}function g(e){for(var a="0123456789abcdef".split(""),t=e.length,f=[],c=0;t>c;c++)f.push(a[e[c]>>>4&15]),f.push(a[e[c]>>>0&15]);return f.join("")}function m(e){for(var a,t,f,c,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),d=e.length,n=[],i=0;d>i;)a=d>i?e[i++]:0,t=d>i?e[i++]:0,f=d>i?e[i++]:0,c=(a<<16)+(t<<8)+f,n.push(r[c>>>18&63]),n.push(r[c>>>12&63]),n.push(r[c>>>6&63]),n.push(r[c>>>0&63]);return d%3>0&&(n[n.length-1]="=",d%3===1&&(n[n.length-2]="=")),n.join("")}function v(){for(var e=0;32*f>e;e++){var a=4*e;E[O+e]=(255&x[a+3])<<24|(255&x[a+2])<<16|(255&x[a+1])<<8|(255&x[a+0])<<0}}function y(e,a){for(var t=e;a>t;t+=2)s(k,t*(32*f),E,O,32*f),h(P,E,O,R,f),s(k,(t+1)*(32*f),E,R,32*f),h(P,E,R,O,f)}function w(e,a){for(var t=e;a>t;t+=2){var c=l(E,O,f)&M-1;u(E,O,k,c*(32*f),32*f),h(P,E,O,R,f),c=l(E,R,f)&M-1,u(E,R,k,c*(32*f),32*f),h(P,E,R,O,f)}}function _(){for(var e=0;32*f>e;e++){var a=E[O+e];x[4*e+0]=a>>>0&255,x[4*e+1]=a>>>8&255,x[4*e+2]=a>>>16&255,x[4*e+3]=a>>>24&255}}function S(e,a,t,f,c){!function r(){T(function(){f(e,a>e+t?e+t:a),e+=t,a>e?r():c()})}()}function A(a){var t=b(e,x,c);return"base64"===a?m(t):"hex"===a?g(t):t}var I=1;if(1>t||t>31)throw new Error("scrypt: logN not be between 1 and 31");var E,k,x,P,B=1<<31>>>0,M=1<>>0;if(f*I>=1<<30||f>B/128/I||f>B/256||M>B/128/f)throw new Error("scrypt: parameters are too large");"string"==typeof e&&(e=p(e)),"string"==typeof a&&(a=p(a)),"undefined"!=typeof Int32Array?(E=new Int32Array(64*f),k=new Int32Array(32*M*f),P=new Int32Array(16)):(E=[],k=[],P=new Array(16)),x=b(e,a,128*I*f);var O=0,R=32*f,T="undefined"!=typeof setImmediate?setImmediate:setTimeout;"function"==typeof r&&(n=d,d=r,r=1e3),0>=r?(v(),y(0,M),w(0,M),_(),d(A(n))):(v(),S(0,M,2*r,y,function(){S(0,M,2*r,w,function(){_(),d(A(n))})}))}"undefined"!=typeof a&&(a.exports=f)},{}],421:[function(e,a,t){(function(t){!function(a){"use strict";function f(e,a,t,f){e[a]=t>>24&255,e[a+1]=t>>16&255,e[a+2]=t>>8&255,e[a+3]=255&t,e[a+4]=f>>24&255,e[a+5]=f>>16&255,e[a+6]=f>>8&255,e[a+7]=255&f}function c(e,a,t,f,c){var r,d=0;for(r=0;c>r;r++)d|=e[a+r]^t[f+r];return(1&d-1>>>8)-1}function r(e,a,t,f){return c(e,a,t,f,16)}function d(e,a,t,f){return c(e,a,t,f,32)}function n(e,a,t,f){for(var c,r=255&f[0]|(255&f[1])<<8|(255&f[2])<<16|(255&f[3])<<24,d=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,n=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,i=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,b=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,o=255&f[4]|(255&f[5])<<8|(255&f[6])<<16|(255&f[7])<<24,s=255&a[0]|(255&a[1])<<8|(255&a[2])<<16|(255&a[3])<<24,u=255&a[4]|(255&a[5])<<8|(255&a[6])<<16|(255&a[7])<<24,h=255&a[8]|(255&a[9])<<8|(255&a[10])<<16|(255&a[11])<<24,l=255&a[12]|(255&a[13])<<8|(255&a[14])<<16|(255&a[15])<<24,p=255&f[8]|(255&f[9])<<8|(255&f[10])<<16|(255&f[11])<<24,g=255&t[16]|(255&t[17])<<8|(255&t[18])<<16|(255&t[19])<<24,m=255&t[20]|(255&t[21])<<8|(255&t[22])<<16|(255&t[23])<<24,v=255&t[24]|(255&t[25])<<8|(255&t[26])<<16|(255&t[27])<<24,y=255&t[28]|(255&t[29])<<8|(255&t[30])<<16|(255&t[31])<<24,w=255&f[12]|(255&f[13])<<8|(255&f[14])<<16|(255&f[15])<<24,_=r,S=d,A=n,I=i,E=b,k=o,x=s,P=u,B=h,M=l,O=p,R=g,T=m,C=v,N=y,j=w,L=0;20>L;L+=2)c=_+T|0,E^=c<<7|c>>>25,c=E+_|0,B^=c<<9|c>>>23,c=B+E|0,T^=c<<13|c>>>19,c=T+B|0,_^=c<<18|c>>>14,c=k+S|0,M^=c<<7|c>>>25,c=M+k|0,C^=c<<9|c>>>23,c=C+M|0,S^=c<<13|c>>>19,c=S+C|0,k^=c<<18|c>>>14,c=O+x|0,N^=c<<7|c>>>25,c=N+O|0,A^=c<<9|c>>>23,c=A+N|0,x^=c<<13|c>>>19,c=x+A|0,O^=c<<18|c>>>14,c=j+R|0,I^=c<<7|c>>>25,c=I+j|0,P^=c<<9|c>>>23,c=P+I|0,R^=c<<13|c>>>19,c=R+P|0,j^=c<<18|c>>>14,c=_+I|0,S^=c<<7|c>>>25,c=S+_|0,A^=c<<9|c>>>23,c=A+S|0,I^=c<<13|c>>>19,c=I+A|0,_^=c<<18|c>>>14,c=k+E|0,x^=c<<7|c>>>25,c=x+k|0,P^=c<<9|c>>>23,c=P+x|0,E^=c<<13|c>>>19,c=E+P|0,k^=c<<18|c>>>14,c=O+M|0,R^=c<<7|c>>>25,c=R+O|0,B^=c<<9|c>>>23,c=B+R|0,M^=c<<13|c>>>19,c=M+B|0,O^=c<<18|c>>>14,c=j+N|0,T^=c<<7|c>>>25,c=T+j|0,C^=c<<9|c>>>23,c=C+T|0,N^=c<<13|c>>>19,c=N+C|0,j^=c<<18|c>>>14;_=_+r|0,S=S+d|0,A=A+n|0,I=I+i|0,E=E+b|0,k=k+o|0,x=x+s|0,P=P+u|0,B=B+h|0,M=M+l|0,O=O+p|0,R=R+g|0,T=T+m|0,C=C+v|0,N=N+y|0,j=j+w|0,e[0]=_>>>0&255,e[1]=_>>>8&255,e[2]=_>>>16&255,e[3]=_>>>24&255,e[4]=S>>>0&255,e[5]=S>>>8&255,e[6]=S>>>16&255,e[7]=S>>>24&255,e[8]=A>>>0&255,e[9]=A>>>8&255,e[10]=A>>>16&255,e[11]=A>>>24&255,e[12]=I>>>0&255,e[13]=I>>>8&255,e[14]=I>>>16&255,e[15]=I>>>24&255,e[16]=E>>>0&255,e[17]=E>>>8&255,e[18]=E>>>16&255,e[19]=E>>>24&255,e[20]=k>>>0&255,e[21]=k>>>8&255,e[22]=k>>>16&255,e[23]=k>>>24&255,e[24]=x>>>0&255,e[25]=x>>>8&255,e[26]=x>>>16&255,e[27]=x>>>24&255,e[28]=P>>>0&255,e[29]=P>>>8&255,e[30]=P>>>16&255,e[31]=P>>>24&255,e[32]=B>>>0&255,e[33]=B>>>8&255,e[34]=B>>>16&255,e[35]=B>>>24&255,e[36]=M>>>0&255,e[37]=M>>>8&255,e[38]=M>>>16&255,e[39]=M>>>24&255,e[40]=O>>>0&255,e[41]=O>>>8&255,e[42]=O>>>16&255,e[43]=O>>>24&255,e[44]=R>>>0&255,e[45]=R>>>8&255,e[46]=R>>>16&255,e[47]=R>>>24&255,e[48]=T>>>0&255,e[49]=T>>>8&255,e[50]=T>>>16&255,e[51]=T>>>24&255,e[52]=C>>>0&255,e[53]=C>>>8&255,e[54]=C>>>16&255,e[55]=C>>>24&255,e[56]=N>>>0&255,e[57]=N>>>8&255,e[58]=N>>>16&255,e[59]=N>>>24&255,e[60]=j>>>0&255,e[61]=j>>>8&255,e[62]=j>>>16&255,e[63]=j>>>24&255}function i(e,a,t,f){for(var c,r=255&f[0]|(255&f[1])<<8|(255&f[2])<<16|(255&f[3])<<24,d=255&t[0]|(255&t[1])<<8|(255&t[2])<<16|(255&t[3])<<24,n=255&t[4]|(255&t[5])<<8|(255&t[6])<<16|(255&t[7])<<24,i=255&t[8]|(255&t[9])<<8|(255&t[10])<<16|(255&t[11])<<24,b=255&t[12]|(255&t[13])<<8|(255&t[14])<<16|(255&t[15])<<24,o=255&f[4]|(255&f[5])<<8|(255&f[6])<<16|(255&f[7])<<24,s=255&a[0]|(255&a[1])<<8|(255&a[2])<<16|(255&a[3])<<24,u=255&a[4]|(255&a[5])<<8|(255&a[6])<<16|(255&a[7])<<24,h=255&a[8]|(255&a[9])<<8|(255&a[10])<<16|(255&a[11])<<24,l=255&a[12]|(255&a[13])<<8|(255&a[14])<<16|(255&a[15])<<24,p=255&f[8]|(255&f[9])<<8|(255&f[10])<<16|(255&f[11])<<24,g=255&t[16]|(255&t[17])<<8|(255&t[18])<<16|(255&t[19])<<24,m=255&t[20]|(255&t[21])<<8|(255&t[22])<<16|(255&t[23])<<24,v=255&t[24]|(255&t[25])<<8|(255&t[26])<<16|(255&t[27])<<24,y=255&t[28]|(255&t[29])<<8|(255&t[30])<<16|(255&t[31])<<24,w=255&f[12]|(255&f[13])<<8|(255&f[14])<<16|(255&f[15])<<24,_=r,S=d,A=n,I=i,E=b,k=o,x=s,P=u,B=h,M=l,O=p,R=g,T=m,C=v,N=y,j=w,L=0;20>L;L+=2)c=_+T|0,E^=c<<7|c>>>25,c=E+_|0,B^=c<<9|c>>>23,c=B+E|0,T^=c<<13|c>>>19,c=T+B|0,_^=c<<18|c>>>14,c=k+S|0,M^=c<<7|c>>>25,c=M+k|0,C^=c<<9|c>>>23,c=C+M|0,S^=c<<13|c>>>19,c=S+C|0,k^=c<<18|c>>>14,c=O+x|0,N^=c<<7|c>>>25,c=N+O|0,A^=c<<9|c>>>23,c=A+N|0,x^=c<<13|c>>>19,c=x+A|0,O^=c<<18|c>>>14,c=j+R|0,I^=c<<7|c>>>25,c=I+j|0,P^=c<<9|c>>>23,c=P+I|0,R^=c<<13|c>>>19,c=R+P|0,j^=c<<18|c>>>14,c=_+I|0,S^=c<<7|c>>>25,c=S+_|0,A^=c<<9|c>>>23,c=A+S|0,I^=c<<13|c>>>19,c=I+A|0,_^=c<<18|c>>>14,c=k+E|0,x^=c<<7|c>>>25,c=x+k|0,P^=c<<9|c>>>23,c=P+x|0,E^=c<<13|c>>>19,c=E+P|0,k^=c<<18|c>>>14,c=O+M|0,R^=c<<7|c>>>25,c=R+O|0,B^=c<<9|c>>>23,c=B+R|0,M^=c<<13|c>>>19,c=M+B|0,O^=c<<18|c>>>14,c=j+N|0,T^=c<<7|c>>>25,c=T+j|0,C^=c<<9|c>>>23,c=C+T|0,N^=c<<13|c>>>19,c=N+C|0,j^=c<<18|c>>>14;e[0]=_>>>0&255,e[1]=_>>>8&255,e[2]=_>>>16&255,e[3]=_>>>24&255,e[4]=k>>>0&255,e[5]=k>>>8&255,e[6]=k>>>16&255,e[7]=k>>>24&255,e[8]=O>>>0&255,e[9]=O>>>8&255,e[10]=O>>>16&255,e[11]=O>>>24&255,e[12]=j>>>0&255,e[13]=j>>>8&255,e[14]=j>>>16&255,e[15]=j>>>24&255,e[16]=x>>>0&255,e[17]=x>>>8&255,e[18]=x>>>16&255,e[19]=x>>>24&255,e[20]=P>>>0&255,e[21]=P>>>8&255,e[22]=P>>>16&255,e[23]=P>>>24&255,e[24]=B>>>0&255,e[25]=B>>>8&255,e[26]=B>>>16&255,e[27]=B>>>24&255,e[28]=M>>>0&255,e[29]=M>>>8&255,e[30]=M>>>16&255,e[31]=M>>>24&255}function b(e,a,t,f){n(e,a,t,f)}function o(e,a,t,f){i(e,a,t,f)}function s(e,a,t,f,c,r,d){var n,i,o=new Uint8Array(16),s=new Uint8Array(64);for(i=0;16>i;i++)o[i]=0;for(i=0;8>i;i++)o[i]=r[i];for(;c>=64;){for(b(s,o,d,he),i=0;64>i;i++)e[a+i]=t[f+i]^s[i];for(n=1,i=8;16>i;i++)n=n+(255&o[i])|0,o[i]=255&n,n>>>=8;c-=64,a+=64,f+=64}if(c>0)for(b(s,o,d,he),i=0;c>i;i++)e[a+i]=t[f+i]^s[i];return 0}function u(e,a,t,f,c){var r,d,n=new Uint8Array(16),i=new Uint8Array(64);for(d=0;16>d;d++)n[d]=0;for(d=0;8>d;d++)n[d]=f[d];for(;t>=64;){for(b(i,n,c,he),d=0;64>d;d++)e[a+d]=i[d];for(r=1,d=8;16>d;d++)r=r+(255&n[d])|0,n[d]=255&r,r>>>=8;t-=64,a+=64}if(t>0)for(b(i,n,c,he),d=0;t>d;d++)e[a+d]=i[d];return 0}function h(e,a,t,f,c){var r=new Uint8Array(32);o(r,f,c,he);for(var d=new Uint8Array(8),n=0;8>n;n++)d[n]=f[n+16];return u(e,a,t,d,r)}function l(e,a,t,f,c,r,d){var n=new Uint8Array(32);o(n,r,d,he);for(var i=new Uint8Array(8),b=0;8>b;b++)i[b]=r[b+16];return s(e,a,t,f,c,i,n)}function p(e,a,t,f,c,r){var d=new le(r);return d.update(t,f,c),d.finish(e,a),0}function g(e,a,t,f,c,d){var n=new Uint8Array(16);return p(n,0,t,f,c,d),r(e,a,n,0)}function m(e,a,t,f,c){var r;if(32>t)return-1;for(l(e,0,a,0,t,f,c),p(e,16,e,32,t-32,e),r=0;16>r;r++)e[r]=0;return 0}function v(e,a,t,f,c){var r,d=new Uint8Array(32);if(32>t)return-1;if(h(d,0,32,f,c),0!==g(a,16,a,32,t-32,d))return-1;for(l(e,0,a,0,t,f,c),r=0;32>r;r++)e[r]=0;return 0}function y(e,a){var t;for(t=0;16>t;t++)e[t]=0|a[t]}function w(e){var a,t,f=1;for(a=0;16>a;a++)t=e[a]+f+65535,f=Math.floor(t/65536),e[a]=t-65536*f;e[0]+=f-1+37*(f-1)}function _(e,a,t){for(var f,c=~(t-1),r=0;16>r;r++)f=c&(e[r]^a[r]),e[r]^=f,a[r]^=f}function S(e,a){var t,f,c,r=ae(),d=ae();for(t=0;16>t;t++)d[t]=a[t];for(w(d),w(d),w(d),f=0;2>f;f++){for(r[0]=d[0]-65517,t=1;15>t;t++)r[t]=d[t]-65535-(r[t-1]>>16&1),r[t-1]&=65535;r[15]=d[15]-32767-(r[14]>>16&1),c=r[15]>>16&1,r[14]&=65535,_(d,r,1-c)}for(t=0;16>t;t++)e[2*t]=255&d[t],e[2*t+1]=d[t]>>8}function A(e,a){var t=new Uint8Array(32),f=new Uint8Array(32);return S(t,e),S(f,a),d(t,0,f,0)}function I(e){var a=new Uint8Array(32);return S(a,e),1&a[0]}function E(e,a){var t;for(t=0;16>t;t++)e[t]=a[2*t]+(a[2*t+1]<<8);e[15]&=32767}function k(e,a,t){for(var f=0;16>f;f++)e[f]=a[f]+t[f]}function x(e,a,t){for(var f=0;16>f;f++)e[f]=a[f]-t[f]}function P(e,a,t){var f,c,r=0,d=0,n=0,i=0,b=0,o=0,s=0,u=0,h=0,l=0,p=0,g=0,m=0,v=0,y=0,w=0,_=0,S=0,A=0,I=0,E=0,k=0,x=0,P=0,B=0,M=0,O=0,R=0,T=0,C=0,N=0,j=t[0],L=t[1],D=t[2],U=t[3],z=t[4],K=t[5],H=t[6],F=t[7],q=t[8],V=t[9],Y=t[10],G=t[11],W=t[12],J=t[13],X=t[14],Z=t[15];f=a[0],r+=f*j,d+=f*L,n+=f*D,i+=f*U,b+=f*z,o+=f*K,s+=f*H,u+=f*F,h+=f*q,l+=f*V,p+=f*Y,g+=f*G,m+=f*W,v+=f*J,y+=f*X,w+=f*Z,f=a[1],d+=f*j,n+=f*L,i+=f*D,b+=f*U,o+=f*z,s+=f*K,u+=f*H,h+=f*F,l+=f*q,p+=f*V,g+=f*Y,m+=f*G,v+=f*W,y+=f*J,w+=f*X,_+=f*Z,f=a[2],n+=f*j,i+=f*L,b+=f*D,o+=f*U,s+=f*z,u+=f*K,h+=f*H,l+=f*F,p+=f*q,g+=f*V,m+=f*Y,v+=f*G,y+=f*W,w+=f*J,_+=f*X,S+=f*Z,f=a[3],i+=f*j,b+=f*L,o+=f*D,s+=f*U,u+=f*z,h+=f*K,l+=f*H,p+=f*F,g+=f*q,m+=f*V,v+=f*Y,y+=f*G,w+=f*W,_+=f*J,S+=f*X,A+=f*Z,f=a[4],b+=f*j,o+=f*L,s+=f*D,u+=f*U,h+=f*z,l+=f*K,p+=f*H,g+=f*F,m+=f*q,v+=f*V,y+=f*Y,w+=f*G,_+=f*W,S+=f*J,A+=f*X,I+=f*Z,f=a[5],o+=f*j,s+=f*L,u+=f*D,h+=f*U,l+=f*z,p+=f*K,g+=f*H,m+=f*F,v+=f*q,y+=f*V,w+=f*Y,_+=f*G,S+=f*W,A+=f*J,I+=f*X,E+=f*Z,f=a[6],s+=f*j,u+=f*L,h+=f*D,l+=f*U,p+=f*z,g+=f*K,m+=f*H,v+=f*F,y+=f*q,w+=f*V,_+=f*Y,S+=f*G,A+=f*W,I+=f*J,E+=f*X,k+=f*Z,f=a[7],u+=f*j,h+=f*L,l+=f*D,p+=f*U,g+=f*z,m+=f*K,v+=f*H,y+=f*F,w+=f*q,_+=f*V,S+=f*Y,A+=f*G,I+=f*W,E+=f*J,k+=f*X,x+=f*Z,f=a[8],h+=f*j,l+=f*L,p+=f*D,g+=f*U,m+=f*z,v+=f*K,y+=f*H,w+=f*F,_+=f*q,S+=f*V,A+=f*Y,I+=f*G,E+=f*W,k+=f*J,x+=f*X,P+=f*Z,f=a[9],l+=f*j,p+=f*L,g+=f*D,m+=f*U,v+=f*z,y+=f*K,w+=f*H,_+=f*F,S+=f*q,A+=f*V,I+=f*Y,E+=f*G,k+=f*W,x+=f*J,P+=f*X,B+=f*Z,f=a[10],p+=f*j,g+=f*L,m+=f*D,v+=f*U,y+=f*z,w+=f*K,_+=f*H,S+=f*F,A+=f*q,I+=f*V,E+=f*Y,k+=f*G,x+=f*W,P+=f*J,B+=f*X,M+=f*Z,f=a[11],g+=f*j,m+=f*L,v+=f*D,y+=f*U,w+=f*z,_+=f*K,S+=f*H,A+=f*F,I+=f*q,E+=f*V,k+=f*Y,x+=f*G,P+=f*W,B+=f*J,M+=f*X,O+=f*Z,f=a[12],m+=f*j,v+=f*L,y+=f*D,w+=f*U,_+=f*z,S+=f*K,A+=f*H,I+=f*F,E+=f*q,k+=f*V,x+=f*Y,P+=f*G,B+=f*W,M+=f*J,O+=f*X,R+=f*Z,f=a[13],v+=f*j,y+=f*L,w+=f*D,_+=f*U,S+=f*z,A+=f*K,I+=f*H,E+=f*F,k+=f*q,x+=f*V,P+=f*Y,B+=f*G,M+=f*W,O+=f*J,R+=f*X,T+=f*Z,f=a[14],y+=f*j,w+=f*L,_+=f*D,S+=f*U,A+=f*z,I+=f*K,E+=f*H,k+=f*F,x+=f*q,P+=f*V,B+=f*Y,M+=f*G,O+=f*W,R+=f*J,T+=f*X,C+=f*Z,f=a[15],w+=f*j,_+=f*L,S+=f*D,A+=f*U,I+=f*z,E+=f*K,k+=f*H,x+=f*F,P+=f*q,B+=f*V,M+=f*Y,O+=f*G,R+=f*W,T+=f*J,C+=f*X,N+=f*Z,r+=38*_,d+=38*S,n+=38*A,i+=38*I,b+=38*E,o+=38*k,s+=38*x,u+=38*P,h+=38*B,l+=38*M,p+=38*O,g+=38*R,m+=38*T,v+=38*C,y+=38*N,c=1,f=r+c+65535,c=Math.floor(f/65536),r=f-65536*c,f=d+c+65535,c=Math.floor(f/65536),d=f-65536*c,f=n+c+65535,c=Math.floor(f/65536),n=f-65536*c,f=i+c+65535,c=Math.floor(f/65536),i=f-65536*c,f=b+c+65535,c=Math.floor(f/65536),b=f-65536*c,f=o+c+65535,c=Math.floor(f/65536),o=f-65536*c,f=s+c+65535,c=Math.floor(f/65536),s=f-65536*c,f=u+c+65535,c=Math.floor(f/65536),u=f-65536*c,f=h+c+65535,c=Math.floor(f/65536),h=f-65536*c,f=l+c+65535,c=Math.floor(f/65536),l=f-65536*c,f=p+c+65535,c=Math.floor(f/65536),p=f-65536*c,f=g+c+65535,c=Math.floor(f/65536),g=f-65536*c,f=m+c+65535,c=Math.floor(f/65536),m=f-65536*c,f=v+c+65535,c=Math.floor(f/65536),v=f-65536*c,f=y+c+65535,c=Math.floor(f/65536),y=f-65536*c,f=w+c+65535,c=Math.floor(f/65536),w=f-65536*c,r+=c-1+37*(c-1),c=1,f=r+c+65535,c=Math.floor(f/65536),r=f-65536*c,f=d+c+65535,c=Math.floor(f/65536),d=f-65536*c,f=n+c+65535,c=Math.floor(f/65536),n=f-65536*c,f=i+c+65535,c=Math.floor(f/65536),i=f-65536*c,f=b+c+65535,c=Math.floor(f/65536),b=f-65536*c,f=o+c+65535,c=Math.floor(f/65536),o=f-65536*c,f=s+c+65535,c=Math.floor(f/65536),s=f-65536*c,f=u+c+65535,c=Math.floor(f/65536),u=f-65536*c,f=h+c+65535,c=Math.floor(f/65536),h=f-65536*c,f=l+c+65535,c=Math.floor(f/65536),l=f-65536*c,f=p+c+65535,c=Math.floor(f/65536),p=f-65536*c,f=g+c+65535,c=Math.floor(f/65536),g=f-65536*c,f=m+c+65535,c=Math.floor(f/65536),m=f-65536*c,f=v+c+65535,c=Math.floor(f/65536),v=f-65536*c,f=y+c+65535,c=Math.floor(f/65536),y=f-65536*c,f=w+c+65535,c=Math.floor(f/65536),w=f-65536*c,r+=c-1+37*(c-1),e[0]=r,e[1]=d,e[2]=n,e[3]=i,e[4]=b,e[5]=o,e[6]=s,e[7]=u,e[8]=h,e[9]=l,e[10]=p,e[11]=g,e[12]=m,e[13]=v,e[14]=y,e[15]=w}function B(e,a){P(e,a,a)}function M(e,a){var t,f=ae();for(t=0;16>t;t++)f[t]=a[t];for(t=253;t>=0;t--)B(f,f),2!==t&&4!==t&&P(f,f,a);for(t=0;16>t;t++)e[t]=f[t]}function O(e,a){var t,f=ae();for(t=0;16>t;t++)f[t]=a[t];for(t=250;t>=0;t--)B(f,f),1!==t&&P(f,f,a);for(t=0;16>t;t++)e[t]=f[t]}function R(e,a,t){var f,c,r=new Uint8Array(32),d=new Float64Array(80),n=ae(),i=ae(),b=ae(),o=ae(),s=ae(),u=ae();for(c=0;31>c;c++)r[c]=a[c];for(r[31]=127&a[31]|64,r[0]&=248,E(d,t),c=0;16>c;c++)i[c]=d[c],o[c]=n[c]=b[c]=0;for(n[0]=o[0]=1,c=254;c>=0;--c)f=r[c>>>3]>>>(7&c)&1,_(n,i,f),_(b,o,f),k(s,n,b),x(n,n,b),k(b,i,o),x(i,i,o),B(o,s),B(u,n),P(n,b,n),P(b,i,s),k(s,n,b),x(n,n,b),B(i,n),x(b,o,u),P(n,b,ne),k(n,n,o),P(b,b,n),P(n,o,u),P(o,i,d),B(i,s),_(n,i,f),_(b,o,f);for(c=0;16>c;c++)d[c+16]=n[c],d[c+32]=b[c],d[c+48]=i[c],d[c+64]=o[c];var h=d.subarray(32),l=d.subarray(16);return M(h,h),P(l,l,h),S(e,l),0}function T(e,a){return R(e,a,ce)}function C(e,a){return te(a,32),T(e,a)}function N(e,a,t){var f=new Uint8Array(32);return R(f,t,a),o(e,fe,f,he)}function j(e,a,t,f,c,r){var d=new Uint8Array(32);return N(d,c,r),pe(e,a,t,f,d)}function L(e,a,t,f,c,r){var d=new Uint8Array(32);return N(d,c,r),ge(e,a,t,f,d)}function D(e,a,t,f){for(var c,r,d,n,i,b,o,s,u,h,l,p,g,m,v,y,w,_,S,A,I,E,k,x,P,B,M=new Int32Array(16),O=new Int32Array(16),R=e[0],T=e[1],C=e[2],N=e[3],j=e[4],L=e[5],D=e[6],U=e[7],z=a[0],K=a[1],H=a[2],F=a[3],q=a[4],V=a[5],Y=a[6],G=a[7],W=0;f>=128;){for(S=0;16>S;S++)A=8*S+W,M[S]=t[A+0]<<24|t[A+1]<<16|t[A+2]<<8|t[A+3],O[S]=t[A+4]<<24|t[A+5]<<16|t[A+6]<<8|t[A+7];for(S=0;80>S;S++)if(c=R,r=T,d=C,n=N,i=j,b=L,o=D,s=U,u=z,h=K,l=H,p=F,g=q,m=V,v=Y,y=G,I=U,E=G,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=(j>>>14|q<<18)^(j>>>18|q<<14)^(q>>>9|j<<23),E=(q>>>14|j<<18)^(q>>>18|j<<14)^(j>>>9|q<<23),k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,I=j&L^~j&D,E=q&V^~q&Y,k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,I=me[2*S],E=me[2*S+1],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,I=M[S%16],E=O[S%16],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,w=65535&P|B<<16,_=65535&k|x<<16,I=w,E=_,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=(R>>>28|z<<4)^(z>>>2|R<<30)^(z>>>7|R<<25),E=(z>>>28|R<<4)^(R>>>2|z<<30)^(R>>>7|z<<25),k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,I=R&T^R&C^T&C,E=z&K^z&H^K&H,k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,s=65535&P|B<<16,y=65535&k|x<<16,I=n,E=p,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=w,E=_,k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,n=65535&P|B<<16,p=65535&k|x<<16,T=c,C=r,N=d,j=n,L=i,D=b,U=o,R=s,K=u,H=h,F=l,q=p,V=g,Y=m,G=v,z=y,S%16===15)for(A=0;16>A;A++)I=M[A],E=O[A],k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=M[(A+9)%16],E=O[(A+9)%16],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,w=M[(A+1)%16],_=O[(A+1)%16],I=(w>>>1|_<<31)^(w>>>8|_<<24)^w>>>7,E=(_>>>1|w<<31)^(_>>>8|w<<24)^(_>>>7|w<<25),k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,w=M[(A+14)%16],_=O[(A+14)%16],I=(w>>>19|_<<13)^(_>>>29|w<<3)^w>>>6,E=(_>>>19|w<<13)^(w>>>29|_<<3)^(_>>>6|w<<26),k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,M[A]=65535&P|B<<16,O[A]=65535&k|x<<16;I=R,E=z,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=e[0],E=a[0],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,e[0]=R=65535&P|B<<16,a[0]=z=65535&k|x<<16,I=T,E=K,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=e[1],E=a[1],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,e[1]=T=65535&P|B<<16,a[1]=K=65535&k|x<<16,I=C,E=H,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=e[2],E=a[2],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,e[2]=C=65535&P|B<<16,a[2]=H=65535&k|x<<16,I=N,E=F,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=e[3],E=a[3],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,e[3]=N=65535&P|B<<16,a[3]=F=65535&k|x<<16,I=j,E=q,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=e[4],E=a[4],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,e[4]=j=65535&P|B<<16,a[4]=q=65535&k|x<<16,I=L,E=V,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=e[5],E=a[5],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,e[5]=L=65535&P|B<<16,a[5]=V=65535&k|x<<16,I=D,E=Y,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=e[6],E=a[6],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,e[6]=D=65535&P|B<<16,a[6]=Y=65535&k|x<<16,I=U,E=G,k=65535&E,x=E>>>16,P=65535&I,B=I>>>16,I=e[7],E=a[7],k+=65535&E,x+=E>>>16,P+=65535&I,B+=I>>>16,x+=k>>>16,P+=x>>>16,B+=P>>>16,e[7]=U=65535&P|B<<16,a[7]=G=65535&k|x<<16,W+=128,f-=128}return f}function U(e,a,t){var c,r=new Int32Array(8),d=new Int32Array(8),n=new Uint8Array(256),i=t;for(r[0]=1779033703,r[1]=3144134277,r[2]=1013904242,r[3]=2773480762,r[4]=1359893119,r[5]=2600822924,r[6]=528734635,r[7]=1541459225,d[0]=4089235720,d[1]=2227873595,d[2]=4271175723,d[3]=1595750129,d[4]=2917565137,d[5]=725511199,d[6]=4215389547,d[7]=327033209,D(r,d,a,t),t%=128,c=0;t>c;c++)n[c]=a[i-t+c];for(n[t]=128,t=256-128*(112>t?1:0),n[t-9]=0,f(n,t-8,i/536870912|0,i<<3),D(r,d,n,t),c=0;8>c;c++)f(e,8*c,r[c],d[c]);return 0}function z(e,a){var t=ae(),f=ae(),c=ae(),r=ae(),d=ae(),n=ae(),i=ae(),b=ae(),o=ae();x(t,e[1],e[0]),x(o,a[1],a[0]),P(t,t,o),k(f,e[0],e[1]),k(o,a[0],a[1]),P(f,f,o),P(c,e[3],a[3]),P(c,c,be),P(r,e[2],a[2]),k(r,r,r),x(d,f,t),x(n,r,c),k(i,r,c),k(b,f,t),P(e[0],d,n),P(e[1],b,i),P(e[2],i,n),P(e[3],d,b)}function K(e,a,t){var f;for(f=0;4>f;f++)_(e[f],a[f],t)}function H(e,a){var t=ae(),f=ae(),c=ae();M(c,a[2]),P(t,a[0],c),P(f,a[1],c),S(e,f),e[31]^=I(t)<<7}function F(e,a,t){var f,c;for(y(e[0],re),y(e[1],de),y(e[2],de),y(e[3],re),c=255;c>=0;--c)f=t[c/8|0]>>(7&c)&1,K(e,a,f),z(a,e),z(e,e),K(e,a,f)}function q(e,a){var t=[ae(),ae(),ae(),ae()];y(t[0],oe),y(t[1],se),y(t[2],de),P(t[3],oe,se),F(e,t,a)}function V(e,a,t){var f,c=new Uint8Array(64),r=[ae(),ae(),ae(),ae()];for(t||te(a,32), -U(c,a,32),c[0]&=248,c[31]&=127,c[31]|=64,q(r,c),H(e,r),f=0;32>f;f++)a[f+32]=e[f];return 0}function Y(e,a){var t,f,c,r;for(f=63;f>=32;--f){for(t=0,c=f-32,r=f-12;r>c;++c)a[c]+=t-16*a[f]*ve[c-(f-32)],t=a[c]+128>>8,a[c]-=256*t;a[c]+=t,a[f]=0}for(t=0,c=0;32>c;c++)a[c]+=t-(a[31]>>4)*ve[c],t=a[c]>>8,a[c]&=255;for(c=0;32>c;c++)a[c]-=t*ve[c];for(f=0;32>f;f++)a[f+1]+=a[f]>>8,e[f]=255&a[f]}function G(e){var a,t=new Float64Array(64);for(a=0;64>a;a++)t[a]=e[a];for(a=0;64>a;a++)e[a]=0;Y(e,t)}function W(e,a,t,f){var c,r,d=new Uint8Array(64),n=new Uint8Array(64),i=new Uint8Array(64),b=new Float64Array(64),o=[ae(),ae(),ae(),ae()];U(d,f,32),d[0]&=248,d[31]&=127,d[31]|=64;var s=t+64;for(c=0;t>c;c++)e[64+c]=a[c];for(c=0;32>c;c++)e[32+c]=d[32+c];for(U(i,e.subarray(32),t+32),G(i),q(o,i),H(e,o),c=32;64>c;c++)e[c]=f[c];for(U(n,e,t+64),G(n),c=0;64>c;c++)b[c]=0;for(c=0;32>c;c++)b[c]=i[c];for(c=0;32>c;c++)for(r=0;32>r;r++)b[c+r]+=n[c]*d[r];return Y(e.subarray(32),b),s}function J(e,a){var t=ae(),f=ae(),c=ae(),r=ae(),d=ae(),n=ae(),i=ae();return y(e[2],de),E(e[1],a),B(c,e[1]),P(r,c,ie),x(c,c,e[2]),k(r,e[2],r),B(d,r),B(n,d),P(i,n,d),P(t,i,c),P(t,t,r),O(t,t),P(t,t,c),P(t,t,r),P(t,t,r),P(e[0],t,r),B(f,e[0]),P(f,f,r),A(f,c)&&P(e[0],e[0],ue),B(f,e[0]),P(f,f,r),A(f,c)?-1:(I(e[0])===a[31]>>7&&x(e[0],re,e[0]),P(e[3],e[0],e[1]),0)}function X(e,a,t,f){var c,r,n=new Uint8Array(32),i=new Uint8Array(64),b=[ae(),ae(),ae(),ae()],o=[ae(),ae(),ae(),ae()];if(r=-1,64>t)return-1;if(J(o,f))return-1;for(c=0;t>c;c++)e[c]=a[c];for(c=0;32>c;c++)e[c+32]=f[c];if(U(i,e,t),G(i),F(b,o,i),q(o,a.subarray(32)),z(b,o),H(n,b),t-=64,d(a,0,n,0)){for(c=0;t>c;c++)e[c]=0;return-1}for(c=0;t>c;c++)e[c]=a[c+64];return r=t}function Z(e,a){if(e.length!==ye)throw new Error("bad key size");if(a.length!==we)throw new Error("bad nonce size")}function $(e,a){if(e.length!==Ee)throw new Error("bad public key size");if(a.length!==ke)throw new Error("bad secret key size")}function Q(){var e,a;for(a=0;a>>13|t<<3),f=255&e[4]|(255&e[5])<<8,this.r[2]=7939&(t>>>10|f<<6),c=255&e[6]|(255&e[7])<<8,this.r[3]=8191&(f>>>7|c<<9),r=255&e[8]|(255&e[9])<<8,this.r[4]=255&(c>>>4|r<<12),this.r[5]=r>>>1&8190,d=255&e[10]|(255&e[11])<<8,this.r[6]=8191&(r>>>14|d<<2),n=255&e[12]|(255&e[13])<<8,this.r[7]=8065&(d>>>11|n<<5),i=255&e[14]|(255&e[15])<<8,this.r[8]=8191&(n>>>8|i<<8),this.r[9]=i>>>5&127,this.pad[0]=255&e[16]|(255&e[17])<<8,this.pad[1]=255&e[18]|(255&e[19])<<8,this.pad[2]=255&e[20]|(255&e[21])<<8,this.pad[3]=255&e[22]|(255&e[23])<<8,this.pad[4]=255&e[24]|(255&e[25])<<8,this.pad[5]=255&e[26]|(255&e[27])<<8,this.pad[6]=255&e[28]|(255&e[29])<<8,this.pad[7]=255&e[30]|(255&e[31])<<8};le.prototype.blocks=function(e,a,t){for(var f,c,r,d,n,i,b,o,s,u,h,l,p,g,m,v,y,w,_,S=this.fin?0:2048,A=this.h[0],I=this.h[1],E=this.h[2],k=this.h[3],x=this.h[4],P=this.h[5],B=this.h[6],M=this.h[7],O=this.h[8],R=this.h[9],T=this.r[0],C=this.r[1],N=this.r[2],j=this.r[3],L=this.r[4],D=this.r[5],U=this.r[6],z=this.r[7],K=this.r[8],H=this.r[9];t>=16;)f=255&e[a+0]|(255&e[a+1])<<8,A+=8191&f,c=255&e[a+2]|(255&e[a+3])<<8,I+=8191&(f>>>13|c<<3),r=255&e[a+4]|(255&e[a+5])<<8,E+=8191&(c>>>10|r<<6),d=255&e[a+6]|(255&e[a+7])<<8,k+=8191&(r>>>7|d<<9),n=255&e[a+8]|(255&e[a+9])<<8,x+=8191&(d>>>4|n<<12),P+=n>>>1&8191,i=255&e[a+10]|(255&e[a+11])<<8,B+=8191&(n>>>14|i<<2),b=255&e[a+12]|(255&e[a+13])<<8,M+=8191&(i>>>11|b<<5),o=255&e[a+14]|(255&e[a+15])<<8,O+=8191&(b>>>8|o<<8),R+=o>>>5|S,s=0,u=s,u+=A*T,u+=I*(5*H),u+=E*(5*K),u+=k*(5*z),u+=x*(5*U),s=u>>>13,u&=8191,u+=P*(5*D),u+=B*(5*L),u+=M*(5*j),u+=O*(5*N),u+=R*(5*C),s+=u>>>13,u&=8191,h=s,h+=A*C,h+=I*T,h+=E*(5*H),h+=k*(5*K),h+=x*(5*z),s=h>>>13,h&=8191,h+=P*(5*U),h+=B*(5*D),h+=M*(5*L),h+=O*(5*j),h+=R*(5*N),s+=h>>>13,h&=8191,l=s,l+=A*N,l+=I*C,l+=E*T,l+=k*(5*H),l+=x*(5*K),s=l>>>13,l&=8191,l+=P*(5*z),l+=B*(5*U),l+=M*(5*D),l+=O*(5*L),l+=R*(5*j),s+=l>>>13,l&=8191,p=s,p+=A*j,p+=I*N,p+=E*C,p+=k*T,p+=x*(5*H),s=p>>>13,p&=8191,p+=P*(5*K),p+=B*(5*z),p+=M*(5*U),p+=O*(5*D),p+=R*(5*L),s+=p>>>13,p&=8191,g=s,g+=A*L,g+=I*j,g+=E*N,g+=k*C,g+=x*T,s=g>>>13,g&=8191,g+=P*(5*H),g+=B*(5*K),g+=M*(5*z),g+=O*(5*U),g+=R*(5*D),s+=g>>>13,g&=8191,m=s,m+=A*D,m+=I*L,m+=E*j,m+=k*N,m+=x*C,s=m>>>13,m&=8191,m+=P*T,m+=B*(5*H),m+=M*(5*K),m+=O*(5*z),m+=R*(5*U),s+=m>>>13,m&=8191,v=s,v+=A*U,v+=I*D,v+=E*L,v+=k*j,v+=x*N,s=v>>>13,v&=8191,v+=P*C,v+=B*T,v+=M*(5*H),v+=O*(5*K),v+=R*(5*z),s+=v>>>13,v&=8191,y=s,y+=A*z,y+=I*U,y+=E*D,y+=k*L,y+=x*j,s=y>>>13,y&=8191,y+=P*N,y+=B*C,y+=M*T,y+=O*(5*H),y+=R*(5*K),s+=y>>>13,y&=8191,w=s,w+=A*K,w+=I*z,w+=E*U,w+=k*D,w+=x*L,s=w>>>13,w&=8191,w+=P*j,w+=B*N,w+=M*C,w+=O*T,w+=R*(5*H),s+=w>>>13,w&=8191,_=s,_+=A*H,_+=I*K,_+=E*z,_+=k*U,_+=x*D,s=_>>>13,_&=8191,_+=P*L,_+=B*j,_+=M*N,_+=O*C,_+=R*T,s+=_>>>13,_&=8191,s=(s<<2)+s|0,s=s+u|0,u=8191&s,s>>>=13,h+=s,A=u,I=h,E=l,k=p,x=g,P=m,B=v,M=y,O=w,R=_,a+=16,t-=16;this.h[0]=A,this.h[1]=I,this.h[2]=E,this.h[3]=k,this.h[4]=x,this.h[5]=P,this.h[6]=B,this.h[7]=M,this.h[8]=O,this.h[9]=R},le.prototype.finish=function(e,a){var t,f,c,r,d=new Uint16Array(10);if(this.leftover){for(r=this.leftover,this.buffer[r++]=1;16>r;r++)this.buffer[r]=0;this.fin=1,this.blocks(this.buffer,0,16)}for(t=this.h[1]>>>13,this.h[1]&=8191,r=2;10>r;r++)this.h[r]+=t,t=this.h[r]>>>13,this.h[r]&=8191;for(this.h[0]+=5*t,t=this.h[0]>>>13,this.h[0]&=8191,this.h[1]+=t,t=this.h[1]>>>13,this.h[1]&=8191,this.h[2]+=t,d[0]=this.h[0]+5,t=d[0]>>>13,d[0]&=8191,r=1;10>r;r++)d[r]=this.h[r]+t,t=d[r]>>>13,d[r]&=8191;for(d[9]-=8192,f=(d[9]>>>15)-1,r=0;10>r;r++)d[r]&=f;for(f=~f,r=0;10>r;r++)this.h[r]=this.h[r]&f|d[r];for(this.h[0]=65535&(this.h[0]|this.h[1]<<13),this.h[1]=65535&(this.h[1]>>>3|this.h[2]<<10),this.h[2]=65535&(this.h[2]>>>6|this.h[3]<<7),this.h[3]=65535&(this.h[3]>>>9|this.h[4]<<4),this.h[4]=65535&(this.h[4]>>>12|this.h[5]<<1|this.h[6]<<14),this.h[5]=65535&(this.h[6]>>>2|this.h[7]<<11),this.h[6]=65535&(this.h[7]>>>5|this.h[8]<<8),this.h[7]=65535&(this.h[8]>>>8|this.h[9]<<5),c=this.h[0]+this.pad[0],this.h[0]=65535&c,r=1;8>r;r++)c=(this.h[r]+this.pad[r]|0)+(c>>>16)|0,this.h[r]=65535&c;e[a+0]=this.h[0]>>>0&255,e[a+1]=this.h[0]>>>8&255,e[a+2]=this.h[1]>>>0&255,e[a+3]=this.h[1]>>>8&255,e[a+4]=this.h[2]>>>0&255,e[a+5]=this.h[2]>>>8&255,e[a+6]=this.h[3]>>>0&255,e[a+7]=this.h[3]>>>8&255,e[a+8]=this.h[4]>>>0&255,e[a+9]=this.h[4]>>>8&255,e[a+10]=this.h[5]>>>0&255,e[a+11]=this.h[5]>>>8&255,e[a+12]=this.h[6]>>>0&255,e[a+13]=this.h[6]>>>8&255,e[a+14]=this.h[7]>>>0&255,e[a+15]=this.h[7]>>>8&255},le.prototype.update=function(e,a,t){var f,c;if(this.leftover){for(c=16-this.leftover,c>t&&(c=t),f=0;c>f;f++)this.buffer[this.leftover+f]=e[a+f];if(t-=c,a+=c,this.leftover+=c,this.leftover<16)return;this.blocks(this.buffer,0,16),this.leftover=0}if(t>=16&&(c=t-t%16,this.blocks(e,a,c),a+=c,t-=c),t){for(f=0;t>f;f++)this.buffer[this.leftover+f]=e[a+f];this.leftover+=t}};var pe=m,ge=v,me=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],ve=new Float64Array([237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16]),ye=32,we=24,_e=32,Se=16,Ae=32,Ie=32,Ee=32,ke=32,xe=32,Pe=we,Be=_e,Me=Se,Oe=64,Re=32,Te=64,Ce=32,Ne=64;a.lowlevel={crypto_core_hsalsa20:o,crypto_stream_xor:l,crypto_stream:h,crypto_stream_salsa20_xor:s,crypto_stream_salsa20:u,crypto_onetimeauth:p,crypto_onetimeauth_verify:g,crypto_verify_16:r,crypto_verify_32:d,crypto_secretbox:m,crypto_secretbox_open:v,crypto_scalarmult:R,crypto_scalarmult_base:T,crypto_box_beforenm:N,crypto_box_afternm:pe,crypto_box:j,crypto_box_open:L,crypto_box_keypair:C,crypto_hash:U,crypto_sign:W,crypto_sign_keypair:V,crypto_sign_open:X,crypto_secretbox_KEYBYTES:ye,crypto_secretbox_NONCEBYTES:we,crypto_secretbox_ZEROBYTES:_e,crypto_secretbox_BOXZEROBYTES:Se,crypto_scalarmult_BYTES:Ae,crypto_scalarmult_SCALARBYTES:Ie,crypto_box_PUBLICKEYBYTES:Ee,crypto_box_SECRETKEYBYTES:ke,crypto_box_BEFORENMBYTES:xe,crypto_box_NONCEBYTES:Pe,crypto_box_ZEROBYTES:Be,crypto_box_BOXZEROBYTES:Me,crypto_sign_BYTES:Oe,crypto_sign_PUBLICKEYBYTES:Re,crypto_sign_SECRETKEYBYTES:Te,crypto_sign_SEEDBYTES:Ce,crypto_hash_BYTES:Ne},a.util={},a.util.decodeUTF8=function(e){var a,t=unescape(encodeURIComponent(e)),f=new Uint8Array(t.length);for(a=0;aa;a++)f.push(String.fromCharCode(e[a]));return btoa(f.join(""))},a.util.decodeBase64=function(e){if("undefined"==typeof atob)return new Uint8Array(Array.prototype.slice.call(new t(e,"base64"),0));var a,f=atob(e),c=new Uint8Array(f.length);for(a=0;af)return null;for(var c=new Uint8Array(f),r=0;rf;f++)c[f]=a[f];for(f=0;f=0},a.sign.keyPair=function(){var e=new Uint8Array(Re),a=new Uint8Array(Te);return V(e,a),{publicKey:e,secretKey:a}},a.sign.keyPair.fromSecretKey=function(e){if(Q(e),e.length!==Te)throw new Error("bad secret key size");for(var a=new Uint8Array(Re),t=0;tf;f++)t[f]=e[f];return V(a,t,!0),{publicKey:a,secretKey:t}},a.sign.publicKeyLength=Re,a.sign.secretKeyLength=Te,a.sign.seedLength=Ce,a.sign.signatureLength=Oe,a.hash=function(e){Q(e);var a=new Uint8Array(Ne);return U(a,e,e.length),a},a.hash.hashLength=Ne,a.verify=function(e,a){return Q(e,a),0===e.length||0===a.length?!1:e.length!==a.length?!1:0===c(e,0,a,0,e.length)?!0:!1},a.setPRNG=function(e){te=e},function(){var t;"undefined"!=typeof window?(window.crypto&&window.crypto.getRandomValues?t=window.crypto:window.msCrypto&&window.msCrypto.getRandomValues&&(t=window.msCrypto),t&&a.setPRNG(function(e,a){var f,c=new Uint8Array(a);for(t.getRandomValues(c),f=0;a>f;f++)e[f]=c[f];ee(c)})):"undefined"!=typeof e&&(t=e("crypto"),t&&a.setPRNG(function(e,a){var f,c=t.randomBytes(a);for(f=0;a>f;f++)e[f]=c[f];ee(c)}))}()}("undefined"!=typeof a&&a.exports?a.exports:window.nacl=window.nacl||{})}).call(this,e("buffer").Buffer)},{buffer:98,crypto:98}],422:[function(e,a,t){var f=e("./formatters"),c=e("./type"),r=function(){this._inputFormatter=f.formatInputInt,this._outputFormatter=f.formatOutputAddress};r.prototype=new c({}),r.prototype.constructor=r,r.prototype.isType=function(e){return!!e.match(/address(\[([0-9]*)\])?/)},r.prototype.staticPartLength=function(e){return 32*this.staticArrayLength(e)},a.exports=r},{"./formatters":427,"./type":432}],423:[function(e,a,t){var f=e("./formatters"),c=e("./type"),r=function(){this._inputFormatter=f.formatInputBool,this._outputFormatter=f.formatOutputBool};r.prototype=new c({}),r.prototype.constructor=r,r.prototype.isType=function(e){return!!e.match(/^bool(\[([0-9]*)\])*$/)},r.prototype.staticPartLength=function(e){return 32*this.staticArrayLength(e)},a.exports=r},{"./formatters":427,"./type":432}],424:[function(e,a,t){var f=e("./formatters"),c=e("./type"),r=function(){this._inputFormatter=f.formatInputBytes,this._outputFormatter=f.formatOutputBytes};r.prototype=new c({}),r.prototype.constructor=r,r.prototype.isType=function(e){return!!e.match(/^bytes([0-9]{1,})(\[([0-9]*)\])*$/)},r.prototype.staticPartLength=function(e){var a=e.match(/^bytes([0-9]*)/),t=parseInt(a[1]);return t*this.staticArrayLength(e)},a.exports=r},{"./formatters":427,"./type":432}],425:[function(e,a,t){var f=e("./formatters"),c=e("./address"),r=e("./bool"),d=e("./int"),n=e("./uint"),i=e("./dynamicbytes"),b=e("./string"),o=e("./real"),s=e("./ureal"),u=e("./bytes"),h=function(e){this._types=e};h.prototype._requireType=function(e){var a=this._types.filter(function(a){return a.isType(e)})[0];if(!a)throw Error("invalid solidity type!: "+e);return a},h.prototype.encodeParam=function(e,a){return this.encodeParams([e],[a])},h.prototype.encodeParams=function(e,a){var t=this.getSolidityTypes(e),f=t.map(function(t,f){return t.encode(a[f],e[f])}),c=t.reduce(function(a,t,f){var c=t.staticPartLength(e[f]),r=32*Math.floor((c+31)/32);return a+r},0),r=this.encodeMultiWithOffset(e,t,f,c);return r},h.prototype.encodeMultiWithOffset=function(e,a,t,c){var r="",d=this,n=function(t){return a[t].isDynamicArray(e[t])||a[t].isDynamicType(e[t])};return e.forEach(function(i,b){if(n(b)){r+=f.formatInputInt(c).encode();var o=d.encodeWithOffset(e[b],a[b],t[b],c);c+=o.length/2}else r+=d.encodeWithOffset(e[b],a[b],t[b],c)}),e.forEach(function(f,i){if(n(i)){var b=d.encodeWithOffset(e[i],a[i],t[i],c);c+=b.length/2,r+=b}}),r},h.prototype.encodeWithOffset=function(e,a,t,c){var r=this;return a.isDynamicArray(e)?function(){var d=a.nestedName(e),n=a.staticPartLength(d),i=t[0];return function(){var e=2;if(a.isDynamicArray(d))for(var r=1;rd;d++)r.push(t.encode(e[d],c));return r}():this._inputFormatter(e,a).encode()},r.prototype.decode=function(e,a,t){var f=this;if(this.isDynamicArray(t))return function(){for(var c=parseInt("0x"+e.substr(2*a,64)),r=parseInt("0x"+e.substr(2*c,64)),d=c+32,n=f.nestedName(t),i=f.staticPartLength(n),b=32*Math.floor((i+31)/32),o=[],s=0;r*b>s;s+=b)o.push(f.decode(e,d+s,n));return o}();if(this.isStaticArray(t))return function(){for(var c=f.staticArrayLength(t),r=a,d=f.nestedName(t),n=f.staticPartLength(d),i=32*Math.floor((n+31)/32),b=[],o=0;c*i>o;o+=i)b.push(f.decode(e,r+o,d));return b}();if(this.isDynamicType(t))return function(){var t=parseInt("0x"+e.substr(2*a,64)),r=parseInt("0x"+e.substr(2*t,64)),d=Math.floor((r+31)/32);return f._outputFormatter(new c(e.substr(2*t,64*(1+d)),0))}();var r=this.staticPartLength(t);return this._outputFormatter(new c(e.substr(2*a,2*r)))},a.exports=r},{"./formatters":427,"./param":429}],433:[function(e,a,t){var f=e("./formatters"),c=e("./type"),r=function(){this._inputFormatter=f.formatInputInt,this._outputFormatter=f.formatOutputUInt};r.prototype=new c({}),r.prototype.constructor=r,r.prototype.isType=function(e){return!!e.match(/^uint([0-9]*)?(\[([0-9]*)\])*$/)},r.prototype.staticPartLength=function(e){return 32*this.staticArrayLength(e)},a.exports=r},{"./formatters":427,"./type":432}],434:[function(e,a,t){var f=e("./formatters"),c=e("./type"),r=function(){this._inputFormatter=f.formatInputReal,this._outputFormatter=f.formatOutputUReal};r.prototype=new c({}),r.prototype.constructor=r,r.prototype.isType=function(e){return!!e.match(/^ureal([0-9]*)?(\[([0-9]*)\])*$/)},r.prototype.staticPartLength=function(e){return 32*this.staticArrayLength(e)},a.exports=r},{"./formatters":427,"./type":432}],435:[function(e,a,t){var f=e("bignumber.js"),c=["wei","kwei","Mwei","Gwei","szabo","finney","femtoether","picoether","nanoether","microether","milliether","nano","micro","milli","ether","grand","Mether","Gether","Tether","Pether","Eether","Zether","Yether","Nether","Dether","Vether","Uether"];a.exports={ETH_PADDING:32,ETH_SIGNATURE_LENGTH:4,ETH_UNITS:c,ETH_BIGNUMBER_ROUNDING_MODE:{ROUNDING_MODE:f.ROUND_DOWN},ETH_POLLING_TIMEOUT:500,defaultBlock:"latest",defaultAccount:void 0}},{"bignumber.js":437}],436:[function(e,a,t){var f=e("bignumber.js"),c=e("utf8"),r={wei:"1",kwei:"1000",ada:"1000",femtoether:"1000",mwei:"1000000",babbage:"1000000",picoether:"1000000",gwei:"1000000000",shannon:"1000000000",nanoether:"1000000000",nano:"1000000000",szabo:"1000000000000",microether:"1000000000000",micro:"1000000000000",finney:"1000000000000000",milliether:"1000000000000000",milli:"1000000000000000",ether:"1000000000000000000",kether:"1000000000000000000000",grand:"1000000000000000000000",einstein:"1000000000000000000000",mether:"1000000000000000000000000",gether:"1000000000000000000000000000",tether:"1000000000000000000000000000000"},d=function(e,a,t){return new Array(a-e.length+1).join(t?t:"0")+e},n=function(e,a,t){return e+new Array(a-e.length+1).join(t?t:"0")},i=function(e){var a="",t=0,f=e.length;for("0x"===e.substring(0,2)&&(t=2);f>t;t+=2){var r=parseInt(e.substr(t,2),16);if(0===r)break;a+=String.fromCharCode(r)}return c.decode(a)},b=function(e){var a="",t=0,f=e.length;for("0x"===e.substring(0,2)&&(t=2);f>t;t+=2){var c=parseInt(e.substr(t,2),16);a+=String.fromCharCode(c)}return a},o=function(e){e=c.encode(e);for(var a="",t=0;tf?"i":"").test(b))return p(o,b,n,f);n?(o.s=0>1/e?(b=b.slice(1),-1):1,q&&b.replace(/^0\.0*|\./,"").length>15&&R(N,_,e),n=!1):o.s=45===b.charCodeAt(0)?(b=b.slice(1),-1):1,b=t(b,10,f,o.s)}else{if(e instanceof a)return o.s=e.s, -o.e=e.e,o.c=(e=e.c)?e.slice():e,void(N=0);if((n="number"==typeof e)&&0*e==0){if(o.s=0>1/e?(e=-e,-1):1,e===~~e){for(r=0,d=e;d>=10;d/=10,r++);return o.e=r,o.c=[e],void(N=0)}b=e+""}else{if(!g.test(b=e+""))return p(o,b,n);o.s=45===b.charCodeAt(0)?(b=b.slice(1),-1):1}}for((r=b.indexOf("."))>-1&&(b=b.replace(".","")),(d=b.search(/e/i))>0?(0>r&&(r=d),r+=+b.slice(d+1),b=b.substring(0,d)):0>r&&(r=b.length),d=0;48===b.charCodeAt(d);d++);for(i=b.length;48===b.charCodeAt(--i););if(b=b.slice(d,i+1))if(i=b.length,n&&q&&i>15&&R(N,_,o.s*e),r=r-d-1,r>F)o.c=o.e=null;else if(H>r)o.c=[o.e=0];else{if(o.e=r,o.c=[],d=(r+1)%I,0>r&&(d+=I),i>d){for(d&&o.c.push(+b.slice(0,d)),i-=I;i>d;)o.c.push(+b.slice(d,d+=I));b=b.slice(d),d=I-b.length}else d-=i;for(;d--;b+="0");o.c.push(+b)}else o.c=[o.e=0];N=0}function t(e,t,f,c){var d,n,i,o,u,h,l,p=e.indexOf("."),g=D,m=U;for(37>f&&(e=e.toLowerCase()),p>=0&&(i=W,W=0,e=e.replace(".",""),l=new a(f),u=l.pow(e.length-p),W=i,l.c=b(s(r(u.c),u.e),10,t),l.e=l.c.length),h=b(e,f,t),n=i=h.length;0==h[--i];h.pop());if(!h[0])return"0";if(0>p?--n:(u.c=h,u.e=n,u.s=c,u=C(u,l,g,m,t),h=u.c,o=u.r,n=u.e),d=n+g+1,p=h[d],i=t/2,o=o||0>d||null!=h[d+1],o=4>m?(null!=p||o)&&(0==m||m==(u.s<0?3:2)):p>i||p==i&&(4==m||o||6==m&&1&h[d-1]||m==(u.s<0?8:7)),1>d||!h[0])e=o?s("1",-g):"0";else{if(h.length=d,o)for(--t;++h[--d]>t;)h[d]=0,d||(++n,h.unshift(1));for(i=h.length;!h[--i];);for(p=0,e="";i>=p;e+=S.charAt(h[p++]));e=s(e,n)}return e}function h(e,t,f,c){var d,n,i,b,u;if(f=null!=f&&V(f,0,8,c,w)?0|f:U,!e.c)return e.toString();if(d=e.c[0],i=e.e,null==t)u=r(e.c),u=19==c||24==c&&z>=i?o(u,i):s(u,i);else if(e=T(new a(e),t,f),n=e.e,u=r(e.c),b=u.length,19==c||24==c&&(n>=t||z>=n)){for(;t>b;u+="0",b++);u=o(u,n)}else if(t-=i,u=s(u,n),n+1>b){if(--t>0)for(u+=".";t--;u+="0");}else if(t+=n-b,t>0)for(n+1==b&&(u+=".");t--;u+="0");return e.s<0&&d?"-"+u:u}function B(e,t){var f,c,r=0;for(i(e[0])&&(e=e[0]),f=new a(e[0]);++re||e>t||e!=u(e))&&R(f,(c||"decimal places")+(a>e||e>t?" out of range":" not an integer"),e),!0}function O(e,a,t){for(var f=1,c=a.length;!a[--c];a.pop());for(c=a[0];c>=10;c/=10,f++);return(t=f+t*I-1)>F?e.c=e.e=null:H>t?e.c=[e.e=0]:(e.e=t,e.c=a),e}function R(e,a,t){var f=new Error(["new BigNumber","cmp","config","div","divToInt","eq","gt","gte","lt","lte","minus","mod","plus","precision","random","round","shift","times","toDigits","toExponential","toFixed","toFormat","toFraction","pow","toPrecision","toString","BigNumber"][e]+"() "+a+": "+t);throw f.name="BigNumber Error",N=0,f}function T(e,a,t,f){var c,r,d,n,i,b,o,s=e.c,u=k;if(s){e:{for(c=1,n=s[0];n>=10;n/=10,c++);if(r=a-c,0>r)r+=I,d=a,i=s[b=0],o=i/u[c-d-1]%10|0;else if(b=m((r+1)/I),b>=s.length){if(!f)break e;for(;s.length<=b;s.push(0));i=o=0,c=1,r%=I,d=r-I+1}else{for(i=n=s[b],c=1;n>=10;n/=10,c++);r%=I,d=r-I+c,o=0>d?0:i/u[c-d-1]%10|0}if(f=f||0>a||null!=s[b+1]||(0>d?i:i%u[c-d-1]),f=4>t?(o||f)&&(0==t||t==(e.s<0?3:2)):o>5||5==o&&(4==t||f||6==t&&(r>0?d>0?i/u[c-d]:0:s[b-1])%10&1||t==(e.s<0?8:7)),1>a||!s[0])return s.length=0,f?(a-=e.e+1,s[0]=u[a%I],e.e=-a||0):s[0]=e.e=0,e;if(0==r?(s.length=b,n=1,b--):(s.length=b+1,n=u[I-r],s[b]=d>0?v(i/u[c-d]%u[d])*n:0),f)for(;;){if(0==b){for(r=1,d=s[0];d>=10;d/=10,r++);for(d=s[0]+=n,n=1;d>=10;d/=10,n++);r!=n&&(e.e++,s[0]==A&&(s[0]=1));break}if(s[b]+=n,s[b]!=A)break;s[b--]=0,n=1}for(r=s.length;0===s[--r];s.pop());}e.e>F?e.c=e.e=null:e.et?null!=(e=c[t++]):void 0};return d(a="DECIMAL_PLACES")&&V(e,0,P,2,a)&&(D=0|e),f[a]=D,d(a="ROUNDING_MODE")&&V(e,0,8,2,a)&&(U=0|e),f[a]=U,d(a="EXPONENTIAL_AT")&&(i(e)?V(e[0],-P,0,2,a)&&V(e[1],0,P,2,a)&&(z=0|e[0],K=0|e[1]):V(e,-P,P,2,a)&&(z=-(K=0|(0>e?-e:e)))),f[a]=[z,K],d(a="RANGE")&&(i(e)?V(e[0],-P,-1,2,a)&&V(e[1],1,P,2,a)&&(H=0|e[0],F=0|e[1]):V(e,-P,P,2,a)&&(0|e?H=-(F=0|(0>e?-e:e)):q&&R(2,a+" cannot be zero",e))),f[a]=[H,F],d(a="ERRORS")&&(e===!!e||1===e||0===e?(N=0,V=(q=!!e)?M:n):q&&R(2,a+y,e)),f[a]=q,d(a="CRYPTO")&&(e===!!e||1===e||0===e?(Y=!(!e||!l||"object"!=typeof l),e&&!Y&&q&&R(2,"crypto unavailable",l)):q&&R(2,a+y,e)),f[a]=Y,d(a="MODULO_MODE")&&V(e,0,9,2,a)&&(G=0|e),f[a]=G,d(a="POW_PRECISION")&&V(e,0,P,2,a)&&(W=0|e),f[a]=W,d(a="FORMAT")&&("object"==typeof e?J=e:q&&R(2,a+" not an object",e)),f[a]=J,f},a.max=function(){return B(arguments,j.lt)},a.min=function(){return B(arguments,j.gt)},a.random=function(){var e=9007199254740992,t=Math.random()*e&2097151?function(){return v(Math.random()*e)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)};return function(e){var f,c,r,d,n,i=0,b=[],o=new a(L);if(e=null!=e&&V(e,0,P,14)?0|e:D,d=m(e/I),Y)if(l&&l.getRandomValues){for(f=l.getRandomValues(new Uint32Array(d*=2));d>i;)n=131072*f[i]+(f[i+1]>>>11),n>=9e15?(c=l.getRandomValues(new Uint32Array(2)),f[i]=c[0],f[i+1]=c[1]):(b.push(n%1e14),i+=2);i=d/2}else if(l&&l.randomBytes){for(f=l.randomBytes(d*=7);d>i;)n=281474976710656*(31&f[i])+1099511627776*f[i+1]+4294967296*f[i+2]+16777216*f[i+3]+(f[i+4]<<16)+(f[i+5]<<8)+f[i+6],n>=9e15?l.randomBytes(7).copy(f,i):(b.push(n%1e14),i+=7);i=d/7}else q&&R(14,"crypto unavailable",l);if(!i)for(;d>i;)n=t(),9e15>n&&(b[i++]=n%1e14);for(d=b[--i],e%=I,d&&e&&(n=k[I-e],b[i]=v(d/n)*n);0===b[i];b.pop(),i--);if(0>i)b=[r=0];else{for(r=-1;0===b[0];b.shift(),r-=I);for(i=1,n=b[0];n>=10;n/=10,i++);I>i&&(r-=I-i)}return o.e=r,o.c=b,o}}(),C=function(){function e(e,a,t){var f,c,r,d,n=0,i=e.length,b=a%x,o=a/x|0;for(e=e.slice();i--;)r=e[i]%x,d=e[i]/x|0,f=o*r+d*b,c=b*r+f%x*x+n,n=(c/t|0)+(f/x|0)+o*d,e[i]=c%t;return n&&e.unshift(n),e}function t(e,a,t,f){var c,r;if(t!=f)r=t>f?1:-1;else for(c=r=0;t>c;c++)if(e[c]!=a[c]){r=e[c]>a[c]?1:-1;break}return r}function f(e,a,t,f){for(var c=0;t--;)e[t]-=c,c=e[t]1;e.shift());}return function(r,d,n,i,b){var o,s,u,h,l,p,g,m,y,w,_,S,E,k,x,P,B,M=r.s==d.s?1:-1,O=r.c,R=d.c;if(!(O&&O[0]&&R&&R[0]))return new a(r.s&&d.s&&(O?!R||O[0]!=R[0]:R)?O&&0==O[0]||!R?0*M:M/0:NaN);for(m=new a(M),y=m.c=[],s=r.e-d.e,M=n+s+1,b||(b=A,s=c(r.e/I)-c(d.e/I),M=M/I|0),u=0;R[u]==(O[u]||0);u++);if(R[u]>(O[u]||0)&&s--,0>M)y.push(1),h=!0;else{for(k=O.length,P=R.length,u=0,M+=2,l=v(b/(R[0]+1)),l>1&&(R=e(R,l,b),O=e(O,l,b),P=R.length,k=O.length),E=P,w=O.slice(0,P),_=w.length;P>_;w[_++]=0);B=R.slice(),B.unshift(0),x=R[0],R[1]>=b/2&&x++;do{if(l=0,o=t(R,w,P,_),0>o){if(S=w[0],P!=_&&(S=S*b+(w[1]||0)),l=v(S/x),l>1)for(l>=b&&(l=b-1),p=e(R,l,b),g=p.length,_=w.length;1==t(p,w,g,_);)l--,f(p,g>P?B:R,g,b),g=p.length,o=1;else 0==l&&(o=l=1),p=R.slice(),g=p.length;if(_>g&&p.unshift(0),f(w,p,_,b),_=w.length,-1==o)for(;t(R,w,P,_)<1;)l++,f(w,_>P?B:R,_,b),_=w.length}else 0===o&&(l++,w=[0]);y[u++]=l,w[0]?w[_++]=O[E]||0:(w=[O[E]],_=1)}while((E++=10;M/=10,u++);T(m,n+(m.e=u+s*I-1)+1,i,h)}else m.e=s,m.r=+h;return m}}(),p=function(){var e=/^(-?)0([xbo])/i,t=/^([^.]+)\.$/,f=/^\.([^.]+)$/,c=/^-?(Infinity|NaN)$/,r=/^\s*\+|^\s+|\s+$/g;return function(d,n,i,b){var o,s=i?n:n.replace(r,"");if(c.test(s))d.s=isNaN(s)?null:0>s?-1:1;else{if(!i&&(s=s.replace(e,function(e,a,t){return o="x"==(t=t.toLowerCase())?16:"b"==t?2:8,b&&b!=o?e:a}),b&&(o=b,s=s.replace(t,"$1").replace(f,"0.$1")),n!=s))return new a(s,o);q&&R(N,"not a"+(b?" base "+b:"")+" number",n),d.s=null}d.c=d.e=null,N=0}}(),j.absoluteValue=j.abs=function(){var e=new a(this);return e.s<0&&(e.s=1),e},j.ceil=function(){return T(new a(this),this.e+1,2)},j.comparedTo=j.cmp=function(e,t){return N=1,d(this,new a(e,t))},j.decimalPlaces=j.dp=function(){var e,a,t=this.c;if(!t)return null;if(e=((a=t.length-1)-c(this.e/I))*I,a=t[a])for(;a%10==0;a/=10,e--);return 0>e&&(e=0),e},j.dividedBy=j.div=function(e,t){return N=3,C(this,new a(e,t),D,U)},j.dividedToIntegerBy=j.divToInt=function(e,t){return N=4,C(this,new a(e,t),0,1)},j.equals=j.eq=function(e,t){return N=5,0===d(this,new a(e,t))},j.floor=function(){return T(new a(this),this.e+1,3)},j.greaterThan=j.gt=function(e,t){return N=6,d(this,new a(e,t))>0},j.greaterThanOrEqualTo=j.gte=function(e,t){return N=7,1===(t=d(this,new a(e,t)))||0===t},j.isFinite=function(){return!!this.c},j.isInteger=j.isInt=function(){return!!this.c&&c(this.e/I)>this.c.length-2},j.isNaN=function(){return!this.s},j.isNegative=j.isNeg=function(){return this.s<0},j.isZero=function(){return!!this.c&&0==this.c[0]},j.lessThan=j.lt=function(e,t){return N=8,d(this,new a(e,t))<0},j.lessThanOrEqualTo=j.lte=function(e,t){return N=9,-1===(t=d(this,new a(e,t)))||0===t},j.minus=j.sub=function(e,t){var f,r,d,n,i=this,b=i.s;if(N=10,e=new a(e,t),t=e.s,!b||!t)return new a(NaN);if(b!=t)return e.s=-t,i.plus(e);var o=i.e/I,s=e.e/I,u=i.c,h=e.c;if(!o||!s){if(!u||!h)return u?(e.s=-t,e):new a(h?i:NaN);if(!u[0]||!h[0])return h[0]?(e.s=-t,e):new a(u[0]?i:3==U?-0:0)}if(o=c(o),s=c(s),u=u.slice(),b=o-s){for((n=0>b)?(b=-b,d=u):(s=o,d=h),d.reverse(),t=b;t--;d.push(0));d.reverse()}else for(r=(n=(b=u.length)<(t=h.length))?b:t,b=t=0;r>t;t++)if(u[t]!=h[t]){n=u[t]0)for(;t--;u[f++]=0);for(t=A-1;r>b;){if(u[--r]0?(i=n,f=o):(d=-d,f=b),f.reverse();d--;f.push(0));f.reverse()}for(d=b.length,t=o.length,0>d-t&&(f=o,o=b,b=f,t=d),d=0;t;)d=(b[--t]=b[t]+o[t]+d)/A|0,b[t]%=A;return d&&(b.unshift(d),++i),O(e,b,i)},j.precision=j.sd=function(e){var a,t,f=this,c=f.c;if(null!=e&&e!==!!e&&1!==e&&0!==e&&(q&&R(13,"argument"+y,e),e!=!!e&&(e=null)),!c)return null;if(t=c.length-1,a=t*I+1,t=c[t]){for(;t%10==0;t/=10,a--);for(t=c[0];t>=10;t/=10,a++);}return e&&f.e+1>a&&(a=f.e+1),a},j.round=function(e,t){var f=new a(this);return(null==e||V(e,0,P,15))&&T(f,~~e+this.e+1,null!=t&&V(t,0,8,15,w)?0|t:U),f},j.shift=function(e){var t=this;return V(e,-E,E,16,"argument")?t.times("1e"+u(e)):new a(t.c&&t.c[0]&&(-E>e||e>E)?t.s*(0>e?0:1/0):t)},j.squareRoot=j.sqrt=function(){var e,t,f,d,n,i=this,b=i.c,o=i.s,s=i.e,u=D+4,h=new a("0.5");if(1!==o||!b||!b[0])return new a(!o||0>o&&(!b||b[0])?NaN:b?i:1/0);if(o=Math.sqrt(+i),0==o||o==1/0?(t=r(b),(t.length+s)%2==0&&(t+="0"),o=Math.sqrt(t),s=c((s+1)/2)-(0>s||s%2),o==1/0?t="1e"+s:(t=o.toExponential(),t=t.slice(0,t.indexOf("e")+1)+s),f=new a(t)):f=new a(o+""),f.c[0])for(s=f.e,o=s+u,3>o&&(o=0);;)if(n=f,f=h.times(n.plus(C(i,n,u,1))),r(n.c).slice(0,o)===(t=r(f.c)).slice(0,o)){if(f.eo&&(g=w,w=_,_=g,d=o,o=h,h=d),d=o+h,g=[];d--;g.push(0));for(m=A,v=x,d=h;--d>=0;){for(f=0,l=_[d]%v,p=_[d]/v|0,i=o,n=d+i;n>d;)s=w[--i]%v,u=w[i]/v|0,b=p*s+u*l,s=l*s+b%v*v+g[n]+f,f=(s/m|0)+(b/v|0)+p*u,g[n--]=s%m;g[n]=f}return f?++r:g.shift(),O(e,g,r)},j.toDigits=function(e,t){var f=new a(this);return e=null!=e&&V(e,1,P,18,"precision")?0|e:null,t=null!=t&&V(t,0,8,18,w)?0|t:U,e?T(f,e,t):f},j.toExponential=function(e,a){return h(this,null!=e&&V(e,0,P,19)?~~e+1:null,a,19)},j.toFixed=function(e,a){return h(this,null!=e&&V(e,0,P,20)?~~e+this.e+1:null,a,20)},j.toFormat=function(e,a){var t=h(this,null!=e&&V(e,0,P,21)?~~e+this.e+1:null,a,21);if(this.c){var f,c=t.split("."),r=+J.groupSize,d=+J.secondaryGroupSize,n=J.groupSeparator,i=c[0],b=c[1],o=this.s<0,s=o?i.slice(1):i,u=s.length;if(d&&(f=r,r=d,d=f,u-=f),r>0&&u>0){for(f=u%r||r,i=s.substr(0,f);u>f;f+=r)i+=n+s.substr(f,r);d>0&&(i+=n+s.slice(f)),o&&(i="-"+i)}t=b?i+J.decimalSeparator+((d=+J.fractionGroupSize)?b.replace(new RegExp("\\d{"+d+"}\\B","g"),"$&"+J.fractionGroupSeparator):b):i}return t},j.toFraction=function(e){var t,f,c,d,n,i,b,o,s,u=q,h=this,l=h.c,p=new a(L),g=f=new a(L),m=b=new a(L);if(null!=e&&(q=!1,i=new a(e),q=u,(!(u=i.isInt())||i.lt(L))&&(q&&R(22,"max denominator "+(u?"out of range":"not an integer"),e),e=!u&&i.c&&T(i,i.e+1,1).gte(L)?i:null)),!l)return h.toString();for(s=r(l),d=p.e=s.length-h.e-1,p.c[0]=k[(n=d%I)<0?I+n:n],e=!e||i.cmp(p)>0?d>0?p:g:i,n=F,F=1/0,i=new a(s),b.c[0]=0;o=C(i,p,0,1),c=f.plus(o.times(m)),1!=c.cmp(e);)f=m,m=c,g=b.plus(o.times(c=g)),b=c,p=i.minus(o.times(c=p)),i=c;return c=C(e.minus(f),m,0,1),b=b.plus(c.times(g)),f=f.plus(c.times(m)),b.s=g.s=h.s,d*=2,t=C(g,m,d,U).minus(h).abs().cmp(C(b,f,d,U).minus(h).abs())<1?[g.toString(),m.toString()]:[b.toString(),f.toString()],F=n,t},j.toNumber=function(){var e=this;return+e||(e.s?0*e.s:NaN)},j.toPower=j.pow=function(e){var t,f,c=v(0>e?-e:+e),r=this;if(!V(e,-E,E,23,"exponent")&&(!isFinite(e)||c>E&&(e/=0)||parseFloat(e)!=e&&!(e=NaN)))return new a(Math.pow(+r,e));for(t=W?m(W/I+2):0,f=new a(L);;){if(c%2){if(f=f.times(r),!f.c)break;t&&f.c.length>t&&(f.c.length=t)}if(c=v(c/2),!c)break;r=r.times(r),t&&r.c&&r.c.length>t&&(r.c.length=t)}return 0>e&&(f=L.div(f)),t?T(f,W,U):f},j.toPrecision=function(e,a){return h(this,null!=e&&V(e,1,P,24,"precision")?0|e:null,a,24)},j.toString=function(e){var a,f=this,c=f.s,d=f.e;return null===d?c?(a="Infinity",0>c&&(a="-"+a)):a="NaN":(a=r(f.c),a=null!=e&&V(e,2,64,25,"base")?t(s(a,d),0|e,10,c):z>=d||d>=K?o(a,d):s(a,d),0>c&&f.c[0]&&(a="-"+a)),a},j.truncated=j.trunc=function(){return T(new a(this),this.e+1,1)},j.valueOf=j.toJSON=function(){return this.toString()},null!=e&&a.config(e),a}function c(e){var a=0|e;return e>0||e===a?a:a-1}function r(e){for(var a,t,f=1,c=e.length,r=e[0]+"";c>f;){for(a=e[f++]+"",t=I-a.length;t--;a="0"+a);r+=a}for(c=r.length;48===r.charCodeAt(--c););return r.slice(0,c+1||1)}function d(e,a){var t,f,c=e.c,r=a.c,d=e.s,n=a.s,i=e.e,b=a.e;if(!d||!n)return null;if(t=c&&!c[0],f=r&&!r[0],t||f)return t?f?0:-n:d;if(d!=n)return d;if(t=0>d,f=i==b,!c||!r)return f?0:!c^t?1:-1;if(!f)return i>b^t?1:-1;for(n=(i=c.length)<(b=r.length)?i:b,d=0;n>d;d++)if(c[d]!=r[d])return c[d]>r[d]^t?1:-1;return i==b?0:i>b^t?1:-1}function n(e,a,t){return(e=u(e))>=a&&t>=e}function i(e){return"[object Array]"==Object.prototype.toString.call(e)}function b(e,a,t){for(var f,c,r=[0],d=0,n=e.length;n>d;){for(c=r.length;c--;r[c]*=a);for(r[f=0]+=S.indexOf(e.charAt(d++));ft-1&&(null==r[f+1]&&(r[f+1]=0),r[f+1]+=r[f]/t|0,r[f]%=t)}return r.reverse()}function o(e,a){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(0>a?"e":"e+")+a}function s(e,a){var t,f;if(0>a){for(f="0.";++a;f+="0");e=f+e}else if(t=e.length,++a>t){for(f="0",a-=t;--a;f+="0");e+=f}else t>a&&(e=e.slice(0,a)+"."+e.slice(a));return e}function u(e){return e=parseFloat(e),0>e?m(e):v(e)}var h,l,p,g=/^-?(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,m=Math.ceil,v=Math.floor,y=" not a boolean or binary digit",w="rounding mode",_="number type has more than 15 significant digits",S="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_",A=1e14,I=14,E=9007199254740991,k=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],x=1e7,P=1e9;if(h=f(),"function"==typeof define&&define.amd)define(function(){return h});else if("undefined"!=typeof a&&a.exports){if(a.exports=h,!l)try{l=e("crypto")}catch(B){}}else t.BigNumber=h}(this)},{crypto:103}],438:[function(e,a,t){(function(e){!function(f){function c(e){for(var a,t,f=[],c=0,r=e.length;r>c;)a=e.charCodeAt(c++),a>=55296&&56319>=a&&r>c?(t=e.charCodeAt(c++),56320==(64512&t)?f.push(((1023&a)<<10)+(1023&t)+65536):(f.push(a),c--)):f.push(a);return f}function r(e){for(var a,t=e.length,f=-1,c="";++f65535&&(a-=65536,c+=y(a>>>10&1023|55296),a=56320|1023&a),c+=y(a);return c}function d(e){if(e>=55296&&57343>=e)throw Error("Lone surrogate U+"+e.toString(16).toUpperCase()+" is not a scalar value")}function n(e,a){return y(e>>a&63|128)}function i(e){if(0==(4294967168&e))return y(e);var a="";return 0==(4294965248&e)?a=y(e>>6&31|192):0==(4294901760&e)?(d(e),a=y(e>>12&15|224),a+=n(e,6)):0==(4292870144&e)&&(a=y(e>>18&7|240),a+=n(e,12),a+=n(e,6)),a+=y(63&e|128)}function b(e){for(var a,t=c(e),f=t.length,r=-1,d="";++r=m)throw Error("Invalid byte index");var e=255&g[v];if(v++,128==(192&e))return 63&e;throw Error("Invalid continuation byte")}function s(){var e,a,t,f,c;if(v>m)throw Error("Invalid byte index");if(v==m)return!1;if(e=255&g[v],v++,0==(128&e))return e;if(192==(224&e)){var a=o();if(c=(31&e)<<6|a,c>=128)return c;throw Error("Invalid continuation byte")}if(224==(240&e)){if(a=o(),t=o(),c=(15&e)<<12|a<<6|t,c>=2048)return d(c),c;throw Error("Invalid continuation byte")}if(240==(248&e)&&(a=o(),t=o(),f=o(),c=(15&e)<<18|a<<12|t<<6|f,c>=65536&&1114111>=c))return c;throw Error("Invalid UTF-8 detected")}function u(e){g=c(e),m=g.length,v=0;for(var a,t=[];(a=s())!==!1;)t.push(a);return r(t)}var h="object"==typeof t&&t,l="object"==typeof a&&a&&a.exports==h&&a,p="object"==typeof e&&e;(p.global===p||p.window===p)&&(f=p);var g,m,v,y=String.fromCharCode,w={version:"2.0.0",encode:b,decode:u};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return w});else if(h&&!h.nodeType)if(l)l.exports=w;else{var _={},S=_.hasOwnProperty;for(var A in w)S.call(w,A)&&(h[A]=w[A])}else f.utf8=w}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[1])(1)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.lightwallet=e()}}(function(){var e;return function t(e,r,n){function i(s,a){if(!r[s]){if(!e[s]){var u="function"==typeof require&&require;if(!a&&u)return u(s,!0);if(o)return o(s,!0);var f=new Error("Cannot find module '"+s+"'");throw f.code="MODULE_NOT_FOUND",f}var h=r[s]={exports:{}};e[s][0].call(h.exports,function(t){var r=e[s][1][t];return i(r?r:t)},h,h.exports,t,e,r,n)}return r[s].exports}for(var o="function"==typeof require&&require,s=0;s=2&&"0x"===e.slice(0,2)?e.slice(2):e}function i(e){return"string"!=typeof e?e:e.length<2||"0x"!==e.slice(0,2)?"0x"+e:e}function o(e,t,r){for(var n="",i=0;r>i;i++)n+=t;return(n+e).slice(-r)}function s(e){var t=p.util.encodeBase64(e);return new r(t,"base64").toString("hex")}function a(e){var t=new r(e,"hex").toString("base64");return p.util.decodeBase64(t)}var u=e("ethereumjs-util"),f=e("ethereumjs-tx"),h=e("elliptic").ec,c=new h("secp256k1"),d=e("bitcore-lib"),l=e("bitcore-mnemonic"),p=e("tweetnacl"),g=e("scrypt-async"),m=(e("./encryption"),e("./signing")),b=function(e,t,r){if(this.defaultHdPathString="m/0'/0'/0'",void 0===r&&(r=this.defaultHdPathString),this.ksData={},this.ksData[r]={},pathKsData=this.ksData[r],pathKsData.info={curve:"secp256k1",purpose:"sign"},this.encSeed=void 0,this.encHdRootPriv=void 0,this.version=2,pathKsData.encHdPathPriv=void 0,pathKsData.hdIndex=0,pathKsData.encPrivKeys={},pathKsData.addresses=[],"undefined"!=typeof t&&"undefined"!=typeof e){var n=e.split(" ");if(!l.isValid(e,l.Words.ENGLISH)||12!==n.length)throw new Error("KeyStore: Invalid mnemonic");var i=o(e," ",120);this.encSeed=b._encryptString(i,t);var s=new l(e).toHDPrivateKey().xprivkey;this.encHdRootPriv=b._encryptString(s,t);var a=new d.HDPrivateKey(s),u=a.derive(r).xprivkey;pathKsData.encHdPathPriv=b._encryptString(u,t)}};b._encryptString=function(e,t){var r=p.randomBytes(p.secretbox.nonceLength),n=p.secretbox(p.util.decodeUTF8(e),r,t),i={encStr:p.util.encodeBase64(n),nonce:p.util.encodeBase64(r)};return i},b._decryptString=function(e,t){var r=p.util.decodeBase64(e.encStr),n=p.util.decodeBase64(e.nonce),i=p.secretbox.open(r,n,t);return p.util.encodeUTF8(i)},b._encryptKey=function(e,t){var r=a(e),n=p.randomBytes(p.secretbox.nonceLength),i=p.secretbox(r,n,t);return i={key:p.util.encodeBase64(i),nonce:p.util.encodeBase64(n)}},b._decryptKey=function(e,t){var r=p.util.decodeBase64(e.key),n=p.util.decodeBase64(e.nonce),i=p.secretbox.open(r,n,t);return s(i)},b._computeAddressFromPrivKey=function(e){var t=c.genKeyPair();t._importPrivate(e,"hex");var n=!1,i=t.getPublic(n,"hex").slice(2),o=new r(i,"hex"),s=u.sha3(o).toString("hex");return s.slice(24)},b._computePubkeyFromPrivKey=function(e,t){if("curve25519"!==t)throw new Error('KeyStore._computePubkeyFromPrivKey: Only "curve25519" supported.');var n=new r(e,"hex").toString("base64"),i=p.util.decodeBase64(n),o=p.box.keyPair.fromSecretKey(i).publicKey,s=p.util.encodeBase64(o),a=new r(s,"base64").toString("hex");return a},b.prototype.addHdDerivationPath=function(e,t,r){if("sign"!==r.purpose&&"asymEncrypt"!==r.purpose)throw new Error("KeyStore.addHdDerivationPath: info.purpose is '"+r.purpose+"' but must be either 'sign' or 'asymEncrypt'.");if("secp256k1"!==r.curve&&"curve25519"!==r.curve)throw new Error("KeyStore.addHdDerivationPath: info.curve is '"+r.curve+"' but must be either 'secp256k1' or 'curve25519'.");var n=b._decryptString(this.encHdRootPriv,t),i=new d.HDPrivateKey(n),o=i.derive(e).xprivkey;this.ksData[e]={},this.ksData[e].info=r,this.ksData[e].encHdPathPriv=b._encryptString(o,t),this.ksData[e].hdIndex=0,this.ksData[e].encPrivKeys={},"sign"===r.purpose?this.ksData[e].addresses=[]:"asymEncrypt"===r.purpose&&(this.ksData[e].pubKeys=[])},b.prototype.setDefaultHdDerivationPath=function(e){if(void 0===this.ksData[e])throw new Error("setDefaultHdDerivationPath: HD path does not exist. Cannot set default.");this.defaultHdPathString=e},b.prototype._generatePrivKeys=function(e,t,r){void 0===r&&(r=this.defaultHdPathString);for(var n=b._decryptString(this.ksData[r].encHdPathPriv,e),i=[],s=0;t>s;s++){var a=new d.HDPrivateKey(n).derive(this.ksData[r].hdIndex++),u=a.privateKey.toBuffer(),f=u.toString("hex");if(u.length<16)throw new Error("Private key suspiciously small: < 16 bytes. Aborting!");if(u.length<32)f=o(u.toString("hex"),"0",64);else if(u.length>32)throw new Error("Private key larger than 32 bytes. Aborting!");var h=b._encryptKey(f,e);i[s]={privKey:f,encPrivKey:h}}return i},b._concatAndSha256=function(e,t){var n=r.concat([e,t]);if(n.length!==e.length+t.length)throw new Error("generateRandomSeed: Logic error! Concatenation of entropy sources failed.");var i=u.sha256(n);return i},b.generateRandomSeed=function(e){var t="";if(void 0===e)t=new l(l.Words.ENGLISH);else{if("string"!=typeof e)throw new Error("generateRandomSeed: extraEntropy is set but not a string.");var n=new r(e),i=p.randomBytes(32),o=this._concatAndSha256(i,n).slice(0,16);t=new l(o,l.Words.ENGLISH)}return t.toString()},b.isSeedValid=function(e){return l.isValid(e,l.Words.ENGLISH)},b.prototype.isDerivedKeyCorrect=function(e){var t=b._decryptString(this.encSeed,e);return t.length>0?!0:!1},b.deserialize=function(e){var t=JSON.parse(e);if(void 0===t.version||1===t.version)throw new Error("Old version of serialized keystore. Please use KeyStore.upgradeOldSerialized() to convert it to the latest version.");var r=new b;return r.encSeed=t.encSeed,r.encHdRootPriv=t.encHdRootPriv,r.ksData=t.ksData,r},b.prototype.serialize=function(){var e={encSeed:this.encSeed,ksData:this.ksData,encHdRootPriv:this.encHdRootPriv,version:this.version};return JSON.stringify(e)},b.prototype.getAddresses=function(e){if(void 0===e&&(e=this.defaultHdPathString),"sign"!==this.ksData[e].info.purpose)throw new Error('KeyStore.getAddresses: Addresses not defined when purpose is not "sign"');return this.ksData[e].addresses},b.prototype.getSeed=function(e){var t=b._decryptString(this.encSeed,e);return t.trim()},b.prototype.exportPrivateKey=function(e,t,r){void 0===r&&(r=this.defaultHdPathString);var e=n(e);if(void 0===this.ksData[r].encPrivKeys[e])throw new Error("KeyStore.exportPrivateKey: Address not found in KeyStore");var i=this.ksData[r].encPrivKeys[e],o=b._decryptKey(i,t);return o},b.prototype.generateNewAddress=function(e,t,r){if(void 0===r&&(r=this.defaultHdPathString),"sign"!==this.ksData[r].info.purpose)throw new Error('KeyStore.generateNewAddress: Address not defined when purpose is not "sign"');if(!this.encSeed)throw new Error("KeyStore.generateNewAddress: No seed set");t=t||1;for(var n=this._generatePrivKeys(e,t,r),i=0;t>i;i++){var o=n[i],s=b._computeAddressFromPrivKey(o.privKey);this.ksData[r].encPrivKeys[s]=o.encPrivKey,this.ksData[r].addresses.push(s)}},b.prototype.generateNewEncryptionKeys=function(e,t,r){if(void 0===r&&(r=this.defaultHdPathString),"asymEncrypt"!==this.ksData[r].info.purpose)throw new Error('KeyStore.generateNewEncryptionKeys: Address not defined when purpose is not "asymEncrypt"');if(!this.encSeed)throw new Error("KeyStore.generateNewEncryptionKeys: No seed set");t=t||1;for(var n=this._generatePrivKeys(e,t,r),i=this.ksData[r].info.curve,o=0;t>o;o++){var s=n[o],a=b._computePubkeyFromPrivKey(s.privKey,i);this.ksData[r].encPrivKeys[a]=s.encPrivKey,this.ksData[r].pubKeys.push(a)}},b.prototype.getPubKeys=function(e){if(void 0===e&&(e=this.defaultHdPathString),"asymEncrypt"!==this.ksData[e].info.purpose)throw new Error('KeyStore.getPubKeys: Not defined when purpose is not "asymEncrypt"');if(void 0===this.ksData[e].pubKeys)throw new Error("KeyStore.getPubKeys: No pubKeys data found!");return this.ksData[e].pubKeys},b.deriveKeyFromPassword=function(e,t){var r="lightwalletSalt",n=14,i=8,o=32,s=200,a=function(e){var r=new Uint8Array(e);t(null,r)};g(e,r,n,i,o,s,a,null)},b.prototype.passwordProvider=function(e){var t=prompt("Enter password to continue","Enter password");e(null,t)},b.prototype.hasAddress=function(e,t){var r=n(e);void 0===this.ksData[this.defaultHdPathString].encPrivKeys[r]?t("Address not found!",!1):t(null,!0)},b.prototype.signTransaction=function(e,t){var r={};r.from=i(e.from),r.to=i(e.to),r.gasLimit=i(e.gas),r.gasPrice=i(e.gasPrice),r.nonce=i(e.nonce),r.value=i(e.value),r.data=i(e.data);var o=new f(r),s=o.serialize().toString("hex"),a=n(e.from),u=this;this.passwordProvider(function(e,r){return e?t(e):void b.deriveKeyFromPassword(r,function(e,r){var n=m.signTx(u,r,s,a,u.defaultHdPathString);t(null,"0x"+n)})})},t.exports=b}).call(this,e("buffer").Buffer)},{"./encryption":2,"./signing":4,"bitcore-lib":9,"bitcore-mnemonic":88,buffer:147,elliptic:197,"ethereumjs-tx":213,"ethereumjs-util":214,"scrypt-async":259,tweetnacl:293}],4:[function(e,t,r){(function(r){var n=e("ethereumjs-tx"),i=e("ethereumjs-util");signTx=function(e,t,o,s,a){void 0===a&&(a=e.defaultHdPathString),o=i.stripHexPrefix(o),s=i.stripHexPrefix(s);var u=new n(new r(o,"hex")),f=e.exportPrivateKey(s,t,a);return u.sign(new r(f,"hex")),f="",u.serialize().toString("hex")},t.exports.signTx=signTx}).call(this,e("buffer").Buffer)},{buffer:147,"ethereumjs-tx":213,"ethereumjs-util":214}],5:[function(e,t,r){(function(r){function n(e){return"string"!=typeof e?e:e.length<2||"0x"!==e.slice(0,2)?"0x"+e:e}function i(e,t,r){var n=e+"("+t.join()+")",i=c.sha3(n).toString("hex").slice(0,8),o=i+d.encodeParams(t,r);return o}function o(e,t){function r(e){return e.name===t&&"function"===e.type}function n(e){return e.type}var i=e.filter(r)[0];return i.inputs.map(n)}function s(e,t,r,s){var a=o(e,t),u=i(t,a,r),f={};return f.to=n(s.to),f.gasPrice=n(s.gasPrice),f.gasLimit=n(s.gasLimit),f.nonce=n(s.nonce),f.data=n(u),f.value=n(s.value),new h(f).serialize().toString("hex")}function a(e,t){var n=l.encode([new r(e,"hex"),t]),i=c.sha3(n).toString("hex");return i.slice(24)}function u(e,t){var r={};r.to=n(t.to),r.gasPrice=n(t.gasPrice),r.gasLimit=n(t.gasLimit),r.nonce=n(t.nonce),r.data=n(t.data),r.value=n(t.value);var i=a(e,t.nonce),o=new h(r);return{tx:o.serialize().toString("hex"),addr:i}}function f(e){var t={};t.to=n(e.to),t.gasPrice=n(e.gasPrice),t.gasLimit=n(e.gasLimit),t.nonce=n(e.nonce),t.value=n(e.value);var r=new h(t);return r.serialize().toString("hex")}var h=e("ethereumjs-tx"),c=e("ethereumjs-util"),d=e("web3/lib/solidity/coder"),l=c.rlp;t.exports={_encodeFunctionTxData:i,_getTypesFromAbi:o,functionTx:s,createdContractAddress:a,createContractTx:u,valueTx:f}}).call(this,e("buffer").Buffer)},{buffer:147,"ethereumjs-tx":213,"ethereumjs-util":214,"web3/lib/solidity/coder":302}],6:[function(e,t,r){(function(r){var n=e("crypto-js/aes"),i=e("crypto-js/pbkdf2"),o=e("crypto-js/sha3"),s=(e("ethereumjs-util"),e("./keystore")),a=(e("ethereumjs-tx"),e("elliptic").ec),u=(new a("secp256k1"),e("bitcore-lib"));u.crypto.Random,u.crypto.Hash,e("bitcore-mnemonic"),e("tweetnacl"),e("scrypt-async");legacyDecryptString=function(e,t){var i=n.decrypt(e.encStr,t,{iv:e.iv,salt:e.salt});return new r(i.toString(),"hex").toString()},legacyGenerateEncKey=function(e,t,r){var n=i(e,t,{keySize:16,iterations:150}).toString(),s=o(n).toString();if(r!==s)throw new Error("Invalid Password");return n},upgradeOldSerialized=function(e,t,r){var n=JSON.parse(e);if(void 0!==n.version&&1!==n.version)throw new Error("Keystore is not of correct version.");var i=legacyGenerateEncKey(t,n.salt,n.keyHash),o=legacyDecryptString(n.encSeed,i);s.deriveKeyFromPassword(t,function(e,t){var i=new s(o,t),a=n.hdIndex;i.generateNewAddress(t,a),r(null,i.serialize())})},t.exports.upgradeOldSerialized=upgradeOldSerialized}).call(this,e("buffer").Buffer)},{"./keystore":3,"bitcore-lib":9,"bitcore-mnemonic":88,buffer:147,"crypto-js/aes":175,"crypto-js/pbkdf2":182,"crypto-js/sha3":184,elliptic:197,"ethereumjs-tx":213,"ethereumjs-util":214,"scrypt-async":259,tweetnacl:293}],7:[function(e,t,r){function n(e,t){return l.isUndefined(t)?""+t:l.isNumber(t)&&!isFinite(t)?t.toString():l.isFunction(t)||l.isRegExp(t)?t.toString():t}function i(e,t){return l.isString(e)?e.length=0;o--)if(s[o]!=a[o])return!1;for(o=s.length-1;o>=0;o--)if(i=s[o],!u(e[i],t[i]))return!1;return!0}function c(e,t){return e&&t?"[object RegExp]"==Object.prototype.toString.call(t)?t.test(e):e instanceof t?!0:t.call({},e)===!0?!0:!1:!1}function d(e,t,r,n){var i;l.isString(r)&&(n=r,r=null);try{t()}catch(o){i=o}if(n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),e&&!i&&s(i,r,"Missing expected exception"+n),!e&&c(i,r)&&s(i,r,"Got unwanted exception"+n),e&&i&&r&&!c(i,r)||!e&&i)throw i}var l=e("util/"),p=Array.prototype.slice,g=Object.prototype.hasOwnProperty,m=t.exports=a;m.AssertionError=function(e){this.name="AssertionError",this.actual=e.actual,this.expected=e.expected,this.operator=e.operator,e.message?(this.message=e.message,this.generatedMessage=!1):(this.message=o(this),this.generatedMessage=!0);var t=e.stackStartFunction||s;if(Error.captureStackTrace)Error.captureStackTrace(this,t);else{var r=new Error;if(r.stack){var n=r.stack,i=t.name,a=n.indexOf("\n"+i);if(a>=0){var u=n.indexOf("\n",a+1);n=n.substring(u+1)}this.stack=n}}},l.inherits(m.AssertionError,Error),m.fail=s,m.ok=a,m.equal=function(e,t,r){e!=t&&s(e,t,r,"==",m.equal)},m.notEqual=function(e,t,r){e==t&&s(e,t,r,"!=",m.notEqual)},m.deepEqual=function(e,t,r){u(e,t)||s(e,t,r,"deepEqual",m.deepEqual)},m.notDeepEqual=function(e,t,r){u(e,t)&&s(e,t,r,"notDeepEqual",m.notDeepEqual)},m.strictEqual=function(e,t,r){e!==t&&s(e,t,r,"===",m.strictEqual)},m.notStrictEqual=function(e,t,r){e===t&&s(e,t,r,"!==",m.notStrictEqual)},m["throws"]=function(e,t,r){d.apply(this,[!0].concat(p.call(arguments)))},m.doesNotThrow=function(e,t){d.apply(this,[!1].concat(p.call(arguments)))},m.ifError=function(e){if(e)throw e};var b=Object.keys||function(e){var t=[];for(var r in e)g.call(e,r)&&t.push(r);return t}},{"util/":298}],8:[function(e,t,r){var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";!function(e){"use strict";function t(e){var t=e.charCodeAt(0);return t===s||t===c?62:t===a||t===d?63:u>t?-1:u+10>t?t-u+26+26:h+26>t?t-h:f+26>t?t-f+26:void 0}function r(e){function r(e){f[c++]=e}var n,i,s,a,u,f;if(e.length%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var h=e.length;u="="===e.charAt(h-2)?2:"="===e.charAt(h-1)?1:0,f=new o(3*e.length/4-u),s=u>0?e.length-4:e.length;var c=0;for(n=0,i=0;s>n;n+=4,i+=3)a=t(e.charAt(n))<<18|t(e.charAt(n+1))<<12|t(e.charAt(n+2))<<6|t(e.charAt(n+3)),r((16711680&a)>>16),r((65280&a)>>8),r(255&a);return 2===u?(a=t(e.charAt(n))<<2|t(e.charAt(n+1))>>4,r(255&a)):1===u&&(a=t(e.charAt(n))<<10|t(e.charAt(n+1))<<4|t(e.charAt(n+2))>>2,r(a>>8&255),r(255&a)),f}function i(e){function t(e){return n.charAt(e)}function r(e){return t(e>>18&63)+t(e>>12&63)+t(e>>6&63)+t(63&e)}var i,o,s,a=e.length%3,u="";for(i=0,s=e.length-a;s>i;i+=3)o=(e[i]<<16)+(e[i+1]<<8)+e[i+2],u+=r(o);switch(a){case 1:o=e[e.length-1],u+=t(o>>2),u+=t(o<<4&63),u+="==";break;case 2:o=(e[e.length-2]<<8)+e[e.length-1],u+=t(o>>10),u+=t(o>>4&63),u+=t(o<<2&63),u+="="}return u}var o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="+".charCodeAt(0),a="/".charCodeAt(0),u="0".charCodeAt(0),f="a".charCodeAt(0),h="A".charCodeAt(0),c="-".charCodeAt(0),d="_".charCodeAt(0);e.toByteArray=r,e.fromByteArray=i}("undefined"==typeof r?this.base64js={}:r)},{}],9:[function(e,t,r){(function(r,n){"use strict";var i=t.exports;i.version="v"+e("./package.json").version,i.versionGuard=function(e){if(void 0!==e){var t="More than one instance of bitcore-lib found. Please make sure to require bitcore-lib and check that submodules do not also include their own bitcore-lib dependency.";throw new Error(t)}},i.versionGuard(r._bitcore),r._bitcore=i.version,i.crypto={},i.crypto.BN=e("./lib/crypto/bn"),i.crypto.ECDSA=e("./lib/crypto/ecdsa"),i.crypto.Hash=e("./lib/crypto/hash"),i.crypto.Random=e("./lib/crypto/random"),i.crypto.Point=e("./lib/crypto/point"),i.crypto.Signature=e("./lib/crypto/signature"),i.encoding={},i.encoding.Base58=e("./lib/encoding/base58"),i.encoding.Base58Check=e("./lib/encoding/base58check"),i.encoding.BufferReader=e("./lib/encoding/bufferreader"),i.encoding.BufferWriter=e("./lib/encoding/bufferwriter"),i.encoding.Varint=e("./lib/encoding/varint"),i.util={},i.util.buffer=e("./lib/util/buffer"),i.util.js=e("./lib/util/js"),i.util.preconditions=e("./lib/util/preconditions"),i.errors=e("./lib/errors"),i.Address=e("./lib/address"),i.Block=e("./lib/block"),i.MerkleBlock=e("./lib/block/merkleblock"),i.BlockHeader=e("./lib/block/blockheader"),i.HDPrivateKey=e("./lib/hdprivatekey.js"),i.HDPublicKey=e("./lib/hdpublickey.js"),i.Networks=e("./lib/networks"),i.Opcode=e("./lib/opcode"),i.PrivateKey=e("./lib/privatekey"),i.PublicKey=e("./lib/publickey"),i.Script=e("./lib/script"),i.Transaction=e("./lib/transaction"),i.URI=e("./lib/uri"),i.Unit=e("./lib/unit"),i.deps={},i.deps.bnjs=e("bn.js"),i.deps.bs58=e("bs58"),i.deps.Buffer=n,i.deps.elliptic=e("elliptic"),i.deps._=e("lodash"),i._HDKeyCache=e("./lib/hdkeycache"),i.Transaction.sighash=e("./lib/transaction/sighash")}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{"./lib/address":10,"./lib/block":13,"./lib/block/blockheader":12,"./lib/block/merkleblock":14,"./lib/crypto/bn":15,"./lib/crypto/ecdsa":16,"./lib/crypto/hash":17,"./lib/crypto/point":18,"./lib/crypto/random":19,"./lib/crypto/signature":20,"./lib/encoding/base58":21,"./lib/encoding/base58check":22,"./lib/encoding/bufferreader":23,"./lib/encoding/bufferwriter":24,"./lib/encoding/varint":25,"./lib/errors":26,"./lib/hdkeycache":28,"./lib/hdprivatekey.js":29,"./lib/hdpublickey.js":30,"./lib/networks":31,"./lib/opcode":32,"./lib/privatekey":33,"./lib/publickey":34,"./lib/script":35,"./lib/transaction":38,"./lib/transaction/sighash":46,"./lib/unit":50,"./lib/uri":51,"./lib/util/buffer":52,"./lib/util/js":53,"./lib/util/preconditions":54,"./package.json":87,"bn.js":55,bs58:56,buffer:147,elliptic:58,lodash:80}],10:[function(e,t,r){(function(r){"use strict";function n(e,t,r){if(!(this instanceof n))return new n(e,t,r);if(i.isArray(e)&&i.isNumber(t))return n.createMultisig(e,t,r);if(e instanceof n)return e;if(o.checkArgument(e,"First argument is required, please include address data.","guide/address.html"),t&&!u.get(t))throw new TypeError('Second argument must be "livenet" or "testnet".');if(r&&r!==n.PayToPublicKeyHash&&r!==n.PayToScriptHash)throw new TypeError('Third argument must be "pubkeyhash" or "scripthash".');var s=this._classifyArguments(e,t,r);return s.network=s.network||u.get(t)||u.defaultNetwork,s.type=s.type||r||n.PayToPublicKeyHash,h.defineImmutable(this,{hashBuffer:s.hashBuffer,network:s.network,type:s.type}),this}var i=e("lodash"),o=e("./util/preconditions"),s=e("./errors"),a=e("./encoding/base58check"),u=e("./networks"),f=e("./crypto/hash"),h=e("./util/js"),c=e("./publickey");n.prototype._classifyArguments=function(e,t,o){if((e instanceof r||e instanceof Uint8Array)&&20===e.length)return n._transformHash(e);if((e instanceof r||e instanceof Uint8Array)&&21===e.length)return n._transformBuffer(e,t,o);if(e instanceof c)return n._transformPublicKey(e);if(e instanceof d)return n._transformScript(e,t);if("string"==typeof e)return n._transformString(e,t,o);if(i.isObject(e))return n._transformObject(e);throw new TypeError("First argument is an unrecognized data format.")},n.PayToPublicKeyHash="pubkeyhash",n.PayToScriptHash="scripthash",n._transformHash=function(e){var t={};if(!(e instanceof r||e instanceof Uint8Array))throw new TypeError("Address supplied is not a buffer.");if(20!==e.length)throw new TypeError("Address hashbuffers must be exactly 20 bytes.");return t.hashBuffer=e,t},n._transformObject=function(e){return o.checkArgument(e.hash||e.hashBuffer,"Must provide a `hash` or `hashBuffer` property"),o.checkArgument(e.type,"Must provide a `type` property"),{hashBuffer:e.hash?new r(e.hash,"hex"):e.hashBuffer,network:u.get(e.network)||u.defaultNetwork,type:e.type}},n._classifyFromVersion=function(e){var t={},r=u.get(e[0],"pubkeyhash"),i=u.get(e[0],"scripthash");return r?(t.network=r,t.type=n.PayToPublicKeyHash):i&&(t.network=i,t.type=n.PayToScriptHash),t},n._transformBuffer=function(e,t,i){var o={};if(!(e instanceof r||e instanceof Uint8Array))throw new TypeError("Address supplied is not a buffer.");if(21!==e.length)throw new TypeError("Address buffers must be exactly 21 bytes.");t=u.get(t);var s=n._classifyFromVersion(e);if(!s.network||t&&t!==s.network)throw new TypeError("Address has mismatched network type.");if(!s.type||i&&i!==s.type)throw new TypeError("Address has mismatched type.");return o.hashBuffer=e.slice(1),o.network=s.network,o.type=s.type,o},n._transformPublicKey=function(e){var t={};if(!(e instanceof c))throw new TypeError("Address must be an instance of PublicKey.");return t.hashBuffer=f.sha256ripemd160(e.toBuffer()),t.type=n.PayToPublicKeyHash,t},n._transformScript=function(e,t){o.checkArgument(e instanceof d,"script must be a Script instance");var r=e.getAddressInfo(t);if(!r)throw new s.Script.CantDeriveAddress(e);return r},n.createMultisig=function(e,t,r){return r=r||e[0].network||u.defaultNetwork,n.payingTo(d.buildMultisigOut(e,t),r)},n._transformString=function(e,t,r){if("string"!=typeof e)throw new TypeError("data parameter supplied is not a string.");e=e.trim();var i=a.decode(e),o=n._transformBuffer(i,t,r);return o},n.fromPublicKey=function(e,t){var r=n._transformPublicKey(e);return t=t||u.defaultNetwork,new n(r.hashBuffer,t,r.type)},n.fromPublicKeyHash=function(e,t){var r=n._transformHash(e);return new n(r.hashBuffer,t,n.PayToPublicKeyHash)},n.fromScriptHash=function(e,t){o.checkArgument(e,"hash parameter is required");var r=n._transformHash(e);return new n(r.hashBuffer,t,n.PayToScriptHash)},n.payingTo=function(e,t){return o.checkArgument(e,"script is required"),o.checkArgument(e instanceof d,"script must be instance of Script"),n.fromScriptHash(f.sha256ripemd160(e.toBuffer()),t)},n.fromScript=function(e,t){o.checkArgument(e instanceof d,"script must be a Script instance");var r=n._transformScript(e,t);return new n(r.hashBuffer,t,r.type)},n.fromBuffer=function(e,t,r){var i=n._transformBuffer(e,t,r);return new n(i.hashBuffer,i.network,i.type)},n.fromString=function(e,t,r){var i=n._transformString(e,t,r);return new n(i.hashBuffer,i.network,i.type)},n.fromObject=function(e){o.checkState(h.isHexa(e.hash),'Unexpected hash property, "'+e.hash+'", expected to be hex.');var t=new r(e.hash,"hex");return new n(t,e.network,e.type)},n.getValidationError=function(e,t,r){var i;try{new n(e,t,r)}catch(o){i=o}return i},n.isValid=function(e,t,r){return!n.getValidationError(e,t,r)},n.prototype.isPayToPublicKeyHash=function(){return this.type===n.PayToPublicKeyHash},n.prototype.isPayToScriptHash=function(){return this.type===n.PayToScriptHash},n.prototype.toBuffer=function(){var e=new r([this.network[this.type]]),t=r.concat([e,this.hashBuffer]);return t},n.prototype.toObject=n.prototype.toJSON=function(){return{hash:this.hashBuffer.toString("hex"),type:this.type,network:this.network.toString()}},n.prototype.toString=function(){return a.encode(this.toBuffer())},n.prototype.inspect=function(){return""},t.exports=n;var d=e("./script")}).call(this,e("buffer").Buffer)},{"./crypto/hash":17,"./encoding/base58check":22,"./errors":26,"./networks":31,"./publickey":34,"./script":35,"./util/js":53,"./util/preconditions":54,buffer:147,lodash:80}],11:[function(e,t,r){(function(r){"use strict";function n(e){return this instanceof n?(i.extend(this,n._from(e)),this):new n(e)}var i=e("lodash"),o=e("./blockheader"),s=e("../crypto/bn"),a=e("../util/buffer"),u=e("../encoding/bufferreader"),f=e("../encoding/bufferwriter"),h=e("../crypto/hash"),c=e("../transaction"),d=e("../util/preconditions");n.MAX_BLOCK_SIZE=1e6,n._from=function(e){var t={};if(a.isBuffer(e))t=n._fromBufferReader(u(e));else{if(!i.isObject(e))throw new TypeError("Unrecognized argument for Block");t=n._fromObject(e)}return t},n._fromObject=function(e){var t=[];e.transactions.forEach(function(e){e instanceof c?t.push(e):t.push(c().fromObject(e))});var r={header:o.fromObject(e.header),transactions:t};return r},n.fromObject=function(e){var t=n._fromObject(e);return new n(t)},n._fromBufferReader=function(e){var t={};d.checkState(!e.finished(),"No block data received"),t.header=o.fromBufferReader(e);var r=e.readVarintNum();t.transactions=[];for(var n=0;r>n;n++)t.transactions.push(c().fromBufferReader(e));return t},n.fromBufferReader=function(e){d.checkArgument(e,"br is required");var t=n._fromBufferReader(e);return new n(t)},n.fromBuffer=function(e){return n.fromBufferReader(new u(e))},n.fromString=function(e){var t=new r(e,"hex");return n.fromBuffer(t)},n.fromRawBlock=function(e){a.isBuffer(e)||(e=new r(e,"binary"));var t=u(e);t.pos=n.Values.START_OF_BLOCK;var i=n._fromBufferReader(t);return new n(i)},n.prototype.toObject=n.prototype.toJSON=function(){var e=[];return this.transactions.forEach(function(t){e.push(t.toObject())}),{header:this.header.toObject(),transactions:e}},n.prototype.toBuffer=function(){return this.toBufferWriter().concat()},n.prototype.toString=function(){return this.toBuffer().toString("hex")},n.prototype.toBufferWriter=function(e){e||(e=new f),e.write(this.header.toBuffer()),e.writeVarintNum(this.transactions.length);for(var t=0;t1;n=Math.floor((n+1)/2)){for(var i=0;n>i;i+=2){var o=Math.min(i+1,n-1),s=r.concat([e[t+i],e[t+o]]);e.push(h.sha256sha256(s))}t+=n}return e},n.prototype.getMerkleRoot=function(){var e=this.getMerkleTree();return e[e.length-1]},n.prototype.validMerkleRoot=function(){var e=new s(this.header.merkleRoot.toString("hex"),"hex"),t=new s(this.getMerkleRoot().toString("hex"),"hex");return 0!==e.cmp(t)?!1:!0},n.prototype._getHash=function(){return this.header._getHash()};var l={configurable:!1,enumerable:!0,get:function(){return this._id||(this._id=this.header.id),this._id},set:i.noop};Object.defineProperty(n.prototype,"id",l),Object.defineProperty(n.prototype,"hash",l),n.prototype.inspect=function(){return""},n.Values={START_OF_BLOCK:8,NULL_HASH:new r("0000000000000000000000000000000000000000000000000000000000000000","hex")},t.exports=n}).call(this,e("buffer").Buffer)},{"../crypto/bn":15,"../crypto/hash":17,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../transaction":38,"../util/buffer":52,"../util/preconditions":54,"./blockheader":12,buffer:147,lodash:80}],12:[function(e,t,r){(function(r){"use strict";var n=e("lodash"),i=e("../crypto/bn"),o=e("../util/buffer"),s=e("../encoding/bufferreader"),a=e("../encoding/bufferwriter"),u=e("../crypto/hash"),f=(e("../util/js"),e("../util/preconditions")),h=486604799,c=function l(e){if(!(this instanceof l))return new l(e);var t=l._from(e);return this.version=t.version,this.prevHash=t.prevHash,this.merkleRoot=t.merkleRoot,this.time=t.time,this.timestamp=t.time,this.bits=t.bits,this.nonce=t.nonce,t.hash&&f.checkState(this.hash===t.hash,"Argument object hash property does not match block hash."),this};c._from=function(e){var t={};if(o.isBuffer(e))t=c._fromBufferReader(s(e));else{if(!n.isObject(e))throw new TypeError("Unrecognized argument for BlockHeader");t=c._fromObject(e)}return t},c._fromObject=function(e){f.checkArgument(e,"data is required");var t=e.prevHash,i=e.merkleRoot;n.isString(e.prevHash)&&(t=o.reverse(new r(e.prevHash,"hex"))),n.isString(e.merkleRoot)&&(i=o.reverse(new r(e.merkleRoot,"hex")));var s={hash:e.hash,version:e.version,prevHash:t,merkleRoot:i, +time:e.time,timestamp:e.time,bits:e.bits,nonce:e.nonce};return s},c.fromObject=function(e){var t=c._fromObject(e);return new c(t)},c.fromRawBlock=function(e){o.isBuffer(e)||(e=new r(e,"binary"));var t=s(e);t.pos=c.Constants.START_OF_HEADER;var n=c._fromBufferReader(t);return new c(n)},c.fromBuffer=function(e){var t=c._fromBufferReader(s(e));return new c(t)},c.fromString=function(e){var t=new r(e,"hex");return c.fromBuffer(t)},c._fromBufferReader=function(e){var t={};return t.version=e.readUInt32LE(),t.prevHash=e.read(32),t.merkleRoot=e.read(32),t.time=e.readUInt32LE(),t.bits=e.readUInt32LE(),t.nonce=e.readUInt32LE(),t},c.fromBufferReader=function(e){var t=c._fromBufferReader(e);return new c(t)},c.prototype.toObject=c.prototype.toJSON=function(){return{hash:this.hash,version:this.version,prevHash:o.reverse(this.prevHash).toString("hex"),merkleRoot:o.reverse(this.merkleRoot).toString("hex"),time:this.time,bits:this.bits,nonce:this.nonce}},c.prototype.toBuffer=function(){return this.toBufferWriter().concat()},c.prototype.toString=function(){return this.toBuffer().toString("hex")},c.prototype.toBufferWriter=function(e){return e||(e=new a),e.writeUInt32LE(this.version),e.write(this.prevHash),e.write(this.merkleRoot),e.writeUInt32LE(this.time),e.writeUInt32LE(this.bits),e.writeUInt32LE(this.nonce),e},c.prototype.getTargetDifficulty=function(e){e=e||this.bits;for(var t=new i(16777215&e),r=8*((e>>>24)-3);r-- >0;)t=t.mul(new i(2));return t},c.prototype.getDifficulty=function(){var e=this.getTargetDifficulty(h).mul(new i(Math.pow(10,8))),t=this.getTargetDifficulty(),r=e.div(t).toString(10),n=r.length-8;return r=r.slice(0,n)+"."+r.slice(n),parseFloat(r)},c.prototype._getHash=function(){var e=this.toBuffer();return u.sha256sha256(e)};var d={configurable:!1,enumerable:!0,get:function(){return this._id||(this._id=s(this._getHash()).readReverse().toString("hex")),this._id},set:n.noop};Object.defineProperty(c.prototype,"id",d),Object.defineProperty(c.prototype,"hash",d),c.prototype.validTimestamp=function(){var e=Math.round((new Date).getTime()/1e3);return this.time>e+c.Constants.MAX_TIME_OFFSET?!1:!0},c.prototype.validProofOfWork=function(){var e=new i(this.id,"hex"),t=this.getTargetDifficulty();return e.cmp(t)>0?!1:!0},c.prototype.inspect=function(){return""},c.Constants={START_OF_HEADER:8,MAX_TIME_OFFSET:7200,LARGEST_HASH:new i("10000000000000000000000000000000000000000000000000000000000000000","hex")},t.exports=c}).call(this,e("buffer").Buffer)},{"../crypto/bn":15,"../crypto/hash":17,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,buffer:147,lodash:80}],13:[function(e,t,r){t.exports=e("./block"),t.exports.BlockHeader=e("./blockheader"),t.exports.MerkleBlock=e("./merkleblock")},{"./block":11,"./blockheader":12,"./merkleblock":14}],14:[function(e,t,r){(function(r){"use strict";function n(e){if(!(this instanceof n))return new n(e);var t={};if(s.isBuffer(e))t=n._fromBufferReader(a(e));else{if(!i.isObject(e))throw new TypeError("Unrecognized argument for MerkleBlock");var r;r=e.header instanceof o?e.header:o.fromObject(e.header),t={header:r,numTransactions:e.numTransactions,hashes:e.hashes,flags:e.flags}}return i.extend(this,t),this._flagBitsUsed=0,this._hashesUsed=0,this}var i=e("lodash"),o=e("./blockheader"),s=e("../util/buffer"),a=e("../encoding/bufferreader"),u=e("../encoding/bufferwriter"),f=e("../crypto/hash"),h=(e("../util/js"),e("../transaction")),c=e("../util/preconditions");n.fromBuffer=function(e){return n.fromBufferReader(a(e))},n.fromBufferReader=function(e){return new n(n._fromBufferReader(e))},n.prototype.toBuffer=function(){return this.toBufferWriter().concat()},n.prototype.toBufferWriter=function(e){e||(e=new u),e.write(this.header.toBuffer()),e.writeUInt32LE(this.numTransactions),e.writeVarintNum(this.hashes.length);for(var t=0;tthis.numTransactions)return!1;if(8*this.flags.length8*this.flags.length)return null;var i=this.flags[n.flagBitsUsed>>3]>>>(7&n.flagBitsUsed++)&1;if(0!==e&&i){var o=this._traverseMerkleTree(e-1,2*t,n),s=o;return 2*t+1=this.hashes.length)return null;var a=this.hashes[n.hashesUsed++];return 0===e&&i&&n.txs.push(a),new r(a,"hex")},n.prototype._calcTreeWidth=function(e){return this.numTransactions+(1<>e},n.prototype._calcTreeHeight=function(){for(var e=0;this._calcTreeWidth(e)>1;)e++;return e},n.prototype.hasTransaction=function(e){c.checkArgument(!i.isUndefined(e),"tx cannot be undefined"),c.checkArgument(e instanceof h||"string"==typeof e,'Invalid tx given, tx must be a "string" or "Transaction"');var t=e;e instanceof h&&(t=s.reverse(new r(e.id,"hex")).toString("hex"));var n=[],o=this._calcTreeHeight();return this._traverseMerkleTree(o,0,{txs:n}),-1!==n.indexOf(t)},n._fromBufferReader=function(e){c.checkState(!e.finished(),"No merkleblock data received");var t={};t.header=o.fromBufferReader(e),t.numTransactions=e.readUInt32LE();var r=e.readVarintNum();t.hashes=[];for(var n=0;r>n;n++)t.hashes.push(e.read(32).toString("hex"));var i=e.readVarintNum();for(t.flags=[],n=0;i>n;n++)t.flags.push(e.readUInt8());return t},n.fromObject=function(e){return new n(e)},t.exports=n}).call(this,e("buffer").Buffer)},{"../crypto/hash":17,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../transaction":38,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,"./blockheader":12,buffer:147,lodash:80}],15:[function(e,t,r){(function(r){"use strict";var n=e("bn.js"),i=e("../util/preconditions"),o=e("lodash"),s=function(e){for(var t=new r(e.length),n=0;ne.size?t=n.trim(t,o):o0&&0===(127&e[e.length-1])&&(e.length<=1||0===(128&e[e.length-2])))throw new Error("non-minimally encoded script number");return n.fromSM(e,{endian:"little"})},n.prototype.toScriptNumBuffer=function(){return this.toSM({endian:"little"})},n.prototype.gt=function(e){return this.cmp(e)>0},n.prototype.gte=function(e){return this.cmp(e)>=0},n.prototype.lt=function(e){return this.cmp(e)<0},n.trim=function(e,t){return e.slice(t-e.length,e.length)},n.pad=function(e,t,n){for(var i=new r(n),o=0;oo;o++)i[o]=0;return i},t.exports=n}).call(this,e("buffer").Buffer)},{"../util/preconditions":54,"bn.js":55,buffer:147,lodash:80}],16:[function(e,t,r){(function(r){"use strict";var n=e("./bn"),i=e("./point"),o=e("./signature"),s=e("../publickey"),a=e("./random"),u=e("./hash"),f=e("../util/buffer"),h=e("lodash"),c=e("../util/preconditions"),d=function l(e){return this instanceof l?void(e&&this.set(e)):new l(e)};d.prototype.set=function(e){return this.hashbuf=e.hashbuf||this.hashbuf,this.endian=e.endian||this.endian,this.privkey=e.privkey||this.privkey,this.pubkey=e.pubkey||(this.privkey?this.privkey.publicKey:this.pubkey),this.sig=e.sig||this.sig,this.k=e.k||this.k,this.verified=e.verified||this.verified,this},d.prototype.privkey2pubkey=function(){this.pubkey=this.privkey.toPublicKey()},d.prototype.calci=function(){for(var e=0;4>e;e++){this.sig.i=e;var t;try{t=this.toPublicKey()}catch(r){console.error(r);continue}if(t.point.eq(this.pubkey.point))return this.sig.compressed=this.pubkey.compressed,this}throw this.sig.i=void 0,new Error("Unable to find valid recovery factor")},d.fromString=function(e){var t=JSON.parse(e);return new d(t)},d.prototype.randomK=function(){var e,t=i.getN();do e=n.fromBuffer(a.getRandomBuffer(32));while(!e.lt(t)||!e.gt(n.Zero));return this.k=e,this},d.prototype.deterministicK=function(e){h.isUndefined(e)&&(e=0);var t=new r(32);t.fill(1);var o=new r(32);o.fill(0);var s=this.privkey.bn.toBuffer({size:32});o=u.sha256hmac(r.concat([t,new r([0]),s,this.hashbuf]),o),t=u.sha256hmac(t,o),o=u.sha256hmac(r.concat([t,new r([1]),s,this.hashbuf]),o),t=u.sha256hmac(t,o),t=u.sha256hmac(t,o);for(var a=n.fromBuffer(t),f=i.getN(),c=0;e>c||!a.lt(f)||!a.gt(n.Zero);c++)o=u.sha256hmac(r.concat([t,new r([0])]),o),t=u.sha256hmac(t,o),t=u.sha256hmac(t,o),a=n.fromBuffer(t);return this.k=a,this},d.prototype.toPublicKey=function(){var e=this.sig.i;c.checkArgument(0===e||1===e||2===e||3===e,new Error("i must be equal to 0, 1, 2, or 3"));var t=n.fromBuffer(this.hashbuf),r=this.sig.r,o=this.sig.s,a=1&e,u=e>>1,f=i.getN(),h=i.getG(),d=u?r.add(f):r,l=i.fromX(a,d),p=l.mul(f);if(!p.isInfinity())throw new Error("nR is not a valid curve point");var g=t.neg().mod(f),m=r.invm(f),b=l.mul(o).add(h.mul(g)).mul(m),v=s.fromPoint(b,this.sig.compressed);return v},d.prototype.sigError=function(){if(!f.isBuffer(this.hashbuf)||32!==this.hashbuf.length)return"hashbuf must be a 32 byte buffer";var e=this.sig.r,t=this.sig.s;if(!(e.gt(n.Zero)&&e.lt(i.getN())&&t.gt(n.Zero)&&t.lt(i.getN())))return"r and s not in range";var r=n.fromBuffer(this.hashbuf,this.endian?{endian:this.endian}:void 0),o=i.getN(),s=t.invm(o),a=s.mul(r).mod(o),u=s.mul(e).mod(o),h=i.getG().mulAdd(a,this.pubkey.point,u);return h.isInfinity()?"p is infinity":0!==h.getX().mod(o).cmp(e)?"Invalid signature":!1},d.toLowS=function(e){return e.gt(n.fromBuffer(new r("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0","hex")))&&(e=i.getN().sub(e)),e},d.prototype._findSignature=function(e,t){var r,o,s,a,u=i.getN(),f=i.getG(),h=0;do(!this.k||h>0)&&this.deterministicK(h),h++,r=this.k,o=f.mul(r),s=o.x.mod(u),a=r.invm(u).mul(t.add(e.mul(s))).mod(u);while(s.cmp(n.Zero)<=0||a.cmp(n.Zero)<=0);return a=d.toLowS(a),{s:a,r:s}},d.prototype.sign=function(){var e=this.hashbuf,t=this.privkey,r=t.bn;c.checkState(e&&t&&r,new Error("invalid parameters")),c.checkState(f.isBuffer(e)&&32===e.length,new Error("hashbuf must be a 32 byte buffer"));var i=n.fromBuffer(e,this.endian?{endian:this.endian}:void 0),s=this._findSignature(r,i);return s.compressed=this.pubkey.compressed,this.sig=new o(s),this},d.prototype.signRandomK=function(){return this.randomK(),this.sign()},d.prototype.toString=function(){var e={};return this.hashbuf&&(e.hashbuf=this.hashbuf.toString("hex")),this.privkey&&(e.privkey=this.privkey.toString()),this.pubkey&&(e.pubkey=this.pubkey.toString()),this.sig&&(e.sig=this.sig.toString()),this.k&&(e.k=this.k.toString()),JSON.stringify(e)},d.prototype.verify=function(){return this.sigError()?this.verified=!1:this.verified=!0,this},d.sign=function(e,t,r){return d().set({hashbuf:e,endian:r,privkey:t}).sign().sig},d.verify=function(e,t,r,n){return d().set({hashbuf:e,endian:n,sig:t,pubkey:r}).verify().verified},t.exports=d}).call(this,e("buffer").Buffer)},{"../publickey":34,"../util/buffer":52,"../util/preconditions":54,"./bn":15,"./hash":17,"./point":18,"./random":19,"./signature":20,buffer:147,lodash:80}],17:[function(e,t,r){(function(r){"use strict";var n=e("sha512"),i=e("crypto"),o=e("../util/buffer"),s=e("../util/preconditions"),a=t.exports;a.sha1=function(e){return s.checkArgument(o.isBuffer(e)),i.createHash("sha1").update(e).digest()},a.sha1.blocksize=512,a.sha256=function(e){return s.checkArgument(o.isBuffer(e)),i.createHash("sha256").update(e).digest()},a.sha256.blocksize=512,a.sha256sha256=function(e){return s.checkArgument(o.isBuffer(e)),a.sha256(a.sha256(e))},a.ripemd160=function(e){return s.checkArgument(o.isBuffer(e)),i.createHash("ripemd160").update(e).digest()},a.sha256ripemd160=function(e){return s.checkArgument(o.isBuffer(e)),a.ripemd160(a.sha256(e))},a.sha512=function(e){s.checkArgument(o.isBuffer(e));var t=n(e);return new r(t)},a.sha512.blocksize=1024,a.hmac=function(e,t,n){s.checkArgument(o.isBuffer(t)),s.checkArgument(o.isBuffer(n)),s.checkArgument(e.blocksize);var i=e.blocksize/8;if(n.length>i)n=e(n);else if(i>n){var a=new r(i);a.fill(0),n.copy(a),n=a}var u=new r(i);u.fill(92);var f=new r(i);f.fill(54);for(var h=new r(i),c=new r(i),d=0;i>d;d++)h[d]=u[d]^n[d],c[d]=f[d]^n[d];return e(r.concat([h,e(r.concat([c,t]))]))},a.sha256hmac=function(e,t){return a.hmac(a.sha256,e,t)},a.sha512hmac=function(e,t){return a.hmac(a.sha512,e,t)}}).call(this,e("buffer").Buffer)},{"../util/buffer":52,"../util/preconditions":54,buffer:147,crypto:174,sha512:83}],18:[function(e,t,r){(function(r){"use strict";var n=e("./bn"),i=e("../util/buffer"),o=e("elliptic").curves.secp256k1,s=o.curve.point.bind(o.curve),a=o.curve.pointFromX.bind(o.curve),u=function(e,t,r){var n=s(e,t,r);return n.validate(),n};u.prototype=Object.getPrototypeOf(o.curve.point()),u.fromX=function(e,t){var r=a(e,t);return r.validate(),r},u.getG=function(){return o.curve.g},u.getN=function(){return new n(o.curve.n.toArray())},u.prototype._getX=u.prototype.getX,u.prototype.getX=function(){return new n(this._getX().toArray())},u.prototype._getY=u.prototype.getY,u.prototype.getY=function(){return new n(this._getY().toArray())},u.prototype.validate=function(){if(this.isInfinity())throw new Error("Point cannot be equal to Infinity");if(0===this.getX().cmp(n.Zero)||0===this.getY().cmp(n.Zero))throw new Error("Invalid x,y value for curve, cannot equal 0.");var e=a(this.getY().isOdd(),this.getX());if(0!==e.y.cmp(this.y))throw new Error("Invalid y value for curve.");var t=this.getX().gt(n.Minus1)&&this.getX().lt(u.getN()),r=this.getY().gt(n.Minus1)&&this.getY().lt(u.getN());if(!t||!r)throw new Error("Point does not lie on the curve");if(!this.mul(u.getN()).isInfinity())throw new Error("Point times N must be infinity");return this},u.pointToCompressed=function(e){var t,n=e.getX().toBuffer({size:32}),o=e.getY().toBuffer({size:32}),s=o[o.length-1]%2;return t=new r(s?[3]:[2]),i.concat([t,n])},t.exports=u}).call(this,e("buffer").Buffer)},{"../util/buffer":52,"./bn":15,buffer:147,elliptic:58}],19:[function(e,t,r){(function(r,n){"use strict";function i(){}i.getRandomBuffer=function(e){return r.browser?i.getRandomBufferBrowser(e):i.getRandomBufferNode(e)},i.getRandomBufferNode=function(t){var r=e("crypto");return r.randomBytes(t)},i.getRandomBufferBrowser=function(e){if(!window.crypto&&!window.msCrypto)throw new Error("window.crypto not available");if(window.crypto&&window.crypto.getRandomValues)var t=window.crypto;else{if(!window.msCrypto||!window.msCrypto.getRandomValues)throw new Error("window.crypto.getRandomValues not available");var t=window.msCrypto}var r=new Uint8Array(e);t.getRandomValues(r);var i=new n(r);return i},i.getPseudoRandomBuffer=function(e){for(var t,r=4294967296,i=new n(e),o=0;e>=o;o++){var s=Math.floor(o/4),a=o-4*s;0===a?(t=Math.random()*r,i[o]=255&t):i[o]=255&(t>>>=8)}return i},t.exports=i}).call(this,e("_process"),e("buffer").Buffer)},{_process:235,buffer:147,crypto:174}],20:[function(e,t,r){(function(r){"use strict";var n=e("./bn"),i=e("lodash"),o=e("../util/preconditions"),s=e("../util/buffer"),a=e("../util/js"),u=function f(e,t){if(!(this instanceof f))return new f(e,t);if(e instanceof n)this.set({r:e,s:t});else if(e){var r=e;this.set(r)}};u.prototype.set=function(e){return this.r=e.r||this.r||void 0,this.s=e.s||this.s||void 0,this.i="undefined"!=typeof e.i?e.i:this.i,this.compressed="undefined"!=typeof e.compressed?e.compressed:this.compressed,this.nhashtype=e.nhashtype||this.nhashtype||void 0,this},u.fromCompact=function(e){o.checkArgument(s.isBuffer(e),"Argument is expected to be a Buffer");var t=new u,r=!0,i=e.slice(0,1)[0]-27-4;0>i&&(r=!1,i+=4);var a=e.slice(1,33),f=e.slice(33,65);return o.checkArgument(0===i||1===i||2===i||3===i,new Error("i must be 0, 1, 2, or 3")),o.checkArgument(32===a.length,new Error("r must be 32 bytes")),o.checkArgument(32===f.length,new Error("s must be 32 bytes")),t.compressed=r,t.i=i,t.r=n.fromBuffer(a),t.s=n.fromBuffer(f),t},u.fromDER=u.fromBuffer=function(e,t){var r=u.parseDER(e,t),n=new u;return n.r=r.r,n.s=r.s,n},u.fromTxFormat=function(e){var t=e.readUInt8(e.length-1),r=e.slice(0,e.length-1),n=new u.fromDER(r,!1);return n.nhashtype=t,n},u.fromString=function(e){var t=new r(e,"hex");return u.fromDER(t)},u.parseDER=function(e,t){o.checkArgument(s.isBuffer(e),new Error("DER formatted signature should be a buffer")),i.isUndefined(t)&&(t=!0);var r=e[0];o.checkArgument(48===r,new Error("Header byte should be 0x30"));var a=e[1],u=e.slice(2).length;o.checkArgument(!t||a===u,new Error("Length byte should length of what follows")),a=u>a?a:u;var f=e[2];o.checkArgument(2===f,new Error("Integer byte for r should be 0x02"));var h=e[3],c=e.slice(4,4+h),d=n.fromBuffer(c),l=0===e[4]?!0:!1;o.checkArgument(h===c.length,new Error("Length of r incorrect"));var p=e[4+h+0];o.checkArgument(2===p,new Error("Integer byte for s should be 0x02"));var g=e[4+h+1],m=e.slice(4+h+2,4+h+2+g),b=n.fromBuffer(m),v=0===e[4+h+2+2]?!0:!1;o.checkArgument(g===m.length,new Error("Length of s incorrect"));var y=4+h+2+g;o.checkArgument(a===y-2,new Error("Length of signature incorrect"));var w={header:r,length:a,rheader:f,rlength:h,rneg:l,rbuf:c,r:d,sheader:p,slength:g,sneg:v,sbuf:m,s:b};return w},u.prototype.toCompact=function(e,t){if(e="number"==typeof e?e:this.i,t="boolean"==typeof t?t:this.compressed,0!==e&&1!==e&&2!==e&&3!==e)throw new Error("i must be equal to 0, 1, 2, or 3");var n=e+27+4;t===!1&&(n-=4);var i=new r([n]),o=this.r.toBuffer({size:32}),s=this.s.toBuffer({size:32});return r.concat([i,o,s])},u.prototype.toBuffer=u.prototype.toDER=function(){var e=this.r.toBuffer(),t=this.s.toBuffer(),n=128&e[0]?!0:!1,i=128&t[0]?!0:!1,o=n?r.concat([new r([0]),e]):e,s=i?r.concat([new r([0]),t]):t,a=o.length,u=s.length,f=2+a+2+u,h=2,c=2,d=48,l=r.concat([new r([d,f,h,a]),o,new r([c,u]),s]);return l},u.prototype.toString=function(){var e=this.toDER();return e.toString("hex")},u.isTxDER=function(e){if(e.length<9)return!1;if(e.length>73)return!1;if(48!==e[0])return!1;if(e[1]!==e.length-3)return!1;var t=e[3];if(5+t>=e.length)return!1;var r=e[5+t];if(t+r+7!==e.length)return!1;var n=e.slice(4);if(2!==e[2])return!1;if(0===t)return!1;if(128&n[0])return!1;if(t>1&&0===n[0]&&!(128&n[1]))return!1;var i=e.slice(6+t);return 2!==e[6+t-2]?!1:0===r?!1:128&i[0]?!1:r>1&&0===i[0]&&!(128&i[1])?!1:!0},u.prototype.hasLowS=function(){return this.s.lt(new n(1))||this.s.gt(new n("7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0","hex"))?!1:!0},u.prototype.hasDefinedHashtype=function(){if(!a.isNaturalNumber(this.nhashtype))return!1;var e=this.nhashtype&~u.SIGHASH_ANYONECANPAY;return eu.SIGHASH_SINGLE?!1:!0},u.prototype.toTxFormat=function(){var e=this.toDER(),t=new r(1);return t.writeUInt8(this.nhashtype,0),r.concat([e,t])},u.SIGHASH_ALL=1,u.SIGHASH_NONE=2,u.SIGHASH_SINGLE=3,u.SIGHASH_ANYONECANPAY=128,t.exports=u}).call(this,e("buffer").Buffer)},{"../util/buffer":52,"../util/js":53,"../util/preconditions":54,"./bn":15,buffer:147,lodash:80}],21:[function(e,t,r){(function(r){"use strict";var n=e("lodash"),i=e("bs58"),o=e("buffer"),s="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz".split(""),a=function u(e){if(!(this instanceof u))return new u(e);if(r.isBuffer(e)){var t=e;this.fromBuffer(t)}else if("string"==typeof e){var n=e;this.fromString(n)}else e&&this.set(e)};a.validCharacters=function(e){return o.Buffer.isBuffer(e)&&(e=e.toString()),n.all(n.map(e,function(e){return n.contains(s,e)}))},a.prototype.set=function(e){return this.buf=e.buf||this.buf||void 0,this},a.encode=function(e){if(!o.Buffer.isBuffer(e))throw new Error("Input should be a buffer");return i.encode(e)},a.decode=function(e){if("string"!=typeof e)throw new Error("Input should be a string");return new r(i.decode(e))},a.prototype.fromBuffer=function(e){return this.buf=e,this},a.prototype.fromString=function(e){var t=a.decode(e);return this.buf=t,this},a.prototype.toBuffer=function(){return this.buf},a.prototype.toString=function(){return a.encode(this.buf)},t.exports=a}).call(this,e("buffer").Buffer)},{bs58:56,buffer:147,lodash:80}],22:[function(e,t,r){(function(r){"use strict";var n=e("lodash"),i=e("./base58"),o=e("buffer"),s=e("../crypto/hash").sha256sha256,a=function u(e){if(!(this instanceof u))return new u(e);if(r.isBuffer(e)){var t=e;this.fromBuffer(t)}else if("string"==typeof e){var n=e;this.fromString(n)}else e&&this.set(e)};a.prototype.set=function(e){return this.buf=e.buf||this.buf||void 0,this},a.validChecksum=function(e,t){return n.isString(e)&&(e=new o.Buffer(i.decode(e))),n.isString(t)&&(t=new o.Buffer(i.decode(t))),t||(t=e.slice(-4),e=e.slice(0,-4)),a.checksum(e).toString("hex")===t.toString("hex")},a.decode=function(e){if("string"!=typeof e)throw new Error("Input must be a string");var t=new r(i.decode(e));if(t.length<4)throw new Error("Input string too short");var n=t.slice(0,-4),o=t.slice(-4),a=s(n),u=a.slice(0,4);if(o.toString("hex")!==u.toString("hex"))throw new Error("Checksum mismatch");return n},a.checksum=function(e){return s(e).slice(0,4)},a.encode=function(e){if(!r.isBuffer(e))throw new Error("Input must be a buffer");var t=new r(e.length+4),n=a.checksum(e);return e.copy(t),n.copy(t,e.length),i.encode(t)},a.prototype.fromBuffer=function(e){return this.buf=e,this},a.prototype.fromString=function(e){var t=a.decode(e);return this.buf=t,this},a.prototype.toBuffer=function(){return this.buf},a.prototype.toString=function(){return a.encode(this.buf)},t.exports=a}).call(this,e("buffer").Buffer)},{"../crypto/hash":17,"./base58":21,buffer:147,lodash:80}],23:[function(e,t,r){(function(r){"use strict";var n=e("lodash"),i=e("../util/preconditions"),o=e("../util/buffer"),s=e("../crypto/bn"),a=function u(e){if(!(this instanceof u))return new u(e);if(!n.isUndefined(e))if(r.isBuffer(e))this.set({buf:e});else if(n.isString(e))this.set({buf:new r(e,"hex")});else{if(!n.isObject(e))throw new TypeError("Unrecognized argument for BufferReader");var t=e;this.set(t)}};a.prototype.set=function(e){return this.buf=e.buf||this.buf||void 0,this.pos=e.pos||this.pos||0,this},a.prototype.eof=function(){return this.pos>=this.buf.length},a.prototype.finished=a.prototype.eof,a.prototype.read=function(e){i.checkArgument(!n.isUndefined(e),"Must specify a length");var t=this.buf.slice(this.pos,this.pos+e);return this.pos=this.pos+e,t},a.prototype.readAll=function(){var e=this.buf.slice(this.pos,this.buf.length);return this.pos=this.buf.length,e},a.prototype.readUInt8=function(){var e=this.buf.readUInt8(this.pos);return this.pos=this.pos+1,e},a.prototype.readUInt16BE=function(){var e=this.buf.readUInt16BE(this.pos);return this.pos=this.pos+2,e},a.prototype.readUInt16LE=function(){var e=this.buf.readUInt16LE(this.pos);return this.pos=this.pos+2,e},a.prototype.readUInt32BE=function(){var e=this.buf.readUInt32BE(this.pos);return this.pos=this.pos+4,e},a.prototype.readUInt32LE=function(){var e=this.buf.readUInt32LE(this.pos);return this.pos=this.pos+4,e},a.prototype.readUInt64BEBN=function(){var e=this.buf.slice(this.pos,this.pos+8),t=s.fromBuffer(e);return this.pos=this.pos+8,t},a.prototype.readUInt64LEBN=function(){var e,t=this.buf.readUInt32LE(this.pos),r=this.buf.readUInt32LE(this.pos+4),n=4294967296*r+t;if(9007199254740991>=n)e=new s(n);else{var i=Array.prototype.slice.call(this.buf,this.pos,this.pos+8);e=new s(i,10,"le")}return this.pos=this.pos+8,e},a.prototype.readVarintNum=function(){var e=this.readUInt8();switch(e){case 253:return this.readUInt16LE();case 254:return this.readUInt32LE();case 255:var t=this.readUInt64LEBN(),r=t.toNumber();if(r<=Math.pow(2,53))return r;throw new Error("number too large to retain precision - use readVarintBN");default:return e}},a.prototype.readVarLengthBuffer=function(){var e=this.readVarintNum(),t=this.read(e);return i.checkState(t.length===e,"Invalid length while reading varlength buffer. Expected to read: "+e+" and read "+t.length),t},a.prototype.readVarintBuf=function(){var e=this.buf.readUInt8(this.pos);switch(e){case 253:return this.read(3);case 254:return this.read(5);case 255:return this.read(9);default:return this.read(1)}},a.prototype.readVarintBN=function(){var e=this.readUInt8();switch(e){case 253:return new s(this.readUInt16LE());case 254:return new s(this.readUInt32LE());case 255:return this.readUInt64LEBN();default:return new s(e)}},a.prototype.reverse=function(){for(var e=new r(this.buf.length),t=0;te?(t=new r(1),t.writeUInt8(e,0)):65536>e?(t=new r(3),t.writeUInt8(253,0),t.writeUInt16LE(e,1)):4294967296>e?(t=new r(5),t.writeUInt8(254,0),t.writeUInt32LE(e,1)):(t=new r(9),t.writeUInt8(255,0),t.writeInt32LE(-1&e,1),t.writeUInt32LE(Math.floor(e/4294967296),5)),t},o.varintBufBN=function(e){var t=void 0,n=e.toNumber();if(253>n)t=new r(1),t.writeUInt8(n,0);else if(65536>n)t=new r(3),t.writeUInt8(253,0),t.writeUInt16LE(n,1);else if(4294967296>n)t=new r(5),t.writeUInt8(254,0),t.writeUInt32LE(n,1);else{var i=new o;i.writeUInt8(255),i.writeUInt64LEBN(e);var t=i.concat()}return t},t.exports=o}).call(this,e("buffer").Buffer)},{"../util/buffer":52,assert:7,buffer:147}],25:[function(e,t,r){(function(r){"use strict";var n=e("./bufferwriter"),i=e("./bufferreader"),o=e("../crypto/bn"),s=function a(e){if(!(this instanceof a))return new a(e);if(r.isBuffer(e))this.buf=e;else if("number"==typeof e){var t=e;this.fromNumber(t)}else if(e instanceof o){var n=e;this.fromBN(n)}else if(e){var i=e;this.set(i)}};s.prototype.set=function(e){return this.buf=e.buf||this.buf,this},s.prototype.fromString=function(e){return this.set({buf:new r(e,"hex")}),this},s.prototype.toString=function(){return this.buf.toString("hex")},s.prototype.fromBuffer=function(e){return this.buf=e,this},s.prototype.fromBufferReader=function(e){return this.buf=e.readVarintBuf(),this},s.prototype.fromBN=function(e){return this.buf=n().writeVarintBN(e).concat(),this},s.prototype.fromNumber=function(e){return this.buf=n().writeVarintNum(e).concat(),this},s.prototype.toBuffer=function(){return this.buf},s.prototype.toBN=function(){return i(this.buf).readVarintBN()},s.prototype.toNumber=function(){return i(this.buf).readVarintNum()},t.exports=s}).call(this,e("buffer").Buffer)},{"../crypto/bn":15,"./bufferreader":23,"./bufferwriter":24,buffer:147}],26:[function(e,t,r){"use strict";function n(e,t){return e.replace("{0}",t[0]).replace("{1}",t[1]).replace("{2}",t[2])}var i=e("lodash"),o=function(e,t){var r=function(){if(i.isString(t.message))this.message=n(t.message,arguments);else{if(!i.isFunction(t.message))throw new Error("Invalid error definition for "+t.name);this.message=t.message.apply(null,arguments)}this.stack=this.message+"\n"+(new Error).stack};return r.prototype=Object.create(e.prototype),r.prototype.name=e.prototype.name+t.name,e[t.name]=r,t.errors&&s(r,t.errors),r},s=function(e,t){i.each(t,function(t){o(e,t)})},a=function(e,t){return s(e,t),e},u={};u.Error=function(){this.message="Internal error",this.stack=this.message+"\n"+(new Error).stack},u.Error.prototype=Object.create(Error.prototype),u.Error.prototype.name="bitcore.Error";var f=e("./spec");a(u.Error,f),t.exports=u.Error,t.exports.extend=function(e){return o(u.Error,e)}},{"./spec":27,lodash:80}],27:[function(e,t,r){"use strict";var n="http://bitcore.io/";t.exports=[{name:"InvalidB58Char",message:"Invalid Base58 character: {0} in {1}"},{name:"InvalidB58Checksum",message:"Invalid Base58 checksum for {0}"},{name:"InvalidNetwork",message:"Invalid version for network: got {0}"},{name:"InvalidState",message:"Invalid state: {0}"},{name:"NotImplemented",message:"Function {0} was not implemented yet"},{name:"InvalidNetworkArgument",message:'Invalid network: must be "livenet" or "testnet", got {0}'},{name:"InvalidArgument",message:function(){return"Invalid Argument"+(arguments[0]?": "+arguments[0]:"")+(arguments[1]?" Documentation: "+n+arguments[1]:"")}},{name:"AbstractMethodInvoked",message:"Abstract Method Invocation: {0}"},{name:"InvalidArgumentType",message:function(){return"Invalid Argument for "+arguments[2]+", expected "+arguments[1]+" but got "+typeof arguments[0]}},{name:"Unit",message:"Internal Error on Unit {0}",errors:[{name:"UnknownCode",message:"Unrecognized unit code: {0}"},{name:"InvalidRate",message:"Invalid exchange rate: {0}"}]},{name:"Transaction",message:"Internal Error on Transaction {0}", +errors:[{name:"Input",message:"Internal Error on Input {0}",errors:[{name:"MissingScript",message:"Need a script to create an input"},{name:"UnsupportedScript",message:"Unsupported input script type: {0}"},{name:"MissingPreviousOutput",message:"No previous output information."}]},{name:"NeedMoreInfo",message:"{0}"},{name:"InvalidSorting",message:"The sorting function provided did not return the change output as one of the array elements"},{name:"InvalidOutputAmountSum",message:"{0}"},{name:"MissingSignatures",message:"Some inputs have not been fully signed"},{name:"InvalidIndex",message:"Invalid index: {0} is not between 0, {1}"},{name:"UnableToVerifySignature",message:"Unable to verify signature: {0}"},{name:"DustOutputs",message:"Dust amount detected in one output"},{name:"InvalidSatoshis",message:"Output satoshis are invalid"},{name:"FeeError",message:"Internal Error on Fee {0}",errors:[{name:"TooSmall",message:"Fee is too small: {0}"},{name:"TooLarge",message:"Fee is too large: {0}"},{name:"Different",message:"Unspent value is different from specified fee: {0}"}]},{name:"ChangeAddressMissing",message:"Change address is missing"},{name:"BlockHeightTooHigh",message:"Block Height can be at most 2^32 -1"},{name:"NLockTimeOutOfRange",message:"Block Height can only be between 0 and 499 999 999"},{name:"LockTimeTooEarly",message:"Lock Time can't be earlier than UNIX date 500 000 000"}]},{name:"Script",message:"Internal Error on Script {0}",errors:[{name:"UnrecognizedAddress",message:"Expected argument {0} to be an address"},{name:"CantDeriveAddress",message:"Can't derive address associated with script {0}, needs to be p2pkh in, p2pkh out, p2sh in, or p2sh out."},{name:"InvalidBuffer",message:"Invalid script buffer: can't parse valid script from given buffer {0}"}]},{name:"HDPrivateKey",message:"Internal Error on HDPrivateKey {0}",errors:[{name:"InvalidDerivationArgument",message:"Invalid derivation argument {0}, expected string, or number and boolean"},{name:"InvalidEntropyArgument",message:"Invalid entropy: must be an hexa string or binary buffer, got {0}",errors:[{name:"TooMuchEntropy",message:'Invalid entropy: more than 512 bits is non standard, got "{0}"'},{name:"NotEnoughEntropy",message:'Invalid entropy: at least 128 bits needed, got "{0}"'}]},{name:"InvalidLength",message:"Invalid length for xprivkey string in {0}"},{name:"InvalidPath",message:"Invalid derivation path: {0}"},{name:"UnrecognizedArgument",message:'Invalid argument: creating a HDPrivateKey requires a string, buffer, json or object, got "{0}"'}]},{name:"HDPublicKey",message:"Internal Error on HDPublicKey {0}",errors:[{name:"ArgumentIsPrivateExtended",message:"Argument is an extended private key: {0}"},{name:"InvalidDerivationArgument",message:"Invalid derivation argument: got {0}"},{name:"InvalidLength",message:'Invalid length for xpubkey: got "{0}"'},{name:"InvalidPath",message:'Invalid derivation path, it should look like: "m/1/100", got "{0}"'},{name:"InvalidIndexCantDeriveHardened",message:"Invalid argument: creating a hardened path requires an HDPrivateKey"},{name:"MustSupplyArgument",message:"Must supply an argument to create a HDPublicKey"},{name:"UnrecognizedArgument",message:"Invalid argument for creation, must be string, json, buffer, or object"}]}]},{}],28:[function(e,t,r){"use strict";t.exports={_cache:{},_count:0,_eraseIndex:0,_usedList:{},_usedIndex:{},_CACHE_SIZE:5e3,get:function(e,t,r){r=!!r;var n=e+"/"+t+"/"+r;return this._cache[n]?(this._cacheHit(n),this._cache[n]):void 0},set:function(e,t,r,n){r=!!r;var i=e+"/"+t+"/"+r;this._cache[i]=n,this._cacheHit(i)},_cacheHit:function(e){this._usedIndex[e]&&delete this._usedList[this._usedIndex[e]],this._usedList[this._count]=e,this._usedIndex[e]=this._count,this._count++,this._cacheRemove()},_cacheRemove:function(){for(;this._eraseIndex=0&&e=n.Hardened?!0:t,eA*S)throw new v.InvalidEntropyArgument.TooMuchEntropy(e);var i=c.sha512hmac(e,new o.Buffer("Bitcoin seed"));return new n({network:d.get(t)||d.defaultNetwork,depth:0,parentFingerPrint:0,childIndex:0,privateKey:i.slice(0,32),chainCode:i.slice(32,64)})},n.prototype._calcHDPublicKey=function(){if(!this._hdPublicKey){var t=e("./hdpublickey");this._hdPublicKey=new t(this)}},n.prototype._buildFromBuffers=function(e){n._validateBufferArguments(e),w.defineImmutable(this,{_buffers:e});var t=[e.version,e.depth,e.parentFingerPrint,e.childIndex,e.chainCode,y.emptyBuffer(1),e.privateKey],i=o.Buffer.concat(t);if(e.checksum&&e.checksum.length){if(e.checksum.toString()!==h.checksum(i).toString())throw new b.InvalidB58Checksum(i)}else e.checksum=h.checksum(i);var s,a=d.get(y.integerFromBuffer(e.version));s=h.encode(o.Buffer.concat(t)),e.xprivkey=new r(s);var f=new g(u.fromBuffer(e.privateKey),a),l=f.toPublicKey(),p=n.ParentFingerPrintSize,m=c.sha256ripemd160(l.toBuffer()).slice(0,p);return w.defineImmutable(this,{xprivkey:s,network:a,depth:y.integerFromSingleByteBuffer(e.depth),privateKey:f,publicKey:l,fingerPrint:m}),this._hdPublicKey=null,Object.defineProperty(this,"hdPublicKey",{configurable:!1,enumerable:!0,get:function(){return this._calcHDPublicKey(),this._hdPublicKey}}),Object.defineProperty(this,"xpubkey",{configurable:!1,enumerable:!0,get:function(){return this._calcHDPublicKey(),this._hdPublicKey.xpubkey}}),this},n._validateBufferArguments=function(e){var t=function(t,r){var n=e[t];i(y.isBuffer(n),t+" argument is not a buffer"),i(n.length===r,t+" has not the expected size: found "+n.length+", expected "+r)};t("version",n.VersionSize),t("depth",n.DepthSize),t("parentFingerPrint",n.ParentFingerPrintSize),t("childIndex",n.ChildIndexSize),t("chainCode",n.ChainCodeSize),t("privateKey",n.PrivateKeySize),e.checksum&&e.checksum.length&&t("checksum",n.CheckSumSize)},n.prototype.toString=function(){return this.xprivkey},n.prototype.inspect=function(){return""},n.prototype.toObject=n.prototype.toJSON=function(){return{network:d.get(y.integerFromBuffer(this._buffers.version),"xprivkey").name,depth:y.integerFromSingleByteBuffer(this._buffers.depth),fingerPrint:y.integerFromBuffer(this.fingerPrint),parentFingerPrint:y.integerFromBuffer(this._buffers.parentFingerPrint),childIndex:y.integerFromBuffer(this._buffers.childIndex),chainCode:y.bufferToHex(this._buffers.chainCode),privateKey:this.privateKey.toBuffer().toString("hex"),checksum:y.integerFromBuffer(this._buffers.checksum),xprivkey:this.xprivkey}},n.fromBuffer=function(e){return new n(e.toString())},n.prototype.toBuffer=function(){return y.copy(this._buffers.xprivkey)},n.DefaultDepth=0,n.DefaultFingerprint=0,n.DefaultChildIndex=0,n.Hardened=2147483648,n.MaxIndex=2*n.Hardened,n.RootElementAlias=["m","M","m'","M'"],n.VersionSize=4,n.DepthSize=1,n.ParentFingerPrintSize=4,n.ChildIndexSize=4,n.ChainCodeSize=32,n.PrivateKeySize=32,n.CheckSumSize=4,n.DataLength=78,n.SerializedByteSize=82,n.VersionStart=0,n.VersionEnd=n.VersionStart+n.VersionSize,n.DepthStart=n.VersionEnd,n.DepthEnd=n.DepthStart+n.DepthSize,n.ParentFingerPrintStart=n.DepthEnd,n.ParentFingerPrintEnd=n.ParentFingerPrintStart+n.ParentFingerPrintSize,n.ChildIndexStart=n.ParentFingerPrintEnd,n.ChildIndexEnd=n.ChildIndexStart+n.ChildIndexSize,n.ChainCodeStart=n.ChildIndexEnd,n.ChainCodeEnd=n.ChainCodeStart+n.ChainCodeSize,n.PrivateKeyStart=n.ChainCodeEnd+1,n.PrivateKeyEnd=n.PrivateKeyStart+n.PrivateKeySize,n.ChecksumStart=n.PrivateKeyEnd,n.ChecksumEnd=n.ChecksumStart+n.CheckSumSize,i(n.ChecksumEnd===n.SerializedByteSize),t.exports=n}).call(this,e("buffer").Buffer)},{"./crypto/bn":15,"./crypto/hash":17,"./crypto/point":18,"./crypto/random":19,"./encoding/base58":21,"./encoding/base58check":22,"./errors":26,"./hdkeycache":28,"./hdpublickey":30,"./networks":31,"./privatekey":33,"./util/buffer":52,"./util/js":53,"./util/preconditions":54,assert:7,buffer:147,lodash:80}],30:[function(e,t,r){(function(r){"use strict";function n(e){if(e instanceof n)return e;if(!(this instanceof n))return new n(e);if(e){if(i.isString(e)||w.isBuffer(e)){var t=n.getSerializedError(e);if(t){if(w.isBuffer(e)&&!n.getSerializedError(e.toString()))return this._buildFromSerialized(e.toString());if(t instanceof b.ArgumentIsPrivateExtended)return new h(e).hdPublicKey;throw t}return this._buildFromSerialized(e)}if(i.isObject(e))return e instanceof h?this._buildFromPrivate(e):this._buildFromObject(e);throw new b.UnrecognizedArgument(e)}throw new b.MustSupplyArgument}var i=e("lodash"),o=e("./util/preconditions"),s=e("./crypto/bn"),a=e("./encoding/base58"),u=e("./encoding/base58check"),f=e("./crypto/hash"),h=e("./hdprivatekey"),c=e("./hdkeycache"),d=e("./networks"),l=e("./crypto/point"),p=e("./publickey"),g=e("./errors"),m=g,b=g.HDPublicKey,v=e("assert"),y=e("./util/js"),w=e("./util/buffer");n.isValidPath=function(e){if(i.isString(e)){var t=h._getDerivationIndexes(e);return null!==t&&i.all(t,n.isValidPath)}return i.isNumber(e)?e>=0&&e=n.Hardened||t)throw new b.InvalidIndexCantDeriveHardened;if(0>e)throw new b.InvalidPath(e);var r=c.get(this.xpubkey,e,!1);if(r)return r;var i=w.integerAsBuffer(e),o=w.concat([this.publicKey.toBuffer(),i]),a=f.sha512hmac(o,this._buffers.chainCode),u=s.fromBuffer(a.slice(0,32),{size:32}),h=a.slice(32,64),d=p.fromPoint(l.getG().mul(u).add(this.publicKey.point)),g=new n({network:this.network,depth:this.depth+1,parentFingerPrint:this.fingerPrint,childIndex:e,chainCode:h,publicKey:d});return c.set(this.xpubkey,e,!1,g),g},n.prototype._deriveFromString=function(e){if(i.contains(e,"'"))throw new b.InvalidIndexCantDeriveHardened;if(!n.isValidPath(e))throw new b.InvalidPath(e);var t=h._getDerivationIndexes(e),r=t.reduce(function(e,t){return e._deriveWithNumber(t)},this);return r},n.isValidSerialized=function(e,t){return i.isNull(n.getSerializedError(e,t))},n.getSerializedError=function(e,t){if(!i.isString(e)&&!w.isBuffer(e))return new b.UnrecognizedArgument("expected buffer or string");if(!a.validCharacters(e))return new m.InvalidB58Char("(unknown)",e);try{e=u.decode(e)}catch(r){return new m.InvalidB58Checksum(e)}if(e.length!==n.DataSize)return new b.InvalidLength(e);if(!i.isUndefined(t)){var o=n._validateNetwork(e,t);if(o)return o}var s=w.integerFromBuffer(e.slice(0,4));return s===d.livenet.xprivkey||s===d.testnet.xprivkey?new b.ArgumentIsPrivateExtended:null},n._validateNetwork=function(e,t){var r=d.get(t);if(!r)return new m.InvalidNetworkArgument(t);var i=e.slice(n.VersionStart,n.VersionEnd);return w.integerFromBuffer(i)!==r.xpubkey?new m.InvalidNetwork(i):null},n.prototype._buildFromPrivate=function(e){var t=i.clone(e._buffers),r=l.getG().mul(s.fromBuffer(t.privateKey));return t.publicKey=l.pointToCompressed(r),t.version=w.integerAsBuffer(d.get(w.integerFromBuffer(t.version)).xpubkey),t.privateKey=void 0,t.checksum=void 0,t.xprivkey=void 0,this._buildFromBuffers(t)},n.prototype._buildFromObject=function(e){var t={version:e.network?w.integerAsBuffer(d.get(e.network).xpubkey):e.version,depth:i.isNumber(e.depth)?w.integerAsSingleByteBuffer(e.depth):e.depth,parentFingerPrint:i.isNumber(e.parentFingerPrint)?w.integerAsBuffer(e.parentFingerPrint):e.parentFingerPrint,childIndex:i.isNumber(e.childIndex)?w.integerAsBuffer(e.childIndex):e.childIndex,chainCode:i.isString(e.chainCode)?w.hexToBuffer(e.chainCode):e.chainCode,publicKey:i.isString(e.publicKey)?w.hexToBuffer(e.publicKey):w.isBuffer(e.publicKey)?e.publicKey:e.publicKey.toBuffer(),checksum:i.isNumber(e.checksum)?w.integerAsBuffer(e.checksum):e.checksum};return this._buildFromBuffers(t)},n.prototype._buildFromSerialized=function(e){var t=u.decode(e),r={version:t.slice(n.VersionStart,n.VersionEnd),depth:t.slice(n.DepthStart,n.DepthEnd),parentFingerPrint:t.slice(n.ParentFingerPrintStart,n.ParentFingerPrintEnd),childIndex:t.slice(n.ChildIndexStart,n.ChildIndexEnd),chainCode:t.slice(n.ChainCodeStart,n.ChainCodeEnd),publicKey:t.slice(n.PublicKeyStart,n.PublicKeyEnd),checksum:t.slice(n.ChecksumStart,n.ChecksumEnd),xpubkey:e};return this._buildFromBuffers(r)},n.prototype._buildFromBuffers=function(e){n._validateBufferArguments(e),y.defineImmutable(this,{_buffers:e});var t=[e.version,e.depth,e.parentFingerPrint,e.childIndex,e.chainCode,e.publicKey],i=w.concat(t),o=u.checksum(i);if(e.checksum&&e.checksum.length){if(e.checksum.toString("hex")!==o.toString("hex"))throw new m.InvalidB58Checksum(i,o)}else e.checksum=o;var s,a=d.get(w.integerFromBuffer(e.version));s=u.encode(w.concat(t)),e.xpubkey=new r(s);var h=new p(e.publicKey,{network:a}),c=n.ParentFingerPrintSize,l=f.sha256ripemd160(h.toBuffer()).slice(0,c);return y.defineImmutable(this,{xpubkey:s,network:a,depth:w.integerFromSingleByteBuffer(e.depth),publicKey:h,fingerPrint:l}),this},n._validateBufferArguments=function(e){var t=function(t,r){var n=e[t];v(w.isBuffer(n),t+" argument is not a buffer, it's "+typeof n),v(n.length===r,t+" has not the expected size: found "+n.length+", expected "+r)};t("version",n.VersionSize),t("depth",n.DepthSize),t("parentFingerPrint",n.ParentFingerPrintSize),t("childIndex",n.ChildIndexSize),t("chainCode",n.ChainCodeSize),t("publicKey",n.PublicKeySize),e.checksum&&e.checksum.length&&t("checksum",n.CheckSumSize)},n.fromString=function(e){return o.checkArgument(i.isString(e),"No valid string was provided"),new n(e)},n.fromObject=function(e){return o.checkArgument(i.isObject(e),"No valid argument was provided"),new n(e)},n.prototype.toString=function(){return this.xpubkey},n.prototype.inspect=function(){return""},n.prototype.toObject=n.prototype.toJSON=function(){return{network:d.get(w.integerFromBuffer(this._buffers.version)).name,depth:w.integerFromSingleByteBuffer(this._buffers.depth),fingerPrint:w.integerFromBuffer(this.fingerPrint),parentFingerPrint:w.integerFromBuffer(this._buffers.parentFingerPrint),childIndex:w.integerFromBuffer(this._buffers.childIndex),chainCode:w.bufferToHex(this._buffers.chainCode),publicKey:this.publicKey.toString(),checksum:w.integerFromBuffer(this._buffers.checksum),xpubkey:this.xpubkey}},n.fromBuffer=function(e){return new n(e)},n.prototype.toBuffer=function(){return w.copy(this._buffers.xpubkey)},n.Hardened=2147483648,n.RootElementAlias=["m","M"],n.VersionSize=4,n.DepthSize=1,n.ParentFingerPrintSize=4,n.ChildIndexSize=4,n.ChainCodeSize=32,n.PublicKeySize=33,n.CheckSumSize=4,n.DataSize=78,n.SerializedByteSize=82,n.VersionStart=0,n.VersionEnd=n.VersionStart+n.VersionSize,n.DepthStart=n.VersionEnd,n.DepthEnd=n.DepthStart+n.DepthSize,n.ParentFingerPrintStart=n.DepthEnd,n.ParentFingerPrintEnd=n.ParentFingerPrintStart+n.ParentFingerPrintSize,n.ChildIndexStart=n.ParentFingerPrintEnd,n.ChildIndexEnd=n.ChildIndexStart+n.ChildIndexSize,n.ChainCodeStart=n.ChildIndexEnd,n.ChainCodeEnd=n.ChainCodeStart+n.ChainCodeSize,n.PublicKeyStart=n.ChainCodeEnd,n.PublicKeyEnd=n.PublicKeyStart+n.PublicKeySize,n.ChecksumStart=n.PublicKeyEnd,n.ChecksumEnd=n.ChecksumStart+n.CheckSumSize,v(n.PublicKeyEnd===n.DataSize),v(n.ChecksumEnd===n.SerializedByteSize),t.exports=n}).call(this,e("buffer").Buffer)},{"./crypto/bn":15,"./crypto/hash":17,"./crypto/point":18,"./encoding/base58":21,"./encoding/base58check":22,"./errors":26,"./hdkeycache":28,"./hdprivatekey":29,"./networks":31,"./publickey":34,"./util/buffer":52,"./util/js":53,"./util/preconditions":54,assert:7,buffer:147,lodash:80}],31:[function(e,t,r){"use strict";function n(){}function i(e,t){if(~d.indexOf(e))return e;{if(!t)return l[e];f.isArray(t)||(t=[t]);var r=function(t){return d[n][t]===e};for(var n in d)if(f.any(t,r))return d[n]}}function o(e){var t=new n;return c.defineImmutable(t,{name:e.name,alias:e.alias,pubkeyhash:e.pubkeyhash,privatekey:e.privatekey,scripthash:e.scripthash,xpubkey:e.xpubkey,xprivkey:e.xprivkey}),e.networkMagic&&c.defineImmutable(t,{networkMagic:h.integerAsBuffer(e.networkMagic)}),e.port&&c.defineImmutable(t,{port:e.port}),e.dnsSeeds&&c.defineImmutable(t,{dnsSeeds:e.dnsSeeds}),f.each(t,function(e){f.isUndefined(e)||f.isObject(e)||(l[e]=t)}),d.push(t),t}function s(e){for(var t=0;t=0&&16>=e,"Invalid Argument: n must be between 0 and 16"),0===e?n("OP_0"):new n(n.map.OP_1+e-1)},n.map={OP_FALSE:0,OP_0:0,OP_PUSHDATA1:76,OP_PUSHDATA2:77,OP_PUSHDATA4:78,OP_1NEGATE:79,OP_RESERVED:80,OP_TRUE:81,OP_1:81,OP_2:82,OP_3:83,OP_4:84,OP_5:85,OP_6:86,OP_7:87,OP_8:88,OP_9:89,OP_10:90,OP_11:91,OP_12:92,OP_13:93,OP_14:94,OP_15:95,OP_16:96,OP_NOP:97,OP_VER:98,OP_IF:99,OP_NOTIF:100,OP_VERIF:101,OP_VERNOTIF:102,OP_ELSE:103,OP_ENDIF:104,OP_VERIFY:105,OP_RETURN:106,OP_TOALTSTACK:107,OP_FROMALTSTACK:108,OP_2DROP:109,OP_2DUP:110,OP_3DUP:111,OP_2OVER:112,OP_2ROT:113,OP_2SWAP:114,OP_IFDUP:115,OP_DEPTH:116,OP_DROP:117,OP_DUP:118,OP_NIP:119,OP_OVER:120,OP_PICK:121,OP_ROLL:122,OP_ROT:123,OP_SWAP:124,OP_TUCK:125,OP_CAT:126,OP_SUBSTR:127,OP_LEFT:128,OP_RIGHT:129,OP_SIZE:130,OP_INVERT:131,OP_AND:132,OP_OR:133,OP_XOR:134,OP_EQUAL:135,OP_EQUALVERIFY:136,OP_RESERVED1:137,OP_RESERVED2:138,OP_1ADD:139,OP_1SUB:140,OP_2MUL:141,OP_2DIV:142,OP_NEGATE:143,OP_ABS:144,OP_NOT:145,OP_0NOTEQUAL:146,OP_ADD:147,OP_SUB:148,OP_MUL:149,OP_DIV:150,OP_MOD:151,OP_LSHIFT:152,OP_RSHIFT:153,OP_BOOLAND:154,OP_BOOLOR:155,OP_NUMEQUAL:156,OP_NUMEQUALVERIFY:157,OP_NUMNOTEQUAL:158,OP_LESSTHAN:159,OP_GREATERTHAN:160,OP_LESSTHANOREQUAL:161,OP_GREATERTHANOREQUAL:162,OP_MIN:163,OP_MAX:164,OP_WITHIN:165,OP_RIPEMD160:166,OP_SHA1:167,OP_SHA256:168,OP_HASH160:169,OP_HASH256:170,OP_CODESEPARATOR:171,OP_CHECKSIG:172,OP_CHECKSIGVERIFY:173,OP_CHECKMULTISIG:174,OP_CHECKMULTISIGVERIFY:175,OP_CHECKLOCKTIMEVERIFY:177,OP_NOP1:176,OP_NOP2:177,OP_NOP3:178,OP_NOP4:179,OP_NOP5:180,OP_NOP6:181,OP_NOP7:182,OP_NOP8:183,OP_NOP9:184,OP_NOP10:185,OP_PUBKEYHASH:253,OP_PUBKEY:254,OP_INVALIDOPCODE:255},n.reverseMap=[];for(var u in n.map)n.reverseMap[n.map[u]]=u;i.extend(n,n.map),n.isSmallIntOp=function(e){return e instanceof n&&(e=e.toNumber()),e===n.map.OP_0||e>=n.map.OP_1&&e<=n.map.OP_16},n.prototype.inspect=function(){return""},t.exports=n}).call(this,e("buffer").Buffer)},{"./util/buffer":52,"./util/js":53,"./util/preconditions":54,buffer:147,lodash:80}],33:[function(e,t,r){(function(r){"use strict";function n(e,t){if(!(this instanceof n))return new n(e,t);if(e instanceof n)return e;var r=this._classifyArguments(e,t);if(!r.bn||0===r.bn.cmp(new a(0)))throw new TypeError("Number can not be equal to zero, undefined, null or false");if(!r.bn.lt(h.getN()))throw new TypeError("Number must be less than N");if("undefined"==typeof r.network)throw new TypeError('Must specify the network ("livenet" or "testnet")');return u.defineImmutable(this,{bn:r.bn,compressed:r.compressed,network:r.network}),Object.defineProperty(this,"publicKey",{configurable:!1,enumerable:!0,get:this.toPublicKey.bind(this)}),this}var i=e("lodash"),o=e("./address"),s=e("./encoding/base58check"),a=e("./crypto/bn"),u=e("./util/js"),f=e("./networks"),h=e("./crypto/point"),c=e("./publickey"),d=e("./crypto/random"),l=e("./util/preconditions");n.prototype._classifyArguments=function(e,t){var o={compressed:!0,network:t?f.get(t):f.defaultNetwork};if(i.isUndefined(e)||i.isNull(e))o.bn=n._getRandomBN();else if(e instanceof a)o.bn=e;else if(e instanceof r||e instanceof Uint8Array)o=n._transformBuffer(e,t);else if(e.bn&&e.network)o=n._transformObject(e);else if(!t&&f.get(e))o.bn=n._getRandomBN(),o.network=f.get(e);else{if("string"!=typeof e)throw new TypeError("First argument is an unrecognized data type.");u.isHexa(e)?o.bn=new a(new r(e,"hex")):o=n._transformWIF(e,t)}return o},n._getRandomBN=function(){var e,t;do{var r=d.getRandomBuffer(32);t=a.fromBuffer(r),e=t.lt(h.getN())}while(!e);return t},n._transformBuffer=function(e,t){var r={};if(32===e.length)return n._transformBNBuffer(e,t);if(r.network=f.get(e[0],"privatekey"),!r.network)throw new Error("Invalid network");if(t&&r.network!==f.get(t))throw new TypeError("Private key network mismatch");if(34===e.length&&1===e[33])r.compressed=!0;else{if(33!==e.length)throw new Error("Length of buffer must be 33 (uncompressed) or 34 (compressed)");r.compressed=!1}return r.bn=a.fromBuffer(e.slice(1,33)),r},n._transformBNBuffer=function(e,t){var r={};return r.network=f.get(t)||f.defaultNetwork,r.bn=a.fromBuffer(e),r.compressed=!1,r},n._transformWIF=function(e,t){return n._transformBuffer(s.decode(e),t)},n.fromBuffer=function(e,t){return new n(e,t)},n._transformObject=function(e){var t=new a(e.bn,"hex"),r=f.get(e.network);return{bn:t,network:r,compressed:e.compressed}},n.fromString=n.fromWIF=function(e){return l.checkArgument(i.isString(e),"First argument is expected to be a string."),new n(e)},n.fromObject=function(e){return l.checkArgument(i.isObject(e),"First argument is expected to be an object."),new n(e)},n.fromRandom=function(e){var t=n._getRandomBN();return new n(t,e)},n.getValidationError=function(e,t){var r;try{new n(e,t)}catch(i){r=i}return r},n.isValid=function(e,t){return e?!n.getValidationError(e,t):!1},n.prototype.toString=function(){return this.toBuffer().toString("hex")},n.prototype.toWIF=function(){var e,t=this.network,n=this.compressed;return e=n?r.concat([new r([t.privatekey]),this.bn.toBuffer({size:32}),new r([1])]):r.concat([new r([t.privatekey]),this.bn.toBuffer({size:32})]),s.encode(e)},n.prototype.toBigNumber=function(){return this.bn},n.prototype.toBuffer=function(){return this.bn.toBuffer()},n.prototype.toPublicKey=function(){return this._pubkey||(this._pubkey=c.fromPrivateKey(this)),this._pubkey},n.prototype.toAddress=function(e){var t=this.toPublicKey();return o.fromPublicKey(t,e||this.network)},n.prototype.toObject=n.prototype.toJSON=function(){return{bn:this.bn.toString("hex"),compressed:this.compressed,network:this.network.toString()}},n.prototype.inspect=function(){var e=this.compressed?"":", uncompressed";return""},t.exports=n}).call(this,e("buffer").Buffer)},{"./address":10,"./crypto/bn":15,"./crypto/point":18,"./crypto/random":19,"./encoding/base58check":22,"./networks":31,"./publickey":34,"./util/js":53,"./util/preconditions":54,buffer:147,lodash:80}],34:[function(e,t,r){(function(r){"use strict";function n(e,t){if(!(this instanceof n))return new n(e,t);if(h.checkArgument(e,"First argument is required, please include public key data."),e instanceof n)return e;t=t||{};var r=this._classifyArgs(e,t);return r.point.validate(),a.defineImmutable(this,{point:r.point,compressed:r.compressed,network:r.network||u.defaultNetwork}),this}var i=e("./crypto/bn"),o=e("./crypto/point"),s=e("./crypto/hash"),a=e("./util/js"),u=e("./networks"),f=e("lodash"),h=e("./util/preconditions");n.prototype._classifyArgs=function(e,t){var i={compressed:f.isUndefined(t.compressed)||t.compressed};if(e instanceof o)i.point=e;else if(e.x&&e.y)i=n._transformObject(e);else if("string"==typeof e)i=n._transformDER(new r(e,"hex"));else if(n._isBuffer(e))i=n._transformDER(e);else{if(!n._isPrivateKey(e))throw new TypeError("First argument is an unrecognized data format.");i=n._transformPrivateKey(e)}return i.network||(i.network=f.isUndefined(t.network)?void 0:u.get(t.network)),i},n._isPrivateKey=function(t){var r=e("./privatekey");return t instanceof r},n._isBuffer=function(e){return e instanceof r||e instanceof Uint8Array},n._transformPrivateKey=function(e){h.checkArgument(n._isPrivateKey(e),"Must be an instance of PrivateKey");var t={};return t.point=o.getG().mul(e.bn),t.compressed=e.compressed,t.network=e.network,t},n._transformDER=function(e,t){h.checkArgument(n._isBuffer(e),"Must be a hex buffer of DER encoded public key");var r={};t=f.isUndefined(t)?!0:t;var s,a,u,c;if(4!==e[0]&&(t||6!==e[0]&&7!==e[0]))if(3===e[0])u=e.slice(1),s=new i(u),r=n._transformX(!0,s),r.compressed=!0;else{if(2!==e[0])throw new TypeError("Invalid DER format public key");u=e.slice(1),s=new i(u),r=n._transformX(!1,s),r.compressed=!0}else{if(u=e.slice(1,33),c=e.slice(33,65),32!==u.length||32!==c.length||65!==e.length)throw new TypeError("Length of x and y must be 32 bytes");s=new i(u),a=new i(c),r.point=new o(s,a),r.compressed=!1}return r; +},n._transformX=function(e,t){h.checkArgument("boolean"==typeof e,"Must specify whether y is odd or not (true or false)");var r={};return r.point=o.fromX(e,t),r},n._transformObject=function(e){var t=new i(e.x,"hex"),r=new i(e.y,"hex"),s=new o(t,r);return new n(s,{compressed:e.compressed})},n.fromPrivateKey=function(e){h.checkArgument(n._isPrivateKey(e),"Must be an instance of PrivateKey");var t=n._transformPrivateKey(e);return new n(t.point,{compressed:t.compressed,network:t.network})},n.fromDER=n.fromBuffer=function(e,t){h.checkArgument(n._isBuffer(e),"Must be a hex buffer of DER encoded public key");var r=n._transformDER(e,t);return new n(r.point,{compressed:r.compressed})},n.fromPoint=function(e,t){return h.checkArgument(e instanceof o,"First argument must be an instance of Point."),new n(e,{compressed:t})},n.fromString=function(e,t){var i=new r(e,t||"hex"),o=n._transformDER(i);return new n(o.point,{compressed:o.compressed})},n.fromX=function(e,t){var r=n._transformX(e,t);return new n(r.point,{compressed:r.compressed})},n.getValidationError=function(e){var t;try{new n(e)}catch(r){t=r}return t},n.isValid=function(e){return!n.getValidationError(e)},n.prototype.toObject=n.prototype.toJSON=function(){return{x:this.point.getX().toString("hex",2),y:this.point.getY().toString("hex",2),compressed:this.compressed}},n.prototype.toBuffer=n.prototype.toDER=function(){var e,t=this.point.getX(),n=this.point.getY(),i=t.toBuffer({size:32}),o=n.toBuffer({size:32});if(this.compressed){var s=o[o.length-1]%2;return e=new r(s?[3]:[2]),r.concat([e,i])}return e=new r([4]),r.concat([e,i,o])},n.prototype._getID=function(){return s.sha256ripemd160(this.toBuffer())},n.prototype.toAddress=function(t){var r=e("./address");return r.fromPublicKey(this,t||this.network)},n.prototype.toString=function(){return this.toDER().toString("hex")},n.prototype.inspect=function(){return""},t.exports=n}).call(this,e("buffer").Buffer)},{"./address":10,"./crypto/bn":15,"./crypto/hash":17,"./crypto/point":18,"./networks":31,"./privatekey":33,"./util/js":53,"./util/preconditions":54,buffer:147,lodash:80}],35:[function(e,t,r){t.exports=e("./script"),t.exports.Interpreter=e("./interpreter")},{"./interpreter":36,"./script":37}],36:[function(e,t,r){(function(r){"use strict";var n=e("lodash"),i=e("./script"),o=e("../opcode"),s=e("../crypto/bn"),a=e("../crypto/hash"),u=e("../crypto/signature"),f=e("../publickey"),h=function c(e){return this instanceof c?void(e?(this.initialize(),this.set(e)):this.initialize()):new c(e)};h.prototype.verify=function(t,r,o,s,a){var u=e("../transaction");n.isUndefined(o)&&(o=new u),n.isUndefined(s)&&(s=0),n.isUndefined(a)&&(a=0),this.set({script:t,tx:o,nin:s,flags:a});var f;if(0!==(a&h.SCRIPT_VERIFY_SIGPUSHONLY)&&!t.isPushOnly())return this.errstr="SCRIPT_ERR_SIG_PUSHONLY",!1;if(!this.evaluate())return!1;a&h.SCRIPT_VERIFY_P2SH&&(f=this.stack.slice());var c=this.stack;if(this.initialize(),this.set({script:r,stack:c,tx:o,nin:s,flags:a}),!this.evaluate())return!1;if(0===this.stack.length)return this.errstr="SCRIPT_ERR_EVAL_FALSE_NO_RESULT",!1;var d=this.stack[this.stack.length-1];if(!h.castToBool(d))return this.errstr="SCRIPT_ERR_EVAL_FALSE_IN_STACK",!1;if(a&h.SCRIPT_VERIFY_P2SH&&r.isScriptHashOut()){if(!t.isPushOnly())return this.errstr="SCRIPT_ERR_SIG_PUSHONLY",!1;if(0===f.length)throw new Error("internal error - stack copy empty");var l=f[f.length-1],p=i.fromBuffer(l);return f.pop(),this.initialize(),this.set({script:p,stack:f,tx:o,nin:s,flags:a}),this.evaluate()?0===f.length?(this.errstr="SCRIPT_ERR_EVAL_FALSE_NO_P2SH_STACK",!1):h.castToBool(f[f.length-1])?!0:(this.errstr="SCRIPT_ERR_EVAL_FALSE_IN_P2SH_STACK",!1):!1}return!0},t.exports=h,h.prototype.initialize=function(e){this.stack=[],this.altstack=[],this.pc=0,this.pbegincodehash=0,this.nOpCount=0,this.vfExec=[],this.errstr="",this.flags=0},h.prototype.set=function(e){this.script=e.script||this.script,this.tx=e.tx||this.tx,this.nin="undefined"!=typeof e.nin?e.nin:this.nin,this.stack=e.stack||this.stack,this.altstack=e.altack||this.altstack,this.pc="undefined"!=typeof e.pc?e.pc:this.pc,this.pbegincodehash="undefined"!=typeof e.pbegincodehash?e.pbegincodehash:this.pbegincodehash,this.nOpCount="undefined"!=typeof e.nOpCount?e.nOpCount:this.nOpCount,this.vfExec=e.vfExec||this.vfExec,this.errstr=e.errstr||this.errstr,this.flags="undefined"!=typeof e.flags?e.flags:this.flags},h["true"]=new r([1]),h["false"]=new r([]),h.MAX_SCRIPT_ELEMENT_SIZE=520,h.LOCKTIME_THRESHOLD=5e8,h.LOCKTIME_THRESHOLD_BN=new s(h.LOCKTIME_THRESHOLD),h.SCRIPT_VERIFY_NONE=0,h.SCRIPT_VERIFY_P2SH=1,h.SCRIPT_VERIFY_STRICTENC=2,h.SCRIPT_VERIFY_DERSIG=4,h.SCRIPT_VERIFY_LOW_S=8,h.SCRIPT_VERIFY_NULLDUMMY=16,h.SCRIPT_VERIFY_SIGPUSHONLY=32,h.SCRIPT_VERIFY_MINIMALDATA=64,h.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS=128,h.SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY=512,h.castToBool=function(e){for(var t=0;t1e4)return this.errstr="SCRIPT_ERR_SCRIPT_SIZE",!1;try{for(;this.pc1e3)return this.errstr="SCRIPT_ERR_STACK_SIZE",!1}catch(t){return this.errstr="SCRIPT_ERR_UNKNOWN_ERROR: "+t,!1}return this.vfExec.length>0?(this.errstr="SCRIPT_ERR_UNBALANCED_CONDITIONAL",!1):!0},h.prototype.checkLockTime=function(e){return this.tx.nLockTime=h.LOCKTIME_THRESHOLD&&e.gte(h.LOCKTIME_THRESHOLD_BN)?e.gt(new s(this.tx.nLockTime))?!1:this.tx.inputs[this.nin].isFinal()?!0:!1:!1},h.prototype.step=function(){var e,t,r,c,d,l,p,g,m,b,v,y,w,_,S,A,I,E=0!==(this.flags&h.SCRIPT_VERIFY_MINIMALDATA),k=-1===this.vfExec.indexOf(!1),x=this.script.chunks[this.pc];this.pc++;var M=x.opcodenum;if(n.isUndefined(M))return this.errstr="SCRIPT_ERR_UNDEFINED_OPCODE",!1;if(x.buf&&x.buf.length>h.MAX_SCRIPT_ELEMENT_SIZE)return this.errstr="SCRIPT_ERR_PUSH_SIZE",!1;if(M>o.OP_16&&++this.nOpCount>201)return this.errstr="SCRIPT_ERR_OP_COUNT",!1;if(M===o.OP_CAT||M===o.OP_SUBSTR||M===o.OP_LEFT||M===o.OP_RIGHT||M===o.OP_INVERT||M===o.OP_AND||M===o.OP_OR||M===o.OP_XOR||M===o.OP_2MUL||M===o.OP_2DIV||M===o.OP_MUL||M===o.OP_DIV||M===o.OP_MOD||M===o.OP_LSHIFT||M===o.OP_RSHIFT)return this.errstr="SCRIPT_ERR_DISABLED_OPCODE",!1;if(k&&M>=0&&M<=o.OP_PUSHDATA4){if(E&&!this.script.checkMinimalPush(this.pc-1))return this.errstr="SCRIPT_ERR_MINIMALDATA",!1;if(x.buf){if(x.len!==x.buf.length)throw new Error("Length of push value not equal to length of data");this.stack.push(x.buf)}else this.stack.push(h["false"])}else if(k||o.OP_IF<=M&&M<=o.OP_ENDIF)switch(M){case o.OP_1NEGATE:case o.OP_1:case o.OP_2:case o.OP_3:case o.OP_4:case o.OP_5:case o.OP_6:case o.OP_7:case o.OP_8:case o.OP_9:case o.OP_10:case o.OP_11:case o.OP_12:case o.OP_13:case o.OP_14:case o.OP_15:case o.OP_16:d=M-(o.OP_1-1),e=new s(d).toScriptNumBuffer(),this.stack.push(e);break;case o.OP_NOP:break;case o.OP_NOP2:case o.OP_CHECKLOCKTIMEVERIFY:if(!(this.flags&h.SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY)){if(this.flags&h.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS)return this.errstr="SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS",!1;break}if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;var P=s.fromScriptNumBuffer(this.stack[this.stack.length-1],E,5);if(P.lt(new s(0)))return this.errstr="SCRIPT_ERR_NEGATIVE_LOCKTIME",!1;if(!this.checkLockTime(P))return this.errstr="SCRIPT_ERR_UNSATISFIED_LOCKTIME",!1;break;case o.OP_NOP1:case o.OP_NOP3:case o.OP_NOP4:case o.OP_NOP5:case o.OP_NOP6:case o.OP_NOP7:case o.OP_NOP8:case o.OP_NOP9:case o.OP_NOP10:if(this.flags&h.SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS)return this.errstr="SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS",!1;break;case o.OP_IF:case o.OP_NOTIF:if(A=!1,k){if(this.stack.length<1)return this.errstr="SCRIPT_ERR_UNBALANCED_CONDITIONAL",!1;e=this.stack.pop(),A=h.castToBool(e),M===o.OP_NOTIF&&(A=!A)}this.vfExec.push(A);break;case o.OP_ELSE:if(0===this.vfExec.length)return this.errstr="SCRIPT_ERR_UNBALANCED_CONDITIONAL",!1;this.vfExec[this.vfExec.length-1]=!this.vfExec[this.vfExec.length-1];break;case o.OP_ENDIF:if(0===this.vfExec.length)return this.errstr="SCRIPT_ERR_UNBALANCED_CONDITIONAL",!1;this.vfExec.pop();break;case o.OP_VERIFY:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;if(e=this.stack[this.stack.length-1],A=h.castToBool(e),!A)return this.errstr="SCRIPT_ERR_VERIFY",!1;this.stack.pop();break;case o.OP_RETURN:return this.errstr="SCRIPT_ERR_OP_RETURN",!1;case o.OP_TOALTSTACK:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.altstack.push(this.stack.pop());break;case o.OP_FROMALTSTACK:if(this.altstack.length<1)return this.errstr="SCRIPT_ERR_INVALID_ALTSTACK_OPERATION",!1;this.stack.push(this.altstack.pop());break;case o.OP_2DROP:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.pop(),this.stack.pop();break;case o.OP_2DUP:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;t=this.stack[this.stack.length-2],r=this.stack[this.stack.length-1],this.stack.push(t),this.stack.push(r);break;case o.OP_3DUP:if(this.stack.length<3)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;t=this.stack[this.stack.length-3],r=this.stack[this.stack.length-2];var B=this.stack[this.stack.length-1];this.stack.push(t),this.stack.push(r),this.stack.push(B);break;case o.OP_2OVER:if(this.stack.length<4)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;t=this.stack[this.stack.length-4],r=this.stack[this.stack.length-3],this.stack.push(t),this.stack.push(r);break;case o.OP_2ROT:if(this.stack.length<6)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;c=this.stack.splice(this.stack.length-6,2),this.stack.push(c[0]),this.stack.push(c[1]);break;case o.OP_2SWAP:if(this.stack.length<4)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;c=this.stack.splice(this.stack.length-4,2),this.stack.push(c[0]),this.stack.push(c[1]);break;case o.OP_IFDUP:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;e=this.stack[this.stack.length-1],A=h.castToBool(e),A&&this.stack.push(e);break;case o.OP_DEPTH:e=new s(this.stack.length).toScriptNumBuffer(),this.stack.push(e);break;case o.OP_DROP:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.pop();break;case o.OP_DUP:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.push(this.stack[this.stack.length-1]);break;case o.OP_NIP:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.splice(this.stack.length-2,1);break;case o.OP_OVER:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.push(this.stack[this.stack.length-2]);break;case o.OP_PICK:case o.OP_ROLL:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;if(e=this.stack[this.stack.length-1],g=s.fromScriptNumBuffer(e,E),d=g.toNumber(),this.stack.pop(),0>d||d>=this.stack.length)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;e=this.stack[this.stack.length-d-1],M===o.OP_ROLL&&this.stack.splice(this.stack.length-d-1,1),this.stack.push(e);break;case o.OP_ROT:if(this.stack.length<3)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;l=this.stack[this.stack.length-3],p=this.stack[this.stack.length-2];var O=this.stack[this.stack.length-1];this.stack[this.stack.length-3]=p,this.stack[this.stack.length-2]=O,this.stack[this.stack.length-1]=l;break;case o.OP_SWAP:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;l=this.stack[this.stack.length-2],p=this.stack[this.stack.length-1],this.stack[this.stack.length-2]=p,this.stack[this.stack.length-1]=l;break;case o.OP_TUCK:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;this.stack.splice(this.stack.length-2,0,this.stack[this.stack.length-1]);break;case o.OP_SIZE:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;g=new s(this.stack[this.stack.length-1].length),this.stack.push(g.toScriptNumBuffer());break;case o.OP_EQUAL:case o.OP_EQUALVERIFY:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;t=this.stack[this.stack.length-2],r=this.stack[this.stack.length-1];var R=t.toString("hex")===r.toString("hex");if(this.stack.pop(),this.stack.pop(),this.stack.push(R?h["true"]:h["false"]),M===o.OP_EQUALVERIFY){if(!R)return this.errstr="SCRIPT_ERR_EQUALVERIFY",!1;this.stack.pop()}break;case o.OP_1ADD:case o.OP_1SUB:case o.OP_NEGATE:case o.OP_ABS:case o.OP_NOT:case o.OP_0NOTEQUAL:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;switch(e=this.stack[this.stack.length-1],g=s.fromScriptNumBuffer(e,E),M){case o.OP_1ADD:g=g.add(s.One);break;case o.OP_1SUB:g=g.sub(s.One);break;case o.OP_NEGATE:g=g.neg();break;case o.OP_ABS:g.cmp(s.Zero)<0&&(g=g.neg());break;case o.OP_NOT:g=new s((0===g.cmp(s.Zero))+0);break;case o.OP_0NOTEQUAL:g=new s((0!==g.cmp(s.Zero))+0)}this.stack.pop(),this.stack.push(g.toScriptNumBuffer());break;case o.OP_ADD:case o.OP_SUB:case o.OP_BOOLAND:case o.OP_BOOLOR:case o.OP_NUMEQUAL:case o.OP_NUMEQUALVERIFY:case o.OP_NUMNOTEQUAL:case o.OP_LESSTHAN:case o.OP_GREATERTHAN:case o.OP_LESSTHANOREQUAL:case o.OP_GREATERTHANOREQUAL:case o.OP_MIN:case o.OP_MAX:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;switch(m=s.fromScriptNumBuffer(this.stack[this.stack.length-2],E),b=s.fromScriptNumBuffer(this.stack[this.stack.length-1],E),g=new s(0),M){case o.OP_ADD:g=m.add(b);break;case o.OP_SUB:g=m.sub(b);break;case o.OP_BOOLAND:g=new s((0!==m.cmp(s.Zero)&&0!==b.cmp(s.Zero))+0);break;case o.OP_BOOLOR:g=new s((0!==m.cmp(s.Zero)||0!==b.cmp(s.Zero))+0);break;case o.OP_NUMEQUAL:g=new s((0===m.cmp(b))+0);break;case o.OP_NUMEQUALVERIFY:g=new s((0===m.cmp(b))+0);break;case o.OP_NUMNOTEQUAL:g=new s((0!==m.cmp(b))+0);break;case o.OP_LESSTHAN:g=new s((m.cmp(b)<0)+0);break;case o.OP_GREATERTHAN:g=new s((m.cmp(b)>0)+0);break;case o.OP_LESSTHANOREQUAL:g=new s((m.cmp(b)<=0)+0);break;case o.OP_GREATERTHANOREQUAL:g=new s((m.cmp(b)>=0)+0);break;case o.OP_MIN:g=m.cmp(b)<0?m:b;break;case o.OP_MAX:g=m.cmp(b)>0?m:b}if(this.stack.pop(),this.stack.pop(),this.stack.push(g.toScriptNumBuffer()),M===o.OP_NUMEQUALVERIFY){if(!h.castToBool(this.stack[this.stack.length-1]))return this.errstr="SCRIPT_ERR_NUMEQUALVERIFY",!1;this.stack.pop()}break;case o.OP_WITHIN:if(this.stack.length<3)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;m=s.fromScriptNumBuffer(this.stack[this.stack.length-3],E),b=s.fromScriptNumBuffer(this.stack[this.stack.length-2],E);var T=s.fromScriptNumBuffer(this.stack[this.stack.length-1],E);A=b.cmp(m)<=0&&m.cmp(T)<0,this.stack.pop(),this.stack.pop(),this.stack.pop(),this.stack.push(A?h["true"]:h["false"]);break;case o.OP_RIPEMD160:case o.OP_SHA1:case o.OP_SHA256:case o.OP_HASH160:case o.OP_HASH256:if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;e=this.stack[this.stack.length-1];var N;M===o.OP_RIPEMD160?N=a.ripemd160(e):M===o.OP_SHA1?N=a.sha1(e):M===o.OP_SHA256?N=a.sha256(e):M===o.OP_HASH160?N=a.sha256ripemd160(e):M===o.OP_HASH256&&(N=a.sha256sha256(e)),this.stack.pop(),this.stack.push(N);break;case o.OP_CODESEPARATOR:this.pbegincodehash=this.pc;break;case o.OP_CHECKSIG:case o.OP_CHECKSIGVERIFY:if(this.stack.length<2)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;v=this.stack[this.stack.length-2],y=this.stack[this.stack.length-1],w=(new i).set({chunks:this.script.chunks.slice(this.pbegincodehash)});var C=(new i).add(v);if(w.findAndDelete(C),!this.checkSignatureEncoding(v)||!this.checkPubkeyEncoding(y))return!1;try{_=u.fromTxFormat(v),S=f.fromBuffer(y,!1),I=this.tx.verifySignature(_,S,this.nin,w)}catch(j){I=!1}if(this.stack.pop(),this.stack.pop(),this.stack.push(I?h["true"]:h["false"]),M===o.OP_CHECKSIGVERIFY){if(!I)return this.errstr="SCRIPT_ERR_CHECKSIGVERIFY",!1;this.stack.pop()}break;case o.OP_CHECKMULTISIG:case o.OP_CHECKMULTISIGVERIFY:var L=1;if(this.stack.lengthD||D>20)return this.errstr="SCRIPT_ERR_PUBKEY_COUNT",!1;if(this.nOpCount+=D,this.nOpCount>201)return this.errstr="SCRIPT_ERR_OP_COUNT",!1;var z=++L;if(L+=D,this.stack.lengthU||U>D)return this.errstr="SCRIPT_ERR_SIG_COUNT",!1;var K=++L;if(L+=U,this.stack.lengthF;F++)v=this.stack[this.stack.length-K-F],w.findAndDelete((new i).add(v));for(I=!0;I&&U>0;){if(v=this.stack[this.stack.length-K],y=this.stack[this.stack.length-z],!this.checkSignatureEncoding(v)||!this.checkPubkeyEncoding(y))return!1;var H;try{_=u.fromTxFormat(v),S=f.fromBuffer(y,!1),H=this.tx.verifySignature(_,S,this.nin,w)}catch(j){H=!1}H&&(K++,U--),z++,D--,U>D&&(I=!1)}for(;L-- >1;)this.stack.pop();if(this.stack.length<1)return this.errstr="SCRIPT_ERR_INVALID_STACK_OPERATION",!1;if(this.flags&h.SCRIPT_VERIFY_NULLDUMMY&&this.stack[this.stack.length-1].length)return this.errstr="SCRIPT_ERR_SIG_NULLDUMMY",!1;if(this.stack.pop(),this.stack.push(I?h["true"]:h["false"]),M===o.OP_CHECKMULTISIGVERIFY){if(!I)return this.errstr="SCRIPT_ERR_CHECKMULTISIGVERIFY",!1;this.stack.pop()}break;default:return this.errstr="SCRIPT_ERR_BAD_OPCODE",!1}return!0}}).call(this,e("buffer").Buffer)},{"../crypto/bn":15,"../crypto/hash":17,"../crypto/signature":20,"../opcode":32,"../publickey":34,"../transaction":38,"./script":37,buffer:147,lodash:80}],37:[function(e,t,r){(function(r){"use strict";var n=e("../address"),i=e("../encoding/bufferreader"),o=e("../encoding/bufferwriter"),s=e("../crypto/hash"),a=e("../opcode"),u=e("../publickey"),f=e("../crypto/signature"),h=e("../networks"),c=e("../util/preconditions"),d=e("lodash"),l=e("../errors"),p=e("buffer"),g=e("../util/buffer"),m=e("../util/js"),b=function v(e){return this instanceof v?(this.chunks=[],g.isBuffer(e)?v.fromBuffer(e):e instanceof n?v.fromAddress(e):e instanceof v?v.fromBuffer(e.toBuffer()):"string"==typeof e?v.fromString(e):void("undefined"!=typeof e&&this.set(e))):new v(e)};b.prototype.set=function(e){return this.chunks=e.chunks||this.chunks,this},b.fromBuffer=function(e){var t=new b;t.chunks=[];for(var r=new i(e);!r.finished();)try{var n,o,s=r.readUInt8();s>0&&s0&&u0&&(i=n?i+" "+e.buf.toString("hex"):i+" "+e.len+" 0x"+e.buf.toString("hex"));else if("undefined"!=typeof a.reverseMap[r])i=i+" "+a(r).toString();else{var o=r.toString(16);o.length%2!==0&&(o="0"+o),i=n?i+" "+o:i+" 0x"+o}return i},b.prototype.toASM=function(){for(var e="",t=0;t"},b.prototype.isPublicKeyHashOut=function(){return!(5!==this.chunks.length||this.chunks[0].opcodenum!==a.OP_DUP||this.chunks[1].opcodenum!==a.OP_HASH160||!this.chunks[2].buf||20!==this.chunks[2].buf.length||this.chunks[3].opcodenum!==a.OP_EQUALVERIFY||this.chunks[4].opcodenum!==a.OP_CHECKSIG)},b.prototype.isPublicKeyHashIn=function(){if(2===this.chunks.length){var e=this.chunks[0].buf,t=this.chunks[1].buf;if(e&&e.length&&48===e[0]&&t&&t.length){var r=t[0];if((4===r||6===r||7===r)&&65===t.length)return!0;if((3===r||2===r)&&33===t.length)return!0}}return!1},b.prototype.getPublicKey=function(){return c.checkState(this.isPublicKeyOut(),"Can't retreive PublicKey from a non-PK output"),this.chunks[0].buf},b.prototype.getPublicKeyHash=function(){return c.checkState(this.isPublicKeyHashOut(),"Can't retrieve PublicKeyHash from a non-PKH output"),this.chunks[2].buf},b.prototype.isPublicKeyOut=function(){if(2===this.chunks.length&&this.chunks[0].buf&&this.chunks[0].buf.length&&this.chunks[1].opcodenum===a.OP_CHECKSIG){var e=this.chunks[0].buf,t=e[0],r=!1;if(4!==t&&6!==t&&7!==t||65!==e.length?3!==t&&2!==t||33!==e.length||(r=!0):r=!0,r)return u.isValid(e)}return!1},b.prototype.isPublicKeyIn=function(){if(1===this.chunks.length){var e=this.chunks[0].buf;if(e&&e.length&&48===e[0])return!0}return!1},b.prototype.isScriptHashOut=function(){var e=this.toBuffer();return 23===e.length&&e[0]===a.OP_HASH160&&20===e[1]&&e[e.length-1]===a.OP_EQUAL},b.prototype.isScriptHashIn=function(){if(this.chunks.length<=1)return!1;var e=this.chunks[this.chunks.length-1],t=e.buf;if(!t)return!1;var r;try{r=b.fromBuffer(t)}catch(n){if(n instanceof l.Script.InvalidBuffer)return!1;throw n}var i=r.classify();return i!==b.types.UNKNOWN},b.prototype.isMultisigOut=function(){return this.chunks.length>3&&a.isSmallIntOp(this.chunks[0].opcodenum)&&this.chunks.slice(1,this.chunks.length-2).every(function(e){return e.buf&&g.isBuffer(e.buf)})&&a.isSmallIntOp(this.chunks[this.chunks.length-2].opcodenum)&&this.chunks[this.chunks.length-1].opcodenum===a.OP_CHECKMULTISIG},b.prototype.isMultisigIn=function(){return this.chunks.length>=2&&0===this.chunks[0].opcodenum&&this.chunks.slice(1,this.chunks.length).every(function(e){return e.buf&&g.isBuffer(e.buf)&&f.isTxDER(e.buf)})},b.prototype.isDataOut=function(){return this.chunks.length>=1&&this.chunks[0].opcodenum===a.OP_RETURN&&(1===this.chunks.length||2===this.chunks.length&&this.chunks[1].buf&&this.chunks[1].buf.length<=b.OP_RETURN_STANDARD_SIZE&&this.chunks[1].length===this.chunks.len)},b.prototype.getData=function(){if(this.isDataOut()||this.isScriptHashOut())return new r(d.isUndefined(this.chunks[1])?0:this.chunks[1].buf);if(this.isPublicKeyHashOut())return new r(this.chunks[2].buf);throw new Error("Unrecognized script type to get data from")},b.prototype.isPushOnly=function(){return d.every(this.chunks,function(e){return e.opcodenum<=a.OP_16})},b.types={},b.types.UNKNOWN="Unknown",b.types.PUBKEY_OUT="Pay to public key",b.types.PUBKEY_IN="Spend from public key",b.types.PUBKEYHASH_OUT="Pay to public key hash",b.types.PUBKEYHASH_IN="Spend from public key hash",b.types.SCRIPTHASH_OUT="Pay to script hash",b.types.SCRIPTHASH_IN="Spend from script hash",b.types.MULTISIG_OUT="Pay to multisig",b.types.MULTISIG_IN="Spend from multisig",b.types.DATA_OUT="Data push",b.OP_RETURN_STANDARD_SIZE=80,b.identifiers={},b.identifiers.PUBKEY_OUT=b.prototype.isPublicKeyOut,b.identifiers.PUBKEY_IN=b.prototype.isPublicKeyIn,b.identifiers.PUBKEYHASH_OUT=b.prototype.isPublicKeyHashOut,b.identifiers.PUBKEYHASH_IN=b.prototype.isPublicKeyHashIn,b.identifiers.MULTISIG_OUT=b.prototype.isMultisigOut,b.identifiers.MULTISIG_IN=b.prototype.isMultisigIn,b.identifiers.SCRIPTHASH_OUT=b.prototype.isScriptHashOut,b.identifiers.SCRIPTHASH_IN=b.prototype.isScriptHashIn,b.identifiers.DATA_OUT=b.prototype.isDataOut,b.prototype.classify=function(){for(var e in b.identifiers)if(b.identifiers[e].bind(this)())return b.types[e];return b.types.UNKNOWN},b.prototype.isStandard=function(){return this.classify()!==b.types.UNKNOWN},b.prototype.prepend=function(e){return this._addByType(e,!0),this},b.prototype.equals=function(e){if(c.checkState(e instanceof b,"Must provide another script"),this.chunks.length!==e.chunks.length)return!1;var t;for(t=0;t=0&&n=1&&r[0]<=16?n===a.OP_1+(r[0]-1):1===r.length&&129===r[0]?n===a.OP_1NEGATE:r.length<=75?n===r.length:r.length<=255?n===a.OP_PUSHDATA1:r.length<=65535?n===a.OP_PUSHDATA2:!0:!0; +},b.prototype._decodeOP_N=function(e){if(e===a.OP_0)return 0;if(e>=a.OP_1&&e<=a.OP_16)return e-(a.OP_1-1);throw new Error("Invalid opcode: "+JSON.stringify(e))},b.prototype.getSignatureOperationsCount=function(e){e=d.isUndefined(e)?!0:e;var t=this,r=0,n=a.OP_INVALIDOPCODE;return d.each(t.chunks,function(i){var o=i.opcodenum;o==a.OP_CHECKSIG||o==a.OP_CHECKSIGVERIFY?r++:(o==a.OP_CHECKMULTISIG||o==a.OP_CHECKMULTISIGVERIFY)&&(r+=e&&n>=a.OP_1&&n<=a.OP_16?t._decodeOP_N(n):20),n=o}),r},t.exports=b}).call(this,e("buffer").Buffer)},{"../address":10,"../crypto/hash":17,"../crypto/signature":20,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../errors":26,"../networks":31,"../opcode":32,"../publickey":34,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,buffer:147,lodash:80}],38:[function(e,t,r){t.exports=e("./transaction"),t.exports.Input=e("./input"),t.exports.Output=e("./output"),t.exports.UnspentOutput=e("./unspentoutput"),t.exports.Signature=e("./signature"),t.exports.Sighash=e("./sighash")},{"./input":39,"./output":45,"./sighash":46,"./signature":47,"./transaction":48,"./unspentoutput":49}],39:[function(e,t,r){t.exports=e("./input"),t.exports.PublicKey=e("./publickey"),t.exports.PublicKeyHash=e("./publickeyhash"),t.exports.MultiSig=e("./multisig.js"),t.exports.MultiSigScriptHash=e("./multisigscripthash.js")},{"./input":40,"./multisig.js":41,"./multisigscripthash.js":42,"./publickey":43,"./publickeyhash":44}],40:[function(e,t,r){"use strict";function n(e){return this instanceof n?e?this._fromObject(e):void 0:new n(e)}var i=e("lodash"),o=e("../../util/preconditions"),s=e("../../errors"),a=e("../../encoding/bufferwriter"),u=e("buffer"),f=e("../../util/buffer"),h=e("../../util/js"),c=e("../../script"),d=e("../sighash"),l=e("../output"),p=4294967295,g=0;n.DEFAULT_SEQNUMBER=p,n.DEFAULT_LOCKTIME_SEQNUMBER=g,Object.defineProperty(n.prototype,"script",{configurable:!1,enumerable:!0,get:function(){return this.isNull()?null:(this._script||(this._script=new c(this._scriptBuffer),this._script._isInput=!0),this._script)}}),n.fromObject=function(e){o.checkArgument(i.isObject(e));var t=new n;return t._fromObject(e)},n.prototype._fromObject=function(e){var t;if(t=i.isString(e.prevTxId)&&h.isHexa(e.prevTxId)?new u.Buffer(e.prevTxId,"hex"):e.prevTxId,this.output=e.output?e.output instanceof l?e.output:new l(e.output):void 0,this.prevTxId=t||e.txidbuf,this.outputIndex=i.isUndefined(e.outputIndex)?e.txoutnum:e.outputIndex,this.sequenceNumber=i.isUndefined(e.sequenceNumber)?i.isUndefined(e.seqnum)?p:e.seqnum:e.sequenceNumber,i.isUndefined(e.script)&&i.isUndefined(e.scriptBuffer))throw new s.Transaction.Input.MissingScript;return this.setScript(e.scriptBuffer||e.script),this},n.prototype.toObject=n.prototype.toJSON=function(){var e={prevTxId:this.prevTxId.toString("hex"),outputIndex:this.outputIndex,sequenceNumber:this.sequenceNumber,script:this._scriptBuffer.toString("hex")};return this.script&&(e.scriptString=this.script.toString()),this.output&&(e.output=this.output.toObject()),e},n.fromBufferReader=function(e){var t=new n;return t.prevTxId=e.readReverse(32),t.outputIndex=e.readUInt32LE(),t._scriptBuffer=e.readVarLengthBuffer(),t.sequenceNumber=e.readUInt32LE(),t},n.prototype.toBufferWriter=function(e){e||(e=new a),e.writeReverse(this.prevTxId),e.writeUInt32LE(this.outputIndex);var t=this._scriptBuffer;return e.writeVarintNum(t.length),e.write(t),e.writeUInt32LE(this.sequenceNumber),e},n.prototype.setScript=function(e){if(this._script=null,e instanceof c)this._script=e,this._script._isInput=!0,this._scriptBuffer=e.toBuffer();else if(h.isHexa(e))this._scriptBuffer=new u.Buffer(e,"hex");else if(i.isString(e))this._script=new c(e),this._script._isInput=!0,this._scriptBuffer=this._script.toBuffer();else{if(!f.isBuffer(e))throw new TypeError("Invalid argument type: script");this._scriptBuffer=new u.Buffer(e)}return this},n.prototype.getSignatures=function(){throw new s.AbstractMethodInvoked("Trying to sign unsupported output type (only P2PKH and P2SH multisig inputs are supported) for input: "+JSON.stringify(this))},n.prototype.isFullySigned=function(){throw new s.AbstractMethodInvoked("Input#isFullySigned")},n.prototype.isFinal=function(){return 4294967295!==this.sequenceNumber},n.prototype.addSignature=function(){throw new s.AbstractMethodInvoked("Input#addSignature")},n.prototype.clearSignatures=function(){throw new s.AbstractMethodInvoked("Input#clearSignatures")},n.prototype.isValidSignature=function(e,t){return t.signature.nhashtype=t.sigtype,d.verify(e,t.signature,t.publicKey,t.inputIndex,this.output.script)},n.prototype.isNull=function(){return"0000000000000000000000000000000000000000000000000000000000000000"===this.prevTxId.toString("hex")&&4294967295===this.outputIndex},n.prototype._estimateSize=function(){return this.toBufferWriter().toBuffer().length},t.exports=n},{"../../encoding/bufferwriter":24,"../../errors":26,"../../script":35,"../../util/buffer":52,"../../util/js":53,"../../util/preconditions":54,"../output":45,"../sighash":46,buffer:147,lodash:80}],41:[function(e,t,r){"use strict";function n(e,t,r,n){s.apply(this,arguments);var o=this;t=t||e.publicKeys,r=r||e.threshold,n=n||e.signatures,this.publicKeys=i.sortBy(t,function(e){return e.toString("hex")}),u.checkState(f.buildMultisigOut(this.publicKeys,r).equals(this.output.script),"Provided public keys don't match to the provided output script"),this.publicKeyIndex={},i.each(this.publicKeys,function(e,t){o.publicKeyIndex[e.toString()]=t}),this.threshold=r,this.signatures=n?this._deserializeSignatures(n):new Array(this.publicKeys.length)}var i=e("lodash"),o=e("inherits"),s=(e("../transaction"),e("./input")),a=e("../output"),u=e("../../util/preconditions"),f=e("../../script"),h=e("../../crypto/signature"),c=e("../sighash"),d=(e("../../publickey"),e("../../util/buffer")),l=e("../signature");o(n,s),n.prototype.toObject=function(){var e=s.prototype.toObject.apply(this,arguments);return e.threshold=this.threshold,e.publicKeys=i.map(this.publicKeys,function(e){return e.toString()}),e.signatures=this._serializeSignatures(),e},n.prototype._deserializeSignatures=function(e){return i.map(e,function(e){return e?new l(e):void 0})},n.prototype._serializeSignatures=function(){return i.map(this.signatures,function(e){return e?e.toObject():void 0})},n.prototype.getSignatures=function(e,t,r,n){u.checkState(this.output instanceof a),n=n||h.SIGHASH_ALL;var o=this,s=[];return i.each(this.publicKeys,function(i){i.toString()===t.publicKey.toString()&&s.push(new l({publicKey:t.publicKey,prevTxId:o.prevTxId,outputIndex:o.outputIndex,inputIndex:r,signature:c.sign(e,t,n,r,o.output.script),sigtype:n}))}),s},n.prototype.addSignature=function(e,t){return u.checkState(!this.isFullySigned(),"All needed signatures have already been added"),u.checkArgument(!i.isUndefined(this.publicKeyIndex[t.publicKey.toString()]),"Signature has no matching public key"),u.checkState(this.isValidSignature(e,t)),this.signatures[this.publicKeyIndex[t.publicKey.toString()]]=t,this._updateScript(),this},n.prototype._updateScript=function(){return this.setScript(f.buildMultisigIn(this.publicKeys,this.threshold,this._createSignatures())),this},n.prototype._createSignatures=function(){return i.map(i.filter(this.signatures,function(e){return!i.isUndefined(e)}),function(e){return d.concat([e.signature.toDER(),d.integerAsSingleByteBuffer(e.sigtype)])})},n.prototype.clearSignatures=function(){this.signatures=new Array(this.publicKeys.length),this._updateScript()},n.prototype.isFullySigned=function(){return this.countSignatures()===this.threshold},n.prototype.countMissingSignatures=function(){return this.threshold-this.countSignatures()},n.prototype.countSignatures=function(){return i.reduce(this.signatures,function(e,t){return e+!!t},0)},n.prototype.publicKeysWithoutSignature=function(){var e=this;return i.filter(this.publicKeys,function(t){return!e.signatures[e.publicKeyIndex[t.toString()]]})},n.prototype.isValidSignature=function(e,t){return t.signature.nhashtype=t.sigtype,c.verify(e,t.signature,t.publicKey,t.inputIndex,this.output.script)},n.normalizeSignatures=function(e,t,r,n,i){return i.map(function(i){var o=null;return n=n.filter(function(n){if(o)return!0;var s=new l({signature:h.fromTxFormat(n),publicKey:i,prevTxId:t.prevTxId,outputIndex:t.outputIndex,inputIndex:r,sigtype:h.SIGHASH_ALL});s.signature.nhashtype=s.sigtype;var a=c.verify(e,s.signature,s.publicKey,s.inputIndex,t.output.script);return a?(o=s,!1):!0}),o?o:null})},n.OPCODES_SIZE=1,n.SIGNATURE_SIZE=73,n.prototype._estimateSize=function(){return n.OPCODES_SIZE+this.threshold*n.SIGNATURE_SIZE},t.exports=n},{"../../crypto/signature":20,"../../publickey":34,"../../script":35,"../../util/buffer":52,"../../util/preconditions":54,"../output":45,"../sighash":46,"../signature":47,"../transaction":48,"./input":40,inherits:79,lodash:80}],42:[function(e,t,r){"use strict";function n(e,t,r,n){s.apply(this,arguments);var o=this;t=t||e.publicKeys,r=r||e.threshold,n=n||e.signatures,this.publicKeys=i.sortBy(t,function(e){return e.toString("hex")}),this.redeemScript=f.buildMultisigOut(this.publicKeys,r),u.checkState(f.buildScriptHashOut(this.redeemScript).equals(this.output.script),"Provided public keys don't hash to the provided output"),this.publicKeyIndex={},i.each(this.publicKeys,function(e,t){o.publicKeyIndex[e.toString()]=t}),this.threshold=r,this.signatures=n?this._deserializeSignatures(n):new Array(this.publicKeys.length)}var i=e("lodash"),o=e("inherits"),s=e("./input"),a=e("../output"),u=e("../../util/preconditions"),f=e("../../script"),h=e("../../crypto/signature"),c=e("../sighash"),d=(e("../../publickey"),e("../../util/buffer")),l=e("../signature");o(n,s),n.prototype.toObject=function(){var e=s.prototype.toObject.apply(this,arguments);return e.threshold=this.threshold,e.publicKeys=i.map(this.publicKeys,function(e){return e.toString()}),e.signatures=this._serializeSignatures(),e},n.prototype._deserializeSignatures=function(e){return i.map(e,function(e){return e?new l(e):void 0})},n.prototype._serializeSignatures=function(){return i.map(this.signatures,function(e){return e?e.toObject():void 0})},n.prototype.getSignatures=function(e,t,r,n){u.checkState(this.output instanceof a),n=n||h.SIGHASH_ALL;var o=this,s=[];return i.each(this.publicKeys,function(i){i.toString()===t.publicKey.toString()&&s.push(new l({publicKey:t.publicKey,prevTxId:o.prevTxId,outputIndex:o.outputIndex,inputIndex:r,signature:c.sign(e,t,n,r,o.redeemScript),sigtype:n}))}),s},n.prototype.addSignature=function(e,t){return u.checkState(!this.isFullySigned(),"All needed signatures have already been added"),u.checkArgument(!i.isUndefined(this.publicKeyIndex[t.publicKey.toString()]),"Signature has no matching public key"),u.checkState(this.isValidSignature(e,t)),this.signatures[this.publicKeyIndex[t.publicKey.toString()]]=t,this._updateScript(),this},n.prototype._updateScript=function(){return this.setScript(f.buildP2SHMultisigIn(this.publicKeys,this.threshold,this._createSignatures(),{cachedMultisig:this.redeemScript})),this},n.prototype._createSignatures=function(){return i.map(i.filter(this.signatures,function(e){return!i.isUndefined(e)}),function(e){return d.concat([e.signature.toDER(),d.integerAsSingleByteBuffer(e.sigtype)])})},n.prototype.clearSignatures=function(){this.signatures=new Array(this.publicKeys.length),this._updateScript()},n.prototype.isFullySigned=function(){return this.countSignatures()===this.threshold},n.prototype.countMissingSignatures=function(){return this.threshold-this.countSignatures()},n.prototype.countSignatures=function(){return i.reduce(this.signatures,function(e,t){return e+!!t},0)},n.prototype.publicKeysWithoutSignature=function(){var e=this;return i.filter(this.publicKeys,function(t){return!e.signatures[e.publicKeyIndex[t.toString()]]})},n.prototype.isValidSignature=function(e,t){return t.signature.nhashtype=t.sigtype,c.verify(e,t.signature,t.publicKey,t.inputIndex,this.redeemScript)},n.OPCODES_SIZE=7,n.SIGNATURE_SIZE=74,n.PUBKEY_SIZE=34,n.prototype._estimateSize=function(){return n.OPCODES_SIZE+this.threshold*n.SIGNATURE_SIZE+this.publicKeys.length*n.PUBKEY_SIZE},t.exports=n},{"../../crypto/signature":20,"../../publickey":34,"../../script":35,"../../util/buffer":52,"../../util/preconditions":54,"../output":45,"../sighash":46,"../signature":47,"./input":40,inherits:79,lodash:80}],43:[function(e,t,r){"use strict";function n(){s.apply(this,arguments)}var i=e("inherits"),o=e("../../util/preconditions"),s=(e("../../util/buffer"),e("./input")),a=e("../output"),u=e("../sighash"),f=e("../../script"),h=e("../../crypto/signature"),c=e("../signature");i(n,s),n.prototype.getSignatures=function(e,t,r,n){o.checkState(this.output instanceof a),n=n||h.SIGHASH_ALL;var i=t.toPublicKey();return i.toString()===this.output.script.getPublicKey().toString("hex")?[new c({publicKey:i,prevTxId:this.prevTxId,outputIndex:this.outputIndex,inputIndex:r,signature:u.sign(e,t,n,r,this.output.script),sigtype:n})]:[]},n.prototype.addSignature=function(e,t){return o.checkState(this.isValidSignature(e,t),"Signature is invalid"),this.setScript(f.buildPublicKeyIn(t.signature.toDER(),t.sigtype)),this},n.prototype.clearSignatures=function(){return this.setScript(f.empty()),this},n.prototype.isFullySigned=function(){return this.script.isPublicKeyIn()},n.SCRIPT_MAX_SIZE=73,n.prototype._estimateSize=function(){return n.SCRIPT_MAX_SIZE},t.exports=n},{"../../crypto/signature":20,"../../script":35,"../../util/buffer":52,"../../util/preconditions":54,"../output":45,"../sighash":46,"../signature":47,"./input":40,inherits:79}],44:[function(e,t,r){"use strict";function n(){u.apply(this,arguments)}var i=e("inherits"),o=e("../../util/preconditions"),s=e("../../util/buffer"),a=e("../../crypto/hash"),u=e("./input"),f=e("../output"),h=e("../sighash"),c=e("../../script"),d=e("../../crypto/signature"),l=e("../signature");i(n,u),n.prototype.getSignatures=function(e,t,r,n,i){return o.checkState(this.output instanceof f),i=i||a.sha256ripemd160(t.publicKey.toBuffer()),n=n||d.SIGHASH_ALL,s.equals(i,this.output.script.getPublicKeyHash())?[new l({publicKey:t.publicKey,prevTxId:this.prevTxId,outputIndex:this.outputIndex,inputIndex:r,signature:h.sign(e,t,n,r,this.output.script),sigtype:n})]:[]},n.prototype.addSignature=function(e,t){return o.checkState(this.isValidSignature(e,t),"Signature is invalid"),this.setScript(c.buildPublicKeyHashIn(t.publicKey,t.signature.toDER(),t.sigtype)),this},n.prototype.clearSignatures=function(){return this.setScript(c.empty()),this},n.prototype.isFullySigned=function(){return this.script.isPublicKeyHashIn()},n.SCRIPT_MAX_SIZE=107,n.prototype._estimateSize=function(){return n.SCRIPT_MAX_SIZE},t.exports=n},{"../../crypto/hash":17,"../../crypto/signature":20,"../../script":35,"../../util/buffer":52,"../../util/preconditions":54,"../output":45,"../sighash":46,"../signature":47,"./input":40,inherits:79}],45:[function(e,t,r){"use strict";function n(e){if(!(this instanceof n))return new n(e);if(!i.isObject(e))throw new TypeError("Unrecognized argument for Output");if(this.satoshis=e.satoshis,a.isBuffer(e.script))this._scriptBuffer=e.script;else{var t;t=i.isString(e.script)&&u.isHexa(e.script)?new s.Buffer(e.script,"hex"):e.script,this.setScript(t)}}var i=e("lodash"),o=e("../crypto/bn"),s=e("buffer"),a=e("../util/buffer"),u=e("../util/js"),f=e("../encoding/bufferwriter"),h=e("../script"),c=e("../util/preconditions"),d=e("../errors"),l=9007199254740991;Object.defineProperty(n.prototype,"script",{configurable:!1,enumerable:!0,get:function(){return this._script?this._script:(this.setScriptFromBuffer(this._scriptBuffer),this._script)}}),Object.defineProperty(n.prototype,"satoshis",{configurable:!1,enumerable:!0,get:function(){return this._satoshis},set:function(e){e instanceof o?(this._satoshisBN=e,this._satoshis=e.toNumber()):i.isString(e)?(this._satoshis=parseInt(e),this._satoshisBN=o.fromNumber(this._satoshis)):(c.checkArgument(u.isNaturalNumber(e),"Output satoshis is not a natural number"),this._satoshisBN=o.fromNumber(e),this._satoshis=e),c.checkState(u.isNaturalNumber(this._satoshis),"Output satoshis is not a natural number")}}),n.prototype.invalidSatoshis=function(){return this._satoshis>l?"transaction txout satoshis greater than max safe integer":this._satoshis!==this._satoshisBN.toNumber()?"transaction txout satoshis has corrupted value":this._satoshis<0?"transaction txout negative":!1},n.prototype.toObject=n.prototype.toJSON=function(){var e={satoshis:this.satoshis};return e.script=this._scriptBuffer.toString("hex"),e},n.fromObject=function(e){return new n(e)},n.prototype.setScriptFromBuffer=function(e){this._scriptBuffer=e;try{this._script=h.fromBuffer(this._scriptBuffer),this._script._isOutput=!0}catch(t){if(!(t instanceof d.Script.InvalidBuffer))throw t;this._script=null}},n.prototype.setScript=function(e){if(e instanceof h)this._scriptBuffer=e.toBuffer(),this._script=e,this._script._isOutput=!0;else if(i.isString(e))this._script=h.fromString(e),this._scriptBuffer=this._script.toBuffer(),this._script._isOutput=!0;else{if(!a.isBuffer(e))throw new TypeError("Invalid argument type: script");this.setScriptFromBuffer(e)}return this},n.prototype.inspect=function(){var e;return e=this.script?this.script.inspect():this._scriptBuffer.toString("hex"),""},n.fromBufferReader=function(e){var t={};t.satoshis=e.readUInt64LEBN();var r=e.readVarintNum();return 0!==r?t.script=e.read(r):t.script=new s.Buffer([]),new n(t)},n.prototype.toBufferWriter=function(e){e||(e=new f),e.writeUInt64LEBN(this._satoshisBN);var t=this._scriptBuffer;return e.writeVarintNum(t.length),e.write(t),e},t.exports=n},{"../crypto/bn":15,"../encoding/bufferwriter":24,"../errors":26,"../script":35,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,buffer:147,lodash:80}],46:[function(e,t,r){(function(r){"use strict";function n(e,t,r,n,i){var o=v(e,r,n,i),s=l.sign(o,t,"little").set({nhashtype:r});return s}function i(e,t,r,n,i){p.checkArgument(!g.isUndefined(e)),p.checkArgument(!g.isUndefined(t)&&!g.isUndefined(t.nhashtype));var o=v(e,t.nhashtype,n,i);return l.verify(o,t,r,"little")}var o=e("buffer"),s=e("../crypto/signature"),a=e("../script"),u=e("./output"),f=e("../encoding/bufferreader"),h=e("../encoding/bufferwriter"),c=e("../crypto/bn"),d=e("../crypto/hash"),l=e("../crypto/ecdsa"),p=e("../util/preconditions"),g=e("lodash"),m="0000000000000000000000000000000000000000000000000000000000000001",b="ffffffffffffffff",v=function(t,n,i,l){var p,g=e("./transaction"),v=e("./input"),y=g.shallowCopy(t);for(l=new a(l),l.removeCodeseparators(),p=0;p=y.outputs.length)return new r(m,"hex");for(y.outputs.length=i+1,p=0;i>p;p++)y.outputs[p]=new u({satoshis:c.fromBuffer(new o.Buffer(b,"hex")),script:a.empty()})}n&s.SIGHASH_ANYONECANPAY&&(y.inputs=[y.inputs[i]]);var w=(new h).write(y.toBuffer()).writeInt32LE(n).toBuffer(),_=d.sha256sha256(w);return _=new f(_).readReverse()};t.exports={sighash:v,sign:n,verify:i}}).call(this,e("buffer").Buffer)},{"../crypto/bn":15,"../crypto/ecdsa":16,"../crypto/hash":17,"../crypto/signature":20,"../encoding/bufferreader":23,"../encoding/bufferwriter":24,"../script":35,"../util/preconditions":54,"./input":39,"./output":45,"./transaction":48,buffer:147,lodash:80}],47:[function(e,t,r){(function(r){"use strict";function n(e){if(!(this instanceof n))return new n(e);if(e instanceof n)return e;if(i.isObject(e))return this._fromObject(e);throw new h.InvalidArgument("TransactionSignatures must be instantiated from an object")}var i=e("lodash"),o=e("../util/preconditions"),s=e("inherits"),a=e("../util/buffer"),u=e("../util/js"),f=e("../publickey"),h=e("../errors"),c=e("../crypto/signature");s(n,c),n.prototype._fromObject=function(e){return this._checkObjectArgs(e),this.publicKey=new f(e.publicKey),this.prevTxId=a.isBuffer(e.prevTxId)?e.prevTxId:new r(e.prevTxId,"hex"),this.outputIndex=e.outputIndex,this.inputIndex=e.inputIndex,this.signature=e.signature instanceof c?e.signature:a.isBuffer(e.signature)?c.fromBuffer(e.signature):c.fromString(e.signature),this.sigtype=e.sigtype,this},n.prototype._checkObjectArgs=function(e){o.checkArgument(f(e.publicKey),"publicKey"),o.checkArgument(!i.isUndefined(e.inputIndex),"inputIndex"),o.checkArgument(!i.isUndefined(e.outputIndex),"outputIndex"),o.checkState(i.isNumber(e.inputIndex),"inputIndex must be a number"),o.checkState(i.isNumber(e.outputIndex),"outputIndex must be a number"),o.checkArgument(e.signature,"signature"),o.checkArgument(e.prevTxId,"prevTxId"),o.checkState(e.signature instanceof c||a.isBuffer(e.signature)||u.isHexa(e.signature),"signature must be a buffer or hexa value"),o.checkState(a.isBuffer(e.prevTxId)||u.isHexa(e.prevTxId),"prevTxId must be a buffer or hexa value"),o.checkArgument(e.sigtype,"sigtype"),o.checkState(i.isNumber(e.sigtype),"sigtype must be a number")},n.prototype.toObject=n.prototype.toJSON=function(){return{publicKey:this.publicKey.toString(),prevTxId:this.prevTxId.toString("hex"),outputIndex:this.outputIndex,inputIndex:this.inputIndex,signature:this.signature.toString(),sigtype:this.sigtype}},n.fromObject=function(e){return o.checkArgument(e),new n(e)},t.exports=n}).call(this,e("buffer").Buffer)},{"../crypto/signature":20,"../errors":26,"../publickey":34,"../util/buffer":52,"../util/js":53,"../util/preconditions":54,buffer:147,inherits:79,lodash:80}],48:[function(e,t,r){(function(r){"use strict";function n(e){if(!(this instanceof n))return new n(e);if(this.inputs=[],this.outputs=[],this._inputAmount=void 0,this._outputAmount=void 0,e){if(e instanceof n)return n.shallowCopy(e);if(h.isHexa(e))this.fromString(e);else if(f.isBuffer(e))this.fromBuffer(e);else{if(!i.isObject(e))throw new u.InvalidArgument("Must provide an object or string to deserialize a transaction");this.fromObject(e)}}else this._newTransaction()}var i=e("lodash"),o=e("../util/preconditions"),s=e("buffer"),a=r.compare||e("buffer-compare"),u=e("../errors"),f=e("../util/buffer"),h=e("../util/js"),c=e("../encoding/bufferreader"),d=e("../encoding/bufferwriter"),l=e("../crypto/hash"),p=e("../crypto/signature"),g=e("./sighash"),m=e("../address"),b=e("./unspentoutput"),v=e("./input"),y=v.PublicKeyHash,w=v.PublicKey,_=v.MultiSigScriptHash,S=v.MultiSig,A=e("./output"),I=e("../script"),E=e("../privatekey"),k=e("../crypto/bn"),x=1,M=0,P=1e6;n.DUST_AMOUNT=546,n.FEE_SECURITY_MARGIN=15,n.MAX_MONEY=21e14,n.NLOCKTIME_BLOCKHEIGHT_LIMIT=5e8,n.NLOCKTIME_MAX_VALUE=4294967295,n.FEE_PER_KB=1e4,n.CHANGE_OUTPUT_MAX_SIZE=62,n.MAXIMUM_EXTRA_SIZE=26,n.shallowCopy=function(e){var t=new n(e.toBuffer());return t};var B={configurable:!1,enumerable:!0,get:function(){return new c(this._getHash()).readReverse().toString("hex")}};Object.defineProperty(n.prototype,"hash",B),Object.defineProperty(n.prototype,"id",B);var O={configurable:!1,enumerable:!0,get:function(){return this._getInputAmount()}};Object.defineProperty(n.prototype,"inputAmount",O),O.get=function(){return this._getOutputAmount()},Object.defineProperty(n.prototype,"outputAmount",O),n.prototype._getHash=function(){return l.sha256sha256(this.toBuffer())},n.prototype.serialize=function(e){return!0===e||e&&e.disableAll?this.uncheckedSerialize():this.checkedSerialize(e)},n.prototype.uncheckedSerialize=n.prototype.toString=function(){return this.toBuffer().toString("hex")},n.prototype.checkedSerialize=function(e){var t=this.getSerializationError(e);if(t)throw t.message+=" Use Transaction#uncheckedSerialize if you want to skip security checks. See http://bitcore.io/guide/transaction.html#Serialization for more info.",t;return this.uncheckedSerialize()},n.prototype.invalidSatoshis=function(){for(var e=!1,t=0;tr?e.disableMoreOutputThanInput||(t=new u.Transaction.InvalidOutputAmountSum):t=this._hasFeeError(e,r),t||this._hasDustOutputs(e)||this._isMissingSignatures(e)},n.prototype._hasFeeError=function(e,t){if(!i.isUndefined(this._fee)&&this._fee!==t)return new u.Transaction.FeeError.Different("Unspent value is "+t+" but specified fee is "+this._fee);if(!e.disableLargeFees){var r=Math.floor(n.FEE_SECURITY_MARGIN*this._estimateFee());if(t>r)return this._missingChange()?new u.Transaction.ChangeAddressMissing("Fee is too large and no change address was provided"):new u.Transaction.FeeError.TooLarge("expected less than "+r+" but got "+t)}if(!e.disableSmallFees){var o=Math.ceil(this._estimateFee()/n.FEE_SECURITY_MARGIN);if(o>t)return new u.Transaction.FeeError.TooSmall("expected more than "+o+" but got "+t)}},n.prototype._missingChange=function(){return!this._changeScript},n.prototype._hasDustOutputs=function(e){if(!e.disableDustOutputs){var t,r;for(t in this.outputs)if(r=this.outputs[t],r.satoshis"},n.prototype.toBuffer=function(){var e=new d;return this.toBufferWriter(e).toBuffer()},n.prototype.toBufferWriter=function(e){return e.writeUInt32LE(this.version),e.writeVarintNum(this.inputs.length),i.each(this.inputs,function(t){t.toBufferWriter(e)}),e.writeVarintNum(this.outputs.length),i.each(this.outputs,function(t){t.toBufferWriter(e)}),e.writeUInt32LE(this.nLockTime),e},n.prototype.fromBuffer=function(e){var t=new c(e);return this.fromBufferReader(t)},n.prototype.fromBufferReader=function(e){o.checkArgument(!e.finished(),"No transaction data received");var t,r,n;for(this.version=e.readUInt32LE(),r=e.readVarintNum(),t=0;r>t;t++){var i=v.fromBufferReader(e);this.inputs.push(i)}for(n=e.readVarintNum(),t=0;n>t;t++)this.outputs.push(A.fromBufferReader(e));return this.nLockTime=e.readUInt32LE(),this},n.prototype.toObject=n.prototype.toJSON=function(){var e=[];this.inputs.forEach(function(t){e.push(t.toObject())});var t=[];this.outputs.forEach(function(e){t.push(e.toObject())});var r={hash:this.hash,version:this.version,inputs:e,outputs:t,nLockTime:this.nLockTime};return this._changeScript&&(r.changeScript=this._changeScript.toString()),i.isUndefined(this._changeIndex)||(r.changeIndex=this._changeIndex),i.isUndefined(this._fee)||(r.fee=this._fee),r},n.prototype.fromObject=function(e){o.checkArgument(i.isObject(e)||e instanceof n);var t,r=this;return t=e instanceof n?t.toObject():e,i.each(t.inputs,function(e){if(!e.output||!e.output.script)return void r.uncheckedAddInput(new v(e));var t,n=new I(e.output.script);if(n.isPublicKeyHashOut())t=new v.PublicKeyHash(e);else if(n.isScriptHashOut()&&e.publicKeys&&e.threshold)t=new v.MultiSigScriptHash(e,e.publicKeys,e.threshold,e.signatures);else{if(!n.isPublicKeyOut())throw new u.Transaction.Input.UnsupportedScript(e.output.script);t=new v.PublicKey(e)}r.addInput(t)}),i.each(t.outputs,function(e){r.addOutput(new A(e))}),t.changeIndex&&(this._changeIndex=t.changeIndex),t.changeScript&&(this._changeScript=new I(t.changeScript)),t.fee&&(this._fee=t.fee),this.nLockTime=t.nLockTime,this.version=t.version,this._checkConsistency(e),this},n.prototype._checkConsistency=function(e){i.isUndefined(this._changeIndex)||(o.checkState(this._changeScript),o.checkState(this.outputs[this._changeIndex]),o.checkState(this.outputs[this._changeIndex].script.toString()===this._changeScript.toString())),e&&e.hash&&o.checkState(e.hash===this.hash,"Hash in object does not match transaction hash")},n.prototype.lockUntilDate=function(e){if(o.checkArgument(e),i.isNumber(e)&&e=n.NLOCKTIME_BLOCKHEIGHT_LIMIT)throw new u.Transaction.BlockHeightTooHigh;if(0>e)throw new u.Transaction.NLockTimeOutOfRange;for(var t=0;t0?(this._changeIndex=this.outputs.length,this._addOutput(new A({script:this._changeScript,satoshis:r}))):this._changeIndex=void 0}},n.prototype.getFee=function(){return this.isCoinbase()?0:i.isUndefined(this._fee)?this._changeScript?this._estimateFee():this._getUnspentValue():this._fee},n.prototype._estimateFee=function(){var e=this._estimateSize(),t=this._getUnspentValue();return n._estimateFee(e,t,this._feePerKb)},n.prototype._getUnspentValue=function(){return this._getInputAmount()-this._getOutputAmount()},n.prototype._clearSignatures=function(){i.each(this.inputs,function(e){e.clearSignatures()})},n._estimateFee=function(e,t,r){var i=Math.ceil(e/1e3)*(r||n.FEE_PER_KB);return t>i&&(e+=n.CHANGE_OUTPUT_MAX_SIZE),Math.ceil(e/1e3)*(r||n.FEE_PER_KB)},n.prototype._estimateSize=function(){var e=n.MAXIMUM_EXTRA_SIZE;return i.each(this.inputs,function(t){e+=t._estimateSize()}),i.each(this.outputs,function(t){e+=t.script.toBuffer().length+9}),e},n.prototype._removeOutput=function(e){var t=this.outputs[e];this.outputs=i.without(this.outputs,t),this._outputAmount=void 0},n.prototype.removeOutput=function(e){this._removeOutput(e),this._updateChangeOutput()},n.prototype.sort=function(){return this.sortInputs(function(e){var t=Array.prototype.concat.apply([],e);return t.sort(function(e,t){return a(e.prevTxId,t.prevTxId)||e.outputIndex-t.outputIndex}),t}),this.sortOutputs(function(e){var t=Array.prototype.concat.apply([],e);return t.sort(function(e,t){return e.satoshis-t.satoshis||a(e.script.toBuffer(),t.script.toBuffer())}),t}),this},n.prototype.shuffleOutputs=function(){return this.sortOutputs(i.shuffle)},n.prototype.sortOutputs=function(e){var t=e(this.outputs);return this._newOutputOrder(t)},n.prototype.sortInputs=function(e){return this.inputs=e(this.inputs),this._clearSignatures(),this},n.prototype._newOutputOrder=function(e){var t=this.outputs.length!==e.length||0!==i.difference(this.outputs,e).length;if(t)throw new u.Transaction.InvalidSorting;if(!i.isUndefined(this._changeIndex)){var r=this.outputs[this._changeIndex];this._changeIndex=i.findIndex(e,r)}return this.outputs=e,this},n.prototype.removeInput=function(e,t){var r;if(r=!t&&i.isNumber(e)?e:i.findIndex(this.inputs,function(r){return r.prevTxId.toString("hex")===e&&r.outputIndex===t}),0>r||r>=this.inputs.length)throw new u.Transaction.InvalidIndex(r,this.inputs.length);var n=this.inputs[r];this.inputs=i.without(this.inputs,n),this._inputAmount=void 0,this._updateChangeOutput()},n.prototype.sign=function(e,t){o.checkState(this.hasAllUtxoInfo());var r=this;return i.isArray(e)?(i.each(e,function(e){r.sign(e,t)}),this):(i.each(this.getSignatures(e,t),function(e){r.applySignature(e)}),this)},n.prototype.getSignatures=function(e,t){e=new E(e),t=t||p.SIGHASH_ALL;var r=this,n=[],o=l.sha256ripemd160(e.publicKey.toBuffer());return i.each(this.inputs,function(s,a){i.each(s.getSignatures(r,e,a,t,o),function(e){n.push(e)})}),n},n.prototype.applySignature=function(e){return this.inputs[e.inputIndex].addSignature(this,e),this},n.prototype.isFullySigned=function(){return i.each(this.inputs,function(e){if(e.isFullySigned===v.prototype.isFullySigned)throw new u.Transaction.UnableToVerifySignature("Unrecognized script kind, or not enough information to execute script.This usually happens when creating a transaction from a serialized transaction")}),i.all(i.map(this.inputs,function(e){return e.isFullySigned()}))},n.prototype.isValidSignature=function(e){var t=this;if(this.inputs[e.inputIndex].isValidSignature===v.prototype.isValidSignature)throw new u.Transaction.UnableToVerifySignature("Unrecognized script kind, or not enough information to execute script.This usually happens when creating a transaction from a serialized transaction");return this.inputs[e.inputIndex].isValidSignature(t,e)},n.prototype.verifySignature=function(e,t,r,n){return g.verify(this,e,t,r,n)},n.prototype.verify=function(){if(0===this.inputs.length)return"transaction txins empty";if(0===this.outputs.length)return"transaction txouts empty";for(var e=new k(0),t=0;tP)return"transaction over the maximum block size";var o={};for(t=0;t100)return"coinbase transaction script size invalid"}else for(t=0;t64)throw new Error("Invalid TXID in object",e);var h=i.isUndefined(e.vout)?e.outputIndex:e.vout;if(!i.isNumber(h))throw new Error("Invalid outputIndex, received "+h);o.checkArgument(!i.isUndefined(e.scriptPubKey)||!i.isUndefined(e.script),"Must provide the scriptPubKey for that output!");var c=new a(e.scriptPubKey||e.script);o.checkArgument(!i.isUndefined(e.amount)||!i.isUndefined(e.satoshis),"Must provide an amount for the output");var d=i.isUndefined(e.amount)?e.satoshis:new f.fromBTC(e.amount).toSatoshis();o.checkArgument(i.isNumber(d),"Amount must be a number"),s.defineImmutable(this,{address:t,txId:r,outputIndex:h,script:c,satoshis:d})}var i=e("lodash"),o=e("../util/preconditions"),s=e("../util/js"),a=e("../script"),u=e("../address"),f=e("../unit");n.prototype.inspect=function(){return""},n.prototype.toString=function(){return this.txId+":"+this.outputIndex},n.fromObject=function(e){return new n(e)},n.prototype.toObject=n.prototype.toJSON=function(){return{address:this.address?this.address.toString():void 0,txid:this.txId,vout:this.outputIndex,scriptPubKey:this.script.toBuffer().toString("hex"),amount:f.fromSatoshis(this.satoshis).toBTC()}},t.exports=n},{"../address":10,"../script":35,"../unit":50,"../util/js":53,"../util/preconditions":54,lodash:80}],50:[function(e,t,r){"use strict";function n(e,t){if(!(this instanceof n))return new n(e,t);if(i.isNumber(t)){if(0>=t)throw new o.Unit.InvalidRate(t);e/=t,t=n.BTC}this._value=this._from(e,t);var r=this,s=function(e){Object.defineProperty(r,e,{get:function(){return r.to(e)},enumerable:!0})};Object.keys(a).forEach(s)}var i=e("lodash"),o=e("./errors"),s=e("./util/preconditions"),a={BTC:[1e8,8],mBTC:[1e5,5],uBTC:[100,2],bits:[100,2],satoshis:[1,0]};Object.keys(a).forEach(function(e){n[e]=e}),n.fromObject=function(e){return s.checkArgument(i.isObject(e),"Argument is expected to be an object"),new n(e.amount,e.code)},n.fromBTC=function(e){return new n(e,n.BTC)},n.fromMillis=n.fromMilis=function(e){return new n(e,n.mBTC)},n.fromMicros=n.fromBits=function(e){return new n(e,n.bits)},n.fromSatoshis=function(e){return new n(e,n.satoshis)},n.fromFiat=function(e,t){return new n(e,t)},n.prototype._from=function(e,t){if(!a[t])throw new o.Unit.UnknownCode(t);return parseInt((e*a[t][0]).toFixed())},n.prototype.to=function(e){if(i.isNumber(e)){if(0>=e)throw new o.Unit.InvalidRate(e);return parseFloat((this.BTC*e).toFixed(2))}if(!a[e])throw new o.Unit.UnknownCode(e);var t=this._value/a[e][0];return parseFloat(t.toFixed(a[e][1]))},n.prototype.toBTC=function(){return this.to(n.BTC)},n.prototype.toMillis=n.prototype.toMilis=function(){return this.to(n.mBTC)},n.prototype.toMicros=n.prototype.toBits=function(){return this.to(n.bits)},n.prototype.toSatoshis=function(){return this.to(n.satoshis)},n.prototype.atRate=function(e){return this.to(e)},n.prototype.toString=function(){return this.satoshis+" satoshis"},n.prototype.toObject=n.prototype.toJSON=function(){return{amount:this.BTC,code:n.BTC}},n.prototype.inspect=function(){return""},t.exports=n},{"./errors":26,"./util/preconditions":54,lodash:80}],51:[function(e,t,r){"use strict";var n=e("lodash"),i=e("url"),o=e("./address"),s=e("./unit"),a=function(e,t){if(!(this instanceof a))return new a(e,t);if(this.extras={},this.knownParams=t||[],this.address=this.network=this.amount=this.message=null,"string"==typeof e){var r=a.parse(e);r.amount&&(r.amount=this._parseAmount(r.amount)),this._fromObject(r)}else{if("object"!=typeof e)throw new TypeError("Unrecognized data format.");this._fromObject(e)}};a.fromString=function(e){if("string"!=typeof e)throw new TypeError("Expected a string");return new a(e)},a.fromObject=function(e){return new a(e)},a.isValid=function(e,t){try{new a(e,t)}catch(r){return!1}return!0},a.parse=function(e){var t=i.parse(e,!0);if("bitcoin:"!==t.protocol)throw new TypeError("Invalid bitcoin URI");var r=/[^:]*:\/?\/?([^?]*)/.exec(e);return t.query.address=r&&r[1]||void 0,t.query},a.Members=["address","amount","message","label","r"],a.prototype._fromObject=function(e){if(!o.isValid(e.address))throw new TypeError("Invalid bitcoin address");this.address=new o(e.address),this.network=this.address.network,this.amount=e.amount;for(var t in e)if("address"!==t&&"amount"!==t){if(/^req-/.exec(t)&&-1===this.knownParams.indexOf(t))throw Error("Unknown required argument "+t);var r=a.Members.indexOf(t)>-1?this:this.extras;r[t]=e[t]}},a.prototype._parseAmount=function(e){if(e=Number(e),isNaN(e))throw new TypeError("Invalid amount");return s.fromBTC(e).toSatoshis()},a.prototype.toObject=a.prototype.toJSON=function(){for(var e={},t=0;t"},t.exports=a},{"./address":10,"./unit":50,lodash:80,url:295}],52:[function(e,t,r){(function(r){"use strict";function n(e,t){if(e.length!==t.length)return!1;for(var r=e.length,n=0;r>n;n++)if(e[n]!==t[n])return!1;return!0}var i=e("buffer"),o=e("assert"),s=e("./js"),a=e("./preconditions");t.exports={fill:function(e,t){a.checkArgumentType(e,"Buffer","buffer"),a.checkArgumentType(t,"number","value");for(var r=e.length,n=0;r>n;n++)e[n]=t;return e},copy:function(e){var t=new r(e.length);return e.copy(t),t},isBuffer:function(e){return i.Buffer.isBuffer(e)||e instanceof Uint8Array},emptyBuffer:function(e){a.checkArgumentType(e,"number","bytes");for(var t=new i.Buffer(e),r=0;e>r;r++)t.write("\x00",r);return t},concat:i.Buffer.concat,equals:n,equal:n,integerAsSingleByteBuffer:function(e){return a.checkArgumentType(e,"number","integer"),new i.Buffer([255&e])},integerAsBuffer:function(e){a.checkArgumentType(e,"number","integer");var t=[];return t.push(e>>24&255),t.push(e>>16&255),t.push(e>>8&255),t.push(255&e),new r(t)},integerFromBuffer:function(e){return a.checkArgumentType(e,"Buffer","buffer"),e[0]<<24|e[1]<<16|e[2]<<8|e[3]},integerFromSingleByteBuffer:function(e){return a.checkArgumentType(e,"Buffer","buffer"),e[0]},bufferToHex:function(e){return a.checkArgumentType(e,"Buffer","buffer"),e.toString("hex")},reverse:function(e){for(var t=new i.Buffer(e.length),r=0;r=0}}},{lodash:80}],54:[function(e,t,r){"use strict";var n=e("../errors"),i=e("lodash");t.exports={checkState:function(e,t){if(!e)throw new n.InvalidState(t)},checkArgument:function(e,t,r,i){if(!e)throw new n.InvalidArgument(t,r,i)},checkArgumentType:function(t,r,o){if(o=o||"(unknown name)",i.isString(r)){if("Buffer"===r){var s=e("./buffer");if(!s.isBuffer(t))throw new n.InvalidArgumentType(t,r,o)}else if(typeof t!==r)throw new n.InvalidArgumentType(t,r,o)}else if(!(t instanceof r))throw new n.InvalidArgumentType(t,r.name,o)}}},{"../errors":26,"./buffer":52,lodash:80}],55:[function(e,t,r){!function(e,t){"use strict";function r(e,t){if(!e)throw new Error(t||"Assertion failed")}function n(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function i(e,t,r){return null!==e&&"object"==typeof e&&Array.isArray(e.words)?e:(this.sign=!1,this.words=null,this.length=0,this.red=null,("le"===t||"be"===t)&&(r=t,t=10),void(null!==e&&this._init(e||0,t||10,r||"be")))}function o(e,t,r){for(var n=0,i=Math.min(e.length,r),o=t;i>o;o++){var s=e.charCodeAt(o)-48;n<<=4,n|=s>=49&&54>=s?s-49+10:s>=17&&22>=s?s-17+10:15&s}return n}function s(e,t,r,n){for(var i=0,o=Math.min(e.length,r),s=t;o>s;s++){var a=e.charCodeAt(s)-48;i*=n,i+=a>=49?a-49+10:a>=17?a-17+10:a}return i}function a(e,t){this.name=e,this.p=new i(t,16),this.n=this.p.bitLength(),this.k=new i(1).ishln(this.n).isub(this.p),this.tmp=this._tmp()}function u(){a.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function f(){a.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function h(){a.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function c(){a.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function d(e){if("string"==typeof e){var t=i._prime(e);this.m=t.p,this.prime=t}else this.m=e,this.prime=null}function l(e){d.call(this,e),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new i(1).ishln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv.sign=!0,this.minv=this.minv.mod(this.r)}"object"==typeof e?e.exports=i:t.BN=i,i.BN=i,i.wordSize=26,i.prototype._init=function(e,t,n){if("number"==typeof e)return 0>e&&(this.sign=!0,e=-e),void(67108864>e?(this.words=[67108863&e],this.length=1):4503599627370496>e?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(r(9007199254740992>e),this.words=[67108863&e,e/67108864&67108863,1],this.length=3));if("object"==typeof e)return this._initArray(e,t,n);"hex"===t&&(t=16),r(t===(0|t)&&t>=2&&36>=t),e=e.toString().replace(/\s+/g,"");var i=0;"-"===e[0]&&i++,16===t?this._parseHex(e,i):this._parseBase(e,t,i),"-"===e[0]&&(this.sign=!0),this.strip()},i.prototype._initArray=function(e,t,n){if(r("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var i=0;i=0;i-=3){var a=e[i]|e[i-1]<<8|e[i-2]<<16;this.words[s]|=a<>>26-o&67108863,o+=24,o>=26&&(o-=26,s++)}else if("le"===n)for(var i=0,s=0;i>>26-o&67108863,o+=24,o>=26&&(o-=26,s++)}return this.strip()},i.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6){var s=o(e,r,r+6);this.words[i]|=s<>>26-n&4194303,n+=24,n>=26&&(n-=26,i++)}if(r+6!==t){var s=o(e,t,r+6);this.words[i]|=s<>>26-n&4194303}this.strip()},i.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;67108863>=i;i*=t)n++;n--,i=i/t|0;for(var o=e.length-r,a=o%n,u=Math.min(o,o-a)+r,f=0,h=r;u>h;h+=n)f=s(e,h,h+n,t),this.imuln(i),this.words[0]+f<67108864?this.words[0]+=f:this._iaddn(f);if(0!==a){for(var c=1,f=s(e,h,e.length,t),h=0;a>h;h++)c*=t;this.imuln(c),this.words[0]+f<67108864?this.words[0]+=f:this._iaddn(f)}},i.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t1&&0===this.words[this.length-1];)this.length--;return this._normSign()},i.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.sign=!1),this},i.prototype.inspect=function(){return(this.red?""};var p=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],g=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],m=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];i.prototype.toString=function(e,t){if(e=e||10,16===e||"hex"===e){for(var n="",i=0,t=0|t||1,o=0,s=0;s>>24-i&16777215,n=0!==o||s!==this.length-1?p[6-u.length]+u+n:u+n,i+=2,i>=26&&(i-=26,s--)}for(0!==o&&(n=o.toString(16)+n);n.length%t!==0;)n="0"+n;return this.sign&&(n="-"+n),n}if(e===(0|e)&&e>=2&&36>=e){var f=g[e],h=m[e],n="",c=this.clone();for(c.sign=!1;0!==c.cmpn(0);){var d=c.modn(h).toString(e);c=c.idivn(h),n=0!==c.cmpn(0)?p[f-d.length]+d+n:d+n}return 0===this.cmpn(0)&&(n="0"+n),this.sign&&(n="-"+n),n}r(!1,"Base should be between 2 and 36")},i.prototype.toJSON=function(){return this.toString(16)},i.prototype.toArray=function(){this.strip();var e=new Array(this.byteLength());e[0]=0;for(var t=this.clone(),r=0;0!==t.cmpn(0);r++){var n=t.andln(255);t.ishrn(8),e[e.length-r-1]=n}return e},Math.clz32?i.prototype._countBits=function(e){return 32-Math.clz32(e)}:i.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},i.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0===(8191&t)&&(r+=13,t>>>=13),0===(127&t)&&(r+=7,t>>>=7),0===(15&t)&&(r+=4,t>>>=4),0===(3&t)&&(r+=2,t>>>=2),0===(1&t)&&r++,r},i.prototype.bitLength=function(){var e=0,t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},i.prototype.zeroBits=function(){if(0===this.cmpn(0))return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},i.prototype.iand=function(e){this.sign=this.sign&&e.sign;var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},i.prototype.ixor=function(e){this.sign=this.sign||e.sign;var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},i.prototype.setn=function(e,t){r("number"==typeof e&&e>=0);for(var n=e/26|0,i=e%26;this.length<=n;)this.words[this.length++]=0;return t?this.words[n]=this.words[n]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,o=0;o>>26}for(;0!==i&&o>>26}if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},i.prototype.isub=function(e){if(e.sign){e.sign=!1;var t=this.iadd(e);return e.sign=!0,t._normSign()}if(this.sign)return this.sign=!1,this.iadd(e),this.sign=!0,this._normSign();var r=this.cmp(e);if(0===r)return this.sign=!1,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=e):(n=e,i=this);for(var o=0,s=0;s>26,this.words[s]=67108863&t}for(;0!==o&&s>26,this.words[s]=67108863&t}if(0===o&&s>>26,o=67108863&r,s=Math.min(n,e.length-1),a=Math.max(0,n-this.length+1);s>=a;a++){var u=n-a,f=0|this.words[u],h=0|e.words[a],c=f*h,d=67108863&c;i=i+(c/67108864|0)|0,d=d+o|0,o=67108863&d,i=i+(d>>>26)|0}t.words[n]=o,r=i}return 0!==r?t.words[n]=r:t.length--,t.strip()},i.prototype._bigMulTo=function(e,t){t.sign=e.sign!==this.sign,t.length=this.length+e.length;for(var r=0,n=0,i=0;i=u;u++){var f=i-u,h=0|this.words[f],c=0|e.words[u],d=h*c,l=67108863&d;o=o+(d/67108864|0)|0,l=l+s|0,s=67108863&l,o=o+(l>>>26)|0,n+=o>>>26,o&=67108863}t.words[i]=s,r=o,o=n}return 0!==r?t.words[i]=r:t.length--,t.strip()},i.prototype.mulTo=function(e,t){var r;return r=this.length+e.length<63?this._smallMulTo(e,t):this._bigMulTo(e,t)},i.prototype.mul=function(e){var t=new i(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},i.prototype.imul=function(e){if(0===this.cmpn(0)||0===e.cmpn(0))return this.words[0]=0,this.length=1,this;var t=this.length,r=e.length;this.sign=e.sign!==this.sign,this.length=this.length+e.length,this.words[this.length-1]=0;for(var n=this.length-2;n>=0;n--){for(var i=0,o=0,s=Math.min(n,r-1),a=Math.max(0,n-t+1);s>=a;a++){var u=n-a,f=this.words[u],h=e.words[a],c=f*h,d=67108863&c;i+=c/67108864|0,d+=o,o=67108863&d,i+=d>>>26}this.words[n]=o,this.words[n+1]+=i,i=0}for(var i=0,u=1;u>>26}return this.strip()},i.prototype.imuln=function(e){r("number"==typeof e);for(var t=0,n=0;n>=26,t+=i/67108864|0,t+=o>>>26,this.words[n]=67108863&o}return 0!==t&&(this.words[n]=t,this.length++),this},i.prototype.sqr=function(){return this.mul(this)},i.prototype.isqr=function(){return this.mul(this)},i.prototype.ishln=function(e){r("number"==typeof e&&e>=0);var t=e%26,n=(e-t)/26,i=67108863>>>26-t<<26-t;if(0!==t){for(var o=0,s=0;s>>26-t}o&&(this.words[s]=o,this.length++)}if(0!==n){for(var s=this.length-1;s>=0;s--)this.words[s+n]=this.words[s];for(var s=0;n>s;s++)this.words[s]=0;this.length+=n}return this.strip()},i.prototype.ishrn=function(e,t,n){r("number"==typeof e&&e>=0);var i;i=t?(t-t%26)/26:0;var o=e%26,s=Math.min((e-o)/26,this.length),a=67108863^67108863>>>o<f;f++)u.words[f]=this.words[f];u.length=s}if(0===s);else if(this.length>s){this.length-=s;for(var f=0;f=0&&(0!==h||f>=i);f--){var c=this.words[f];this.words[f]=h<<26-o|c>>>o,h=c&a}return u&&0!==h&&(u.words[u.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip(),this},i.prototype.shln=function(e){return this.clone().ishln(e)},i.prototype.shrn=function(e){return this.clone().ishrn(e)},i.prototype.testn=function(e){r("number"==typeof e&&e>=0);var t=e%26,n=(e-t)/26,i=1<=0);var t=e%26,n=(e-t)/26;if(r(!this.sign,"imaskn works only with positive numbers"),0!==t&&n++,this.length=Math.min(n,this.length),0!==t){var i=67108863^67108863>>>t<e?this.isubn(-e):this.sign?1===this.length&&this.words[0]=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},i.prototype.isubn=function(e){if(r("number"==typeof e),0>e)return this.iaddn(-e);if(this.sign)return this.sign=!1,this.iaddn(e),this.sign=!0,this;this.words[0]-=e;for(var t=0;t>26)-(f/67108864|0),this.words[i+n]=67108863&u}for(;i>26,this.words[i+n]=67108863&u}if(0===a)return this.strip();r(-1===a),a=0;for(var i=0;i>26,this.words[i]=67108863&u}return this.sign=!0,this.strip()},i.prototype._wordDiv=function(e,t){var r=this.length-e.length,n=this.clone(),o=e,s=o.words[o.length-1],a=this._countBits(s);r=26-a,0!==r&&(o=o.shln(r),n.ishln(r),s=o.words[o.length-1]);var u,f=n.length-o.length;if("mod"!==t){u=new i(null),u.length=f+1,u.words=new Array(u.length);for(var h=0;h=0;d--){var l=67108864*n.words[o.length+d]+n.words[o.length+d-1];for(l=Math.min(l/s|0,67108863),n._ishlnsubmul(o,l,d);n.sign;)l--,n.sign=!1,n._ishlnsubmul(o,1,d),0!==n.cmpn(0)&&(n.sign=!n.sign);u&&(u.words[d]=l)}return u&&u.strip(),n.strip(),"div"!==t&&0!==r&&n.ishrn(r),{div:u?u:null,mod:n}},i.prototype.divmod=function(e,t){if(r(0!==e.cmpn(0)),this.sign&&!e.sign){var n,o,s=this.neg().divmod(e,t);return"mod"!==t&&(n=s.div.neg()),"div"!==t&&(o=0===s.mod.cmpn(0)?s.mod:e.sub(s.mod)),{div:n,mod:o}}if(!this.sign&&e.sign){var n,s=this.divmod(e.neg(),t);return"mod"!==t&&(n=s.div.neg()),{div:n,mod:s.mod}}return this.sign&&e.sign?this.neg().divmod(e.neg(),t):e.length>this.length||this.cmp(e)<0?{div:new i(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new i(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new i(this.modn(e.words[0]))}:this._wordDiv(e,t)},i.prototype.div=function(e){return this.divmod(e,"div").div},i.prototype.mod=function(e){return this.divmod(e,"mod").mod},i.prototype.divRound=function(e){var t=this.divmod(e);if(0===t.mod.cmpn(0))return t.div;var r=t.div.sign?t.mod.isub(e):t.mod,n=e.shrn(1),i=e.andln(1),o=r.cmp(n);return 0>o||1===i&&0===o?t.div:t.div.sign?t.div.isubn(1):t.div.iaddn(1)},i.prototype.modn=function(e){r(67108863>=e);for(var t=(1<<26)%e,n=0,i=this.length-1;i>=0;i--)n=(t*n+this.words[i])%e;return n},i.prototype.idivn=function(e){r(67108863>=e);for(var t=0,n=this.length-1;n>=0;n--){var i=this.words[n]+67108864*t;this.words[n]=i/e|0,t=i%e}return this.strip()},i.prototype.divn=function(e){return this.clone().idivn(e)},i.prototype.egcd=function(e){r(!e.sign),r(0!==e.cmpn(0));var t=this,n=e.clone();t=t.sign?t.mod(e):t.clone();for(var o=new i(1),s=new i(0),a=new i(0),u=new i(1),f=0;t.isEven()&&n.isEven();)t.ishrn(1),n.ishrn(1),++f;for(var h=n.clone(),c=t.clone();0!==t.cmpn(0);){for(;t.isEven();)t.ishrn(1),o.isEven()&&s.isEven()?(o.ishrn(1),s.ishrn(1)):(o.iadd(h).ishrn(1),s.isub(c).ishrn(1));for(;n.isEven();)n.ishrn(1),a.isEven()&&u.isEven()?(a.ishrn(1),u.ishrn(1)):(a.iadd(h).ishrn(1),u.isub(c).ishrn(1));t.cmp(n)>=0?(t.isub(n),o.isub(a),s.isub(u)):(n.isub(t),a.isub(o),u.isub(s))}return{a:a,b:u,gcd:n.ishln(f)}},i.prototype._invmp=function(e){r(!e.sign),r(0!==e.cmpn(0));var t=this,n=e.clone();t=t.sign?t.mod(e):t.clone();for(var o=new i(1),s=new i(0),a=n.clone();t.cmpn(1)>0&&n.cmpn(1)>0;){for(;t.isEven();)t.ishrn(1),o.isEven()?o.ishrn(1):o.iadd(a).ishrn(1);for(;n.isEven();)n.ishrn(1),s.isEven()?s.ishrn(1):s.iadd(a).ishrn(1);t.cmp(n)>=0?(t.isub(n),o.isub(s)):(n.isub(t),s.isub(o)); +}return 0===t.cmpn(1)?o:s},i.prototype.gcd=function(e){if(0===this.cmpn(0))return e.clone();if(0===e.cmpn(0))return this.clone();var t=this.clone(),r=e.clone();t.sign=!1,r.sign=!1;for(var n=0;t.isEven()&&r.isEven();n++)t.ishrn(1),r.ishrn(1);for(;;){for(;t.isEven();)t.ishrn(1);for(;r.isEven();)r.ishrn(1);var i=t.cmp(r);if(0>i){var o=t;t=r,r=o}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.ishln(n)},i.prototype.invm=function(e){return this.egcd(e).a.mod(e)},i.prototype.isEven=function(){return 0===(1&this.words[0])},i.prototype.isOdd=function(){return 1===(1&this.words[0])},i.prototype.andln=function(e){return this.words[0]&e},i.prototype.bincn=function(e){r("number"==typeof e);var t=e%26,n=(e-t)/26,i=1<o;o++)this.words[o]=0;return this.words[n]|=i,this.length=n+1,this}for(var s=i,o=n;0!==s&&o>>26,a&=67108863,this.words[o]=a}return 0!==s&&(this.words[o]=s,this.length++),this},i.prototype.cmpn=function(e){var t=0>e;if(t&&(e=-e),this.sign&&!t)return-1;if(!this.sign&&t)return 1;e&=67108863,this.strip();var r;if(this.length>1)r=1;else{var n=this.words[0];r=n===e?0:e>n?-1:1}return this.sign&&(r=-r),r},i.prototype.cmp=function(e){if(this.sign&&!e.sign)return-1;if(!this.sign&&e.sign)return 1;var t=this.ucmp(e);return this.sign?-t:t},i.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length=0;r--){var n=this.words[r],i=e.words[r];if(n!==i){i>n?t=-1:n>i&&(t=1);break}}return t},i.red=function(e){return new d(e)},i.prototype.toRed=function(e){return r(!this.red,"Already a number in reduction context"),r(!this.sign,"red works only with positives"),e.convertTo(this)._forceRed(e)},i.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},i.prototype._forceRed=function(e){return this.red=e,this},i.prototype.forceRed=function(e){return r(!this.red,"Already a number in reduction context"),this._forceRed(e)},i.prototype.redAdd=function(e){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},i.prototype.redIAdd=function(e){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},i.prototype.redSub=function(e){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},i.prototype.redISub=function(e){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},i.prototype.redShl=function(e){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},i.prototype.redMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},i.prototype.redIMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},i.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},i.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},i.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},i.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},i.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},i.prototype.redPow=function(e){return r(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var b={k256:null,p224:null,p192:null,p25519:null};a.prototype._tmp=function(){var e=new i(null);return e.words=new Array(Math.ceil(this.n/13)),e},a.prototype.ireduce=function(e){var t,r=e;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),t=r.bitLength();while(t>this.n);var n=t0?r.isub(this.p):r.strip(),r},a.prototype.split=function(e,t){e.ishrn(this.n,0,t)},a.prototype.imulK=function(e){return e.imul(this.k)},n(u,a),u.prototype.split=function(e,t){for(var r=4194303,n=Math.min(e.length,9),i=0;n>i;i++)t.words[i]=e.words[i];if(t.length=n,e.length<=9)return e.words[0]=0,void(e.length=1);var o=e.words[9];t.words[t.length++]=o&r;for(var i=10;i>>22,o=s}e.words[i-10]=o>>>22,e.length-=9},u.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t,r=0,n=0;n>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},i._prime=function v(e){if(b[e])return b[e];var v;if("k256"===e)v=new u;else if("p224"===e)v=new f;else if("p192"===e)v=new h;else{if("p25519"!==e)throw new Error("Unknown prime "+e);v=new c}return b[e]=v,v},d.prototype._verify1=function(e){r(!e.sign,"red works only with positives"),r(e.red,"red works only with red numbers")},d.prototype._verify2=function(e,t){r(!e.sign&&!t.sign,"red works only with positives"),r(e.red&&e.red===t.red,"red works only with red numbers")},d.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.mod(this.m)._forceRed(this)},d.prototype.neg=function(e){var t=e.clone();return t.sign=!t.sign,t.iadd(this.m)._forceRed(this)},d.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},d.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},d.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},d.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},d.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.shln(t))},d.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},d.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},d.prototype.isqr=function(e){return this.imul(e,e)},d.prototype.sqr=function(e){return this.mul(e,e)},d.prototype.sqrt=function(e){if(0===e.cmpn(0))return e.clone();var t=this.m.andln(3);if(r(t%2===1),3===t){var n=this.m.add(new i(1)).ishrn(2),o=this.pow(e,n);return o}for(var s=this.m.subn(1),a=0;0!==s.cmpn(0)&&0===s.andln(1);)a++,s.ishrn(1);r(0!==s.cmpn(0));var u=new i(1).toRed(this),f=u.redNeg(),h=this.m.subn(1).ishrn(1),c=this.m.bitLength();for(c=new i(2*c*c).toRed(this);0!==this.pow(c,h).cmp(f);)c.redIAdd(f);for(var d=this.pow(c,s),o=this.pow(e,s.addn(1).ishrn(1)),l=this.pow(e,s),p=a;0!==l.cmp(u);){for(var g=l,m=0;0!==g.cmp(u);m++)g=g.redSqr();r(p>m);var b=this.pow(d,new i(1).ishln(p-m-1));o=o.redMul(b),d=b.redSqr(),l=l.redMul(d),p=m}return o},d.prototype.invm=function(e){var t=e._invmp(this.m);return t.sign?(t.sign=!1,this.imod(t).redNeg()):this.imod(t)},d.prototype.pow=function(e,t){var r=[];if(0===t.cmpn(0))return new i(1);for(var n=t.clone();0!==n.cmpn(0);)r.push(n.andln(1)),n.ishrn(1);for(var o=e,s=0;s=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},l.prototype.mul=function(e,t){if(0===e.cmpn(0)||0===t.cmpn(0))return new i(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(n).ishrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},l.prototype.invm=function(e){var t=this.imod(e._invmp(this.m).mul(this.r2));return t._forceRed(this)}}("undefined"==typeof t||t,this)},{}],56:[function(e,t,r){function n(e){if(0===e.length)return"";var t,r,n=[0];for(t=0;t>8,n[r]&=255;for(;o;)n.push(255&o),o>>=8}for(t=0;"1"===e[t]&&tt[n]?1:0,0==r);++n);return 0==r&&(t.length>e.length?r=-1:e.length>t.length&&(r=1)),r}},{}],58:[function(e,t,r){"use strict";var n=r;n.version=e("../package.json").version,n.utils=e("./elliptic/utils"),n.rand=e("brorand"),n.hmacDRBG=e("./elliptic/hmac-drbg"),n.curve=e("./elliptic/curve"),n.curves=e("./elliptic/curves"),n.ec=e("./elliptic/ec")},{"../package.json":78,"./elliptic/curve":61,"./elliptic/curves":64,"./elliptic/ec":65,"./elliptic/hmac-drbg":68,"./elliptic/utils":70,brorand:71}],59:[function(e,t,r){"use strict";function n(e,t){this.type=e,this.p=new o(t.p,16),this.red=t.prime?o.red(t.prime):o.mont(this.p),this.zero=new o(0).toRed(this.red),this.one=new o(1).toRed(this.red),this.two=new o(2).toRed(this.red),this.n=t.n&&new o(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4)}function i(e,t){this.curve=e,this.type=t,this.precomputed=null}var o=e("bn.js"),s=e("../../elliptic"),a=s.utils.getNAF,u=s.utils.getJSF,f=s.utils.assert;t.exports=n,n.prototype.point=function(){throw new Error("Not implemented")},n.prototype.validate=function(){throw new Error("Not implemented")},n.prototype._fixedNafMul=function(e,t){var r=e._getDoubles(),n=a(t,1),i=(1<=s;t--)u=(u<<1)+n[t];o.push(u)}for(var f=this.jpoint(null,null,null),h=this.jpoint(null,null,null),c=i;c>0;c--){for(var s=0;s=0;u--){for(var t=0;u>=0&&0===o[u];u--)t++;if(u>=0&&t++,s=s.dblp(t),0>u)break;var h=o[u];f(0!==h),s="affine"===e.type?h>0?s.mixedAdd(i[h-1>>1]):s.mixedAdd(i[-h-1>>1].neg()):h>0?s.add(i[h-1>>1]):s.add(i[-h-1>>1].neg())}return"affine"===e.type?s.toP():s},n.prototype._wnafMulAdd=function(e,t,r,n){for(var i=this._wnafT1,o=this._wnafT2,s=this._wnafT3,f=0,h=0;n>h;h++){var c=t[h],d=c._getNAFPoints(e);i[h]=d.wnd,o[h]=d.points}for(var h=n-1;h>=1;h-=2){var l=h-1,p=h;if(1===i[l]&&1===i[p]){var g=[t[l],null,null,t[p]];0===t[l].y.cmp(t[p].y)?(g[1]=t[l].add(t[p]),g[2]=t[l].toJ().mixedAdd(t[p].neg())):0===t[l].y.cmp(t[p].y.redNeg())?(g[1]=t[l].toJ().mixedAdd(t[p]),g[2]=t[l].add(t[p].neg())):(g[1]=t[l].toJ().mixedAdd(t[p]),g[2]=t[l].toJ().mixedAdd(t[p].neg()));var m=[-3,-1,-5,-7,0,7,5,1,3],b=u(r[l],r[p]);f=Math.max(b[0].length,f),s[l]=new Array(f),s[p]=new Array(f);for(var v=0;f>v;v++){var y=0|b[0][v],w=0|b[1][v];s[l][v]=m[3*(y+1)+(w+1)],s[p][v]=0,o[l]=g}}else s[l]=a(r[l],i[l]),s[p]=a(r[p],i[p]),f=Math.max(s[l].length,f),f=Math.max(s[p].length,f)}for(var _=this.jpoint(null,null,null),S=this._wnafT4,h=f;h>=0;h--){for(var A=0;h>=0;){for(var I=!0,v=0;n>v;v++)S[v]=0|s[v][h],0!==S[v]&&(I=!1);if(!I)break;A++,h--}if(h>=0&&A++,_=_.dblp(A),0>h)break;for(var v=0;n>v;v++){var c,E=S[v];0!==E&&(E>0?c=o[v][E-1>>1]:0>E&&(c=o[v][-E-1>>1].neg()),_="affine"===c.type?_.mixedAdd(c):_.add(c))}}for(var h=0;n>h;h++)o[h]=null;return _.toP()},n.BasePoint=i,i.prototype.validate=function(){return this.curve.validate(this)},i.prototype.precompute=function(e){if(this.precomputed)return this;var t={doubles:null,naf:null,beta:null};return t.naf=this._getNAFPoints(8),t.doubles=this._getDoubles(4,e),t.beta=this._getBeta(),this.precomputed=t,this},i.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;t>i;i+=e){for(var o=0;e>o;o++)n=n.dbl();r.push(n)}return{step:e,points:r}},i.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var t=[this],r=(1<i;i++)t[i]=t[i-1].add(n);return{wnd:e,points:t}},i.prototype._getBeta=function(){return null},i.prototype.dblp=function(e){for(var t=this,r=0;e>r;r++)t=t.dbl();return t}},{"../../elliptic":58,"bn.js":55}],60:[function(e,t,r){"use strict";function n(e){this.twisted=1!==(0|e.a),this.mOneA=this.twisted&&-1===(0|e.a),this.extended=this.mOneA,f.call(this,"edwards",e),this.a=new a(e.a,16).mod(this.red.m).toRed(this.red),this.c=new a(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new a(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),h(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|e.c)}function i(e,t,r,n,i){f.BasePoint.call(this,e,"projective"),null===t&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new a(t,16),this.y=new a(r,16),this.z=n?new a(n,16):this.curve.one,this.t=i&&new a(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var o=e("../curve"),s=e("../../elliptic"),a=e("bn.js"),u=e("inherits"),f=o.base,h=s.utils.assert;u(n,f),t.exports=n,n.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},n.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},n.prototype.jpoint=function(e,t,r,n){return this.point(e,t,r,n)},n.prototype.pointFromX=function(e,t){t=new a(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),s=n.redMul(i.redInvm()).redSqrt(),u=s.fromRed().isOdd();return(e&&!u||!e&&u)&&(s=s.redNeg()),this.point(t,s,o.one)},n.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),n=t.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===n.cmp(i)},u(i,f.BasePoint),n.prototype.pointFromJSON=function(e){return i.fromJSON(this,e)},n.prototype.point=function(e,t,r,n){return new i(this,e,t,r,n)},i.fromJSON=function(e,t){return new i(e,t[0],t[1],t[2])},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},i.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(e),i=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),o=n.redAdd(t),s=o.redSub(r),a=n.redSub(t),u=i.redMul(s),f=o.redMul(a),h=i.redMul(a),c=s.redMul(o);return this.curve.point(u,f,c,h)},i.prototype._projDbl=function(){var e,t,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var s=this.curve._mulA(i),a=s.redAdd(o);if(this.zOne)e=n.redSub(i).redSub(o).redMul(a.redSub(this.curve.two)),t=a.redMul(s.redSub(o)),r=a.redSqr().redSub(a).redSub(a);else{var u=this.z.redSqr(),f=a.redSub(u).redISub(u);e=n.redSub(i).redISub(o).redMul(f),t=a.redMul(s.redSub(o)),r=a.redMul(f)}}else{var s=i.redAdd(o),u=this.curve._mulC(this.c.redMul(this.z)).redSqr(),f=s.redSub(u).redSub(u);e=this.curve._mulC(n.redISub(s)).redMul(f),t=this.curve._mulC(s).redMul(i.redISub(o)),r=s.redMul(f)}return this.curve.point(e,t,r)},i.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},i.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),i=this.z.redMul(e.z.redAdd(e.z)),o=r.redSub(t),s=i.redSub(n),a=i.redAdd(n),u=r.redAdd(t),f=o.redMul(s),h=a.redMul(u),c=o.redMul(u),d=s.redMul(a);return this.curve.point(f,h,d,c)},i.prototype._projAdd=function(e){var t,r,n=this.z.redMul(e.z),i=n.redSqr(),o=this.x.redMul(e.x),s=this.y.redMul(e.y),a=this.curve.d.redMul(o).redMul(s),u=i.redSub(a),f=i.redAdd(a),h=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(o).redISub(s),c=n.redMul(u).redMul(h);return this.curve.twisted?(t=n.redMul(f).redMul(s.redSub(this.curve._mulA(o))),r=u.redMul(f)):(t=n.redMul(f).redMul(s.redSub(o)),r=this.curve._mulC(u).redMul(f)),this.curve.point(c,t,r)},i.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},i.prototype.mul=function(e){return this.precomputed&&this.precomputed.doubles?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},i.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2)},i.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},i.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()},i.prototype.getY=function(){return this.normalize(),this.y.fromRed()},i.prototype.toP=i.prototype.normalize,i.prototype.mixedAdd=i.prototype.add},{"../../elliptic":58,"../curve":61,"bn.js":55,inherits:79}],61:[function(e,t,r){"use strict";var n=r;n.base=e("./base"),n["short"]=e("./short"),n.mont=e("./mont"),n.edwards=e("./edwards")},{"./base":59,"./edwards":60,"./mont":62,"./short":63}],62:[function(e,t,r){"use strict";function n(e){u.call(this,"mont",e),this.a=new s(e.a,16).toRed(this.red),this.b=new s(e.b,16).toRed(this.red),this.i4=new s(4).toRed(this.red).redInvm(),this.two=new s(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function i(e,t,r){u.BasePoint.call(this,e,"projective"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new s(t,16),this.z=new s(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var o=e("../curve"),s=e("bn.js"),a=e("inherits"),u=o.base;a(n,u),t.exports=n,n.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),n=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t),i=n.redSqrt();return 0===i.redSqr().cmp(n)},a(i,u.BasePoint),n.prototype.point=function(e,t){return new i(this,e,t)},n.prototype.pointFromJSON=function(e){return i.fromJSON(this,e)},i.prototype.precompute=function(){},i.fromJSON=function(e,t){return new i(e,t[0],t[1]||e.one)},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},i.prototype.dbl=function(){var e=this.x.redAdd(this.z),t=e.redSqr(),r=this.x.redSub(this.z),n=r.redSqr(),i=t.redSub(n),o=t.redMul(n),s=i.redMul(n.redAdd(this.curve.a24.redMul(i)));return this.curve.point(o,s)},i.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=e.x.redAdd(e.z),o=e.x.redSub(e.z),s=o.redMul(r),a=i.redMul(n),u=t.z.redMul(s.redAdd(a).redSqr()),f=t.x.redMul(s.redISub(a).redSqr());return this.curve.point(u,f)},i.prototype.mul=function(e){for(var t=e.clone(),r=this,n=this.curve.point(null,null),i=this,o=[];0!==t.cmpn(0);t.ishrn(1))o.push(t.andln(1));for(var s=o.length-1;s>=0;s--)0===o[s]?(r=r.diffAdd(n,i),n=n.dbl()):(n=r.diffAdd(n,i),r=r.dbl());return n},i.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../curve":61,"bn.js":55,inherits:79}],63:[function(e,t,r){"use strict";function n(e){h.call(this,"short",e),this.a=new u(e.a,16).toRed(this.red),this.b=new u(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function i(e,t,r,n){h.BasePoint.call(this,e,"affine"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new u(t,16),this.y=new u(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function o(e,t,r,n){h.BasePoint.call(this,e,"jacobian"),null===t&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new u(0)):(this.x=new u(t,16),this.y=new u(r,16),this.z=new u(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var s=e("../curve"),a=e("../../elliptic"),u=e("bn.js"),f=e("inherits"),h=s.base,c=a.utils.assert;f(n,h),t.exports=n,n.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new u(e.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);t=n[0].cmp(n[1])<0?n[0]:n[1],t=t.toRed(this.red)}if(e.lambda)r=new u(e.lambda,16);else{var i=this._getEndoRoots(this.n);0===this.g.mul(i[0]).x.cmp(this.g.x.redMul(t))?r=i[0]:(r=i[1],c(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}var o;return o=e.basis?e.basis.map(function(e){return{a:new u(e.a,16),b:new u(e.b,16)}}):this._getEndoBasis(r),{beta:t,lambda:r,basis:o}}},n.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:u.mont(e),r=new u(2).toRed(t).redInvm(),n=r.redNeg(),i=new u(3).toRed(t).redNeg().redSqrt().redMul(r),o=n.redAdd(i).fromRed(),s=n.redSub(i).fromRed();return[o,s]},n.prototype._getEndoBasis=function(e){for(var t,r,n,i,o,s,a,f,h,c=this.n.shrn(Math.floor(this.n.bitLength()/2)),d=e,l=this.n.clone(),p=new u(1),g=new u(0),m=new u(0),b=new u(1),v=0;0!==d.cmpn(0);){var y=l.div(d);f=l.sub(y.mul(d)),h=m.sub(y.mul(p));var w=b.sub(y.mul(g));if(!n&&f.cmp(c)<0)t=a.neg(),r=p,n=f.neg(),i=h;else if(n&&2===++v)break;a=f,l=d,d=f,m=p,p=h,b=g,g=w}o=f.neg(),s=h;var _=n.sqr().add(i.sqr()),S=o.sqr().add(s.sqr());return S.cmp(_)>=0&&(o=t,s=r),n.sign&&(n=n.neg(),i=i.neg()),o.sign&&(o=o.neg(),s=s.neg()),[{a:n,b:i},{a:o,b:s}]},n.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],n=t[1],i=n.b.mul(e).divRound(this.n),o=r.b.neg().mul(e).divRound(this.n),s=i.mul(r.a),a=o.mul(n.a),u=i.mul(r.b),f=o.mul(n.b),h=e.sub(s).sub(a),c=u.add(f).neg();return{k1:h,k2:c}},n.prototype.pointFromX=function(e,t){t=new u(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),n=r.redSqrt(),i=n.fromRed().isOdd();return(e&&!i||!e&&i)&&(n=n.redNeg()),this.point(t,n)},n.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,n=this.a.redMul(t),i=t.redSqr().redMul(t).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},n.prototype._endoWnafMulAdd=function(e,t){for(var r=this._endoWnafT1,n=this._endoWnafT2,i=0;if;f++)r[f]=null,n[f]=null;return u},f(i,h.BasePoint),n.prototype.point=function(e,t,r){return new i(this,e,t,r)},n.prototype.pointFromJSON=function(e,t){return i.fromJSON(this,e,t)},i.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var t=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var r=this.curve,n=function(e){return r.point(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(n)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(n)}}}return t}},i.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},i.fromJSON=function(e,t,r){function n(t){return e.point(t[0],t[1],r)}"string"==typeof t&&(t=JSON.parse(t));var i=e.point(t[0],t[1],r);if(!t[2])return i;var o=t[2];return i.precomputed={beta:null,doubles:o.doubles&&{step:o.doubles.step,points:[i].concat(o.doubles.points.map(n))},naf:o.naf&&{wnd:o.naf.wnd,points:[i].concat(o.naf.points.map(n))}},i},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return this.inf},i.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),n=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},i.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),n=e.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),s=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,s)},i.prototype.getX=function(){return this.x.fromRed()},i.prototype.getY=function(){return this.y.fromRed()},i.prototype.mul=function(e){return e=new u(e,16),this.precomputed&&this.precomputed.doubles?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},i.prototype.mulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},i.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},i.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,n=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return t},i.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var e=this.curve.jpoint(this.x,this.y,this.curve.one);return e},f(o,h.BasePoint),n.prototype.jpoint=function(e,t,r){return new o(this,e,t,r)},o.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),n=this.y.redMul(t).redMul(e);return this.curve.point(r,n)},o.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},o.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(t),i=e.x.redMul(r),o=this.y.redMul(t.redMul(e.z)),s=e.y.redMul(r.redMul(this.z)),a=n.redSub(i),u=o.redSub(s);if(0===a.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=a.redSqr(),h=f.redMul(a),c=n.redMul(f),d=u.redSqr().redIAdd(h).redISub(c).redISub(c),l=u.redMul(c.redISub(d)).redISub(o.redMul(h)),p=this.z.redMul(e.z).redMul(a);return this.curve.jpoint(d,l,p)},o.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,n=e.x.redMul(t),i=this.y,o=e.y.redMul(t).redMul(this.z),s=r.redSub(n),a=i.redSub(o);if(0===s.cmpn(0))return 0!==a.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=s.redSqr(),f=u.redMul(s),h=r.redMul(u),c=a.redSqr().redIAdd(f).redISub(h).redISub(h),d=a.redMul(h.redISub(c)).redISub(i.redMul(f)),l=this.z.redMul(s);return this.curve.jpoint(c,d,l)},o.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;e>r;r++)t=t.dbl();return t}for(var n=this.curve.a,i=this.curve.tinv,o=this.x,s=this.y,a=this.z,u=a.redSqr().redSqr(),f=s.redAdd(s),r=0;e>r;r++){var h=o.redSqr(),c=f.redSqr(),d=c.redSqr(),l=h.redAdd(h).redIAdd(h).redIAdd(n.redMul(u)),p=o.redMul(c),g=l.redSqr().redISub(p.redAdd(p)),m=p.redISub(g),b=l.redMul(m);b=b.redIAdd(b).redISub(d);var v=f.redMul(a);e>r+1&&(u=u.redMul(d)),o=g,a=v,f=b}return this.curve.jpoint(o,f.redMul(i),a)},o.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},o.prototype._zeroDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),s=this.x.redAdd(i).redSqr().redISub(n).redISub(o);s=s.redIAdd(s);var a=n.redAdd(n).redIAdd(n),u=a.redSqr().redISub(s).redISub(s),f=o.redIAdd(o);f=f.redIAdd(f),f=f.redIAdd(f),e=u,t=a.redMul(s.redISub(u)).redISub(f),r=this.y.redAdd(this.y)}else{var h=this.x.redSqr(),c=this.y.redSqr(),d=c.redSqr(),l=this.x.redAdd(c).redSqr().redISub(h).redISub(d);l=l.redIAdd(l);var p=h.redAdd(h).redIAdd(h),g=p.redSqr(),m=d.redIAdd(d);m=m.redIAdd(m),m=m.redIAdd(m),e=g.redISub(l).redISub(l),t=p.redMul(l.redISub(e)).redISub(m),r=this.y.redMul(this.z),r=r.redIAdd(r)}return this.curve.jpoint(e,t,r)},o.prototype._threeDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),s=this.x.redAdd(i).redSqr().redISub(n).redISub(o);s=s.redIAdd(s);var a=n.redAdd(n).redIAdd(n).redIAdd(this.curve.a),u=a.redSqr().redISub(s).redISub(s);e=u;var f=o.redIAdd(o);f=f.redIAdd(f),f=f.redIAdd(f),t=a.redMul(s.redISub(u)).redISub(f),r=this.y.redAdd(this.y)}else{var h=this.z.redSqr(),c=this.y.redSqr(),d=this.x.redMul(c),l=this.x.redSub(h).redMul(this.x.redAdd(h));l=l.redAdd(l).redIAdd(l);var p=d.redIAdd(d);p=p.redIAdd(p);var g=p.redAdd(p);e=l.redSqr().redISub(g),r=this.y.redAdd(this.z).redSqr().redISub(c).redISub(h);var m=c.redSqr();m=m.redIAdd(m),m=m.redIAdd(m),m=m.redIAdd(m),t=l.redMul(p.redISub(e)).redISub(m)}return this.curve.jpoint(e,t,r)},o.prototype._dbl=function(){var e=this.curve.a,t=this.x,r=this.y,n=this.z,i=n.redSqr().redSqr(),o=t.redSqr(),s=r.redSqr(),a=o.redAdd(o).redIAdd(o).redIAdd(e.redMul(i)),u=t.redAdd(t);u=u.redIAdd(u);var f=u.redMul(s),h=a.redSqr().redISub(f.redAdd(f)),c=f.redISub(h),d=s.redSqr(); +d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=a.redMul(c).redISub(d),p=r.redAdd(r).redMul(n);return this.curve.jpoint(h,l,p)},o.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr(),n=t.redSqr(),i=e.redAdd(e).redIAdd(e),o=i.redSqr(),s=this.x.redAdd(t).redSqr().redISub(e).redISub(n);s=s.redIAdd(s),s=s.redAdd(s).redIAdd(s),s=s.redISub(o);var a=s.redSqr(),u=n.redIAdd(n);u=u.redIAdd(u),u=u.redIAdd(u),u=u.redIAdd(u);var f=i.redIAdd(s).redSqr().redISub(o).redISub(a).redISub(u),h=t.redMul(f);h=h.redIAdd(h),h=h.redIAdd(h);var c=this.x.redMul(a).redISub(h);c=c.redIAdd(c),c=c.redIAdd(c);var d=this.y.redMul(f.redMul(u.redISub(f)).redISub(s.redMul(a)));d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=this.z.redAdd(s).redSqr().redISub(r).redISub(a);return this.curve.jpoint(c,d,l)},o.prototype.mul=function(e,t){return e=new u(e,t),this.curve._wnafMul(this,e)},o.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;var n=t.redMul(this.z),i=r.redMul(e.z);return 0===this.y.redMul(i).redISub(e.y.redMul(n)).cmpn(0)},o.prototype.inspect=function(){return this.isInfinity()?"":""},o.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../../elliptic":58,"../curve":61,"bn.js":55,inherits:79}],64:[function(e,t,r){"use strict";function n(e){"short"===e.type?this.curve=new a.curve["short"](e):"edwards"===e.type?this.curve=new a.curve.edwards(e):this.curve=new a.curve.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,u(this.g.validate(),"Invalid curve"),u(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function i(e,t){Object.defineProperty(o,e,{configurable:!0,enumerable:!0,get:function(){var r=new n(t);return Object.defineProperty(o,e,{configurable:!0,enumerable:!0,value:r}),r}})}var o=r,s=e("hash.js"),a=e("../elliptic"),u=a.utils.assert;o.PresetCurve=n,i("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:s.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),i("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:s.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),i("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:s.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),i("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"0",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:s.sha256,gRed:!1,g:["9"]}),i("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:s.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var f;try{f=e("./precomputed/secp256k1")}catch(h){f=void 0}i("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:s.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",f]})},{"../elliptic":58,"./precomputed/secp256k1":69,"hash.js":72}],65:[function(e,t,r){"use strict";function n(e){return this instanceof n?("string"==typeof e&&(a(o.curves.hasOwnProperty(e),"Unknown curve "+e),e=o.curves[e]),e instanceof o.curves.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.shrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),void(this.hash=e.hash||e.curve.hash)):new n(e)}var i=e("bn.js"),o=e("../../elliptic"),s=o.utils,a=s.assert,u=e("./key"),f=e("./signature");t.exports=n,n.prototype.keyPair=function(e){return new u(this,e)},n.prototype.keyFromPrivate=function(e,t){return u.fromPrivate(this,e,t)},n.prototype.keyFromPublic=function(e,t){return u.fromPublic(this,e,t)},n.prototype.genKeyPair=function(e){e||(e={});for(var t=new o.hmacDRBG({hash:this.hash,pers:e.pers,entropy:e.entropy||o.rand(this.hash.hmacStrength),nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var s=new i(t.generate(r));if(!(s.cmp(n)>0))return s.iaddn(1),this.keyFromPrivate(s)}},n.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.shrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},n.prototype.sign=function(e,t,r,n){"object"==typeof r&&(n=r,r=null),n||(n={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new i(e,16));for(var s=this.n.byteLength(),a=t.getPrivate().toArray(),u=a.length;21>u;u++)a.unshift(0);for(var h=e.toArray(),u=h.length;s>u;u++)h.unshift(0);for(var c=new o.hmacDRBG({hash:this.hash,entropy:a,nonce:h}),d=this.n.sub(new i(1));;){var l=new i(c.generate(this.n.byteLength()));if(l=this._truncateToN(l,!0),!(l.cmpn(1)<=0||l.cmp(d)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var g=p.getX().mod(this.n);if(0!==g.cmpn(0)){var m=l.invm(this.n).mul(g.mul(t.getPrivate()).iadd(e)).mod(this.n);if(0!==m.cmpn(0))return n.canonical&&m.cmp(this.nh)>0&&(m=this.n.sub(m)),new f({r:g,s:m})}}}}},n.prototype.verify=function(e,t,r,n){e=this._truncateToN(new i(e,16)),r=this.keyFromPublic(r,n),t=new f(t,"hex");var o=t.r,s=t.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return!1;var a=s.invm(this.n),u=a.mul(e).mod(this.n),h=a.mul(o).mod(this.n),c=this.g.mulAdd(u,r.getPublic(),h);return c.isInfinity()?!1:0===c.getX().mod(this.n).cmp(o)}},{"../../elliptic":58,"./key":66,"./signature":67,"bn.js":55}],66:[function(e,t,r){"use strict";function n(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}var i=e("bn.js"),o=e("../../elliptic"),s=o.utils;t.exports=n,n.fromPublic=function(e,t,r){return t instanceof n?t:new n(e,{pub:t,pubEnc:r})},n.fromPrivate=function(e,t,r){return t instanceof n?t:new n(e,{priv:t,privEnc:r})},n.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},n.prototype.getPublic=function(e,t){if(this.pub||(this.pub=this.ec.g.mul(this.priv)),"string"==typeof e&&(t=e,e=null),!t)return this.pub;for(var r=this.ec.curve.p.byteLength(),n=this.pub.getX().toArray(),i=n.length;r>i;i++)n.unshift(0);var o;if("mont"!==this.ec.curve.type)if(e)o=[this.pub.getY().isEven()?2:3].concat(n);else{for(var a=this.pub.getY().toArray(),i=a.length;r>i;i++)a.unshift(0);var o=[4].concat(n,a)}else o=n;return s.encode(o,t)},n.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},n.prototype._importPrivate=function(e,t){this.priv=new i(e,t||16),this.priv=this.priv.mod(this.ec.curve.n)},n.prototype._importPublic=function(e,t){return e.x||e.y?void(this.pub=this.ec.curve.point(e.x,e.y)):(e=s.toArray(e,t),"mont"!==this.ec.curve.type?this._importPublicShort(e):this._importPublicMont(e))},n.prototype._importPublicShort=function(e){var t=this.ec.curve.p.byteLength();4===e[0]&&e.length-1===2*t?this.pub=this.ec.curve.point(e.slice(1,1+t),e.slice(1+t,1+2*t)):2!==e[0]&&3!==e[0]||e.length-1!==t||(this.pub=this.ec.curve.pointFromX(3===e[0],e.slice(1,1+t)))},n.prototype._importPublicMont=function(e){this.pub=this.ec.curve.point(e,1)},n.prototype.derive=function(e){return e.mul(this.priv).getX()},n.prototype.sign=function(e){return this.ec.sign(e,this)},n.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},n.prototype.inspect=function(){return""}},{"../../elliptic":58,"bn.js":55}],67:[function(e,t,r){"use strict";function n(e,t){return e instanceof n?e:void(this._importDER(e,t)||(a(e.r&&e.s,"Signature without r or s"),this.r=new i(e.r,16),this.s=new i(e.s,16)))}var i=e("bn.js"),o=e("../../elliptic"),s=o.utils,a=s.assert;t.exports=n,n.prototype._importDER=function(e,t){if(e=s.toArray(e,t),e.length<6||48!==e[0]||2!==e[2])return!1;var r=e[1];if(1+r>e.length)return!1;var n=e[3];if(n>=128)return!1;if(4+n+2>=e.length)return!1;if(2!==e[4+n])return!1;var o=e[5+n];return o>=128?!1:4+n+2+o>e.length?!1:(this.r=new i(e.slice(4,4+n)),this.s=new i(e.slice(4+n+2,4+n+2+o)),!0)},n.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r));var n=t.length+r.length+4,i=[48,n,2,t.length];return i=i.concat(t,[2,r.length],r),s.encode(i,e)}},{"../../elliptic":58,"bn.js":55}],68:[function(e,t,r){"use strict";function n(e){if(!(this instanceof n))return new n(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this.reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=s.toArray(e.entropy,e.entropyEnc),r=s.toArray(e.nonce,e.nonceEnc),i=s.toArray(e.pers,e.persEnc);a(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,r,i)}var i=e("hash.js"),o=e("../elliptic"),s=o.utils,a=s.assert;t.exports=n,n.prototype._init=function(e,t,r){var n=e.concat(t).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var i=0;i=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(r||[])),this.reseed=1},n.prototype.generate=function(e,t,r,n){if(this.reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof t&&(n=r,r=t,t=null),r&&(r=s.toArray(r,n),this._update(r));for(var i=[];i.length>8,s=255&i;o?r.push(o,s):r.push(s)}return r}function i(e){return 1===e.length?"0"+e:e}function o(e){for(var t="",r=0;r=0;){var o;if(i.isOdd()){var s=i.andln(n-1);o=s>(n>>1)-1?(n>>1)-s:s,i.isubn(o)}else o=0;r.push(o);for(var a=0!==i.cmpn(0)&&0===i.andln(n-1)?t+1:1,u=1;a>u;u++)r.push(0);i.ishrn(a)}return r}function a(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var n=0,i=0;e.cmpn(-n)>0||t.cmpn(-i)>0;){var o=e.andln(3)+n&3,s=t.andln(3)+i&3;3===o&&(o=-1),3===s&&(s=-1);var a;if(0===(1&o))a=0;else{var u=e.andln(7)+n&7;a=3!==u&&5!==u||2!==s?o:-o}r[0].push(a);var f;if(0===(1&s))f=0;else{var u=t.andln(7)+i&7;f=3!==u&&5!==u||2!==o?s:-s}r[1].push(f),2*n===a+1&&(n=1-n),2*i===f+1&&(i=1-i),e.ishrn(1),t.ishrn(1)}return r}var u=r;u.assert=function(e,t){if(!e)throw new Error(t||"Assertion failed")},u.toArray=n,u.zero2=i,u.toHex=o,u.encode=function(e,t){return"hex"===t?o(e):e},u.getNAF=s,u.getJSF=a},{}],71:[function(e,t,r){function n(e){this.rand=e}var i;if(t.exports=function(e){return i||(i=new n(null)),i.generate(e)},t.exports.Rand=n,n.prototype.generate=function(e){return this._rand(e)},"object"==typeof window)window.crypto&&window.crypto.getRandomValues?n.prototype._rand=function(e){var t=new Uint8Array(e);return window.crypto.getRandomValues(t),t}:window.msCrypto&&window.msCrypto.getRandomValues?n.prototype._rand=function(e){var t=new Uint8Array(e);return window.msCrypto.getRandomValues(t),t}:n.prototype._rand=function(){throw new Error("Not implemented yet")};else try{var o=e("crypto");n.prototype._rand=function(e){return o.randomBytes(e)}}catch(s){n.prototype._rand=function(e){for(var t=new Uint8Array(e),r=0;r=this._delta8){e=this.pending;var r=e.length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=o.join32(e,0,e.length-r,this.endian);for(var n=0;ni;i++)n[i]=0;if(e<<=3,"big"===this.endian){for(var o=8;o>>24&255,n[i++]=e>>>16&255,n[i++]=e>>>8&255,n[i++]=255&e}else{n[i++]=255&e,n[i++]=e>>>8&255,n[i++]=e>>>16&255,n[i++]=e>>>24&255,n[i++]=0,n[i++]=0,n[i++]=0,n[i++]=0;for(var o=8;othis.blockSize&&(e=(new this.Hash).update(e).digest()),s(e.length<=this.blockSize);for(var t=e.length;t=e?t^r^n:31>=e?t&r|~t&n:47>=e?(t|~r)^n:63>=e?t&n|r&~n:t^(r|~n)}function o(e){return 15>=e?0:31>=e?1518500249:47>=e?1859775393:63>=e?2400959708:2840853838}function s(e){return 15>=e?1352829926:31>=e?1548603684:47>=e?1836072691:63>=e?2053994217:0}var a=e("../hash"),u=a.utils,f=u.rotl32,h=u.sum32,c=u.sum32_3,d=u.sum32_4,l=a.common.BlockHash;u.inherits(n,l),r.ripemd160=n,n.blockSize=512,n.outSize=160,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(e,t){for(var r=this.h[0],n=this.h[1],a=this.h[2],u=this.h[3],l=this.h[4],v=r,y=n,w=a,_=u,S=l,A=0;80>A;A++){var I=h(f(d(r,i(A,n,a,u),e[p[A]+t],o(A)),m[A]),l);r=l,l=u,u=f(a,10),a=n,n=I,I=h(f(d(v,i(79-A,y,w,_),e[g[A]+t],s(A)),b[A]),S),v=S,S=_,_=f(w,10),w=y,y=I}I=c(this.h[1],a,_),this.h[1]=c(this.h[2],u,S),this.h[2]=c(this.h[3],l,v),this.h[3]=c(this.h[4],r,y),this.h[4]=c(this.h[0],n,w),this.h[0]=I},n.prototype._digest=function(e){return"hex"===e?u.toHex32(this.h,"little"):u.split32(this.h,"little")};var p=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],g=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],m=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],b=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},{"../hash":72}],76:[function(e,t,r){function n(){return this instanceof n?(G.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=W,void(this.W=new Array(64))):new n}function i(){return this instanceof i?(n.call(this),void(this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])):new i}function o(){return this instanceof o?(G.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=X,void(this.W=new Array(160))):new o}function s(){return this instanceof s?(o.call(this),void(this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428])):new s}function a(){return this instanceof a?(G.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.W=new Array(80))):new a}function u(e,t,r){return e&t^~e&r}function f(e,t,r){return e&t^e&r^t&r}function h(e,t,r){return e^t^r}function c(e){return O(e,2)^O(e,13)^O(e,22)}function d(e){return O(e,6)^O(e,11)^O(e,25)}function l(e){return O(e,7)^O(e,18)^e>>>3}function p(e){return O(e,17)^O(e,19)^e>>>10}function g(e,t,r,n){return 0===e?u(t,r,n):1===e||3===e?h(t,r,n):2===e?f(t,r,n):void 0}function m(e,t,r,n,i,o){var s=e&r^~e&i;return 0>s&&(s+=4294967296),s}function b(e,t,r,n,i,o){var s=t&n^~t&o;return 0>s&&(s+=4294967296),s}function v(e,t,r,n,i,o){var s=e&r^e&i^r&i;return 0>s&&(s+=4294967296),s}function y(e,t,r,n,i,o){var s=t&n^t&o^n&o;return 0>s&&(s+=4294967296),s}function w(e,t){var r=j(e,t,28),n=j(t,e,2),i=j(t,e,7),o=r^n^i;return 0>o&&(o+=4294967296),o}function _(e,t){var r=L(e,t,28),n=L(t,e,2),i=L(t,e,7),o=r^n^i;return 0>o&&(o+=4294967296),o}function S(e,t){var r=j(e,t,14),n=j(e,t,18),i=j(t,e,9),o=r^n^i;return 0>o&&(o+=4294967296),o}function A(e,t){var r=L(e,t,14),n=L(e,t,18),i=L(t,e,9),o=r^n^i;return 0>o&&(o+=4294967296),o}function I(e,t){var r=j(e,t,1),n=j(e,t,8),i=D(e,t,7),o=r^n^i;return 0>o&&(o+=4294967296),o}function E(e,t){var r=L(e,t,1),n=L(e,t,8),i=z(e,t,7),o=r^n^i;return 0>o&&(o+=4294967296),o}function k(e,t){var r=j(e,t,19),n=j(t,e,29),i=D(e,t,6),o=r^n^i;return 0>o&&(o+=4294967296),o}function x(e,t){var r=L(e,t,19),n=L(t,e,29),i=z(e,t,6),o=r^n^i;return 0>o&&(o+=4294967296),o}var M=e("../hash"),P=M.utils,B=P.assert,O=P.rotr32,R=P.rotl32,T=P.sum32,N=P.sum32_4,C=P.sum32_5,j=P.rotr64_hi,L=P.rotr64_lo,D=P.shr64_hi,z=P.shr64_lo,U=P.sum64,K=P.sum64_hi,F=P.sum64_lo,H=P.sum64_4_hi,q=P.sum64_4_lo,V=P.sum64_5_hi,Y=P.sum64_5_lo,G=M.common.BlockHash,W=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],X=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],Z=[1518500249,1859775393,2400959708,3395469782];P.inherits(n,G),r.sha256=n,n.blockSize=512,n.outSize=256,n.hmacStrength=192,n.padLength=64,n.prototype._update=function(e,t){for(var r=this.W,n=0;16>n;n++)r[n]=e[t+n];for(;nn;n++)r[n]=e[t+n];for(;nn;n++)r[n]=e[t+n];for(;n>8,s=255&i;o?r.push(o,s):r.push(s)}else for(var n=0;n>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24;return t>>>0}function s(e,t){for(var r="",n=0;n>>0}return o}function h(e,t){for(var r=new Array(4*e.length),n=0,i=0;n>>24,r[i+1]=o>>>16&255,r[i+2]=o>>>8&255,r[i+3]=255&o):(r[i+3]=o>>>24,r[i+2]=o>>>16&255,r[i+1]=o>>>8&255,r[i]=255&o)}return r}function c(e,t){return e>>>t|e<<32-t}function d(e,t){return e<>>32-t}function l(e,t){return e+t>>>0}function p(e,t,r){return e+t+r>>>0}function g(e,t,r,n){return e+t+r+n>>>0}function m(e,t,r,n,i){return e+t+r+n+i>>>0}function b(e,t){if(!e)throw new Error(t||"Assertion failed")}function v(e,t,r,n){var i=e[t],o=e[t+1],s=n+o>>>0,a=(n>s?1:0)+r+i;e[t]=a>>>0,e[t+1]=s}function y(e,t,r,n){var i=t+n>>>0,o=(t>i?1:0)+e+r;return o>>>0}function w(e,t,r,n){var i=t+n;return i>>>0}function _(e,t,r,n,i,o,s,a){var u=0,f=t;f=f+n>>>0,u+=t>f?1:0,f=f+o>>>0,u+=o>f?1:0,f=f+a>>>0,u+=a>f?1:0;var h=e+r+i+s+u;return h>>>0}function S(e,t,r,n,i,o,s,a){var u=t+n+o+a;return u>>>0}function A(e,t,r,n,i,o,s,a,u,f){var h=0,c=t;c=c+n>>>0,h+=t>c?1:0,c=c+o>>>0,h+=o>c?1:0,c=c+a>>>0,h+=a>c?1:0,c=c+f>>>0,h+=f>c?1:0;var d=e+r+i+s+u+h;return d>>>0}function I(e,t,r,n,i,o,s,a,u,f){var h=t+n+o+a+f;return h>>>0}function E(e,t,r){var n=t<<32-r|e>>>r;return n>>>0}function k(e,t,r){var n=e<<32-r|t>>>r;return n>>>0}function x(e,t,r){return e>>>r}function M(e,t,r){var n=e<<32-r|t>>>r;return n>>>0}var P=r,B=e("inherits");P.toArray=n,P.toHex=i,P.htonl=o,P.toHex32=s,P.zero2=a,P.zero8=u,P.join32=f,P.split32=h,P.rotr32=c,P.rotl32=d,P.sum32=l,P.sum32_3=p,P.sum32_4=g,P.sum32_5=m,P.assert=b,P.inherits=B,r.sum64=v,r.sum64_hi=y,r.sum64_lo=w,r.sum64_4_hi=_,r.sum64_4_lo=S,r.sum64_5_hi=A,r.sum64_5_lo=I,r.rotr64_hi=E,r.rotr64_lo=k,r.shr64_hi=x,r.shr64_lo=M},{inherits:79}],78:[function(e,t,r){t.exports={_args:[["elliptic@https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz","/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/bitcore-lib"]],_from:"elliptic@=3.0.3",_id:"elliptic@3.0.3",_inCache:!0,_location:"/bitcore-lib/elliptic",_phantomChildren:{inherits:"2.0.1"},_requested:{name:"elliptic",raw:"elliptic@https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz",rawSpec:"https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz",scope:null,spec:"https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz",type:"remote"},_requiredBy:["/bitcore-lib"],_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz",_shasum:"865c9b420bfbe55006b9f969f97a0d2c44966595",_shrinkwrap:null,_spec:"elliptic@https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz",_where:"/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/bitcore-lib",author:{email:"fedor@indutny.com",name:"Fedor Indutny"},bugs:{url:"https://github.com/indutny/elliptic/issues"},dependencies:{"bn.js":"^2.0.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},description:"EC cryptography",devDependencies:{browserify:"^3.44.2",jscs:"^1.11.3",jshint:"^2.6.0",mocha:"^2.1.0","uglify-js":"^2.4.13"},homepage:"https://github.com/indutny/elliptic",keywords:["Cryptography","EC","Elliptic","curve"],license:"MIT",main:"lib/elliptic.js",name:"elliptic",optionalDependencies:{},readme:"# Elliptic [![Build Status](https://secure.travis-ci.org/indutny/elliptic.png)](http://travis-ci.org/indutny/elliptic)\n\nFast elliptic-curve cryptography in a plain javascript implementation.\n\nNOTE: Please take a look at http://safecurves.cr.yp.to/ before choosing a curve\nfor your cryptography operations.\n\n## Incentive\n\nECC is much slower than regular RSA cryptography, the JS implementations are\neven more slower.\n\n## Benchmarks\n\n```bash\n$ node benchmarks/index.js\nBenchmarking: sign\nelliptic#sign x 262 ops/sec ±0.51% (177 runs sampled)\neccjs#sign x 55.91 ops/sec ±0.90% (144 runs sampled)\n------------------------\nFastest is elliptic#sign\n========================\nBenchmarking: verify\nelliptic#verify x 113 ops/sec ±0.50% (166 runs sampled)\neccjs#verify x 48.56 ops/sec ±0.36% (125 runs sampled)\n------------------------\nFastest is elliptic#verify\n========================\nBenchmarking: gen\nelliptic#gen x 294 ops/sec ±0.43% (176 runs sampled)\neccjs#gen x 62.25 ops/sec ±0.63% (129 runs sampled)\n------------------------\nFastest is elliptic#gen\n========================\nBenchmarking: ecdh\nelliptic#ecdh x 136 ops/sec ±0.85% (156 runs sampled)\n------------------------\nFastest is elliptic#ecdh\n========================\n```\n\n## API\n\n### ECDSA\n\n```javascript\nvar EC = require('elliptic').ec;\n\n// Create and initialize EC context\n// (better do it once and reuse it)\nvar ec = new EC('secp256k1');\n\n// Generate keys\nvar key = ec.genKeyPair();\n\n// Sign message (must be an array, or it'll be treated as a hex sequence)\nvar msg = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];\nvar signature = key.sign(msg);\n\n// Export DER encoded signature in Array\nvar derSign = signature.toDER();\n\n// Verify signature\nconsole.log(key.verify(msg, derSign));\n```\n\n### ECDH\n\n```javascript\n// Generate keys\nvar key1 = ec.genKeyPair();\nvar key2 = ec.genKeyPair();\n\nvar shared1 = key1.derive(key2.getPublic());\nvar shared2 = key2.derive(key1.getPublic());\n\nconsole.log('Both shared secrets are BN instances');\nconsole.log(shared1.toString(16));\nconsole.log(shared2.toString(16));\n```\n\nNOTE: `.derive()` returns a [BN][1] instance.\n\n## Supported curves\n\nElliptic.js support following curve types:\n\n* Short Weierstrass\n* Montgomery\n* Edwards\n* Twisted Edwards\n\nFollowing curve 'presets' are embedded into the library:\n\n* `secp256k1`\n* `p192`\n* `p224`\n* `p256`\n* `curve25519`\n* `ed25519`\n\nNOTE: That `curve25519` could not be used for ECDSA, use `ed25519` instead.\n\n### Implementation details\n\nECDSA is using deterministic `k` value generation as per [RFC6979][0]. Most of\nthe curve operations are performed on non-affine coordinates (either projective\nor extended), various windowing techniques are used for different cases.\n\nAll operations are performed in reduction context using [bn.js][1], hashing is\nprovided by [hash.js][2]\n\n### Related projects\n\n* [eccrypto][3]: isomorphic implementation of ECDSA, ECDH and ECIES for both\n browserify and node (uses `elliptic` for browser and [secp256k1-node][4] for\n node)\n\n#### LICENSE\n\nThis software is licensed under the MIT License.\n\nCopyright Fedor Indutny, 2014.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n\n[0]: http://tools.ietf.org/html/rfc6979\n[1]: https://github.com/indutny/bn.js\n[2]: https://github.com/indutny/hash.js\n[3]: https://github.com/bitchan/eccrypto\n[4]: https://github.com/wanderer/secp256k1-node\n",readmeFilename:"README.md",repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},scripts:{test:"make lint && mocha --reporter=spec test/*-test.js"},version:"3.0.3"}},{}],79:[function(e,t,r){"function"==typeof Object.create?t.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},{}],80:[function(t,r,n){(function(t){(function(){function i(e,t){if(e!==t){var r=null===e,n=e===k,i=e===e,o=null===t,s=t===k,a=t===t;if(e>t&&!o||!i||r&&!s&&a||n&&a)return 1;if(t>e&&!r||!a||o&&!n&&i||s&&i)return-1}return 0}function o(e,t,r){for(var n=e.length,i=r?n:-1;r?i--:++i-1;);return r}function h(e,t){for(var r=e.length;r--&&t.indexOf(e.charAt(r))>-1;);return r}function c(e,t){return i(e.criteria,t.criteria)||e.index-t.index}function d(e,t,r){for(var n=-1,o=e.criteria,s=t.criteria,a=o.length,u=r.length;++n=u)return f;var h=r[n];return f*("asc"===h||h===!0?1:-1)}}return e.index-t.index}function l(e){return Ve[e]}function p(e){return Ye[e]}function g(e,t,r){return t?e=Xe[e]:r&&(e=Ze[e]),"\\"+e}function m(e){return"\\"+Ze[e]}function b(e,t,r){for(var n=e.length,i=t+(r?0:-1);r?i--:++i=e&&e>=9&&13>=e||32==e||160==e||5760==e||6158==e||e>=8192&&(8202>=e||8232==e||8233==e||8239==e||8287==e||12288==e||65279==e)}function w(e,t){for(var r=-1,n=e.length,i=-1,o=[];++rt,i=r?e.length:0,o=Vr(0,i,this.__views__),s=o.start,a=o.end,u=a-s,f=n?a:s-1,h=this.__iteratees__,c=h.length,d=0,l=As(u,this.__takeCount__);if(!r||K>i||i==u&&l==u)return rr(n&&r?e.reverse():e,this.__actions__);var p=[];e:for(;u--&&l>d;){f+=t;for(var g=-1,m=e[f];++g=K?pr(t):null,f=t.length;u&&(o=Je,a=!1,t=u);e:for(;++ir&&(r=-r>i?0:i+r),n=n===k||n>i?i:+n||0,0>n&&(n+=i),i=r>n?0:n>>>0,r>>>=0;i>r;)e[r++]=t;return e}function xt(e,t){var r=[];return js(e,function(e,n,i){t(e,n,i)&&r.push(e)}),r}function Mt(e,t,r,n){var i;return r(e,function(e,r,o){return t(e,r,o)?(i=n?r:e,!1):void 0}),i}function Pt(e,t,r,n){n||(n=[]);for(var i=-1,o=e.length;++in;)e=e[t[n++]];return n&&n==i?e:k}}function Ct(e,t,r,n,i,o){return e===t?!0:null==e||null==t||!Ni(e)&&!v(t)?e!==e&&t!==t:jt(e,t,Ct,r,n,i,o)}function jt(e,t,r,n,i,o,s){var a=Pa(e),u=Pa(t),f=G,h=G;a||(f=ns.call(e),f==Y?f=ee:f!=ee&&(a=Hi(e))),u||(h=ns.call(t),h==Y?h=ee:h!=ee&&(u=Hi(t)));var c=f==ee,d=h==ee,l=f==h;if(l&&!a&&!c)return Dr(e,t,f);if(!i){var p=c&&ts.call(e,"__wrapped__"),g=d&&ts.call(t,"__wrapped__");if(p||g)return r(p?e.value():e,g?t.value():t,n,i,o,s)}if(!l)return!1;o||(o=[]),s||(s=[]);for(var m=o.length;m--;)if(o[m]==e)return s[m]==t;o.push(e),s.push(t);var b=(a?Lr:zr)(e,t,r,n,i,o,s);return o.pop(),s.pop(),b}function Lt(e,t,r){var n=t.length,i=n,o=!r;if(null==e)return!i;for(e=cn(e);n--;){var s=t[n];if(o&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++nt&&(t=-t>i?0:i+t),r=r===k||r>i?i:+r||0,0>r&&(r+=i),i=t>r?0:r-t>>>0,t>>>=0;for(var o=Ko(i);++n=K,u=a?pr():null,f=[];u?(n=Je,o=!1):(a=!1,u=t?[]:f);e:for(;++r=i){for(;i>n;){var o=n+i>>>1,s=e[o];(r?t>=s:t>s)&&null!==s?n=o+1:i=o}return i}return ir(e,t,Mo,r)}function ir(e,t,r,n){t=r(t);for(var i=0,o=e?e.length:0,s=t!==t,a=null===t,u=t===k;o>i;){var f=vs((i+o)/2),h=r(e[f]),c=h!==k,d=h===h;if(s)var l=d||n;else l=a?d&&c&&(n||null!=h):u?d&&(n||c):null==h?!1:n?t>=h:t>h;l?i=f+1:o=f}return As(o,Bs)}function or(e,t,r){if("function"!=typeof e)return Mo;if(t===k)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 3:return function(r,n,i){return e.call(t,r,n,i)};case 4:return function(r,n,i,o){return e.call(t,r,n,i,o)};case 5:return function(r,n,i,o,s){return e.call(t,r,n,i,o,s)}}return function(){return e.apply(t,arguments)}}function sr(e){var t=new ss(e.byteLength),r=new ps(t);return r.set(new ps(e)),t}function ar(e,t,r){for(var n=r.length,i=-1,o=Ss(e.length-n,0),s=-1,a=t.length,u=Ko(a+o);++s2?r[i-2]:k,s=i>2?r[2]:k,a=i>1?r[i-1]:k;for("function"==typeof o?(o=or(o,a,5),i-=2):(o="function"==typeof a?a:k,i-=o?1:0),s&&$r(r[0],r[1],s)&&(o=3>i?k:o,i=1);++n-1?r[s]:k}return Mt(r,n,e)}}function _r(e){return function(t,r,n){return t&&t.length?(r=Ur(r,n,3),o(t,r,e)):-1}}function Sr(e){return function(t,r,n){return r=Ur(r,n,3),Mt(t,r,e,!0)}}function Ar(e){return function(){for(var t,r=arguments.length,i=e?r:-1,o=0,s=Ko(r);e?i--:++i=K)return t.plant(n).value();for(var i=0,o=r?s[i].apply(this,e):n;++iv){var I=a?et(a):k,E=Ss(f-v,0),x=p?A:k,B=p?k:A,O=p?_:k,R=p?k:_;t|=p?T:N,t&=~(p?N:T),g||(t&=~(M|P));var C=[e,t,r,O,x,R,B,I,u,E],j=Or.apply(k,C);return en(e)&&Hs(j,C),j.placeholder=S,j}}var L=d?r:this,D=l?L[e]:e;return a&&(_=un(_,a)),c&&u<_.length&&(_.length=u),this&&this!==nt&&this instanceof h&&(D=b||mr(e)),D.apply(L,_)}var c=t&C,d=t&M,l=t&P,p=t&O,g=t&B,m=t&R,b=l?k:mr(e);return h}function Rr(e,t,r){var n=e.length;if(t=+t,n>=t||!ws(t))return"";var i=t-n;return r=null==r?" ":r+"",bo(r,ms(i/r.length)).slice(0,i)}function Tr(e,t,r,n){function i(){for(var t=-1,a=arguments.length,u=-1,f=n.length,h=Ko(f+a);++uu))return!1;for(;++a-1&&e%1==0&&t>e}function $r(e,t,r){if(!Ni(r))return!1;var n=typeof t;if("number"==n?Zr(r)&&Jr(t,r.length):"string"==n&&t in r){var i=r[t];return e===e?e===i:i!==i}return!1}function Qr(e,t){var r=typeof e;if("string"==r&&ke.test(e)||"number"==r)return!0;if(Pa(e))return!1;var n=!Ee.test(e);return n||null!=t&&e in cn(t)}function en(e){var r=Kr(e);if(!(r in y.prototype))return!1;var n=t[r];if(e===n)return!0;var i=Ks(n);return!!i&&e===i[0]}function tn(e){return"number"==typeof e&&e>-1&&e%1==0&&Rs>=e}function rn(e){return e===e&&!Ni(e)}function nn(e,t){var r=e[1],n=t[1],i=r|n,o=C>i,s=n==C&&r==O||n==C&&r==j&&e[7].length<=t[8]||n==(C|j)&&r==O;if(!o&&!s)return e;n&M&&(e[2]=t[2],i|=r&M?0:B);var a=t[3];if(a){var u=e[3];e[3]=u?ar(u,a,t[4]):et(a),e[4]=u?w(e[3],V):et(t[4])}return a=t[5],a&&(u=e[5],e[5]=u?ur(u,a,t[6]):et(a),e[6]=u?w(e[5],V):et(t[6])),a=t[7],a&&(e[7]=et(a)),n&C&&(e[8]=null==e[8]?t[8]:As(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=i,e}function on(e,t){return e===k?t:Ba(e,t,on)}function sn(e,t){e=cn(e);for(var r=-1,n=t.length,i={};++rn;)s[++o]=Wt(e,n,n+=t);return s}function gn(e){for(var t=-1,r=e?e.length:0,n=-1,i=[];++tt?0:t)):[]}function bn(e,t,r){var n=e?e.length:0;return n?((r?$r(e,t,r):null==t)&&(t=1),t=n-(+t||0),Wt(e,0,0>t?0:t)):[]}function vn(e,t,r){return e&&e.length?tr(e,Ur(t,r,3),!0,!0):[]}function yn(e,t,r){return e&&e.length?tr(e,Ur(t,r,3),!0):[]}function wn(e,t,r,n){var i=e?e.length:0;return i?(r&&"number"!=typeof r&&$r(e,t,r)&&(r=0,n=i),kt(e,t,r,n)):[]}function _n(e){return e?e[0]:k}function Sn(e,t,r){var n=e?e.length:0;return r&&$r(e,t,r)&&(t=!1),n?Pt(e,t):[]}function An(e){var t=e?e.length:0;return t?Pt(e,!0):[]}function In(e,t,r){var n=e?e.length:0;if(!n)return-1;if("number"==typeof r)r=0>r?Ss(n+r,0):r;else if(r){var i=nr(e,t);return n>i&&(t===t?t===e[i]:e[i]!==e[i])?i:-1}return s(e,t,r||0)}function En(e){return bn(e,1)}function kn(e){var t=e?e.length:0;return t?e[t-1]:k}function xn(e,t,r){var n=e?e.length:0;if(!n)return-1;var i=n;if("number"==typeof r)i=(0>r?Ss(n+r,0):As(r||0,n-1))+1;else if(r){i=nr(e,t,!0)-1;var o=e[i];return(t===t?t===o:o!==o)?i:-1}if(t!==t)return b(e,i,!0);for(;i--;)if(e[i]===t)return i;return-1}function Mn(){var e=arguments,t=e[0];if(!t||!t.length)return t;for(var r=0,n=Fr(),i=e.length;++r-1;)ls.call(t,o,1);return t}function Pn(e,t,r){var n=[];if(!e||!e.length)return n;var i=-1,o=[],s=e.length;for(t=Ur(t,r,3);++it?0:t)):[]}function Tn(e,t,r){var n=e?e.length:0;return n?((r?$r(e,t,r):null==t)&&(t=1),t=n-(+t||0),Wt(e,0>t?0:t)):[]}function Nn(e,t,r){return e&&e.length?tr(e,Ur(t,r,3),!1,!0):[]}function Cn(e,t,r){return e&&e.length?tr(e,Ur(t,r,3)):[]}function jn(e,t,r,n){var i=e?e.length:0;if(!i)return[];null!=t&&"boolean"!=typeof t&&(n=r,r=$r(e,t,n)?k:t,t=!1);var o=Ur();return(null!=r||o!==wt)&&(r=o(r,n,3)),t&&Fr()==s?_(e,r):Qt(e,r)}function Ln(e){if(!e||!e.length)return[];var t=-1,r=0;e=at(e,function(e){return Zr(e)?(r=Ss(e.length,r),!0):void 0});for(var n=Ko(r);++tr?Ss(i+r,0):r||0,"string"==typeof e||!Pa(e)&&Fi(e)?i>=r&&e.indexOf(t,r)>-1:!!i&&Fr(e,t,r)>-1}function ei(e,t,r){var n=Pa(e)?ut:Dt;return t=Ur(t,r,3),n(e,t)}function ti(e,t){return ei(e,No(t))}function ri(e,t,r){var n=Pa(e)?at:xt;return t=Ur(t,r,3),n(e,function(e,r,n){return!t(e,r,n)})}function ni(e,t,r){if(r?$r(e,t,r):null==t){e=hn(e);var n=e.length;return n>0?e[Yt(0,n-1)]:k}var i=-1,o=Gi(e),n=o.length,s=n-1;for(t=As(0>t?0:+t||0,n);++i0&&(r=t.apply(this,arguments)),1>=e&&(t=k),r}}function li(e,t,r){function n(){l&&as(l),f&&as(f),g=0,f=l=p=k}function i(t,r){r&&as(r),f=l=p=k,t&&(g=ga(),h=e.apply(d,u),l||f||(u=d=k))}function o(){var e=t-(ga()-c);0>=e||e>t?i(p,f):l=ds(o,e)}function s(){i(b,l)}function a(){if(u=arguments,c=ga(),d=this,p=b&&(l||!v),m===!1)var r=v&&!l;else{f||v||(g=c);var n=m-(c-g),i=0>=n||n>m;i?(f&&(f=as(f)),g=c,h=e.apply(d,u)):f||(f=ds(s,n))}return i&&l?l=as(l):l||t===m||(l=ds(o,t)),r&&(i=!0,h=e.apply(d,u)),!i||l||f||(u=d=k),h}var u,f,h,c,d,l,p,g=0,m=!1,b=!0;if("function"!=typeof e)throw new Zo(q);if(t=0>t?0:+t||0,r===!0){var v=!0;b=!1}else Ni(r)&&(v=!!r.leading,m="maxWait"in r&&Ss(+r.maxWait||0,t),b="trailing"in r?!!r.trailing:b);return a.cancel=n,a}function pi(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new Zo(q);var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var s=e.apply(this,n);return r.cache=o.set(i,s),s};return r.cache=new pi.Cache,r}function gi(e){if("function"!=typeof e)throw new Zo(q);return function(){return!e.apply(this,arguments)}}function mi(e){return di(2,e)}function bi(e,t){if("function"!=typeof e)throw new Zo(q);return t=Ss(t===k?e.length-1:+t||0,0),function(){for(var r=arguments,n=-1,i=Ss(r.length-t,0),o=Ko(i);++nt}function Ii(e,t){return e>=t}function Ei(e){return v(e)&&Zr(e)&&ts.call(e,"callee")&&!hs.call(e,"callee")}function ki(e){return e===!0||e===!1||v(e)&&ns.call(e)==W}function xi(e){return v(e)&&ns.call(e)==X}function Mi(e){return!!e&&1===e.nodeType&&v(e)&&!Ui(e)}function Pi(e){return null==e?!0:Zr(e)&&(Pa(e)||Fi(e)||Ei(e)||v(e)&&Ti(e.splice))?!e.length:!Ua(e).length}function Bi(e,t,r,n){r="function"==typeof r?or(r,n,3):k;var i=r?r(e,t):k;return i===k?Ct(e,t,r):!!i}function Oi(e){return v(e)&&"string"==typeof e.message&&ns.call(e)==Z}function Ri(e){return"number"==typeof e&&ws(e)}function Ti(e){return Ni(e)&&ns.call(e)==J}function Ni(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ci(e,t,r,n){return r="function"==typeof r?or(r,n,3):k,Lt(e,Hr(t),r)}function ji(e){return zi(e)&&e!=+e}function Li(e){return null==e?!1:Ti(e)?os.test(es.call(e)):v(e)&&Ce.test(e)}function Di(e){return null===e}function zi(e){return"number"==typeof e||v(e)&&ns.call(e)==Q}function Ui(e){var t;if(!v(e)||ns.call(e)!=ee||Ei(e)||!ts.call(e,"constructor")&&(t=e.constructor,"function"==typeof t&&!(t instanceof t)))return!1;var r;return Bt(e,function(e,t){r=t}),r===k||ts.call(e,r)}function Ki(e){return Ni(e)&&ns.call(e)==te}function Fi(e){return"string"==typeof e||v(e)&&ns.call(e)==ne}function Hi(e){return v(e)&&tn(e.length)&&!!He[ns.call(e)]}function qi(e){return e===k}function Vi(e,t){return t>e}function Yi(e,t){return t>=e}function Gi(e){var t=e?Fs(e):0;return tn(t)?t?et(e):[]:oo(e)}function Wi(e){return yt(e,eo(e))}function Xi(e,t,r){var n=Cs(e);return r&&$r(e,t,r)&&(t=k),t?bt(n,t):n}function Zi(e){return Tt(e,eo(e))}function Ji(e,t,r){var n=null==e?k:Nt(e,dn(t),t+"");return n===k?r:n}function $i(e,t){if(null==e)return!1;var r=ts.call(e,t);if(!r&&!Qr(t)){if(t=dn(t),e=1==t.length?e:Nt(e,Wt(t,0,-1)),null==e)return!1;t=kn(t),r=ts.call(e,t)}return r||tn(e.length)&&Jr(t,e.length)&&(Pa(e)||Ei(e))}function Qi(e,t,r){r&&$r(e,t,r)&&(t=k);for(var n=-1,i=Ua(e),o=i.length,s={};++n0;++n=As(t,r)&&er?0:+r||0,n),r-=t.length,r>=0&&e.indexOf(t,r)==r}function lo(e){return e=u(e),e&&_e.test(e)?e.replace(ye,p):e}function po(e){return e=u(e),e&&Pe.test(e)?e.replace(Me,g):e||"(?:)"}function go(e,t,r){e=u(e),t=+t;var n=e.length;if(n>=t||!ws(t))return e;var i=(t-n)/2,o=vs(i),s=ms(i);return r=Rr("",s,r),r.slice(0,o)+e+r}function mo(e,t,r){return(r?$r(e,t,r):null==t)?t=0:t&&(t=+t),e=wo(e),Es(e,t||(Ne.test(e)?16:10))}function bo(e,t){var r="";if(e=u(e),t=+t,1>t||!e||!ws(t))return r;do t%2&&(r+=e),t=vs(t/2),e+=e;while(t);return r}function vo(e,t,r){return e=u(e),r=null==r?0:As(0>r?0:+r||0,e.length),e.lastIndexOf(t,r)==r}function yo(e,r,n){var i=t.templateSettings;n&&$r(e,r,n)&&(r=n=k),e=u(e),r=mt(bt({},n||r),i,gt);var o,s,a=mt(bt({},r.imports),i.imports,gt),f=Ua(a),h=er(a,f),c=0,d=r.interpolate||De,l="__p += '",p=Wo((r.escape||De).source+"|"+d.source+"|"+(d===Ie?Re:De).source+"|"+(r.evaluate||De).source+"|$","g"),g="//# sourceURL="+("sourceURL"in r?r.sourceURL:"lodash.templateSources["+ ++Fe+"]")+"\n";e.replace(p,function(t,r,n,i,a,u){return n||(n=i),l+=e.slice(c,u).replace(ze,m),r&&(o=!0,l+="' +\n__e("+r+") +\n'"),a&&(s=!0,l+="';\n"+a+";\n__p += '"),n&&(l+="' +\n((__t = ("+n+")) == null ? '' : __t) +\n'"),c=u+t.length,t}),l+="';\n";var b=r.variable;b||(l="with (obj) {\n"+l+"\n}\n"),l=(s?l.replace(ge,""):l).replace(me,"$1").replace(be,"$1;"),l="function("+(b||"obj")+") {\n"+(b?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(o?", __e = _.escape":"")+(s?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+l+"return __p\n}";var v=Ja(function(){return qo(f,g+"return "+l).apply(k,h)});if(v.source=l,Oi(v))throw v;return v}function wo(e,t,r){var n=e;return(e=u(e))?(r?$r(n,t,r):null==t)?e.slice(S(e),A(e)+1):(t+="",e.slice(f(e,t),h(e,t)+1)):e}function _o(e,t,r){var n=e;return e=u(e),e?(r?$r(n,t,r):null==t)?e.slice(S(e)):e.slice(f(e,t+"")):e}function So(e,t,r){var n=e;return e=u(e),e?(r?$r(n,t,r):null==t)?e.slice(0,A(e)+1):e.slice(0,h(e,t+"")+1):e}function Ao(e,t,r){r&&$r(e,t,r)&&(t=k);var n=L,i=D;if(null!=t)if(Ni(t)){var o="separator"in t?t.separator:o;n="length"in t?+t.length||0:n,i="omission"in t?u(t.omission):i}else n=+t||0;if(e=u(e),n>=e.length)return e;var s=n-i.length;if(1>s)return i;var a=e.slice(0,s);if(null==o)return a+i;if(Ki(o)){if(e.slice(s).search(o)){var f,h,c=e.slice(0,s);for(o.global||(o=Wo(o.source,(Te.exec(o)||"")+"g")),o.lastIndex=0;f=o.exec(c);)h=f.index;a=a.slice(0,null==h?s:h)}}else if(e.indexOf(o,s)!=s){var d=a.lastIndexOf(o);d>-1&&(a=a.slice(0,d))}return a+i}function Io(e){return e=u(e),e&&we.test(e)?e.replace(ve,I):e}function Eo(e,t,r){return r&&$r(e,t,r)&&(t=k),e=u(e),e.match(t||Ue)||[]}function ko(e,t,r){return r&&$r(e,t,r)&&(t=k),v(e)?Po(e):wt(e,t)}function xo(e){return function(){return e}}function Mo(e){return e}function Po(e){return zt(_t(e,!0))}function Bo(e,t){return Ut(e,_t(t,!0))}function Oo(e,t,r){if(null==r){var n=Ni(t),i=n?Ua(t):k,o=i&&i.length?Tt(t,i):k;(o?o.length:n)||(o=!1,r=t,t=e,e=this)}o||(o=Tt(t,Ua(t)));var s=!0,a=-1,u=Ti(e),f=o.length;r===!1?s=!1:Ni(r)&&"chain"in r&&(s=r.chain);for(;++ae||!ws(e))return[];var n=-1,i=Ko(As(e,Ps));for(t=or(t,r,1);++nn?i[n]=t(n):t(n);return i}function Do(e){var t=++rs;return u(e)+t}function zo(e,t){return(+e||0)+(+t||0)}function Uo(e,t,r){return r&&$r(e,t,r)&&(t=k),t=Ur(t,r,3),1==t.length?lt(Pa(e)?e:hn(e),t):$t(e,t)}e=e?it.defaults(nt.Object(),e,it.pick(nt,Ke)):nt;var Ko=e.Array,Fo=e.Date,Ho=e.Error,qo=e.Function,Vo=e.Math,Yo=e.Number,Go=e.Object,Wo=e.RegExp,Xo=e.String,Zo=e.TypeError,Jo=Ko.prototype,$o=Go.prototype,Qo=Xo.prototype,es=qo.prototype.toString,ts=$o.hasOwnProperty,rs=0,ns=$o.toString,is=nt._,os=Wo("^"+es.call(ts).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ss=e.ArrayBuffer,as=e.clearTimeout,us=e.parseFloat,fs=Vo.pow,hs=$o.propertyIsEnumerable,cs=qr(e,"Set"),ds=e.setTimeout,ls=Jo.splice,ps=e.Uint8Array,gs=qr(e,"WeakMap"),ms=Vo.ceil,bs=qr(Go,"create"),vs=Vo.floor,ys=qr(Ko,"isArray"),ws=e.isFinite,_s=qr(Go,"keys"),Ss=Vo.max,As=Vo.min,Is=qr(Fo,"now"),Es=e.parseInt,ks=Vo.random,xs=Yo.NEGATIVE_INFINITY,Ms=Yo.POSITIVE_INFINITY,Ps=4294967295,Bs=Ps-1,Os=Ps>>>1,Rs=9007199254740991,Ts=gs&&new gs,Ns={};t.support={};t.templateSettings={escape:Se,evaluate:Ae,interpolate:Ie,variable:"",imports:{_:t}};var Cs=function(){function e(){}return function(t){if(Ni(t)){e.prototype=t;var r=new e;e.prototype=k}return r||{}}}(),js=cr(Ot),Ls=cr(Rt,!0),Ds=dr(),zs=dr(!0),Us=Ts?function(e,t){return Ts.set(e,t),e}:Mo,Ks=Ts?function(e){return Ts.get(e)}:To,Fs=Ht("length"),Hs=function(){var e=0,t=0;return function(r,n){var i=ga(),o=U-(i-t);if(t=i,o>0){if(++e>=z)return r}else e=0;return Us(r,n)}}(),qs=bi(function(e,t){return v(e)&&Zr(e)?At(e,Pt(t,!1,!0)):[]}),Vs=_r(),Ys=_r(!0),Gs=bi(function(e){for(var t=e.length,r=t,n=Ko(c),i=Fr(),o=i==s,a=[];r--;){var u=e[r]=Zr(u=e[r])?u:[];n[r]=o&&u.length>=120?pr(r&&u):null}var f=e[0],h=-1,c=f?f.length:0,d=n[0];e:for(;++h2?e[t-2]:k,n=t>1?e[t-1]:k;return t>2&&"function"==typeof r?t-=2:(r=t>1&&"function"==typeof n?(--t,n):k,n=k),e.length=t,Dn(e,r,n)}),ta=bi(function(e){return e=Pt(e),this.thru(function(t){return Qe(Pa(t)?t:[cn(t)],e)})}),ra=bi(function(e,t){return vt(e,Pt(t))}),na=fr(function(e,t,r){ts.call(e,r)?++e[r]:e[r]=1}),ia=wr(js),oa=wr(Ls,!0),sa=Ir(tt,js),aa=Ir(rt,Ls),ua=fr(function(e,t,r){ts.call(e,r)?e[r].push(t):e[r]=[t]}),fa=fr(function(e,t,r){e[r]=t}),ha=bi(function(e,t,r){var n=-1,i="function"==typeof t,o=Qr(t),s=Zr(e)?Ko(e.length):[];return js(e,function(e){var a=i?t:o&&null!=e?e[t]:k;s[++n]=a?a.apply(e,r):Xr(e,t,r)}),s}),ca=fr(function(e,t,r){e[r?0:1].push(t)},function(){return[[],[]]}),da=Br(ht,js),la=Br(ct,Ls),pa=bi(function(e,t){if(null==e)return[];var r=t[2];return r&&$r(t[0],t[1],r)&&(t.length=1),Jt(e,Pt(t),[])}),ga=Is||function(){return(new Fo).getTime()},ma=bi(function(e,t,r){var n=M;if(r.length){var i=w(r,ma.placeholder);n|=T}return jr(e,n,t,r,i)}),ba=bi(function(e,t){t=t.length?Pt(t):Zi(e);for(var r=-1,n=t.length;++r0||0>t)?new y(r):(0>e?r=r.takeRight(-e):e&&(r=r.drop(e)),t!==k&&(t=+t||0,r=0>t?r.dropRight(-t):r.take(t-e)),r)},y.prototype.takeRightWhile=function(e,t){return this.reverse().takeWhile(e,t).reverse()},y.prototype.toArray=function(){return this.take(Ms)},Ot(y.prototype,function(e,r){var i=/^(?:filter|map|reject)|While$/.test(r),o=/^(?:first|last)$/.test(r),s=t[o?"take"+("last"==r?"Right":""):r];s&&(t.prototype[r]=function(){var t=o?[1]:arguments,r=this.__chain__,a=this.__wrapped__,u=!!this.__actions__.length,f=a instanceof y,h=t[0],c=f||Pa(a);c&&i&&"function"==typeof h&&1!=h.length&&(f=c=!1);var d=function(e){return o&&r?s(e,1)[0]:s.apply(k,ft([e],t))},l={func:Hn,args:[d],thisArg:k},p=f&&!u;if(o&&!r)return p?(a=a.clone(),a.__actions__.push(l),e.call(a)):s.call(k,this.value())[0];if(!o&&c){a=p?a:new y(this);var g=e.apply(a,t);return g.__actions__.push(l),new n(g,r)}return this.thru(d)})}),tt(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(e){var r=(/^(?:replace|split)$/.test(e)?Qo:Jo)[e],n=/^(?:push|sort|unshift)$/.test(e)?"tap":"thru",i=/^(?:join|pop|replace|shift)$/.test(e);t.prototype[e]=function(){var e=arguments;return i&&!this.__chain__?r.apply(this.value(),e):this[n](function(t){return r.apply(t,e)})}}),Ot(y.prototype,function(e,r){var n=t[r];if(n){var i=n.name,o=Ns[i]||(Ns[i]=[]);o.push({name:r,func:n})}}),Ns[Or(k,P).name]=[{name:"wrapper",func:k}],y.prototype.clone=$,y.prototype.reverse=re,y.prototype.value=ie,t.prototype.chain=qn,t.prototype.commit=Vn,t.prototype.concat=ta,t.prototype.plant=Yn,t.prototype.reverse=Gn,t.prototype.toString=Wn,t.prototype.run=t.prototype.toJSON=t.prototype.valueOf=t.prototype.value=Xn,t.prototype.collect=t.prototype.map,t.prototype.head=t.prototype.first,t.prototype.select=t.prototype.filter,t.prototype.tail=t.prototype.rest,t}var k,x="3.10.1",M=1,P=2,B=4,O=8,R=16,T=32,N=64,C=128,j=256,L=30,D="...",z=150,U=16,K=200,F=1,H=2,q="Expected a function",V="__lodash_placeholder__",Y="[object Arguments]",G="[object Array]",W="[object Boolean]",X="[object Date]",Z="[object Error]",J="[object Function]",$="[object Map]",Q="[object Number]",ee="[object Object]",te="[object RegExp]",re="[object Set]",ne="[object String]",ie="[object WeakMap]",oe="[object ArrayBuffer]",se="[object Float32Array]",ae="[object Float64Array]",ue="[object Int8Array]",fe="[object Int16Array]",he="[object Int32Array]",ce="[object Uint8Array]",de="[object Uint8ClampedArray]",le="[object Uint16Array]",pe="[object Uint32Array]",ge=/\b__p \+= '';/g,me=/\b(__p \+=) '' \+/g,be=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ve=/&(?:amp|lt|gt|quot|#39|#96);/g,ye=/[&<>"'`]/g,we=RegExp(ve.source),_e=RegExp(ye.source),Se=/<%-([\s\S]+?)%>/g,Ae=/<%([\s\S]+?)%>/g,Ie=/<%=([\s\S]+?)%>/g,Ee=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,ke=/^\w*$/,xe=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,Me=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,Pe=RegExp(Me.source),Be=/[\u0300-\u036f\ufe20-\ufe23]/g,Oe=/\\(\\)?/g,Re=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Te=/\w*$/,Ne=/^0[xX]/,Ce=/^\[object .+?Constructor\]$/,je=/^\d+$/,Le=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,De=/($^)/,ze=/['\n\r\u2028\u2029\\]/g,Ue=function(){var e="[A-Z\\xc0-\\xd6\\xd8-\\xde]",t="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(e+"+(?="+e+t+")|"+e+"?"+t+"|"+e+"+|[0-9]+","g")}(),Ke=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"],Fe=-1,He={};He[se]=He[ae]=He[ue]=He[fe]=He[he]=He[ce]=He[de]=He[le]=He[pe]=!0,He[Y]=He[G]=He[oe]=He[W]=He[X]=He[Z]=He[J]=He[$]=He[Q]=He[ee]=He[te]=He[re]=He[ne]=He[ie]=!1;var qe={};qe[Y]=qe[G]=qe[oe]=qe[W]=qe[X]=qe[se]=qe[ae]=qe[ue]=qe[fe]=qe[he]=qe[Q]=qe[ee]=qe[te]=qe[ne]=qe[ce]=qe[de]=qe[le]=qe[pe]=!0,qe[Z]=qe[J]=qe[$]=qe[re]=qe[ie]=!1;var Ve={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Ye={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Ge={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},We={"function":!0,object:!0},Xe={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ze={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Je=We[typeof n]&&n&&!n.nodeType&&n,$e=We[typeof r]&&r&&!r.nodeType&&r,Qe=Je&&$e&&"object"==typeof t&&t&&t.Object&&t,et=We[typeof self]&&self&&self.Object&&self,tt=We[typeof window]&&window&&window.Object&&window,rt=$e&&$e.exports===Je&&Je,nt=Qe||tt!==(this&&this.window)&&tt||et||this,it=E();"function"==typeof e&&"object"==typeof e.amd&&e.amd?(nt._=it,e(function(){return it})):Je&&$e?rt?($e.exports=it)._=it:Je._=it:nt._=it}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],81:[function(e,t,r){(function(r){var n=e("./word-array"),i=function(){function e(){}return{extend:function(t){e.prototype=this;var r=new e;return t&&r.mixIn(t),r.hasOwnProperty("init")||(r.init=function(){r.$super.init.apply(this,arguments)}),r.init.prototype=r,r.$super=this,r},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),o=i.extend({reset:function(){this._data=new n,this._nDataBytes=0},_append:function(e){r.isBuffer(e)&&(e=n.fromBuffer(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(e){var t=this._data,r=t.words,i=t.sigBytes,o=this.blockSize,s=4*o,a=i/s;a=e?Math.ceil(a):Math.max((0|a)-this._minBufferSize,0);var u=a*o,f=Math.min(4*u,i);if(u){for(var h=0;u>h;h+=o)this._doProcessBlock(r,h);var c=r.splice(0,u);t.sigBytes-=f}return new n(c,f)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0}),s=o.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){o.reset.call(this),this._doReset()},update:function(e){return"string"==typeof e&&(e=n.fromBuffer(new r(e,"utf8"))),r.isBuffer(e)&&(e=n.fromBuffer(e)),this._append(e),this._process(),this},finalize:function(e){"string"==typeof e&&(e=n.fromBuffer(new r(e,"utf8"))),r.isBuffer(e)&&(e=n.fromBuffer(e)),e&&this._append(e);var t=this._doFinalize();return t.toBuffer()},blockSize:16,_createHelper:function(e){return function(t,r){return new e.init(r).finalize(t)}}});t.exports.Hasher=s}).call(this,e("buffer").Buffer)},{"./word-array":85,buffer:147}],82:[function(e,t,r){(function(r){function n(e){if(!(this instanceof n))return new n(e);var t=this._hasher=new i.init;"string"==typeof e&&(e=o.fromBuffer(new r(e,"utf8"))),r.isBuffer(e)&&(e=o.fromBuffer(e));var s=t.blockSize,a=4*s;e.sigBytes>a&&(e=t.finalize(e)),e.clamp();for(var u=this._oKey=e.clone(),f=this._iKey=e.clone(),h=u.words,c=f.words,d=0;s>d;d++)h[d]^=1549556828,c[d]^=909522486;u.sigBytes=f.sigBytes=a,this.reset()}var i=e("./sha512").sha512,o=e("./word-array");n.prototype.reset=function(){var e=this._hasher;e.reset(),e.update(this._iKey)},n.prototype.update=function(e){return"string"==typeof e&&(e=o.fromBuffer(new r(e,"utf8"))),r.isBuffer(e)&&(e=o.fromBuffer(e)),this._hasher.update(e),this},n.prototype.finalize=function(e){"string"==typeof e&&(e=o.fromBuffer(new r(e,"utf8"))),r.isBuffer(e)&&(e=o.fromBuffer(e));var t=this._hasher,n=t.finalize(e);t.reset();var i=t.finalize(this._oKey.clone().concat(n));return i},t.exports=n}).call(this,e("buffer").Buffer)},{"./sha512":84,"./word-array":85,buffer:147}],83:[function(e,t,r){t.exports=e("./sha512"),t.exports.hmac=e("./hmac")},{"./hmac":82,"./sha512":84}],84:[function(e,t,r){var n=e("./cryptojs").Hasher,i=e("./x64"),o=i.Word,s=i.WordArray,a=[o(1116352408,3609767458),o(1899447441,602891725),o(3049323471,3964484399),o(3921009573,2173295548),o(961987163,4081628472),o(1508970993,3053834265),o(2453635748,2937671579),o(2870763221,3664609560),o(3624381080,2734883394),o(310598401,1164996542),o(607225278,1323610764),o(1426881987,3590304994),o(1925078388,4068182383),o(2162078206,991336113),o(2614888103,633803317),o(3248222580,3479774868),o(3835390401,2666613458),o(4022224774,944711139),o(264347078,2341262773),o(604807628,2007800933),o(770255983,1495990901),o(1249150122,1856431235),o(1555081692,3175218132),o(1996064986,2198950837),o(2554220882,3999719339),o(2821834349,766784016),o(2952996808,2566594879),o(3210313671,3203337956),o(3336571891,1034457026),o(3584528711,2466948901),o(113926993,3758326383),o(338241895,168717936),o(666307205,1188179964),o(773529912,1546045734),o(1294757372,1522805485),o(1396182291,2643833823),o(1695183700,2343527390),o(1986661051,1014477480),o(2177026350,1206759142),o(2456956037,344077627),o(2730485921,1290863460),o(2820302411,3158454273),o(3259730800,3505952657),o(3345764771,106217008),o(3516065817,3606008344),o(3600352804,1432725776),o(4094571909,1467031594),o(275423344,851169720),o(430227734,3100823752),o(506948616,1363258195),o(659060556,3750685593),o(883997877,3785050280),o(958139571,3318307427),o(1322822218,3812723403),o(1537002063,2003034995),o(1747873779,3602036899),o(1955562222,1575990012),o(2024104815,1125592928),o(2227730452,2716904306),o(2361852424,442776044),o(2428436474,593698344),o(2756734187,3733110249),o(3204031479,2999351573),o(3329325298,3815920427),o(3391569614,3928383900),o(3515267271,566280711),o(3940187606,3454069534),o(4118630271,4000239992),o(116418474,1914138554),o(174292421,2731055270),o(289380356,3203993006),o(460393269,320620315),o(685471733,587496836),o(852142971,1086792851),o(1017036298,365543100),o(1126000580,2618297676),o(1288033470,3409855158),o(1501505948,4234509866),o(1607167915,987167468),o(1816402316,1246189591)],u=[];!function(){for(var e=0;80>e;e++)u[e]=o()}();var f=n.extend({_doReset:function(){this._hash=new s([o(1779033703,4089235720),o(3144134277,2227873595),o(1013904242,4271175723),o(2773480762,1595750129),o(1359893119,2917565137),o(2600822924,725511199),o(528734635,4215389547),o(1541459225,327033209)])},_doProcessBlock:function(e,t){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],s=r[3],f=r[4],h=r[5],c=r[6],d=r[7],l=n.high,p=n.low,g=i.high,m=i.low,b=o.high,v=o.low,y=s.high,w=s.low,_=f.high,S=f.low,A=h.high,I=h.low,E=c.high,k=c.low,x=d.high,M=d.low,P=l,B=p,O=g,R=m,T=b,N=v,C=y,j=w,L=_,D=S,z=A,U=I,K=E,F=k,H=x,q=M,V=0;80>V;V++){var Y=u[V];if(16>V)var G=Y.high=0|e[t+2*V],W=Y.low=0|e[t+2*V+1];else{var X=u[V-15],Z=X.high,J=X.low,$=(Z>>>1|J<<31)^(Z>>>8|J<<24)^Z>>>7,Q=(J>>>1|Z<<31)^(J>>>8|Z<<24)^(J>>>7|Z<<25),ee=u[V-2],te=ee.high,re=ee.low,ne=(te>>>19|re<<13)^(te<<3|re>>>29)^te>>>6,ie=(re>>>19|te<<13)^(re<<3|te>>>29)^(re>>>6|te<<26),oe=u[V-7],se=oe.high,ae=oe.low,ue=u[V-16],fe=ue.high,he=ue.low,W=Q+ae,G=$+se+(Q>>>0>W>>>0?1:0),W=W+ie,G=G+ne+(ie>>>0>W>>>0?1:0),W=W+he,G=G+fe+(he>>>0>W>>>0?1:0);Y.high=G,Y.low=W}var ce=L&z^~L&K,de=D&U^~D&F,le=P&O^P&T^O&T,pe=B&R^B&N^R&N,ge=(P>>>28|B<<4)^(P<<30|B>>>2)^(P<<25|B>>>7),me=(B>>>28|P<<4)^(B<<30|P>>>2)^(B<<25|P>>>7),be=(L>>>14|D<<18)^(L>>>18|D<<14)^(L<<23|D>>>9),ve=(D>>>14|L<<18)^(D>>>18|L<<14)^(D<<23|L>>>9),ye=a[V],we=ye.high,_e=ye.low,Se=q+ve,Ae=H+be+(q>>>0>Se>>>0?1:0),Se=Se+de,Ae=Ae+ce+(de>>>0>Se>>>0?1:0),Se=Se+_e,Ae=Ae+we+(_e>>>0>Se>>>0?1:0),Se=Se+W,Ae=Ae+G+(W>>>0>Se>>>0?1:0),Ie=me+pe,Ee=ge+le+(me>>>0>Ie>>>0?1:0);H=K,q=F,K=z,F=U,z=L,U=D,D=j+Se|0,L=C+Ae+(j>>>0>D>>>0?1:0)|0,C=T,j=N,T=O,N=R,O=P,R=B,B=Se+Ie|0,P=Ae+Ee+(Se>>>0>B>>>0?1:0)|0}p=n.low=p+B,n.high=l+P+(B>>>0>p>>>0?1:0),m=i.low=m+R,i.high=g+O+(R>>>0>m>>>0?1:0),v=o.low=v+N,o.high=b+T+(N>>>0>v>>>0?1:0),w=s.low=w+j,s.high=y+C+(j>>>0>w>>>0?1:0),S=f.low=S+D,f.high=_+L+(D>>>0>S>>>0?1:0),I=h.low=I+U,h.high=A+z+(U>>>0>I>>>0?1:0),k=c.low=k+F,c.high=E+K+(F>>>0>k>>>0?1:0),M=d.low=M+q,d.high=x+H+(q>>>0>M>>>0?1:0)},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;t[n>>>5]|=128<<24-n%32,t[(n+128>>>10<<5)+30]=Math.floor(r/4294967296),t[(n+128>>>10<<5)+31]=r,e.sigBytes=4*t.length,this._process();var i=this._hash.toX32();return i},clone:function(){var e=n.clone.call(this);return e._hash=this._hash.clone(),e},blockSize:32});t.exports=n._createHelper(f),t.exports.sha512=f},{"./cryptojs":81,"./x64":86}],85:[function(e,t,r){(function(e,r){function n(e,t){this.words=e||[],void 0!=t?this.sigBytes=t:this.sigBytes=4*this.words.length}t.exports=n,n.prototype.concat=function(e){r.isBuffer(e)&&(e=n.fromBuffer(e));var t=this.words,i=e.words,o=this.sigBytes,s=e.sigBytes;if(this.clamp(),o%4)for(var a=0;s>a;a++){var u=i[a>>>2]>>>24-a%4*8&255;t[o+a>>>2]|=u<<24-(o+a)%4*8}else if(i.length>65535)for(var a=0;s>a;a+=4)t[o+a>>>2]=i[a>>>2];else t.push.apply(t,i);return this.sigBytes+=s,this},n.prototype.clamp=function(){var e=this.words,t=this.sigBytes;e[t>>>2]&=4294967295<<32-t%4*8,e.length=Math.ceil(t/4)},n.prototype.clone=function(){var e=new n(this.words.slice(0));return e},n.prototype.toBuffer=function(){for(var e=new r(4*this.words.length),t=0;ts;s+=4){var a=t.readUInt32BE(s);o.push(a)}for(var u=0,f=r-i,h=0;i>h;h+=1)u|=t.readUInt8(f+h)<<8*(3-h);return i>0&&o.push(u),new n(o,t.length)}for(var s=0;r>s;s+=4){var a=t.readUInt32BE(s,!0);o.push(a)}return new n(o,t.length)}}).call(this,e("_process"),e("buffer").Buffer)},{_process:235,buffer:147}],86:[function(e,t,r){function n(e,t){return this instanceof n?(this.high=e,void(this.low=t)):new n(e,t)}function i(e){this.words=e||[]}var o=e("./word-array");i.prototype.toX32=function(){for(var e=this.words,t=e.length,r=[],n=0;t>n;n++){var i=e[n];r.push(i.high),r.push(i.low)}return new o(r,this.sigBytes)},t.exports.Word=n,t.exports.WordArray=i},{"./word-array":85}],87:[function(e,t,r){t.exports={_args:[["bitcore-lib@^0.13.7","/Users/pelleb/code/clients/consensys/eth-lightwallet"]],_from:"bitcore-lib@>=0.13.7 <0.14.0",_id:"bitcore-lib@0.13.13",_inCache:!0,_installable:!0,_location:"/bitcore-lib",_nodeVersion:"4.2.1",_npmOperationalInternal:{host:"packages-5-east.internal.npmjs.com",tmp:"tmp/bitcore-lib-0.13.13.tgz_1454685054368_0.7489039490465075"},_npmUser:{email:"braydon@bitpay.com",name:"braydonf"},_npmVersion:"2.14.7",_phantomChildren:{},_requested:{name:"bitcore-lib",raw:"bitcore-lib@^0.13.7",rawSpec:"^0.13.7",scope:null,spec:">=0.13.7 <0.14.0",type:"range"},_requiredBy:["/","/bitcore-mnemonic"],_resolved:"https://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.13.13.tgz",_shasum:"fa63f4e3b1b52ab706815799da77936231354c9d",_shrinkwrap:{dependencies:{"bn.js":{from:"bn.js@=2.0.4",resolved:"https://registry.npmjs.org/bn.js/-/bn.js-2.0.4.tgz",version:"2.0.4"},bs58:{from:"bs58@=2.0.0",resolved:"https://registry.npmjs.org/bs58/-/bs58-2.0.0.tgz",version:"2.0.0"},"buffer-compare":{from:"buffer-compare@=1.0.0",resolved:"https://registry.npmjs.org/buffer-compare/-/buffer-compare-1.0.0.tgz",version:"1.0.0"},elliptic:{dependencies:{brorand:{from:"brorand@^1.0.1",resolved:"https://registry.npmjs.org/brorand/-/brorand-1.0.5.tgz",version:"1.0.5"},"hash.js":{from:"hash.js@=1.0.3",resolved:"https://registry.npmjs.org/hash.js/-/hash.js-1.0.3.tgz",version:"1.0.3"}},from:"elliptic@=3.0.3",resolved:"https://registry.npmjs.org/elliptic/-/elliptic-3.0.3.tgz",version:"3.0.3"},inherits:{from:"inherits@=2.0.1",resolved:"https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",version:"2.0.1"},lodash:{from:"lodash@=3.10.1",resolved:"https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",version:"3.10.1"},sha512:{from:"sha512@=0.0.1",resolved:"https://registry.npmjs.org/sha512/-/sha512-0.0.1.tgz",version:"0.0.1"}},name:"bitcore",version:"0.13.12"},_spec:"bitcore-lib@^0.13.7",_where:"/Users/pelleb/code/clients/consensys/eth-lightwallet",author:{email:"dev@bitpay.com",name:"BitPay"},browser:{request:"browser-request"},bugs:{url:"https://github.com/bitpay/bitcore-lib/issues"},contributors:[{name:"Manuel Araoz",email:"manuelaraoz@gmail.com"},{name:"Daniel Cousens",email:"bitcoin@dcousens.com"},{name:"Gordon Hall",email:"gordon@bitpay.com"},{name:"Jeff Garzik",email:"jgarzik@bitpay.com"},{name:"Kyle Drake",email:"kyle@kyledrake.net"},{name:"Esteban Ordano",email:"eordano@gmail.com"},{name:"Matias Alejo Garcia",email:"ematiu@gmail.com"},{name:"Ryan X. Charles",email:"ryanxcharles@gmail.com"},{name:"Stefan Thomas",email:"moon@justmoon.net"},{name:"Stephen Pair",email:"stephen@bitpay.com"},{name:"Wei Lu",email:"luwei.here@gmail.com"}],dependencies:{"bn.js":"=2.0.4",bs58:"=2.0.0","buffer-compare":"=1.0.0",elliptic:"=3.0.3",inherits:"=2.0.1",lodash:"=3.10.1",sha512:"=0.0.1"},description:"A pure and powerful JavaScript Bitcoin library.",devDependencies:{"bitcore-build":"github:bitpay/bitcore-build",brfs:"^1.2.0",chai:"^1.10.0",gulp:"^3.8.10",sinon:"^1.13.0"},directories:{},dist:{shasum:"fa63f4e3b1b52ab706815799da77936231354c9d",tarball:"http://registry.npmjs.org/bitcore-lib/-/bitcore-lib-0.13.13.tgz"},gitHead:"00b693d658cd1a8d9c4f68b0e587b60b298b79cb",homepage:"https://github.com/bitpay/bitcore-lib#readme",keywords:["address","bip21","bip32","bip37","bip69","bip70","bitcoin","blockchain","cryptocurrency","ecies","multisig","p2p","payment","transaction"],license:"MIT",main:"index.js",maintainers:[{name:"braydonf",email:"braydon@bitpay.com"},{name:"gabegattis",email:"gabegattis@gmail.com"},{name:"gasteve",email:"stephen@pairhome.net"},{name:"patrickbitpay",email:"patrick@bitpay.com"}],name:"bitcore-lib",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git+https://github.com/bitpay/bitcore-lib.git"},scripts:{build:"gulp",coverage:"gulp coverage",lint:"gulp lint",test:"gulp test"},version:"0.13.13"}},{}],88:[function(e,t,r){t.exports=e("./lib/mnemonic")},{"./lib/mnemonic":90}],89:[function(e,t,r){"use strict";var n={name:"Mnemonic",message:"Internal Error on bitcore-mnemonic module {0}",errors:[{name:"InvalidEntropy",message:"Entropy length must be an even multiple of 11 bits: {0}"},{name:"UnknownWordlist",message:"Could not detect the used word list: {0}"},{name:"InvalidMnemonic",message:"Mnemonic string is invalid: {0}"}]};t.exports=e("bitcore-lib").errors.extend(n)},{"bitcore-lib":9}],90:[function(e,t,r){(function(r){"use strict";var n=e("bitcore-lib"),i=n.crypto.BN,o=e("unorm"),s=n.deps._,a=e("./pbkdf2"),u=e("./errors"),f=n.crypto.Hash,h=n.crypto.Random,c=n.util.preconditions,d=function(e,t){if(!(this instanceof d))return new d(e,t);s.isArray(e)&&(t=e,e=null);var i,a,f;if(r.isBuffer(e))f=e;else if(s.isString(e))a=o.nfkd(e);else if(s.isNumber(e))i=e;else if(e)throw new n.errors.InvalidArgument("data","Must be a Buffer, a string or an integer");if(i=i||128,t=t||d._getDictionary(a),a&&!t)throw new u.UnknownWordlist(a);if(t=t||d.Words.ENGLISH,f&&(a=d._entropy2mnemonic(f,t)),a&&!d.isValid(a,t))throw new u.InvalidMnemonic(a);if(i%32!==0||128>i)throw new n.errors.InvalidArgument("ENT","Values must be ENT > 128 and ENT % 32 == 0");a=a||d._mnemonic(i,t),Object.defineProperty(this,"wordlist",{configurable:!1,value:t}),Object.defineProperty(this,"phrase",{configurable:!1,value:a})};d.Words=e("./words"),d.isValid=function(e,t){if(e=o.nfkd(e),t=t||d._getDictionary(e),!t)return!1;for(var n=e.split(" "),i="",s=0;sa)return!1;i+=("00000000000"+a.toString(2)).slice(-11)}var u=i.length/33,f=i.slice(-u),h=i.slice(0,i.length-u),c=new r(h.length/8);for(s=0;si)return!1}return!0},d._getDictionary=function(e){if(!e)return null;for(var t=Object.keys(d.Words),r=0;r"},d._mnemonic=function(e,t){var r=h.getRandomBuffer(e/8);return d._entropy2mnemonic(r,t)},d._entropy2mnemonic=function(e,t){for(var r="",n=0;n(Math.pow(2,32)-1)*s)throw Error("Requested key length too long");if("string"!=typeof e&&!r.isBuffer(e))throw new TypeError("key must a string or Buffer");if("string"!=typeof t&&!r.isBuffer(t))throw new TypeError("salt must a string or Buffer");"string"==typeof e&&(e=new r(e)),"string"==typeof t&&(t=new r(t));var a=new r(o),u=new r(s),f=new r(s),h=new r(t.length+4),c=Math.ceil(o/s),d=o-(c-1)*s;t.copy(h,0,0,t.length);for(var l=1;c>=l;l++){h[t.length+0]=l>>24&255,h[t.length+1]=l>>16&255,h[t.length+2]=l>>8&255,h[t.length+3]=l>>0&255,u=i.createHmac("sha512",e).update(h).digest(),u.copy(f,0,0,s);for(var p=1;n>p;p++){u=i.createHmac("sha512",e).update(u).digest();for(var g=0;s>g;g++)f[g]^=u[g]}var m=(l-1)*s,b=l===c?d:s;f.copy(a,m,0,b)}return a}var i=e("crypto");t.exports=n}).call(this,e("buffer").Buffer)},{buffer:147,crypto:174}],92:[function(e,t,r){"use strict";var n=["的","一","是","在","不","了","有","和","人","这","中","大","为","上","个","国","我","以","要","他","时","来","用","们","生","到","作","地","于","出","就","分","对","成","会","可","主","发","年","动","同","工","也","能","下","过","子","说","产","种","面","而","方","后","多","定","行","学","法","所","民","得","经","十","三","之","进","着","等","部","度","家","电","力","里","如","水","化","高","自","二","理","起","小","物","现","实","加","量","都","两","体","制","机","当","使","点","从","业","本","去","把","性","好","应","开","它","合","还","因","由","其","些","然","前","外","天","政","四","日","那","社","义","事","平","形","相","全","表","间","样","与","关","各","重","新","线","内","数","正","心","反","你","明","看","原","又","么","利","比","或","但","质","气","第","向","道","命","此","变","条","只","没","结","解","问","意","建","月","公","无","系","军","很","情","者","最","立","代","想","已","通","并","提","直","题","党","程","展","五","果","料","象","员","革","位","入","常","文","总","次","品","式","活","设","及","管","特","件","长","求","老","头","基","资","边","流","路","级","少","图","山","统","接","知","较","将","组","见","计","别","她","手","角","期","根","论","运","农","指","几","九","区","强","放","决","西","被","干","做","必","战","先","回","则","任","取","据","处","队","南","给","色","光","门","即","保","治","北","造","百","规","热","领","七","海","口","东","导","器","压","志","世","金","增","争","济","阶","油","思","术","极","交","受","联","什","认","六","共","权","收","证","改","清","美","再","采","转","更","单","风","切","打","白","教","速","花","带","安","场","身","车","例","真","务","具","万","每","目","至","达","走","积","示","议","声","报","斗","完","类","八","离","华","名","确","才","科","张","信","马","节","话","米","整","空","元","况","今","集","温","传","土","许","步","群","广","石","记","需","段","研","界","拉","林","律","叫","且","究","观","越","织","装","影","算","低","持","音","众","书","布","复","容","儿","须","际","商","非","验","连","断","深","难","近","矿","千","周","委","素","技","备","半","办","青","省","列","习","响","约","支","般","史","感","劳","便","团","往","酸","历","市","克","何","除","消","构","府","称","太","准","精","值","号","率","族","维","划","选","标","写","存","候","毛","亲","快","效","斯","院","查","江","型","眼","王","按","格","养","易","置","派","层","片","始","却","专","状","育","厂","京","识","适","属","圆","包","火","住","调","满","县","局","照","参","红","细","引","听","该","铁","价","严","首","底","液","官","德","随","病","苏","失","尔","死","讲","配","女","黄","推","显","谈","罪","神","艺","呢","席","含","企","望","密","批","营","项","防","举","球","英","氧","势","告","李","台","落","木","帮","轮","破","亚","师","围","注","远","字","材","排","供","河","态","封","另","施","减","树","溶","怎","止","案","言","士","均","武","固","叶","鱼","波","视","仅","费","紧","爱","左","章","早","朝","害","续","轻","服","试","食","充","兵","源","判","护","司","足","某","练","差","致","板","田","降","黑","犯","负","击","范","继","兴","似","余","坚","曲","输","修","故","城","夫","够","送","笔","船","占","右","财","吃","富","春","职","觉","汉","画","功","巴","跟","虽","杂","飞","检","吸","助","升","阳","互","初","创","抗","考","投","坏","策","古","径","换","未","跑","留","钢","曾","端","责","站","简","述","钱","副","尽","帝","射","草","冲","承","独","令","限","阿","宣","环","双","请","超","微","让","控","州","良","轴","找","否","纪","益","依","优","顶","础","载","倒","房","突","坐","粉","敌","略","客","袁","冷","胜","绝","析","块","剂","测","丝","协","诉","念","陈","仍","罗","盐","友","洋","错","苦","夜","刑","移","频","逐","靠","混","母","短","皮","终","聚","汽","村","云","哪","既","距","卫","停","烈","央","察","烧","迅","境","若","印","洲","刻","括","激","孔","搞","甚","室","待","核","校","散","侵","吧","甲","游","久","菜","味","旧","模","湖","货","损","预","阻","毫","普","稳","乙","妈","植","息","扩","银","语","挥","酒","守","拿","序","纸","医","缺","雨","吗","针","刘","啊","急","唱","误","训","愿","审","附","获","茶","鲜","粮","斤","孩","脱","硫","肥","善","龙","演","父","渐","血","欢","械","掌","歌","沙","刚","攻","谓","盾","讨","晚","粒","乱","燃","矛","乎","杀","药","宁","鲁","贵","钟","煤","读","班","伯","香","介","迫","句","丰","培","握","兰","担","弦","蛋","沉","假","穿","执","答","乐","谁","顺","烟","缩","征","脸","喜","松","脚","困","异","免","背","星","福","买","染","井","概","慢","怕","磁","倍","祖","皇","促","静","补","评","翻","肉","践","尼","衣","宽","扬","棉","希","伤","操","垂","秋","宜","氢","套","督","振","架","亮","末","宪","庆","编","牛","触","映","雷","销","诗","座","居","抓","裂","胞","呼","娘","景","威","绿","晶","厚","盟","衡","鸡","孙","延","危","胶","屋","乡","临","陆","顾","掉","呀","灯","岁","措","束","耐","剧","玉","赵","跳","哥","季","课","凯","胡","额","款","绍","卷","齐","伟","蒸","殖","永","宗","苗","川","炉","岩","弱","零","杨","奏","沿","露","杆","探","滑","镇","饭","浓","航","怀","赶","库","夺","伊","灵","税","途","灭","赛","归","召","鼓","播","盘","裁","险","康","唯","录","菌","纯","借","糖","盖","横","符","私","努","堂","域","枪","润","幅","哈","竟","熟","虫","泽","脑","壤","碳","欧","遍","侧","寨","敢","彻","虑","斜","薄","庭","纳","弹","饲","伸","折","麦","湿","暗","荷","瓦","塞","床","筑","恶","户","访","塔","奇","透","梁","刀","旋","迹","卡","氯","遇","份","毒","泥","退","洗","摆","灰","彩","卖","耗","夏","择","忙","铜","献","硬","予","繁","圈","雪","函","亦","抽","篇","阵","阴","丁","尺","追","堆","雄","迎","泛","爸","楼","避","谋","吨","野","猪","旗","累","偏","典","馆","索","秦","脂","潮","爷","豆","忽","托","惊","塑","遗","愈","朱","替","纤","粗","倾","尚","痛","楚","谢","奋","购","磨","君","池","旁","碎","骨","监","捕","弟","暴","割","贯","殊","释","词","亡","壁","顿","宝","午","尘","闻","揭","炮","残","冬","桥","妇","警","综","招","吴","付","浮","遭","徐","您","摇","谷","赞","箱","隔","订","男","吹","园","纷","唐","败","宋","玻","巨","耕","坦","荣","闭","湾","键","凡","驻","锅","救","恩","剥","凝","碱","齿","截","炼","麻","纺","禁","废","盛","版","缓","净","睛","昌","婚","涉","筒","嘴","插","岸","朗","庄","街","藏","姑","贸","腐","奴","啦","惯","乘","伙","恢","匀","纱","扎","辩","耳","彪","臣","亿","璃","抵","脉","秀","萨","俄","网","舞","店","喷","纵","寸","汗","挂","洪","贺","闪","柬","爆","烯","津","稻","墙","软","勇","像","滚","厘","蒙","芳","肯","坡","柱","荡","腿","仪","旅","尾","轧","冰","贡","登","黎","削","钻","勒","逃","障","氨","郭","峰","币","港","伏","轨","亩","毕","擦","莫","刺","浪","秘","援","株","健","售","股","岛","甘","泡","睡","童","铸","汤","阀","休","汇","舍","牧","绕","炸","哲","磷","绩","朋","淡","尖","启","陷","柴","呈","徒","颜","泪","稍","忘","泵","蓝","拖","洞","授","镜","辛","壮","锋","贫","虚","弯","摩","泰","幼","廷","尊","窗","纲","弄","隶","疑","氏","宫","姐","震","瑞","怪","尤","琴","循","描","膜","违","夹","腰","缘","珠","穷","森","枝","竹","沟","催","绳","忆","邦","剩","幸","浆","栏","拥","牙","贮","礼","滤","钠","纹","罢","拍","咱","喊","袖","埃","勤","罚","焦","潜","伍","墨","欲","缝","姓","刊","饱","仿","奖","铝","鬼","丽","跨","默","挖","链","扫","喝","袋","炭","污","幕","诸","弧","励","梅","奶","洁","灾","舟","鉴","苯","讼","抱","毁","懂","寒","智","埔","寄","届","跃","渡","挑","丹","艰","贝","碰","拔","爹","戴","码","梦","芽","熔","赤","渔","哭","敬","颗","奔","铅","仲","虎","稀","妹","乏","珍","申","桌","遵","允","隆","螺","仓","魏","锐","晓","氮","兼","隐","碍","赫","拨","忠","肃","缸","牵","抢","博","巧","壳","兄","杜","讯","诚","碧","祥","柯","页","巡","矩","悲","灌","龄","伦","票","寻","桂","铺","圣","恐","恰","郑","趣","抬","荒","腾","贴","柔","滴","猛","阔","辆","妻","填","撤","储","签","闹","扰","紫","砂","递","戏","吊","陶","伐","喂","疗","瓶","婆","抚","臂","摸","忍","虾","蜡","邻","胸","巩","挤","偶","弃","槽","劲","乳","邓","吉","仁","烂","砖","租","乌","舰","伴","瓜","浅","丙","暂","燥","橡","柳","迷","暖","牌","秧","胆","详","簧","踏","瓷","谱","呆","宾","糊","洛","辉","愤","竞","隙","怒","粘","乃","绪","肩","籍","敏","涂","熙","皆","侦","悬","掘","享","纠","醒","狂","锁","淀","恨","牲","霸","爬","赏","逆","玩","陵","祝","秒","浙","貌","役","彼","悉","鸭","趋","凤","晨","畜","辈","秩","卵","署","梯","炎","滩","棋","驱","筛","峡","冒","啥","寿","译","浸","泉","帽","迟","硅","疆","贷","漏","稿","冠","嫩","胁","芯","牢","叛","蚀","奥","鸣","岭","羊","凭","串","塘","绘","酵","融","盆","锡","庙","筹","冻","辅","摄","袭","筋","拒","僚","旱","钾","鸟","漆","沈","眉","疏","添","棒","穗","硝","韩","逼","扭","侨","凉","挺","碗","栽","炒","杯","患","馏","劝","豪","辽","勃","鸿","旦","吏","拜","狗","埋","辊","掩","饮","搬","骂","辞","勾","扣","估","蒋","绒","雾","丈","朵","姆","拟","宇","辑","陕","雕","偿","蓄","崇","剪","倡","厅","咬","驶","薯","刷","斥","番","赋","奉","佛","浇","漫","曼","扇","钙","桃","扶","仔","返","俗","亏","腔","鞋","棱","覆","框","悄","叔","撞","骗","勘","旺","沸","孤","吐","孟","渠","屈","疾","妙","惜","仰","狠","胀","谐","抛","霉","桑","岗","嘛","衰","盗","渗","脏","赖","涌","甜","曹","阅","肌","哩","厉","烃","纬","毅","昨","伪","症","煮","叹","钉","搭","茎","笼","酷","偷","弓","锥","恒","杰","坑","鼻","翼","纶","叙","狱","逮","罐","络","棚","抑","膨","蔬","寺","骤","穆","冶","枯","册","尸","凸","绅","坯","牺","焰","轰","欣","晋","瘦","御","锭","锦","丧","旬","锻","垄","搜","扑","邀","亭","酯","迈","舒","脆","酶","闲","忧","酚","顽","羽","涨","卸","仗","陪","辟","惩","杭","姚","肚","捉","飘","漂","昆","欺","吾","郎","烷","汁","呵","饰","萧","雅","邮","迁","燕","撒","姻","赴","宴","烦","债","帐","斑","铃","旨","醇","董","饼","雏","姿","拌","傅","腹","妥","揉","贤","拆","歪","葡","胺","丢","浩","徽","昂","垫","挡","览","贪","慰","缴","汪","慌","冯","诺","姜","谊","凶","劣","诬","耀","昏","躺","盈","骑","乔","溪","丛","卢","抹","闷","咨","刮","驾","缆","悟","摘","铒","掷","颇","幻","柄","惠","惨","佳","仇","腊","窝","涤","剑","瞧","堡","泼","葱","罩","霍","捞","胎","苍","滨","俩","捅","湘","砍","霞","邵","萄","疯","淮","遂","熊","粪","烘","宿","档","戈","驳","嫂","裕","徙","箭","捐","肠","撑","晒","辨","殿","莲","摊","搅","酱","屏","疫","哀","蔡","堵","沫","皱","畅","叠","阁","莱","敲","辖","钩","痕","坝","巷","饿","祸","丘","玄","溜","曰","逻","彭","尝","卿","妨","艇","吞","韦","怨","矮","歇"]; +t.exports=n},{}],93:[function(e,t,r){"use strict";var n=["abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse","access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act","action","actor","actress","actual","adapt","add","addict","address","adjust","admit","adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent","agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert","alien","all","alley","allow","almost","alone","alpha","already","also","alter","always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger","angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique","anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic","area","arena","argue","arm","armed","armor","army","around","arrange","arrest","arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset","assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction","audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake","aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge","bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain","barrel","base","basic","basket","battle","beach","bean","beauty","because","become","beef","before","begin","behave","behind","believe","below","belt","bench","benefit","best","betray","better","between","beyond","bicycle","bid","bike","bind","biology","bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless","blind","blood","blossom","blouse","blue","blur","blush","board","boat","body","boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss","bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread","breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze","broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb","bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy","butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call","calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas","canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry","cart","case","cash","casino","castle","casual","cat","catalog","catch","category","cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century","cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase","chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child","chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle","citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk","clever","click","client","cliff","climb","clinic","clip","clock","clog","close","cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut","code","coffee","coil","coin","collect","color","column","combine","come","comfort","comic","common","company","concert","conduct","confirm","congress","connect","consider","control","convince","cook","cool","copper","copy","coral","core","corn","correct","cost","cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle","craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek","crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial","cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup","cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad","damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal","debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense","define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny","depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk","despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond","diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur","direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance","divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain","donate","donkey","donor","door","dose","double","dove","draft","dragon","drama","drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop","drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf","dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo","ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow","elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody","embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless","endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough","enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip","era","erase","erode","erosion","error","erupt","escape","essay","essence","estate","eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange","excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit","exotic","expand","expect","expire","explain","expose","express","extend","extra","eye","eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame","family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father","fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female","fence","festival","fetch","fever","few","fiber","fiction","field","figure","file","film","filter","final","find","fine","finger","finish","fire","firm","first","fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor","flee","flight","flip","float","flock","floor","flower","fluid","flush","fly","foam","focus","fog","foil","fold","follow","food","foot","force","forest","forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile","frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen","fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy","gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp","gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture","ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance","glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue","goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown","grab","grace","grain","grant","grape","grass","gravity","great","green","grid","grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt","guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy","harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health","heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden","high","hill","hint","hip","hire","history","hobby","hockey","hold","hole","holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital","host","hotel","hour","hover","hub","huge","human","humble","humor","hundred","hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea","identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune","impact","impose","improve","impulse","inch","include","income","increase","index","indicate","indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury","inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install","intact","interest","into","invest","invite","involve","iron","island","isolate","issue","item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel","job","join","joke","journey","joy","judge","juice","jump","jungle","junior","junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney","kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife","knock","know","lab","label","labor","ladder","lady","lake","lamp","language","laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit","layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal","legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level","liar","liberty","library","license","life","lift","light","like","limb","limit","link","lion","liquid","list","little","live","lizard","load","loan","lobster","local","lock","logic","lonely","long","loop","lottery","loud","lounge","love","loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad","magic","magnet","maid","mail","main","major","make","mammal","man","manage","mandate","mango","mansion","manual","maple","marble","march","margin","marine","market","marriage","mask","mass","master","match","material","math","matrix","matter","maximum","maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt","member","memory","mention","menu","mercy","merge","merit","merry","mesh","message","metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor","minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile","model","modify","mom","moment","monitor","monkey","monster","month","moon","moral","more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie","much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual","myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature","near","neck","need","negative","neglect","neither","nephew","nerve","nest","net","network","neutral","never","news","next","nice","night","noble","noise","nominee","noodle","normal","north","nose","notable","note","nothing","notice","novel","now","nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe","obtain","obvious","occur","ocean","october","odor","off","offer","office","often","oil","okay","old","olive","olympic","omit","once","one","onion","online","only","open","opera","opinion","oppose","option","orange","orbit","orchard","order","ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output","outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact","paddle","page","pair","palace","palm","panda","panel","panic","panther","paper","parade","parent","park","parrot","party","pass","patch","path","patient","patrol","pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen","penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo","phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot","pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate","play","please","pledge","pluck","plug","plunge","poem","poet","point","polar","pole","police","pond","pony","pool","popular","portion","position","possible","post","potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare","present","pretty","prevent","price","pride","primary","print","priority","prison","private","prize","problem","process","produce","profit","program","project","promote","proof","property","prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin","punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle","pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit","raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp","ranch","random","range","rapid","rare","rate","rather","raven","raw","razor","ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle","reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release","relief","rely","remain","remember","remind","remove","render","renew","rent","reopen","repair","repeat","replace","report","require","rescue","resemble","resist","resource","response","result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib","ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot","ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket","romance","roof","rookie","room","rose","rotate","rough","round","route","royal","rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness","safe","sail","salad","salmon","salon","salt","salute","same","sample","sand","satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter","scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script","scrub","sea","search","season","seat","second","secret","section","security","seed","seek","segment","select","sell","seminar","senior","sense","sentence","series","service","session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell","sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop","short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side","siege","sight","sign","silent","silk","silly","silver","similar","simple","since","sing","siren","sister","situate","six","size","skate","sketch","ski","skill","skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight","slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth","snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda","soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry","sort","soul","sound","soup","source","south","space","spare","spatial","spawn","speak","special","speed","spell","spend","sphere","spice","spider","spike","spin","spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring","spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp","stand","start","state","stay","steak","steel","stem","step","stereo","stick","still","sting","stock","stomach","stone","stool","story","stove","strategy","street","strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway","success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny","sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey","suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim","swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag","tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi","teach","team","tell","ten","tenant","tennis","tent","term","test","text","thank","that","theme","then","theory","there","they","thing","this","thought","three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber","time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler","toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool","tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist","toward","tower","town","toy","track","trade","traffic","tragic","train","transfer","trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick","trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust","truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle","twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella","unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform","unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade","uphold","upon","upper","upset","urban","urge","usage","use","used","useful","useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van","vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue","verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory","video","view","village","vintage","violin","virtual","virus","visa","visit","visual","vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage","wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash","wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather","web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat","wheel","when","where","whip","whisper","wide","width","wife","wild","will","win","window","wine","wing","wink","winner","winter","wire","wisdom","wise","wish","witness","wolf","woman","wonder","wood","wool","word","work","world","worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year","yellow","you","young","youth","zebra","zero","zone","zoo"];t.exports=n},{}],94:[function(e,t,r){"use string";var n=["abaisser","abandon","abdiquer","abeille","abolir","aborder","aboutir","aboyer","abrasif","abreuver","abriter","abroger","abrupt","absence","absolu","absurde","abusif","abyssal","académie","acajou","acarien","accabler","accepter","acclamer","accolade","accroche","accuser","acerbe","achat","acheter","aciduler","acier","acompte","acquérir","acronyme","acteur","actif","actuel","adepte","adéquat","adhésif","adjectif","adjuger","admettre","admirer","adopter","adorer","adoucir","adresse","adroit","adulte","adverbe","aérer","aéronef","affaire","affecter","affiche","affreux","affubler","agacer","agencer","agile","agiter","agrafer","agréable","agrume","aider","aiguille","ailier","aimable","aisance","ajouter","ajuster","alarmer","alchimie","alerte","algèbre","algue","aliéner","aliment","alléger","alliage","allouer","allumer","alourdir","alpaga","altesse","alvéole","amateur","ambigu","ambre","aménager","amertume","amidon","amiral","amorcer","amour","amovible","amphibie","ampleur","amusant","analyse","anaphore","anarchie","anatomie","ancien","anéantir","angle","angoisse","anguleux","animal","annexer","annonce","annuel","anodin","anomalie","anonyme","anormal","antenne","antidote","anxieux","apaiser","apéritif","aplanir","apologie","appareil","appeler","apporter","appuyer","aquarium","aqueduc","arbitre","arbuste","ardeur","ardoise","argent","arlequin","armature","armement","armoire","armure","arpenter","arracher","arriver","arroser","arsenic","artériel","article","aspect","asphalte","aspirer","assaut","asservir","assiette","associer","assurer","asticot","astre","astuce","atelier","atome","atrium","atroce","attaque","attentif","attirer","attraper","aubaine","auberge","audace","audible","augurer","aurore","automne","autruche","avaler","avancer","avarice","avenir","averse","aveugle","aviateur","avide","avion","aviser","avoine","avouer","avril","axial","axiome","badge","bafouer","bagage","baguette","baignade","balancer","balcon","baleine","balisage","bambin","bancaire","bandage","banlieue","bannière","banquier","barbier","baril","baron","barque","barrage","bassin","bastion","bataille","bateau","batterie","baudrier","bavarder","belette","bélier","belote","bénéfice","berceau","berger","berline","bermuda","besace","besogne","bétail","beurre","biberon","bicycle","bidule","bijou","bilan","bilingue","billard","binaire","biologie","biopsie","biotype","biscuit","bison","bistouri","bitume","bizarre","blafard","blague","blanchir","blessant","blinder","blond","bloquer","blouson","bobard","bobine","boire","boiser","bolide","bonbon","bondir","bonheur","bonifier","bonus","bordure","borne","botte","boucle","boueux","bougie","boulon","bouquin","bourse","boussole","boutique","boxeur","branche","brasier","brave","brebis","brèche","breuvage","bricoler","brigade","brillant","brioche","brique","brochure","broder","bronzer","brousse","broyeur","brume","brusque","brutal","bruyant","buffle","buisson","bulletin","bureau","burin","bustier","butiner","butoir","buvable","buvette","cabanon","cabine","cachette","cadeau","cadre","caféine","caillou","caisson","calculer","calepin","calibre","calmer","calomnie","calvaire","camarade","caméra","camion","campagne","canal","caneton","canon","cantine","canular","capable","caporal","caprice","capsule","capter","capuche","carabine","carbone","caresser","caribou","carnage","carotte","carreau","carton","cascade","casier","casque","cassure","causer","caution","cavalier","caverne","caviar","cédille","ceinture","céleste","cellule","cendrier","censurer","central","cercle","cérébral","cerise","cerner","cerveau","cesser","chagrin","chaise","chaleur","chambre","chance","chapitre","charbon","chasseur","chaton","chausson","chavirer","chemise","chenille","chéquier","chercher","cheval","chien","chiffre","chignon","chimère","chiot","chlorure","chocolat","choisir","chose","chouette","chrome","chute","cigare","cigogne","cimenter","cinéma","cintrer","circuler","cirer","cirque","citerne","citoyen","citron","civil","clairon","clameur","claquer","classe","clavier","client","cligner","climat","clivage","cloche","clonage","cloporte","cobalt","cobra","cocasse","cocotier","coder","codifier","coffre","cogner","cohésion","coiffer","coincer","colère","colibri","colline","colmater","colonel","combat","comédie","commande","compact","concert","conduire","confier","congeler","connoter","consonne","contact","convexe","copain","copie","corail","corbeau","cordage","corniche","corpus","correct","cortège","cosmique","costume","coton","coude","coupure","courage","couteau","couvrir","coyote","crabe","crainte","cravate","crayon","créature","créditer","crémeux","creuser","crevette","cribler","crier","cristal","critère","croire","croquer","crotale","crucial","cruel","crypter","cubique","cueillir","cuillère","cuisine","cuivre","culminer","cultiver","cumuler","cupide","curatif","curseur","cyanure","cycle","cylindre","cynique","daigner","damier","danger","danseur","dauphin","débattre","débiter","déborder","débrider","débutant","décaler","décembre","déchirer","décider","déclarer","décorer","décrire","décupler","dédale","déductif","déesse","défensif","défiler","défrayer","dégager","dégivrer","déglutir","dégrafer","déjeuner","délice","déloger","demander","demeurer","démolir","dénicher","dénouer","dentelle","dénuder","départ","dépenser","déphaser","déplacer","déposer","déranger","dérober","désastre","descente","désert","désigner","désobéir","dessiner","destrier","détacher","détester","détourer","détresse","devancer","devenir","deviner","devoir","diable","dialogue","diamant","dicter","différer","digérer","digital","digne","diluer","dimanche","diminuer","dioxyde","directif","diriger","discuter","disposer","dissiper","distance","divertir","diviser","docile","docteur","dogme","doigt","domaine","domicile","dompter","donateur","donjon","donner","dopamine","dortoir","dorure","dosage","doseur","dossier","dotation","douanier","double","douceur","douter","doyen","dragon","draper","dresser","dribbler","droiture","duperie","duplexe","durable","durcir","dynastie","éblouir","écarter","écharpe","échelle","éclairer","éclipse","éclore","écluse","école","économie","écorce","écouter","écraser","écrémer","écrivain","écrou","écume","écureuil","édifier","éduquer","effacer","effectif","effigie","effort","effrayer","effusion","égaliser","égarer","éjecter","élaborer","élargir","électron","élégant","éléphant","élève","éligible","élitisme","éloge","élucider","éluder","emballer","embellir","embryon","émeraude","émission","emmener","émotion","émouvoir","empereur","employer","emporter","emprise","émulsion","encadrer","enchère","enclave","encoche","endiguer","endosser","endroit","enduire","énergie","enfance","enfermer","enfouir","engager","engin","englober","énigme","enjamber","enjeu","enlever","ennemi","ennuyeux","enrichir","enrobage","enseigne","entasser","entendre","entier","entourer","entraver","énumérer","envahir","enviable","envoyer","enzyme","éolien","épaissir","épargne","épatant","épaule","épicerie","épidémie","épier","épilogue","épine","épisode","épitaphe","époque","épreuve","éprouver","épuisant","équerre","équipe","ériger","érosion","erreur","éruption","escalier","espadon","espèce","espiègle","espoir","esprit","esquiver","essayer","essence","essieu","essorer","estime","estomac","estrade","étagère","étaler","étanche","étatique","éteindre","étendoir","éternel","éthanol","éthique","ethnie","étirer","étoffer","étoile","étonnant","étourdir","étrange","étroit","étude","euphorie","évaluer","évasion","éventail","évidence","éviter","évolutif","évoquer","exact","exagérer","exaucer","exceller","excitant","exclusif","excuse","exécuter","exemple","exercer","exhaler","exhorter","exigence","exiler","exister","exotique","expédier","explorer","exposer","exprimer","exquis","extensif","extraire","exulter","fable","fabuleux","facette","facile","facture","faiblir","falaise","fameux","famille","farceur","farfelu","farine","farouche","fasciner","fatal","fatigue","faucon","fautif","faveur","favori","fébrile","féconder","fédérer","félin","femme","fémur","fendoir","féodal","fermer","féroce","ferveur","festival","feuille","feutre","février","fiasco","ficeler","fictif","fidèle","figure","filature","filetage","filière","filleul","filmer","filou","filtrer","financer","finir","fiole","firme","fissure","fixer","flairer","flamme","flasque","flatteur","fléau","flèche","fleur","flexion","flocon","flore","fluctuer","fluide","fluvial","folie","fonderie","fongible","fontaine","forcer","forgeron","formuler","fortune","fossile","foudre","fougère","fouiller","foulure","fourmi","fragile","fraise","franchir","frapper","frayeur","frégate","freiner","frelon","frémir","frénésie","frère","friable","friction","frisson","frivole","froid","fromage","frontal","frotter","fruit","fugitif","fuite","fureur","furieux","furtif","fusion","futur","gagner","galaxie","galerie","gambader","garantir","gardien","garnir","garrigue","gazelle","gazon","géant","gélatine","gélule","gendarme","général","génie","genou","gentil","géologie","géomètre","géranium","germe","gestuel","geyser","gibier","gicler","girafe","givre","glace","glaive","glisser","globe","gloire","glorieux","golfeur","gomme","gonfler","gorge","gorille","goudron","gouffre","goulot","goupille","gourmand","goutte","graduel","graffiti","graine","grand","grappin","gratuit","gravir","grenat","griffure","griller","grimper","grogner","gronder","grotte","groupe","gruger","grutier","gruyère","guépard","guerrier","guide","guimauve","guitare","gustatif","gymnaste","gyrostat","habitude","hachoir","halte","hameau","hangar","hanneton","haricot","harmonie","harpon","hasard","hélium","hématome","herbe","hérisson","hermine","héron","hésiter","heureux","hiberner","hibou","hilarant","histoire","hiver","homard","hommage","homogène","honneur","honorer","honteux","horde","horizon","horloge","hormone","horrible","houleux","housse","hublot","huileux","humain","humble","humide","humour","hurler","hydromel","hygiène","hymne","hypnose","idylle","ignorer","iguane","illicite","illusion","image","imbiber","imiter","immense","immobile","immuable","impact","impérial","implorer","imposer","imprimer","imputer","incarner","incendie","incident","incliner","incolore","indexer","indice","inductif","inédit","ineptie","inexact","infini","infliger","informer","infusion","ingérer","inhaler","inhiber","injecter","injure","innocent","inoculer","inonder","inscrire","insecte","insigne","insolite","inspirer","instinct","insulter","intact","intense","intime","intrigue","intuitif","inutile","invasion","inventer","inviter","invoquer","ironique","irradier","irréel","irriter","isoler","ivoire","ivresse","jaguar","jaillir","jambe","janvier","jardin","jauger","jaune","javelot","jetable","jeton","jeudi","jeunesse","joindre","joncher","jongler","joueur","jouissif","journal","jovial","joyau","joyeux","jubiler","jugement","junior","jupon","juriste","justice","juteux","juvénile","kayak","kimono","kiosque","label","labial","labourer","lacérer","lactose","lagune","laine","laisser","laitier","lambeau","lamelle","lampe","lanceur","langage","lanterne","lapin","largeur","larme","laurier","lavabo","lavoir","lecture","légal","léger","légume","lessive","lettre","levier","lexique","lézard","liasse","libérer","libre","licence","licorne","liège","lièvre","ligature","ligoter","ligue","limer","limite","limonade","limpide","linéaire","lingot","lionceau","liquide","lisière","lister","lithium","litige","littoral","livreur","logique","lointain","loisir","lombric","loterie","louer","lourd","loutre","louve","loyal","lubie","lucide","lucratif","lueur","lugubre","luisant","lumière","lunaire","lundi","luron","lutter","luxueux","machine","magasin","magenta","magique","maigre","maillon","maintien","mairie","maison","majorer","malaxer","maléfice","malheur","malice","mallette","mammouth","mandater","maniable","manquant","manteau","manuel","marathon","marbre","marchand","mardi","maritime","marqueur","marron","marteler","mascotte","massif","matériel","matière","matraque","maudire","maussade","mauve","maximal","méchant","méconnu","médaille","médecin","méditer","méduse","meilleur","mélange","mélodie","membre","mémoire","menacer","mener","menhir","mensonge","mentor","mercredi","mérite","merle","messager","mesure","métal","météore","méthode","métier","meuble","miauler","microbe","miette","mignon","migrer","milieu","million","mimique","mince","minéral","minimal","minorer","minute","miracle","miroiter","missile","mixte","mobile","moderne","moelleux","mondial","moniteur","monnaie","monotone","monstre","montagne","monument","moqueur","morceau","morsure","mortier","moteur","motif","mouche","moufle","moulin","mousson","mouton","mouvant","multiple","munition","muraille","murène","murmure","muscle","muséum","musicien","mutation","muter","mutuel","myriade","myrtille","mystère","mythique","nageur","nappe","narquois","narrer","natation","nation","nature","naufrage","nautique","navire","nébuleux","nectar","néfaste","négation","négliger","négocier","neige","nerveux","nettoyer","neurone","neutron","neveu","niche","nickel","nitrate","niveau","noble","nocif","nocturne","noirceur","noisette","nomade","nombreux","nommer","normatif","notable","notifier","notoire","nourrir","nouveau","novateur","novembre","novice","nuage","nuancer","nuire","nuisible","numéro","nuptial","nuque","nutritif","obéir","objectif","obliger","obscur","observer","obstacle","obtenir","obturer","occasion","occuper","océan","octobre","octroyer","octupler","oculaire","odeur","odorant","offenser","officier","offrir","ogive","oiseau","oisillon","olfactif","olivier","ombrage","omettre","onctueux","onduler","onéreux","onirique","opale","opaque","opérer","opinion","opportun","opprimer","opter","optique","orageux","orange","orbite","ordonner","oreille","organe","orgueil","orifice","ornement","orque","ortie","osciller","osmose","ossature","otarie","ouragan","ourson","outil","outrager","ouvrage","ovation","oxyde","oxygène","ozone","paisible","palace","palmarès","palourde","palper","panache","panda","pangolin","paniquer","panneau","panorama","pantalon","papaye","papier","papoter","papyrus","paradoxe","parcelle","paresse","parfumer","parler","parole","parrain","parsemer","partager","parure","parvenir","passion","pastèque","paternel","patience","patron","pavillon","pavoiser","payer","paysage","peigne","peintre","pelage","pélican","pelle","pelouse","peluche","pendule","pénétrer","pénible","pensif","pénurie","pépite","péplum","perdrix","perforer","période","permuter","perplexe","persil","perte","peser","pétale","petit","pétrir","peuple","pharaon","phobie","phoque","photon","phrase","physique","piano","pictural","pièce","pierre","pieuvre","pilote","pinceau","pipette","piquer","pirogue","piscine","piston","pivoter","pixel","pizza","placard","plafond","plaisir","planer","plaque","plastron","plateau","pleurer","plexus","pliage","plomb","plonger","pluie","plumage","pochette","poésie","poète","pointe","poirier","poisson","poivre","polaire","policier","pollen","polygone","pommade","pompier","ponctuel","pondérer","poney","portique","position","posséder","posture","potager","poteau","potion","pouce","poulain","poumon","pourpre","poussin","pouvoir","prairie","pratique","précieux","prédire","préfixe","prélude","prénom","présence","prétexte","prévoir","primitif","prince","prison","priver","problème","procéder","prodige","profond","progrès","proie","projeter","prologue","promener","propre","prospère","protéger","prouesse","proverbe","prudence","pruneau","psychose","public","puceron","puiser","pulpe","pulsar","punaise","punitif","pupitre","purifier","puzzle","pyramide","quasar","querelle","question","quiétude","quitter","quotient","racine","raconter","radieux","ragondin","raideur","raisin","ralentir","rallonge","ramasser","rapide","rasage","ratisser","ravager","ravin","rayonner","réactif","réagir","réaliser","réanimer","recevoir","réciter","réclamer","récolter","recruter","reculer","recycler","rédiger","redouter","refaire","réflexe","réformer","refrain","refuge","régalien","région","réglage","régulier","réitérer","rejeter","rejouer","relatif","relever","relief","remarque","remède","remise","remonter","remplir","remuer","renard","renfort","renifler","renoncer","rentrer","renvoi","replier","reporter","reprise","reptile","requin","réserve","résineux","résoudre","respect","rester","résultat","rétablir","retenir","réticule","retomber","retracer","réunion","réussir","revanche","revivre","révolte","révulsif","richesse","rideau","rieur","rigide","rigoler","rincer","riposter","risible","risque","rituel","rival","rivière","rocheux","romance","rompre","ronce","rondin","roseau","rosier","rotatif","rotor","rotule","rouge","rouille","rouleau","routine","royaume","ruban","rubis","ruche","ruelle","rugueux","ruiner","ruisseau","ruser","rustique","rythme","sabler","saboter","sabre","sacoche","safari","sagesse","saisir","salade","salive","salon","saluer","samedi","sanction","sanglier","sarcasme","sardine","saturer","saugrenu","saumon","sauter","sauvage","savant","savonner","scalpel","scandale","scélérat","scénario","sceptre","schéma","science","scinder","score","scrutin","sculpter","séance","sécable","sécher","secouer","sécréter","sédatif","séduire","seigneur","séjour","sélectif","semaine","sembler","semence","séminal","sénateur","sensible","sentence","séparer","séquence","serein","sergent","sérieux","serrure","sérum","service","sésame","sévir","sevrage","sextuple","sidéral","siècle","siéger","siffler","sigle","signal","silence","silicium","simple","sincère","sinistre","siphon","sirop","sismique","situer","skier","social","socle","sodium","soigneux","soldat","soleil","solitude","soluble","sombre","sommeil","somnoler","sonde","songeur","sonnette","sonore","sorcier","sortir","sosie","sottise","soucieux","soudure","souffle","soulever","soupape","source","soutirer","souvenir","spacieux","spatial","spécial","sphère","spiral","stable","station","sternum","stimulus","stipuler","strict","studieux","stupeur","styliste","sublime","substrat","subtil","subvenir","succès","sucre","suffixe","suggérer","suiveur","sulfate","superbe","supplier","surface","suricate","surmener","surprise","sursaut","survie","suspect","syllabe","symbole","symétrie","synapse","syntaxe","système","tabac","tablier","tactile","tailler","talent","talisman","talonner","tambour","tamiser","tangible","tapis","taquiner","tarder","tarif","tartine","tasse","tatami","tatouage","taupe","taureau","taxer","témoin","temporel","tenaille","tendre","teneur","tenir","tension","terminer","terne","terrible","tétine","texte","thème","théorie","thérapie","thorax","tibia","tiède","timide","tirelire","tiroir","tissu","titane","titre","tituber","toboggan","tolérant","tomate","tonique","tonneau","toponyme","torche","tordre","tornade","torpille","torrent","torse","tortue","totem","toucher","tournage","tousser","toxine","traction","trafic","tragique","trahir","train","trancher","travail","trèfle","tremper","trésor","treuil","triage","tribunal","tricoter","trilogie","triomphe","tripler","triturer","trivial","trombone","tronc","tropical","troupeau","tuile","tulipe","tumulte","tunnel","turbine","tuteur","tutoyer","tuyau","tympan","typhon","typique","tyran","ubuesque","ultime","ultrason","unanime","unifier","union","unique","unitaire","univers","uranium","urbain","urticant","usage","usine","usuel","usure","utile","utopie","vacarme","vaccin","vagabond","vague","vaillant","vaincre","vaisseau","valable","valise","vallon","valve","vampire","vanille","vapeur","varier","vaseux","vassal","vaste","vecteur","vedette","végétal","véhicule","veinard","véloce","vendredi","vénérer","venger","venimeux","ventouse","verdure","vérin","vernir","verrou","verser","vertu","veston","vétéran","vétuste","vexant","vexer","viaduc","viande","victoire","vidange","vidéo","vignette","vigueur","vilain","village","vinaigre","violon","vipère","virement","virtuose","virus","visage","viseur","vision","visqueux","visuel","vital","vitesse","viticole","vitrine","vivace","vivipare","vocation","voguer","voile","voisin","voiture","volaille","volcan","voltiger","volume","vorace","vortex","voter","vouloir","voyage","voyelle","wagon","xénon","yacht","zèbre","zénith","zeste","zoologie"]; +t.exports=n},{}],95:[function(e,t,r){t.exports={CHINESE:e("./chinese"),ENGLISH:e("./english"),FRENCH:e("./french"),JAPANESE:e("./japanese"),SPANISH:e("./spanish")}},{"./chinese":92,"./english":93,"./french":94,"./japanese":96,"./spanish":97}],96:[function(e,t,r){"use strict";var n=["あいこくしん","あいさつ","あいだ","あおぞら","あかちゃん","あきる","あけがた","あける","あこがれる","あさい","あさひ","あしあと","あじわう","あずかる","あずき","あそぶ","あたえる","あたためる","あたりまえ","あたる","あつい","あつかう","あっしゅく","あつまり","あつめる","あてな","あてはまる","あひる","あぶら","あぶる","あふれる","あまい","あまど","あまやかす","あまり","あみもの","あめりか","あやまる","あゆむ","あらいぐま","あらし","あらすじ","あらためる","あらゆる","あらわす","ありがとう","あわせる","あわてる","あんい","あんがい","あんこ","あんぜん","あんてい","あんない","あんまり","いいだす","いおん","いがい","いがく","いきおい","いきなり","いきもの","いきる","いくじ","いくぶん","いけばな","いけん","いこう","いこく","いこつ","いさましい","いさん","いしき","いじゅう","いじょう","いじわる","いずみ","いずれ","いせい","いせえび","いせかい","いせき","いぜん","いそうろう","いそがしい","いだい","いだく","いたずら","いたみ","いたりあ","いちおう","いちじ","いちど","いちば","いちぶ","いちりゅう","いつか","いっしゅん","いっせい","いっそう","いったん","いっち","いってい","いっぽう","いてざ","いてん","いどう","いとこ","いない","いなか","いねむり","いのち","いのる","いはつ","いばる","いはん","いびき","いひん","いふく","いへん","いほう","いみん","いもうと","いもたれ","いもり","いやがる","いやす","いよかん","いよく","いらい","いらすと","いりぐち","いりょう","いれい","いれもの","いれる","いろえんぴつ","いわい","いわう","いわかん","いわば","いわゆる","いんげんまめ","いんさつ","いんしょう","いんよう","うえき","うえる","うおざ","うがい","うかぶ","うかべる","うきわ","うくらいな","うくれれ","うけたまわる","うけつけ","うけとる","うけもつ","うける","うごかす","うごく","うこん","うさぎ","うしなう","うしろがみ","うすい","うすぎ","うすぐらい","うすめる","うせつ","うちあわせ","うちがわ","うちき","うちゅう","うっかり","うつくしい","うったえる","うつる","うどん","うなぎ","うなじ","うなずく","うなる","うねる","うのう","うぶげ","うぶごえ","うまれる","うめる","うもう","うやまう","うよく","うらがえす","うらぐち","うらない","うりあげ","うりきれ","うるさい","うれしい","うれゆき","うれる","うろこ","うわき","うわさ","うんこう","うんちん","うんてん","うんどう","えいえん","えいが","えいきょう","えいご","えいせい","えいぶん","えいよう","えいわ","えおり","えがお","えがく","えきたい","えくせる","えしゃく","えすて","えつらん","えのぐ","えほうまき","えほん","えまき","えもじ","えもの","えらい","えらぶ","えりあ","えんえん","えんかい","えんぎ","えんげき","えんしゅう","えんぜつ","えんそく","えんちょう","えんとつ","おいかける","おいこす","おいしい","おいつく","おうえん","おうさま","おうじ","おうせつ","おうたい","おうふく","おうべい","おうよう","おえる","おおい","おおう","おおどおり","おおや","おおよそ","おかえり","おかず","おがむ","おかわり","おぎなう","おきる","おくさま","おくじょう","おくりがな","おくる","おくれる","おこす","おこなう","おこる","おさえる","おさない","おさめる","おしいれ","おしえる","おじぎ","おじさん","おしゃれ","おそらく","おそわる","おたがい","おたく","おだやか","おちつく","おっと","おつり","おでかけ","おとしもの","おとなしい","おどり","おどろかす","おばさん","おまいり","おめでとう","おもいで","おもう","おもたい","おもちゃ","おやつ","おやゆび","およぼす","おらんだ","おろす","おんがく","おんけい","おんしゃ","おんせん","おんだん","おんちゅう","おんどけい","かあつ","かいが","がいき","がいけん","がいこう","かいさつ","かいしゃ","かいすいよく","かいぜん","かいぞうど","かいつう","かいてん","かいとう","かいふく","がいへき","かいほう","かいよう","がいらい","かいわ","かえる","かおり","かかえる","かがく","かがし","かがみ","かくご","かくとく","かざる","がぞう","かたい","かたち","がちょう","がっきゅう","がっこう","がっさん","がっしょう","かなざわし","かのう","がはく","かぶか","かほう","かほご","かまう","かまぼこ","かめれおん","かゆい","かようび","からい","かるい","かろう","かわく","かわら","がんか","かんけい","かんこう","かんしゃ","かんそう","かんたん","かんち","がんばる","きあい","きあつ","きいろ","ぎいん","きうい","きうん","きえる","きおう","きおく","きおち","きおん","きかい","きかく","きかんしゃ","ききて","きくばり","きくらげ","きけんせい","きこう","きこえる","きこく","きさい","きさく","きさま","きさらぎ","ぎじかがく","ぎしき","ぎじたいけん","ぎじにってい","ぎじゅつしゃ","きすう","きせい","きせき","きせつ","きそう","きぞく","きぞん","きたえる","きちょう","きつえん","ぎっちり","きつつき","きつね","きてい","きどう","きどく","きない","きなが","きなこ","きぬごし","きねん","きのう","きのした","きはく","きびしい","きひん","きふく","きぶん","きぼう","きほん","きまる","きみつ","きむずかしい","きめる","きもだめし","きもち","きもの","きゃく","きやく","ぎゅうにく","きよう","きょうりゅう","きらい","きらく","きりん","きれい","きれつ","きろく","ぎろん","きわめる","ぎんいろ","きんかくじ","きんじょ","きんようび","ぐあい","くいず","くうかん","くうき","くうぐん","くうこう","ぐうせい","くうそう","ぐうたら","くうふく","くうぼ","くかん","くきょう","くげん","ぐこう","くさい","くさき","くさばな","くさる","くしゃみ","くしょう","くすのき","くすりゆび","くせげ","くせん","ぐたいてき","くださる","くたびれる","くちこみ","くちさき","くつした","ぐっすり","くつろぐ","くとうてん","くどく","くなん","くねくね","くのう","くふう","くみあわせ","くみたてる","くめる","くやくしょ","くらす","くらべる","くるま","くれる","くろう","くわしい","ぐんかん","ぐんしょく","ぐんたい","ぐんて","けあな","けいかく","けいけん","けいこ","けいさつ","げいじゅつ","けいたい","げいのうじん","けいれき","けいろ","けおとす","けおりもの","げきか","げきげん","げきだん","げきちん","げきとつ","げきは","げきやく","げこう","げこくじょう","げざい","けさき","げざん","けしき","けしごむ","けしょう","げすと","けたば","けちゃっぷ","けちらす","けつあつ","けつい","けつえき","けっこん","けつじょ","けっせき","けってい","けつまつ","げつようび","げつれい","けつろん","げどく","けとばす","けとる","けなげ","けなす","けなみ","けぬき","げねつ","けねん","けはい","げひん","けぶかい","げぼく","けまり","けみかる","けむし","けむり","けもの","けらい","けろけろ","けわしい","けんい","けんえつ","けんお","けんか","げんき","けんげん","けんこう","けんさく","けんしゅう","けんすう","げんそう","けんちく","けんてい","けんとう","けんない","けんにん","げんぶつ","けんま","けんみん","けんめい","けんらん","けんり","こあくま","こいぬ","こいびと","ごうい","こうえん","こうおん","こうかん","ごうきゅう","ごうけい","こうこう","こうさい","こうじ","こうすい","ごうせい","こうそく","こうたい","こうちゃ","こうつう","こうてい","こうどう","こうない","こうはい","ごうほう","ごうまん","こうもく","こうりつ","こえる","こおり","ごかい","ごがつ","ごかん","こくご","こくさい","こくとう","こくない","こくはく","こぐま","こけい","こける","ここのか","こころ","こさめ","こしつ","こすう","こせい","こせき","こぜん","こそだて","こたい","こたえる","こたつ","こちょう","こっか","こつこつ","こつばん","こつぶ","こてい","こてん","ことがら","ことし","ことば","ことり","こなごな","こねこね","このまま","このみ","このよ","ごはん","こひつじ","こふう","こふん","こぼれる","ごまあぶら","こまかい","ごますり","こまつな","こまる","こむぎこ","こもじ","こもち","こもの","こもん","こやく","こやま","こゆう","こゆび","こよい","こよう","こりる","これくしょん","ころっけ","こわもて","こわれる","こんいん","こんかい","こんき","こんしゅう","こんすい","こんだて","こんとん","こんなん","こんびに","こんぽん","こんまけ","こんや","こんれい","こんわく","ざいえき","さいかい","さいきん","ざいげん","ざいこ","さいしょ","さいせい","ざいたく","ざいちゅう","さいてき","ざいりょう","さうな","さかいし","さがす","さかな","さかみち","さがる","さぎょう","さくし","さくひん","さくら","さこく","さこつ","さずかる","ざせき","さたん","さつえい","ざつおん","ざっか","ざつがく","さっきょく","ざっし","さつじん","ざっそう","さつたば","さつまいも","さてい","さといも","さとう","さとおや","さとし","さとる","さのう","さばく","さびしい","さべつ","さほう","さほど","さます","さみしい","さみだれ","さむけ","さめる","さやえんどう","さゆう","さよう","さよく","さらだ","ざるそば","さわやか","さわる","さんいん","さんか","さんきゃく","さんこう","さんさい","ざんしょ","さんすう","さんせい","さんそ","さんち","さんま","さんみ","さんらん","しあい","しあげ","しあさって","しあわせ","しいく","しいん","しうち","しえい","しおけ","しかい","しかく","じかん","しごと","しすう","じだい","したうけ","したぎ","したて","したみ","しちょう","しちりん","しっかり","しつじ","しつもん","してい","してき","してつ","じてん","じどう","しなぎれ","しなもの","しなん","しねま","しねん","しのぐ","しのぶ","しはい","しばかり","しはつ","しはらい","しはん","しひょう","しふく","じぶん","しへい","しほう","しほん","しまう","しまる","しみん","しむける","じむしょ","しめい","しめる","しもん","しゃいん","しゃうん","しゃおん","じゃがいも","しやくしょ","しゃくほう","しゃけん","しゃこ","しゃざい","しゃしん","しゃせん","しゃそう","しゃたい","しゃちょう","しゃっきん","じゃま","しゃりん","しゃれい","じゆう","じゅうしょ","しゅくはく","じゅしん","しゅっせき","しゅみ","しゅらば","じゅんばん","しょうかい","しょくたく","しょっけん","しょどう","しょもつ","しらせる","しらべる","しんか","しんこう","じんじゃ","しんせいじ","しんちく","しんりん","すあげ","すあし","すあな","ずあん","すいえい","すいか","すいとう","ずいぶん","すいようび","すうがく","すうじつ","すうせん","すおどり","すきま","すくう","すくない","すける","すごい","すこし","ずさん","すずしい","すすむ","すすめる","すっかり","ずっしり","ずっと","すてき","すてる","すねる","すのこ","すはだ","すばらしい","ずひょう","ずぶぬれ","すぶり","すふれ","すべて","すべる","ずほう","すぼん","すまい","すめし","すもう","すやき","すらすら","するめ","すれちがう","すろっと","すわる","すんぜん","すんぽう","せあぶら","せいかつ","せいげん","せいじ","せいよう","せおう","せかいかん","せきにん","せきむ","せきゆ","せきらんうん","せけん","せこう","せすじ","せたい","せたけ","せっかく","せっきゃく","ぜっく","せっけん","せっこつ","せっさたくま","せつぞく","せつだん","せつでん","せっぱん","せつび","せつぶん","せつめい","せつりつ","せなか","せのび","せはば","せびろ","せぼね","せまい","せまる","せめる","せもたれ","せりふ","ぜんあく","せんい","せんえい","せんか","せんきょ","せんく","せんげん","ぜんご","せんさい","せんしゅ","せんすい","せんせい","せんぞ","せんたく","せんちょう","せんてい","せんとう","せんぬき","せんねん","せんぱい","ぜんぶ","ぜんぽう","せんむ","せんめんじょ","せんもん","せんやく","せんゆう","せんよう","ぜんら","ぜんりゃく","せんれい","せんろ","そあく","そいとげる","そいね","そうがんきょう","そうき","そうご","そうしん","そうだん","そうなん","そうび","そうめん","そうり","そえもの","そえん","そがい","そげき","そこう","そこそこ","そざい","そしな","そせい","そせん","そそぐ","そだてる","そつう","そつえん","そっかん","そつぎょう","そっけつ","そっこう","そっせん","そっと","そとがわ","そとづら","そなえる","そなた","そふぼ","そぼく","そぼろ","そまつ","そまる","そむく","そむりえ","そめる","そもそも","そよかぜ","そらまめ","そろう","そんかい","そんけい","そんざい","そんしつ","そんぞく","そんちょう","ぞんび","ぞんぶん","そんみん","たあい","たいいん","たいうん","たいえき","たいおう","だいがく","たいき","たいぐう","たいけん","たいこ","たいざい","だいじょうぶ","だいすき","たいせつ","たいそう","だいたい","たいちょう","たいてい","だいどころ","たいない","たいねつ","たいのう","たいはん","だいひょう","たいふう","たいへん","たいほ","たいまつばな","たいみんぐ","たいむ","たいめん","たいやき","たいよう","たいら","たいりょく","たいる","たいわん","たうえ","たえる","たおす","たおる","たおれる","たかい","たかね","たきび","たくさん","たこく","たこやき","たさい","たしざん","だじゃれ","たすける","たずさわる","たそがれ","たたかう","たたく","ただしい","たたみ","たちばな","だっかい","だっきゃく","だっこ","だっしゅつ","だったい","たてる","たとえる","たなばた","たにん","たぬき","たのしみ","たはつ","たぶん","たべる","たぼう","たまご","たまる","だむる","ためいき","ためす","ためる","たもつ","たやすい","たよる","たらす","たりきほんがん","たりょう","たりる","たると","たれる","たれんと","たろっと","たわむれる","だんあつ","たんい","たんおん","たんか","たんき","たんけん","たんご","たんさん","たんじょうび","だんせい","たんそく","たんたい","だんち","たんてい","たんとう","だんな","たんにん","だんねつ","たんのう","たんぴん","だんぼう","たんまつ","たんめい","だんれつ","だんろ","だんわ","ちあい","ちあん","ちいき","ちいさい","ちえん","ちかい","ちから","ちきゅう","ちきん","ちけいず","ちけん","ちこく","ちさい","ちしき","ちしりょう","ちせい","ちそう","ちたい","ちたん","ちちおや","ちつじょ","ちてき","ちてん","ちぬき","ちぬり","ちのう","ちひょう","ちへいせん","ちほう","ちまた","ちみつ","ちみどろ","ちめいど","ちゃんこなべ","ちゅうい","ちゆりょく","ちょうし","ちょさくけん","ちらし","ちらみ","ちりがみ","ちりょう","ちるど","ちわわ","ちんたい","ちんもく","ついか","ついたち","つうか","つうじょう","つうはん","つうわ","つかう","つかれる","つくね","つくる","つけね","つける","つごう","つたえる","つづく","つつじ","つつむ","つとめる","つながる","つなみ","つねづね","つのる","つぶす","つまらない","つまる","つみき","つめたい","つもり","つもる","つよい","つるぼ","つるみく","つわもの","つわり","てあし","てあて","てあみ","ていおん","ていか","ていき","ていけい","ていこく","ていさつ","ていし","ていせい","ていたい","ていど","ていねい","ていひょう","ていへん","ていぼう","てうち","ておくれ","てきとう","てくび","でこぼこ","てさぎょう","てさげ","てすり","てそう","てちがい","てちょう","てつがく","てつづき","でっぱ","てつぼう","てつや","でぬかえ","てぬき","てぬぐい","てのひら","てはい","てぶくろ","てふだ","てほどき","てほん","てまえ","てまきずし","てみじか","てみやげ","てらす","てれび","てわけ","てわたし","でんあつ","てんいん","てんかい","てんき","てんぐ","てんけん","てんごく","てんさい","てんし","てんすう","でんち","てんてき","てんとう","てんない","てんぷら","てんぼうだい","てんめつ","てんらんかい","でんりょく","でんわ","どあい","といれ","どうかん","とうきゅう","どうぐ","とうし","とうむぎ","とおい","とおか","とおく","とおす","とおる","とかい","とかす","ときおり","ときどき","とくい","とくしゅう","とくてん","とくに","とくべつ","とけい","とける","とこや","とさか","としょかん","とそう","とたん","とちゅう","とっきゅう","とっくん","とつぜん","とつにゅう","とどける","ととのえる","とない","となえる","となり","とのさま","とばす","どぶがわ","とほう","とまる","とめる","ともだち","ともる","どようび","とらえる","とんかつ","どんぶり","ないかく","ないこう","ないしょ","ないす","ないせん","ないそう","なおす","ながい","なくす","なげる","なこうど","なさけ","なたでここ","なっとう","なつやすみ","ななおし","なにごと","なにもの","なにわ","なのか","なふだ","なまいき","なまえ","なまみ","なみだ","なめらか","なめる","なやむ","ならう","ならび","ならぶ","なれる","なわとび","なわばり","にあう","にいがた","にうけ","におい","にかい","にがて","にきび","にくしみ","にくまん","にげる","にさんかたんそ","にしき","にせもの","にちじょう","にちようび","にっか","にっき","にっけい","にっこう","にっさん","にっしょく","にっすう","にっせき","にってい","になう","にほん","にまめ","にもつ","にやり","にゅういん","にりんしゃ","にわとり","にんい","にんか","にんき","にんげん","にんしき","にんずう","にんそう","にんたい","にんち","にんてい","にんにく","にんぷ","にんまり","にんむ","にんめい","にんよう","ぬいくぎ","ぬかす","ぬぐいとる","ぬぐう","ぬくもり","ぬすむ","ぬまえび","ぬめり","ぬらす","ぬんちゃく","ねあげ","ねいき","ねいる","ねいろ","ねぐせ","ねくたい","ねくら","ねこぜ","ねこむ","ねさげ","ねすごす","ねそべる","ねだん","ねつい","ねっしん","ねつぞう","ねったいぎょ","ねぶそく","ねふだ","ねぼう","ねほりはほり","ねまき","ねまわし","ねみみ","ねむい","ねむたい","ねもと","ねらう","ねわざ","ねんいり","ねんおし","ねんかん","ねんきん","ねんぐ","ねんざ","ねんし","ねんちゃく","ねんど","ねんぴ","ねんぶつ","ねんまつ","ねんりょう","ねんれい","のいず","のおづま","のがす","のきなみ","のこぎり","のこす","のこる","のせる","のぞく","のぞむ","のたまう","のちほど","のっく","のばす","のはら","のべる","のぼる","のみもの","のやま","のらいぬ","のらねこ","のりもの","のりゆき","のれん","のんき","ばあい","はあく","ばあさん","ばいか","ばいく","はいけん","はいご","はいしん","はいすい","はいせん","はいそう","はいち","ばいばい","はいれつ","はえる","はおる","はかい","ばかり","はかる","はくしゅ","はけん","はこぶ","はさみ","はさん","はしご","ばしょ","はしる","はせる","ぱそこん","はそん","はたん","はちみつ","はつおん","はっかく","はづき","はっきり","はっくつ","はっけん","はっこう","はっさん","はっしん","はったつ","はっちゅう","はってん","はっぴょう","はっぽう","はなす","はなび","はにかむ","はぶらし","はみがき","はむかう","はめつ","はやい","はやし","はらう","はろうぃん","はわい","はんい","はんえい","はんおん","はんかく","はんきょう","ばんぐみ","はんこ","はんしゃ","はんすう","はんだん","ぱんち","ぱんつ","はんてい","はんとし","はんのう","はんぱ","はんぶん","はんぺん","はんぼうき","はんめい","はんらん","はんろん","ひいき","ひうん","ひえる","ひかく","ひかり","ひかる","ひかん","ひくい","ひけつ","ひこうき","ひこく","ひさい","ひさしぶり","ひさん","びじゅつかん","ひしょ","ひそか","ひそむ","ひたむき","ひだり","ひたる","ひつぎ","ひっこし","ひっし","ひつじゅひん","ひっす","ひつぜん","ぴったり","ぴっちり","ひつよう","ひてい","ひとごみ","ひなまつり","ひなん","ひねる","ひはん","ひびく","ひひょう","ひほう","ひまわり","ひまん","ひみつ","ひめい","ひめじし","ひやけ","ひやす","ひよう","びょうき","ひらがな","ひらく","ひりつ","ひりょう","ひるま","ひるやすみ","ひれい","ひろい","ひろう","ひろき","ひろゆき","ひんかく","ひんけつ","ひんこん","ひんしゅ","ひんそう","ぴんち","ひんぱん","びんぼう","ふあん","ふいうち","ふうけい","ふうせん","ぷうたろう","ふうとう","ふうふ","ふえる","ふおん","ふかい","ふきん","ふくざつ","ふくぶくろ","ふこう","ふさい","ふしぎ","ふじみ","ふすま","ふせい","ふせぐ","ふそく","ぶたにく","ふたん","ふちょう","ふつう","ふつか","ふっかつ","ふっき","ふっこく","ぶどう","ふとる","ふとん","ふのう","ふはい","ふひょう","ふへん","ふまん","ふみん","ふめつ","ふめん","ふよう","ふりこ","ふりる","ふるい","ふんいき","ぶんがく","ぶんぐ","ふんしつ","ぶんせき","ふんそう","ぶんぽう","へいあん","へいおん","へいがい","へいき","へいげん","へいこう","へいさ","へいしゃ","へいせつ","へいそ","へいたく","へいてん","へいねつ","へいわ","へきが","へこむ","べにいろ","べにしょうが","へらす","へんかん","べんきょう","べんごし","へんさい","へんたい","べんり","ほあん","ほいく","ぼうぎょ","ほうこく","ほうそう","ほうほう","ほうもん","ほうりつ","ほえる","ほおん","ほかん","ほきょう","ぼきん","ほくろ","ほけつ","ほけん","ほこう","ほこる","ほしい","ほしつ","ほしゅ","ほしょう","ほせい","ほそい","ほそく","ほたて","ほたる","ぽちぶくろ","ほっきょく","ほっさ","ほったん","ほとんど","ほめる","ほんい","ほんき","ほんけ","ほんしつ","ほんやく","まいにち","まかい","まかせる","まがる","まける","まこと","まさつ","まじめ","ますく","まぜる","まつり","まとめ","まなぶ","まぬけ","まねく","まほう","まもる","まゆげ","まよう","まろやか","まわす","まわり","まわる","まんが","まんきつ","まんぞく","まんなか","みいら","みうち","みえる","みがく","みかた","みかん","みけん","みこん","みじかい","みすい","みすえる","みせる","みっか","みつかる","みつける","みてい","みとめる","みなと","みなみかさい","みねらる","みのう","みのがす","みほん","みもと","みやげ","みらい","みりょく","みわく","みんか","みんぞく","むいか","むえき","むえん","むかい","むかう","むかえ","むかし","むぎちゃ","むける","むげん","むさぼる","むしあつい","むしば","むじゅん","むしろ","むすう","むすこ","むすぶ","むすめ","むせる","むせん","むちゅう","むなしい","むのう","むやみ","むよう","むらさき","むりょう","むろん","めいあん","めいうん","めいえん","めいかく","めいきょく","めいさい","めいし","めいそう","めいぶつ","めいれい","めいわく","めぐまれる","めざす","めした","めずらしい","めだつ","めまい","めやす","めんきょ","めんせき","めんどう","もうしあげる","もうどうけん","もえる","もくし","もくてき","もくようび","もちろん","もどる","もらう","もんく","もんだい","やおや","やける","やさい","やさしい","やすい","やすたろう","やすみ","やせる","やそう","やたい","やちん","やっと","やっぱり","やぶる","やめる","ややこしい","やよい","やわらかい","ゆうき","ゆうびんきょく","ゆうべ","ゆうめい","ゆけつ","ゆしゅつ","ゆせん","ゆそう","ゆたか","ゆちゃく","ゆでる","ゆにゅう","ゆびわ","ゆらい","ゆれる","ようい","ようか","ようきゅう","ようじ","ようす","ようちえん","よかぜ","よかん","よきん","よくせい","よくぼう","よけい","よごれる","よさん","よしゅう","よそう","よそく","よっか","よてい","よどがわく","よねつ","よやく","よゆう","よろこぶ","よろしい","らいう","らくがき","らくご","らくさつ","らくだ","らしんばん","らせん","らぞく","らたい","らっか","られつ","りえき","りかい","りきさく","りきせつ","りくぐん","りくつ","りけん","りこう","りせい","りそう","りそく","りてん","りねん","りゆう","りゅうがく","りよう","りょうり","りょかん","りょくちゃ","りょこう","りりく","りれき","りろん","りんご","るいけい","るいさい","るいじ","るいせき","るすばん","るりがわら","れいかん","れいぎ","れいせい","れいぞうこ","れいとう","れいぼう","れきし","れきだい","れんあい","れんけい","れんこん","れんさい","れんしゅう","れんぞく","れんらく","ろうか","ろうご","ろうじん","ろうそく","ろくが","ろこつ","ろじうら","ろしゅつ","ろせん","ろてん","ろめん","ろれつ","ろんぎ","ろんぱ","ろんぶん","ろんり","わかす","わかめ","わかやま","わかれる","わしつ","わじまし","わすれもの","わらう","われる"];t.exports=n},{}],97:[function(e,t,r){"use strict";var n=["ábaco","abdomen","abeja","abierto","abogado","abono","aborto","abrazo","abrir","abuelo","abuso","acabar","academia","acceso","acción","aceite","acelga","acento","aceptar","ácido","aclarar","acné","acoger","acoso","activo","acto","actriz","actuar","acudir","acuerdo","acusar","adicto","admitir","adoptar","adorno","aduana","adulto","aéreo","afectar","afición","afinar","afirmar","ágil","agitar","agonía","agosto","agotar","agregar","agrio","agua","agudo","águila","aguja","ahogo","ahorro","aire","aislar","ajedrez","ajeno","ajuste","alacrán","alambre","alarma","alba","álbum","alcalde","aldea","alegre","alejar","alerta","aleta","alfiler","alga","algodón","aliado","aliento","alivio","alma","almeja","almíbar","altar","alteza","altivo","alto","altura","alumno","alzar","amable","amante","amapola","amargo","amasar","ámbar","ámbito","ameno","amigo","amistad","amor","amparo","amplio","ancho","anciano","ancla","andar","andén","anemia","ángulo","anillo","ánimo","anís","anotar","antena","antiguo","antojo","anual","anular","anuncio","añadir","añejo","año","apagar","aparato","apetito","apio","aplicar","apodo","aporte","apoyo","aprender","aprobar","apuesta","apuro","arado","araña","arar","árbitro","árbol","arbusto","archivo","arco","arder","ardilla","arduo","área","árido","aries","armonía","arnés","aroma","arpa","arpón","arreglo","arroz","arruga","arte","artista","asa","asado","asalto","ascenso","asegurar","aseo","asesor","asiento","asilo","asistir","asno","asombro","áspero","astilla","astro","astuto","asumir","asunto","atajo","ataque","atar","atento","ateo","ático","atleta","átomo","atraer","atroz","atún","audaz","audio","auge","aula","aumento","ausente","autor","aval","avance","avaro","ave","avellana","avena","avestruz","avión","aviso","ayer","ayuda","ayuno","azafrán","azar","azote","azúcar","azufre","azul","baba","babor","bache","bahía","baile","bajar","balanza","balcón","balde","bambú","banco","banda","baño","barba","barco","barniz","barro","báscula","bastón","basura","batalla","batería","batir","batuta","baúl","bazar","bebé","bebida","bello","besar","beso","bestia","bicho","bien","bingo","blanco","bloque","blusa","boa","bobina","bobo","boca","bocina","boda","bodega","boina","bola","bolero","bolsa","bomba","bondad","bonito","bono","bonsái","borde","borrar","bosque","bote","botín","bóveda","bozal","bravo","brazo","brecha","breve","brillo","brinco","brisa","broca","broma","bronce","brote","bruja","brusco","bruto","buceo","bucle","bueno","buey","bufanda","bufón","búho","buitre","bulto","burbuja","burla","burro","buscar","butaca","buzón","caballo","cabeza","cabina","cabra","cacao","cadáver","cadena","caer","café","caída","caimán","caja","cajón","cal","calamar","calcio","caldo","calidad","calle","calma","calor","calvo","cama","cambio","camello","camino","campo","cáncer","candil","canela","canguro","canica","canto","caña","cañón","caoba","caos","capaz","capitán","capote","captar","capucha","cara","carbón","cárcel","careta","carga","cariño","carne","carpeta","carro","carta","casa","casco","casero","caspa","castor","catorce","catre","caudal","causa","cazo","cebolla","ceder","cedro","celda","célebre","celoso","célula","cemento","ceniza","centro","cerca","cerdo","cereza","cero","cerrar","certeza","césped","cetro","chacal","chaleco","champú","chancla","chapa","charla","chico","chiste","chivo","choque","choza","chuleta","chupar","ciclón","ciego","cielo","cien","cierto","cifra","cigarro","cima","cinco","cine","cinta","ciprés","circo","ciruela","cisne","cita","ciudad","clamor","clan","claro","clase","clave","cliente","clima","clínica","cobre","cocción","cochino","cocina","coco","código","codo","cofre","coger","cohete","cojín","cojo","cola","colcha","colegio","colgar","colina","collar","colmo","columna","combate","comer","comida","cómodo","compra","conde","conejo","conga","conocer","consejo","contar","copa","copia","corazón","corbata","corcho","cordón","corona","correr","coser","cosmos","costa","cráneo","cráter","crear","crecer","creído","crema","cría","crimen","cripta","crisis","cromo","crónica","croqueta","crudo","cruz","cuadro","cuarto","cuatro","cubo","cubrir","cuchara","cuello","cuento","cuerda","cuesta","cueva","cuidar","culebra","culpa","culto","cumbre","cumplir","cuna","cuneta","cuota","cupón","cúpula","curar","curioso","curso","curva","cutis","dama","danza","dar","dardo","dátil","deber","débil","década","decir","dedo","defensa","definir","dejar","delfín","delgado","delito","demora","denso","dental","deporte","derecho","derrota","desayuno","deseo","desfile","desnudo","destino","desvío","detalle","detener","deuda","día","diablo","diadema","diamante","diana","diario","dibujo","dictar","diente","dieta","diez","difícil","digno","dilema","diluir","dinero","directo","dirigir","disco","diseño","disfraz","diva","divino","doble","doce","dolor","domingo","don","donar","dorado","dormir","dorso","dos","dosis","dragón","droga","ducha","duda","duelo","dueño","dulce","dúo","duque","durar","dureza","duro","ébano","ebrio","echar","eco","ecuador","edad","edición","edificio","editor","educar","efecto","eficaz","eje","ejemplo","elefante","elegir","elemento","elevar","elipse","élite","elixir","elogio","eludir","embudo","emitir","emoción","empate","empeño","empleo","empresa","enano","encargo","enchufe","encía","enemigo","enero","enfado","enfermo","engaño","enigma","enlace","enorme","enredo","ensayo","enseñar","entero","entrar","envase","envío","época","equipo","erizo","escala","escena","escolar","escribir","escudo","esencia","esfera","esfuerzo","espada","espejo","espía","esposa","espuma","esquí","estar","este","estilo","estufa","etapa","eterno","ética","etnia","evadir","evaluar","evento","evitar","exacto","examen","exceso","excusa","exento","exigir","exilio","existir","éxito","experto","explicar","exponer","extremo","fábrica","fábula","fachada","fácil","factor","faena","faja","falda","fallo","falso","faltar","fama","familia","famoso","faraón","farmacia","farol","farsa","fase","fatiga","fauna","favor","fax","febrero","fecha","feliz","feo","feria","feroz","fértil","fervor","festín","fiable","fianza","fiar","fibra","ficción","ficha","fideo","fiebre","fiel","fiera","fiesta","figura","fijar","fijo","fila","filete","filial","filtro","fin","finca","fingir","finito","firma","flaco","flauta","flecha","flor","flota","fluir","flujo","flúor","fobia","foca","fogata","fogón","folio","folleto","fondo","forma","forro","fortuna","forzar","fosa","foto","fracaso","frágil","franja","frase","fraude","freír","freno","fresa","frío","frito","fruta","fuego","fuente","fuerza","fuga","fumar","función","funda","furgón","furia","fusil","fútbol","futuro","gacela","gafas","gaita","gajo","gala","galería","gallo","gamba","ganar","gancho","ganga","ganso","garaje","garza","gasolina","gastar","gato","gavilán","gemelo","gemir","gen","género","genio","gente","geranio","gerente","germen","gesto","gigante","gimnasio","girar","giro","glaciar","globo","gloria","gol","golfo","goloso","golpe","goma","gordo","gorila","gorra","gota","goteo","gozar","grada","gráfico","grano","grasa","gratis","grave","grieta","grillo","gripe","gris","grito","grosor","grúa","grueso","grumo","grupo","guante","guapo","guardia","guerra","guía","guiño","guion","guiso","guitarra","gusano","gustar","haber","hábil","hablar","hacer","hacha","hada","hallar","hamaca","harina","haz","hazaña","hebilla","hebra","hecho","helado","helio","hembra","herir","hermano","héroe","hervir","hielo","hierro","hígado","higiene","hijo","himno","historia","hocico","hogar","hoguera","hoja","hombre","hongo","honor","honra","hora","hormiga","horno","hostil","hoyo","hueco","huelga","huerta","hueso","huevo","huida","huir","humano","húmedo","humilde","humo","hundir","huracán","hurto","icono","ideal","idioma","ídolo","iglesia","iglú","igual","ilegal","ilusión","imagen","imán","imitar","impar","imperio","imponer","impulso","incapaz","índice","inerte","infiel","informe","ingenio","inicio","inmenso","inmune","innato","insecto","instante","interés","íntimo","intuir","inútil","invierno","ira","iris","ironía","isla","islote","jabalí","jabón","jamón","jarabe","jardín","jarra","jaula","jazmín","jefe","jeringa","jinete","jornada","joroba","joven","joya","juerga","jueves","juez","jugador","jugo","juguete","juicio","junco","jungla","junio","juntar","júpiter","jurar","justo","juvenil","juzgar","kilo","koala","labio","lacio","lacra","lado","ladrón","lagarto","lágrima","laguna","laico","lamer","lámina","lámpara","lana","lancha","langosta","lanza","lápiz","largo","larva","lástima","lata","látex","latir","laurel","lavar","lazo","leal","lección","leche","lector","leer","legión","legumbre","lejano","lengua","lento","leña","león","leopardo","lesión","letal","letra","leve","leyenda","libertad","libro","licor","líder","lidiar","lienzo","liga","ligero","lima","límite","limón","limpio","lince","lindo","línea","lingote","lino","linterna","líquido","liso","lista","litera","litio","litro","llaga","llama","llanto","llave","llegar","llenar","llevar","llorar","llover","lluvia","lobo","loción","loco","locura","lógica","logro","lombriz","lomo","lonja","lote","lucha","lucir","lugar","lujo","luna","lunes","lupa","lustro","luto","luz","maceta","macho","madera","madre","maduro","maestro","mafia","magia","mago","maíz","maldad","maleta","malla","malo","mamá","mambo","mamut","manco","mando","manejar","manga","maniquí","manjar","mano","manso","manta","mañana","mapa","máquina","mar","marco","marea","marfil","margen","marido","mármol","marrón","martes","marzo","masa","máscara","masivo","matar","materia","matiz","matriz","máximo","mayor","mazorca","mecha","medalla","medio","médula","mejilla","mejor","melena","melón","memoria","menor","mensaje","mente","menú","mercado","merengue","mérito","mes","mesón","meta","meter","método","metro","mezcla","miedo","miel","miembro","miga","mil","milagro","militar","millón","mimo","mina","minero","mínimo","minuto","miope","mirar","misa","miseria","misil","mismo","mitad","mito","mochila","moción","moda","modelo","moho","mojar","molde","moler","molino","momento","momia","monarca","moneda","monja","monto","moño","morada","morder","moreno","morir","morro","morsa","mortal","mosca","mostrar","motivo","mover","móvil","mozo","mucho","mudar","mueble","muela","muerte","muestra","mugre","mujer","mula","muleta","multa","mundo","muñeca","mural","muro","músculo","museo","musgo","música","muslo","nácar","nación","nadar","naipe","naranja","nariz","narrar","nasal","natal","nativo","natural","náusea","naval","nave","navidad","necio","néctar","negar","negocio","negro","neón","nervio","neto","neutro","nevar","nevera","nicho","nido","niebla","nieto","niñez","niño","nítido","nivel","nobleza","noche","nómina","noria","norma","norte","nota","noticia","novato","novela","novio","nube","nuca","núcleo","nudillo","nudo","nuera","nueve","nuez","nulo","número","nutria","oasis","obeso","obispo","objeto","obra","obrero","observar","obtener","obvio","oca","ocaso","océano","ochenta","ocho","ocio","ocre","octavo","octubre","oculto","ocupar","ocurrir","odiar","odio","odisea","oeste","ofensa","oferta","oficio","ofrecer","ogro","oído","oír","ojo","ola","oleada","olfato","olivo","olla","olmo","olor","olvido","ombligo","onda","onza","opaco","opción","ópera","opinar","oponer","optar","óptica","opuesto","oración","orador","oral","órbita","orca","orden","oreja","órgano","orgía","orgullo","oriente","origen","orilla","oro","orquesta","oruga","osadía","oscuro","osezno","oso","ostra","otoño","otro","oveja","óvulo","óxido","oxígeno","oyente","ozono","pacto","padre","paella","página","pago","país","pájaro","palabra","palco","paleta","pálido","palma","paloma","palpar","pan","panal","pánico","pantera","pañuelo","papá","papel","papilla","paquete","parar","parcela","pared","parir","paro","párpado","parque","párrafo","parte","pasar","paseo","pasión","paso","pasta","pata","patio","patria","pausa","pauta","pavo","payaso","peatón","pecado","pecera","pecho","pedal","pedir","pegar","peine","pelar","peldaño","pelea","peligro","pellejo","pelo","peluca","pena","pensar","peñón","peón","peor","pepino","pequeño","pera","percha","perder","pereza","perfil","perico","perla","permiso","perro","persona","pesa","pesca","pésimo","pestaña","pétalo","petróleo","pez","pezuña","picar","pichón","pie","piedra","pierna","pieza","pijama","pilar","piloto","pimienta","pino","pintor","pinza","piña","piojo","pipa","pirata","pisar","piscina","piso","pista","pitón","pizca","placa","plan","plata","playa","plaza","pleito","pleno","plomo","pluma","plural","pobre","poco","poder","podio","poema","poesía","poeta","polen","policía","pollo","polvo","pomada","pomelo","pomo","pompa","poner","porción","portal","posada","poseer","posible","poste","potencia","potro","pozo","prado","precoz","pregunta","premio","prensa","preso","previo","primo","príncipe","prisión","privar","proa","probar","proceso","producto","proeza","profesor","programa","prole","promesa","pronto","propio","próximo","prueba","público","puchero","pudor","pueblo","puerta","puesto","pulga","pulir","pulmón","pulpo","pulso","puma","punto","puñal","puño","pupa","pupila","puré","quedar","queja","quemar","querer","queso","quieto","química","quince","quitar","rábano","rabia","rabo","ración","radical","raíz","rama","rampa","rancho","rango","rapaz","rápido","rapto","rasgo","raspa","rato","rayo","raza","razón","reacción","realidad","rebaño","rebote","recaer","receta","rechazo","recoger","recreo","recto","recurso","red","redondo","reducir","reflejo","reforma","refrán","refugio","regalo","regir","regla","regreso","rehén","reino","reír","reja","relato","relevo","relieve","relleno","reloj","remar","remedio","remo","rencor","rendir","renta","reparto","repetir","reposo","reptil","res","rescate","resina","respeto","resto","resumen","retiro","retorno","retrato","reunir","revés","revista","rey","rezar","rico","riego","rienda","riesgo","rifa","rígido","rigor","rincón","riñón","río","riqueza","risa","ritmo","rito","rizo","roble","roce","rociar","rodar","rodeo","rodilla","roer","rojizo","rojo","romero","romper","ron","ronco","ronda","ropa","ropero","rosa","rosca","rostro","rotar","rubí","rubor","rudo","rueda","rugir","ruido","ruina","ruleta","rulo","rumbo","rumor","ruptura","ruta","rutina","sábado","saber","sabio","sable","sacar","sagaz","sagrado","sala","saldo","salero","salir","salmón","salón","salsa","salto","salud","salvar","samba","sanción","sandía","sanear","sangre","sanidad","sano","santo","sapo","saque","sardina","sartén","sastre","satán","sauna","saxofón","sección","seco","secreto","secta","sed","seguir","seis","sello","selva","semana","semilla","senda","sensor","señal","señor","separar","sepia","sequía","ser","serie","sermón","servir","sesenta","sesión","seta","setenta","severo","sexo","sexto","sidra","siesta","siete","siglo","signo","sílaba","silbar","silencio","silla","símbolo","simio","sirena","sistema","sitio","situar","sobre","socio","sodio","sol","solapa","soldado","soledad","sólido","soltar","solución","sombra","sondeo","sonido","sonoro","sonrisa","sopa","soplar","soporte","sordo","sorpresa","sorteo","sostén","sótano","suave","subir","suceso","sudor","suegra","suelo","sueño","suerte","sufrir","sujeto","sultán","sumar","superar","suplir","suponer","supremo","sur","surco","sureño","surgir","susto","sutil","tabaco","tabique","tabla","tabú","taco","tacto","tajo","talar","talco","talento","talla","talón","tamaño","tambor","tango","tanque","tapa","tapete","tapia","tapón","taquilla","tarde","tarea","tarifa","tarjeta","tarot","tarro","tarta","tatuaje","tauro","taza","tazón","teatro","techo","tecla","técnica","tejado","tejer","tejido","tela","teléfono","tema","temor","templo","tenaz","tender","tener","tenis","tenso","teoría","terapia","terco","término","ternura","terror","tesis","tesoro","testigo","tetera","texto","tez","tibio","tiburón","tiempo","tienda","tierra","tieso","tigre","tijera","tilde","timbre","tímido","timo","tinta","tío","típico","tipo","tira","tirón","titán","títere","título","tiza","toalla","tobillo","tocar","tocino","todo","toga","toldo","tomar","tono","tonto","topar","tope","toque","tórax","torero","tormenta","torneo","toro","torpedo","torre","torso","tortuga","tos","tosco","toser","tóxico","trabajo","tractor","traer","tráfico","trago","traje","tramo","trance","trato","trauma","trazar","trébol","tregua","treinta","tren","trepar","tres","tribu","trigo","tripa","triste","triunfo","trofeo","trompa","tronco","tropa","trote","trozo","truco","trueno","trufa","tubería","tubo","tuerto","tumba","tumor","túnel","túnica","turbina","turismo","turno","tutor","ubicar","úlcera","umbral","unidad","unir","universo","uno","untar","uña","urbano","urbe","urgente","urna","usar","usuario","útil","utopía","uva","vaca","vacío","vacuna","vagar","vago","vaina","vajilla","vale","válido","valle","valor","válvula","vampiro","vara","variar","varón","vaso","vecino","vector","vehículo","veinte","vejez","vela","velero","veloz","vena","vencer","venda","veneno","vengar","venir","venta","venus","ver","verano","verbo","verde","vereda","verja","verso","verter","vía","viaje","vibrar","vicio","víctima","vida","vídeo","vidrio","viejo","viernes","vigor","vil","villa","vinagre","vino","viñedo","violín","viral","virgo","virtud","visor","víspera","vista","vitamina","viudo","vivaz","vivero","vivir","vivo","volcán","volumen","volver","voraz","votar","voto","voz","vuelo","vulgar","yacer","yate","yegua","yema","yerno","yeso","yodo","yoga","yogur","zafiro","zanja","zapato","zarza","zona","zorro","zumo","zurdo"]; +t.exports=n},{}],98:[function(e,t,r){!function(e,t){"use strict";function r(e,t){if(!e)throw new Error(t||"Assertion failed")}function n(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function i(e,t,r){return null!==e&&"object"==typeof e&&Array.isArray(e.words)?e:(this.sign=!1,this.words=null,this.length=0,this.red=null,("le"===t||"be"===t)&&(r=t,t=10),void(null!==e&&this._init(e||0,t||10,r||"be")))}function o(e,t,r){for(var n=0,i=Math.min(e.length,r),o=t;i>o;o++){var s=e.charCodeAt(o)-48;n<<=4,n|=s>=49&&54>=s?s-49+10:s>=17&&22>=s?s-17+10:15&s}return n}function s(e,t,r,n){for(var i=0,o=Math.min(e.length,r),s=t;o>s;s++){var a=e.charCodeAt(s)-48;i*=n,i+=a>=49?a-49+10:a>=17?a-17+10:a}return i}function a(e,t){this.name=e,this.p=new i(t,16),this.n=this.p.bitLength(),this.k=new i(1).ishln(this.n).isub(this.p),this.tmp=this._tmp()}function u(){a.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function f(){a.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function h(){a.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function c(){a.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function d(e){if("string"==typeof e){var t=i._prime(e);this.m=t.p,this.prime=t}else this.m=e,this.prime=null}function l(e){d.call(this,e),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new i(1).ishln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv.sign=!0,this.minv=this.minv.mod(this.r)}"object"==typeof e?e.exports=i:t.BN=i,i.BN=i,i.wordSize=26,i.prototype._init=function(e,t,n){if("number"==typeof e)return this._initNumber(e,t,n);if("object"==typeof e)return this._initArray(e,t,n);"hex"===t&&(t=16),r(t===(0|t)&&t>=2&&36>=t),e=e.toString().replace(/\s+/g,"");var i=0;"-"===e[0]&&i++,16===t?this._parseHex(e,i):this._parseBase(e,t,i),"-"===e[0]&&(this.sign=!0),this.strip(),"le"===n&&this._initArray(this.toArray(),t,n)},i.prototype._initNumber=function(e,t,n){0>e&&(this.sign=!0,e=-e),67108864>e?(this.words=[67108863&e],this.length=1):4503599627370496>e?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(r(9007199254740992>e),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===n&&this._initArray(this.toArray(),t,n)},i.prototype._initArray=function(e,t,n){if(r("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var i=0;i=0;i-=3){var a=e[i]|e[i-1]<<8|e[i-2]<<16;this.words[s]|=a<>>26-o&67108863,o+=24,o>=26&&(o-=26,s++)}else if("le"===n)for(var i=0,s=0;i>>26-o&67108863,o+=24,o>=26&&(o-=26,s++)}return this.strip()},i.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6){var s=o(e,r,r+6);this.words[i]|=s<>>26-n&4194303,n+=24,n>=26&&(n-=26,i++)}if(r+6!==t){var s=o(e,t,r+6);this.words[i]|=s<>>26-n&4194303}this.strip()},i.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;67108863>=i;i*=t)n++;n--,i=i/t|0;for(var o=e.length-r,a=o%n,u=Math.min(o,o-a)+r,f=0,h=r;u>h;h+=n)f=s(e,h,h+n,t),this.imuln(i),this.words[0]+f<67108864?this.words[0]+=f:this._iaddn(f);if(0!==a){for(var c=1,f=s(e,h,e.length,t),h=0;a>h;h++)c*=t;this.imuln(c),this.words[0]+f<67108864?this.words[0]+=f:this._iaddn(f)}},i.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t1&&0===this.words[this.length-1];)this.length--;return this._normSign()},i.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.sign=!1),this},i.prototype.inspect=function(){return(this.red?""};var p=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],g=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],m=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];i.prototype.toString=function(e,t){if(e=e||10,16===e||"hex"===e){for(var n="",i=0,t=0|t||1,o=0,s=0;s>>24-i&16777215,n=0!==o||s!==this.length-1?p[6-u.length]+u+n:u+n,i+=2,i>=26&&(i-=26,s--)}for(0!==o&&(n=o.toString(16)+n);n.length%t!==0;)n="0"+n;return this.sign&&(n="-"+n),n}if(e===(0|e)&&e>=2&&36>=e){var f=g[e],h=m[e],n="",c=this.clone();for(c.sign=!1;0!==c.cmpn(0);){var d=c.modn(h).toString(e);c=c.idivn(h),n=0!==c.cmpn(0)?p[f-d.length]+d+n:d+n}return 0===this.cmpn(0)&&(n="0"+n),this.sign&&(n="-"+n),n}r(!1,"Base should be between 2 and 36")},i.prototype.toJSON=function(){return this.toString(16)},i.prototype.toArray=function(e){this.strip();var t=new Array(this.byteLength());t[0]=0;var r=this.clone();if("le"!==e)for(var n=0;0!==r.cmpn(0);n++){var i=r.andln(255);r.ishrn(8),t[t.length-n-1]=i}else for(var n=0;0!==r.cmpn(0);n++){var i=r.andln(255);r.ishrn(8),t[n]=i}return t},Math.clz32?i.prototype._countBits=function(e){return 32-Math.clz32(e)}:i.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},i.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0===(8191&t)&&(r+=13,t>>>=13),0===(127&t)&&(r+=7,t>>>=7),0===(15&t)&&(r+=4,t>>>=4),0===(3&t)&&(r+=2,t>>>=2),0===(1&t)&&r++,r},i.prototype.bitLength=function(){var e=0,t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},i.prototype.zeroBits=function(){if(0===this.cmpn(0))return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},i.prototype.iand=function(e){this.sign=this.sign&&e.sign;var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},i.prototype.ixor=function(e){this.sign=this.sign||e.sign;var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},i.prototype.setn=function(e,t){r("number"==typeof e&&e>=0);for(var n=e/26|0,i=e%26;this.length<=n;)this.words[this.length++]=0;return t?this.words[n]=this.words[n]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,o=0;o>>26}for(;0!==i&&o>>26}if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},i.prototype.isub=function(e){if(e.sign){e.sign=!1;var t=this.iadd(e);return e.sign=!0,t._normSign()}if(this.sign)return this.sign=!1,this.iadd(e),this.sign=!0,this._normSign();var r=this.cmp(e);if(0===r)return this.sign=!1,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=e):(n=e,i=this);for(var o=0,s=0;s>26,this.words[s]=67108863&t}for(;0!==o&&s>26,this.words[s]=67108863&t}if(0===o&&s>>26,o=67108863&r,s=Math.min(n,e.length-1),a=Math.max(0,n-this.length+1);s>=a;a++){var u=n-a,f=0|this.words[u],h=0|e.words[a],c=f*h,d=67108863&c;i=i+(c/67108864|0)|0,d=d+o|0,o=67108863&d,i=i+(d>>>26)|0}t.words[n]=o,r=i}return 0!==r?t.words[n]=r:t.length--,t.strip()},i.prototype._bigMulTo=function(e,t){t.sign=e.sign!==this.sign,t.length=this.length+e.length;for(var r=0,n=0,i=0;i=u;u++){var f=i-u,h=0|this.words[f],c=0|e.words[u],d=h*c,l=67108863&d;o=o+(d/67108864|0)|0,l=l+s|0,s=67108863&l,o=o+(l>>>26)|0,n+=o>>>26,o&=67108863}t.words[i]=s,r=o,o=n}return 0!==r?t.words[i]=r:t.length--,t.strip()},i.prototype.mulTo=function(e,t){var r;return r=this.length+e.length<63?this._smallMulTo(e,t):this._bigMulTo(e,t)},i.prototype.mul=function(e){var t=new i(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},i.prototype.imul=function(e){if(0===this.cmpn(0)||0===e.cmpn(0))return this.words[0]=0,this.length=1,this;var t=this.length,r=e.length;this.sign=e.sign!==this.sign,this.length=this.length+e.length,this.words[this.length-1]=0;for(var n=this.length-2;n>=0;n--){for(var i=0,o=0,s=Math.min(n,r-1),a=Math.max(0,n-t+1);s>=a;a++){var u=n-a,f=this.words[u],h=e.words[a],c=f*h,d=67108863&c;i+=c/67108864|0,d+=o,o=67108863&d,i+=d>>>26}this.words[n]=o,this.words[n+1]+=i,i=0}for(var i=0,u=1;u>>26}return this.strip()},i.prototype.imuln=function(e){r("number"==typeof e);for(var t=0,n=0;n>=26,t+=i/67108864|0,t+=o>>>26,this.words[n]=67108863&o}return 0!==t&&(this.words[n]=t,this.length++),this},i.prototype.muln=function(e){return this.clone().imuln(e)},i.prototype.sqr=function(){return this.mul(this)},i.prototype.isqr=function(){return this.mul(this)},i.prototype.ishln=function(e){r("number"==typeof e&&e>=0);var t=e%26,n=(e-t)/26,i=67108863>>>26-t<<26-t;if(0!==t){for(var o=0,s=0;s>>26-t}o&&(this.words[s]=o,this.length++)}if(0!==n){for(var s=this.length-1;s>=0;s--)this.words[s+n]=this.words[s];for(var s=0;n>s;s++)this.words[s]=0;this.length+=n}return this.strip()},i.prototype.ishrn=function(e,t,n){r("number"==typeof e&&e>=0);var i;i=t?(t-t%26)/26:0;var o=e%26,s=Math.min((e-o)/26,this.length),a=67108863^67108863>>>o<f;f++)u.words[f]=this.words[f];u.length=s}if(0===s);else if(this.length>s){this.length-=s;for(var f=0;f=0&&(0!==h||f>=i);f--){var c=this.words[f];this.words[f]=h<<26-o|c>>>o,h=c&a}return u&&0!==h&&(u.words[u.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip(),this},i.prototype.shln=function(e){return this.clone().ishln(e)},i.prototype.shrn=function(e){return this.clone().ishrn(e)},i.prototype.testn=function(e){r("number"==typeof e&&e>=0);var t=e%26,n=(e-t)/26,i=1<=0);var t=e%26,n=(e-t)/26;if(r(!this.sign,"imaskn works only with positive numbers"),0!==t&&n++,this.length=Math.min(n,this.length),0!==t){var i=67108863^67108863>>>t<e?this.isubn(-e):this.sign?1===this.length&&this.words[0]=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},i.prototype.isubn=function(e){if(r("number"==typeof e),0>e)return this.iaddn(-e);if(this.sign)return this.sign=!1,this.iaddn(e),this.sign=!0,this;this.words[0]-=e;for(var t=0;t>26)-(f/67108864|0),this.words[i+n]=67108863&u}for(;i>26,this.words[i+n]=67108863&u}if(0===a)return this.strip();r(-1===a),a=0;for(var i=0;i>26,this.words[i]=67108863&u}return this.sign=!0,this.strip()},i.prototype._wordDiv=function(e,t){var r=this.length-e.length,n=this.clone(),o=e,s=o.words[o.length-1],a=this._countBits(s);r=26-a,0!==r&&(o=o.shln(r),n.ishln(r),s=o.words[o.length-1]);var u,f=n.length-o.length;if("mod"!==t){u=new i(null),u.length=f+1,u.words=new Array(u.length);for(var h=0;h=0;d--){var l=67108864*n.words[o.length+d]+n.words[o.length+d-1];for(l=Math.min(l/s|0,67108863),n._ishlnsubmul(o,l,d);n.sign;)l--,n.sign=!1,n._ishlnsubmul(o,1,d),0!==n.cmpn(0)&&(n.sign=!n.sign);u&&(u.words[d]=l)}return u&&u.strip(),n.strip(),"div"!==t&&0!==r&&n.ishrn(r),{div:u?u:null,mod:n}},i.prototype.divmod=function(e,t){if(r(0!==e.cmpn(0)),this.sign&&!e.sign){var n,o,s=this.neg().divmod(e,t);return"mod"!==t&&(n=s.div.neg()),"div"!==t&&(o=0===s.mod.cmpn(0)?s.mod:e.sub(s.mod)),{div:n,mod:o}}if(!this.sign&&e.sign){var n,s=this.divmod(e.neg(),t);return"mod"!==t&&(n=s.div.neg()),{div:n,mod:s.mod}}return this.sign&&e.sign?this.neg().divmod(e.neg(),t):e.length>this.length||this.cmp(e)<0?{div:new i(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new i(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new i(this.modn(e.words[0]))}:this._wordDiv(e,t)},i.prototype.div=function(e){return this.divmod(e,"div").div},i.prototype.mod=function(e){return this.divmod(e,"mod").mod},i.prototype.divRound=function(e){var t=this.divmod(e);if(0===t.mod.cmpn(0))return t.div;var r=t.div.sign?t.mod.isub(e):t.mod,n=e.shrn(1),i=e.andln(1),o=r.cmp(n);return 0>o||1===i&&0===o?t.div:t.div.sign?t.div.isubn(1):t.div.iaddn(1)},i.prototype.modn=function(e){r(67108863>=e);for(var t=(1<<26)%e,n=0,i=this.length-1;i>=0;i--)n=(t*n+this.words[i])%e;return n},i.prototype.idivn=function(e){r(67108863>=e);for(var t=0,n=this.length-1;n>=0;n--){var i=this.words[n]+67108864*t;this.words[n]=i/e|0,t=i%e}return this.strip()},i.prototype.divn=function(e){return this.clone().idivn(e)},i.prototype.egcd=function(e){r(!e.sign),r(0!==e.cmpn(0));var t=this,n=e.clone();t=t.sign?t.mod(e):t.clone();for(var o=new i(1),s=new i(0),a=new i(0),u=new i(1),f=0;t.isEven()&&n.isEven();)t.ishrn(1),n.ishrn(1),++f;for(var h=n.clone(),c=t.clone();0!==t.cmpn(0);){for(;t.isEven();)t.ishrn(1),o.isEven()&&s.isEven()?(o.ishrn(1),s.ishrn(1)):(o.iadd(h).ishrn(1),s.isub(c).ishrn(1));for(;n.isEven();)n.ishrn(1),a.isEven()&&u.isEven()?(a.ishrn(1),u.ishrn(1)):(a.iadd(h).ishrn(1),u.isub(c).ishrn(1));t.cmp(n)>=0?(t.isub(n),o.isub(a),s.isub(u)):(n.isub(t),a.isub(o),u.isub(s))}return{a:a,b:u,gcd:n.ishln(f)}},i.prototype._invmp=function(e){r(!e.sign),r(0!==e.cmpn(0));var t=this,n=e.clone();t=t.sign?t.mod(e):t.clone();for(var o=new i(1),s=new i(0),a=n.clone();t.cmpn(1)>0&&n.cmpn(1)>0;){for(;t.isEven();)t.ishrn(1),o.isEven()?o.ishrn(1):o.iadd(a).ishrn(1);for(;n.isEven();)n.ishrn(1),s.isEven()?s.ishrn(1):s.iadd(a).ishrn(1);t.cmp(n)>=0?(t.isub(n),o.isub(s)):(n.isub(t),s.isub(o))}return 0===t.cmpn(1)?o:s},i.prototype.gcd=function(e){if(0===this.cmpn(0))return e.clone();if(0===e.cmpn(0))return this.clone();var t=this.clone(),r=e.clone();t.sign=!1,r.sign=!1;for(var n=0;t.isEven()&&r.isEven();n++)t.ishrn(1),r.ishrn(1);for(;;){for(;t.isEven();)t.ishrn(1);for(;r.isEven();)r.ishrn(1);var i=t.cmp(r);if(0>i){var o=t;t=r,r=o}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.ishln(n)},i.prototype.invm=function(e){return this.egcd(e).a.mod(e)},i.prototype.isEven=function(){return 0===(1&this.words[0])},i.prototype.isOdd=function(){return 1===(1&this.words[0])},i.prototype.andln=function(e){return this.words[0]&e},i.prototype.bincn=function(e){r("number"==typeof e);var t=e%26,n=(e-t)/26,i=1<o;o++)this.words[o]=0;return this.words[n]|=i,this.length=n+1,this}for(var s=i,o=n;0!==s&&o>>26,a&=67108863,this.words[o]=a}return 0!==s&&(this.words[o]=s,this.length++),this},i.prototype.cmpn=function(e){var t=0>e;if(t&&(e=-e),this.sign&&!t)return-1;if(!this.sign&&t)return 1;e&=67108863,this.strip();var r;if(this.length>1)r=1;else{var n=this.words[0];r=n===e?0:e>n?-1:1}return this.sign&&(r=-r),r},i.prototype.cmp=function(e){if(this.sign&&!e.sign)return-1;if(!this.sign&&e.sign)return 1;var t=this.ucmp(e);return this.sign?-t:t},i.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length=0;r--){var n=this.words[r],i=e.words[r];if(n!==i){i>n?t=-1:n>i&&(t=1);break}}return t},i.red=function(e){return new d(e)},i.prototype.toRed=function(e){return r(!this.red,"Already a number in reduction context"),r(!this.sign,"red works only with positives"),e.convertTo(this)._forceRed(e)},i.prototype.fromRed=function(){return r(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},i.prototype._forceRed=function(e){return this.red=e,this},i.prototype.forceRed=function(e){return r(!this.red,"Already a number in reduction context"),this._forceRed(e)},i.prototype.redAdd=function(e){return r(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},i.prototype.redIAdd=function(e){return r(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},i.prototype.redSub=function(e){return r(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},i.prototype.redISub=function(e){return r(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},i.prototype.redShl=function(e){return r(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},i.prototype.redMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},i.prototype.redIMul=function(e){return r(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},i.prototype.redSqr=function(){return r(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},i.prototype.redISqr=function(){return r(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},i.prototype.redSqrt=function(){return r(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},i.prototype.redInvm=function(){return r(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},i.prototype.redNeg=function(){return r(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},i.prototype.redPow=function(e){return r(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var b={k256:null,p224:null,p192:null,p25519:null};a.prototype._tmp=function(){var e=new i(null);return e.words=new Array(Math.ceil(this.n/13)),e},a.prototype.ireduce=function(e){var t,r=e;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),t=r.bitLength();while(t>this.n);var n=t0?r.isub(this.p):r.strip(),r},a.prototype.split=function(e,t){e.ishrn(this.n,0,t)},a.prototype.imulK=function(e){return e.imul(this.k)},n(u,a),u.prototype.split=function(e,t){for(var r=4194303,n=Math.min(e.length,9),i=0;n>i;i++)t.words[i]=e.words[i];if(t.length=n,e.length<=9)return e.words[0]=0,void(e.length=1);var o=e.words[9];t.words[t.length++]=o&r;for(var i=10;i>>22,o=s}e.words[i-10]=o>>>22,e.length-=9},u.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t,r=0,n=0;n>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},i._prime=function v(e){if(b[e])return b[e];var v;if("k256"===e)v=new u;else if("p224"===e)v=new f;else if("p192"===e)v=new h;else{if("p25519"!==e)throw new Error("Unknown prime "+e);v=new c}return b[e]=v,v},d.prototype._verify1=function(e){r(!e.sign,"red works only with positives"),r(e.red,"red works only with red numbers")},d.prototype._verify2=function(e,t){r(!e.sign&&!t.sign,"red works only with positives"),r(e.red&&e.red===t.red,"red works only with red numbers")},d.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.mod(this.m)._forceRed(this)},d.prototype.neg=function(e){var t=e.clone();return t.sign=!t.sign,t.iadd(this.m)._forceRed(this)},d.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},d.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},d.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},d.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},d.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.shln(t))},d.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},d.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},d.prototype.isqr=function(e){return this.imul(e,e)},d.prototype.sqr=function(e){return this.mul(e,e)},d.prototype.sqrt=function(e){if(0===e.cmpn(0))return e.clone();var t=this.m.andln(3);if(r(t%2===1),3===t){var n=this.m.add(new i(1)).ishrn(2),o=this.pow(e,n);return o}for(var s=this.m.subn(1),a=0;0!==s.cmpn(0)&&0===s.andln(1);)a++,s.ishrn(1);r(0!==s.cmpn(0));var u=new i(1).toRed(this),f=u.redNeg(),h=this.m.subn(1).ishrn(1),c=this.m.bitLength();for(c=new i(2*c*c).toRed(this);0!==this.pow(c,h).cmp(f);)c.redIAdd(f);for(var d=this.pow(c,s),o=this.pow(e,s.addn(1).ishrn(1)),l=this.pow(e,s),p=a;0!==l.cmp(u);){for(var g=l,m=0;0!==g.cmp(u);m++)g=g.redSqr();r(p>m);var b=this.pow(d,new i(1).ishln(p-m-1));o=o.redMul(b),d=b.redSqr(),l=l.redMul(d),p=m}return o},d.prototype.invm=function(e){var t=e._invmp(this.m);return t.sign?(t.sign=!1,this.imod(t).redNeg()):this.imod(t)},d.prototype.pow=function(e,t){var r=[];if(0===t.cmpn(0))return new i(1);for(var n=t.clone();0!==n.cmpn(0);)r.push(n.andln(1)),n.ishrn(1);for(var o=e,s=0;s=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},l.prototype.mul=function(e,t){if(0===e.cmpn(0)||0===t.cmpn(0))return new i(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(n).ishrn(this.shift),s=o;return o.cmp(this.m)>=0?s=o.isub(this.m):o.cmpn(0)<0&&(s=o.iadd(this.m)),s._forceRed(this)},l.prototype.invm=function(e){var t=this.imod(e._invmp(this.m).mul(this.r2));return t._forceRed(this)}}("undefined"==typeof t||t,this)},{}],99:[function(e,t,r){arguments[4][71][0].apply(r,arguments)},{dup:71}],100:[function(e,t,r){},{}],101:[function(e,t,r){(function(e){function t(e){var t,r;return t=e>a||0>e?(r=Math.abs(e)%a,0>e?a-r:r):e}function n(e){for(var t=0;te;t=++e)128>t?r.push(t<<1):r.push(t<<1^283);return r}(),i=0,u=0,t=f=0;256>f;t=++f)r=u^u<<1^u<<2^u<<3^u<<4,r=r>>>8^255&r^99,this.SBOX[i]=r,this.INV_SBOX[r]=i,o=e[i],s=e[o],a=e[s],n=257*e[r]^16843008*r,this.SUB_MIX[0][i]=n<<24|n>>>8,this.SUB_MIX[1][i]=n<<16|n>>>16,this.SUB_MIX[2][i]=n<<8|n>>>24,this.SUB_MIX[3][i]=n,n=16843009*a^65537*s^257*o^16843008*i,this.INV_SUB_MIX[0][r]=n<<24|n>>>8,this.INV_SUB_MIX[1][r]=n<<16|n>>>16,this.INV_SUB_MIX[2][r]=n<<8|n>>>24,this.INV_SUB_MIX[3][r]=n,0===i?i=u=1:(i=o^e[e[e[a^o]]],u^=e[e[u]]);return!0};var u=new i;s.blockSize=16,s.prototype.blockSize=s.blockSize,s.keySize=32,s.prototype.keySize=s.keySize,s.prototype._doReset=function(){var e,t,r,n,i,o;for(r=this._key,t=r.length,this._nRounds=t+6,i=4*(this._nRounds+1),this._keySchedule=[],n=0;i>n;n++)this._keySchedule[n]=t>n?r[n]:(o=this._keySchedule[n-1],n%t===0?(o=o<<8|o>>>24,o=u.SBOX[o>>>24]<<24|u.SBOX[o>>>16&255]<<16|u.SBOX[o>>>8&255]<<8|u.SBOX[255&o],o^=u.RCON[n/t|0]<<24):t>6&&n%t===4?o=u.SBOX[o>>>24]<<24|u.SBOX[o>>>16&255]<<16|u.SBOX[o>>>8&255]<<8|u.SBOX[255&o]:void 0,this._keySchedule[n-t]^o);for(this._invKeySchedule=[],e=0;i>e;e++)n=i-e,o=this._keySchedule[n-(e%4?0:4)],this._invKeySchedule[e]=4>e||4>=n?o:u.INV_SUB_MIX[0][u.SBOX[o>>>24]]^u.INV_SUB_MIX[1][u.SBOX[o>>>16&255]]^u.INV_SUB_MIX[2][u.SBOX[o>>>8&255]]^u.INV_SUB_MIX[3][u.SBOX[255&o]];return!0},s.prototype.encryptBlock=function(t){t=o(new e(t));var r=this._doCryptBlock(t,this._keySchedule,u.SUB_MIX,u.SBOX),n=new e(16);return n.writeUInt32BE(r[0],0),n.writeUInt32BE(r[1],4),n.writeUInt32BE(r[2],8),n.writeUInt32BE(r[3],12),n},s.prototype.decryptBlock=function(t){t=o(new e(t));var r=[t[3],t[1]];t[1]=r[0],t[3]=r[1];var n=this._doCryptBlock(t,this._invKeySchedule,u.INV_SUB_MIX,u.INV_SBOX),i=new e(16);return i.writeUInt32BE(n[0],0),i.writeUInt32BE(n[3],4),i.writeUInt32BE(n[2],8),i.writeUInt32BE(n[1],12),i},s.prototype.scrub=function(){n(this._keySchedule),n(this._invKeySchedule),n(this._key)},s.prototype._doCryptBlock=function(e,r,n,i){var o,s,a,u,f,h,c,d,l;s=e[0]^r[0],a=e[1]^r[1],u=e[2]^r[2],f=e[3]^r[3],o=4;for(var p=1;p>>24]^n[1][a>>>16&255]^n[2][u>>>8&255]^n[3][255&f]^r[o++],c=n[0][a>>>24]^n[1][u>>>16&255]^n[2][f>>>8&255]^n[3][255&s]^r[o++],d=n[0][u>>>24]^n[1][f>>>16&255]^n[2][s>>>8&255]^n[3][255&a]^r[o++],l=n[0][f>>>24]^n[1][s>>>16&255]^n[2][a>>>8&255]^n[3][255&u]^r[o++],s=h,a=c,u=d,f=l;return h=(i[s>>>24]<<24|i[a>>>16&255]<<16|i[u>>>8&255]<<8|i[255&f])^r[o++],c=(i[a>>>24]<<24|i[u>>>16&255]<<16|i[f>>>8&255]<<8|i[255&s])^r[o++],d=(i[u>>>24]<<24|i[f>>>16&255]<<16|i[s>>>8&255]<<8|i[255&a])^r[o++],l=(i[f>>>24]<<24|i[s>>>16&255]<<16|i[a>>>8&255]<<8|i[255&u])^r[o++],[t(h),t(c),t(d),t(l)]},r.AES=s}).call(this,e("buffer").Buffer)},{buffer:147}],102:[function(e,t,r){(function(r){function n(e,t,i,a){if(!(this instanceof n))return new n(e,t,i);s.call(this),this._finID=r.concat([i,new r([0,0,0,1])]),i=r.concat([i,new r([0,0,0,2])]),this._cipher=new o.AES(t),this._prev=new r(i.length),this._cache=new r(""),this._secCache=new r(""),this._decrypt=a,this._alen=0,this._len=0,i.copy(this._prev),this._mode=e;var f=new r(4);f.fill(0),this._ghash=new u(this._cipher.encryptBlock(f)),this._authTag=null,this._called=!1}function i(e,t){var r=0;e.length!==t.length&&r++;for(var n=Math.min(e.length,t.length),i=-1;++it&&(t=new r(t),t.fill(0),this._ghash.update(t))}this._called=!0;var n=this._mode.encrypt(this,e);return this._decrypt?this._ghash.update(e):this._ghash.update(n),this._len+=e.length,n},n.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var e=f(this._ghash["final"](8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt){if(i(e,this._authTag))throw new Error("Unsupported state or unable to authenticate data")}else this._authTag=e;this._cipher.scrub()},n.prototype.getAuthTag=function(){if(!this._decrypt&&r.isBuffer(this._authTag))return this._authTag;throw new Error("Attempting to get auth tag in unsupported state")},n.prototype.setAuthTag=function(e){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=e},n.prototype.setAAD=function(e){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(e),this._alen+=e.length}}).call(this,e("buffer").Buffer)},{"./aes":101,"./ghash":106,buffer:147,"buffer-xor":146,"cipher-base":149,inherits:226}],103:[function(e,t,r){function n(){ +return Object.keys(s)}var i=e("./encrypter");r.createCipher=r.Cipher=i.createCipher,r.createCipheriv=r.Cipheriv=i.createCipheriv;var o=e("./decrypter");r.createDecipher=r.Decipher=o.createDecipher,r.createDecipheriv=r.Decipheriv=o.createDecipheriv;var s=e("./modes");r.listCiphers=r.getCiphers=n},{"./decrypter":104,"./encrypter":105,"./modes":107}],104:[function(e,t,r){(function(t){function n(e,r,o){return this instanceof n?(f.call(this),this._cache=new i,this._last=void 0,this._cipher=new u.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(e){for(var t=e[15],r=-1;++r16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},i.prototype.flush=function(){return this.cache.length?this.cache:void 0};var g={ECB:e("./modes/ecb"),CBC:e("./modes/cbc"),CFB:e("./modes/cfb"),CFB8:e("./modes/cfb8"),CFB1:e("./modes/cfb1"),OFB:e("./modes/ofb"),CTR:e("./modes/ctr"),GCM:e("./modes/ctr")};r.createDecipher=a,r.createDecipheriv=s}).call(this,e("buffer").Buffer)},{"./aes":101,"./authCipher":102,"./modes":107,"./modes/cbc":108,"./modes/cfb":109,"./modes/cfb1":110,"./modes/cfb8":111,"./modes/ctr":112,"./modes/ecb":113,"./modes/ofb":114,"./streamCipher":115,buffer:147,"cipher-base":149,evp_bytestokey:218,inherits:226}],105:[function(e,t,r){(function(t){function n(e,r,o){return this instanceof n?(u.call(this),this._cache=new i,this._cipher=new a.AES(r),this._prev=new t(o.length),o.copy(this._prev),this._mode=e,void(this._autopadding=!0)):new n(e,r,o)}function i(){return this instanceof i?void(this.cache=new t("")):new i}function o(e,r,i){var o=h[e.toLowerCase()];if(!o)throw new TypeError("invalid suite type");if("string"==typeof i&&(i=new t(i)),"string"==typeof r&&(r=new t(r)),r.length!==o.key/8)throw new TypeError("invalid key length "+r.length);if(i.length!==o.iv)throw new TypeError("invalid iv length "+i.length);return"stream"===o.type?new d(p[o.mode],r,i):"auth"===o.type?new l(p[o.mode],r,i):new n(p[o.mode],r,i)}function s(e,t){var r=h[e.toLowerCase()];if(!r)throw new TypeError("invalid suite type");var n=c(t,!1,r.key,r.iv);return o(e,n.key,n.iv)}var a=e("./aes"),u=e("cipher-base"),f=e("inherits"),h=e("./modes"),c=e("evp_bytestokey"),d=e("./streamCipher"),l=e("./authCipher");f(n,u),n.prototype._update=function(e){this._cache.add(e);for(var r,n,i=[];r=this._cache.get();)n=this._mode.encrypt(this,r),i.push(n);return t.concat(i)},n.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return e=this._mode.encrypt(this,e),this._cipher.scrub(),e;if("10101010101010101010101010101010"!==e.toString("hex"))throw this._cipher.scrub(),new Error("data not multiple of block length")},n.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},i.prototype.add=function(e){this.cache=t.concat([this.cache,e])},i.prototype.get=function(){if(this.cache.length>15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},i.prototype.flush=function(){for(var e=16-this.cache.length,r=new t(e),n=-1;++nu||0>e?(r=Math.abs(e)%u,0>e?u-r:r):e}function s(e,t){return[e[0]^t[0],e[1]^t[1],e[2]^t[2],e[3]^t[3]]}var a=new e(16);a.fill(0),t.exports=r,r.prototype.ghash=function(e){for(var t=-1;++t0;e--)o[e]=o[e]>>>1|(1&o[e-1])<<31;o[0]=o[0]>>>1,r&&(o[0]=o[0]^225<<24)}this.state=i(a)},r.prototype.update=function(t){this.cache=e.concat([this.cache,t]);for(var r;this.cache.length>=16;)r=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(r)},r.prototype["final"]=function(t,r){return this.cache.length&&this.ghash(e.concat([this.cache,a],16)),this.ghash(i([0,t,0,r])),this.state};var u=Math.pow(2,32)}).call(this,e("buffer").Buffer)},{buffer:147}],107:[function(e,t,r){r["aes-128-ecb"]={cipher:"AES",key:128,iv:0,mode:"ECB",type:"block"},r["aes-192-ecb"]={cipher:"AES",key:192,iv:0,mode:"ECB",type:"block"},r["aes-256-ecb"]={cipher:"AES",key:256,iv:0,mode:"ECB",type:"block"},r["aes-128-cbc"]={cipher:"AES",key:128,iv:16,mode:"CBC",type:"block"},r["aes-192-cbc"]={cipher:"AES",key:192,iv:16,mode:"CBC",type:"block"},r["aes-256-cbc"]={cipher:"AES",key:256,iv:16,mode:"CBC",type:"block"},r.aes128=r["aes-128-cbc"],r.aes192=r["aes-192-cbc"],r.aes256=r["aes-256-cbc"],r["aes-128-cfb"]={cipher:"AES",key:128,iv:16,mode:"CFB",type:"stream"},r["aes-192-cfb"]={cipher:"AES",key:192,iv:16,mode:"CFB",type:"stream"},r["aes-256-cfb"]={cipher:"AES",key:256,iv:16,mode:"CFB",type:"stream"},r["aes-128-cfb8"]={cipher:"AES",key:128,iv:16,mode:"CFB8",type:"stream"},r["aes-192-cfb8"]={cipher:"AES",key:192,iv:16,mode:"CFB8",type:"stream"},r["aes-256-cfb8"]={cipher:"AES",key:256,iv:16,mode:"CFB8",type:"stream"},r["aes-128-cfb1"]={cipher:"AES",key:128,iv:16,mode:"CFB1",type:"stream"},r["aes-192-cfb1"]={cipher:"AES",key:192,iv:16,mode:"CFB1",type:"stream"},r["aes-256-cfb1"]={cipher:"AES",key:256,iv:16,mode:"CFB1",type:"stream"},r["aes-128-ofb"]={cipher:"AES",key:128,iv:16,mode:"OFB",type:"stream"},r["aes-192-ofb"]={cipher:"AES",key:192,iv:16,mode:"OFB",type:"stream"},r["aes-256-ofb"]={cipher:"AES",key:256,iv:16,mode:"OFB",type:"stream"},r["aes-128-ctr"]={cipher:"AES",key:128,iv:16,mode:"CTR",type:"stream"},r["aes-192-ctr"]={cipher:"AES",key:192,iv:16,mode:"CTR",type:"stream"},r["aes-256-ctr"]={cipher:"AES",key:256,iv:16,mode:"CTR",type:"stream"},r["aes-128-gcm"]={cipher:"AES",key:128,iv:12,mode:"GCM",type:"auth"},r["aes-192-gcm"]={cipher:"AES",key:192,iv:12,mode:"GCM",type:"auth"},r["aes-256-gcm"]={cipher:"AES",key:256,iv:12,mode:"GCM",type:"auth"}},{}],108:[function(e,t,r){var n=e("buffer-xor");r.encrypt=function(e,t){var r=n(t,e._prev);return e._prev=e._cipher.encryptBlock(r),e._prev},r.decrypt=function(e,t){var r=e._prev;e._prev=t;var i=e._cipher.decryptBlock(t);return n(i,r)}},{"buffer-xor":146}],109:[function(e,t,r){(function(t){function n(e,r,n){var o=r.length,s=i(r,e._cache);return e._cache=e._cache.slice(o),e._prev=t.concat([e._prev,n?r:s]),s}var i=e("buffer-xor");r.encrypt=function(e,r,i){for(var o,s=new t("");r.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=new t("")),!(e._cache.length<=r.length)){s=t.concat([s,n(e,r,i)]);break}o=e._cache.length,s=t.concat([s,n(e,r.slice(0,o),i)]),r=r.slice(o)}return s}}).call(this,e("buffer").Buffer)},{buffer:147,"buffer-xor":146}],110:[function(e,t,r){(function(e){function t(e,t,r){for(var i,o,s,a=-1,u=8,f=0;++a>a%8,e._prev=n(e._prev,r?o:s);return f}function n(t,r){var n=t.length,i=-1,o=new e(t.length);for(t=e.concat([t,new e([r])]);++i>7;return o}r.encrypt=function(r,n,i){for(var o=n.length,s=new e(o),a=-1;++a=0||!r.umod(e.prime1)||!r.umod(e.prime2);)r=new s(a(t));return r}var s=e("bn.js"),a=e("randombytes");t.exports=i,i.getr=o}).call(this,e("buffer").Buffer)},{"bn.js":120,buffer:147,randombytes:247}],120:[function(e,t,r){!function(t,r){"use strict";function n(e,t){if(!e)throw new Error(t||"Assertion failed")}function i(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function o(e,t,r){return null!==e&&"object"==typeof e&&Array.isArray(e.words)?e:(this.negative=0,this.words=null,this.length=0,this.red=null,void(null!==e&&(("le"===t||"be"===t)&&(r=t,t=10),this._init(e||0,t||10,r||"be"))))}function s(e,t,r){for(var n=0,i=Math.min(e.length,r),o=t;i>o;o++){var s=e.charCodeAt(o)-48;n<<=4,n|=s>=49&&54>=s?s-49+10:s>=17&&22>=s?s-17+10:15&s}return n}function a(e,t,r,n){for(var i=0,o=Math.min(e.length,r),s=t;o>s;s++){var a=e.charCodeAt(s)-48;i*=n,i+=a>=49?a-49+10:a>=17?a-17+10:a}return i}function u(e){for(var t=new Array(e.bitLength()),r=0;r>>i}return t}function f(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var i=0|e.words[0],o=0|t.words[0],s=i*o,a=67108863&s,u=s/67108864|0;r.words[0]=a;for(var f=1;n>f;f++){for(var h=u>>>26,c=67108863&u,d=Math.min(f,t.length-1),l=Math.max(0,f-e.length+1);d>=l;l++){var p=f-l|0;i=0|e.words[p],o=0|t.words[l],s=i*o+c,h+=s/67108864|0,c=67108863&s}r.words[f]=0|c,u=0|h}return 0!==u?r.words[f]=0|u:r.length--,r.strip()}function h(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,i=0,o=0;o=f;f++){var h=o-f,c=0|e.words[h],d=0|t.words[f],l=c*d,p=67108863&l;s=s+(l/67108864|0)|0,p=p+a|0,a=67108863&p,s=s+(p>>>26)|0,i+=s>>>26,s&=67108863}r.words[o]=a,n=s,s=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}function c(e,t,r){var n=new d;return n.mulp(e,t,r)}function d(e,t){this.x=e,this.y=t}function l(e,t){this.name=e,this.p=new o(t,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function p(){l.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function g(){l.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function m(){l.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function b(){l.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function v(e){if("string"==typeof e){var t=o._prime(e);this.m=t.p,this.prime=t}else this.m=e,this.prime=null}function y(e){v.call(this,e),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof t?t.exports=o:r.BN=o,o.BN=o,o.wordSize=26;var w;try{w=e("buffer").Buffer}catch(_){}o.max=function(e,t){return e.cmp(t)>0?e:t},o.min=function(e,t){return e.cmp(t)<0?e:t},o.prototype._init=function(e,t,r){if("number"==typeof e)return this._initNumber(e,t,r);if("object"==typeof e)return this._initArray(e,t,r);"hex"===t&&(t=16),n(t===(0|t)&&t>=2&&36>=t),e=e.toString().replace(/\s+/g,"");var i=0;"-"===e[0]&&i++,16===t?this._parseHex(e,i):this._parseBase(e,t,i),"-"===e[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),t,r)},o.prototype._initNumber=function(e,t,r){0>e&&(this.negative=1,e=-e),67108864>e?(this.words=[67108863&e],this.length=1):4503599627370496>e?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(n(9007199254740992>e),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),t,r)},o.prototype._initArray=function(e,t,r){if(n("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var i=0;i=0;i-=3)s=e[i]|e[i-1]<<8|e[i-2]<<16,this.words[o]|=s<>>26-a&67108863,a+=24,a>=26&&(a-=26,o++);else if("le"===r)for(i=0,o=0;i>>26-a&67108863,a+=24,a>=26&&(a-=26,o++);return this.strip()},o.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6)i=s(e,r,r+6),this.words[n]|=i<>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==t&&(i=s(e,t,r+6),this.words[n]|=i<>>26-o&4194303),this.strip()},o.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;67108863>=i;i*=t)n++;n--,i=i/t|0;for(var o=e.length-r,s=o%n,u=Math.min(o,o-s)+r,f=0,h=r;u>h;h+=n)f=a(e,h,h+n,t),this.imuln(i),this.words[0]+f<67108864?this.words[0]+=f:this._iaddn(f);if(0!==s){var c=1;for(f=a(e,h,e.length,t),h=0;s>h;h++)c*=t;this.imuln(c),this.words[0]+f<67108864?this.words[0]+=f:this._iaddn(f)}},o.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var S=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],A=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],I=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(e,t){e=e||10,t=0|t||1;var r;if(16===e||"hex"===e){r="";for(var i=0,o=0,s=0;s>>24-i&16777215,r=0!==o||s!==this.length-1?S[6-u.length]+u+r:u+r,i+=2,i>=26&&(i-=26,s--)}for(0!==o&&(r=o.toString(16)+r);r.length%t!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&36>=e){var f=A[e],h=I[e];r="";var c=this.clone();for(c.negative=0;!c.isZero();){var d=c.modn(h).toString(e);c=c.idivn(h),r=c.isZero()?d+r:S[f-d.length]+d+r}for(this.isZero()&&(r="0"+r);r.length%t!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var e,t=this.bitLength();return 26>=t?e=this.words[0]:52>=t?e=67108864*this.words[1]+this.words[0]:53===t?e=4503599627370496+67108864*this.words[1]+this.words[0]:n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(e,t){return n("undefined"!=typeof w),this.toArrayLike(w,e,t)},o.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},o.prototype.toArrayLike=function(e,t,r){var i=this.byteLength(),o=r||Math.max(1,i);n(o>=i,"byte array longer than desired length"),n(o>0,"Requested array length <= 0"),this.strip();var s,a,u="le"===t,f=new e(o),h=this.clone();if(u){for(a=0;!h.isZero();a++)s=h.andln(255),h.iushrn(8),f[a]=s;for(;o>a;a++)f[a]=0}else{for(a=0;o-i>a;a++)f[a]=0;for(a=0;!h.isZero();a++)s=h.andln(255),h.iushrn(8),f[o-a-1]=s}return f},Math.clz32?o.prototype._countBits=function(e){return 32-Math.clz32(e)}:o.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},o.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0===(8191&t)&&(r+=13,t>>>=13),0===(127&t)&&(r+=7,t>>>=7),0===(15&t)&&(r+=4,t>>>=4),0===(3&t)&&(r+=2,t>>>=2),0===(1&t)&&r++,r},o.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function(e){n("number"==typeof e&&e>=0);for(var t=0|Math.ceil(e/26),r=e%26;this.length0&&t--;for(var i=0;t>i;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(e){return this.clone().inotn(e)},o.prototype.setn=function(e,t){n("number"==typeof e&&e>=0);for(var r=e/26|0,i=e%26;this.length<=r;)this.words[this.length++]=0;return t?this.words[r]=this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r=this.cmp(e);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=e):(n=e,i=this);for(var o=0,s=0;s>26,this.words[s]=67108863&t;for(;0!==o&&s>26,this.words[s]=67108863&t;if(0===o&&s>>13,l=0|s[1],p=8191&l,g=l>>>13,m=0|s[2],b=8191&m,v=m>>>13,y=0|s[3],w=8191&y,_=y>>>13,S=0|s[4],A=8191&S,I=S>>>13,E=0|s[5],k=8191&E,x=E>>>13,M=0|s[6],P=8191&M,B=M>>>13,O=0|s[7],R=8191&O,T=O>>>13,N=0|s[8],C=8191&N,j=N>>>13,L=0|s[9],D=8191&L,z=L>>>13,U=0|a[0],K=8191&U,F=U>>>13,H=0|a[1],q=8191&H,V=H>>>13,Y=0|a[2],G=8191&Y,W=Y>>>13,X=0|a[3],Z=8191&X,J=X>>>13,$=0|a[4],Q=8191&$,ee=$>>>13,te=0|a[5],re=8191&te,ne=te>>>13,ie=0|a[6],oe=8191&ie,se=ie>>>13,ae=0|a[7],ue=8191&ae,fe=ae>>>13,he=0|a[8],ce=8191&he,de=he>>>13,le=0|a[9],pe=8191&le,ge=le>>>13;r.negative=e.negative^t.negative,r.length=19,n=Math.imul(c,K),i=Math.imul(c,F),i+=Math.imul(d,K),o=Math.imul(d,F);var me=f+n+((8191&i)<<13);f=o+(i>>>13)+(me>>>26),me&=67108863,n=Math.imul(p,K),i=Math.imul(p,F),i+=Math.imul(g,K),o=Math.imul(g,F),n+=Math.imul(c,q),i+=Math.imul(c,V),i+=Math.imul(d,q),o+=Math.imul(d,V);var be=f+n+((8191&i)<<13);f=o+(i>>>13)+(be>>>26),be&=67108863,n=Math.imul(b,K),i=Math.imul(b,F),i+=Math.imul(v,K),o=Math.imul(v,F),n+=Math.imul(p,q),i+=Math.imul(p,V),i+=Math.imul(g,q),o+=Math.imul(g,V),n+=Math.imul(c,G),i+=Math.imul(c,W),i+=Math.imul(d,G),o+=Math.imul(d,W);var ve=f+n+((8191&i)<<13);f=o+(i>>>13)+(ve>>>26),ve&=67108863,n=Math.imul(w,K),i=Math.imul(w,F),i+=Math.imul(_,K),o=Math.imul(_,F),n+=Math.imul(b,q),i+=Math.imul(b,V),i+=Math.imul(v,q),o+=Math.imul(v,V),n+=Math.imul(p,G),i+=Math.imul(p,W),i+=Math.imul(g,G),o+=Math.imul(g,W),n+=Math.imul(c,Z),i+=Math.imul(c,J),i+=Math.imul(d,Z),o+=Math.imul(d,J);var ye=f+n+((8191&i)<<13);f=o+(i>>>13)+(ye>>>26),ye&=67108863,n=Math.imul(A,K),i=Math.imul(A,F),i+=Math.imul(I,K),o=Math.imul(I,F),n+=Math.imul(w,q),i+=Math.imul(w,V),i+=Math.imul(_,q),o+=Math.imul(_,V),n+=Math.imul(b,G),i+=Math.imul(b,W),i+=Math.imul(v,G),o+=Math.imul(v,W),n+=Math.imul(p,Z),i+=Math.imul(p,J),i+=Math.imul(g,Z),o+=Math.imul(g,J),n+=Math.imul(c,Q),i+=Math.imul(c,ee),i+=Math.imul(d,Q),o+=Math.imul(d,ee);var we=f+n+((8191&i)<<13);f=o+(i>>>13)+(we>>>26),we&=67108863,n=Math.imul(k,K),i=Math.imul(k,F),i+=Math.imul(x,K),o=Math.imul(x,F),n+=Math.imul(A,q),i+=Math.imul(A,V),i+=Math.imul(I,q),o+=Math.imul(I,V),n+=Math.imul(w,G),i+=Math.imul(w,W),i+=Math.imul(_,G),o+=Math.imul(_,W),n+=Math.imul(b,Z),i+=Math.imul(b,J),i+=Math.imul(v,Z),o+=Math.imul(v,J),n+=Math.imul(p,Q),i+=Math.imul(p,ee),i+=Math.imul(g,Q),o+=Math.imul(g,ee),n+=Math.imul(c,re),i+=Math.imul(c,ne),i+=Math.imul(d,re),o+=Math.imul(d,ne);var _e=f+n+((8191&i)<<13);f=o+(i>>>13)+(_e>>>26),_e&=67108863,n=Math.imul(P,K),i=Math.imul(P,F),i+=Math.imul(B,K),o=Math.imul(B,F),n+=Math.imul(k,q),i+=Math.imul(k,V),i+=Math.imul(x,q),o+=Math.imul(x,V),n+=Math.imul(A,G),i+=Math.imul(A,W),i+=Math.imul(I,G),o+=Math.imul(I,W),n+=Math.imul(w,Z),i+=Math.imul(w,J),i+=Math.imul(_,Z),o+=Math.imul(_,J),n+=Math.imul(b,Q),i+=Math.imul(b,ee),i+=Math.imul(v,Q),o+=Math.imul(v,ee),n+=Math.imul(p,re),i+=Math.imul(p,ne),i+=Math.imul(g,re),o+=Math.imul(g,ne),n+=Math.imul(c,oe),i+=Math.imul(c,se),i+=Math.imul(d,oe),o+=Math.imul(d,se);var Se=f+n+((8191&i)<<13);f=o+(i>>>13)+(Se>>>26),Se&=67108863,n=Math.imul(R,K),i=Math.imul(R,F),i+=Math.imul(T,K),o=Math.imul(T,F),n+=Math.imul(P,q),i+=Math.imul(P,V),i+=Math.imul(B,q),o+=Math.imul(B,V),n+=Math.imul(k,G),i+=Math.imul(k,W),i+=Math.imul(x,G),o+=Math.imul(x,W),n+=Math.imul(A,Z),i+=Math.imul(A,J),i+=Math.imul(I,Z),o+=Math.imul(I,J),n+=Math.imul(w,Q),i+=Math.imul(w,ee),i+=Math.imul(_,Q),o+=Math.imul(_,ee),n+=Math.imul(b,re),i+=Math.imul(b,ne),i+=Math.imul(v,re),o+=Math.imul(v,ne),n+=Math.imul(p,oe),i+=Math.imul(p,se),i+=Math.imul(g,oe),o+=Math.imul(g,se),n+=Math.imul(c,ue),i+=Math.imul(c,fe),i+=Math.imul(d,ue),o+=Math.imul(d,fe);var Ae=f+n+((8191&i)<<13);f=o+(i>>>13)+(Ae>>>26),Ae&=67108863,n=Math.imul(C,K),i=Math.imul(C,F),i+=Math.imul(j,K),o=Math.imul(j,F),n+=Math.imul(R,q),i+=Math.imul(R,V),i+=Math.imul(T,q),o+=Math.imul(T,V),n+=Math.imul(P,G),i+=Math.imul(P,W),i+=Math.imul(B,G),o+=Math.imul(B,W),n+=Math.imul(k,Z),i+=Math.imul(k,J),i+=Math.imul(x,Z),o+=Math.imul(x,J),n+=Math.imul(A,Q),i+=Math.imul(A,ee),i+=Math.imul(I,Q),o+=Math.imul(I,ee),n+=Math.imul(w,re),i+=Math.imul(w,ne),i+=Math.imul(_,re),o+=Math.imul(_,ne),n+=Math.imul(b,oe),i+=Math.imul(b,se),i+=Math.imul(v,oe),o+=Math.imul(v,se),n+=Math.imul(p,ue),i+=Math.imul(p,fe),i+=Math.imul(g,ue),o+=Math.imul(g,fe),n+=Math.imul(c,ce),i+=Math.imul(c,de),i+=Math.imul(d,ce),o+=Math.imul(d,de);var Ie=f+n+((8191&i)<<13);f=o+(i>>>13)+(Ie>>>26),Ie&=67108863,n=Math.imul(D,K),i=Math.imul(D,F),i+=Math.imul(z,K),o=Math.imul(z,F),n+=Math.imul(C,q),i+=Math.imul(C,V),i+=Math.imul(j,q),o+=Math.imul(j,V),n+=Math.imul(R,G),i+=Math.imul(R,W),i+=Math.imul(T,G),o+=Math.imul(T,W),n+=Math.imul(P,Z),i+=Math.imul(P,J),i+=Math.imul(B,Z),o+=Math.imul(B,J),n+=Math.imul(k,Q),i+=Math.imul(k,ee),i+=Math.imul(x,Q),o+=Math.imul(x,ee),n+=Math.imul(A,re),i+=Math.imul(A,ne),i+=Math.imul(I,re),o+=Math.imul(I,ne),n+=Math.imul(w,oe),i+=Math.imul(w,se), +i+=Math.imul(_,oe),o+=Math.imul(_,se),n+=Math.imul(b,ue),i+=Math.imul(b,fe),i+=Math.imul(v,ue),o+=Math.imul(v,fe),n+=Math.imul(p,ce),i+=Math.imul(p,de),i+=Math.imul(g,ce),o+=Math.imul(g,de),n+=Math.imul(c,pe),i+=Math.imul(c,ge),i+=Math.imul(d,pe),o+=Math.imul(d,ge);var Ee=f+n+((8191&i)<<13);f=o+(i>>>13)+(Ee>>>26),Ee&=67108863,n=Math.imul(D,q),i=Math.imul(D,V),i+=Math.imul(z,q),o=Math.imul(z,V),n+=Math.imul(C,G),i+=Math.imul(C,W),i+=Math.imul(j,G),o+=Math.imul(j,W),n+=Math.imul(R,Z),i+=Math.imul(R,J),i+=Math.imul(T,Z),o+=Math.imul(T,J),n+=Math.imul(P,Q),i+=Math.imul(P,ee),i+=Math.imul(B,Q),o+=Math.imul(B,ee),n+=Math.imul(k,re),i+=Math.imul(k,ne),i+=Math.imul(x,re),o+=Math.imul(x,ne),n+=Math.imul(A,oe),i+=Math.imul(A,se),i+=Math.imul(I,oe),o+=Math.imul(I,se),n+=Math.imul(w,ue),i+=Math.imul(w,fe),i+=Math.imul(_,ue),o+=Math.imul(_,fe),n+=Math.imul(b,ce),i+=Math.imul(b,de),i+=Math.imul(v,ce),o+=Math.imul(v,de),n+=Math.imul(p,pe),i+=Math.imul(p,ge),i+=Math.imul(g,pe),o+=Math.imul(g,ge);var ke=f+n+((8191&i)<<13);f=o+(i>>>13)+(ke>>>26),ke&=67108863,n=Math.imul(D,G),i=Math.imul(D,W),i+=Math.imul(z,G),o=Math.imul(z,W),n+=Math.imul(C,Z),i+=Math.imul(C,J),i+=Math.imul(j,Z),o+=Math.imul(j,J),n+=Math.imul(R,Q),i+=Math.imul(R,ee),i+=Math.imul(T,Q),o+=Math.imul(T,ee),n+=Math.imul(P,re),i+=Math.imul(P,ne),i+=Math.imul(B,re),o+=Math.imul(B,ne),n+=Math.imul(k,oe),i+=Math.imul(k,se),i+=Math.imul(x,oe),o+=Math.imul(x,se),n+=Math.imul(A,ue),i+=Math.imul(A,fe),i+=Math.imul(I,ue),o+=Math.imul(I,fe),n+=Math.imul(w,ce),i+=Math.imul(w,de),i+=Math.imul(_,ce),o+=Math.imul(_,de),n+=Math.imul(b,pe),i+=Math.imul(b,ge),i+=Math.imul(v,pe),o+=Math.imul(v,ge);var xe=f+n+((8191&i)<<13);f=o+(i>>>13)+(xe>>>26),xe&=67108863,n=Math.imul(D,Z),i=Math.imul(D,J),i+=Math.imul(z,Z),o=Math.imul(z,J),n+=Math.imul(C,Q),i+=Math.imul(C,ee),i+=Math.imul(j,Q),o+=Math.imul(j,ee),n+=Math.imul(R,re),i+=Math.imul(R,ne),i+=Math.imul(T,re),o+=Math.imul(T,ne),n+=Math.imul(P,oe),i+=Math.imul(P,se),i+=Math.imul(B,oe),o+=Math.imul(B,se),n+=Math.imul(k,ue),i+=Math.imul(k,fe),i+=Math.imul(x,ue),o+=Math.imul(x,fe),n+=Math.imul(A,ce),i+=Math.imul(A,de),i+=Math.imul(I,ce),o+=Math.imul(I,de),n+=Math.imul(w,pe),i+=Math.imul(w,ge),i+=Math.imul(_,pe),o+=Math.imul(_,ge);var Me=f+n+((8191&i)<<13);f=o+(i>>>13)+(Me>>>26),Me&=67108863,n=Math.imul(D,Q),i=Math.imul(D,ee),i+=Math.imul(z,Q),o=Math.imul(z,ee),n+=Math.imul(C,re),i+=Math.imul(C,ne),i+=Math.imul(j,re),o+=Math.imul(j,ne),n+=Math.imul(R,oe),i+=Math.imul(R,se),i+=Math.imul(T,oe),o+=Math.imul(T,se),n+=Math.imul(P,ue),i+=Math.imul(P,fe),i+=Math.imul(B,ue),o+=Math.imul(B,fe),n+=Math.imul(k,ce),i+=Math.imul(k,de),i+=Math.imul(x,ce),o+=Math.imul(x,de),n+=Math.imul(A,pe),i+=Math.imul(A,ge),i+=Math.imul(I,pe),o+=Math.imul(I,ge);var Pe=f+n+((8191&i)<<13);f=o+(i>>>13)+(Pe>>>26),Pe&=67108863,n=Math.imul(D,re),i=Math.imul(D,ne),i+=Math.imul(z,re),o=Math.imul(z,ne),n+=Math.imul(C,oe),i+=Math.imul(C,se),i+=Math.imul(j,oe),o+=Math.imul(j,se),n+=Math.imul(R,ue),i+=Math.imul(R,fe),i+=Math.imul(T,ue),o+=Math.imul(T,fe),n+=Math.imul(P,ce),i+=Math.imul(P,de),i+=Math.imul(B,ce),o+=Math.imul(B,de),n+=Math.imul(k,pe),i+=Math.imul(k,ge),i+=Math.imul(x,pe),o+=Math.imul(x,ge);var Be=f+n+((8191&i)<<13);f=o+(i>>>13)+(Be>>>26),Be&=67108863,n=Math.imul(D,oe),i=Math.imul(D,se),i+=Math.imul(z,oe),o=Math.imul(z,se),n+=Math.imul(C,ue),i+=Math.imul(C,fe),i+=Math.imul(j,ue),o+=Math.imul(j,fe),n+=Math.imul(R,ce),i+=Math.imul(R,de),i+=Math.imul(T,ce),o+=Math.imul(T,de),n+=Math.imul(P,pe),i+=Math.imul(P,ge),i+=Math.imul(B,pe),o+=Math.imul(B,ge);var Oe=f+n+((8191&i)<<13);f=o+(i>>>13)+(Oe>>>26),Oe&=67108863,n=Math.imul(D,ue),i=Math.imul(D,fe),i+=Math.imul(z,ue),o=Math.imul(z,fe),n+=Math.imul(C,ce),i+=Math.imul(C,de),i+=Math.imul(j,ce),o+=Math.imul(j,de),n+=Math.imul(R,pe),i+=Math.imul(R,ge),i+=Math.imul(T,pe),o+=Math.imul(T,ge);var Re=f+n+((8191&i)<<13);f=o+(i>>>13)+(Re>>>26),Re&=67108863,n=Math.imul(D,ce),i=Math.imul(D,de),i+=Math.imul(z,ce),o=Math.imul(z,de),n+=Math.imul(C,pe),i+=Math.imul(C,ge),i+=Math.imul(j,pe),o+=Math.imul(j,ge);var Te=f+n+((8191&i)<<13);f=o+(i>>>13)+(Te>>>26),Te&=67108863,n=Math.imul(D,pe),i=Math.imul(D,ge),i+=Math.imul(z,pe),o=Math.imul(z,ge);var Ne=f+n+((8191&i)<<13);return f=o+(i>>>13)+(Ne>>>26),Ne&=67108863,u[0]=me,u[1]=be,u[2]=ve,u[3]=ye,u[4]=we,u[5]=_e,u[6]=Se,u[7]=Ae,u[8]=Ie,u[9]=Ee,u[10]=ke,u[11]=xe,u[12]=Me,u[13]=Pe,u[14]=Be,u[15]=Oe,u[16]=Re,u[17]=Te,u[18]=Ne,0!==f&&(u[19]=f,r.length++),r};Math.imul||(E=f),o.prototype.mulTo=function(e,t){var r,n=this.length+e.length;return r=10===this.length&&10===e.length?E(this,e,t):63>n?f(this,e,t):1024>n?h(this,e,t):c(this,e,t)},d.prototype.makeRBT=function(e){for(var t=new Array(e),r=o.prototype._countBits(e)-1,n=0;e>n;n++)t[n]=this.revBin(n,r,e);return t},d.prototype.revBin=function(e,t,r){if(0===e||e===r-1)return e;for(var n=0,i=0;t>i;i++)n|=(1&e)<>=1;return n},d.prototype.permute=function(e,t,r,n,i,o){for(var s=0;o>s;s++)n[s]=t[e[s]],i[s]=r[e[s]]},d.prototype.transform=function(e,t,r,n,i,o){this.permute(o,e,t,r,n,i);for(var s=1;i>s;s<<=1)for(var a=s<<1,u=Math.cos(2*Math.PI/a),f=Math.sin(2*Math.PI/a),h=0;i>h;h+=a)for(var c=u,d=f,l=0;s>l;l++){var p=r[h+l],g=n[h+l],m=r[h+l+s],b=n[h+l+s],v=c*m-d*b;b=c*b+d*m,m=v,r[h+l]=p+m,n[h+l]=g+b,r[h+l+s]=p-m,n[h+l+s]=g-b,l!==a&&(v=u*c-f*d,d=u*d+f*c,c=v)}},d.prototype.guessLen13b=function(e,t){var r=1|Math.max(t,e),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<=r))for(var n=0;r/2>n;n++){var i=e[n];e[n]=e[r-n-1],e[r-n-1]=i,i=t[n],t[n]=-t[r-n-1],t[r-n-1]=-i}},d.prototype.normalize13b=function(e,t){for(var r=0,n=0;t/2>n;n++){var i=8192*Math.round(e[2*n+1]/t)+Math.round(e[2*n]/t)+r;e[n]=67108863&i,r=67108864>i?0:i/67108864|0}return e},d.prototype.convert13b=function(e,t,r,i){for(var o=0,s=0;t>s;s++)o+=0|e[s],r[2*s]=8191&o,o>>>=13,r[2*s+1]=8191&o,o>>>=13;for(s=2*t;i>s;++s)r[s]=0;n(0===o),n(0===(-8192&o))},d.prototype.stub=function(e){for(var t=new Array(e),r=0;e>r;r++)t[r]=0;return t},d.prototype.mulp=function(e,t,r){var n=2*this.guessLen13b(e.length,t.length),i=this.makeRBT(n),o=this.stub(n),s=new Array(n),a=new Array(n),u=new Array(n),f=new Array(n),h=new Array(n),c=new Array(n),d=r.words;d.length=n,this.convert13b(e.words,e.length,s,n),this.convert13b(t.words,t.length,f,n),this.transform(s,o,a,u,n,i),this.transform(f,o,h,c,n,i);for(var l=0;n>l;l++){var p=a[l]*h[l]-u[l]*c[l];u[l]=a[l]*c[l]+u[l]*h[l],a[l]=p}return this.conjugate(a,u,n),this.transform(a,u,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=e.negative^t.negative,r.length=e.length+t.length,r.strip()},o.prototype.mul=function(e){var t=new o(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},o.prototype.mulf=function(e){var t=new o(null);return t.words=new Array(this.length+e.length),c(this,e,t)},o.prototype.imul=function(e){return this.clone().mulTo(e,this)},o.prototype.imuln=function(e){n("number"==typeof e),n(67108864>e);for(var t=0,r=0;r>=26,t+=i/67108864|0,t+=o>>>26,this.words[r]=67108863&o}return 0!==t&&(this.words[r]=t,this.length++),this},o.prototype.muln=function(e){return this.clone().imuln(e)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(e){var t=u(e);if(0===t.length)return new o(1);for(var r=this,n=0;n=0);var t,r=e%26,i=(e-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var s=0;for(t=0;t>>26-r}s&&(this.words[t]=s,this.length++)}if(0!==i){for(t=this.length-1;t>=0;t--)this.words[t+i]=this.words[t];for(t=0;i>t;t++)this.words[t]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(e){return n(0===this.negative),this.iushln(e)},o.prototype.iushrn=function(e,t,r){n("number"==typeof e&&e>=0);var i;i=t?(t-t%26)/26:0;var o=e%26,s=Math.min((e-o)/26,this.length),a=67108863^67108863>>>o<f;f++)u.words[f]=this.words[f];u.length=s}if(0===s);else if(this.length>s)for(this.length-=s,f=0;f=0&&(0!==h||f>=i);f--){var c=0|this.words[f];this.words[f]=h<<26-o|c>>>o,h=c&a}return u&&0!==h&&(u.words[u.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(e,t,r){return n(0===this.negative),this.iushrn(e,t,r)},o.prototype.shln=function(e){return this.clone().ishln(e)},o.prototype.ushln=function(e){return this.clone().iushln(e)},o.prototype.shrn=function(e){return this.clone().ishrn(e)},o.prototype.ushrn=function(e){return this.clone().iushrn(e)},o.prototype.testn=function(e){n("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,i=1<=0);var t=e%26,r=(e-t)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var i=67108863^67108863>>>t<e),0>e?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},o.prototype.isubn=function(e){if(n("number"==typeof e),n(67108864>e),0>e)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(f/67108864|0),this.words[i+r]=67108863&a}for(;i>26,this.words[i+r]=67108863&a;if(0===u)return this.strip();for(n(-1===u),u=0,i=0;i>26,this.words[i]=67108863&a;return this.negative=1,this.strip()},o.prototype._wordDiv=function(e,t){var r=this.length-e.length,n=this.clone(),i=e,s=0|i.words[i.length-1],a=this._countBits(s);r=26-a,0!==r&&(i=i.ushln(r),n.iushln(r),s=0|i.words[i.length-1]);var u,f=n.length-i.length;if("mod"!==t){u=new o(null),u.length=f+1,u.words=new Array(u.length);for(var h=0;h=0;d--){var l=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(l=Math.min(l/s|0,67108863),n._ishlnsubmul(i,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);u&&(u.words[d]=l)}return u&&u.strip(),n.strip(),"div"!==t&&0!==r&&n.iushrn(r),{div:u||null,mod:n}},o.prototype.divmod=function(e,t,r){if(n(!e.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var i,s,a;return 0!==this.negative&&0===e.negative?(a=this.neg().divmod(e,t),"mod"!==t&&(i=a.div.neg()),"div"!==t&&(s=a.mod.neg(),r&&0!==s.negative&&s.iadd(e)),{div:i,mod:s}):0===this.negative&&0!==e.negative?(a=this.divmod(e.neg(),t),"mod"!==t&&(i=a.div.neg()),{div:i,mod:a.mod}):0!==(this.negative&e.negative)?(a=this.neg().divmod(e.neg(),t),"div"!==t&&(s=a.mod.neg(),r&&0!==s.negative&&s.isub(e)),{div:a.div,mod:s}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,t)},o.prototype.div=function(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),i=e.andln(1),o=r.cmp(n);return 0>o||1===i&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},o.prototype.modn=function(e){n(67108863>=e);for(var t=(1<<26)%e,r=0,i=this.length-1;i>=0;i--)r=(t*r+(0|this.words[i]))%e;return r},o.prototype.idivn=function(e){n(67108863>=e);for(var t=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*t;this.words[r]=i/e|0,t=i%e}return this.strip()},o.prototype.divn=function(e){return this.clone().idivn(e)},o.prototype.egcd=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i=new o(1),s=new o(0),a=new o(0),u=new o(1),f=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++f;for(var h=r.clone(),c=t.clone();!t.isZero();){for(var d=0,l=1;0===(t.words[0]&l)&&26>d;++d,l<<=1);if(d>0)for(t.iushrn(d);d-- >0;)(i.isOdd()||s.isOdd())&&(i.iadd(h),s.isub(c)),i.iushrn(1),s.iushrn(1);for(var p=0,g=1;0===(r.words[0]&g)&&26>p;++p,g<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(a.isOdd()||u.isOdd())&&(a.iadd(h),u.isub(c)),a.iushrn(1),u.iushrn(1);t.cmp(r)>=0?(t.isub(r),i.isub(a),s.isub(u)):(r.isub(t),a.isub(i),u.isub(s))}return{a:a,b:u,gcd:r.iushln(f)}},o.prototype._invmp=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i=new o(1),s=new o(0),a=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var u=0,f=1;0===(t.words[0]&f)&&26>u;++u,f<<=1);if(u>0)for(t.iushrn(u);u-- >0;)i.isOdd()&&i.iadd(a),i.iushrn(1);for(var h=0,c=1;0===(r.words[0]&c)&&26>h;++h,c<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(a),s.iushrn(1);t.cmp(r)>=0?(t.isub(r),i.isub(s)):(r.isub(t),s.isub(i))}var d;return d=0===t.cmpn(1)?i:s,d.cmpn(0)<0&&d.iadd(e),d},o.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=t.cmp(r);if(0>i){var o=t;t=r,r=o}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},o.prototype.invm=function(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(e){return this.words[0]&e},o.prototype.bincn=function(e){n("number"==typeof e);var t=e%26,r=(e-t)/26,i=1<o;o++)this.words[o]=0;return this.words[r]|=i,this.length=r+1,this}var s=i;for(o=r;0!==s&&o>>26,a&=67108863,this.words[o]=a}return 0!==s&&(this.words[o]=s,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(e){var t=0>e;if(0!==this.negative&&!t)return-1;if(0===this.negative&&t)return 1;this.strip();var r;if(this.length>1)r=1;else{t&&(e=-e),n(67108863>=e,"Number is too big");var i=0|this.words[0];r=i===e?0:e>i?-1:1}return 0!==this.negative&&(r=-r),r},o.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?-t:t},o.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|e.words[r];if(n!==i){i>n?t=-1:n>i&&(t=1);break}}return t},o.prototype.gtn=function(e){return 1===this.cmpn(e)},o.prototype.gt=function(e){return 1===this.cmp(e)},o.prototype.gten=function(e){return this.cmpn(e)>=0},o.prototype.gte=function(e){return this.cmp(e)>=0},o.prototype.ltn=function(e){return-1===this.cmpn(e)},o.prototype.lt=function(e){return-1===this.cmp(e)},o.prototype.lten=function(e){return this.cmpn(e)<=0},o.prototype.lte=function(e){return this.cmp(e)<=0},o.prototype.eqn=function(e){return 0===this.cmpn(e)},o.prototype.eq=function(e){return 0===this.cmp(e)},o.red=function(e){return new v(e)},o.prototype.toRed=function(e){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(e){return this.red=e,this},o.prototype.forceRed=function(e){return n(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function(e){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function(e){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function(e){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function(e){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function(e){return n(this.red,"redShl works only with red numbers"),this.red.ushl(this,e)},o.prototype.redMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(e){return n(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var k={k256:null,p224:null,p192:null,p25519:null};l.prototype._tmp=function(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},l.prototype.ireduce=function(e){var t,r=e;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),t=r.bitLength();while(t>this.n);var n=t0?r.isub(this.p):r.strip(),r},l.prototype.split=function(e,t){e.iushrn(this.n,0,t)},l.prototype.imulK=function(e){return e.imul(this.k)},i(p,l),p.prototype.split=function(e,t){for(var r=4194303,n=Math.min(e.length,9),i=0;n>i;i++)t.words[i]=e.words[i];if(t.length=n,e.length<=9)return e.words[0]=0,void(e.length=1);var o=e.words[9];for(t.words[t.length++]=o&r,i=10;i>>22,o=s}o>>>=22,e.words[i-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},p.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},o._prime=function x(e){if(k[e])return k[e];var x;if("k256"===e)x=new p;else if("p224"===e)x=new g;else if("p192"===e)x=new m;else{if("p25519"!==e)throw new Error("Unknown prime "+e);x=new b}return k[e]=x,x},v.prototype._verify1=function(e){n(0===e.negative,"red works only with positives"),n(e.red,"red works only with red numbers")},v.prototype._verify2=function(e,t){n(0===(e.negative|t.negative),"red works only with positives"),n(e.red&&e.red===t.red,"red works only with red numbers")},v.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},v.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},v.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},v.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},v.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},v.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},v.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},v.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},v.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},v.prototype.isqr=function(e){return this.imul(e,e.clone())},v.prototype.sqr=function(e){return this.mul(e,e)},v.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(n(t%2===1),3===t){var r=this.m.add(new o(1)).iushrn(2);return this.pow(e,r)}for(var i=this.m.subn(1),s=0;!i.isZero()&&0===i.andln(1);)s++,i.iushrn(1);n(!i.isZero());var a=new o(1).toRed(this),u=a.redNeg(),f=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new o(2*h*h).toRed(this);0!==this.pow(h,f).cmp(u);)h.redIAdd(u);for(var c=this.pow(h,i),d=this.pow(e,i.addn(1).iushrn(1)),l=this.pow(e,i),p=s;0!==l.cmp(a);){for(var g=l,m=0;0!==g.cmp(a);m++)g=g.redSqr();n(p>m);var b=this.pow(c,new o(1).iushln(p-m-1));d=d.redMul(b),c=b.redSqr(),l=l.redMul(c),p=m}return d},v.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},v.prototype.pow=function(e,t){if(t.isZero())return new o(1);if(0===t.cmpn(1))return e.clone();var r=4,n=new Array(1<=0;i--){for(var h=t.words[i],c=f-1;c>=0;c--){var d=h>>c&1;s!==n[0]&&(s=this.sqr(s)),0!==d||0!==a?(a<<=1,a|=d,u++,(u===r||0===i&&0===c)&&(s=this.mul(s,n[a]),u=0,a=0)):u=0}f=26}return s},v.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},v.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},o.mont=function(e){return new y(e)},i(y,v),y.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},y.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},y.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},y.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new o(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),s=i;return i.cmp(this.m)>=0?s=i.isub(this.m):i.cmpn(0)<0&&(s=i.iadd(this.m)),s._forceRed(this)},y.prototype.invm=function(e){var t=this.imod(e._invmp(this.m).mul(this.r2));return t._forceRed(this)}}("undefined"==typeof t||t,this)},{}],121:[function(e,t,r){(function(r){const n=e("js-sha3"),i=[224,256,384,512];var o=function(e){if(void 0!==e&&-1==i.indexOf(e))throw new Error("Unsupported hash length");this.content=[],this.bitcount=e?"keccak_"+e:"keccak_512"};o.prototype.update=function(e){if(r.isBuffer(e))this.content.push(e);else{if("string"!=typeof e)throw new Error("Unsupported argument to update");this.content.push(new r(e))}return this},o.prototype.digest=function(e){var t=n[this.bitcount](r.concat(this.content));if("hex"===e)return t;if("binary"===e||void 0===e)return new r(t,"hex").toString("binary");throw new Error("Unsupported encoding for digest: "+e)},t.exports={SHA3Hash:o}}).call(this,e("buffer").Buffer)},{buffer:147,"js-sha3":229}],122:[function(e,t,r){(function(e){"use strict";r["RSA-SHA224"]=r.sha224WithRSAEncryption={sign:"rsa",hash:"sha224",id:new e("302d300d06096086480165030402040500041c","hex")},r["RSA-SHA256"]=r.sha256WithRSAEncryption={sign:"rsa",hash:"sha256",id:new e("3031300d060960864801650304020105000420","hex")},r["RSA-SHA384"]=r.sha384WithRSAEncryption={sign:"rsa",hash:"sha384",id:new e("3041300d060960864801650304020205000430","hex")},r["RSA-SHA512"]=r.sha512WithRSAEncryption={sign:"rsa",hash:"sha512",id:new e("3051300d060960864801650304020305000440","hex")},r["RSA-SHA1"]={sign:"rsa",hash:"sha1",id:new e("3021300906052b0e03021a05000414","hex")},r["ecdsa-with-SHA1"]={sign:"ecdsa",hash:"sha1",id:new e("","hex")},r.DSA=r["DSA-SHA1"]=r["DSA-SHA"]={sign:"dsa",hash:"sha1",id:new e("","hex")},r["DSA-SHA224"]=r["DSA-WITH-SHA224"]={sign:"dsa",hash:"sha224",id:new e("","hex")},r["DSA-SHA256"]=r["DSA-WITH-SHA256"]={sign:"dsa",hash:"sha256",id:new e("","hex")},r["DSA-SHA384"]=r["DSA-WITH-SHA384"]={sign:"dsa",hash:"sha384",id:new e("","hex")},r["DSA-SHA512"]=r["DSA-WITH-SHA512"]={sign:"dsa",hash:"sha512",id:new e("","hex")},r["DSA-RIPEMD160"]={sign:"dsa",hash:"rmd160",id:new e("","hex")},r["RSA-RIPEMD160"]=r.ripemd160WithRSA={sign:"rsa",hash:"rmd160",id:new e("3021300906052b2403020105000414","hex")},r["RSA-MD5"]=r.md5WithRSAEncryption={sign:"rsa",hash:"md5",id:new e("3020300c06082a864886f70d020505000410","hex")}}).call(this,e("buffer").Buffer)},{buffer:147}],123:[function(e,t,r){(function(r){function n(e){c.Writable.call(this);var t=l[e];if(!t)throw new Error("Unknown message digest");this._hashType=t.hash,this._hash=u(t.hash),this._tag=t.id,this._signType=t.sign}function i(e){c.Writable.call(this);var t=l[e];if(!t)throw new Error("Unknown message digest");this._hash=u(t.hash),this._tag=t.id,this._signType=t.sign}function o(e){return new n(e)}function s(e){return new i(e)}var a=e("./algos"),u=e("create-hash"),f=e("inherits"),h=e("./sign"),c=e("stream"),d=e("./verify"),l={};Object.keys(a).forEach(function(e){l[e]=l[e.toLowerCase()]=a[e]}),f(n,c.Writable),n.prototype._write=function(e,t,r){this._hash.update(e),r()},n.prototype.update=function(e,t){return"string"==typeof e&&(e=new r(e,t)),this._hash.update(e),this},n.prototype.sign=function(e,t){this.end();var n=this._hash.digest(),i=h(r.concat([this._tag,n]),e,this._hashType,this._signType);return t?i.toString(t):i},f(i,c.Writable),i.prototype._write=function(e,t,r){this._hash.update(e),r()},i.prototype.update=function(e,t){return"string"==typeof e&&(e=new r(e,t)),this._hash.update(e),this},i.prototype.verify=function(e,t,n){"string"==typeof t&&(t=new r(t,n)),this.end();var i=this._hash.digest();return d(t,r.concat([this._tag,i]),e,this._signType)},t.exports={Sign:o,Verify:s,createSign:o,createVerify:s}}).call(this,e("buffer").Buffer)},{"./algos":122,"./sign":143,"./verify":144,buffer:147,"create-hash":170,inherits:226,stream:291}],124:[function(e,t,r){"use strict";r["1.3.132.0.10"]="secp256k1",r["1.3.132.0.33"]="p224",r["1.2.840.10045.3.1.1"]="p192",r["1.2.840.10045.3.1.7"]="p256",r["1.3.132.0.34"]="p384",r["1.3.132.0.35"]="p521"},{}],125:[function(e,t,r){arguments[4][120][0].apply(r,arguments)},{dup:120}],126:[function(e,t,r){"use strict";var n=r;n.version=e("../package.json").version,n.utils=e("./elliptic/utils"),n.rand=e("brorand"),n.hmacDRBG=e("./elliptic/hmac-drbg"),n.curve=e("./elliptic/curve"),n.curves=e("./elliptic/curves"),n.ec=e("./elliptic/ec"),n.eddsa=e("./elliptic/eddsa")},{"../package.json":142,"./elliptic/curve":129,"./elliptic/curves":132,"./elliptic/ec":133,"./elliptic/eddsa":136,"./elliptic/hmac-drbg":139,"./elliptic/utils":141,brorand:99}],127:[function(e,t,r){"use strict";function n(e,t){this.type=e,this.p=new o(t.p,16),this.red=t.prime?o.red(t.prime):o.mont(this.p),this.zero=new o(0).toRed(this.red),this.one=new o(1).toRed(this.red),this.two=new o(2).toRed(this.red),this.n=t.n&&new o(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4)}function i(e,t){this.curve=e,this.type=t,this.precomputed=null}var o=e("bn.js"),s=e("../../elliptic"),a=s.utils,u=a.getNAF,f=a.getJSF,h=a.assert;t.exports=n,n.prototype.point=function(){throw new Error("Not implemented")},n.prototype.validate=function(){throw new Error("Not implemented")},n.prototype._fixedNafMul=function(e,t){h(e.precomputed);var r=e._getDoubles(),n=u(t,1),i=(1<=s;t--)a=(a<<1)+n[t];o.push(a)}for(var f=this.jpoint(null,null,null),c=this.jpoint(null,null,null),d=i;d>0;d--){for(var s=0;s=0;a--){for(var t=0;a>=0&&0===o[a];a--)t++;if(a>=0&&t++,s=s.dblp(t),0>a)break;var f=o[a];h(0!==f),s="affine"===e.type?f>0?s.mixedAdd(i[f-1>>1]):s.mixedAdd(i[-f-1>>1].neg()):f>0?s.add(i[f-1>>1]):s.add(i[-f-1>>1].neg())}return"affine"===e.type?s.toP():s},n.prototype._wnafMulAdd=function(e,t,r,n){for(var i=this._wnafT1,o=this._wnafT2,s=this._wnafT3,a=0,h=0;n>h;h++){var c=t[h],d=c._getNAFPoints(e);i[h]=d.wnd,o[h]=d.points}for(var h=n-1;h>=1;h-=2){var l=h-1,p=h;if(1===i[l]&&1===i[p]){var g=[t[l],null,null,t[p]];0===t[l].y.cmp(t[p].y)?(g[1]=t[l].add(t[p]),g[2]=t[l].toJ().mixedAdd(t[p].neg())):0===t[l].y.cmp(t[p].y.redNeg())?(g[1]=t[l].toJ().mixedAdd(t[p]),g[2]=t[l].add(t[p].neg())):(g[1]=t[l].toJ().mixedAdd(t[p]),g[2]=t[l].toJ().mixedAdd(t[p].neg()));var m=[-3,-1,-5,-7,0,7,5,1,3],b=f(r[l],r[p]);a=Math.max(b[0].length,a),s[l]=new Array(a),s[p]=new Array(a);for(var v=0;a>v;v++){var y=0|b[0][v],w=0|b[1][v];s[l][v]=m[3*(y+1)+(w+1)],s[p][v]=0,o[l]=g}}else s[l]=u(r[l],i[l]),s[p]=u(r[p],i[p]),a=Math.max(s[l].length,a),a=Math.max(s[p].length,a)}for(var _=this.jpoint(null,null,null),S=this._wnafT4,h=a;h>=0;h--){for(var A=0;h>=0;){for(var I=!0,v=0;n>v;v++)S[v]=0|s[v][h],0!==S[v]&&(I=!1);if(!I)break;A++,h--}if(h>=0&&A++,_=_.dblp(A),0>h)break;for(var v=0;n>v;v++){var c,E=S[v];0!==E&&(E>0?c=o[v][E-1>>1]:0>E&&(c=o[v][-E-1>>1].neg()),_="affine"===c.type?_.mixedAdd(c):_.add(c))}}for(var h=0;n>h;h++)o[h]=null;return _.toP()},n.BasePoint=i,i.prototype.eq=function(){throw new Error("Not implemented")},i.prototype.validate=function(){return this.curve.validate(this)},n.prototype.decodePoint=function(e,t){e=a.toArray(e,t);var r=this.p.byteLength();if(4===e[0]&&e.length-1===2*r)return this.point(e.slice(1,1+r),e.slice(1+r,1+2*r));if((2===e[0]||3===e[0])&&e.length-1===r)return this.pointFromX(e.slice(1,1+r),3===e[0]);throw new Error("Unknown point format")},i.prototype.encodeCompressed=function(e){return this.encode(e,!0)},i.prototype._encode=function(e){var t=this.curve.p.byteLength(),r=this.getX().toArray("be",t);return e?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray("be",t))},i.prototype.encode=function(e,t){ +return a.encode(this._encode(t),e)},i.prototype.precompute=function(e){if(this.precomputed)return this;var t={doubles:null,naf:null,beta:null};return t.naf=this._getNAFPoints(8),t.doubles=this._getDoubles(4,e),t.beta=this._getBeta(),this.precomputed=t,this},i.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var t=this.precomputed.doubles;return t?t.points.length>=Math.ceil((e.bitLength()+1)/t.step):!1},i.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;t>i;i+=e){for(var o=0;e>o;o++)n=n.dbl();r.push(n)}return{step:e,points:r}},i.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var t=[this],r=(1<i;i++)t[i]=t[i-1].add(n);return{wnd:e,points:t}},i.prototype._getBeta=function(){return null},i.prototype.dblp=function(e){for(var t=this,r=0;e>r;r++)t=t.dbl();return t}},{"../../elliptic":126,"bn.js":125}],128:[function(e,t,r){"use strict";function n(e){this.twisted=1!==(0|e.a),this.mOneA=this.twisted&&-1===(0|e.a),this.extended=this.mOneA,f.call(this,"edwards",e),this.a=new a(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new a(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new a(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),h(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|e.c)}function i(e,t,r,n,i){f.BasePoint.call(this,e,"projective"),null===t&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new a(t,16),this.y=new a(r,16),this.z=n?new a(n,16):this.curve.one,this.t=i&&new a(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var o=e("../curve"),s=e("../../elliptic"),a=e("bn.js"),u=e("inherits"),f=o.base,h=s.utils.assert;u(n,f),t.exports=n,n.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},n.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},n.prototype.jpoint=function(e,t,r,n){return this.point(e,t,r,n)},n.prototype.pointFromX=function(e,t){e=new a(e,16),e.red||(e=e.toRed(this.red));var r=e.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),o=n.redMul(i.redInvm()),s=o.redSqrt();if(0!==s.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");var u=s.fromRed().isOdd();return(t&&!u||!t&&u)&&(s=s.redNeg()),this.point(e,s)},n.prototype.pointFromY=function(e,t){e=new a(e,16),e.red||(e=e.toRed(this.red));var r=e.redSqr(),n=r.redSub(this.one),i=r.redMul(this.d).redAdd(this.one),o=n.redMul(i.redInvm());if(0===o.cmp(this.zero)){if(t)throw new Error("invalid point");return this.point(this.zero,e)}var s=o.redSqrt();if(0!==s.redSqr().redSub(o).cmp(this.zero))throw new Error("invalid point");return s.isOdd()!==t&&(s=s.redNeg()),this.point(s,e)},n.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),n=t.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===n.cmp(i)},u(i,f.BasePoint),n.prototype.pointFromJSON=function(e){return i.fromJSON(this,e)},n.prototype.point=function(e,t,r,n){return new i(this,e,t,r,n)},i.fromJSON=function(e,t){return new i(e,t[0],t[1],t[2])},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},i.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(e),i=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),o=n.redAdd(t),s=o.redSub(r),a=n.redSub(t),u=i.redMul(s),f=o.redMul(a),h=i.redMul(a),c=s.redMul(o);return this.curve.point(u,f,c,h)},i.prototype._projDbl=function(){var e,t,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var s=this.curve._mulA(i),a=s.redAdd(o);if(this.zOne)e=n.redSub(i).redSub(o).redMul(a.redSub(this.curve.two)),t=a.redMul(s.redSub(o)),r=a.redSqr().redSub(a).redSub(a);else{var u=this.z.redSqr(),f=a.redSub(u).redISub(u);e=n.redSub(i).redISub(o).redMul(f),t=a.redMul(s.redSub(o)),r=a.redMul(f)}}else{var s=i.redAdd(o),u=this.curve._mulC(this.c.redMul(this.z)).redSqr(),f=s.redSub(u).redSub(u);e=this.curve._mulC(n.redISub(s)).redMul(f),t=this.curve._mulC(s).redMul(i.redISub(o)),r=s.redMul(f)}return this.curve.point(e,t,r)},i.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},i.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),i=this.z.redMul(e.z.redAdd(e.z)),o=r.redSub(t),s=i.redSub(n),a=i.redAdd(n),u=r.redAdd(t),f=o.redMul(s),h=a.redMul(u),c=o.redMul(u),d=s.redMul(a);return this.curve.point(f,h,d,c)},i.prototype._projAdd=function(e){var t,r,n=this.z.redMul(e.z),i=n.redSqr(),o=this.x.redMul(e.x),s=this.y.redMul(e.y),a=this.curve.d.redMul(o).redMul(s),u=i.redSub(a),f=i.redAdd(a),h=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(o).redISub(s),c=n.redMul(u).redMul(h);return this.curve.twisted?(t=n.redMul(f).redMul(s.redSub(this.curve._mulA(o))),r=u.redMul(f)):(t=n.redMul(f).redMul(s.redSub(o)),r=this.curve._mulC(u).redMul(f)),this.curve.point(c,t,r)},i.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},i.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},i.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2)},i.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},i.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()},i.prototype.getY=function(){return this.normalize(),this.y.fromRed()},i.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},i.prototype.toP=i.prototype.normalize,i.prototype.mixedAdd=i.prototype.add},{"../../elliptic":126,"../curve":129,"bn.js":125,inherits:226}],129:[function(e,t,r){arguments[4][61][0].apply(r,arguments)},{"./base":127,"./edwards":128,"./mont":130,"./short":131,dup:61}],130:[function(e,t,r){"use strict";function n(e){u.call(this,"mont",e),this.a=new s(e.a,16).toRed(this.red),this.b=new s(e.b,16).toRed(this.red),this.i4=new s(4).toRed(this.red).redInvm(),this.two=new s(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function i(e,t,r){u.BasePoint.call(this,e,"projective"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new s(t,16),this.z=new s(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var o=e("../curve"),s=e("bn.js"),a=e("inherits"),u=o.base,f=e("../../elliptic"),h=f.utils;a(n,u),t.exports=n,n.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),n=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t),i=n.redSqrt();return 0===i.redSqr().cmp(n)},a(i,u.BasePoint),n.prototype.decodePoint=function(e,t){return this.point(h.toArray(e,t),1)},n.prototype.point=function(e,t){return new i(this,e,t)},n.prototype.pointFromJSON=function(e){return i.fromJSON(this,e)},i.prototype.precompute=function(){},i.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},i.fromJSON=function(e,t){return new i(e,t[0],t[1]||e.one)},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},i.prototype.dbl=function(){var e=this.x.redAdd(this.z),t=e.redSqr(),r=this.x.redSub(this.z),n=r.redSqr(),i=t.redSub(n),o=t.redMul(n),s=i.redMul(n.redAdd(this.curve.a24.redMul(i)));return this.curve.point(o,s)},i.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),i=e.x.redAdd(e.z),o=e.x.redSub(e.z),s=o.redMul(r),a=i.redMul(n),u=t.z.redMul(s.redAdd(a).redSqr()),f=t.x.redMul(s.redISub(a).redSqr());return this.curve.point(u,f)},i.prototype.mul=function(e){for(var t=e.clone(),r=this,n=this.curve.point(null,null),i=this,o=[];0!==t.cmpn(0);t.iushrn(1))o.push(t.andln(1));for(var s=o.length-1;s>=0;s--)0===o[s]?(r=r.diffAdd(n,i),n=n.dbl()):(n=r.diffAdd(n,i),r=r.dbl());return n},i.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},i.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},i.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../../elliptic":126,"../curve":129,"bn.js":125,inherits:226}],131:[function(e,t,r){"use strict";function n(e){h.call(this,"short",e),this.a=new u(e.a,16).toRed(this.red),this.b=new u(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function i(e,t,r,n){h.BasePoint.call(this,e,"affine"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new u(t,16),this.y=new u(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function o(e,t,r,n){h.BasePoint.call(this,e,"jacobian"),null===t&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new u(0)):(this.x=new u(t,16),this.y=new u(r,16),this.z=new u(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var s=e("../curve"),a=e("../../elliptic"),u=e("bn.js"),f=e("inherits"),h=s.base,c=a.utils.assert;f(n,h),t.exports=n,n.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new u(e.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);t=n[0].cmp(n[1])<0?n[0]:n[1],t=t.toRed(this.red)}if(e.lambda)r=new u(e.lambda,16);else{var i=this._getEndoRoots(this.n);0===this.g.mul(i[0]).x.cmp(this.g.x.redMul(t))?r=i[0]:(r=i[1],c(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}var o;return o=e.basis?e.basis.map(function(e){return{a:new u(e.a,16),b:new u(e.b,16)}}):this._getEndoBasis(r),{beta:t,lambda:r,basis:o}}},n.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:u.mont(e),r=new u(2).toRed(t).redInvm(),n=r.redNeg(),i=new u(3).toRed(t).redNeg().redSqrt().redMul(r),o=n.redAdd(i).fromRed(),s=n.redSub(i).fromRed();return[o,s]},n.prototype._getEndoBasis=function(e){for(var t,r,n,i,o,s,a,f,h,c=this.n.ushrn(Math.floor(this.n.bitLength()/2)),d=e,l=this.n.clone(),p=new u(1),g=new u(0),m=new u(0),b=new u(1),v=0;0!==d.cmpn(0);){var y=l.div(d);f=l.sub(y.mul(d)),h=m.sub(y.mul(p));var w=b.sub(y.mul(g));if(!n&&f.cmp(c)<0)t=a.neg(),r=p,n=f.neg(),i=h;else if(n&&2===++v)break;a=f,l=d,d=f,m=p,p=h,b=g,g=w}o=f.neg(),s=h;var _=n.sqr().add(i.sqr()),S=o.sqr().add(s.sqr());return S.cmp(_)>=0&&(o=t,s=r),n.negative&&(n=n.neg(),i=i.neg()),o.negative&&(o=o.neg(),s=s.neg()),[{a:n,b:i},{a:o,b:s}]},n.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],n=t[1],i=n.b.mul(e).divRound(this.n),o=r.b.neg().mul(e).divRound(this.n),s=i.mul(r.a),a=o.mul(n.a),u=i.mul(r.b),f=o.mul(n.b),h=e.sub(s).sub(a),c=u.add(f).neg();return{k1:h,k2:c}},n.prototype.pointFromX=function(e,t){e=new u(e,16),e.red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var i=n.fromRed().isOdd();return(t&&!i||!t&&i)&&(n=n.redNeg()),this.point(e,n)},n.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,n=this.a.redMul(t),i=t.redSqr().redMul(t).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},n.prototype._endoWnafMulAdd=function(e,t){for(var r=this._endoWnafT1,n=this._endoWnafT2,i=0;if;f++)r[f]=null,n[f]=null;return u},f(i,h.BasePoint),n.prototype.point=function(e,t,r){return new i(this,e,t,r)},n.prototype.pointFromJSON=function(e,t){return i.fromJSON(this,e,t)},i.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var t=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var r=this.curve,n=function(e){return r.point(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(n)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(n)}}}return t}},i.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},i.fromJSON=function(e,t,r){function n(t){return e.point(t[0],t[1],r)}"string"==typeof t&&(t=JSON.parse(t));var i=e.point(t[0],t[1],r);if(!t[2])return i;var o=t[2];return i.precomputed={beta:null,doubles:o.doubles&&{step:o.doubles.step,points:[i].concat(o.doubles.points.map(n))},naf:o.naf&&{wnd:o.naf.wnd,points:[i].concat(o.naf.points.map(n))}},i},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return this.inf},i.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),n=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},i.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),n=e.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),s=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,s)},i.prototype.getX=function(){return this.x.fromRed()},i.prototype.getY=function(){return this.y.fromRed()},i.prototype.mul=function(e){return e=new u(e,16),this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},i.prototype.mulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},i.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},i.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,n=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return t},i.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var e=this.curve.jpoint(this.x,this.y,this.curve.one);return e},f(o,h.BasePoint),n.prototype.jpoint=function(e,t,r){return new o(this,e,t,r)},o.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),n=this.y.redMul(t).redMul(e);return this.curve.point(r,n)},o.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},o.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(t),i=e.x.redMul(r),o=this.y.redMul(t.redMul(e.z)),s=e.y.redMul(r.redMul(this.z)),a=n.redSub(i),u=o.redSub(s);if(0===a.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=a.redSqr(),h=f.redMul(a),c=n.redMul(f),d=u.redSqr().redIAdd(h).redISub(c).redISub(c),l=u.redMul(c.redISub(d)).redISub(o.redMul(h)),p=this.z.redMul(e.z).redMul(a);return this.curve.jpoint(d,l,p)},o.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,n=e.x.redMul(t),i=this.y,o=e.y.redMul(t).redMul(this.z),s=r.redSub(n),a=i.redSub(o);if(0===s.cmpn(0))return 0!==a.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=s.redSqr(),f=u.redMul(s),h=r.redMul(u),c=a.redSqr().redIAdd(f).redISub(h).redISub(h),d=a.redMul(h.redISub(c)).redISub(i.redMul(f)),l=this.z.redMul(s);return this.curve.jpoint(c,d,l)},o.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;e>r;r++)t=t.dbl();return t}for(var n=this.curve.a,i=this.curve.tinv,o=this.x,s=this.y,a=this.z,u=a.redSqr().redSqr(),f=s.redAdd(s),r=0;e>r;r++){var h=o.redSqr(),c=f.redSqr(),d=c.redSqr(),l=h.redAdd(h).redIAdd(h).redIAdd(n.redMul(u)),p=o.redMul(c),g=l.redSqr().redISub(p.redAdd(p)),m=p.redISub(g),b=l.redMul(m);b=b.redIAdd(b).redISub(d);var v=f.redMul(a);e>r+1&&(u=u.redMul(d)),o=g,a=v,f=b}return this.curve.jpoint(o,f.redMul(i),a)},o.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},o.prototype._zeroDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),s=this.x.redAdd(i).redSqr().redISub(n).redISub(o);s=s.redIAdd(s);var a=n.redAdd(n).redIAdd(n),u=a.redSqr().redISub(s).redISub(s),f=o.redIAdd(o);f=f.redIAdd(f),f=f.redIAdd(f),e=u,t=a.redMul(s.redISub(u)).redISub(f),r=this.y.redAdd(this.y)}else{var h=this.x.redSqr(),c=this.y.redSqr(),d=c.redSqr(),l=this.x.redAdd(c).redSqr().redISub(h).redISub(d);l=l.redIAdd(l);var p=h.redAdd(h).redIAdd(h),g=p.redSqr(),m=d.redIAdd(d);m=m.redIAdd(m),m=m.redIAdd(m),e=g.redISub(l).redISub(l),t=p.redMul(l.redISub(e)).redISub(m),r=this.y.redMul(this.z),r=r.redIAdd(r)}return this.curve.jpoint(e,t,r)},o.prototype._threeDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),s=this.x.redAdd(i).redSqr().redISub(n).redISub(o);s=s.redIAdd(s);var a=n.redAdd(n).redIAdd(n).redIAdd(this.curve.a),u=a.redSqr().redISub(s).redISub(s);e=u;var f=o.redIAdd(o);f=f.redIAdd(f),f=f.redIAdd(f),t=a.redMul(s.redISub(u)).redISub(f),r=this.y.redAdd(this.y)}else{var h=this.z.redSqr(),c=this.y.redSqr(),d=this.x.redMul(c),l=this.x.redSub(h).redMul(this.x.redAdd(h));l=l.redAdd(l).redIAdd(l);var p=d.redIAdd(d);p=p.redIAdd(p);var g=p.redAdd(p);e=l.redSqr().redISub(g),r=this.y.redAdd(this.z).redSqr().redISub(c).redISub(h);var m=c.redSqr();m=m.redIAdd(m),m=m.redIAdd(m),m=m.redIAdd(m),t=l.redMul(p.redISub(e)).redISub(m)}return this.curve.jpoint(e,t,r)},o.prototype._dbl=function(){var e=this.curve.a,t=this.x,r=this.y,n=this.z,i=n.redSqr().redSqr(),o=t.redSqr(),s=r.redSqr(),a=o.redAdd(o).redIAdd(o).redIAdd(e.redMul(i)),u=t.redAdd(t);u=u.redIAdd(u);var f=u.redMul(s),h=a.redSqr().redISub(f.redAdd(f)),c=f.redISub(h),d=s.redSqr();d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=a.redMul(c).redISub(d),p=r.redAdd(r).redMul(n);return this.curve.jpoint(h,l,p)},o.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr(),n=t.redSqr(),i=e.redAdd(e).redIAdd(e),o=i.redSqr(),s=this.x.redAdd(t).redSqr().redISub(e).redISub(n);s=s.redIAdd(s),s=s.redAdd(s).redIAdd(s),s=s.redISub(o);var a=s.redSqr(),u=n.redIAdd(n);u=u.redIAdd(u),u=u.redIAdd(u),u=u.redIAdd(u);var f=i.redIAdd(s).redSqr().redISub(o).redISub(a).redISub(u),h=t.redMul(f);h=h.redIAdd(h),h=h.redIAdd(h);var c=this.x.redMul(a).redISub(h);c=c.redIAdd(c),c=c.redIAdd(c);var d=this.y.redMul(f.redMul(u.redISub(f)).redISub(s.redMul(a)));d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=this.z.redAdd(s).redSqr().redISub(r).redISub(a);return this.curve.jpoint(c,d,l)},o.prototype.mul=function(e,t){return e=new u(e,t),this.curve._wnafMul(this,e)},o.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;var n=t.redMul(this.z),i=r.redMul(e.z);return 0===this.y.redMul(i).redISub(e.y.redMul(n)).cmpn(0)},o.prototype.inspect=function(){return this.isInfinity()?"":""},o.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../../elliptic":126,"../curve":129,"bn.js":125,inherits:226}],132:[function(e,t,r){"use strict";function n(e){"short"===e.type?this.curve=new a.curve["short"](e):"edwards"===e.type?this.curve=new a.curve.edwards(e):this.curve=new a.curve.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,u(this.g.validate(),"Invalid curve"),u(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function i(e,t){Object.defineProperty(o,e,{configurable:!0,enumerable:!0,get:function(){var r=new n(t);return Object.defineProperty(o,e,{configurable:!0,enumerable:!0,value:r}),r}})}var o=r,s=e("hash.js"),a=e("../elliptic"),u=a.utils.assert;o.PresetCurve=n,i("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:s.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),i("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:s.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),i("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:s.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),i("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:s.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),i("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:s.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),i("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"0",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:s.sha256,gRed:!1,g:["9"]}),i("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:s.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var f;try{f=e("./precomputed/secp256k1")}catch(h){f=void 0}i("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:s.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",f]})},{"../elliptic":126,"./precomputed/secp256k1":140,"hash.js":219}],133:[function(e,t,r){"use strict";function n(e){return this instanceof n?("string"==typeof e&&(a(o.curves.hasOwnProperty(e),"Unknown curve "+e),e=o.curves[e]),e instanceof o.curves.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),void(this.hash=e.hash||e.curve.hash)):new n(e)}var i=e("bn.js"),o=e("../../elliptic"),s=o.utils,a=s.assert,u=e("./key"),f=e("./signature");t.exports=n,n.prototype.keyPair=function(e){return new u(this,e)},n.prototype.keyFromPrivate=function(e,t){return u.fromPrivate(this,e,t)},n.prototype.keyFromPublic=function(e,t){return u.fromPublic(this,e,t)},n.prototype.genKeyPair=function(e){e||(e={});for(var t=new o.hmacDRBG({hash:this.hash,pers:e.pers,entropy:e.entropy||o.rand(this.hash.hmacStrength),nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var s=new i(t.generate(r));if(!(s.cmp(n)>0))return s.iaddn(1),this.keyFromPrivate(s)}},n.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.ushrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},n.prototype.sign=function(e,t,r,n){"object"==typeof r&&(n=r,r=null),n||(n={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new i(e,16));for(var s=this.n.byteLength(),a=t.getPrivate().toArray("be",s),u=e.toArray("be",s),h=new o.hmacDRBG({hash:this.hash,entropy:a,nonce:u,pers:n.pers,persEnc:n.persEnc}),c=this.n.sub(new i(1)),d=0;!0;d++){var l=n.k?n.k(d):new i(h.generate(this.n.byteLength()));if(l=this._truncateToN(l,!0),!(l.cmpn(1)<=0||l.cmp(c)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var g=p.getX(),m=g.umod(this.n);if(0!==m.cmpn(0)){var b=l.invm(this.n).mul(m.mul(t.getPrivate()).iadd(e));if(b=b.umod(this.n),0!==b.cmpn(0)){var v=(p.getY().isOdd()?1:0)|(0!==g.cmp(m)?2:0);return n.canonical&&b.cmp(this.nh)>0&&(b=this.n.sub(b),v^=1),new f({r:m,s:b,recoveryParam:v})}}}}}},n.prototype.verify=function(e,t,r,n){e=this._truncateToN(new i(e,16)),r=this.keyFromPublic(r,n),t=new f(t,"hex");var o=t.r,s=t.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return!1;var a=s.invm(this.n),u=a.mul(e).umod(this.n),h=a.mul(o).umod(this.n),c=this.g.mulAdd(u,r.getPublic(),h);return c.isInfinity()?!1:0===c.getX().umod(this.n).cmp(o)},n.prototype.recoverPubKey=function(e,t,r,n){a((3&r)===r,"The recovery param is more than two bits"),t=new f(t,n);var o=this.n,s=new i(e),u=t.r,h=t.s,c=1&r,d=r>>1;if(u.cmp(this.curve.p.umod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");u=d?this.curve.pointFromX(u.add(this.curve.n),c):this.curve.pointFromX(u,c);var l=o.sub(s),p=t.r.invm(o);return this.g.mulAdd(l,u,h).mul(p)},n.prototype.getKeyRecoveryParam=function(e,t,r,n){if(t=new f(t,n),null!==t.recoveryParam)return t.recoveryParam;for(var i=0;4>i;i++){var o;try{o=this.recoverPubKey(e,t,i)}catch(e){continue}if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},{"../../elliptic":126,"./key":134,"./signature":135,"bn.js":125}],134:[function(e,t,r){"use strict";function n(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}var i=e("bn.js");t.exports=n,n.fromPublic=function(e,t,r){return t instanceof n?t:new n(e,{pub:t,pubEnc:r})},n.fromPrivate=function(e,t,r){return t instanceof n?t:new n(e,{priv:t,privEnc:r})},n.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},n.prototype.getPublic=function(e,t){return"string"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},n.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},n.prototype._importPrivate=function(e,t){this.priv=new i(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},n.prototype._importPublic=function(e,t){return e.x||e.y?void(this.pub=this.ec.curve.point(e.x,e.y)):void(this.pub=this.ec.curve.decodePoint(e,t))},n.prototype.derive=function(e){return e.mul(this.priv).getX()},n.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},n.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},n.prototype.inspect=function(){return""}},{"bn.js":125}],135:[function(e,t,r){"use strict";function n(e,t){return e instanceof n?e:void(this._importDER(e,t)||(c(e.r&&e.s,"Signature without r or s"),this.r=new u(e.r,16),this.s=new u(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam))}function i(){this.place=0}function o(e,t){var r=e[t.place++];if(!(128&r))return r;for(var n=15&r,i=0,o=0,s=t.place;n>o;o++, +s++)i<<=8,i|=e[s];return t.place=s,i}function s(e){for(var t=0,r=e.length-1;!e[t]&&!(128&e[t+1])&&r>t;)t++;return 0===t?e:e.slice(t)}function a(e,t){if(128>t)return void e.push(t);var r=1+(Math.log(t)/Math.LN2>>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}var u=e("bn.js"),f=e("../../elliptic"),h=f.utils,c=h.assert;t.exports=n,n.prototype._importDER=function(e,t){e=h.toArray(e,t);var r=new i;if(48!==e[r.place++])return!1;var n=o(e,r);if(n+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var s=o(e,r),a=e.slice(r.place,s+r.place);if(r.place+=s,2!==e[r.place++])return!1;var f=o(e,r);if(e.length!==f+r.place)return!1;var c=e.slice(r.place,f+r.place);return 0===a[0]&&128&a[1]&&(a=a.slice(1)),0===c[0]&&128&c[1]&&(c=c.slice(1)),this.r=new u(a),this.s=new u(c),this.recoveryParam=null,!0},n.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=s(t),r=s(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];a(n,t.length),n=n.concat(t),n.push(2),a(n,r.length);var i=n.concat(r),o=[48];return a(o,i.length),o=o.concat(i),h.encode(o,e)}},{"../../elliptic":126,"bn.js":125}],136:[function(e,t,r){"use strict";function n(e){if(a("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof n))return new n(e);var e=o.curves[e].curve;this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=i.sha512}var i=e("hash.js"),o=e("../../elliptic"),s=o.utils,a=s.assert,u=s.parseBytes,f=e("./key"),h=e("./signature");t.exports=n,n.prototype.sign=function(e,t){e=u(e);var r=this.keyFromSecret(t),n=this.hashInt(r.messagePrefix(),e),i=this.g.mul(n),o=this.encodePoint(i),s=this.hashInt(o,r.pubBytes(),e).mul(r.priv()),a=n.add(s).umod(this.curve.n);return this.makeSignature({R:i,S:a,Rencoded:o})},n.prototype.verify=function(e,t,r){e=u(e),t=this.makeSignature(t);var n=this.keyFromPublic(r),i=this.hashInt(t.Rencoded(),n.pubBytes(),e),o=this.g.mul(t.S()),s=t.R().add(n.pub().mul(i));return s.eq(o)},n.prototype.hashInt=function(){for(var e=this.hash(),t=0;t>8,s=255&i;o?r.push(o,s):r.push(s)}return r}function i(e){return 1===e.length?"0"+e:e}function o(e){for(var t="",r=0;r=0;){var o;if(i.isOdd()){var s=i.andln(n-1);o=s>(n>>1)-1?(n>>1)-s:s,i.isubn(o)}else o=0;r.push(o);for(var a=0!==i.cmpn(0)&&0===i.andln(n-1)?t+1:1,u=1;a>u;u++)r.push(0);i.iushrn(a)}return r}function a(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var n=0,i=0;e.cmpn(-n)>0||t.cmpn(-i)>0;){var o=e.andln(3)+n&3,s=t.andln(3)+i&3;3===o&&(o=-1),3===s&&(s=-1);var a;if(0===(1&o))a=0;else{var u=e.andln(7)+n&7;a=3!==u&&5!==u||2!==s?o:-o}r[0].push(a);var f;if(0===(1&s))f=0;else{var u=t.andln(7)+i&7;f=3!==u&&5!==u||2!==o?s:-s}r[1].push(f),2*n===a+1&&(n=1-n),2*i===f+1&&(i=1-i),e.iushrn(1),t.iushrn(1)}return r}function u(e,t){var r=t.name,n="_"+r;e.prototype[r]=function(){return void 0!==this[n]?this[n]:this[n]=t.call(this)}}function f(e){return"string"==typeof e?c.toArray(e,"hex"):e}function h(e){return new d(e,"hex","le")}var c=r,d=e("bn.js");c.assert=function(e,t){if(!e)throw new Error(t||"Assertion failed")},c.toArray=n,c.zero2=i,c.toHex=o,c.encode=function(e,t){return"hex"===t?o(e):e},c.getNAF=s,c.getJSF=a,c.cachedProperty=u,c.parseBytes=f,c.intFromLE=h},{"bn.js":125}],142:[function(e,t,r){t.exports={_args:[["elliptic@^6.0.0","/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/browserify-sign"]],_from:"elliptic@>=6.0.0 <7.0.0",_id:"elliptic@6.2.3",_inCache:!0,_installable:!0,_location:"/browserify-sign/elliptic",_nodeVersion:"5.4.1",_npmUser:{email:"fedor@indutny.com",name:"indutny"},_npmVersion:"3.3.12",_phantomChildren:{},_requested:{name:"elliptic",raw:"elliptic@^6.0.0",rawSpec:"^6.0.0",scope:null,spec:">=6.0.0 <7.0.0",type:"range"},_requiredBy:["/browserify-sign"],_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz",_shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",_shrinkwrap:null,_spec:"elliptic@^6.0.0",_where:"/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/browserify-sign",author:{email:"fedor@indutny.com",name:"Fedor Indutny"},bugs:{url:"https://github.com/indutny/elliptic/issues"},dependencies:{"bn.js":"^4.0.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},description:"EC cryptography",devDependencies:{coveralls:"^2.11.3",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},directories:{},dist:{shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",tarball:"http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz"},files:["lib"],gitHead:"c32f20b22b420eb6af3c6dda28963deb7facf823",homepage:"https://github.com/indutny/elliptic",keywords:["Cryptography","EC","Elliptic","curve"],license:"MIT",main:"lib/elliptic.js",maintainers:[{name:"indutny",email:"fedor@indutny.com"}],name:"elliptic",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},scripts:{coverage:"npm run unit --coverage",coveralls:"npm run coverage && cat ./coverage/lcov.info | coveralls",jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",lint:"npm run jscs && npm run jshint",test:"npm run lint && npm run unit",unit:"istanbul test _mocha --reporter=spec test/*-test.js"},version:"6.2.3"}},{}],143:[function(e,t,r){(function(r){function n(e,t,r,n){var s=m(t);if(s.curve){if("ecdsa"!==n)throw new Error("wrong private key type");return i(e,s)}if("dsa"===s.type){if("dsa"!==n)throw new Error("wrong private key type");return o(e,s,r)}if("rsa"!==n)throw new Error("wrong private key type");for(var a=s.modulus.byteLength(),u=[0,1];e.length+u.length+10&&r.ishrn(n),r}function f(e,t){e=u(e,t),e=e.mod(t);var n=new r(e.toArray());if(n.lengthd&&(g=1),u=Math.min(e.length,c.length),e.length!==c.length&&(g=1),l=-1;++l=t)throw new Error("invalid sig")}var a=e("./curves"),u=e("elliptic"),f=e("parse-asn1"),h=e("bn.js"),c=u.ec;t.exports=n}).call(this,e("buffer").Buffer)},{"./curves":124,"bn.js":125,buffer:147,elliptic:126,"parse-asn1":145}],145:[function(e,t,r){arguments[4][100][0].apply(r,arguments)},{dup:100}],146:[function(e,t,r){(function(e){t.exports=function(t,r){for(var n=Math.min(t.length,r.length),i=new e(n),o=0;n>o;++o)i[o]=t[o]^r[o];return i}}).call(this,e("buffer").Buffer)},{buffer:147}],147:[function(e,t,r){(function(t){"use strict";function n(){function e(){}try{var t=new Uint8Array(1);return t.foo=function(){return 42},t.constructor=e,42===t.foo()&&t.constructor===e&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(r){return!1}}function i(){return o.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(e){return this instanceof o?(o.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof e?s(this,e):"string"==typeof e?a(this,e,arguments.length>1?arguments[1]:"utf8"):u(this,e)):arguments.length>1?new o(e,arguments[1]):new o(e)}function s(e,t){if(e=g(e,0>t?0:0|m(t)),!o.TYPED_ARRAY_SUPPORT)for(var r=0;t>r;r++)e[r]=0;return e}function a(e,t,r){("string"!=typeof r||""===r)&&(r="utf8");var n=0|v(t,r);return e=g(e,n),e.write(t,r),e}function u(e,t){if(o.isBuffer(t))return f(e,t);if(Z(t))return h(e,t);if(null==t)throw new TypeError("must start with number, buffer, array or string");if("undefined"!=typeof ArrayBuffer){if(t.buffer instanceof ArrayBuffer)return c(e,t);if(t instanceof ArrayBuffer)return d(e,t)}return t.length?l(e,t):p(e,t)}function f(e,t){var r=0|m(t.length);return e=g(e,r),t.copy(e,0,0,r),e}function h(e,t){var r=0|m(t.length);e=g(e,r);for(var n=0;r>n;n+=1)e[n]=255&t[n];return e}function c(e,t){var r=0|m(t.length);e=g(e,r);for(var n=0;r>n;n+=1)e[n]=255&t[n];return e}function d(e,t){return o.TYPED_ARRAY_SUPPORT?(t.byteLength,e=o._augment(new Uint8Array(t))):e=c(e,new Uint8Array(t)),e}function l(e,t){var r=0|m(t.length);e=g(e,r);for(var n=0;r>n;n+=1)e[n]=255&t[n];return e}function p(e,t){var r,n=0;"Buffer"===t.type&&Z(t.data)&&(r=t.data,n=0|m(r.length)),e=g(e,n);for(var i=0;n>i;i+=1)e[i]=255&r[i];return e}function g(e,t){o.TYPED_ARRAY_SUPPORT?(e=o._augment(new Uint8Array(t)),e.__proto__=o.prototype):(e.length=t,e._isBuffer=!0);var r=0!==t&&t<=o.poolSize>>>1;return r&&(e.parent=J),e}function m(e){if(e>=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|e}function b(e,t){if(!(this instanceof b))return new b(e,t);var r=new o(e,t);return delete r.parent,r}function v(e,t){"string"!=typeof e&&(e=""+e);var r=e.length;if(0===r)return 0;for(var n=!1;;)switch(t){case"ascii":case"binary":case"raw":case"raws":return r;case"utf8":case"utf-8":return H(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return Y(e).length;default:if(n)return H(e).length;t=(""+t).toLowerCase(),n=!0}}function y(e,t,r){var n=!1;if(t=0|t,r=void 0===r||r===1/0?this.length:0|r,e||(e="utf8"),0>t&&(t=0),r>this.length&&(r=this.length),t>=r)return"";for(;;)switch(e){case"hex":return O(this,t,r);case"utf8":case"utf-8":return x(this,t,r);case"ascii":return P(this,t,r);case"binary":return B(this,t,r);case"base64":return k(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return R(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function w(e,t,r,n){r=Number(r)||0;var i=e.length-r;n?(n=Number(n),n>i&&(n=i)):n=i;var o=t.length;if(o%2!==0)throw new Error("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;n>s;s++){var a=parseInt(t.substr(2*s,2),16);if(isNaN(a))throw new Error("Invalid hex string");e[r+s]=a}return s}function _(e,t,r,n){return G(H(t,e.length-r),e,r,n)}function S(e,t,r,n){return G(q(t),e,r,n)}function A(e,t,r,n){return S(e,t,r,n)}function I(e,t,r,n){return G(Y(t),e,r,n)}function E(e,t,r,n){return G(V(t,e.length-r),e,r,n)}function k(e,t,r){return 0===t&&r===e.length?W.fromByteArray(e):W.fromByteArray(e.slice(t,r))}function x(e,t,r){r=Math.min(e.length,r);for(var n=[],i=t;r>i;){var o=e[i],s=null,a=o>239?4:o>223?3:o>191?2:1;if(r>=i+a){var u,f,h,c;switch(a){case 1:128>o&&(s=o);break;case 2:u=e[i+1],128===(192&u)&&(c=(31&o)<<6|63&u,c>127&&(s=c));break;case 3:u=e[i+1],f=e[i+2],128===(192&u)&&128===(192&f)&&(c=(15&o)<<12|(63&u)<<6|63&f,c>2047&&(55296>c||c>57343)&&(s=c));break;case 4:u=e[i+1],f=e[i+2],h=e[i+3],128===(192&u)&&128===(192&f)&&128===(192&h)&&(c=(15&o)<<18|(63&u)<<12|(63&f)<<6|63&h,c>65535&&1114112>c&&(s=c))}}null===s?(s=65533,a=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),i+=a}return M(n)}function M(e){var t=e.length;if($>=t)return String.fromCharCode.apply(String,e);for(var r="",n=0;t>n;)r+=String.fromCharCode.apply(String,e.slice(n,n+=$));return r}function P(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;r>i;i++)n+=String.fromCharCode(127&e[i]);return n}function B(e,t,r){var n="";r=Math.min(e.length,r);for(var i=t;r>i;i++)n+=String.fromCharCode(e[i]);return n}function O(e,t,r){var n=e.length;(!t||0>t)&&(t=0),(!r||0>r||r>n)&&(r=n);for(var i="",o=t;r>o;o++)i+=F(e[o]);return i}function R(e,t,r){for(var n=e.slice(t,r),i="",o=0;oe)throw new RangeError("offset is not uint");if(e+t>r)throw new RangeError("Trying to access beyond buffer length")}function N(e,t,r,n,i,s){if(!o.isBuffer(e))throw new TypeError("buffer must be a Buffer instance");if(t>i||s>t)throw new RangeError("value is out of bounds");if(r+n>e.length)throw new RangeError("index out of range")}function C(e,t,r,n){0>t&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-r,2);o>i;i++)e[r+i]=(t&255<<8*(n?i:1-i))>>>8*(n?i:1-i)}function j(e,t,r,n){0>t&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-r,4);o>i;i++)e[r+i]=t>>>8*(n?i:3-i)&255}function L(e,t,r,n,i,o){if(t>i||o>t)throw new RangeError("value is out of bounds");if(r+n>e.length)throw new RangeError("index out of range");if(0>r)throw new RangeError("index out of range")}function D(e,t,r,n,i){return i||L(e,t,r,4,3.4028234663852886e38,-3.4028234663852886e38),X.write(e,t,r,n,23,4),r+4}function z(e,t,r,n,i){return i||L(e,t,r,8,1.7976931348623157e308,-1.7976931348623157e308),X.write(e,t,r,n,52,8),r+8}function U(e){if(e=K(e).replace(ee,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function K(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function F(e){return 16>e?"0"+e.toString(16):e.toString(16)}function H(e,t){t=t||1/0;for(var r,n=e.length,i=null,o=[],s=0;n>s;s++){if(r=e.charCodeAt(s),r>55295&&57344>r){if(!i){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(t-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(56320>r){(t-=3)>-1&&o.push(239,191,189),i=r;continue}r=(i-55296<<10|r-56320)+65536}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,128>r){if((t-=1)<0)break;o.push(r)}else if(2048>r){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(65536>r){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(1114112>r))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function q(e){for(var t=[],r=0;r>8,i=r%256,o.push(i),o.push(n);return o}function Y(e){return W.toByteArray(U(e))}function G(e,t,r,n){for(var i=0;n>i&&!(i+r>=t.length||i>=e.length);i++)t[i+r]=e[i];return i}var W=e("base64-js"),X=e("ieee754"),Z=e("isarray");r.Buffer=o,r.SlowBuffer=b,r.INSPECT_MAX_BYTES=50,o.poolSize=8192;var J={};o.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:n(),o.TYPED_ARRAY_SUPPORT?(o.prototype.__proto__=Uint8Array.prototype,o.__proto__=Uint8Array):(o.prototype.length=void 0,o.prototype.parent=void 0),o.isBuffer=function(e){return!(null==e||!e._isBuffer)},o.compare=function(e,t){if(!o.isBuffer(e)||!o.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var r=e.length,n=t.length,i=0,s=Math.min(r,n);s>i&&e[i]===t[i];)++i;return i!==s&&(r=e[i],n=t[i]),n>r?-1:r>n?1:0},o.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"raw":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},o.concat=function(e,t){if(!Z(e))throw new TypeError("list argument must be an Array of Buffers.");if(0===e.length)return new o(0);var r;if(void 0===t)for(t=0,r=0;r0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},o.prototype.compare=function(e){if(!o.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e?0:o.compare(this,e)},o.prototype.indexOf=function(e,t){function r(e,t,r){for(var n=-1,i=0;r+i2147483647?t=2147483647:-2147483648>t&&(t=-2147483648),t>>=0,0===this.length)return-1;if(t>=this.length)return-1;if(0>t&&(t=Math.max(this.length+t,0)),"string"==typeof e)return 0===e.length?-1:String.prototype.indexOf.call(this,e,t);if(o.isBuffer(e))return r(this,e,t);if("number"==typeof e)return o.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,e,t):r(this,[e],t);throw new TypeError("val must be string, number or Buffer")},o.prototype.get=function(e){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(e)},o.prototype.set=function(e,t){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(e,t)},o.prototype.write=function(e,t,r,n){if(void 0===t)n="utf8",r=this.length,t=0;else if(void 0===r&&"string"==typeof t)n=t,r=this.length,t=0;else if(isFinite(t))t=0|t,isFinite(r)?(r=0|r,void 0===n&&(n="utf8")):(n=r,r=void 0);else{var i=n;n=t,t=0|r,r=i}var o=this.length-t;if((void 0===r||r>o)&&(r=o),e.length>0&&(0>r||0>t)||t>this.length)throw new RangeError("attempt to write outside buffer bounds");n||(n="utf8");for(var s=!1;;)switch(n){case"hex":return w(this,e,t,r);case"utf8":case"utf-8":return _(this,e,t,r);case"ascii":return S(this,e,t,r);case"binary":return A(this,e,t,r);case"base64":return I(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,t,r);default:if(s)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),s=!0}},o.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var $=4096;o.prototype.slice=function(e,t){var r=this.length;e=~~e,t=void 0===t?r:~~t,0>e?(e+=r,0>e&&(e=0)):e>r&&(e=r),0>t?(t+=r,0>t&&(t=0)):t>r&&(t=r),e>t&&(t=e);var n;if(o.TYPED_ARRAY_SUPPORT)n=o._augment(this.subarray(e,t));else{var i=t-e;n=new o(i,void 0);for(var s=0;i>s;s++)n[s]=this[s+e]}return n.length&&(n.parent=this.parent||this),n},o.prototype.readUIntLE=function(e,t,r){e=0|e,t=0|t,r||T(e,t,this.length);for(var n=this[e],i=1,o=0;++o0&&(i*=256);)n+=this[e+--t]*i;return n},o.prototype.readUInt8=function(e,t){return t||T(e,1,this.length),this[e]},o.prototype.readUInt16LE=function(e,t){return t||T(e,2,this.length),this[e]|this[e+1]<<8},o.prototype.readUInt16BE=function(e,t){return t||T(e,2,this.length),this[e]<<8|this[e+1]},o.prototype.readUInt32LE=function(e,t){return t||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},o.prototype.readUInt32BE=function(e,t){return t||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},o.prototype.readIntLE=function(e,t,r){e=0|e,t=0|t,r||T(e,t,this.length);for(var n=this[e],i=1,o=0;++o=i&&(n-=Math.pow(2,8*t)),n},o.prototype.readIntBE=function(e,t,r){e=0|e,t=0|t,r||T(e,t,this.length);for(var n=t,i=1,o=this[e+--n];n>0&&(i*=256);)o+=this[e+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o},o.prototype.readInt8=function(e,t){return t||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},o.prototype.readInt16LE=function(e,t){t||T(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt16BE=function(e,t){t||T(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},o.prototype.readInt32LE=function(e,t){return t||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},o.prototype.readInt32BE=function(e,t){return t||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},o.prototype.readFloatLE=function(e,t){return t||T(e,4,this.length),X.read(this,e,!0,23,4)},o.prototype.readFloatBE=function(e,t){return t||T(e,4,this.length),X.read(this,e,!1,23,4)},o.prototype.readDoubleLE=function(e,t){return t||T(e,8,this.length),X.read(this,e,!0,52,8)},o.prototype.readDoubleBE=function(e,t){return t||T(e,8,this.length),X.read(this,e,!1,52,8)},o.prototype.writeUIntLE=function(e,t,r,n){e=+e,t=0|t,r=0|r,n||N(this,e,t,r,Math.pow(2,8*r),0);var i=1,o=0;for(this[t]=255&e;++o=0&&(o*=256);)this[t+i]=e/o&255;return t+r},o.prototype.writeUInt8=function(e,t,r){return e=+e,t=0|t,r||N(this,e,t,1,255,0),o.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},o.prototype.writeUInt16LE=function(e,t,r){return e=+e,t=0|t,r||N(this,e,t,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):C(this,e,t,!0),t+2},o.prototype.writeUInt16BE=function(e,t,r){return e=+e,t=0|t,r||N(this,e,t,2,65535,0),o.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):C(this,e,t,!1),t+2},o.prototype.writeUInt32LE=function(e,t,r){return e=+e,t=0|t,r||N(this,e,t,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):j(this,e,t,!0),t+4},o.prototype.writeUInt32BE=function(e,t,r){return e=+e,t=0|t,r||N(this,e,t,4,4294967295,0),o.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):j(this,e,t,!1),t+4},o.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t=0|t,!n){var i=Math.pow(2,8*r-1);N(this,e,t,r,i-1,-i)}var o=0,s=1,a=0>e?1:0;for(this[t]=255&e;++o>0)-a&255;return t+r},o.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t=0|t,!n){var i=Math.pow(2,8*r-1);N(this,e,t,r,i-1,-i)}var o=r-1,s=1,a=0>e?1:0;for(this[t+o]=255&e;--o>=0&&(s*=256);)this[t+o]=(e/s>>0)-a&255;return t+r},o.prototype.writeInt8=function(e,t,r){return e=+e,t=0|t,r||N(this,e,t,1,127,-128),o.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),0>e&&(e=255+e+1),this[t]=255&e,t+1},o.prototype.writeInt16LE=function(e,t,r){return e=+e,t=0|t,r||N(this,e,t,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):C(this,e,t,!0),t+2},o.prototype.writeInt16BE=function(e,t,r){return e=+e,t=0|t,r||N(this,e,t,2,32767,-32768),o.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):C(this,e,t,!1),t+2},o.prototype.writeInt32LE=function(e,t,r){return e=+e,t=0|t,r||N(this,e,t,4,2147483647,-2147483648),o.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):j(this,e,t,!0),t+4},o.prototype.writeInt32BE=function(e,t,r){return e=+e,t=0|t,r||N(this,e,t,4,2147483647,-2147483648),0>e&&(e=4294967295+e+1),o.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):j(this,e,t,!1),t+4},o.prototype.writeFloatLE=function(e,t,r){return D(this,e,t,!0,r)},o.prototype.writeFloatBE=function(e,t,r){return D(this,e,t,!1,r)},o.prototype.writeDoubleLE=function(e,t,r){return z(this,e,t,!0,r)},o.prototype.writeDoubleBE=function(e,t,r){return z(this,e,t,!1,r)},o.prototype.copy=function(e,t,r,n){if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&r>n&&(n=r),n===r)return 0;if(0===e.length||0===this.length)return 0;if(0>t)throw new RangeError("targetStart out of bounds");if(0>r||r>=this.length)throw new RangeError("sourceStart out of bounds");if(0>n)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-tr&&n>t)for(i=s-1;i>=0;i--)e[i+t]=this[i+r];else if(1e3>s||!o.TYPED_ARRAY_SUPPORT)for(i=0;s>i;i++)e[i+t]=this[i+r];else e._set(this.subarray(r,r+s),t);return s},o.prototype.fill=function(e,t,r){if(e||(e=0),t||(t=0),r||(r=this.length),t>r)throw new RangeError("end < start");if(r!==t&&0!==this.length){if(0>t||t>=this.length)throw new RangeError("start out of bounds");if(0>r||r>this.length)throw new RangeError("end out of bounds");var n;if("number"==typeof e)for(n=t;r>n;n++)this[n]=e;else{var i=H(e.toString()),o=i.length;for(n=t;r>n;n++)this[n]=i[n%o]}return this}},o.prototype.toArrayBuffer=function(){if("undefined"!=typeof Uint8Array){if(o.TYPED_ARRAY_SUPPORT)return new o(this).buffer;for(var e=new Uint8Array(this.length),t=0,r=e.length;r>t;t+=1)e[t]=this[t];return e.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser")};var Q=o.prototype;o._augment=function(e){return e.constructor=o,e._isBuffer=!0,e._set=e.set,e.get=Q.get,e.set=Q.set,e.write=Q.write,e.toString=Q.toString,e.toLocaleString=Q.toString,e.toJSON=Q.toJSON,e.equals=Q.equals,e.compare=Q.compare,e.indexOf=Q.indexOf,e.copy=Q.copy,e.slice=Q.slice,e.readUIntLE=Q.readUIntLE,e.readUIntBE=Q.readUIntBE,e.readUInt8=Q.readUInt8,e.readUInt16LE=Q.readUInt16LE,e.readUInt16BE=Q.readUInt16BE,e.readUInt32LE=Q.readUInt32LE,e.readUInt32BE=Q.readUInt32BE,e.readIntLE=Q.readIntLE,e.readIntBE=Q.readIntBE,e.readInt8=Q.readInt8,e.readInt16LE=Q.readInt16LE,e.readInt16BE=Q.readInt16BE,e.readInt32LE=Q.readInt32LE,e.readInt32BE=Q.readInt32BE,e.readFloatLE=Q.readFloatLE,e.readFloatBE=Q.readFloatBE,e.readDoubleLE=Q.readDoubleLE,e.readDoubleBE=Q.readDoubleBE,e.writeUInt8=Q.writeUInt8,e.writeUIntLE=Q.writeUIntLE,e.writeUIntBE=Q.writeUIntBE,e.writeUInt16LE=Q.writeUInt16LE,e.writeUInt16BE=Q.writeUInt16BE,e.writeUInt32LE=Q.writeUInt32LE,e.writeUInt32BE=Q.writeUInt32BE,e.writeIntLE=Q.writeIntLE,e.writeIntBE=Q.writeIntBE,e.writeInt8=Q.writeInt8,e.writeInt16LE=Q.writeInt16LE,e.writeInt16BE=Q.writeInt16BE,e.writeInt32LE=Q.writeInt32LE,e.writeInt32BE=Q.writeInt32BE,e.writeFloatLE=Q.writeFloatLE,e.writeFloatBE=Q.writeFloatBE,e.writeDoubleLE=Q.writeDoubleLE,e.writeDoubleBE=Q.writeDoubleBE,e.fill=Q.fill,e.inspect=Q.inspect,e.toArrayBuffer=Q.toArrayBuffer,e};var ee=/[^+\/0-9A-Za-z-_]/g}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"base64-js":8,ieee754:225, +isarray:148}],148:[function(e,t,r){var n={}.toString;t.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},{}],149:[function(e,t,r){(function(r){function n(e){i.call(this),this.hashMode="string"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this["final"]=this._finalOrDigest,this._decoder=null,this._encoding=null}var i=e("stream").Transform,o=e("inherits"),s=e("string_decoder").StringDecoder;t.exports=n,o(n,i),n.prototype.update=function(e,t,n){"string"==typeof e&&(e=new r(e,t));var i=this._update(e);return this.hashMode?this:(n&&(i=this._toString(i,n)),i)},n.prototype.setAutoPadding=function(){},n.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},n.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},n.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},n.prototype._transform=function(e,t,r){var n;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(i){n=i}finally{r(n)}},n.prototype._flush=function(e){var t;try{this.push(this._final())}catch(r){t=r}finally{e(t)}},n.prototype._finalOrDigest=function(e){var t=this._final()||new r("");return e&&(t=this._toString(t,e,!0)),t},n.prototype._toString=function(e,t,r){if(this._decoder||(this._decoder=new s(t),this._encoding=t),this._encoding!==t)throw new Error("can't switch encodings");var n=this._decoder.write(e);return r&&(n+=this._decoder.end()),n}}).call(this,e("buffer").Buffer)},{buffer:147,inherits:226,stream:291,string_decoder:292}],150:[function(e,t,r){(function(e){function t(e){return Array.isArray?Array.isArray(e):"[object Array]"===m(e)}function n(e){return"boolean"==typeof e}function i(e){return null===e}function o(e){return null==e}function s(e){return"number"==typeof e}function a(e){return"string"==typeof e}function u(e){return"symbol"==typeof e}function f(e){return void 0===e}function h(e){return"[object RegExp]"===m(e)}function c(e){return"object"==typeof e&&null!==e}function d(e){return"[object Date]"===m(e)}function l(e){return"[object Error]"===m(e)||e instanceof Error}function p(e){return"function"==typeof e}function g(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||"undefined"==typeof e}function m(e){return Object.prototype.toString.call(e)}r.isArray=t,r.isBoolean=n,r.isNull=i,r.isNullOrUndefined=o,r.isNumber=s,r.isString=a,r.isSymbol=u,r.isUndefined=f,r.isRegExp=h,r.isObject=c,r.isDate=d,r.isError=l,r.isFunction=p,r.isPrimitive=g,r.isBuffer=e.isBuffer}).call(this,{isBuffer:e("../../is-buffer/index.js")})},{"../../is-buffer/index.js":227}],151:[function(e,t,r){(function(r){function n(e){this.curveType=a[e],this.curveType||(this.curveType={name:e}),this.curve=new o.ec(this.curveType.name),this.keys=void 0}function i(e,t,n){Array.isArray(e)||(e=e.toArray());var i=new r(e);if(n&&i.length=6.0.0 <7.0.0",_id:"elliptic@6.2.3",_inCache:!0,_installable:!0,_location:"/create-ecdh/elliptic",_nodeVersion:"5.4.1",_npmUser:{email:"fedor@indutny.com",name:"indutny"},_npmVersion:"3.3.12",_phantomChildren:{},_requested:{name:"elliptic",raw:"elliptic@^6.0.0",rawSpec:"^6.0.0",scope:null,spec:">=6.0.0 <7.0.0",type:"range"},_requiredBy:["/create-ecdh"],_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz",_shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",_shrinkwrap:null,_spec:"elliptic@^6.0.0",_where:"/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/create-ecdh",author:{email:"fedor@indutny.com",name:"Fedor Indutny"},bugs:{url:"https://github.com/indutny/elliptic/issues"},dependencies:{"bn.js":"^4.0.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},description:"EC cryptography",devDependencies:{coveralls:"^2.11.3",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},directories:{},dist:{shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",tarball:"http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz"},files:["lib"],gitHead:"c32f20b22b420eb6af3c6dda28963deb7facf823",homepage:"https://github.com/indutny/elliptic",keywords:["Cryptography","EC","Elliptic","curve"],license:"MIT",main:"lib/elliptic.js",maintainers:[{name:"indutny",email:"fedor@indutny.com"}],name:"elliptic",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},scripts:{coverage:"npm run unit --coverage",coveralls:"npm run coverage && cat ./coverage/lcov.info | coveralls",jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",lint:"npm run jscs && npm run jshint",test:"npm run lint && npm run unit",unit:"istanbul test _mocha --reporter=spec test/*-test.js"},version:"6.2.3"}},{}],170:[function(e,t,r){(function(r){"use strict";function n(e){f.call(this,"digest"),this._hash=e,this.buffers=[]}function i(e){f.call(this,"digest"),this._hash=e}var o=e("inherits"),s=e("./md5"),a=e("ripemd160"),u=e("sha.js"),f=e("cipher-base");o(n,f),n.prototype._update=function(e){this.buffers.push(e)},n.prototype._final=function(){var e=r.concat(this.buffers),t=this._hash(e);return this.buffers=null,t},o(i,f),i.prototype._update=function(e){this._hash.update(e)},i.prototype._final=function(){return this._hash.digest()},t.exports=function(e){return e=e.toLowerCase(),"md5"===e?new n(s):"rmd160"===e||"ripemd160"===e?new n(a):new i(u(e))}}).call(this,e("buffer").Buffer)},{"./md5":172,buffer:147,"cipher-base":149,inherits:226,ripemd160:258,"sha.js":284}],171:[function(e,t,r){(function(e){"use strict";function t(t,r){if(t.length%o!==0){var n=t.length+(o-t.length%o);t=e.concat([t,s],n)}for(var i=[],a=r?t.readInt32BE:t.readInt32LE,u=0;u>5]|=128<>>9<<4)+14]=t;for(var r=1732584193,n=-271733879,i=-1732584194,h=271733878,c=0;c>16)+(t>>16)+(r>>16);return n<<16|65535&r}function h(e,t){return e<>>32-t}var c=e("./helpers");t.exports=function(e){return c.hash(e,n,16)}},{"./helpers":171}],173:[function(e,t,r){(function(r){"use strict";function n(e,t){s.call(this),e=e.toLowerCase(),"string"==typeof t&&(t=new r(t));var n="sha512"===e||"sha384"===e?128:64;this._alg=e,this._key=t,t.length>n?t=i(e).update(t).digest():t.lengthf;f++)o[f]=54^t[f],u[f]=92^t[f];this._hash=i(e).update(o)}var i=e("create-hash/browser"),o=e("inherits"),s=e("stream").Transform,a=new r(128);a.fill(0),o(n,s),n.prototype.update=function(e,t){return this._hash.update(e,t),this},n.prototype._transform=function(e,t,r){this._hash.update(e),r()},n.prototype._flush=function(e){this.push(this.digest()),e()},n.prototype.digest=function(e){var t=this._hash.digest();return i(this._alg).update(this._opad).update(t).digest(e)},t.exports=function(e,t){return new n(e,t)}}).call(this,e("buffer").Buffer)},{buffer:147,"create-hash/browser":170,inherits:226,stream:291}],174:[function(e,t,r){"use strict";r.randomBytes=r.rng=r.pseudoRandomBytes=r.prng=e("randombytes"),r.createHash=r.Hash=e("create-hash"),r.createHmac=r.Hmac=e("create-hmac");var n=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(Object.keys(e("browserify-sign/algos")));r.getHashes=function(){return n};var i=e("pbkdf2");r.pbkdf2=i.pbkdf2,r.pbkdf2Sync=i.pbkdf2Sync;var o=e("browserify-cipher");["Cipher","createCipher","Cipheriv","createCipheriv","Decipher","createDecipher","Decipheriv","createDecipheriv","getCiphers","listCiphers"].forEach(function(e){r[e]=o[e]});var s=e("diffie-hellman");["DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman"].forEach(function(e){r[e]=s[e]});var a=e("browserify-sign");["createSign","Sign","createVerify","Verify"].forEach(function(e){r[e]=a[e]}),r.createECDH=e("create-ecdh");var u=e("public-encrypt");["publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt"].forEach(function(e){r[e]=u[e]}),["createCredentials"].forEach(function(e){r[e]=function(){throw new Error(["sorry, "+e+" is not implemented yet","we accept pull requests","https://github.com/crypto-browserify/crypto-browserify"].join("\n"))}})},{"browserify-cipher":116,"browserify-sign":123,"browserify-sign/algos":122,"create-ecdh":151,"create-hash":170,"create-hmac":173,"diffie-hellman":192,pbkdf2:234,"public-encrypt":236,randombytes:247}],175:[function(t,r,n){!function(i,o,s){"object"==typeof n?r.exports=n=o(t("./core"),t("./enc-base64"),t("./md5"),t("./evpkdf"),t("./cipher-core")):"function"==typeof e&&e.amd?e(["./core","./enc-base64","./md5","./evpkdf","./cipher-core"],o):o(i.CryptoJS)}(this,function(e){return function(){var t=e,r=t.lib,n=r.BlockCipher,i=t.algo,o=[],s=[],a=[],u=[],f=[],h=[],c=[],d=[],l=[],p=[];!function(){for(var e=[],t=0;256>t;t++)128>t?e[t]=t<<1:e[t]=t<<1^283;for(var r=0,n=0,t=0;256>t;t++){var i=n^n<<1^n<<2^n<<3^n<<4;i=i>>>8^255&i^99,o[r]=i,s[i]=r;var g=e[r],m=e[g],b=e[m],v=257*e[i]^16843008*i;a[r]=v<<24|v>>>8,u[r]=v<<16|v>>>16,f[r]=v<<8|v>>>24,h[r]=v;var v=16843009*b^65537*m^257*g^16843008*r;c[i]=v<<24|v>>>8,d[i]=v<<16|v>>>16,l[i]=v<<8|v>>>24,p[i]=v,r?(r=g^e[e[e[b^g]]],n^=e[e[n]]):r=n=1}}();var g=[0,1,2,4,8,16,32,64,128,27,54],m=i.AES=n.extend({_doReset:function(){for(var e=this._key,t=e.words,r=e.sigBytes/4,n=this._nRounds=r+6,i=4*(n+1),s=this._keySchedule=[],a=0;i>a;a++)if(r>a)s[a]=t[a];else{var u=s[a-1];a%r?r>6&&a%r==4&&(u=o[u>>>24]<<24|o[u>>>16&255]<<16|o[u>>>8&255]<<8|o[255&u]):(u=u<<8|u>>>24,u=o[u>>>24]<<24|o[u>>>16&255]<<16|o[u>>>8&255]<<8|o[255&u],u^=g[a/r|0]<<24),s[a]=s[a-r]^u}for(var f=this._invKeySchedule=[],h=0;i>h;h++){var a=i-h;if(h%4)var u=s[a];else var u=s[a-4];4>h||4>=a?f[h]=u:f[h]=c[o[u>>>24]]^d[o[u>>>16&255]]^l[o[u>>>8&255]]^p[o[255&u]]}},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,a,u,f,h,o)},decryptBlock:function(e,t){var r=e[t+1];e[t+1]=e[t+3],e[t+3]=r,this._doCryptBlock(e,t,this._invKeySchedule,c,d,l,p,s);var r=e[t+1];e[t+1]=e[t+3],e[t+3]=r},_doCryptBlock:function(e,t,r,n,i,o,s,a){for(var u=this._nRounds,f=e[t]^r[0],h=e[t+1]^r[1],c=e[t+2]^r[2],d=e[t+3]^r[3],l=4,p=1;u>p;p++){var g=n[f>>>24]^i[h>>>16&255]^o[c>>>8&255]^s[255&d]^r[l++],m=n[h>>>24]^i[c>>>16&255]^o[d>>>8&255]^s[255&f]^r[l++],b=n[c>>>24]^i[d>>>16&255]^o[f>>>8&255]^s[255&h]^r[l++],v=n[d>>>24]^i[f>>>16&255]^o[h>>>8&255]^s[255&c]^r[l++];f=g,h=m,c=b,d=v}var g=(a[f>>>24]<<24|a[h>>>16&255]<<16|a[c>>>8&255]<<8|a[255&d])^r[l++],m=(a[h>>>24]<<24|a[c>>>16&255]<<16|a[d>>>8&255]<<8|a[255&f])^r[l++],b=(a[c>>>24]<<24|a[d>>>16&255]<<16|a[f>>>8&255]<<8|a[255&h])^r[l++],v=(a[d>>>24]<<24|a[f>>>16&255]<<16|a[h>>>8&255]<<8|a[255&c])^r[l++];e[t]=g,e[t+1]=m,e[t+2]=b,e[t+3]=v},keySize:8});t.AES=n._createHelper(m)}(),e.AES})},{"./cipher-core":176,"./core":177,"./enc-base64":178,"./evpkdf":179,"./md5":181}],176:[function(t,r,n){!function(i,o){"object"==typeof n?r.exports=n=o(t("./core")):"function"==typeof e&&e.amd?e(["./core"],o):o(i.CryptoJS)}(this,function(e){e.lib.Cipher||function(t){var r=e,n=r.lib,i=n.Base,o=n.WordArray,s=n.BufferedBlockAlgorithm,a=r.enc,u=(a.Utf8,a.Base64),f=r.algo,h=f.EvpKDF,c=n.Cipher=s.extend({cfg:i.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,r){this.cfg=this.cfg.extend(r),this._xformMode=e,this._key=t,this.reset()},reset:function(){s.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){e&&this._append(e);var t=this._doFinalize();return t},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function e(e){return"string"==typeof e?A:w}return function(t){return{encrypt:function(r,n,i){return e(n).encrypt(t,r,n,i)},decrypt:function(r,n,i){return e(n).decrypt(t,r,n,i)}}}}()}),d=(n.StreamCipher=c.extend({_doFinalize:function(){var e=this._process(!0);return e},blockSize:1}),r.mode={}),l=n.BlockCipherMode=i.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}}),p=d.CBC=function(){function e(e,r,n){var i=this._iv;if(i){var o=i;this._iv=t}else var o=this._prevBlock;for(var s=0;n>s;s++)e[r+s]^=o[s]}var r=l.extend();return r.Encryptor=r.extend({processBlock:function(t,r){var n=this._cipher,i=n.blockSize;e.call(this,t,r,i),n.encryptBlock(t,r),this._prevBlock=t.slice(r,r+i)}}),r.Decryptor=r.extend({processBlock:function(t,r){var n=this._cipher,i=n.blockSize,o=t.slice(r,r+i);n.decryptBlock(t,r),e.call(this,t,r,i),this._prevBlock=o}}),r}(),g=r.pad={},m=g.Pkcs7={pad:function(e,t){for(var r=4*t,n=r-e.sigBytes%r,i=n<<24|n<<16|n<<8|n,s=[],a=0;n>a;a+=4)s.push(i);var u=o.create(s,n);e.concat(u)},unpad:function(e){var t=255&e.words[e.sigBytes-1>>>2];e.sigBytes-=t}},b=(n.BlockCipher=c.extend({cfg:c.cfg.extend({mode:p,padding:m}),reset:function(){c.reset.call(this);var e=this.cfg,t=e.iv,r=e.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=r.createEncryptor;else{var n=r.createDecryptor;this._minBufferSize=1}this._mode=n.call(r,this,t&&t.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else{var t=this._process(!0);e.unpad(t)}return t},blockSize:4}),n.CipherParams=i.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}})),v=r.format={},y=v.OpenSSL={stringify:function(e){var t=e.ciphertext,r=e.salt;if(r)var n=o.create([1398893684,1701076831]).concat(r).concat(t);else var n=t;return n.toString(u)},parse:function(e){var t=u.parse(e),r=t.words;if(1398893684==r[0]&&1701076831==r[1]){var n=o.create(r.slice(2,4));r.splice(0,4),t.sigBytes-=16}return b.create({ciphertext:t,salt:n})}},w=n.SerializableCipher=i.extend({cfg:i.extend({format:y}),encrypt:function(e,t,r,n){n=this.cfg.extend(n);var i=e.createEncryptor(r,n),o=i.finalize(t),s=i.cfg;return b.create({ciphertext:o,key:r,iv:s.iv,algorithm:e,mode:s.mode,padding:s.padding,blockSize:e.blockSize,formatter:n.format})},decrypt:function(e,t,r,n){n=this.cfg.extend(n),t=this._parse(t,n.format);var i=e.createDecryptor(r,n).finalize(t.ciphertext);return i},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}}),_=r.kdf={},S=_.OpenSSL={execute:function(e,t,r,n){n||(n=o.random(8));var i=h.create({keySize:t+r}).compute(e,n),s=o.create(i.words.slice(t),4*r);return i.sigBytes=4*t,b.create({key:i,iv:s,salt:n})}},A=n.PasswordBasedCipher=w.extend({cfg:w.cfg.extend({kdf:S}),encrypt:function(e,t,r,n){n=this.cfg.extend(n);var i=n.kdf.execute(r,e.keySize,e.ivSize);n.iv=i.iv;var o=w.encrypt.call(this,e,t,i.key,n);return o.mixIn(i),o},decrypt:function(e,t,r,n){n=this.cfg.extend(n),t=this._parse(t,n.format);var i=n.kdf.execute(r,e.keySize,e.ivSize,t.salt);n.iv=i.iv;var o=w.decrypt.call(this,e,t,i.key,n);return o}})}()})},{"./core":177}],177:[function(t,r,n){!function(t,i){"object"==typeof n?r.exports=n=i():"function"==typeof e&&e.amd?e([],i):t.CryptoJS=i()}(this,function(){var e=e||function(e,t){var r={},n=r.lib={},i=n.Base=function(){function e(){}return{extend:function(t){e.prototype=this;var r=new e;return t&&r.mixIn(t),r.hasOwnProperty("init")||(r.init=function(){r.$super.init.apply(this,arguments)}),r.init.prototype=r,r.$super=this,r},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}}}(),o=n.WordArray=i.extend({init:function(e,r){e=this.words=e||[],r!=t?this.sigBytes=r:this.sigBytes=4*e.length},toString:function(e){return(e||a).stringify(this)},concat:function(e){var t=this.words,r=e.words,n=this.sigBytes,i=e.sigBytes;if(this.clamp(),n%4)for(var o=0;i>o;o++){var s=r[o>>>2]>>>24-o%4*8&255;t[n+o>>>2]|=s<<24-(n+o)%4*8}else for(var o=0;i>o;o+=4)t[n+o>>>2]=r[o>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,r=this.sigBytes;t[r>>>2]&=4294967295<<32-r%4*8,t.length=e.ceil(r/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var r,n=[],i=function(t){var t=t,r=987654321,n=4294967295;return function(){r=36969*(65535&r)+(r>>16)&n,t=18e3*(65535&t)+(t>>16)&n;var i=(r<<16)+t&n;return i/=4294967296,i+=.5,i*(e.random()>.5?1:-1)}},s=0;t>s;s+=4){var a=i(4294967296*(r||e.random()));r=987654071*a(),n.push(4294967296*a()|0)}return new o.init(n,t)}}),s=r.enc={},a=s.Hex={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;r>i;i++){var o=t[i>>>2]>>>24-i%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;t>n;n+=2)r[n>>>3]|=parseInt(e.substr(n,2),16)<<24-n%8*4;return new o.init(r,t/2)}},u=s.Latin1={stringify:function(e){for(var t=e.words,r=e.sigBytes,n=[],i=0;r>i;i++){var o=t[i>>>2]>>>24-i%4*8&255;n.push(String.fromCharCode(o))}return n.join("")},parse:function(e){for(var t=e.length,r=[],n=0;t>n;n++)r[n>>>2]|=(255&e.charCodeAt(n))<<24-n%4*8;return new o.init(r,t)}},f=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(u.stringify(e)))}catch(t){throw new Error("Malformed UTF-8 data")}},parse:function(e){return u.parse(unescape(encodeURIComponent(e)))}},h=n.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new o.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=f.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var r=this._data,n=r.words,i=r.sigBytes,s=this.blockSize,a=4*s,u=i/a;u=t?e.ceil(u):e.max((0|u)-this._minBufferSize,0);var f=u*s,h=e.min(4*f,i);if(f){for(var c=0;f>c;c+=s)this._doProcessBlock(n,c);var d=n.splice(0,f);r.sigBytes-=h}return new o.init(d,h)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0}),c=(n.Hasher=h.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){h.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){e&&this._append(e);var t=this._doFinalize();return t},blockSize:16,_createHelper:function(e){return function(t,r){return new e.init(r).finalize(t)}},_createHmacHelper:function(e){return function(t,r){return new c.HMAC.init(e,r).finalize(t)}}}),r.algo={});return r}(Math);return e})},{}],178:[function(t,r,n){!function(i,o){"object"==typeof n?r.exports=n=o(t("./core")):"function"==typeof e&&e.amd?e(["./core"],o):o(i.CryptoJS)}(this,function(e){return function(){var t=e,r=t.lib,n=r.WordArray,i=t.enc;i.Base64={stringify:function(e){var t=e.words,r=e.sigBytes,n=this._map;e.clamp();for(var i=[],o=0;r>o;o+=3)for(var s=t[o>>>2]>>>24-o%4*8&255,a=t[o+1>>>2]>>>24-(o+1)%4*8&255,u=t[o+2>>>2]>>>24-(o+2)%4*8&255,f=s<<16|a<<8|u,h=0;4>h&&r>o+.75*h;h++)i.push(n.charAt(f>>>6*(3-h)&63));var c=n.charAt(64);if(c)for(;i.length%4;)i.push(c);return i.join("")},parse:function(e){var t=e.length,r=this._map,i=r.charAt(64);if(i){var o=e.indexOf(i);-1!=o&&(t=o)}for(var s=[],a=0,u=0;t>u;u++)if(u%4){var f=r.indexOf(e.charAt(u-1))<>>6-u%4*2,c=f|h;s[a>>>2]|=c<<24-a%4*8,a++}return n.create(s,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}}(),e.enc.Base64})},{"./core":177}],179:[function(t,r,n){!function(i,o,s){"object"==typeof n?r.exports=n=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof e&&e.amd?e(["./core","./sha1","./hmac"],o):o(i.CryptoJS)}(this,function(e){return function(){var t=e,r=t.lib,n=r.Base,i=r.WordArray,o=t.algo,s=o.MD5,a=o.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:s,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var r=this.cfg,n=r.hasher.create(),o=i.create(),s=o.words,a=r.keySize,u=r.iterations;s.lengthh;h++)f=n.finalize(f),n.reset();o.concat(f)}return o.sigBytes=4*a,o}});t.EvpKDF=function(e,t,r){return a.create(r).compute(e,t)}}(),e.EvpKDF})},{"./core":177,"./hmac":180,"./sha1":183}],180:[function(t,r,n){!function(i,o){"object"==typeof n?r.exports=n=o(t("./core")):"function"==typeof e&&e.amd?e(["./core"],o):o(i.CryptoJS)}(this,function(e){!function(){var t=e,r=t.lib,n=r.Base,i=t.enc,o=i.Utf8,s=t.algo;s.HMAC=n.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=o.parse(t));var r=e.blockSize,n=4*r;t.sigBytes>n&&(t=e.finalize(t)),t.clamp();for(var i=this._oKey=t.clone(),s=this._iKey=t.clone(),a=i.words,u=s.words,f=0;r>f;f++)a[f]^=1549556828,u[f]^=909522486;i.sigBytes=s.sigBytes=n,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher,r=t.finalize(e);t.reset();var n=t.finalize(this._oKey.clone().concat(r));return n}})}()})},{"./core":177}],181:[function(t,r,n){!function(i,o){"object"==typeof n?r.exports=n=o(t("./core")):"function"==typeof e&&e.amd?e(["./core"],o):o(i.CryptoJS)}(this,function(e){return function(t){function r(e,t,r,n,i,o,s){var a=e+(t&r|~t&n)+i+s;return(a<>>32-o)+t}function n(e,t,r,n,i,o,s){var a=e+(t&n|r&~n)+i+s;return(a<>>32-o)+t}function i(e,t,r,n,i,o,s){var a=e+(t^r^n)+i+s;return(a<>>32-o)+t}function o(e,t,r,n,i,o,s){var a=e+(r^(t|~n))+i+s;return(a<>>32-o)+t}var s=e,a=s.lib,u=a.WordArray,f=a.Hasher,h=s.algo,c=[];!function(){for(var e=0;64>e;e++)c[e]=4294967296*t.abs(t.sin(e+1))|0}();var d=h.MD5=f.extend({_doReset:function(){this._hash=new u.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,t){for(var s=0;16>s;s++){var a=t+s,u=e[a];e[a]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8)}var f=this._hash.words,h=e[t+0],d=e[t+1],l=e[t+2],p=e[t+3],g=e[t+4],m=e[t+5],b=e[t+6],v=e[t+7],y=e[t+8],w=e[t+9],_=e[t+10],S=e[t+11],A=e[t+12],I=e[t+13],E=e[t+14],k=e[t+15],x=f[0],M=f[1],P=f[2],B=f[3];x=r(x,M,P,B,h,7,c[0]),B=r(B,x,M,P,d,12,c[1]),P=r(P,B,x,M,l,17,c[2]),M=r(M,P,B,x,p,22,c[3]),x=r(x,M,P,B,g,7,c[4]),B=r(B,x,M,P,m,12,c[5]),P=r(P,B,x,M,b,17,c[6]),M=r(M,P,B,x,v,22,c[7]),x=r(x,M,P,B,y,7,c[8]),B=r(B,x,M,P,w,12,c[9]),P=r(P,B,x,M,_,17,c[10]),M=r(M,P,B,x,S,22,c[11]),x=r(x,M,P,B,A,7,c[12]),B=r(B,x,M,P,I,12,c[13]),P=r(P,B,x,M,E,17,c[14]),M=r(M,P,B,x,k,22,c[15]),x=n(x,M,P,B,d,5,c[16]),B=n(B,x,M,P,b,9,c[17]),P=n(P,B,x,M,S,14,c[18]),M=n(M,P,B,x,h,20,c[19]),x=n(x,M,P,B,m,5,c[20]),B=n(B,x,M,P,_,9,c[21]),P=n(P,B,x,M,k,14,c[22]),M=n(M,P,B,x,g,20,c[23]),x=n(x,M,P,B,w,5,c[24]),B=n(B,x,M,P,E,9,c[25]),P=n(P,B,x,M,p,14,c[26]),M=n(M,P,B,x,y,20,c[27]),x=n(x,M,P,B,I,5,c[28]),B=n(B,x,M,P,l,9,c[29]),P=n(P,B,x,M,v,14,c[30]),M=n(M,P,B,x,A,20,c[31]),x=i(x,M,P,B,m,4,c[32]),B=i(B,x,M,P,y,11,c[33]),P=i(P,B,x,M,S,16,c[34]),M=i(M,P,B,x,E,23,c[35]),x=i(x,M,P,B,d,4,c[36]),B=i(B,x,M,P,g,11,c[37]),P=i(P,B,x,M,v,16,c[38]),M=i(M,P,B,x,_,23,c[39]),x=i(x,M,P,B,I,4,c[40]),B=i(B,x,M,P,h,11,c[41]),P=i(P,B,x,M,p,16,c[42]),M=i(M,P,B,x,b,23,c[43]),x=i(x,M,P,B,w,4,c[44]),B=i(B,x,M,P,A,11,c[45]),P=i(P,B,x,M,k,16,c[46]),M=i(M,P,B,x,l,23,c[47]),x=o(x,M,P,B,h,6,c[48]),B=o(B,x,M,P,v,10,c[49]),P=o(P,B,x,M,E,15,c[50]),M=o(M,P,B,x,m,21,c[51]),x=o(x,M,P,B,A,6,c[52]),B=o(B,x,M,P,p,10,c[53]),P=o(P,B,x,M,_,15,c[54]),M=o(M,P,B,x,d,21,c[55]),x=o(x,M,P,B,y,6,c[56]),B=o(B,x,M,P,k,10,c[57]),P=o(P,B,x,M,b,15,c[58]),M=o(M,P,B,x,I,21,c[59]),x=o(x,M,P,B,g,6,c[60]),B=o(B,x,M,P,S,10,c[61]),P=o(P,B,x,M,l,15,c[62]),M=o(M,P,B,x,w,21,c[63]),f[0]=f[0]+x|0,f[1]=f[1]+M|0,f[2]=f[2]+P|0,f[3]=f[3]+B|0},_doFinalize:function(){var e=this._data,r=e.words,n=8*this._nDataBytes,i=8*e.sigBytes;r[i>>>5]|=128<<24-i%32;var o=t.floor(n/4294967296),s=n;r[(i+64>>>9<<4)+15]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),r[(i+64>>>9<<4)+14]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8),e.sigBytes=4*(r.length+1),this._process();for(var a=this._hash,u=a.words,f=0;4>f;f++){var h=u[f];u[f]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}return a},clone:function(){var e=f.clone.call(this);return e._hash=this._hash.clone(),e}});s.MD5=f._createHelper(d),s.HmacMD5=f._createHmacHelper(d)}(Math),e.MD5})},{"./core":177}],182:[function(t,r,n){!function(i,o,s){"object"==typeof n?r.exports=n=o(t("./core"),t("./sha1"),t("./hmac")):"function"==typeof e&&e.amd?e(["./core","./sha1","./hmac"],o):o(i.CryptoJS)}(this,function(e){return function(){var t=e,r=t.lib,n=r.Base,i=r.WordArray,o=t.algo,s=o.SHA1,a=o.HMAC,u=o.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:s,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var r=this.cfg,n=a.create(r.hasher,e),o=i.create(),s=i.create([1]),u=o.words,f=s.words,h=r.keySize,c=r.iterations;u.lengthm;m++){g=n.finalize(g),n.reset();for(var b=g.words,v=0;p>v;v++)l[v]^=b[v]}o.concat(d),f[0]++}return o.sigBytes=4*h,o}});t.PBKDF2=function(e,t,r){return u.create(r).compute(e,t)}}(),e.PBKDF2})},{"./core":177,"./hmac":180,"./sha1":183}],183:[function(t,r,n){!function(i,o){"object"==typeof n?r.exports=n=o(t("./core")):"function"==typeof e&&e.amd?e(["./core"],o):o(i.CryptoJS)}(this,function(e){return function(){var t=e,r=t.lib,n=r.WordArray,i=r.Hasher,o=t.algo,s=[],a=o.SHA1=i.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520]); +},_doProcessBlock:function(e,t){for(var r=this._hash.words,n=r[0],i=r[1],o=r[2],a=r[3],u=r[4],f=0;80>f;f++){if(16>f)s[f]=0|e[t+f];else{var h=s[f-3]^s[f-8]^s[f-14]^s[f-16];s[f]=h<<1|h>>>31}var c=(n<<5|n>>>27)+u+s[f];c+=20>f?(i&o|~i&a)+1518500249:40>f?(i^o^a)+1859775393:60>f?(i&o|i&a|o&a)-1894007588:(i^o^a)-899497514,u=a,a=o,o=i<<30|i>>>2,i=n,n=c}r[0]=r[0]+n|0,r[1]=r[1]+i|0,r[2]=r[2]+o|0,r[3]=r[3]+a|0,r[4]=r[4]+u|0},_doFinalize:function(){var e=this._data,t=e.words,r=8*this._nDataBytes,n=8*e.sigBytes;return t[n>>>5]|=128<<24-n%32,t[(n+64>>>9<<4)+14]=Math.floor(r/4294967296),t[(n+64>>>9<<4)+15]=r,e.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA1=i._createHelper(a),t.HmacSHA1=i._createHmacHelper(a)}(),e.SHA1})},{"./core":177}],184:[function(t,r,n){!function(i,o,s){"object"==typeof n?r.exports=n=o(t("./core"),t("./x64-core")):"function"==typeof e&&e.amd?e(["./core","./x64-core"],o):o(i.CryptoJS)}(this,function(e){return function(t){var r=e,n=r.lib,i=n.WordArray,o=n.Hasher,s=r.x64,a=s.Word,u=r.algo,f=[],h=[],c=[];!function(){for(var e=1,t=0,r=0;24>r;r++){f[e+5*t]=(r+1)*(r+2)/2%64;var n=t%5,i=(2*e+3*t)%5;e=n,t=i}for(var e=0;5>e;e++)for(var t=0;5>t;t++)h[e+5*t]=t+(2*e+3*t)%5*5;for(var o=1,s=0;24>s;s++){for(var u=0,d=0,l=0;7>l;l++){if(1&o){var p=(1<p?d^=1<e;e++)d[e]=a.create()}();var l=u.SHA3=o.extend({cfg:o.cfg.extend({outputLength:512}),_doReset:function(){for(var e=this._state=[],t=0;25>t;t++)e[t]=new a.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(e,t){for(var r=this._state,n=this.blockSize/2,i=0;n>i;i++){var o=e[t+2*i],s=e[t+2*i+1];o=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8),s=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8);var a=r[i];a.high^=s,a.low^=o}for(var u=0;24>u;u++){for(var l=0;5>l;l++){for(var p=0,g=0,m=0;5>m;m++){var a=r[l+5*m];p^=a.high,g^=a.low}var b=d[l];b.high=p,b.low=g}for(var l=0;5>l;l++)for(var v=d[(l+4)%5],y=d[(l+1)%5],w=y.high,_=y.low,p=v.high^(w<<1|_>>>31),g=v.low^(_<<1|w>>>31),m=0;5>m;m++){var a=r[l+5*m];a.high^=p,a.low^=g}for(var S=1;25>S;S++){var a=r[S],A=a.high,I=a.low,E=f[S];if(32>E)var p=A<>>32-E,g=I<>>32-E;else var p=I<>>64-E,g=A<>>64-E;var k=d[h[S]];k.high=p,k.low=g}var x=d[0],M=r[0];x.high=M.high,x.low=M.low;for(var l=0;5>l;l++)for(var m=0;5>m;m++){var S=l+5*m,a=r[S],P=d[S],B=d[(l+1)%5+5*m],O=d[(l+2)%5+5*m];a.high=P.high^~B.high&O.high,a.low=P.low^~B.low&O.low}var a=r[0],R=c[u];a.high^=R.high,a.low^=R.low}},_doFinalize:function(){var e=this._data,r=e.words,n=(8*this._nDataBytes,8*e.sigBytes),o=32*this.blockSize;r[n>>>5]|=1<<24-n%32,r[(t.ceil((n+1)/o)*o>>>5)-1]|=128,e.sigBytes=4*r.length,this._process();for(var s=this._state,a=this.cfg.outputLength/8,u=a/8,f=[],h=0;u>h;h++){var c=s[h],d=c.high,l=c.low;d=16711935&(d<<8|d>>>24)|4278255360&(d<<24|d>>>8),l=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8),f.push(l),f.push(d)}return new i.init(f,a)},clone:function(){for(var e=o.clone.call(this),t=e._state=this._state.slice(0),r=0;25>r;r++)t[r]=t[r].clone();return e}});r.SHA3=o._createHelper(l),r.HmacSHA3=o._createHmacHelper(l)}(Math),e.SHA3})},{"./core":177,"./x64-core":185}],185:[function(t,r,n){!function(i,o){"object"==typeof n?r.exports=n=o(t("./core")):"function"==typeof e&&e.amd?e(["./core"],o):o(i.CryptoJS)}(this,function(e){return function(t){var r=e,n=r.lib,i=n.Base,o=n.WordArray,s=r.x64={};s.Word=i.extend({init:function(e,t){this.high=e,this.low=t}}),s.WordArray=i.extend({init:function(e,r){e=this.words=e||[],r!=t?this.sigBytes=r:this.sigBytes=8*e.length},toX32:function(){for(var e=this.words,t=e.length,r=[],n=0;t>n;n++){var i=e[n];r.push(i.high),r.push(i.low)}return o.create(r,this.sigBytes)},clone:function(){for(var e=i.clone.call(this),t=e.words=this.words.slice(0),r=t.length,n=0;r>n;n++)t[n]=t[n].clone();return e}})}(),e})},{"./core":177}],186:[function(e,t,r){"use strict";r.utils=e("./des/utils"),r.Cipher=e("./des/cipher"),r.DES=e("./des/des"),r.CBC=e("./des/cbc"),r.EDE=e("./des/ede")},{"./des/cbc":187,"./des/cipher":188,"./des/des":189,"./des/ede":190,"./des/utils":191}],187:[function(e,t,r){"use strict";function n(e){o.equal(e.length,8,"Invalid IV length"),this.iv=new Array(8);for(var t=0;tn;n++)this.buffer[this.bufferOff+n]=e[t+n];return this.bufferOff+=r,r},n.prototype._flushBuffer=function(e,t){return this._update(this.buffer,0,e,t),this.bufferOff=0,this.blockSize},n.prototype._updateEncrypt=function(e){var t=0,r=0,n=(this.bufferOff+e.length)/this.blockSize|0,i=new Array(n*this.blockSize);0!==this.bufferOff&&(t+=this._buffer(e,t),this.bufferOff===this.buffer.length&&(r+=this._flushBuffer(i,r)));for(var o=e.length-(e.length-t)%this.blockSize;o>t;t+=this.blockSize)this._update(e,t,i,r),r+=this.blockSize;for(;t0;n--)t+=this._buffer(e,t),r+=this._flushBuffer(i,r);return t+=this._buffer(e,t),i},n.prototype["final"]=function(e){var t;e&&(t=this.update(e));var r;return r="encrypt"===this.type?this._finalEncrypt():this._finalDecrypt(),t?t.concat(r):r},n.prototype._pad=function(e,t){if(0===t)return!1;for(;t>>1];r=u.r28shl(r,s),n=u.r28shl(n,s),u.pc2(r,n,e.keys,i)}},i.prototype._update=function(e,t,r,n){var i=this._desState,o=u.readUInt32BE(e,t),s=u.readUInt32BE(e,t+4);u.ip(o,s,i.tmp,0),o=i.tmp[0],s=i.tmp[1],"encrypt"===this.type?this._encrypt(i,o,s,i.tmp,0):this._decrypt(i,o,s,i.tmp,0),o=i.tmp[0],s=i.tmp[1],u.writeUInt32BE(r,o,n),u.writeUInt32BE(r,s,n+4)},i.prototype._pad=function(e,t){for(var r=e.length-t,n=t;n>>0,o=l}u.rip(s,o,n,i)},i.prototype._decrypt=function(e,t,r,n,i){for(var o=r,s=t,a=e.keys.length-2;a>=0;a-=2){var f=e.keys[a],h=e.keys[a+1];u.expand(o,e.tmp,0),f^=e.tmp[0],h^=e.tmp[1];var c=u.substitute(f,h),d=u.permute(c),l=o;o=(s^d)>>>0,s=l}u.rip(o,s,n,i)}},{"../des":186,inherits:226,"minimalistic-assert":233}],190:[function(e,t,r){"use strict";function n(e,t){o.equal(t.length,24,"Invalid key length");var r=t.slice(0,8),n=t.slice(8,16),i=t.slice(16,24);"encrypt"===e?this.ciphers=[f.create({type:"encrypt",key:r}),f.create({type:"decrypt",key:n}),f.create({type:"encrypt",key:i})]:this.ciphers=[f.create({type:"decrypt",key:i}),f.create({type:"encrypt",key:n}),f.create({type:"decrypt",key:r})]}function i(e){u.call(this,e);var t=new n(this.type,this.options.key);this._edeState=t}var o=e("minimalistic-assert"),s=e("inherits"),a=e("../des"),u=a.Cipher,f=a.DES;s(i,u),t.exports=i,i.create=function(e){return new i(e)},i.prototype._update=function(e,t,r,n){var i=this._edeState;i.ciphers[0]._update(e,t,r,n),i.ciphers[1]._update(r,n,r,n),i.ciphers[2]._update(r,n,r,n)},i.prototype._pad=f.prototype._pad,i.prototype._unpad=f.prototype._unpad},{"../des":186,inherits:226,"minimalistic-assert":233}],191:[function(e,t,r){"use strict";r.readUInt32BE=function(e,t){var r=e[0+t]<<24|e[1+t]<<16|e[2+t]<<8|e[3+t];return r>>>0},r.writeUInt32BE=function(e,t,r){e[0+r]=t>>>24,e[1+r]=t>>>16&255,e[2+r]=t>>>8&255,e[3+r]=255&t},r.ip=function(e,t,r,n){for(var i=0,o=0,s=6;s>=0;s-=2){for(var a=0;24>=a;a+=8)i<<=1,i|=t>>>a+s&1;for(var a=0;24>=a;a+=8)i<<=1,i|=e>>>a+s&1}for(var s=6;s>=0;s-=2){for(var a=1;25>=a;a+=8)o<<=1,o|=t>>>a+s&1;for(var a=1;25>=a;a+=8)o<<=1,o|=e>>>a+s&1}r[n+0]=i>>>0,r[n+1]=o>>>0},r.rip=function(e,t,r,n){for(var i=0,o=0,s=0;4>s;s++)for(var a=24;a>=0;a-=8)i<<=1,i|=t>>>a+s&1,i<<=1,i|=e>>>a+s&1;for(var s=4;8>s;s++)for(var a=24;a>=0;a-=8)o<<=1,o|=t>>>a+s&1,o<<=1,o|=e>>>a+s&1;r[n+0]=i>>>0,r[n+1]=o>>>0},r.pc1=function(e,t,r,n){for(var i=0,o=0,s=7;s>=5;s--){for(var a=0;24>=a;a+=8)i<<=1,i|=t>>a+s&1;for(var a=0;24>=a;a+=8)i<<=1,i|=e>>a+s&1}for(var a=0;24>=a;a+=8)i<<=1,i|=t>>a+s&1;for(var s=1;3>=s;s++){for(var a=0;24>=a;a+=8)o<<=1,o|=t>>a+s&1;for(var a=0;24>=a;a+=8)o<<=1,o|=e>>a+s&1}for(var a=0;24>=a;a+=8)o<<=1,o|=e>>a+s&1;r[n+0]=i>>>0,r[n+1]=o>>>0},r.r28shl=function(e,t){return e<>>28-t};var n=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];r.pc2=function(e,t,r,i){for(var o=0,s=0,a=n.length>>>1,u=0;a>u;u++)o<<=1,o|=e>>>n[u]&1;for(var u=a;u>>n[u]&1;r[i+0]=o>>>0,r[i+1]=s>>>0},r.expand=function(e,t,r){var n=0,i=0;n=(1&e)<<5|e>>>27;for(var o=23;o>=15;o-=4)n<<=6,n|=e>>>o&63;for(var o=11;o>=3;o-=4)i|=e>>>o&63,i<<=6;i|=(31&e)<<1|e>>>31,t[r+0]=n>>>0,t[r+1]=i>>>0};var i=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];r.substitute=function(e,t){for(var r=0,n=0;4>n;n++){var o=e>>>18-6*n&63,s=i[64*n+o];r<<=4,r|=s}for(var n=0;4>n;n++){var o=t>>>18-6*n&63,s=i[256+64*n+o];r<<=4,r|=s}return r>>>0};var o=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];r.permute=function(e){for(var t=0,r=0;r>>o[r]&1;return t>>>0},r.padSplit=function(e,t,r){for(var n=e.toString(2);n.lengtho;o+=r)i.push(n.slice(o,o+r));return i.join(" ")}},{}],192:[function(e,t,r){(function(t){function n(e){var r=new t(s[e].prime,"hex"),n=new t(s[e].gen,"hex");return new a(r,n)}function i(e,r,n,s){return t.isBuffer(r)||void 0===u[r]?i(e,"binary",r,n):(r=r||"binary",s=s||"binary",n=n||new t([2]),t.isBuffer(n)||(n=new t(n,s)),"number"==typeof e?new a(o(e,n),n,!0):(t.isBuffer(e)||(e=new t(e,r)),new a(e,n,!0)))}var o=e("./lib/generatePrime"),s=e("./lib/primes.json"),a=e("./lib/dh"),u={binary:!0,hex:!0,base64:!0};r.DiffieHellmanGroup=r.createDiffieHellmanGroup=r.getDiffieHellman=n,r.createDiffieHellman=r.DiffieHellman=i}).call(this,e("buffer").Buffer)},{"./lib/dh":193,"./lib/generatePrime":194,"./lib/primes.json":195,buffer:147}],193:[function(e,t,r){(function(r){function n(e,t){return t=t||"utf8",r.isBuffer(e)||(e=new r(e,t)),this._pub=new u(e),this}function i(e,t){return t=t||"utf8",r.isBuffer(e)||(e=new r(e,t)),this._priv=new u(e),this}function o(e,t){var r=t.toString("hex"),n=[r,e.toString(16)].join("_");if(n in v)return v[n];var i=0;if(e.isEven()||!m.simpleSieve||!m.fermatTest(e)||!h.test(e))return i+=1,i+="02"===r||"05"===r?8:4,v[n]=i,i;h.test(e.shrn(1))||(i+=2);var o;switch(r){case"02":e.mod(c).cmp(d)&&(i+=8);break;case"05":o=e.mod(l),o.cmp(p)&&o.cmp(g)&&(i+=8);break;default:i+=4}return v[n]=i,i}function s(e,t,r){this.setGenerator(t),this.__prime=new u(e),this._prime=u.mont(this.__prime),this._primeLen=e.length,this._pub=void 0,this._priv=void 0,this._primeCode=void 0,r?(this.setPublicKey=n,this.setPrivateKey=i):this._primeCode=8}function a(e,t){var n=new r(e.toArray());return t?n.toString(t):n}var u=e("bn.js"),f=e("miller-rabin"),h=new f,c=new u(24),d=new u(11),l=new u(10),p=new u(3),g=new u(7),m=e("./generatePrime"),b=e("randombytes");t.exports=s;var v={};Object.defineProperty(s.prototype,"verifyError",{enumerable:!0,get:function(){return"number"!=typeof this._primeCode&&(this._primeCode=o(this.__prime,this.__gen)),this._primeCode}}),s.prototype.generateKeys=function(){return this._priv||(this._priv=new u(b(this._primeLen))),this._pub=this._gen.toRed(this._prime).redPow(this._priv).fromRed(),this.getPublicKey()},s.prototype.computeSecret=function(e){e=new u(e),e=e.toRed(this._prime);var t=e.redPow(this._priv).fromRed(),n=new r(t.toArray()),i=this.getPrime();if(n.lengthn;n+=2){for(var i=Math.ceil(Math.sqrt(n)),o=0;r>o&&t[o]<=i&&n%t[o]!==0;o++);r!==o&&t[o]<=i||(t[r++]=n)}return y=t,t}function i(e){for(var t=n(),r=0;re)return new u(2===t||5===t?[140,123]:[140,39]);t=new u(t);for(var r,n;;){for(r=new u(a(Math.ceil(e/8)));r.bitLength()>e;)r.ishrn(1);if(r.isEven()&&r.iadd(d),r.testn(1)||r.iadd(l),t.cmp(l)){if(!t.cmp(p))for(;r.mod(g).cmp(m);)r.iadd(v)}else for(;r.mod(f).cmp(b);)r.iadd(v);if(n=r.shrn(1),i(n)&&i(r)&&o(n)&&o(r)&&c.test(n)&&c.test(r))return r}}var a=e("randombytes");t.exports=s,s.simpleSieve=i,s.fermatTest=o;var u=e("bn.js"),f=new u(24),h=e("miller-rabin"),c=new h,d=new u(1),l=new u(2),p=new u(5),g=(new u(16),new u(8),new u(10)),m=new u(3),b=(new u(7),new u(11)),v=new u(4),y=(new u(12),null)},{"bn.js":196,"miller-rabin":231,randombytes:247}],195:[function(e,t,r){t.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],196:[function(e,t,r){arguments[4][120][0].apply(r,arguments)},{dup:120}],197:[function(e,t,r){arguments[4][58][0].apply(r,arguments)},{"../package.json":210,"./elliptic/curve":200,"./elliptic/curves":203,"./elliptic/ec":204,"./elliptic/hmac-drbg":207,"./elliptic/utils":209,brorand:99,dup:58}],198:[function(e,t,r){"use strict";function n(e,t){this.type=e,this.p=new o(t.p,16),this.red=t.prime?o.red(t.prime):o.mont(this.p),this.zero=new o(0).toRed(this.red),this.one=new o(1).toRed(this.red),this.two=new o(2).toRed(this.red),this.n=t.n&&new o(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4)}function i(e,t){this.curve=e,this.type=t,this.precomputed=null}var o=e("bn.js"),s=e("../../elliptic"),a=s.utils.getNAF,u=s.utils.getJSF,f=s.utils.assert;t.exports=n,n.prototype.point=function(){throw new Error("Not implemented")},n.prototype.validate=function(){throw new Error("Not implemented")},n.prototype._fixedNafMul=function(e,t){f(e.precomputed);var r=e._getDoubles(),n=a(t,1),i=(1<=s;t--)u=(u<<1)+n[t];o.push(u)}for(var h=this.jpoint(null,null,null),c=this.jpoint(null,null,null),d=i;d>0;d--){for(var s=0;s=0;u--){for(var t=0;u>=0&&0===o[u];u--)t++;if(u>=0&&t++,s=s.dblp(t),0>u)break;var h=o[u];f(0!==h),s="affine"===e.type?h>0?s.mixedAdd(i[h-1>>1]):s.mixedAdd(i[-h-1>>1].neg()):h>0?s.add(i[h-1>>1]):s.add(i[-h-1>>1].neg())}return"affine"===e.type?s.toP():s},n.prototype._wnafMulAdd=function(e,t,r,n){for(var i=this._wnafT1,o=this._wnafT2,s=this._wnafT3,f=0,h=0;n>h;h++){var c=t[h],d=c._getNAFPoints(e);i[h]=d.wnd,o[h]=d.points}for(var h=n-1;h>=1;h-=2){var l=h-1,p=h;if(1===i[l]&&1===i[p]){var g=[t[l],null,null,t[p]];0===t[l].y.cmp(t[p].y)?(g[1]=t[l].add(t[p]),g[2]=t[l].toJ().mixedAdd(t[p].neg())):0===t[l].y.cmp(t[p].y.redNeg())?(g[1]=t[l].toJ().mixedAdd(t[p]),g[2]=t[l].add(t[p].neg())):(g[1]=t[l].toJ().mixedAdd(t[p]),g[2]=t[l].toJ().mixedAdd(t[p].neg()));var m=[-3,-1,-5,-7,0,7,5,1,3],b=u(r[l],r[p]);f=Math.max(b[0].length,f),s[l]=new Array(f),s[p]=new Array(f);for(var v=0;f>v;v++){var y=0|b[0][v],w=0|b[1][v];s[l][v]=m[3*(y+1)+(w+1)],s[p][v]=0,o[l]=g}}else s[l]=a(r[l],i[l]),s[p]=a(r[p],i[p]),f=Math.max(s[l].length,f),f=Math.max(s[p].length,f)}for(var _=this.jpoint(null,null,null),S=this._wnafT4,h=f;h>=0;h--){for(var A=0;h>=0;){for(var I=!0,v=0;n>v;v++)S[v]=0|s[v][h],0!==S[v]&&(I=!1);if(!I)break;A++,h--}if(h>=0&&A++,_=_.dblp(A),0>h)break;for(var v=0;n>v;v++){var c,E=S[v];0!==E&&(E>0?c=o[v][E-1>>1]:0>E&&(c=o[v][-E-1>>1].neg()),_="affine"===c.type?_.mixedAdd(c):_.add(c))}}for(var h=0;n>h;h++)o[h]=null;return _.toP()},n.BasePoint=i,i.prototype.validate=function(){return this.curve.validate(this)},i.prototype.precompute=function(e){if(this.precomputed)return this;var t={doubles:null,naf:null,beta:null};return t.naf=this._getNAFPoints(8),t.doubles=this._getDoubles(4,e),t.beta=this._getBeta(),this.precomputed=t,this},i.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var t=this.precomputed.doubles;return t?t.points.length>=Math.ceil((e.bitLength()+1)/t.step):!1},i.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,i=0;t>i;i+=e){for(var o=0;e>o;o++)n=n.dbl();r.push(n)}return{step:e,points:r}},i.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var t=[this],r=(1<i;i++)t[i]=t[i-1].add(n);return{wnd:e,points:t}},i.prototype._getBeta=function(){return null},i.prototype.dblp=function(e){for(var t=this,r=0;e>r;r++)t=t.dbl();return t}},{"../../elliptic":197,"bn.js":98}],199:[function(e,t,r){"use strict";function n(e){this.twisted=1!==(0|e.a),this.mOneA=this.twisted&&-1===(0|e.a),this.extended=this.mOneA,f.call(this,"edwards",e),this.a=new a(e.a,16).mod(this.red.m).toRed(this.red),this.c=new a(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new a(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),h(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|e.c)}function i(e,t,r,n,i){f.BasePoint.call(this,e,"projective"),null===t&&null===r&&null===n?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new a(t,16),this.y=new a(r,16),this.z=n?new a(n,16):this.curve.one,this.t=i&&new a(i,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var o=e("../curve"),s=e("../../elliptic"),a=e("bn.js"),u=e("inherits"),f=o.base,h=s.utils.assert;u(n,f),t.exports=n,n.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},n.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},n.prototype.jpoint=function(e,t,r,n){return this.point(e,t,r,n)},n.prototype.pointFromX=function(e,t){t=new a(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr(),n=this.c2.redSub(this.a.redMul(r)),i=this.one.redSub(this.c2.redMul(this.d).redMul(r)),s=n.redMul(i.redInvm()).redSqrt(),u=s.fromRed().isOdd();return(e&&!u||!e&&u)&&(s=s.redNeg()),this.point(t,s,o.one)},n.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),n=t.redMul(this.a).redAdd(r),i=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===n.cmp(i)},u(i,f.BasePoint),n.prototype.pointFromJSON=function(e){return i.fromJSON(this,e)},n.prototype.point=function(e,t,r,n){return new i(this,e,t,r,n)},i.fromJSON=function(e,t){return new i(e,t[0],t[1],t[2])},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&0===this.y.cmp(this.z)},i.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(e),i=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),o=n.redAdd(t),s=o.redSub(r),a=n.redSub(t),u=i.redMul(s),f=o.redMul(a),h=i.redMul(a),c=s.redMul(o);return this.curve.point(u,f,c,h)},i.prototype._projDbl=function(){var e,t,r,n=this.x.redAdd(this.y).redSqr(),i=this.x.redSqr(),o=this.y.redSqr();if(this.curve.twisted){var s=this.curve._mulA(i),a=s.redAdd(o);if(this.zOne)e=n.redSub(i).redSub(o).redMul(a.redSub(this.curve.two)),t=a.redMul(s.redSub(o)),r=a.redSqr().redSub(a).redSub(a);else{var u=this.z.redSqr(),f=a.redSub(u).redISub(u);e=n.redSub(i).redISub(o).redMul(f),t=a.redMul(s.redSub(o)),r=a.redMul(f)}}else{var s=i.redAdd(o),u=this.curve._mulC(this.c.redMul(this.z)).redSqr(),f=s.redSub(u).redSub(u);e=this.curve._mulC(n.redISub(s)).redMul(f),t=this.curve._mulC(s).redMul(i.redISub(o)),r=s.redMul(f)}return this.curve.point(e,t,r)},i.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},i.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),i=this.z.redMul(e.z.redAdd(e.z)),o=r.redSub(t),s=i.redSub(n),a=i.redAdd(n),u=r.redAdd(t),f=o.redMul(s),h=a.redMul(u),c=o.redMul(u),d=s.redMul(a);return this.curve.point(f,h,d,c)},i.prototype._projAdd=function(e){var t,r,n=this.z.redMul(e.z),i=n.redSqr(),o=this.x.redMul(e.x),s=this.y.redMul(e.y),a=this.curve.d.redMul(o).redMul(s),u=i.redSub(a),f=i.redAdd(a),h=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(o).redISub(s),c=n.redMul(u).redMul(h); +return this.curve.twisted?(t=n.redMul(f).redMul(s.redSub(this.curve._mulA(o))),r=u.redMul(f)):(t=n.redMul(f).redMul(s.redSub(o)),r=this.curve._mulC(u).redMul(f)),this.curve.point(c,t,r)},i.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},i.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},i.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2)},i.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},i.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},i.prototype.getX=function(){return this.normalize(),this.x.fromRed()},i.prototype.getY=function(){return this.normalize(),this.y.fromRed()},i.prototype.toP=i.prototype.normalize,i.prototype.mixedAdd=i.prototype.add},{"../../elliptic":197,"../curve":200,"bn.js":98,inherits:226}],200:[function(e,t,r){arguments[4][61][0].apply(r,arguments)},{"./base":198,"./edwards":199,"./mont":201,"./short":202,dup:61}],201:[function(e,t,r){arguments[4][62][0].apply(r,arguments)},{"../curve":200,"bn.js":98,dup:62,inherits:226}],202:[function(e,t,r){"use strict";function n(e){h.call(this,"short",e),this.a=new u(e.a,16).toRed(this.red),this.b=new u(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function i(e,t,r,n){h.BasePoint.call(this,e,"affine"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new u(t,16),this.y=new u(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function o(e,t,r,n){h.BasePoint.call(this,e,"jacobian"),null===t&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new u(0)):(this.x=new u(t,16),this.y=new u(r,16),this.z=new u(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var s=e("../curve"),a=e("../../elliptic"),u=e("bn.js"),f=e("inherits"),h=s.base,c=a.utils.assert;f(n,h),t.exports=n,n.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new u(e.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);t=n[0].cmp(n[1])<0?n[0]:n[1],t=t.toRed(this.red)}if(e.lambda)r=new u(e.lambda,16);else{var i=this._getEndoRoots(this.n);0===this.g.mul(i[0]).x.cmp(this.g.x.redMul(t))?r=i[0]:(r=i[1],c(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}var o;return o=e.basis?e.basis.map(function(e){return{a:new u(e.a,16),b:new u(e.b,16)}}):this._getEndoBasis(r),{beta:t,lambda:r,basis:o}}},n.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:u.mont(e),r=new u(2).toRed(t).redInvm(),n=r.redNeg(),i=new u(3).toRed(t).redNeg().redSqrt().redMul(r),o=n.redAdd(i).fromRed(),s=n.redSub(i).fromRed();return[o,s]},n.prototype._getEndoBasis=function(e){for(var t,r,n,i,o,s,a,f,h,c=this.n.shrn(Math.floor(this.n.bitLength()/2)),d=e,l=this.n.clone(),p=new u(1),g=new u(0),m=new u(0),b=new u(1),v=0;0!==d.cmpn(0);){var y=l.div(d);f=l.sub(y.mul(d)),h=m.sub(y.mul(p));var w=b.sub(y.mul(g));if(!n&&f.cmp(c)<0)t=a.neg(),r=p,n=f.neg(),i=h;else if(n&&2===++v)break;a=f,l=d,d=f,m=p,p=h,b=g,g=w}o=f.neg(),s=h;var _=n.sqr().add(i.sqr()),S=o.sqr().add(s.sqr());return S.cmp(_)>=0&&(o=t,s=r),n.sign&&(n=n.neg(),i=i.neg()),o.sign&&(o=o.neg(),s=s.neg()),[{a:n,b:i},{a:o,b:s}]},n.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],n=t[1],i=n.b.mul(e).divRound(this.n),o=r.b.neg().mul(e).divRound(this.n),s=i.mul(r.a),a=o.mul(n.a),u=i.mul(r.b),f=o.mul(n.b),h=e.sub(s).sub(a),c=u.add(f).neg();return{k1:h,k2:c}},n.prototype.pointFromX=function(e,t){t=new u(t,16),t.red||(t=t.toRed(this.red));var r=t.redSqr().redMul(t).redIAdd(t.redMul(this.a)).redIAdd(this.b),n=r.redSqrt(),i=n.fromRed().isOdd();return(e&&!i||!e&&i)&&(n=n.redNeg()),this.point(t,n)},n.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,n=this.a.redMul(t),i=t.redSqr().redMul(t).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(i).cmpn(0)},n.prototype._endoWnafMulAdd=function(e,t){for(var r=this._endoWnafT1,n=this._endoWnafT2,i=0;if;f++)r[f]=null,n[f]=null;return u},f(i,h.BasePoint),n.prototype.point=function(e,t,r){return new i(this,e,t,r)},n.prototype.pointFromJSON=function(e,t){return i.fromJSON(this,e,t)},i.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var t=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var r=this.curve,n=function(e){return r.point(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(n)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(n)}}}return t}},i.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},i.fromJSON=function(e,t,r){function n(t){return e.point(t[0],t[1],r)}"string"==typeof t&&(t=JSON.parse(t));var i=e.point(t[0],t[1],r);if(!t[2])return i;var o=t[2];return i.precomputed={beta:null,doubles:o.doubles&&{step:o.doubles.step,points:[i].concat(o.doubles.points.map(n))},naf:o.naf&&{wnd:o.naf.wnd,points:[i].concat(o.naf.points.map(n))}},i},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return this.inf},i.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),n=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},i.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),n=e.redInvm(),i=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(n),o=i.redSqr().redISub(this.x.redAdd(this.x)),s=i.redMul(this.x.redSub(o)).redISub(this.y);return this.curve.point(o,s)},i.prototype.getX=function(){return this.x.fromRed()},i.prototype.getY=function(){return this.y.fromRed()},i.prototype.mul=function(e){return e=new u(e,16),this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},i.prototype.mulAdd=function(e,t,r){var n=[this,t],i=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,i):this.curve._wnafMulAdd(1,n,i,2)},i.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},i.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,n=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return t},i.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var e=this.curve.jpoint(this.x,this.y,this.curve.one);return e},f(o,h.BasePoint),n.prototype.jpoint=function(e,t,r){return new o(this,e,t,r)},o.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),n=this.y.redMul(t).redMul(e);return this.curve.point(r,n)},o.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},o.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(t),i=e.x.redMul(r),o=this.y.redMul(t.redMul(e.z)),s=e.y.redMul(r.redMul(this.z)),a=n.redSub(i),u=o.redSub(s);if(0===a.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var f=a.redSqr(),h=f.redMul(a),c=n.redMul(f),d=u.redSqr().redIAdd(h).redISub(c).redISub(c),l=u.redMul(c.redISub(d)).redISub(o.redMul(h)),p=this.z.redMul(e.z).redMul(a);return this.curve.jpoint(d,l,p)},o.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,n=e.x.redMul(t),i=this.y,o=e.y.redMul(t).redMul(this.z),s=r.redSub(n),a=i.redSub(o);if(0===s.cmpn(0))return 0!==a.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=s.redSqr(),f=u.redMul(s),h=r.redMul(u),c=a.redSqr().redIAdd(f).redISub(h).redISub(h),d=a.redMul(h.redISub(c)).redISub(i.redMul(f)),l=this.z.redMul(s);return this.curve.jpoint(c,d,l)},o.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;e>r;r++)t=t.dbl();return t}for(var n=this.curve.a,i=this.curve.tinv,o=this.x,s=this.y,a=this.z,u=a.redSqr().redSqr(),f=s.redAdd(s),r=0;e>r;r++){var h=o.redSqr(),c=f.redSqr(),d=c.redSqr(),l=h.redAdd(h).redIAdd(h).redIAdd(n.redMul(u)),p=o.redMul(c),g=l.redSqr().redISub(p.redAdd(p)),m=p.redISub(g),b=l.redMul(m);b=b.redIAdd(b).redISub(d);var v=f.redMul(a);e>r+1&&(u=u.redMul(d)),o=g,a=v,f=b}return this.curve.jpoint(o,f.redMul(i),a)},o.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},o.prototype._zeroDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),s=this.x.redAdd(i).redSqr().redISub(n).redISub(o);s=s.redIAdd(s);var a=n.redAdd(n).redIAdd(n),u=a.redSqr().redISub(s).redISub(s),f=o.redIAdd(o);f=f.redIAdd(f),f=f.redIAdd(f),e=u,t=a.redMul(s.redISub(u)).redISub(f),r=this.y.redAdd(this.y)}else{var h=this.x.redSqr(),c=this.y.redSqr(),d=c.redSqr(),l=this.x.redAdd(c).redSqr().redISub(h).redISub(d);l=l.redIAdd(l);var p=h.redAdd(h).redIAdd(h),g=p.redSqr(),m=d.redIAdd(d);m=m.redIAdd(m),m=m.redIAdd(m),e=g.redISub(l).redISub(l),t=p.redMul(l.redISub(e)).redISub(m),r=this.y.redMul(this.z),r=r.redIAdd(r)}return this.curve.jpoint(e,t,r)},o.prototype._threeDbl=function(){var e,t,r;if(this.zOne){var n=this.x.redSqr(),i=this.y.redSqr(),o=i.redSqr(),s=this.x.redAdd(i).redSqr().redISub(n).redISub(o);s=s.redIAdd(s);var a=n.redAdd(n).redIAdd(n).redIAdd(this.curve.a),u=a.redSqr().redISub(s).redISub(s);e=u;var f=o.redIAdd(o);f=f.redIAdd(f),f=f.redIAdd(f),t=a.redMul(s.redISub(u)).redISub(f),r=this.y.redAdd(this.y)}else{var h=this.z.redSqr(),c=this.y.redSqr(),d=this.x.redMul(c),l=this.x.redSub(h).redMul(this.x.redAdd(h));l=l.redAdd(l).redIAdd(l);var p=d.redIAdd(d);p=p.redIAdd(p);var g=p.redAdd(p);e=l.redSqr().redISub(g),r=this.y.redAdd(this.z).redSqr().redISub(c).redISub(h);var m=c.redSqr();m=m.redIAdd(m),m=m.redIAdd(m),m=m.redIAdd(m),t=l.redMul(p.redISub(e)).redISub(m)}return this.curve.jpoint(e,t,r)},o.prototype._dbl=function(){var e=this.curve.a,t=this.x,r=this.y,n=this.z,i=n.redSqr().redSqr(),o=t.redSqr(),s=r.redSqr(),a=o.redAdd(o).redIAdd(o).redIAdd(e.redMul(i)),u=t.redAdd(t);u=u.redIAdd(u);var f=u.redMul(s),h=a.redSqr().redISub(f.redAdd(f)),c=f.redISub(h),d=s.redSqr();d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=a.redMul(c).redISub(d),p=r.redAdd(r).redMul(n);return this.curve.jpoint(h,l,p)},o.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr(),n=t.redSqr(),i=e.redAdd(e).redIAdd(e),o=i.redSqr(),s=this.x.redAdd(t).redSqr().redISub(e).redISub(n);s=s.redIAdd(s),s=s.redAdd(s).redIAdd(s),s=s.redISub(o);var a=s.redSqr(),u=n.redIAdd(n);u=u.redIAdd(u),u=u.redIAdd(u),u=u.redIAdd(u);var f=i.redIAdd(s).redSqr().redISub(o).redISub(a).redISub(u),h=t.redMul(f);h=h.redIAdd(h),h=h.redIAdd(h);var c=this.x.redMul(a).redISub(h);c=c.redIAdd(c),c=c.redIAdd(c);var d=this.y.redMul(f.redMul(u.redISub(f)).redISub(s.redMul(a)));d=d.redIAdd(d),d=d.redIAdd(d),d=d.redIAdd(d);var l=this.z.redAdd(s).redSqr().redISub(r).redISub(a);return this.curve.jpoint(c,d,l)},o.prototype.mul=function(e,t){return e=new u(e,t),this.curve._wnafMul(this,e)},o.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;var n=t.redMul(this.z),i=r.redMul(e.z);return 0===this.y.redMul(i).redISub(e.y.redMul(n)).cmpn(0)},o.prototype.inspect=function(){return this.isInfinity()?"":""},o.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../../elliptic":197,"../curve":200,"bn.js":98,inherits:226}],203:[function(e,t,r){arguments[4][64][0].apply(r,arguments)},{"../elliptic":197,"./precomputed/secp256k1":208,dup:64,"hash.js":219}],204:[function(e,t,r){"use strict";function n(e){return this instanceof n?("string"==typeof e&&(a(o.curves.hasOwnProperty(e),"Unknown curve "+e),e=o.curves[e]),e instanceof o.curves.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.shrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),void(this.hash=e.hash||e.curve.hash)):new n(e)}var i=e("bn.js"),o=e("../../elliptic"),s=o.utils,a=s.assert,u=e("./key"),f=e("./signature");t.exports=n,n.prototype.keyPair=function(e){return new u(this,e)},n.prototype.keyFromPrivate=function(e,t){return u.fromPrivate(this,e,t)},n.prototype.keyFromPublic=function(e,t){return u.fromPublic(this,e,t)},n.prototype.genKeyPair=function(e){e||(e={});for(var t=new o.hmacDRBG({hash:this.hash,pers:e.pers,entropy:e.entropy||o.rand(this.hash.hmacStrength),nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var s=new i(t.generate(r));if(!(s.cmp(n)>0))return s.iaddn(1),this.keyFromPrivate(s)}},n.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.shrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},n.prototype.sign=function(e,t,r,n){"object"==typeof r&&(n=r,r=null),n||(n={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new i(e,16));for(var s=this.n.byteLength(),a=t.getPrivate().toArray(),u=a.length;21>u;u++)a.unshift(0);for(var h=e.toArray(),u=h.length;s>u;u++)h.unshift(0);for(var c=new o.hmacDRBG({hash:this.hash,entropy:a,nonce:h}),d=this.n.sub(new i(1));;){var l=new i(c.generate(this.n.byteLength()));if(l=this._truncateToN(l,!0),!(l.cmpn(1)<=0||l.cmp(d)>=0)){var p=this.g.mul(l);if(!p.isInfinity()){var g=p.getX(),m=g.mod(this.n);if(0!==m.cmpn(0)){var b=l.invm(this.n).mul(m.mul(t.getPrivate()).iadd(e)).mod(this.n);if(0!==b.cmpn(0)){n.canonical&&b.cmp(this.nh)>0&&(b=this.n.sub(b));var v=(p.getY().isOdd()?1:0)|(0!==g.cmp(m)?2:0);return new f({r:m,s:b,recoveryParam:v})}}}}}},n.prototype.verify=function(e,t,r,n){e=this._truncateToN(new i(e,16)),r=this.keyFromPublic(r,n),t=new f(t,"hex");var o=t.r,s=t.s;if(o.cmpn(1)<0||o.cmp(this.n)>=0)return!1;if(s.cmpn(1)<0||s.cmp(this.n)>=0)return!1;var a=s.invm(this.n),u=a.mul(e).mod(this.n),h=a.mul(o).mod(this.n),c=this.g.mulAdd(u,r.getPublic(),h);return c.isInfinity()?!1:0===c.getX().mod(this.n).cmp(o)},n.prototype.recoverPubKey=function(e,t,r,n){a((3&r)===r,"The recovery param is more than two bits"),t=new f(t,n);var o=this.n,s=new i(e),u=t.r,h=t.s,c=1&r,d=r>>1;if(u.cmp(this.curve.p.mod(this.curve.n))>=0&&d)throw new Error("Unable to find sencond key candinate");u=this.curve.pointFromX(c,u);var l=s.neg().mod(o),p=t.r.invm(o);return u.mul(h).add(this.g.mul(l)).mul(p)},n.prototype.getKeyRecoveryParam=function(e,t,r,n){if(t=new f(t,n),null!==t.recoveryParam)return t.recoveryParam;for(var i=0;4>i;i++){var o=this.recoverPubKey(e,t,i);if(o.eq(r))return i}throw new Error("Unable to find valid recovery factor")}},{"../../elliptic":197,"./key":205,"./signature":206,"bn.js":98}],205:[function(e,t,r){arguments[4][66][0].apply(r,arguments)},{"../../elliptic":197,"bn.js":98,dup:66}],206:[function(e,t,r){"use strict";function n(e,t){return e instanceof n?e:void(this._importDER(e,t)||(a(e.r&&e.s,"Signature without r or s"),this.r=new i(e.r,16),this.s=new i(e.s,16),null!==e.recoveryParam?this.recoveryParam=e.recoveryParam:this.recoveryParam=null))}var i=e("bn.js"),o=e("../../elliptic"),s=o.utils,a=s.assert;t.exports=n,n.prototype._importDER=function(e,t){if(e=s.toArray(e,t),e.length<6||48!==e[0]||2!==e[2])return!1;var r=e[1];if(1+r>e.length)return!1;var n=e[3];if(n>=128)return!1;if(4+n+2>=e.length)return!1;if(2!==e[4+n])return!1;var o=e[5+n];return o>=128?!1:4+n+2+o>e.length?!1:(this.r=new i(e.slice(4,4+n)),this.s=new i(e.slice(4+n+2,4+n+2+o)),this.recoveryParam=null,!0)},n.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r));var n=t.length+r.length+4,i=[48,n,2,t.length];return i=i.concat(t,[2,r.length],r),s.encode(i,e)}},{"../../elliptic":197,"bn.js":98}],207:[function(e,t,r){arguments[4][68][0].apply(r,arguments)},{"../elliptic":197,dup:68,"hash.js":219}],208:[function(e,t,r){arguments[4][69][0].apply(r,arguments)},{dup:69}],209:[function(e,t,r){arguments[4][70][0].apply(r,arguments)},{dup:70}],210:[function(e,t,r){t.exports={_args:[["elliptic@^3.1.0","/Users/pelleb/code/clients/consensys/eth-lightwallet"]],_from:"elliptic@>=3.1.0 <4.0.0",_id:"elliptic@3.1.0",_inCache:!0,_installable:!0,_location:"/elliptic",_nodeVersion:"2.2.1",_npmUser:{email:"fedor@indutny.com",name:"indutny"},_npmVersion:"2.11.0",_phantomChildren:{},_requested:{name:"elliptic",raw:"elliptic@^3.1.0",rawSpec:"^3.1.0",scope:null,spec:">=3.1.0 <4.0.0",type:"range"},_requiredBy:["/"],_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-3.1.0.tgz",_shasum:"c21682ef762769b56a74201609105da11d5f60cc",_shrinkwrap:null,_spec:"elliptic@^3.1.0",_where:"/Users/pelleb/code/clients/consensys/eth-lightwallet",author:{email:"fedor@indutny.com",name:"Fedor Indutny"},bugs:{url:"https://github.com/indutny/elliptic/issues"},dependencies:{"bn.js":"^2.0.3",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},description:"EC cryptography",devDependencies:{browserify:"^3.44.2",jscs:"^1.11.3",jshint:"^2.6.0",mocha:"^2.1.0","uglify-js":"^2.4.13"},directories:{},dist:{shasum:"c21682ef762769b56a74201609105da11d5f60cc",tarball:"http://registry.npmjs.org/elliptic/-/elliptic-3.1.0.tgz"},gitHead:"d86cd2a8178f7e7cecbd6dd92eea084e2ab44c13",homepage:"https://github.com/indutny/elliptic",keywords:["Cryptography","EC","Elliptic","curve"],license:"MIT",main:"lib/elliptic.js",maintainers:[{name:"indutny",email:"fedor@indutny.com"}],name:"elliptic",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},scripts:{test:"make lint && mocha --reporter=spec test/*-test.js"},version:"3.1.0"}},{}],211:[function(e,t,r){t.exports={genesisGasLimit:{v:5e3,d:"Gas limit of the Genesis block."},genesisDifficulty:{v:17179869184,d:"Difficulty of the Genesis block."},genesisNonce:{v:"0x0000000000000042",d:"the geneis nonce"},genesisExtraData:{v:"0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",d:"extra data "},genesisHash:{v:"0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",d:"genesis hash"},genesisStateRoot:{v:"0xd7f8974fb5ac78d9ac099b9ad5018bedc2ce0a72dad1827a1709da30580f0544",d:"the genesis state root"},minGasLimit:{v:5e3,d:"Minimum the gas limit may ever be."},gasLimitBoundDivisor:{v:1024,d:"The bound divisor of the gas limit, used in update calculations."},minimumDifficulty:{v:131072,d:"The minimum that the difficulty may ever be."},difficultyBoundDivisor:{v:2048,d:"The bound divisor of the difficulty, used in the update calculations."},durationLimit:{v:13,d:"The decision boundary on the blocktime duration used to determine whether difficulty should go up or not."},maximumExtraDataSize:{v:32,d:"Maximum size extra data may be after Genesis."},epochDuration:{v:3e4,d:"Duration between proof-of-work epochs."},stackLimit:{v:1024,d:"Maximum size of VM stack allowed."},callCreateDepth:{v:1024,d:"Maximum depth of call/create stack."},tierStepGas:{v:[0,2,3,5,8,10,20],d:"Once per operation, for a selection of them."},expGas:{v:10,d:"Once per EXP instuction."},expByteGas:{v:10,d:"Times ceil(log256(exponent)) for the EXP instruction."},sha3Gas:{v:30,d:"Once per SHA3 operation."},sha3WordGas:{v:6,d:"Once per word of the SHA3 operation's data."},sloadGas:{v:50,d:"Once per SLOAD operation."},sstoreSetGas:{v:2e4,d:"Once per SSTORE operation if the zeroness changes from zero."},sstoreResetGas:{v:5e3,d:"Once per SSTORE operation if the zeroness does not change from zero."},sstoreRefundGas:{v:15e3,d:"Once per SSTORE operation if the zeroness changes to zero."},jumpdestGas:{v:1,d:"Refunded gas, once per SSTORE operation if the zeroness changes to zero."},logGas:{v:375,d:"Per LOG* operation."},logDataGas:{v:8,d:"Per byte in a LOG* operation's data."},logTopicGas:{v:375,d:"Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas."},createGas:{v:32e3,d:"Once per CREATE operation & contract-creation transaction."},callGas:{v:40,d:"Once per CALL operation & message call transaction."},callStipend:{v:2300,d:"Free gas given at beginning of call."},callValueTransferGas:{v:9e3,d:"Paid for CALL when the value transfor is non-zero."},callNewAccountGas:{v:25e3,d:"Paid for CALL when the destination address didn't exist prior."},suicideRefundGas:{v:24e3,d:"Refunded following a suicide operation."},memoryGas:{v:3,d:"Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL."},quadCoeffDiv:{v:512,d:"Divisor for the quadratic particle of the memory cost equation."},createDataGas:{v:200,d:""},txGas:{v:21e3,d:"Per transaction. NOTE: Not payable on data of calls between transactions."},txCreation:{v:32e3,d:"the cost of creating a contract via tx"},txDataZeroGas:{v:4,d:"Per byte of data attached to a transaction that equals zero. NOTE: Not payable on data of calls between transactions."},txDataNonZeroGas:{v:68,d:"Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions."},copyGas:{v:3,d:"Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added."},ecrecoverGas:{v:3e3,d:""},sha256Gas:{v:60,d:""},sha256WordGas:{v:12,d:""},ripemd160Gas:{v:600,d:""},ripemd160WordGas:{v:120,d:""},identityGas:{v:15,d:""},identityWordGas:{v:3,d:""},minerReward:{v:"5000000000000000000",d:"the amount a miner get rewarded for mining a block"},ommerReward:{v:"625000000000000000",d:"The amount of wei a miner of an uncle block gets for being inculded in the blockchain"},niblingReward:{v:"156250000000000000",d:"the amount a miner gets for inculding a uncle"},homeSteadForkNumber:{v:1e6,d:"the block that the homestead fork started at"},timebombPeriod:{v:1e5,d:"Exponential difficulty timebomb period"},freeBlockPeriod:{v:2}}},{}],212:[function(e,t,r){t.exports=e("./params.json")},{"./params.json":211}],213:[function(e,t,r){(function(r,n){const i=e("ethereumjs-util"),o=e("ethereum-common/params"),s=i.BN,a=new s("7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0",16);r.Buffer=n,r.ethUtil=i;var u=t.exports=function(e){const t=[{name:"nonce",length:32,allowLess:!0,"default":new n([])},{name:"gasPrice",length:32,allowLess:!0,"default":new n([])},{name:"gasLimit",alias:"gas",length:32,allowLess:!0,"default":new n([])},{name:"to",allowZero:!0,length:20,"default":new n([])},{name:"value",length:32,allowLess:!0,"default":new n([])},{name:"data",alias:"input",allowZero:!0,"default":new n([])},{name:"v",length:1,"default":new n([28])},{name:"r",length:32,allowLess:!0,"default":new n([])},{name:"s",length:32,allowLess:!0,"default":new n([])}];i.defineProperties(this,t,e),Object.defineProperty(this,"from",{enumerable:!0,configurable:!0,get:this.getSenderAddress.bind(this)}),this._homestead=!0};u.prototype.toCreationAddress=function(){return""===this.to.toString("hex")},u.prototype.hash=function(e){var t;return"undefined"==typeof e&&(e=!0),t=e?this.raw:this.raw.slice(0,6),i.rlphash(t)},u.prototype.getSenderAddress=function(){if(this._from)return this._from;var e=this.getSenderPublicKey();return this._from=i.publicToAddress(e),this._from},u.prototype.getSenderPublicKey=function(){return this._senderPubKey&&this._senderPubKey.length||this.verifySignature(),this._senderPubKey},u.prototype.verifySignature=function(){var e=this.hash(!1);if(this._homestead&&1===new s(this.s).cmp(a))return!1;try{this._senderPubKey=i.ecrecover(e,this.v,this.r,this.s)}catch(t){return!1}return!!this._senderPubKey},u.prototype.sign=function(e){var t=this.hash(!1),r=i.ecsign(t,e);Object.assign(this,r)},u.prototype.getDataFee=function(){const e=this.raw[5];for(var t=new s(0),r=0;r0&&t.push(["gas limit is to low. Need at least "+this.getBaseFee()]),void 0===e||e===!1?0===t.length:t.join(" ")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{buffer:147,"ethereum-common/params":212,"ethereumjs-util":214}],214:[function(e,t,r){(function(t){const n=e("keccakjs"),i=e("secp256k1"),o=e("assert"),s=e("rlp"),a=e("bn.js"),u=e("crypto");r.MAX_INTEGER=new a("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",16),r.TWO_POW256=new a("10000000000000000000000000000000000000000000000000000000000000000",16),r.SHA3_NULL_S="c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",r.SHA3_NULL=new t(r.SHA3_NULL_S,"hex"),r.SHA3_RLP_ARRAY_S="1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",r.SHA3_RLP_ARRAY=new t(r.SHA3_RLP_ARRAY_S,"hex"),r.SHA3_RLP_S="56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",r.SHA3_RLP=new t(r.SHA3_RLP_S,"hex"),r.BN=a,r.rlp=s,r.secp256k1=i,r.zeros=function(e){var r=new t(e);return r.fill(0),r},r.setLengthLeft=r.setLength=function(e,t,n){var i=r.zeros(t);return e=r.toBuffer(e),n?e.length0&&"0"===t.toString();)e=e.slice(1),t=e[0];return e},r.toBuffer=function(e){if(!t.isBuffer(e))if(Array.isArray(e))e=new t(e);else if("string"==typeof e)e=r.isHexPrefixed(e)?new t(r.padToEven(r.stripHexPrefix(e)),"hex"):new t(e);else if("number"==typeof e)e=r.intToBuffer(e);else if(null===e||void 0===e)e=new t([]);else{if(!e.toArray)throw new Error("invalid type");e=new t(e.toArray())}return e},r.intToHex=function(e){o(e%1===0,"number is not a integer"),o(e>=0,"number must be positive");var t=e.toString(16);return t.length%2&&(t="0"+t),"0x"+t},r.intToBuffer=function(e){var n=r.intToHex(e);return new t(n.slice(2),"hex")},r.bufferToInt=function(e){return e=r.toBuffer(e),0===e.length?0:parseInt(e.toString("hex"),16)},r.fromSigned=function(e){return new a(e).fromTwos(256)},r.toUnsigned=function(e){return new t(e.toTwos(256).toArray())},r.sha3=function(e,i){e=r.toBuffer(e),i||(i=256);var o=new n(i);return e&&o.update(e),new t(o.digest("hex"),"hex")},r.sha256=function(e){return e=r.toBuffer(e),u.createHash("SHA256").update(e).digest()},r.ripemd160=function(e,t){e=r.toBuffer(e);var n=u.createHash("rmd160").update(e).digest();return t===!0?r.setLength(n,32):n},r.rlphash=function(e){return r.sha3(s.encode(e))},r.pubToAddress=r.publicToAddress=function(e,t){return e=r.toBuffer(e),t&&64!==e.length&&(e=i.publicKeyConvert(e,!1).slice(1)),o(64===e.length),r.sha3(e).slice(-20)};var f=r.privateToPublic=function(e){return e=r.toBuffer(e),i.publicKeyConvert(i.publicKeyCreate(e),!1).slice(1)};r.privateToAddress=function(e){return r.publicToAddress(f(e))},r.generateAddress=function(e,n){return e=r.toBuffer(e),n=new a(n),n=n.isZero()?null:new t(n.toArray()),r.rlphash([e,n]).slice(-20)},r.isPrecompiled=function(e){var t=r.unpad(e);return 1===t.length&&t[0]>0&&t[0]<5},r.isHexPrefixed=function(e){return"0x"===e.slice(0,2)},r.stripHexPrefix=function(e){return"string"!=typeof e?e:r.isHexPrefixed(e)?e.slice(2):e},r.addHexPrefix=function(e){return"string"!=typeof e?e:r.isHexPrefixed(e)?e:"0x"+e},r.padToEven=function(e){return e.length%2&&(e="0"+e),e},r.ecsign=function(e,t){var r=i.sign(e,t),n={};return n.r=r.signature.slice(0,32),n.s=r.signature.slice(32,64),n.v=r.recovery+27,n},r.ecrecover=function(e,n,o,s){var a=t.concat([r.setLength(o,32),r.setLength(s,32)],64),u=r.bufferToInt(n)-27;if(n>28||27>n)throw new Error("Invalid v value");var f=i.recover(e,a,u);return i.publicKeyConvert(f,!1).slice(1)},r.baToJSON=function(e){if(t.isBuffer(e))return"0x"+e.toString("hex");if(e instanceof Array){for(var n=[],i=0;i=s.length,"The field "+n.name+" must not have more "+n.length+" bytes")):n.allowZero&&0===s.length||!n.length||o(n.length===s.length,"The field "+n.name+" must have byte length of "+n.length),e.raw[i]=s}e._fields.push(n.name),Object.defineProperty(e,n.name,{enumerable:!0,configurable:!0,get:s,set:a}),n["default"]&&(e[n.name]=n["default"]),n.alias&&Object.defineProperty(e,n.alias,{enumerable:!1,configurable:!0,set:a,get:s})}),i)if("string"==typeof i&&(i=new t(r.stripHexPrefix(i),"hex")),t.isBuffer(i)&&(i=s.decode(i)),Array.isArray(i)){if(i.length>e._fields.length)throw new Error("wrong number of fields in data");i.forEach(function(t,n){e[e._fields[n]]=r.toBuffer(t)})}else{if("object"!=typeof i)throw new Error("invalid data");for(var a in i)-1!==e._fields.indexOf(a)&&(e[a]=i[a])}}}).call(this,e("buffer").Buffer)},{assert:7,"bn.js":215,buffer:147,crypto:174,keccakjs:230,rlp:216,secp256k1:260}],215:[function(e,t,r){!function(t,r){"use strict";function n(e,t){if(!e)throw new Error(t||"Assertion failed")}function i(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function o(e,t,r){return o.isBN(e)?e:(this.negative=0,this.words=null,this.length=0,this.red=null,void(null!==e&&(("le"===t||"be"===t)&&(r=t,t=10),this._init(e||0,t||10,r||"be"))))}function s(e,t,r){for(var n=0,i=Math.min(e.length,r),o=t;i>o;o++){ +var s=e.charCodeAt(o)-48;n<<=4,n|=s>=49&&54>=s?s-49+10:s>=17&&22>=s?s-17+10:15&s}return n}function a(e,t,r,n){for(var i=0,o=Math.min(e.length,r),s=t;o>s;s++){var a=e.charCodeAt(s)-48;i*=n,i+=a>=49?a-49+10:a>=17?a-17+10:a}return i}function u(e){for(var t=new Array(e.bitLength()),r=0;r>>i}return t}function f(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var i=0|e.words[0],o=0|t.words[0],s=i*o,a=67108863&s,u=s/67108864|0;r.words[0]=a;for(var f=1;n>f;f++){for(var h=u>>>26,c=67108863&u,d=Math.min(f,t.length-1),l=Math.max(0,f-e.length+1);d>=l;l++){var p=f-l|0;i=0|e.words[p],o=0|t.words[l],s=i*o+c,h+=s/67108864|0,c=67108863&s}r.words[f]=0|c,u=0|h}return 0!==u?r.words[f]=0|u:r.length--,r.strip()}function h(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,i=0,o=0;o=f;f++){var h=o-f,c=0|e.words[h],d=0|t.words[f],l=c*d,p=67108863&l;s=s+(l/67108864|0)|0,p=p+a|0,a=67108863&p,s=s+(p>>>26)|0,i+=s>>>26,s&=67108863}r.words[o]=a,n=s,s=i}return 0!==n?r.words[o]=n:r.length--,r.strip()}function c(e,t,r){var n=new d;return n.mulp(e,t,r)}function d(e,t){this.x=e,this.y=t}function l(e,t){this.name=e,this.p=new o(t,16),this.n=this.p.bitLength(),this.k=new o(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function p(){l.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function g(){l.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function m(){l.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function b(){l.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function v(e){if("string"==typeof e){var t=o._prime(e);this.m=t.p,this.prime=t}else this.m=e,this.prime=null}function y(e){v.call(this,e),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new o(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof t?t.exports=o:r.BN=o,o.BN=o,o.wordSize=26;var w;try{w=e("buffer").Buffer}catch(_){}o.isBN=function(e){return null!==e&&"object"==typeof e&&"BN"===e.constructor.name&&Array.isArray(e.words)},o.max=function(e,t){return e.cmp(t)>0?e:t},o.min=function(e,t){return e.cmp(t)<0?e:t},o.prototype._init=function(e,t,r){if("number"==typeof e)return this._initNumber(e,t,r);if("object"==typeof e)return this._initArray(e,t,r);"hex"===t&&(t=16),n(t===(0|t)&&t>=2&&36>=t),e=e.toString().replace(/\s+/g,"");var i=0;"-"===e[0]&&i++,16===t?this._parseHex(e,i):this._parseBase(e,t,i),"-"===e[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),t,r)},o.prototype._initNumber=function(e,t,r){0>e&&(this.negative=1,e=-e),67108864>e?(this.words=[67108863&e],this.length=1):4503599627370496>e?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(n(9007199254740992>e),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),t,r)},o.prototype._initArray=function(e,t,r){if(n("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var i=0;i=0;i-=3)s=e[i]|e[i-1]<<8|e[i-2]<<16,this.words[o]|=s<>>26-a&67108863,a+=24,a>=26&&(a-=26,o++);else if("le"===r)for(i=0,o=0;i>>26-a&67108863,a+=24,a>=26&&(a-=26,o++);return this.strip()},o.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6)i=s(e,r,r+6),this.words[n]|=i<>>26-o&4194303,o+=24,o>=26&&(o-=26,n++);r+6!==t&&(i=s(e,t,r+6),this.words[n]|=i<>>26-o&4194303),this.strip()},o.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,i=1;67108863>=i;i*=t)n++;n--,i=i/t|0;for(var o=e.length-r,s=o%n,u=Math.min(o,o-s)+r,f=0,h=r;u>h;h+=n)f=a(e,h,h+n,t),this.imuln(i),this.words[0]+f<67108864?this.words[0]+=f:this._iaddn(f);if(0!==s){var c=1;for(f=a(e,h,e.length,t),h=0;s>h;h++)c*=t;this.imuln(c),this.words[0]+f<67108864?this.words[0]+=f:this._iaddn(f)}},o.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t1&&0===this.words[this.length-1];)this.length--;return this._normSign()},o.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},o.prototype.inspect=function(){return(this.red?""};var S=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],A=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],I=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];o.prototype.toString=function(e,t){e=e||10,t=0|t||1;var r;if(16===e||"hex"===e){r="";for(var i=0,o=0,s=0;s>>24-i&16777215,r=0!==o||s!==this.length-1?S[6-u.length]+u+r:u+r,i+=2,i>=26&&(i-=26,s--)}for(0!==o&&(r=o.toString(16)+r);r.length%t!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&36>=e){var f=A[e],h=I[e];r="";var c=this.clone();for(c.negative=0;!c.isZero();){var d=c.modn(h).toString(e);c=c.idivn(h),r=c.isZero()?d+r:S[f-d.length]+d+r}for(this.isZero()&&(r="0"+r);r.length%t!==0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},o.prototype.toNumber=function(){var e,t=this.bitLength();return 26>=t?e=this.words[0]:52>=t?e=67108864*this.words[1]+this.words[0]:53===t?e=4503599627370496+67108864*this.words[1]+this.words[0]:n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},o.prototype.toJSON=function(){return this.toString(16)},o.prototype.toBuffer=function(e,t){return n("undefined"!=typeof w),this.toArrayLike(w,e,t)},o.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},o.prototype.toArrayLike=function(e,t,r){var i=this.byteLength(),o=r||Math.max(1,i);n(o>=i,"byte array longer than desired length"),n(o>0,"Requested array length <= 0"),this.strip();var s,a,u="le"===t,f=new e(o),h=this.clone();if(u){for(a=0;!h.isZero();a++)s=h.andln(255),h.iushrn(8),f[a]=s;for(;o>a;a++)f[a]=0}else{for(a=0;o-i>a;a++)f[a]=0;for(a=0;!h.isZero();a++)s=h.andln(255),h.iushrn(8),f[o-a-1]=s}return f},Math.clz32?o.prototype._countBits=function(e){return 32-Math.clz32(e)}:o.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},o.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0===(8191&t)&&(r+=13,t>>>=13),0===(127&t)&&(r+=7,t>>>=7),0===(15&t)&&(r+=4,t>>>=4),0===(3&t)&&(r+=2,t>>>=2),0===(1&t)&&r++,r},o.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},o.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},o.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},o.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},o.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},o.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},o.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},o.prototype.inotn=function(e){n("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var i=0;t>i;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},o.prototype.notn=function(e){return this.clone().inotn(e)},o.prototype.setn=function(e,t){n("number"==typeof e&&e>=0);var r=e/26|0,i=e%26;return this._expand(r+1),t?this.words[r]=this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var i=0,o=0;o>>26;for(;0!==i&&o>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;oe.length?this.clone().iadd(e):e.clone().iadd(this)},o.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r=this.cmp(e);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=e):(n=e,i=this);for(var o=0,s=0;s>26,this.words[s]=67108863&t;for(;0!==o&&s>26,this.words[s]=67108863&t;if(0===o&&s>>13,l=0|s[1],p=8191&l,g=l>>>13,m=0|s[2],b=8191&m,v=m>>>13,y=0|s[3],w=8191&y,_=y>>>13,S=0|s[4],A=8191&S,I=S>>>13,E=0|s[5],k=8191&E,x=E>>>13,M=0|s[6],P=8191&M,B=M>>>13,O=0|s[7],R=8191&O,T=O>>>13,N=0|s[8],C=8191&N,j=N>>>13,L=0|s[9],D=8191&L,z=L>>>13,U=0|a[0],K=8191&U,F=U>>>13,H=0|a[1],q=8191&H,V=H>>>13,Y=0|a[2],G=8191&Y,W=Y>>>13,X=0|a[3],Z=8191&X,J=X>>>13,$=0|a[4],Q=8191&$,ee=$>>>13,te=0|a[5],re=8191&te,ne=te>>>13,ie=0|a[6],oe=8191&ie,se=ie>>>13,ae=0|a[7],ue=8191&ae,fe=ae>>>13,he=0|a[8],ce=8191&he,de=he>>>13,le=0|a[9],pe=8191&le,ge=le>>>13;r.negative=e.negative^t.negative,r.length=19,n=Math.imul(c,K),i=Math.imul(c,F),i+=Math.imul(d,K),o=Math.imul(d,F);var me=f+n+((8191&i)<<13);f=o+(i>>>13)+(me>>>26),me&=67108863,n=Math.imul(p,K),i=Math.imul(p,F),i+=Math.imul(g,K),o=Math.imul(g,F),n+=Math.imul(c,q),i+=Math.imul(c,V),i+=Math.imul(d,q),o+=Math.imul(d,V);var be=f+n+((8191&i)<<13);f=o+(i>>>13)+(be>>>26),be&=67108863,n=Math.imul(b,K),i=Math.imul(b,F),i+=Math.imul(v,K),o=Math.imul(v,F),n+=Math.imul(p,q),i+=Math.imul(p,V),i+=Math.imul(g,q),o+=Math.imul(g,V),n+=Math.imul(c,G),i+=Math.imul(c,W),i+=Math.imul(d,G),o+=Math.imul(d,W);var ve=f+n+((8191&i)<<13);f=o+(i>>>13)+(ve>>>26),ve&=67108863,n=Math.imul(w,K),i=Math.imul(w,F),i+=Math.imul(_,K),o=Math.imul(_,F),n+=Math.imul(b,q),i+=Math.imul(b,V),i+=Math.imul(v,q),o+=Math.imul(v,V),n+=Math.imul(p,G),i+=Math.imul(p,W),i+=Math.imul(g,G),o+=Math.imul(g,W),n+=Math.imul(c,Z),i+=Math.imul(c,J),i+=Math.imul(d,Z),o+=Math.imul(d,J);var ye=f+n+((8191&i)<<13);f=o+(i>>>13)+(ye>>>26),ye&=67108863,n=Math.imul(A,K),i=Math.imul(A,F),i+=Math.imul(I,K),o=Math.imul(I,F),n+=Math.imul(w,q),i+=Math.imul(w,V),i+=Math.imul(_,q),o+=Math.imul(_,V),n+=Math.imul(b,G),i+=Math.imul(b,W),i+=Math.imul(v,G),o+=Math.imul(v,W),n+=Math.imul(p,Z),i+=Math.imul(p,J),i+=Math.imul(g,Z),o+=Math.imul(g,J),n+=Math.imul(c,Q),i+=Math.imul(c,ee),i+=Math.imul(d,Q),o+=Math.imul(d,ee);var we=f+n+((8191&i)<<13);f=o+(i>>>13)+(we>>>26),we&=67108863,n=Math.imul(k,K),i=Math.imul(k,F),i+=Math.imul(x,K),o=Math.imul(x,F),n+=Math.imul(A,q),i+=Math.imul(A,V),i+=Math.imul(I,q),o+=Math.imul(I,V),n+=Math.imul(w,G),i+=Math.imul(w,W),i+=Math.imul(_,G),o+=Math.imul(_,W),n+=Math.imul(b,Z),i+=Math.imul(b,J),i+=Math.imul(v,Z),o+=Math.imul(v,J),n+=Math.imul(p,Q),i+=Math.imul(p,ee),i+=Math.imul(g,Q),o+=Math.imul(g,ee),n+=Math.imul(c,re),i+=Math.imul(c,ne),i+=Math.imul(d,re),o+=Math.imul(d,ne);var _e=f+n+((8191&i)<<13);f=o+(i>>>13)+(_e>>>26),_e&=67108863,n=Math.imul(P,K),i=Math.imul(P,F),i+=Math.imul(B,K),o=Math.imul(B,F),n+=Math.imul(k,q),i+=Math.imul(k,V),i+=Math.imul(x,q),o+=Math.imul(x,V),n+=Math.imul(A,G),i+=Math.imul(A,W),i+=Math.imul(I,G),o+=Math.imul(I,W),n+=Math.imul(w,Z),i+=Math.imul(w,J),i+=Math.imul(_,Z),o+=Math.imul(_,J),n+=Math.imul(b,Q),i+=Math.imul(b,ee),i+=Math.imul(v,Q),o+=Math.imul(v,ee),n+=Math.imul(p,re),i+=Math.imul(p,ne),i+=Math.imul(g,re),o+=Math.imul(g,ne),n+=Math.imul(c,oe),i+=Math.imul(c,se),i+=Math.imul(d,oe),o+=Math.imul(d,se);var Se=f+n+((8191&i)<<13);f=o+(i>>>13)+(Se>>>26),Se&=67108863,n=Math.imul(R,K),i=Math.imul(R,F),i+=Math.imul(T,K),o=Math.imul(T,F),n+=Math.imul(P,q),i+=Math.imul(P,V),i+=Math.imul(B,q),o+=Math.imul(B,V),n+=Math.imul(k,G),i+=Math.imul(k,W),i+=Math.imul(x,G),o+=Math.imul(x,W),n+=Math.imul(A,Z),i+=Math.imul(A,J),i+=Math.imul(I,Z),o+=Math.imul(I,J),n+=Math.imul(w,Q),i+=Math.imul(w,ee),i+=Math.imul(_,Q),o+=Math.imul(_,ee),n+=Math.imul(b,re),i+=Math.imul(b,ne),i+=Math.imul(v,re),o+=Math.imul(v,ne),n+=Math.imul(p,oe),i+=Math.imul(p,se),i+=Math.imul(g,oe),o+=Math.imul(g,se),n+=Math.imul(c,ue),i+=Math.imul(c,fe),i+=Math.imul(d,ue),o+=Math.imul(d,fe);var Ae=f+n+((8191&i)<<13);f=o+(i>>>13)+(Ae>>>26),Ae&=67108863,n=Math.imul(C,K),i=Math.imul(C,F),i+=Math.imul(j,K),o=Math.imul(j,F),n+=Math.imul(R,q),i+=Math.imul(R,V),i+=Math.imul(T,q),o+=Math.imul(T,V),n+=Math.imul(P,G),i+=Math.imul(P,W),i+=Math.imul(B,G),o+=Math.imul(B,W),n+=Math.imul(k,Z),i+=Math.imul(k,J),i+=Math.imul(x,Z),o+=Math.imul(x,J),n+=Math.imul(A,Q),i+=Math.imul(A,ee),i+=Math.imul(I,Q),o+=Math.imul(I,ee),n+=Math.imul(w,re),i+=Math.imul(w,ne),i+=Math.imul(_,re),o+=Math.imul(_,ne),n+=Math.imul(b,oe),i+=Math.imul(b,se),i+=Math.imul(v,oe),o+=Math.imul(v,se),n+=Math.imul(p,ue),i+=Math.imul(p,fe),i+=Math.imul(g,ue),o+=Math.imul(g,fe),n+=Math.imul(c,ce),i+=Math.imul(c,de),i+=Math.imul(d,ce),o+=Math.imul(d,de);var Ie=f+n+((8191&i)<<13);f=o+(i>>>13)+(Ie>>>26),Ie&=67108863,n=Math.imul(D,K),i=Math.imul(D,F),i+=Math.imul(z,K),o=Math.imul(z,F),n+=Math.imul(C,q),i+=Math.imul(C,V),i+=Math.imul(j,q),o+=Math.imul(j,V),n+=Math.imul(R,G),i+=Math.imul(R,W),i+=Math.imul(T,G),o+=Math.imul(T,W),n+=Math.imul(P,Z),i+=Math.imul(P,J),i+=Math.imul(B,Z),o+=Math.imul(B,J),n+=Math.imul(k,Q),i+=Math.imul(k,ee),i+=Math.imul(x,Q),o+=Math.imul(x,ee),n+=Math.imul(A,re),i+=Math.imul(A,ne),i+=Math.imul(I,re),o+=Math.imul(I,ne),n+=Math.imul(w,oe),i+=Math.imul(w,se),i+=Math.imul(_,oe),o+=Math.imul(_,se),n+=Math.imul(b,ue),i+=Math.imul(b,fe),i+=Math.imul(v,ue),o+=Math.imul(v,fe),n+=Math.imul(p,ce),i+=Math.imul(p,de),i+=Math.imul(g,ce),o+=Math.imul(g,de),n+=Math.imul(c,pe),i+=Math.imul(c,ge),i+=Math.imul(d,pe),o+=Math.imul(d,ge);var Ee=f+n+((8191&i)<<13);f=o+(i>>>13)+(Ee>>>26),Ee&=67108863,n=Math.imul(D,q),i=Math.imul(D,V),i+=Math.imul(z,q),o=Math.imul(z,V),n+=Math.imul(C,G),i+=Math.imul(C,W),i+=Math.imul(j,G),o+=Math.imul(j,W),n+=Math.imul(R,Z),i+=Math.imul(R,J),i+=Math.imul(T,Z),o+=Math.imul(T,J),n+=Math.imul(P,Q),i+=Math.imul(P,ee),i+=Math.imul(B,Q),o+=Math.imul(B,ee),n+=Math.imul(k,re),i+=Math.imul(k,ne),i+=Math.imul(x,re),o+=Math.imul(x,ne),n+=Math.imul(A,oe),i+=Math.imul(A,se),i+=Math.imul(I,oe),o+=Math.imul(I,se),n+=Math.imul(w,ue),i+=Math.imul(w,fe),i+=Math.imul(_,ue),o+=Math.imul(_,fe),n+=Math.imul(b,ce),i+=Math.imul(b,de),i+=Math.imul(v,ce),o+=Math.imul(v,de),n+=Math.imul(p,pe),i+=Math.imul(p,ge),i+=Math.imul(g,pe),o+=Math.imul(g,ge);var ke=f+n+((8191&i)<<13);f=o+(i>>>13)+(ke>>>26),ke&=67108863,n=Math.imul(D,G),i=Math.imul(D,W),i+=Math.imul(z,G),o=Math.imul(z,W),n+=Math.imul(C,Z),i+=Math.imul(C,J),i+=Math.imul(j,Z),o+=Math.imul(j,J),n+=Math.imul(R,Q),i+=Math.imul(R,ee),i+=Math.imul(T,Q),o+=Math.imul(T,ee),n+=Math.imul(P,re),i+=Math.imul(P,ne),i+=Math.imul(B,re),o+=Math.imul(B,ne),n+=Math.imul(k,oe),i+=Math.imul(k,se),i+=Math.imul(x,oe),o+=Math.imul(x,se),n+=Math.imul(A,ue),i+=Math.imul(A,fe),i+=Math.imul(I,ue),o+=Math.imul(I,fe),n+=Math.imul(w,ce),i+=Math.imul(w,de),i+=Math.imul(_,ce),o+=Math.imul(_,de),n+=Math.imul(b,pe),i+=Math.imul(b,ge),i+=Math.imul(v,pe),o+=Math.imul(v,ge);var xe=f+n+((8191&i)<<13);f=o+(i>>>13)+(xe>>>26),xe&=67108863,n=Math.imul(D,Z),i=Math.imul(D,J),i+=Math.imul(z,Z),o=Math.imul(z,J),n+=Math.imul(C,Q),i+=Math.imul(C,ee),i+=Math.imul(j,Q),o+=Math.imul(j,ee),n+=Math.imul(R,re),i+=Math.imul(R,ne),i+=Math.imul(T,re),o+=Math.imul(T,ne),n+=Math.imul(P,oe),i+=Math.imul(P,se),i+=Math.imul(B,oe),o+=Math.imul(B,se),n+=Math.imul(k,ue),i+=Math.imul(k,fe),i+=Math.imul(x,ue),o+=Math.imul(x,fe),n+=Math.imul(A,ce),i+=Math.imul(A,de),i+=Math.imul(I,ce),o+=Math.imul(I,de),n+=Math.imul(w,pe),i+=Math.imul(w,ge),i+=Math.imul(_,pe),o+=Math.imul(_,ge);var Me=f+n+((8191&i)<<13);f=o+(i>>>13)+(Me>>>26),Me&=67108863,n=Math.imul(D,Q),i=Math.imul(D,ee),i+=Math.imul(z,Q),o=Math.imul(z,ee),n+=Math.imul(C,re),i+=Math.imul(C,ne),i+=Math.imul(j,re),o+=Math.imul(j,ne),n+=Math.imul(R,oe),i+=Math.imul(R,se),i+=Math.imul(T,oe),o+=Math.imul(T,se),n+=Math.imul(P,ue),i+=Math.imul(P,fe),i+=Math.imul(B,ue),o+=Math.imul(B,fe),n+=Math.imul(k,ce),i+=Math.imul(k,de),i+=Math.imul(x,ce),o+=Math.imul(x,de),n+=Math.imul(A,pe),i+=Math.imul(A,ge),i+=Math.imul(I,pe),o+=Math.imul(I,ge);var Pe=f+n+((8191&i)<<13);f=o+(i>>>13)+(Pe>>>26),Pe&=67108863,n=Math.imul(D,re),i=Math.imul(D,ne),i+=Math.imul(z,re),o=Math.imul(z,ne),n+=Math.imul(C,oe),i+=Math.imul(C,se),i+=Math.imul(j,oe),o+=Math.imul(j,se),n+=Math.imul(R,ue),i+=Math.imul(R,fe),i+=Math.imul(T,ue),o+=Math.imul(T,fe),n+=Math.imul(P,ce),i+=Math.imul(P,de),i+=Math.imul(B,ce),o+=Math.imul(B,de),n+=Math.imul(k,pe),i+=Math.imul(k,ge),i+=Math.imul(x,pe),o+=Math.imul(x,ge);var Be=f+n+((8191&i)<<13);f=o+(i>>>13)+(Be>>>26),Be&=67108863,n=Math.imul(D,oe),i=Math.imul(D,se),i+=Math.imul(z,oe),o=Math.imul(z,se),n+=Math.imul(C,ue),i+=Math.imul(C,fe),i+=Math.imul(j,ue),o+=Math.imul(j,fe),n+=Math.imul(R,ce),i+=Math.imul(R,de),i+=Math.imul(T,ce),o+=Math.imul(T,de),n+=Math.imul(P,pe),i+=Math.imul(P,ge),i+=Math.imul(B,pe),o+=Math.imul(B,ge);var Oe=f+n+((8191&i)<<13);f=o+(i>>>13)+(Oe>>>26),Oe&=67108863,n=Math.imul(D,ue),i=Math.imul(D,fe),i+=Math.imul(z,ue),o=Math.imul(z,fe),n+=Math.imul(C,ce),i+=Math.imul(C,de),i+=Math.imul(j,ce),o+=Math.imul(j,de),n+=Math.imul(R,pe),i+=Math.imul(R,ge),i+=Math.imul(T,pe),o+=Math.imul(T,ge);var Re=f+n+((8191&i)<<13);f=o+(i>>>13)+(Re>>>26),Re&=67108863,n=Math.imul(D,ce),i=Math.imul(D,de),i+=Math.imul(z,ce),o=Math.imul(z,de),n+=Math.imul(C,pe),i+=Math.imul(C,ge),i+=Math.imul(j,pe),o+=Math.imul(j,ge);var Te=f+n+((8191&i)<<13);f=o+(i>>>13)+(Te>>>26),Te&=67108863,n=Math.imul(D,pe),i=Math.imul(D,ge),i+=Math.imul(z,pe),o=Math.imul(z,ge);var Ne=f+n+((8191&i)<<13);return f=o+(i>>>13)+(Ne>>>26),Ne&=67108863,u[0]=me,u[1]=be,u[2]=ve,u[3]=ye,u[4]=we,u[5]=_e,u[6]=Se,u[7]=Ae,u[8]=Ie,u[9]=Ee,u[10]=ke,u[11]=xe,u[12]=Me,u[13]=Pe,u[14]=Be,u[15]=Oe,u[16]=Re,u[17]=Te,u[18]=Ne,0!==f&&(u[19]=f,r.length++),r};Math.imul||(E=f),o.prototype.mulTo=function(e,t){var r,n=this.length+e.length;return r=10===this.length&&10===e.length?E(this,e,t):63>n?f(this,e,t):1024>n?h(this,e,t):c(this,e,t)},d.prototype.makeRBT=function(e){for(var t=new Array(e),r=o.prototype._countBits(e)-1,n=0;e>n;n++)t[n]=this.revBin(n,r,e);return t},d.prototype.revBin=function(e,t,r){if(0===e||e===r-1)return e;for(var n=0,i=0;t>i;i++)n|=(1&e)<>=1;return n},d.prototype.permute=function(e,t,r,n,i,o){for(var s=0;o>s;s++)n[s]=t[e[s]],i[s]=r[e[s]]},d.prototype.transform=function(e,t,r,n,i,o){this.permute(o,e,t,r,n,i);for(var s=1;i>s;s<<=1)for(var a=s<<1,u=Math.cos(2*Math.PI/a),f=Math.sin(2*Math.PI/a),h=0;i>h;h+=a)for(var c=u,d=f,l=0;s>l;l++){var p=r[h+l],g=n[h+l],m=r[h+l+s],b=n[h+l+s],v=c*m-d*b;b=c*b+d*m,m=v,r[h+l]=p+m,n[h+l]=g+b,r[h+l+s]=p-m,n[h+l+s]=g-b,l!==a&&(v=u*c-f*d,d=u*d+f*c,c=v)}},d.prototype.guessLen13b=function(e,t){var r=1|Math.max(t,e),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<=r))for(var n=0;r/2>n;n++){var i=e[n];e[n]=e[r-n-1],e[r-n-1]=i,i=t[n],t[n]=-t[r-n-1],t[r-n-1]=-i}},d.prototype.normalize13b=function(e,t){for(var r=0,n=0;t/2>n;n++){var i=8192*Math.round(e[2*n+1]/t)+Math.round(e[2*n]/t)+r;e[n]=67108863&i,r=67108864>i?0:i/67108864|0}return e},d.prototype.convert13b=function(e,t,r,i){for(var o=0,s=0;t>s;s++)o+=0|e[s],r[2*s]=8191&o,o>>>=13,r[2*s+1]=8191&o,o>>>=13;for(s=2*t;i>s;++s)r[s]=0;n(0===o),n(0===(-8192&o))},d.prototype.stub=function(e){for(var t=new Array(e),r=0;e>r;r++)t[r]=0;return t},d.prototype.mulp=function(e,t,r){var n=2*this.guessLen13b(e.length,t.length),i=this.makeRBT(n),o=this.stub(n),s=new Array(n),a=new Array(n),u=new Array(n),f=new Array(n),h=new Array(n),c=new Array(n),d=r.words;d.length=n,this.convert13b(e.words,e.length,s,n),this.convert13b(t.words,t.length,f,n),this.transform(s,o,a,u,n,i),this.transform(f,o,h,c,n,i);for(var l=0;n>l;l++){var p=a[l]*h[l]-u[l]*c[l];u[l]=a[l]*c[l]+u[l]*h[l],a[l]=p}return this.conjugate(a,u,n),this.transform(a,u,d,o,n,i),this.conjugate(d,o,n),this.normalize13b(d,n),r.negative=e.negative^t.negative,r.length=e.length+t.length,r.strip()},o.prototype.mul=function(e){var t=new o(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},o.prototype.mulf=function(e){var t=new o(null);return t.words=new Array(this.length+e.length),c(this,e,t)},o.prototype.imul=function(e){return this.clone().mulTo(e,this)},o.prototype.imuln=function(e){n("number"==typeof e),n(67108864>e);for(var t=0,r=0;r>=26,t+=i/67108864|0,t+=o>>>26,this.words[r]=67108863&o}return 0!==t&&(this.words[r]=t,this.length++),this},o.prototype.muln=function(e){return this.clone().imuln(e)},o.prototype.sqr=function(){return this.mul(this)},o.prototype.isqr=function(){return this.imul(this.clone())},o.prototype.pow=function(e){var t=u(e);if(0===t.length)return new o(1);for(var r=this,n=0;n=0);var t,r=e%26,i=(e-r)/26,o=67108863>>>26-r<<26-r;if(0!==r){var s=0;for(t=0;t>>26-r}s&&(this.words[t]=s,this.length++)}if(0!==i){for(t=this.length-1;t>=0;t--)this.words[t+i]=this.words[t];for(t=0;i>t;t++)this.words[t]=0;this.length+=i}return this.strip()},o.prototype.ishln=function(e){return n(0===this.negative),this.iushln(e)},o.prototype.iushrn=function(e,t,r){n("number"==typeof e&&e>=0);var i;i=t?(t-t%26)/26:0;var o=e%26,s=Math.min((e-o)/26,this.length),a=67108863^67108863>>>o<f;f++)u.words[f]=this.words[f];u.length=s}if(0===s);else if(this.length>s)for(this.length-=s,f=0;f=0&&(0!==h||f>=i);f--){var c=0|this.words[f];this.words[f]=h<<26-o|c>>>o,h=c&a}return u&&0!==h&&(u.words[u.length++]=h),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},o.prototype.ishrn=function(e,t,r){return n(0===this.negative),this.iushrn(e,t,r)},o.prototype.shln=function(e){return this.clone().ishln(e)},o.prototype.ushln=function(e){return this.clone().iushln(e)},o.prototype.shrn=function(e){return this.clone().ishrn(e)},o.prototype.ushrn=function(e){return this.clone().iushrn(e)},o.prototype.testn=function(e){n("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,i=1<=0);var t=e%26,r=(e-t)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var i=67108863^67108863>>>t<e),0>e?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},o.prototype.isubn=function(e){if(n("number"==typeof e),n(67108864>e),0>e)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(u/67108864|0),this.words[i+r]=67108863&s}for(;i>26,this.words[i+r]=67108863&s;if(0===a)return this.strip();for(n(-1===a),a=0,i=0;i>26,this.words[i]=67108863&s;return this.negative=1,this.strip()},o.prototype._wordDiv=function(e,t){var r=this.length-e.length,n=this.clone(),i=e,s=0|i.words[i.length-1],a=this._countBits(s);r=26-a,0!==r&&(i=i.ushln(r),n.iushln(r),s=0|i.words[i.length-1]);var u,f=n.length-i.length;if("mod"!==t){u=new o(null),u.length=f+1,u.words=new Array(u.length);for(var h=0;h=0;d--){var l=67108864*(0|n.words[i.length+d])+(0|n.words[i.length+d-1]);for(l=Math.min(l/s|0,67108863),n._ishlnsubmul(i,l,d);0!==n.negative;)l--,n.negative=0,n._ishlnsubmul(i,1,d),n.isZero()||(n.negative^=1);u&&(u.words[d]=l)}return u&&u.strip(),n.strip(),"div"!==t&&0!==r&&n.iushrn(r),{div:u||null,mod:n}},o.prototype.divmod=function(e,t,r){if(n(!e.isZero()),this.isZero())return{div:new o(0),mod:new o(0)};var i,s,a;return 0!==this.negative&&0===e.negative?(a=this.neg().divmod(e,t),"mod"!==t&&(i=a.div.neg()),"div"!==t&&(s=a.mod.neg(),r&&0!==s.negative&&s.iadd(e)),{div:i,mod:s}):0===this.negative&&0!==e.negative?(a=this.divmod(e.neg(),t),"mod"!==t&&(i=a.div.neg()),{div:i,mod:a.mod}):0!==(this.negative&e.negative)?(a=this.neg().divmod(e.neg(),t),"div"!==t&&(s=a.mod.neg(),r&&0!==s.negative&&s.isub(e)),{div:a.div,mod:s}):e.length>this.length||this.cmp(e)<0?{div:new o(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new o(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new o(this.modn(e.words[0]))}:this._wordDiv(e,t)},o.prototype.div=function(e){return this.divmod(e,"div",!1).div},o.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},o.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},o.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),i=e.andln(1),o=r.cmp(n);return 0>o||1===i&&0===o?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},o.prototype.modn=function(e){n(67108863>=e);for(var t=(1<<26)%e,r=0,i=this.length-1;i>=0;i--)r=(t*r+(0|this.words[i]))%e;return r},o.prototype.idivn=function(e){n(67108863>=e);for(var t=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*t;this.words[r]=i/e|0,t=i%e}return this.strip()},o.prototype.divn=function(e){return this.clone().idivn(e)},o.prototype.egcd=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i=new o(1),s=new o(0),a=new o(0),u=new o(1),f=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++f;for(var h=r.clone(),c=t.clone();!t.isZero();){for(var d=0,l=1;0===(t.words[0]&l)&&26>d;++d,l<<=1);if(d>0)for(t.iushrn(d);d-- >0;)(i.isOdd()||s.isOdd())&&(i.iadd(h),s.isub(c)),i.iushrn(1),s.iushrn(1);for(var p=0,g=1;0===(r.words[0]&g)&&26>p;++p,g<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(a.isOdd()||u.isOdd())&&(a.iadd(h),u.isub(c)),a.iushrn(1),u.iushrn(1);t.cmp(r)>=0?(t.isub(r),i.isub(a),s.isub(u)):(r.isub(t),a.isub(i),u.isub(s))}return{a:a,b:u,gcd:r.iushln(f)}},o.prototype._invmp=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var i=new o(1),s=new o(0),a=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var u=0,f=1;0===(t.words[0]&f)&&26>u;++u,f<<=1);if(u>0)for(t.iushrn(u);u-- >0;)i.isOdd()&&i.iadd(a),i.iushrn(1);for(var h=0,c=1;0===(r.words[0]&c)&&26>h;++h,c<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(a),s.iushrn(1);t.cmp(r)>=0?(t.isub(r),i.isub(s)):(r.isub(t),s.isub(i))}var d;return d=0===t.cmpn(1)?i:s,d.cmpn(0)<0&&d.iadd(e),d},o.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone(); +t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=t.cmp(r);if(0>i){var o=t;t=r,r=o}else if(0===i||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},o.prototype.invm=function(e){return this.egcd(e).a.umod(e)},o.prototype.isEven=function(){return 0===(1&this.words[0])},o.prototype.isOdd=function(){return 1===(1&this.words[0])},o.prototype.andln=function(e){return this.words[0]&e},o.prototype.bincn=function(e){n("number"==typeof e);var t=e%26,r=(e-t)/26,i=1<>>26,a&=67108863,this.words[s]=a}return 0!==o&&(this.words[s]=o,this.length++),this},o.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},o.prototype.cmpn=function(e){var t=0>e;if(0!==this.negative&&!t)return-1;if(0===this.negative&&t)return 1;this.strip();var r;if(this.length>1)r=1;else{t&&(e=-e),n(67108863>=e,"Number is too big");var i=0|this.words[0];r=i===e?0:e>i?-1:1}return 0!==this.negative?0|-r:r},o.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},o.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length=0;r--){var n=0|this.words[r],i=0|e.words[r];if(n!==i){i>n?t=-1:n>i&&(t=1);break}}return t},o.prototype.gtn=function(e){return 1===this.cmpn(e)},o.prototype.gt=function(e){return 1===this.cmp(e)},o.prototype.gten=function(e){return this.cmpn(e)>=0},o.prototype.gte=function(e){return this.cmp(e)>=0},o.prototype.ltn=function(e){return-1===this.cmpn(e)},o.prototype.lt=function(e){return-1===this.cmp(e)},o.prototype.lten=function(e){return this.cmpn(e)<=0},o.prototype.lte=function(e){return this.cmp(e)<=0},o.prototype.eqn=function(e){return 0===this.cmpn(e)},o.prototype.eq=function(e){return 0===this.cmp(e)},o.red=function(e){return new v(e)},o.prototype.toRed=function(e){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},o.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},o.prototype._forceRed=function(e){return this.red=e,this},o.prototype.forceRed=function(e){return n(!this.red,"Already a number in reduction context"),this._forceRed(e)},o.prototype.redAdd=function(e){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},o.prototype.redIAdd=function(e){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},o.prototype.redSub=function(e){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},o.prototype.redISub=function(e){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},o.prototype.redShl=function(e){return n(this.red,"redShl works only with red numbers"),this.red.ushl(this,e)},o.prototype.redMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},o.prototype.redIMul=function(e){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},o.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},o.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},o.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},o.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},o.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},o.prototype.redPow=function(e){return n(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var k={k256:null,p224:null,p192:null,p25519:null};l.prototype._tmp=function(){var e=new o(null);return e.words=new Array(Math.ceil(this.n/13)),e},l.prototype.ireduce=function(e){var t,r=e;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),t=r.bitLength();while(t>this.n);var n=t0?r.isub(this.p):r.strip(),r},l.prototype.split=function(e,t){e.iushrn(this.n,0,t)},l.prototype.imulK=function(e){return e.imul(this.k)},i(p,l),p.prototype.split=function(e,t){for(var r=4194303,n=Math.min(e.length,9),i=0;n>i;i++)t.words[i]=e.words[i];if(t.length=n,e.length<=9)return e.words[0]=0,void(e.length=1);var o=e.words[9];for(t.words[t.length++]=o&r,i=10;i>>22,o=s}o>>>=22,e.words[i-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},p.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=i,t=n}return 0!==t&&(e.words[e.length++]=t),e},o._prime=function x(e){if(k[e])return k[e];var x;if("k256"===e)x=new p;else if("p224"===e)x=new g;else if("p192"===e)x=new m;else{if("p25519"!==e)throw new Error("Unknown prime "+e);x=new b}return k[e]=x,x},v.prototype._verify1=function(e){n(0===e.negative,"red works only with positives"),n(e.red,"red works only with red numbers")},v.prototype._verify2=function(e,t){n(0===(e.negative|t.negative),"red works only with positives"),n(e.red&&e.red===t.red,"red works only with red numbers")},v.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},v.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},v.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},v.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},v.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},v.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},v.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},v.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},v.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},v.prototype.isqr=function(e){return this.imul(e,e.clone())},v.prototype.sqr=function(e){return this.mul(e,e)},v.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(n(t%2===1),3===t){var r=this.m.add(new o(1)).iushrn(2);return this.pow(e,r)}for(var i=this.m.subn(1),s=0;!i.isZero()&&0===i.andln(1);)s++,i.iushrn(1);n(!i.isZero());var a=new o(1).toRed(this),u=a.redNeg(),f=this.m.subn(1).iushrn(1),h=this.m.bitLength();for(h=new o(2*h*h).toRed(this);0!==this.pow(h,f).cmp(u);)h.redIAdd(u);for(var c=this.pow(h,i),d=this.pow(e,i.addn(1).iushrn(1)),l=this.pow(e,i),p=s;0!==l.cmp(a);){for(var g=l,m=0;0!==g.cmp(a);m++)g=g.redSqr();n(p>m);var b=this.pow(c,new o(1).iushln(p-m-1));d=d.redMul(b),c=b.redSqr(),l=l.redMul(c),p=m}return d},v.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},v.prototype.pow=function(e,t){if(t.isZero())return new o(1);if(0===t.cmpn(1))return e.clone();var r=4,n=new Array(1<=0;i--){for(var h=t.words[i],c=f-1;c>=0;c--){var d=h>>c&1;s!==n[0]&&(s=this.sqr(s)),0!==d||0!==a?(a<<=1,a|=d,u++,(u===r||0===i&&0===c)&&(s=this.mul(s,n[a]),u=0,a=0)):u=0}f=26}return s},v.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},v.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},o.mont=function(e){return new y(e)},i(y,v),y.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},y.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},y.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},y.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new o(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),s=i;return i.cmp(this.m)>=0?s=i.isub(this.m):i.cmpn(0)<0&&(s=i.iadd(this.m)),s._forceRed(this)},y.prototype.invm=function(e){var t=this.imod(e._invmp(this.m).mul(this.r2));return t._forceRed(this)}}("undefined"==typeof t||t,this)},{}],216:[function(e,t,r){(function(t){function n(e,t){if("00"===e.slice(0,2))throw new Error("invalid RLP: extra zeros");return parseInt(e,t)}function i(e,r){if(56>e)return new t([e+r]);var n=u(e),i=n.length/2,o=u(r+55+i);return new t(o+n,"hex")}function o(e){var r,i,s,a,u,f=[],h=e[0];if(127>=h)return{data:e.slice(0,1),remainder:e.slice(1)};if(183>=h){if(r=h-127,s=128===h?new t([]):e.slice(1,r),2===r&&s[0]<128)throw new Error("invalid rlp encoding: byte must be less 0x80");return{data:s,remainder:e.slice(r)}}if(191>=h){if(i=h-182,r=n(e.slice(1,i).toString("hex"),16),s=e.slice(i,r+i),s.length=h){for(r=h-191,a=e.slice(1,r);a.length;)u=o(a),f.push(u.data),a=u.remainder;return{data:f,remainder:e.slice(r)}}i=h-246,r=n(e.slice(1,i).toString("hex"),16);var c=i+r;if(c>e.length)throw new Error("invalid rlp: total length is larger than the data");if(a=e.slice(i,c),0===a.length)throw new Error("invalid rlp, List has a invalid length");for(;a.length;)u=o(a),f.push(u.data),a=u.remainder;return{data:f,remainder:e.slice(c)}}function s(e){return"0x"===e.slice(0,2)}function a(e){return"string"!=typeof e?e:s(e)?e.slice(2):e}function u(e){var t=e.toString(16);return t.length%2&&(t="0"+t),t}function f(e){return e.length%2&&(e="0"+e),e}function h(e){var r=u(e);return new t(r,"hex")}function c(e){if(!t.isBuffer(e))if("string"==typeof e)e=s(e)?new t(f(a(e)),"hex"):new t(e);else if("number"==typeof e)e=e?h(e):new t([]);else if(null===e||void 0===e)e=new t([]);else{if(!e.toArray)throw new Error("invalid type");e=new t(e.toArray())}return e}const d=e("assert");r.encode=function(e){if(e instanceof Array){for(var n=[],o=0;o=r)return e.length;if(183>=r)return r-127;if(191>=r)return r-182;if(247>=r)return r-191;var i=r-246,o=n(e.slice(1,i).toString("hex"),16);return i+o}}).call(this,e("buffer").Buffer)},{assert:7,buffer:147}],217:[function(e,t,r){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function i(e){return"function"==typeof e}function o(e){return"number"==typeof e}function s(e){return"object"==typeof e&&null!==e}function a(e){return void 0===e}t.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(e){if(!o(e)||0>e||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},n.prototype.emit=function(e){var t,r,n,o,u,f;if(this._events||(this._events={}),"error"===e&&(!this._events.error||s(this._events.error)&&!this._events.error.length)){if(t=arguments[1],t instanceof Error)throw t;throw TypeError('Uncaught, unspecified "error" event.')}if(r=this._events[e],a(r))return!1;if(i(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:for(n=arguments.length,o=new Array(n-1),u=1;n>u;u++)o[u-1]=arguments[u];r.apply(this,o)}else if(s(r)){for(n=arguments.length,o=new Array(n-1),u=1;n>u;u++)o[u-1]=arguments[u];for(f=r.slice(),n=f.length,u=0;n>u;u++)f[u].apply(this,o)}return!0},n.prototype.addListener=function(e,t){var r;if(!i(t))throw TypeError("listener must be a function");if(this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,i(t.listener)?t.listener:t),this._events[e]?s(this._events[e])?this._events[e].push(t):this._events[e]=[this._events[e],t]:this._events[e]=t,s(this._events[e])&&!this._events[e].warned){var r;r=a(this._maxListeners)?n.defaultMaxListeners:this._maxListeners,r&&r>0&&this._events[e].length>r&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())}return this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError("listener must be a function");var n=!1;return r.listener=t,this.on(e,r),this},n.prototype.removeListener=function(e,t){var r,n,o,a;if(!i(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],o=r.length,n=-1,r===t||i(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(r)){for(a=o;a-- >0;)if(r[a]===t||r[a].listener&&r[a].listener===t){n=a;break}if(0>n)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(n,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},n.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],i(r))this.removeListener(e,r);else for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},n.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?i(this._events[e])?[this._events[e]]:this._events[e].slice():[]},n.listenerCount=function(e,t){var r;return r=e._events&&e._events[t]?i(e._events[t])?1:e._events[t].length:0}},{}],218:[function(e,t,r){(function(r){function n(e,t,n,o){r.isBuffer(e)||(e=new r(e,"binary")),t&&!r.isBuffer(t)&&(t=new r(t,"binary")),n/=8,o=o||0;for(var s,a,u=0,f=0,h=new r(n),c=new r(o),d=0,l=[];;){if(d++>0&&l.push(s),l.push(e),t&&l.push(t),s=i(r.concat(l)),l=[],a=0,n>0)for(;;){if(0===n)break;if(a===s.length)break;h[u++]=s[a],n--,a++}if(o>0&&a!==s.length)for(;;){if(0===o)break;if(a===s.length)break;c[f++]=s[a],o--,a++}if(0===n&&0===o)break}for(a=0;a>1,h=-7,c=r?i-1:0,d=r?-1:1,l=e[t+c];for(c+=d,o=l&(1<<-h)-1,l>>=-h,h+=a;h>0;o=256*o+e[t+c],c+=d,h-=8);for(s=o&(1<<-h)-1,o>>=-h,h+=n;h>0;s=256*s+e[t+c],c+=d,h-=8);if(0===o)o=1-f;else{if(o===u)return s?NaN:(l?-1:1)*(1/0);s+=Math.pow(2,n),o-=f}return(l?-1:1)*s*Math.pow(2,o-n)},r.write=function(e,t,r,n,i,o){var s,a,u,f=8*o-i-1,h=(1<>1,d=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:o-1,p=n?1:-1,g=0>t||0===t&&0>1/t?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=h):(s=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-s))<1&&(s--,u*=2),t+=s+c>=1?d/u:d*Math.pow(2,1-c),t*u>=2&&(s++,u/=2),s+c>=h?(a=0,s=h):s+c>=1?(a=(t*u-1)*Math.pow(2,i),s+=c):(a=t*Math.pow(2,c-1)*Math.pow(2,i),s=0));i>=8;e[r+l]=255&a,l+=p,a/=256,i-=8);for(s=s<0;e[r+l]=255&s,l+=p,s/=256,f-=8);e[r+l-p]|=128*g}},{}],226:[function(e,t,r){arguments[4][79][0].apply(r,arguments)},{dup:79}],227:[function(e,t,r){t.exports=function(e){return!(null==e||!(e._isBuffer||e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)))}},{}],228:[function(e,t,r){t.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},{}],229:[function(e,t,r){(function(e){!function(r,n){"use strict";var i="undefined"!=typeof t;i&&(r=e,r.JS_SHA3_TEST&&(r.navigator={userAgent:"Chrome"}));var o=(r.JS_SHA3_TEST||!i)&&-1!=navigator.userAgent.indexOf("Chrome"),s="0123456789abcdef".split(""),a=[1,256,65536,16777216],u=[6,1536,393216,100663296],f=[0,8,16,24],h=[1,0,32898,0,32906,2147483648,2147516416,2147483648,32907,0,2147483649,0,2147516545,2147483648,32777,2147483648,138,0,136,0,2147516425,0,2147483658,0,2147516555,0,139,2147483648,32905,2147483648,32771,2147483648,32770,2147483648,128,2147483648,32778,0,2147483658,2147483648,2147516545,2147483648,32896,2147483648,2147483649,0,2147516424,2147483648],c=[],d=[],l=function(e){return w(e,224,a)},p=function(e){return w(e,256,a)},g=function(e){return w(e,384,a)},m=function(e){return w(e,224,u)},b=function(e){return w(e,256,u)},v=function(e){return w(e,384,u)},y=function(e){return w(e,512,u)},w=function(e,t,i){var u="string"!=typeof e;u&&e.constructor==r.ArrayBuffer&&(e=new Uint8Array(e)),t===n&&(t=512,i=a);var l,p,g,m,b,v,y,w,_,S,A,I,E,k,x,M,P,B,O,R,T,N,C,j,L,D,z,U,K,F,H,q,V,Y,G,W,X,Z,J,$,Q,ee,te,re,ne,ie,oe,se,ae,ue,fe,he,ce,de,le,pe,ge,me,be,ve,ye,we,_e,Se,Ae,Ie,Ee=!1,ke=0,xe=0,Me=e.length,Pe=(1600-2*t)/32,Be=4*Pe;for(m=0;50>m;++m)d[m]=0;l=0;do{for(c[0]=l,m=1;Pe+1>m;++m)c[m]=0;if(u)for(m=xe;Me>ke&&Be>m;++ke)c[m>>2]|=e[ke]<ke&&Be>m;++ke)p=e.charCodeAt(ke),128>p?c[m>>2]|=p<p?(c[m>>2]|=(192|p>>6)<>2]|=(128|63&p)<p||p>=57344?(c[m>>2]|=(224|p>>12)<>2]|=(128|p>>6&63)<>2]|=(128|63&p)<>2]|=(240|p>>18)<>2]|=(128|p>>12&63)<>2]|=(128|p>>6&63)<>2]|=(128|63&p)<>2]|=i[3&m],++ke),l=c[Pe],ke>Me&&Be>m&&(c[Pe-1]|=2147483648,Ee=!0),m=0;Pe>m;++m)d[m]^=c[m];for(g=0;48>g;g+=2)y=d[0]^d[10]^d[20]^d[30]^d[40],w=d[1]^d[11]^d[21]^d[31]^d[41],_=d[2]^d[12]^d[22]^d[32]^d[42],S=d[3]^d[13]^d[23]^d[33]^d[43],A=d[4]^d[14]^d[24]^d[34]^d[44],I=d[5]^d[15]^d[25]^d[35]^d[45],E=d[6]^d[16]^d[26]^d[36]^d[46],k=d[7]^d[17]^d[27]^d[37]^d[47],x=d[8]^d[18]^d[28]^d[38]^d[48],M=d[9]^d[19]^d[29]^d[39]^d[49],b=x^(_<<1|S>>>31),v=M^(S<<1|_>>>31),d[0]^=b,d[1]^=v,d[10]^=b,d[11]^=v,d[20]^=b,d[21]^=v,d[30]^=b,d[31]^=v,d[40]^=b,d[41]^=v,b=y^(A<<1|I>>>31),v=w^(I<<1|A>>>31),d[2]^=b,d[3]^=v,d[12]^=b,d[13]^=v,d[22]^=b,d[23]^=v,d[32]^=b,d[33]^=v,d[42]^=b,d[43]^=v,b=_^(E<<1|k>>>31),v=S^(k<<1|E>>>31),d[4]^=b,d[5]^=v,d[14]^=b,d[15]^=v,d[24]^=b,d[25]^=v,d[34]^=b,d[35]^=v,d[44]^=b,d[45]^=v,b=A^(x<<1|M>>>31),v=I^(M<<1|x>>>31),d[6]^=b,d[7]^=v,d[16]^=b,d[17]^=v,d[26]^=b,d[27]^=v,d[36]^=b,d[37]^=v,d[46]^=b,d[47]^=v,b=E^(y<<1|w>>>31),v=k^(w<<1|y>>>31),d[8]^=b,d[9]^=v,d[18]^=b,d[19]^=v,d[28]^=b,d[29]^=v,d[38]^=b,d[39]^=v,d[48]^=b,d[49]^=v,P=d[0],B=d[1],ae=d[11]<<4|d[10]>>>28,ue=d[10]<<4|d[11]>>>28,H=d[20]<<3|d[21]>>>29,q=d[21]<<3|d[20]>>>29,_e=d[31]<<9|d[30]>>>23,Se=d[30]<<9|d[31]>>>23,ne=d[40]<<18|d[41]>>>14,ie=d[41]<<18|d[40]>>>14,X=d[2]<<1|d[3]>>>31,Z=d[3]<<1|d[2]>>>31,O=d[13]<<12|d[12]>>>20,R=d[12]<<12|d[13]>>>20,fe=d[22]<<10|d[23]>>>22,he=d[23]<<10|d[22]>>>22,V=d[33]<<13|d[32]>>>19,Y=d[32]<<13|d[33]>>>19,Ae=d[42]<<2|d[43]>>>30,Ie=d[43]<<2|d[42]>>>30,ge=d[5]<<30|d[4]>>>2,me=d[4]<<30|d[5]>>>2,J=d[14]<<6|d[15]>>>26,$=d[15]<<6|d[14]>>>26,T=d[25]<<11|d[24]>>>21,N=d[24]<<11|d[25]>>>21,ce=d[34]<<15|d[35]>>>17,de=d[35]<<15|d[34]>>>17,G=d[45]<<29|d[44]>>>3,W=d[44]<<29|d[45]>>>3,z=d[6]<<28|d[7]>>>4,U=d[7]<<28|d[6]>>>4,be=d[17]<<23|d[16]>>>9,ve=d[16]<<23|d[17]>>>9,Q=d[26]<<25|d[27]>>>7,ee=d[27]<<25|d[26]>>>7,C=d[36]<<21|d[37]>>>11,j=d[37]<<21|d[36]>>>11,le=d[47]<<24|d[46]>>>8,pe=d[46]<<24|d[47]>>>8,oe=d[8]<<27|d[9]>>>5,se=d[9]<<27|d[8]>>>5,K=d[18]<<20|d[19]>>>12,F=d[19]<<20|d[18]>>>12,ye=d[29]<<7|d[28]>>>25,we=d[28]<<7|d[29]>>>25,te=d[38]<<8|d[39]>>>24,re=d[39]<<8|d[38]>>>24,L=d[48]<<14|d[49]>>>18,D=d[49]<<14|d[48]>>>18,d[0]=P^~O&T,d[1]=B^~R&N,d[10]=z^~K&H,d[11]=U^~F&q,d[20]=X^~J&Q,d[21]=Z^~$&ee,d[30]=oe^~ae&fe,d[31]=se^~ue&he,d[40]=ge^~be&ye,d[41]=me^~ve&we,d[2]=O^~T&C,d[3]=R^~N&j,d[12]=K^~H&V,d[13]=F^~q&Y,d[22]=J^~Q&te,d[23]=$^~ee&re,d[32]=ae^~fe&ce,d[33]=ue^~he&de,d[42]=be^~ye&_e,d[43]=ve^~we&Se,d[4]=T^~C&L,d[5]=N^~j&D,d[14]=H^~V&G,d[15]=q^~Y&W,d[24]=Q^~te&ne,d[25]=ee^~re&ie,d[34]=fe^~ce&le,d[35]=he^~de&pe,d[44]=ye^~_e&Ae,d[45]=we^~Se&Ie,d[6]=C^~L&P,d[7]=j^~D&B,d[16]=V^~G&z,d[17]=Y^~W&U,d[26]=te^~ne&X,d[27]=re^~ie&Z,d[36]=ce^~le&oe,d[37]=de^~pe&se,d[46]=_e^~Ae&ge,d[47]=Se^~Ie&me,d[8]=L^~P&O,d[9]=D^~B&R,d[18]=G^~z&K,d[19]=W^~U&F,d[28]=ne^~X&J,d[29]=ie^~Z&$,d[38]=le^~oe&ae,d[39]=pe^~se&ue,d[48]=Ae^~ge&be,d[49]=Ie^~me&ve,d[0]^=h[g],d[1]^=h[g+1]}while(!Ee);var Oe="";if(o)P=d[0],B=d[1],O=d[2],R=d[3],T=d[4],N=d[5],C=d[6],j=d[7],L=d[8],D=d[9],z=d[10],U=d[11],K=d[12],F=d[13],H=d[14],q=d[15],Oe+=s[P>>4&15]+s[15&P]+s[P>>12&15]+s[P>>8&15]+s[P>>20&15]+s[P>>16&15]+s[P>>28&15]+s[P>>24&15]+s[B>>4&15]+s[15&B]+s[B>>12&15]+s[B>>8&15]+s[B>>20&15]+s[B>>16&15]+s[B>>28&15]+s[B>>24&15]+s[O>>4&15]+s[15&O]+s[O>>12&15]+s[O>>8&15]+s[O>>20&15]+s[O>>16&15]+s[O>>28&15]+s[O>>24&15]+s[R>>4&15]+s[15&R]+s[R>>12&15]+s[R>>8&15]+s[R>>20&15]+s[R>>16&15]+s[R>>28&15]+s[R>>24&15]+s[T>>4&15]+s[15&T]+s[T>>12&15]+s[T>>8&15]+s[T>>20&15]+s[T>>16&15]+s[T>>28&15]+s[T>>24&15]+s[N>>4&15]+s[15&N]+s[N>>12&15]+s[N>>8&15]+s[N>>20&15]+s[N>>16&15]+s[N>>28&15]+s[N>>24&15]+s[C>>4&15]+s[15&C]+s[C>>12&15]+s[C>>8&15]+s[C>>20&15]+s[C>>16&15]+s[C>>28&15]+s[C>>24&15],t>=256&&(Oe+=s[j>>4&15]+s[15&j]+s[j>>12&15]+s[j>>8&15]+s[j>>20&15]+s[j>>16&15]+s[j>>28&15]+s[j>>24&15]),t>=384&&(Oe+=s[L>>4&15]+s[15&L]+s[L>>12&15]+s[L>>8&15]+s[L>>20&15]+s[L>>16&15]+s[L>>28&15]+s[L>>24&15]+s[D>>4&15]+s[15&D]+s[D>>12&15]+s[D>>8&15]+s[D>>20&15]+s[D>>16&15]+s[D>>28&15]+s[D>>24&15]+s[z>>4&15]+s[15&z]+s[z>>12&15]+s[z>>8&15]+s[z>>20&15]+s[z>>16&15]+s[z>>28&15]+s[z>>24&15]+s[U>>4&15]+s[15&U]+s[U>>12&15]+s[U>>8&15]+s[U>>20&15]+s[U>>16&15]+s[U>>28&15]+s[U>>24&15]),512==t&&(Oe+=s[K>>4&15]+s[15&K]+s[K>>12&15]+s[K>>8&15]+s[K>>20&15]+s[K>>16&15]+s[K>>28&15]+s[K>>24&15]+s[F>>4&15]+s[15&F]+s[F>>12&15]+s[F>>8&15]+s[F>>20&15]+s[F>>16&15]+s[F>>28&15]+s[F>>24&15]+s[H>>4&15]+s[15&H]+s[H>>12&15]+s[H>>8&15]+s[H>>20&15]+s[H>>16&15]+s[H>>28&15]+s[H>>24&15]+s[q>>4&15]+s[15&q]+s[q>>12&15]+s[q>>8&15]+s[q>>20&15]+s[q>>16&15]+s[q>>28&15]+s[q>>24&15]);else for(m=0,g=t/32;g>m;++m)b=d[m],Oe+=s[b>>4&15]+s[15&b]+s[b>>12&15]+s[b>>8&15]+s[b>>20&15]+s[b>>16&15]+s[b>>28&15]+s[b>>24&15];return Oe};!r.JS_SHA3_TEST&&i?t.exports={sha3_512:y,sha3_384:v,sha3_256:b,sha3_224:m,keccak_512:w,keccak_384:g,keccak_256:p,keccak_224:l}:r&&(r.sha3_512=y,r.sha3_384=v,r.sha3_256=b,r.sha3_224=m,r.keccak_512=w,r.keccak_384=g,r.keccak_256=p,r.keccak_224=l)}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],230:[function(e,t,r){t.exports=e("sha3").SHA3Hash},{sha3:121}],231:[function(e,t,r){function n(e){this.rand=e||new o.Rand}var i=e("bn.js"),o=e("brorand");t.exports=n,n.create=function(e){return new n(e)},n.prototype._rand=function(e){var t=e.bitLength(),r=this.rand.generate(Math.ceil(t/8));r[0]|=3;var n=7&t;return 0!==n&&(r[r.length-1]>>=7-n),new i(r)},n.prototype.test=function(e,t,r){var n=e.bitLength(),o=i.mont(e),s=new i(1).toRed(o);t||(t=Math.max(1,n/48|0));for(var a=e.subn(1),u=a.subn(1),f=0;!a.testn(f);f++);for(var h=e.shrn(f),c=a.toRed(o),d=!0;t>0;t--){var l=this._rand(u);r&&r(l);var p=l.toRed(o).redPow(h);if(0!==p.cmp(s)&&0!==p.cmp(c)){for(var g=1;f>g;g++){if(p=p.redSqr(),0===p.cmp(s))return!1;if(0===p.cmp(c))break}if(g===f)return!1}}return d},n.prototype.getDivisor=function(e,t){var r=e.bitLength(),n=i.mont(e),o=new i(1).toRed(n);t||(t=Math.max(1,r/48|0));for(var s=e.subn(1),a=s.subn(1),u=0;!s.testn(u);u++);for(var f=e.shrn(u),h=s.toRed(n);t>0;t--){var c=this._rand(a),d=e.gcd(c);if(0!==d.cmpn(1))return d;var l=c.toRed(n).redPow(f);if(0!==l.cmp(o)&&0!==l.cmp(h)){for(var p=1;u>p;p++){if(l=l.redSqr(),0===l.cmp(o))return l.fromRed().subn(1).gcd(e);if(0===l.cmp(h))break}if(p===u)return l=l.redSqr(),l.fromRed().subn(1).gcd(e)}}return!1}},{"bn.js":232,brorand:99}],232:[function(e,t,r){arguments[4][120][0].apply(r,arguments)},{dup:120}],233:[function(e,t,r){function n(e,t){if(!e)throw new Error(t||"Assertion failed")}t.exports=n,n.equal=function(e,t,r){if(e!=t)throw new Error(r||"Assertion failed: "+e+" != "+t)}},{}],234:[function(e,t,r){(function(t){function n(e,t,r,n,o,s){if("function"==typeof o&&(s=o,o=void 0),"function"!=typeof s)throw new Error("No callback provided to pbkdf2");var a=i(e,t,r,n,o);setTimeout(function(){s(void 0,a)})}function i(e,r,n,i,a){if("number"!=typeof n)throw new TypeError("Iterations not a number");if(0>n)throw new TypeError("Bad iterations");if("number"!=typeof i)throw new TypeError("Key length not a number");if(0>i||i>s)throw new TypeError("Bad key length");a=a||"sha1",t.isBuffer(e)||(e=new t(e,"binary")),t.isBuffer(r)||(r=new t(r,"binary"));var u,f=1,h=new t(i),c=new t(r.length+4);r.copy(c,0,0,r.length);for(var d,l,p=1;f>=p;p++){c.writeUInt32BE(p,r.length);var g=o(a,e).update(c).digest();u||(u=g.length,l=new t(u),f=Math.ceil(i/u),d=i-(f-1)*u),g.copy(l,0,0,u);for(var m=1;n>m;m++){g=o(a,e).update(g).digest();for(var b=0;u>b;b++)l[b]^=g[b]}var v=(p-1)*u,y=p===f?d:u;l.copy(h,v,0,y)}return h}var o=e("create-hmac"),s=Math.pow(2,30)-1;r.pbkdf2=n,r.pbkdf2Sync=i}).call(this,e("buffer").Buffer)},{buffer:147,"create-hmac":173}],235:[function(e,t,r){function n(){h=!1,a.length?f=a.concat(f):c=-1,f.length&&i()}function i(){if(!h){var e=setTimeout(n);h=!0;for(var t=f.length;t;){for(a=f,f=[];++c1)for(var r=1;r=t.length){o++;break}var s=t.slice(2,i-1);t.slice(i-1,i);if(("0002"!==n.toString("hex")&&!r||"0001"!==n.toString("hex")&&r)&&o++,s.length<8&&o++,o)throw new Error("decryption error");return t.slice(i)}function o(e,t){e=new r(e),t=new r(t);var n=0,i=e.length;e.length!==t.length&&(n++,i=Math.min(e.length,t.length));for(var o=-1;++oc||new f(t).cmp(u.modulus)>=0)throw new Error("decryption error");var l;l=o?d(new f(t),u):h(t,u);var p=new r(c-l.length);if(p.fill(0),l=r.concat([p,l],c),4===a)return n(u,l);if(1===a)return i(u,l,o);if(3===a)return l;throw new Error("unknown padding")}}).call(this,e("buffer").Buffer)},{"./mgf":237,"./withPublic":241,"./xor":242,"bn.js":238,"browserify-rsa":119,buffer:147,"create-hash":170,"parse-asn1":145}],240:[function(e,t,r){(function(r){function n(e,t){var n=e.modulus.byteLength(),i=t.length,o=u("sha1").update(new r("")).digest(),s=o.length,d=2*s;if(i>n-d-2)throw new Error("message too long");var l=new r(n-i-d-2);l.fill(0);var p=n-s-1,g=a(s),m=h(r.concat([o,l,new r([1]),t],p),f(g,p)),b=h(g,f(m,s));return new c(r.concat([new r([0]),b,m],n))}function i(e,t,n){var i=t.length,s=e.modulus.byteLength();if(i>s-11)throw new Error("message too long");var a;return n?(a=new r(s-i-3),a.fill(255)):a=o(s-i-3),new c(r.concat([new r([0,n?1:2]),a,new r([0]),t],s))}function o(e,t){for(var n,i=new r(e),o=0,s=a(2*e),u=0;e>o;)u===s.length&&(s=a(2*e),u=0),n=s[u++],n&&(i[o++]=n);return i}var s=e("parse-asn1"),a=e("randombytes"),u=e("create-hash"),f=e("./mgf"),h=e("./xor"),c=e("bn.js"),d=e("./withPublic"),l=e("browserify-rsa");t.exports=function(e,t,r){var o;o=e.padding?e.padding:r?1:4;var a,u=s(e);if(4===o)a=n(u,t);else if(1===o)a=i(u,t,r);else{if(3!==o)throw new Error("unknown padding");if(a=new c(t),a.cmp(u.modulus)>=0)throw new Error("data too long for modulus")}return r?l(a,u):d(a,u)}}).call(this,e("buffer").Buffer)},{"./mgf":237,"./withPublic":241,"./xor":242,"bn.js":238,"browserify-rsa":119,buffer:147,"create-hash":170,"parse-asn1":145,randombytes:247}],241:[function(e,t,r){(function(r){function n(e,t){return new r(e.toRed(i.mont(t.modulus)).redPow(new i(t.publicExponent)).fromRed().toArray())}var i=e("bn.js");t.exports=n}).call(this,e("buffer").Buffer)},{"bn.js":238,buffer:147}],242:[function(e,t,r){t.exports=function(e,t){for(var r=e.length,n=-1;++n1&&(n=r[0]+"@",e=r[1]),e=e.replace(T,".");var i=e.split("."),o=s(i,t).join("."); +return n+o}function u(e){for(var t,r,n=[],i=0,o=e.length;o>i;)t=e.charCodeAt(i++),t>=55296&&56319>=t&&o>i?(r=e.charCodeAt(i++),56320==(64512&r)?n.push(((1023&t)<<10)+(1023&r)+65536):(n.push(t),i--)):n.push(t);return n}function f(e){return s(e,function(e){var t="";return e>65535&&(e-=65536,t+=L(e>>>10&1023|55296),e=56320|1023&e),t+=L(e)}).join("")}function h(e){return 10>e-48?e-22:26>e-65?e-65:26>e-97?e-97:A}function c(e,t){return e+22+75*(26>e)-((0!=t)<<5)}function d(e,t,r){var n=0;for(e=r?j(e/x):e>>1,e+=j(e/t);e>C*E>>1;n+=A)e=j(e/C);return j(n+(C+1)*e/(e+k))}function l(e){var t,r,n,i,s,a,u,c,l,p,g=[],m=e.length,b=0,v=P,y=M;for(r=e.lastIndexOf(B),0>r&&(r=0),n=0;r>n;++n)e.charCodeAt(n)>=128&&o("not-basic"),g.push(e.charCodeAt(n));for(i=r>0?r+1:0;m>i;){for(s=b,a=1,u=A;i>=m&&o("invalid-input"),c=h(e.charCodeAt(i++)),(c>=A||c>j((S-b)/a))&&o("overflow"),b+=c*a,l=y>=u?I:u>=y+E?E:u-y,!(l>c);u+=A)p=A-l,a>j(S/p)&&o("overflow"),a*=p;t=g.length+1,y=d(b-s,t,0==s),j(b/t)>S-v&&o("overflow"),v+=j(b/t),b%=t,g.splice(b++,0,v)}return f(g)}function p(e){var t,r,n,i,s,a,f,h,l,p,g,m,b,v,y,w=[];for(e=u(e),m=e.length,t=P,r=0,s=M,a=0;m>a;++a)g=e[a],128>g&&w.push(L(g));for(n=i=w.length,i&&w.push(B);m>n;){for(f=S,a=0;m>a;++a)g=e[a],g>=t&&f>g&&(f=g);for(b=n+1,f-t>j((S-r)/b)&&o("overflow"),r+=(f-t)*b,t=f,a=0;m>a;++a)if(g=e[a],t>g&&++r>S&&o("overflow"),g==t){for(h=r,l=A;p=s>=l?I:l>=s+E?E:l-s,!(p>h);l+=A)y=h-p,v=A-p,w.push(L(c(p+y%v,0))),h=j(y/v);w.push(L(c(h,0))),s=d(r,b,n==i),r=0,++n}++r,++t}return w.join("")}function g(e){return a(e,function(e){return O.test(e)?l(e.slice(4).toLowerCase()):e})}function m(e){return a(e,function(e){return R.test(e)?"xn--"+p(e):e})}var b="object"==typeof n&&n&&!n.nodeType&&n,v="object"==typeof r&&r&&!r.nodeType&&r,y="object"==typeof t&&t;(y.global===y||y.window===y||y.self===y)&&(i=y);var w,_,S=2147483647,A=36,I=1,E=26,k=38,x=700,M=72,P=128,B="-",O=/^xn--/,R=/[^\x20-\x7E]/,T=/[\x2E\u3002\uFF0E\uFF61]/g,N={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},C=A-I,j=Math.floor,L=String.fromCharCode;if(w={version:"1.3.2",ucs2:{decode:u,encode:f},decode:l,encode:p,toASCII:m,toUnicode:g},"function"==typeof e&&"object"==typeof e.amd&&e.amd)e("punycode",function(){return w});else if(b&&v)if(r.exports==b)v.exports=w;else for(_ in w)w.hasOwnProperty(_)&&(b[_]=w[_]);else i.punycode=w}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],244:[function(e,t,r){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}t.exports=function(e,t,r,o){t=t||"&",r=r||"=";var s={};if("string"!=typeof e||0===e.length)return s;var a=/\+/g;e=e.split(t);var u=1e3;o&&"number"==typeof o.maxKeys&&(u=o.maxKeys);var f=e.length;u>0&&f>u&&(f=u);for(var h=0;f>h;++h){var c,d,l,p,g=e[h].replace(a,"%20"),m=g.indexOf(r);m>=0?(c=g.substr(0,m),d=g.substr(m+1)):(c=g,d=""),l=decodeURIComponent(c),p=decodeURIComponent(d),n(s,l)?i(s[l])?s[l].push(p):s[l]=[s[l],p]:s[l]=p}return s};var i=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},{}],245:[function(e,t,r){"use strict";function n(e,t){if(e.map)return e.map(t);for(var r=[],n=0;n65536)throw new Error("requested too many random bytes");var o=new r.Uint8Array(t);s.getRandomValues(o);var a=new n(o.buffer);return"function"==typeof i?e.nextTick(function(){i(null,a)}):a}var s=r.crypto||r.msCrypto;s&&s.getRandomValues?t.exports=o:t.exports=i}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},e("buffer").Buffer)},{_process:235,buffer:147}],248:[function(e,t,r){t.exports=e("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":249}],249:[function(e,t,r){(function(r){function n(e){return this instanceof n?(u.call(this,e),f.call(this,e),e&&e.readable===!1&&(this.readable=!1),e&&e.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,e&&e.allowHalfOpen===!1&&(this.allowHalfOpen=!1),void this.once("end",i)):new n(e)}function i(){this.allowHalfOpen||this._writableState.ended||r.nextTick(this.end.bind(this))}function o(e,t){for(var r=0,n=e.length;n>r;r++)t(e[r],r)}t.exports=n;var s=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t},a=e("core-util-is");a.inherits=e("inherits");var u=e("./_stream_readable"),f=e("./_stream_writable");a.inherits(n,u),o(s(f.prototype),function(e){n.prototype[e]||(n.prototype[e]=f.prototype[e])})}).call(this,e("_process"))},{"./_stream_readable":251,"./_stream_writable":253,_process:235,"core-util-is":150,inherits:226}],250:[function(e,t,r){function n(e){return this instanceof n?void i.call(this,e):new n(e)}t.exports=n;var i=e("./_stream_transform"),o=e("core-util-is");o.inherits=e("inherits"),o.inherits(n,i),n.prototype._transform=function(e,t,r){r(null,e)}},{"./_stream_transform":252,"core-util-is":150,inherits:226}],251:[function(e,t,r){(function(r){function n(t,r){var n=e("./_stream_duplex");t=t||{};var i=t.highWaterMark,o=t.objectMode?16:16384;this.highWaterMark=i||0===i?i:o,this.highWaterMark=~~this.highWaterMark,this.buffer=[],this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.objectMode=!!t.objectMode,r instanceof n&&(this.objectMode=this.objectMode||!!t.readableObjectMode),this.defaultEncoding=t.defaultEncoding||"utf8",this.ranOut=!1,this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,t.encoding&&(M||(M=e("string_decoder/").StringDecoder),this.decoder=new M(t.encoding),this.encoding=t.encoding)}function i(t){e("./_stream_duplex");return this instanceof i?(this._readableState=new n(t,this),this.readable=!0,void k.call(this)):new i(t)}function o(e,t,r,n,i){var o=f(t,r);if(o)e.emit("error",o);else if(x.isNullOrUndefined(r))t.reading=!1,t.ended||h(e,t);else if(t.objectMode||r&&r.length>0)if(t.ended&&!i){var a=new Error("stream.push() after EOF");e.emit("error",a)}else if(t.endEmitted&&i){var a=new Error("stream.unshift() after end event");e.emit("error",a)}else!t.decoder||i||n||(r=t.decoder.write(r)),i||(t.reading=!1),t.flowing&&0===t.length&&!t.sync?(e.emit("data",r),e.read(0)):(t.length+=t.objectMode?1:r.length,i?t.buffer.unshift(r):t.buffer.push(r),t.needReadable&&c(e)),l(e,t);else i||(t.reading=!1);return s(t)}function s(e){return!e.ended&&(e.needReadable||e.length=B)e=B;else{e--;for(var t=1;32>t;t<<=1)e|=e>>t;e++}return e}function u(e,t){return 0===t.length&&t.ended?0:t.objectMode?0===e?0:1:isNaN(e)||x.isNull(e)?t.flowing&&t.buffer.length?t.buffer[0].length:t.length:0>=e?0:(e>t.highWaterMark&&(t.highWaterMark=a(e)),e>t.length?t.ended?t.length:(t.needReadable=!0,0):e)}function f(e,t){var r=null;return x.isBuffer(t)||x.isString(t)||x.isNullOrUndefined(t)||e.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r}function h(e,t){if(t.decoder&&!t.ended){var r=t.decoder.end();r&&r.length&&(t.buffer.push(r),t.length+=t.objectMode?1:r.length)}t.ended=!0,c(e)}function c(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(P("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?r.nextTick(function(){d(e)}):d(e))}function d(e){P("emit readable"),e.emit("readable"),v(e)}function l(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(function(){p(e,t)}))}function p(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=i)r=o?n.join(""):I.concat(n,i),n.length=0;else if(ef&&e>u;f++){var a=n[0],c=Math.min(e-u,a.length);o?r+=a.slice(0,c):a.copy(r,u,0,c),c0)throw new Error("endReadable called on non-empty stream");t.endEmitted||(t.ended=!0,r.nextTick(function(){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"))}))}function _(e,t){for(var r=0,n=e.length;n>r;r++)t(e[r],r)}function S(e,t){for(var r=0,n=e.length;n>r;r++)if(e[r]===t)return r;return-1}t.exports=i;var A=e("isarray"),I=e("buffer").Buffer;i.ReadableState=n;var E=e("events").EventEmitter;E.listenerCount||(E.listenerCount=function(e,t){return e.listeners(t).length});var k=e("stream"),x=e("core-util-is");x.inherits=e("inherits");var M,P=e("util");P=P&&P.debuglog?P.debuglog("stream"):function(){},x.inherits(i,k),i.prototype.push=function(e,t){var r=this._readableState;return x.isString(e)&&!r.objectMode&&(t=t||r.defaultEncoding,t!==r.encoding&&(e=new I(e,t),t="")),o(this,r,e,t,!1)},i.prototype.unshift=function(e){var t=this._readableState;return o(this,t,e,"",!0)},i.prototype.setEncoding=function(t){return M||(M=e("string_decoder/").StringDecoder),this._readableState.decoder=new M(t),this._readableState.encoding=t,this};var B=8388608;i.prototype.read=function(e){P("read",e);var t=this._readableState,r=e;if((!x.isNumber(e)||e>0)&&(t.emittedReadable=!1),0===e&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return P("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?w(this):c(this),null;if(e=u(e,t),0===e&&t.ended)return 0===t.length&&w(this),null;var n=t.needReadable;P("need readable",n),(0===t.length||t.length-e0?y(e,t):null,x.isNull(i)&&(t.needReadable=!0,e=0),t.length-=e,0!==t.length||t.ended||(t.needReadable=!0),r!==e&&t.ended&&0===t.length&&w(this),x.isNull(i)||this.emit("data",i),i},i.prototype._read=function(e){this.emit("error",new Error("not implemented"))},i.prototype.pipe=function(e,t){function n(e){P("onunpipe"),e===c&&o()}function i(){P("onend"),e.end()}function o(){P("cleanup"),e.removeListener("close",u),e.removeListener("finish",f),e.removeListener("drain",m),e.removeListener("error",a),e.removeListener("unpipe",n),c.removeListener("end",i),c.removeListener("end",o),c.removeListener("data",s),!d.awaitDrain||e._writableState&&!e._writableState.needDrain||m()}function s(t){P("ondata");var r=e.write(t);!1===r&&(P("false write response, pause",c._readableState.awaitDrain),c._readableState.awaitDrain++,c.pause())}function a(t){P("onerror",t),h(),e.removeListener("error",a),0===E.listenerCount(e,"error")&&e.emit("error",t)}function u(){e.removeListener("finish",f),h()}function f(){P("onfinish"),e.removeListener("close",u),h()}function h(){P("unpipe"),c.unpipe(e)}var c=this,d=this._readableState;switch(d.pipesCount){case 0:d.pipes=e;break;case 1:d.pipes=[d.pipes,e];break;default:d.pipes.push(e)}d.pipesCount+=1,P("pipe count=%d opts=%j",d.pipesCount,t);var l=(!t||t.end!==!1)&&e!==r.stdout&&e!==r.stderr,p=l?i:o;d.endEmitted?r.nextTick(p):c.once("end",p),e.on("unpipe",n);var m=g(c);return e.on("drain",m),c.on("data",s),e._events&&e._events.error?A(e._events.error)?e._events.error.unshift(a):e._events.error=[a,e._events.error]:e.on("error",a),e.once("close",u),e.once("finish",f),e.emit("pipe",c),d.flowing||(P("pipe resume"),c.resume()),e},i.prototype.unpipe=function(e){var t=this._readableState;if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this),this);if(!e){var r=t.pipes,n=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;n>i;i++)r[i].emit("unpipe",this);return this}var i=S(t.pipes,e);return-1===i?this:(t.pipes.splice(i,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit("unpipe",this),this)},i.prototype.on=function(e,t){var n=k.prototype.on.call(this,e,t);if("data"===e&&!1!==this._readableState.flowing&&this.resume(),"readable"===e&&this.readable){var i=this._readableState;if(!i.readableListening)if(i.readableListening=!0,i.emittedReadable=!1,i.needReadable=!0,i.reading)i.length&&c(this,i);else{var o=this;r.nextTick(function(){P("readable nexttick read 0"),o.read(0)})}}return n},i.prototype.addListener=i.prototype.on,i.prototype.resume=function(){var e=this._readableState;return e.flowing||(P("resume"),e.flowing=!0,e.reading||(P("resume read 0"),this.read(0)),m(this,e)),this},i.prototype.pause=function(){return P("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(P("pause"),this._readableState.flowing=!1,this.emit("pause")),this},i.prototype.wrap=function(e){var t=this._readableState,r=!1,n=this;e.on("end",function(){if(P("wrapped end"),t.decoder&&!t.ended){var e=t.decoder.end();e&&e.length&&n.push(e)}n.push(null)}),e.on("data",function(i){if(P("wrapped data"),t.decoder&&(i=t.decoder.write(i)),i&&(t.objectMode||i.length)){var o=n.push(i);o||(r=!0,e.pause())}});for(var i in e)x.isFunction(e[i])&&x.isUndefined(this[i])&&(this[i]=function(t){return function(){return e[t].apply(e,arguments)}}(i));var o=["error","close","destroy","pause","resume"];return _(o,function(t){e.on(t,n.emit.bind(n,t))}),n._read=function(t){P("wrapped _read",t),r&&(r=!1,e.resume())},n},i._fromList=y}).call(this,e("_process"))},{"./_stream_duplex":249,_process:235,buffer:147,"core-util-is":150,events:217,inherits:226,isarray:228,stream:291,"string_decoder/":292,util:100}],252:[function(e,t,r){function n(e,t){this.afterTransform=function(e,r){return i(t,e,r)},this.needTransform=!1,this.transforming=!1,this.writecb=null,this.writechunk=null}function i(e,t,r){var n=e._transformState;n.transforming=!1;var i=n.writecb;if(!i)return e.emit("error",new Error("no writecb in Transform class"));n.writechunk=null,n.writecb=null,u.isNullOrUndefined(r)||e.push(r),i&&i(t);var o=e._readableState;o.reading=!1,(o.needReadable||o.length1){for(var r=[],n=0;n>>5]|=e[r]<<24-n%32;return t}function n(e){for(var t=[],r=0;r<32*e.length;r+=8)t.push(e[r>>>5]>>>24-r%32&255);return t}function i(e,t,r){for(var n=0;16>n;n++){var i=r+n,c=t[i];t[i]=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8)}var v,y,w,_,S,A,I,E,k,x;A=v=e[0],I=y=e[1],E=w=e[2],k=_=e[3],x=S=e[4];var M;for(n=0;80>n;n+=1)M=v+t[r+d[n]]|0,M+=16>n?o(y,w,_)+m[0]:32>n?s(y,w,_)+m[1]:48>n?a(y,w,_)+m[2]:64>n?u(y,w,_)+m[3]:f(y,w,_)+m[4],M=0|M,M=h(M,p[n]),M=M+S|0,v=S,S=_,_=h(w,10),w=y,y=M,M=A+t[r+l[n]]|0,M+=16>n?f(I,E,k)+b[0]:32>n?u(I,E,k)+b[1]:48>n?a(I,E,k)+b[2]:64>n?s(I,E,k)+b[3]:o(I,E,k)+b[4],M=0|M,M=h(M,g[n]),M=M+x|0,A=x,x=k,k=h(E,10),E=I,I=M;M=e[1]+w+k|0,e[1]=e[2]+_+x|0,e[2]=e[3]+S+A|0,e[3]=e[4]+v+I|0,e[4]=e[0]+y+E|0,e[0]=M}function o(e,t,r){return e^t^r}function s(e,t,r){return e&t|~e&r}function a(e,t,r){return(e|~t)^r}function u(e,t,r){return e&r|t&~r}function f(e,t,r){return e^(t|~r)}function h(e,t){return e<>>32-t}function c(t){var o=[1732584193,4023233417,2562383102,271733878,3285377520];"string"==typeof t&&(t=new e(t,"utf8"));var s=r(t),a=8*t.length,u=8*t.length;s[a>>>5]|=128<<24-a%32,s[(a+64>>>9<<4)+14]=16711935&(u<<8|u>>>24)|4278255360&(u<<24|u>>>8);for(var f=0;ff;f++){var h=o[f];o[f]=16711935&(h<<8|h>>>24)|4278255360&(h<<24|h>>>8)}var c=n(o);return new e(c)}var d=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],l=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],p=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],g=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],m=[0,1518500249,1859775393,2400959708,2840853838],b=[1352829926,1548603684,1836072691,2053994217,0];t.exports=c}).call(this,e("buffer").Buffer)},{buffer:147}],259:[function(e,t,r){function n(e,t,r,n,i,o,s,a){"use strict";function u(e){function t(e){for(var t=0,d=e.length;d>=64;){var l,p,g,m,b,v=n,y=i,w=o,_=s,S=a,A=u,I=f,E=h;for(p=0;16>p;p++)g=t+4*p,c[p]=(255&e[g])<<24|(255&e[g+1])<<16|(255&e[g+2])<<8|255&e[g+3];for(p=16;64>p;p++)l=c[p-2],m=(l>>>17|l<<15)^(l>>>19|l<<13)^l>>>10,l=c[p-15],b=(l>>>7|l<<25)^(l>>>18|l<<14)^l>>>3,c[p]=(m+c[p-7]|0)+(b+c[p-16]|0)|0;for(p=0;64>p;p++)m=(((S>>>6|S<<26)^(S>>>11|S<<21)^(S>>>25|S<<7))+(S&A^~S&I)|0)+(E+(r[p]+c[p]|0)|0)|0,b=((v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10))+(v&y^v&w^y&w)|0,E=I,I=A,A=S,S=_+m|0,_=w,w=y,y=v,v=m+b|0;n=n+v|0,i=i+y|0,o=o+w|0,s=s+_|0,a=a+S|0,u=u+A|0,f=f+I|0,h=h+E|0,t+=64,d-=64}}var r=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],n=1779033703,i=3144134277,o=1013904242,s=2773480762,a=1359893119,u=2600822924,f=528734635,h=1541459225,c=new Array(64);t(e);var d,l=e.length%64,p=e.length/536870912|0,g=e.length<<3,m=56>l?56:120,b=e.slice(e.length-l,e.length);for(b.push(128),d=l+1;m>d;d++)b.push(0);return b.push(p>>>24&255),b.push(p>>>16&255),b.push(p>>>8&255),b.push(p>>>0&255),b.push(g>>>24&255),b.push(g>>>16&255),b.push(g>>>8&255),b.push(g>>>0&255),t(b),[n>>>24&255,n>>>16&255,n>>>8&255,n>>>0&255,i>>>24&255,i>>>16&255,i>>>8&255,i>>>0&255,o>>>24&255,o>>>16&255,o>>>8&255,o>>>0&255,s>>>24&255,s>>>16&255,s>>>8&255,s>>>0&255,a>>>24&255,a>>>16&255,a>>>8&255,a>>>0&255,u>>>24&255,u>>>16&255,u>>>8&255,u>>>0&255,f>>>24&255,f>>>16&255,f>>>8&255,f>>>0&255,h>>>24&255,h>>>16&255,h>>>8&255,h>>>0&255]}function f(e,t,r){function n(){for(var e=o-1;e>=o-4;e--){if(s[e]++,s[e]<=255)return;s[e]=0}}e=e.length<=64?e:u(e);var i,o=64+t.length+4,s=new Array(o),a=new Array(64),f=[];for(i=0;64>i;i++)s[i]=54;for(i=0;ii;i++)s[i]=0;for(i=0;64>i;i++)a[i]=92;for(i=0;i=32;)n(),f=f.concat(u(a.concat(u(s)))),r-=32;return r>0&&(n(),f=f.concat(u(a.concat(u(s))).slice(0,r))),f}function h(e,t,r,n){var i,o,s=e[0]^t[r++],a=e[1]^t[r++],u=e[2]^t[r++],f=e[3]^t[r++],h=e[4]^t[r++],c=e[5]^t[r++],d=e[6]^t[r++],l=e[7]^t[r++],p=e[8]^t[r++],g=e[9]^t[r++],m=e[10]^t[r++],b=e[11]^t[r++],v=e[12]^t[r++],y=e[13]^t[r++],w=e[14]^t[r++],_=e[15]^t[r++],S=s,A=a,I=u,E=f,k=h,x=c,M=d,P=l,B=p,O=g,R=m,T=b,N=v,C=y,j=w,L=_;for(o=0;8>o;o+=2)i=S+N,k^=i<<7|i>>>25,i=k+S,B^=i<<9|i>>>23,i=B+k,N^=i<<13|i>>>19,i=N+B,S^=i<<18|i>>>14,i=x+A,O^=i<<7|i>>>25,i=O+x,C^=i<<9|i>>>23,i=C+O,A^=i<<13|i>>>19,i=A+C,x^=i<<18|i>>>14,i=R+M,j^=i<<7|i>>>25,i=j+R,I^=i<<9|i>>>23,i=I+j,M^=i<<13|i>>>19,i=M+I,R^=i<<18|i>>>14,i=L+T,E^=i<<7|i>>>25,i=E+L,P^=i<<9|i>>>23,i=P+E,T^=i<<13|i>>>19,i=T+P,L^=i<<18|i>>>14,i=S+E,A^=i<<7|i>>>25,i=A+S,I^=i<<9|i>>>23,i=I+A,E^=i<<13|i>>>19,i=E+I,S^=i<<18|i>>>14,i=x+k,M^=i<<7|i>>>25,i=M+x,P^=i<<9|i>>>23,i=P+M,k^=i<<13|i>>>19,i=k+P,x^=i<<18|i>>>14,i=R+O,T^=i<<7|i>>>25,i=T+R,B^=i<<9|i>>>23,i=B+T,O^=i<<13|i>>>19,i=O+B,R^=i<<18|i>>>14,i=L+j,N^=i<<7|i>>>25,i=N+L,C^=i<<9|i>>>23,i=C+N,j^=i<<13|i>>>19,i=j+C,L^=i<<18|i>>>14;t[n++]=e[0]=S+s|0,t[n++]=e[1]=A+a|0,t[n++]=e[2]=I+u|0,t[n++]=e[3]=E+f|0,t[n++]=e[4]=k+h|0,t[n++]=e[5]=x+c|0,t[n++]=e[6]=M+d|0,t[n++]=e[7]=P+l|0,t[n++]=e[8]=B+p|0,t[n++]=e[9]=O+g|0,t[n++]=e[10]=R+m|0,t[n++]=e[11]=T+b|0,t[n++]=e[12]=N+v|0,t[n++]=e[13]=C+y|0,t[n++]=e[14]=j+w|0,t[n++]=e[15]=L+_|0}function c(e,t,r,n,i){for(;i--;)e[t++]=r[n++]}function d(e,t,r,n,i){for(;i--;)e[t++]^=r[n++]}function l(e,t,r,n,i){c(e,0,t,r+16*(2*i-1),16);for(var o=0;2*i>o;o+=2)h(e,t,r+16*o,n+8*o),h(e,t,r+16*o+16,n+8*o+16*i)}function p(e,t,r){return e[t+16*(2*r-1)]}function g(e){for(var t=[],r=0;rn?t.push(n):n>127&&2048>n?(t.push(n>>6|192),t.push(63&n|128)):(t.push(n>>12|224),t.push(n>>6&63|128),t.push(63&n|128))}return t}function m(e){for(var t="0123456789abcdef".split(""),r=e.length,n=[],i=0;r>i;i++)n.push(t[e[i]>>>4&15]),n.push(t[e[i]>>>0&15]);return n.join("")}function b(e){for(var t,r,n,i,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),s=e.length,a=[],u=0;s>u;)t=s>u?e[u++]:0,r=s>u?e[u++]:0,n=s>u?e[u++]:0,i=(t<<16)+(r<<8)+n,a.push(o[i>>>18&63]),a.push(o[i>>>12&63]),a.push(o[i>>>6&63]),a.push(o[i>>>0&63]);return s%3>0&&(a[a.length-1]="=",s%3===1&&(a[a.length-2]="=")),a.join("")}function v(){for(var e=0;32*n>e;e++){var t=4*e;E[O+e]=(255&x[t+3])<<24|(255&x[t+2])<<16|(255&x[t+1])<<8|(255&x[t+0])<<0}}function y(e,t){for(var r=e;t>r;r+=2)c(k,r*(32*n),E,O,32*n),l(M,E,O,R,n),c(k,(r+1)*(32*n),E,R,32*n),l(M,E,R,O,n)}function w(e,t){for(var r=e;t>r;r+=2){var i=p(E,O,n)&B-1;d(E,O,k,i*(32*n),32*n),l(M,E,O,R,n),i=p(E,R,n)&B-1,d(E,R,k,i*(32*n),32*n),l(M,E,R,O,n)}}function _(){for(var e=0;32*n>e;e++){var t=E[O+e];x[4*e+0]=t>>>0&255,x[4*e+1]=t>>>8&255,x[4*e+2]=t>>>16&255,x[4*e+3]=t>>>24&255}}function S(e,t,r,n,i){!function o(){T(function(){n(e,t>e+r?e+r:t),e+=r,t>e?o():i()})}()}function A(t){var r=f(e,x,i);return"base64"===t?b(r):"hex"===t?m(r):r}var I=1;if(1>r||r>31)throw new Error("scrypt: logN not be between 1 and 31");var E,k,x,M,P=1<<31>>>0,B=1<>>0;if(n*I>=1<<30||n>P/128/I||n>P/256||B>P/128/n)throw new Error("scrypt: parameters are too large");"string"==typeof e&&(e=g(e)),"string"==typeof t&&(t=g(t)),"undefined"!=typeof Int32Array?(E=new Int32Array(64*n),k=new Int32Array(32*B*n),M=new Int32Array(16)):(E=[],k=[],M=new Array(16)),x=f(e,t,128*I*n);var O=0,R=32*n,T="undefined"!=typeof setImmediate?setImmediate:setTimeout;"function"==typeof o&&(a=s,s=o,o=1e3),0>=o?(v(),y(0,B),w(0,B),_(),s(A(a))):(v(),S(0,B,2*o,y,function(){S(0,B,2*o,w,function(){_(),s(A(a))})}))}"undefined"!=typeof t&&(t.exports=n)},{}],260:[function(e,t,r){"use strict";t.exports=e("./lib")(e("./lib/elliptic"))},{"./lib":263,"./lib/elliptic":262}],261:[function(e,t,r){(function(e){"use strict";var t=Object.prototype.toString;r.isArray=function(e,t){if(!Array.isArray(e))throw TypeError(t)},r.isBoolean=function(e,r){if("[object Boolean]"!==t.call(e))throw TypeError(r)},r.isBuffer=function(t,r){if(!e.isBuffer(t))throw TypeError(r)},r.isFunction=function(e,r){if("[object Function]"!==t.call(e))throw TypeError(r)},r.isNumber=function(e,r){if("[object Number]"!==t.call(e))throw TypeError(r)},r.isObject=function(e,r){if("[object Object]"!==t.call(e))throw TypeError(r)},r.isBufferLength=function(e,t,r){if(e.length!==t)throw RangeError(r)},r.isBufferLength2=function(e,t,r,n){if(e.length!==t&&e.length!==r)throw RangeError(n)},r.isLengthGTZero=function(e,t){if(0===e.length)throw RangeError(t)},r.isNumberInInterval=function(e,t,r,n){if(t>=e||e>=r)throw RangeError(n)}}).call(this,{isBuffer:e("../../is-buffer/index.js")})},{"../../is-buffer/index.js":227}],262:[function(e,t,r){(function(t){"use strict";function n(e){var t,r,n=e[0];if(33!==e.length||2!==n&&3!==n){if(65!==e.length||4!==n&&6!==n&&7!==n)return null;if(t=new i(e.slice(1,33)),r=new i(e.slice(33,65)),t.cmp(u.p)>=0||r.cmp(u.p)>=0)return null;if(t=t.toRed(u.red),r=r.toRed(u.red), +(6===n||7===n)&&r.isOdd()!==(7===n))return null;var o=t.redSqr().redIMul(t);if(!r.redSqr().redISub(o.redIAdd(u.b)).isZero())return null}else{if(t=new i(e.slice(1,33)),t.cmp(u.p)>=0)return null;t=t.toRed(u.red),r=t.redSqr().redIMul(t).redIAdd(u.b).redSqrt(),3===n!==r.isOdd()&&(r=r.redNeg())}return a.keyPair({pub:{x:t,y:r}})}var i=e("bn.js"),o=e("elliptic").ec,s=e("../messages.json"),a=new o("secp256k1"),u=a.curve;r.privateKeyVerify=function(e){var t=new i(e);return!(t.cmp(u.n)>=0||t.isZero())},r.privateKeyExport=function(e,r){var n=new i(e);if(n.cmp(u.n)>=0||n.isZero())throw new Error(s.EC_PRIVATE_KEY_EXPORT_DER_FAIL);return new t(a.keyFromPrivate(e).getPublic(r,!0))},r.privateKeyTweakAdd=function(e,r){var n=new i(r);if(n.cmp(u.n)>=0)throw new Error(s.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);if(n.iadd(new i(e)),n.cmp(u.n)>=0&&n.isub(u.n),n.isZero())throw new Error(s.EC_PRIVATE_KEY_TWEAK_ADD_FAIL);return n.toArrayLike(t,null,32)},r.privateKeyTweakMul=function(e,r){var n=new i(r);if(n.cmp(u.n)>=0||n.isZero())throw new Error(s.EC_PRIVATE_KEY_TWEAK_MUL_FAIL);return n.imul(new i(e)),n.cmp(u.n)&&(n=n.umod(u.n)),n.toArrayLike(t,null,32)},r.publicKeyCreate=function(e,r){var n=new i(e);if(n.cmp(u.n)>=0||n.isZero())throw new Error(s.EC_PUBLIC_KEY_CREATE_FAIL);return new t(a.keyFromPrivate(e).getPublic(r,!0))},r.publicKeyConvert=function(e,r){var i=n(e);if(null===i)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);return new t(i.getPublic(r,!0))},r.publicKeyVerify=function(e){return null!==n(e)},r.publicKeyTweakAdd=function(e,r,o){var a=n(e);if(null===a)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);if(r=new i(r),r.cmp(u.n)>=0)throw new Error(s.EC_PUBLIC_KEY_TWEAK_ADD_FAIL);return new t(u.g.mul(r).add(a.pub).encode(!0,o))},r.publicKeyTweakMul=function(e,r,o){var a=n(e);if(null===a)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);if(r=new i(r),r.cmp(u.n)>=0||r.isZero())throw new Error(s.EC_PUBLIC_KEY_TWEAK_MUL_FAIL);return new t(a.pub.mul(r).encode(!0,o))},r.publicKeyCombine=function(e,r){for(var i=new Array(e.length),o=0;o=0||n.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);var o=new t(e);return 1===n.cmp(a.nh)&&new t(u.n.sub(n).toArray(null,32)).copy(o,32),o},r.signatureExport=function(e){var t=e.slice(0,32),r=e.slice(32,64);if(new i(t).cmp(u.n)>=0||new i(r).cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);return{r:t,s:r}},r.signatureImport=function(e){var r=new i(e.r);r.cmp(u.n)>=0&&(r=new i(0));var n=new i(e.s);return n.cmp(u.n)>=0&&(n=new i(0)),new t(r.toArray(null,32).concat(n.toArray(null,32)))},r.sign=function(e,r,n,o){if("function"==typeof n){var f=n;n=function(n){var a=f(e,r,null,o,n);if(!t.isBuffer(a)||32!==a.length)throw new Error(s.ECDSA_SIGN_FAIL);return new i(a)}}var h=new i(r);if(h.cmp(u.n)>=0||h.isZero())throw new Error(s.ECDSA_SIGN_FAIL);var c=a.sign(e,r,{canonical:!0,k:n,pers:o});return{signature:new t(c.r.toArray(null,32).concat(c.s.toArray(null,32))),recovery:c.recoveryParam}},r.verify=function(e,t,r){var o={r:t.slice(0,32),s:t.slice(32,64)},f=new i(o.r),h=new i(o.s);if(f.cmp(u.n)>=0||h.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);if(1===h.cmp(a.nh)||f.isZero()||h.isZero())return!1;var c=n(r);if(null===c)throw new Error(s.EC_PUBLIC_KEY_PARSE_FAIL);return a.verify(e,o,{x:c.pub.x,y:c.pub.y})},r.recover=function(e,r,n,o){var f={r:r.slice(0,32),s:r.slice(32,64)},h=new i(f.r),c=new i(f.s);if(h.cmp(u.n)>=0||c.cmp(u.n)>=0)throw new Error(s.ECDSA_SIGNATURE_PARSE_FAIL);try{if(h.isZero()||c.isZero())throw new Error;var d=a.recoverPubKey(e,f,n);return new t(d.encode(!0,o))}catch(l){throw new Error(s.ECDSA_RECOVER_FAIL)}},r.ecdh=function(e,t){}}).call(this,e("buffer").Buffer)},{"../messages.json":264,"bn.js":265,buffer:147,elliptic:266}],263:[function(e,t,r){(function(r){"use strict";function n(e,t){return void 0===e?t:(o.isBoolean(e,s.COMPRESSED_TYPE_INVALID),e)}function i(e){if(2!==e.sig[e.idx++])return null;var t=e.sig[e.idx++];if(0===t||t>33||t>1&&0===e.sig[e.idx]&&e.sig[e.idx+1]<128||255===e.sig[e.idx]&&e.sig[e.idx+1]>=128)return null;0===e.sig[e.idx]&&33===t&&(e.idx+=1,t-=1),e.idx+=t;var n=new r(32);return n.fill(0),32>=t&&e.sig.slice(e.idx-t,e.idx).copy(n,32-t),n}var o=e("./assert"),s=e("./messages.json"),a=new r("3081d30201010420","hex"),u=new r("a08185308182020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a124032200","hex"),f=new r("308201130201010420","hex"),h=new r("a081a53081a2020101302c06072a8648ce3d0101022100fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f300604010004010704410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8022100fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141020101a144034200","hex");t.exports=function(e){return{privateKeyVerify:function(t){return o.isBuffer(t,s.EC_PRIVATE_KEY_TYPE_INVALID),32===t.length&&e.privateKeyVerify(t)},privateKeyExport:function(t,i){o.isBuffer(t,s.EC_PRIVATE_KEY_TYPE_INVALID),o.isBufferLength(t,32,s.EC_PRIVATE_KEY_LENGTH_INVALID),i=n(i,!0);var c=e.privateKeyExport(t,i),d=new r(i?214:279),l=0;return i?(a.copy(d,l),l+=a.length,t.copy(d,l),l+=t.length,u.copy(d,l),l+=u.length,c.copy(d,l)):(f.copy(d,l),l+=f.length,t.copy(d,l),l+=t.length,h.copy(d,l),l+=h.length,c.copy(d,l)),d},privateKeyImport:function(t){o.isBuffer(t,s.EC_PRIVATE_KEY_TYPE_INVALID);do{var r=t.length,n=0;if(n+1>r||48!==t[n])break;if(n+=1,n+1>r||!(128&t[n]))break;var i=127&t[n];if(n+=1,1>i||i>2)break;if(n+i>r)break;var a=t[n+i-1]|(i>1?t[n+i-2]<<8:0);if(n+=i,n+a>r)break;if(n+3>r||2!==t[n]||1!==t[n+1]||1!==t[n+2])break;if(n+=3,n+2>r||4!==t[n]||t[n+1]>32||r1&&0===i[f]&&i[f+1]<128;)--u,++f;for(var h=33,c=0;h>1&&0===a[c]&&a[c+1]<128;)--h,++c;var d=new r(u+h+6);return d[0]=48,d[1]=4+u+h,d[2]=2,d[3]=u,i.copy(d,4,f),d[u+4]=2,d[u+5]=h,a.copy(d,u+6,c),d},signatureImport:function(t){o.isBuffer(t,s.ECDSA_SIGNATURE_TYPE_INVALID),o.isLengthGTZero(t,s.ECDSA_SIGNATURE_LENGTH_INVALID);do{var r={sig:t,idx:0};if(r.sig.length128||r.idx+r.sig[r.idx+1]+2!==r.sig.length)break;r.idx+=2;var n=i(r);if(null===n)break;var a=i(r);if(null===a)break;return e.signatureImport({r:n,s:a})}while(!1);throw new Error(s.ECDSA_SIGNATURE_PARSE_DER_FAIL)},sign:function(t,r,n){o.isBuffer(t,s.MSG32_TYPE_INVALID),o.isBufferLength(t,32,s.MSG32_LENGTH_INVALID),o.isBuffer(r,s.EC_PRIVATE_KEY_TYPE_INVALID),o.isBufferLength(r,32,s.EC_PRIVATE_KEY_LENGTH_INVALID);var i=null,a=null;return void 0!==n&&(o.isObject(n,s.OPTIONS_TYPE_INVALID),void 0!==n.data&&(o.isBuffer(n.data,s.OPTIONS_DATA_TYPE_INVALID),o.isBufferLength(n.data,32,s.OPTIONS_DATA_LENGTH_INVALID),i=n.data),void 0!==n.noncefn&&(o.isFunction(n.noncefn,s.OPTIONS_NONCEFN_TYPE_INVALID),a=n.noncefn)),e.sign(t,r,a,i)},verify:function(t,r,n){return o.isBuffer(t,s.MSG32_TYPE_INVALID),o.isBufferLength(t,32,s.MSG32_LENGTH_INVALID),o.isBuffer(r,s.ECDSA_SIGNATURE_TYPE_INVALID),o.isBufferLength(r,64,s.ECDSA_SIGNATURE_LENGTH_INVALID),o.isBuffer(n,s.EC_PUBLIC_KEY_TYPE_INVALID),o.isBufferLength2(n,33,65,s.EC_PUBLIC_KEY_LENGTH_INVALID),e.verify(t,r,n)},recover:function(t,r,i,a){return o.isBuffer(t,s.MSG32_TYPE_INVALID),o.isBufferLength(t,32,s.MSG32_LENGTH_INVALID),o.isBuffer(r,s.ECDSA_SIGNATURE_TYPE_INVALID),o.isBufferLength(r,64,s.ECDSA_SIGNATURE_LENGTH_INVALID),o.isNumber(i,s.RECOVERY_ID_TYPE_INVALID),o.isNumberInInterval(i,-1,4,s.RECOVERY_ID_VALUE_INVALID),a=n(a,!0),e.recover(t,r,i,a)},ecdh:function(e,t,r){o.isBuffer(e,s.EC_PUBLIC_KEY_TYPE_INVALID),o.isBufferLength2(e,33,65,s.EC_PUBLIC_KEY_LENGTH_INVALID),o.isBuffer(t,s.EC_PRIVATE_KEY_TYPE_INVALID),o.isBufferLength(t,32,s.EC_PRIVATE_KEY_LENGTH_INVALID),void 0!==r&&o.isObject(r,s.OPTIONS_TYPE_INVALID)}}}}).call(this,e("buffer").Buffer)},{"./assert":261,"./messages.json":264,buffer:147}],264:[function(e,t,r){t.exports={COMPRESSED_TYPE_INVALID:"compressed should be a boolean",EC_PRIVATE_KEY_TYPE_INVALID:"private key should be a Buffer",EC_PRIVATE_KEY_LENGTH_INVALID:"private key length is invalid",EC_PRIVATE_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting private key is invalid",EC_PRIVATE_KEY_TWEAK_MUL_FAIL:"tweak out of range",EC_PRIVATE_KEY_EXPORT_DER_FAIL:"couldn't export to DER format",EC_PRIVATE_KEY_IMPORT_DER_FAIL:"couldn't import from DER format",EC_PUBLIC_KEYS_TYPE_INVALID:"public keys should be an Array",EC_PUBLIC_KEYS_LENGTH_INVALID:"public keys Array should have at least 1 element",EC_PUBLIC_KEY_TYPE_INVALID:"public key should be a Buffer",EC_PUBLIC_KEY_LENGTH_INVALID:"public key length is invalid",EC_PUBLIC_KEY_PARSE_FAIL:"the public key could not be parsed or is invalid",EC_PUBLIC_KEY_CREATE_FAIL:"private was invalid, try again",EC_PUBLIC_KEY_TWEAK_ADD_FAIL:"tweak out of range or resulting public key is invalid",EC_PUBLIC_KEY_TWEAK_MUL_FAIL:"tweak out of range",EC_PUBLIC_KEY_COMBINE_FAIL:"the sum of the public keys is not valid",ECDH_FAIL:"scalar was invalid (zero or overflow)",ECDSA_SIGNATURE_TYPE_INVALID:"signature should be a Buffer",ECDSA_SIGNATURE_LENGTH_INVALID:"signature length is invalid",ECDSA_SIGNATURE_PARSE_FAIL:"couldn't parse signature",ECDSA_SIGNATURE_PARSE_DER_FAIL:"couldn't parse DER signature",ECDSA_SIGNATURE_SERIALIZE_DER_FAIL:"couldn't serialize signature to DER format",ECDSA_SIGN_FAIL:"nonce generation function failed or private key is invalid",ECDSA_RECOVER_FAIL:"couldn't recover public key from signature",MSG32_TYPE_INVALID:"message should be a Buffer",MSG32_LENGTH_INVALID:"message length is invalid",OPTIONS_TYPE_INVALID:"options should be an Object",OPTIONS_DATA_TYPE_INVALID:"options.data should be a Buffer",OPTIONS_DATA_LENGTH_INVALID:"options.data length is invalid",OPTIONS_NONCEFN_TYPE_INVALID:"options.noncefn should be a Function",RECOVERY_ID_TYPE_INVALID:"recovery should be a Number",RECOVERY_ID_VALUE_INVALID:"recovery should have value between -1 and 4",TWEAK_TYPE_INVALID:"tweak should be a Buffer",TWEAK_LENGTH_INVALID:"tweak length is invalid"}},{}],265:[function(e,t,r){arguments[4][215][0].apply(r,arguments)},{dup:215}],266:[function(e,t,r){arguments[4][126][0].apply(r,arguments)},{"../package.json":282,"./elliptic/curve":269,"./elliptic/curves":272,"./elliptic/ec":273,"./elliptic/eddsa":276,"./elliptic/hmac-drbg":279,"./elliptic/utils":281,brorand:99,dup:126}],267:[function(e,t,r){arguments[4][127][0].apply(r,arguments)},{"../../elliptic":266,"bn.js":265,dup:127}],268:[function(e,t,r){arguments[4][128][0].apply(r,arguments)},{"../../elliptic":266,"../curve":269,"bn.js":265,dup:128,inherits:226}],269:[function(e,t,r){arguments[4][61][0].apply(r,arguments)},{"./base":267,"./edwards":268,"./mont":270,"./short":271,dup:61}],270:[function(e,t,r){arguments[4][130][0].apply(r,arguments)},{"../../elliptic":266,"../curve":269,"bn.js":265,dup:130,inherits:226}],271:[function(e,t,r){arguments[4][131][0].apply(r,arguments)},{"../../elliptic":266,"../curve":269,"bn.js":265,dup:131,inherits:226}],272:[function(e,t,r){arguments[4][132][0].apply(r,arguments)},{"../elliptic":266,"./precomputed/secp256k1":280,dup:132,"hash.js":219}],273:[function(e,t,r){arguments[4][133][0].apply(r,arguments)},{"../../elliptic":266,"./key":274,"./signature":275,"bn.js":265,dup:133}],274:[function(e,t,r){arguments[4][134][0].apply(r,arguments)},{"bn.js":265,dup:134}],275:[function(e,t,r){arguments[4][135][0].apply(r,arguments)},{"../../elliptic":266,"bn.js":265,dup:135}],276:[function(e,t,r){arguments[4][136][0].apply(r,arguments)},{"../../elliptic":266,"./key":277,"./signature":278,dup:136,"hash.js":219}],277:[function(e,t,r){arguments[4][137][0].apply(r,arguments)},{"../../elliptic":266,dup:137}],278:[function(e,t,r){arguments[4][138][0].apply(r,arguments)},{"../../elliptic":266,"bn.js":265,dup:138}],279:[function(e,t,r){arguments[4][68][0].apply(r,arguments)},{"../elliptic":266,dup:68,"hash.js":219}],280:[function(e,t,r){arguments[4][69][0].apply(r,arguments)},{dup:69}],281:[function(e,t,r){arguments[4][141][0].apply(r,arguments)},{"bn.js":265,dup:141}],282:[function(e,t,r){t.exports={_args:[["elliptic@^6.0.2","/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/secp256k1"]],_from:"elliptic@>=6.0.2 <7.0.0",_id:"elliptic@6.2.3",_inCache:!0,_installable:!0,_location:"/secp256k1/elliptic",_nodeVersion:"5.4.1",_npmUser:{email:"fedor@indutny.com",name:"indutny"},_npmVersion:"3.3.12",_phantomChildren:{},_requested:{name:"elliptic",raw:"elliptic@^6.0.2",rawSpec:"^6.0.2",scope:null,spec:">=6.0.2 <7.0.0",type:"range"},_requiredBy:["/secp256k1"],_resolved:"https://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz",_shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",_shrinkwrap:null,_spec:"elliptic@^6.0.2",_where:"/Users/pelleb/code/clients/consensys/eth-lightwallet/node_modules/secp256k1",author:{email:"fedor@indutny.com",name:"Fedor Indutny"},bugs:{url:"https://github.com/indutny/elliptic/issues"},dependencies:{"bn.js":"^4.0.0",brorand:"^1.0.1","hash.js":"^1.0.0",inherits:"^2.0.1"},description:"EC cryptography",devDependencies:{coveralls:"^2.11.3",istanbul:"^0.4.2",jscs:"^2.9.0",jshint:"^2.6.0",mocha:"^2.1.0"},directories:{},dist:{shasum:"18e46d7306b0951275a2d42063270a14b74ebe99",tarball:"http://registry.npmjs.org/elliptic/-/elliptic-6.2.3.tgz"},files:["lib"],gitHead:"c32f20b22b420eb6af3c6dda28963deb7facf823",homepage:"https://github.com/indutny/elliptic",keywords:["Cryptography","EC","Elliptic","curve"],license:"MIT",main:"lib/elliptic.js",maintainers:[{name:"indutny",email:"fedor@indutny.com"}],name:"elliptic",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git+ssh://git@github.com/indutny/elliptic.git"},scripts:{coverage:"npm run unit --coverage",coveralls:"npm run coverage && cat ./coverage/lcov.info | coveralls",jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/*.js",lint:"npm run jscs && npm run jshint",test:"npm run lint && npm run unit",unit:"istanbul test _mocha --reporter=spec test/*-test.js"},version:"6.2.3"}},{}],283:[function(e,t,r){(function(e){function r(t,r){this._block=new e(t),this._finalSize=r,this._blockSize=t,this._len=0,this._s=0}r.prototype.update=function(t,r){"string"==typeof t&&(r=r||"utf8",t=new e(t,r));for(var n=this._len+=t.length,i=this._s||0,o=0,s=this._block;n>i;){for(var a=Math.min(t.length,o+this._blockSize-i%this._blockSize),u=a-o,f=0;u>f;f++)s[i%this._blockSize+f]=t[f+o];i+=u,o+=u,i%this._blockSize===0&&this._update(s)}return this._s=i,this},r.prototype.digest=function(e){var t=8*this._len;this._block[this._len%this._blockSize]=128,this._block.fill(0,this._len%this._blockSize+1),t%(8*this._blockSize)>=8*this._finalSize&&(this._update(this._block),this._block.fill(0)),this._block.writeInt32BE(t,this._blockSize-4);var r=this._update(this._block)||this._hash();return e?r.toString(e):r},r.prototype._update=function(){throw new Error("_update must be implemented by subclass")},t.exports=r}).call(this,e("buffer").Buffer)},{buffer:147}],284:[function(e,t,r){var r=t.exports=function(e){e=e.toLowerCase();var t=r[e];if(!t)throw new Error(e+" is not supported (we accept pull requests)");return new t};r.sha=e("./sha"),r.sha1=e("./sha1"),r.sha224=e("./sha224"),r.sha256=e("./sha256"),r.sha384=e("./sha384"),r.sha512=e("./sha512")},{"./sha":285,"./sha1":286,"./sha224":287,"./sha256":288,"./sha384":289,"./sha512":290}],285:[function(e,t,r){(function(r){function n(){this.init(),this._w=a,s.call(this,64,56)}function i(e,t){return e<>>32-t}var o=e("inherits"),s=e("./hash"),a=new Array(80);o(n,s),n.prototype.init=function(){return this._a=1732584193,this._b=-271733879,this._c=-1732584194,this._d=271733878,this._e=-1009589776,this},n.prototype._update=function(e){function t(){return o[c-3]^o[c-8]^o[c-14]^o[c-16]}function r(e,t){o[c]=e;var r=i(s,5)+t+h+e+n;h=f,f=u,u=i(a,30),a=s,s=r,c++}var n,o=this._w,s=this._a,a=this._b,u=this._c,f=this._d,h=this._e,c=0;for(n=1518500249;16>c;)r(e.readInt32BE(4*c),a&u|~a&f);for(;20>c;)r(t(),a&u|~a&f);for(n=1859775393;40>c;)r(t(),a^u^f);for(n=-1894007588;60>c;)r(t(),a&u|a&f|u&f);for(n=-899497514;80>c;)r(t(),a^u^f);this._a=s+this._a|0,this._b=a+this._b|0,this._c=u+this._c|0,this._d=f+this._d|0,this._e=h+this._e|0},n.prototype._hash=function(){var e=new r(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=n}).call(this,e("buffer").Buffer)},{"./hash":283,buffer:147,inherits:226}],286:[function(e,t,r){(function(r){function n(){this.init(),this._w=a,s.call(this,64,56)}function i(e,t){return e<>>32-t}var o=e("inherits"),s=e("./hash"),a=new Array(80);o(n,s),n.prototype.init=function(){return this._a=1732584193,this._b=-271733879,this._c=-1732584194,this._d=271733878,this._e=-1009589776,this},n.prototype._update=function(e){function t(){return i(o[c-3]^o[c-8]^o[c-14]^o[c-16],1)}function r(e,t){o[c]=e;var r=i(s,5)+t+h+e+n;h=f,f=u,u=i(a,30),a=s,s=r,c++}var n,o=this._w,s=this._a,a=this._b,u=this._c,f=this._d,h=this._e,c=0;for(n=1518500249;16>c;)r(e.readInt32BE(4*c),a&u|~a&f);for(;20>c;)r(t(),a&u|~a&f);for(n=1859775393;40>c;)r(t(),a^u^f);for(n=-1894007588;60>c;)r(t(),a&u|a&f|u&f);for(n=-899497514;80>c;)r(t(),a^u^f);this._a=s+this._a|0,this._b=a+this._b|0,this._c=u+this._c|0,this._d=f+this._d|0,this._e=h+this._e|0},n.prototype._hash=function(){var e=new r(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=n}).call(this,e("buffer").Buffer)},{"./hash":283,buffer:147,inherits:226}],287:[function(e,t,r){(function(r){function n(){this.init(),this._w=a,s.call(this,64,56)}var i=e("inherits"),o=e("./sha256"),s=e("./hash"),a=new Array(64);i(n,o),n.prototype.init=function(){return this._a=-1056596264,this._b=914150663,this._c=812702999,this._d=-150054599,this._e=-4191439,this._f=1750603025,this._g=1694076839,this._h=-1090891868,this},n.prototype._hash=function(){var e=new r(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},t.exports=n}).call(this,e("buffer").Buffer)},{"./hash":283,"./sha256":288,buffer:147,inherits:226}],288:[function(e,t,r){(function(r){function n(){this.init(),this._w=l,c.call(this,64,56)}function i(e,t,r){return r^e&(t^r)}function o(e,t,r){return e&t|r&(e|t)}function s(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function a(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function u(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}function f(e){return(e>>>17|e<<15)^(e>>>19|e<<13)^e>>>10}var h=e("inherits"),c=e("./hash"),d=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],l=new Array(64);h(n,c),n.prototype.init=function(){return this._a=1779033703,this._b=-1150833019,this._c=1013904242,this._d=-1521486534,this._e=1359893119,this._f=-1694144372,this._g=528734635,this._h=1541459225,this},n.prototype._update=function(e){function t(){return f(n[y-2])+n[y-7]+u(n[y-15])+n[y-16]}function r(e){n[y]=e;var t=v+a(g)+i(g,m,b)+d[y]+e,r=s(h)+o(h,c,l);v=b,b=m,m=g,g=p+t,p=l,l=c,c=h,h=t+r,y++}for(var n=this._w,h=0|this._a,c=0|this._b,l=0|this._c,p=0|this._d,g=0|this._e,m=0|this._f,b=0|this._g,v=0|this._h,y=0;16>y;)r(e.readInt32BE(4*y));for(;64>y;)r(t());this._a=h+this._a|0,this._b=c+this._b|0,this._c=l+this._c|0,this._d=p+this._d|0,this._e=g+this._e|0,this._f=m+this._f|0,this._g=b+this._g|0,this._h=v+this._h|0},n.prototype._hash=function(){var e=new r(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},t.exports=n}).call(this,e("buffer").Buffer)},{"./hash":283,buffer:147,inherits:226}],289:[function(e,t,r){(function(r){function n(){this.init(),this._w=a,s.call(this,128,112)}var i=e("inherits"),o=e("./sha512"),s=e("./hash"),a=new Array(160);i(n,o),n.prototype.init=function(){return this._a=-876896931,this._b=1654270250,this._c=-1856437926,this._d=355462360,this._e=1731405415,this._f=-1900787065,this._g=-619958771,this._h=1203062813,this._al=-1056596264,this._bl=914150663,this._cl=812702999,this._dl=-150054599,this._el=-4191439,this._fl=1750603025,this._gl=1694076839,this._hl=-1090891868,this},n.prototype._hash=function(){function e(e,r,n){t.writeInt32BE(e,n),t.writeInt32BE(r,n+4)}var t=new r(48);return e(this._a,this._al,0),e(this._b,this._bl,8),e(this._c,this._cl,16),e(this._d,this._dl,24),e(this._e,this._el,32),e(this._f,this._fl,40),t},t.exports=n}).call(this,e("buffer").Buffer)},{"./hash":283,"./sha512":290,buffer:147,inherits:226}],290:[function(e,t,r){(function(r){function n(){this.init(),this._w=g,l.call(this,128,112)}function i(e,t,r){return r^e&(t^r)}function o(e,t,r){return e&t|r&(e|t)}function s(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function a(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function u(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function f(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function h(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function c(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}var d=e("inherits"),l=e("./hash"),p=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],g=new Array(160);d(n,l),n.prototype.init=function(){return this._a=1779033703,this._b=-1150833019,this._c=1013904242,this._d=-1521486534,this._e=1359893119,this._f=-1694144372,this._g=528734635,this._h=1541459225,this._al=-205731576,this._bl=-2067093701,this._cl=-23791573,this._dl=1595750129,this._el=-1377402159,this._fl=725511199,this._gl=-79577749,this._hl=327033209,this},n.prototype._update=function(e){function t(){var e=l[R-30],t=l[R-30+1],r=u(e,t),i=f(t,e);e=l[R-4],t=l[R-4+1];var o=h(e,t),s=c(t,e),a=l[R-14],p=l[R-14+1],g=l[R-32],m=l[R-32+1];d=i+p,n=r+a+(i>>>0>d>>>0?1:0),d+=s,n=n+o+(s>>>0>d>>>0?1:0),d+=m,n=n+g+(m>>>0>d>>>0?1:0)}function r(){l[R]=n,l[R+1]=d;var e=o(g,m,b),t=o(A,I,E),r=s(g,A),u=s(A,g),f=a(y,x),h=a(x,y),c=p[R],T=p[R+1],N=i(y,w,_),C=i(x,M,P),j=B+h,L=S+f+(B>>>0>j>>>0?1:0);j+=C,L=L+N+(C>>>0>j>>>0?1:0),j+=T,L=L+c+(T>>>0>j>>>0?1:0),j+=d,L=L+n+(d>>>0>j>>>0?1:0);var D=u+t,z=r+e+(u>>>0>D>>>0?1:0);S=_,B=P,_=w,P=M,w=y,M=x,x=k+j|0,y=v+L+(k>>>0>x>>>0?1:0)|0,v=b,k=E,b=m,E=I,m=g,I=A,A=j+D|0,g=L+z+(j>>>0>A>>>0?1:0)|0,O++,R+=2}for(var n,d,l=this._w,g=0|this._a,m=0|this._b,b=0|this._c,v=0|this._d,y=0|this._e,w=0|this._f,_=0|this._g,S=0|this._h,A=0|this._al,I=0|this._bl,E=0|this._cl,k=0|this._dl,x=0|this._el,M=0|this._fl,P=0|this._gl,B=0|this._hl,O=0,R=0;16>O;)n=e.readInt32BE(4*R),d=e.readInt32BE(4*R+4),r();for(;80>O;)t(),r();this._al=this._al+A|0,this._bl=this._bl+I|0,this._cl=this._cl+E|0,this._dl=this._dl+k|0,this._el=this._el+x|0,this._fl=this._fl+M|0,this._gl=this._gl+P|0,this._hl=this._hl+B|0,this._a=this._a+g+(this._al>>>0>>0?1:0)|0,this._b=this._b+m+(this._bl>>>0>>0?1:0)|0,this._c=this._c+b+(this._cl>>>0>>0?1:0)|0,this._d=this._d+v+(this._dl>>>0>>0?1:0)|0,this._e=this._e+y+(this._el>>>0>>0?1:0)|0,this._f=this._f+w+(this._fl>>>0>>0?1:0)|0,this._g=this._g+_+(this._gl>>>0