(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ethereumjs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 6]; var primitive = (tag & 0x20) === 0; // 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; tag <<= 7; tag |= oct & 0x7f; } } else { tag &= 0x1f; } var tagStr = der.tag[tag]; return { cls: cls, primitive: primitive, tag: tag, tagStr: tagStr }; } function derDecodeLen(buf, primitive, fail) { var len = buf.readUInt8(fail); if (buf.isError(len)) return len; // Indefinite form if (!primitive && len === 0x80) return null; // Definite form if ((len & 0x80) === 0) { // Short form return len; } // Long form var num = len & 0x7f; if (num > 4) return buf.error('length octect is too long'); len = 0; for (var i = 0; i < num; i++) { len <<= 8; var j = buf.readUInt8(fail); if (buf.isError(j)) return j; len |= j; } return len; } },{"../../asn1":6,"inherits":180}],15:[function(require,module,exports){ var decoders = exports; decoders.der = require('./der'); decoders.pem = require('./pem'); },{"./der":14,"./pem":16}],16:[function(require,module,exports){ var inherits = require('inherits'); var Buffer = require('buffer').Buffer; var DERDecoder = require('./der'); function PEMDecoder(entity) { DERDecoder.call(this, entity); this.enc = 'pem'; }; 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(); 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; if (match[2] !== label) continue; 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); var base64 = lines.slice(start + 1, end).join(''); // Remove excessive symbols base64.replace(/[^a-z0-9\+\/=]+/gi, ''); var input = new Buffer(base64, 'base64'); return DERDecoder.prototype.decode.call(this, input, options); }; },{"./der":14,"buffer":74,"inherits":180}],17:[function(require,module,exports){ var inherits = require('inherits'); var Buffer = require('buffer').Buffer; var asn1 = require('../../asn1'); var base = asn1.base; // Import DER constants var der = asn1.constants.der; function DEREncoder(entity) { this.enc = 'der'; this.name = entity.name; this.entity = entity; // Construct base tree this.tree = new DERNode(); this.tree._init(entity.body); }; module.exports = DEREncoder; DEREncoder.prototype.encode = function encode(data, reporter) { return this.tree._encode(data, reporter).join(); }; // 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++; var header = new Buffer(1 + 1 + lenOctets); header[0] = encodedTag; header[1] = 0x80 | lenOctets; for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) header[i] = j & 0xff; return this._createEncoderBuffer([ header, content ]); }; DERNode.prototype._encodeStr = function encodeStr(str, tag) { if (tag === 'bitstr') { return this._createEncoderBuffer([ str.unused | 0, str.data ]); } 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'); } 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'); } return this._createEncoderBuffer(str); } else if (/str$/.test(tag)) { return this._createEncoderBuffer(str); } else if (tag === 'objDesc') { return this._createEncoderBuffer(str); } else { return this.reporter.error('Encoding of string type: ' + tag + ' unsupported'); } }; 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(id)) { return this.reporter.error('objid() should be either array or string, ' + 'got: ' + JSON.stringify(id)); } if (!relative) { if (id[1] >= 40) return this.reporter.error('Second objid identifier OOB'); id.splice(0, 2, id[0] * 40 + id[1]); } // 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++; } 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); } return this._createEncoderBuffer(objid); }; function two(num) { if (num < 10) return '0' + num; else return num; } 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'); } return this._encodeStr(str, 'octstr'); }; DERNode.prototype._encodeNull = function encodeNull() { return this._createEncoderBuffer(''); }; 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); } if (num < 0x80) return this._createEncoderBuffer(num); if (num < 0x100) return this._createEncoderBuffer([0, num]); var size = 1; for (var i = num; i >= 0x100; i >>= 8) size++; var out = new Array(size); for (var i = out.length - 1; i >= 0; i--) { out[i] = num & 0xff; num >>= 8; } if(out[0] & 0x80) { out.unshift(0); } return this._createEncoderBuffer(new Buffer(out)); }; DERNode.prototype._encodeBool = function encodeBool(value) { return this._createEncoderBuffer(value ? 0xff : 0); }; DERNode.prototype._use = function use(entity, obj) { if (typeof entity === 'function') entity = entity(obj); return entity._getEncoder('der').tree; }; 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; }; // Utility methods function encodeTag(tag, primitive, cls, reporter) { var res; if (tag === 'seqof') tag = 'seq'; else if (tag === 'setof') tag = 'set'; 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); if (res >= 0x1f) return reporter.error('Multi-octet tag encoding unsupported'); if (!primitive) res |= 0x20; res |= (der.tagClassByName[cls || 'universal'] << 6); return res; } },{"../../asn1":6,"buffer":74,"inherits":180}],18:[function(require,module,exports){ var encoders = exports; encoders.der = require('./der'); encoders.pem = require('./pem'); },{"./der":17,"./pem":19}],19:[function(require,module,exports){ var inherits = require('inherits'); var DEREncoder = require('./der'); function PEMEncoder(entity) { DEREncoder.call(this, entity); this.enc = 'pem'; }; inherits(PEMEncoder, DEREncoder); module.exports = PEMEncoder; 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'); }; },{"./der":17,"inherits":180}],20:[function(require,module,exports){ (function (global){ 'use strict'; // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js // original notice: /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */ function compare(a, b) { if (a === b) { return 0; } var x = a.length; var y = b.length; for (var i = 0, len = Math.min(x, y); i < len; ++i) { if (a[i] !== b[i]) { x = a[i]; y = b[i]; break; } } if (x < y) { return -1; } if (y < x) { return 1; } return 0; } function isBuffer(b) { if (global.Buffer && typeof global.Buffer.isBuffer === 'function') { return global.Buffer.isBuffer(b); } return !!(b != null && b._isBuffer); } // based on node assert, original notice: // 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. var util = require('util/'); var hasOwn = Object.prototype.hasOwnProperty; var pSlice = Array.prototype.slice; var functionsHaveNames = (function () { return function foo() {}.name === 'foo'; }()); function pToString (obj) { return Object.prototype.toString.call(obj); } function isView(arrbuf) { if (isBuffer(arrbuf)) { return false; } if (typeof global.ArrayBuffer !== 'function') { return false; } if (typeof ArrayBuffer.isView === 'function') { return ArrayBuffer.isView(arrbuf); } if (!arrbuf) { return false; } if (arrbuf instanceof DataView) { return true; } if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) { return true; } return false; } // 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 }) var regex = /\s*function\s+([^\(\s]*)\s*/; // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js function getName(func) { if (!util.isFunction(func)) { return; } if (functionsHaveNames) { return func.name; } var str = func.toString(); var match = str.match(regex); return match && match[1]; } 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 = getName(stackStartFunction); 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 truncate(s, n) { if (typeof s === 'string') { return s.length < n ? s : s.slice(0, n); } else { return s; } } function inspect(something) { if (functionsHaveNames || !util.isFunction(something)) { return util.inspect(something); } var rawname = getName(something); var name = rawname ? ': ' + rawname : ''; return '[Function' + name + ']'; } function getMessage(self) { return truncate(inspect(self.actual), 128) + ' ' + self.operator + ' ' + truncate(inspect(self.expected), 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, false)) { fail(actual, expected, message, 'deepEqual', assert.deepEqual); } }; assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) { if (!_deepEqual(actual, expected, true)) { fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual); } }; function _deepEqual(actual, expected, strict, memos) { // 7.1. All identical values are equivalent, as determined by ===. if (actual === expected) { return true; } else if (isBuffer(actual) && isBuffer(expected)) { return compare(actual, expected) === 0; // 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 ((actual === null || typeof actual !== 'object') && (expected === null || typeof expected !== 'object')) { return strict ? actual === expected : actual == expected; // If both values are instances of typed arrays, wrap their underlying // ArrayBuffers in a Buffer each to increase performance // This optimization requires the arrays to have the same type as checked by // Object.prototype.toString (aka pToString). Never perform binary // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their // bit patterns are not identical. } else if (isView(actual) && isView(expected) && pToString(actual) === pToString(expected) && !(actual instanceof Float32Array || actual instanceof Float64Array)) { return compare(new Uint8Array(actual.buffer), new Uint8Array(expected.buffer)) === 0; // 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 if (isBuffer(actual) !== isBuffer(expected)) { return false; } else { memos = memos || {actual: [], expected: []}; var actualIndex = memos.actual.indexOf(actual); if (actualIndex !== -1) { if (actualIndex === memos.expected.indexOf(expected)) { return true; } } memos.actual.push(actual); memos.expected.push(expected); return objEquiv(actual, expected, strict, memos); } } function isArguments(object) { return Object.prototype.toString.call(object) == '[object Arguments]'; } function objEquiv(a, b, strict, actualVisitedObjects) { if (a === null || a === undefined || b === null || b === undefined) return false; // if one is a primitive, the other must be same if (util.isPrimitive(a) || util.isPrimitive(b)) return a === b; if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) return false; var aIsArgs = isArguments(a); var bIsArgs = isArguments(b); if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs)) return false; if (aIsArgs) { a = pSlice.call(a); b = pSlice.call(b); return _deepEqual(a, b, strict); } var ka = objectKeys(a); var kb = objectKeys(b); var 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], strict, actualVisitedObjects)) 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, false)) { fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); } }; assert.notDeepStrictEqual = notDeepStrictEqual; function notDeepStrictEqual(actual, expected, message) { if (_deepEqual(actual, expected, true)) { fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual); } } // 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); } try { if (actual instanceof expected) { return true; } } catch (e) { // Ignore. The instanceof check doesn't work for arrow functions. } if (Error.isPrototypeOf(expected)) { return false; } return expected.call({}, actual) === true; } function _tryBlock(block) { var error; try { block(); } catch (e) { error = e; } return error; } function _throws(shouldThrow, block, expected, message) { var actual; if (typeof block !== 'function') { throw new TypeError('"block" argument must be a function'); } if (typeof expected === 'string') { message = expected; expected = null; } actual = _tryBlock(block); message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + (message ? ' ' + message : '.'); if (shouldThrow && !actual) { fail(actual, expected, 'Missing expected exception' + message); } var userProvidedMessage = typeof message === 'string'; var isUnwantedException = !shouldThrow && util.isError(actual); var isUnexpectedException = !shouldThrow && actual && !expected; if ((isUnwantedException && userProvidedMessage && expectedException(actual, expected)) || isUnexpectedException) { 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(true, block, error, message); }; // EXTENSION! This is annoying to write outside this module. assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { _throws(false, block, error, message); }; 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; }; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"util/":334}],21:[function(require,module,exports){ 'use strict'; module.exports = require('./lib/AsyncEventEmitter'); },{"./lib/AsyncEventEmitter":22}],22:[function(require,module,exports){ 'use strict'; var EventEmitter = require('events').EventEmitter, util = require('util'), eachSeries = require('async/eachSeries'), AsyncEventEmitter; module.exports = exports = AsyncEventEmitter = function AsyncEventEmitter () { EventEmitter.call(this); }; util.inherits(AsyncEventEmitter, EventEmitter); /* Public methods ============================================================================= */ AsyncEventEmitter.prototype.emit = function(event, data, callback) { var self = this, listeners = self._events[event] || []; // Optional data argument if(!callback && typeof data === 'function') { callback = data; data = undefined; } // Special treatment of internal newListener and removeListener events if(event === 'newListener' || event === 'removeListener') { data = { event: data, fn: callback }; callback = undefined; } // A single listener is just a function not an array... listeners = Array.isArray(listeners) ? listeners : [listeners]; eachSeries(listeners.slice(), function (fn, next) { var err; // Support synchronous functions if(fn.length < 2) { try { fn.call(self, data); } catch (e) { err = e; } return next(err); } // Async fn.call(self, data, next); }, callback); return self; }; AsyncEventEmitter.prototype.once = function (type, listener) { var self = this, g; if (typeof listener !== 'function') { throw new TypeError('listener must be a function'); } // Hack to support set arity if(listener.length >= 2) { g = function (e, next) { self.removeListener(type, g); listener(e, next); }; } else { g = function (e) { self.removeListener(type, g); listener(e); }; } g.listener = listener; self.on(type, g); return self; }; AsyncEventEmitter.prototype.first = function(event, listener) { var listeners = this._events[event] || []; // Contract if(typeof listener !== 'function') { throw new TypeError('listener must be a function'); } // Listeners are not always an array if(!Array.isArray(listeners)) { this._events[event] = listeners = [listeners]; } listeners.unshift(listener); return this; }; AsyncEventEmitter.prototype.at = function(event, index, listener) { var listeners = this._events[event] || []; // Contract if(typeof listener !== 'function') { throw new TypeError('listener must be a function'); } if(typeof index !== 'number' || index < 0) { throw new TypeError('index must be a non-negative integer'); } // Listeners are not always an array if(!Array.isArray(listeners)) { this._events[event] = listeners = [listeners]; } listeners.splice(index, 0, listener); return this; }; AsyncEventEmitter.prototype.before = function(event, target, listener) { return this._beforeOrAfter(event, target, listener); }; AsyncEventEmitter.prototype.after = function(event, target, listener) { return this._beforeOrAfter(event, target, listener, 'after'); }; /* Private methods ============================================================================= */ AsyncEventEmitter.prototype._beforeOrAfter = function(event, target, listener, beforeOrAfter) { var listeners = this._events[event] || [], i, index, add = beforeOrAfter === 'after' ? 1 : 0; // Contract if(typeof listener !== 'function') { throw new TypeError('listener must be a function'); } if(typeof target !== 'function') { throw new TypeError('target must be a function'); } // Listeners are not always an array if(!Array.isArray(listeners)) { this._events[event] = listeners = [listeners]; } index = listeners.length; for(i = listeners.length; i--;) { if(listeners[i] === target) { index = i + add; break; } } listeners.splice(index, 0, listener); return this; }; },{"async/eachSeries":26,"events":155,"util":334}],23:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = asyncify; var _isObject = require('lodash/isObject'); var _isObject2 = _interopRequireDefault(_isObject); var _initialParams = require('./internal/initialParams'); var _initialParams2 = _interopRequireDefault(_initialParams); var _setImmediate = require('./internal/setImmediate'); var _setImmediate2 = _interopRequireDefault(_setImmediate); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Take a sync function and make it async, passing its return value to a * callback. This is useful for plugging sync functions into a waterfall, * series, or other async functions. Any arguments passed to the generated * function will be passed to the wrapped function (except for the final * callback argument). Errors thrown will be passed to the callback. * * If the function passed to `asyncify` returns a Promise, that promises's * resolved/rejected state will be used to call the callback, rather than simply * the synchronous return value. * * This also means you can asyncify ES2017 `async` functions. * * @name asyncify * @static * @memberOf module:Utils * @method * @alias wrapSync * @category Util * @param {Function} func - The synchronous function, or Promise-returning * function to convert to an {@link AsyncFunction}. * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be * invoked with `(args..., callback)`. * @example * * // passing a regular synchronous function * async.waterfall([ * async.apply(fs.readFile, filename, "utf8"), * async.asyncify(JSON.parse), * function (data, next) { * // data is the result of parsing the text. * // If there was a parsing error, it would have been caught. * } * ], callback); * * // passing a function returning a promise * async.waterfall([ * async.apply(fs.readFile, filename, "utf8"), * async.asyncify(function (contents) { * return db.model.create(contents); * }), * function (model, next) { * // `model` is the instantiated model object. * // If there was an error, this function would be skipped. * } * ], callback); * * // es2017 example, though `asyncify` is not needed if your JS environment * // supports async functions out of the box * var q = async.queue(async.asyncify(async function(file) { * var intermediateStep = await processFile(file); * return await somePromise(intermediateStep) * })); * * q.push(files); */ function asyncify(func) { return (0, _initialParams2.default)(function (args, callback) { var result; try { result = func.apply(this, args); } catch (e) { return callback(e); } // if result is Promise object if ((0, _isObject2.default)(result) && typeof result.then === 'function') { result.then(function (value) { invokeCallback(callback, null, value); }, function (err) { invokeCallback(callback, err.message ? err : new Error(err)); }); } else { callback(null, result); } }); } function invokeCallback(callback, error, value) { try { callback(error, value); } catch (e) { (0, _setImmediate2.default)(rethrow, e); } } function rethrow(error) { throw error; } module.exports = exports['default']; },{"./internal/initialParams":31,"./internal/setImmediate":35,"lodash/isObject":241}],24:[function(require,module,exports){ (function (process,global){ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.async = global.async || {}))); }(this, (function (exports) { 'use strict'; function slice(arrayLike, start) { start = start|0; var newLen = Math.max(arrayLike.length - start, 0); var newArr = Array(newLen); for(var idx = 0; idx < newLen; idx++) { newArr[idx] = arrayLike[start + idx]; } return newArr; } var initialParams = function (fn) { return function (/*...args, callback*/) { var args = slice(arguments); var callback = args.pop(); fn.call(this, args, callback); }; }; /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value; return value != null && (type == 'object' || type == 'function'); } var hasSetImmediate = typeof setImmediate === 'function' && setImmediate; var hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; function fallback(fn) { setTimeout(fn, 0); } function wrap(defer) { return function (fn/*, ...args*/) { var args = slice(arguments, 1); defer(function () { fn.apply(null, args); }); }; } var _defer; if (hasSetImmediate) { _defer = setImmediate; } else if (hasNextTick) { _defer = process.nextTick; } else { _defer = fallback; } var setImmediate$1 = wrap(_defer); /** * Take a sync function and make it async, passing its return value to a * callback. This is useful for plugging sync functions into a waterfall, * series, or other async functions. Any arguments passed to the generated * function will be passed to the wrapped function (except for the final * callback argument). Errors thrown will be passed to the callback. * * If the function passed to `asyncify` returns a Promise, that promises's * resolved/rejected state will be used to call the callback, rather than simply * the synchronous return value. * * This also means you can asyncify ES2017 `async` functions. * * @name asyncify * @static * @memberOf module:Utils * @method * @alias wrapSync * @category Util * @param {Function} func - The synchronous function, or Promise-returning * function to convert to an {@link AsyncFunction}. * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be * invoked with `(args..., callback)`. * @example * * // passing a regular synchronous function * async.waterfall([ * async.apply(fs.readFile, filename, "utf8"), * async.asyncify(JSON.parse), * function (data, next) { * // data is the result of parsing the text. * // If there was a parsing error, it would have been caught. * } * ], callback); * * // passing a function returning a promise * async.waterfall([ * async.apply(fs.readFile, filename, "utf8"), * async.asyncify(function (contents) { * return db.model.create(contents); * }), * function (model, next) { * // `model` is the instantiated model object. * // If there was an error, this function would be skipped. * } * ], callback); * * // es2017 example, though `asyncify` is not needed if your JS environment * // supports async functions out of the box * var q = async.queue(async.asyncify(async function(file) { * var intermediateStep = await processFile(file); * return await somePromise(intermediateStep) * })); * * q.push(files); */ function asyncify(func) { return initialParams(function (args, callback) { var result; try { result = func.apply(this, args); } catch (e) { return callback(e); } // if result is Promise object if (isObject(result) && typeof result.then === 'function') { result.then(function(value) { invokeCallback(callback, null, value); }, function(err) { invokeCallback(callback, err.message ? err : new Error(err)); }); } else { callback(null, result); } }); } function invokeCallback(callback, error, value) { try { callback(error, value); } catch (e) { setImmediate$1(rethrow, e); } } function rethrow(error) { throw error; } var supportsSymbol = typeof Symbol === 'function'; function isAsync(fn) { return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction'; } function wrapAsync(asyncFn) { return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn; } function applyEach$1(eachfn) { return function(fns/*, ...args*/) { var args = slice(arguments, 1); var go = initialParams(function(args, callback) { var that = this; return eachfn(fns, function (fn, cb) { wrapAsync(fn).apply(that, args.concat(cb)); }, callback); }); if (args.length) { return go.apply(this, args); } else { return go; } }; } /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; /** Detect free variable `self`. */ var freeSelf = typeof self == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); /** Built-in value references. */ var Symbol$1 = root.Symbol; /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { value[symToStringTag$1] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag$1] = tag; } else { delete value[symToStringTag$1]; } } return result; } /** Used for built-in method references. */ var objectProto$1 = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString$1 = objectProto$1.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString$1.call(value); } /** `Object#toString` result references. */ var nullTag = '[object Null]'; var undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } value = Object(value); return (symToStringTag && symToStringTag in value) ? getRawTag(value) : objectToString(value); } /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]'; var funcTag = '[object Function]'; var genTag = '[object GeneratorFunction]'; var proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; /** * Checks if `value` is a valid array-like length. * * **Note:** This method is loosely based on * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. * @example * * _.isLength(3); * // => true * * _.isLength(Number.MIN_VALUE); * // => false * * _.isLength(Infinity); * // => false * * _.isLength('3'); * // => false */ function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } /** * Checks if `value` is array-like. A value is considered array-like if it's * not a function and has a `value.length` that's an integer greater than or * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is array-like, else `false`. * @example * * _.isArrayLike([1, 2, 3]); * // => true * * _.isArrayLike(document.body.children); * // => true * * _.isArrayLike('abc'); * // => true * * _.isArrayLike(_.noop); * // => false */ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } // A temporary value used to identify if the loop should be broken. // See #1064, #1293 var breakLoop = {}; /** * This method returns `undefined`. * * @static * @memberOf _ * @since 2.3.0 * @category Util * @example * * _.times(2, _.noop); * // => [undefined, undefined] */ function noop() { // No operation performed. } function once(fn) { return function () { if (fn === null) return; var callFn = fn; fn = null; callFn.apply(this, arguments); }; } var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator; var getIterator = function (coll) { return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol](); }; /** * The base implementation of `_.times` without support for iteratee shorthands * or max array length checks. * * @private * @param {number} n The number of times to invoke `iteratee`. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the array of results. */ function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && typeof value == 'object'; } /** `Object#toString` result references. */ var argsTag = '[object Arguments]'; /** * The base implementation of `_.isArguments`. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, */ function baseIsArguments(value) { return isObjectLike(value) && baseGetTag(value) == argsTag; } /** Used for built-in method references. */ var objectProto$3 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$2 = objectProto$3.hasOwnProperty; /** Built-in value references. */ var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an `arguments` object, * else `false`. * @example * * _.isArguments(function() { return arguments; }()); * // => true * * _.isArguments([1, 2, 3]); * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; /** * This method returns `false`. * * @static * @memberOf _ * @since 4.13.0 * @category Util * @returns {boolean} Returns `false`. * @example * * _.times(2, _.stubFalse); * // => [false, false] */ function stubFalse() { return false; } /** Detect free variable `exports`. */ var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports = freeModule && freeModule.exports === freeExports; /** Built-in value references. */ var Buffer = moduleExports ? root.Buffer : undefined; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; /** * Checks if `value` is a buffer. * * @static * @memberOf _ * @since 4.3.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. * @example * * _.isBuffer(new Buffer(2)); * // => true * * _.isBuffer(new Uint8Array(2)); * // => false */ var isBuffer = nativeIsBuffer || stubFalse; /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER$1 = 9007199254740991; /** Used to detect unsigned integer values. */ var reIsUint = /^(?:0|[1-9]\d*)$/; /** * Checks if `value` is a valid array-like index. * * @private * @param {*} value The value to check. * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. */ function isIndex(value, length) { length = length == null ? MAX_SAFE_INTEGER$1 : length; return !!length && (typeof value == 'number' || reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); } /** `Object#toString` result references. */ var argsTag$1 = '[object Arguments]'; var arrayTag = '[object Array]'; var boolTag = '[object Boolean]'; var dateTag = '[object Date]'; var errorTag = '[object Error]'; var funcTag$1 = '[object Function]'; var mapTag = '[object Map]'; var numberTag = '[object Number]'; var objectTag = '[object Object]'; var regexpTag = '[object RegExp]'; var setTag = '[object Set]'; var stringTag = '[object String]'; var weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]'; var dataViewTag = '[object DataView]'; var float32Tag = '[object Float32Array]'; var float64Tag = '[object Float64Array]'; var int8Tag = '[object Int8Array]'; var int16Tag = '[object Int16Array]'; var int32Tag = '[object Int32Array]'; var uint8Tag = '[object Uint8Array]'; var uint8ClampedTag = '[object Uint8ClampedArray]'; var uint16Tag = '[object Uint16Array]'; var uint32Tag = '[object Uint32Array]'; /** Used to identify `toStringTag` values of typed arrays. */ var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; /** * The base implementation of `_.isTypedArray` without Node.js optimizations. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. */ function baseIsTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; } /** * The base implementation of `_.unary` without support for storing metadata. * * @private * @param {Function} func The function to cap arguments for. * @returns {Function} Returns the new capped function. */ function baseUnary(func) { return function(value) { return func(value); }; } /** Detect free variable `exports`. */ var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; /** Detect free variable `module`. */ var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; /** Detect the popular CommonJS extension `module.exports`. */ var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; /** Detect free variable `process` from Node.js. */ var freeProcess = moduleExports$1 && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { return freeProcess && freeProcess.binding('util'); } catch (e) {} }()); /* Node.js helper references. */ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; /** * Checks if `value` is classified as a typed array. * * @static * @memberOf _ * @since 3.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. * @example * * _.isTypedArray(new Uint8Array); * // => true * * _.isTypedArray([]); * // => false */ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; /** Used for built-in method references. */ var objectProto$2 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$1 = objectProto$2.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. * * @private * @param {*} value The value to query. * @param {boolean} inherited Specify returning inherited property names. * @returns {Array} Returns the array of property names. */ function arrayLikeKeys(value, inherited) { var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty$1.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers. (isBuff && (key == 'offset' || key == 'parent')) || // PhantomJS 2 has enumerable non-index properties on typed arrays. (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || // Skip index properties. isIndex(key, length) ))) { result.push(key); } } return result; } /** Used for built-in method references. */ var objectProto$5 = Object.prototype; /** * Checks if `value` is likely a prototype object. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. */ function isPrototype(value) { var Ctor = value && value.constructor, proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$5; return value === proto; } /** * Creates a unary function that invokes `func` with its argument transformed. * * @private * @param {Function} func The function to wrap. * @param {Function} transform The argument transform. * @returns {Function} Returns the new function. */ function overArg(func, transform) { return function(arg) { return func(transform(arg)); }; } /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeKeys = overArg(Object.keys, Object); /** Used for built-in method references. */ var objectProto$4 = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty$3 = objectProto$4.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. * * @private * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. */ function baseKeys(object) { if (!isPrototype(object)) { return nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty$3.call(object, key) && key != 'constructor') { result.push(key); } } return result; } /** * Creates an array of the own enumerable property names of `object`. * * **Note:** Non-object values are coerced to objects. See the * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) * for more details. * * @static * @since 0.1.0 * @memberOf _ * @category Object * @param {Object} object The object to query. * @returns {Array} Returns the array of property names. * @example * * function Foo() { * this.a = 1; * this.b = 2; * } * * Foo.prototype.c = 3; * * _.keys(new Foo); * // => ['a', 'b'] (iteration order is not guaranteed) * * _.keys('hi'); * // => ['0', '1'] */ function keys(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } function createArrayIterator(coll) { var i = -1; var len = coll.length; return function next() { return ++i < len ? {value: coll[i], key: i} : null; } } function createES2015Iterator(iterator) { var i = -1; return function next() { var item = iterator.next(); if (item.done) return null; i++; return {value: item.value, key: i}; } } function createObjectIterator(obj) { var okeys = keys(obj); var i = -1; var len = okeys.length; return function next() { var key = okeys[++i]; return i < len ? {value: obj[key], key: key} : null; }; } function iterator(coll) { if (isArrayLike(coll)) { return createArrayIterator(coll); } var iterator = getIterator(coll); return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); } function onlyOnce(fn) { return function() { if (fn === null) throw new Error("Callback was already called."); var callFn = fn; fn = null; callFn.apply(this, arguments); }; } function _eachOfLimit(limit) { return function (obj, iteratee, callback) { callback = once(callback || noop); if (limit <= 0 || !obj) { return callback(null); } var nextElem = iterator(obj); var done = false; var running = 0; function iterateeCallback(err, value) { running -= 1; if (err) { done = true; callback(err); } else if (value === breakLoop || (done && running <= 0)) { done = true; return callback(null); } else { replenish(); } } function replenish () { while (running < limit && !done) { var elem = nextElem(); if (elem === null) { done = true; if (running <= 0) { callback(null); } return; } running += 1; iteratee(elem.value, elem.key, onlyOnce(iterateeCallback)); } } replenish(); }; } /** * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a * time. * * @name eachOfLimit * @static * @memberOf module:Collections * @method * @see [async.eachOf]{@link module:Collections.eachOf} * @alias forEachOfLimit * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - An async function to apply to each * item in `coll`. The `key` is the item's key, or index in the case of an * array. * Invoked with (item, key, callback). * @param {Function} [callback] - A callback which is called when all * `iteratee` functions have finished, or an error occurs. Invoked with (err). */ function eachOfLimit(coll, limit, iteratee, callback) { _eachOfLimit(limit)(coll, wrapAsync(iteratee), callback); } function doLimit(fn, limit) { return function (iterable, iteratee, callback) { return fn(iterable, limit, iteratee, callback); }; } // eachOf implementation optimized for array-likes function eachOfArrayLike(coll, iteratee, callback) { callback = once(callback || noop); var index = 0, completed = 0, length = coll.length; if (length === 0) { callback(null); } function iteratorCallback(err, value) { if (err) { callback(err); } else if ((++completed === length) || value === breakLoop) { callback(null); } } for (; index < length; index++) { iteratee(coll[index], index, onlyOnce(iteratorCallback)); } } // a generic version of eachOf which can handle array, object, and iterator cases. var eachOfGeneric = doLimit(eachOfLimit, Infinity); /** * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument * to the iteratee. * * @name eachOf * @static * @memberOf module:Collections * @method * @alias forEachOf * @category Collection * @see [async.each]{@link module:Collections.each} * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - A function to apply to each * item in `coll`. * The `key` is the item's key, or index in the case of an array. * Invoked with (item, key, callback). * @param {Function} [callback] - A callback which is called when all * `iteratee` functions have finished, or an error occurs. Invoked with (err). * @example * * var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; * var configs = {}; * * async.forEachOf(obj, function (value, key, callback) { * fs.readFile(__dirname + value, "utf8", function (err, data) { * if (err) return callback(err); * try { * configs[key] = JSON.parse(data); * } catch (e) { * return callback(e); * } * callback(); * }); * }, function (err) { * if (err) console.error(err.message); * // configs is now a map of JSON data * doSomethingWith(configs); * }); */ var eachOf = function(coll, iteratee, callback) { var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric; eachOfImplementation(coll, wrapAsync(iteratee), callback); }; function doParallel(fn) { return function (obj, iteratee, callback) { return fn(eachOf, obj, wrapAsync(iteratee), callback); }; } function _asyncMap(eachfn, arr, iteratee, callback) { callback = callback || noop; arr = arr || []; var results = []; var counter = 0; var _iteratee = wrapAsync(iteratee); eachfn(arr, function (value, _, callback) { var index = counter++; _iteratee(value, function (err, v) { results[index] = v; callback(err); }); }, function (err) { callback(err, results); }); } /** * Produces a new collection of values by mapping each value in `coll` through * the `iteratee` function. The `iteratee` is called with an item from `coll` * and a callback for when it has finished processing. Each of these callback * takes 2 arguments: an `error`, and the transformed item from `coll`. If * `iteratee` passes an error to its callback, the main `callback` (for the * `map` function) is immediately called with the error. * * Note, that since this function applies the `iteratee` to each item in * parallel, there is no guarantee that the `iteratee` functions will complete * in order. However, the results array will be in the same order as the * original `coll`. * * If `map` is passed an Object, the results will be an Array. The results * will roughly be in the order of the original Objects' keys (but this can * vary across JavaScript engines). * * @name map * @static * @memberOf module:Collections * @method * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async function to apply to each item in * `coll`. * The iteratee should complete with the transformed item. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called when all `iteratee` * functions have finished, or an error occurs. Results is an Array of the * transformed items from the `coll`. Invoked with (err, results). * @example * * async.map(['file1','file2','file3'], fs.stat, function(err, results) { * // results is now an array of stats for each file * }); */ var map = doParallel(_asyncMap); /** * Applies the provided arguments to each function in the array, calling * `callback` after all functions have completed. If you only provide the first * argument, `fns`, then it will return a function which lets you pass in the * arguments as if it were a single function call. If more arguments are * provided, `callback` is required while `args` is still optional. * * @name applyEach * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s * to all call with the same arguments * @param {...*} [args] - any number of separate arguments to pass to the * function. * @param {Function} [callback] - the final argument should be the callback, * called when all functions have completed processing. * @returns {Function} - If only the first argument, `fns`, is provided, it will * return a function which lets you pass in the arguments as if it were a single * function call. The signature is `(..args, callback)`. If invoked with any * arguments, `callback` is required. * @example * * async.applyEach([enableSearch, updateSchema], 'bucket', callback); * * // partial application example: * async.each( * buckets, * async.applyEach([enableSearch, updateSchema]), * callback * ); */ var applyEach = applyEach$1(map); function doParallelLimit(fn) { return function (obj, limit, iteratee, callback) { return fn(_eachOfLimit(limit), obj, wrapAsync(iteratee), callback); }; } /** * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time. * * @name mapLimit * @static * @memberOf module:Collections * @method * @see [async.map]{@link module:Collections.map} * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - An async function to apply to each item in * `coll`. * The iteratee should complete with the transformed item. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called when all `iteratee` * functions have finished, or an error occurs. Results is an array of the * transformed items from the `coll`. Invoked with (err, results). */ var mapLimit = doParallelLimit(_asyncMap); /** * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time. * * @name mapSeries * @static * @memberOf module:Collections * @method * @see [async.map]{@link module:Collections.map} * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async function to apply to each item in * `coll`. * The iteratee should complete with the transformed item. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called when all `iteratee` * functions have finished, or an error occurs. Results is an array of the * transformed items from the `coll`. Invoked with (err, results). */ var mapSeries = doLimit(mapLimit, 1); /** * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time. * * @name applyEachSeries * @static * @memberOf module:ControlFlow * @method * @see [async.applyEach]{@link module:ControlFlow.applyEach} * @category Control Flow * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s to all * call with the same arguments * @param {...*} [args] - any number of separate arguments to pass to the * function. * @param {Function} [callback] - the final argument should be the callback, * called when all functions have completed processing. * @returns {Function} - If only the first argument is provided, it will return * a function which lets you pass in the arguments as if it were a single * function call. */ var applyEachSeries = applyEach$1(mapSeries); /** * Creates a continuation function with some arguments already applied. * * Useful as a shorthand when combined with other control flow functions. Any * arguments passed to the returned function are added to the arguments * originally passed to apply. * * @name apply * @static * @memberOf module:Utils * @method * @category Util * @param {Function} fn - The function you want to eventually apply all * arguments to. Invokes with (arguments...). * @param {...*} arguments... - Any number of arguments to automatically apply * when the continuation is called. * @returns {Function} the partially-applied function * @example * * // using apply * async.parallel([ * async.apply(fs.writeFile, 'testfile1', 'test1'), * async.apply(fs.writeFile, 'testfile2', 'test2') * ]); * * * // the same process without using apply * async.parallel([ * function(callback) { * fs.writeFile('testfile1', 'test1', callback); * }, * function(callback) { * fs.writeFile('testfile2', 'test2', callback); * } * ]); * * // It's possible to pass any number of additional arguments when calling the * // continuation: * * node> var fn = async.apply(sys.puts, 'one'); * node> fn('two', 'three'); * one * two * three */ var apply = function(fn/*, ...args*/) { var args = slice(arguments, 1); return function(/*callArgs*/) { var callArgs = slice(arguments); return fn.apply(null, args.concat(callArgs)); }; }; /** * A specialized version of `_.forEach` for arrays without support for * iteratee shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns `array`. */ function arrayEach(array, iteratee) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (iteratee(array[index], index, array) === false) { break; } } return array; } /** * Creates a base function for methods like `_.forIn` and `_.forOwn`. * * @private * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Function} Returns the new base function. */ function createBaseFor(fromRight) { return function(object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } /** * The base implementation of `baseForOwn` which iterates over `object` * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @param {Function} keysFunc The function to get the keys of `object`. * @returns {Object} Returns `object`. */ var baseFor = createBaseFor(); /** * The base implementation of `_.forOwn` without support for iteratee shorthands. * * @private * @param {Object} object The object to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Object} Returns `object`. */ function baseForOwn(object, iteratee) { return object && baseFor(object, iteratee, keys); } /** * The base implementation of `_.findIndex` and `_.findLastIndex` without * support for iteratee shorthands. * * @private * @param {Array} array The array to inspect. * @param {Function} predicate The function invoked per iteration. * @param {number} fromIndex The index to search from. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseFindIndex(array, predicate, fromIndex, fromRight) { var length = array.length, index = fromIndex + (fromRight ? 1 : -1); while ((fromRight ? index-- : ++index < length)) { if (predicate(array[index], index, array)) { return index; } } return -1; } /** * The base implementation of `_.isNaN` without support for number objects. * * @private * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. */ function baseIsNaN(value) { return value !== value; } /** * A specialized version of `_.indexOf` which performs strict equality * comparisons of values, i.e. `===`. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function strictIndexOf(array, value, fromIndex) { var index = fromIndex - 1, length = array.length; while (++index < length) { if (array[index] === value) { return index; } } return -1; } /** * The base implementation of `_.indexOf` without `fromIndex` bounds checks. * * @private * @param {Array} array The array to inspect. * @param {*} value The value to search for. * @param {number} fromIndex The index to search from. * @returns {number} Returns the index of the matched value, else `-1`. */ function baseIndexOf(array, value, fromIndex) { return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); } /** * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on * their requirements. Each function can optionally depend on other functions * being completed first, and each function is run as soon as its requirements * are satisfied. * * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence * will stop. Further tasks will not execute (so any other functions depending * on it will not run), and the main `callback` is immediately called with the * error. * * {@link AsyncFunction}s also receive an object containing the results of functions which * have completed so far as the first argument, if they have dependencies. If a * task function has no dependencies, it will only be passed a callback. * * @name auto * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @param {Object} tasks - An object. Each of its properties is either a * function or an array of requirements, with the {@link AsyncFunction} itself the last item * in the array. The object's key of a property serves as the name of the task * defined by that property, i.e. can be used when specifying requirements for * other tasks. The function receives one or two arguments: * * a `results` object, containing the results of the previously executed * functions, only passed if the task has any dependencies, * * a `callback(err, result)` function, which must be called when finished, * passing an `error` (which can be `null`) and the result of the function's * execution. * @param {number} [concurrency=Infinity] - An optional `integer` for * determining the maximum number of tasks that can be run in parallel. By * default, as many as possible. * @param {Function} [callback] - An optional callback which is called when all * the tasks have been completed. It receives the `err` argument if any `tasks` * pass an error to their callback. Results are always returned; however, if an * error occurs, no further `tasks` will be performed, and the results object * will only contain partial results. Invoked with (err, results). * @returns undefined * @example * * async.auto({ * // this function will just be passed a callback * readData: async.apply(fs.readFile, 'data.txt', 'utf-8'), * showData: ['readData', function(results, cb) { * // results.readData is the file's contents * // ... * }] * }, callback); * * async.auto({ * get_data: function(callback) { * console.log('in get_data'); * // async code to get some data * callback(null, 'data', 'converted to array'); * }, * make_folder: function(callback) { * console.log('in make_folder'); * // async code to create a directory to store a file in * // this is run at the same time as getting the data * callback(null, 'folder'); * }, * write_file: ['get_data', 'make_folder', function(results, callback) { * console.log('in write_file', JSON.stringify(results)); * // once there is some data and the directory exists, * // write the data to a file in the directory * callback(null, 'filename'); * }], * email_link: ['write_file', function(results, callback) { * console.log('in email_link', JSON.stringify(results)); * // once the file is written let's email a link to it... * // results.write_file contains the filename returned by write_file. * callback(null, {'file':results.write_file, 'email':'user@example.com'}); * }] * }, function(err, results) { * console.log('err = ', err); * console.log('results = ', results); * }); */ var auto = function (tasks, concurrency, callback) { if (typeof concurrency === 'function') { // concurrency is optional, shift the args. callback = concurrency; concurrency = null; } callback = once(callback || noop); var keys$$1 = keys(tasks); var numTasks = keys$$1.length; if (!numTasks) { return callback(null); } if (!concurrency) { concurrency = numTasks; } var results = {}; var runningTasks = 0; var hasError = false; var listeners = Object.create(null); var readyTasks = []; // for cycle detection: var readyToCheck = []; // tasks that have been identified as reachable // without the possibility of returning to an ancestor task var uncheckedDependencies = {}; baseForOwn(tasks, function (task, key) { if (!isArray(task)) { // no dependencies enqueueTask(key, [task]); readyToCheck.push(key); return; } var dependencies = task.slice(0, task.length - 1); var remainingDependencies = dependencies.length; if (remainingDependencies === 0) { enqueueTask(key, task); readyToCheck.push(key); return; } uncheckedDependencies[key] = remainingDependencies; arrayEach(dependencies, function (dependencyName) { if (!tasks[dependencyName]) { throw new Error('async.auto task `' + key + '` has a non-existent dependency `' + dependencyName + '` in ' + dependencies.join(', ')); } addListener(dependencyName, function () { remainingDependencies--; if (remainingDependencies === 0) { enqueueTask(key, task); } }); }); }); checkForDeadlocks(); processQueue(); function enqueueTask(key, task) { readyTasks.push(function () { runTask(key, task); }); } function processQueue() { if (readyTasks.length === 0 && runningTasks === 0) { return callback(null, results); } while(readyTasks.length && runningTasks < concurrency) { var run = readyTasks.shift(); run(); } } function addListener(taskName, fn) { var taskListeners = listeners[taskName]; if (!taskListeners) { taskListeners = listeners[taskName] = []; } taskListeners.push(fn); } function taskComplete(taskName) { var taskListeners = listeners[taskName] || []; arrayEach(taskListeners, function (fn) { fn(); }); processQueue(); } function runTask(key, task) { if (hasError) return; var taskCallback = onlyOnce(function(err, result) { runningTasks--; if (arguments.length > 2) { result = slice(arguments, 1); } if (err) { var safeResults = {}; baseForOwn(results, function(val, rkey) { safeResults[rkey] = val; }); safeResults[key] = result; hasError = true; listeners = Object.create(null); callback(err, safeResults); } else { results[key] = result; taskComplete(key); } }); runningTasks++; var taskFn = wrapAsync(task[task.length - 1]); if (task.length > 1) { taskFn(results, taskCallback); } else { taskFn(taskCallback); } } function checkForDeadlocks() { // Kahn's algorithm // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html var currentTask; var counter = 0; while (readyToCheck.length) { currentTask = readyToCheck.pop(); counter++; arrayEach(getDependents(currentTask), function (dependent) { if (--uncheckedDependencies[dependent] === 0) { readyToCheck.push(dependent); } }); } if (counter !== numTasks) { throw new Error( 'async.auto cannot execute tasks due to a recursive dependency' ); } } function getDependents(taskName) { var result = []; baseForOwn(tasks, function (task, key) { if (isArray(task) && baseIndexOf(task, taskName, 0) >= 0) { result.push(key); } }); return result; } }; /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return typeof value == 'symbol' || (isObjectLike(value) && baseGetTag(value) == symbolTag); } /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined; var symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; } /** * The base implementation of `_.slice` without an iteratee call guard. * * @private * @param {Array} array The array to slice. * @param {number} [start=0] The start position. * @param {number} [end=array.length] The end position. * @returns {Array} Returns the slice of `array`. */ function baseSlice(array, start, end) { var index = -1, length = array.length; if (start < 0) { start = -start > length ? 0 : (length + start); } end = end > length ? length : end; if (end < 0) { end += length; } length = start > end ? 0 : ((end - start) >>> 0); start >>>= 0; var result = Array(length); while (++index < length) { result[index] = array[index + start]; } return result; } /** * Casts `array` to a slice if it's needed. * * @private * @param {Array} array The array to inspect. * @param {number} start The start position. * @param {number} [end=array.length] The end position. * @returns {Array} Returns the cast slice. */ function castSlice(array, start, end) { var length = array.length; end = end === undefined ? length : end; return (!start && end >= length) ? array : baseSlice(array, start, end); } /** * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol * that is not found in the character symbols. * * @private * @param {Array} strSymbols The string symbols to inspect. * @param {Array} chrSymbols The character symbols to find. * @returns {number} Returns the index of the last unmatched string symbol. */ function charsEndIndex(strSymbols, chrSymbols) { var index = strSymbols.length; while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} return index; } /** * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol * that is not found in the character symbols. * * @private * @param {Array} strSymbols The string symbols to inspect. * @param {Array} chrSymbols The character symbols to find. * @returns {number} Returns the index of the first unmatched string symbol. */ function charsStartIndex(strSymbols, chrSymbols) { var index = -1, length = strSymbols.length; while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} return index; } /** * Converts an ASCII `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function asciiToArray(string) { return string.split(''); } /** Used to compose unicode character classes. */ var rsAstralRange = '\\ud800-\\udfff'; var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23'; var rsComboSymbolsRange = '\\u20d0-\\u20f0'; var rsVarRange = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsZWJ = '\\u200d'; /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); /** * Checks if `string` contains Unicode symbols. * * @private * @param {string} string The string to inspect. * @returns {boolean} Returns `true` if a symbol is found, else `false`. */ function hasUnicode(string) { return reHasUnicode.test(string); } /** Used to compose unicode character classes. */ var rsAstralRange$1 = '\\ud800-\\udfff'; var rsComboMarksRange$1 = '\\u0300-\\u036f\\ufe20-\\ufe23'; var rsComboSymbolsRange$1 = '\\u20d0-\\u20f0'; var rsVarRange$1 = '\\ufe0e\\ufe0f'; /** Used to compose unicode capture groups. */ var rsAstral = '[' + rsAstralRange$1 + ']'; var rsCombo = '[' + rsComboMarksRange$1 + rsComboSymbolsRange$1 + ']'; var rsFitz = '\\ud83c[\\udffb-\\udfff]'; var rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')'; var rsNonAstral = '[^' + rsAstralRange$1 + ']'; var rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}'; var rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]'; var rsZWJ$1 = '\\u200d'; /** Used to compose unicode regexes. */ var reOptMod = rsModifier + '?'; var rsOptVar = '[' + rsVarRange$1 + ']?'; var rsOptJoin = '(?:' + rsZWJ$1 + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*'; var rsSeq = rsOptVar + reOptMod + rsOptJoin; var rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); /** * Converts a Unicode `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function unicodeToArray(string) { return string.match(reUnicode) || []; } /** * Converts `string` to an array. * * @private * @param {string} string The string to convert. * @returns {Array} Returns the converted array. */ function stringToArray(string) { return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string); } /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } /** Used to match leading and trailing whitespace. */ var reTrim = /^\s+|\s+$/g; /** * Removes leading and trailing whitespace or specified characters from `string`. * * @static * @memberOf _ * @since 3.0.0 * @category String * @param {string} [string=''] The string to trim. * @param {string} [chars=whitespace] The characters to trim. * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. * @returns {string} Returns the trimmed string. * @example * * _.trim(' abc '); * // => 'abc' * * _.trim('-_-abc-_-', '_-'); * // => 'abc' * * _.map([' foo ', ' bar '], _.trim); * // => ['foo', 'bar'] */ function trim(string, chars, guard) { string = toString(string); if (string && (guard || chars === undefined)) { return string.replace(reTrim, ''); } if (!string || !(chars = baseToString(chars))) { return string; } var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1; return castSlice(strSymbols, start, end).join(''); } var FN_ARGS = /^(?:async\s+)?(function)?\s*[^\(]*\(\s*([^\)]*)\)/m; var FN_ARG_SPLIT = /,/; var FN_ARG = /(=.+)?(\s*)$/; var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; function parseParams(func) { func = func.toString().replace(STRIP_COMMENTS, ''); func = func.match(FN_ARGS)[2].replace(' ', ''); func = func ? func.split(FN_ARG_SPLIT) : []; func = func.map(function (arg){ return trim(arg.replace(FN_ARG, '')); }); return func; } /** * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent * tasks are specified as parameters to the function, after the usual callback * parameter, with the parameter names matching the names of the tasks it * depends on. This can provide even more readable task graphs which can be * easier to maintain. * * If a final callback is specified, the task results are similarly injected, * specified as named parameters after the initial error parameter. * * The autoInject function is purely syntactic sugar and its semantics are * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}. * * @name autoInject * @static * @memberOf module:ControlFlow * @method * @see [async.auto]{@link module:ControlFlow.auto} * @category Control Flow * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of * the form 'func([dependencies...], callback). The object's key of a property * serves as the name of the task defined by that property, i.e. can be used * when specifying requirements for other tasks. * * The `callback` parameter is a `callback(err, result)` which must be called * when finished, passing an `error` (which can be `null`) and the result of * the function's execution. The remaining parameters name other tasks on * which the task is dependent, and the results from those tasks are the * arguments of those parameters. * @param {Function} [callback] - An optional callback which is called when all * the tasks have been completed. It receives the `err` argument if any `tasks` * pass an error to their callback, and a `results` object with any completed * task results, similar to `auto`. * @example * * // The example from `auto` can be rewritten as follows: * async.autoInject({ * get_data: function(callback) { * // async code to get some data * callback(null, 'data', 'converted to array'); * }, * make_folder: function(callback) { * // async code to create a directory to store a file in * // this is run at the same time as getting the data * callback(null, 'folder'); * }, * write_file: function(get_data, make_folder, callback) { * // once there is some data and the directory exists, * // write the data to a file in the directory * callback(null, 'filename'); * }, * email_link: function(write_file, callback) { * // once the file is written let's email a link to it... * // write_file contains the filename returned by write_file. * callback(null, {'file':write_file, 'email':'user@example.com'}); * } * }, function(err, results) { * console.log('err = ', err); * console.log('email_link = ', results.email_link); * }); * * // If you are using a JS minifier that mangles parameter names, `autoInject` * // will not work with plain functions, since the parameter names will be * // collapsed to a single letter identifier. To work around this, you can * // explicitly specify the names of the parameters your task function needs * // in an array, similar to Angular.js dependency injection. * * // This still has an advantage over plain `auto`, since the results a task * // depends on are still spread into arguments. * async.autoInject({ * //... * write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) { * callback(null, 'filename'); * }], * email_link: ['write_file', function(write_file, callback) { * callback(null, {'file':write_file, 'email':'user@example.com'}); * }] * //... * }, function(err, results) { * console.log('err = ', err); * console.log('email_link = ', results.email_link); * }); */ function autoInject(tasks, callback) { var newTasks = {}; baseForOwn(tasks, function (taskFn, key) { var params; var fnIsAsync = isAsync(taskFn); var hasNoDeps = (!fnIsAsync && taskFn.length === 1) || (fnIsAsync && taskFn.length === 0); if (isArray(taskFn)) { params = taskFn.slice(0, -1); taskFn = taskFn[taskFn.length - 1]; newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn); } else if (hasNoDeps) { // no dependencies, use the function as-is newTasks[key] = taskFn; } else { params = parseParams(taskFn); if (taskFn.length === 0 && !fnIsAsync && params.length === 0) { throw new Error("autoInject task functions require explicit parameters."); } // remove callback param if (!fnIsAsync) params.pop(); newTasks[key] = params.concat(newTask); } function newTask(results, taskCb) { var newArgs = arrayMap(params, function (name) { return results[name]; }); newArgs.push(taskCb); wrapAsync(taskFn).apply(null, newArgs); } }); auto(newTasks, callback); } // Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation // used for queues. This implementation assumes that the node provided by the user can be modified // to adjust the next and last properties. We implement only the minimal functionality // for queue support. function DLL() { this.head = this.tail = null; this.length = 0; } function setInitial(dll, node) { dll.length = 1; dll.head = dll.tail = node; } DLL.prototype.removeLink = function(node) { if (node.prev) node.prev.next = node.next; else this.head = node.next; if (node.next) node.next.prev = node.prev; else this.tail = node.prev; node.prev = node.next = null; this.length -= 1; return node; }; DLL.prototype.empty = function () { while(this.head) this.shift(); return this; }; DLL.prototype.insertAfter = function(node, newNode) { newNode.prev = node; newNode.next = node.next; if (node.next) node.next.prev = newNode; else this.tail = newNode; node.next = newNode; this.length += 1; }; DLL.prototype.insertBefore = function(node, newNode) { newNode.prev = node.prev; newNode.next = node; if (node.prev) node.prev.next = newNode; else this.head = newNode; node.prev = newNode; this.length += 1; }; DLL.prototype.unshift = function(node) { if (this.head) this.insertBefore(this.head, node); else setInitial(this, node); }; DLL.prototype.push = function(node) { if (this.tail) this.insertAfter(this.tail, node); else setInitial(this, node); }; DLL.prototype.shift = function() { return this.head && this.removeLink(this.head); }; DLL.prototype.pop = function() { return this.tail && this.removeLink(this.tail); }; DLL.prototype.toArray = function () { var arr = Array(this.length); var curr = this.head; for(var idx = 0; idx < this.length; idx++) { arr[idx] = curr.data; curr = curr.next; } return arr; }; DLL.prototype.remove = function (testFn) { var curr = this.head; while(!!curr) { var next = curr.next; if (testFn(curr)) { this.removeLink(curr); } curr = next; } return this; }; function queue(worker, concurrency, payload) { if (concurrency == null) { concurrency = 1; } else if(concurrency === 0) { throw new Error('Concurrency must not be zero'); } var _worker = wrapAsync(worker); var numRunning = 0; var workersList = []; function _insert(data, insertAtFront, callback) { if (callback != null && typeof callback !== 'function') { throw new Error('task callback must be a function'); } q.started = true; if (!isArray(data)) { data = [data]; } if (data.length === 0 && q.idle()) { // call drain immediately if there are no tasks return setImmediate$1(function() { q.drain(); }); } for (var i = 0, l = data.length; i < l; i++) { var item = { data: data[i], callback: callback || noop }; if (insertAtFront) { q._tasks.unshift(item); } else { q._tasks.push(item); } } setImmediate$1(q.process); } function _next(tasks) { return function(err){ numRunning -= 1; for (var i = 0, l = tasks.length; i < l; i++) { var task = tasks[i]; var index = baseIndexOf(workersList, task, 0); if (index >= 0) { workersList.splice(index, 1); } task.callback.apply(task, arguments); if (err != null) { q.error(err, task.data); } } if (numRunning <= (q.concurrency - q.buffer) ) { q.unsaturated(); } if (q.idle()) { q.drain(); } q.process(); }; } var isProcessing = false; var q = { _tasks: new DLL(), concurrency: concurrency, payload: payload, saturated: noop, unsaturated:noop, buffer: concurrency / 4, empty: noop, drain: noop, error: noop, started: false, paused: false, push: function (data, callback) { _insert(data, false, callback); }, kill: function () { q.drain = noop; q._tasks.empty(); }, unshift: function (data, callback) { _insert(data, true, callback); }, remove: function (testFn) { q._tasks.remove(testFn); }, process: function () { // Avoid trying to start too many processing operations. This can occur // when callbacks resolve synchronously (#1267). if (isProcessing) { return; } isProcessing = true; while(!q.paused && numRunning < q.concurrency && q._tasks.length){ var tasks = [], data = []; var l = q._tasks.length; if (q.payload) l = Math.min(l, q.payload); for (var i = 0; i < l; i++) { var node = q._tasks.shift(); tasks.push(node); workersList.push(node); data.push(node.data); } numRunning += 1; if (q._tasks.length === 0) { q.empty(); } if (numRunning === q.concurrency) { q.saturated(); } var cb = onlyOnce(_next(tasks)); _worker(data, cb); } isProcessing = false; }, length: function () { return q._tasks.length; }, running: function () { return numRunning; }, workersList: function () { return workersList; }, idle: function() { return q._tasks.length + numRunning === 0; }, pause: function () { q.paused = true; }, resume: function () { if (q.paused === false) { return; } q.paused = false; setImmediate$1(q.process); } }; return q; } /** * A cargo of tasks for the worker function to complete. Cargo inherits all of * the same methods and event callbacks as [`queue`]{@link module:ControlFlow.queue}. * @typedef {Object} CargoObject * @memberOf module:ControlFlow * @property {Function} length - A function returning the number of items * waiting to be processed. Invoke like `cargo.length()`. * @property {number} payload - An `integer` for determining how many tasks * should be process per round. This property can be changed after a `cargo` is * created to alter the payload on-the-fly. * @property {Function} push - Adds `task` to the `queue`. The callback is * called once the `worker` has finished processing the task. Instead of a * single task, an array of `tasks` can be submitted. The respective callback is * used for every task in the list. Invoke like `cargo.push(task, [callback])`. * @property {Function} saturated - A callback that is called when the * `queue.length()` hits the concurrency and further tasks will be queued. * @property {Function} empty - A callback that is called when the last item * from the `queue` is given to a `worker`. * @property {Function} drain - A callback that is called when the last item * from the `queue` has returned from the `worker`. * @property {Function} idle - a function returning false if there are items * waiting or being processed, or true if not. Invoke like `cargo.idle()`. * @property {Function} pause - a function that pauses the processing of tasks * until `resume()` is called. Invoke like `cargo.pause()`. * @property {Function} resume - a function that resumes the processing of * queued tasks when the queue is paused. Invoke like `cargo.resume()`. * @property {Function} kill - a function that removes the `drain` callback and * empties remaining tasks from the queue forcing it to go idle. Invoke like `cargo.kill()`. */ /** * Creates a `cargo` object with the specified payload. Tasks added to the * cargo will be processed altogether (up to the `payload` limit). If the * `worker` is in progress, the task is queued until it becomes available. Once * the `worker` has completed some tasks, each callback of those tasks is * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) * for how `cargo` and `queue` work. * * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers * at a time, cargo passes an array of tasks to a single worker, repeating * when the worker is finished. * * @name cargo * @static * @memberOf module:ControlFlow * @method * @see [async.queue]{@link module:ControlFlow.queue} * @category Control Flow * @param {AsyncFunction} worker - An asynchronous function for processing an array * of queued tasks. Invoked with `(tasks, callback)`. * @param {number} [payload=Infinity] - An optional `integer` for determining * how many tasks should be processed per round; if omitted, the default is * unlimited. * @returns {module:ControlFlow.CargoObject} A cargo object to manage the tasks. Callbacks can * attached as certain properties to listen for specific events during the * lifecycle of the cargo and inner queue. * @example * * // create a cargo object with payload 2 * var cargo = async.cargo(function(tasks, callback) { * for (var i=0; i true */ function identity(value) { return value; } function _createTester(check, getResult) { return function(eachfn, arr, iteratee, cb) { cb = cb || noop; var testPassed = false; var testResult; eachfn(arr, function(value, _, callback) { iteratee(value, function(err, result) { if (err) { callback(err); } else if (check(result) && !testResult) { testPassed = true; testResult = getResult(true, value); callback(null, breakLoop); } else { callback(); } }); }, function(err) { if (err) { cb(err); } else { cb(null, testPassed ? testResult : getResult(false)); } }); }; } function _findGetResult(v, x) { return x; } /** * Returns the first value in `coll` that passes an async truth test. The * `iteratee` is applied in parallel, meaning the first iteratee to return * `true` will fire the detect `callback` with that result. That means the * result might not be the first item in the original `coll` (in terms of order) * that passes the test. * If order within the original `coll` is important, then look at * [`detectSeries`]{@link module:Collections.detectSeries}. * * @name detect * @static * @memberOf module:Collections * @method * @alias find * @category Collections * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. * The iteratee must complete with a boolean value as its result. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called as soon as any * iteratee returns `true`, or after all the `iteratee` functions have finished. * Result will be the first item in the array that passes the truth test * (iteratee) or the value `undefined` if none passed. Invoked with * (err, result). * @example * * async.detect(['file1','file2','file3'], function(filePath, callback) { * fs.access(filePath, function(err) { * callback(null, !err) * }); * }, function(err, result) { * // result now equals the first file in the list that exists * }); */ var detect = doParallel(_createTester(identity, _findGetResult)); /** * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a * time. * * @name detectLimit * @static * @memberOf module:Collections * @method * @see [async.detect]{@link module:Collections.detect} * @alias findLimit * @category Collections * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. * The iteratee must complete with a boolean value as its result. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called as soon as any * iteratee returns `true`, or after all the `iteratee` functions have finished. * Result will be the first item in the array that passes the truth test * (iteratee) or the value `undefined` if none passed. Invoked with * (err, result). */ var detectLimit = doParallelLimit(_createTester(identity, _findGetResult)); /** * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time. * * @name detectSeries * @static * @memberOf module:Collections * @method * @see [async.detect]{@link module:Collections.detect} * @alias findSeries * @category Collections * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. * The iteratee must complete with a boolean value as its result. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called as soon as any * iteratee returns `true`, or after all the `iteratee` functions have finished. * Result will be the first item in the array that passes the truth test * (iteratee) or the value `undefined` if none passed. Invoked with * (err, result). */ var detectSeries = doLimit(detectLimit, 1); function consoleFunc(name) { return function (fn/*, ...args*/) { var args = slice(arguments, 1); args.push(function (err/*, ...args*/) { var args = slice(arguments, 1); if (typeof console === 'object') { if (err) { if (console.error) { console.error(err); } } else if (console[name]) { arrayEach(args, function (x) { console[name](x); }); } } }); wrapAsync(fn).apply(null, args); }; } /** * Logs the result of an [`async` function]{@link AsyncFunction} to the * `console` using `console.dir` to display the properties of the resulting object. * Only works in Node.js or in browsers that support `console.dir` and * `console.error` (such as FF and Chrome). * If multiple arguments are returned from the async function, * `console.dir` is called on each argument in order. * * @name dir * @static * @memberOf module:Utils * @method * @category Util * @param {AsyncFunction} function - The function you want to eventually apply * all arguments to. * @param {...*} arguments... - Any number of arguments to apply to the function. * @example * * // in a module * var hello = function(name, callback) { * setTimeout(function() { * callback(null, {hello: name}); * }, 1000); * }; * * // in the node repl * node> async.dir(hello, 'world'); * {hello: 'world'} */ var dir = consoleFunc('dir'); /** * The post-check version of [`during`]{@link module:ControlFlow.during}. To reflect the difference in * the order of operations, the arguments `test` and `fn` are switched. * * Also a version of [`doWhilst`]{@link module:ControlFlow.doWhilst} with asynchronous `test` function. * @name doDuring * @static * @memberOf module:ControlFlow * @method * @see [async.during]{@link module:ControlFlow.during} * @category Control Flow * @param {AsyncFunction} fn - An async function which is called each time * `test` passes. Invoked with (callback). * @param {AsyncFunction} test - asynchronous truth test to perform before each * execution of `fn`. Invoked with (...args, callback), where `...args` are the * non-error args from the previous callback of `fn`. * @param {Function} [callback] - A callback which is called after the test * function has failed and repeated execution of `fn` has stopped. `callback` * will be passed an error if one occurred, otherwise `null`. */ function doDuring(fn, test, callback) { callback = onlyOnce(callback || noop); var _fn = wrapAsync(fn); var _test = wrapAsync(test); function next(err/*, ...args*/) { if (err) return callback(err); var args = slice(arguments, 1); args.push(check); _test.apply(this, args); } function check(err, truth) { if (err) return callback(err); if (!truth) return callback(null); _fn(next); } check(null, true); } /** * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in * the order of operations, the arguments `test` and `iteratee` are switched. * * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. * * @name doWhilst * @static * @memberOf module:ControlFlow * @method * @see [async.whilst]{@link module:ControlFlow.whilst} * @category Control Flow * @param {AsyncFunction} iteratee - A function which is called each time `test` * passes. Invoked with (callback). * @param {Function} test - synchronous truth test to perform after each * execution of `iteratee`. Invoked with any non-error callback results of * `iteratee`. * @param {Function} [callback] - A callback which is called after the test * function has failed and repeated execution of `iteratee` has stopped. * `callback` will be passed an error and any arguments passed to the final * `iteratee`'s callback. Invoked with (err, [results]); */ function doWhilst(iteratee, test, callback) { callback = onlyOnce(callback || noop); var _iteratee = wrapAsync(iteratee); var next = function(err/*, ...args*/) { if (err) return callback(err); var args = slice(arguments, 1); if (test.apply(this, args)) return _iteratee(next); callback.apply(null, [null].concat(args)); }; _iteratee(next); } /** * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the * argument ordering differs from `until`. * * @name doUntil * @static * @memberOf module:ControlFlow * @method * @see [async.doWhilst]{@link module:ControlFlow.doWhilst} * @category Control Flow * @param {AsyncFunction} iteratee - An async function which is called each time * `test` fails. Invoked with (callback). * @param {Function} test - synchronous truth test to perform after each * execution of `iteratee`. Invoked with any non-error callback results of * `iteratee`. * @param {Function} [callback] - A callback which is called after the test * function has passed and repeated execution of `iteratee` has stopped. `callback` * will be passed an error and any arguments passed to the final `iteratee`'s * callback. Invoked with (err, [results]); */ function doUntil(iteratee, test, callback) { doWhilst(iteratee, function() { return !test.apply(this, arguments); }, callback); } /** * Like [`whilst`]{@link module:ControlFlow.whilst}, except the `test` is an asynchronous function that * is passed a callback in the form of `function (err, truth)`. If error is * passed to `test` or `fn`, the main callback is immediately called with the * value of the error. * * @name during * @static * @memberOf module:ControlFlow * @method * @see [async.whilst]{@link module:ControlFlow.whilst} * @category Control Flow * @param {AsyncFunction} test - asynchronous truth test to perform before each * execution of `fn`. Invoked with (callback). * @param {AsyncFunction} fn - An async function which is called each time * `test` passes. Invoked with (callback). * @param {Function} [callback] - A callback which is called after the test * function has failed and repeated execution of `fn` has stopped. `callback` * will be passed an error, if one occurred, otherwise `null`. * @example * * var count = 0; * * async.during( * function (callback) { * return callback(null, count < 5); * }, * function (callback) { * count++; * setTimeout(callback, 1000); * }, * function (err) { * // 5 seconds have passed * } * ); */ function during(test, fn, callback) { callback = onlyOnce(callback || noop); var _fn = wrapAsync(fn); var _test = wrapAsync(test); function next(err) { if (err) return callback(err); _test(check); } function check(err, truth) { if (err) return callback(err); if (!truth) return callback(null); _fn(next); } _test(check); } function _withoutIndex(iteratee) { return function (value, index, callback) { return iteratee(value, callback); }; } /** * Applies the function `iteratee` to each item in `coll`, in parallel. * The `iteratee` is called with an item from the list, and a callback for when * it has finished. If the `iteratee` passes an error to its `callback`, the * main `callback` (for the `each` function) is immediately called with the * error. * * Note, that since this function applies `iteratee` to each item in parallel, * there is no guarantee that the iteratee functions will complete in order. * * @name each * @static * @memberOf module:Collections * @method * @alias forEach * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async function to apply to * each item in `coll`. Invoked with (item, callback). * The array index is not passed to the iteratee. * If you need the index, use `eachOf`. * @param {Function} [callback] - A callback which is called when all * `iteratee` functions have finished, or an error occurs. Invoked with (err). * @example * * // assuming openFiles is an array of file names and saveFile is a function * // to save the modified contents of that file: * * async.each(openFiles, saveFile, function(err){ * // if any of the saves produced an error, err would equal that error * }); * * // assuming openFiles is an array of file names * async.each(openFiles, function(file, callback) { * * // Perform operation on file here. * console.log('Processing file ' + file); * * if( file.length > 32 ) { * console.log('This file name is too long'); * callback('File name too long'); * } else { * // Do work to process file here * console.log('File processed'); * callback(); * } * }, function(err) { * // if any of the file processing produced an error, err would equal that error * if( err ) { * // One of the iterations produced an error. * // All processing will now stop. * console.log('A file failed to process'); * } else { * console.log('All files have been processed successfully'); * } * }); */ function eachLimit(coll, iteratee, callback) { eachOf(coll, _withoutIndex(wrapAsync(iteratee)), callback); } /** * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. * * @name eachLimit * @static * @memberOf module:Collections * @method * @see [async.each]{@link module:Collections.each} * @alias forEachLimit * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - An async function to apply to each item in * `coll`. * The array index is not passed to the iteratee. * If you need the index, use `eachOfLimit`. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called when all * `iteratee` functions have finished, or an error occurs. Invoked with (err). */ function eachLimit$1(coll, limit, iteratee, callback) { _eachOfLimit(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback); } /** * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. * * @name eachSeries * @static * @memberOf module:Collections * @method * @see [async.each]{@link module:Collections.each} * @alias forEachSeries * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async function to apply to each * item in `coll`. * The array index is not passed to the iteratee. * If you need the index, use `eachOfSeries`. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called when all * `iteratee` functions have finished, or an error occurs. Invoked with (err). */ var eachSeries = doLimit(eachLimit$1, 1); /** * Wrap an async function and ensure it calls its callback on a later tick of * the event loop. If the function already calls its callback on a next tick, * no extra deferral is added. This is useful for preventing stack overflows * (`RangeError: Maximum call stack size exceeded`) and generally keeping * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony) * contained. ES2017 `async` functions are returned as-is -- they are immune * to Zalgo's corrupting influences, as they always resolve on a later tick. * * @name ensureAsync * @static * @memberOf module:Utils * @method * @category Util * @param {AsyncFunction} fn - an async function, one that expects a node-style * callback as its last argument. * @returns {AsyncFunction} Returns a wrapped function with the exact same call * signature as the function passed in. * @example * * function sometimesAsync(arg, callback) { * if (cache[arg]) { * return callback(null, cache[arg]); // this would be synchronous!! * } else { * doSomeIO(arg, callback); // this IO would be asynchronous * } * } * * // this has a risk of stack overflows if many results are cached in a row * async.mapSeries(args, sometimesAsync, done); * * // this will defer sometimesAsync's callback if necessary, * // preventing stack overflows * async.mapSeries(args, async.ensureAsync(sometimesAsync), done); */ function ensureAsync(fn) { if (isAsync(fn)) return fn; return initialParams(function (args, callback) { var sync = true; args.push(function () { var innerArgs = arguments; if (sync) { setImmediate$1(function () { callback.apply(null, innerArgs); }); } else { callback.apply(null, innerArgs); } }); fn.apply(this, args); sync = false; }); } function notId(v) { return !v; } /** * Returns `true` if every element in `coll` satisfies an async test. If any * iteratee call returns `false`, the main `callback` is immediately called. * * @name every * @static * @memberOf module:Collections * @method * @alias all * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async truth test to apply to each item * in the collection in parallel. * The iteratee must complete with a boolean result value. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Result will be either `true` or `false` * depending on the values of the async tests. Invoked with (err, result). * @example * * async.every(['file1','file2','file3'], function(filePath, callback) { * fs.access(filePath, function(err) { * callback(null, !err) * }); * }, function(err, result) { * // if result is true then every file exists * }); */ var every = doParallel(_createTester(notId, notId)); /** * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time. * * @name everyLimit * @static * @memberOf module:Collections * @method * @see [async.every]{@link module:Collections.every} * @alias allLimit * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - An async truth test to apply to each item * in the collection in parallel. * The iteratee must complete with a boolean result value. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Result will be either `true` or `false` * depending on the values of the async tests. Invoked with (err, result). */ var everyLimit = doParallelLimit(_createTester(notId, notId)); /** * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time. * * @name everySeries * @static * @memberOf module:Collections * @method * @see [async.every]{@link module:Collections.every} * @alias allSeries * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async truth test to apply to each item * in the collection in series. * The iteratee must complete with a boolean result value. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Result will be either `true` or `false` * depending on the values of the async tests. Invoked with (err, result). */ var everySeries = doLimit(everyLimit, 1); /** * The base implementation of `_.property` without support for deep paths. * * @private * @param {string} key The key of the property to get. * @returns {Function} Returns the new accessor function. */ function baseProperty(key) { return function(object) { return object == null ? undefined : object[key]; }; } function filterArray(eachfn, arr, iteratee, callback) { var truthValues = new Array(arr.length); eachfn(arr, function (x, index, callback) { iteratee(x, function (err, v) { truthValues[index] = !!v; callback(err); }); }, function (err) { if (err) return callback(err); var results = []; for (var i = 0; i < arr.length; i++) { if (truthValues[i]) results.push(arr[i]); } callback(null, results); }); } function filterGeneric(eachfn, coll, iteratee, callback) { var results = []; eachfn(coll, function (x, index, callback) { iteratee(x, function (err, v) { if (err) { callback(err); } else { if (v) { results.push({index: index, value: x}); } callback(); } }); }, function (err) { if (err) { callback(err); } else { callback(null, arrayMap(results.sort(function (a, b) { return a.index - b.index; }), baseProperty('value'))); } }); } function _filter(eachfn, coll, iteratee, callback) { var filter = isArrayLike(coll) ? filterArray : filterGeneric; filter(eachfn, coll, wrapAsync(iteratee), callback || noop); } /** * Returns a new array of all the values in `coll` which pass an async truth * test. This operation is performed in parallel, but the results array will be * in the same order as the original. * * @name filter * @static * @memberOf module:Collections * @method * @alias select * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {Function} iteratee - A truth test to apply to each item in `coll`. * The `iteratee` is passed a `callback(err, truthValue)`, which must be called * with a boolean argument once it has completed. Invoked with (item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Invoked with (err, results). * @example * * async.filter(['file1','file2','file3'], function(filePath, callback) { * fs.access(filePath, function(err) { * callback(null, !err) * }); * }, function(err, results) { * // results now equals an array of the existing files * }); */ var filter = doParallel(_filter); /** * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a * time. * * @name filterLimit * @static * @memberOf module:Collections * @method * @see [async.filter]{@link module:Collections.filter} * @alias selectLimit * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {Function} iteratee - A truth test to apply to each item in `coll`. * The `iteratee` is passed a `callback(err, truthValue)`, which must be called * with a boolean argument once it has completed. Invoked with (item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Invoked with (err, results). */ var filterLimit = doParallelLimit(_filter); /** * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time. * * @name filterSeries * @static * @memberOf module:Collections * @method * @see [async.filter]{@link module:Collections.filter} * @alias selectSeries * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {Function} iteratee - A truth test to apply to each item in `coll`. * The `iteratee` is passed a `callback(err, truthValue)`, which must be called * with a boolean argument once it has completed. Invoked with (item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Invoked with (err, results) */ var filterSeries = doLimit(filterLimit, 1); /** * Calls the asynchronous function `fn` with a callback parameter that allows it * to call itself again, in series, indefinitely. * If an error is passed to the callback then `errback` is called with the * error, and execution stops, otherwise it will never be called. * * @name forever * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @param {AsyncFunction} fn - an async function to call repeatedly. * Invoked with (next). * @param {Function} [errback] - when `fn` passes an error to it's callback, * this function will be called, and execution stops. Invoked with (err). * @example * * async.forever( * function(next) { * // next is suitable for passing to things that need a callback(err [, whatever]); * // it will result in this function being called again. * }, * function(err) { * // if next is called with a value in its first parameter, it will appear * // in here as 'err', and execution will stop. * } * ); */ function forever(fn, errback) { var done = onlyOnce(errback || noop); var task = wrapAsync(ensureAsync(fn)); function next(err) { if (err) return done(err); task(next); } next(); } /** * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time. * * @name groupByLimit * @static * @memberOf module:Collections * @method * @see [async.groupBy]{@link module:Collections.groupBy} * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - An async function to apply to each item in * `coll`. * The iteratee should complete with a `key` to group the value under. * Invoked with (value, callback). * @param {Function} [callback] - A callback which is called when all `iteratee` * functions have finished, or an error occurs. Result is an `Object` whoses * properties are arrays of values which returned the corresponding key. */ var groupByLimit = function(coll, limit, iteratee, callback) { callback = callback || noop; var _iteratee = wrapAsync(iteratee); mapLimit(coll, limit, function(val, callback) { _iteratee(val, function(err, key) { if (err) return callback(err); return callback(null, {key: key, val: val}); }); }, function(err, mapResults) { var result = {}; // from MDN, handle object having an `hasOwnProperty` prop var hasOwnProperty = Object.prototype.hasOwnProperty; for (var i = 0; i < mapResults.length; i++) { if (mapResults[i]) { var key = mapResults[i].key; var val = mapResults[i].val; if (hasOwnProperty.call(result, key)) { result[key].push(val); } else { result[key] = [val]; } } } return callback(err, result); }); }; /** * Returns a new object, where each value corresponds to an array of items, from * `coll`, that returned the corresponding key. That is, the keys of the object * correspond to the values passed to the `iteratee` callback. * * Note: Since this function applies the `iteratee` to each item in parallel, * there is no guarantee that the `iteratee` functions will complete in order. * However, the values for each key in the `result` will be in the same order as * the original `coll`. For Objects, the values will roughly be in the order of * the original Objects' keys (but this can vary across JavaScript engines). * * @name groupBy * @static * @memberOf module:Collections * @method * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async function to apply to each item in * `coll`. * The iteratee should complete with a `key` to group the value under. * Invoked with (value, callback). * @param {Function} [callback] - A callback which is called when all `iteratee` * functions have finished, or an error occurs. Result is an `Object` whoses * properties are arrays of values which returned the corresponding key. * @example * * async.groupBy(['userId1', 'userId2', 'userId3'], function(userId, callback) { * db.findById(userId, function(err, user) { * if (err) return callback(err); * return callback(null, user.age); * }); * }, function(err, result) { * // result is object containing the userIds grouped by age * // e.g. { 30: ['userId1', 'userId3'], 42: ['userId2']}; * }); */ var groupBy = doLimit(groupByLimit, Infinity); /** * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time. * * @name groupBySeries * @static * @memberOf module:Collections * @method * @see [async.groupBy]{@link module:Collections.groupBy} * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - An async function to apply to each item in * `coll`. * The iteratee should complete with a `key` to group the value under. * Invoked with (value, callback). * @param {Function} [callback] - A callback which is called when all `iteratee` * functions have finished, or an error occurs. Result is an `Object` whoses * properties are arrays of values which returned the corresponding key. */ var groupBySeries = doLimit(groupByLimit, 1); /** * Logs the result of an `async` function to the `console`. Only works in * Node.js or in browsers that support `console.log` and `console.error` (such * as FF and Chrome). If multiple arguments are returned from the async * function, `console.log` is called on each argument in order. * * @name log * @static * @memberOf module:Utils * @method * @category Util * @param {AsyncFunction} function - The function you want to eventually apply * all arguments to. * @param {...*} arguments... - Any number of arguments to apply to the function. * @example * * // in a module * var hello = function(name, callback) { * setTimeout(function() { * callback(null, 'hello ' + name); * }, 1000); * }; * * // in the node repl * node> async.log(hello, 'world'); * 'hello world' */ var log = consoleFunc('log'); /** * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a * time. * * @name mapValuesLimit * @static * @memberOf module:Collections * @method * @see [async.mapValues]{@link module:Collections.mapValues} * @category Collection * @param {Object} obj - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - A function to apply to each value and key * in `coll`. * The iteratee should complete with the transformed value as its result. * Invoked with (value, key, callback). * @param {Function} [callback] - A callback which is called when all `iteratee` * functions have finished, or an error occurs. `result` is a new object consisting * of each key from `obj`, with each transformed value on the right-hand side. * Invoked with (err, result). */ function mapValuesLimit(obj, limit, iteratee, callback) { callback = once(callback || noop); var newObj = {}; var _iteratee = wrapAsync(iteratee); eachOfLimit(obj, limit, function(val, key, next) { _iteratee(val, key, function (err, result) { if (err) return next(err); newObj[key] = result; next(); }); }, function (err) { callback(err, newObj); }); } /** * A relative of [`map`]{@link module:Collections.map}, designed for use with objects. * * Produces a new Object by mapping each value of `obj` through the `iteratee` * function. The `iteratee` is called each `value` and `key` from `obj` and a * callback for when it has finished processing. Each of these callbacks takes * two arguments: an `error`, and the transformed item from `obj`. If `iteratee` * passes an error to its callback, the main `callback` (for the `mapValues` * function) is immediately called with the error. * * Note, the order of the keys in the result is not guaranteed. The keys will * be roughly in the order they complete, (but this is very engine-specific) * * @name mapValues * @static * @memberOf module:Collections * @method * @category Collection * @param {Object} obj - A collection to iterate over. * @param {AsyncFunction} iteratee - A function to apply to each value and key * in `coll`. * The iteratee should complete with the transformed value as its result. * Invoked with (value, key, callback). * @param {Function} [callback] - A callback which is called when all `iteratee` * functions have finished, or an error occurs. `result` is a new object consisting * of each key from `obj`, with each transformed value on the right-hand side. * Invoked with (err, result). * @example * * async.mapValues({ * f1: 'file1', * f2: 'file2', * f3: 'file3' * }, function (file, key, callback) { * fs.stat(file, callback); * }, function(err, result) { * // result is now a map of stats for each file, e.g. * // { * // f1: [stats for file1], * // f2: [stats for file2], * // f3: [stats for file3] * // } * }); */ var mapValues = doLimit(mapValuesLimit, Infinity); /** * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time. * * @name mapValuesSeries * @static * @memberOf module:Collections * @method * @see [async.mapValues]{@link module:Collections.mapValues} * @category Collection * @param {Object} obj - A collection to iterate over. * @param {AsyncFunction} iteratee - A function to apply to each value and key * in `coll`. * The iteratee should complete with the transformed value as its result. * Invoked with (value, key, callback). * @param {Function} [callback] - A callback which is called when all `iteratee` * functions have finished, or an error occurs. `result` is a new object consisting * of each key from `obj`, with each transformed value on the right-hand side. * Invoked with (err, result). */ var mapValuesSeries = doLimit(mapValuesLimit, 1); function has(obj, key) { return key in obj; } /** * Caches the results of an async function. When creating a hash to store * function results against, the callback is omitted from the hash and an * optional hash function can be used. * * If no hash function is specified, the first argument is used as a hash key, * which may work reasonably if it is a string or a data type that converts to a * distinct string. Note that objects and arrays will not behave reasonably. * Neither will cases where the other arguments are significant. In such cases, * specify your own hash function. * * The cache of results is exposed as the `memo` property of the function * returned by `memoize`. * * @name memoize * @static * @memberOf module:Utils * @method * @category Util * @param {AsyncFunction} fn - The async function to proxy and cache results from. * @param {Function} hasher - An optional function for generating a custom hash * for storing results. It has all the arguments applied to it apart from the * callback, and must be synchronous. * @returns {AsyncFunction} a memoized version of `fn` * @example * * var slow_fn = function(name, callback) { * // do something * callback(null, result); * }; * var fn = async.memoize(slow_fn); * * // fn can now be used as if it were slow_fn * fn('some name', function() { * // callback * }); */ function memoize(fn, hasher) { var memo = Object.create(null); var queues = Object.create(null); hasher = hasher || identity; var _fn = wrapAsync(fn); var memoized = initialParams(function memoized(args, callback) { var key = hasher.apply(null, args); if (has(memo, key)) { setImmediate$1(function() { callback.apply(null, memo[key]); }); } else if (has(queues, key)) { queues[key].push(callback); } else { queues[key] = [callback]; _fn.apply(null, args.concat(function(/*args*/) { var args = slice(arguments); memo[key] = args; var q = queues[key]; delete queues[key]; for (var i = 0, l = q.length; i < l; i++) { q[i].apply(null, args); } })); } }); memoized.memo = memo; memoized.unmemoized = fn; return memoized; } /** * Calls `callback` on a later loop around the event loop. In Node.js this just * calls `setImmediate`. In the browser it will use `setImmediate` if * available, otherwise `setTimeout(callback, 0)`, which means other higher * priority events may precede the execution of `callback`. * * This is used internally for browser-compatibility purposes. * * @name nextTick * @static * @memberOf module:Utils * @method * @alias setImmediate * @category Util * @param {Function} callback - The function to call on a later loop around * the event loop. Invoked with (args...). * @param {...*} args... - any number of additional arguments to pass to the * callback on the next tick. * @example * * var call_order = []; * async.nextTick(function() { * call_order.push('two'); * // call_order now equals ['one','two'] * }); * call_order.push('one'); * * async.setImmediate(function (a, b, c) { * // a, b, and c equal 1, 2, and 3 * }, 1, 2, 3); */ var _defer$1; if (hasNextTick) { _defer$1 = process.nextTick; } else if (hasSetImmediate) { _defer$1 = setImmediate; } else { _defer$1 = fallback; } var nextTick = wrap(_defer$1); function _parallel(eachfn, tasks, callback) { callback = callback || noop; var results = isArrayLike(tasks) ? [] : {}; eachfn(tasks, function (task, key, callback) { wrapAsync(task)(function (err, result) { if (arguments.length > 2) { result = slice(arguments, 1); } results[key] = result; callback(err); }); }, function (err) { callback(err, results); }); } /** * Run the `tasks` collection of functions in parallel, without waiting until * the previous function has completed. If any of the functions pass an error to * its callback, the main `callback` is immediately called with the value of the * error. Once the `tasks` have completed, the results are passed to the final * `callback` as an array. * * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about * parallel execution of code. If your tasks do not use any timers or perform * any I/O, they will actually be executed in series. Any synchronous setup * sections for each task will happen one after the other. JavaScript remains * single-threaded. * * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the * execution of other tasks when a task fails. * * It is also possible to use an object instead of an array. Each property will * be run as a function and the results will be passed to the final `callback` * as an object instead of an array. This can be a more readable way of handling * results from {@link async.parallel}. * * @name parallel * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @param {Array|Iterable|Object} tasks - A collection of * [async functions]{@link AsyncFunction} to run. * Each async function can complete with any number of optional `result` values. * @param {Function} [callback] - An optional callback to run once all the * functions have completed successfully. This function gets a results array * (or object) containing all the result arguments passed to the task callbacks. * Invoked with (err, results). * * @example * async.parallel([ * function(callback) { * setTimeout(function() { * callback(null, 'one'); * }, 200); * }, * function(callback) { * setTimeout(function() { * callback(null, 'two'); * }, 100); * } * ], * // optional callback * function(err, results) { * // the results array will equal ['one','two'] even though * // the second function had a shorter timeout. * }); * * // an example using an object instead of an array * async.parallel({ * one: function(callback) { * setTimeout(function() { * callback(null, 1); * }, 200); * }, * two: function(callback) { * setTimeout(function() { * callback(null, 2); * }, 100); * } * }, function(err, results) { * // results is now equals to: {one: 1, two: 2} * }); */ function parallelLimit(tasks, callback) { _parallel(eachOf, tasks, callback); } /** * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a * time. * * @name parallelLimit * @static * @memberOf module:ControlFlow * @method * @see [async.parallel]{@link module:ControlFlow.parallel} * @category Control Flow * @param {Array|Iterable|Object} tasks - A collection of * [async functions]{@link AsyncFunction} to run. * Each async function can complete with any number of optional `result` values. * @param {number} limit - The maximum number of async operations at a time. * @param {Function} [callback] - An optional callback to run once all the * functions have completed successfully. This function gets a results array * (or object) containing all the result arguments passed to the task callbacks. * Invoked with (err, results). */ function parallelLimit$1(tasks, limit, callback) { _parallel(_eachOfLimit(limit), tasks, callback); } /** * A queue of tasks for the worker function to complete. * @typedef {Object} QueueObject * @memberOf module:ControlFlow * @property {Function} length - a function returning the number of items * waiting to be processed. Invoke with `queue.length()`. * @property {boolean} started - a boolean indicating whether or not any * items have been pushed and processed by the queue. * @property {Function} running - a function returning the number of items * currently being processed. Invoke with `queue.running()`. * @property {Function} workersList - a function returning the array of items * currently being processed. Invoke with `queue.workersList()`. * @property {Function} idle - a function returning false if there are items * waiting or being processed, or true if not. Invoke with `queue.idle()`. * @property {number} concurrency - an integer for determining how many `worker` * functions should be run in parallel. This property can be changed after a * `queue` is created to alter the concurrency on-the-fly. * @property {Function} push - add a new task to the `queue`. Calls `callback` * once the `worker` has finished processing the task. Instead of a single task, * a `tasks` array can be submitted. The respective callback is used for every * task in the list. Invoke with `queue.push(task, [callback])`, * @property {Function} unshift - add a new task to the front of the `queue`. * Invoke with `queue.unshift(task, [callback])`. * @property {Function} remove - remove items from the queue that match a test * function. The test function will be passed an object with a `data` property, * and a `priority` property, if this is a * [priorityQueue]{@link module:ControlFlow.priorityQueue} object. * Invoked with `queue.remove(testFn)`, where `testFn` is of the form * `function ({data, priority}) {}` and returns a Boolean. * @property {Function} saturated - a callback that is called when the number of * running workers hits the `concurrency` limit, and further tasks will be * queued. * @property {Function} unsaturated - a callback that is called when the number * of running workers is less than the `concurrency` & `buffer` limits, and * further tasks will not be queued. * @property {number} buffer - A minimum threshold buffer in order to say that * the `queue` is `unsaturated`. * @property {Function} empty - a callback that is called when the last item * from the `queue` is given to a `worker`. * @property {Function} drain - a callback that is called when the last item * from the `queue` has returned from the `worker`. * @property {Function} error - a callback that is called when a task errors. * Has the signature `function(error, task)`. * @property {boolean} paused - a boolean for determining whether the queue is * in a paused state. * @property {Function} pause - a function that pauses the processing of tasks * until `resume()` is called. Invoke with `queue.pause()`. * @property {Function} resume - a function that resumes the processing of * queued tasks when the queue is paused. Invoke with `queue.resume()`. * @property {Function} kill - a function that removes the `drain` callback and * empties remaining tasks from the queue forcing it to go idle. No more tasks * should be pushed to the queue after calling this function. Invoke with `queue.kill()`. */ /** * Creates a `queue` object with the specified `concurrency`. Tasks added to the * `queue` are processed in parallel (up to the `concurrency` limit). If all * `worker`s are in progress, the task is queued until one becomes available. * Once a `worker` completes a `task`, that `task`'s callback is called. * * @name queue * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @param {AsyncFunction} worker - An async function for processing a queued task. * If you want to handle errors from an individual task, pass a callback to * `q.push()`. Invoked with (task, callback). * @param {number} [concurrency=1] - An `integer` for determining how many * `worker` functions should be run in parallel. If omitted, the concurrency * defaults to `1`. If the concurrency is `0`, an error is thrown. * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can * attached as certain properties to listen for specific events during the * lifecycle of the queue. * @example * * // create a queue object with concurrency 2 * var q = async.queue(function(task, callback) { * console.log('hello ' + task.name); * callback(); * }, 2); * * // assign a callback * q.drain = function() { * console.log('all items have been processed'); * }; * * // add some items to the queue * q.push({name: 'foo'}, function(err) { * console.log('finished processing foo'); * }); * q.push({name: 'bar'}, function (err) { * console.log('finished processing bar'); * }); * * // add some items to the queue (batch-wise) * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) { * console.log('finished processing item'); * }); * * // add some items to the front of the queue * q.unshift({name: 'bar'}, function (err) { * console.log('finished processing bar'); * }); */ var queue$1 = function (worker, concurrency) { var _worker = wrapAsync(worker); return queue(function (items, cb) { _worker(items[0], cb); }, concurrency, 1); }; /** * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and * completed in ascending priority order. * * @name priorityQueue * @static * @memberOf module:ControlFlow * @method * @see [async.queue]{@link module:ControlFlow.queue} * @category Control Flow * @param {AsyncFunction} worker - An async function for processing a queued task. * If you want to handle errors from an individual task, pass a callback to * `q.push()`. * Invoked with (task, callback). * @param {number} concurrency - An `integer` for determining how many `worker` * functions should be run in parallel. If omitted, the concurrency defaults to * `1`. If the concurrency is `0`, an error is thrown. * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are two * differences between `queue` and `priorityQueue` objects: * * `push(task, priority, [callback])` - `priority` should be a number. If an * array of `tasks` is given, all tasks will be assigned the same priority. * * The `unshift` method was removed. */ var priorityQueue = function(worker, concurrency) { // Start with a normal queue var q = queue$1(worker, concurrency); // Override push to accept second parameter representing priority q.push = function(data, priority, callback) { if (callback == null) callback = noop; if (typeof callback !== 'function') { throw new Error('task callback must be a function'); } q.started = true; if (!isArray(data)) { data = [data]; } if (data.length === 0) { // call drain immediately if there are no tasks return setImmediate$1(function() { q.drain(); }); } priority = priority || 0; var nextNode = q._tasks.head; while (nextNode && priority >= nextNode.priority) { nextNode = nextNode.next; } for (var i = 0, l = data.length; i < l; i++) { var item = { data: data[i], priority: priority, callback: callback }; if (nextNode) { q._tasks.insertBefore(nextNode, item); } else { q._tasks.push(item); } } setImmediate$1(q.process); }; // Remove unshift function delete q.unshift; return q; }; /** * Runs the `tasks` array of functions in parallel, without waiting until the * previous function has completed. Once any of the `tasks` complete or pass an * error to its callback, the main `callback` is immediately called. It's * equivalent to `Promise.race()`. * * @name race * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction} * to run. Each function can complete with an optional `result` value. * @param {Function} callback - A callback to run once any of the functions have * completed. This function gets an error or result from the first function that * completed. Invoked with (err, result). * @returns undefined * @example * * async.race([ * function(callback) { * setTimeout(function() { * callback(null, 'one'); * }, 200); * }, * function(callback) { * setTimeout(function() { * callback(null, 'two'); * }, 100); * } * ], * // main callback * function(err, result) { * // the result will be equal to 'two' as it finishes earlier * }); */ function race(tasks, callback) { callback = once(callback || noop); if (!isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions')); if (!tasks.length) return callback(); for (var i = 0, l = tasks.length; i < l; i++) { wrapAsync(tasks[i])(callback); } } /** * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order. * * @name reduceRight * @static * @memberOf module:Collections * @method * @see [async.reduce]{@link module:Collections.reduce} * @alias foldr * @category Collection * @param {Array} array - A collection to iterate over. * @param {*} memo - The initial state of the reduction. * @param {AsyncFunction} iteratee - A function applied to each item in the * array to produce the next step in the reduction. * The `iteratee` should complete with the next state of the reduction. * If the iteratee complete with an error, the reduction is stopped and the * main `callback` is immediately called with the error. * Invoked with (memo, item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Result is the reduced value. Invoked with * (err, result). */ function reduceRight (array, memo, iteratee, callback) { var reversed = slice(array).reverse(); reduce(reversed, memo, iteratee, callback); } /** * Wraps the async function in another function that always completes with a * result object, even when it errors. * * The result object has either the property `error` or `value`. * * @name reflect * @static * @memberOf module:Utils * @method * @category Util * @param {AsyncFunction} fn - The async function you want to wrap * @returns {Function} - A function that always passes null to it's callback as * the error. The second argument to the callback will be an `object` with * either an `error` or a `value` property. * @example * * async.parallel([ * async.reflect(function(callback) { * // do some stuff ... * callback(null, 'one'); * }), * async.reflect(function(callback) { * // do some more stuff but error ... * callback('bad stuff happened'); * }), * async.reflect(function(callback) { * // do some more stuff ... * callback(null, 'two'); * }) * ], * // optional callback * function(err, results) { * // values * // results[0].value = 'one' * // results[1].error = 'bad stuff happened' * // results[2].value = 'two' * }); */ function reflect(fn) { var _fn = wrapAsync(fn); return initialParams(function reflectOn(args, reflectCallback) { args.push(function callback(error, cbArg) { if (error) { reflectCallback(null, { error: error }); } else { var value; if (arguments.length <= 2) { value = cbArg; } else { value = slice(arguments, 1); } reflectCallback(null, { value: value }); } }); return _fn.apply(this, args); }); } function reject$1(eachfn, arr, iteratee, callback) { _filter(eachfn, arr, function(value, cb) { iteratee(value, function(err, v) { cb(err, !v); }); }, callback); } /** * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test. * * @name reject * @static * @memberOf module:Collections * @method * @see [async.filter]{@link module:Collections.filter} * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {Function} iteratee - An async truth test to apply to each item in * `coll`. * The should complete with a boolean value as its `result`. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Invoked with (err, results). * @example * * async.reject(['file1','file2','file3'], function(filePath, callback) { * fs.access(filePath, function(err) { * callback(null, !err) * }); * }, function(err, results) { * // results now equals an array of missing files * createFiles(results); * }); */ var reject = doParallel(reject$1); /** * A helper function that wraps an array or an object of functions with `reflect`. * * @name reflectAll * @static * @memberOf module:Utils * @method * @see [async.reflect]{@link module:Utils.reflect} * @category Util * @param {Array|Object|Iterable} tasks - The collection of * [async functions]{@link AsyncFunction} to wrap in `async.reflect`. * @returns {Array} Returns an array of async functions, each wrapped in * `async.reflect` * @example * * let tasks = [ * function(callback) { * setTimeout(function() { * callback(null, 'one'); * }, 200); * }, * function(callback) { * // do some more stuff but error ... * callback(new Error('bad stuff happened')); * }, * function(callback) { * setTimeout(function() { * callback(null, 'two'); * }, 100); * } * ]; * * async.parallel(async.reflectAll(tasks), * // optional callback * function(err, results) { * // values * // results[0].value = 'one' * // results[1].error = Error('bad stuff happened') * // results[2].value = 'two' * }); * * // an example using an object instead of an array * let tasks = { * one: function(callback) { * setTimeout(function() { * callback(null, 'one'); * }, 200); * }, * two: function(callback) { * callback('two'); * }, * three: function(callback) { * setTimeout(function() { * callback(null, 'three'); * }, 100); * } * }; * * async.parallel(async.reflectAll(tasks), * // optional callback * function(err, results) { * // values * // results.one.value = 'one' * // results.two.error = 'two' * // results.three.value = 'three' * }); */ function reflectAll(tasks) { var results; if (isArray(tasks)) { results = arrayMap(tasks, reflect); } else { results = {}; baseForOwn(tasks, function(task, key) { results[key] = reflect.call(this, task); }); } return results; } /** * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a * time. * * @name rejectLimit * @static * @memberOf module:Collections * @method * @see [async.reject]{@link module:Collections.reject} * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {Function} iteratee - An async truth test to apply to each item in * `coll`. * The should complete with a boolean value as its `result`. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Invoked with (err, results). */ var rejectLimit = doParallelLimit(reject$1); /** * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time. * * @name rejectSeries * @static * @memberOf module:Collections * @method * @see [async.reject]{@link module:Collections.reject} * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {Function} iteratee - An async truth test to apply to each item in * `coll`. * The should complete with a boolean value as its `result`. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Invoked with (err, results). */ var rejectSeries = doLimit(rejectLimit, 1); /** * Creates a function that returns `value`. * * @static * @memberOf _ * @since 2.4.0 * @category Util * @param {*} value The value to return from the new function. * @returns {Function} Returns the new constant function. * @example * * var objects = _.times(2, _.constant({ 'a': 1 })); * * console.log(objects); * // => [{ 'a': 1 }, { 'a': 1 }] * * console.log(objects[0] === objects[1]); * // => true */ function constant$1(value) { return function() { return value; }; } /** * Attempts to get a successful response from `task` no more than `times` times * before returning an error. If the task is successful, the `callback` will be * passed the result of the successful task. If all attempts fail, the callback * will be passed the error and result (if any) of the final attempt. * * @name retry * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @see [async.retryable]{@link module:ControlFlow.retryable} * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an * object with `times` and `interval` or a number. * * `times` - The number of attempts to make before giving up. The default * is `5`. * * `interval` - The time to wait between retries, in milliseconds. The * default is `0`. The interval may also be specified as a function of the * retry count (see example). * * `errorFilter` - An optional synchronous function that is invoked on * erroneous result. If it returns `true` the retry attempts will continue; * if the function returns `false` the retry flow is aborted with the current * attempt's error and result being returned to the final callback. * Invoked with (err). * * If `opts` is a number, the number specifies the number of times to retry, * with the default interval of `0`. * @param {AsyncFunction} task - An async function to retry. * Invoked with (callback). * @param {Function} [callback] - An optional callback which is called when the * task has succeeded, or after the final failed attempt. It receives the `err` * and `result` arguments of the last attempt at completing the `task`. Invoked * with (err, results). * * @example * * // The `retry` function can be used as a stand-alone control flow by passing * // a callback, as shown below: * * // try calling apiMethod 3 times * async.retry(3, apiMethod, function(err, result) { * // do something with the result * }); * * // try calling apiMethod 3 times, waiting 200 ms between each retry * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { * // do something with the result * }); * * // try calling apiMethod 10 times with exponential backoff * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds) * async.retry({ * times: 10, * interval: function(retryCount) { * return 50 * Math.pow(2, retryCount); * } * }, apiMethod, function(err, result) { * // do something with the result * }); * * // try calling apiMethod the default 5 times no delay between each retry * async.retry(apiMethod, function(err, result) { * // do something with the result * }); * * // try calling apiMethod only when error condition satisfies, all other * // errors will abort the retry control flow and return to final callback * async.retry({ * errorFilter: function(err) { * return err.message === 'Temporary error'; // only retry on a specific error * } * }, apiMethod, function(err, result) { * // do something with the result * }); * * // It can also be embedded within other control flow functions to retry * // individual methods that are not as reliable, like this: * async.auto({ * users: api.getUsers.bind(api), * payments: async.retryable(3, api.getPayments.bind(api)) * }, function(err, results) { * // do something with the results * }); * */ function retry(opts, task, callback) { var DEFAULT_TIMES = 5; var DEFAULT_INTERVAL = 0; var options = { times: DEFAULT_TIMES, intervalFunc: constant$1(DEFAULT_INTERVAL) }; function parseTimes(acc, t) { if (typeof t === 'object') { acc.times = +t.times || DEFAULT_TIMES; acc.intervalFunc = typeof t.interval === 'function' ? t.interval : constant$1(+t.interval || DEFAULT_INTERVAL); acc.errorFilter = t.errorFilter; } else if (typeof t === 'number' || typeof t === 'string') { acc.times = +t || DEFAULT_TIMES; } else { throw new Error("Invalid arguments for async.retry"); } } if (arguments.length < 3 && typeof opts === 'function') { callback = task || noop; task = opts; } else { parseTimes(options, opts); callback = callback || noop; } if (typeof task !== 'function') { throw new Error("Invalid arguments for async.retry"); } var _task = wrapAsync(task); var attempt = 1; function retryAttempt() { _task(function(err) { if (err && attempt++ < options.times && (typeof options.errorFilter != 'function' || options.errorFilter(err))) { setTimeout(retryAttempt, options.intervalFunc(attempt)); } else { callback.apply(null, arguments); } }); } retryAttempt(); } /** * A close relative of [`retry`]{@link module:ControlFlow.retry}. This method * wraps a task and makes it retryable, rather than immediately calling it * with retries. * * @name retryable * @static * @memberOf module:ControlFlow * @method * @see [async.retry]{@link module:ControlFlow.retry} * @category Control Flow * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional * options, exactly the same as from `retry` * @param {AsyncFunction} task - the asynchronous function to wrap. * This function will be passed any arguments passed to the returned wrapper. * Invoked with (...args, callback). * @returns {AsyncFunction} The wrapped function, which when invoked, will * retry on an error, based on the parameters specified in `opts`. * This function will accept the same parameters as `task`. * @example * * async.auto({ * dep1: async.retryable(3, getFromFlakyService), * process: ["dep1", async.retryable(3, function (results, cb) { * maybeProcessData(results.dep1, cb); * })] * }, callback); */ var retryable = function (opts, task) { if (!task) { task = opts; opts = null; } var _task = wrapAsync(task); return initialParams(function (args, callback) { function taskFn(cb) { _task.apply(null, args.concat(cb)); } if (opts) retry(opts, taskFn, callback); else retry(taskFn, callback); }); }; /** * Run the functions in the `tasks` collection in series, each one running once * the previous function has completed. If any functions in the series pass an * error to its callback, no more functions are run, and `callback` is * immediately called with the value of the error. Otherwise, `callback` * receives an array of results when `tasks` have completed. * * It is also possible to use an object instead of an array. Each property will * be run as a function, and the results will be passed to the final `callback` * as an object instead of an array. This can be a more readable way of handling * results from {@link async.series}. * * **Note** that while many implementations preserve the order of object * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6) * explicitly states that * * > The mechanics and order of enumerating the properties is not specified. * * So if you rely on the order in which your series of functions are executed, * and want this to work on all platforms, consider using an array. * * @name series * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @param {Array|Iterable|Object} tasks - A collection containing * [async functions]{@link AsyncFunction} to run in series. * Each function can complete with any number of optional `result` values. * @param {Function} [callback] - An optional callback to run once all the * functions have completed. This function gets a results array (or object) * containing all the result arguments passed to the `task` callbacks. Invoked * with (err, result). * @example * async.series([ * function(callback) { * // do some stuff ... * callback(null, 'one'); * }, * function(callback) { * // do some more stuff ... * callback(null, 'two'); * } * ], * // optional callback * function(err, results) { * // results is now equal to ['one', 'two'] * }); * * async.series({ * one: function(callback) { * setTimeout(function() { * callback(null, 1); * }, 200); * }, * two: function(callback){ * setTimeout(function() { * callback(null, 2); * }, 100); * } * }, function(err, results) { * // results is now equal to: {one: 1, two: 2} * }); */ function series(tasks, callback) { _parallel(eachOfSeries, tasks, callback); } /** * Returns `true` if at least one element in the `coll` satisfies an async test. * If any iteratee call returns `true`, the main `callback` is immediately * called. * * @name some * @static * @memberOf module:Collections * @method * @alias any * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async truth test to apply to each item * in the collections in parallel. * The iteratee should complete with a boolean `result` value. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called as soon as any * iteratee returns `true`, or after all the iteratee functions have finished. * Result will be either `true` or `false` depending on the values of the async * tests. Invoked with (err, result). * @example * * async.some(['file1','file2','file3'], function(filePath, callback) { * fs.access(filePath, function(err) { * callback(null, !err) * }); * }, function(err, result) { * // if result is true then at least one of the files exists * }); */ var some = doParallel(_createTester(Boolean, identity)); /** * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. * * @name someLimit * @static * @memberOf module:Collections * @method * @see [async.some]{@link module:Collections.some} * @alias anyLimit * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - An async truth test to apply to each item * in the collections in parallel. * The iteratee should complete with a boolean `result` value. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called as soon as any * iteratee returns `true`, or after all the iteratee functions have finished. * Result will be either `true` or `false` depending on the values of the async * tests. Invoked with (err, result). */ var someLimit = doParallelLimit(_createTester(Boolean, identity)); /** * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time. * * @name someSeries * @static * @memberOf module:Collections * @method * @see [async.some]{@link module:Collections.some} * @alias anySeries * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async truth test to apply to each item * in the collections in series. * The iteratee should complete with a boolean `result` value. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called as soon as any * iteratee returns `true`, or after all the iteratee functions have finished. * Result will be either `true` or `false` depending on the values of the async * tests. Invoked with (err, result). */ var someSeries = doLimit(someLimit, 1); /** * Sorts a list by the results of running each `coll` value through an async * `iteratee`. * * @name sortBy * @static * @memberOf module:Collections * @method * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async function to apply to each item in * `coll`. * The iteratee should complete with a value to use as the sort criteria as * its `result`. * Invoked with (item, callback). * @param {Function} callback - A callback which is called after all the * `iteratee` functions have finished, or an error occurs. Results is the items * from the original `coll` sorted by the values returned by the `iteratee` * calls. Invoked with (err, results). * @example * * async.sortBy(['file1','file2','file3'], function(file, callback) { * fs.stat(file, function(err, stats) { * callback(err, stats.mtime); * }); * }, function(err, results) { * // results is now the original array of files sorted by * // modified date * }); * * // By modifying the callback parameter the * // sorting order can be influenced: * * // ascending order * async.sortBy([1,9,3,5], function(x, callback) { * callback(null, x); * }, function(err,result) { * // result callback * }); * * // descending order * async.sortBy([1,9,3,5], function(x, callback) { * callback(null, x*-1); //<- x*-1 instead of x, turns the order around * }, function(err,result) { * // result callback * }); */ function sortBy (coll, iteratee, callback) { var _iteratee = wrapAsync(iteratee); map(coll, function (x, callback) { _iteratee(x, function (err, criteria) { if (err) return callback(err); callback(null, {value: x, criteria: criteria}); }); }, function (err, results) { if (err) return callback(err); callback(null, arrayMap(results.sort(comparator), baseProperty('value'))); }); function comparator(left, right) { var a = left.criteria, b = right.criteria; return a < b ? -1 : a > b ? 1 : 0; } } /** * Sets a time limit on an asynchronous function. If the function does not call * its callback within the specified milliseconds, it will be called with a * timeout error. The code property for the error object will be `'ETIMEDOUT'`. * * @name timeout * @static * @memberOf module:Utils * @method * @category Util * @param {AsyncFunction} asyncFn - The async function to limit in time. * @param {number} milliseconds - The specified time limit. * @param {*} [info] - Any variable you want attached (`string`, `object`, etc) * to timeout Error for more information.. * @returns {AsyncFunction} Returns a wrapped function that can be used with any * of the control flow functions. * Invoke this function with the same parameters as you would `asyncFunc`. * @example * * function myFunction(foo, callback) { * doAsyncTask(foo, function(err, data) { * // handle errors * if (err) return callback(err); * * // do some stuff ... * * // return processed data * return callback(null, data); * }); * } * * var wrapped = async.timeout(myFunction, 1000); * * // call `wrapped` as you would `myFunction` * wrapped({ bar: 'bar' }, function(err, data) { * // if `myFunction` takes < 1000 ms to execute, `err` * // and `data` will have their expected values * * // else `err` will be an Error with the code 'ETIMEDOUT' * }); */ function timeout(asyncFn, milliseconds, info) { var fn = wrapAsync(asyncFn); return initialParams(function (args, callback) { var timedOut = false; var timer; function timeoutCallback() { var name = asyncFn.name || 'anonymous'; var error = new Error('Callback function "' + name + '" timed out.'); error.code = 'ETIMEDOUT'; if (info) { error.info = info; } timedOut = true; callback(error); } args.push(function () { if (!timedOut) { callback.apply(null, arguments); clearTimeout(timer); } }); // setup timer and call original function timer = setTimeout(timeoutCallback, milliseconds); fn.apply(null, args); }); } /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeCeil = Math.ceil; var nativeMax = Math.max; /** * The base implementation of `_.range` and `_.rangeRight` which doesn't * coerce arguments. * * @private * @param {number} start The start of the range. * @param {number} end The end of the range. * @param {number} step The value to increment or decrement by. * @param {boolean} [fromRight] Specify iterating from right to left. * @returns {Array} Returns the range of numbers. */ function baseRange(start, end, step, fromRight) { var index = -1, length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), result = Array(length); while (length--) { result[fromRight ? length : ++index] = start; start += step; } return result; } /** * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a * time. * * @name timesLimit * @static * @memberOf module:ControlFlow * @method * @see [async.times]{@link module:ControlFlow.times} * @category Control Flow * @param {number} count - The number of times to run the function. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - The async function to call `n` times. * Invoked with the iteration index and a callback: (n, next). * @param {Function} callback - see [async.map]{@link module:Collections.map}. */ function timeLimit(count, limit, iteratee, callback) { var _iteratee = wrapAsync(iteratee); mapLimit(baseRange(0, count, 1), limit, _iteratee, callback); } /** * Calls the `iteratee` function `n` times, and accumulates results in the same * manner you would use with [map]{@link module:Collections.map}. * * @name times * @static * @memberOf module:ControlFlow * @method * @see [async.map]{@link module:Collections.map} * @category Control Flow * @param {number} n - The number of times to run the function. * @param {AsyncFunction} iteratee - The async function to call `n` times. * Invoked with the iteration index and a callback: (n, next). * @param {Function} callback - see {@link module:Collections.map}. * @example * * // Pretend this is some complicated async factory * var createUser = function(id, callback) { * callback(null, { * id: 'user' + id * }); * }; * * // generate 5 users * async.times(5, function(n, next) { * createUser(n, function(err, user) { * next(err, user); * }); * }, function(err, users) { * // we should now have 5 users * }); */ var times = doLimit(timeLimit, Infinity); /** * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time. * * @name timesSeries * @static * @memberOf module:ControlFlow * @method * @see [async.times]{@link module:ControlFlow.times} * @category Control Flow * @param {number} n - The number of times to run the function. * @param {AsyncFunction} iteratee - The async function to call `n` times. * Invoked with the iteration index and a callback: (n, next). * @param {Function} callback - see {@link module:Collections.map}. */ var timesSeries = doLimit(timeLimit, 1); /** * A relative of `reduce`. Takes an Object or Array, and iterates over each * element in series, each step potentially mutating an `accumulator` value. * The type of the accumulator defaults to the type of collection passed in. * * @name transform * @static * @memberOf module:Collections * @method * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {*} [accumulator] - The initial state of the transform. If omitted, * it will default to an empty Object or Array, depending on the type of `coll` * @param {AsyncFunction} iteratee - A function applied to each item in the * collection that potentially modifies the accumulator. * Invoked with (accumulator, item, key, callback). * @param {Function} [callback] - A callback which is called after all the * `iteratee` functions have finished. Result is the transformed accumulator. * Invoked with (err, result). * @example * * async.transform([1,2,3], function(acc, item, index, callback) { * // pointless async: * process.nextTick(function() { * acc.push(item * 2) * callback(null) * }); * }, function(err, result) { * // result is now equal to [2, 4, 6] * }); * * @example * * async.transform({a: 1, b: 2, c: 3}, function (obj, val, key, callback) { * setImmediate(function () { * obj[key] = val * 2; * callback(); * }) * }, function (err, result) { * // result is equal to {a: 2, b: 4, c: 6} * }) */ function transform (coll, accumulator, iteratee, callback) { if (arguments.length <= 3) { callback = iteratee; iteratee = accumulator; accumulator = isArray(coll) ? [] : {}; } callback = once(callback || noop); var _iteratee = wrapAsync(iteratee); eachOf(coll, function(v, k, cb) { _iteratee(accumulator, v, k, cb); }, function(err) { callback(err, accumulator); }); } /** * It runs each task in series but stops whenever any of the functions were * successful. If one of the tasks were successful, the `callback` will be * passed the result of the successful task. If all tasks fail, the callback * will be passed the error and result (if any) of the final attempt. * * @name tryEach * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @param {Array|Iterable|Object} tasks - A collection containing functions to * run, each function is passed a `callback(err, result)` it must call on * completion with an error `err` (which can be `null`) and an optional `result` * value. * @param {Function} [callback] - An optional callback which is called when one * of the tasks has succeeded, or all have failed. It receives the `err` and * `result` arguments of the last attempt at completing the `task`. Invoked with * (err, results). * @example * async.try([ * function getDataFromFirstWebsite(callback) { * // Try getting the data from the first website * callback(err, data); * }, * function getDataFromSecondWebsite(callback) { * // First website failed, * // Try getting the data from the backup website * callback(err, data); * } * ], * // optional callback * function(err, results) { * Now do something with the data. * }); * */ function tryEach(tasks, callback) { var error = null; var result; callback = callback || noop; eachSeries(tasks, function(task, callback) { wrapAsync(task)(function (err, res/*, ...args*/) { if (arguments.length > 2) { result = slice(arguments, 1); } else { result = res; } error = err; callback(!err); }); }, function () { callback(error, result); }); } /** * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original, * unmemoized form. Handy for testing. * * @name unmemoize * @static * @memberOf module:Utils * @method * @see [async.memoize]{@link module:Utils.memoize} * @category Util * @param {AsyncFunction} fn - the memoized function * @returns {AsyncFunction} a function that calls the original unmemoized function */ function unmemoize(fn) { return function () { return (fn.unmemoized || fn).apply(null, arguments); }; } /** * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when * stopped, or an error occurs. * * @name whilst * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @param {Function} test - synchronous truth test to perform before each * execution of `iteratee`. Invoked with (). * @param {AsyncFunction} iteratee - An async function which is called each time * `test` passes. Invoked with (callback). * @param {Function} [callback] - A callback which is called after the test * function has failed and repeated execution of `iteratee` has stopped. `callback` * will be passed an error and any arguments passed to the final `iteratee`'s * callback. Invoked with (err, [results]); * @returns undefined * @example * * var count = 0; * async.whilst( * function() { return count < 5; }, * function(callback) { * count++; * setTimeout(function() { * callback(null, count); * }, 1000); * }, * function (err, n) { * // 5 seconds have passed, n = 5 * } * ); */ function whilst(test, iteratee, callback) { callback = onlyOnce(callback || noop); var _iteratee = wrapAsync(iteratee); if (!test()) return callback(null); var next = function(err/*, ...args*/) { if (err) return callback(err); if (test()) return _iteratee(next); var args = slice(arguments, 1); callback.apply(null, [null].concat(args)); }; _iteratee(next); } /** * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when * stopped, or an error occurs. `callback` will be passed an error and any * arguments passed to the final `iteratee`'s callback. * * The inverse of [whilst]{@link module:ControlFlow.whilst}. * * @name until * @static * @memberOf module:ControlFlow * @method * @see [async.whilst]{@link module:ControlFlow.whilst} * @category Control Flow * @param {Function} test - synchronous truth test to perform before each * execution of `iteratee`. Invoked with (). * @param {AsyncFunction} iteratee - An async function which is called each time * `test` fails. Invoked with (callback). * @param {Function} [callback] - A callback which is called after the test * function has passed and repeated execution of `iteratee` has stopped. `callback` * will be passed an error and any arguments passed to the final `iteratee`'s * callback. Invoked with (err, [results]); */ function until(test, iteratee, callback) { whilst(function() { return !test.apply(this, arguments); }, iteratee, callback); } /** * Runs the `tasks` array of functions in series, each passing their results to * the next in the array. However, if any of the `tasks` pass an error to their * own callback, the next function is not executed, and the main `callback` is * immediately called with the error. * * @name waterfall * @static * @memberOf module:ControlFlow * @method * @category Control Flow * @param {Array} tasks - An array of [async functions]{@link AsyncFunction} * to run. * Each function should complete with any number of `result` values. * The `result` values will be passed as arguments, in order, to the next task. * @param {Function} [callback] - An optional callback to run once all the * functions have completed. This will be passed the results of the last task's * callback. Invoked with (err, [results]). * @returns undefined * @example * * async.waterfall([ * function(callback) { * callback(null, 'one', 'two'); * }, * function(arg1, arg2, callback) { * // arg1 now equals 'one' and arg2 now equals 'two' * callback(null, 'three'); * }, * function(arg1, callback) { * // arg1 now equals 'three' * callback(null, 'done'); * } * ], function (err, result) { * // result now equals 'done' * }); * * // Or, with named functions: * async.waterfall([ * myFirstFunction, * mySecondFunction, * myLastFunction, * ], function (err, result) { * // result now equals 'done' * }); * function myFirstFunction(callback) { * callback(null, 'one', 'two'); * } * function mySecondFunction(arg1, arg2, callback) { * // arg1 now equals 'one' and arg2 now equals 'two' * callback(null, 'three'); * } * function myLastFunction(arg1, callback) { * // arg1 now equals 'three' * callback(null, 'done'); * } */ var waterfall = function(tasks, callback) { callback = once(callback || noop); if (!isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions')); if (!tasks.length) return callback(); var taskIndex = 0; function nextTask(args) { var task = wrapAsync(tasks[taskIndex++]); args.push(onlyOnce(next)); task.apply(null, args); } function next(err/*, ...args*/) { if (err || taskIndex === tasks.length) { return callback.apply(null, arguments); } nextTask(slice(arguments, 1)); } nextTask([]); }; /** * An "async function" in the context of Async is an asynchronous function with * a variable number of parameters, with the final parameter being a callback. * (`function (arg1, arg2, ..., callback) {}`) * The final callback is of the form `callback(err, results...)`, which must be * called once the function is completed. The callback should be called with a * Error as its first argument to signal that an error occurred. * Otherwise, if no error occurred, it should be called with `null` as the first * argument, and any additional `result` arguments that may apply, to signal * successful completion. * The callback must be called exactly once, ideally on a later tick of the * JavaScript event loop. * * This type of function is also referred to as a "Node-style async function", * or a "continuation passing-style function" (CPS). Most of the methods of this * library are themselves CPS/Node-style async functions, or functions that * return CPS/Node-style async functions. * * Wherever we accept a Node-style async function, we also directly accept an * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}. * In this case, the `async` function will not be passed a final callback * argument, and any thrown error will be used as the `err` argument of the * implicit callback, and the return value will be used as the `result` value. * (i.e. a `rejected` of the returned Promise becomes the `err` callback * argument, and a `resolved` value becomes the `result`.) * * Note, due to JavaScript limitations, we can only detect native `async` * functions and not transpilied implementations. * Your environment must have `async`/`await` support for this to work. * (e.g. Node > v7.6, or a recent version of a modern browser). * If you are using `async` functions through a transpiler (e.g. Babel), you * must still wrap the function with [asyncify]{@link module:Utils.asyncify}, * because the `async function` will be compiled to an ordinary function that * returns a promise. * * @typedef {Function} AsyncFunction * @static */ /** * Async is a utility module which provides straight-forward, powerful functions * for working with asynchronous JavaScript. Although originally designed for * use with [Node.js](http://nodejs.org) and installable via * `npm install --save async`, it can also be used directly in the browser. * @module async * @see AsyncFunction */ /** * A collection of `async` functions for manipulating collections, such as * arrays and objects. * @module Collections */ /** * A collection of `async` functions for controlling the flow through a script. * @module ControlFlow */ /** * A collection of `async` utility functions. * @module Utils */ var index = { applyEach: applyEach, applyEachSeries: applyEachSeries, apply: apply, asyncify: asyncify, auto: auto, autoInject: autoInject, cargo: cargo, compose: compose, concat: concat, concatLimit: concatLimit, concatSeries: concatSeries, constant: constant, detect: detect, detectLimit: detectLimit, detectSeries: detectSeries, dir: dir, doDuring: doDuring, doUntil: doUntil, doWhilst: doWhilst, during: during, each: eachLimit, eachLimit: eachLimit$1, eachOf: eachOf, eachOfLimit: eachOfLimit, eachOfSeries: eachOfSeries, eachSeries: eachSeries, ensureAsync: ensureAsync, every: every, everyLimit: everyLimit, everySeries: everySeries, filter: filter, filterLimit: filterLimit, filterSeries: filterSeries, forever: forever, groupBy: groupBy, groupByLimit: groupByLimit, groupBySeries: groupBySeries, log: log, map: map, mapLimit: mapLimit, mapSeries: mapSeries, mapValues: mapValues, mapValuesLimit: mapValuesLimit, mapValuesSeries: mapValuesSeries, memoize: memoize, nextTick: nextTick, parallel: parallelLimit, parallelLimit: parallelLimit$1, priorityQueue: priorityQueue, queue: queue$1, race: race, reduce: reduce, reduceRight: reduceRight, reflect: reflect, reflectAll: reflectAll, reject: reject, rejectLimit: rejectLimit, rejectSeries: rejectSeries, retry: retry, retryable: retryable, seq: seq, series: series, setImmediate: setImmediate$1, some: some, someLimit: someLimit, someSeries: someSeries, sortBy: sortBy, timeout: timeout, times: times, timesLimit: timeLimit, timesSeries: timesSeries, transform: transform, tryEach: tryEach, unmemoize: unmemoize, until: until, waterfall: waterfall, whilst: whilst, // aliases all: every, any: some, forEach: eachLimit, forEachSeries: eachSeries, forEachLimit: eachLimit$1, forEachOf: eachOf, forEachOfSeries: eachOfSeries, forEachOfLimit: eachOfLimit, inject: reduce, foldl: reduce, foldr: reduceRight, select: filter, selectLimit: filterLimit, selectSeries: filterSeries, wrapSync: asyncify }; exports['default'] = index; exports.applyEach = applyEach; exports.applyEachSeries = applyEachSeries; exports.apply = apply; exports.asyncify = asyncify; exports.auto = auto; exports.autoInject = autoInject; exports.cargo = cargo; exports.compose = compose; exports.concat = concat; exports.concatLimit = concatLimit; exports.concatSeries = concatSeries; exports.constant = constant; exports.detect = detect; exports.detectLimit = detectLimit; exports.detectSeries = detectSeries; exports.dir = dir; exports.doDuring = doDuring; exports.doUntil = doUntil; exports.doWhilst = doWhilst; exports.during = during; exports.each = eachLimit; exports.eachLimit = eachLimit$1; exports.eachOf = eachOf; exports.eachOfLimit = eachOfLimit; exports.eachOfSeries = eachOfSeries; exports.eachSeries = eachSeries; exports.ensureAsync = ensureAsync; exports.every = every; exports.everyLimit = everyLimit; exports.everySeries = everySeries; exports.filter = filter; exports.filterLimit = filterLimit; exports.filterSeries = filterSeries; exports.forever = forever; exports.groupBy = groupBy; exports.groupByLimit = groupByLimit; exports.groupBySeries = groupBySeries; exports.log = log; exports.map = map; exports.mapLimit = mapLimit; exports.mapSeries = mapSeries; exports.mapValues = mapValues; exports.mapValuesLimit = mapValuesLimit; exports.mapValuesSeries = mapValuesSeries; exports.memoize = memoize; exports.nextTick = nextTick; exports.parallel = parallelLimit; exports.parallelLimit = parallelLimit$1; exports.priorityQueue = priorityQueue; exports.queue = queue$1; exports.race = race; exports.reduce = reduce; exports.reduceRight = reduceRight; exports.reflect = reflect; exports.reflectAll = reflectAll; exports.reject = reject; exports.rejectLimit = rejectLimit; exports.rejectSeries = rejectSeries; exports.retry = retry; exports.retryable = retryable; exports.seq = seq; exports.series = series; exports.setImmediate = setImmediate$1; exports.some = some; exports.someLimit = someLimit; exports.someSeries = someSeries; exports.sortBy = sortBy; exports.timeout = timeout; exports.times = times; exports.timesLimit = timeLimit; exports.timesSeries = timesSeries; exports.transform = transform; exports.tryEach = tryEach; exports.unmemoize = unmemoize; exports.until = until; exports.waterfall = waterfall; exports.whilst = whilst; exports.all = every; exports.allLimit = everyLimit; exports.allSeries = everySeries; exports.any = some; exports.anyLimit = someLimit; exports.anySeries = someSeries; exports.find = detect; exports.findLimit = detectLimit; exports.findSeries = detectSeries; exports.forEach = eachLimit; exports.forEachSeries = eachSeries; exports.forEachLimit = eachLimit$1; exports.forEachOf = eachOf; exports.forEachOfSeries = eachOfSeries; exports.forEachOfLimit = eachOfLimit; exports.inject = reduce; exports.foldl = reduce; exports.foldr = reduceRight; exports.select = filter; exports.selectLimit = filterLimit; exports.selectSeries = filterSeries; exports.wrapSync = asyncify; Object.defineProperty(exports, '__esModule', { value: true }); }))); }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"_process":285}],25:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = eachLimit; var _eachOfLimit = require('./internal/eachOfLimit'); var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); var _withoutIndex = require('./internal/withoutIndex'); var _withoutIndex2 = _interopRequireDefault(_withoutIndex); var _wrapAsync = require('./internal/wrapAsync'); var _wrapAsync2 = _interopRequireDefault(_wrapAsync); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. * * @name eachLimit * @static * @memberOf module:Collections * @method * @see [async.each]{@link module:Collections.each} * @alias forEachLimit * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {number} limit - The maximum number of async operations at a time. * @param {AsyncFunction} iteratee - An async function to apply to each item in * `coll`. * The array index is not passed to the iteratee. * If you need the index, use `eachOfLimit`. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called when all * `iteratee` functions have finished, or an error occurs. Invoked with (err). */ function eachLimit(coll, limit, iteratee, callback) { (0, _eachOfLimit2.default)(limit)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); } module.exports = exports['default']; },{"./internal/eachOfLimit":29,"./internal/withoutIndex":37,"./internal/wrapAsync":38}],26:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _eachLimit = require('./eachLimit'); var _eachLimit2 = _interopRequireDefault(_eachLimit); var _doLimit = require('./internal/doLimit'); var _doLimit2 = _interopRequireDefault(_doLimit); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. * * @name eachSeries * @static * @memberOf module:Collections * @method * @see [async.each]{@link module:Collections.each} * @alias forEachSeries * @category Collection * @param {Array|Iterable|Object} coll - A collection to iterate over. * @param {AsyncFunction} iteratee - An async function to apply to each * item in `coll`. * The array index is not passed to the iteratee. * If you need the index, use `eachOfSeries`. * Invoked with (item, callback). * @param {Function} [callback] - A callback which is called when all * `iteratee` functions have finished, or an error occurs. Invoked with (err). */ exports.default = (0, _doLimit2.default)(_eachLimit2.default, 1); module.exports = exports['default']; },{"./eachLimit":25,"./internal/doLimit":28}],27:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // A temporary value used to identify if the loop should be broken. // See #1064, #1293 exports.default = {}; module.exports = exports["default"]; },{}],28:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = doLimit; function doLimit(fn, limit) { return function (iterable, iteratee, callback) { return fn(iterable, limit, iteratee, callback); }; } module.exports = exports["default"]; },{}],29:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _eachOfLimit; var _noop = require('lodash/noop'); var _noop2 = _interopRequireDefault(_noop); var _once = require('./once'); var _once2 = _interopRequireDefault(_once); var _iterator = require('./iterator'); var _iterator2 = _interopRequireDefault(_iterator); var _onlyOnce = require('./onlyOnce'); var _onlyOnce2 = _interopRequireDefault(_onlyOnce); var _breakLoop = require('./breakLoop'); var _breakLoop2 = _interopRequireDefault(_breakLoop); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _eachOfLimit(limit) { return function (obj, iteratee, callback) { callback = (0, _once2.default)(callback || _noop2.default); if (limit <= 0 || !obj) { return callback(null); } var nextElem = (0, _iterator2.default)(obj); var done = false; var running = 0; function iterateeCallback(err, value) { running -= 1; if (err) { done = true; callback(err); } else if (value === _breakLoop2.default || done && running <= 0) { done = true; return callback(null); } else { replenish(); } } function replenish() { while (running < limit && !done) { var elem = nextElem(); if (elem === null) { done = true; if (running <= 0) { callback(null); } return; } running += 1; iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback)); } } replenish(); }; } module.exports = exports['default']; },{"./breakLoop":27,"./iterator":32,"./once":33,"./onlyOnce":34,"lodash/noop":245}],30:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function (coll) { return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol](); }; var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator; module.exports = exports['default']; },{}],31:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function (fn) { return function () /*...args, callback*/{ var args = (0, _slice2.default)(arguments); var callback = args.pop(); fn.call(this, args, callback); }; }; var _slice = require('./slice'); var _slice2 = _interopRequireDefault(_slice); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } module.exports = exports['default']; },{"./slice":36}],32:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = iterator; var _isArrayLike = require('lodash/isArrayLike'); var _isArrayLike2 = _interopRequireDefault(_isArrayLike); var _getIterator = require('./getIterator'); var _getIterator2 = _interopRequireDefault(_getIterator); var _keys = require('lodash/keys'); var _keys2 = _interopRequireDefault(_keys); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function createArrayIterator(coll) { var i = -1; var len = coll.length; return function next() { return ++i < len ? { value: coll[i], key: i } : null; }; } function createES2015Iterator(iterator) { var i = -1; return function next() { var item = iterator.next(); if (item.done) return null; i++; return { value: item.value, key: i }; }; } function createObjectIterator(obj) { var okeys = (0, _keys2.default)(obj); var i = -1; var len = okeys.length; return function next() { var key = okeys[++i]; return i < len ? { value: obj[key], key: key } : null; }; } function iterator(coll) { if ((0, _isArrayLike2.default)(coll)) { return createArrayIterator(coll); } var iterator = (0, _getIterator2.default)(coll); return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll); } module.exports = exports['default']; },{"./getIterator":30,"lodash/isArrayLike":237,"lodash/keys":244}],33:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = once; function once(fn) { return function () { if (fn === null) return; var callFn = fn; fn = null; callFn.apply(this, arguments); }; } module.exports = exports["default"]; },{}],34:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = onlyOnce; function onlyOnce(fn) { return function () { if (fn === null) throw new Error("Callback was already called."); var callFn = fn; fn = null; callFn.apply(this, arguments); }; } module.exports = exports["default"]; },{}],35:[function(require,module,exports){ (function (process){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasNextTick = exports.hasSetImmediate = undefined; exports.fallback = fallback; exports.wrap = wrap; var _slice = require('./slice'); var _slice2 = _interopRequireDefault(_slice); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var hasSetImmediate = exports.hasSetImmediate = typeof setImmediate === 'function' && setImmediate; var hasNextTick = exports.hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function'; function fallback(fn) { setTimeout(fn, 0); } function wrap(defer) { return function (fn /*, ...args*/) { var args = (0, _slice2.default)(arguments, 1); defer(function () { fn.apply(null, args); }); }; } var _defer; if (hasSetImmediate) { _defer = setImmediate; } else if (hasNextTick) { _defer = process.nextTick; } else { _defer = fallback; } exports.default = wrap(_defer); }).call(this,require('_process')) },{"./slice":36,"_process":285}],36:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = slice; function slice(arrayLike, start) { start = start | 0; var newLen = Math.max(arrayLike.length - start, 0); var newArr = Array(newLen); for (var idx = 0; idx < newLen; idx++) { newArr[idx] = arrayLike[start + idx]; } return newArr; } module.exports = exports["default"]; },{}],37:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _withoutIndex; function _withoutIndex(iteratee) { return function (value, index, callback) { return iteratee(value, callback); }; } module.exports = exports["default"]; },{}],38:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.isAsync = undefined; var _asyncify = require('../asyncify'); var _asyncify2 = _interopRequireDefault(_asyncify); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var supportsSymbol = typeof Symbol === 'function'; function isAsync(fn) { return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction'; } function wrapAsync(asyncFn) { return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn; } exports.default = wrapAsync; exports.isAsync = isAsync; },{"../asyncify":23}],39:[function(require,module,exports){ 'use strict' exports.byteLength = byteLength exports.toByteArray = toByteArray exports.fromByteArray = fromByteArray var lookup = [] var revLookup = [] var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' for (var i = 0, len = code.length; i < len; ++i) { lookup[i] = code[i] revLookup[code.charCodeAt(i)] = i } revLookup['-'.charCodeAt(0)] = 62 revLookup['_'.charCodeAt(0)] = 63 function placeHoldersCount (b64) { var len = b64.length if (len % 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 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 } function byteLength (b64) { // base64 is 4/3 + up to two characters of the original data return (b64.length * 3 / 4) - placeHoldersCount(b64) } function toByteArray (b64) { var i, l, tmp, placeHolders, arr var len = b64.length placeHolders = placeHoldersCount(b64) arr = new Arr((len * 3 / 4) - placeHolders) // if there are placeholders, only get up to the last complete 4 chars l = placeHolders > 0 ? len - 4 : len var L = 0 for (i = 0; i < l; i += 4) { tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] arr[L++] = (tmp >> 16) & 0xFF arr[L++] = (tmp >> 8) & 0xFF arr[L++] = tmp & 0xFF } if (placeHolders === 2) { tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) arr[L++] = tmp & 0xFF } else if (placeHolders === 1) { tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) arr[L++] = (tmp >> 8) & 0xFF arr[L++] = tmp & 0xFF } return arr } function tripletToBase64 (num) { return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] } function encodeChunk (uint8, start, end) { var tmp var output = [] for (var i = start; i < end; i += 3) { tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) output.push(tripletToBase64(tmp)) } return output.join('') } function fromByteArray (uint8) { var tmp var len = uint8.length var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes var output = '' var parts = [] var maxChunkLength = 16383 // must be multiple of 3 // go through the array every three bytes, we'll deal with trailing stuff later for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) } // pad the end with zeros, but make sure to not forget the extra bytes if (extraBytes === 1) { tmp = uint8[len - 1] output += lookup[tmp >> 2] output += lookup[(tmp << 4) & 0x3F] output += '==' } else if (extraBytes === 2) { tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) output += lookup[tmp >> 10] output += lookup[(tmp >> 4) & 0x3F] output += lookup[(tmp << 2) & 0x3F] output += '=' } parts.push(output) return parts.join('') } },{}],40:[function(require,module,exports){ // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] // NOTE: SIGHASH byte ignored AND restricted, truncate before use var Buffer = require('safe-buffer').Buffer function check (buffer) { if (buffer.length < 8) return false if (buffer.length > 72) return false if (buffer[0] !== 0x30) return false if (buffer[1] !== buffer.length - 2) return false if (buffer[2] !== 0x02) return false var lenR = buffer[3] if (lenR === 0) return false if (5 + lenR >= buffer.length) return false if (buffer[4 + lenR] !== 0x02) return false var lenS = buffer[5 + lenR] if (lenS === 0) return false if ((6 + lenR + lenS) !== buffer.length) return false if (buffer[4] & 0x80) return false if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false if (buffer[lenR + 6] & 0x80) return false if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false return true } function decode (buffer) { if (buffer.length < 8) throw new Error('DER sequence length is too short') if (buffer.length > 72) throw new Error('DER sequence length is too long') if (buffer[0] !== 0x30) throw new Error('Expected DER sequence') if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid') if (buffer[2] !== 0x02) throw new Error('Expected DER integer') var lenR = buffer[3] if (lenR === 0) throw new Error('R length is zero') if (5 + lenR >= buffer.length) throw new Error('R length is too long') if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)') var lenS = buffer[5 + lenR] if (lenS === 0) throw new Error('S length is zero') if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid') if (buffer[4] & 0x80) throw new Error('R value is negative') if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded') if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative') if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded') // non-BIP66 - extract R, S values return { r: buffer.slice(4, 4 + lenR), s: buffer.slice(6 + lenR) } } /* * Expects r and s to be positive DER integers. * * The DER format uses the most significant bit as a sign bit (& 0x80). * If the significant bit is set AND the integer is positive, a 0x00 is prepended. * * Examples: * * 0 => 0x00 * 1 => 0x01 * -1 => 0xff * 127 => 0x7f * -127 => 0x81 * 128 => 0x0080 * -128 => 0x80 * 255 => 0x00ff * -255 => 0xff01 * 16300 => 0x3fac * -16300 => 0xc054 * 62300 => 0x00f35c * -62300 => 0xff0ca4 */ function encode (r, s) { var lenR = r.length var lenS = s.length if (lenR === 0) throw new Error('R length is zero') if (lenS === 0) throw new Error('S length is zero') if (lenR > 33) throw new Error('R length is too long') if (lenS > 33) throw new Error('S length is too long') if (r[0] & 0x80) throw new Error('R value is negative') if (s[0] & 0x80) throw new Error('S value is negative') if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded') if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded') var signature = Buffer.allocUnsafe(6 + lenR + lenS) // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S] signature[0] = 0x30 signature[1] = signature.length - 2 signature[2] = 0x02 signature[3] = r.length r.copy(signature, 4) signature[4 + lenR] = 0x02 signature[5 + lenR] = s.length s.copy(signature, 6 + lenR) return signature } module.exports = { check: check, decode: decode, encode: encode } },{"safe-buffer":311}],41:[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 function BN (number, base, endian) { if (BN.isBN(number)) { return number; } 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; } this._init(number || 0, base || 10, endian || 'be'); } } if (typeof module === 'object') { module.exports = BN; } else { exports.BN = BN; } BN.BN = BN; BN.wordSize = 26; var Buffer; try { Buffer = require('buffer').Buffer; } catch (e) { } BN.isBN = function isBN (num) { if (num instanceof BN) { return true; } return num !== null && typeof num === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); }; 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); } if (typeof number === 'object') { return this._initArray(number, base, endian); } 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.negative = 1; } this.strip(); if (endian !== 'le') return; this._initArray(this.toArray(), base, endian); }; 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); }; 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; } 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 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(); }; 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; // '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; // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb 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; }; BN.prototype._expand = function _expand (size) { while (this.length < size) { this.words[this.length++] = 0; } return this; }; // 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 ret = this.words[0]; if (this.length === 2) { ret += this.words[1] * 0x4000000; } else if (this.length === 3 && this.words[2] === 0x01) { // NOTE: at this stage it is known that the top bit is set ret += 0x10000000000000 + (this.words[1] * 0x4000000); } else if (this.length > 2) { 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 this._expand(bytesNeeded); 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; this._expand(off + 1); 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 = (mid + Math.imul(ah0, bl0)) | 0; hi = Math.imul(ah0, bh0); var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; w0 &= 0x3ffffff; /* k = 1 */ lo = Math.imul(al1, bl0); mid = Math.imul(al1, bh0); mid = (mid + Math.imul(ah1, bl0)) | 0; hi = Math.imul(ah1, bh0); lo = (lo + Math.imul(al0, bl1)) | 0; mid = (mid + Math.imul(al0, bh1)) | 0; mid = (mid + Math.imul(ah0, bl1)) | 0; hi = (hi + Math.imul(ah0, bh1)) | 0; var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; w1 &= 0x3ffffff; /* k = 2 */ lo = Math.imul(al2, bl0); mid = Math.imul(al2, bh0); mid = (mid + Math.imul(ah2, bl0)) | 0; hi = Math.imul(ah2, bh0); lo = (lo + Math.imul(al1, bl1)) | 0; mid = (mid + Math.imul(al1, bh1)) | 0; mid = (mid + Math.imul(ah1, bl1)) | 0; hi = (hi + Math.imul(ah1, bh1)) | 0; lo = (lo + Math.imul(al0, bl2)) | 0; mid = (mid + Math.imul(al0, bh2)) | 0; mid = (mid + Math.imul(ah0, bl2)) | 0; hi = (hi + Math.imul(ah0, bh2)) | 0; var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; w2 &= 0x3ffffff; /* k = 3 */ lo = Math.imul(al3, bl0); mid = Math.imul(al3, bh0); mid = (mid + Math.imul(ah3, bl0)) | 0; hi = Math.imul(ah3, bh0); lo = (lo + Math.imul(al2, bl1)) | 0; mid = (mid + Math.imul(al2, bh1)) | 0; mid = (mid + Math.imul(ah2, bl1)) | 0; hi = (hi + Math.imul(ah2, bh1)) | 0; lo = (lo + Math.imul(al1, bl2)) | 0; mid = (mid + Math.imul(al1, bh2)) | 0; mid = (mid + Math.imul(ah1, bl2)) | 0; hi = (hi + Math.imul(ah1, bh2)) | 0; lo = (lo + Math.imul(al0, bl3)) | 0; mid = (mid + Math.imul(al0, bh3)) | 0; mid = (mid + Math.imul(ah0, bl3)) | 0; hi = (hi + Math.imul(ah0, bh3)) | 0; var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; w3 &= 0x3ffffff; /* k = 4 */ lo = Math.imul(al4, bl0); mid = Math.imul(al4, bh0); mid = (mid + Math.imul(ah4, bl0)) | 0; hi = Math.imul(ah4, bh0); lo = (lo + Math.imul(al3, bl1)) | 0; mid = (mid + Math.imul(al3, bh1)) | 0; mid = (mid + Math.imul(ah3, bl1)) | 0; hi = (hi + Math.imul(ah3, bh1)) | 0; lo = (lo + Math.imul(al2, bl2)) | 0; mid = (mid + Math.imul(al2, bh2)) | 0; mid = (mid + Math.imul(ah2, bl2)) | 0; hi = (hi + Math.imul(ah2, bh2)) | 0; lo = (lo + Math.imul(al1, bl3)) | 0; mid = (mid + Math.imul(al1, bh3)) | 0; mid = (mid + Math.imul(ah1, bl3)) | 0; hi = (hi + Math.imul(ah1, bh3)) | 0; lo = (lo + Math.imul(al0, bl4)) | 0; mid = (mid + Math.imul(al0, bh4)) | 0; mid = (mid + Math.imul(ah0, bl4)) | 0; hi = (hi + Math.imul(ah0, bh4)) | 0; var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; w4 &= 0x3ffffff; /* k = 5 */ lo = Math.imul(al5, bl0); mid = Math.imul(al5, bh0); mid = (mid + Math.imul(ah5, bl0)) | 0; hi = Math.imul(ah5, bh0); lo = (lo + Math.imul(al4, bl1)) | 0; mid = (mid + Math.imul(al4, bh1)) | 0; mid = (mid + Math.imul(ah4, bl1)) | 0; hi = (hi + Math.imul(ah4, bh1)) | 0; lo = (lo + Math.imul(al3, bl2)) | 0; mid = (mid + Math.imul(al3, bh2)) | 0; mid = (mid + Math.imul(ah3, bl2)) | 0; hi = (hi + Math.imul(ah3, bh2)) | 0; lo = (lo + Math.imul(al2, bl3)) | 0; mid = (mid + Math.imul(al2, bh3)) | 0; mid = (mid + Math.imul(ah2, bl3)) | 0; hi = (hi + Math.imul(ah2, bh3)) | 0; lo = (lo + Math.imul(al1, bl4)) | 0; mid = (mid + Math.imul(al1, bh4)) | 0; mid = (mid + Math.imul(ah1, bl4)) | 0; hi = (hi + Math.imul(ah1, bh4)) | 0; lo = (lo + Math.imul(al0, bl5)) | 0; mid = (mid + Math.imul(al0, bh5)) | 0; mid = (mid + Math.imul(ah0, bl5)) | 0; hi = (hi + Math.imul(ah0, bh5)) | 0; var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; w5 &= 0x3ffffff; /* k = 6 */ lo = Math.imul(al6, bl0); mid = Math.imul(al6, bh0); mid = (mid + Math.imul(ah6, bl0)) | 0; hi = Math.imul(ah6, bh0); lo = (lo + Math.imul(al5, bl1)) | 0; mid = (mid + Math.imul(al5, bh1)) | 0; mid = (mid + Math.imul(ah5, bl1)) | 0; hi = (hi + Math.imul(ah5, bh1)) | 0; lo = (lo + Math.imul(al4, bl2)) | 0; mid = (mid + Math.imul(al4, bh2)) | 0; mid = (mid + Math.imul(ah4, bl2)) | 0; hi = (hi + Math.imul(ah4, bh2)) | 0; lo = (lo + Math.imul(al3, bl3)) | 0; mid = (mid + Math.imul(al3, bh3)) | 0; mid = (mid + Math.imul(ah3, bl3)) | 0; hi = (hi + Math.imul(ah3, bh3)) | 0; lo = (lo + Math.imul(al2, bl4)) | 0; mid = (mid + Math.imul(al2, bh4)) | 0; mid = (mid + Math.imul(ah2, bl4)) | 0; hi = (hi + Math.imul(ah2, bh4)) | 0; lo = (lo + Math.imul(al1, bl5)) | 0; mid = (mid + Math.imul(al1, bh5)) | 0; mid = (mid + Math.imul(ah1, bl5)) | 0; hi = (hi + Math.imul(ah1, bh5)) | 0; lo = (lo + Math.imul(al0, bl6)) | 0; mid = (mid + Math.imul(al0, bh6)) | 0; mid = (mid + Math.imul(ah0, bl6)) | 0; hi = (hi + Math.imul(ah0, bh6)) | 0; var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; w6 &= 0x3ffffff; /* k = 7 */ lo = Math.imul(al7, bl0); mid = Math.imul(al7, bh0); mid = (mid + Math.imul(ah7, bl0)) | 0; hi = Math.imul(ah7, bh0); lo = (lo + Math.imul(al6, bl1)) | 0; mid = (mid + Math.imul(al6, bh1)) | 0; mid = (mid + Math.imul(ah6, bl1)) | 0; hi = (hi + Math.imul(ah6, bh1)) | 0; lo = (lo + Math.imul(al5, bl2)) | 0; mid = (mid + Math.imul(al5, bh2)) | 0; mid = (mid + Math.imul(ah5, bl2)) | 0; hi = (hi + Math.imul(ah5, bh2)) | 0; lo = (lo + Math.imul(al4, bl3)) | 0; mid = (mid + Math.imul(al4, bh3)) | 0; mid = (mid + Math.imul(ah4, bl3)) | 0; hi = (hi + Math.imul(ah4, bh3)) | 0; lo = (lo + Math.imul(al3, bl4)) | 0; mid = (mid + Math.imul(al3, bh4)) | 0; mid = (mid + Math.imul(ah3, bl4)) | 0; hi = (hi + Math.imul(ah3, bh4)) | 0; lo = (lo + Math.imul(al2, bl5)) | 0; mid = (mid + Math.imul(al2, bh5)) | 0; mid = (mid + Math.imul(ah2, bl5)) | 0; hi = (hi + Math.imul(ah2, bh5)) | 0; lo = (lo + Math.imul(al1, bl6)) | 0; mid = (mid + Math.imul(al1, bh6)) | 0; mid = (mid + Math.imul(ah1, bl6)) | 0; hi = (hi + Math.imul(ah1, bh6)) | 0; lo = (lo + Math.imul(al0, bl7)) | 0; mid = (mid + Math.imul(al0, bh7)) | 0; mid = (mid + Math.imul(ah0, bl7)) | 0; hi = (hi + Math.imul(ah0, bh7)) | 0; var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; w7 &= 0x3ffffff; /* k = 8 */ lo = Math.imul(al8, bl0); mid = Math.imul(al8, bh0); mid = (mid + Math.imul(ah8, bl0)) | 0; hi = Math.imul(ah8, bh0); lo = (lo + Math.imul(al7, bl1)) | 0; mid = (mid + Math.imul(al7, bh1)) | 0; mid = (mid + Math.imul(ah7, bl1)) | 0; hi = (hi + Math.imul(ah7, bh1)) | 0; lo = (lo + Math.imul(al6, bl2)) | 0; mid = (mid + Math.imul(al6, bh2)) | 0; mid = (mid + Math.imul(ah6, bl2)) | 0; hi = (hi + Math.imul(ah6, bh2)) | 0; lo = (lo + Math.imul(al5, bl3)) | 0; mid = (mid + Math.imul(al5, bh3)) | 0; mid = (mid + Math.imul(ah5, bl3)) | 0; hi = (hi + Math.imul(ah5, bh3)) | 0; lo = (lo + Math.imul(al4, bl4)) | 0; mid = (mid + Math.imul(al4, bh4)) | 0; mid = (mid + Math.imul(ah4, bl4)) | 0; hi = (hi + Math.imul(ah4, bh4)) | 0; lo = (lo + Math.imul(al3, bl5)) | 0; mid = (mid + Math.imul(al3, bh5)) | 0; mid = (mid + Math.imul(ah3, bl5)) | 0; hi = (hi + Math.imul(ah3, bh5)) | 0; lo = (lo + Math.imul(al2, bl6)) | 0; mid = (mid + Math.imul(al2, bh6)) | 0; mid = (mid + Math.imul(ah2, bl6)) | 0; hi = (hi + Math.imul(ah2, bh6)) | 0; lo = (lo + Math.imul(al1, bl7)) | 0; mid = (mid + Math.imul(al1, bh7)) | 0; mid = (mid + Math.imul(ah1, bl7)) | 0; hi = (hi + Math.imul(ah1, bh7)) | 0; lo = (lo + Math.imul(al0, bl8)) | 0; mid = (mid + Math.imul(al0, bh8)) | 0; mid = (mid + Math.imul(ah0, bl8)) | 0; hi = (hi + Math.imul(ah0, bh8)) | 0; var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; w8 &= 0x3ffffff; /* k = 9 */ lo = Math.imul(al9, bl0); mid = Math.imul(al9, bh0); mid = (mid + Math.imul(ah9, bl0)) | 0; hi = Math.imul(ah9, bh0); lo = (lo + Math.imul(al8, bl1)) | 0; mid = (mid + Math.imul(al8, bh1)) | 0; mid = (mid + Math.imul(ah8, bl1)) | 0; hi = (hi + Math.imul(ah8, bh1)) | 0; lo = (lo + Math.imul(al7, bl2)) | 0; mid = (mid + Math.imul(al7, bh2)) | 0; mid = (mid + Math.imul(ah7, bl2)) | 0; hi = (hi + Math.imul(ah7, bh2)) | 0; lo = (lo + Math.imul(al6, bl3)) | 0; mid = (mid + Math.imul(al6, bh3)) | 0; mid = (mid + Math.imul(ah6, bl3)) | 0; hi = (hi + Math.imul(ah6, bh3)) | 0; lo = (lo + Math.imul(al5, bl4)) | 0; mid = (mid + Math.imul(al5, bh4)) | 0; mid = (mid + Math.imul(ah5, bl4)) | 0; hi = (hi + Math.imul(ah5, bh4)) | 0; lo = (lo + Math.imul(al4, bl5)) | 0; mid = (mid + Math.imul(al4, bh5)) | 0; mid = (mid + Math.imul(ah4, bl5)) | 0; hi = (hi + Math.imul(ah4, bh5)) | 0; lo = (lo + Math.imul(al3, bl6)) | 0; mid = (mid + Math.imul(al3, bh6)) | 0; mid = (mid + Math.imul(ah3, bl6)) | 0; hi = (hi + Math.imul(ah3, bh6)) | 0; lo = (lo + Math.imul(al2, bl7)) | 0; mid = (mid + Math.imul(al2, bh7)) | 0; mid = (mid + Math.imul(ah2, bl7)) | 0; hi = (hi + Math.imul(ah2, bh7)) | 0; lo = (lo + Math.imul(al1, bl8)) | 0; mid = (mid + Math.imul(al1, bh8)) | 0; mid = (mid + Math.imul(ah1, bl8)) | 0; hi = (hi + Math.imul(ah1, bh8)) | 0; lo = (lo + Math.imul(al0, bl9)) | 0; mid = (mid + Math.imul(al0, bh9)) | 0; mid = (mid + Math.imul(ah0, bl9)) | 0; hi = (hi + Math.imul(ah0, bh9)) | 0; var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; w9 &= 0x3ffffff; /* k = 10 */ lo = Math.imul(al9, bl1); mid = Math.imul(al9, bh1); mid = (mid + Math.imul(ah9, bl1)) | 0; hi = Math.imul(ah9, bh1); lo = (lo + Math.imul(al8, bl2)) | 0; mid = (mid + Math.imul(al8, bh2)) | 0; mid = (mid + Math.imul(ah8, bl2)) | 0; hi = (hi + Math.imul(ah8, bh2)) | 0; lo = (lo + Math.imul(al7, bl3)) | 0; mid = (mid + Math.imul(al7, bh3)) | 0; mid = (mid + Math.imul(ah7, bl3)) | 0; hi = (hi + Math.imul(ah7, bh3)) | 0; lo = (lo + Math.imul(al6, bl4)) | 0; mid = (mid + Math.imul(al6, bh4)) | 0; mid = (mid + Math.imul(ah6, bl4)) | 0; hi = (hi + Math.imul(ah6, bh4)) | 0; lo = (lo + Math.imul(al5, bl5)) | 0; mid = (mid + Math.imul(al5, bh5)) | 0; mid = (mid + Math.imul(ah5, bl5)) | 0; hi = (hi + Math.imul(ah5, bh5)) | 0; lo = (lo + Math.imul(al4, bl6)) | 0; mid = (mid + Math.imul(al4, bh6)) | 0; mid = (mid + Math.imul(ah4, bl6)) | 0; hi = (hi + Math.imul(ah4, bh6)) | 0; lo = (lo + Math.imul(al3, bl7)) | 0; mid = (mid + Math.imul(al3, bh7)) | 0; mid = (mid + Math.imul(ah3, bl7)) | 0; hi = (hi + Math.imul(ah3, bh7)) | 0; lo = (lo + Math.imul(al2, bl8)) | 0; mid = (mid + Math.imul(al2, bh8)) | 0; mid = (mid + Math.imul(ah2, bl8)) | 0; hi = (hi + Math.imul(ah2, bh8)) | 0; lo = (lo + Math.imul(al1, bl9)) | 0; mid = (mid + Math.imul(al1, bh9)) | 0; mid = (mid + Math.imul(ah1, bl9)) | 0; hi = (hi + Math.imul(ah1, bh9)) | 0; var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; w10 &= 0x3ffffff; /* k = 11 */ lo = Math.imul(al9, bl2); mid = Math.imul(al9, bh2); mid = (mid + Math.imul(ah9, bl2)) | 0; hi = Math.imul(ah9, bh2); lo = (lo + Math.imul(al8, bl3)) | 0; mid = (mid + Math.imul(al8, bh3)) | 0; mid = (mid + Math.imul(ah8, bl3)) | 0; hi = (hi + Math.imul(ah8, bh3)) | 0; lo = (lo + Math.imul(al7, bl4)) | 0; mid = (mid + Math.imul(al7, bh4)) | 0; mid = (mid + Math.imul(ah7, bl4)) | 0; hi = (hi + Math.imul(ah7, bh4)) | 0; lo = (lo + Math.imul(al6, bl5)) | 0; mid = (mid + Math.imul(al6, bh5)) | 0; mid = (mid + Math.imul(ah6, bl5)) | 0; hi = (hi + Math.imul(ah6, bh5)) | 0; lo = (lo + Math.imul(al5, bl6)) | 0; mid = (mid + Math.imul(al5, bh6)) | 0; mid = (mid + Math.imul(ah5, bl6)) | 0; hi = (hi + Math.imul(ah5, bh6)) | 0; lo = (lo + Math.imul(al4, bl7)) | 0; mid = (mid + Math.imul(al4, bh7)) | 0; mid = (mid + Math.imul(ah4, bl7)) | 0; hi = (hi + Math.imul(ah4, bh7)) | 0; lo = (lo + Math.imul(al3, bl8)) | 0; mid = (mid + Math.imul(al3, bh8)) | 0; mid = (mid + Math.imul(ah3, bl8)) | 0; hi = (hi + Math.imul(ah3, bh8)) | 0; lo = (lo + Math.imul(al2, bl9)) | 0; mid = (mid + Math.imul(al2, bh9)) | 0; mid = (mid + Math.imul(ah2, bl9)) | 0; hi = (hi + Math.imul(ah2, bh9)) | 0; var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; w11 &= 0x3ffffff; /* k = 12 */ lo = Math.imul(al9, bl3); mid = Math.imul(al9, bh3); mid = (mid + Math.imul(ah9, bl3)) | 0; hi = Math.imul(ah9, bh3); lo = (lo + Math.imul(al8, bl4)) | 0; mid = (mid + Math.imul(al8, bh4)) | 0; mid = (mid + Math.imul(ah8, bl4)) | 0; hi = (hi + Math.imul(ah8, bh4)) | 0; lo = (lo + Math.imul(al7, bl5)) | 0; mid = (mid + Math.imul(al7, bh5)) | 0; mid = (mid + Math.imul(ah7, bl5)) | 0; hi = (hi + Math.imul(ah7, bh5)) | 0; lo = (lo + Math.imul(al6, bl6)) | 0; mid = (mid + Math.imul(al6, bh6)) | 0; mid = (mid + Math.imul(ah6, bl6)) | 0; hi = (hi + Math.imul(ah6, bh6)) | 0; lo = (lo + Math.imul(al5, bl7)) | 0; mid = (mid + Math.imul(al5, bh7)) | 0; mid = (mid + Math.imul(ah5, bl7)) | 0; hi = (hi + Math.imul(ah5, bh7)) | 0; lo = (lo + Math.imul(al4, bl8)) | 0; mid = (mid + Math.imul(al4, bh8)) | 0; mid = (mid + Math.imul(ah4, bl8)) | 0; hi = (hi + Math.imul(ah4, bh8)) | 0; lo = (lo + Math.imul(al3, bl9)) | 0; mid = (mid + Math.imul(al3, bh9)) | 0; mid = (mid + Math.imul(ah3, bl9)) | 0; hi = (hi + Math.imul(ah3, bh9)) | 0; var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; w12 &= 0x3ffffff; /* k = 13 */ lo = Math.imul(al9, bl4); mid = Math.imul(al9, bh4); mid = (mid + Math.imul(ah9, bl4)) | 0; hi = Math.imul(ah9, bh4); lo = (lo + Math.imul(al8, bl5)) | 0; mid = (mid + Math.imul(al8, bh5)) | 0; mid = (mid + Math.imul(ah8, bl5)) | 0; hi = (hi + Math.imul(ah8, bh5)) | 0; lo = (lo + Math.imul(al7, bl6)) | 0; mid = (mid + Math.imul(al7, bh6)) | 0; mid = (mid + Math.imul(ah7, bl6)) | 0; hi = (hi + Math.imul(ah7, bh6)) | 0; lo = (lo + Math.imul(al6, bl7)) | 0; mid = (mid + Math.imul(al6, bh7)) | 0; mid = (mid + Math.imul(ah6, bl7)) | 0; hi = (hi + Math.imul(ah6, bh7)) | 0; lo = (lo + Math.imul(al5, bl8)) | 0; mid = (mid + Math.imul(al5, bh8)) | 0; mid = (mid + Math.imul(ah5, bl8)) | 0; hi = (hi + Math.imul(ah5, bh8)) | 0; lo = (lo + Math.imul(al4, bl9)) | 0; mid = (mid + Math.imul(al4, bh9)) | 0; mid = (mid + Math.imul(ah4, bl9)) | 0; hi = (hi + Math.imul(ah4, bh9)) | 0; var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; w13 &= 0x3ffffff; /* k = 14 */ lo = Math.imul(al9, bl5); mid = Math.imul(al9, bh5); mid = (mid + Math.imul(ah9, bl5)) | 0; hi = Math.imul(ah9, bh5); lo = (lo + Math.imul(al8, bl6)) | 0; mid = (mid + Math.imul(al8, bh6)) | 0; mid = (mid + Math.imul(ah8, bl6)) | 0; hi = (hi + Math.imul(ah8, bh6)) | 0; lo = (lo + Math.imul(al7, bl7)) | 0; mid = (mid + Math.imul(al7, bh7)) | 0; mid = (mid + Math.imul(ah7, bl7)) | 0; hi = (hi + Math.imul(ah7, bh7)) | 0; lo = (lo + Math.imul(al6, bl8)) | 0; mid = (mid + Math.imul(al6, bh8)) | 0; mid = (mid + Math.imul(ah6, bl8)) | 0; hi = (hi + Math.imul(ah6, bh8)) | 0; lo = (lo + Math.imul(al5, bl9)) | 0; mid = (mid + Math.imul(al5, bh9)) | 0; mid = (mid + Math.imul(ah5, bl9)) | 0; hi = (hi + Math.imul(ah5, bh9)) | 0; var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; w14 &= 0x3ffffff; /* k = 15 */ lo = Math.imul(al9, bl6); mid = Math.imul(al9, bh6); mid = (mid + Math.imul(ah9, bl6)) | 0; hi = Math.imul(ah9, bh6); lo = (lo + Math.imul(al8, bl7)) | 0; mid = (mid + Math.imul(al8, bh7)) | 0; mid = (mid + Math.imul(ah8, bl7)) | 0; hi = (hi + Math.imul(ah8, bh7)) | 0; lo = (lo + Math.imul(al7, bl8)) | 0; mid = (mid + Math.imul(al7, bh8)) | 0; mid = (mid + Math.imul(ah7, bl8)) | 0; hi = (hi + Math.imul(ah7, bh8)) | 0; lo = (lo + Math.imul(al6, bl9)) | 0; mid = (mid + Math.imul(al6, bh9)) | 0; mid = (mid + Math.imul(ah6, bl9)) | 0; hi = (hi + Math.imul(ah6, bh9)) | 0; var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; w15 &= 0x3ffffff; /* k = 16 */ lo = Math.imul(al9, bl7); mid = Math.imul(al9, bh7); mid = (mid + Math.imul(ah9, bl7)) | 0; hi = Math.imul(ah9, bh7); lo = (lo + Math.imul(al8, bl8)) | 0; mid = (mid + Math.imul(al8, bh8)) | 0; mid = (mid + Math.imul(ah8, bl8)) | 0; hi = (hi + Math.imul(ah8, bh8)) | 0; lo = (lo + Math.imul(al7, bl9)) | 0; mid = (mid + Math.imul(al7, bh9)) | 0; mid = (mid + Math.imul(ah7, bl9)) | 0; hi = (hi + Math.imul(ah7, bh9)) | 0; var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; w16 &= 0x3ffffff; /* k = 17 */ lo = Math.imul(al9, bl8); mid = Math.imul(al9, bh8); mid = (mid + Math.imul(ah9, bl8)) | 0; hi = Math.imul(ah9, bh8); lo = (lo + Math.imul(al8, bl9)) | 0; mid = (mid + Math.imul(al8, bh9)) | 0; mid = (mid + Math.imul(ah8, bl9)) | 0; hi = (hi + Math.imul(ah8, bh9)) | 0; var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; w17 &= 0x3ffffff; /* k = 18 */ lo = Math.imul(al9, bl9); mid = Math.imul(al9, bh9); mid = (mid + Math.imul(ah9, bl9)) | 0; hi = Math.imul(ah9, bh9); var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; 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 (this.length <= s) { return this; } 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) { var len = num.length + shift; var i; this._expand(len); 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); 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(); }; BN.prototype.divn = function divn (num) { return this.clone().idivn(num); }; 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); } A.iushrn(1); B.iushrn(1); } } 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); } C.iushrn(1); D.iushrn(1); } } 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 { 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); } else { a = a.clone(); } 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); } } if (a.cmp(b) >= 0) { a.isub(b); x1.isub(x2); } else { b.isub(a); x2.isub(x1); } } var res; if (a.cmpn(1) === 0) { res = x1; } else { res = x2; } if (res.cmpn(0) < 0) { res.iadd(p); } 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; // Fast case: bit is much higher than all existing words if (this.length <= s) { this._expand(s + 1); this.words[s] |= q; return this; } // 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; }; BN.prototype.isZero = function isZero () { return this.length === 1 && this.words[0] === 0; }; 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'); var w = this.words[0] | 0; res = w === num ? 0 : w < num ? -1 : 1; } if (this.negative !== 0) return -res | 0; 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 | 0; return res; }; // 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; } 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; }; // // A reduce context, could be using montgomery or something better, depending // on the `m` itself. // BN.red = function red (num) { return new Red(num); }; 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); }; BN.prototype.fromRed = function fromRed () { assert(this.red, 'fromRed works only with numbers in reduction context'); return this.red.convertFrom(this); }; BN.prototype._forceRed = function _forceRed (ctx) { this.red = ctx; return this; }; BN.prototype.forceRed = function forceRed (ctx) { assert(!this.red, 'Already a number in reduction context'); return this._forceRed(ctx); }; BN.prototype.redAdd = function redAdd (num) { assert(this.red, 'redAdd works only with red numbers'); return this.red.add(this, num); }; BN.prototype.redIAdd = function redIAdd (num) { assert(this.red, 'redIAdd works only with red numbers'); return this.red.iadd(this, num); }; BN.prototype.redSub = function redSub (num) { assert(this.red, 'redSub works only with red numbers'); return this.red.sub(this, num); }; BN.prototype.redISub = function redISub (num) { assert(this.red, 'redISub works only with red numbers'); return this.red.isub(this, num); }; BN.prototype.redShl = function redShl (num) { assert(this.red, 'redShl works only with red numbers'); return this.red.shl(this, num); }; 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); }; 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); }; BN.prototype.redSqr = function redSqr () { assert(this.red, 'redSqr works only with red numbers'); this.red._verify1(this); return this.red.sqr(this); }; BN.prototype.redISqr = function redISqr () { assert(this.red, 'redISqr works only with red numbers'); this.red._verify1(this); return this.red.isqr(this); }; // 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); }; BN.prototype.redInvm = function redInvm () { assert(this.red, 'redInvm works only with red numbers'); this.red._verify1(this); return this.red.invm(this); }; // 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); }; BN.prototype.redPow = function redPow (num) { assert(this.red && !num.red, 'redPow(normalNum)'); this.red._verify1(this); return this.red.pow(this, num); }; // Prime numbers with efficient reduction var primes = { k256: null, p224: null, p192: null, p25519: null }; // 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); this.tmp = this._tmp(); } MPrime.prototype._tmp = function _tmp () { var tmp = new BN(null); tmp.words = new Array(Math.ceil(this.n / 13)); return tmp; }; 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); 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(); } return r; }; MPrime.prototype.split = function split (input, out) { input.iushrn(this.n, 0, out); }; MPrime.prototype.imulK = function imulK (num) { return num.imul(this.k); }; function K256 () { MPrime.call( this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); } inherits(K256, MPrime); K256.prototype.split = function split (input, output) { // 256 = 9 * 26 + 22 var mask = 0x3fffff; var outLen = Math.min(input.length, 9); for (var i = 0; i < outLen; i++) { output.words[i] = input.words[i]; } output.length = outLen; if (input.length <= 9) { input.words[0] = 0; input.length = 1; return; } // Shift by 9 limbs var prev = input.words[9]; output.words[output.length++] = prev & mask; 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; } }; K256.prototype.imulK = function imulK (num) { // K = 0x1000003d1 = [ 0x40, 0x3d1 ] num.words[num.length] = 0; num.words[num.length + 1] = 0; num.length += 2; // 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); } // Fast length reduction if (num.words[num.length - 1] === 0) { num.length--; if (num.words[num.length - 1] === 0) { num.length--; } } return num; }; function P224 () { MPrime.call( this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); } inherits(P224, MPrime); function P192 () { MPrime.call( this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); } inherits(P192, MPrime); function P25519 () { // 2 ^ 255 - 19 MPrime.call( this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); } 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] | 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; }; // 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 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 prime; }; // // Base reduction engine // function Red (m) { if (typeof m === 'string') { var prime = BN._prime(m); this.m = prime.p; this.prime = prime; } else { assert(m.gtn(1), 'modulus must be greater than 1'); this.m = m; this.prime = null; } } 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'); }; 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(); } return this.m.sub(a)._forceRed(this); }; Red.prototype.add = function add (a, b) { this._verify2(a, b); var res = a.add(b); if (res.cmp(this.m) >= 0) { res.isub(this.m); } return res._forceRed(this); }; 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; }; 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); }; Red.prototype.isub = function isub (a, b) { this._verify2(a, b); 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)); }; Red.prototype.imul = function imul (a, b) { this._verify2(a, b); return this.imod(a.imul(b)); }; Red.prototype.mul = function mul (a, b) { this._verify2(a, b); return this.imod(a.mul(b)); }; Red.prototype.isqr = function isqr (a) { return this.imul(a, a.clone()); }; Red.prototype.sqr = function sqr (a) { return this.mul(a, a); }; 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); } 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); 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).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)); r = r.redMul(b); c = b.redSqr(); t = t.redMul(c); m = i; } 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(); } else { return this.imod(inv); } }; Red.prototype.pow = function pow (a, num) { if (num.isZero()) return new BN(1).toRed(this); 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 res = wnd[0]; var current = 0; var currentLen = 0; var start = num.bitLength() % 26; if (start === 0) { start = 26; } 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; } 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; }; Red.prototype.convertTo = function convertTo (num) { var r = num.umod(this.m); return r === num ? r.clone() : 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).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); } inherits(Mont, Red); Mont.prototype.convertTo = function convertTo (num) { return this.imod(num.ushln(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.isZero() || b.isZero()) { 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).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); } return res._forceRed(this); }; Mont.prototype.mul = function mul (a, b) { if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); 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); } 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); },{"buffer":43}],42:[function(require,module,exports){ var r; module.exports = function rand(len) { if (!r) r = new Rand(null); return r.generate(len); }; function Rand(rand) { this.rand = rand; } module.exports.Rand = Rand; Rand.prototype.generate = function generate(len) { return this._rand(len); }; // Emulate crypto API using randy Rand.prototype._rand = function _rand(n) { if (this.rand.getBytes) return this.rand.getBytes(n); var res = new Uint8Array(n); for (var i = 0; i < res.length; i++) res[i] = this.rand.getByte(); return res; }; if (typeof self === 'object') { if (self.crypto && self.crypto.getRandomValues) { // Modern browsers Rand.prototype._rand = function _rand(n) { var arr = new Uint8Array(n); self.crypto.getRandomValues(arr); return arr; }; } else if (self.msCrypto && self.msCrypto.getRandomValues) { // IE Rand.prototype._rand = function _rand(n) { var arr = new Uint8Array(n); self.msCrypto.getRandomValues(arr); return arr; }; // Safari's WebWorkers do not have `crypto` } else if (typeof window === 'object') { // Old junk Rand.prototype._rand = function() { throw new Error('Not implemented yet'); }; } } else { // Node.js or Web worker with no crypto support try { var crypto = require('crypto'); if (typeof crypto.randomBytes !== 'function') throw new Error('Not supported'); Rand.prototype._rand = function _rand(n) { return crypto.randomBytes(n); }; } catch (e) { } } },{"crypto":43}],43:[function(require,module,exports){ },{}],44:[function(require,module,exports){ // based on the aes implimentation in triple sec // https://github.com/keybase/triplesec // which is in turn based on the one from crypto-js // https://code.google.com/p/crypto-js/ var Buffer = require('safe-buffer').Buffer function asUInt32Array (buf) { if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) var len = (buf.length / 4) | 0 var out = new Array(len) for (var i = 0; i < len; i++) { out[i] = buf.readUInt32BE(i * 4) } return out } function scrubVec (v) { for (var i = 0; i < v.length; v++) { v[i] = 0 } } function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) { var SUB_MIX0 = SUB_MIX[0] var SUB_MIX1 = SUB_MIX[1] var SUB_MIX2 = SUB_MIX[2] var SUB_MIX3 = SUB_MIX[3] var s0 = M[0] ^ keySchedule[0] var s1 = M[1] ^ keySchedule[1] var s2 = M[2] ^ keySchedule[2] var s3 = M[3] ^ keySchedule[3] var t0, t1, t2, t3 var ksRow = 4 for (var round = 1; round < nRounds; round++) { t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++] t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++] t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++] t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++] s0 = t0 s1 = t1 s2 = t2 s3 = t3 } t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] t0 = t0 >>> 0 t1 = t1 >>> 0 t2 = t2 >>> 0 t3 = t3 >>> 0 return [t0, t1, t2, t3] } // AES constants var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] var G = (function () { // Compute double table var d = new Array(256) for (var j = 0; j < 256; j++) { if (j < 128) { d[j] = j << 1 } else { d[j] = (j << 1) ^ 0x11b } } var SBOX = [] var INV_SBOX = [] var SUB_MIX = [[], [], [], []] var INV_SUB_MIX = [[], [], [], []] // 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 // Compute multiplication var x2 = d[x] var x4 = d[x2] var x8 = d[x4] // 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 // Compute inv sub bytes, inv mix columns tables 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 (x === 0) { x = xi = 1 } else { x = x2 ^ d[d[d[x8 ^ x2]]] xi ^= d[d[xi]] } } return { SBOX: SBOX, INV_SBOX: INV_SBOX, SUB_MIX: SUB_MIX, INV_SUB_MIX: INV_SUB_MIX } })() function AES (key) { this._key = asUInt32Array(key) this._reset() } AES.blockSize = 4 * 4 AES.keySize = 256 / 8 AES.prototype.blockSize = AES.blockSize AES.prototype.keySize = AES.keySize AES.prototype._reset = function () { var keyWords = this._key var keySize = keyWords.length var nRounds = keySize + 6 var ksRows = (nRounds + 1) * 4 var keySchedule = [] for (var k = 0; k < keySize; k++) { keySchedule[k] = keyWords[k] } for (k = keySize; k < ksRows; k++) { var t = keySchedule[k - 1] if (k % keySize === 0) { t = (t << 8) | (t >>> 24) t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | (G.SBOX[t & 0xff]) t ^= RCON[(k / keySize) | 0] << 24 } else if (keySize > 6 && k % keySize === 4) { t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | (G.SBOX[t & 0xff]) } keySchedule[k] = keySchedule[k - keySize] ^ t } var invKeySchedule = [] for (var ik = 0; ik < ksRows; ik++) { var ksR = ksRows - ik var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)] if (ik < 4 || ksR <= 4) { invKeySchedule[ik] = tt } else { invKeySchedule[ik] = G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]] } } this._nRounds = nRounds this._keySchedule = keySchedule this._invKeySchedule = invKeySchedule } AES.prototype.encryptBlockRaw = function (M) { M = asUInt32Array(M) return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds) } AES.prototype.encryptBlock = function (M) { var out = this.encryptBlockRaw(M) var buf = Buffer.allocUnsafe(16) buf.writeUInt32BE(out[0], 0) buf.writeUInt32BE(out[1], 4) buf.writeUInt32BE(out[2], 8) buf.writeUInt32BE(out[3], 12) return buf } AES.prototype.decryptBlock = function (M) { M = asUInt32Array(M) // swap var m1 = M[1] M[1] = M[3] M[3] = m1 var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds) var buf = Buffer.allocUnsafe(16) buf.writeUInt32BE(out[0], 0) buf.writeUInt32BE(out[3], 4) buf.writeUInt32BE(out[2], 8) buf.writeUInt32BE(out[1], 12) return buf } AES.prototype.scrub = function () { scrubVec(this._keySchedule) scrubVec(this._invKeySchedule) scrubVec(this._key) } module.exports.AES = AES },{"safe-buffer":311}],45:[function(require,module,exports){ var aes = require('./aes') var Buffer = require('safe-buffer').Buffer var Transform = require('cipher-base') var inherits = require('inherits') var GHASH = require('./ghash') var xor = require('buffer-xor') var incr32 = require('./incr32') function xorTest (a, b) { var out = 0 if (a.length !== b.length) out++ var len = Math.min(a.length, b.length) for (var i = 0; i < len; ++i) { out += (a[i] ^ b[i]) } return out } function calcIv (self, iv, ck) { if (iv.length === 12) { self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]) return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]) } var ghash = new GHASH(ck) var len = iv.length var toPad = len % 16 ghash.update(iv) if (toPad) { toPad = 16 - toPad ghash.update(Buffer.alloc(toPad, 0)) } ghash.update(Buffer.alloc(8, 0)) var ivBits = len * 8 var tail = Buffer.alloc(8) tail.writeUIntBE(ivBits, 0, 8) ghash.update(tail) self._finID = ghash.state var out = Buffer.from(self._finID) incr32(out) return out } function StreamCipher (mode, key, iv, decrypt) { Transform.call(this) var h = Buffer.alloc(4, 0) this._cipher = new aes.AES(key) var ck = this._cipher.encryptBlock(h) this._ghash = new GHASH(ck) iv = calcIv(this, iv, ck) this._prev = Buffer.from(iv) this._cache = Buffer.allocUnsafe(0) this._secCache = Buffer.allocUnsafe(0) this._decrypt = decrypt this._alen = 0 this._len = 0 this._mode = mode this._authTag = null this._called = false } inherits(StreamCipher, Transform) StreamCipher.prototype._update = function (chunk) { if (!this._called && this._alen) { var rump = 16 - (this._alen % 16) if (rump < 16) { rump = Buffer.alloc(rump, 0) this._ghash.update(rump) } } this._called = true var out = this._mode.encrypt(this, chunk) if (this._decrypt) { this._ghash.update(chunk) } else { this._ghash.update(out) } this._len += chunk.length return out } StreamCipher.prototype._final = function () { if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data') var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data') this._authTag = tag this._cipher.scrub() } StreamCipher.prototype.getAuthTag = function getAuthTag () { if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state') return this._authTag } StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state') this._authTag = tag } StreamCipher.prototype.setAAD = function setAAD (buf) { if (this._called) throw new Error('Attempting to set AAD in unsupported state') this._ghash.update(buf) this._alen += buf.length } module.exports = StreamCipher },{"./aes":44,"./ghash":49,"./incr32":50,"buffer-xor":73,"cipher-base":75,"inherits":180,"safe-buffer":311}],46:[function(require,module,exports){ var ciphers = require('./encrypter') var deciphers = require('./decrypter') var modes = require('./modes/list.json') function getCiphers () { return Object.keys(modes) } exports.createCipher = exports.Cipher = ciphers.createCipher exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv exports.createDecipher = exports.Decipher = deciphers.createDecipher exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv exports.listCiphers = exports.getCiphers = getCiphers },{"./decrypter":47,"./encrypter":48,"./modes/list.json":58}],47:[function(require,module,exports){ var AuthCipher = require('./authCipher') var Buffer = require('safe-buffer').Buffer var MODES = require('./modes') var StreamCipher = require('./streamCipher') var Transform = require('cipher-base') var aes = require('./aes') var ebtk = require('evp_bytestokey') var inherits = require('inherits') function Decipher (mode, key, iv) { Transform.call(this) this._cache = new Splitter() this._last = void 0 this._cipher = new aes.AES(key) this._prev = Buffer.from(iv) this._mode = mode this._autopadding = true } inherits(Decipher, Transform) Decipher.prototype._update = function (data) { this._cache.add(data) var chunk var thing var out = [] while ((chunk = this._cache.get(this._autopadding))) { thing = this._mode.decrypt(this, chunk) out.push(thing) } return Buffer.concat(out) } Decipher.prototype._final = function () { var chunk = this._cache.flush() if (this._autopadding) { return unpad(this._mode.decrypt(this, chunk)) } else if (chunk) { throw new Error('data not multiple of block length') } } Decipher.prototype.setAutoPadding = function (setTo) { this._autopadding = !!setTo return this } function Splitter () { this.cache = Buffer.allocUnsafe(0) } Splitter.prototype.add = function (data) { this.cache = Buffer.concat([this.cache, data]) } Splitter.prototype.get = function (autoPadding) { var out if (autoPadding) { if (this.cache.length > 16) { out = this.cache.slice(0, 16) this.cache = this.cache.slice(16) return out } } else { if (this.cache.length >= 16) { out = this.cache.slice(0, 16) this.cache = this.cache.slice(16) return out } } return null } Splitter.prototype.flush = function () { if (this.cache.length) return this.cache } function unpad (last) { var padded = last[15] var i = -1 while (++i < padded) { if (last[(i + (16 - padded))] !== padded) { throw new Error('unable to decrypt data') } } if (padded === 16) return return last.slice(0, 16 - padded) } function createDecipheriv (suite, password, iv) { var config = MODES[suite.toLowerCase()] if (!config) throw new TypeError('invalid suite type') if (typeof iv === 'string') iv = Buffer.from(iv) if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) if (typeof password === 'string') password = Buffer.from(password) if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) if (config.type === 'stream') { return new StreamCipher(config.module, password, iv, true) } else if (config.type === 'auth') { return new AuthCipher(config.module, password, iv, true) } return new Decipher(config.module, password, iv) } function createDecipher (suite, password) { var config = MODES[suite.toLowerCase()] if (!config) throw new TypeError('invalid suite type') var keys = ebtk(password, false, config.key, config.iv) return createDecipheriv(suite, keys.key, keys.iv) } exports.createDecipher = createDecipher exports.createDecipheriv = createDecipheriv },{"./aes":44,"./authCipher":45,"./modes":57,"./streamCipher":60,"cipher-base":75,"evp_bytestokey":156,"inherits":180,"safe-buffer":311}],48:[function(require,module,exports){ var MODES = require('./modes') var AuthCipher = require('./authCipher') var Buffer = require('safe-buffer').Buffer var StreamCipher = require('./streamCipher') var Transform = require('cipher-base') var aes = require('./aes') var ebtk = require('evp_bytestokey') var inherits = require('inherits') function Cipher (mode, key, iv) { Transform.call(this) this._cache = new Splitter() this._cipher = new aes.AES(key) this._prev = Buffer.from(iv) this._mode = mode this._autopadding = true } inherits(Cipher, Transform) Cipher.prototype._update = function (data) { this._cache.add(data) var chunk var thing var out = [] while ((chunk = this._cache.get())) { thing = this._mode.encrypt(this, chunk) out.push(thing) } return Buffer.concat(out) } var PADDING = Buffer.alloc(16, 0x10) Cipher.prototype._final = function () { var chunk = this._cache.flush() if (this._autopadding) { chunk = this._mode.encrypt(this, chunk) this._cipher.scrub() return chunk } if (!chunk.equals(PADDING)) { this._cipher.scrub() throw new Error('data not multiple of block length') } } Cipher.prototype.setAutoPadding = function (setTo) { this._autopadding = !!setTo return this } function Splitter () { this.cache = Buffer.allocUnsafe(0) } Splitter.prototype.add = function (data) { this.cache = Buffer.concat([this.cache, data]) } Splitter.prototype.get = function () { if (this.cache.length > 15) { var out = this.cache.slice(0, 16) this.cache = this.cache.slice(16) return out } return null } Splitter.prototype.flush = function () { var len = 16 - this.cache.length var padBuff = Buffer.allocUnsafe(len) var i = -1 while (++i < len) { padBuff.writeUInt8(len, i) } return Buffer.concat([this.cache, padBuff]) } function createCipheriv (suite, password, iv) { var config = MODES[suite.toLowerCase()] if (!config) throw new TypeError('invalid suite type') if (typeof password === 'string') password = Buffer.from(password) if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) if (typeof iv === 'string') iv = Buffer.from(iv) if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) if (config.type === 'stream') { return new StreamCipher(config.module, password, iv) } else if (config.type === 'auth') { return new AuthCipher(config.module, password, iv) } return new Cipher(config.module, password, iv) } function createCipher (suite, password) { var config = MODES[suite.toLowerCase()] if (!config) throw new TypeError('invalid suite type') var keys = ebtk(password, false, config.key, config.iv) return createCipheriv(suite, keys.key, keys.iv) } exports.createCipheriv = createCipheriv exports.createCipher = createCipher },{"./aes":44,"./authCipher":45,"./modes":57,"./streamCipher":60,"cipher-base":75,"evp_bytestokey":156,"inherits":180,"safe-buffer":311}],49:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer var ZEROES = Buffer.alloc(16, 0) function toArray (buf) { return [ buf.readUInt32BE(0), buf.readUInt32BE(4), buf.readUInt32BE(8), buf.readUInt32BE(12) ] } function fromArray (out) { var buf = Buffer.allocUnsafe(16) buf.writeUInt32BE(out[0] >>> 0, 0) buf.writeUInt32BE(out[1] >>> 0, 4) buf.writeUInt32BE(out[2] >>> 0, 8) buf.writeUInt32BE(out[3] >>> 0, 12) return buf } function GHASH (key) { this.h = key this.state = Buffer.alloc(16, 0) this.cache = Buffer.allocUnsafe(0) } // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html // by Juho Vähä-Herttua GHASH.prototype.ghash = function (block) { var i = -1 while (++i < block.length) { this.state[i] ^= block[i] } this._multiply() } GHASH.prototype._multiply = function () { var Vi = toArray(this.h) var Zi = [0, 0, 0, 0] var j, xi, lsbVi var i = -1 while (++i < 128) { xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0 if (xi) { // Z_i+1 = Z_i ^ V_i Zi[0] ^= Vi[0] Zi[1] ^= Vi[1] Zi[2] ^= Vi[2] Zi[3] ^= Vi[3] } // Store the value of LSB(V_i) lsbVi = (Vi[3] & 1) !== 0 // V_i+1 = V_i >> 1 for (j = 3; j > 0; j--) { Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) } Vi[0] = Vi[0] >>> 1 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R if (lsbVi) { Vi[0] = Vi[0] ^ (0xe1 << 24) } } this.state = fromArray(Zi) } GHASH.prototype.update = function (buf) { this.cache = Buffer.concat([this.cache, buf]) var chunk while (this.cache.length >= 16) { chunk = this.cache.slice(0, 16) this.cache = this.cache.slice(16) this.ghash(chunk) } } GHASH.prototype.final = function (abl, bl) { if (this.cache.length) { this.ghash(Buffer.concat([this.cache, ZEROES], 16)) } this.ghash(fromArray([0, abl, 0, bl])) return this.state } module.exports = GHASH },{"safe-buffer":311}],50:[function(require,module,exports){ function incr32 (iv) { var len = iv.length var item while (len--) { item = iv.readUInt8(len) if (item === 255) { iv.writeUInt8(0, len) } else { item++ iv.writeUInt8(item, len) break } } } module.exports = incr32 },{}],51:[function(require,module,exports){ var xor = require('buffer-xor') exports.encrypt = function (self, block) { var data = xor(block, self._prev) self._prev = self._cipher.encryptBlock(data) return self._prev } exports.decrypt = function (self, block) { var pad = self._prev self._prev = block var out = self._cipher.decryptBlock(block) return xor(out, pad) } },{"buffer-xor":73}],52:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer var xor = require('buffer-xor') function encryptStart (self, data, decrypt) { var len = data.length var out = xor(data, self._cache) self._cache = self._cache.slice(len) self._prev = Buffer.concat([self._prev, decrypt ? data : out]) return out } exports.encrypt = function (self, data, decrypt) { var out = Buffer.allocUnsafe(0) var len while (data.length) { if (self._cache.length === 0) { self._cache = self._cipher.encryptBlock(self._prev) self._prev = Buffer.allocUnsafe(0) } if (self._cache.length <= data.length) { len = self._cache.length out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) data = data.slice(len) } else { out = Buffer.concat([out, encryptStart(self, data, decrypt)]) break } } return out } },{"buffer-xor":73,"safe-buffer":311}],53:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer function encryptByte (self, byteParam, decrypt) { var pad var i = -1 var len = 8 var out = 0 var bit, value while (++i < len) { pad = self._cipher.encryptBlock(self._prev) bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 value = pad[0] ^ bit out += ((value & 0x80) >> (i % 8)) self._prev = shiftIn(self._prev, decrypt ? bit : value) } return out } function shiftIn (buffer, value) { var len = buffer.length var i = -1 var out = Buffer.allocUnsafe(buffer.length) buffer = Buffer.concat([buffer, Buffer.from([value])]) while (++i < len) { out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) } return out } exports.encrypt = function (self, chunk, decrypt) { var len = chunk.length var out = Buffer.allocUnsafe(len) var i = -1 while (++i < len) { out[i] = encryptByte(self, chunk[i], decrypt) } return out } },{"safe-buffer":311}],54:[function(require,module,exports){ (function (Buffer){ function encryptByte (self, byteParam, decrypt) { var pad = self._cipher.encryptBlock(self._prev) var out = pad[0] ^ byteParam self._prev = Buffer.concat([ self._prev.slice(1), Buffer.from([decrypt ? byteParam : out]) ]) return out } exports.encrypt = function (self, chunk, decrypt) { var len = chunk.length var out = Buffer.allocUnsafe(len) var i = -1 while (++i < len) { out[i] = encryptByte(self, chunk[i], decrypt) } return out } }).call(this,require("buffer").Buffer) },{"buffer":74}],55:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') var incr32 = require('../incr32') function getBlock (self) { var out = self._cipher.encryptBlockRaw(self._prev) incr32(self._prev) return out } var blockSize = 16 exports.encrypt = function (self, chunk) { var chunkNum = Math.ceil(chunk.length / blockSize) var start = self._cache.length self._cache = Buffer.concat([ self._cache, Buffer.allocUnsafe(chunkNum * blockSize) ]) for (var i = 0; i < chunkNum; i++) { var out = getBlock(self) var offset = start + i * blockSize self._cache.writeUInt32BE(out[0], offset + 0) self._cache.writeUInt32BE(out[1], offset + 4) self._cache.writeUInt32BE(out[2], offset + 8) self._cache.writeUInt32BE(out[3], offset + 12) } var pad = self._cache.slice(0, chunk.length) self._cache = self._cache.slice(chunk.length) return xor(chunk, pad) } }).call(this,require("buffer").Buffer) },{"../incr32":50,"buffer":74,"buffer-xor":73}],56:[function(require,module,exports){ exports.encrypt = function (self, block) { return self._cipher.encryptBlock(block) } exports.decrypt = function (self, block) { return self._cipher.decryptBlock(block) } },{}],57:[function(require,module,exports){ var modeModules = { ECB: require('./ecb'), CBC: require('./cbc'), CFB: require('./cfb'), CFB8: require('./cfb8'), CFB1: require('./cfb1'), OFB: require('./ofb'), CTR: require('./ctr'), GCM: require('./ctr') } var modes = require('./list.json') for (var key in modes) { modes[key].module = modeModules[modes[key].mode] } module.exports = modes },{"./cbc":51,"./cfb":52,"./cfb1":53,"./cfb8":54,"./ctr":55,"./ecb":56,"./list.json":58,"./ofb":59}],58:[function(require,module,exports){ module.exports={ "aes-128-ecb": { "cipher": "AES", "key": 128, "iv": 0, "mode": "ECB", "type": "block" }, "aes-192-ecb": { "cipher": "AES", "key": 192, "iv": 0, "mode": "ECB", "type": "block" }, "aes-256-ecb": { "cipher": "AES", "key": 256, "iv": 0, "mode": "ECB", "type": "block" }, "aes-128-cbc": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CBC", "type": "block" }, "aes-192-cbc": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CBC", "type": "block" }, "aes-256-cbc": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CBC", "type": "block" }, "aes128": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CBC", "type": "block" }, "aes192": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CBC", "type": "block" }, "aes256": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CBC", "type": "block" }, "aes-128-cfb": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CFB", "type": "stream" }, "aes-192-cfb": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CFB", "type": "stream" }, "aes-256-cfb": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CFB", "type": "stream" }, "aes-128-cfb8": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CFB8", "type": "stream" }, "aes-192-cfb8": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CFB8", "type": "stream" }, "aes-256-cfb8": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CFB8", "type": "stream" }, "aes-128-cfb1": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CFB1", "type": "stream" }, "aes-192-cfb1": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CFB1", "type": "stream" }, "aes-256-cfb1": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CFB1", "type": "stream" }, "aes-128-ofb": { "cipher": "AES", "key": 128, "iv": 16, "mode": "OFB", "type": "stream" }, "aes-192-ofb": { "cipher": "AES", "key": 192, "iv": 16, "mode": "OFB", "type": "stream" }, "aes-256-ofb": { "cipher": "AES", "key": 256, "iv": 16, "mode": "OFB", "type": "stream" }, "aes-128-ctr": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CTR", "type": "stream" }, "aes-192-ctr": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CTR", "type": "stream" }, "aes-256-ctr": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CTR", "type": "stream" }, "aes-128-gcm": { "cipher": "AES", "key": 128, "iv": 12, "mode": "GCM", "type": "auth" }, "aes-192-gcm": { "cipher": "AES", "key": 192, "iv": 12, "mode": "GCM", "type": "auth" }, "aes-256-gcm": { "cipher": "AES", "key": 256, "iv": 12, "mode": "GCM", "type": "auth" } } },{}],59:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') function getBlock (self) { self._prev = self._cipher.encryptBlock(self._prev) return self._prev } exports.encrypt = function (self, chunk) { while (self._cache.length < chunk.length) { self._cache = Buffer.concat([self._cache, getBlock(self)]) } var pad = self._cache.slice(0, chunk.length) self._cache = self._cache.slice(chunk.length) return xor(chunk, pad) } }).call(this,require("buffer").Buffer) },{"buffer":74,"buffer-xor":73}],60:[function(require,module,exports){ var aes = require('./aes') var Buffer = require('safe-buffer').Buffer var Transform = require('cipher-base') var inherits = require('inherits') function StreamCipher (mode, key, iv, decrypt) { Transform.call(this) this._cipher = new aes.AES(key) this._prev = Buffer.from(iv) this._cache = Buffer.allocUnsafe(0) this._secCache = Buffer.allocUnsafe(0) this._decrypt = decrypt this._mode = mode } inherits(StreamCipher, Transform) StreamCipher.prototype._update = function (chunk) { return this._mode.encrypt(this, chunk, this._decrypt) } StreamCipher.prototype._final = function () { this._cipher.scrub() } module.exports = StreamCipher },{"./aes":44,"cipher-base":75,"inherits":180,"safe-buffer":311}],61:[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":46,"browserify-aes/modes":57,"browserify-des":62,"browserify-des/modes":63,"evp_bytestokey":156}],62:[function(require,module,exports){ (function (Buffer){ var CipherBase = require('cipher-base') var des = require('des.js') var inherits = require('inherits') var modes = { 'des-ede3-cbc': des.CBC.instantiate(des.EDE), 'des-ede3': des.EDE, 'des-ede-cbc': des.CBC.instantiate(des.EDE), 'des-ede': des.EDE, 'des-cbc': des.CBC.instantiate(des.DES), 'des-ecb': des.DES } modes.des = modes['des-cbc'] modes.des3 = modes['des-ede3-cbc'] module.exports = DES inherits(DES, CipherBase) function DES (opts) { CipherBase.call(this) var modeName = opts.mode.toLowerCase() var mode = modes[modeName] var type if (opts.decrypt) { type = 'decrypt' } else { type = 'encrypt' } var key = opts.key if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { key = Buffer.concat([key, key.slice(0, 8)]) } var iv = opts.iv this._des = mode.create({ key: key, iv: iv, type: type }) } DES.prototype._update = function (data) { return new Buffer(this._des.update(data)) } DES.prototype._final = function () { return new Buffer(this._des.final()) } }).call(this,require("buffer").Buffer) },{"buffer":74,"cipher-base":75,"des.js":86,"inherits":180}],63:[function(require,module,exports){ exports['des-ecb'] = { key: 8, iv: 0 } exports['des-cbc'] = exports.des = { key: 8, iv: 8 } exports['des-ede3-cbc'] = exports.des3 = { key: 24, iv: 8 } exports['des-ede3'] = { key: 24, iv: 0 } exports['des-ede-cbc'] = { key: 16, iv: 8 } exports['des-ede'] = { key: 16, iv: 0 } },{}],64:[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 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":41,"buffer":74,"randombytes":293}],65:[function(require,module,exports){ (function (Buffer){ const Sha3 = require('js-sha3') const hashLengths = [ 224, 256, 384, 512 ] 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' } 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 } 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) } module.exports = { SHA3Hash: hash } }).call(this,require("buffer").Buffer) },{"buffer":74,"js-sha3":184}],66:[function(require,module,exports){ module.exports = require('./browser/algorithms.json') },{"./browser/algorithms.json":67}],67:[function(require,module,exports){ module.exports={ "sha224WithRSAEncryption": { "sign": "rsa", "hash": "sha224", "id": "302d300d06096086480165030402040500041c" }, "RSA-SHA224": { "sign": "ecdsa/rsa", "hash": "sha224", "id": "302d300d06096086480165030402040500041c" }, "sha256WithRSAEncryption": { "sign": "rsa", "hash": "sha256", "id": "3031300d060960864801650304020105000420" }, "RSA-SHA256": { "sign": "ecdsa/rsa", "hash": "sha256", "id": "3031300d060960864801650304020105000420" }, "sha384WithRSAEncryption": { "sign": "rsa", "hash": "sha384", "id": "3041300d060960864801650304020205000430" }, "RSA-SHA384": { "sign": "ecdsa/rsa", "hash": "sha384", "id": "3041300d060960864801650304020205000430" }, "sha512WithRSAEncryption": { "sign": "rsa", "hash": "sha512", "id": "3051300d060960864801650304020305000440" }, "RSA-SHA512": { "sign": "ecdsa/rsa", "hash": "sha512", "id": "3051300d060960864801650304020305000440" }, "RSA-SHA1": { "sign": "rsa", "hash": "sha1", "id": "3021300906052b0e03021a05000414" }, "ecdsa-with-SHA1": { "sign": "ecdsa", "hash": "sha1", "id": "" }, "sha256": { "sign": "ecdsa", "hash": "sha256", "id": "" }, "sha224": { "sign": "ecdsa", "hash": "sha224", "id": "" }, "sha384": { "sign": "ecdsa", "hash": "sha384", "id": "" }, "sha512": { "sign": "ecdsa", "hash": "sha512", "id": "" }, "DSA-SHA": { "sign": "dsa", "hash": "sha1", "id": "" }, "DSA-SHA1": { "sign": "dsa", "hash": "sha1", "id": "" }, "DSA": { "sign": "dsa", "hash": "sha1", "id": "" }, "DSA-WITH-SHA224": { "sign": "dsa", "hash": "sha224", "id": "" }, "DSA-SHA224": { "sign": "dsa", "hash": "sha224", "id": "" }, "DSA-WITH-SHA256": { "sign": "dsa", "hash": "sha256", "id": "" }, "DSA-SHA256": { "sign": "dsa", "hash": "sha256", "id": "" }, "DSA-WITH-SHA384": { "sign": "dsa", "hash": "sha384", "id": "" }, "DSA-SHA384": { "sign": "dsa", "hash": "sha384", "id": "" }, "DSA-WITH-SHA512": { "sign": "dsa", "hash": "sha512", "id": "" }, "DSA-SHA512": { "sign": "dsa", "hash": "sha512", "id": "" }, "DSA-RIPEMD160": { "sign": "dsa", "hash": "rmd160", "id": "" }, "ripemd160WithRSA": { "sign": "rsa", "hash": "rmd160", "id": "3021300906052b2403020105000414" }, "RSA-RIPEMD160": { "sign": "rsa", "hash": "rmd160", "id": "3021300906052b2403020105000414" }, "md5WithRSAEncryption": { "sign": "rsa", "hash": "md5", "id": "3020300c06082a864886f70d020505000410" }, "RSA-MD5": { "sign": "rsa", "hash": "md5", "id": "3020300c06082a864886f70d020505000410" } } },{}],68:[function(require,module,exports){ module.exports={ "1.3.132.0.10": "secp256k1", "1.3.132.0.33": "p224", "1.2.840.10045.3.1.1": "p192", "1.2.840.10045.3.1.7": "p256", "1.3.132.0.34": "p384", "1.3.132.0.35": "p521" } },{}],69:[function(require,module,exports){ (function (Buffer){ var createHash = require('create-hash') var stream = require('stream') var inherits = require('inherits') var sign = require('./sign') var verify = require('./verify') var algorithms = require('./algorithms.json') Object.keys(algorithms).forEach(function (key) { algorithms[key].id = new Buffer(algorithms[key].id, 'hex') algorithms[key.toLowerCase()] = algorithms[key] }) function Sign (algorithm) { stream.Writable.call(this) var data = algorithms[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(hash, key, this._hashType, this._signType, this._tag) return enc ? sig.toString(enc) : sig } function Verify (algorithm) { stream.Writable.call(this) var data = algorithms[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, hash, key, this._signType, this._tag) } 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) },{"./algorithms.json":67,"./sign":70,"./verify":71,"buffer":74,"create-hash":78,"inherits":180,"stream":327}],70:[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') var crt = require('browserify-rsa') var EC = require('elliptic').ec var BN = require('bn.js') var parseKeys = require('parse-asn1') var curves = require('./curves.json') function sign (hash, key, hashType, signType, tag) { var priv = parseKeys(key) if (priv.curve) { // rsa keys can be interpreted as ecdsa ones in openssl if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') return ecSign(hash, priv) } else if (priv.type === 'dsa') { if (signType !== 'dsa') throw new Error('wrong private key type') return dsaSign(hash, priv, hashType) } else { if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') } hash = Buffer.concat([tag, hash]) var len = priv.modulus.byteLength() var pad = [ 0, 1 ] while (hash.length + pad.length + 1 < len) pad.push(0xff) pad.push(0x00) var i = -1 while (++i < hash.length) pad.push(hash[i]) var out = crt(pad, priv) return out } function ecSign (hash, priv) { var curveId = curves[priv.curve.join('.')] if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.')) var curve = new EC(curveId) var key = curve.keyFromPrivate(priv.privateKey) var out = key.sign(hash) return new Buffer(out.toDER()) } function dsaSign (hash, priv, algo) { var x = priv.params.priv_key var p = priv.params.p var q = priv.params.q var g = priv.params.g var r = new BN(0) var k var H = bits2int(hash, q).mod(q) var s = false var kv = getKey(x, q, hash, algo) while (s === false) { k = makeKey(q, kv, algo) r = makeR(g, k, p, q) s = k.invm(q).imul(H.add(x.mul(r))).mod(q) if (s.cmpn(0) === 0) { s = false r = new BN(0) } } return toDER(r, s) } function toDER (r, s) { r = r.toArray() s = s.toArray() // Pad values if (r[0] & 0x80) r = [ 0 ].concat(r) if (s[0] & 0x80) s = [ 0 ].concat(s) var total = r.length + s.length + 4 var res = [ 0x30, total, 0x02, r.length ] res = res.concat(r, [ 0x02, s.length ], s) return new Buffer(res) } function getKey (x, q, hash, algo) { x = new Buffer(x.toArray()) if (x.length < q.byteLength()) { var zeros = new Buffer(q.byteLength() - x.length) zeros.fill(0) x = Buffer.concat([ zeros, x ]) } var hlen = hash.length var hbits = bits2octets(hash, q) var v = new Buffer(hlen) v.fill(1) var k = new Buffer(hlen) k.fill(0) k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest() v = createHmac(algo, k).update(v).digest() k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest() v = createHmac(algo, k).update(v).digest() return { k: k, v: v } } function bits2int (obits, q) { var bits = new BN(obits) var shift = (obits.length << 3) - q.bitLength() if (shift > 0) bits.ishrn(shift) return bits } function bits2octets (bits, q) { bits = bits2int(bits, q) bits = bits.mod(q) var out = new Buffer(bits.toArray()) if (out.length < q.byteLength()) { var zeros = new Buffer(q.byteLength() - out.length) zeros.fill(0) out = Buffer.concat([ zeros, out ]) } return out } function makeKey (q, kv, algo) { var t var k do { t = new Buffer(0) while (t.length * 8 < q.bitLength()) { kv.v = createHmac(algo, kv.k).update(kv.v).digest() t = Buffer.concat([ t, kv.v ]) } k = bits2int(t, q) kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest() kv.v = createHmac(algo, kv.k).update(kv.v).digest() } while (k.cmp(q) !== -1) 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.json":68,"bn.js":41,"browserify-rsa":64,"buffer":74,"create-hmac":81,"elliptic":96,"parse-asn1":277}],71:[function(require,module,exports){ (function (Buffer){ // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js var BN = require('bn.js') var EC = require('elliptic').ec var parseKeys = require('parse-asn1') var curves = require('./curves.json') function verify (sig, hash, key, signType, tag) { var pub = parseKeys(key) if (pub.type === 'ec') { // rsa keys can be interpreted as ecdsa ones in openssl if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') 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' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') } hash = Buffer.concat([tag, hash]) 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 = padNum < 8 ? 1 : 0 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) === 0 } 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.json":68,"bn.js":41,"buffer":74,"elliptic":96,"parse-asn1":277}],72:[function(require,module,exports){ arguments[4][43][0].apply(exports,arguments) },{"dup":43}],73:[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":74}],74:[function(require,module,exports){ /*! * 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') exports.Buffer = Buffer exports.SlowBuffer = SlowBuffer exports.INSPECT_MAX_BYTES = 50 var K_MAX_LENGTH = 0x7fffffff exports.kMaxLength = K_MAX_LENGTH /** * If `Buffer.TYPED_ARRAY_SUPPORT`: * === true Use Uint8Array implementation (fastest) * === false Print warning and recommend using `buffer` v4.x which has an 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+. * * We report that the browser does not support typed arrays if the are not subclassable * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support * for __proto__ and has a buggy typed array implementation. */ Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') { console.error( 'This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' ) } function typedArraySupport () { // Can typed array instances can be augmented? try { var arr = new Uint8Array(1) arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} return arr.foo() === 42 } catch (e) { return false } } function createBuffer (length) { if (length > K_MAX_LENGTH) { throw new RangeError('Invalid typed array length') } // Return an augmented `Uint8Array` instance var buf = new Uint8Array(length) buf.__proto__ = Buffer.prototype return buf } /** * The Buffer constructor returns instances of `Uint8Array` that have their * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of * `Uint8Array`, so the returned instances will have all the node `Buffer` methods * and the `Uint8Array` methods. Square bracket notation works as expected -- it * returns a single octet. * * The `Uint8Array` prototype remains unmodified. */ function Buffer (arg, encodingOrOffset, length) { // Common case. if (typeof arg === 'number') { if (typeof encodingOrOffset === 'string') { throw new Error( 'If encoding is specified then the first argument must be a string' ) } return allocUnsafe(arg) } return from(arg, encodingOrOffset, length) } // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) { Object.defineProperty(Buffer, Symbol.species, { value: null, configurable: true, enumerable: false, writable: false }) } Buffer.poolSize = 8192 // not used by this implementation function from (value, encodingOrOffset, length) { if (typeof value === 'number') { throw new TypeError('"value" argument must not be a number') } if (isArrayBuffer(value)) { return fromArrayBuffer(value, encodingOrOffset, length) } if (typeof value === 'string') { return fromString(value, encodingOrOffset) } return fromObject(value) } /** * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError * if value is a number. * Buffer.from(str[, encoding]) * Buffer.from(array) * Buffer.from(buffer) * Buffer.from(arrayBuffer[, byteOffset[, length]]) **/ Buffer.from = function (value, encodingOrOffset, length) { return from(value, encodingOrOffset, length) } // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: // https://github.com/feross/buffer/pull/148 Buffer.prototype.__proto__ = Uint8Array.prototype Buffer.__proto__ = Uint8Array function assertSize (size) { if (typeof size !== 'number') { throw new TypeError('"size" argument must be a number') } else if (size < 0) { throw new RangeError('"size" argument must not be negative') } } function alloc (size, fill, encoding) { assertSize(size) if (size <= 0) { return createBuffer(size) } if (fill !== undefined) { // Only pay attention to encoding if it's a string. This // prevents accidentally sending in a number that would // be interpretted as a start offset. return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill) } return createBuffer(size) } /** * Creates a new filled Buffer instance. * alloc(size[, fill[, encoding]]) **/ Buffer.alloc = function (size, fill, encoding) { return alloc(size, fill, encoding) } function allocUnsafe (size) { assertSize(size) return createBuffer(size < 0 ? 0 : checked(size) | 0) } /** * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. * */ Buffer.allocUnsafe = function (size) { return allocUnsafe(size) } /** * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. */ Buffer.allocUnsafeSlow = function (size) { return allocUnsafe(size) } function fromString (string, encoding) { if (typeof encoding !== 'string' || encoding === '') { encoding = 'utf8' } if (!Buffer.isEncoding(encoding)) { throw new TypeError('"encoding" must be a valid string encoding') } var length = byteLength(string, encoding) | 0 var buf = createBuffer(length) var actual = buf.write(string, encoding) if (actual !== length) { // Writing a hex string, for example, that contains invalid characters will // cause everything after the first invalid character to be ignored. (e.g. // 'abxxcd' will be treated as 'ab') buf = buf.slice(0, actual) } return buf } function fromArrayLike (array) { var length = array.length < 0 ? 0 : checked(array.length) | 0 var buf = createBuffer(length) for (var i = 0; i < length; i += 1) { buf[i] = array[i] & 255 } return buf } function fromArrayBuffer (array, byteOffset, length) { if (byteOffset < 0 || array.byteLength < byteOffset) { throw new RangeError('\'offset\' is out of bounds') } if (array.byteLength < byteOffset + (length || 0)) { throw new RangeError('\'length\' is out of bounds') } var buf if (byteOffset === undefined && length === undefined) { buf = new Uint8Array(array) } else if (length === undefined) { buf = new Uint8Array(array, byteOffset) } else { buf = new Uint8Array(array, byteOffset, length) } // Return an augmented `Uint8Array` instance buf.__proto__ = Buffer.prototype return buf } function fromObject (obj) { if (Buffer.isBuffer(obj)) { var len = checked(obj.length) | 0 var buf = createBuffer(len) if (buf.length === 0) { return buf } obj.copy(buf, 0, 0, len) return buf } if (obj) { if (isArrayBufferView(obj) || 'length' in obj) { if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { return createBuffer(0) } return fromArrayLike(obj) } if (obj.type === 'Buffer' && Array.isArray(obj.data)) { return fromArrayLike(obj.data) } } throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') } function checked (length) { // Note: cannot use `length < K_MAX_LENGTH` here because that fails when // length is NaN (which is otherwise coerced to zero.) if (length >= K_MAX_LENGTH) { throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') } return length | 0 } function SlowBuffer (length) { if (+length != length) { // eslint-disable-line eqeqeq length = 0 } return Buffer.alloc(+length) } Buffer.isBuffer = function isBuffer (b) { return b != null && b._isBuffer === true } Buffer.compare = function compare (a, b) { if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { throw new TypeError('Arguments must be Buffers') } if (a === b) return 0 var x = a.length var y = b.length for (var i = 0, len = Math.min(x, y); i < len; ++i) { if (a[i] !== b[i]) { x = a[i] y = b[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } Buffer.isEncoding = function isEncoding (encoding) { switch (String(encoding).toLowerCase()) { case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'latin1': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return true default: return false } } Buffer.concat = function concat (list, length) { if (!Array.isArray(list)) { throw new TypeError('"list" argument must be an Array of Buffers') } if (list.length === 0) { return Buffer.alloc(0) } var i if (length === undefined) { length = 0 for (i = 0; i < list.length; ++i) { length += list[i].length } } var buffer = Buffer.allocUnsafe(length) var pos = 0 for (i = 0; i < list.length; ++i) { var buf = list[i] if (!Buffer.isBuffer(buf)) { throw new TypeError('"list" argument must be an Array of Buffers') } buf.copy(buffer, pos) pos += buf.length } return buffer } function byteLength (string, encoding) { if (Buffer.isBuffer(string)) { return string.length } if (isArrayBufferView(string) || isArrayBuffer(string)) { return string.byteLength } if (typeof string !== 'string') { string = '' + string } 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 'latin1': case 'binary': return len case 'utf8': case 'utf-8': case undefined: 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 slowToString (encoding, start, end) { var loweredCase = false // No need to verify that "this.length <= MAX_UINT32" since it's a read-only // property of a typed array. // This behaves neither like String nor Uint8Array in that we set start/end // to their upper/lower bounds if the value passed is out of range. // undefined is handled specially as per ECMA-262 6th Edition, // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. if (start === undefined || start < 0) { start = 0 } // Return early if start > this.length. Done here to prevent potential uint32 // coercion fail below. if (start > this.length) { return '' } if (end === undefined || end > this.length) { end = this.length } if (end <= 0) { return '' } // Force coersion to uint32. This will also coerce falsey/NaN values to 0. end >>>= 0 start >>>= 0 if (end <= start) { return '' } if (!encoding) encoding = 'utf8' while (true) { switch (encoding) { case 'hex': return hexSlice(this, start, end) case 'utf8': case 'utf-8': return utf8Slice(this, start, end) case 'ascii': return asciiSlice(this, start, end) case 'latin1': case 'binary': return latin1Slice(this, start, end) case 'base64': return base64Slice(this, start, end) 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 } } } // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) // to detect a Buffer instance. It's not possible to use `instanceof Buffer` // reliably in a browserify context because there could be multiple different // copies of the 'buffer' package in use. This method works even for Buffer // instances that were created from another copy of the `buffer` package. // See: https://github.com/feross/buffer/issues/154 Buffer.prototype._isBuffer = true function swap (b, n, m) { var i = b[n] b[n] = b[m] b[m] = i } Buffer.prototype.swap16 = function swap16 () { var len = this.length if (len % 2 !== 0) { throw new RangeError('Buffer size must be a multiple of 16-bits') } for (var i = 0; i < len; i += 2) { swap(this, i, i + 1) } return this } Buffer.prototype.swap32 = function swap32 () { var len = this.length if (len % 4 !== 0) { throw new RangeError('Buffer size must be a multiple of 32-bits') } for (var i = 0; i < len; i += 4) { swap(this, i, i + 3) swap(this, i + 1, i + 2) } return this } Buffer.prototype.swap64 = function swap64 () { var len = this.length if (len % 8 !== 0) { throw new RangeError('Buffer size must be a multiple of 64-bits') } for (var i = 0; i < len; i += 8) { swap(this, i, i + 7) swap(this, i + 1, i + 6) swap(this, i + 2, i + 5) swap(this, i + 3, i + 4) } return this } Buffer.prototype.toString = function toString () { var length = this.length 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 += ' ... ' } return '' } Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { if (!Buffer.isBuffer(target)) { throw new TypeError('Argument must be a Buffer') } if (start === undefined) { start = 0 } if (end === undefined) { end = target ? target.length : 0 } if (thisStart === undefined) { thisStart = 0 } if (thisEnd === undefined) { thisEnd = this.length } if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { throw new RangeError('out of range index') } if (thisStart >= thisEnd && start >= end) { return 0 } if (thisStart >= thisEnd) { return -1 } if (start >= end) { return 1 } start >>>= 0 end >>>= 0 thisStart >>>= 0 thisEnd >>>= 0 if (this === target) return 0 var x = thisEnd - thisStart var y = end - start var len = Math.min(x, y) var thisCopy = this.slice(thisStart, thisEnd) var targetCopy = target.slice(start, end) for (var i = 0; i < len; ++i) { if (thisCopy[i] !== targetCopy[i]) { x = thisCopy[i] y = targetCopy[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, // OR the last index of `val` in `buffer` at offset <= `byteOffset`. // // Arguments: // - buffer - a Buffer to search // - val - a string, Buffer, or number // - byteOffset - an index into `buffer`; will be clamped to an int32 // - encoding - an optional encoding, relevant is val is a string // - dir - true for indexOf, false for lastIndexOf function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { // Empty buffer means no match if (buffer.length === 0) return -1 // Normalize byteOffset if (typeof byteOffset === 'string') { encoding = byteOffset byteOffset = 0 } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff } else if (byteOffset < -0x80000000) { byteOffset = -0x80000000 } byteOffset = +byteOffset // Coerce to Number. if (numberIsNaN(byteOffset)) { // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer byteOffset = dir ? 0 : (buffer.length - 1) } // Normalize byteOffset: negative offsets start from the end of the buffer if (byteOffset < 0) byteOffset = buffer.length + byteOffset if (byteOffset >= buffer.length) { if (dir) return -1 else byteOffset = buffer.length - 1 } else if (byteOffset < 0) { if (dir) byteOffset = 0 else return -1 } // Normalize val if (typeof val === 'string') { val = Buffer.from(val, encoding) } // Finally, search either indexOf (if dir is true) or lastIndexOf if (Buffer.isBuffer(val)) { // Special case: looking for empty string/buffer always fails if (val.length === 0) { return -1 } return arrayIndexOf(buffer, val, byteOffset, encoding, dir) } else if (typeof val === 'number') { val = val & 0xFF // Search for a byte value [0-255] if (typeof Uint8Array.prototype.indexOf === 'function') { if (dir) { return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) } else { return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) } } return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) } throw new TypeError('val must be string, number or Buffer') } function arrayIndexOf (arr, val, byteOffset, encoding, dir) { var indexSize = 1 var arrLength = arr.length var valLength = val.length if (encoding !== undefined) { encoding = String(encoding).toLowerCase() if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { if (arr.length < 2 || val.length < 2) { return -1 } indexSize = 2 arrLength /= 2 valLength /= 2 byteOffset /= 2 } } function read (buf, i) { if (indexSize === 1) { return buf[i] } else { return buf.readUInt16BE(i * indexSize) } } var i if (dir) { var foundIndex = -1 for (i = byteOffset; i < arrLength; i++) { if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { if (foundIndex === -1) foundIndex = i if (i - foundIndex + 1 === valLength) return foundIndex * indexSize } else { if (foundIndex !== -1) i -= i - foundIndex foundIndex = -1 } } } else { if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength for (i = byteOffset; i >= 0; i--) { var found = true for (var j = 0; j < valLength; j++) { if (read(arr, i + j) !== read(val, j)) { found = false break } } if (found) return i } } return -1 } Buffer.prototype.includes = function includes (val, byteOffset, encoding) { return this.indexOf(val, byteOffset, encoding) !== -1 } Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, true) } Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, false) } 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 } } // must be an even number of digits var strLen = string.length if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') if (length > strLen / 2) { length = strLen / 2 } for (var i = 0; i < length; ++i) { var parsed = parseInt(string.substr(i * 2, 2), 16) if (numberIsNaN(parsed)) return i buf[offset + i] = parsed } return i } function utf8Write (buf, string, offset, length) { return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) } function asciiWrite (buf, string, offset, length) { return blitBuffer(asciiToBytes(string), buf, offset, length) } function latin1Write (buf, string, offset, length) { return asciiWrite(buf, string, offset, length) } function base64Write (buf, string, offset, length) { return blitBuffer(base64ToBytes(string), buf, offset, length) } function ucs2Write (buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) } 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 } } else { throw new Error( 'Buffer.write(string, encoding, offset[, length]) is no longer supported' ) } 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') } if (!encoding) encoding = 'utf8' var loweredCase = false for (;;) { switch (encoding) { case 'hex': return hexWrite(this, string, offset, length) case 'utf8': case 'utf-8': return utf8Write(this, string, offset, length) case 'ascii': return asciiWrite(this, string, offset, length) case 'latin1': case 'binary': return latin1Write(this, string, offset, length) case 'base64': // Warning: maxLength not taken into account in base64Write return base64Write(this, string, offset, length) 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 } } } Buffer.prototype.toJSON = function toJSON () { return { type: 'Buffer', data: Array.prototype.slice.call(this._arr || this, 0) } } function base64Slice (buf, start, end) { if (start === 0 && end === buf.length) { return base64.fromByteArray(buf) } else { return base64.fromByteArray(buf.slice(start, end)) } } function utf8Slice (buf, start, end) { end = Math.min(buf.length, end) var res = [] 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 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 } } } } 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 } 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() } // 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 asciiSlice (buf, start, end) { var ret = '' end = Math.min(buf.length, end) for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i] & 0x7F) } return ret } function latin1Slice (buf, start, end) { var ret = '' end = Math.min(buf.length, end) for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i]) } return ret } 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 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 } Buffer.prototype.slice = function slice (start, end) { var len = this.length start = ~~start end = end === undefined ? len : ~~end if (start < 0) { start += len if (start < 0) start = 0 } else if (start > len) { start = len } if (end < 0) { end += len if (end < 0) end = 0 } else if (end > len) { end = len } if (end < start) end = start var newBuf = this.subarray(start, end) // Return an augmented `Uint8Array` instance newBuf.__proto__ = Buffer.prototype 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) var val = this[offset] var mul = 1 var i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } return val } Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) { checkOffset(offset, byteLength, this.length) } var val = this[offset + --byteLength] var mul = 1 while (byteLength > 0 && (mul *= 0x100)) { val += this[offset + --byteLength] * mul } return val } Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 1, this.length) return this[offset] } Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) return this[offset] | (this[offset + 1] << 8) } Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) return (this[offset] << 8) | this[offset + 1] } Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return ((this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16)) + (this[offset + 3] * 0x1000000) } Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] * 0x1000000) + ((this[offset + 1] << 16) | (this[offset + 2] << 8) | this[offset + 3]) } Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var val = this[offset] var mul = 1 var i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var i = byteLength var mul = 1 var val = this[offset + --i] while (i > 0 && (mul *= 0x100)) { val += this[offset + --i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 1, this.length) if (!(this[offset] & 0x80)) return (this[offset]) return ((0xff - this[offset] + 1) * -1) } Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) var val = this[offset] | (this[offset + 1] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) var val = this[offset + 1] | (this[offset] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16) | (this[offset + 3] << 24) } Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] << 24) | (this[offset + 1] << 16) | (this[offset + 2] << 8) | (this[offset + 3]) } Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, true, 23, 4) } Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, false, 23, 4) } Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, true, 52, 8) } Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, false, 52, 8) } function checkInt (buf, value, offset, ext, max, min) { if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') if (offset + ext > buf.length) throw new RangeError('Index out of range') } Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } var mul = 1 var i = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } var i = byteLength - 1 var mul = 1 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) this[offset] = (value & 0xff) return offset + 1 } Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) return offset + 2 } Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) return offset + 2 } Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) this[offset + 3] = (value >>> 24) this[offset + 2] = (value >>> 16) this[offset + 1] = (value >>> 8) this[offset] = (value & 0xff) 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) this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) return offset + 4 } Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { var limit = Math.pow(2, (8 * byteLength) - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } var i = 0 var mul = 1 var sub = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { var limit = Math.pow(2, (8 * byteLength) - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } var i = byteLength - 1 var mul = 1 var sub = 0 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) if (value < 0) value = 0xff + value + 1 this[offset] = (value & 0xff) return offset + 1 } Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) return offset + 2 } Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) return offset + 2 } Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) this[offset + 2] = (value >>> 16) this[offset + 3] = (value >>> 24) return offset + 4 } 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 this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) return offset + 4 } function checkIEEE754 (buf, value, offset, ext, max, min) { if (offset + ext > buf.length) throw new RangeError('Index out of range') if (offset < 0) throw new RangeError('Index out of range') } function writeFloat (buf, value, offset, littleEndian, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) } ieee754.write(buf, value, offset, littleEndian, 23, 4) return offset + 4 } Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { return writeFloat(this, value, offset, true, noAssert) } Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { return writeFloat(this, value, offset, false, noAssert) } function writeDouble (buf, value, offset, littleEndian, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) } ieee754.write(buf, value, offset, littleEndian, 52, 8) return offset + 8 } Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { return writeDouble(this, value, offset, true, noAssert) } Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { return writeDouble(this, value, offset, false, noAssert) } // 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 // Copy 0 bytes; we're done if (end === start) return 0 if (target.length === 0 || this.length === 0) return 0 // 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') // Are we oob? if (end > this.length) end = this.length if (target.length - targetStart < end - start) { end = target.length - targetStart + start } 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) { // ascending copy from start for (i = 0; i < len; ++i) { target[i + targetStart] = this[i + start] } } else { Uint8Array.prototype.set.call( target, this.subarray(start, start + len), targetStart ) } return len } // Usage: // buffer.fill(number[, offset[, end]]) // buffer.fill(buffer[, offset[, end]]) // buffer.fill(string[, offset[, end]][, encoding]) Buffer.prototype.fill = function fill (val, start, end, encoding) { // Handle string cases: if (typeof val === 'string') { if (typeof start === 'string') { encoding = start start = 0 end = this.length } else if (typeof end === 'string') { encoding = end end = this.length } if (val.length === 1) { var code = val.charCodeAt(0) if (code < 256) { val = code } } if (encoding !== undefined && typeof encoding !== 'string') { throw new TypeError('encoding must be a string') } if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { throw new TypeError('Unknown encoding: ' + encoding) } } else if (typeof val === 'number') { val = val & 255 } // Invalid ranges are not set to a default, so can range check early. if (start < 0 || this.length < start || this.length < end) { throw new RangeError('Out of range index') } if (end <= start) { return this } start = start >>> 0 end = end === undefined ? this.length : end >>> 0 if (!val) val = 0 var i if (typeof val === 'number') { for (i = start; i < end; ++i) { this[i] = val } } else { var bytes = Buffer.isBuffer(val) ? val : new Buffer(val, encoding) var len = bytes.length for (i = 0; i < end - start; ++i) { this[i + start] = bytes[i % len] } } return this } // HELPER FUNCTIONS // ================ var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g function base64clean (str) { // Node strips out invalid characters like \n and \t from the string, base64-js does not str = str.trim().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 toHex (n) { if (n < 16) return '0' + n.toString(16) return n.toString(16) } function utf8ToBytes (string, units) { units = units || Infinity var codePoint var length = string.length var leadSurrogate = null var bytes = [] for (var i = 0; i < length; ++i) { codePoint = string.charCodeAt(i) // 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 } // valid lead leadSurrogate = codePoint continue } // 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') } } return bytes } 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 } function utf16leToBytes (str, units) { var c, hi, lo var byteArray = [] for (var i = 0; i < str.length; ++i) { if ((units -= 2) < 0) break c = str.charCodeAt(i) hi = c >> 8 lo = c % 256 byteArray.push(lo) byteArray.push(hi) } return byteArray } function base64ToBytes (str) { return base64.toByteArray(base64clean(str)) } 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 } // ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check // but they should be treated as valid. See: https://github.com/feross/buffer/issues/166 function isArrayBuffer (obj) { return obj instanceof ArrayBuffer || (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' && typeof obj.byteLength === 'number') } // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView` function isArrayBufferView (obj) { return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj) } function numberIsNaN (obj) { return obj !== obj // eslint-disable-line no-self-compare } },{"base64-js":39,"ieee754":172}],75:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer var Transform = require('stream').Transform var StringDecoder = require('string_decoder').StringDecoder var inherits = require('inherits') function CipherBase (hashMode) { Transform.call(this) this.hashMode = typeof hashMode === 'string' if (this.hashMode) { this[hashMode] = this._finalOrDigest } else { this.final = this._finalOrDigest } if (this._final) { this.__final = this._final this._final = null } this._decoder = null this._encoding = null } inherits(CipherBase, Transform) CipherBase.prototype.update = function (data, inputEnc, outputEnc) { if (typeof data === 'string') { data = Buffer.from(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 } done(err) } CipherBase.prototype._finalOrDigest = function (outputEnc) { var outData = this.__final() || Buffer.alloc(0) if (outputEnc) { outData = this._toString(outData, outputEnc, true) } return outData } CipherBase.prototype._toString = function (value, enc, fin) { 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 (fin) { out += this._decoder.end() } return out } module.exports = CipherBase },{"inherits":180,"safe-buffer":311,"stream":327,"string_decoder":328}],76:[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. // NOTE: These type checking functions intentionally don't use `instanceof` // because it is fragile and can be easily faked with `Object.create()`. function isArray(arg) { if (Array.isArray) { return Array.isArray(arg); } return objectToString(arg) === '[object Array]'; } exports.isArray = isArray; function isBoolean(arg) { return typeof arg === 'boolean'; } exports.isBoolean = isBoolean; function isNull(arg) { return arg === null; } exports.isNull = isNull; function isNullOrUndefined(arg) { return arg == null; } exports.isNullOrUndefined = isNullOrUndefined; function isNumber(arg) { return typeof arg === 'number'; } exports.isNumber = isNumber; function isString(arg) { return typeof arg === 'string'; } exports.isString = isString; function isSymbol(arg) { return typeof arg === 'symbol'; } exports.isSymbol = isSymbol; function isUndefined(arg) { return arg === void 0; } exports.isUndefined = isUndefined; function isRegExp(re) { return objectToString(re) === '[object RegExp]'; } exports.isRegExp = isRegExp; function isObject(arg) { return typeof arg === 'object' && arg !== null; } exports.isObject = isObject; function isDate(d) { return objectToString(d) === '[object Date]'; } exports.isDate = isDate; function isError(e) { return (objectToString(e) === '[object Error]' || e instanceof Error); } exports.isError = isError; function isFunction(arg) { return typeof arg === 'function'; } exports.isFunction = isFunction; 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; exports.isBuffer = Buffer.isBuffer; function objectToString(o) { return Object.prototype.toString.call(o); } }).call(this,{"isBuffer":require("../../is-buffer/index.js")}) },{"../../is-buffer/index.js":181}],77:[function(require,module,exports){ (function (Buffer){ var elliptic = require('elliptic'); var BN = require('bn.js'); module.exports = function createECDH(curve) { return new ECDH(curve); }; 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 } }; aliases.p224 = aliases.secp224r1; aliases.p256 = aliases.secp256r1 = aliases.prime256v1; aliases.p192 = aliases.secp192r1 = aliases.prime192v1; aliases.p384 = aliases.secp384r1; aliases.p521 = aliases.secp521r1; 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; } ECDH.prototype.generateKeys = function (enc, format) { this.keys = this.curve.genKeyPair(); return this.getPublicKey(enc, format); }; 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); }; 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); }; ECDH.prototype.getPrivateKey = function (enc) { return formatReturnValue(this.keys.getPrivate(), enc); }; ECDH.prototype.setPublicKey = function (pub, enc) { enc = enc || 'utf8'; if (!Buffer.isBuffer(pub)) { pub = new Buffer(pub, enc); } this.keys._importPublic(pub); return this; }; 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; }; 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) },{"bn.js":41,"buffer":74,"elliptic":96}],78:[function(require,module,exports){ (function (Buffer){ 'use strict' var inherits = require('inherits') var md5 = require('./md5') var RIPEMD160 = require('ripemd160') var sha = require('sha.js') var Base = require('cipher-base') function HashNoConstructor (hash) { Base.call(this, 'digest') this._hash = hash this.buffers = [] } inherits(HashNoConstructor, Base) HashNoConstructor.prototype._update = function (data) { this.buffers.push(data) } HashNoConstructor.prototype._final = function () { var buf = Buffer.concat(this.buffers) var r = this._hash(buf) this.buffers = null return r } function Hash (hash) { Base.call(this, 'digest') this._hash = hash } inherits(Hash, Base) Hash.prototype._update = function (data) { this._hash.update(data) } Hash.prototype._final = function () { return this._hash.digest() } module.exports = function createHash (alg) { alg = alg.toLowerCase() if (alg === 'md5') return new HashNoConstructor(md5) if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160()) return new Hash(sha(alg)) } }).call(this,require("buffer").Buffer) },{"./md5":80,"buffer":74,"cipher-base":75,"inherits":180,"ripemd160":307,"sha.js":320}],79:[function(require,module,exports){ (function (Buffer){ 'use strict' var intSize = 4 var zeroBuffer = new Buffer(intSize) zeroBuffer.fill(0) var charSize = 8 var hashSize = 16 function toArray (buf) { if ((buf.length % intSize) !== 0) { var len = buf.length + (intSize - (buf.length % intSize)) buf = Buffer.concat([buf, zeroBuffer], len) } var arr = new Array(buf.length >>> 2) for (var i = 0, j = 0; i < buf.length; i += intSize, j++) { arr[j] = buf.readInt32LE(i) } return arr } module.exports = function hash (buf, fn) { var arr = fn(toArray(buf), buf.length * charSize) buf = new Buffer(hashSize) for (var i = 0; i < arr.length; i++) { buf.writeInt32LE(arr[i], i << 2, true) } return buf } }).call(this,require("buffer").Buffer) },{"buffer":74}],80:[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 makeHash = require('./make-hash') /* * 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 var a = 1732584193 var b = -271733879 var c = -1732584194 var d = 271733878 for (var i = 0; i < x.length; i += 16) { var olda = a var oldb = b var oldc = c var oldd = d 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) 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) 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) 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) a = safe_add(a, olda) b = safe_add(b, oldb) c = safe_add(c, oldc) d = safe_add(d, oldd) } return [a, b, c, d] } /* * 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) } 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) } /* * 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) } /* * Bitwise rotate a 32-bit number to the left. */ function bit_rol (num, cnt) { return (num << cnt) | (num >>> (32 - cnt)) } module.exports = function md5 (buf) { return makeHash(buf, core_md5) } },{"./make-hash":79}],81:[function(require,module,exports){ 'use strict' var inherits = require('inherits') var Legacy = require('./legacy') var Base = require('cipher-base') var Buffer = require('safe-buffer').Buffer var md5 = require('create-hash/md5') var RIPEMD160 = require('ripemd160') var sha = require('sha.js') var ZEROS = Buffer.alloc(128) function Hmac (alg, key) { Base.call(this, 'digest') if (typeof key === 'string') { key = Buffer.from(key) } var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 this._alg = alg this._key = key if (key.length > blocksize) { var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) key = hash.update(key).digest() } else if (key.length < blocksize) { key = Buffer.concat([key, ZEROS], blocksize) } var ipad = this._ipad = Buffer.allocUnsafe(blocksize) var opad = this._opad = Buffer.allocUnsafe(blocksize) for (var i = 0; i < blocksize; i++) { ipad[i] = key[i] ^ 0x36 opad[i] = key[i] ^ 0x5C } this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) this._hash.update(ipad) } inherits(Hmac, Base) Hmac.prototype._update = function (data) { this._hash.update(data) } Hmac.prototype._final = function () { var h = this._hash.digest() var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg) return hash.update(this._opad).update(h).digest() } module.exports = function createHmac (alg, key) { alg = alg.toLowerCase() if (alg === 'rmd160' || alg === 'ripemd160') { return new Hmac('rmd160', key) } if (alg === 'md5') { return new Legacy(md5, key) } return new Hmac(alg, key) } },{"./legacy":82,"cipher-base":75,"create-hash/md5":80,"inherits":180,"ripemd160":307,"safe-buffer":311,"sha.js":320}],82:[function(require,module,exports){ 'use strict' var inherits = require('inherits') var Buffer = require('safe-buffer').Buffer var Base = require('cipher-base') var ZEROS = Buffer.alloc(128) var blocksize = 64 function Hmac (alg, key) { Base.call(this, 'digest') if (typeof key === 'string') { key = Buffer.from(key) } this._alg = alg this._key = key if (key.length > blocksize) { key = alg(key) } else if (key.length < blocksize) { key = Buffer.concat([key, ZEROS], blocksize) } var ipad = this._ipad = Buffer.allocUnsafe(blocksize) var opad = this._opad = Buffer.allocUnsafe(blocksize) for (var i = 0; i < blocksize; i++) { ipad[i] = key[i] ^ 0x36 opad[i] = key[i] ^ 0x5C } this._hash = [ipad] } inherits(Hmac, Base) Hmac.prototype._update = function (data) { this._hash.push(data) } Hmac.prototype._final = function () { var h = this._alg(Buffer.concat(this._hash)) return this._alg(Buffer.concat([this._opad, h])) } module.exports = Hmac },{"cipher-base":75,"inherits":180,"safe-buffer":311}],83:[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 algos = require('browserify-sign/algos') var algoKeys = Object.keys(algos) var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) exports.getHashes = function () { return hashes } var p = require('pbkdf2') exports.pbkdf2 = p.pbkdf2 exports.pbkdf2Sync = p.pbkdf2Sync var aes = require('browserify-cipher') exports.Cipher = aes.Cipher exports.createCipher = aes.createCipher exports.Cipheriv = aes.Cipheriv exports.createCipheriv = aes.createCipheriv exports.Decipher = aes.Decipher exports.createDecipher = aes.createDecipher exports.Decipheriv = aes.Decipheriv exports.createDecipheriv = aes.createDecipheriv exports.getCiphers = aes.getCiphers exports.listCiphers = aes.listCiphers var dh = require('diffie-hellman') exports.DiffieHellmanGroup = dh.DiffieHellmanGroup exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup exports.getDiffieHellman = dh.getDiffieHellman exports.createDiffieHellman = dh.createDiffieHellman exports.DiffieHellman = dh.DiffieHellman var sign = require('browserify-sign') exports.createSign = sign.createSign exports.Sign = sign.Sign exports.createVerify = sign.createVerify exports.Verify = sign.Verify exports.createECDH = require('create-ecdh') var publicEncrypt = require('public-encrypt') exports.publicEncrypt = publicEncrypt.publicEncrypt exports.privateEncrypt = publicEncrypt.privateEncrypt exports.publicDecrypt = publicEncrypt.publicDecrypt exports.privateDecrypt = publicEncrypt.privateDecrypt // 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')) // } // }) exports.createCredentials = function () { throw new Error([ 'sorry, createCredentials is not implemented yet', 'we accept pull requests', 'https://github.com/crypto-browserify/crypto-browserify' ].join('\n')) } exports.constants = { 'DH_CHECK_P_NOT_SAFE_PRIME': 2, 'DH_CHECK_P_NOT_PRIME': 1, 'DH_UNABLE_TO_CHECK_GENERATOR': 4, 'DH_NOT_SUITABLE_GENERATOR': 8, 'NPN_ENABLED': 1, 'ALPN_ENABLED': 1, 'RSA_PKCS1_PADDING': 1, 'RSA_SSLV23_PADDING': 2, 'RSA_NO_PADDING': 3, 'RSA_PKCS1_OAEP_PADDING': 4, 'RSA_X931_PADDING': 5, 'RSA_PKCS1_PSS_PADDING': 6, 'POINT_CONVERSION_COMPRESSED': 2, 'POINT_CONVERSION_UNCOMPRESSED': 4, 'POINT_CONVERSION_HYBRID': 6 } },{"browserify-cipher":61,"browserify-sign":69,"browserify-sign/algos":66,"create-ecdh":77,"create-hash":78,"create-hmac":81,"diffie-hellman":92,"pbkdf2":279,"public-encrypt":287,"randombytes":293}],84:[function(require,module,exports){ var util = require('util') , AbstractIterator = require('abstract-leveldown').AbstractIterator function DeferredIterator (options) { AbstractIterator.call(this, options) this._options = options this._iterator = null this._operations = [] } util.inherits(DeferredIterator, AbstractIterator) DeferredIterator.prototype.setDb = function (db) { var it = this._iterator = db.iterator(this._options) this._operations.forEach(function (op) { it[op.method].apply(it, op.args) }) } DeferredIterator.prototype._operation = function (method, args) { if (this._iterator) return this._iterator[method].apply(this._iterator, args) this._operations.push({ method: method, args: args }) } 'next end'.split(' ').forEach(function (m) { DeferredIterator.prototype['_' + m] = function () { this._operation(m, arguments) } }) module.exports = DeferredIterator; },{"abstract-leveldown":4,"util":334}],85:[function(require,module,exports){ (function (Buffer,process){ var util = require('util') , AbstractLevelDOWN = require('abstract-leveldown').AbstractLevelDOWN , DeferredIterator = require('./deferred-iterator') function DeferredLevelDOWN (location) { AbstractLevelDOWN.call(this, typeof location == 'string' ? location : '') // optional location, who cares? this._db = undefined this._operations = [] this._iterators = [] } util.inherits(DeferredLevelDOWN, AbstractLevelDOWN) // called by LevelUP when we have a real DB to take its place DeferredLevelDOWN.prototype.setDb = function (db) { this._db = db this._operations.forEach(function (op) { db[op.method].apply(db, op.args) }) this._iterators.forEach(function (it) { it.setDb(db) }) } DeferredLevelDOWN.prototype._open = function (options, callback) { return process.nextTick(callback) } // queue a new deferred operation DeferredLevelDOWN.prototype._operation = function (method, args) { if (this._db) return this._db[method].apply(this._db, args) this._operations.push({ method: method, args: args }) } // deferrables 'put get del batch approximateSize'.split(' ').forEach(function (m) { DeferredLevelDOWN.prototype['_' + m] = function () { this._operation(m, arguments) } }) DeferredLevelDOWN.prototype._isBuffer = function (obj) { return Buffer.isBuffer(obj) } DeferredLevelDOWN.prototype._iterator = function (options) { if (this._db) return this._db.iterator.apply(this._db, arguments) var it = new DeferredIterator(options) this._iterators.push(it) return it } module.exports = DeferredLevelDOWN module.exports.DeferredIterator = DeferredIterator }).call(this,{"isBuffer":require("../is-buffer/index.js")},require('_process')) },{"../is-buffer/index.js":181,"./deferred-iterator":84,"_process":285,"abstract-leveldown":4,"util":334}],86:[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":87,"./des/cipher":88,"./des/des":89,"./des/ede":90,"./des/utils":91}],87:[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]; } function instantiate(Base) { function CBC(options) { Base.call(this, options); this._cbcInit(); } inherits(CBC, Base); var keys = Object.keys(proto); for (var i = 0; i < keys.length; i++) { var key = keys[i]; CBC.prototype[key] = proto[key]; } CBC.create = function create(options) { return new CBC(options); }; return CBC; } exports.instantiate = instantiate; proto._cbcInit = function _cbcInit() { var state = new CBCState(this.options.iv); this._cbcState = state; }; proto._update = function _update(inp, inOff, out, outOff) { var state = this._cbcState; var superProto = this.constructor.super_.prototype; var iv = state.iv; if (this.type === 'encrypt') { for (var i = 0; i < this.blockSize; i++) iv[i] ^= inp[inOff + i]; superProto._update.call(this, iv, 0, out, outOff); for (var i = 0; i < this.blockSize; i++) iv[i] = out[outOff + i]; } else { superProto._update.call(this, inp, inOff, out, outOff); 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]; } }; },{"inherits":180,"minimalistic-assert":267}],88:[function(require,module,exports){ 'use strict'; 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; Cipher.prototype._init = function _init() { // Might be overrided }; Cipher.prototype.update = function update(data) { if (data.length === 0) return []; if (this.type === 'decrypt') return this._updateDecrypt(data); else return this._updateEncrypt(data); }; 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; // Shift next return min; }; Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { this._update(this.buffer, 0, out, off); this.bufferOff = 0; return this.blockSize; }; 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; } // Queue rest for (; inputOff < data.length; inputOff++, this.bufferOff++) this.buffer[this.bufferOff] = data[inputOff]; return out; }; Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { var inputOff = 0; var outputOff = 0; var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; var out = new Array(count * this.blockSize); // TODO(indutny): optimize it, this is far from optimal for (; count > 0; count--) { inputOff += this._buffer(data, inputOff); outputOff += this._flushBuffer(out, outputOff); } // Buffer rest of the input inputOff += this._buffer(data, inputOff); return out; }; 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; }; Cipher.prototype._pad = function _pad(buffer, off) { if (off === 0) return false; while (off < buffer.length) buffer[off++] = 0; return true; }; 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; }; Cipher.prototype._unpad = function _unpad(buffer) { return buffer; }; 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":267}],89:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); var inherits = require('inherits'); var des = require('../des'); var utils = des.utils; var Cipher = des.Cipher; function DESState() { this.tmp = new Array(2); this.keys = null; } function DES(options) { Cipher.call(this, options); var state = new DESState(); this._desState = state; this.deriveKeys(state, options.key); } inherits(DES, Cipher); module.exports = DES; DES.create = function create(options) { return new DES(options); }; var shiftTable = [ 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 ]; DES.prototype.deriveKeys = function deriveKeys(state, key) { state.keys = new Array(16 * 2); assert.equal(key.length, this.blockSize, 'Invalid key length'); 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 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; }; 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); 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]; // f(r, k) utils.expand(r, state.tmp, 0); keyL ^= state.tmp[0]; keyR ^= state.tmp[1]; var s = utils.substitute(keyL, keyR); var f = utils.permute(s); var t = r; r = (l ^ f) >>> 0; l = t; } // Reverse Initial Permutation utils.rip(r, l, out, off); }; DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { var l = rStart; var r = lStart; // 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]; // f(r, k) utils.expand(l, state.tmp, 0); keyL ^= state.tmp[0]; keyR ^= state.tmp[1]; var s = utils.substitute(keyL, keyR); var f = utils.permute(s); var t = l; l = (r ^ f) >>> 0; r = t; } // Reverse Initial Permutation utils.rip(l, r, out, off); }; },{"../des":86,"inherits":180,"minimalistic-assert":267}],90:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); var inherits = require('inherits'); var des = require('../des'); var Cipher = des.Cipher; var DES = des.DES; function EDEState(type, key) { assert.equal(key.length, 24, 'Invalid key length'); var k1 = key.slice(0, 8); var k2 = key.slice(8, 16); var k3 = key.slice(16, 24); 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 EDE(options) { Cipher.call(this, options); var state = new EDEState(this.type, this.options.key); this._edeState = state; } inherits(EDE, Cipher); module.exports = EDE; EDE.create = function create(options) { return new EDE(options); }; EDE.prototype._update = function _update(inp, inOff, out, outOff) { var state = this._edeState; 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; },{"../des":86,"inherits":180,"minimalistic-assert":267}],91:[function(require,module,exports){ 'use strict'; 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; }; 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; }; exports.ip = function ip(inL, inR, out, off) { var outL = 0; var outR = 0; 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; } } 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; } } out[off + 0] = outL >>> 0; out[off + 1] = outR >>> 0; }; exports.rip = function rip(inL, inR, out, off) { var outL = 0; var outR = 0; 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; } } out[off + 0] = outL >>> 0; out[off + 1] = outR >>> 0; }; exports.pc1 = function pc1(inL, inR, out, off) { var outL = 0; var outR = 0; // 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; } } 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 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; } out[off + 0] = outL >>> 0; out[off + 1] = outR >>> 0; }; exports.r28shl = function r28shl(num, shift) { return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); }; 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, // 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 ]; exports.pc2 = function pc2(inL, inR, out, off) { var outL = 0; var outR = 0; 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; } out[off + 0] = outL >>> 0; out[off + 1] = outR >>> 0; }; exports.expand = function expand(r, out, off) { var outL = 0; var outR = 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); out[off + 0] = outL >>> 0; out[off + 1] = outR >>> 0; }; 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, 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 ]; 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]; 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]; out <<= 4; out |= sb; } return out >>> 0; }; 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 ]; 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; }; 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(' '); }; },{}],92:[function(require,module,exports){ (function (Buffer){ var generatePrime = require('./lib/generatePrime') var primes = require('./lib/primes.json') var DH = require('./lib/dh') function getDiffieHellman (mod) { var prime = new Buffer(primes[mod].prime, 'hex') var gen = new Buffer(primes[mod].gen, 'hex') return new DH(prime, gen) } 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) } enc = enc || 'binary' genc = genc || 'binary' generator = generator || new Buffer([2]) if (!Buffer.isBuffer(generator)) { generator = new Buffer(generator, genc) } if (typeof prime === 'number') { return new DH(generatePrime(prime, generator), generator, true) } if (!Buffer.isBuffer(prime)) { prime = new Buffer(prime, enc) } return new DH(prime, generator, true) } exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman }).call(this,require("buffer").Buffer) },{"./lib/dh":93,"./lib/generatePrime":94,"./lib/primes.json":95,"buffer":74}],93:[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); } this._pub = new BN(pub); return this; } 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; } 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; } } 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; }; DH.prototype.getPublicKey = function getPublicKey(enc) { return formatReturnValue(this._pub, enc); }; DH.prototype.getPrivateKey = function getPrivateKey(enc) { return formatReturnValue(this._priv, enc); }; DH.prototype.getPrime = function (enc) { return formatReturnValue(this.__prime, enc); }; DH.prototype.getGenerator = function (enc) { return formatReturnValue(this._gen, enc); }; 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 formatReturnValue(bn, enc) { var buf = new Buffer(bn.toArray()); if (!enc) { return buf; } else { return buf.toString(enc); } } }).call(this,require("buffer").Buffer) },{"./generatePrime":94,"bn.js":41,"buffer":74,"miller-rabin":266,"randombytes":293}],94:[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 _getPrimes() { if (primes !== null) return primes; 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; if (i !== j && res[j] <= sqrt) continue; res[i++] = k; } primes = res; return res; } function simpleSieve(p) { var primes = _getPrimes(); 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; } function fermatTest(p) { var red = BN.mont(p); return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; } 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); var num, n2; 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; } } } },{"bn.js":41,"miller-rabin":266,"randombytes":293}],95:[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" } } },{}],96:[function(require,module,exports){ 'use strict'; var elliptic = exports; elliptic.version = require('../package.json').version; elliptic.utils = require('./elliptic/utils'); elliptic.rand = require('brorand'); elliptic.curve = require('./elliptic/curve'); elliptic.curves = require('./elliptic/curves'); // Protocols elliptic.ec = require('./elliptic/ec'); elliptic.eddsa = require('./elliptic/eddsa'); },{"../package.json":111,"./elliptic/curve":99,"./elliptic/curves":102,"./elliptic/ec":103,"./elliptic/eddsa":106,"./elliptic/utils":110,"brorand":42}],97:[function(require,module,exports){ 'use strict'; 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; 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); // Curve configuration, optional this.n = conf.n && new BN(conf.n, 16); this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); // Temporary arrays this._wnafT1 = new Array(4); this._wnafT2 = new Array(4); this._wnafT3 = new Array(4); this._wnafT4 = new Array(4); // Generalized Greg Maxwell's trick var adjustCount = this.n && this.p.div(this.n); if (!adjustCount || adjustCount.cmpn(100) > 0) { this.redN = null; } else { this._maxwellTrick = true; this.redN = this.n.toRed(this.red); } } module.exports = BaseCurve; BaseCurve.prototype.point = function point() { throw new Error('Not implemented'); }; 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(); }; 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); 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; }; BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, points, coeffs, len, jacobianResult) { var wndWidth = this._wnafT1; var wnd = this._wnafT2; var naf = this._wnafT3; // 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; } // 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; naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; naf[b][j] = 0; wnd[a] = comb; } } 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; 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); } } // Zeroify references for (var i = 0; i < len; i++) wnd[i] = null; if (jacobianResult) return acc; else return acc.toP(); }; function BasePoint(curve, type) { this.curve = curve; this.type = type; this.precomputed = null; } BaseCurve.BasePoint = BasePoint; BasePoint.prototype.eq = function eq(/*other*/) { throw new Error('Not implemented'); }; BasePoint.prototype.validate = function validate() { return this.curve.validate(this); }; BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { bytes = utils.toArray(bytes, enc); var len = this.p.byteLength(); // uncompressed, hybrid-odd, hybrid-even if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && bytes.length - 1 === 2 * len) { if (bytes[0] === 0x06) assert(bytes[bytes.length - 1] % 2 === 0); else if (bytes[0] === 0x07) assert(bytes[bytes.length - 1] % 2 === 1); var res = this.point(bytes.slice(1, 1 + len), bytes.slice(1 + len, 1 + 2 * len)); return res; } 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'); }; BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { return this.encode(enc, true); }; BasePoint.prototype._encode = function _encode(compact) { var len = this.curve.p.byteLength(); var x = this.getX().toArray('be', len); if (compact) return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; }; BasePoint.prototype.encode = function encode(enc, compact) { return utils.encode(this._encode(compact), enc); }; 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; }; BasePoint.prototype._hasDoubles = function _hasDoubles(k) { if (!this.precomputed) return false; var doubles = this.precomputed.doubles; if (!doubles) return false; return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); }; BasePoint.prototype._getDoubles = function _getDoubles(step, power) { if (this.precomputed && this.precomputed.doubles) return this.precomputed.doubles; 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 }; }; BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { if (this.precomputed && this.precomputed.naf) return this.precomputed.naf; 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 }; }; 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; }; },{"../../elliptic":96,"bn.js":41}],98:[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; 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; Base.call(this, 'edwards', conf); 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); assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); this.oneC = (conf.c | 0) === 1; } inherits(EdwardsCurve, Base); module.exports = EdwardsCurve; EdwardsCurve.prototype._mulA = function _mulA(num) { if (this.mOneA) return num.redNeg(); else return this.a.redMul(num); }; EdwardsCurve.prototype._mulC = function _mulC(num) { if (this.oneC) return num; else return this.c.redMul(num); }; // Just for compatibility with Short curve EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { return this.point(x, y, z, t); }; EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { x = new BN(x, 16); if (!x.red) x = x.toRed(this.red); 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)); var y2 = rhs.redMul(lhs.redInvm()); var y = y2.redSqrt(); if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); var isOdd = y.fromRed().isOdd(); if (odd && !isOdd || !odd && isOdd) y = y.redNeg(); return this.point(x, y); }; EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { y = new BN(y, 16); if (!y.red) y = y.toRed(this.red); // 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 (x2.cmp(this.zero) === 0) { if (odd) throw new Error('invalid point'); else return this.point(this.zero, y); } var x = x2.redSqrt(); if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) throw new Error('invalid point'); if (x.isOdd() !== odd) x = x.redNeg(); return this.point(x, y); }; EdwardsCurve.prototype.validate = function validate(point) { if (point.isInfinity()) return true; // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) point.normalize(); 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 lhs.cmp(rhs) === 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; // 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); EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { return Point.fromJSON(this, obj); }; EdwardsCurve.prototype.point = function point(x, y, z, t) { return new Point(this, x, y, z, t); }; 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 ''; }; 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; }; Point.prototype._extDbl = function _extDbl() { // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html // #doubling-dbl-2008-hwcd // 4M + 4S // 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); }; 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(); 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); }; Point.prototype.dbl = function dbl() { if (this.isInfinity()) return this; // Double in extended coordinates if (this.curve.extended) return this._extDbl(); else return this._projDbl(); }; Point.prototype._extAdd = function _extAdd(p) { // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html // #addition-add-2008-hwcd-3 // 8M // 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); }; Point.prototype._projAdd = function _projAdd(p) { // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html // #addition-add-2008-bbjlp // #addition-add-2007-bl // 10M + 1S // 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); }; Point.prototype.add = function add(p) { if (this.isInfinity()) return p; if (p.isInfinity()) return this; if (this.curve.extended) return this._extAdd(p); else return this._projAdd(p); }; Point.prototype.mul = function mul(k) { if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k); else return this.curve._wnafMul(this, k); }; Point.prototype.mulAdd = function mulAdd(k1, p, k2) { return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); }; Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); }; 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; }; Point.prototype.neg = function neg() { return this.curve.point(this.x.redNeg(), this.y, this.z, this.t && this.t.redNeg()); }; Point.prototype.getX = function getX() { this.normalize(); return this.x.fromRed(); }; Point.prototype.getY = function getY() { this.normalize(); return this.y.fromRed(); }; Point.prototype.eq = function eq(other) { return this === other || this.getX().cmp(other.getX()) === 0 && this.getY().cmp(other.getY()) === 0; }; Point.prototype.eqXToP = function eqXToP(x) { var rx = x.toRed(this.curve.red).redMul(this.z); if (this.x.cmp(rx) === 0) return true; var xc = x.clone(); var t = this.curve.redN.redMul(this.z); for (;;) { xc.iadd(this.curve.n); if (xc.cmp(this.curve.p) >= 0) return false; rx.redIAdd(t); if (this.x.cmp(rx) === 0) return true; } return false; }; // Compatibility with BaseCurve Point.prototype.toP = Point.prototype.normalize; Point.prototype.mixedAdd = Point.prototype.add; },{"../../elliptic":96,"../curve":99,"bn.js":41,"inherits":180}],99:[function(require,module,exports){ 'use strict'; var curve = exports; curve.base = require('./base'); curve.short = require('./short'); curve.mont = require('./mont'); curve.edwards = require('./edwards'); },{"./base":97,"./edwards":98,"./mont":100,"./short":101}],100:[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; function MontCurve(conf) { Base.call(this, 'mont', conf); 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; 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 y.redSqr().cmp(rhs) === 0; }; 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); MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { return this.point(utils.toArray(bytes, enc), 1); }; MontCurve.prototype.point = function point(x, z) { return new Point(this, x, z); }; MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { return Point.fromJSON(this, obj); }; Point.prototype.precompute = function precompute() { // No-op }; Point.prototype._encode = function _encode() { return this.getX().toArray('be', this.curve.p.byteLength()); }; Point.fromJSON = function fromJSON(curve, obj) { return new Point(curve, obj[0], obj[1] || curve.one); }; Point.prototype.inspect = function inspect() { if (this.isInfinity()) return ''; return ''; }; Point.prototype.isInfinity = function isInfinity() { // XXX This code assumes that zero is always zero in red return this.z.cmpn(0) === 0; }; 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); }; Point.prototype.add = function add() { throw new Error('Not supported on Montgomery curve'); }; 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); }; 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 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) bits.push(t.andln(1)); 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; }; Point.prototype.mulAdd = function mulAdd() { throw new Error('Not supported on Montgomery curve'); }; Point.prototype.jumlAdd = function jumlAdd() { throw new Error('Not supported on Montgomery curve'); }; Point.prototype.eq = function eq(other) { return this.getX().cmp(other.getX()) === 0; }; Point.prototype.normalize = function normalize() { this.x = this.x.redMul(this.z.redInvm()); this.z = this.curve.one; return this; }; Point.prototype.getX = function getX() { // Normalize coordinates this.normalize(); return this.x.fromRed(); }; },{"../../elliptic":96,"../curve":99,"bn.js":41,"inherits":180}],101:[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; 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(); this.zeroA = this.a.fromRed().cmpn(0) === 0; this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; // 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; // 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); } } // 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); } return { beta: beta, lambda: lambda, basis: basis }; }; 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 s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); var l1 = ntinv.redAdd(s).fromRed(); var l2 = ntinv.redSub(s).fromRed(); return [ l1, l2 ]; }; ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { // aprxSqrt >= sqrt(this.n) var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); // 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); // 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; 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 (!a1 && r.cmp(aprxSqrt) < 0) { a0 = prevR.neg(); b0 = x1; a1 = r.neg(); b1 = x; } else if (a1 && ++i === 2) { break; } prevR = r; v = u; u = r; x2 = x1; x1 = x; y2 = y1; y1 = y; } a2 = r.neg(); b2 = x; var len1 = a1.sqr().add(b1.sqr()); var len2 = a2.sqr().add(b2.sqr()); if (len2.cmp(len1) >= 0) { a2 = a0; b2 = b0; } // Normalize signs if (a1.negative) { a1 = a1.neg(); b1 = b1.neg(); } if (a2.negative) { a2 = a2.neg(); b2 = b2.neg(); } return [ { a: a1, b: b1 }, { a: a2, b: b2 } ]; }; 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 p1 = c1.mul(v1.a); var p2 = c2.mul(v2.a); var q1 = c1.mul(v1.b); var q2 = c2.mul(v2.b); // Calculate answer var k1 = k.sub(p1).sub(p2); var k2 = q1.add(q2).neg(); return { k1: k1, k2: k2 }; }; ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { 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(); if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); // 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(); return this.point(x, y); }; 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; }; ShortCurve.prototype._endoWnafMulAdd = function _endoWnafMulAdd(points, coeffs, jacobianResult) { 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); } 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, jacobianResult); // Clean-up references to points and coefficients for (var j = 0; j < i * 2; j++) { npoints[j] = null; ncoeffs[j] = null; } 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; } } inherits(Point, Base.BasePoint); ShortCurve.prototype.point = function point(x, y, isRed) { return new Point(this, x, y, isRed); }; 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; }; 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) } } ]; }; 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); } 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; }; Point.prototype.inspect = function inspect() { if (this.isInfinity()) return ''; return ''; }; Point.prototype.isInfinity = function isInfinity() { return this.inf; }; Point.prototype.add = function add(p) { // O + P = P if (this.inf) return p; // P + O = P if (p.inf) return this; // P + P = 2P if (this.eq(p)) return this.dbl(); // P + (-P) = O if (this.neg().eq(p)) return this.curve.point(null, null); // P + Q = O if (this.x.cmp(p.x) === 0) return this.curve.point(null, null); 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); var a = this.curve.a; var x2 = this.x.redSqr(); var dyinv = ys1.redInvm(); var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); 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); }; Point.prototype.getX = function getX() { return this.x.fromRed(); }; Point.prototype.getY = function getY() { return this.y.fromRed(); }; 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.jmulAdd = function jmulAdd(k1, p2, k2) { var points = [ this, p2 ]; var coeffs = [ k1, k2 ]; if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs, true); else return this.curve._wnafMulAdd(1, points, coeffs, 2, true); }; 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 res; }; 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; }; 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); }; 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); }; 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; // 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(); } 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); }; JPoint.prototype.mixedAdd = function mixedAdd(p) { // O + P = P if (this.isInfinity()) return p.toJ(); // 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); 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); }; 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); }; 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._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 // 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 { // 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); } 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 // 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 // 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 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); }; JPoint.prototype.mul = function mul(k, kbase) { k = new BN(k, kbase); return this.curve._wnafMul(this, k); }; JPoint.prototype.eq = function eq(p) { if (p.type === 'affine') return this.eq(p.toJ()); 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; // 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; }; JPoint.prototype.eqXToP = function eqXToP(x) { var zs = this.z.redSqr(); var rx = x.toRed(this.curve.red).redMul(zs); if (this.x.cmp(rx) === 0) return true; var xc = x.clone(); var t = this.curve.redN.redMul(zs); for (;;) { xc.iadd(this.curve.n); if (xc.cmp(this.curve.p) >= 0) return false; rx.redIAdd(t); if (this.x.cmp(rx) === 0) return true; } return false; }; JPoint.prototype.inspect = function inspect() { if (this.isInfinity()) return ''; return ''; }; JPoint.prototype.isInfinity = function isInfinity() { // XXX This code assumes that zero is always zero in red return this.z.cmpn(0) === 0; }; },{"../../elliptic":96,"../curve":99,"bn.js":41,"inherits":180}],102:[function(require,module,exports){ 'use strict'; var curves = exports; var hash = require('hash.js'); var elliptic = require('../elliptic'); var assert = elliptic.utils.assert; 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; assert(this.g.validate(), 'Invalid curve'); assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); } curves.PresetCurve = PresetCurve; 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; } }); } 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' ] }); 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' ] }); 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' ] }); 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' ] }); 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' ] }); defineCurve('curve25519', { type: 'mont', prime: 'p25519', p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', a: '76d06', b: '1', n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', hash: hash.sha256, gRed: false, g: [ '9' ] }); 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', // 4/5 '6666666666666666666666666666666666666666666666666666666666666658' ] }); var pre; try { pre = require('./precomputed/secp256k1'); } catch (e) { pre = undefined; } 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, // Precomputed endomorphism beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', basis: [ { a: '3086d221a7d46bcde86c90e49284eb15', b: '-e4437ed6010e88286f547fa90abfe4c3' }, { a: '114ca50f7a8e2f3f657c1108d9d44cfd8', b: '3086d221a7d46bcde86c90e49284eb15' } ], gRed: false, g: [ '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', pre ] }); },{"../elliptic":96,"./precomputed/secp256k1":109,"hash.js":159}],103:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); var HmacDRBG = require('hmac-drbg'); var elliptic = require('../../elliptic'); var utils = elliptic.utils; var assert = utils.assert; var KeyPair = require('./key'); var Signature = require('./signature'); function EC(options) { if (!(this instanceof EC)) return new EC(options); // Shortcut `elliptic.ec(curve-name)` if (typeof options === 'string') { assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options); options = elliptic.curves[options]; } // Shortcut for `elliptic.ec(elliptic.curves.curveName)` if (options instanceof elliptic.curves.PresetCurve) options = { curve: options }; this.curve = options.curve.curve; this.n = this.curve.n; this.nh = this.n.ushrn(1); this.g = this.curve.g; // Point on curve this.g = options.curve.g; this.g.precompute(options.curve.n.bitLength() + 1); // Hash for function for DRBG this.hash = options.hash || options.curve.hash; } module.exports = EC; EC.prototype.keyPair = function keyPair(options) { return new KeyPair(this, options); }; EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { return KeyPair.fromPrivate(this, priv, enc); }; EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { return KeyPair.fromPublic(this, pub, enc); }; EC.prototype.genKeyPair = function genKeyPair(options) { if (!options) options = {}; // Instantiate Hmac_DRBG var drbg = new HmacDRBG({ hash: this.hash, pers: options.pers, persEnc: options.persEnc || 'utf8', entropy: options.entropy || elliptic.rand(this.hash.hmacStrength), entropyEnc: options.entropy && options.entropyEnc || 'utf8', 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; priv.iaddn(1); return this.keyFromPrivate(priv); } while (true); }; 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; }; 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)); // Zero-extend key to provide enough entropy var bytes = this.n.byteLength(); var bkey = key.getPrivate().toArray('be', bytes); // Zero-extend nonce to have the same byte size as N var nonce = msg.toArray('be', bytes); // Instantiate Hmac_DRBG var drbg = new HmacDRBG({ hash: this.hash, entropy: bkey, nonce: nonce, pers: options.pers, persEnc: options.persEnc || 'utf8' }); // Number of bytes to generate var ns1 = this.n.sub(new BN(1)); 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; var kp = this.g.mul(k); if (kp.isInfinity()) continue; var kpX = kp.getX(); var r = kpX.umod(this.n); if (r.cmpn(0) === 0) continue; var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); s = s.umod(this.n); if (s.cmpn(0) === 0) continue; var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | (kpX.cmp(r) !== 0 ? 2 : 0); // 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 new Signature({ r: r, s: s, recoveryParam: recoveryParam }); } }; 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; // 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.curve._maxwellTrick) { var p = this.g.mulAdd(u1, key.getPublic(), u2); if (p.isInfinity()) return false; return p.getX().umod(this.n).cmp(r) === 0; } // NOTE: Greg Maxwell's trick, inspired by: // https://git.io/vad3K var p = this.g.jmulAdd(u1, key.getPublic(), u2); if (p.isInfinity()) return false; // Compare `p.x` of Jacobian point with `r`, // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the // inverse of `p.z^2` return p.eqXToP(r); }; 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); var rInv = signature.r.invm(n); var s1 = n.sub(e).mul(rInv).umod(n); var s2 = s.mul(rInv).umod(n); // 1.6.1 Compute Q = r^-1 (sR - eG) // Q = r^-1 (sR + -eG) return this.g.mulAdd(s1, r, s2); }; EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { signature = new Signature(signature, enc); if (signature.recoveryParam !== null) return signature.recoveryParam; for (var i = 0; i < 4; i++) { var Qprime; try { Qprime = this.recoverPubKey(e, signature, i); } catch (e) { continue; } if (Qprime.eq(Q)) return i; } throw new Error('Unable to find valid recovery factor'); }; },{"../../elliptic":96,"./key":104,"./signature":105,"bn.js":41,"hmac-drbg":171}],104:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); var elliptic = require('../../elliptic'); var utils = elliptic.utils; var assert = utils.assert; function KeyPair(ec, options) { this.ec = ec; this.priv = null; this.pub = null; // 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; KeyPair.fromPublic = function fromPublic(ec, pub, enc) { if (pub instanceof KeyPair) return pub; return new KeyPair(ec, { pub: pub, pubEnc: enc }); }; KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { if (priv instanceof KeyPair) return priv; return new KeyPair(ec, { priv: priv, privEnc: enc }); }; 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' }; return { result: true, reason: null }; }; KeyPair.prototype.getPublic = function getPublic(compact, enc) { // compact is optional argument if (typeof compact === 'string') { enc = compact; compact = null; } if (!this.pub) this.pub = this.ec.g.mul(this.priv); if (!enc) return this.pub; return this.pub.encode(enc, compact); }; KeyPair.prototype.getPrivate = function getPrivate(enc) { if (enc === 'hex') return this.priv.toString(16, 2); else return this.priv; }; KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { this.priv = new BN(key, enc || 16); // 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); }; KeyPair.prototype._importPublic = function _importPublic(key, enc) { if (key.x || key.y) { // Montgomery points only have an `x` coordinate. // Weierstrass/Edwards points on the other hand have both `x` and // `y` coordinates. if (this.ec.curve.type === 'mont') { assert(key.x, 'Need x coordinate'); } else if (this.ec.curve.type === 'short' || this.ec.curve.type === 'edwards') { assert(key.x && key.y, 'Need both x and y coordinate'); } this.pub = this.ec.curve.point(key.x, key.y); return; } this.pub = this.ec.curve.decodePoint(key, enc); }; // ECDH KeyPair.prototype.derive = function derive(pub) { return pub.mul(this.priv).getX(); }; // ECDSA KeyPair.prototype.sign = function sign(msg, enc, options) { return this.ec.sign(msg, this, enc, options); }; KeyPair.prototype.verify = function verify(msg, signature) { return this.ec.verify(msg, signature, this); }; KeyPair.prototype.inspect = function inspect() { return ''; }; },{"../../elliptic":96,"bn.js":41}],105:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); 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 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); } 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; return true; }; 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); } arr.push(len); } 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); }; },{"../../elliptic":96,"bn.js":41}],106:[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); this.pointClass = curve.point().constructor; this.encodingLength = Math.ceil(curve.n.bitLength() / 8); this.hash = hash.sha512; } module.exports = EDDSA; /** * @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 }); }; /** * @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); }; 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); }; EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { return KeyPair.fromPublic(this, pub); }; EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { return KeyPair.fromSecret(this, secret); }; EDDSA.prototype.makeSignature = function makeSignature(sig) { if (sig instanceof Signature) return sig; return new Signature(this, sig); }; /** * * 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; }; EDDSA.prototype.decodePoint = function decodePoint(bytes) { bytes = utils.parseBytes(bytes); var lastIx = bytes.length - 1; var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); var xIsOdd = (bytes[lastIx] & 0x80) !== 0; var y = utils.intFromLE(normed); return this.curve.pointFromY(y, xIsOdd); }; EDDSA.prototype.encodeInt = function encodeInt(num) { return num.toArray('le', this.encodingLength); }; EDDSA.prototype.decodeInt = function decodeInt(bytes) { return utils.intFromLE(bytes); }; EDDSA.prototype.isPoint = function isPoint(val) { return val instanceof this.pointClass; }; },{"../../elliptic":96,"./key":107,"./signature":108,"hash.js":159}],107:[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); } KeyPair.fromPublic = function fromPublic(eddsa, pub) { if (pub instanceof KeyPair) return pub; return new KeyPair(eddsa, { pub: pub }); }; KeyPair.fromSecret = function fromSecret(eddsa, secret) { if (secret instanceof KeyPair) return secret; return new KeyPair(eddsa, { secret: secret }); }; KeyPair.prototype.secret = function secret() { return this._secret; }; cachedProperty(KeyPair, 'pubBytes', function pubBytes() { return this.eddsa.encodePoint(this.pub()); }); cachedProperty(KeyPair, 'pub', function pub() { if (this._pubBytes) return this.eddsa.decodePoint(this._pubBytes); return this.eddsa.g.mul(this.priv()); }); cachedProperty(KeyPair, 'privBytes', function privBytes() { var eddsa = this.eddsa; var hash = this.hash(); var lastIx = eddsa.encodingLength - 1; var a = hash.slice(0, eddsa.encodingLength); a[0] &= 248; a[lastIx] &= 127; a[lastIx] |= 64; return a; }); cachedProperty(KeyPair, 'priv', function priv() { return this.eddsa.decodeInt(this.privBytes()); }); cachedProperty(KeyPair, 'hash', function hash() { return this.eddsa.hash().update(this.secret()).digest(); }); cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { return this.hash().slice(this.eddsa.encodingLength); }); KeyPair.prototype.sign = function sign(message) { assert(this._secret, 'KeyPair can only verify'); return this.eddsa.sign(message, this); }; KeyPair.prototype.verify = function verify(message, sig) { return this.eddsa.verify(message, sig, this); }; KeyPair.prototype.getSecret = function getSecret(enc) { assert(this._secret, 'KeyPair is public only'); return utils.encode(this.secret(), enc); }; KeyPair.prototype.getPublic = function getPublic(enc) { return utils.encode(this.pubBytes(), enc); }; module.exports = KeyPair; },{"../../elliptic":96}],108:[function(require,module,exports){ 'use strict'; 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; /** * @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; if (typeof sig !== 'object') sig = parseBytes(sig); if (Array.isArray(sig)) { sig = { R: sig.slice(0, eddsa.encodingLength), S: sig.slice(eddsa.encodingLength) }; } 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; this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; } cachedProperty(Signature, 'S', function S() { return this.eddsa.decodeInt(this.Sencoded()); }); cachedProperty(Signature, 'R', function R() { return this.eddsa.decodePoint(this.Rencoded()); }); cachedProperty(Signature, 'Rencoded', function Rencoded() { return this.eddsa.encodePoint(this.R()); }); cachedProperty(Signature, 'Sencoded', function Sencoded() { return this.eddsa.encodeInt(this.S()); }); Signature.prototype.toBytes = function toBytes() { return this.Rencoded().concat(this.Sencoded()); }; Signature.prototype.toHex = function toHex() { return utils.encode(this.toBytes(), 'hex').toUpperCase(); }; module.exports = Signature; },{"../../elliptic":96,"bn.js":41}],109:[function(require,module,exports){ module.exports = { doubles: { step: 4, points: [ [ 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821' ], [ '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf' ], [ '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695' ], [ '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9' ], [ '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36' ], [ '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f' ], [ 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999' ], [ '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09' ], [ 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d' ], [ 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088' ], [ 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d' ], [ '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8' ], [ '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a' ], [ '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453' ], [ '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160' ], [ '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0' ], [ '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6' ], [ '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589' ], [ '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17' ], [ 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda' ], [ 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd' ], [ '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2' ], [ '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6' ], [ 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f' ], [ '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01' ], [ 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3' ], [ 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f' ], [ 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7' ], [ 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78' ], [ 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1' ], [ '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150' ], [ '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82' ], [ 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc' ], [ '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b' ], [ 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51' ], [ 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45' ], [ 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120' ], [ '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84' ], [ '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d' ], [ '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d' ], [ '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8' ], [ 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8' ], [ '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac' ], [ '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f' ], [ '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962' ], [ 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907' ], [ '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec' ], [ 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d' ], [ 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414' ], [ '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd' ], [ '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0' ], [ 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811' ], [ 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1' ], [ 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c' ], [ '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73' ], [ '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd' ], [ 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405' ], [ '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589' ], [ '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e' ], [ '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27' ], [ 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1' ], [ '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482' ], [ '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945' ], [ 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573' ], [ 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82' ] ] }, naf: { wnd: 7, points: [ [ 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672' ], [ '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6' ], [ '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da' ], [ 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37' ], [ '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b' ], [ 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81' ], [ 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58' ], [ 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77' ], [ '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a' ], [ '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c' ], [ '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67' ], [ '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402' ], [ 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55' ], [ 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482' ], [ '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82' ], [ '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396' ], [ '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49' ], [ '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf' ], [ '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a' ], [ '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7' ], [ 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933' ], [ '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a' ], [ '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6' ], [ 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37' ], [ '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e' ], [ 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6' ], [ 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476' ], [ '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40' ], [ '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61' ], [ '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683' ], [ 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5' ], [ '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b' ], [ 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417' ], [ '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868' ], [ '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a' ], [ 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6' ], [ '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996' ], [ '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e' ], [ 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d' ], [ '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2' ], [ '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e' ], [ '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437' ], [ '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311' ], [ 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4' ], [ '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575' ], [ '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d' ], [ '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d' ], [ 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629' ], [ 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06' ], [ '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374' ], [ '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee' ], [ 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1' ], [ 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b' ], [ '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661' ], [ '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6' ], [ 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e' ], [ '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d' ], [ 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc' ], [ '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4' ], [ '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c' ], [ 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b' ], [ 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913' ], [ '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154' ], [ '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865' ], [ '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc' ], [ '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224' ], [ '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e' ], [ '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6' ], [ '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511' ], [ '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b' ], [ 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2' ], [ '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c' ], [ 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3' ], [ 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d' ], [ 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700' ], [ 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4' ], [ '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196' ], [ '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4' ], [ '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257' ], [ 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13' ], [ 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096' ], [ 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38' ], [ 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f' ], [ '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448' ], [ 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a' ], [ 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4' ], [ '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437' ], [ '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7' ], [ 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d' ], [ 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a' ], [ 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54' ], [ '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77' ], [ 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517' ], [ '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10' ], [ 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125' ], [ 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e' ], [ '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1' ], [ 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2' ], [ 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423' ], [ 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8' ], [ '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758' ], [ '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375' ], [ 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d' ], [ '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec' ], [ '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0' ], [ '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c' ], [ 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4' ], [ '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f' ], [ '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649' ], [ '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826' ], [ '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5' ], [ 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87' ], [ '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b' ], [ 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc' ], [ '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c' ], [ 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f' ], [ 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a' ], [ 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46' ], [ '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f' ], [ '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03' ], [ '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08' ], [ '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8' ], [ '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373' ], [ '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3' ], [ '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8' ], [ '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1' ], [ '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9' ] ] } }; },{}],110:[function(require,module,exports){ 'use strict'; var utils = exports; var BN = require('bn.js'); var minAssert = require('minimalistic-assert'); var minUtils = require('minimalistic-crypto-utils'); utils.assert = minAssert; utils.toArray = minUtils.toArray; utils.zero2 = minUtils.zero2; utils.toHex = minUtils.toHex; utils.encode = minUtils.encode; // 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); // 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); } return naf; } utils.getNAF = getNAF; // Represent k1, k2 in a Joint Sparse Form function getJSF(k1, k2) { var jsf = [ [], [] ]; k1 = k1.clone(); k2 = k2.clone(); var d1 = 0; var d2 = 0; while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { // 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); 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); // 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 jsf; } utils.getJSF = getJSF; function cachedProperty(obj, name, computer) { var key = '_' + name; obj.prototype[name] = function cachedProperty() { return this[key] !== undefined ? this[key] : this[key] = computer.call(this); }; } utils.cachedProperty = cachedProperty; function parseBytes(bytes) { return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : bytes; } utils.parseBytes = parseBytes; function intFromLE(bytes) { return new BN(bytes, 'hex', 'le'); } utils.intFromLE = intFromLE; },{"bn.js":41,"minimalistic-assert":267,"minimalistic-crypto-utils":268}],111:[function(require,module,exports){ module.exports={ "_args": [ [ "elliptic@6.4.0", "/Users/hdrewes/Documents/DEV/EthereumJS/browser-builds" ] ], "_from": "elliptic@6.4.0", "_id": "elliptic@6.4.0", "_inBundle": false, "_integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "_location": "/elliptic", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "elliptic@6.4.0", "name": "elliptic", "escapedName": "elliptic", "rawSpec": "6.4.0", "saveSpec": null, "fetchSpec": "6.4.0" }, "_requiredBy": [ "/browserify-sign", "/create-ecdh", "/secp256k1" ], "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", "_spec": "6.4.0", "_where": "/Users/hdrewes/Documents/DEV/EthereumJS/browser-builds", "author": { "name": "Fedor Indutny", "email": "fedor@indutny.com" }, "bugs": { "url": "https://github.com/indutny/elliptic/issues" }, "dependencies": { "bn.js": "^4.4.0", "brorand": "^1.0.1", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" }, "description": "EC cryptography", "devDependencies": { "brfs": "^1.4.3", "coveralls": "^2.11.3", "grunt": "^0.4.5", "grunt-browserify": "^5.0.0", "grunt-cli": "^1.2.0", "grunt-contrib-connect": "^1.0.0", "grunt-contrib-copy": "^1.0.0", "grunt-contrib-uglify": "^1.0.1", "grunt-mocha-istanbul": "^3.0.1", "grunt-saucelabs": "^8.6.2", "istanbul": "^0.4.2", "jscs": "^2.9.0", "jshint": "^2.6.0", "mocha": "^2.1.0" }, "files": [ "lib" ], "homepage": "https://github.com/indutny/elliptic", "keywords": [ "EC", "Elliptic", "curve", "Cryptography" ], "license": "MIT", "main": "lib/elliptic.js", "name": "elliptic", "repository": { "type": "git", "url": "git+ssh://git@github.com/indutny/elliptic.git" }, "scripts": { "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", "lint": "npm run jscs && npm run jshint", "test": "npm run lint && npm run unit", "unit": "istanbul test _mocha --reporter=spec test/index.js", "version": "grunt dist && git add dist/" }, "version": "6.4.0" } },{}],112:[function(require,module,exports){ var prr = require('prr') function init (type, message, cause) { prr(this, { type : type , name : type // can be passed just a 'cause' , cause : typeof message != 'string' ? message : cause , message : !!message && typeof message != 'string' ? message.message : message }, 'ewr') } // generic prototype, not intended to be actually used - helpful for `instanceof` function CustomError (message, cause) { Error.call(this) if (Error.captureStackTrace) Error.captureStackTrace(this, arguments.callee) init.call(this, 'CustomError', message, cause) } CustomError.prototype = new Error() function createError (errno, type, proto) { var err = function (message, cause) { init.call(this, type, message, cause) //TODO: the specificity here is stupid, errno should be available everywhere if (type == 'FilesystemError') { this.code = this.cause.code this.path = this.cause.path this.errno = this.cause.errno this.message = (errno.errno[this.cause.errno] ? errno.errno[this.cause.errno].description : this.cause.message) + (this.cause.path ? ' [' + this.cause.path + ']' : '') } Error.call(this) if (Error.captureStackTrace) Error.captureStackTrace(this, arguments.callee) } err.prototype = !!proto ? new proto() : new CustomError() return err } module.exports = function (errno) { var ce = function (type, proto) { return createError(errno, type, proto) } return { CustomError : CustomError , FilesystemError : ce('FilesystemError') , createError : ce } } },{"prr":114}],113:[function(require,module,exports){ var all = module.exports.all = [ { errno: -2, code: 'ENOENT', description: 'no such file or directory' }, { errno: -1, code: 'UNKNOWN', description: 'unknown error' }, { errno: 0, code: 'OK', description: 'success' }, { errno: 1, code: 'EOF', description: 'end of file' }, { errno: 2, code: 'EADDRINFO', description: 'getaddrinfo error' }, { errno: 3, code: 'EACCES', description: 'permission denied' }, { errno: 4, code: 'EAGAIN', description: 'resource temporarily unavailable' }, { errno: 5, code: 'EADDRINUSE', description: 'address already in use' }, { errno: 6, code: 'EADDRNOTAVAIL', description: 'address not available' }, { errno: 7, code: 'EAFNOSUPPORT', description: 'address family not supported' }, { errno: 8, code: 'EALREADY', description: 'connection already in progress' }, { errno: 9, code: 'EBADF', description: 'bad file descriptor' }, { errno: 10, code: 'EBUSY', description: 'resource busy or locked' }, { errno: 11, code: 'ECONNABORTED', description: 'software caused connection abort' }, { errno: 12, code: 'ECONNREFUSED', description: 'connection refused' }, { errno: 13, code: 'ECONNRESET', description: 'connection reset by peer' }, { errno: 14, code: 'EDESTADDRREQ', description: 'destination address required' }, { errno: 15, code: 'EFAULT', description: 'bad address in system call argument' }, { errno: 16, code: 'EHOSTUNREACH', description: 'host is unreachable' }, { errno: 17, code: 'EINTR', description: 'interrupted system call' }, { errno: 18, code: 'EINVAL', description: 'invalid argument' }, { errno: 19, code: 'EISCONN', description: 'socket is already connected' }, { errno: 20, code: 'EMFILE', description: 'too many open files' }, { errno: 21, code: 'EMSGSIZE', description: 'message too long' }, { errno: 22, code: 'ENETDOWN', description: 'network is down' }, { errno: 23, code: 'ENETUNREACH', description: 'network is unreachable' }, { errno: 24, code: 'ENFILE', description: 'file table overflow' }, { errno: 25, code: 'ENOBUFS', description: 'no buffer space available' }, { errno: 26, code: 'ENOMEM', description: 'not enough memory' }, { errno: 27, code: 'ENOTDIR', description: 'not a directory' }, { errno: 28, code: 'EISDIR', description: 'illegal operation on a directory' }, { errno: 29, code: 'ENONET', description: 'machine is not on the network' }, { errno: 31, code: 'ENOTCONN', description: 'socket is not connected' }, { errno: 32, code: 'ENOTSOCK', description: 'socket operation on non-socket' }, { errno: 33, code: 'ENOTSUP', description: 'operation not supported on socket' }, { errno: 34, code: 'ENOENT', description: 'no such file or directory' }, { errno: 35, code: 'ENOSYS', description: 'function not implemented' }, { errno: 36, code: 'EPIPE', description: 'broken pipe' }, { errno: 37, code: 'EPROTO', description: 'protocol error' }, { errno: 38, code: 'EPROTONOSUPPORT', description: 'protocol not supported' }, { errno: 39, code: 'EPROTOTYPE', description: 'protocol wrong type for socket' }, { errno: 40, code: 'ETIMEDOUT', description: 'connection timed out' }, { errno: 41, code: 'ECHARSET', description: 'invalid Unicode character' }, { errno: 42, code: 'EAIFAMNOSUPPORT', description: 'address family for hostname not supported' }, { errno: 44, code: 'EAISERVICE', description: 'servname not supported for ai_socktype' }, { errno: 45, code: 'EAISOCKTYPE', description: 'ai_socktype not supported' }, { errno: 46, code: 'ESHUTDOWN', description: 'cannot send after transport endpoint shutdown' }, { errno: 47, code: 'EEXIST', description: 'file already exists' }, { errno: 48, code: 'ESRCH', description: 'no such process' }, { errno: 49, code: 'ENAMETOOLONG', description: 'name too long' }, { errno: 50, code: 'EPERM', description: 'operation not permitted' }, { errno: 51, code: 'ELOOP', description: 'too many symbolic links encountered' }, { errno: 52, code: 'EXDEV', description: 'cross-device link not permitted' }, { errno: 53, code: 'ENOTEMPTY', description: 'directory not empty' }, { errno: 54, code: 'ENOSPC', description: 'no space left on device' }, { errno: 55, code: 'EIO', description: 'i/o error' }, { errno: 56, code: 'EROFS', description: 'read-only file system' }, { errno: 57, code: 'ENODEV', description: 'no such device' }, { errno: 58, code: 'ESPIPE', description: 'invalid seek' }, { errno: 59, code: 'ECANCELED', description: 'operation canceled' } ] module.exports.errno = {} module.exports.code = {} all.forEach(function (error) { module.exports.errno[error.errno] = error module.exports.code[error.code] = error }) module.exports.custom = require('./custom')(module.exports) module.exports.create = module.exports.custom.createError },{"./custom":112}],114:[function(require,module,exports){ /*! * prr * (c) 2013 Rod Vagg * https://github.com/rvagg/prr * License: MIT */ (function (name, context, definition) { if (typeof module != 'undefined' && module.exports) module.exports = definition() else context[name] = definition() })('prr', this, function() { var setProperty = typeof Object.defineProperty == 'function' ? function (obj, key, options) { Object.defineProperty(obj, key, options) return obj } : function (obj, key, options) { // < es5 obj[key] = options.value return obj } , makeOptions = function (value, options) { var oo = typeof options == 'object' , os = !oo && typeof options == 'string' , op = function (p) { return oo ? !!options[p] : os ? options.indexOf(p[0]) > -1 : false } return { enumerable : op('enumerable') , configurable : op('configurable') , writable : op('writable') , value : value } } , prr = function (obj, key, value, options) { var k options = makeOptions(value, options) if (typeof key == 'object') { for (k in key) { if (Object.hasOwnProperty.call(key, k)) { options.value = key[k] setProperty(obj, k, options) } } return obj } return setProperty(obj, key, options) } return prr }) },{}],115:[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." }, "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": 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." }, "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": 32000, "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": 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." }, "suicideRefundGas": { "v": 24000, "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": 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." }, "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": 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": 1150000, "d": "the block that the Homestead fork started at" }, "homesteadRepriceForkNumber": { "v": 2463000, "d": "the block that the Homestead Reprice (EIP150) fork started at" }, "timebombPeriod": { "v": 100000, "d": "Exponential difficulty timebomb period" }, "freeBlockPeriod": { "v": 2 } } },{}],116:[function(require,module,exports){ module.exports = require('./lib/index.js') },{"./lib/index.js":117}],117:[function(require,module,exports){ (function (Buffer){ const utils = require('ethereumjs-util') const BN = require('bn.js') var ABI = function () { } // Convert from short to canonical names // FIXME: optimise or make this nicer? function elementaryName (name) { if (name.startsWith('int[')) { return 'int256' + name.slice(3) } else if (name === 'int') { return 'int256' } else if (name.startsWith('uint[')) { return 'uint256' + name.slice(4) } else if (name === 'uint') { return 'uint256' } else if (name.startsWith('fixed[')) { return 'fixed128x128' + name.slice(5) } else if (name === 'fixed') { return 'fixed128x128' } else if (name.startsWith('ufixed[')) { return 'ufixed128x128' + name.slice(6) } else if (name === 'ufixed') { return 'ufixed128x128' } return name } ABI.eventID = function (name, types) { // FIXME: use node.js util.format? var sig = name + '(' + types.map(elementaryName).join(',') + ')' return utils.sha3(new Buffer(sig)) } ABI.methodID = function (name, types) { return ABI.eventID(name, types).slice(0, 4) } // Parse N from type function parseTypeN (type) { return parseInt(/^\D+(\d+)$/.exec(type)[1], 10) } // Parse N,M from typex function parseTypeNxM (type) { var tmp = /^\D+(\d+)x(\d+)$/.exec(type) return [ parseInt(tmp[1], 10), parseInt(tmp[2], 10) ] } // Parse N from type[] function parseTypeArray (type) { var tmp = /^\w+\[(\d*)\]$/.exec(type)[1] if (tmp.length === 0) { return 0 } else { return parseInt(tmp, 10) } } function parseNumber (arg) { var type = typeof arg if (type === 'string') { if (utils.isHexPrefixed(arg)) { return new BN(utils.stripHexPrefix(arg), 16) } else { return new BN(arg, 10) } } else if (type === 'number') { return new BN(arg) } else if (arg.toArray) { // assume this is a BN for the moment, replace with BN.isBN soon return arg } else { throw new Error('Argument is not a number') } } // someMethod(bytes,uint) // someMethod(bytes,uint):(boolean) function parseSignature (sig) { var tmp = /^(\w+)\((.+)\)$/.exec(sig) if (tmp.length !== 3) { throw new Error('Invalid method signature') } var args = /^(.+)\):\((.+)$/.exec(tmp[2]) if (args !== null && args.length === 3) { return { method: tmp[1], args: args[1].split(','), retargs: args[2].split(',') } } else { return { method: tmp[1], args: tmp[2].split(',') } } } // Encodes a single item (can be dynamic array) // @returns: Buffer function encodeSingle (type, arg) { var size, num, ret, i if (type === 'address') { return encodeSingle('uint160', parseNumber(arg)) } else if (type === 'bool') { return encodeSingle('uint8', arg ? 1 : 0) } else if (type === 'string') { return encodeSingle('bytes', new Buffer(arg, 'utf8')) } else if (type.match(/\w+\[\d+\]/)) { // this part handles fixed-length arrays ([2]) // NOTE: we catch here all calls to arrays, that simplifies the rest if (typeof arg.length === 'undefined') { throw new Error('Not an array?') } size = parseTypeArray(type) if ((size !== 0) && (arg.length > size)) { throw new Error('Elements exceed array size: ' + size) } type = type.slice(0, type.indexOf('[')) ret = [] for (i in arg) { ret.push(encodeSingle(type, arg[i])) } return Buffer.concat(ret) } else if (type.match(/\w+\[\]/)) { // this part handles variable length ([]) // NOTE: we catch here all calls to arrays, that simplifies the rest if (typeof arg.length === 'undefined') { throw new Error('Not an array?') } type = type.slice(0, type.indexOf('[')) ret = [ encodeSingle('uint256', arg.length) ] for (i in arg) { ret.push(encodeSingle(type, arg[i])) } return Buffer.concat(ret) } else if (type === 'bytes') { arg = new Buffer(arg) ret = Buffer.concat([ encodeSingle('uint256', arg.length), arg ]) if ((arg.length % 32) !== 0) { ret = Buffer.concat([ ret, utils.zeros(32 - (arg.length % 32)) ]) } return ret } else if (type.startsWith('bytes')) { size = parseTypeN(type) if (size < 1 || size > 32) { throw new Error('Invalid bytes width: ' + size) } return utils.setLengthRight(arg, 32) } else if (type.startsWith('uint')) { size = parseTypeN(type) if ((size % 8) || (size < 8) || (size > 256)) { throw new Error('Invalid uint width: ' + size) } num = parseNumber(arg) if (num.bitLength() > size) { throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength()) } if (num < 0) { throw new Error('Supplied uint is negative') } return num.toArrayLike(Buffer, 'be', 32) } else if (type.startsWith('int')) { size = parseTypeN(type) if ((size % 8) || (size < 8) || (size > 256)) { throw new Error('Invalid int width: ' + size) } num = parseNumber(arg) if (num.bitLength() > size) { throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength()) } return num.toTwos(256).toArrayLike(Buffer, 'be', 32) } else if (type.startsWith('ufixed')) { size = parseTypeNxM(type) num = parseNumber(arg) if (num < 0) { throw new Error('Supplied ufixed is negative') } return encodeSingle('uint256', num.mul(new BN(2).pow(new BN(size[1])))) } else if (type.startsWith('fixed')) { size = parseTypeNxM(type) return encodeSingle('int256', parseNumber(arg).mul(new BN(2).pow(new BN(size[1])))) } throw new Error('Unsupported or invalid type: ' + type) } // Decodes a single item (can be dynamic array) // @returns: array // FIXME: this method will need a lot of attention at checking limits and validation function decodeSingle (type, arg) { var size, num, ret, i if (type === 'address') { return decodeSingle('uint160', arg) } else if (type === 'bool') { return decodeSingle('uint8', arg).toString() === new BN(1).toString() } else if (type === 'string') { return new Buffer(decodeSingle('bytes', arg), 'utf8').toString() } else if (type.match(/\w+\[\d+\]/)) { // this part handles fixed-length arrays ([2]) // NOTE: we catch here all calls to arrays, that simplifies the rest size = parseTypeArray(type) type = type.slice(0, type.indexOf('[')) ret = [] for (i = 0; i < size; i++) { ret.push(decodeSingle(type, arg.slice(i * 32))) } return ret } else if (type.match(/\w+\[\]/)) { // this part handles variable length ([]) // NOTE: we catch here all calls to arrays, that simplifies the rest type = type.slice(0, type.indexOf('[')) var count = decodeSingle('uint256', arg.slice(0, 32)).toNumber() ret = [] for (i = 1; i < count + 1; i++) { ret.push(decodeSingle(type, arg.slice(i * 32))) } return ret } else if (type === 'bytes') { size = decodeSingle('uint256', arg.slice(0, 32)).toNumber() return arg.slice(32, 32 + size) } else if (type.startsWith('bytes')) { size = parseTypeN(type) if (size < 1 || size > 32) { throw new Error('Invalid bytes width: ' + size) } return arg.slice(0, size) } else if (type.startsWith('uint')) { size = parseTypeN(type) if ((size % 8) || (size < 8) || (size > 256)) { throw new Error('Invalid uint width: ' + size) } num = new BN(arg.slice(0, 32), 16, 'be') if (num.bitLength() > size) { throw new Error('Decoded int exceeds width: ' + size + ' vs ' + num.bitLength()) } return num } else if (type.startsWith('int')) { size = parseTypeN(type) if ((size % 8) || (size < 8) || (size > 256)) { throw new Error('Invalid uint width: ' + size) } num = new BN(arg.slice(0, 32), 16, 'be').fromTwos(256) if (num.bitLength() > size) { throw new Error('Decoded uint exceeds width: ' + size + ' vs ' + num.bitLength()) } return num } else if (type.startsWith('ufixed')) { size = parseTypeNxM(type) size = new BN(2).pow(new BN(size[1])) num = decodeSingle('uint256', arg) if (!num.mod(size).isZero()) { throw new Error('Decimals not supported yet') } return num.div(size) } else if (type.startsWith('fixed')) { size = parseTypeNxM(type) size = new BN(2).pow(new BN(size[1])) num = decodeSingle('int256', arg) if (!num.mod(size).isZero()) { throw new Error('Decimals not supported yet') } return num.div(size) } throw new Error('Unsupported or invalid type: ' + type) } // Is a type dynamic? function isDynamic (type) { // FIXME: handle all types? I don't think anything is missing now return (type === 'string') || (type === 'bytes') || type.match(/\w+\[\]/) } // Encode a method/event with arguments // @types an array of string type names // @args an array of the appropriate values ABI.rawEncode = function (types, values) { var output = [] var data = [] var headLength = 32 * types.length for (var i in types) { var type = elementaryName(types[i]) var value = values[i] var cur = encodeSingle(type, value) // Use the head/tail method for storing dynamic data if (isDynamic(type)) { output.push(encodeSingle('uint256', headLength)) data.push(cur) headLength += cur.length } else { output.push(cur) } } return Buffer.concat(output.concat(data)) } ABI.rawDecode = function (types, data) { var ret = [] data = new Buffer(data) var offset = 0 for (var i in types) { var type = elementaryName(types[i]) var cur = data.slice(offset, offset + 32) if (isDynamic(type)) { var dataOffset = decodeSingle('uint256', cur).toNumber() // We will read at least 32 bytes if (dataOffset > (data.length - 32)) { throw new Error('Invalid offset: ' + dataOffset) } cur = data.slice(dataOffset) } else if (type.match(/\w+\[\d+\]/)) { var count = parseTypeArray(type) if (count > 1) { cur = data.slice(offset, offset + (count * 32)) offset += (count - 1) * 32 } } ret.push(decodeSingle(type, cur)) offset += 32 } return ret } ABI.simpleEncode = function (method) { var args = Array.prototype.slice.call(arguments).slice(1) var sig = parseSignature(method) // FIXME: validate/convert arguments if (args.length !== sig.args.length) { throw new Error('Argument count mismatch') } return Buffer.concat([ ABI.methodID(sig.method, sig.args), ABI.rawEncode(sig.args, args) ]) } ABI.simpleDecode = function (method, data) { var sig = parseSignature(method) // FIXME: validate/convert arguments if (!sig.retargs) { throw new Error('No return values in method') } return ABI.rawDecode(sig.retargs, data) } function stringify (type, value) { if (type.startsWith('address') || type.startsWith('bytes')) { return '0x' + value.toString('hex') } else { return value.toString() } } ABI.stringify = function (types, values) { var ret = [] for (var i in types) { var type = types[i] var value = values[i] // if it is an array type, concat the items if (/^[^\[]+\[.*\]$/.test(type)) { value = value.map(function (item) { return stringify(type, item) }).join(', ') } else { value = stringify(type, value) } ret.push(value) } return ret } ABI.solidityPack = function (types, values) { if (types.length !== values.length) { throw new Error('Number of types are not matching the values') } var size, num var ret = [] for (var i = 0; i < types.length; i++) { var type = elementaryName(types[i]) var value = values[i] if (type === 'bytes') { ret.push(value) } else if (type === 'string') { ret.push(new Buffer(value, 'utf8')) } else if (type === 'bool') { ret.push(new Buffer(value ? '01' : '00', 'hex')) } else if (type === 'address') { ret.push(utils.setLengthLeft(value, 20)) } else if (type.startsWith('bytes')) { size = parseTypeN(type) if (size < 1 || size > 32) { throw new Error('Invalid bytes width: ' + size) } return utils.setLengthRight(value, size) } else if (type.startsWith('uint')) { size = parseTypeN(type) if ((size % 8) || (size < 8) || (size > 256)) { throw new Error('Invalid uint width: ' + size) } num = parseNumber(value) if (num.bitLength() > size) { throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength()) } ret.push(num.toArrayLike(Buffer, 'be', size / 8)) } else if (type.startsWith('int')) { size = parseTypeN(type) if ((size % 8) || (size < 8) || (size > 256)) { throw new Error('Invalid int width: ' + size) } num = parseNumber(value) if (num.bitLength() > size) { throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength()) } ret.push(num.toTwos(size).toArrayLike(Buffer, 'be', size / 8)) } else { // FIXME: support all other types throw new Error('Unsupported or invalid type: ' + type) } } return Buffer.concat(ret) } ABI.soliditySHA3 = function (types, values) { return utils.sha3(ABI.solidityPack(types, values)) } ABI.soliditySHA256 = function (types, values) { return utils.sha256(ABI.solidityPack(types, values)) } ABI.solidityRIPEMD160 = function (types, values) { return utils.ripemd160(ABI.solidityPack(types, values), true) } // Serpent's users are familiar with this encoding // - s: string // - b: bytes // - b: bytes // - i: int256 // - a: int256[] function isNumeric (c) { // FIXME: is this correct? Seems to work return (c >= '0') && (c <= '9') } // For a "documentation" refer to https://github.com/ethereum/serpent/blob/develop/preprocess.cpp ABI.fromSerpent = function (sig) { var ret = [] for (var i = 0; i < sig.length; i++) { var type = sig[i] if (type === 's') { ret.push('bytes') } else if (type === 'b') { var tmp = 'bytes' var j = i + 1 while ((j < sig.length) && isNumeric(sig[j])) { tmp += sig[j] - '0' j++ } i = j - 1 ret.push(tmp) } else if (type === 'i') { ret.push('int256') } else if (type === 'a') { ret.push('int256[]') } else { throw new Error('Unsupported or invalid type: ' + type) } } return ret } ABI.toSerpent = function (types) { var ret = [] for (var i = 0; i < types.length; i++) { var type = types[i] if (type === 'bytes') { ret.push('s') } else if (type.startsWith('bytes')) { ret.push('b' + parseTypeN(type)) } else if (type === 'int256') { ret.push('i') } else if (type === 'int256[]') { ret.push('a') } else { throw new Error('Unsupported or invalid type: ' + type) } } return ret.join('') } module.exports = ABI }).call(this,require("buffer").Buffer) },{"bn.js":41,"buffer":74,"ethereumjs-util":125}],118:[function(require,module,exports){ (function (Buffer){ const ethUtil = require('ethereumjs-util') const rlp = require('rlp') var Account = module.exports = function (data) { // Define Properties var fields = [{ name: 'nonce', default: new Buffer([]) }, { name: 'balance', default: new Buffer([]) }, { name: 'stateRoot', length: 32, default: ethUtil.SHA3_RLP }, { name: 'codeHash', length: 32, default: ethUtil.SHA3_NULL }] ethUtil.defineProperties(this, fields, data) } Account.prototype.serialize = function () { return rlp.encode(this.raw) } Account.prototype.isContract = function () { return this.codeHash.toString('hex') !== ethUtil.SHA3_NULL_S } Account.prototype.getCode = function (state, cb) { if (!this.isContract()) { cb(null, new Buffer([])) return } state.getRaw(this.codeHash, cb) } Account.prototype.setCode = function (trie, code, cb) { var self = this this.codeHash = ethUtil.sha3(code) if (this.codeHash.toString('hex') === ethUtil.SHA3_NULL_S) { cb(null, new Buffer([])) return } trie.putRaw(this.codeHash, code, function (err) { cb(err, self.codeHash) }) } Account.prototype.getStorage = function (trie, key, cb) { var t = trie.copy() t.root = this.stateRoot t.get(key, cb) } Account.prototype.setStorage = function (trie, key, val, cb) { var self = this var t = trie.copy() t.root = self.stateRoot t.put(key, val, function (err) { if (err) return cb() self.stateRoot = t.root cb() }) } Account.prototype.isEmpty = function () { return this.balance.toString('hex') === '' && this.nonce.toString('hex') === '' && this.stateRoot.toString('hex') === ethUtil.SHA3_RLP_S && this.codeHash.toString('hex') === ethUtil.SHA3_NULL_S } }).call(this,require("buffer").Buffer) },{"buffer":74,"ethereumjs-util":125,"rlp":308}],119:[function(require,module,exports){ (function (Buffer){ 'use strict'; var utils = require('ethereumjs-util'); var params = require('ethereum-common/params.json'); var BN = utils.BN; /** * An object that repersents the block header * @constructor * @param {Array} data raw data, deserialized * @prop {Buffer} parentHash the blocks' parent's hash * @prop {Buffer} uncleHash sha3(rlp_encode(uncle_list)) * @prop {Buffer} coinbase the miner address * @prop {Buffer} stateRoot The root of a Merkle Patricia tree * @prop {Buffer} transactionTrie the root of a Trie containing the transactions * @prop {Buffer} receiptTrie the root of a Trie containing the transaction Reciept * @prop {Buffer} bloom * @prop {Buffer} difficulty * @prop {Buffer} number the block's height * @prop {Buffer} gasLimit * @prop {Buffer} gasUsed * @prop {Buffer} timestamp * @prop {Buffer} extraData * @prop {Array.} raw an array of buffers containing the raw blocks. */ var BlockHeader = module.exports = function (data) { var fields = [{ name: 'parentHash', length: 32, default: utils.zeros(32) }, { name: 'uncleHash', default: utils.SHA3_RLP_ARRAY }, { name: 'coinbase', length: 20, default: utils.zeros(20) }, { name: 'stateRoot', length: 32, default: utils.zeros(32) }, { name: 'transactionsTrie', length: 32, default: utils.SHA3_RLP }, { name: 'receiptTrie', length: 32, default: utils.SHA3_RLP }, { name: 'bloom', default: utils.zeros(256) }, { name: 'difficulty', default: new Buffer([]) }, { name: 'number', default: utils.intToBuffer(params.homeSteadForkNumber.v) }, { name: 'gasLimit', default: new Buffer('ffffffffffffff', 'hex') }, { name: 'gasUsed', empty: true, default: new Buffer([]) }, { name: 'timestamp', default: new Buffer([]) }, { name: 'extraData', allowZero: true, empty: true, default: new Buffer([]) }, { name: 'mixHash', default: utils.zeros(32) // length: 32 }, { name: 'nonce', default: new Buffer([]) // sha3(42) }]; utils.defineProperties(this, fields, data); }; /** * Returns the canoncical difficulty of the block * @method canonicalDifficulty * @param {Block} parentBlock the parent `Block` of the this header * @return {BN} */ BlockHeader.prototype.canonicalDifficulty = function (parentBlock) { var blockTs = new BN(this.timestamp); var parentTs = new BN(parentBlock.header.timestamp); var parentDif = new BN(parentBlock.header.difficulty); var minimumDifficulty = new BN(params.minimumDifficulty.v); var offset = parentDif.div(new BN(params.difficultyBoundDivisor.v)); var dif; // Byzantium // max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99) var uncleAddend = parentBlock.header.uncleHash.equals(utils.SHA3_RLP_ARRAY) ? 1 : 2; var a = blockTs.sub(parentTs).idivn(9).ineg().iaddn(uncleAddend); var cutoff = new BN(-99); // MAX(cutoff, a) if (cutoff.cmp(a) === 1) { a = cutoff; } dif = parentDif.add(offset.mul(a)); // Byzantium difficulty bomb delay var num = new BN(this.number).isubn(3000000); if (num.ltn(0)) { num = new BN(0); } var exp = num.idivn(100000).isubn(2); if (!exp.isNeg()) { dif.iadd(new BN(2).pow(exp)); } if (dif.cmp(minimumDifficulty) === -1) { dif = minimumDifficulty; } return dif; }; /** * checks that the block's `difficuly` matches the canonical difficulty * @method validateDifficulty * @param {Block} parentBlock this block's parent * @return {Boolean} */ BlockHeader.prototype.validateDifficulty = function (parentBlock) { var dif = this.canonicalDifficulty(parentBlock); return dif.cmp(new BN(this.difficulty)) === 0; }; /** * Validates the gasLimit * @method validateGasLimit * @param {Block} parentBlock this block's parent * @returns {Boolean} */ BlockHeader.prototype.validateGasLimit = function (parentBlock) { var pGasLimit = new BN(parentBlock.header.gasLimit); var gasLimit = new BN(this.gasLimit); var a = pGasLimit.div(new BN(params.gasLimitBoundDivisor.v)); var maxGasLimit = pGasLimit.add(a); var minGasLimit = pGasLimit.sub(a); return gasLimit.lt(maxGasLimit) && gasLimit.gt(minGasLimit) && gasLimit.gte(params.minGasLimit.v); }; /** * Validates the entire block header * @method validate * @param {Blockchain} blockChain the blockchain that this block is validating against * @param {Bignum} [height] if this is an uncle header, this is the height of the block that is including it * @param {Function} cb the callback function. The callback is given an `error` if the block is invalid */ BlockHeader.prototype.validate = function (blockchain, height, cb) { var self = this; if (arguments.length === 2) { cb = height; height = false; } if (this.isGenesis()) { return cb(); } // find the blocks parent blockchain.getBlock(self.parentHash, function (err, parentBlock) { if (err) { return cb('could not find parent block'); } self.parentBlock = parentBlock; var number = new BN(self.number); if (number.cmp(new BN(parentBlock.header.number).iaddn(1)) !== 0) { return cb('invalid number'); } if (height) { var dif = height.sub(new BN(parentBlock.header.number)); if (!(dif.cmpn(8) === -1 && dif.cmpn(1) === 1)) { return cb('uncle block has a parent that is too old or to young'); } } if (!self.validateDifficulty(parentBlock)) { return cb('invalid Difficulty'); } if (!self.validateGasLimit(parentBlock)) { return cb('invalid gas limit'); } if (utils.bufferToInt(parentBlock.header.number) + 1 !== utils.bufferToInt(self.number)) { return cb('invalid heigth'); } if (utils.bufferToInt(self.timestamp) <= utils.bufferToInt(parentBlock.header.timestamp)) { return cb('invalid timestamp'); } if (self.extraData.length > params.maximumExtraDataSize.v) { return cb('invalid amount of extra data'); } cb(); }); }; /** * Returns the sha3 hash of the blockheader * @method hash * @return {Buffer} */ BlockHeader.prototype.hash = function () { return utils.rlphash(this.raw); }; /** * checks if the blockheader is a genesis header * @method isGenesis * @return {Boolean} */ BlockHeader.prototype.isGenesis = function () { return this.number.toString('hex') === ''; }; }).call(this,require("buffer").Buffer) },{"buffer":74,"ethereum-common/params.json":121,"ethereumjs-util":122}],120:[function(require,module,exports){ (function (Buffer){ 'use strict'; var ethUtil = require('ethereumjs-util'); var Tx = require('ethereumjs-tx'); var Trie = require('merkle-patricia-tree'); var BN = ethUtil.BN; var rlp = ethUtil.rlp; var async = require('async'); var BlockHeader = require('./header'); var params = require('ethereum-common/params.json'); /** * Creates a new block object * @constructor the raw serialized or the deserialized block. * @param {Array|Buffer|Object} data * @prop {Header} header the block's header * @prop {Array.
} uncleList an array of uncle headers * @prop {Array.} raw an array of buffers containing the raw blocks. */ var Block = module.exports = function (data) { this.transactions = []; this.uncleHeaders = []; this._inBlockChain = false; this.txTrie = new Trie(); Object.defineProperty(this, 'raw', { get: function get() { return this.serialize(false); } }); var rawTransactions, rawUncleHeaders; // defaults if (!data) { data = [[], [], []]; } if (Buffer.isBuffer(data)) { data = rlp.decode(data); } if (Array.isArray(data)) { this.header = new BlockHeader(data[0]); rawTransactions = data[1]; rawUncleHeaders = data[2]; } else { this.header = new BlockHeader(data.header); rawTransactions = data.transactions || []; rawUncleHeaders = data.uncleHeaders || []; } // parse uncle headers for (var i = 0; i < rawUncleHeaders.length; i++) { this.uncleHeaders.push(new BlockHeader(rawUncleHeaders[i])); } // parse transactions for (i = 0; i < rawTransactions.length; i++) { var tx = new Tx(rawTransactions[i]); tx._homestead = true; this.transactions.push(tx); } }; Block.Header = BlockHeader; /** * Produces a hash the RLP of the block * @method hash */ Block.prototype.hash = function () { return this.header.hash(); }; /** * Determines if a given block is the genesis block * @method isGenisis * @return Boolean */ Block.prototype.isGenesis = function () { return this.header.isGenesis(); }; /** * turns the block in to the canonical genesis block * @method setGenesisParams */ Block.prototype.setGenesisParams = function () { this.header.gasLimit = params.genesisGasLimit.v; this.header.difficulty = params.genesisDifficulty.v; this.header.extraData = params.genesisExtraData.v; this.header.nonce = params.genesisNonce.v; this.header.stateRoot = params.genesisStateRoot.v; this.header.number = new Buffer([]); }; /** * Produces a serialization of the block. * @method serialize * @param {Boolean} rlpEncode whether to rlp encode the block or not */ Block.prototype.serialize = function (rlpEncode) { var raw = [this.header.raw, [], []]; // rlpEnode defaults to true if (typeof rlpEncode === 'undefined') { rlpEncode = true; } this.transactions.forEach(function (tx) { raw[1].push(tx.raw); }); this.uncleHeaders.forEach(function (uncle) { raw[2].push(uncle.raw); }); return rlpEncode ? rlp.encode(raw) : raw; }; /** * Generate transaction trie. The tx trie must be generated before the transaction trie can * be validated with `validateTransactionTrie` * @method genTxTrie * @param {Function} cb the callback */ Block.prototype.genTxTrie = function (cb) { var i = 0; var self = this; async.eachSeries(this.transactions, function (tx, done) { self.txTrie.put(rlp.encode(i), tx.serialize(), done); i++; }, cb); }; /** * Validates the transaction trie * @method validateTransactionTrie * @return {Boolean} */ Block.prototype.validateTransactionsTrie = function () { var txT = this.header.transactionsTrie.toString('hex'); if (this.transactions.length) { return txT === this.txTrie.root.toString('hex'); } else { return txT === ethUtil.SHA3_RLP.toString('hex'); } }; /** * Validates the transactions * @method validateTransactions * @param {Boolean} [stringError=false] whether to return a string with a dscription of why the validation failed or return a Bloolean * @return {Boolean} */ Block.prototype.validateTransactions = function (stringError) { var errors = []; this.transactions.forEach(function (tx, i) { var error = tx.validate(true); if (error) { errors.push(error + ' at tx ' + i); } }); if (stringError === undefined || stringError === false) { return errors.length === 0; } else { return arrayToString(errors); } }; /** * Validates the entire block. Returns a string to the callback if block is invalid * @method validate * @param {BlockChain} blockChain the blockchain that this block wants to be part of * @param {Function} cb the callback which is given a `String` if the block is not valid */ Block.prototype.validate = function (blockChain, cb) { var self = this; var errors = []; async.parallel([ // validate uncles self.validateUncles.bind(self, blockChain), // validate block self.header.validate.bind(self.header, blockChain), // generate the transaction trie self.genTxTrie.bind(self)], function (err) { if (err) { errors.push(err); } if (!self.validateTransactionsTrie()) { errors.push('invalid transaction true'); } var txErrors = self.validateTransactions(true); if (txErrors !== '') { errors.push(txErrors); } if (!self.validateUnclesHash()) { errors.push('invild uncle hash'); } cb(arrayToString(errors)); }); }; /** * Validates the uncle's hash * @method validateUncleHash * @return {Boolean} */ Block.prototype.validateUnclesHash = function () { var raw = []; this.uncleHeaders.forEach(function (uncle) { raw.push(uncle.raw); }); raw = rlp.encode(raw); return ethUtil.sha3(raw).toString('hex') === this.header.uncleHash.toString('hex'); }; /** * Validates the uncles that are in the block if any. Returns a string to the callback if uncles are invalid * @method validateUncles * @param {Blockchain} blockChaina an instance of the Blockchain * @param {Function} cb the callback */ Block.prototype.validateUncles = function (blockChain, cb) { if (this.isGenesis()) { return cb(); } var self = this; if (self.uncleHeaders.length > 2) { return cb('too many uncle headers'); } var uncleHashes = self.uncleHeaders.map(function (header) { return header.hash().toString('hex'); }); if (!(new Set(uncleHashes).size === uncleHashes.length)) { return cb('dublicate unlces'); } async.each(self.uncleHeaders, function (uncle, cb2) { var height = new BN(self.header.number); async.parallel([uncle.validate.bind(uncle, blockChain, height), // check to make sure the uncle is not already in the blockchain function (cb3) { blockChain.getDetails(uncle.hash(), function (err, blockInfo) { // TODO: remove uncles from BC if (blockInfo && blockInfo.isUncle) { cb3(err || 'uncle already included'); } else { cb3(); } }); }], cb2); }, cb); }; /** * Converts the block toJSON * @method toJSON * @param {Bool} labeled whether to create an labeled object or an array * @return {Object} */ Block.prototype.toJSON = function (labeled) { if (labeled) { var obj = { header: this.header.toJSON(true), transactions: [], uncleHeaders: [] }; this.transactions.forEach(function (tx) { obj.transactions.push(tx.toJSON(labeled)); }); this.uncleHeaders.forEach(function (uh) { obj.uncleHeaders.push(uh.toJSON()); }); return obj; } else { return ethUtil.baToJSON(this.raw); } }; function arrayToString(array) { try { return array.reduce(function (str, err) { if (str) { str += ' '; } return str + err; }); } catch (e) { return ''; } } }).call(this,require("buffer").Buffer) },{"./header":119,"async":24,"buffer":74,"ethereum-common/params.json":121,"ethereumjs-tx":123,"ethereumjs-util":122,"merkle-patricia-tree":259}],121:[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." }, "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": 50, "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": 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." }, "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": 32000, "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": 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." }, "suicideRefundGas": { "v": 24000, "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": 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." }, "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": 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": "" }, "modexpGquaddivisor": { "v": 20, "d": "Gquaddivisor from modexp precompile for gas calculation." }, "ecAddGas": { "v": 500, "d": "Gas costs for curve addition precompile." }, "ecMulGas": { "v": 40000, "d": "Gas costs for curve multiplication precompile." }, "ecPairingGas": { "v": 100000, "d": "Base gas costs for curve pairing precompile." }, "ecPairingWordGas": { "v": 80000, "d": "Gas costs regarding curve pairing precompile input length." }, "minerReward": { "v": "3000000000000000000", "d": "the amount a miner get rewarded for mining a block" }, "homeSteadForkNumber": { "v": 1150000, "d": "the block that the Homestead fork started at" }, "homesteadRepriceForkNumber": { "v": 2463000, "d": "the block that the Homestead Reprice (EIP150) fork started at" }, "timebombPeriod": { "v": 100000, "d": "Exponential difficulty timebomb period" }, "freeBlockPeriod": { "v": 2 } } },{}],122:[function(require,module,exports){ (function (Buffer){ 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var createKeccakHash = require('keccak'); var secp256k1 = require('secp256k1'); var assert = require('assert'); var rlp = require('rlp'); var BN = require('bn.js'); var createHash = require('create-hash'); Object.assign(exports, require('ethjs-util')); /** * the max integer that this VM can handle (a ```BN```) * @var {BN} MAX_INTEGER */ exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16); /** * 2^256 (a ```BN```) * @var {BN} TWO_POW256 */ exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16); /** * SHA3-256 hash of null (a ```String```) * @var {String} SHA3_NULL_S */ exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'; /** * SHA3-256 hash of null (a ```Buffer```) * @var {Buffer} SHA3_NULL */ exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex'); /** * SHA3-256 of an RLP of an empty array (a ```String```) * @var {String} SHA3_RLP_ARRAY_S */ exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'; /** * SHA3-256 of an RLP of an empty array (a ```Buffer```) * @var {Buffer} SHA3_RLP_ARRAY */ exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex'); /** * SHA3-256 hash of the RLP of null (a ```String```) * @var {String} SHA3_RLP_S */ exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'; /** * SHA3-256 hash of the RLP of null (a ```Buffer```) * @var {Buffer} SHA3_RLP */ exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex'); /** * [`BN`](https://github.com/indutny/bn.js) * @var {Function} */ exports.BN = BN; /** * [`rlp`](https://github.com/ethereumjs/rlp) * @var {Function} */ exports.rlp = rlp; /** * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/) * @var {Object} */ exports.secp256k1 = secp256k1; /** * 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) { return Buffer.allocUnsafe(bytes).fill(0); }; /** * 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); } }; /** * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. * Or it truncates the beginning if it exceeds. * @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); }; /** * Trims leading zeros from a `Buffer` or an `Array` * @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. * @param {*} v the value */ exports.toBuffer = function (v) { if (!Buffer.isBuffer(v)) { if (Array.isArray(v)) { v = Buffer.from(v); } else if (typeof v === 'string') { if (exports.isHexString(v)) { v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex'); } else { v = Buffer.from(v); } } else if (typeof v === 'number') { v = exports.intToBuffer(v); } else if (v === null || v === undefined) { v = Buffer.allocUnsafe(0); } else if (v.toArray) { // converts a BN to a Buffer v = Buffer.from(v.toArray()); } else { throw new Error('invalid type'); } } return v; }; /** * Converts a `Buffer` to a `Number` * @param {Buffer} buf * @return {Number} * @throws If the input number exceeds 53 bits. */ exports.bufferToInt = function (buf) { return new BN(exports.toBuffer(buf)).toNumber(); }; /** * Converts a `Buffer` into a hex `String` * @param {Buffer} buf * @return {String} */ exports.bufferToHex = function (buf) { buf = exports.toBuffer(buf); return '0x' + buf.toString('hex'); }; /** * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers. * @param {Buffer} num * @return {BN} */ exports.fromSigned = function (num) { return new BN(num).fromTwos(256); }; /** * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers. * @param {BN} num * @return {Buffer} */ exports.toUnsigned = function (num) { return Buffer.from(num.toTwos(256).toArray()); }; /** * Creates SHA-3 hash of the input * @param {Buffer|Array|String|Number} a the input data * @param {Number} [bits=256] the SHA width * @return {Buffer} */ exports.sha3 = function (a, bits) { a = exports.toBuffer(a); if (!bits) bits = 256; return createKeccakHash('keccak' + bits).update(a).digest(); }; /** * Creates SHA256 hash of the input * @param {Buffer|Array|String|Number} a the input data * @return {Buffer} */ exports.sha256 = function (a) { a = exports.toBuffer(a); return createHash('sha256').update(a).digest(); }; /** * Creates RIPEMD160 hash of the input * @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 = createHash('rmd160').update(a).digest(); if (padded === true) { return exports.setLength(hash, 32); } else { return hash; } }; /** * Creates SHA-3 hash of the RLP encoded version of the input * @param {Buffer|Array|String|Number} a the input data * @return {Buffer} */ exports.rlphash = function (a) { return exports.sha3(rlp.encode(a)); }; /** * Checks if the private key satisfies the rules of the curve secp256k1. * @param {Buffer} privateKey * @return {Boolean} */ exports.isValidPrivate = function (privateKey) { return secp256k1.privateKeyVerify(privateKey); }; /** * Checks if the public key satisfies the rules of the curve secp256k1 * and the requirements of Ethereum. * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled * @param {Boolean} [sanitize=false] Accept public keys in other formats * @return {Boolean} */ exports.isValidPublic = function (publicKey, sanitize) { if (publicKey.length === 64) { // Convert to SEC1 for secp256k1 return secp256k1.publicKeyVerify(Buffer.concat([Buffer.from([4]), publicKey])); } if (!sanitize) { return false; } return secp256k1.publicKeyVerify(publicKey); }; /** * Returns the ethereum address of a given public key. * Accepts "Ethereum public keys" and SEC1 encoded keys. * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled * @param {Boolean} [sanitize=false] 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); }; /** * Returns the ethereum public key of a given private key * @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.publicKeyCreate(privateKey, false).slice(1); }; /** * Converts a public key to the Ethereum format. * @param {Buffer} publicKey * @return {Buffer} */ exports.importPublic = function (publicKey) { publicKey = exports.toBuffer(publicKey); if (publicKey.length !== 64) { publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1); } return publicKey; }; /** * ECDSA sign * @param {Buffer} msgHash * @param {Buffer} privateKey * @return {Object} */ exports.ecsign = function (msgHash, privateKey) { var sig = secp256k1.sign(msgHash, privateKey); var ret = {}; ret.r = sig.signature.slice(0, 32); ret.s = sig.signature.slice(32, 64); ret.v = sig.recovery + 27; return ret; }; /** * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call. * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign` * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key * used to produce the signature. * @param message * @returns {Buffer} hash */ exports.hashPersonalMessage = function (message) { var prefix = exports.toBuffer('\x19Ethereum Signed Message:\n' + message.length.toString()); return exports.sha3(Buffer.concat([prefix, message])); }; /** * ECDSA public key recovery from signature * @param {Buffer} msgHash * @param {Number} 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 = v - 27; if (recovery !== 0 && recovery !== 1) { throw new Error('Invalid signature v value'); } var senderPubKey = secp256k1.recover(msgHash, signature, recovery); return secp256k1.publicKeyConvert(senderPubKey, false).slice(1); }; /** * Convert signature parameters into the format of `eth_sign` RPC method * @param {Number} v * @param {Buffer} r * @param {Buffer} s * @return {String} sig */ exports.toRpcSig = function (v, r, s) { // NOTE: with potential introduction of chainId this might need to be updated if (v !== 27 && v !== 28) { throw new Error('Invalid recovery id'); } // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053 return exports.bufferToHex(Buffer.concat([exports.setLengthLeft(r, 32), exports.setLengthLeft(s, 32), exports.toBuffer(v - 27)])); }; /** * Convert signature format of the `eth_sign` RPC method to signature parameters * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053 * @param {String} sig * @return {Object} */ exports.fromRpcSig = function (sig) { sig = exports.toBuffer(sig); // NOTE: with potential introduction of chainId this might need to be updated if (sig.length !== 65) { throw new Error('Invalid signature length'); } var v = sig[64]; // support both versions of `eth_sign` responses if (v < 27) { v += 27; } return { v: v, r: sig.slice(0, 32), s: sig.slice(32, 64) }; }; /** * Returns the ethereum address of a given private key * @param {Buffer} privateKey A private key must be 256 bits wide * @return {Buffer} */ exports.privateToAddress = function (privateKey) { return exports.publicToAddress(privateToPublic(privateKey)); }; /** * Checks if the address is a valid. Accepts checksummed addresses too * @param {String} address * @return {Boolean} */ exports.isValidAddress = function (address) { return (/^0x[0-9a-fA-F]{40}$/i.test(address) ); }; /** * Returns a checksummed address * @param {String} address * @return {String} */ exports.toChecksumAddress = function (address) { address = exports.stripHexPrefix(address).toLowerCase(); var hash = exports.sha3(address).toString('hex'); var ret = '0x'; for (var i = 0; i < address.length; i++) { if (parseInt(hash[i], 16) >= 8) { ret += address[i].toUpperCase(); } else { ret += address[i]; } } return ret; }; /** * Checks if the address is a valid checksummed address * @param {Buffer} address * @return {Boolean} */ exports.isValidChecksumAddress = function (address) { return exports.isValidAddress(address) && exports.toChecksumAddress(address) === address; }; /** * Generates an address of a newly created contract * @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); 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 = Buffer.from(nonce.toArray()); } // Only take the lower 160bits of the hash return exports.rlphash([from, nonce]).slice(-20); }; /** * Returns true if the supplied address belongs to a precompiled account * @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; }; /** * Adds "0x" to a given `String` if it does not already start with "0x" * @param {String} str * @return {String} */ exports.addHexPrefix = function (str) { if (typeof str !== 'string') { return str; } return exports.isHexPrefixed(str) ? str : '0x' + str; }; /** * Validate ECDSA signature * @method isValidSignature * @param {Buffer} v * @param {Buffer} r * @param {Buffer} s * @param {Boolean} [homestead=true] * @return {Boolean} */ exports.isValidSignature = function (v, r, s, homestead) { var SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16); var SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16); if (r.length !== 32 || s.length !== 32) { return false; } if (v !== 27 && v !== 28) { return false; } r = new BN(r); s = new BN(s); if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) { return false; } if (homestead === false && new BN(s).cmp(SECP256K1_N_DIV_2) === 1) { return false; } return true; }; /** * Converts a `Buffer` or `Array` to JSON * @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; } }; /** * Defines properties on a `Object`. It make the assumption that underlying data is binary. * @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 = []; // 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); }; self.serialize = function serialize() { return rlp.encode(self.raw); }; fields.forEach(function (field, i) { self._fields.push(field.name); function getter() { return self.raw[i]; } function setter(v) { v = exports.toBuffer(v); if (v.toString('hex') === '00' && !field.allowZero) { v = Buffer.allocUnsafe(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); } self.raw[i] = v; } Object.defineProperty(self, field.name, { enumerable: true, configurable: true, get: getter, set: setter }); if (field.default) { self[field.name] = field.default; } // attach alias if (field.alias) { Object.defineProperty(self, field.alias, { enumerable: false, configurable: true, set: setter, get: getter }); } }); // if the constuctor is passed data if (data) { if (typeof data === 'string') { data = Buffer.from(exports.stripHexPrefix(data), 'hex'); } if (Buffer.isBuffer(data)) { data = rlp.decode(data); } if (Array.isArray(data)) { if (data.length > self._fields.length) { throw new Error('wrong number of fields in data'); } // make sure all the items are buffers data.forEach(function (d, i) { self[self._fields[i]] = exports.toBuffer(d); }); } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') { var keys = Object.keys(data); fields.forEach(function (field) { if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]; if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]; }); } else { throw new Error('invalid data'); } } }; }).call(this,require("buffer").Buffer) },{"assert":20,"bn.js":41,"buffer":74,"create-hash":78,"ethjs-util":154,"keccak":185,"rlp":308,"secp256k1":312}],123:[function(require,module,exports){ (function (Buffer){ 'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var ethUtil = require('ethereumjs-util'); var fees = require('ethereum-common/params.json'); var BN = ethUtil.BN; // secp256k1n/2 var N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16); /** * Creates a new transaction object. * * @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); * * @class * @param {Buffer | Array | Object} 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 * * @property {Buffer} raw The raw rlp encoded transaction * @param {Buffer} data.nonce nonce number * @param {Buffer} data.gasLimit transaction gas limit * @param {Buffer} data.gasPrice transaction gas price * @param {Buffer} data.to to the to address * @param {Buffer} data.value the amount of ether sent * @param {Buffer} data.data this will contain the data of the message or the init of a contract * @param {Buffer} data.v EC signature parameter * @param {Buffer} data.r EC signature parameter * @param {Buffer} data.s EC recovery ID * @param {Number} data.chainId EIP 155 chainId - mainnet: 1, ropsten: 3 * */ var Transaction = function () { function Transaction(data) { _classCallCheck(this, Transaction); data = data || {}; // Define Properties var 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', allowZero: true, default: new Buffer([0x1c]) }, { name: 'r', length: 32, allowZero: true, allowLess: true, default: new Buffer([]) }, { name: 's', length: 32, allowZero: true, allowLess: true, default: new Buffer([]) }]; /** * Returns the rlp encoding of the transaction * @method serialize * @return {Buffer} * @memberof Transaction * @name serialize */ // attached serialize ethUtil.defineProperties(this, fields, data); /** * @property {Buffer} from (read only) sender address of this transaction, mathematically derived from other parameters. * @name from * @memberof Transaction */ Object.defineProperty(this, 'from', { enumerable: true, configurable: true, get: this.getSenderAddress.bind(this) }); // calculate chainId from signature var sigV = ethUtil.bufferToInt(this.v); var chainId = Math.floor((sigV - 35) / 2); if (chainId < 0) chainId = 0; // set chainId this._chainId = chainId || data.chainId || 0; this._homestead = true; } /** * If the tx's `to` is to the creation address * @return {Boolean} */ Transaction.prototype.toCreationAddress = function toCreationAddress() { return this.to.toString('hex') === ''; }; /** * Computes a sha3-256 hash of the serialized tx * @param {Boolean} [includeSignature=true] whether or not to inculde the signature * @return {Buffer} */ Transaction.prototype.hash = function hash(includeSignature) { if (includeSignature === undefined) includeSignature = true; // EIP155 spec: // when computing the hash of a transaction for purposes of signing or recovering, // instead of hashing only the first six elements (ie. nonce, gasprice, startgas, to, value, data), // hash nine elements, with v replaced by CHAIN_ID, r = 0 and s = 0 var items = void 0; if (includeSignature) { items = this.raw; } else { if (this._chainId > 0) { var raw = this.raw.slice(); this.v = this._chainId; this.r = 0; this.s = 0; items = this.raw; this.raw = raw; } else { items = this.raw.slice(0, 6); } } // create hash return ethUtil.rlphash(items); }; /** * returns the public key of the sender * @return {Buffer} */ Transaction.prototype.getChainId = function getChainId() { return this._chainId; }; /** * returns the sender's address * @return {Buffer} */ Transaction.prototype.getSenderAddress = function getSenderAddress() { if (this._from) { return this._from; } var pubkey = this.getSenderPublicKey(); this._from = ethUtil.publicToAddress(pubkey); return this._from; }; /** * returns the public key of the sender * @return {Buffer} */ Transaction.prototype.getSenderPublicKey = function getSenderPublicKey() { if (!this._senderPubKey || !this._senderPubKey.length) { if (!this.verifySignature()) throw new Error('Invalid Signature'); } return this._senderPubKey; }; /** * Determines if the signature is valid * @return {Boolean} */ Transaction.prototype.verifySignature = function verifySignature() { var msgHash = this.hash(false); // 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; } try { var v = ethUtil.bufferToInt(this.v); if (this._chainId > 0) { v -= this._chainId * 2 + 8; } this._senderPubKey = ethUtil.ecrecover(msgHash, v, this.r, this.s); } catch (e) { return false; } return !!this._senderPubKey; }; /** * sign a transaction with a given a private key * @param {Buffer} privateKey */ Transaction.prototype.sign = function sign(privateKey) { var msgHash = this.hash(false); var sig = ethUtil.ecsign(msgHash, privateKey); if (this._chainId > 0) { sig.v += this._chainId * 2 + 8; } Object.assign(this, sig); }; /** * The amount of gas paid for the data in this tx * @return {BN} */ Transaction.prototype.getDataFee = function getDataFee() { var 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; }; /** * the minimum amount of gas the tx must have (DataFee + TxFee + Creation Fee) * @return {BN} */ Transaction.prototype.getBaseFee = function getBaseFee() { var fee = this.getDataFee().iaddn(fees.txGas.v); if (this._homestead && this.toCreationAddress()) { fee.iaddn(fees.txCreation.v); } return fee; }; /** * the up front amount that an account must have for this transaction to be valid * @return {BN} */ Transaction.prototype.getUpfrontCost = function getUpfrontCost() { return new BN(this.gasLimit).imul(new BN(this.gasPrice)).iadd(new BN(this.value)); }; /** * validates the signature and checks to see if it has enough gas * @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 validate(stringError) { var errors = []; if (!this.verifySignature()) { errors.push('Invalid Signature'); } if (this.getBaseFee().cmp(new BN(this.gasLimit)) > 0) { errors.push(['gas limit is too low. Need at least ' + this.getBaseFee()]); } if (stringError === undefined || stringError === false) { return errors.length === 0; } else { return errors.join(' '); } }; return Transaction; }(); module.exports = Transaction; }).call(this,require("buffer").Buffer) },{"buffer":74,"ethereum-common/params.json":115,"ethereumjs-util":124}],124:[function(require,module,exports){ (function (Buffer){ 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var createKeccakHash = require('keccak'); var secp256k1 = require('secp256k1'); var assert = require('assert'); var rlp = require('rlp'); var BN = require('bn.js'); var createHash = require('create-hash'); Object.assign(exports, require('ethjs-util')); /** * the max integer that this VM can handle (a ```BN```) * @var {BN} MAX_INTEGER */ exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16); /** * 2^256 (a ```BN```) * @var {BN} TWO_POW256 */ exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16); /** * SHA3-256 hash of null (a ```String```) * @var {String} SHA3_NULL_S */ exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'; /** * SHA3-256 hash of null (a ```Buffer```) * @var {Buffer} SHA3_NULL */ exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex'); /** * SHA3-256 of an RLP of an empty array (a ```String```) * @var {String} SHA3_RLP_ARRAY_S */ exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'; /** * SHA3-256 of an RLP of an empty array (a ```Buffer```) * @var {Buffer} SHA3_RLP_ARRAY */ exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex'); /** * SHA3-256 hash of the RLP of null (a ```String```) * @var {String} SHA3_RLP_S */ exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'; /** * SHA3-256 hash of the RLP of null (a ```Buffer```) * @var {Buffer} SHA3_RLP */ exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex'); /** * [`BN`](https://github.com/indutny/bn.js) * @var {Function} */ exports.BN = BN; /** * [`rlp`](https://github.com/ethereumjs/rlp) * @var {Function} */ exports.rlp = rlp; /** * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/) * @var {Object} */ exports.secp256k1 = secp256k1; /** * 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) { return Buffer.allocUnsafe(bytes).fill(0); }; /** * 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); } }; /** * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes. * Or it truncates the beginning if it exceeds. * @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); }; /** * Trims leading zeros from a `Buffer` or an `Array` * @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. * @param {*} v the value */ exports.toBuffer = function (v) { if (!Buffer.isBuffer(v)) { if (Array.isArray(v)) { v = Buffer.from(v); } else if (typeof v === 'string') { if (exports.isHexString(v)) { v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex'); } else { v = Buffer.from(v); } } else if (typeof v === 'number') { v = exports.intToBuffer(v); } else if (v === null || v === undefined) { v = Buffer.allocUnsafe(0); } else if (v.toArray) { // converts a BN to a Buffer v = Buffer.from(v.toArray()); } else { throw new Error('invalid type'); } } return v; }; /** * Converts a `Buffer` to a `Number` * @param {Buffer} buf * @return {Number} * @throws If the input number exceeds 53 bits. */ exports.bufferToInt = function (buf) { return new BN(exports.toBuffer(buf)).toNumber(); }; /** * Converts a `Buffer` into a hex `String` * @param {Buffer} buf * @return {String} */ exports.bufferToHex = function (buf) { buf = exports.toBuffer(buf); return '0x' + buf.toString('hex'); }; /** * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers. * @param {Buffer} num * @return {BN} */ exports.fromSigned = function (num) { return new BN(num).fromTwos(256); }; /** * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers. * @param {BN} num * @return {Buffer} */ exports.toUnsigned = function (num) { return Buffer.from(num.toTwos(256).toArray()); }; /** * Creates SHA-3 hash of the input * @param {Buffer|Array|String|Number} a the input data * @param {Number} [bits=256] the SHA width * @return {Buffer} */ exports.sha3 = function (a, bits) { a = exports.toBuffer(a); if (!bits) bits = 256; return createKeccakHash('keccak' + bits).update(a).digest(); }; /** * Creates SHA256 hash of the input * @param {Buffer|Array|String|Number} a the input data * @return {Buffer} */ exports.sha256 = function (a) { a = exports.toBuffer(a); return createHash('sha256').update(a).digest(); }; /** * Creates RIPEMD160 hash of the input * @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 = createHash('rmd160').update(a).digest(); if (padded === true) { return exports.setLength(hash, 32); } else { return hash; } }; /** * Creates SHA-3 hash of the RLP encoded version of the input * @param {Buffer|Array|String|Number} a the input data * @return {Buffer} */ exports.rlphash = function (a) { return exports.sha3(rlp.encode(a)); }; /** * Checks if the private key satisfies the rules of the curve secp256k1. * @param {Buffer} privateKey * @return {Boolean} */ exports.isValidPrivate = function (privateKey) { return secp256k1.privateKeyVerify(privateKey); }; /** * Checks if the public key satisfies the rules of the curve secp256k1 * and the requirements of Ethereum. * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled * @param {Boolean} [sanitize=false] Accept public keys in other formats * @return {Boolean} */ exports.isValidPublic = function (publicKey, sanitize) { if (publicKey.length === 64) { // Convert to SEC1 for secp256k1 return secp256k1.publicKeyVerify(Buffer.concat([Buffer.from([4]), publicKey])); } if (!sanitize) { return false; } return secp256k1.publicKeyVerify(publicKey); }; /** * Returns the ethereum address of a given public key. * Accepts "Ethereum public keys" and SEC1 encoded keys. * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled * @param {Boolean} [sanitize=false] 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); }; /** * Returns the ethereum public key of a given private key * @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.publicKeyCreate(privateKey, false).slice(1); }; /** * Converts a public key to the Ethereum format. * @param {Buffer} publicKey * @return {Buffer} */ exports.importPublic = function (publicKey) { publicKey = exports.toBuffer(publicKey); if (publicKey.length !== 64) { publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1); } return publicKey; }; /** * ECDSA sign * @param {Buffer} msgHash * @param {Buffer} privateKey * @return {Object} */ exports.ecsign = function (msgHash, privateKey) { var sig = secp256k1.sign(msgHash, privateKey); var ret = {}; ret.r = sig.signature.slice(0, 32); ret.s = sig.signature.slice(32, 64); ret.v = sig.recovery + 27; return ret; }; /** * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call. * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign` * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key * used to produce the signature. * @param message * @returns {Buffer} hash */ exports.hashPersonalMessage = function (message) { var prefix = exports.toBuffer('\x19Ethereum Signed Message:\n' + message.length.toString()); return exports.sha3(Buffer.concat([prefix, message])); }; /** * ECDSA public key recovery from signature * @param {Buffer} msgHash * @param {Number} 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 = v - 27; if (recovery !== 0 && recovery !== 1) { throw new Error('Invalid signature v value'); } var senderPubKey = secp256k1.recover(msgHash, signature, recovery); return secp256k1.publicKeyConvert(senderPubKey, false).slice(1); }; /** * Convert signature parameters into the format of `eth_sign` RPC method * @param {Number} v * @param {Buffer} r * @param {Buffer} s * @return {String} sig */ exports.toRpcSig = function (v, r, s) { // NOTE: with potential introduction of chainId this might need to be updated if (v !== 27 && v !== 28) { throw new Error('Invalid recovery id'); } // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053 return exports.bufferToHex(Buffer.concat([exports.setLengthLeft(r, 32), exports.setLengthLeft(s, 32), exports.toBuffer(v - 27)])); }; /** * Convert signature format of the `eth_sign` RPC method to signature parameters * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053 * @param {String} sig * @return {Object} */ exports.fromRpcSig = function (sig) { sig = exports.toBuffer(sig); // NOTE: with potential introduction of chainId this might need to be updated if (sig.length !== 65) { throw new Error('Invalid signature length'); } var v = sig[64]; // support both versions of `eth_sign` responses if (v < 27) { v += 27; } return { v: v, r: sig.slice(0, 32), s: sig.slice(32, 64) }; }; /** * Returns the ethereum address of a given private key * @param {Buffer} privateKey A private key must be 256 bits wide * @return {Buffer} */ exports.privateToAddress = function (privateKey) { return exports.publicToAddress(privateToPublic(privateKey)); }; /** * Checks if the address is a valid. Accepts checksummed addresses too * @param {String} address * @return {Boolean} */ exports.isValidAddress = function (address) { return (/^0x[0-9a-fA-F]{40}$/i.test(address) ); }; /** * Returns a checksummed address * @param {String} address * @return {String} */ exports.toChecksumAddress = function (address) { address = exports.stripHexPrefix(address).toLowerCase(); var hash = exports.sha3(address).toString('hex'); var ret = '0x'; for (var i = 0; i < address.length; i++) { if (parseInt(hash[i], 16) >= 8) { ret += address[i].toUpperCase(); } else { ret += address[i]; } } return ret; }; /** * Checks if the address is a valid checksummed address * @param {Buffer} address * @return {Boolean} */ exports.isValidChecksumAddress = function (address) { return exports.isValidAddress(address) && exports.toChecksumAddress(address) === address; }; /** * Generates an address of a newly created contract * @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); 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 = Buffer.from(nonce.toArray()); } // Only take the lower 160bits of the hash return exports.rlphash([from, nonce]).slice(-20); }; /** * Returns true if the supplied address belongs to a precompiled account * @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; }; /** * Adds "0x" to a given `String` if it does not already start with "0x" * @param {String} str * @return {String} */ exports.addHexPrefix = function (str) { if (typeof str !== 'string') { return str; } return exports.isHexPrefixed(str) ? str : '0x' + str; }; /** * Validate ECDSA signature * @method isValidSignature * @param {Buffer} v * @param {Buffer} r * @param {Buffer} s * @param {Boolean} [homestead=true] * @return {Boolean} */ exports.isValidSignature = function (v, r, s, homestead) { var SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16); var SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16); if (r.length !== 32 || s.length !== 32) { return false; } if (v !== 27 && v !== 28) { return false; } r = new BN(r); s = new BN(s); if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) { return false; } if (homestead === false && new BN(s).cmp(SECP256K1_N_DIV_2) === 1) { return false; } return true; }; /** * Converts a `Buffer` or `Array` to JSON * @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; } }; /** * Defines properties on a `Object`. It make the assumption that underlying data is binary. * @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 = []; // 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); }; self.serialize = function serialize() { return rlp.encode(self.raw); }; fields.forEach(function (field, i) { self._fields.push(field.name); function getter() { return self.raw[i]; } function setter(v) { v = exports.toBuffer(v); if (v.toString('hex') === '00' && !field.allowZero) { v = Buffer.allocUnsafe(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); } self.raw[i] = v; } Object.defineProperty(self, field.name, { enumerable: true, configurable: true, get: getter, set: setter }); if (field.default) { self[field.name] = field.default; } // attach alias if (field.alias) { Object.defineProperty(self, field.alias, { enumerable: false, configurable: true, set: setter, get: getter }); } }); // if the constuctor is passed data if (data) { if (typeof data === 'string') { data = Buffer.from(exports.stripHexPrefix(data), 'hex'); } if (Buffer.isBuffer(data)) { data = rlp.decode(data); } if (Array.isArray(data)) { if (data.length > self._fields.length) { throw new Error('wrong number of fields in data'); } // make sure all the items are buffers data.forEach(function (d, i) { self[self._fields[i]] = exports.toBuffer(d); }); } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') { var keys = Object.keys(data); fields.forEach(function (field) { if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]; if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]; }); } else { throw new Error('invalid data'); } } }; }).call(this,require("buffer").Buffer) },{"assert":20,"bn.js":41,"buffer":74,"create-hash":78,"ethjs-util":154,"keccak":185,"rlp":308,"secp256k1":312}],125:[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 createHash = require('create-hash') /** * the max integer that this VM can handle (a ```BN```) * @var {BN} MAX_INTEGER */ exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16) /** * 2^256 (a ```BN```) * @var {BN} TWO_POW256 */ exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16) /** * SHA3-256 hash of null (a ```String```) * @var {String} SHA3_NULL_S */ exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470' /** * SHA3-256 hash of null (a ```Buffer```) * @var {Buffer} SHA3_NULL */ exports.SHA3_NULL = new Buffer(exports.SHA3_NULL_S, 'hex') /** * SHA3-256 of an RLP of an empty array (a ```String```) * @var {String} SHA3_RLP_ARRAY_S */ exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347' /** * 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') /** * SHA3-256 hash of the RLP of null (a ```String```) * @var {String} SHA3_RLP_S */ exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421' /** * SHA3-256 hash of the RLP of null (a ```Buffer```) * @var {Buffer} SHA3_RLP */ exports.SHA3_RLP = new Buffer(exports.SHA3_RLP_S, 'hex') /** * [`BN`](https://github.com/indutny/bn.js) * @var {Function} */ exports.BN = BN /** * [`rlp`](https://github.com/ethereumjs/rlp) * @var {Function} */ exports.rlp = rlp /** * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/) * @var {Object} */ exports.secp256k1 = secp256k1 /** * 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 } /** * 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) } } /** * 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) } /** * 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 } /** * 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 } return '0x' + hex } /** * 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') } /** * Converts a `Buffer` to a `Number` * @method bufferToInt * @param {Buffer} buf * @return {Number} */ exports.bufferToInt = function (buf) { return parseInt(exports.bufferToHex(buf), 16) } /** * Converts a `Buffer` into a hex `String` * @method bufferToHex * @param {Buffer} buf * @return {String} */ exports.bufferToHex = function (buf) { buf = exports.toBuffer(buf) if (buf.length === 0) { return 0 } return '0x' + buf.toString('hex') } /** * 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) } /** * 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()) } /** * 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 var h = new SHA3(bytes) if (a) { h.update(a) } return new Buffer(h.digest('hex'), 'hex') } /** * 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 createHash('sha256').update(a).digest() } /** * 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 = createHash('rmd160').update(a).digest() if (padded === true) { return exports.setLength(hash, 32) } else { return hash } } /** * 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)) } /** * Checks if the private key satisfies the rules of the curve secp256k1. * @method isValidPrivate * @param {Buffer} privateKey * @return {Boolean} */ exports.isValidPrivate = function (privateKey) { return secp256k1.privateKeyVerify(privateKey) } /** * Checks if the public key satisfies the rules of the curve secp256k1 * and the requirements of Ethereum. * @method isValidPublic * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled * @param {Boolean} [sanitize=false] Accept public keys in other formats * @return {Boolean} */ exports.isValidPublic = function (publicKey, sanitize) { if (publicKey.length === 64) { // Convert to SEC1 for secp256k1 return secp256k1.publicKeyVerify(Buffer.concat([ new Buffer([4]), publicKey ])) } if (!sanitize) { return false } return secp256k1.publicKeyVerify(publicKey) } /** * 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=false] 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) } /** * 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.publicKeyCreate(privateKey, false).slice(1) } /** * Converts a public key to the Ethereum format. * @method importPublic * @param {Buffer} publicKey * @return {Buffer} */ exports.importPublic = function (publicKey) { publicKey = exports.toBuffer(publicKey) if (publicKey.length !== 64) { publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1) } return publicKey } /** * ECDSA sign * @method ecsign * @param {Buffer} msgHash * @param {Buffer} privateKey * @return {Object} */ exports.ecsign = function (msgHash, privateKey) { var sig = secp256k1.sign(msgHash, privateKey) var ret = {} ret.r = sig.signature.slice(0, 32) ret.s = sig.signature.slice(32, 64) ret.v = sig.recovery + 27 return ret } /** * 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 (recovery !== 0 && recovery !== 1) { throw new Error('Invalid signature v value') } var senderPubKey = secp256k1.recover(msgHash, signature, recovery) return secp256k1.publicKeyConvert(senderPubKey, false).slice(1) } /** * Convert signature parameters into the format of `eth_sign` RPC method * @method toRpcSig * @param {Number} v * @param {Buffer} r * @param {Buffer} s * @return {String} sig */ exports.toRpcSig = function (v, r, s) { // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053 return exports.bufferToHex(Buffer.concat([ r, s, exports.toBuffer(v - 27) ])) } /** * Convert signature format of the `eth_sign` RPC method to signature parameters * @method fromRpcSig * @param {String} sig * @return {Object} */ exports.fromRpcSig = function (sig) { sig = exports.toBuffer(sig) var v = sig[64] // support both versions of `eth_sign` responses if (v < 27) { v += 27 } return { v: v, r: sig.slice(0, 32), s: sig.slice(32, 64) } } /** * 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)) } /** * Checks if the address is a valid. Accepts checksummed addresses too * @method isValidAddress * @param {String} address * @return {Boolean} */ exports.isValidAddress = function (address) { return /^0x[0-9a-fA-F]{40}$/i.test(address) } /** * Returns a checksummed address * @method toChecksumAddress * @param {String} address * @return {String} */ exports.toChecksumAddress = function (address) { address = exports.stripHexPrefix(address).toLowerCase() var hash = exports.sha3(address).toString('hex') var ret = '0x' for (var i = 0; i < address.length; i++) { if (parseInt(hash[i], 16) >= 8) { ret += address[i].toUpperCase() } else { ret += address[i] } } return ret } /** * Checks if the address is a valid checksummed address * @method isValidChecksumAddress * @param {Buffer} address * @return {Boolean} */ exports.isValidChecksumAddress = function (address) { return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address) } /** * 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) 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()) } // Only take the lower 160bits of the hash return exports.rlphash([from, nonce]).slice(-20) } /** * 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 } /** * 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' } /** * 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 } /** * 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 } return exports.isHexPrefixed(str) ? str : '0x' + str } /** * 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 } /** * 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 } } /** * 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 = [] // 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) } self.serialize = function serialize () { return rlp.encode(self.raw) } fields.forEach(function (field, i) { self._fields.push(field.name) function getter () { return self.raw[i] } function setter (v) { v = exports.toBuffer(v) if (v.toString('hex') === '00' && !field.allowZero) { v = new Buffer([]) } 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) } self.raw[i] = v } Object.defineProperty(self, field.name, { enumerable: true, configurable: true, get: getter, set: setter }) if (field.default) { self[field.name] = field.default } // attach alias if (field.alias) { Object.defineProperty(self, field.alias, { enumerable: false, configurable: true, set: setter, get: getter }) } }) // if the constuctor is passed data if (data) { if (typeof data === 'string') { data = new Buffer(exports.stripHexPrefix(data), 'hex') } if (Buffer.isBuffer(data)) { data = rlp.decode(data) } if (Array.isArray(data)) { if (data.length > self._fields.length) { throw (new Error('wrong number of fields in data')) } // 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') } } } }).call(this,require("buffer").Buffer) },{"assert":20,"bn.js":41,"buffer":74,"create-hash":78,"keccakjs":191,"rlp":308,"secp256k1":312}],126:[function(require,module,exports){ 'use strict'; module.exports = require('./lib/index.js'); },{"./lib/index.js":131}],127:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; var assert = require('assert'); var utils = require('ethereumjs-util'); var byteSize = 256; /** * Represents a Bloom * @constructor * @param {Buffer} bitvector */ var Bloom = module.exports = function (bitvector) { if (!bitvector) { this.bitvector = utils.zeros(byteSize); } else { assert(bitvector.length === byteSize, 'bitvectors must be 2048 bits long'); this.bitvector = bitvector; } }; /** * adds an element to a bit vector of a 64 byte bloom filter * @method add * @param {Buffer} element */ Bloom.prototype.add = function (e) { e = utils.sha3(e); var mask = 2047; // binary 11111111111 for (var i = 0; i < 3; i++) { var first2bytes = e.readUInt16BE(i * 2); var loc = mask & first2bytes; var byteLoc = loc >> 3; var bitLoc = 1 << loc % 8; this.bitvector[byteSize - byteLoc - 1] |= bitLoc; } }; /** * checks if an element is in the blooom * @method check * @param {Buffer} element */ Bloom.prototype.check = function (e) { e = utils.sha3(e); var mask = 511; // binary 111111111 var match = true; for (var i = 0; i < 3 && match; i++) { var first2bytes = e.readUInt16BE(i * 2); var loc = mask & first2bytes; var byteLoc = loc >> 3; var bitLoc = 1 << loc % 8; match = this.bitvector[byteSize - byteLoc - 1] & bitLoc; } return Boolean(match); }; /** * checks if multple topics are in a bloom * @method check * @param {Buffer} element */ Bloom.prototype.multiCheck = function (topics) { var self = this; var match = true; topics.forEach(function (t) { if (!Buffer.isBuffer(t)) { t = Buffer.from(t, 'hex'); } match && self.check(t); }); return match; }; /** * bitwise or blooms together * @method or * @param {Bloom} bloom */ Bloom.prototype.or = function (bloom) { if (bloom) { for (var i = 0; i <= byteSize; i++) { this.bitvector[i] = this.bitvector[i] | bloom.bitvector[i]; } } }; },{"assert":20,"ethereumjs-util":125,"safe-buffer":311}],128:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; var Tree = require('functional-red-black-tree'); var Account = require('ethereumjs-account'); var async = require('async'); var Cache = module.exports = function (trie) { this._cache = Tree(); this._checkpoints = []; this._deletes = []; this._trie = trie; }; Cache.prototype.put = function (key, val, fromTrie) { var modified = !fromTrie; this._update(key, val, modified, true); }; // returns the queried account or an empty account Cache.prototype.get = function (key) { var account = this.lookup(key); if (!account) { account = new Account(); account.exists = false; } return account; }; // returns the queried account or undefined Cache.prototype.lookup = function (key) { key = key.toString('hex'); var it = this._cache.find(key); if (it.node) { var account = new Account(it.value.val); account.exists = it.value.exists; return account; } }; Cache.prototype._lookupAccount = function (address, cb) { var self = this; self._trie.get(address, function (err, raw) { if (err) return cb(err); var account = new Account(raw); var exists = !!raw; account.exists = exists; cb(null, account, exists); }); }; Cache.prototype.getOrLoad = function (key, cb) { var self = this; var account = this.lookup(key); if (account) { cb(null, account); } else { self._lookupAccount(key, function (err, account, exists) { if (err) return cb(err); self._update(key, account, false, exists); cb(null, account); }); } }; Cache.prototype.warm = function (addresses, cb) { var self = this; // shim till async supports iterators var accountArr = []; addresses.forEach(function (val) { if (val) accountArr.push(val); }); async.eachSeries(accountArr, function (addressHex, done) { var address = Buffer.from(addressHex, 'hex'); self._lookupAccount(address, function (err, account) { if (err) return done(err); self._update(address, account, false, account.exists); done(); }); }, cb); }; Cache.prototype.flush = function (cb) { var it = this._cache.begin; var self = this; var next = true; async.whilst(function () { return next; }, function (done) { if (it.value.modified) { it.value.modified = false; it.value.val = it.value.val.serialize(); self._trie.put(Buffer.from(it.key, 'hex'), it.value.val, function () { next = it.hasNext; it.next(); done(); }); } else { next = it.hasNext; it.next(); done(); } }, function () { async.eachSeries(self._deletes, function (address, done) { self._trie.del(address, done); }, function () { self._deletes = []; cb(); }); }); }; Cache.prototype.checkpoint = function () { this._checkpoints.push(this._cache); }; Cache.prototype.revert = function () { this._cache = this._checkpoints.pop(this._cache); }; Cache.prototype.commit = function () { this._checkpoints.pop(); }; Cache.prototype.clear = function () { this._deletes = []; this._cache = Tree(); }; Cache.prototype.del = function (key) { this._deletes.push(key); key = key.toString('hex'); this._cache = this._cache.remove(key); }; Cache.prototype._update = function (key, val, modified, exists) { key = key.toString('hex'); var it = this._cache.find(key); if (it.node) { this._cache = it.update({ val: val, modified: modified, exists: true }); } else { this._cache = this._cache.insert(key, { val: val, modified: modified, exists: exists }); } }; },{"async":24,"ethereumjs-account":118,"functional-red-black-tree":157,"safe-buffer":311}],129:[function(require,module,exports){ 'use strict'; exports.ERROR = { OUT_OF_GAS: 'out of gas', STACK_UNDERFLOW: 'stack underflow', STACK_OVERFLOW: 'stack overflow', INVALID_JUMP: 'invalid JUMP', INVALID_OPCODE: 'invalid opcode', REVERT: 'revert', STATIC_STATE_CHANGE: 'static state change' }; },{}],130:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; var utils = require('ethereumjs-util'); module.exports = { getBlock: function getBlock(n, cb) { // FIXME: this will fail on block numbers >53 bits var _hash = utils.sha3(Buffer.from(utils.bufferToInt(n).toString(), 'utf8')); var block = { hash: function hash() { return _hash; } }; cb(null, block); } }; },{"ethereumjs-util":125,"safe-buffer":311}],131:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; var util = require('util'); var ethUtil = require('ethereumjs-util'); var StateManager = require('./stateManager.js'); var Account = require('ethereumjs-account'); var AsyncEventEmitter = require('async-eventemitter'); var BN = ethUtil.BN; // require the percomiled contracts var num01 = require('./precompiled/01-ecrecover.js'); var num02 = require('./precompiled/02-sha256.js'); var num03 = require('./precompiled/03-ripemd160.js'); var num04 = require('./precompiled/04-identity.js'); var num05 = require('./precompiled/05-modexp.js'); var num06 = require('./precompiled/06-ecadd.js'); var num07 = require('./precompiled/07-ecmul.js'); var num08 = require('./precompiled/08-ecpairing.js'); module.exports = VM; VM.deps = { ethUtil: ethUtil, Account: require('ethereumjs-account'), Trie: require('merkle-patricia-tree'), rlp: require('ethereumjs-util').rlp /** * @constructor * @param {Object} [opts] * @param {Trie} [opts.state] A merkle-patricia-tree instance for the state tree * @param {Blockchain} [opts.blockchain] A blockchain object for storing/retrieving blocks * @param {Boolean} [opts.activatePrecompiles] Create entries in the state tree for the precompiled contracts */ };function VM() { var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.stateManager = new StateManager({ trie: opts.state, blockchain: opts.blockchain }); // temporary // this is here for a gradual transition to StateManager this.blockchain = this.stateManager.blockchain; this.trie = this.stateManager.trie; this.opts = opts || {}; // precompiled contracts this._precompiled = {}; this._precompiled['0000000000000000000000000000000000000001'] = num01; this._precompiled['0000000000000000000000000000000000000002'] = num02; this._precompiled['0000000000000000000000000000000000000003'] = num03; this._precompiled['0000000000000000000000000000000000000004'] = num04; this._precompiled['0000000000000000000000000000000000000005'] = num05; this._precompiled['0000000000000000000000000000000000000006'] = num06; this._precompiled['0000000000000000000000000000000000000007'] = num07; this._precompiled['0000000000000000000000000000000000000008'] = num08; if (this.opts.activatePrecompiles) { for (var i = 1; i <= 7; i++) { this.trie.put(new BN(i).toArrayLike(Buffer, 'be', 20), new Account().serialize()); } } AsyncEventEmitter.call(this); } util.inherits(VM, AsyncEventEmitter); VM.prototype.runCode = require('./runCode.js'); VM.prototype.runJIT = require('./runJit.js'); VM.prototype.runBlock = require('./runBlock.js'); VM.prototype.runTx = require('./runTx.js'); VM.prototype.runCall = require('./runCall.js'); VM.prototype.runBlockchain = require('./runBlockchain.js'); VM.prototype.copy = function () { return new VM({ state: this.trie.copy(), blockchain: this.blockchain }); }; /** * Loads precompiled contracts into the state */ VM.prototype.loadCompiled = function (address, src, cb) { this.trie.db.put(address, src, cb); }; VM.prototype.populateCache = function (addresses, cb) { this.stateManager.warmCache(addresses, cb); }; },{"./precompiled/01-ecrecover.js":135,"./precompiled/02-sha256.js":136,"./precompiled/03-ripemd160.js":137,"./precompiled/04-identity.js":138,"./precompiled/05-modexp.js":139,"./precompiled/06-ecadd.js":140,"./precompiled/07-ecmul.js":141,"./precompiled/08-ecpairing.js":142,"./runBlock.js":143,"./runBlockchain.js":144,"./runCall.js":145,"./runCode.js":146,"./runJit.js":147,"./runTx.js":148,"./stateManager.js":149,"async-eventemitter":21,"ethereumjs-account":118,"ethereumjs-util":125,"merkle-patricia-tree":259,"safe-buffer":311,"util":334}],132:[function(require,module,exports){ 'use strict'; var utils = require('ethereumjs-util'); var BN = utils.BN; var pow32 = new BN('010000000000000000000000000000000000000000000000000000000000000000', 16); var pow31 = new BN('0100000000000000000000000000000000000000000000000000000000000000', 16); var pow30 = new BN('01000000000000000000000000000000000000000000000000000000000000', 16); var pow29 = new BN('010000000000000000000000000000000000000000000000000000000000', 16); var pow28 = new BN('0100000000000000000000000000000000000000000000000000000000', 16); var pow27 = new BN('01000000000000000000000000000000000000000000000000000000', 16); var pow26 = new BN('010000000000000000000000000000000000000000000000000000', 16); var pow25 = new BN('0100000000000000000000000000000000000000000000000000', 16); var pow24 = new BN('01000000000000000000000000000000000000000000000000', 16); var pow23 = new BN('010000000000000000000000000000000000000000000000', 16); var pow22 = new BN('0100000000000000000000000000000000000000000000', 16); var pow21 = new BN('01000000000000000000000000000000000000000000', 16); var pow20 = new BN('010000000000000000000000000000000000000000', 16); var pow19 = new BN('0100000000000000000000000000000000000000', 16); var pow18 = new BN('01000000000000000000000000000000000000', 16); var pow17 = new BN('010000000000000000000000000000000000', 16); var pow16 = new BN('0100000000000000000000000000000000', 16); var pow15 = new BN('01000000000000000000000000000000', 16); var pow14 = new BN('010000000000000000000000000000', 16); var pow13 = new BN('0100000000000000000000000000', 16); var pow12 = new BN('01000000000000000000000000', 16); var pow11 = new BN('010000000000000000000000', 16); var pow10 = new BN('0100000000000000000000', 16); var pow9 = new BN('01000000000000000000', 16); var pow8 = new BN('010000000000000000', 16); var pow7 = new BN('0100000000000000', 16); var pow6 = new BN('01000000000000', 16); var pow5 = new BN('010000000000', 16); var pow4 = new BN('0100000000', 16); var pow3 = new BN('01000000', 16); var pow2 = new BN('010000', 16); var pow1 = new BN('0100', 16); module.exports = function (a) { if (a.cmp(pow1) === -1) { return 0; } else if (a.cmp(pow2) === -1) { return 1; } else if (a.cmp(pow3) === -1) { return 2; } else if (a.cmp(pow4) === -1) { return 3; } else if (a.cmp(pow5) === -1) { return 4; } else if (a.cmp(pow6) === -1) { return 5; } else if (a.cmp(pow7) === -1) { return 6; } else if (a.cmp(pow8) === -1) { return 7; } else if (a.cmp(pow9) === -1) { return 8; } else if (a.cmp(pow10) === -1) { return 9; } else if (a.cmp(pow11) === -1) { return 10; } else if (a.cmp(pow12) === -1) { return 11; } else if (a.cmp(pow13) === -1) { return 12; } else if (a.cmp(pow14) === -1) { return 13; } else if (a.cmp(pow15) === -1) { return 14; } else if (a.cmp(pow16) === -1) { return 15; } else if (a.cmp(pow17) === -1) { return 16; } else if (a.cmp(pow18) === -1) { return 17; } else if (a.cmp(pow19) === -1) { return 18; } else if (a.cmp(pow20) === -1) { return 19; } else if (a.cmp(pow21) === -1) { return 20; } else if (a.cmp(pow22) === -1) { return 21; } else if (a.cmp(pow23) === -1) { return 22; } else if (a.cmp(pow24) === -1) { return 23; } else if (a.cmp(pow25) === -1) { return 24; } else if (a.cmp(pow26) === -1) { return 25; } else if (a.cmp(pow27) === -1) { return 26; } else if (a.cmp(pow28) === -1) { return 27; } else if (a.cmp(pow29) === -1) { return 28; } else if (a.cmp(pow30) === -1) { return 29; } else if (a.cmp(pow31) === -1) { return 30; } else if (a.cmp(pow32) === -1) { return 31; } else { return 32; } }; },{"ethereumjs-util":125}],133:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; var async = require('async'); var fees = require('ethereum-common'); var utils = require('ethereumjs-util'); var BN = utils.BN; var constants = require('./constants.js'); var logTable = require('./logTable.js'); var ERROR = constants.ERROR; var MAX_INT = 9007199254740991; // the opcode functions module.exports = { STOP: function STOP(runState) { runState.stopped = true; }, ADD: function ADD(a, b, runState) { return new BN(a).iadd(new BN(b)).mod(utils.TWO_POW256).toArrayLike(Buffer, 'be', 32); }, MUL: function MUL(a, b, runState) { return new BN(a).imul(new BN(b)).mod(utils.TWO_POW256).toArrayLike(Buffer, 'be', 32); }, SUB: function SUB(a, b, runState) { return utils.toUnsigned(new BN(a).isub(new BN(b))); }, DIV: function DIV(a, b, runState) { b = new BN(b); if (b.isZero()) { return Buffer.from([0]); } else { a = new BN(a); return a.div(b).toArrayLike(Buffer, 'be', 32); } }, SDIV: function SDIV(a, b, runState) { b = utils.fromSigned(b); if (b.isZero()) { return Buffer.from([0]); } else { a = utils.fromSigned(a); return utils.toUnsigned(a.div(b)); } }, MOD: function MOD(a, b, runState) { b = new BN(b); if (b.isZero()) { return Buffer.from([0]); } else { a = new BN(a); return a.mod(b).toArrayLike(Buffer, 'be', 32); } }, SMOD: function SMOD(a, b, runState) { b = utils.fromSigned(b); var r; if (b.isZero()) { r = Buffer.from([0]); } else { a = utils.fromSigned(a); r = a.abs().mod(b.abs()); if (a.isNeg()) { r = r.ineg(); } r = utils.toUnsigned(r); } return r; }, ADDMOD: function ADDMOD(a, b, c, runState) { c = new BN(c); if (c.isZero()) { return Buffer.from([0]); } else { a = new BN(a).iadd(new BN(b)); return a.mod(c).toArrayLike(Buffer, 'be', 32); } }, MULMOD: function MULMOD(a, b, c, runState) { c = new BN(c); if (c.isZero()) { return Buffer.from([0]); } else { a = new BN(a).imul(new BN(b)); return a.mod(c).toArrayLike(Buffer, 'be', 32); } }, EXP: function EXP(base, exponent, runState) { base = new BN(base); exponent = new BN(exponent); var m = BN.red(utils.TWO_POW256); base = base.toRed(m); if (!exponent.isZero()) { var bytes = 1 + logTable(exponent); subGas(runState, new BN(bytes).muln(fees.expByteGas.v)); return base.redPow(exponent).toArrayLike(Buffer, 'be', 32); } else { return Buffer.from([1]); } }, SIGNEXTEND: function SIGNEXTEND(k, val, runState) { k = new BN(k); val = Buffer.from(val); // use clone, don't modify object reference var extendOnes = false; if (k.lten(31)) { k = k.toNumber(); if (val[31 - k] & 0x80) { extendOnes = true; } // 31-k-1 since k-th byte shouldn't be modified for (var i = 30 - k; i >= 0; i--) { val[i] = extendOnes ? 0xff : 0; } } return val; }, // 0x10 range - bit ops LT: function LT(a, b, runState) { return Buffer.from([new BN(a).lt(new BN(b))]); }, GT: function GT(a, b, runState) { return Buffer.from([new BN(a).gt(new BN(b))]); }, SLT: function SLT(a, b, runState) { return Buffer.from([utils.fromSigned(a).lt(utils.fromSigned(b))]); }, SGT: function SGT(a, b, runState) { return Buffer.from([utils.fromSigned(a).gt(utils.fromSigned(b))]); }, EQ: function EQ(a, b, runState) { a = utils.unpad(a); b = utils.unpad(b); return Buffer.from([a.toString('hex') === b.toString('hex')]); }, ISZERO: function ISZERO(a, runState) { a = new BN(a); return Buffer.from([a.isZero()]); }, AND: function AND(a, b, runState) { return new BN(a).iand(new BN(b)).toArrayLike(Buffer, 'be', 32); }, OR: function OR(a, b, runState) { return new BN(a).ior(new BN(b)).toArrayLike(Buffer, 'be', 32); }, XOR: function XOR(a, b, runState) { return new BN(a).ixor(new BN(b)).toArrayLike(Buffer, 'be', 32); }, NOT: function NOT(a, runState) { return new BN(a).inotn(256).toArrayLike(Buffer, 'be', 32); }, BYTE: function BYTE(pos, word, runState) { pos = new BN(pos); if (pos.gten(32)) { return Buffer.from([0]); } pos = pos.toNumber(); word = utils.setLengthLeft(word, 32); return utils.intToBuffer(word[pos]); }, // 0x20 range - crypto SHA3: function SHA3(offset, length, runState) { offset = utils.bufferToInt(offset); length = utils.bufferToInt(length); var data = memLoad(runState, offset, length); // copy fee subGas(runState, new BN(fees.sha3WordGas.v).imuln(Math.ceil(length / 32))); return utils.sha3(data); }, // 0x30 range - closure state ADDRESS: function ADDRESS(runState) { return runState.address; }, BALANCE: function BALANCE(address, runState, cb) { var stateManager = runState.stateManager; // stack to address address = utils.setLengthLeft(address, 20); // shortcut if current account if (address.toString('hex') === runState.address.toString('hex')) { cb(null, utils.setLengthLeft(runState.contract.balance, 32)); return; } // otherwise load account then return balance stateManager.getAccountBalance(address, cb); }, ORIGIN: function ORIGIN(runState) { return runState.origin; }, CALLER: function CALLER(runState) { return runState.caller; }, CALLVALUE: function CALLVALUE(runState) { return runState.callValue; }, CALLDATALOAD: function CALLDATALOAD(pos, runState) { pos = new BN(pos); var loaded; if (pos.gtn(runState.callData.length)) { loaded = Buffer.from([0]); } else { pos = pos.toNumber(); loaded = runState.callData.slice(pos, pos + 32); loaded = loaded.length ? loaded : Buffer.from([0]); } return utils.setLengthRight(loaded, 32); }, CALLDATASIZE: function CALLDATASIZE(runState) { if (runState.callData.length === 1 && runState.callData[0] === 0) { return Buffer.from([0]); } else { return utils.intToBuffer(runState.callData.length); } }, CALLDATACOPY: function CALLDATACOPY(memOffset, dataOffset, dataLength, runState) { memOffset = utils.bufferToInt(memOffset); dataLength = utils.bufferToInt(dataLength); dataOffset = utils.bufferToInt(dataOffset); memStore(runState, memOffset, runState.callData, dataOffset, dataLength); // sub the COPY fee subGas(runState, new BN(fees.copyGas.v).imuln(Math.ceil(dataLength / 32))); }, CODESIZE: function CODESIZE(runState) { return utils.intToBuffer(runState.code.length); }, CODECOPY: function CODECOPY(memOffset, codeOffset, length, runState) { memOffset = utils.bufferToInt(memOffset); codeOffset = utils.bufferToInt(codeOffset); length = utils.bufferToInt(length); memStore(runState, memOffset, runState.code, codeOffset, length); // sub the COPY fee subGas(runState, new BN(fees.copyGas.v).imuln(Math.ceil(length / 32))); }, EXTCODESIZE: function EXTCODESIZE(address, runState, cb) { var stateManager = runState.stateManager; address = utils.setLengthLeft(address, 20); stateManager.getContractCode(address, function (err, code) { if (err) return cb(err); cb(null, utils.intToBuffer(code.length)); }); }, EXTCODECOPY: function EXTCODECOPY(address, memOffset, codeOffset, length, runState, cb) { var stateManager = runState.stateManager; address = utils.setLengthLeft(address, 20); memOffset = utils.bufferToInt(memOffset); codeOffset = utils.bufferToInt(codeOffset); length = utils.bufferToInt(length); // FIXME: for some reason this must come before subGas subMemUsage(runState, memOffset, length); // copy fee subGas(runState, new BN(fees.copyGas.v).imuln(Math.ceil(length / 32))); stateManager.getContractCode(address, function (err, code) { if (err) return cb(err); memStore(runState, memOffset, code, codeOffset, length, false); cb(null); }); }, RETURNDATASIZE: function RETURNDATASIZE(runState) { return utils.intToBuffer(runState.lastReturned.length); }, RETURNDATACOPY: function RETURNDATACOPY(memOffset, returnDataOffset, length, runState) { memOffset = utils.bufferToInt(memOffset); returnDataOffset = utils.bufferToInt(returnDataOffset); length = utils.bufferToInt(length); if (returnDataOffset + length > runState.lastReturned.length) { trap(ERROR.OUT_OF_GAS); } memStore(runState, memOffset, utils.toBuffer(runState.lastReturned), returnDataOffset, length, false); // sub the COPY fee subGas(runState, new BN(fees.copyGas.v).imuln(Math.ceil(length / 32))); }, GASPRICE: function GASPRICE(runState) { return utils.setLengthLeft(runState.gasPrice, 32); }, // '0x40' range - block operations BLOCKHASH: function BLOCKHASH(number, runState, cb) { var stateManager = runState.stateManager; var diff = new BN(runState.block.header.number).sub(new BN(number)); // block lookups must be within the past 256 blocks if (diff.gtn(256) || diff.lten(0)) { cb(null, Buffer.from([0])); return; } stateManager.getBlockHash(number, function (err, blockHash) { if (err) return cb(err); cb(null, blockHash); }); }, COINBASE: function COINBASE(runState) { return utils.setLengthLeft(runState.block.header.coinbase, 32); }, TIMESTAMP: function TIMESTAMP(runState) { return utils.setLengthLeft(runState.block.header.timestamp, 32); }, NUMBER: function NUMBER(runState) { return utils.setLengthLeft(runState.block.header.number, 32); }, DIFFICULTY: function DIFFICULTY(runState) { return utils.setLengthLeft(runState.block.header.difficulty, 32); }, GASLIMIT: function GASLIMIT(runState) { return utils.setLengthLeft(runState.block.header.gasLimit, 32); }, // 0x50 range - 'storage' and execution POP: function POP() {}, MLOAD: function MLOAD(pos, runState) { pos = utils.bufferToInt(pos); var loaded = utils.unpad(memLoad(runState, pos, 32)); return loaded; }, MSTORE: function MSTORE(offset, word, runState) { offset = utils.bufferToInt(offset); word = utils.setLengthLeft(word, 32); memStore(runState, offset, word, 0, 32); }, MSTORE8: function MSTORE8(offset, byte, runState) { offset = utils.bufferToInt(offset); // grab the last byte byte = byte.slice(byte.length - 1); memStore(runState, offset, byte, 0, 1); }, SLOAD: function SLOAD(key, runState, cb) { var stateManager = runState.stateManager; key = utils.setLengthLeft(key, 32); stateManager.getContractStorage(runState.address, key, function (err, value) { if (err) return cb(err); value = value.length ? value : Buffer.from([0]); cb(null, value); }); }, SSTORE: function SSTORE(key, val, runState, cb) { if (runState.static) { trap(ERROR.STATIC_STATE_CHANGE); } var stateManager = runState.stateManager; var address = runState.address; key = utils.setLengthLeft(key, 32); var value = utils.unpad(val); stateManager.getContractStorage(runState.address, key, function (err, found) { if (err) return cb(err); try { if (value.length === 0 && !found.length) { subGas(runState, new BN(fees.sstoreResetGas.v)); } else if (value.length === 0 && found.length) { subGas(runState, new BN(fees.sstoreResetGas.v)); runState.gasRefund.iadd(new BN(fees.sstoreRefundGas.v)); } else if (value.length !== 0 && !found.length) { subGas(runState, new BN(fees.sstoreSetGas.v)); } else if (value.length !== 0 && found.length) { subGas(runState, new BN(fees.sstoreResetGas.v)); } } catch (e) { cb(e.error); return; } stateManager.putContractStorage(address, key, value, function (err) { if (err) return cb(err); runState.contract = stateManager.cache.get(address); cb(null); }); }); }, JUMP: function JUMP(dest, runState) { dest = new BN(dest); if (dest.gtn(runState.code.length)) { trap(ERROR.INVALID_JUMP + ' at ' + describeLocation(runState)); } dest = dest.toNumber(); if (!jumpIsValid(runState, dest)) { trap(ERROR.INVALID_JUMP + ' at ' + describeLocation(runState)); } runState.programCounter = dest; }, JUMPI: function JUMPI(dest, cond, runState) { dest = new BN(dest); cond = new BN(cond); if (!cond.isZero()) { if (dest.gtn(runState.code.length)) { trap(ERROR.INVALID_JUMP + ' at ' + describeLocation(runState)); } dest = dest.toNumber(); if (!jumpIsValid(runState, dest)) { trap(ERROR.INVALID_JUMP + ' at ' + describeLocation(runState)); } runState.programCounter = dest; } }, PC: function PC(runState) { return utils.intToBuffer(runState.programCounter - 1); }, MSIZE: function MSIZE(runState) { return utils.intToBuffer(runState.memoryWordCount * 32); }, GAS: function GAS(runState) { return runState.gasLeft.toArrayLike(Buffer, 'be', 32); }, JUMPDEST: function JUMPDEST(runState) {}, PUSH: function PUSH(runState) { var numToPush = runState.opCode - 0x5f; var loaded = utils.setLengthLeft(runState.code.slice(runState.programCounter, runState.programCounter + numToPush), 32); runState.programCounter += numToPush; return loaded; }, DUP: function DUP(runState) { var stackPos = runState.opCode - 0x7f; if (stackPos > runState.stack.length) { trap(ERROR.STACK_UNDERFLOW); } // dupilcated stack items point to the same Buffer return runState.stack[runState.stack.length - stackPos]; }, SWAP: function SWAP(runState) { var stackPos = runState.opCode - 0x8f; // check the stack to make sure we have enough items on teh stack var swapIndex = runState.stack.length - stackPos - 1; if (swapIndex < 0) { trap(ERROR.STACK_UNDERFLOW); } // preform the swap var newTop = runState.stack[swapIndex]; runState.stack[swapIndex] = runState.stack.pop(); return newTop; }, LOG: function LOG(memOffset, memLength) { var args = Array.prototype.slice.call(arguments, 0); var runState = args.pop(); if (runState.static) { trap(ERROR.STATIC_STATE_CHANGE); } var topics = args.slice(2); topics = topics.map(function (a) { return utils.setLengthLeft(a, 32); }); memOffset = utils.bufferToInt(memOffset); memLength = utils.bufferToInt(memLength); var numOfTopics = runState.opCode - 0xa0; var mem = memLoad(runState, memOffset, memLength); subGas(runState, new BN(fees.logTopicGas.v).imuln(numOfTopics).iadd(new BN(fees.logDataGas.v).imuln(memLength))); // add address var log = [runState.address]; log.push(topics); // add data log.push(mem); runState.logs.push(log); }, // '0xf0' range - closures CREATE: function CREATE(value, offset, length, runState, done) { if (runState.static) { trap(ERROR.STATIC_STATE_CHANGE); } value = new BN(value); offset = utils.bufferToInt(offset); length = utils.bufferToInt(length); var data = memLoad(runState, offset, length); var options = { value: value, data: data }; var localOpts = { inOffset: offset, inLength: length, outOffset: 0, outLength: 0 }; checkCallMemCost(runState, options, localOpts); checkOutOfGas(runState, options); makeCall(runState, options, localOpts, done); }, CALL: function CALL(gasLimit, toAddress, value, inOffset, inLength, outOffset, outLength, runState, done) { var stateManager = runState.stateManager; gasLimit = new BN(gasLimit); toAddress = utils.setLengthLeft(toAddress, 20); value = new BN(value); inOffset = utils.bufferToInt(inOffset); inLength = utils.bufferToInt(inLength); outOffset = utils.bufferToInt(outOffset); outLength = utils.bufferToInt(outLength); if (runState.static && !value.isZero()) { trap(ERROR.STATIC_STATE_CHANGE); } var data = memLoad(runState, inOffset, inLength); var options = { gasLimit: gasLimit, value: value, to: toAddress, data: data, static: runState.static }; var localOpts = { inOffset: inOffset, inLength: inLength, outOffset: outOffset, outLength: outLength }; if (!value.isZero()) { subGas(runState, new BN(fees.callValueTransferGas.v)); } stateManager.exists(toAddress, function (err, exists) { if (err) { done(err); return; } stateManager.accountIsEmpty(toAddress, function (err, empty) { if (err) { done(err); return; } if (!exists || empty) { if (!value.isZero()) { try { subGas(runState, new BN(fees.callNewAccountGas.v)); } catch (e) { done(e.error); return; } } } try { checkCallMemCost(runState, options, localOpts); checkOutOfGas(runState, options); } catch (e) { done(e.error); return; } if (!value.isZero()) { runState.gasLeft.iadd(new BN(fees.callStipend.v)); options.gasLimit.iadd(new BN(fees.callStipend.v)); } makeCall(runState, options, localOpts, done); }); }); }, CALLCODE: function CALLCODE(gas, toAddress, value, inOffset, inLength, outOffset, outLength, runState, done) { var stateManager = runState.stateManager; gas = new BN(gas); toAddress = utils.setLengthLeft(toAddress, 20); value = new BN(value); inOffset = utils.bufferToInt(inOffset); inLength = utils.bufferToInt(inLength); outOffset = utils.bufferToInt(outOffset); outLength = utils.bufferToInt(outLength); var data = memLoad(runState, inOffset, inLength); var options = { gasLimit: gas, value: value, data: data, to: runState.address, static: runState.static }; var localOpts = { inOffset: inOffset, inLength: inLength, outOffset: outOffset, outLength: outLength }; if (!value.isZero()) { subGas(runState, new BN(fees.callValueTransferGas.v)); } checkCallMemCost(runState, options, localOpts); checkOutOfGas(runState, options); if (!value.isZero()) { runState.gasLeft.iadd(new BN(fees.callStipend.v)); options.gasLimit.iadd(new BN(fees.callStipend.v)); } // load the code stateManager.getAccount(toAddress, function (err, account) { if (err) return done(err); if (runState._precompiled[toAddress.toString('hex')]) { options.compiled = true; options.code = runState._precompiled[toAddress.toString('hex')]; makeCall(runState, options, localOpts, done); } else { stateManager.getContractCode(toAddress, function (err, code, compiled) { if (err) return done(err); options.compiled = compiled || false; options.code = code; makeCall(runState, options, localOpts, done); }); } }); }, DELEGATECALL: function DELEGATECALL(gas, toAddress, inOffset, inLength, outOffset, outLength, runState, done) { var stateManager = runState.stateManager; var value = runState.callValue; gas = new BN(gas); toAddress = utils.setLengthLeft(toAddress, 20); inOffset = utils.bufferToInt(inOffset); inLength = utils.bufferToInt(inLength); outOffset = utils.bufferToInt(outOffset); outLength = utils.bufferToInt(outLength); var data = memLoad(runState, inOffset, inLength); var options = { gasLimit: gas, value: value, data: data, to: runState.address, caller: runState.caller, delegatecall: true, static: runState.static }; var localOpts = { inOffset: inOffset, inLength: inLength, outOffset: outOffset, outLength: outLength }; checkCallMemCost(runState, options, localOpts); checkOutOfGas(runState, options); // load the code stateManager.getAccount(toAddress, function (err, account) { if (err) return done(err); if (runState._precompiled[toAddress.toString('hex')]) { options.compiled = true; options.code = runState._precompiled[toAddress.toString('hex')]; makeCall(runState, options, localOpts, done); } else { stateManager.getContractCode(toAddress, function (err, code, compiled) { if (err) return done(err); options.compiled = compiled || false; options.code = code; makeCall(runState, options, localOpts, done); }); } }); }, STATICCALL: function STATICCALL(gasLimit, toAddress, inOffset, inLength, outOffset, outLength, runState, done) { var stateManager = runState.stateManager; gasLimit = new BN(gasLimit); toAddress = utils.setLengthLeft(toAddress, 20); var value = new BN(0); inOffset = utils.bufferToInt(inOffset); inLength = utils.bufferToInt(inLength); outOffset = utils.bufferToInt(outOffset); outLength = utils.bufferToInt(outLength); var data = memLoad(runState, inOffset, inLength); var options = { gasLimit: gasLimit, value: value, to: toAddress, data: data, static: true }; var localOpts = { inOffset: inOffset, inLength: inLength, outOffset: outOffset, outLength: outLength }; stateManager.exists(toAddress, function (err, exists) { if (err) { done(err); return; } stateManager.accountIsEmpty(toAddress, function (err, empty) { if (err) { done(err); return; } try { checkCallMemCost(runState, options, localOpts); checkOutOfGas(runState, options); } catch (e) { done(e.error); return; } makeCall(runState, options, localOpts, done); }); }); }, RETURN: function RETURN(offset, length, runState) { offset = utils.bufferToInt(offset); length = utils.bufferToInt(length); runState.returnValue = memLoad(runState, offset, length); }, REVERT: function REVERT(offset, length, runState) { offset = utils.bufferToInt(offset); length = utils.bufferToInt(length); runState.stopped = true; runState.returnValue = memLoad(runState, offset, length); trap(ERROR.REVERT); }, // '0x70', range - other SELFDESTRUCT: function SELFDESTRUCT(selfdestructToAddress, runState, cb) { if (runState.static) { trap(ERROR.STATIC_STATE_CHANGE); } var stateManager = runState.stateManager; var contract = runState.contract; var contractAddress = runState.address; var zeroBalance = new BN(0); selfdestructToAddress = utils.setLengthLeft(selfdestructToAddress, 20); stateManager.getAccount(selfdestructToAddress, function (err, toAccount) { // update balances if (err) { cb(err); return; } stateManager.accountIsEmpty(selfdestructToAddress, function (error, empty) { if (error) { cb(error); return; } if (new BN(contract.balance).gt(zeroBalance)) { if (!toAccount.exists || empty) { try { subGas(runState, new BN(fees.callNewAccountGas.v)); } catch (e) { cb(e.error); return; } } } // only add to refund if this is the first selfdestruct for the address if (!runState.selfdestruct[contractAddress.toString('hex')]) { runState.gasRefund = runState.gasRefund.add(new BN(fees.suicideRefundGas.v)); } runState.selfdestruct[contractAddress.toString('hex')] = selfdestructToAddress; runState.stopped = true; var newBalance = new BN(contract.balance).add(new BN(toAccount.balance)).toArrayLike(Buffer); async.series([stateManager.putAccountBalance.bind(stateManager, selfdestructToAddress, newBalance), stateManager.putAccountBalance.bind(stateManager, contractAddress, new BN(0))], function (err) { // The reason for this is to avoid sending an array of results cb(err); }); }); }); } }; module.exports._DC = module.exports.DELEGATECALL; function describeLocation(runState) { var hash = utils.sha3(runState.code).toString('hex'); var address = runState.address.toString('hex'); var pc = runState.programCounter - 1; return hash + '/' + address + ':' + pc; } function subGas(runState, amount) { runState.gasLeft.isub(amount); if (runState.gasLeft.ltn(0)) { runState.gasLeft = new BN(0); trap(ERROR.OUT_OF_GAS); } } function trap(err) { function VmError(error) { this.error = error; } throw new VmError(err); } /** * Subtracts the amount needed for memory usage from `runState.gasLeft` * @method subMemUsage * @param {Number} offset * @param {Number} length * @return {String} */ function subMemUsage(runState, offset, length) { // abort if no usage if (!length) return; // hacky: if the dataOffset is larger than the largest safeInt then just // load 0's because if tx.data did have that amount of data then the fee // would be high than the maxGasLimit in the block if (offset > MAX_INT || length > MAX_INT) { runState.gasLeft = new BN(0); trap(ERROR.OUT_OF_GAS); } var newMemoryWordCount = Math.ceil((offset + length) / 32); if (newMemoryWordCount <= runState.memoryWordCount) return; runState.memoryWordCount = newMemoryWordCount; var words = new BN(newMemoryWordCount); var fee = new BN(fees.memoryGas.v); var quadCoeff = new BN(fees.quadCoeffDiv.v); // words * 3 + words ^2 / 512 var cost = words.mul(fee).add(words.mul(words).div(quadCoeff)); if (cost.gt(runState.highestMemCost)) { subGas(runState, cost.sub(runState.highestMemCost)); runState.highestMemCost = cost; } } /** * Loads bytes from memory and returns them as a buffer. If an error occurs * a string is instead returned. The function also subtracts the amount of * gas need for memory expansion. * @method memLoad * @param {Number} offset where to start reading from * @param {Number} length how far to read * @return {Buffer|String} */ function memLoad(runState, offset, length) { // check to see if we have enougth gas for the mem read subMemUsage(runState, offset, length); var loaded = runState.memory.slice(offset, offset + length); // fill the remaining lenth with zeros for (var i = loaded.length; i < length; i++) { loaded.push(0); } return Buffer.from(loaded); } /** * Stores bytes to memory. If an error occurs a string is instead returned. * The function also subtracts the amount of gas need for memory expansion. * @method memStore * @param {Number} offset where to start reading from * @param {Number} length how far to read * @return {Buffer|String} */ function memStore(runState, offset, val, valOffset, length, skipSubMem) { if (skipSubMem !== false) { subMemUsage(runState, offset, length); } var valLength = Math.min(val.length, length); // read max possible from the value for (var i = 0; i < valLength; i++) { runState.memory[offset + i] = val[valOffset + i]; } } // checks if a jump is valid given a destination function jumpIsValid(runState, dest) { return runState.validJumps.indexOf(dest) !== -1; } // checks to see if we have enough gas left for the memory reads and writes // required by the CALLs function checkCallMemCost(runState, callOptions, localOpts) { // calculates the gas need for saving the output in memory subMemUsage(runState, localOpts.outOffset, localOpts.outLength); if (!callOptions.gasLimit) { callOptions.gasLimit = runState.gasLeft; } } function checkOutOfGas(runState, callOptions) { var gasAllowed = runState.gasLeft.sub(runState.gasLeft.div(new BN(64))); if (callOptions.gasLimit.gt(gasAllowed)) { callOptions.gasLimit = gasAllowed; } } // sets up and calls runCall function makeCall(runState, callOptions, localOpts, cb) { callOptions.caller = callOptions.caller || runState.address; callOptions.origin = runState.origin; callOptions.gasPrice = runState.gasPrice; callOptions.block = runState.block; callOptions.populateCache = false; callOptions.static = callOptions.static || false; callOptions.selfdestruct = runState.selfdestruct; // increment the runState.depth callOptions.depth = runState.depth + 1; // empty the return data buffer runState.lastReturned = new Buffer([]); // check if account has enough ether // Note: in the case of delegatecall, the value is persisted and doesn't need to be deducted again if (runState.depth >= fees.stackLimit.v || callOptions.delegatecall !== true && new BN(runState.contract.balance).lt(callOptions.value)) { runState.stack.push(Buffer.from([0])); cb(null); } else { // if creating a new contract then increament the nonce if (!callOptions.to) { runState.contract.nonce = new BN(runState.contract.nonce).addn(1); } runState.stateManager.cache.put(runState.address, runState.contract); runState._vm.runCall(callOptions, parseCallResults); } function parseCallResults(err, results) { if (err) return cb(err); // concat the runState.logs if (results.vm.logs) { runState.logs = runState.logs.concat(results.vm.logs); } // add gasRefund if (results.vm.gasRefund) { runState.gasRefund = runState.gasRefund.add(results.vm.gasRefund); } // this should always be safe runState.gasLeft.isub(results.gasUsed); // save results to memory if (results.vm.return && (!results.vm.exceptionError || results.vm.exceptionError === ERROR.REVERT)) { memStore(runState, localOpts.outOffset, results.vm.return, 0, localOpts.outLength, false); if (results.vm.exceptionError === ERROR.REVERT && runState.opName === 'CREATE') { runState.lastReturned = results.vm.return; } switch (runState.opName) { case 'CALL': case 'CALLCODE': case 'DELEGATECALL': case 'STATICCALL': runState.lastReturned = results.vm.return; break; } } if (!results.vm.exceptionError) { // update stateRoot on current contract runState.stateManager.getAccount(runState.address, function (err, account) { if (err) return cb(err); runState.contract = account; // push the created address to the stack if (results.createdAddress) { cb(null, results.createdAddress); } else { cb(null, Buffer.from([results.vm.exception])); } }); } else { // creation failed so don't increament the nonce if (results.vm.createdAddress) { runState.contract.nonce = new BN(runState.contract.nonce).subn(1); } cb(null, Buffer.from([results.vm.exception])); } } } },{"./constants.js":129,"./logTable.js":132,"async":24,"ethereum-common":152,"ethereumjs-util":125,"safe-buffer":311}],134:[function(require,module,exports){ 'use strict'; var codes = { // 0x0 range - arithmetic ops // name, baseCost, off stack, on stack, dynamic, async 0x00: ['STOP', 0, 0, 0, false], 0x01: ['ADD', 3, 2, 1, false], 0x02: ['MUL', 5, 2, 1, false], 0x03: ['SUB', 3, 2, 1, false], 0x04: ['DIV', 5, 2, 1, false], 0x05: ['SDIV', 5, 2, 1, false], 0x06: ['MOD', 5, 2, 1, false], 0x07: ['SMOD', 5, 2, 1, false], 0x08: ['ADDMOD', 8, 3, 1, false], 0x09: ['MULMOD', 8, 3, 1, false], 0x0a: ['EXP', 10, 2, 1, false], 0x0b: ['SIGNEXTEND', 5, 2, 1, false], // 0x10 range - bit ops 0x10: ['LT', 3, 2, 1, false], 0x11: ['GT', 3, 2, 1, false], 0x12: ['SLT', 3, 2, 1, false], 0x13: ['SGT', 3, 2, 1, false], 0x14: ['EQ', 3, 2, 1, false], 0x15: ['ISZERO', 3, 1, 1, false], 0x16: ['AND', 3, 2, 1, false], 0x17: ['OR', 3, 2, 1, false], 0x18: ['XOR', 3, 2, 1, false], 0x19: ['NOT', 3, 1, 1, false], 0x1a: ['BYTE', 3, 2, 1, false], // 0x20 range - crypto 0x20: ['SHA3', 30, 2, 1, false], // 0x30 range - closure state 0x30: ['ADDRESS', 2, 0, 1, true], 0x31: ['BALANCE', 400, 1, 1, true, true], 0x32: ['ORIGIN', 2, 0, 1, true], 0x33: ['CALLER', 2, 0, 1, true], 0x34: ['CALLVALUE', 2, 0, 1, true], 0x35: ['CALLDATALOAD', 3, 1, 1, true], 0x36: ['CALLDATASIZE', 2, 0, 1, true], 0x37: ['CALLDATACOPY', 3, 3, 0, true], 0x38: ['CODESIZE', 2, 0, 1, false], 0x39: ['CODECOPY', 3, 3, 0, false], 0x3a: ['GASPRICE', 2, 0, 1, false], 0x3b: ['EXTCODESIZE', 700, 1, 1, true, true], 0x3c: ['EXTCODECOPY', 700, 4, 0, true, true], 0x3d: ['RETURNDATASIZE', 2, 0, 1, true], 0x3e: ['RETURNDATACOPY', 3, 3, 0, true], // '0x40' range - block operations 0x40: ['BLOCKHASH', 20, 1, 1, true, true], 0x41: ['COINBASE', 2, 0, 1, true], 0x42: ['TIMESTAMP', 2, 0, 1, true], 0x43: ['NUMBER', 2, 0, 1, true], 0x44: ['DIFFICULTY', 2, 0, 1, true], 0x45: ['GASLIMIT', 2, 0, 1, true], // 0x50 range - 'storage' and execution 0x50: ['POP', 2, 1, 0, false], 0x51: ['MLOAD', 3, 1, 1, false], 0x52: ['MSTORE', 3, 2, 0, false], 0x53: ['MSTORE8', 3, 2, 0, false], 0x54: ['SLOAD', 200, 1, 1, true, true], 0x55: ['SSTORE', 0, 2, 0, true, true], 0x56: ['JUMP', 8, 1, 0, false], 0x57: ['JUMPI', 10, 2, 0, false], 0x58: ['PC', 2, 0, 1, false], 0x59: ['MSIZE', 2, 0, 1, false], 0x5a: ['GAS', 2, 0, 1, false], 0x5b: ['JUMPDEST', 1, 0, 0, false], // 0x60, range 0x60: ['PUSH', 3, 0, 1, false], 0x61: ['PUSH', 3, 0, 1, false], 0x62: ['PUSH', 3, 0, 1, false], 0x63: ['PUSH', 3, 0, 1, false], 0x64: ['PUSH', 3, 0, 1, false], 0x65: ['PUSH', 3, 0, 1, false], 0x66: ['PUSH', 3, 0, 1, false], 0x67: ['PUSH', 3, 0, 1, false], 0x68: ['PUSH', 3, 0, 1, false], 0x69: ['PUSH', 3, 0, 1, false], 0x6a: ['PUSH', 3, 0, 1, false], 0x6b: ['PUSH', 3, 0, 1, false], 0x6c: ['PUSH', 3, 0, 1, false], 0x6d: ['PUSH', 3, 0, 1, false], 0x6e: ['PUSH', 3, 0, 1, false], 0x6f: ['PUSH', 3, 0, 1, false], 0x70: ['PUSH', 3, 0, 1, false], 0x71: ['PUSH', 3, 0, 1, false], 0x72: ['PUSH', 3, 0, 1, false], 0x73: ['PUSH', 3, 0, 1, false], 0x74: ['PUSH', 3, 0, 1, false], 0x75: ['PUSH', 3, 0, 1, false], 0x76: ['PUSH', 3, 0, 1, false], 0x77: ['PUSH', 3, 0, 1, false], 0x78: ['PUSH', 3, 0, 1, false], 0x79: ['PUSH', 3, 0, 1, false], 0x7a: ['PUSH', 3, 0, 1, false], 0x7b: ['PUSH', 3, 0, 1, false], 0x7c: ['PUSH', 3, 0, 1, false], 0x7d: ['PUSH', 3, 0, 1, false], 0x7e: ['PUSH', 3, 0, 1, false], 0x7f: ['PUSH', 3, 0, 1, false], 0x80: ['DUP', 3, 0, 1, false], 0x81: ['DUP', 3, 0, 1, false], 0x82: ['DUP', 3, 0, 1, false], 0x83: ['DUP', 3, 0, 1, false], 0x84: ['DUP', 3, 0, 1, false], 0x85: ['DUP', 3, 0, 1, false], 0x86: ['DUP', 3, 0, 1, false], 0x87: ['DUP', 3, 0, 1, false], 0x88: ['DUP', 3, 0, 1, false], 0x89: ['DUP', 3, 0, 1, false], 0x8a: ['DUP', 3, 0, 1, false], 0x8b: ['DUP', 3, 0, 1, false], 0x8c: ['DUP', 3, 0, 1, false], 0x8d: ['DUP', 3, 0, 1, false], 0x8e: ['DUP', 3, 0, 1, false], 0x8f: ['DUP', 3, 0, 1, false], 0x90: ['SWAP', 3, 0, 0, false], 0x91: ['SWAP', 3, 0, 0, false], 0x92: ['SWAP', 3, 0, 0, false], 0x93: ['SWAP', 3, 0, 0, false], 0x94: ['SWAP', 3, 0, 0, false], 0x95: ['SWAP', 3, 0, 0, false], 0x96: ['SWAP', 3, 0, 0, false], 0x97: ['SWAP', 3, 0, 0, false], 0x98: ['SWAP', 3, 0, 0, false], 0x99: ['SWAP', 3, 0, 0, false], 0x9a: ['SWAP', 3, 0, 0, false], 0x9b: ['SWAP', 3, 0, 0, false], 0x9c: ['SWAP', 3, 0, 0, false], 0x9d: ['SWAP', 3, 0, 0, false], 0x9e: ['SWAP', 3, 0, 0, false], 0x9f: ['SWAP', 3, 0, 0, false], 0xa0: ['LOG', 375, 2, 0, false], 0xa1: ['LOG', 375, 3, 0, false], 0xa2: ['LOG', 375, 4, 0, false], 0xa3: ['LOG', 375, 5, 0, false], 0xa4: ['LOG', 375, 6, 0, false], // '0xf0' range - closures 0xf0: ['CREATE', 32000, 3, 1, true, true], 0xf1: ['CALL', 700, 7, 1, true, true], 0xf2: ['CALLCODE', 700, 7, 1, true, true], 0xf3: ['RETURN', 0, 2, 0, false], 0xf4: ['DELEGATECALL', 700, 6, 1, true, true], 0xfa: ['STATICCALL', 700, 6, 1, true, true], 0xfd: ['REVERT', 0, 2, 0, false], // '0x70', range - other 0xfe: ['INVALID', 0, 0, 0, false], 0xff: ['SELFDESTRUCT', 5000, 1, 0, false, true] }; module.exports = function (op, full) { var code = codes[op] ? codes[op] : ['INVALID', 0, 0, 0, false, false]; var opcode = code[0]; if (full) { if (opcode === 'LOG') { opcode += op - 0xa0; } if (opcode === 'PUSH') { opcode += op - 0x5f; } if (opcode === 'DUP') { opcode += op - 0x7f; } if (opcode === 'SWAP') { opcode += op - 0x8f; } } return { name: opcode, opcode: op, fee: code[1], in: code[2], out: code[3], dynamic: code[4], async: code[5] }; }; },{}],135:[function(require,module,exports){ 'use strict'; var utils = require('ethereumjs-util'); var BN = utils.BN; var error = require('../constants.js').ERROR; var fees = require('ethereum-common'); module.exports = function (opts) { var results = {}; results.gasUsed = new BN(fees.ecrecoverGas.v); if (opts.gasLimit.cmp(results.gasUsed) === -1) { results.gasUsed = opts.gasLimit; results.exception = 0; // 0 means VM fail (in this case because of OOG) results.exceptionError = error.OUT_OF_GAS; return results; } var data = utils.setLengthRight(opts.data, 128); var msgHash = data.slice(0, 32); var v = data.slice(32, 64); var r = data.slice(64, 96); var s = data.slice(96, 128); var publicKey; try { publicKey = utils.ecrecover(msgHash, v, r, s); } catch (e) { return results; } results.return = utils.setLengthLeft(utils.publicToAddress(publicKey), 32); results.exception = 1; return results; }; },{"../constants.js":129,"ethereum-common":152,"ethereumjs-util":125}],136:[function(require,module,exports){ 'use strict'; var utils = require('ethereumjs-util'); var BN = utils.BN; var error = require('../constants.js').ERROR; var fees = require('ethereum-common'); module.exports = function (opts) { var results = {}; var data = opts.data; results.gasUsed = new BN(fees.sha256Gas.v); results.gasUsed.iadd(new BN(fees.sha256WordGas.v).imuln(Math.ceil(data.length / 32))); if (opts.gasLimit.cmp(results.gasUsed) === -1) { results.gasUsed = opts.gasLimit; results.exceptionError = error.OUT_OF_GAS; results.exception = 0; // 0 means VM fail (in this case because of OOG) return results; } results.return = utils.sha256(data); results.exception = 1; return results; }; },{"../constants.js":129,"ethereum-common":152,"ethereumjs-util":125}],137:[function(require,module,exports){ 'use strict'; var utils = require('ethereumjs-util'); var BN = utils.BN; var error = require('../constants.js').ERROR; var fees = require('ethereum-common'); module.exports = function (opts) { var results = {}; var data = opts.data; results.gasUsed = new BN(fees.ripemd160Gas.v); results.gasUsed.iadd(new BN(fees.ripemd160WordGas.v).imuln(Math.ceil(data.length / 32))); if (opts.gasLimit.cmp(results.gasUsed) === -1) { results.gasUsed = opts.gasLimit; results.exceptionError = error.OUT_OF_GAS; results.exception = 0; // 0 means VM fail (in this case because of OOG) return results; } results.return = utils.ripemd160(data, true); results.exception = 1; return results; }; },{"../constants.js":129,"ethereum-common":152,"ethereumjs-util":125}],138:[function(require,module,exports){ 'use strict'; var utils = require('ethereumjs-util'); var BN = utils.BN; var fees = require('ethereum-common'); var error = require('../constants.js').ERROR; module.exports = function (opts) { var results = {}; var data = opts.data; results.gasUsed = new BN(fees.identityGas.v); results.gasUsed.iadd(new BN(fees.identityWordGas.v).imuln(Math.ceil(data.length / 32))); if (opts.gasLimit.cmp(results.gasUsed) === -1) { results.gasUsed = opts.gasLimit; results.exceptionError = error.OUT_OF_GAS; results.exception = 0; // 0 means VM fail (in this case because of OOG) return results; } results.return = data; results.exception = 1; return results; }; },{"../constants.js":129,"ethereum-common":152,"ethereumjs-util":125}],139:[function(require,module,exports){ (function (Buffer){ 'use strict'; var utils = require('ethereumjs-util'); var BN = utils.BN; var error = require('../constants.js').ERROR; var fees = require('ethereum-common'); var Gquaddivisor = fees.modexpGquaddivisor.v; function multComplexity(x) { var fac1 = new BN(0); var fac2 = new BN(0); if (x.lten(64)) { return x.sqr(); } else if (x.lten(1024)) { // return Math.floor(Math.pow(x, 2) / 4) + 96 * x - 3072 fac1 = x.sqr().divn(4); fac2 = x.muln(96); return fac1.add(fac2).subn(3072); } else { // return Math.floor(Math.pow(x, 2) / 16) + 480 * x - 199680 fac1 = x.sqr().divn(16); fac2 = x.muln(480); return fac1.add(fac2).subn(199680); } } function getAdjustedExponentLength(data) { var baseLen = new BN(data.slice(0, 32)).toNumber(); var expLen = new BN(data.slice(32, 64)); var expBytesStart = 96 + baseLen; // 96 for base length, then exponent length, and modulus length, then baseLen for the base data, then exponent bytes start var firstExpBytes = Buffer.from(data.slice(expBytesStart, expBytesStart + 32)); // first word of the exponent data firstExpBytes = utils.setLengthRight(firstExpBytes, 32); // reading past the data reads virtual zeros firstExpBytes = new BN(firstExpBytes); var max32expLen = 0; if (expLen.ltn(32)) { max32expLen = 32 - expLen.toNumber(); } firstExpBytes = firstExpBytes.shrn(8 * Math.max(max32expLen, 0)); var bitLen = -1; while (firstExpBytes.gtn(0)) { bitLen = bitLen + 1; firstExpBytes = firstExpBytes.ushrn(1); } var expLenMinus32OrZero = expLen.subn(32); if (expLenMinus32OrZero.ltn(0)) { expLenMinus32OrZero = new BN(0); } var eightTimesExpLenMinus32OrZero = expLenMinus32OrZero.muln(8); var adjustedExpLen = eightTimesExpLenMinus32OrZero; if (bitLen > 0) { adjustedExpLen.iaddn(bitLen); } return adjustedExpLen; } // Taken from https://stackoverflow.com/a/1503019 function expmod(B, E, M) { if (E.eqn(0)) return new BN(1).mod(M); var BM = B.mod(M); var R = expmod(BM, E.divn(2), M); R = R.mul(R).mod(M); if (E.mod(new BN(2)).eqn(0)) return R; return R.mul(BM).mod(M); } function getOOGResults(opts, results) { results.gasUsed = opts.gasLimit; results.exception = 0; // 0 means VM fail (in this case because of OOG) results.exceptionError = error.OUT_OF_GAS; return results; } module.exports = function (opts) { var results = {}; var data = opts.data; var adjustedELen = getAdjustedExponentLength(data); if (adjustedELen.ltn(1)) { adjustedELen = new BN(1); } var bLen = new BN(data.slice(0, 32)); var eLen = new BN(data.slice(32, 64)); var mLen = new BN(data.slice(64, 96)); var maxLen = bLen; if (maxLen.lt(mLen)) { maxLen = mLen; } var gasUsed = adjustedELen.mul(multComplexity(maxLen)).divn(Gquaddivisor); if (opts.gasLimit.lt(gasUsed)) { return getOOGResults(opts, results); } results.gasUsed = gasUsed; var zeroR = new BN(0); if (bLen.eqn(0)) { results.return = zeroR.toArrayLike(Buffer, 'be', 1); results.exception = 1; return results; } if (mLen.eqn(0)) { results.return = Buffer.from([0]); results.exception = 1; return results; } var maxInt = new BN(Number.MAX_SAFE_INTEGER); var maxSize = new BN(2147483647); // ethereumjs-util setLengthRight limitation if (bLen.gt(maxSize) || eLen.gt(maxSize) || mLen.gt(maxSize)) { return getOOGResults(opts, results); } var bStart = new BN(96); var bEnd = bStart.add(bLen); var eStart = bEnd; var eEnd = eStart.add(eLen); var mStart = eEnd; var mEnd = mStart.add(mLen); if (mEnd.gt(maxInt)) { return getOOGResults(opts, results); } bLen = bLen.toNumber(); eLen = eLen.toNumber(); mLen = mLen.toNumber(); var B = new BN(utils.setLengthRight(data.slice(bStart.toNumber(), bEnd.toNumber()), bLen)); var E = new BN(utils.setLengthRight(data.slice(eStart.toNumber(), eEnd.toNumber()), eLen)); var M = new BN(utils.setLengthRight(data.slice(mStart.toNumber(), mEnd.toNumber()), mLen)); // console.log('MODEXP input') // console.log('B:', bLen, B) // console.log('E:', eLen, E) // console.log('M:', mLen, M) var R; if (M.eqn(0)) { R = new BN(0); } else { R = expmod(B, E, M); } var result = R.toArrayLike(Buffer, 'be', mLen); results.return = result; results.exception = 1; // console.log('MODEXP output', result) return results; }; }).call(this,require("buffer").Buffer) },{"../constants.js":129,"buffer":74,"ethereum-common":152,"ethereumjs-util":125}],140:[function(require,module,exports){ (function (Buffer){ 'use strict'; var utils = require('ethereumjs-util'); var BN = utils.BN; var error = require('../constants.js').ERROR; var fees = require('ethereum-common'); var bn128Module = require('rustbn.js'); var ecAddPrecompile = bn128Module.cwrap('ec_add', 'string', ['string']); module.exports = function (opts) { var results = {}; var data = opts.data; var inputHexStr = data.toString('hex'); results.gasUsed = new BN(fees.ecAddGas.v); if (opts.gasLimit.lt(results.gasUsed)) { results.return = Buffer.alloc(0); results.exception = 0; results.gasUsed = new BN(opts.gasLimit); results.exceptionError = error.OUT_OF_GAS; return results; } try { var returnData = ecAddPrecompile(inputHexStr); results.return = Buffer.from(returnData, 'hex'); results.exception = 1; } catch (e) { console.log('exception in ecAdd precompile is expected. ignore previous panic...'); // console.log(e) results.return = Buffer.alloc(0); results.exception = 0; results.gasUsed = new BN(opts.gasLimit); results.exceptionError = error.OUT_OF_GAS; } return results; }; }).call(this,require("buffer").Buffer) },{"../constants.js":129,"buffer":74,"ethereum-common":152,"ethereumjs-util":125,"rustbn.js":309}],141:[function(require,module,exports){ (function (Buffer){ 'use strict'; var utils = require('ethereumjs-util'); var ERROR = require('../constants.js').ERROR; var BN = utils.BN; var fees = require('ethereum-common'); var bn128Module = require('rustbn.js'); var ecMulPrecompile = bn128Module.cwrap('ec_mul', 'string', ['string']); module.exports = function (opts) { var results = {}; var data = opts.data; var inputHexStr = data.toString('hex'); results.gasUsed = new BN(fees.ecMulGas.v); if (opts.gasLimit.lt(results.gasUsed)) { results.return = Buffer.alloc(0); results.exception = 0; results.gasUsed = new BN(opts.gasLimit); results.exceptionError = ERROR.OUT_OF_GAS; return results; } try { var returnData = ecMulPrecompile(inputHexStr); results.return = Buffer.from(returnData, 'hex'); results.exception = 1; } catch (e) { console.log('exception in ecMul precompile is expected. ignore previous panic...'); // console.log(e) results.return = Buffer.alloc(0); results.exception = 0; } return results; }; }).call(this,require("buffer").Buffer) },{"../constants.js":129,"buffer":74,"ethereum-common":152,"ethereumjs-util":125,"rustbn.js":309}],142:[function(require,module,exports){ (function (Buffer){ 'use strict'; var utils = require('ethereumjs-util'); var BN = utils.BN; var error = require('../constants.js').ERROR; var fees = require('ethereum-common'); var bn128Module = require('rustbn.js'); var ecPairingPrecompile = bn128Module.cwrap('ec_pairing', 'string', ['string']); module.exports = function (opts) { var results = {}; var data = opts.data; var inputHexStr = data.toString('hex'); var inputData = Buffer.from(inputHexStr, 'hex'); var inputDataSize = Math.floor(inputData.length / 192); var gascost = fees.ecPairingGas.v + inputDataSize * fees.ecPairingWordGas.v; results.gasUsed = new BN(gascost); if (opts.gasLimit.ltn(gascost)) { results.gasUsed = opts.gasLimit; results.exceptionError = error.OUT_OF_GAS; results.exception = 0; // 0 means VM fail (in this case because of OOG) return results; } try { var returnData = ecPairingPrecompile(inputHexStr); results.return = Buffer.from(returnData, 'hex'); results.exception = 1; } catch (e) { console.log('exception in ecPairing precompile is expected, ignore previous panic...'); // console.log(e) results.return = Buffer.alloc(0); results.gasUsed = opts.gasLimit; results.exceptionError = error.OUT_OF_GAS; results.exception = 0; } return results; }; }).call(this,require("buffer").Buffer) },{"../constants.js":129,"buffer":74,"ethereum-common":152,"ethereumjs-util":125,"rustbn.js":309}],143:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; var async = require('async'); var ethUtil = require('ethereumjs-util'); var Bloom = require('./bloom.js'); var common = require('ethereum-common'); var rlp = ethUtil.rlp; var Trie = require('merkle-patricia-tree'); var BN = ethUtil.BN; var minerReward = new BN(common.minerReward.v); /** * process the transaction in a block and pays the miners * @param opts * @param opts.block {Block} the block we are processing * @param opts.generate {Boolean} [gen=false] whether to generate the stateRoot * @param cb {Function} the callback which is given an error string */ module.exports = function (opts, cb) { var self = this; // parse options var block = opts.block; var generateStateRoot = !!opts.generate; var validateStateRoot = !generateStateRoot; var bloom = new Bloom(); var receiptTrie = new Trie(); // the total amount of gas used processing this block var gasUsed = new BN(0); // miner account var minerAccount; var receipts = []; var txResults = []; var result; if (opts.root) { self.stateManager.trie.root = opts.root; } this.trie.checkpoint(); // run everything async.series([beforeBlock, populateCache, processTransactions], parseBlockResults); function beforeBlock(cb) { self.emit('beforeBlock', opts.block, cb); } function afterBlock(cb) { self.emit('afterBlock', result, cb); } // populates the cache with accounts that we know we will need function populateCache(cb) { var accounts = new Set(); accounts.add(block.header.coinbase.toString('hex')); block.transactions.forEach(function (tx) { accounts.add(tx.getSenderAddress().toString('hex')); accounts.add(tx.to.toString('hex')); }); block.uncleHeaders.forEach(function (uh) { accounts.add(uh.coinbase.toString('hex')); }); self.populateCache(accounts, cb); } /** * Processes all of the transaction in the block * @method processTransaction * @param {Function} cb the callback is given error if there are any */ function processTransactions(cb) { var validReceiptCount = 0; async.eachSeries(block.transactions, processTx, cb); function processTx(tx, cb) { var gasLimitIsHigherThanBlock = new BN(block.header.gasLimit).lt(new BN(tx.gasLimit).add(gasUsed)); if (gasLimitIsHigherThanBlock) { cb(new Error('tx has a higher gas limit than the block')); return; } // run the tx through the VM self.runTx({ tx: tx, block: block, populateCache: false }, parseTxResult); function parseTxResult(err, result) { txResults.push(result); // var receiptResult = new BN(1) // abort if error if (err) { receipts.push(null); cb(err); return; } gasUsed = gasUsed.add(result.gasUsed); // combine blooms via bitwise OR bloom.or(result.bloom); if (generateStateRoot) { block.header.bloom = bloom.bitvector; } var txLogs = result.vm.logs || []; var rawTxReceipt = [result.vm.exception ? 1 : 0, // result.vm.exception is 0 when an exception occurs, and 1 when it doesn't. TODO make this the opposite gasUsed.toArrayLike(Buffer), result.bloom.bitvector, txLogs]; var txReceipt = { status: rawTxReceipt[0], gasUsed: rawTxReceipt[1], bitvector: rawTxReceipt[2], logs: rawTxReceipt[3] }; receipts.push(txReceipt); receiptTrie.put(rlp.encode(validReceiptCount), rlp.encode(rawTxReceipt)); validReceiptCount++; cb(); } } } // handle results or error from block run function parseBlockResults(err) { if (err) { self.trie.revert(); cb(err); return; } // credit all block rewards payOmmersAndMiner(); // credit all block rewards if (generateStateRoot) { block.header.stateRoot = self.trie.root; } self.trie.commit(function (err) { self.stateManager.cache.flush(function () { if (validateStateRoot) { if (receiptTrie.root && receiptTrie.root.toString('hex') !== block.header.receiptTrie.toString('hex')) { err = new Error((err || '') + 'invalid receiptTrie '); } if (bloom.bitvector.toString('hex') !== block.header.bloom.toString('hex')) { err = new Error((err || '') + 'invalid bloom '); } if (ethUtil.bufferToInt(block.header.gasUsed) !== Number(gasUsed)) { err = new Error((err || '') + 'invalid gasUsed '); } if (self.trie.root.toString('hex') !== block.header.stateRoot.toString('hex')) { err = new Error((err || '') + 'invalid block stateRoot '); } } self.stateManager.cache.clear(); result = { receipts: receipts, results: txResults, error: err }; afterBlock(cb.bind(this, err, result)); }); }); } // credit all block rewards function payOmmersAndMiner() { var ommers = block.uncleHeaders; // pay each ommer ommers.forEach(rewardOmmer); // calculate nibling reward var niblingReward = minerReward.div(new BN(32)); var totalNiblingReward = niblingReward.mul(new BN(ommers.length)); minerAccount = self.stateManager.cache.get(block.header.coinbase); // give miner the block reward minerAccount.balance = new BN(minerAccount.balance).add(minerReward).add(totalNiblingReward); self.stateManager.cache.put(block.header.coinbase, minerAccount); } // credit ommer function rewardOmmer(ommer) { // calculate reward var heightDiff = new BN(block.header.number).sub(new BN(ommer.number)); var reward = new BN(8).sub(heightDiff).mul(minerReward.div(new BN(8))); if (reward.lt(new BN(0))) { reward = new BN(0); } // credit miners account var ommerAccount = self.stateManager.cache.get(ommer.coinbase); ommerAccount.balance = reward.add(new BN(ommerAccount.balance)); self.stateManager.cache.put(ommer.coinbase, ommerAccount); } }; },{"./bloom.js":127,"async":24,"ethereum-common":152,"ethereumjs-util":125,"merkle-patricia-tree":259,"safe-buffer":311}],144:[function(require,module,exports){ 'use strict'; var async = require('async'); /** * processes blocks and adds them to the blockchain * @method onBlock * @param blockchain */ module.exports = function (blockchain, cb) { var self = this; var headBlock, parentState; // parse arguments if (typeof blockchain === 'function') { cb = blockchain; } else if (blockchain) { self.blockchain = blockchain; } // setup blockchain iterator this.stateManager.blockchain.iterator('vm', processBlock, cb); function processBlock(block, reorg, cb) { async.series([getStartingState, runBlock], cb); // determine starting state for block run function getStartingState(cb) { // if we are just starting or if a chain re-org has happened if (!headBlock || reorg) { self.stateManager.blockchain.getBlock(block.header.parentHash, function (err, parentBlock) { parentState = parentBlock.header.stateRoot; // generate genesis state if we are at the genesis block // we don't have the genesis state if (!headBlock) { return self.stateManager.generateCanonicalGenesis(cb); } else { cb(err); } }); } else { parentState = headBlock.header.stateRoot; cb(); } } // run block, update head if valid function runBlock(cb) { self.runBlock({ block: block, root: parentState }, function (err, results) { if (err) { // remove invalid block console.log('Invalid block error:', err); self.stateManager.blockchain.delBlock(block.header.hash(), cb); } else { // set as new head block headBlock = block; cb(); } }); } } }; },{"async":24}],145:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; var async = require('async'); var ethUtil = require('ethereumjs-util'); var BN = ethUtil.BN; var fees = require('ethereum-common'); var constants = require('./constants.js'); var ERROR = constants.ERROR; /** * runs a CALL operation * @method runCall * @param opts * @param opts.block {Block} * @param opts.caller {Buffer} * @param opts.code {Buffer} this is for CALLCODE where the code to load is different than the code from the to account. * @param opts.data {Buffer} * @param opts.gasLimit {Buffer | BN.js } * @param opts.gasPrice {Buffer} * @param opts.origin {Buffer} [] * @param opts.to {Buffer} * @param opts.value {Buffer} */ module.exports = function (opts, cb) { var self = this; var stateManager = self.stateManager; var vmResults = {}; var toAccount; var toAddress = opts.to; var createdAddress; var txValue = opts.value || Buffer.from([0]); var caller = opts.caller; var account = stateManager.cache.get(caller); var block = opts.block; var code = opts.code; var txData = opts.data; var gasLimit = opts.gasLimit || new BN(0xffffff); gasLimit = new BN(opts.gasLimit); // make sure is a BN var gasPrice = opts.gasPrice; var gasUsed = new BN(0); var origin = opts.origin; var isCompiled = opts.compiled; var depth = opts.depth; // opts.suicides is kept for backward compatiblity with pre-EIP6 syntax var selfdestruct = opts.selfdestruct || opts.suicides; var delegatecall = opts.delegatecall || false; var isStatic = opts.static || false; txValue = new BN(txValue); stateManager.checkpoint(); // run and parse subTxValue(); async.series([loadToAccount, loadCode, runCode, saveCode], parseCallResult); function loadToAccount(done) { // get receiver's account // toAccount = stateManager.cache.get(toAddress) if (!toAddress) { // generate a new contract if no `to` code = txData; txData = undefined; var newNonce = new BN(account.nonce).subn(1); createdAddress = toAddress = ethUtil.generateAddress(caller, newNonce.toArray()); stateManager.getAccount(createdAddress, function (err, account) { toAccount = account; var NONCE_OFFSET = 1; toAccount.nonce = new BN(toAccount.nonce).addn(NONCE_OFFSET).toArrayLike(Buffer); done(err); }); } else { // else load the `to` account toAccount = stateManager.cache.get(toAddress); done(); } } function subTxValue() { if (delegatecall) { return; } account.balance = new BN(account.balance).sub(txValue); stateManager.cache.put(caller, account); } function addTxValue() { if (delegatecall) { return; } // add the amount sent to the `to` account toAccount.balance = new BN(toAccount.balance).add(txValue); stateManager.cache.put(toAddress, toAccount); stateManager.touched.push(toAddress); } function loadCode(cb) { addTxValue(); // loads the contract's code if the account is a contract if (code || !(toAccount.isContract() || self._precompiled[toAddress.toString('hex')])) { cb(); return; } if (self._precompiled[toAddress.toString('hex')]) { isCompiled = true; code = self._precompiled[toAddress.toString('hex')]; cb(); return; } stateManager.getContractCode(toAddress, function (err, c, comp) { if (err) return cb(err); isCompiled = comp; code = c; cb(); }); } function runCode(cb) { if (!code) { vmResults.exception = 1; stateManager.commit(cb); return; } var runCodeOpts = { code: code, data: txData, gasLimit: gasLimit, gasPrice: gasPrice, address: toAddress, origin: origin, caller: caller, value: txValue.toArrayLike(Buffer), block: block, depth: depth, selfdestruct: selfdestruct, populateCache: false, static: isStatic // run Code through vm };var codeRunner = isCompiled ? self.runJIT : self.runCode; codeRunner.call(self, runCodeOpts, parseRunResult); function parseRunResult(err, results) { toAccount = self.stateManager.cache.get(toAddress); vmResults = results; if (createdAddress) { // fee for size of the return value var totalGas = results.gasUsed; if (!results.runState.vmError) { var returnFee = results.return.length * fees.createDataGas.v; totalGas = totalGas.addn(returnFee); } // if not enough gas if (totalGas.lte(gasLimit) && results.return.length <= 24576) { results.gasUsed = totalGas; } else { results.return = Buffer.from([]); // since Homestead results.exception = 0; err = results.exceptionError = ERROR.OUT_OF_GAS; results.gasUsed = gasLimit; } } gasUsed = results.gasUsed; if (err) { results.logs = []; stateManager.revert(cb); } else { stateManager.commit(cb); } } } function saveCode(cb) { // store code for a new contract if (createdAddress && !vmResults.runState.vmError && vmResults.return.toString() !== '') { stateManager.putContractCode(createdAddress, vmResults.return, cb); } else { cb(); } } function parseCallResult(err) { if (err) return cb(err); var results = { gasUsed: gasUsed, createdAddress: createdAddress, vm: vmResults }; cb(null, results); } }; },{"./constants.js":129,"async":24,"ethereum-common":152,"ethereumjs-util":125,"safe-buffer":311}],146:[function(require,module,exports){ 'use strict'; /* This is the core of the Ethereum Virtual Machine (EVM or just VM). NOTES: stack items are lazly dupilicated. So you must never directly change a buffer from the stack, instead you should `copy` it first not all stack items are 32 bytes, so if the operation realies on the stack item length then you must use utils.pad(, 32) first. */ var Buffer = require('safe-buffer').Buffer; var async = require('async'); var utils = require('ethereumjs-util'); var Block = require('ethereumjs-block'); var lookupOpInfo = require('./opcodes.js'); var opFns = require('./opFns.js'); var constants = require('./constants.js'); var setImmediate = require('timers').setImmediate; var BN = utils.BN; var ERROR = constants.ERROR; /** * Runs EVM code * @param opts * @param opts.account {Account} the account that the exucuting code belongs to * @param opts.address {Buffer} the address of the account that is exucuting this code * @param opts.block {Block} the block that the transaction is part of * @param opts.caller {Buffer} the address that ran this code * @param opts.code {Buffer} the code to be run * @param opts.data {Buffer} the input data * @param opts.gasLimit {Buffer} * @param opts.origin {Buffer} the address where the call originated from * @param opts.value {Buffer} the amount the being transfered * @param cb {Function} */ module.exports = function (opts, cb) { var self = this; var stateManager = self.stateManager; var block = opts.block || new Block(); // VM internal state var runState = { stateManager: stateManager, returnValue: false, stopped: false, vmError: false, programCounter: 0, opCode: undefined, opName: undefined, gasLeft: new BN(opts.gasLimit), gasLimit: new BN(opts.gasLimit), gasPrice: opts.gasPrice, memory: [], memoryWordCount: 0, stack: [], lastReturned: [], logs: [], validJumps: [], gasRefund: new BN(0), highestMemCost: new BN(0), depth: opts.depth || 0, // opts.suicides is kept for backward compatiblity with pre-EIP6 syntax selfdestruct: opts.selfdestruct || opts.suicides || {}, block: block, callValue: opts.value || new BN(0), address: opts.address || utils.zeros(32), caller: opts.caller || utils.zeros(32), origin: opts.origin || opts.caller || utils.zeros(32), callData: opts.data || Buffer.from([0]), code: opts.code, populateCache: opts.populateCache === undefined ? true : opts.populateCache, static: opts.static || false // temporary - to be factored out };runState._precompiled = self._precompiled; runState._vm = self; // since Homestead opFns.DELEGATECALL = opFns._DC; // prepare to run vm preprocessValidJumps(runState); // load contract then start vm run loadContract(runVm); // iterate through the given ops until something breaks or we hit STOP function runVm() { async.whilst(vmIsActive, iterateVm, parseVmResults); } // ensure contract is loaded; only used if runCode is called directly function loadContract(cb) { stateManager.getAccount(runState.address, function (err, account) { if (err) return cb(err); runState.contract = account; cb(); }); } function vmIsActive() { var notAtEnd = runState.programCounter < runState.code.length; return !runState.stopped && notAtEnd && !runState.vmError && !runState.returnValue; } function iterateVm(done) { var opCode = runState.code[runState.programCounter]; var opInfo = lookupOpInfo(opCode); var opName = opInfo.name; var opFn = opFns[opName]; runState.opName = opName; runState.opCode = opCode; // check for invalid opcode if (opName === 'INVALID') { return done(ERROR.INVALID_OPCODE); } // check for stack underflows if (runState.stack.length < opInfo.in) { return done(ERROR.STACK_UNDERFLOW); } if (runState.stack.length - opInfo.in + opInfo.out > 1024) { return done(ERROR.STACK_OVERFLOW); } async.series([runStepHook, runOp], function (err) { setImmediate(done.bind(null, err)); }); function runStepHook(cb) { var eventObj = { pc: runState.programCounter, gasLeft: runState.gasLeft, opcode: lookupOpInfo(opCode, true), stack: runState.stack, depth: runState.depth, address: runState.address, account: runState.contract, cache: runState.stateManager.cache, memory: runState.memory }; self.emit('step', eventObj, cb); } function runOp(cb) { // calculate gas var fee = new BN(opInfo.fee); // TODO: move to a shared funtion; subGas in opFuns runState.gasLeft = runState.gasLeft.sub(fee); if (runState.gasLeft.ltn(0)) { runState.gasLeft = new BN(0); runState.vmError = ERROR.OUT_OF_GAS; cb(); return; } // advance program counter runState.programCounter++; var argsNum = opInfo.in; // pop the stack var args = argsNum ? runState.stack.splice(-opInfo.in) : []; args.reverse(); args.push(runState); // create a callback for async opFunc if (opInfo.async) { args.push(function (err, result) { if (err) return cb(err); // save result to the stack if (result) { // NOTE: Ensure that every stack item is padded to 256 bits. // This should be done at every opcode in the future. result = utils.setLengthLeft(result, 32); runState.stack.push(result); } cb(); }); } try { // run the opcode var result = opFn.apply(null, args); } catch (e) { runState.vmError = e.error; cb(); return; } // save result to the stack if (result) { // NOTE: Ensure that every stack item is padded to 256 bits. // This should be done at every opcode in the future. result = utils.setLengthLeft(result, 32); runState.stack.push(result); } // call the callback if opFn was sync if (!opInfo.async) { cb(); } } } function parseVmResults(err) { err = runState.vmError || err; // remove any logs on error if (err) { runState.logs = []; stateManager.revertContracts(); } var results = { runState: runState, selfdestruct: runState.selfdestruct, gasRefund: runState.gasRefund, exception: err ? 0 : 1, exceptionError: err, logs: runState.logs, gas: runState.gasLeft, 'return': runState.returnValue ? runState.returnValue : Buffer.alloc(0) }; if (results.exceptionError) { delete results.gasRefund; delete results.selfdestruct; self.stateManager.touched = []; } if (err && err !== ERROR.REVERT) { results.gasUsed = runState.gasLimit; } else { results.gasUsed = runState.gasLimit.sub(runState.gasLeft); } if (runState.populateCache) { self.stateManager.cache.flush(function () { self.stateManager.cache.clear(); cb(err, results); }); } else { cb(err, results); } } }; // find all the valid jumps and puts them in the `validJumps` array function preprocessValidJumps(runState) { for (var i = 0; i < runState.code.length; i++) { var curOpCode = lookupOpInfo(runState.code[i]).name; // no destinations into the middle of PUSH if (curOpCode === 'PUSH') { i += runState.code[i] - 0x5f; } if (curOpCode === 'JUMPDEST') { runState.validJumps.push(i); } } } },{"./constants.js":129,"./opFns.js":133,"./opcodes.js":134,"async":24,"ethereumjs-block":120,"ethereumjs-util":125,"safe-buffer":311,"timers":330}],147:[function(require,module,exports){ 'use strict'; module.exports = function (opts, cb) { // for precompiled var results; if (typeof opts.code === 'function') { results = opts.code(opts); results.account = opts.account; if (results.exception === undefined) { results.exception = 1; } cb(results.exceptionError, results); } else { var f = new Function('require', 'opts', opts.code.toString()); // eslint-disable-line results = f(require, opts); results.account = opts.account; cb(results.exceptionError, results); } }; },{}],148:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; var async = require('async'); var utils = require('ethereumjs-util'); var BN = utils.BN; var Bloom = require('./bloom.js'); var Block = require('ethereumjs-block'); /** * Process a transaction. Run the vm. Transfers eth. Checks balances. * @method processTx * @param opts * @param opts.tx {Transaction} - a transaction * @param opts.skipNonce - skips the nonce check * @param opts.skipBalance - skips the balance check * @param opts.block {Block} needed to process the transaction, if no block is given a default one is created * @param cb {Function} - the callback */ module.exports = function (opts, cb) { var self = this; var block = opts.block; var tx = opts.tx; var gasLimit; var results; var basefee; // create a reasonable default if no block is given if (!block) { block = new Block(); } if (new BN(block.header.gasLimit).lt(new BN(tx.gasLimit))) { cb(new Error('tx has a higher gas limit than the block')); return; } if (opts.populateCache === undefined) { opts.populateCache = true; } // run everything async.series([populateCache, runTxHook, runCall, saveTries, runAfterTxHook, function (cb) { self.stateManager.cache.flush(function () { if (opts.populateCache) { self.stateManager.cache.clear(); } cb(); }); }], function (err) { cb(err, results); }); // run the transaction hook function runTxHook(cb) { self.emit('beforeTx', tx, cb); } // run the transaction hook function runAfterTxHook(cb) { self.emit('afterTx', results, cb); } /** * populates the cache with the 'to' and 'from' of the tx */ function populateCache(cb) { var accounts = new Set(); accounts.add(tx.from.toString('hex')); accounts.add(block.header.coinbase.toString('hex')); if (tx.to.toString('hex') !== '') { accounts.add(tx.to.toString('hex')); self.stateManager.touched.push(tx.to); } if (opts.populateCache === false) { return cb(); } self.stateManager.warmCache(accounts, cb); } // sets up the environment and runs a `call` function runCall(cb) { // check to the sender's account to make sure it has enough wei and the correct nonce var fromAccount = self.stateManager.cache.get(tx.from); var message; if (!opts.skipBalance && new BN(fromAccount.balance).lt(tx.getUpfrontCost())) { message = "sender doesn't have enough funds to send tx. The upfront cost is: " + tx.getUpfrontCost().toString() + ' and the sender\'s account only has: ' + new BN(fromAccount.balance).toString(); cb(new Error(message)); return; } else if (!opts.skipNonce && !new BN(fromAccount.nonce).eq(new BN(tx.nonce))) { message = "the tx doesn't have the correct nonce. account has nonce of: " + new BN(fromAccount.nonce).toString() + ' tx has nonce of: ' + new BN(tx.nonce).toString(); cb(new Error(message)); return; } // increment the nonce fromAccount.nonce = new BN(fromAccount.nonce).addn(1); basefee = tx.getBaseFee(); gasLimit = new BN(tx.gasLimit); if (gasLimit.lt(basefee)) { return cb(new Error('base fee exceeds gas limit')); } gasLimit.isub(basefee); fromAccount.balance = new BN(fromAccount.balance).sub(new BN(tx.gasLimit).mul(new BN(tx.gasPrice))); self.stateManager.cache.put(tx.from, fromAccount); var options = { caller: tx.from, gasLimit: gasLimit, gasPrice: tx.gasPrice, to: tx.to, value: tx.value, data: tx.data, block: block, populateCache: false }; if (tx.to.toString('hex') === '') { delete options.to; } // run call self.runCall(options, parseResults); function parseResults(err, _results) { if (err) return cb(err); results = _results; // generate the bloom for the tx results.bloom = txLogsBloom(results.vm.logs); fromAccount = self.stateManager.cache.get(tx.from); // caculate the total gas used results.gasUsed = results.gasUsed.add(basefee); // process any gas refund var gasRefund = results.vm.gasRefund; if (gasRefund) { if (gasRefund.lt(results.gasUsed.divn(2))) { results.gasUsed.isub(gasRefund); } else { results.gasUsed.isub(results.gasUsed.divn(2)); } } results.amountSpent = results.gasUsed.mul(new BN(tx.gasPrice)); // refund the leftover gas amount fromAccount.balance = new BN(tx.gasLimit).sub(results.gasUsed).mul(new BN(tx.gasPrice)).add(new BN(fromAccount.balance)); self.stateManager.cache.put(tx.from, fromAccount); self.stateManager.touched.push(tx.from); var minerAccount = self.stateManager.cache.get(block.header.coinbase); // add the amount spent on gas to the miner's account minerAccount.balance = new BN(minerAccount.balance).add(results.amountSpent); // save the miner's account if (!new BN(minerAccount.balance).isZero()) { self.stateManager.cache.put(block.header.coinbase, minerAccount); } if (!results.vm.selfdestruct) { results.vm.selfdestruct = {}; } var keys = Object.keys(results.vm.selfdestruct); keys.forEach(function (s) { self.stateManager.cache.del(Buffer.from(s, 'hex')); }); // delete all touched accounts var touched = self.stateManager.touched; async.forEach(touched, function (address, next) { self.stateManager.accountIsEmpty(address, function (err, empty) { if (err) { next(err); return; } if (empty) { self.stateManager.cache.del(address); } next(null); }); }, function () { self.stateManager.touched = []; cb(); }); } } function saveTries(cb) { self.stateManager.commitContracts(cb); } }; /** * @method txLogsBloom */ function txLogsBloom(logs) { var bloom = new Bloom(); if (logs) { for (var i = 0; i < logs.length; i++) { var log = logs[i]; // add the address bloom.add(log[0]); // add the topics var topics = log[1]; for (var q = 0; q < topics.length; q++) { bloom.add(topics[q]); } } } return bloom; } },{"./bloom.js":127,"async":24,"ethereumjs-block":120,"ethereumjs-util":125,"safe-buffer":311}],149:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; var Trie = require('merkle-patricia-tree/secure.js'); var common = require('ethereum-common'); var async = require('async'); var Account = require('ethereumjs-account'); var fakeBlockchain = require('./fakeBlockChain.js'); var Cache = require('./cache.js'); var utils = require('ethereumjs-util'); var BN = utils.BN; var rlp = utils.rlp; module.exports = StateManager; function StateManager(opts) { var self = this; var trie = opts.trie; if (!trie) { trie = new Trie(trie); } var blockchain = opts.blockchain; if (!blockchain) { blockchain = fakeBlockchain; } self.blockchain = blockchain; self.trie = trie; self._storageTries = {}; // the storage trie cache self.cache = new Cache(trie); self.touched = []; } var proto = StateManager.prototype; // gets the account from the cache, or triggers a lookup and stores // the result in the cache proto.getAccount = function (address, cb) { this.cache.getOrLoad(address, cb); }; // checks if an account exists proto.exists = function (address, cb) { this.cache.getOrLoad(address, function (err, account) { cb(err, account.exists); }); }; // saves the account proto._putAccount = function (address, account, cb) { var self = this; var addressHex = Buffer.from(address, 'hex'); // TODO: dont save newly created accounts that have no balance // if (toAccount.balance.toString('hex') === '00') { // if they have money or a non-zero nonce or code, then write to tree self.cache.put(addressHex, account); self.touched.push(address); // self.trie.put(addressHex, account.serialize(), cb) cb(); }; proto.getAccountBalance = function (address, cb) { var self = this; self.getAccount(address, function (err, account) { if (err) { return cb(err); } cb(null, account.balance); }); }; proto.putAccountBalance = function (address, balance, cb) { var self = this; self.getAccount(address, function (err, account) { if (err) { return cb(err); } if (new BN(balance).isZero() && !account.exists) { return cb(null); } account.balance = balance; self._putAccount(address, account, cb); }); }; // sets the contract code on the account proto.putContractCode = function (address, value, cb) { var self = this; self.getAccount(address, function (err, account) { if (err) { return cb(err); } // TODO: setCode use trie.setRaw which creates a storage leak account.setCode(self.trie, value, function (err) { if (err) { return cb(err); } self._putAccount(address, account, cb); }); }); }; // given an account object, returns the code proto.getContractCode = function (address, cb) { var self = this; self.getAccount(address, function (err, account) { if (err) { return cb(err); } account.getCode(self.trie, cb); }); }; // creates a storage trie from the primary storage trie proto._lookupStorageTrie = function (address, cb) { var self = this; // from state trie self.getAccount(address, function (err, account) { if (err) { return cb(err); } var storageTrie = self.trie.copy(); storageTrie.root = account.stateRoot; self.touched.push(address); storageTrie._checkpoints = []; cb(null, storageTrie); }); }; // gets the storage trie from the storage cache or does lookup proto._getStorageTrie = function (address, cb) { var self = this; var storageTrie = self._storageTries[address.toString('hex')]; // from storage cache if (storageTrie) { return cb(null, storageTrie); } // lookup from state self._lookupStorageTrie(address, cb); }; proto.getContractStorage = function (address, key, cb) { var self = this; self._getStorageTrie(address, function (err, trie) { if (err) { return cb(err); } trie.get(key, function (err, value) { if (err) { return cb(err); } var decoded = rlp.decode(value); cb(null, decoded); }); }); }; proto.putContractStorage = function (address, key, value, cb) { var self = this; self._getStorageTrie(address, function (err, storageTrie) { if (err) { return cb(err); } if (value && value.length) { // format input var encodedValue = rlp.encode(value); storageTrie.put(key, encodedValue, finalize); } else { // deleting a value storageTrie.del(key, finalize); } function finalize(err) { if (err) return cb(err); // update storage cache self._storageTries[address.toString('hex')] = storageTrie; // update contract stateRoot var contract = self.cache.get(address); contract.stateRoot = storageTrie.root; self._putAccount(address, contract, cb); self.touched.push(address); } }); }; proto.commitContracts = function (cb) { var self = this; async.each(Object.keys(self._storageTries), function (address, cb) { var trie = self._storageTries[address]; delete self._storageTries[address]; // TODO: this is broken on the block level; all the contracts get written to // disk redardless of whether or not the block is valid if (trie.isCheckpoint) { trie.commit(cb); } else { cb(); } }, cb); }; proto.revertContracts = function () { var self = this; self._storageTries = {}; }; // // blockchain // proto.getBlockHash = function (number, cb) { var self = this; self.blockchain.getBlock(number, function (err, block) { if (err) { return cb(err); } var blockHash = block.hash(); cb(null, blockHash); }); }; // // revision history // proto.checkpoint = function () { var self = this; self.trie.checkpoint(); self.cache.checkpoint(); }; proto.commit = function (cb) { var self = this; // setup trie checkpointing self.trie.commit(function () { // setup cache checkpointing self.cache.commit(); cb(); }); }; proto.revert = function (cb) { var self = this; // setup trie checkpointing self.trie.revert(); // setup cache checkpointing self.cache.revert(); cb(); }; // // cache stuff // proto.getStateRoot = function (cb) { var self = this; self.cacheFlush(function (err) { if (err) { return cb(err); } var stateRoot = self.trie.root; cb(null, stateRoot); }); }; /** * @param {Set} address * @param {cb} function */ proto.warmCache = function (addresses, cb) { this.cache.warm(addresses, cb); }; proto.dumpStorage = function (address, cb) { var self = this; self._getStorageTrie(address, function (err, trie) { if (err) { return cb(err); } var storage = {}; var stream = trie.createReadStream(); stream.on('data', function (val) { storage[val.key.toString('hex')] = val.value.toString('hex'); }); stream.on('end', function () { cb(storage); }); }); }; proto.hasGenesisState = function (cb) { var root = common.genesisStateRoot.v; this.trie.checkRoot(root, cb); }; proto.generateCanonicalGenesis = function (cb) { var self = this; this.hasGenesisState(function (err, genesis) { if (!genesis & !err) { self.generateGenesis(common.genesisState, cb); } else { cb(err); } }); }; proto.generateGenesis = function (initState, cb) { var self = this; var addresses = Object.keys(initState); async.eachSeries(addresses, function (address, done) { var account = new Account(); account.balance = new BN(initState[address]).toArrayLike(Buffer); address = Buffer.from(address, 'hex'); self.trie.put(address, account.serialize(), done); }, cb); }; proto.accountIsEmpty = function (address, cb) { var self = this; self.getAccount(address, function (err, account) { if (err) { return cb(err); } cb(null, account.nonce.toString('hex') === '' && account.balance.toString('hex') === '' && account.codeHash.toString('hex') === utils.SHA3_NULL_S); }); }; },{"./cache.js":128,"./fakeBlockChain.js":130,"async":24,"ethereum-common":152,"ethereumjs-account":118,"ethereumjs-util":125,"merkle-patricia-tree/secure.js":263,"safe-buffer":311}],150:[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" } ] },{}],151:[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" } },{}],152:[function(require,module,exports){ var params = require('./params.json') params.genesisState = require('./genesisState.json') params.bootstrapNodes = require('./bootstrapNodes.json') module.exports = params },{"./bootstrapNodes.json":150,"./genesisState.json":151,"./params.json":153}],153:[function(require,module,exports){ arguments[4][121][0].apply(exports,arguments) },{"dup":121}],154:[function(require,module,exports){ (function (Buffer){ 'use strict'; var isHexPrefixed = require('is-hex-prefixed'); var stripHexPrefix = require('strip-hex-prefix'); /** * Pads a `String` to have an even length * @param {String} value * @return {String} output */ function padToEven(value) { var a = value; // eslint-disable-line if (typeof a !== 'string') { throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.'); } if (a.length % 2) { a = '0' + a; } return a; } /** * Converts a `Number` into a hex `String` * @param {Number} i * @return {String} */ function intToHex(i) { var hex = i.toString(16); // eslint-disable-line return '0x' + padToEven(hex); } /** * Converts an `Number` to a `Buffer` * @param {Number} i * @return {Buffer} */ function intToBuffer(i) { var hex = intToHex(i); return new Buffer(hex.slice(2), 'hex'); } /** * Get the binary size of a string * @param {String} str * @return {Number} */ function getBinarySize(str) { if (typeof str !== 'string') { throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.'); } return Buffer.byteLength(str, 'utf8'); } /** * Returns TRUE if the first specified array contains all elements * from the second one. FALSE otherwise. * * @param {array} superset * @param {array} subset * * @returns {boolean} */ function arrayContainsArray(superset, subset, some) { if (Array.isArray(superset) !== true) { throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\''); } if (Array.isArray(subset) !== true) { throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\''); } return subset[Boolean(some) && 'some' || 'every'](function (value) { return superset.indexOf(value) >= 0; }); } /** * Should be called to get utf8 from it's hex representation * * @method toUtf8 * @param {String} string in hex * @returns {String} ascii string representation of hex value */ function toUtf8(hex) { var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex'); return bufferValue.toString('utf8'); } /** * Should be called to get ascii from it's hex representation * * @method toAscii * @param {String} string in hex * @returns {String} ascii string representation of hex value */ function toAscii(hex) { var str = ''; // eslint-disable-line var i = 0, l = hex.length; // eslint-disable-line if (hex.substring(0, 2) === '0x') { i = 2; } for (; i < l; i += 2) { var code = parseInt(hex.substr(i, 2), 16); str += String.fromCharCode(code); } return str; } /** * Should be called to get hex representation (prefixed by 0x) of utf8 string * * @method fromUtf8 * @param {String} string * @param {Number} optional padding * @returns {String} hex representation of input string */ function fromUtf8(stringValue) { var str = new Buffer(stringValue, 'utf8'); return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, ''); } /** * Should be called to get hex representation (prefixed by 0x) of ascii string * * @method fromAscii * @param {String} string * @param {Number} optional padding * @returns {String} hex representation of input string */ function fromAscii(stringValue) { var hex = ''; // eslint-disable-line for (var i = 0; i < stringValue.length; i++) { // eslint-disable-line var code = stringValue.charCodeAt(i); var n = code.toString(16); hex += n.length < 2 ? '0' + n : n; } return '0x' + hex; } /** * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3] * * @method getKeys get specific key from inner object array of objects * @param {String} params * @param {String} key * @param {Boolean} allowEmpty * @returns {Array} output just a simple array of output keys */ function getKeys(params, key, allowEmpty) { if (!Array.isArray(params)) { throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\''); } if (typeof key !== 'string') { throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.'); } var result = []; // eslint-disable-line for (var i = 0; i < params.length; i++) { // eslint-disable-line var value = params[i][key]; // eslint-disable-line if (allowEmpty && !value) { value = ''; } else if (typeof value !== 'string') { throw new Error('invalid abi'); } result.push(value); } return result; } /** * Is the string a hex string. * * @method check if string is hex string of specific length * @param {String} value * @param {Number} length * @returns {Boolean} output the string is a hex string */ function isHexString(value, length) { if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) { return false; } if (length && value.length !== 2 + 2 * length) { return false; } return true; } module.exports = { arrayContainsArray: arrayContainsArray, intToBuffer: intToBuffer, getBinarySize: getBinarySize, isHexPrefixed: isHexPrefixed, stripHexPrefix: stripHexPrefix, padToEven: padToEven, intToHex: intToHex, fromAscii: fromAscii, fromUtf8: fromUtf8, toAscii: toAscii, toUtf8: toUtf8, getKeys: getKeys, isHexString: isHexString }; }).call(this,require("buffer").Buffer) },{"buffer":74,"is-hex-prefixed":182,"strip-hex-prefix":329}],155:[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 EventEmitter() { this._events = this._events || {}; this._maxListeners = this._maxListeners || undefined; } module.exports = EventEmitter; // Backwards-compat with node 0.10.x EventEmitter.EventEmitter = EventEmitter; EventEmitter.prototype._events = undefined; EventEmitter.prototype._maxListeners = undefined; // 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; // 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; }; EventEmitter.prototype.emit = function(type) { var er, handler, len, args, i, listeners; if (!this._events) this._events = {}; // 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 } else { // At least give some kind of context to the user var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); err.context = er; throw err; } } } handler = this._events[type]; if (isUndefined(handler)) return false; 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: args = Array.prototype.slice.call(arguments, 1); handler.apply(this, args); } } else if (isObject(handler)) { args = Array.prototype.slice.call(arguments, 1); listeners = handler.slice(); len = listeners.length; for (i = 0; i < len; i++) listeners[i].apply(this, args); } return true; }; EventEmitter.prototype.addListener = function(type, listener) { var m; if (!isFunction(listener)) throw TypeError('listener must be a function'); if (!this._events) this._events = {}; // 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); 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]; // Check for listener leak if (isObject(this._events[type]) && !this._events[type].warned) { if (!isUndefined(this._maxListeners)) { m = this._maxListeners; } else { m = EventEmitter.defaultMaxListeners; } 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(); } } } return this; }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.once = function(type, listener) { if (!isFunction(listener)) throw TypeError('listener must be a function'); var fired = false; function g() { this.removeListener(type, g); if (!fired) { fired = true; listener.apply(this, arguments); } } g.listener = listener; this.on(type, g); return this; }; // emits a 'removeListener' event iff the listener was removed EventEmitter.prototype.removeListener = function(type, listener) { var list, position, length, i; if (!isFunction(listener)) throw TypeError('listener must be a function'); if (!this._events || !this._events[type]) return this; list = this._events[type]; length = list.length; position = -1; if (list === listener || (isFunction(list.listener) && list.listener === listener)) { delete this._events[type]; if (this._events.removeListener) this.emit('removeListener', type, listener); } else if (isObject(list)) { for (i = length; i-- > 0;) { if (list[i] === listener || (list[i].listener && list[i].listener === listener)) { position = i; break; } } if (position < 0) return this; 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 this; }; EventEmitter.prototype.removeAllListeners = function(type) { var key, listeners; if (!this._events) return this; // 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; } // 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; } listeners = this._events[type]; if (isFunction(listeners)) { this.removeListener(type, listeners); } else if (listeners) { // LIFO order while (listeners.length) this.removeListener(type, listeners[listeners.length - 1]); } delete this._events[type]; return this; }; 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.prototype.listenerCount = function(type) { if (this._events) { var evlistener = this._events[type]; if (isFunction(evlistener)) return 1; else if (evlistener) return evlistener.length; } return 0; }; EventEmitter.listenerCount = function(emitter, type) { return emitter.listenerCount(type); }; function isFunction(arg) { return typeof arg === 'function'; } function isNumber(arg) { return typeof arg === 'number'; } function isObject(arg) { return typeof arg === 'object' && arg !== null; } function isUndefined(arg) { return arg === void 0; } },{}],156:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer var MD5 = require('md5.js') /* eslint-disable camelcase */ function EVP_BytesToKey (password, salt, keyBits, ivLen) { if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary') if (salt) { if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary') if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length') } var keyLen = keyBits / 8 var key = Buffer.alloc(keyLen) var iv = Buffer.alloc(ivLen || 0) var tmp = Buffer.alloc(0) while (keyLen > 0 || ivLen > 0) { var hash = new MD5() hash.update(tmp) hash.update(password) if (salt) hash.update(salt) tmp = hash.digest() var used = 0 if (keyLen > 0) { var keyStart = key.length - keyLen used = Math.min(keyLen, tmp.length) tmp.copy(key, keyStart, 0, used) keyLen -= used } if (used < tmp.length && ivLen > 0) { var ivStart = iv.length - ivLen var length = Math.min(ivLen, tmp.length - used) tmp.copy(iv, ivStart, used, used + length) ivLen -= length } } tmp.fill(0) return { key: key, iv: iv } } module.exports = EVP_BytesToKey },{"md5.js":248,"safe-buffer":311}],157:[function(require,module,exports){ "use strict" module.exports = createRBTree var RED = 0 var BLACK = 1 function RBNode(color, key, value, left, right, count) { this._color = color this.key = key this.value = value this.left = left this.right = right this._count = count } function cloneNode(node) { return new RBNode(node._color, node.key, node.value, node.left, node.right, node._count) } function repaint(color, node) { return new RBNode(color, node.key, node.value, node.left, node.right, node._count) } function recount(node) { node._count = 1 + (node.left ? node.left._count : 0) + (node.right ? node.right._count : 0) } function RedBlackTree(compare, root) { this._compare = compare this.root = root } var proto = RedBlackTree.prototype Object.defineProperty(proto, "keys", { get: function() { var result = [] this.forEach(function(k,v) { result.push(k) }) return result } }) Object.defineProperty(proto, "values", { get: function() { var result = [] this.forEach(function(k,v) { result.push(v) }) return result } }) //Returns the number of nodes in the tree Object.defineProperty(proto, "length", { get: function() { if(this.root) { return this.root._count } return 0 } }) //Insert a new item into the tree proto.insert = function(key, value) { var cmp = this._compare //Find point to insert new node at var n = this.root var n_stack = [] var d_stack = [] while(n) { var d = cmp(key, n.key) n_stack.push(n) d_stack.push(d) if(d <= 0) { n = n.left } else { n = n.right } } //Rebuild path to leaf node n_stack.push(new RBNode(RED, key, value, null, null, 1)) for(var s=n_stack.length-2; s>=0; --s) { var n = n_stack[s] if(d_stack[s] <= 0) { n_stack[s] = new RBNode(n._color, n.key, n.value, n_stack[s+1], n.right, n._count+1) } else { n_stack[s] = new RBNode(n._color, n.key, n.value, n.left, n_stack[s+1], n._count+1) } } //Rebalance tree using rotations //console.log("start insert", key, d_stack) for(var s=n_stack.length-1; s>1; --s) { var p = n_stack[s-1] var n = n_stack[s] if(p._color === BLACK || n._color === BLACK) { break } var pp = n_stack[s-2] if(pp.left === p) { if(p.left === n) { var y = pp.right if(y && y._color === RED) { //console.log("LLr") p._color = BLACK pp.right = repaint(BLACK, y) pp._color = RED s -= 1 } else { //console.log("LLb") pp._color = RED pp.left = p.right p._color = BLACK p.right = pp n_stack[s-2] = p n_stack[s-1] = n recount(pp) recount(p) if(s >= 3) { var ppp = n_stack[s-3] if(ppp.left === pp) { ppp.left = p } else { ppp.right = p } } break } } else { var y = pp.right if(y && y._color === RED) { //console.log("LRr") p._color = BLACK pp.right = repaint(BLACK, y) pp._color = RED s -= 1 } else { //console.log("LRb") p.right = n.left pp._color = RED pp.left = n.right n._color = BLACK n.left = p n.right = pp n_stack[s-2] = n n_stack[s-1] = p recount(pp) recount(p) recount(n) if(s >= 3) { var ppp = n_stack[s-3] if(ppp.left === pp) { ppp.left = n } else { ppp.right = n } } break } } } else { if(p.right === n) { var y = pp.left if(y && y._color === RED) { //console.log("RRr", y.key) p._color = BLACK pp.left = repaint(BLACK, y) pp._color = RED s -= 1 } else { //console.log("RRb") pp._color = RED pp.right = p.left p._color = BLACK p.left = pp n_stack[s-2] = p n_stack[s-1] = n recount(pp) recount(p) if(s >= 3) { var ppp = n_stack[s-3] if(ppp.right === pp) { ppp.right = p } else { ppp.left = p } } break } } else { var y = pp.left if(y && y._color === RED) { //console.log("RLr") p._color = BLACK pp.left = repaint(BLACK, y) pp._color = RED s -= 1 } else { //console.log("RLb") p.left = n.right pp._color = RED pp.right = n.left n._color = BLACK n.right = p n.left = pp n_stack[s-2] = n n_stack[s-1] = p recount(pp) recount(p) recount(n) if(s >= 3) { var ppp = n_stack[s-3] if(ppp.right === pp) { ppp.right = n } else { ppp.left = n } } break } } } } //Return new tree n_stack[0]._color = BLACK return new RedBlackTree(cmp, n_stack[0]) } //Visit all nodes inorder function doVisitFull(visit, node) { if(node.left) { var v = doVisitFull(visit, node.left) if(v) { return v } } var v = visit(node.key, node.value) if(v) { return v } if(node.right) { return doVisitFull(visit, node.right) } } //Visit half nodes in order function doVisitHalf(lo, compare, visit, node) { var l = compare(lo, node.key) if(l <= 0) { if(node.left) { var v = doVisitHalf(lo, compare, visit, node.left) if(v) { return v } } var v = visit(node.key, node.value) if(v) { return v } } if(node.right) { return doVisitHalf(lo, compare, visit, node.right) } } //Visit all nodes within a range function doVisit(lo, hi, compare, visit, node) { var l = compare(lo, node.key) var h = compare(hi, node.key) var v if(l <= 0) { if(node.left) { v = doVisit(lo, hi, compare, visit, node.left) if(v) { return v } } if(h > 0) { v = visit(node.key, node.value) if(v) { return v } } } if(h > 0 && node.right) { return doVisit(lo, hi, compare, visit, node.right) } } proto.forEach = function rbTreeForEach(visit, lo, hi) { if(!this.root) { return } switch(arguments.length) { case 1: return doVisitFull(visit, this.root) break case 2: return doVisitHalf(lo, this._compare, visit, this.root) break case 3: if(this._compare(lo, hi) >= 0) { return } return doVisit(lo, hi, this._compare, visit, this.root) break } } //First item in list Object.defineProperty(proto, "begin", { get: function() { var stack = [] var n = this.root while(n) { stack.push(n) n = n.left } return new RedBlackTreeIterator(this, stack) } }) //Last item in list Object.defineProperty(proto, "end", { get: function() { var stack = [] var n = this.root while(n) { stack.push(n) n = n.right } return new RedBlackTreeIterator(this, stack) } }) //Find the ith item in the tree proto.at = function(idx) { if(idx < 0) { return new RedBlackTreeIterator(this, []) } var n = this.root var stack = [] while(true) { stack.push(n) if(n.left) { if(idx < n.left._count) { n = n.left continue } idx -= n.left._count } if(!idx) { return new RedBlackTreeIterator(this, stack) } idx -= 1 if(n.right) { if(idx >= n.right._count) { break } n = n.right } else { break } } return new RedBlackTreeIterator(this, []) } proto.ge = function(key) { var cmp = this._compare var n = this.root var stack = [] var last_ptr = 0 while(n) { var d = cmp(key, n.key) stack.push(n) if(d <= 0) { last_ptr = stack.length } if(d <= 0) { n = n.left } else { n = n.right } } stack.length = last_ptr return new RedBlackTreeIterator(this, stack) } proto.gt = function(key) { var cmp = this._compare var n = this.root var stack = [] var last_ptr = 0 while(n) { var d = cmp(key, n.key) stack.push(n) if(d < 0) { last_ptr = stack.length } if(d < 0) { n = n.left } else { n = n.right } } stack.length = last_ptr return new RedBlackTreeIterator(this, stack) } proto.lt = function(key) { var cmp = this._compare var n = this.root var stack = [] var last_ptr = 0 while(n) { var d = cmp(key, n.key) stack.push(n) if(d > 0) { last_ptr = stack.length } if(d <= 0) { n = n.left } else { n = n.right } } stack.length = last_ptr return new RedBlackTreeIterator(this, stack) } proto.le = function(key) { var cmp = this._compare var n = this.root var stack = [] var last_ptr = 0 while(n) { var d = cmp(key, n.key) stack.push(n) if(d >= 0) { last_ptr = stack.length } if(d < 0) { n = n.left } else { n = n.right } } stack.length = last_ptr return new RedBlackTreeIterator(this, stack) } //Finds the item with key if it exists proto.find = function(key) { var cmp = this._compare var n = this.root var stack = [] while(n) { var d = cmp(key, n.key) stack.push(n) if(d === 0) { return new RedBlackTreeIterator(this, stack) } if(d <= 0) { n = n.left } else { n = n.right } } return new RedBlackTreeIterator(this, []) } //Removes item with key from tree proto.remove = function(key) { var iter = this.find(key) if(iter) { return iter.remove() } return this } //Returns the item at `key` proto.get = function(key) { var cmp = this._compare var n = this.root while(n) { var d = cmp(key, n.key) if(d === 0) { return n.value } if(d <= 0) { n = n.left } else { n = n.right } } return } //Iterator for red black tree function RedBlackTreeIterator(tree, stack) { this.tree = tree this._stack = stack } var iproto = RedBlackTreeIterator.prototype //Test if iterator is valid Object.defineProperty(iproto, "valid", { get: function() { return this._stack.length > 0 } }) //Node of the iterator Object.defineProperty(iproto, "node", { get: function() { if(this._stack.length > 0) { return this._stack[this._stack.length-1] } return null }, enumerable: true }) //Makes a copy of an iterator iproto.clone = function() { return new RedBlackTreeIterator(this.tree, this._stack.slice()) } //Swaps two nodes function swapNode(n, v) { n.key = v.key n.value = v.value n.left = v.left n.right = v.right n._color = v._color n._count = v._count } //Fix up a double black node in a tree function fixDoubleBlack(stack) { var n, p, s, z for(var i=stack.length-1; i>=0; --i) { n = stack[i] if(i === 0) { n._color = BLACK return } //console.log("visit node:", n.key, i, stack[i].key, stack[i-1].key) p = stack[i-1] if(p.left === n) { //console.log("left child") s = p.right if(s.right && s.right._color === RED) { //console.log("case 1: right sibling child red") s = p.right = cloneNode(s) z = s.right = cloneNode(s.right) p.right = s.left s.left = p s.right = z s._color = p._color n._color = BLACK p._color = BLACK z._color = BLACK recount(p) recount(s) if(i > 1) { var pp = stack[i-2] if(pp.left === p) { pp.left = s } else { pp.right = s } } stack[i-1] = s return } else if(s.left && s.left._color === RED) { //console.log("case 1: left sibling child red") s = p.right = cloneNode(s) z = s.left = cloneNode(s.left) p.right = z.left s.left = z.right z.left = p z.right = s z._color = p._color p._color = BLACK s._color = BLACK n._color = BLACK recount(p) recount(s) recount(z) if(i > 1) { var pp = stack[i-2] if(pp.left === p) { pp.left = z } else { pp.right = z } } stack[i-1] = z return } if(s._color === BLACK) { if(p._color === RED) { //console.log("case 2: black sibling, red parent", p.right.value) p._color = BLACK p.right = repaint(RED, s) return } else { //console.log("case 2: black sibling, black parent", p.right.value) p.right = repaint(RED, s) continue } } else { //console.log("case 3: red sibling") s = cloneNode(s) p.right = s.left s.left = p s._color = p._color p._color = RED recount(p) recount(s) if(i > 1) { var pp = stack[i-2] if(pp.left === p) { pp.left = s } else { pp.right = s } } stack[i-1] = s stack[i] = p if(i+1 < stack.length) { stack[i+1] = n } else { stack.push(n) } i = i+2 } } else { //console.log("right child") s = p.left if(s.left && s.left._color === RED) { //console.log("case 1: left sibling child red", p.value, p._color) s = p.left = cloneNode(s) z = s.left = cloneNode(s.left) p.left = s.right s.right = p s.left = z s._color = p._color n._color = BLACK p._color = BLACK z._color = BLACK recount(p) recount(s) if(i > 1) { var pp = stack[i-2] if(pp.right === p) { pp.right = s } else { pp.left = s } } stack[i-1] = s return } else if(s.right && s.right._color === RED) { //console.log("case 1: right sibling child red") s = p.left = cloneNode(s) z = s.right = cloneNode(s.right) p.left = z.right s.right = z.left z.right = p z.left = s z._color = p._color p._color = BLACK s._color = BLACK n._color = BLACK recount(p) recount(s) recount(z) if(i > 1) { var pp = stack[i-2] if(pp.right === p) { pp.right = z } else { pp.left = z } } stack[i-1] = z return } if(s._color === BLACK) { if(p._color === RED) { //console.log("case 2: black sibling, red parent") p._color = BLACK p.left = repaint(RED, s) return } else { //console.log("case 2: black sibling, black parent") p.left = repaint(RED, s) continue } } else { //console.log("case 3: red sibling") s = cloneNode(s) p.left = s.right s.right = p s._color = p._color p._color = RED recount(p) recount(s) if(i > 1) { var pp = stack[i-2] if(pp.right === p) { pp.right = s } else { pp.left = s } } stack[i-1] = s stack[i] = p if(i+1 < stack.length) { stack[i+1] = n } else { stack.push(n) } i = i+2 } } } } //Removes item at iterator from tree iproto.remove = function() { var stack = this._stack if(stack.length === 0) { return this.tree } //First copy path to node var cstack = new Array(stack.length) var n = stack[stack.length-1] cstack[cstack.length-1] = new RBNode(n._color, n.key, n.value, n.left, n.right, n._count) for(var i=stack.length-2; i>=0; --i) { var n = stack[i] if(n.left === stack[i+1]) { cstack[i] = new RBNode(n._color, n.key, n.value, cstack[i+1], n.right, n._count) } else { cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count) } } //Get node n = cstack[cstack.length-1] //console.log("start remove: ", n.value) //If not leaf, then swap with previous node if(n.left && n.right) { //console.log("moving to leaf") //First walk to previous leaf var split = cstack.length n = n.left while(n.right) { cstack.push(n) n = n.right } //Copy path to leaf var v = cstack[split-1] cstack.push(new RBNode(n._color, v.key, v.value, n.left, n.right, n._count)) cstack[split-1].key = n.key cstack[split-1].value = n.value //Fix up stack for(var i=cstack.length-2; i>=split; --i) { n = cstack[i] cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count) } cstack[split-1].left = cstack[split] } //console.log("stack=", cstack.map(function(v) { return v.value })) //Remove leaf node n = cstack[cstack.length-1] if(n._color === RED) { //Easy case: removing red leaf //console.log("RED leaf") var p = cstack[cstack.length-2] if(p.left === n) { p.left = null } else if(p.right === n) { p.right = null } cstack.pop() for(var i=0; i 0) { return this._stack[this._stack.length-1].key } return }, enumerable: true }) //Returns value Object.defineProperty(iproto, "value", { get: function() { if(this._stack.length > 0) { return this._stack[this._stack.length-1].value } return }, enumerable: true }) //Returns the position of this iterator in the sorted list Object.defineProperty(iproto, "index", { get: function() { var idx = 0 var stack = this._stack if(stack.length === 0) { var r = this.tree.root if(r) { return r._count } return 0 } else if(stack[stack.length-1].left) { idx = stack[stack.length-1].left._count } for(var s=stack.length-2; s>=0; --s) { if(stack[s+1] === stack[s].right) { ++idx if(stack[s].left) { idx += stack[s].left._count } } } return idx }, enumerable: true }) //Advances iterator to next element in list iproto.next = function() { var stack = this._stack if(stack.length === 0) { return } var n = stack[stack.length-1] if(n.right) { n = n.right while(n) { stack.push(n) n = n.left } } else { stack.pop() while(stack.length > 0 && stack[stack.length-1].right === n) { n = stack[stack.length-1] stack.pop() } } } //Checks if iterator is at end of tree Object.defineProperty(iproto, "hasNext", { get: function() { var stack = this._stack if(stack.length === 0) { return false } if(stack[stack.length-1].right) { return true } for(var s=stack.length-1; s>0; --s) { if(stack[s-1].left === stack[s]) { return true } } return false } }) //Update value iproto.update = function(value) { var stack = this._stack if(stack.length === 0) { throw new Error("Can't update empty node!") } var cstack = new Array(stack.length) var n = stack[stack.length-1] cstack[cstack.length-1] = new RBNode(n._color, n.key, value, n.left, n.right, n._count) for(var i=stack.length-2; i>=0; --i) { n = stack[i] if(n.left === stack[i+1]) { cstack[i] = new RBNode(n._color, n.key, n.value, cstack[i+1], n.right, n._count) } else { cstack[i] = new RBNode(n._color, n.key, n.value, n.left, cstack[i+1], n._count) } } return new RedBlackTree(this.tree._compare, cstack[0]) } //Moves iterator backward one element iproto.prev = function() { var stack = this._stack if(stack.length === 0) { return } var n = stack[stack.length-1] if(n.left) { n = n.left while(n) { stack.push(n) n = n.right } } else { stack.pop() while(stack.length > 0 && stack[stack.length-1].left === n) { n = stack[stack.length-1] stack.pop() } } } //Checks if iterator is at start of tree Object.defineProperty(iproto, "hasPrev", { get: function() { var stack = this._stack if(stack.length === 0) { return false } if(stack[stack.length-1].left) { return true } for(var s=stack.length-1; s>0; --s) { if(stack[s-1].right === stack[s]) { return true } } return false } }) //Default comparison function function defaultCompare(a, b) { if(a < b) { return -1 } if(a > b) { return 1 } return 0 } //Build a tree function createRBTree(compare) { return new RedBlackTree(compare || defaultCompare, null) } },{}],158:[function(require,module,exports){ (function (Buffer){ 'use strict' var Transform = require('stream').Transform var inherits = require('inherits') function HashBase (blockSize) { Transform.call(this) this._block = new Buffer(blockSize) this._blockSize = blockSize this._blockOffset = 0 this._length = [0, 0, 0, 0] this._finalized = false } inherits(HashBase, Transform) HashBase.prototype._transform = function (chunk, encoding, callback) { var error = null try { if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding) this.update(chunk) } catch (err) { error = err } callback(error) } HashBase.prototype._flush = function (callback) { var error = null try { this.push(this._digest()) } catch (err) { error = err } callback(error) } HashBase.prototype.update = function (data, encoding) { if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer') if (this._finalized) throw new Error('Digest already called') if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary') // consume data var block = this._block var offset = 0 while (this._blockOffset + data.length - offset >= this._blockSize) { for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++] this._update() this._blockOffset = 0 } while (offset < data.length) block[this._blockOffset++] = data[offset++] // update length for (var j = 0, carry = data.length * 8; carry > 0; ++j) { this._length[j] += carry carry = (this._length[j] / 0x0100000000) | 0 if (carry > 0) this._length[j] -= 0x0100000000 * carry } return this } HashBase.prototype._update = function (data) { throw new Error('_update is not implemented') } HashBase.prototype.digest = function (encoding) { if (this._finalized) throw new Error('Digest already called') this._finalized = true var digest = this._digest() if (encoding !== undefined) digest = digest.toString(encoding) return digest } HashBase.prototype._digest = function () { throw new Error('_digest is not implemented') } module.exports = HashBase }).call(this,require("buffer").Buffer) },{"buffer":74,"inherits":180,"stream":327}],159:[function(require,module,exports){ var hash = exports; hash.utils = require('./hash/utils'); hash.common = require('./hash/common'); hash.sha = require('./hash/sha'); hash.ripemd = require('./hash/ripemd'); hash.hmac = require('./hash/hmac'); // Proxy hash functions to the main object hash.sha1 = hash.sha.sha1; hash.sha256 = hash.sha.sha256; hash.sha224 = hash.sha.sha224; hash.sha384 = hash.sha.sha384; hash.sha512 = hash.sha.sha512; hash.ripemd160 = hash.ripemd.ripemd160; },{"./hash/common":160,"./hash/hmac":161,"./hash/ripemd":162,"./hash/sha":163,"./hash/utils":170}],160:[function(require,module,exports){ 'use strict'; var utils = require('./utils'); var assert = require('minimalistic-assert'); function BlockHash() { this.pending = null; this.pendingTotal = 0; this.blockSize = this.constructor.blockSize; this.outSize = this.constructor.outSize; this.hmacStrength = this.constructor.hmacStrength; this.padLength = this.constructor.padLength / 8; this.endian = 'big'; this._delta8 = this.blockSize / 8; this._delta32 = this.blockSize / 32; } exports.BlockHash = BlockHash; BlockHash.prototype.update = function update(msg, enc) { // Convert message to array, pad it, and join into 32bit blocks msg = utils.toArray(msg, enc); if (!this.pending) this.pending = msg; else this.pending = this.pending.concat(msg); this.pendingTotal += msg.length; // Enough data, try updating if (this.pending.length >= this._delta8) { msg = this.pending; // Process pending data in blocks var r = msg.length % this._delta8; this.pending = msg.slice(msg.length - r, msg.length); if (this.pending.length === 0) this.pending = null; msg = utils.join32(msg, 0, msg.length - r, this.endian); for (var i = 0; i < msg.length; i += this._delta32) this._update(msg, i, i + this._delta32); } return this; }; BlockHash.prototype.digest = function digest(enc) { this.update(this._pad()); assert(this.pending === null); return this._digest(enc); }; BlockHash.prototype._pad = function pad() { var len = this.pendingTotal; var bytes = this._delta8; var k = bytes - ((len + this.padLength) % bytes); var res = new Array(k + this.padLength); res[0] = 0x80; for (var i = 1; i < k; i++) res[i] = 0; // Append length len <<= 3; if (this.endian === 'big') { for (var t = 8; t < this.padLength; t++) res[i++] = 0; res[i++] = 0; res[i++] = 0; res[i++] = 0; res[i++] = 0; res[i++] = (len >>> 24) & 0xff; res[i++] = (len >>> 16) & 0xff; res[i++] = (len >>> 8) & 0xff; res[i++] = len & 0xff; } else { res[i++] = len & 0xff; res[i++] = (len >>> 8) & 0xff; res[i++] = (len >>> 16) & 0xff; res[i++] = (len >>> 24) & 0xff; res[i++] = 0; res[i++] = 0; res[i++] = 0; res[i++] = 0; for (t = 8; t < this.padLength; t++) res[i++] = 0; } return res; }; },{"./utils":170,"minimalistic-assert":267}],161:[function(require,module,exports){ 'use strict'; var utils = require('./utils'); var assert = require('minimalistic-assert'); function Hmac(hash, key, enc) { if (!(this instanceof Hmac)) return new Hmac(hash, key, enc); this.Hash = hash; this.blockSize = hash.blockSize / 8; this.outSize = hash.outSize / 8; this.inner = null; this.outer = null; this._init(utils.toArray(key, enc)); } module.exports = Hmac; Hmac.prototype._init = function init(key) { // Shorten key, if needed if (key.length > this.blockSize) key = new this.Hash().update(key).digest(); assert(key.length <= this.blockSize); // Add padding to key for (var i = key.length; i < this.blockSize; i++) key.push(0); for (i = 0; i < key.length; i++) key[i] ^= 0x36; this.inner = new this.Hash().update(key); // 0x36 ^ 0x5c = 0x6a for (i = 0; i < key.length; i++) key[i] ^= 0x6a; this.outer = new this.Hash().update(key); }; Hmac.prototype.update = function update(msg, enc) { this.inner.update(msg, enc); return this; }; Hmac.prototype.digest = function digest(enc) { this.outer.update(this.inner.digest()); return this.outer.digest(enc); }; },{"./utils":170,"minimalistic-assert":267}],162:[function(require,module,exports){ 'use strict'; var utils = require('./utils'); var common = require('./common'); var rotl32 = utils.rotl32; var sum32 = utils.sum32; var sum32_3 = utils.sum32_3; var sum32_4 = utils.sum32_4; var BlockHash = common.BlockHash; function RIPEMD160() { if (!(this instanceof RIPEMD160)) return new RIPEMD160(); BlockHash.call(this); this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; this.endian = 'little'; } utils.inherits(RIPEMD160, BlockHash); exports.ripemd160 = RIPEMD160; RIPEMD160.blockSize = 512; RIPEMD160.outSize = 160; RIPEMD160.hmacStrength = 192; RIPEMD160.padLength = 64; RIPEMD160.prototype._update = function update(msg, start) { var A = this.h[0]; var B = this.h[1]; var C = this.h[2]; var D = this.h[3]; var E = this.h[4]; var Ah = A; var Bh = B; var Ch = C; var Dh = D; var Eh = E; for (var j = 0; j < 80; j++) { var T = sum32( rotl32( sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), s[j]), E); A = E; E = D; D = rotl32(C, 10); C = B; B = T; T = sum32( rotl32( sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), sh[j]), Eh); Ah = Eh; Eh = Dh; Dh = rotl32(Ch, 10); Ch = Bh; Bh = T; } T = sum32_3(this.h[1], C, Dh); this.h[1] = sum32_3(this.h[2], D, Eh); this.h[2] = sum32_3(this.h[3], E, Ah); this.h[3] = sum32_3(this.h[4], A, Bh); this.h[4] = sum32_3(this.h[0], B, Ch); this.h[0] = T; }; RIPEMD160.prototype._digest = function digest(enc) { if (enc === 'hex') return utils.toHex32(this.h, 'little'); else return utils.split32(this.h, 'little'); }; function f(j, x, y, z) { if (j <= 15) return x ^ y ^ z; else if (j <= 31) return (x & y) | ((~x) & z); else if (j <= 47) return (x | (~y)) ^ z; else if (j <= 63) return (x & z) | (y & (~z)); else return x ^ (y | (~z)); } function K(j) { if (j <= 15) return 0x00000000; else if (j <= 31) return 0x5a827999; else if (j <= 47) return 0x6ed9eba1; else if (j <= 63) return 0x8f1bbcdc; else return 0xa953fd4e; } function Kh(j) { if (j <= 15) return 0x50a28be6; else if (j <= 31) return 0x5c4dd124; else if (j <= 47) return 0x6d703ef3; else if (j <= 63) return 0x7a6d76e9; else return 0x00000000; } var r = [ 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 rh = [ 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 s = [ 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 sh = [ 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 ]; },{"./common":160,"./utils":170}],163:[function(require,module,exports){ 'use strict'; exports.sha1 = require('./sha/1'); exports.sha224 = require('./sha/224'); exports.sha256 = require('./sha/256'); exports.sha384 = require('./sha/384'); exports.sha512 = require('./sha/512'); },{"./sha/1":164,"./sha/224":165,"./sha/256":166,"./sha/384":167,"./sha/512":168}],164:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var common = require('../common'); var shaCommon = require('./common'); var rotl32 = utils.rotl32; var sum32 = utils.sum32; var sum32_5 = utils.sum32_5; var ft_1 = shaCommon.ft_1; var BlockHash = common.BlockHash; var sha1_K = [ 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6 ]; function SHA1() { if (!(this instanceof SHA1)) return new SHA1(); BlockHash.call(this); this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; this.W = new Array(80); } utils.inherits(SHA1, BlockHash); module.exports = SHA1; SHA1.blockSize = 512; SHA1.outSize = 160; SHA1.hmacStrength = 80; SHA1.padLength = 64; SHA1.prototype._update = function _update(msg, start) { var W = this.W; for (var i = 0; i < 16; i++) W[i] = msg[start + i]; for(; i < W.length; i++) W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); var a = this.h[0]; var b = this.h[1]; var c = this.h[2]; var d = this.h[3]; var e = this.h[4]; for (i = 0; i < W.length; i++) { var s = ~~(i / 20); var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); e = d; d = c; c = rotl32(b, 30); b = a; a = t; } this.h[0] = sum32(this.h[0], a); this.h[1] = sum32(this.h[1], b); this.h[2] = sum32(this.h[2], c); this.h[3] = sum32(this.h[3], d); this.h[4] = sum32(this.h[4], e); }; SHA1.prototype._digest = function digest(enc) { if (enc === 'hex') return utils.toHex32(this.h, 'big'); else return utils.split32(this.h, 'big'); }; },{"../common":160,"../utils":170,"./common":169}],165:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var SHA256 = require('./256'); function SHA224() { if (!(this instanceof SHA224)) return new SHA224(); SHA256.call(this); this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; } utils.inherits(SHA224, SHA256); module.exports = SHA224; SHA224.blockSize = 512; SHA224.outSize = 224; SHA224.hmacStrength = 192; SHA224.padLength = 64; SHA224.prototype._digest = function digest(enc) { // Just truncate output if (enc === 'hex') return utils.toHex32(this.h.slice(0, 7), 'big'); else return utils.split32(this.h.slice(0, 7), 'big'); }; },{"../utils":170,"./256":166}],166:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var common = require('../common'); var shaCommon = require('./common'); var assert = require('minimalistic-assert'); var sum32 = utils.sum32; var sum32_4 = utils.sum32_4; var sum32_5 = utils.sum32_5; var ch32 = shaCommon.ch32; var maj32 = shaCommon.maj32; var s0_256 = shaCommon.s0_256; var s1_256 = shaCommon.s1_256; var g0_256 = shaCommon.g0_256; var g1_256 = shaCommon.g1_256; var BlockHash = common.BlockHash; var sha256_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 ]; function SHA256() { if (!(this instanceof SHA256)) return new SHA256(); BlockHash.call(this); this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ]; this.k = sha256_K; this.W = new Array(64); } utils.inherits(SHA256, BlockHash); module.exports = SHA256; SHA256.blockSize = 512; SHA256.outSize = 256; SHA256.hmacStrength = 192; SHA256.padLength = 64; SHA256.prototype._update = function _update(msg, start) { var W = this.W; for (var i = 0; i < 16; i++) W[i] = msg[start + i]; for (; i < W.length; i++) W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); var a = this.h[0]; var b = this.h[1]; var c = this.h[2]; var d = this.h[3]; var e = this.h[4]; var f = this.h[5]; var g = this.h[6]; var h = this.h[7]; assert(this.k.length === W.length); for (i = 0; i < W.length; i++) { var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); var T2 = sum32(s0_256(a), maj32(a, b, c)); h = g; g = f; f = e; e = sum32(d, T1); d = c; c = b; b = a; a = sum32(T1, T2); } this.h[0] = sum32(this.h[0], a); this.h[1] = sum32(this.h[1], b); this.h[2] = sum32(this.h[2], c); this.h[3] = sum32(this.h[3], d); this.h[4] = sum32(this.h[4], e); this.h[5] = sum32(this.h[5], f); this.h[6] = sum32(this.h[6], g); this.h[7] = sum32(this.h[7], h); }; SHA256.prototype._digest = function digest(enc) { if (enc === 'hex') return utils.toHex32(this.h, 'big'); else return utils.split32(this.h, 'big'); }; },{"../common":160,"../utils":170,"./common":169,"minimalistic-assert":267}],167:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var SHA512 = require('./512'); function SHA384() { if (!(this instanceof SHA384)) return new SHA384(); SHA512.call(this); this.h = [ 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939, 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4 ]; } utils.inherits(SHA384, SHA512); module.exports = SHA384; SHA384.blockSize = 1024; SHA384.outSize = 384; SHA384.hmacStrength = 192; SHA384.padLength = 128; SHA384.prototype._digest = function digest(enc) { if (enc === 'hex') return utils.toHex32(this.h.slice(0, 12), 'big'); else return utils.split32(this.h.slice(0, 12), 'big'); }; },{"../utils":170,"./512":168}],168:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var common = require('../common'); var assert = require('minimalistic-assert'); var rotr64_hi = utils.rotr64_hi; var rotr64_lo = utils.rotr64_lo; var shr64_hi = utils.shr64_hi; var shr64_lo = utils.shr64_lo; var sum64 = utils.sum64; var sum64_hi = utils.sum64_hi; var sum64_lo = utils.sum64_lo; var sum64_4_hi = utils.sum64_4_hi; var sum64_4_lo = utils.sum64_4_lo; var sum64_5_hi = utils.sum64_5_hi; var sum64_5_lo = utils.sum64_5_lo; var BlockHash = common.BlockHash; var sha512_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 ]; function SHA512() { if (!(this instanceof SHA512)) return new SHA512(); BlockHash.call(this); this.h = [ 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1, 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179 ]; this.k = sha512_K; this.W = new Array(160); } utils.inherits(SHA512, BlockHash); module.exports = SHA512; SHA512.blockSize = 1024; SHA512.outSize = 512; SHA512.hmacStrength = 192; SHA512.padLength = 128; SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { var W = this.W; // 32 x 32bit words for (var i = 0; i < 32; i++) W[i] = msg[start + i]; for (; i < W.length; i += 2) { var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); var c1_hi = W[i - 14]; // i - 7 var c1_lo = W[i - 13]; var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); var c3_hi = W[i - 32]; // i - 16 var c3_lo = W[i - 31]; W[i] = sum64_4_hi( c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo); W[i + 1] = sum64_4_lo( c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo); } }; SHA512.prototype._update = function _update(msg, start) { this._prepareBlock(msg, start); var W = this.W; var ah = this.h[0]; var al = this.h[1]; var bh = this.h[2]; var bl = this.h[3]; var ch = this.h[4]; var cl = this.h[5]; var dh = this.h[6]; var dl = this.h[7]; var eh = this.h[8]; var el = this.h[9]; var fh = this.h[10]; var fl = this.h[11]; var gh = this.h[12]; var gl = this.h[13]; var hh = this.h[14]; var hl = this.h[15]; assert(this.k.length === W.length); for (var i = 0; i < W.length; i += 2) { var c0_hi = hh; var c0_lo = hl; var c1_hi = s1_512_hi(eh, el); var c1_lo = s1_512_lo(eh, el); var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); var c3_hi = this.k[i]; var c3_lo = this.k[i + 1]; var c4_hi = W[i]; var c4_lo = W[i + 1]; var T1_hi = sum64_5_hi( c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo); var T1_lo = sum64_5_lo( c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo); c0_hi = s0_512_hi(ah, al); c0_lo = s0_512_lo(ah, al); c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); hh = gh; hl = gl; gh = fh; gl = fl; fh = eh; fl = el; eh = sum64_hi(dh, dl, T1_hi, T1_lo); el = sum64_lo(dl, dl, T1_hi, T1_lo); dh = ch; dl = cl; ch = bh; cl = bl; bh = ah; bl = al; ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); } sum64(this.h, 0, ah, al); sum64(this.h, 2, bh, bl); sum64(this.h, 4, ch, cl); sum64(this.h, 6, dh, dl); sum64(this.h, 8, eh, el); sum64(this.h, 10, fh, fl); sum64(this.h, 12, gh, gl); sum64(this.h, 14, hh, hl); }; SHA512.prototype._digest = function digest(enc) { if (enc === 'hex') return utils.toHex32(this.h, 'big'); else return utils.split32(this.h, 'big'); }; function ch64_hi(xh, xl, yh, yl, zh) { var r = (xh & yh) ^ ((~xh) & zh); if (r < 0) r += 0x100000000; return r; } function ch64_lo(xh, xl, yh, yl, zh, zl) { var r = (xl & yl) ^ ((~xl) & zl); if (r < 0) r += 0x100000000; return r; } function maj64_hi(xh, xl, yh, yl, zh) { var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); if (r < 0) r += 0x100000000; return r; } function maj64_lo(xh, xl, yh, yl, zh, zl) { var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); if (r < 0) r += 0x100000000; return r; } function s0_512_hi(xh, xl) { var c0_hi = rotr64_hi(xh, xl, 28); var c1_hi = rotr64_hi(xl, xh, 2); // 34 var c2_hi = rotr64_hi(xl, xh, 7); // 39 var r = c0_hi ^ c1_hi ^ c2_hi; if (r < 0) r += 0x100000000; return r; } function s0_512_lo(xh, xl) { var c0_lo = rotr64_lo(xh, xl, 28); var c1_lo = rotr64_lo(xl, xh, 2); // 34 var c2_lo = rotr64_lo(xl, xh, 7); // 39 var r = c0_lo ^ c1_lo ^ c2_lo; if (r < 0) r += 0x100000000; return r; } function s1_512_hi(xh, xl) { var c0_hi = rotr64_hi(xh, xl, 14); var c1_hi = rotr64_hi(xh, xl, 18); var c2_hi = rotr64_hi(xl, xh, 9); // 41 var r = c0_hi ^ c1_hi ^ c2_hi; if (r < 0) r += 0x100000000; return r; } function s1_512_lo(xh, xl) { var c0_lo = rotr64_lo(xh, xl, 14); var c1_lo = rotr64_lo(xh, xl, 18); var c2_lo = rotr64_lo(xl, xh, 9); // 41 var r = c0_lo ^ c1_lo ^ c2_lo; if (r < 0) r += 0x100000000; return r; } function g0_512_hi(xh, xl) { var c0_hi = rotr64_hi(xh, xl, 1); var c1_hi = rotr64_hi(xh, xl, 8); var c2_hi = shr64_hi(xh, xl, 7); var r = c0_hi ^ c1_hi ^ c2_hi; if (r < 0) r += 0x100000000; return r; } function g0_512_lo(xh, xl) { var c0_lo = rotr64_lo(xh, xl, 1); var c1_lo = rotr64_lo(xh, xl, 8); var c2_lo = shr64_lo(xh, xl, 7); var r = c0_lo ^ c1_lo ^ c2_lo; if (r < 0) r += 0x100000000; return r; } function g1_512_hi(xh, xl) { var c0_hi = rotr64_hi(xh, xl, 19); var c1_hi = rotr64_hi(xl, xh, 29); // 61 var c2_hi = shr64_hi(xh, xl, 6); var r = c0_hi ^ c1_hi ^ c2_hi; if (r < 0) r += 0x100000000; return r; } function g1_512_lo(xh, xl) { var c0_lo = rotr64_lo(xh, xl, 19); var c1_lo = rotr64_lo(xl, xh, 29); // 61 var c2_lo = shr64_lo(xh, xl, 6); var r = c0_lo ^ c1_lo ^ c2_lo; if (r < 0) r += 0x100000000; return r; } },{"../common":160,"../utils":170,"minimalistic-assert":267}],169:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var rotr32 = utils.rotr32; function ft_1(s, x, y, z) { if (s === 0) return ch32(x, y, z); if (s === 1 || s === 3) return p32(x, y, z); if (s === 2) return maj32(x, y, z); } exports.ft_1 = ft_1; function ch32(x, y, z) { return (x & y) ^ ((~x) & z); } exports.ch32 = ch32; function maj32(x, y, z) { return (x & y) ^ (x & z) ^ (y & z); } exports.maj32 = maj32; function p32(x, y, z) { return x ^ y ^ z; } exports.p32 = p32; function s0_256(x) { return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); } exports.s0_256 = s0_256; function s1_256(x) { return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); } exports.s1_256 = s1_256; function g0_256(x) { return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); } exports.g0_256 = g0_256; function g1_256(x) { return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); } exports.g1_256 = g1_256; },{"../utils":170}],170:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); var inherits = require('inherits'); exports.inherits = inherits; function toArray(msg, enc) { if (Array.isArray(msg)) return msg.slice(); if (!msg) return []; var res = []; if (typeof msg === 'string') { 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 (i = 0; i < msg.length; i += 2) res.push(parseInt(msg[i] + msg[i + 1], 16)); } } else { for (i = 0; i < msg.length; i++) res[i] = msg[i] | 0; } return res; } exports.toArray = toArray; function toHex(msg) { var res = ''; for (var i = 0; i < msg.length; i++) res += zero2(msg[i].toString(16)); return res; } exports.toHex = toHex; function htonl(w) { var res = (w >>> 24) | ((w >>> 8) & 0xff00) | ((w << 8) & 0xff0000) | ((w & 0xff) << 24); return res >>> 0; } exports.htonl = htonl; function toHex32(msg, endian) { var res = ''; for (var i = 0; i < msg.length; i++) { var w = msg[i]; if (endian === 'little') w = htonl(w); res += zero8(w.toString(16)); } return res; } exports.toHex32 = toHex32; function zero2(word) { if (word.length === 1) return '0' + word; else return word; } exports.zero2 = zero2; function zero8(word) { if (word.length === 7) return '0' + word; else if (word.length === 6) return '00' + word; else if (word.length === 5) return '000' + word; else if (word.length === 4) return '0000' + word; else if (word.length === 3) return '00000' + word; else if (word.length === 2) return '000000' + word; else if (word.length === 1) return '0000000' + word; else return word; } exports.zero8 = zero8; function join32(msg, start, end, endian) { var len = end - start; assert(len % 4 === 0); var res = new Array(len / 4); for (var i = 0, k = start; i < res.length; i++, k += 4) { var w; if (endian === 'big') w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; else w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; res[i] = w >>> 0; } return res; } exports.join32 = join32; function split32(msg, endian) { var res = new Array(msg.length * 4); for (var i = 0, k = 0; i < msg.length; i++, k += 4) { var m = msg[i]; if (endian === 'big') { res[k] = m >>> 24; res[k + 1] = (m >>> 16) & 0xff; res[k + 2] = (m >>> 8) & 0xff; res[k + 3] = m & 0xff; } else { res[k + 3] = m >>> 24; res[k + 2] = (m >>> 16) & 0xff; res[k + 1] = (m >>> 8) & 0xff; res[k] = m & 0xff; } } return res; } exports.split32 = split32; function rotr32(w, b) { return (w >>> b) | (w << (32 - b)); } exports.rotr32 = rotr32; function rotl32(w, b) { return (w << b) | (w >>> (32 - b)); } exports.rotl32 = rotl32; function sum32(a, b) { return (a + b) >>> 0; } exports.sum32 = sum32; function sum32_3(a, b, c) { return (a + b + c) >>> 0; } exports.sum32_3 = sum32_3; function sum32_4(a, b, c, d) { return (a + b + c + d) >>> 0; } exports.sum32_4 = sum32_4; function sum32_5(a, b, c, d, e) { return (a + b + c + d + e) >>> 0; } exports.sum32_5 = sum32_5; function sum64(buf, pos, ah, al) { var bh = buf[pos]; var bl = buf[pos + 1]; var lo = (al + bl) >>> 0; var hi = (lo < al ? 1 : 0) + ah + bh; buf[pos] = hi >>> 0; buf[pos + 1] = lo; } exports.sum64 = sum64; function sum64_hi(ah, al, bh, bl) { var lo = (al + bl) >>> 0; var hi = (lo < al ? 1 : 0) + ah + bh; return hi >>> 0; } exports.sum64_hi = sum64_hi; function sum64_lo(ah, al, bh, bl) { var lo = al + bl; return lo >>> 0; } exports.sum64_lo = sum64_lo; function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { var carry = 0; var lo = al; lo = (lo + bl) >>> 0; carry += lo < al ? 1 : 0; lo = (lo + cl) >>> 0; carry += lo < cl ? 1 : 0; lo = (lo + dl) >>> 0; carry += lo < dl ? 1 : 0; var hi = ah + bh + ch + dh + carry; return hi >>> 0; } exports.sum64_4_hi = sum64_4_hi; function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { var lo = al + bl + cl + dl; return lo >>> 0; } exports.sum64_4_lo = sum64_4_lo; function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { var carry = 0; var lo = al; lo = (lo + bl) >>> 0; carry += lo < al ? 1 : 0; lo = (lo + cl) >>> 0; carry += lo < cl ? 1 : 0; lo = (lo + dl) >>> 0; carry += lo < dl ? 1 : 0; lo = (lo + el) >>> 0; carry += lo < el ? 1 : 0; var hi = ah + bh + ch + dh + eh + carry; return hi >>> 0; } exports.sum64_5_hi = sum64_5_hi; function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { var lo = al + bl + cl + dl + el; return lo >>> 0; } exports.sum64_5_lo = sum64_5_lo; function rotr64_hi(ah, al, num) { var r = (al << (32 - num)) | (ah >>> num); return r >>> 0; } exports.rotr64_hi = rotr64_hi; function rotr64_lo(ah, al, num) { var r = (ah << (32 - num)) | (al >>> num); return r >>> 0; } exports.rotr64_lo = rotr64_lo; function shr64_hi(ah, al, num) { return ah >>> num; } exports.shr64_hi = shr64_hi; function shr64_lo(ah, al, num) { var r = (ah << (32 - num)) | (al >>> num); return r >>> 0; } exports.shr64_lo = shr64_lo; },{"inherits":180,"minimalistic-assert":267}],171:[function(require,module,exports){ 'use strict'; var hash = require('hash.js'); var utils = require('minimalistic-crypto-utils'); var assert = require('minimalistic-assert'); function HmacDRBG(options) { if (!(this instanceof HmacDRBG)) return new HmacDRBG(options); this.hash = options.hash; this.predResist = !!options.predResist; this.outLen = this.hash.outSize; this.minEntropy = options.minEntropy || this.hash.hmacStrength; this._reseed = null; this.reseedInterval = null; this.K = null; this.V = null; var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); var pers = utils.toArray(options.pers, options.persEnc || 'hex'); assert(entropy.length >= (this.minEntropy / 8), 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); this._init(entropy, nonce, pers); } module.exports = HmacDRBG; HmacDRBG.prototype._init = function init(entropy, nonce, pers) { var seed = entropy.concat(nonce).concat(pers); this.K = new Array(this.outLen / 8); this.V = new Array(this.outLen / 8); for (var i = 0; i < this.V.length; i++) { this.K[i] = 0x00; this.V[i] = 0x01; } this._update(seed); this._reseed = 1; this.reseedInterval = 0x1000000000000; // 2^48 }; HmacDRBG.prototype._hmac = function hmac() { return new hash.hmac(this.hash, this.K); }; HmacDRBG.prototype._update = function update(seed) { var kmac = this._hmac() .update(this.V) .update([ 0x00 ]); if (seed) kmac = kmac.update(seed); this.K = kmac.digest(); this.V = this._hmac().update(this.V).digest(); if (!seed) return; this.K = this._hmac() .update(this.V) .update([ 0x01 ]) .update(seed) .digest(); this.V = this._hmac().update(this.V).digest(); }; HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { // Optional entropy enc if (typeof entropyEnc !== 'string') { addEnc = add; add = entropyEnc; entropyEnc = null; } entropy = utils.toArray(entropy, entropyEnc); add = utils.toArray(add, addEnc); assert(entropy.length >= (this.minEntropy / 8), 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); this._update(entropy.concat(add || [])); this._reseed = 1; }; HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { if (this._reseed > this.reseedInterval) throw new Error('Reseed is required'); // Optional encoding if (typeof enc !== 'string') { addEnc = add; add = enc; enc = null; } // Optional additional data if (add) { add = utils.toArray(add, addEnc || 'hex'); this._update(add); } var temp = []; while (temp.length < len) { this.V = this._hmac().update(this.V).digest(); temp = temp.concat(this.V); } var res = temp.slice(0, len); this._update(add); this._reseed++; return utils.encode(res, enc); }; },{"hash.js":159,"minimalistic-assert":267,"minimalistic-crypto-utils":268}],172:[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] i += d e = s & ((1 << (-nBits)) - 1) s >>= (-nBits) nBits += eLen for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} m = e & ((1 << (-nBits)) - 1) e >>= (-nBits) nBits += mLen for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} 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) } 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) 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 } 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 } } for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} e = (e << mLen) | m eLen += mLen for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} buffer[offset + i - d] |= s * 128 } },{}],173:[function(require,module,exports){ 'use strict'; var types = [ require('./nextTick'), require('./mutation.js'), require('./messageChannel'), require('./stateChange'), require('./timeout') ]; var draining; var currentQueue; var queueIndex = -1; var queue = []; var scheduled = false; function cleanUpNextTick() { if (!draining || !currentQueue) { return; } draining = false; if (currentQueue.length) { queue = currentQueue.concat(queue); } else { queueIndex = -1; } if (queue.length) { nextTick(); } } //named nextTick for less confusing stack traces function nextTick() { if (draining) { return; } scheduled = false; draining = true; var len = queue.length; var timeout = setTimeout(cleanUpNextTick); while (len) { currentQueue = queue; queue = []; while (currentQueue && ++queueIndex < len) { currentQueue[queueIndex].run(); } queueIndex = -1; len = queue.length; } currentQueue = null; queueIndex = -1; draining = false; clearTimeout(timeout); } var scheduleDrain; var i = -1; var len = types.length; while (++i < len) { if (types[i] && types[i].test && types[i].test()) { scheduleDrain = types[i].install(nextTick); break; } } // v8 likes predictible objects function Item(fun, array) { this.fun = fun; this.array = array; } Item.prototype.run = function () { var fun = this.fun; var array = this.array; switch (array.length) { case 0: return fun(); case 1: return fun(array[0]); case 2: return fun(array[0], array[1]); case 3: return fun(array[0], array[1], array[2]); default: return fun.apply(null, array); } }; module.exports = immediate; function immediate(task) { 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(task, args)); if (!scheduled && !draining) { scheduled = true; scheduleDrain(); } } },{"./messageChannel":174,"./mutation.js":175,"./nextTick":176,"./stateChange":177,"./timeout":178}],174:[function(require,module,exports){ (function (global){ 'use strict'; exports.test = function () { if (global.setImmediate) { // we can only get here in IE10 // which doesn't handel postMessage well return false; } return typeof global.MessageChannel !== 'undefined'; }; exports.install = function (func) { var channel = new global.MessageChannel(); channel.port1.onmessage = func; return function () { channel.port2.postMessage(0); }; }; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],175:[function(require,module,exports){ (function (global){ 'use strict'; //based off rsvp https://github.com/tildeio/rsvp.js //license https://github.com/tildeio/rsvp.js/blob/master/LICENSE //https://github.com/tildeio/rsvp.js/blob/master/lib/rsvp/asap.js var Mutation = global.MutationObserver || global.WebKitMutationObserver; exports.test = function () { return Mutation; }; exports.install = function (handle) { var called = 0; var observer = new Mutation(handle); var element = global.document.createTextNode(''); observer.observe(element, { characterData: true }); return function () { element.data = (called = ++called % 2); }; }; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],176:[function(require,module,exports){ (function (process){ 'use strict'; exports.test = function () { // Don't get fooled by e.g. browserify environments. return (typeof process !== 'undefined') && !process.browser; }; exports.install = function (func) { return function () { process.nextTick(func); }; }; }).call(this,require('_process')) },{"_process":285}],177:[function(require,module,exports){ (function (global){ 'use strict'; exports.test = function () { return 'document' in global && 'onreadystatechange' in global.document.createElement('script'); }; exports.install = function (handle) { return function () { // Create a