From e5cffd98ca529b52a919d350359bb29b923dd4ac Mon Sep 17 00:00:00 2001 From: rikmms Date: Mon, 26 Mar 2018 18:05:09 +0100 Subject: [PATCH 01/12] Updated the package.json and fixed the unit tests increasing the timeout value. --- package-lock.json | 2 +- package.json | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index a737c323..dae290a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@zxing/library", - "version": "0.3.0-dev.5d0190", + "version": "0.3.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 86bc6309..a06b06f8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@zxing/library", - "version": "0.3.2", + "version": "0.4.0", "description": "TypeScript port of ZXing multi-format 1D/2D barcode image processing library.", "keywords": [ "scanner", @@ -8,6 +8,7 @@ "generator", "barcode", "qr-code", + "code-128", "typescript", "zxing-typescript", "zxing" @@ -23,6 +24,10 @@ { "name": "Luiz Barni", "email": "machado@odahcam.com" + }, + { + "name": "Ricardo Sousa", + "email": "sousa.ricardo10@gmail.com" } ], "license": "MIT", @@ -40,7 +45,7 @@ "clean": "shx rm -rf bundles esm5", "build:before": "yarn run clean", "build": "yarn build:before && tsc && tsc --target es2017 --outDir esm5 && webpack && webpack --env.prod", - "test": "mocha-webpack --webpack-config webpack.config.test.js src/test.js", + "test": "mocha-webpack --webpack-config webpack.config.test.js src/test.js --timeout 60000", "lint": "tslint src/**/*.ts" }, "dependencies": { @@ -89,4 +94,4 @@ "webpack-config-utils": "2.3.0", "webpack-node-externals": "^1.6.0" } -} +} \ No newline at end of file From e9c52c619ed3a63f673883687fb40ca2b557443c Mon Sep 17 00:00:00 2001 From: rikmms Date: Mon, 26 Mar 2018 18:05:40 +0100 Subject: [PATCH 02/12] Implemented the port for the barcode decoder: code-128. --- src/core/oned/Code128Reader.ts | 526 ++++++++++++++++++ src/core/oned/OneDReader.ts | 286 ++++++++++ src/index.ts | 4 + src/test/core/oned/Code128BlackBox1.spec.ts | 45 ++ .../core/resources/blackbox/code128-1/1.png | Bin 0 -> 1975 bytes .../core/resources/blackbox/code128-1/1.txt | 1 + .../core/resources/blackbox/code128-1/2.png | Bin 0 -> 59876 bytes .../core/resources/blackbox/code128-1/2.txt | 1 + .../core/resources/blackbox/code128-1/3.png | Bin 0 -> 150974 bytes .../core/resources/blackbox/code128-1/3.txt | 1 + .../core/resources/blackbox/code128-1/4.png | Bin 0 -> 5018 bytes .../core/resources/blackbox/code128-1/4.txt | 1 + .../core/resources/blackbox/code128-1/5.png | Bin 0 -> 1110 bytes .../core/resources/blackbox/code128-1/5.txt | 1 + .../core/resources/blackbox/code128-1/6.png | Bin 0 -> 669 bytes .../core/resources/blackbox/code128-1/6.txt | 1 + 16 files changed, 867 insertions(+) create mode 100644 src/core/oned/Code128Reader.ts create mode 100644 src/core/oned/OneDReader.ts create mode 100644 src/test/core/oned/Code128BlackBox1.spec.ts create mode 100755 src/test/core/resources/blackbox/code128-1/1.png create mode 100755 src/test/core/resources/blackbox/code128-1/1.txt create mode 100755 src/test/core/resources/blackbox/code128-1/2.png create mode 100755 src/test/core/resources/blackbox/code128-1/2.txt create mode 100755 src/test/core/resources/blackbox/code128-1/3.png create mode 100755 src/test/core/resources/blackbox/code128-1/3.txt create mode 100755 src/test/core/resources/blackbox/code128-1/4.png create mode 100755 src/test/core/resources/blackbox/code128-1/4.txt create mode 100755 src/test/core/resources/blackbox/code128-1/5.png create mode 100755 src/test/core/resources/blackbox/code128-1/5.txt create mode 100755 src/test/core/resources/blackbox/code128-1/6.png create mode 100755 src/test/core/resources/blackbox/code128-1/6.txt diff --git a/src/core/oned/Code128Reader.ts b/src/core/oned/Code128Reader.ts new file mode 100644 index 00000000..adb9b07b --- /dev/null +++ b/src/core/oned/Code128Reader.ts @@ -0,0 +1,526 @@ +/* + * Copyright 2008 ZXing authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*namespace com.google.zxing.oned {*/ + +import BarcodeFormat from '../BarcodeFormat'; +import BinaryBitmap from './../BinaryBitmap'; +import BitArray from './../common/BitArray'; +import DecodeHintType from './../DecodeHintType'; +import Exception from './../Exception'; +import Reader from './../Reader'; +import Result from './../Result'; +import ResultMetadataType from './../ResultMetadataType'; +import ResultPoint from './../ResultPoint'; +import OneDReader from './OneDReader'; + +/** + *

Decodes Code 128 barcodes.

+ * + * @author Sean Owen + */ +export default class Code128Reader extends OneDReader { + + private static CODE_PATTERNS: number[][] = [ + [2, 1, 2, 2, 2, 2], + [2, 2, 2, 1, 2, 2], + [2, 2, 2, 2, 2, 1], + [1, 2, 1, 2, 2, 3], + [1, 2, 1, 3, 2, 2], + [1, 3, 1, 2, 2, 2], + [1, 2, 2, 2, 1, 3], + [1, 2, 2, 3, 1, 2], + [1, 3, 2, 2, 1, 2], + [2, 2, 1, 2, 1, 3], + [2, 2, 1, 3, 1, 2], + [2, 3, 1, 2, 1, 2], + [1, 1, 2, 2, 3, 2], + [1, 2, 2, 1, 3, 2], + [1, 2, 2, 2, 3, 1], + [1, 1, 3, 2, 2, 2], + [1, 2, 3, 1, 2, 2], + [1, 2, 3, 2, 2, 1], + [2, 2, 3, 2, 1, 1], + [2, 2, 1, 1, 3, 2], + [2, 2, 1, 2, 3, 1], + [2, 1, 3, 2, 1, 2], + [2, 2, 3, 1, 1, 2], + [3, 1, 2, 1, 3, 1], + [3, 1, 1, 2, 2, 2], + [3, 2, 1, 1, 2, 2], + [3, 2, 1, 2, 2, 1], + [3, 1, 2, 2, 1, 2], + [3, 2, 2, 1, 1, 2], + [3, 2, 2, 2, 1, 1], + [2, 1, 2, 1, 2, 3], + [2, 1, 2, 3, 2, 1], + [2, 3, 2, 1, 2, 1], + [1, 1, 1, 3, 2, 3], + [1, 3, 1, 1, 2, 3], + [1, 3, 1, 3, 2, 1], + [1, 1, 2, 3, 1, 3], + [1, 3, 2, 1, 1, 3], + [1, 3, 2, 3, 1, 1], + [2, 1, 1, 3, 1, 3], + [2, 3, 1, 1, 1, 3], + [2, 3, 1, 3, 1, 1], + [1, 1, 2, 1, 3, 3], + [1, 1, 2, 3, 3, 1], + [1, 3, 2, 1, 3, 1], + [1, 1, 3, 1, 2, 3], + [1, 1, 3, 3, 2, 1], + [1, 3, 3, 1, 2, 1], + [3, 1, 3, 1, 2, 1], + [2, 1, 1, 3, 3, 1], + [2, 3, 1, 1, 3, 1], + [2, 1, 3, 1, 1, 3], + [2, 1, 3, 3, 1, 1], + [2, 1, 3, 1, 3, 1], + [3, 1, 1, 1, 2, 3], + [3, 1, 1, 3, 2, 1], + [3, 3, 1, 1, 2, 1], + [3, 1, 2, 1, 1, 3], + [3, 1, 2, 3, 1, 1], + [3, 3, 2, 1, 1, 1], + [3, 1, 4, 1, 1, 1], + [2, 2, 1, 4, 1, 1], + [4, 3, 1, 1, 1, 1], + [1, 1, 1, 2, 2, 4], + [1, 1, 1, 4, 2, 2], + [1, 2, 1, 1, 2, 4], + [1, 2, 1, 4, 2, 1], + [1, 4, 1, 1, 2, 2], + [1, 4, 1, 2, 2, 1], + [1, 1, 2, 2, 1, 4], + [1, 1, 2, 4, 1, 2], + [1, 2, 2, 1, 1, 4], + [1, 2, 2, 4, 1, 1], + [1, 4, 2, 1, 1, 2], + [1, 4, 2, 2, 1, 1], + [2, 4, 1, 2, 1, 1], + [2, 2, 1, 1, 1, 4], + [4, 1, 3, 1, 1, 1], + [2, 4, 1, 1, 1, 2], + [1, 3, 4, 1, 1, 1], + [1, 1, 1, 2, 4, 2], + [1, 2, 1, 1, 4, 2], + [1, 2, 1, 2, 4, 1], + [1, 1, 4, 2, 1, 2], + [1, 2, 4, 1, 1, 2], + [1, 2, 4, 2, 1, 1], + [4, 1, 1, 2, 1, 2], + [4, 2, 1, 1, 1, 2], + [4, 2, 1, 2, 1, 1], + [2, 1, 2, 1, 4, 1], + [2, 1, 4, 1, 2, 1], + [4, 1, 2, 1, 2, 1], + [1, 1, 1, 1, 4, 3], + [1, 1, 1, 3, 4, 1], + [1, 3, 1, 1, 4, 1], + [1, 1, 4, 1, 1, 3], + [1, 1, 4, 3, 1, 1], + [4, 1, 1, 1, 1, 3], + [4, 1, 1, 3, 1, 1], + [1, 1, 3, 1, 4, 1], + [1, 1, 4, 1, 3, 1], + [3, 1, 1, 1, 4, 1], + [4, 1, 1, 1, 3, 1], + [2, 1, 1, 4, 1, 2], + [2, 1, 1, 2, 1, 4], + [2, 1, 1, 2, 3, 2], + [2, 3, 3, 1, 1, 1, 2]]; + + private static MAX_AVG_VARIANCE = 0.25; + private static MAX_INDIVIDUAL_VARIANCE = 0.7; + + private static CODE_SHIFT = 98; + + private static CODE_CODE_C = 99; + private static CODE_CODE_B = 100; + private static CODE_CODE_A = 101; + + private static CODE_FNC_1 = 102; + private static CODE_FNC_2 = 97; + private static CODE_FNC_3 = 96; + private static CODE_FNC_4_A = 101; + private static CODE_FNC_4_B = 100; + + private static CODE_START_A = 103; + private static CODE_START_B = 104; + private static CODE_START_C = 105; + private static CODE_STOP = 106; + + private static findStartPattern(row: BitArray): number[] { + const width = row.getSize(); + const rowOffset = row.getNextSet(0); + + let counterPosition = 0; + const counters = [0, 0, 0, 0, 0, 0]; + let patternStart = rowOffset; + let isWhite = false; + const patternLength = 6; + + for (let i = rowOffset; i < width; i++) { + if (row.get(i) !== isWhite) { + counters[counterPosition]++; + } else { + if (counterPosition === (patternLength - 1)) { + let bestVariance = Code128Reader.MAX_AVG_VARIANCE; + let bestMatch = -1; + for (let startCode = Code128Reader.CODE_START_A; startCode <= Code128Reader.CODE_START_C; startCode++) { + const variance = OneDReader.patternMatchVariance(counters, + Code128Reader.CODE_PATTERNS[startCode], Code128Reader.MAX_INDIVIDUAL_VARIANCE); + if (variance < bestVariance) { + bestVariance = variance; + bestMatch = startCode; + } + } + // Look for whitespace before start pattern, >= 50% of width of start pattern + if (bestMatch >= 0 && + row.isRange(Math.max(0, patternStart - (i - patternStart) / 2), patternStart, false)) { + return [patternStart, i, bestMatch]; + } + patternStart += counters[0] + counters[1]; + + counters.splice(0, 2); + counters[counterPosition - 1] = 0; + counters[counterPosition] = 0; + counterPosition--; + } else { + counterPosition++; + } + counters[counterPosition] = 1; + isWhite = !isWhite; + } + } + throw new Exception(Exception.NotFoundException); + } + + private static decodeCode(row: BitArray, counters: number[], rowOffset: number): number { + OneDReader.recordPattern(row, rowOffset, counters); + let bestVariance = Code128Reader.MAX_AVG_VARIANCE; // worst variance we'll accept + let bestMatch = -1; + for (let d = 0; d < Code128Reader.CODE_PATTERNS.length; d++) { + const pattern = Code128Reader.CODE_PATTERNS[d]; + const variance = this.patternMatchVariance(counters, pattern, Code128Reader.MAX_INDIVIDUAL_VARIANCE); + if (variance < bestVariance) { + bestVariance = variance; + bestMatch = d; + } + } + // TODO We're overlooking the fact that the STOP pattern has 7 values, not 6. + if (bestMatch >= 0) { + return bestMatch; + } else { + throw new Exception(Exception.NotFoundException); + } + } + + public decodeRow(rowNumber: number, row: BitArray, x: number, hints?: Map): Result { + const convertFNC1 = hints !== undefined && (hints.get(DecodeHintType.ASSUME_GS1) === true); + + const startPatternInfo = Code128Reader.findStartPattern(row); + const startCode = startPatternInfo[2]; + + let currentRawCodesIndex = 0; + const rawCodes: Uint8Array = new Uint8Array(20); + rawCodes[currentRawCodesIndex++] = startCode; + + let codeSet; + switch (startCode) { + case Code128Reader.CODE_START_A: + codeSet = Code128Reader.CODE_CODE_A; + break; + case Code128Reader.CODE_START_B: + codeSet = Code128Reader.CODE_CODE_B; + break; + case Code128Reader.CODE_START_C: + codeSet = Code128Reader.CODE_CODE_C; + break; + default: + throw new Exception(Exception.FormatException); + } + + let done = false; + let isNextShifted = false; + + let result = ''; + + let lastStart = startPatternInfo[0]; + let nextStart = startPatternInfo[1]; + const counters: number[] = [0, 0, 0, 0, 0, 0]; + + let lastCode = 0; + let code = 0; + let checksumTotal = startCode; + let multiplier = 0; + let lastCharacterWasPrintable = true; + let upperMode = false; + let shiftUpperMode = false; + + while (!done) { + + const unshift = isNextShifted; + isNextShifted = false; + + // Save off last code + lastCode = code; + + // Decode another code from image + code = Code128Reader.decodeCode(row, counters, nextStart); + + rawCodes[currentRawCodesIndex++] = code; + + // Remember whether the last code was printable or not (excluding CODE_STOP) + if (code !== Code128Reader.CODE_STOP) { + lastCharacterWasPrintable = true; + } + + // Add to checksum computation (if not CODE_STOP of course) + if (code !== Code128Reader.CODE_STOP) { + multiplier++; + checksumTotal += multiplier * code; + } + + // Advance to where the next code will to start + lastStart = nextStart; + nextStart += counters.reduce((previous, current) => previous + current, 0); + + // Take care of illegal start codes + switch (code) { + case Code128Reader.CODE_START_A: + case Code128Reader.CODE_START_B: + case Code128Reader.CODE_START_C: + throw new Exception(Exception.FormatException); + } + + switch (codeSet) { + + case Code128Reader.CODE_CODE_A: + if (code < 64) { + if (shiftUpperMode === upperMode) { + result += String.fromCharCode((' '.charCodeAt(0) + code)); + } else { + result += String.fromCharCode((' '.charCodeAt(0) + code + 128)); + } + shiftUpperMode = false; + } else if (code < 96) { + if (shiftUpperMode === upperMode) { + result += String.fromCharCode((code - 64)); + } else { + result += String.fromCharCode((code + 64)); + } + shiftUpperMode = false; + } else { + // Don't let CODE_STOP, which always appears, affect whether whether we think the last + // code was printable or not. + if (code !== Code128Reader.CODE_STOP) { + lastCharacterWasPrintable = false; + } + switch (code) { + case Code128Reader.CODE_FNC_1: + if (convertFNC1) { + if (result.length === 0) { + // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code + // is FNC1 then this is GS1-128. We add the symbology identifier. + result += ']C1'; + } else { + // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS) + result += String.fromCharCode(29); + } + } + break; + case Code128Reader.CODE_FNC_2: + case Code128Reader.CODE_FNC_3: + // do nothing? + break; + case Code128Reader.CODE_FNC_4_A: + if (!upperMode && shiftUpperMode) { + upperMode = true; + shiftUpperMode = false; + } else if (upperMode && shiftUpperMode) { + upperMode = false; + shiftUpperMode = false; + } else { + shiftUpperMode = true; + } + break; + case Code128Reader.CODE_SHIFT: + isNextShifted = true; + codeSet = Code128Reader.CODE_CODE_B; + break; + case Code128Reader.CODE_CODE_B: + codeSet = Code128Reader.CODE_CODE_B; + break; + case Code128Reader.CODE_CODE_C: + codeSet = Code128Reader.CODE_CODE_C; + break; + case Code128Reader.CODE_STOP: + done = true; + break; + } + } + break; + case Code128Reader.CODE_CODE_B: + if (code < 96) { + if (shiftUpperMode === upperMode) { + result += String.fromCharCode((' '.charCodeAt(0) + code)); + } else { + result += String.fromCharCode((' '.charCodeAt(0) + code + 128)); + } + shiftUpperMode = false; + } else { + if (code !== Code128Reader.CODE_STOP) { + lastCharacterWasPrintable = false; + } + switch (code) { + case Code128Reader.CODE_FNC_1: + if (convertFNC1) { + if (result.length === 0) { + // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code + // is FNC1 then this is GS1-128. We add the symbology identifier. + result += ']C1'; + } else { + // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS) + result += String.fromCharCode(29); + } + } + break; + case Code128Reader.CODE_FNC_2: + case Code128Reader.CODE_FNC_3: + // do nothing? + break; + case Code128Reader.CODE_FNC_4_B: + if (!upperMode && shiftUpperMode) { + upperMode = true; + shiftUpperMode = false; + } else if (upperMode && shiftUpperMode) { + upperMode = false; + shiftUpperMode = false; + } else { + shiftUpperMode = true; + } + break; + case Code128Reader.CODE_SHIFT: + isNextShifted = true; + codeSet = Code128Reader.CODE_CODE_A; + break; + case Code128Reader.CODE_CODE_A: + codeSet = Code128Reader.CODE_CODE_A; + break; + case Code128Reader.CODE_CODE_C: + codeSet = Code128Reader.CODE_CODE_C; + break; + case Code128Reader.CODE_STOP: + done = true; + break; + } + } + break; + case Code128Reader.CODE_CODE_C: + if (code < 100) { + if (code < 10) { + result += '0'; + } + result += code; + } else { + if (code !== Code128Reader.CODE_STOP) { + lastCharacterWasPrintable = false; + } + switch (code) { + case Code128Reader.CODE_FNC_1: + if (convertFNC1) { + if (result.length === 0) { + // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code + // is FNC1 then this is GS1-128. We add the symbology identifier. + result += ']C1'; + } else { + // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS) + result += String.fromCharCode(29); + } + } + break; + case Code128Reader.CODE_CODE_A: + codeSet = Code128Reader.CODE_CODE_A; + break; + case Code128Reader.CODE_CODE_B: + codeSet = Code128Reader.CODE_CODE_B; + break; + case Code128Reader.CODE_STOP: + done = true; + break; + } + } + break; + } + + // Unshift back to another code set if we were shifted + if (unshift) { + codeSet = codeSet === Code128Reader.CODE_CODE_A ? Code128Reader.CODE_CODE_B : Code128Reader.CODE_CODE_A; + } + + } + + const lastPatternSize = nextStart - lastStart; + + // Check for ample whitespace following pattern, but, to do this we first need to remember that + // we fudged decoding CODE_STOP since it actually has 7 bars, not 6. There is a black bar left + // to read off. Would be slightly better to properly read. Here we just skip it: + nextStart = row.getNextUnset(nextStart); + if (!row.isRange(nextStart, + Math.min(row.getSize(), nextStart + (nextStart - lastStart) / 2), + false)) { + throw new Exception(Exception.NotFoundException); + } + + // Pull out from sum the value of the penultimate check code + checksumTotal -= multiplier * lastCode; + // lastCode is the checksum then: + if (checksumTotal % 103 !== lastCode) { + throw new Exception(Exception.ChecksumException); + } + + // Need to pull out the check digits from string + const resultLength = result.length; + if (resultLength === 0) { + // false positive + throw new Exception(Exception.NotFoundException); + } + + // Only bother if the result had at least one character, and if the checksum digit happened to + // be a printable character. If it was just interpreted as a control code, nothing to remove. + if (resultLength > 0 && lastCharacterWasPrintable) { + if (codeSet === Code128Reader.CODE_CODE_C) { + result = result.substring(0, resultLength - 2); + } else { + result = result.substring(0, resultLength - 1); + } + } + + const left = (startPatternInfo[1] + startPatternInfo[0]) / 2.0; + const right = lastStart + lastPatternSize / 2.0; + + const rawCodesSize = rawCodes.length; + const rawBytes: Uint8Array = new Uint8Array(rawCodesSize); + for (let i = 0; i < rawCodesSize; i++) { + rawBytes[i] = rawCodes[i]; + } + + const points: ResultPoint[] = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)]; + + return new Result(result, rawBytes, 0, points, BarcodeFormat.CODE_128, new Date().getTime()); + } +} \ No newline at end of file diff --git a/src/core/oned/OneDReader.ts b/src/core/oned/OneDReader.ts new file mode 100644 index 00000000..f372d881 --- /dev/null +++ b/src/core/oned/OneDReader.ts @@ -0,0 +1,286 @@ +/* + * Copyright 2008 ZXing authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*namespace com.google.zxing.oned {*/ + +import BinaryBitmap from './../BinaryBitmap'; +import BitArray from './../common/BitArray'; +import DecodeHintType from './../DecodeHintType'; +import Exception from './../Exception'; +import Reader from './../Reader'; +import Result from './../Result'; +import ResultMetadataType from './../ResultMetadataType'; +import ResultPoint from './../ResultPoint'; + +/** + * Encapsulates functionality and implementation that is common to all families + * of one-dimensional barcodes. + * + * @author dswitkin@google.com (Daniel Switkin) + * @author Sean Owen + */ +export default abstract class OneDReader implements Reader { + + /* + @Override + public Result decode(BinaryBitmap image) throws NotFoundException, FormatException { + return decode(image, null); + } + */ + + // Note that we don't try rotation without the try harder flag, even if rotation was supported. + // @Override + public decode(image: BinaryBitmap, hints?: Map): Result { + try { + return this.doDecode(image, hints); + } catch (nfe) { + const tryHarder = hints !== undefined && (hints.get(DecodeHintType.TRY_HARDER) === true); + + if (tryHarder && image.isRotateSupported()) { + const rotatedImage = image.rotateCounterClockwise(); + const result = this.doDecode(rotatedImage, hints); + // Record that we found it rotated 90 degrees CCW / 270 degrees CW + const metadata = result.getResultMetadata(); + let orientation = 270; + if (metadata !== null && (metadata.get(ResultMetadataType.ORIENTATION) === true)) { + // But if we found it reversed in doDecode(), add in that result here: + orientation = (orientation + (metadata.get(ResultMetadataType.ORIENTATION) as number) % 360); + } + result.putMetadata(ResultMetadataType.ORIENTATION, orientation); + // Update result points + const points = result.getResultPoints(); + if (points !== null) { + const height = rotatedImage.getHeight(); + for (let i = 0; i < points.length; i++) { + points[i] = new ResultPoint(height - points[i].getY() - 1, points[i].getX()); + } + } + return result; + } else { + throw new Exception(Exception.NotFoundException); + } + } + } + + // @Override + public reset(): void { + // do nothing + } + + /** + * We're going to examine rows from the middle outward, searching alternately above and below the + * middle, and farther out each time. rowStep is the number of rows between each successive + * attempt above and below the middle. So we'd scan row middle, then middle - rowStep, then + * middle + rowStep, then middle - (2 * rowStep), etc. + * rowStep is bigger as the image is taller, but is always at least 1. We've somewhat arbitrarily + * decided that moving up and down by about 1/16 of the image is pretty good; we try more of the + * image if "trying harder". + * + * @param image The image to decode + * @param hints Any hints that were requested + * @return The contents of the decoded barcode + * @throws NotFoundException Any spontaneous errors which occur + */ + private doDecode(image: BinaryBitmap, hints?: Map): Result { + const width = image.getWidth(); + const height = image.getHeight(); + let row = new BitArray(width); + + const tryHarder = hints !== undefined && (hints.get(DecodeHintType.TRY_HARDER) === true); + const rowStep = Math.max(1, height >> (tryHarder ? 8 : 5)); + let maxLines; + if (tryHarder) { + maxLines = height; // Look at the whole image, not just the center + } else { + maxLines = 15; // 15 rows spaced 1/32 apart is roughly the middle half of the image + } + + const middle = Math.trunc(height / 2); + for (let x = 0; x < maxLines; x++) { + // Scanning from the middle out. Determine which row we're looking at next: + const rowStepsAboveOrBelow = Math.trunc((x + 1) / 2); + const isAbove = (x & 0x01) === 0; // i.e. is x even? + const rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow); + if (rowNumber < 0 || rowNumber >= height) { + // Oops, if we run off the top or bottom, stop + break; + } + + // Estimate black point for this row and load it: + try { + row = image.getBlackRow(rowNumber, row); + } catch (ignored) { continue; } + + // While we have the image data in a BitArray, it's fairly cheap to reverse it in place to + // handle decoding upside down barcodes. + for (let attempt = 0; attempt < 2; attempt++) { + if (attempt === 1) { // trying again? + row.reverse(); // reverse the row and continue + + // This means we will only ever draw result points *once* in the life of this method + // since we want to avoid drawing the wrong points after flipping the row, and, + // don't want to clutter with noise from every single row scan -- just the scans + // that start on the center line. + if (hints !== undefined && (hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK) === true)) { + const newHints = new Map(); + hints.forEach((hint, key) => newHints.set(key, hint)); + newHints.delete(DecodeHintType.NEED_RESULT_POINT_CALLBACK); + hints = newHints; + } + } + + try { + // Look for a barcode + const result = this.decodeRow(rowNumber, row, x, hints); + // We found our barcode + if (attempt === 1) { + // But it was upside down, so note that + result.putMetadata(ResultMetadataType.ORIENTATION, 180); + // And remember to flip the result points horizontally. + const points = result.getResultPoints(); + if (points !== null) { + points[0] = new ResultPoint(width - points[0].getX() - 1, points[0].getY()); + points[1] = new ResultPoint(width - points[1].getX() - 1, points[1].getY()); + } + } + return result; + } catch (re) { + // continue -- just couldn't decode this row + } + } + } + + throw new Exception(Exception.NotFoundException); + } + + /** + * Records the size of successive runs of white and black pixels in a row, starting at a given point. + * The values are recorded in the given array, and the number of runs recorded is equal to the size + * of the array. If the row starts on a white pixel at the given start point, then the first count + * recorded is the run of white pixels starting from that point; likewise it is the count of a run + * of black pixels if the row begin on a black pixels at that point. + * + * @param row row to count from + * @param start offset into row to start at + * @param counters array into which to record counts + * @throws NotFoundException if counters cannot be filled entirely from row before running out + * of pixels + */ + protected static recordPattern(row: BitArray, start: number, counters: number[]): void { + const numCounters = counters.length; + for (let index = 0; index < numCounters; index++) + counters[index] = 0; + + const end = row.getSize(); + if (start >= end) { + throw new Exception(Exception.NotFoundException); + } + + let isWhite = !row.get(start); + let counterPosition = 0; + let i = start; + while (i < end) { + if (row.get(i) !== isWhite) { + counters[counterPosition]++; + } else { + if (++counterPosition === numCounters) { + break; + } else { + counters[counterPosition] = 1; + isWhite = !isWhite; + } + } + i++; + } + + // If we read fully the last section of pixels and filled up our counters -- or filled + // the last counter but ran off the side of the image, OK. Otherwise, a problem. + if (!(counterPosition === numCounters || (counterPosition === numCounters - 1 && i === end))) { + throw new Exception(Exception.NotFoundException); + } + } + + protected static recordPatternInReverse(row: BitArray, start: number, counters: number[]): void { + // This could be more efficient I guess + let numTransitionsLeft = counters.length; + let last = row.get(start); + while (start > 0 && numTransitionsLeft >= 0) { + if (row.get(--start) !== last) { + numTransitionsLeft--; + last = !last; + } + } + if (numTransitionsLeft >= 0) { + throw new Exception(Exception.NotFoundException); + } + + OneDReader.recordPattern(row, start + 1, counters); + } + + /** + * Determines how closely a set of observed counts of runs of black/white values matches a given + * target pattern. This is reported as the ratio of the total variance from the expected pattern + * proportions across all pattern elements, to the length of the pattern. + * + * @param counters observed counters + * @param pattern expected pattern + * @param maxIndividualVariance The most any counter can differ before we give up + * @return ratio of total variance between counters and pattern compared to total pattern size + */ + protected static patternMatchVariance(counters: number[], pattern: number[], maxIndividualVariance: number): number { + const numCounters = counters.length; + let total = 0; + let patternLength = 0; + for (let i = 0; i < numCounters; i++) { + total += counters[i]; + patternLength += pattern[i]; + } + if (total < patternLength) { + // If we don't even have one pixel per unit of bar width, assume this is too small + // to reliably match, so fail: + return Number.POSITIVE_INFINITY; + } + + const unitBarWidth = total / patternLength; + maxIndividualVariance *= unitBarWidth; + + let totalVariance = 0.0; + for (let x = 0; x < numCounters; x++) { + const counter = counters[x]; + const scaledPattern = pattern[x] * unitBarWidth; + const variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter; + if (variance > maxIndividualVariance) { + return Number.POSITIVE_INFINITY; + } + totalVariance += variance; + } + return totalVariance / total; + } + + /** + *

Attempts to decode a one-dimensional barcode format given a single row of + * an image.

+ * + * @param rowNumber row number from top of the row + * @param row the black/white pixel data of the row + * @param hints decode hints + * @return {@link Result} containing encoded string and start/end of barcode + * @throws NotFoundException if no potential barcode is found + * @throws ChecksumException if a potential barcode is found but does not pass its checksum + * @throws FormatException if a potential barcode is found but format is invalid + */ + public abstract decodeRow(rowNumber: number, row: BitArray, x: number, hints?: Map): Result; +} diff --git a/src/index.ts b/src/index.ts index 066a4da6..783eec21 100644 --- a/src/index.ts +++ b/src/index.ts @@ -52,3 +52,7 @@ export { default as ReedSolomonEncoder } from './core/common/reedsolomon/ReedSol // core/qrcode export { default as QRCodeReader } from './core/qrcode/QRCodeReader'; export { default as QRCodeWriter } from './core/qrcode/QRCodeWriter'; + +// core/oned +export { default as OneDReader } from './core/oned/OneDReader'; +export { default as Code128Reader } from './core/oned/Code128Reader'; \ No newline at end of file diff --git a/src/test/core/oned/Code128BlackBox1.spec.ts b/src/test/core/oned/Code128BlackBox1.spec.ts new file mode 100644 index 00000000..e5b5aa55 --- /dev/null +++ b/src/test/core/oned/Code128BlackBox1.spec.ts @@ -0,0 +1,45 @@ + +/* + * Copyright 2008 ZXing authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// package com.google.zxing.oned; + +import 'mocha'; +import * as assert from 'assert'; + +import BarcodeFormat from './../../../core/BarcodeFormat'; +import MultiFormatReader from './../../../core/MultiFormatReader'; +import AbstractBlackBoxSpec from './../common/AbstractBlackBox'; +import Code128Reader from '../../../core/oned/Code128Reader'; + +/** + * @author Sean Owen + */ +class Code128BlackBox1Spec extends AbstractBlackBoxSpec { + + public constructor() { + super('src/test/core/resources/blackbox/code128-1', new Code128Reader(), BarcodeFormat.CODE_128); + this.addTest(6, 6, 0.0); + this.addTest(6, 6, 180.0); + } +} + +describe('Code128BlackBox.1', () => { + it('testBlackBox', (done) => { + const test = new Code128BlackBox1Spec(); + return test.testBlackBox(() => done()); + }); +}); diff --git a/src/test/core/resources/blackbox/code128-1/1.png b/src/test/core/resources/blackbox/code128-1/1.png new file mode 100755 index 0000000000000000000000000000000000000000..6005428e9b19196401225d0c06d6a0836bddc6ed GIT binary patch literal 1975 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 literal 0 HcmV?d00001 diff --git a/src/test/core/resources/blackbox/code128-1/2.txt b/src/test/core/resources/blackbox/code128-1/2.txt new file mode 100755 index 00000000..5d9d0d90 --- /dev/null +++ b/src/test/core/resources/blackbox/code128-1/2.txt @@ -0,0 +1 @@ +Code 128 \ No newline at end of file diff --git a/src/test/core/resources/blackbox/code128-1/3.png b/src/test/core/resources/blackbox/code128-1/3.png new file mode 100755 index 0000000000000000000000000000000000000000..da88e5208472e69c4da3c969677d2b5831ab9ef2 GIT binary patch literal 150974 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 z zOqt*(T(Hj%98v-RL2+?t!~BZ-N~ATj^-7dcRa+}M<=d>zI!3ixd=ZIr*e03VVZx5L zAYLH@61X8-2Y~24H3D z3O5+ROrQ}L%A6gz|M@jI4ywP**w|Gqj6o;Z(eP-=Ed;yup z=H!-C-}4VE-4rWC70sTY<4(S^Hyhl$H$=#R!M%UD>WR(IP*cNC`wbER&nmuu5e zJQ{OK8la-yD0P7mVX6u(8X%RDLrllxWIzij5N6-en&Mi2vsCn+$pQ!88`I$2nwRdy zuYgD&)P2Wxp4#L@cJX+b1?tcCqoZAwiOwZ$in8jGYrom5(R(8mB+*(Qlvayzm+Ssu z-d5;oZq?o*2>$A^1skMz)IOi;f}cubY)IjWct#b1`LgqIv90T@bhTAb&GF5-D9=j) z0uT^Tw$^#q)J(-*O}P5!`xOz~o=z#wm}9K3S(O5U?vvzFrPKn1fKW@RY$7vs`{=JJ z8}(w`q@;WcIE~hs=ccgI1ghNEo{Z#N^<2(3uICB}WLL@FMZU{W!9uwH|koB^A1ED2J5_4`%5PYWnRIWrd#bCIRj zS@0{81R~6-9n`pq4}G4tz(QZwDOEQYl7d3atkFt$u1b-K8rL<#aWl+lXd%@PFz9ov z)TDwL7bT>zWiXn-tebu=ZURu(X}YLIL+bP@b621wr52PaT0yCJ*8HQckH<9%Ykzj- zNqdY1rPw#4hhLxq1E|6aEv}-XpGzXwrK7niswAmd&*kBG=v2wc9N5e*2+6 z!9yx~t3uYQQON{h762se)~Y(Nis`shTBBH!ILFK7yeOxj&EP|80ph3Cf;u}536zmD z@XRoSrJe1jW!on-a>E>HW@-!dfaK z{aW%sD584jJMD^ZGqXikI;@@4BUg~;_(v&X7_XK)L(BpoXr-j)fnL(1+SyvB+E1Vx zYYxgF;LQdDKV%ti;Z)@9s@E>69wV~zq=&4PeyE7(_44KB+D1^89HnV`HY zPlb*c(_WYK=HP}JHKJt5f2CR%U$G4dq4mF|{edR=<0 zJx-~BPHqg!O|S?77-OtdTDJQi(lYZ>7cV6UfDeopKAvX%IN6zC*Z`;G ze7y)>>HsfN9Bp;o>ZT=D)ufYXt07|Nt=Wpo$h8)|>@N*8=|H3sDJBAgVm9SKUi;lq zHRJ%<36^O@`{4rWxyz2@W$Cf1*0)YHIFwi=G#-zPqm%;jr)onDoX4IxmR`zB|F9M730uhy6meB9x zWP7!L@x~cmP?etNf+sgB+z(PujaQ?sYbgb0Hapjiu4W087}Pac=SK`Xt_BvR#x>-IhDdLycI)|Vcz7s%Q>jrE zegOmk&M~Ztjm!N@*;<5o-oQqgw)IMp@xiUmvR_}?dXNa1D2LUTKGlYiuWenE%hIUO z?8=wJ3CUD0iUyOp?MQh_7NlsCsavQ4<*_;IBL#hIz?-&e(7B3F7k^a+AG52xaIFMY z7Vq-J#6T!mm`s@Rj4)jMqIXI5(gQ(#0BK#R1vG$yU!v)=MlYXvFcrC2qV6TJpcpED;#>#h#UtlG-d5 zVn$L%>oH}?gd{J00tNImKP45*COYkq?>3R{Di8<=68g!V%XLeA*_;nkQ$U{G&PDph zB+*)1{aT}hd8A-j$5IO8mpMVkiB-A5Wo+hFp`QT+kciaU__?K}DKBjpnwRRdmrv`G z9UAt>H#@o;bG=0AljzM3o2H~S+2669o$?Pmf7~sYkb#d6nk@zqE@=S2Pq-n!1+bb>1fWI`dr+2j6q$0F5wCfb>;ttvI=! zn~hAiUCxH+T2hyMmlZf?szcb!P3~(nBgk%9&r_9JIs{6!UV;G0TF`9{V{t014T^x; zI^d%kUE0hfT|=VBDyF6}3*a`dt{Q1#a%$w}L@u6g13GIPuNC|f0;os{T4f`Z7ta*1 zqh^J(%B5Dx6=-ObQCT%VHKAuf+u4m2d;P6UTU}r-zKp5MYe#4O3CCg(T%CbW;~zXa(tSpL?&SPQ>@YTAUpdMY*~}`8wbE8GQX5imY@^>+Q&YB4C;21 z;%2wCjR6GO`az|e*v=Yq0?yv{eT2FFY!6?8nO|j;*PCySpoqq>f_QYZij2x(U{Z`h%J3ZHUGp1!ozQAp$ktp2(N3y9>J z1~b-|)QAW|wRbT@<8pV4YDzRa76AfK#(dtVsvOXBW=Vt^C?V~5*%rDPgQXvLhxa>h zt`F&y=JoO56s>!NXbXj$?dhO?+{`kxR!Y@u@=WwXqLEs4UW2mqg_M8*I;DEj?zU)++k9^B{$@OA2iJ3BxxVq3be-NTH>xO4 z)IezGu76TRWrUS9dDn8?pg4$}X0G|`xe5YCwI$8T=-$@4pqWTsxjVQt$7&OBR|2B4 z*~GeYiv{_5ypm`*(59-3q`A+r4Kd4WtHlt9t+ux=b*=2Ex^&)QJ{$D%WXfE)E>_0? zq?&nug?sAi)!>zdb=0cU1Y#&IfuYzNfI;Vz^lc-yWlbt}?DJWmZ0T8`gYKnw-FEF# zAuVE>n@^WPmz7!u$A$3E7$p~>2#X$RF+c707Ssur7N8a;fl;A;cupSFT2fs* zwRUtuc=DYr;umlfgQ4|H0~;AFH7Vy7e;s6dwM9&Gi4NDa)MS-9)Ip&!uDeUVSvCz( zQK+Hz`P@i%k9pF-*^=^Vqr_+e)Gtfx_jVy$4&QdeIo+3X=f(P>Z2e}{jZ**w2)}?m zo{eQ{^6%RzbDct|6@Un&rc_0INc;YL?#-v0XkZt2Dn=7!S(ssK_MROOFH)e0>6dyo z>x?Y~fqx0}dUPnQpFQYG=1r&p|_EOD#?UroLd6vB2;(*w?UW1`YJiIE?HF=K1Cub^{eGZ zfk!@ZwZ=H>eJQzo)o@w-W#D*C77xri;CL&FKw z?3fgCW{ZwZG(0ypt)#A{={K@uoh%*QQxh4KD#VwyW6h;0%a*L1X`T0DMU6S_2Ob9x ztTBfO0sa&ypb^@2E9zD2mO0*q{TRYB%^|0F2SBgG^KHIG; z$Cl=}mc%J?VIc%Y7C>1dU7d;#OJm~WLp$cOOpQ2mqJ&nxY>r<8?>6SlRgF(iNpH4d zwbB4pv_h#R#j(^WXh+wZr^=VKn@+}0$LmNWlBTq-dT;1T)HJDPXL7W|$934mf3cWy zeQ%C+K5Q(>HD_0Vuw*fa;t=ag6evUA~SGSM20H&0${MU+gi+xC)%kjsAD*?-E z!W9+iovH1ce{(Zl`Tz|mFtLc8V6(yi(5?2=m8zz^`_T4}zP3JF#URRM6%vp_)(vj6 zw~pA?ak^Hg2^`zdIfqOGDOiw%im=M1%Vk4tHx{$7J!M<0spz>g=ndFEwMZcirqN1T zboIHQECLk6D4~7hH1KnnuM7^@yv#KOt-vd>u|3Ck%dUEFA!O~LJMng1-A~08S+M5k^234 zz}78C)-JifY61ab@n+}rRmXQJ8Nd>ZY6$B$U>?lB&`G(%u-4j0c=0ZcRz;LA%O`r6t>BfTU?^Qg$#2Ng0_?cZdm$@QOC z?rSslth-w=J9mB8jZZD{M3%#jVFFkD4 z5=L71Rk}_XU^s`-UQ)O~QI``GjrL+hKm-_GpdgJY0?vD*bh83Tt*=M!ajufeyiVBk zW=3_Xvxgh1aY%Cu;~gEP>UG)IL9W|y-W7gIY7GaTz-?VD z(#!vpxWaJ-emFH{^dMjPe#ZLF=0pNJ`` z)S9{^Yff)-Mo2hD9nFM@P}YVp2dFcyRJ(8fg^aT432$gkhhA0>-Ly3Y@`})HO<`|@ z8Bv6jF-FzLb!v7;aARuYMR(jT zBq{c1RdyfJrZuQEX<4VoQ;#7{T4}8zNl~ZWL%pw7$9e-Bi}I?JL7+#Mn!8Sej(;eP z!q`*!ijal2IV^mz(6D9+Qic*zu?Fy~L6#P!9me*-g6@@Vj5e>`SKY)b7Vp>J5(Wns z=$ygF0L^SF1AXE&U1JjXH5_lZBtkDY1!!&E?Bg7+jVn)|2LxZx-bGRTlvz=WvaPa!p@<$7ALW;NBp3#d$X@mIW#+_cu4 zsUe>q`{CsgOJR<{a~+pj=OT_F+6H(^5SA&Z@I~p~O0lX$iY>@#oAwjOV{CS1?3-l< z+bXg}6_OR4UmbL+hQbKEX{*x(mC1FE8kL%I|2;LAz!DN*6$HqFq5uO#&{8q2nay}C zp8#4ru9fA_nZ*Z1^CV?XBPQOeY59^Zf9Y$H>zZm%xZ1r{b?KL+a{gwWK=pMFE>|v9 zP*q%gx?d+ywPmpDT!HA$N!Stwc)WN?y@R{3EJ$g0z}q;$XH* zX-m(Ni~~Us0M&Zjptf(Y%eu8og)i_KI~`lC;A{0lHrow7ePE;HIh_P7WK1n;@|X9< zbfa24)MuW$i0SJvgK58zda1XKCdp=SQ|~~*Fh6d#OAxZYA1HP+F#2{8#;O6?Oqcgz zb2Q~WL%(^jEQnQC&3j$cb~KGb;jgO6+UZs~{M>tUh>x4TAs{qAFDR!)QIi|I@eOeq zc;L0Y`NdsAHKy0VgO>|$-6pktYv6UkQ#FoUDMmme8nd=e-?^Zj9dE}b5#N~ko}QeR zu3^8*u~ty3tkNJ*b8yak;S3E^&BanpblG)BvRdcDX8vIWgvQs4N>-=E7Pi=VUu9yJ zjtTmEX@AQT%WYKKtSbBxs7Ptz;kMaj{Q0>Sa%CO_2L(`=Ss4&0t|)qr0<<=uRYqsK z7BEK*B{69BFmTxrexaRaYY-b%mec06JC~x7hHYH0V-p2dULu#8K&thrq%13=)0+Gs zgF)^Fz`ECF$S_5^zHQMoP2(&A31BIL5LBlJTHeP6ayI0)ST5LWu7zF+Y`wxgf%;7) zH1n!3w;HWpH;1Oy1eK#&z=KmYbOCG-Q>rw^I` zMG`%HkvtT21?`THvlCU;1r2Mf>5J+j0ml#-bmzRE`7EI+YL zOOE5p8+#?q*{xoeCuOv*(*<}V98LCujD>@6k zOKi96b(2d0(;}E%TXBJ8U0M`yXei@~-LYKvu_P);7i|m9H?UoLqPJN7Oi6^u7zKzi zF$ugtVjGkwwN6PHs*AmLbG={cPn(j|l9&jW^OColyR4mB!Q5rLC|dojU)yGUdkD-s@&RSjvL7 zb?_pj#AT;Z5Yp#4biHZZQc8Dxi*9}PJULd>L0h}f5jg~(zRVw#Z{504Mu#k4%OP-t z%{OgkW)^sXlq}*N=r1lqOTputFDx6fZW-1cV0zgo1S*DPxU1I!YtmUj8OYKwn6B@! z_Sdru)@M&Q_GOO071QDt$C^T=HY zMuS^OEyW7MS=4psrvTls^|aB=ZQBRa6Po?bMvA5*A#4={gIew(m?j6q)if=Y8truv z6-}4RNF$((S)~?fw_14^K^^zgc-ydpKLvATPC?Ejy@nUq>%v_qR8p(}z{laLX}-ai zo_K_1EkRl>thFxJ2gp#Njk8NVs$FU6WtnE5+BMF33Kp5D=-KF6V+4;q8F}Ob4{#k6=&QyhmE8N z_-E{bgTnq3G2o~8?za#KL;&$8dSL_B9tiSLQuf>ZuI=aD<}f=WYwZqZ?7eN;)*3#X zno{s2sb3J!n&4kRd7#R++9`v?ekl`blf#mxU#5p>%S&!D;*njHH;wO05V z8kvnNs@-R|R!sn}>4u1^8$t*TgajoqtGcL~HwCJZ0=w$x&jMF0Ijd+h?C5%(=hT)s zQBcuhEmiXT8I{W+Rxx>@{YkZ-L!;w}z07zWWNW^J><_26 z@VQr`W%wmt>Q&n7hFa|ve1T0!q*C9hQUSDCySVmG?N96i%)nJ;A}L|jWPyQvoL4*- z7)|}sH&rTMmcZ3Od#q)Mq*SdQqK@wLs7jkASnZ0XfzBS`)Re+0t*j0eU0Z^4d_6B& zI}kb9dDxO~05l2+phDpuYP~+jHpdVu8QZrFQ!y>0z@G!|QSEnn=%<2z%&}Hfh#>W+ zNp%zG^cYQlH-ziQNN3Y5D*a{(*y}XmP(x&_MX*}V_td)0c?yqRTS^uBwPMV1O|_;@ zJ8q%%n5Jx+7E7h3;mcEeY0V<4y^ZxEZ3%kWjv=W}(*cRb}e|ptanGFa@yAkgEWJWMg6?jpUtJoFpe4 z&mN7E#>Wv6TJ#tt)8>Z-*dNUb0+u`2p|cXWlhd# zF+ZyyHma5;FQByoAloLV?VY|} z1RLwJvPMgldRh~7PR;Br015mOa+%EMmIA$#{a;c$AD1HXx^zNKm$B=hCe%R3n9fZI zv1x#_Vic~TH3BZc-Ef6+c04Js!km1JB0? zbH=b(-E3Ev*LhIxu!NnxVaPyI05e)iQPpz_v8^&JUo0@>PEWqpnp6GSDoF|JEtD!O zFC!~}T-&bK^XNWaDNnZ^`Ngu!dA^>@WX#Z50s%;=EM~H(z|-P}DX-_pwnnZ*9JmB^ zSas~hGtg8;h4zg;(V>McT8xhhbfxG@hDwKC+Cdfi$Uxwk&!)1}zDTi5*6 zBr^tOYyxhmu06NOWt*J>Fj~V`G{>4dXO{Cryx(lc?mz%v3(Q(66Ki!5O9JFpJ^vV0 z#jr11<@p3=GiV7bY(TrR%|!vn!Zj2a?NuF#MQW7f3-ORi7bNb-HT(bJK4)yf=;K%GzRsz3(2tds#hn!lZ1Yf|~TXP0OT9!3s zDqY^#>(857v7k3jDTgT*_Egh}b*)RXf~rCQe37$TW8u?rE@2LlNADfRQ^jUCAb4YL zKrw~7l&N)n_hip`T_ZqUL2A2K4zDI?e$cXPgU7l8f3Wk9|`PTLpFSXf8M&k?_ zzFs90~1%BF_!No)G`+*i<`>@6JXU-Wac63r2;5MP0n8J8-6A|OnDq`feGR;rRz zvKQkngjom#HPGH4rh-*v{Eag@=>AJ;yd82i61QWc>1#&1Yg|q3s<%y1f`}m1)M;%S zZD{UoE!~8H1QC#w!`{>c>jI@RAcIkY#gwZ$UB7XU!JC6;-ApA;f3DU9;FGEqV$flgS0Tj>}OA0$V+N zvZjaWn|0Qzz_3x4A90=Xd}`Ja0KTH12?>aVw9#@phf?7gV)U4Pcw-k9=*et09jPUG ztY5zGk};>o?4zNLBC#G?t9lX@=O$LrUpCw5v8(T>X$?Vv8muU{0UG2%ZK%C|ZnO50 zb^~!d7XQ?jjqQ|PtmI{!#tZbWz}gbFb=S;o`XlBbpaDpLS4}mD{ua-loPj)|CT^d+ z*+pd#h(zE|;IwTW*i-qAujh3lSqd&lu}x|@CN=jk+P|npHWeYm1{Y(x8aSMrDu9snemKu? z!G>E6);Z4rER{Jo53(U;S|LS%2%st~4srSG=6ZdjwB)MFayu~+DA&2v>8G3Z&1t_8 zS}6lk7*cU2tlylW2CLSl|V!YFCXS z@(u+EQjVrkMoCUW>UF(yeG1cr;}FK$*{T$LMa-|LwOp1(l*QX+NB4FaY8a*~$;Nk0 zW2-x!lyaGpb>nW)TXeKj(HFIq)4DiP#~hpqC#UR^O>Uq`6f54&%H+c`i^|b998ERU zn(HX_f*MLupL7Ea5+^kuHUawKj1Ns;1-?#10ZY!M#9|NQBPoFA=eqpC=yyIiMq-jQ zucFx?nlIna)_PO(r%7~S6~hccTOPAA#>T>`@Nt1P4}6ry1EKp zBDR6_CD{(rj-0XGHB(O4Yz6>?UoQtzt8K{c!g?)*)J+;G?64J$)Pnv=iu)CYkt0lV2#=`cKzSA%EpAUlUAu~4}?pOX(2Z2+?6g) zD)ndzxm+P0tG_z#uSGI=I$zbB`U$SvWUSIk7+%2+rq;63dw9wX*qHKH8k9m5OH0le zNlXCLXt?~istO9_bvudDr8RD^)}$-oMiG9+9ZfR~epxw)w;SdBz<~6PuWteVS&# zdinBw0~-)EfmO0(!VYdQC)-}sd}!*`+m{m+b5P9=^(1E6Dz7MJx6~)1oCp?w&?vCp zl(>OzKT<2booD7XCiT>qr@PO$vaDoc($TSOx~WT|P=JUCn5rE}pherq6m#NLfXhvh zxeZQ<;GZF+uW&tX(qmh*&SihFf~CIp@R%4kR$uq@IL=28*Le&LDzz9{80NKMv_4d@ zhHC_oOiTrb8+mCT`c+1GNq7oqr}hc??6j*GyuDXxxlYq`S>l(t!ZA$cDta|4`zf~9 zu|Qf1XwnFrf&$LEs`j&X=4jIeo`EBf>gH1<7W`VIM4O^3B9uzK_&UA_nXZJBp z50O93`guJR?#8^486Z_)1`x=q_(E`cQ`1btXZ@bK%etUe1ge($c&+a+PIa1yTcyRF zy_?&{D#2CdHZ=jIYXiC)1KitW36+MQf%$B2=i{CGcI*v?X4mwhUZw0v*6wXQ-l`g+ z5MY*UhsG?%D0r<}7KBI%Lbo_`egAO!Qw89}T8t`l;n7@mgIvrlmq;nqPjs0(GoW)< zm9Xq*QwpooHB>j_&Ny2> z`oy!?SlwEZ-EDrn?k{Fj6A*qKX)z!eYfbwZ8!hsZus}-9UHb;ibusF=f?CbV_t!Aw zFW*n`6RYdc)>J{IRqR})StoEyfL68hPrJP!=%Pzpa!N{Sm#@r98Vx={Gc6$(^`za! z&NZ)5KsB9kJCtSnaNYkMolnspHTAU(8_WlI%AgdHRy7Ejx_(BPtY7;K#qdxyz%HQH zm#x=|;Lm`o=g{4adkTJ&XEvI@s{2=Rw2ZBfdGLqfla|)N+~~;{Y;ki)Gg&20vA))t zaUPs8&T%Oq0`hC;Q*NsrZbQ;b<4$jFpw3e%D6z9GHM((MoG=F8+dR&jgxk16l2Q<* zLaAARY}@u!-E~ewxwvkx8fF0yk*?JmNlJtDtEN&hfc=vnOUd#@=dLQFbQdtJQq8yh zh<6=JDZl{W>#S974*1e#E8ea%;rP2JZr~b>u0HHwr%PcnitPP#8%vh0YsD?LsJg*L z>1?b#-0Ed%wD!Ku2z5Dox|D`v`fBh_G$zEhEz9?f$>(jQU+i*`Jc0L9F06DdXjQn3 zS&_pcN&&+Q9QqCg!-*Oqdyn$VCnHK@oJOixG&Ww(>v!<}G;rF)mGTw5dIKp}YNRy>B{0pisA$urK0B-c08-Kk{2N z+om^-H0Fw*&f^<-_{&eZ9K_()F(o}`-_^D40_XOp`ge=BoLy;m*6o@U=yc!aZ-3*y z`SN{R@0#uwx5nugjeCQw@w@SMDPmG#c@axdz_l=7>?WOhZ*3pOO>1 zt%?9a1mPEGmtgC8HOGMhBV4UkUwN;F=gfv4!Zv1}lzm(9V8_^jPH@|lyB2aQ^GHj? z)V2BrJo<7lccY!;Y3ZN zONK?fDf8)An7&$ms*IsZu5VM_#rPzMUl~7RC$l4BgjMaq3Dxn$q^7bgai^~ zu^T0wS(8PqBc{_~i2Wh_INkrDm2E`$lj%?_LZk?><8tB)P2TZ!^n$mznrbK6qvh+bGFGd6m!!v4WJDparww0!gzCZyb{pe%q^ zfWW#x>dg{4A`1dAV2s)dw95kB=l!fY1-on8Bx=csLE0Z|2zM|@f~?74B#4c|mNHO7 z#Rk~i7*Lz_^B?zNST+R}yhc?z=3z_i_roJ?plQ8T_{uRAbkot>F(Z`9&e>jFd0+97$Egz7u1MJ zy>;2Ye{5oK+g_`U%F|NsJ$`ES{rsegVXG0Aw>Gr30-|+_1~-+O5;P7_^P=AvAsVc{ zyYNo0miC{AvJq7o0Dn24l9W~y8b5bKL_`n~P=cvBA2dHbq7?3%q2J&-H$Qzp*$NG} zV}Py!n0i>z#_0h8JiWM`&Rq`B-YuV~$M34=Gz+86xtyLMyscO66LB_lLfTU9JKG z_-jYuL2FxZdBsniut>ELf=||i6%F>qli`voG)Zwj!YRmp)^AqpIWvPo0^w4wr&!Ld zF)6}BU6t_5Xvu6cV>#|p0eH<~%UEGQ($l&w&w2|YrUAA|?;dCdWuhDj5B{mu&jFkGL?qdys7)-r2Y^uyV}&9W>Is!FGCvZbl%TIO076(IqJ z2BLOJO%mZ^CAx&Qv4x--#T*MY_9-5|zqzcTQVqH8UE_9Jd$qV$9j?ns!xgS}v7)9`GT4`94DN<~ofU*{Z}e zE1|$$|osjDo=Dwg(DDdZ$2U0gZH3xM=$85AM zK_ddcA`dLe*~XM!rzoAdO5S1|`@}}7QjAoyQk|j#SIws7b}6Y`P2vLl>j~*e_1S`H zCkXWhGBZ106jq(gV$ySgwSsFQES2Uc)(AX_>;|9?ZHVa1M8Zr^R z)uu{C_yS}mI@2j+gOayNreI%Z&kDixZ6sCMD2&jz$tCYyYqg@+1t|q;t2B&~dQ{4( zF;}Qi;b*L&Rt0twpe_&b`@v`|7CP6X8{H>0dF@?|sc#;rbZJeBahttw=QgK-yOplZnio4Zx;A<- zVCl~g?Pdk2t;zEa;DrlnTd0RNg=#j%OJ&JM%Mr7N7htY{y+H;9w!nC;M86=i8$lxg;(W92ui^8=6o@UKhss50wltLB54 z#O)bfdK>|9U22-stX`-#WrXvqpNzj)-{M3wAeVk`=R#>hcQhySJ73Yz+`qSF1a1o zlGSSuHk0+RCGqj9AH;T{u`0bqK++4iwPHD9f&)f0M(`H>eHL-r%=ed0#$r~<9u}(mzREY?PtU9mkEdip=Qq6eNX9s^XXkPRSg)lnXy^6!Zd{S2W?X|ckv z6!mO0%m(7=*xaW49J7m%U@WP>oy}~9_3G9pJwdMSq-ftPoKps%3cmoBM;!UP<}=Lw ziLotA^p*XDOnu|-AHU10URC4ATxhpxawTQiQk>>`73I!`x7fDr8nCDYIRfCXX7nfr zhc@QRZLx#)sh_2}J*et(8?CAqp24|P_2ccZsQwM?%XWk2x9iZYJ-jqS*6L~vH9i`% zYun$>^yR$_2)SIlfFSTXoGN7nGGz`02&6pkuZaBcorBHhslEGQ`0ZtG%k#b~g0KT< zCNB&^gaEmKQ~CPv*ZmK7`jd-~=kTDngDMF8d7anOcZ+^#hwId|8ph?5xqI4G(;H}2 zsq7Ld8*zVk!R>-_RV)Q6RDl;52<7Zz?IHzIN-h;~A@gzVCJ7CHk=LmuX8% zeWfO7W8+OdS=zdB-`*BfR+-lmqsdCCrkx-#D5c|mqafr)ZOcK7E_3O(MgZC*v-dmJ z?N!!{T7j~LQzF+pqn*V$EbzHa2Jh-nR{AcFj0M|R_&~@*^AM&BFb_$!>ocJfCZ?t0Kj=NjHcC{F?Lma zU0nk`;jt$%#shoCYr>kfCFkez+ z`=Laqx>$on{FSs@IzN?wyzeJ70n~0*z_MhDI(hFc1ceC(@ErD!FA*7I|a^0s@E;=y8!s)Tmib(0!w3{p8 zUhk8_q#?mCfj~$Eftg$b6~9;=W@cmR0<(45%}SL)Oho(Kng&GzF8mbDHNoj}0E4_L zkY%>|oASr+w9_aofT?|IQ~CW;YFHi)`DRQdt#eYI$0q~<1$3>jZR(8x!IKIB&gsOe z9dXd>Oi^%kf_xflRTkNR5)cGL0MW+pwSV$M->V}}+*F8;iv85)@xoB~Pwm1pEHGVf z_0jheycNW+a{wjR^R!;h^HNQ2v&tran1^j~RbaUp;U)u*wXta$JAbIEa;mwemE~W^ zC~v&P#}nB#^OFl!5tyxez+LsW4lg<#WZX`)OB?b6ce0858ntfr-XZ`3i>umxzKQ4G z-F@o$=J(C<%YAeKiSDyvX8B4ztdN*Khe3x0>B#^4;1U<0Y0iV1cA=1=Vgo?$6iv-QP^GFxy;^;dO=EMKanjY0qME;EWURgC-RU@Yw&n%X=}OI85Uma2 zYtznV$#nJg?c*)$-N}=r%F4hCG?4B+EI#(WYN=R;QFgQBrc4RyGc$ z@m-biGS^INuao`rCnX5ErXkV>USRWzJmYz7_oy&^~Fm>p=wa&14=us54+xACkp%%jWiUu*9Eka0>8j{v(Y;2 zlJw!Bx%srwC|~t=Xlp)7b!H;Zj^J=o#hM64oUa`cf+@TqjF+9Exf#-H4}1GcdNc_2_#Aqap7_*<#(DXt9S_0N;3$b1g`aa75u z=j(87IR0_c&Y$)+)**a5-rM_2RtlI~R@>|0-ADHhvJ6helBax^o2WClpeq$fOPN!S zkYoFH25J=jg5p8tysY^_cI#%54-^`dh2+(OcGu1BAHMtjN@?yCDppnh@S)XKeU(B7 z6Kt1!8UF|mXLBmTXxyu6G&3klVU^T+6vn)@OkwSpx>=jgy4j@TQBcfs-A;Kb+add> zE;^`W^24XlIBP(vX>lB2rlR2;_v@kV3}mj`WGwJFjo5XY(MOO#T)>mLVe%N(tWpdf z^AqG*Ys!DtBv}B2(zMQ*p}w^Ah^9&+sqA!1!TFGVFqy{u(pV>HekdtpD?S{1R6!Y5 zi72sYmTT|iWsb70co&W(pD$BT!OUr0*>j7B^+0%jaA# zqY@Y!g4LhP#x5uLmZQk?<|zbNN>djTA^g4sHHS4--7lUQ>tziY05$vqyV! zH0O`CQ@@M^>l*XI&~ot?H%a^EG{E0f6&{<@_530AQK>m=0O&7S`cAW4(wP(BzsN~x zOlfR=I7J=8o=h-Jd#ibGjcj+&DR_o-vis|&1Nu>7nQ582c#y2upIRNDt1WGDUe<}a z?!m$f77to3z)0$=-&Gs0<8k-hjIAT!mn^#Ie>l!&?F?&OT8jW80s_KHbSn+F_`>U@ zRC8B(ojVQzrG? zwfjyCk`NFxydYE4aO&^P=MG!B)1VZ7bx`JXclw8ad_7h@=pgDeH}(DcO`PV$^_3#i z2;C*UYbz9{?T_*fDg!WAcmYwZj35Ajxzq)E@y2FR2n)@Kk+|G;}a=bqzoXw9*Bt=ZB!LN0+2#hNo-(I${4SL zI-?jcz@RUx8S%w-;o{W$^&cK~1vo5tT8P_b??lUMA7BEO84jKjM2QKV%>(KtD zXF@O2<4gnuohhW|`J`C*#k&(?tuB9ewEj(@s*FZe74lZk%~_lM#()U?5+%WL+~nGx zgE#G)BmnR=9k_sTTeDs}Gezz4hapVAJ)Plz%{Fayv10ebI-8yT2I29DR&+J4FN`R^ zc9w|f>D;74P|b3)Ev_{in2JHIu0qa0dA^F|wRwOJ>uSNaZ;D8wtLV_k^N+3}CAAEn z-A%W$r@vjV@B&&~cKaAbzMj!(V3a1wBz~^IFLL+{`a8h&+qvqi2_tx@hzJNG<1lYK zwj?49!Vv1D=1vbooF(lh46cn^3(WNIj1M<_Bz&t zTjybOYxDX6zRxv4eYH*oF4TJo3DScCk){$fuM-1em-fw~@a|f=g(PiGO>-01rm^%o z(KFOXpwFY~{&Km(&G7!vX@N=#zMuwnjZ?mf(G=kokTe(I71x+nYkPb;v8)O46K#t?58Tyqw8S0MOn}G`urD@8p zrN!#{rrWKXyq)6ExdHwZ3XOG2X_&@JL|;bpD5>IK77i2&Q@gOsyTt965a z*h%;eAK%%^RnM3-@7UxAGt(FS3CUnTIs@eH_FhXCiEBoScR6ow#*HT*B5!H#mfRm6 zH5H7NH@l;iX3J*S9S$jBGXZ7S+3m&=Fbg0GR1)9T`yP*v_3!fj+Ss{~wG>g>Qvry8 z$nXp3`%7sU>^vM*e^`j+Ykr(4&0@?b?;d;uGC>o!<*_xH15ryxQpl(3y5-@tHdm!j z9JZyal>bFyN)GDnvN`|$)UmSmG}-{ZHuNcFBej{;i$t;O>vpzEJp88Xj-&r8Pz)EE z5&{U4bLys?!dqU+wk~dzgBReM3rxv&CIP(GU|^n?W*YN(vg3>2v{Js#S!vZa%UivZq>TX8BpQ6EQ=+RJ8Pkw92jRcL7@Zv ztsBE0J0R9v1wRh@e5eoi@gBfO^%c8pJI-dxVEL`!xt){KuRjI@jrhoR-R^h?;9|K1dD4_A4_k1EPFFL2sXmrY3ysS zuQY#php|v;2@}A(s8(?ZX12?E?Nu4ER=kk1UC`dsu&zsk0Z?03xk#=Msy|(~r8+Ea zWsz=7Ke!E^-#!>_F#8$)6au2O2DyG8D!;rA2u9q7yW_IkN&}_anm5L-<}tMjK!mKI z%HddYF?8M1dn#TEC`mVKY928>_aKxCV#-^aONCGttDbzP%!YO4dD<8;a0CcDfT961 ztQUK=h%P49?NOc1H|tg{-20MxO&CYF{%sWS&p)#036I#9xwYGG-`G!UBg33%i3cei zFQ>`976<1S#zFXj?pA4=KJOHa?(;O&ucl?8bUSwAJD2y%x;1X=4!l`6EZWh;S;X(u zG#7AGgS4?8wEMh`HMjKq?O$b-WZy5*-OfGk9&l`eIMG3?whYm?kH0Lo1O{agHg#kBG6bS~elUf(EPQ>v=B zb2H8Rb`77`j;B>urdrSAMK$&&q$R|wKy6sve%{DKZ6}QRJV|-2p^RbQ1l@5@GZ@Fp z6kA^JcNN+;XI?4kjHMWLmiAq~H5O0=3cNrV;-RIyW>7z`gG%kZFfB+Isy!yAC0KTM_ zak=76Fi_eij2Tj`zd3F~H-CAB5!x;^h*Bs7%~c|U={l9I3R=VSLsSY%pynj*{FP#c?y4hvb-X;)! z&P-{cVZ%>1+dmAS9-`R|WjrzPKrzu87ULia$m_cVs2ScsI`5XhOSLU3grRGGF)8Wz=SWSwoiRz_GX2q$z~@RrL-eG-xn$Aa#THR(zuV!RT=>N{{Y^1 zynC;ULHw$pOo7ZffXZ^zb|}@2?c5TXn`U;s1_eL}`js$Nsj-xjc1V*^nR=u7 zwb~uC|5(o20j?tOdGDoF7ng%cMUQP?hAr?!dY5tj!9iMf8x#K+)Rtn0zn0gLZ z)A!fk`VykZ*S|xK^;!!#YOs0Ep=bhP6E=grkqwhh3uHh90j~N8BR?4RrER}Lf7q>f zyFSh{98E80r^*H`6joZ6hfAv)i|x~9u;*C~)X&J9t0?nWKCF9xm15RZr@KuTOCe23 z0c6P)UVu#JS%umtg*m3#RFw$er_VF2*Yhl_+Khp~KvENBe-0&oRqtF&{;<_Nhr{?uqz< z+F~O3C0L-W(%(KU1XmJxL4%iZf8MUG=P24{8>lx|y21;}QpWUQLFY)~7-wLOHKfP} zk5{!(Uo3tav_8+eY6P{6OBG{N#(r2PSdS$rfc1RY`=vaUX?gqushYBN26wwFe;Q}T zor1*zzynzDWj2jB1{GitFd@czbvKty{oBe?TcTC50TN|2lwVdT5I~u7Z*FI|sL-fk zVbm4)s}oLuGNRGyfqhOXF!XO-3pIkq8gq?<=YtE?pM7e}m^scGkXHc)__h6%_nx|a zu5Ua1{IS^s&>Fzz;zLDakVN2_jjK96z@c$mvTD;sg>?7mbaC`t+!r#t?zTkt=IRmk z=No)pb8+GNWA|`^^HjcS-I7uPk&7`#t1qgHHI+T=6*QLx6s8Rp^PGLHnVVCrZ)%Us zA^@T&Tqe`0LrV>)vbGgJ-L5%t1(HXO3^3%;sIgx;Y>0v_Nej>d$dVwB|a=JWhC1 zRj-xPn~dp=6^B8YMs)BLhg;dGVUku2voi|FDuX84rJKWCb(Eq&J*9GZlYc`Q0gLj# zy{vD_W8vdi82+q`H;VYqsmA$YwNfwC0a}8IcTZ)Av%)mvvB{SkYr8L5E?sh`HgEH^ z&ZMNV3dDAe<~G3H7Qm+>0D#zGk*1aW_%>d8)3;rWT{BOO2KK|ZzT!qqcS>(m`3Csi z4a196>003FzPQ_6S*;yMBR3PI552>ej3H>OXgvGbEN#X6rsCAI^7>k09?_o2<@}Yg zAp)T7*5wB^b-k?NwvSd-to5}ds7(d7`}6^uTuN01@$&ak?6-3TbOz&n;ugT;q`FHo z{S+N;QqXM{`t|*kb#SMrPw@C*xx4*%CSltKY&Mz9QsWg~45_YRjA^*4)7%|Q?T04b ze`xgdA{Rl*rY?W*PjNXpr<%2wFMH3@Z1CcDDzo`YI7?J+Yi}E! z#Q6+JMuPwX0b!1B(Kqen3?YEjS)vDX`NOr?YcYMV`)PBkq?A#Rg1+Ccq5FKig~zhB zV)UFAGn%N^OS`DtwvWaXTX}nq?BY?WeHN$!1%5&+WNRB~#F!o~r!3i}R|9~mNLWjZ zVOBg42sTY0GDoxsubcNv0h4^Uw12ynS@VnpN?s4KNc)tE|5Tm=T(0^0cT!_AAyrAi zz43tEs`{w2?&2JFn;u+-QfexBxTrOK%vr~9%tA+2aWs0dc7|rGy*9vM8Y?I$3KVEQ zPL&t2HqV#tpXE75(kSyc+e>lz#B_cN;2C~_idfWsD5ryB`p(LiZqeWdWj=TAlkQ@% zef&oPfBlD|&tFm^)6KlN-6Qvn@v3r85Y~B(v=EF>m8WOQjYvMX%;(Sj@X%bR=KE=B zn;ctsf8H29ekcg5&DE&)0`I|oTFch<#U+f}!Pc(6@1=~is0&$w*9jrCt$aS}Hy{`!7OjLZGJ#r9@RCy{2cIeBO% z*P?=0fCxZDm=WhT-d6o)9tT_3e0S2rxz{2um)R}aj&u)YdK&2FoL@$!p{#TR6-j^q zfnVvWniiCzR11m*VgNwvx0u|_Ep{ZWouCv#00bgrbbo}9>7~J{L(~v-XN(aSuA4Az zTC2akH4v*e)5k8~ZUwIKU00#RNjBwjpj^Ja-Oa_Ix>3kzDJ{mh+TH2LUQiL(SJf!4 zQ%SkiPN^dAjBx}~E4+Zv#g#xnt?fFb=D@XtPClj*rM@ctXbl=v4z=z&PMwa71j6tI z1wY*TPW!ggwpvAh(W+^#`om_1zfzyNS|`W$e%4!T8;gO zxPi&ym;dQg?b7BnY#;;Y(xu76)m}e?6 zv)byYzUk{y)-4{tDHf`=RL$P3Pt3;k?f5O^7R)=at#(6q~@3-pX-7$A#syad3&u=$d1t9Asd*!yb{!-{B@@vJI>8PLP z4L*#wQ`hx>Xx2$pM>>Z`%|)+(01Rkawdy(E=>9qbuFlW1z`uFJDBbOJW&xnCK3cn+Vl41=M`dSyF4Hy5CaH=90Gv`ub((9$kOrO52Q2_lLBtZT zg9#=i76H_fOm?vKmm${hF2uxYQT-Dqk;3GLq{pRk)=%YfT74NGYja(}trxmY$d^~6y!7HQPKI*&D&Azg3vOWfYZ&G-BE$VO6Hy_BgqOYK@vg*c* zQR9zc88Zrgo@yV);tP#^b6}TNEYLmbVN&}n>JpY#4tBew*fn?YbS*`aD*3T|o<~GD z&1+c%JgB1XjogRjey3$p@Cy)##$21~hAVxZwZJo0--YU$hm@+eM#{A}e}H!0Fh9pF znAhoDzaA{;B90}*Bu0lB{QCKnt3$2~s3`kOCy8An=0fkLYp6w5CVPBx=$nRDB3 z;(4Z&7u$Vp79xm>#r5yIN@i!aXt)fZ#>9JH1`SnfCT;43{e)FEz;NLP0N?oGpI>@EjHXr~B0Z?hP z-u^hFZUiw=uYKBPZ0d9FRVi!mkEpsI->hnE*LrWAHG}|uSqY3l6hMYUzoK@-WhR4*Wz95Jo6hL*(F2hO|5d{EkNm*UvVNSc|0jCbCuG5+q zgUVttD1;3xT2!JlSh+p z-{1I>(%0?>L2h~%Lo%x~y3A`yB`Y?IFJI}~N)z*P9qVOwHb#^I@3Ws0 zSljw$iT%-Ng}OS&&35!i`5x3=ncZ=?F{LL9651|AcoLk)Kc@aA69BJ(3^0y%fnH(^ z_!FnM#>S$E-dTYXb%m}u4%sOX5hOr8h6?LbhmDU8fGBfrnO&Q;v`ZyL03i5T$z(&;UDfve94LV@ zgrF&@I@oq|=(BdliGqfTpW<(}%jR}Zq~!JP_%dvv31dx3S`u|mTc7R|6AKW(hzb!H zgnhBCHR#{>(;-dst|(too19GQ{6+~iz+&c5Lhd5R<^)g`ApPn|&fU;Vwq3HPZTplq zEi4(K92;Uho--gk`<(N>$fMa{q2;|)HX^>Q^QfM0MX9JS|JE6%Lx9!KB>d$}jB1)H z!Z$HwB$5IzP|NftvD3;SCE@2#TXEbQU%o8_Cj;Xj7?1&xfY1(mZjn}eiD~A`%{MfI za|jeRrL1sNhIHu}uifRRWNTzzYIUo08p^>(s}pB=@0Srdh5vs@DpW6>HC4Y};H) zaVF{-MWbSPL4uX;Y`C68{3(W3qCBPd=6XIak|YwTU?VN*a@XvPzEa$woFCkHJvCp9a0!J-=%*V-i<;(X&TU?&r_+4FfsIzuX zInTM^RNko=4F~{p$rwkg7DoZW#HMWmPwSes6m@u`qh)u(nSP_22?90eZPQ2rz&hk_ zBGhF*)#klnGQdW9GYk=6x17Lk%*QRvj4Mhu%t!o;FonZh$1Sv|S-vu4I%l@y5?*F(9QF3ncmtx$m zAO3E0Y@s(=VB!lRzTD*PH%(b#t_DFs!xtnSwyeI7%vxz;0F+uxzf_E7M%%J|^TvWg z5D*Y4%yC)uR$huq?Ustt+ow@Qz2?IKZFBJ_IFGRos)d4e`a@neM10$~?K)EP{s}%0 zt=iXoN1ttur37yGx&LRy{~-sz?G!>r_yTfX)AqM=2L~T_ThhRwHNp!#0)W+}`>wNL zDIUF^celGw;uxU{zp6tj>okcktsQJ#=gJ%a;RUufL)+jtji^PjC9B)*_)T6qV>W1Q zp#o_$w2QB+jbb9s?%J7pg01T4dM%IX(zh$TCua?#n2WWN_K5p6kM3r-WFWxlIe04` zr>Soa&G{d0%!E5#(^;GR>Gt|ASG!$RRDX^Rs(^KKtnI074jEq1Dpx)0hzm;|*QW_k zVFS~b?|T^3PQ&#aw7^CcE|~~)BW_u^3CoKT2-Zz=-cLHZZ{09bKwG<7n*>+Q&|nru zcJ4ztD}bCSWsy=qB@9hFqksk%vN!{@NIBMiYKPV;0yI#-7bWAgDW$o@R$PuIBh^j6 zos$uyKPv~Kv|ZK#eE2Y2>hV6bn^rOd{Y2_XxhiXoPmzn+x8-{K)?YCjHk~=#H*po^ zYsqX6FxAI^KnY{Ri16!6B4NA#6x4p~mow`!pF<3Sl|xjH^OWeh3{cZ%Q0G%hAK-2t z!N)s2*C`%^;2AovXeExW5AbCD3 zweGFHa+*=PoM!<9VF6NhdBjAnWq$T_G3Mwt@tygE6Pe>j^eunx9!W!iqMd)kH)(qq zXAU?oQcarQFq)G+ReStch80cQN@R7tI?coIX}xfQV&Eqr20UZi#UqCR-ah!Y6Q#|<6#rboSlM9tTh&cAhCinkHvtrIa~SWa7uiNck{8c z4Q4D*Qu?MH=Qq~pQAE0rtM`IfWD`zobE4A z`Kr{S!fhN+kF?v>-3ki|VdA9n)zP$@)XT4Y!Y* zc6n>H47^QzUF;`{bCKxT+STP=Ep^zz`<|@Z6zJM|ot3K>Yj+n-*BdCxtS~u0MmG|j4-{hgZpR8_S32@T&FMuChw}!iSWt5Nisn@yli;UPc1(h7FjWU`AW<$AluSK2Oo7J4jQt;plEO=t+tBV3mUQ+ETN? zpF&vCv<@3CO*4O40aZThvbV80C_tQK4&n^Q^yA-xP#Kb%cew!X$SF2TuN62^ zYsT0~E`-1+6(Dsn+oXkImO6E$da&*4F1JxGs^mXYqyTWsHfdM)m)$3F<$;CEv$yc& zpacw-rllFzMt1Gfb+P5{?;pGxwDeto!9%LXx3;;UEnDi=`N!|DUI6|@TDN5N;8$Z( zUd(r!)cXd?dbysWrFg9`TwP_m!lfqoRs$X3Y05Z%YZjPaPB^K4BD*XSPAT=#$Dg7z zb#LC6))cMvSJS3+X`^rKkBF*-1q>j9WF{Y+ra0Geyy7aUJg-{}OYuR1&GhUSv*LR@ z@0;c~&@Wm~ad&jmZPu>$DXg{9`}|wu?rgKSZe5W&S~mRIhM_sFJt^A4RoOy|$JDrQf5$bJt+p$HD-)Yi2o_OF zb<}-oKwutlEIaO?VQDsz}(`j@o#St=4>T|xhn)3_o?Q5{P#`;Nu z|NL#(^{d;o#K1qhHkQ-;#Mhg$)iqD+O{120J~S&7!AuHlhkb1TYEa$sP#!L_;$reG zi~M?{B!-f^0(bB3Zr)HVm z6=~^s@*NiVGRc{;k-s_CzlYLLLFGKVNyj=%?V2Iy&0Adg((}Uysb*MHZl~LhZqug& zoXedyod$ouFUOPk)cqFmf&}T6M^g)PWu#q#h3~SKn(HeS571C9$ehx;hG8#|_xm5F zM-7)4ssItZAT*m{im+2^o>SF)wM9dDW&N`6>-3?tf{OtIpF-8k;c9Ol=>7q=pCC%< zttoCUHG|@H@#u0`W+T=K_Ich7hqtGhtx-9x7vG(qXm|Z!10Vi)wHM{v52^W6FAGVLac-OQ-{*>7{M*X$vf)_!ZcqrsS*&WU zieJ9Z^&8oaF%|0f>|t#8pkToaJIvbA_DjAqXn*aM_q}R<_fdM5)r)=8>_%5YgULSq z!418;a4EMg)QjU<3J0eyHFLUzgheQ+BGQG+W+=p*L#+%|TLl+1MgGDcBmG5Z4whXt zE480z+S?=qe-0&ejoT~*4!K#*w@=rC1h2--%;)aA9i;0J2%yk|)PC0mV<>_O&^2>N zs)q9tt{tKSWs>8j?MMUwel;N-wd#^KctyyPLn_p@XzWy^^{t!ytC&$)f_7Vfth*XW`@b`-15oE)rPUzZi!mdl#+g<+Ck_Z4VOHiZBo3pj> zf^`!%xQ&N-Vvdn%X(HN`u%Q^)Hu=g8jMa;sQI~W2Oi*HE5H@T zzu7z4Rn0_PPlE{ns*?!o6uq^eK8t&^T{B{-(8}g6_HtJn6*o)jIpagDN{0@$0#whD zh)pW#@?+X;yAM;mtYN7Pl5U3f<3AK-KmZwj0kLb%=uAH6hjF;_alrK`4`gYv8ptjn>q();(Q7S+BJ07 z-!@0Ro8g)LstgoA<6;1*?uMD0^zEEUxKI^DfK7aCkIB&I_48(y$+E2&Q`%Hx)o zoqMxOSkuSiJ-BxPLgU@)3WY4N(aDu>xoqT-B&>ew1ni+RL^&xL%!rpwT*(F9)oX=6 z0Rma*fUE={oH|y~~$Wt%F$tKA|d}H%Cp)uQ7d}>#1Tn$e?bRiYf*nJE;F48qz{xW;Ln4=FZj4i6q*nrcM! z6E!;;Rsm2TAb{$V&|?xtIwNtX}l7< zneBe<*M;Cx%H^8Wnr5_Q>Z_0u3KUP^+Ci^6?6>DJf+lzk9E{nWbXkL@c(i@&T*VX_ z_3N$zR;80}YBwM25kJ$47KOOHn70Vi^`uSzVUlSQi7oyHt1QFk8(uGM7=CajG~=AJ zT5Gd5L!#?t&&iGjVC`95=90_GVVw8Fw+%^*Z`B9cv}ara{34=giLQ6wV<%318sHT1W(b23xDhn`2)s(u1H9Wa%yrXHlOUu<45N}Ki z7Se$4$=DS7jrU{vrb9Q=(lk>tb?Wse6;9_>5M%*w&iNp?asq~mnzQz%s%D>;*Z|kP z-xAFB=`z<*kY9f2FOVI|$GGx7Ki&1`qR!LT;*hh+PpFnBdj_@B_4d()AD8aJ%z{eS zW#kj2EzIW9s3tdOzHJ_v8L%>{U+cc+$6juJETj)K3GhCyEtSUI%hguVtl$NvIs=8) zZ#(K0uer>=CD052Kne@>TGP3{wc{|k@3(t+!4>esH?wS#z<9~4Kp!P#kGc!qRWoa<$nvj_lSf_V9KHpgIEqpKBqI4SYrz>OsR&o?>h z>*+%{es^=+UubsbT5pd*cAxX%G~L_t4vjNQyFqUHQocKY2FtIz0dyYf+MK%5nU9Cy z1}39HSl|mX8QT;ncHdgI8<*)UXRd$>Uf(B)x>#`U@*Nv| z$^s$)ZM>+vHc1toSab|Cw5OYc<`*HFU2SDn={u)w^Cl?Qf}EEW+w`G>A#MUNGXP>4 z=hPNyx41(8IN#rdqI)@*338JydLE1Jvfk;3>l$#QAF?H*;cV^Fm-*0I_PhaNl)EvW z-Dh2Cw&nSC=K_kRG&k0+E>{pFu^+?!o26|_C>8!pouWKR+$6UtH}~i1uF1Y>_3K!$ zdv=UZ;U2oFZftw7`%O1wrBM6bwoh)W!lS#Xt<)k5s;6YSV#-DffC&9MqckFU-=yis z$%L`iK4GPrkZOZDXLtr8b`H^FxlH59+-}`LI0n!!V~G_U@+Mk0T?^|W{G~4P^1X)n z_esi{8NPa1LEF|Dw*z(4UV~PUh50mdNFOkA+_X_2#8YDGGp8DJEg7ikMC%z2s!UY}@m-Y_DN{mE(Ag4MDnB zC-->KdOmLoGsvr^^f-}Qj{eoN!a)Nj7K zVA{Tj3jG8uxE6D>3IC+S{f@n!z!mf?FY78i-+UJ&NvELGQRfr41Fh}fq3Kq*)BO$c z+Ftdz^XZnxva@HO`w?NKv|Y>Wb@;~kxVPihw)X7IoY?J4mmt@6zd;iP$W~pFND(Bx zHQB2Pb?5+g+3(A8%$uf5=4M_7mEji}bfe;_2)~($~iRLjYMuNy-b-!M#%>%zg1Ky6G(*{4ayZD5^5gyzFbnO#VrfGLJY7eYECJRzKeV9kiYL%|Q1*73je*#&@;KCrLA}|9fqCHC zcEeP5eZEY(7v%VIdA-`&F4;=H$@HENU+zQ5xF0dbam@m+QH4q3b^6=wE<_MW04Y0| zj;jPC9d&Rv+Ju+$K8K4=I?7bEdX90Od-UDeHu3-;@ANQk{6DpKvOS|JJn*nw_Ya@< zJCgCkKtn==rk>z4E*#13HW*SDc^>A=Ii)B{=C~wy-Goi-GMP}a)2GI{E~Q*pYK5N= zG0N^i8 zh5XX^Xq|fmR8E{K;>be8_FBBD%(XZT02aGr<@1^A!`Phb7~$izhr*fW&BkI-m6M|7 z%3uQ(N+%Q(d~-=X%FXO+rTA35Cmm-S{;+xbB<7b69kXx+#7p`7yTc!znK%McQH|8F znNqvfI?H@?I5wpY2*Lm&HFFV0uXeywud8fULjVtnn{qb{0tnAx<>u}iU^qNp-8cD1 zu&cjY=ixT5dIp0#W6p_7#P&M5ZOt_&J%F=r<-A3`TN*%p^=N_Chu!kctx7C{fFML% zP}WQT&Es6$Y#N|NRn(wDF#C4nyn;UyRtD~lMQ`e8<+#BQT!rwpF;(2Pr*oX2w%wcF zY>YnLY&-XK1upS)y2d%(t}c7+;-hgYw5?~9#w-l*>nAzucx_v^Ocy}xI_0*Nk~-?IRKAjKA$$b4FCxjpae zJq>&H)ahNvsLtPAl~uYuoveFDdNXdhx!)!A1bFM$fYKm$vc9#t-a4G^!AWNd*Vm16 zOk>HbDQ$`U- zu)8YvovkOfir2$3yGL`eChA1KgDbIsKq>KIVzKgh8ATSI-R-Sywb|@sZRWa*@Jpjq zBxJXJb9d|3v)4Tfh=_D)5%xsYq zb+ZZApO~P_$#OoQ!Cc-~#?pOUYfEaiPTQruijoE<(94G7JO`K&VNTH4f?U_L+pH{$ zCC+kHKaMB$kur>spP!@%;9))6Z%pd3rb5JEpJd}MVmkjEA6=tiKwm6UQ;apL<77-wz#<}5@=Vt_V=@SdgycMKbWpl5afLF6W*LW4M(*ABQ_?X%FRe&DKTfx_bpf9j z2;I`oaW`$7MV;tW*`3O2r=^Gz>3NgoQLPQxH|N_a8>i=Tylr-l@Y46Z;GEZam}uRZ zxi|To^U??v68H(K>UkXEmVo%Jsa>hH*01VWK)uv$RIULoSjMbNcM&3j*G9QQ3FdNH z3k*NLSszt0#3-*AUgjxtY~_@vBLR3w##ukE*k9p>^r;BsLL*KvzS1uayJFz`r9uUeX zpC1g=vWz>)1rY16h$*EOZ$km&ZYEsRT`Nl`Ci+c&D+$J%L;%7JAc;Cj=&v@kW_9l= zsapLudj<`NplKBu<))hlmvW9{06;)e8k)nMI`6m7jUWZ!*}Z|3E=(KN8LdC*R}#p^=;NaN0>bK^Jr5ET8gB!Y}k#XQJ6N&72-LjcZ|oP(9a zhJcD`ltz0?E2W5$ff)d_4iB!*m+%ptmS_MfT4(#P?zi^{6$nK@q9aKC2jx3^uDzxo z(SWK-55qkIYQ2KiZ{TSUsb9oHA)|H85zel=s=BD?;>_x)f$De&${l(3Rulk`05oN4 zbXn|sKh=3)Ss2^8b1v3i8OlIR_zPlT(zHL!<<8nS{kog|H^hL*>gT=6p*(OI9)Q%Q zQo5e^@OiT-E3Mt`#>R5?c&BjKxn-j`-*w&CeNc}K4l1hu-$p54(k*G>l0$Sf#M4L` zvREBA3di^tA3KKU(+!oEC?&V4K9$|MTjoWZQg@M_Ed)fY43Fc*@8JGHKuEK(M9#?oNY)a$N*9+Aj1OIuVM^JDHX7C zhef86Kd<*cdbs&01IR+Wx_Y)QU5a9T*?X*zKb*0LPo|PtM(Nj?adT4xsaFDmDpP(81~^ovq@#1ow4eCv;SWGX5at{UbU!| z@Oedi4;PmC;p1C@vgG=Dic=DBzP)U4UFHEYt?9IpW!izOb9ZIoH?Wa;LUomJy7w51M=Z`I{_*3wj%yUETS-lt z-^k6l&s6argpFtTB@ilu_A4v3BzewbDS~mD7268dafzvOinS~w0}&7b0uS-+@(-KU zm)<74i^ez%F-31aUQRp3&jA)1vU(o3ILCspOlgA>5>%JU$8#4xD$o;sif|>hANa`v z&LOUmf$OK$X?s6deaMR|Fej5{(;wEDpCcU5oGyj1yE=XoT74M1R0zajql2T^Pga=V zm*~rQ{CKOsZ-%qUv8=0hD1h>1uc{0w5BHlWhn za#g?ic#Zk-UltD_fd7BV1M*C3G%ZA^8wb@kGUiU*vsc!Eg8P15YSwB&3zg;r7c_>&^7DNQa=e4eDh)B&Q zwfpTuaydFJkk`YxxZ0ugJ4e2YHC~JjCZ8GHW4<=0y~#ode+s3bRLzm0vk6|J5T_%o zJm)fRyt3;e%f@ZQxzg7f-$Nq7~NZH zo5fl-Z)PUFN@DjgSWp{NXvxdlx9~vo_utI*H~oVYqF>dz_44{HZ`pO1W0DkE$2QE? zUvX3XI@HI8z6jM;E6wroLI3t?cd?(YH-9*M+|)HjeyLlbajTmwH~dXGqO$tSZ)h#+ zYqujR3_yS=41mb6M9V*Zu#H}Wv4F?|XsM{}W#E9UOQ=hm8Q}Tyc9kypbHj`T2#_!B z_>?XU1gie(PMh@2MZ&@}E0hjCRw$e%ykk?t6*yJcw#SonE0pMcjTcE{3ViU*SzRCE zfUYrs^iw%mi?*8zy2(icuf(6GIDz|0QJXb?QfV1ORiN0kF@HjZ6TN-~|z&oMQWJJuaymOs`mPWIjck4KQJ!9-%BJdjWLr8d>Iy0|+eU)+|pK z)357V(W3L&2y7}ykYGudrsr=0&b#Uh8?-9fl=$o*ZTzQj*ZhcQmI>x#XVm2?H~FOe zWXkww_ijQVk4e6L>+M5juB9*{iYVRx5%26s7DFuEDsj7eu8fnOqrHm`NRZi|Vhwv|5T1-{*teo1%cM9s%=nuYSQ!CN+ttB zjk7Se?+obpbDOp8cTGw85|cndM1%-H(5BD4(-+@Bbx;HlfZ3S)<(u!_Rwk23yIvU* z7G|@N2b=izDYOPfDxld0GpIXkHyB6K80$Z%w&s7xLoM2-z1vRp&70<`_08d)u*&rL zaX5@~7u&aVV%JWBNccCahHcl;(wmwEL4BbWLaEFw(&Y`=&o!yuqy`ecV$_$Nx=Kw> z*#;;MR&;xlwW6=|&y=FMC)jWL?|;`0o7G~e!06xwP8M#v^>2M26iwx1YLojb*4bAE zci__KrAet3IL6Ik=Ek+?$ll}{@o?8))YTqaq1t*PDb;G)r#|HEvAh` zZRzJOY4g&fUlluR{IU{6FS7i2HXhoF3FJS1p#HbCny1i{TOYel#tAtSF1$n9znp53{d4;JT*YQ3Xt)w4a zbjL$b{S55-Ib-~Xcir{(b)vP_`fEEARqgNh59tV!U3LRp%c@)96dKdHpKMZsNQ>&tm4&@7^z$TD{Tg>)^tbY4$g% zwiqm!*nM*2Th~mXR^TZcuKt{L9iwugnjQQ6Ae>AS-{7d9ytBw`a*dsIW&y4m-O9ni zn|pYCI44Y|s7>h0(SzhmE`$qq_48cPg6gW(+s#AO?QK!~WMn1ybI2iqcBCrk7nU75 z)3W4R^srVA4b8dBZGPsFi7*iNqjVoDDtL-TQMGWFeWc=yT8Xke`%GZs=qowHl!U zA|%lIhAgIV^9jA*Omj|^v&X1pTMkEFaq@b&D&!d&Ut_Qww4O=tEX=LxSe@>wNIvrm(Q}#eX6_0 z*N8*6Fh6$=_YxJh}n)^CUn+^W(NF`?1q+Pp((EcPT_;t{`v$|RWb_U6{ANg!Y`W+HWyn&acFKy^mFgMAmPdBplwr$!zaq{e_aCJHR(x z`O&z~mWR*@5sOHLFR0oMPA&#-yJ`a%Co`?El2R>|pz=WOc37pWHO9(Uyx1*)|H$)6 z^?qZL4?cV2S7FfzsN=LK2br!j-y70F0rXm|bau0!ZdHlhP6Zg=hQ_a|9yy(F&&_By z=Nn&=R)5BQC8!~QaHR6n>H{lFOr{BZXUHzG=K6sbK^71YX2fQH{-G7Y1~sSz6&@gH zm#0bewnZQW0pYxRqjMLhu^D74l1|HY(O!=D?iMV}O?`9~jV36zH-FP*Nf{NWR;606 zP@k^cs!{-4-jdm`?GjREc+RzH+q)m!Sb(n^4Bbe|_-SR+>om*!JO&Pafq2p~Z|o19 zE06ql8!U4Anb|Y@>t;S4xf`|x(GD9mfBICNqIUg8 z6C&WRHA;HJi~jU>oju3Dcx#ktRmjCYFmH|>5D6d%pjPF4ACua%yDa_FrEErn^g`i8 zMd)1GY~LB}`m<^C0l)AB{98C(yV_hiF)#rEK-(xTr`S;t+f-DkLM4b`T&v1H+hp-L z!($mURDu!{dWTCq#qUxu#HD6|h+7j@*md!86H7bMn}zVhu6mnieOd0S`~^Cuk1<|+ z)?%VBa?qe}Y639oaU?d1;C|?)v;-^^E(;*A$d|D^ULOjf432cIHk<-!W8f#qlDoR@ zIUi3+oJ07~y3d$KY7hutStWnBqWOl;H$S#HdDqylG<*Q1NU3q+dDF_EU8|idLiKmb z>v~AIuHzCYUwm78OisaisURSz2E8zv#)@8a(IJm%fIep^I5CWUQR5+v46B22bK&cp z&fO*XQfi{XPuqaK80Y2|lDnUidF(ksgaSiY z&91N4q+6K$YMBXsiO$%m!@9?OKG46VHbrR!`B{0Bmi6;$%j^&~n=O5=J6z=G+6W1g zBc<$!c|ur9S|+u7N9N<$K$xsizuqXJZhjx#=r$?eEaOz|@2A1f&O0x{rvg zWU*p|ffzc7>Cu#V9kw(4ivMR zQ~)RlI3NGvQde!xI31vqCp~2}q>cRmn9zXGtNVOGRiQtwz|r6({RofEio^)~Q~9>S z@A1jhCF^sOvR{?l+M8K`!>Y8dW4fI`=mM(0xOF+5w{p9`j4@P2ARxcaC^IS%PSM{E zsYPsESJgy?sB;^ijDF_p)vP-jEF5b7(HZGf)lKahZu!f0ifEKI%^#ZG^^fHPId}o- zLfQxCLWT+&0O@(>F^$s}a)%crhU#DWCeuHq@TE3dRo>9u( zGBs!ZcJ4N`iz0|9K(CA?Wprg)y1SxfE*V`zO5g>eMj7;-*2e2P&tpPS?f2bhs}WcP z;S1PQUm%rrmG0WxuJ-`+^NGY9Ae2xZ6K<)5l!*G{BI7j=J8)*V;k?!w*``sNOmsPi zD$F8vO%t~paBMxquz>D&j%u+@dRUP+Yj@Xm-+44K2nGfI&- zAiXWEjc0}J&`^xh#Knzfh~LEgb_$opDj_6>pTTt)OykTR&qmUqN~y1(AA+DMu=481 z=BkK?QHPZ2Iz{=qO;1E>$>mndQ?ndXim|*3I!XNJMs+7`u_3Z8&osHlr5-paRcGl| zW#)UazR~QN32H&xyoHhtCs4K3G9LAf-spOH;DMk*wQ2=_g~f+@ok{8JGd~9`(e=v(?Z8>2(U!0n9sEkq zG&_+FM4h(!FI{&Q_h2n~WdT7h*${p{Tdq|Qh^COPqVHNi%<uYUmx) z$KBF|3AEGZV&2r5H3Kwl{q5~|U6yYGHASVSwQ66@c|OL_j$HvRa51rUea*$PJ-`4l zU8?o*0|#|Zz2O1~0>4BqOK&6oMmFn}>BCJH`AYRpYn=r1Ot%=v3LkZF+d2MmV^EhY z3DeL|^4NmE^&d!q95^lI6l&pr0pTq0wic#_uKr}t<|zlMZPyYvn#!mJ0R%vqAt_N< z?gj@sk9#q*&egJdVJe7Es)79Y&&Q1aJaA3|&oI0z7&(D4fcRx=LJ-tC&!x1ao|DBy zkYfRB+XLD>tLuCTe0{M4Qdz~%jhPt`5fBxmx)t-U*nBn3_DqSCKig=a6zdu#@b20i z%U#^!H$HRflGo*l+RO0A$E95r8Z83wxJkQU7Pw)sK!C_U6>v*pt81N(A1bNkK#GN# z@l~7Q#(NJkc*=-Z2~eU{fz^N8^~SjDG%AwUT?dPvY0WVd(Zpx6 zrPAi1wk8D%wT!L#xO;c(Np(K?m7)SDY5mw$VV)`hizsSllJhDh99f#4lipqxpHny% z&I+|C1{1fZye-=sJeuxMI1$zzwvt0ufEU_TSkgrF3?Yc(M|;g=?8q-GR% zn9k`s)+|Xmoaq_^t7m$%NJ_<|^-~OMTZFD)Z7UgwMQ}>Sjq);Kk;tH4IG5SEek^=K zA4<20)UF{VP!*3F!Jv#~@N=FoS!tTJZ>1JiwdA+Wv-1py@C%_y^QNiN+iRs|r>2`zX8DB{F3me=8+8uRa4FMo z&w|c8LeFLEieg$yRJ1qn z1rD+nb5J~s(>z*eOPe)(fwFoUH^a>iFaHYm`y?-g=k7fDRuct-2@vRoBg81#2y9Vr zZE-JLaP5a3!cdoJ%GCC~t}O^4)LM%&(#M;DoTcZKpv6g_KIAVNqHb z5eP(Q;4AJKc8wRFbJ4m{+Pji;CJh1zzjR;2*c$%``|i`-<5j9>1jbi+JBd)#wYWjI zn4yB2p|&R)B0w{kR@;%bn_kXmyXIfW~o+e9G_>7iZcdRbzsuba6+Etu*xzXLBSoR%dqd^Mkv z0tKkks1(*URCT^zVM9^H&NMY*gKhmBDdT)K>pt}xTeGAj)-nv3yS{0yYd6A@=9RmE z1UW4icst%)4-Z2vXpoHBhi|nE8{;jdt@#J^FAXyBTV7D4MkLvs{mJw6(R=wa>}Mc)f{NndO^j+H3w9{Fxd?TWoxYf!h$VT zRb|Rq6`eQrEWUxYAL0-1;5e1dCs;S6c!BAGdvl)18bFqHzV6f_E8mWFfV6^Lbh+h2 z)n1v5nSeP{-JtE>wbGbN%vw`!K-S@Yj%K%30r+!TtbXrmxWx~jZll}9a#k9@GFx=2 zS<{L@n)AEPcTfE({Z9Q*YsIAu&eV-Kv2<>iKju5D>sziFJ%qaG#&_8Z>AypkDqlH5|jH!QBjJ?2?*{z%%H+g(M}Z z%C5o}S}qb8n?)C+=AuVXrBqgKcXM0I1Pz?zAYA1|5S>Wjo20rHZc1eV)I=ta_OuKS zX?wZ(yJ!z^a-go6qQ<`KY;F|e`bUPCKMV#p`&;J3U`KXcyU}aD@qCx+@8de_CtI&v z8M6Su%Un&M7{t`j@5XffhbmX%vWD{Nq!gBH^-gVM8~Z8LjvLylCacC7cwJg3u}EJ2 z`cd-b$Gd}VoPyV%+f>(siCaP~&fMNYKNl`2Q?N4yl=SK{cJ! zF|={&oL%V4{r?07MQ-WXuSN191YmyNw6<`)p#2C^k%2+Y#8pT05>tZJTBfbKT}xl5 zJy%dH1|yVol?JbYD+3b2x{Rspjowrxc*6V5TDAr?{$@nqsdWSW_3bmm+LqCFx+s8b zwCdRmsokDTPUo9L<9lsafMEw+YO_s1WU{~5B9~OhN(C%IZz-x}d2 zaCy6hI*fazlmdQjP6DEM)0u5y?dG`zoA&f$CdE<;W>notpYCwIzv8{E@Hw7l+vKR~ zzer3;VP$QoE&)IFBke3Lby6Ae!q^N|69@y42_Ka=Ze8GQb~iwkuDefWNnbKb^yF~F zg{wN`@r|+%{)%J)+)eUptWV!e*9~Dq4&4#crvwaX}jj4L&?w?JhnYxx!KchSz3maxEw1%e8~gLqQMuz8&$Pr`m=N>d z`P(d>acDhY9!z}&0bgR0m z66SdpBZX%uCFeAUEVs1v^Wl^%;!pSg1x%VF-<9gN(CYyR0k{@{ZR7Lqu%?vfX$sdg zfxqhM#SyA2fb&1ZbLVC!Cwr)aWNsL0gQ++|P0zOPEY#%I%Zz29w>n5)R&Z?1C~3`k z!HM1{K(=rxoBm-2$|9{-IGtl<1?X$nY-SCV`}U49i%kX;7bs>G-LeQ!N#pM!zY38`j>2bSzAR^({;!?S+mw@%*eeflXw#cTLsBlll^0qt2rPvNn zm8#KG2;A(I#})U)41m8j`&y!xJZ-M}u3N3?PO)mzP6=$P_xgpe1AzOBE-PH$`tLhp zJ!0EG-Lgm)0U!X{Ul6N3H*%Tm=SA&|R6(eji@FJM*m0t(6+uH^2;ZJ<= zBG_V6yR8><6%D3!4nz>BkZtvbr*GpY=SV=2Dn|8Y`sTbGsyki5m5rO%e3zx$T6iq$ z1nVcy-P6fpPiWBU)eeVYxA3svhEA|&=~gzo^OIU}n80T?gs9Yu_9Jnjs%G7slt~0< zjkUb4|02vAdh=khvBS~1{cqz$A0KN|BIvKicDuozFTZPvcYah$u~p*w^N}ms9I&SC z(ja=)Cx^PbdGEDxCc>TxX3OI-Tct$ssj>35=-n08sP@Jkn?=^9>*a8?y4%~8xUNv_ zfR8ua-J6a4ouWoz*xT#3=6Zt;oYt!A!<#xNEwZWR8}T)7bLo%!K3mZW;VYm3F1*ga zYcKl5CjbOcTH{)uTKzXsStG@zzR|xgwF4yp0;s5&%9ZZ&I2P$_o5uERz^w*%D|vTS z8r8E^Mzh&;*=`3=rxuPx)gcu>&AYeU0T$N)G5|1i<@zL1v8nc=EH?JI<nshj9p4|!K^?x%7cke-t`^HxK~-qeKpnOzM%HvjHV7>E>m(+9Qw!Zy zGseYUB`S2Hj5%zVlA5Q@2ruM;Iu939sz7F5X`U}!;=AqIbB0EDmHa28Pz7NMJw%n zGFGjHxuO{W>KALm0Oc@ly*)ft8L6#wxuARP#+b4iovepPSR3@GLAPj{2I!?R`~?h{ zK$9M>@U!aa{8f3$}O z#I;Xj?7m6!wa9vo_9jX`k#d@$dLJq-?F`4Py~zylHm+{z-2!zP8RlzjR7s4;;O*yQ z>c@rE71Z&V;ZJ}7XuZF^9QP!+6?jH~bAN?zj^Uhi>-*xi?;FT2lO% z+sT!xf2yX$G0E6y5Zk(kW;mFoQUJq10vxcE^V8EjbX%IitT>e6ayG@Z^>STVKp1`j z${W!Go|l_PgKC)xD*x1BAOMVDj??1DX50eE>@&G?Q&VZf1WR%OH0r*?Qh~695s&UB zSO1Aw0Pt7Jfk3xGqPp*kwp&M|VONt{z;Zu!$2~ujak=1OK(IMw2lZ0z?Qc3w~vk&j-^@J4CfEM ztf<2JOqc?$_izhV(3F?Kf|*00+x7d{>Wk8s2cI&YH(MOhk>bl}-ZW*=&ORXAIv{4> zw(*+KZh94DJ$6J!DZVZSFk_BV!VaqY%4V1gG&)te#?L(?0! zTKYe>Q`|J806oXdFQA|sWv{VvhwJWXvlq(zO7)qrl%ndA(5YHjj&C0EU!KX;Az=-dJi`&p5IG2;*QE&*j*(3f?|@p3+iffA_oW|5}v z^}tbiaK)w-8keV_HXg)x>$l(J=9Uru1SmjIp$s*1cP$lwD}!k|;JEI4<*kKA7SPnA zclo6)Uf_Pj+rJH$QkJ$Um7o^X7^5xVU}>Kt1(79mK^;&Q<*`dyjty`XLiKWFWJYDr@oH^JmA84GUS0C-A|V|)BYsps(AgSLE4w_#fR%^vn=V=|-IJ~-3Jq3U%<|x& z;`zGf{A%be0oQXj)}WstXw*dw%cky&$ZMN~=*dEJICbA#`Qo>J{5Yc)c_mfEiIZ|( z;uH|cXSg=v9>9`Wfso&ZO|ph{hIlQ2+3;amuws-q!CwB-Tg;(ID=SgBS)5p3E2J56 z4D;@y702Y4W(jql0zcX!OlUXI+a#EIjkTrib#Ah)41^#e#m4FS`!~BSaKJe!v}8+-aMPUh6h1${ABePlstM_n zs@=!jl_Z78b3C)SvBPef0?OylQyu4IG&3mImg5ud=PK_?bN!(IMJ725Ld#dvSvfcOR-#^fN%jh` z8wXDMMTHNQ=QYtnkEOG3Pn=;;9MLKL?4l{VyBt4lb#vOs;X+s&;8Fnq^&$&@qqb={ zx6H3NGp3Gmf5VXD6;NwbN$oM-HD;hx(&jcl@Sx%O$VX*6-u3RXn+QNa1d6Dr_x;%o zH}om`%iAe8T5mzXy0$Zz>vebD2&VVy=o`+6gKE1&-%rb`i*7BJ3>MB$_R!5wmv|nz zAV7J|*r{OV+^RApjyF`Sf3>iQs_OM|j1SSjgR)X{JpNVD2)|ICa^vp_|Wg>0pyt!;+0W0V?lJ z)kNIFq>B<$1i4Z&%bxBIL!ARjxVFuaE$;y&t+dhOKyjhgi_R76WsI?CYjs}X7hnJc zt+iIcYuD7tu{mFdGf3sv zJi9Sc(^EPgFr8~j%h>F89VVBJt$iDM*Z4S!Ma8PSJJ91jn>dHP2CgCi^y^N_@W-|K zG$wOssZvK>KsZy_*25#FBrila%pV&Z*>5^Em23%5SM1ypKm?FLnUA#G&X*XgoJ!8< zkc1gPsMr_onj_rjQUc3aE0P*RAX6?sD@6vv2CNSt>n7Se#1s z*)vDb^QEjO{YH;t?628Qwwx_SQM0ds^TF!vXQ;cjz59{ib0eS6aDBQiGmEcbMWY?C zNMdg&L6vDO1w5g1cySb6t*PG=0@# zzIvS9atLhk6UK+P{o5YDS_qa(X+2dMHdbP8WEz?TRMyRkRb8)s(MVg}G68t3u{AZ| z<Qr{)G8q~+BQEJ}cZD{{TPeZLR&>|>{DuVx4>j;1Cf0;J$ip&oNl zL+-Temmc%ZKu!S2Uoz5ztUu&@vt2B=B@=G)lr=V?g%&y8_9%9RYHtkj9{r$IXXYOu{yp9Qq z-d3=Z+eQ|U*u_q)>7EeeE8=mJP2ZYvS7*GthIi@2*?bjSD74M(?Y?Om3RCtYxNnZ} zZ8hR2fkuG4f;~`8VnXg9E(l)1afBY8erFG#g6q63>8vlcsosPv-jH4?tIPP9BPuPV z4gL1!IEQPGHZM%BI9?+-U6RIdEpAxdll-nv=FjDMpvI7bzPWVW_R8|i=xM@cx2lbX zoE7yq``fNt(^F&TzyKgDqQA{R-)F4cIcPFz1&O-MRYb?FJp09XvbVoUFbCTgQ!l%_ zdCp`FVImX&w~)oEWy-lwDv@fmIx1AVdq}?p!Vb}>6-C@PyQ3-~iM1vM1Oj1h%!g%P zo4Y*5Q>r6%tW(v&50eNB^PkEApx#YKaifW5!49&#q=|oGuKVQEMmz63PfTwnx&3Y+ z1aAypuG`&ZOwHg4y2iTJ!DNT@-Dww}`RE|Oaz3TrtX2}8wK-Hh71N;iVDOln-@Wnf zrQFZ+&HJk_45od^xnH3^eooGi76H^+VVsoLx9hc8hHIHmDI`#Yq+*?I^S<(8pIl`W zcmawn+XymrVnCP5D9}-C)v-)lb5o6t3z8wD7%=vIHDiy^53NL3bk<7I!t3(g3$%Vk9c zS8rN)sOpg!0Fbcn%ZCcLE&y9Vq`!~0qO=5xxNun(R!6H6u$IyoQ2;G8&F zP5#_v(X!|e!9XnIjW*RLPSyueu<2o ze4_gKZBQ}HDx$Toh3FV=Nnc5=4~E^Lh^^C{jzgX8%7aEf40f57ktsl##%l81#BFV1 zoFj`M{z{tN;WwXoulz^#`PRg=G6@(S+jW_6T@e6L0Chus2hq;u)DJm_esKtf2tuj? zpmp0rc${)yjA&Wi6bx8K4?MKq1p;_qlw`my-!k z{bFo-NhGfgUb?#6zwdOdfJQ-+F{&0m6aZy>C`! zZ=*&9A1csNM%5&%DxH@+L3ddH>d{LEO+t}hC@oDk_~CB&u&`>T-2IJ&S|hyfBPqqq zy5|Ttthn?uuG3VUFlzO>b?b9gJNEaN4>wXE zPc|dRPcSCcWJ`HHb$M}KS_hUoRb@J^O%B-93Y%sDvyv@1r2#Mi^c?8NIm{W_&@Q3u zX+CvC43)je2fBWyuzF?n6Sc{8`lC=q}fj5B|wh-=d!Htl7qbynI~ zY2IX=DuPRe<}7>YEkMq;h=UB;T0QYJX z>0fuv@k3D*fnHM1g*kTe7Tz|+_r&Y79EpHnaow2QamQOP6##^3S#Q?Hk4bT!rYr2} z&0MxgdK;!(A9n_kV5_neJ2nQgN7Knx&P{d27Dm9q4@%zLU}z-`?YTh5gp*c~%5~hzu`Cp65m5Lp$q^x?y&PzRCn4 zRQSYH)e&w+wojMtQ&Mj)SacoK;utmu-JfUjvh4Ox%dC#duAtULn5w(cDj^o=7!L=$ zS1c7Iqcx1{oignpX5P##OD0u5^V}#u#gNFhE|dq?86G0A<72a(%RrT!YRI^}?JI@X1X-@a*Q?X|d#0tMaFuK2L_}j(r7p2_q zSnzAwVcsNePvb}94<_4_+0MtdPuD_>wXx1uO??Py$>j~-^+EBE-zwNeVc`n+>k>Wc zEa0=6^Hs}85yBc$D(LPCb_-E{iQsDXZ3s%ACewgaFoUk;w7!U!2s+LAq+9!_4ceZ% zJ7YBfBFs-2cfI*tWl~=ev7s&}cjzL*R2ixWAS&x@b)hSJLSKIajn*gtjG94MW-rZ{ zmEz18t>klxH|?!oEvL>Ny=g<-FZ0^CdFA@l-*KCc2`{pH(uTr~tiZoR-cMeO4M1^h z=;G$D&W;xl;{|=fCm` z8HvWgwpeOQqw#}!aAlA93yE|Al!jIHx~evG`Gs^Q5Z6fBl$xrQ1|DTuuW@Q$R1$@y zwULgk&9z8|UI8n`z=;o6SN-9*!tY?U4W zp+FzRjhL9KDe+2GuJK_1?zZYHXox} zLU{?9zlMag+HK`G?IsXe)HF#yj2s*428${Y^mM^^hLs>XLl z^0U;xa{aY)mua!9w2x6#G8zy8IBk3h(66QNS8axMA$^zw+s1-bpb>%BX*>tXgT<-J zBXW1<_#9+gW&NT02bh<{fQZoKT4g)c^v3{8fhV@hV|X*2&J49stIIZLzZfj*{nNaU z(x~?#oYy12)n+lq|`r22Scw#cR?yaeFsa^_R@}WT^;9pKL{X) zvfGy>R{#3~s_qs?JYJ1%8bhqB8dXo18q#d{zT&vk(8V>F3N=9ma8pigk2M!qor3Gz zAH&V`)D2zIm(9)ZPgrwJifA==3v2Ueo(}oInSPm!00dCrZU4wk8Jq)wXZkC7*Kp2^ zLW;Glj~=g|Xp}EeQO3WBpSKiv0N#{|31T24hN7Wzo|vCAV%Xq$L|Am058cOz)ei}s znl5?xriZYw_Bm|2Gf?e^+maUXK~tOS3`mpsbbL1yEP~@Sxtp1{$e?Fmp5-rKe;2&JcB#A=KUe- zj1uR_c4KKbx)s(08t;}1Z&roJot9jL=+{niR&L&I^3(50nQDD<&T6GGFV}gnDH!;I z1vJriP_h;QJ z;8Ho1!WEQjhn_?}&yTCxG*wN$xR(iHM5l}9-^AhIYes`y=DSUE0jNMYDAl^&h5qAa zJW$nejXPEC$-;Hmuk-zy3tn`$t;nYRf%g6S(G+rHQoUV1ZZ!Mz)?1wl0KrQaHi3F< zZ{&BkMcu#_f7d84?sb#1lI+wNNUsKOlr_6fD>m#nR;94O3p&vKW+_&=#@T? z`6)(0MZuP~psarF(!NvXa;wzkP1^xK9UJe$s#Tg(YlzzI(3BxfDlSkfj>8iBeN)zP zGKX{a%U*CRRRkFtHV6$s1QYe@q~Wez?GO{{^o^v;z#asfu(Thqq%UVpJ)1|hLM`>H zwq8L13XZCw&xdQNM!np=qFjSHSck%?WUc(=8<6lqKfq%3dEe>aWwwI|D0C=Zt31zr zihwz%A^>2QPu}QA1?ZI8H`bNO<#@EIoBu(qxIQN5))k;J^Lh%dhoyJKePu5&m8HG? z@ON<4D5@KP(72}$>1C1>BWff62v71xEEt&&4wQ}KHI%R_0sw(OfpaZK7@={xe)EKH zNzqr^R0eMOT#7MiXHpxmUr^;gx-v7jb~qRv_Jz)RkLy!F-zKk*of~)Q`F4Nh)Gg;u zQ0_hi{TTSk6hshISm3){nx0;+gXl2apjy?HHrp$xk4OqFrwRywq;S1oQ@?Z9kJ#ED zOVspI;k;b7G5i*l()87@ka8WiHfV26Yn|4FAYmR)$qakFt*I3Kk+Nn$0D&xU;~Vog z-WY4ubJ95E==+bG+7AlI^+Pwin+)G6ii{7wfz^^})xy?comBpj$S6bB zPZoacybaot0K}ZyD#uL&b3wbi;w*spi@slmj6$1q|0&z)`4z2YN#Kmki$dm%qKq3k zZOl;Xv#X{=GQGP(^-apl&gPl`*0t)kb@QBqex_#0q`yJ$wzUJvwR||w;^t9ph$;hu zqy>7tWNJX1+;9A;bp8@-KQZDOl;!d1yG=xfYO-7h$oak4`du3rFQ$-#-{bM?Os@3@h z;=VsN%HGk{*2bXx>LzD%jx!`PHK#sB8$4=_+BtO-xeLbU7fP}+8Ck z08P_(`h9s=<---E=odRRB~?(B$iN`D?1z3_R29}nsos8B-{1YL6Zj~ zDT$Evc$2}G%?=oJwMccZid?S+?fGGIDkaO5D<`pDXBke`c!~2`Z3mb;$R&$0F{8}Gx%M%I%{uz-TwLbh+d#IC{;$3ysrp#Z9 z6O^FLZv8{J?l)0@4|v)1-^doJmQ|tFeRXkD*!Y&lvY@}aI`~~ktu^1Tpy&9`RR+W zIuiV5s;V3;1HtRzn-r*lD>SiGDbEZnAmf}(s z)KTCYyY?|&uOo1ohj~X2myN`fz$kk*=E++8!J1>^rtjpmyxh5n-9B#3 z=dFcx9`~`Z&M6gDcp1*a3_4~J5x^1F-TKyOGjmTMG$3}=Ha)J9mq-CkXNs`q-L!&6HYcybhFE*EI> zb*KQW;1^h%@>$1{7p^~onrld3YlcP*a5@9%H|Nlo3^VvAIghm%+n5fknigrv?#LK* zZ>O5)K3}v={LG2|m5Cm_+tA+$W+d|VoXs!{y zdv~~5Yl@LTkO0N+P5)b|w>$RS?yTn*UcFp*ORhBPVufFc+KOrPZLgw-#`nNd9e@f3 z>hJ7_Ot@^=95H8Q5I~?cz~k;F%x7;kfdHn%hN!mO{2uMF?%i%$qo@j<$)-W7+o{oJ zzv_N($sA)NJGl67f&3_Ee3Iyq6v*Bf?$Ff9skU~Y@r%1o1dgj}>s_+fe(e56ClvK{ z8E;h=ck$oe?(ee-R@qy!?aG^hUO#I_ZQ~U@Z`$KKzhGmiLtq3EA`pOLNoV8mNl)r# zV8mwY7;0B7C`!C4NOCr;2SlKvn$~ul^L7iYz}}k;*SbbQ-CD5X9OeLu@|_zprIY?_ zz!*7~dB17nW{1{NccXOVW~jj{Vs-t?zI;QE-kcx0u}_BTSFyh+1U=^3{q8d80`aF_ ziDg&I=gTMGd_xpaoK?#_L+Km!qB2uzS_YFrRdvE34ze_pV;YtEEV?oH?B~`7+V3AR zBB&d)_qp9@KVql!9;(S(Xy6S!LVE=|_O>mSI&e=Q%~p?+0QUA~+d1$3(yUnZI$Apb zC_zLnpM62ivWlq`)%Bu!m}=|nQPt?4Pl;awSFzL44AtS@HwS0~AinZD9oxX!3#FX} zI{>^5ZjD4c2NM4#^;fSc1}aS_+~=+?8@p^DRj*O_R}<28^AIB5AYJa|^R|yJC>qy> zg59a{3WX3v5P<^Xj~96CR9r!Q^Zr9mYbe^m&jL#~XRlY;tg;lxUlcVPb+zVdHuGA5 zQ0kY2JE~Pq9vszWoEb?0a1dyGX%29DXO{`-vs0OX0hJ`BQ^uzT^^5Cgd3{$Gu=qDM zJ?*DP)qNOkyNsm6N;;puy=+ywnWU0YyLz23VIQAVT=QDA9qeo=b+iI(;;DZA#t3v; zUWXX9*nA3ike5w((k2-(MZ>F7MuHG$4v)!2F==XkV2ZU@QaH;iHy7|>v73B-ufF?n zk@cC?gzyu`mPokNME11bJd}tlnriRVtfLn&XgI>S&h4p)AI{F`C5QpZKfE*VYWcod zQK3fa(=w8?@#Go}xk9)sTfPGJdZol#f5TNDa=KeM<&etooftCUeQ)$ptyjG1o`&CJ zNXWm?LPTH&ZOzlw%yB_M;8Fz$Q8#UG%Y3{V!?in}z*imjU;0dv2C5>T4I-?5uWJDY z&|t~h@@A=#fe5%Xc44=rmH_NiNn=A1aOmxFxM~6uc!Gy~-vT*K=f=qrQ!SS9sicC~ z{$=JzSwey3Z9-hP(soiJ2m%6?T13Whh^BsuINla@0z;95Idse{f3}}8T(BYy+WNX+ zK+q(wjgsREN}IhNPms%~=ri#q59JgS>YWNVW2Wnfx|~n_`!m(yJws6b`)g(V)kdjs zaI(z_zZw1DFaB(x^u5`ZO}O0mQGbz;l%e-+x+^is@MihraFFOjrV(C%1r||eQcHWR z1q{CEL9e#eU}4UMUnLMkN=l#Oh}l}}93eohpPT_;7G^OgimRDh z!Y@)OeN>uKImGtuF*U4a`)1SrXe+cfM%5qN_fd&Y)(_eb(8xwtix%{aN_4r#sRApz zq#s?Qcb}XznP4G#rSeyFuf}@QlJdcewqHf+L`Hj3t_-E*Hko$U@5Jr`Gms|WpFNZ-&PkmY2xu7f{&R z*60Ki+?wOTR0WykRoK<|R?`|&qGMq#tCwABW8=s!s>su!X&t5RAIA0GBGq72LJA9aWnjRni{@X>VWmPyY>y?zcq-DL#(-Y2% zyL`WlxcV*chTyRwsD8%vwLngGS|)0X|dJ39-LG#JENgh zoA2%Hsl9AYXA=nk;PvurkLM>Ic6!?xxOuYk5|RMD${iqRQbiid#{qN}77YlHdhlkA zYQP!}j%XY`+O%igmf~9m9&WEil&@jEu0-8swyor6@k)}3Z^GtbyBlT*x~=-$O_q`) z(-~e0%Cv1&V$kqNr}20j|6niua=vo_gkQy!^(EWWP^7f+!*el5n96m<-bSXptO&FJ z;k!N0^p5b$Zev{qdp9^s6Kx9?G*nrZRO0%W0&pn|07;z#C;JIIJ@>Tcn3R;2Yc76- z{vL;cty#74gr^K`sBA@P$%12XG44z7>}#I$(C%Dg&yC?Rfl(S5l+M#-?G%A})TB0ywi&d0t8>6eG_HP{@YW%bz8%~6F*Z=7QOIu$)$bJnu!Y#or=Ss>W%(HW?v)H+{n zJ*#e}-kzF4wI<$Qb68Pp0+3&6lwj8a4=Ti_?6grfg#t>*mLTo~4 z{q4R#ZmT!5ZLj&o$iT$UGdJm^?myj?E9oy%g|(saYCJoQ^3~mCpPEy=-repR6c)$~ zU0Wa9!+hRNdh&F+*^S-+kkX2JO@KGO%mmEn8fOT( zuF&1GNmdj2>9)#->Gn8J?B=et5Q%Enel%r^voBqACL4wqs1)>fZJqCOcaXqLHOp&a zvQS0X2$##UAGL)1cE0(GV6~FM@~RoS2<~@H6?-lI?#IJaSqcdJr1~tv=v`}t7idOO z-JEq)9=fim$(fCeX?UZ?a2&W+?jH4es*WqTV~zc;nU>fzP^@D`iTy!0jplSo3=^Kq zk;@>(=#V?BW72gh8GNgf^b&Gu8oIc0FZ*PM1ed0tA(r|z(S-n*#dJ!frj@->z*Uf> zQq#27@FKfDpL5wRr=IEG_-TfWc&4pP^ic0^V+IG3cx9!f-Pi8P0ix0br5ioyp;0{+ zXm_TxO0SZd-rO#t^p!sEoRoY8tAlbdoGr&Hev4;ec|e`k(vP* zNLz2z?Cnm#+ofj%w$|?NHoJ9ZR3LvwdBAv+8I6rjT&4RToikd!vL*!6_LjE#s?uhx zCH6h4X?n9@7{Y+NJyh#s?F>(Zo3ZP7d$MF^BoM$~X_S=WBs%3-s^0!l)x(_?cRhBq zim^DQ5P$)+Q70NM{e^?M9PvmkjRD)PG4Kqzj=N_5KBEeGjs-ltpo#CB?g|^Nm7<>* zz=&Yho3O9`I>#!g2n^L__P1kGMkybF!ayIlP!JeMbFj0V+XHZYVRMrnhfkl%`1E@* zAt?_Z-<1co>MgNviTZKp-9Eel8QaXXdW3RtPoA%BT9>7nY9>Es<0dUR90tf!Ct@nW z7g(>CW7!RB{BCjz$ZlZ6R zMk4^fa$r$a;e7E+pGwuOl~}LpT#C|Dz77DRS#-Z$FssuD9;(0`Ojc=~;@k}m83C!u zq&ciNYtjme)qRGpIh?D;K~|T{(oeZh8CqELvg&t{4M7N@R2Z_1gHJo3RZye=1ix`{1%CJF>$hLd9uh*QL?tVqE+8)}$5d+;J)t;5 z06;qH+QdIKMKjAe0iV5+M%26l-V=(0wDwfFN;HTAe@=S`Nm9M2qUzN? zp0)xV=P71oQYFbrcl~*d^Vw+CHf@TjsN46y`Cu9Z5MY5ngV_OvCYqf6Zy(zdMZflZ zFsG`*ENeb%HpOnHs0a;PP#^{E`mUeMV8Nu$fYOVo4|{arb727bm5iRU)TG~{8Tior z-9VYo1t#98mWJEwLh@2MMdN$3dwOI16&*L-gVJ4_J~Mnli%K07ndxyi`60|-nqe29 zDy><+FlBx+N>H<>4oek4C{?6lYh5bi_U#E^ARQXNs^`d5gpaqr&F}N`PA&jBZ{u$B zcGv!!x#kvR27TMhVV%gtsNg(+il5qXm^4~oq>S+x^Odq4u-mB~K7i-{{(w9U}A*1*aZe2151prAq z)CfiE${X1M0&-#02D&2mD|NOTppZ*kwZS#tUv>w;LYgaERX$fsV(;9UxjJEs`Jw*? zuMxnYHDHxhW%o8kSORRE1-8n7gcL8$PXC1uMUq7uD9zV5`7g#xMq&PQQ)8E96kW%% z9Yz|@y5*R^u2T|U#de))i7ai}iTsCc2w8ziI$~@;UiS29N!E5LtvjdxpfD6f7Q|nl zeccxenP%KPJazNMg@LA~E5+F3x^07E07Br(s+=z)9LjG=rNH{B4G*N1zzeWHq27#M zwYex z+p@M%y}v+r@RcK**L`zASEDxF$5L6Bk*G=OgV(;KI)wqcXXoKv>r0#~YrQm{ImFIVjc zRWt;Xj!Tax)fL?VgYZ`r?2?zel=}R9 zq{8)#Mn5hC&1y)U7|KOJAc`)xmk=r_0)b#T$`(^e%e9fr3$sCm-9?oVLa)Z2B-I8; zDDjcr&M_L&Monujrgx1Y4)9b%9Ly;?4+!7@B#QvHzR|n7${+oq%JJx1#1^|~l0T3_ zX8bcmJ7i3)_U=RJlct~>^^#Y4!Hk`1+WcM*++E`p`)$Sk&4)~)NnGBg!#o^&jL0K$T%nH~#%bNTFQ zEUkGw?5;30n~DNe0B9>%!e!WLrc!ZCO%xOnA#ZhenHo2_oB_&D$7O_cvpzm5ZQ8A> z0K}Cto@s8}%_lC+rd{E0sQKB04hVvN~S8d zzXX`R3s5GlpkK`mZ)p&0rfBX`BU~?fQjB8_X4t)7v37-}rdN8c>f|2N%-gIV^BM)Y z=2s%hnIK(lPB2`1Yu2WQ{o}=HDvUp!G$PD~vj4FL)?@QgNqH~nfq|eJdiKMyDs$bO zpSG#1vpuh^)<9Lg4a`tK1|*noc;{nNOU@(bYGpVRzQtQw*dCL)@(l#MMqU|4I}h0Q zGZdh6`jm>6IxEZx-=Tz&pHLfD8my)G16;y#%`nnkZQ7>nFQ2o@1%DA|32Ff0b%;8b z2hPM`ln7XTdF1i&D3qMq8Wjt-@AKL#VgV4e;3W^i>{gKL2niPi3kI@(+XzThTxY@1vQ~RflYlJQtOP*OazSuqfvq#?e7z2Lx9exVt|hJw<_&nxVpFRr zuNTTi93aC}h1o=~{aIQ=cjt>{X@hZT{-|wXO&|!bAi~_}rkMby=HX!;PIjL2B8UaP zpj+ASC1$xe)%V*|n6|geG2L&SiLL-Z(!WuqwA#v|r}48L^Ds`X>mxAWuXJB!i+
nu6jwv5oAQb7{Kqota~Yqh0|F&puTL#q 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 mT^Yb{j1@zE*W1$*!i@ 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 VqL~5Bx9tD`002ovPDHLkV1hBc@Js*z literal 0 HcmV?d00001 diff --git a/src/test/core/resources/blackbox/code128-1/3.txt b/src/test/core/resources/blackbox/code128-1/3.txt new file mode 100755 index 00000000..0bfc696b --- /dev/null +++ b/src/test/core/resources/blackbox/code128-1/3.txt @@ -0,0 +1 @@ +102030405060708090 \ No newline at end of file diff --git a/src/test/core/resources/blackbox/code128-1/4.png b/src/test/core/resources/blackbox/code128-1/4.png new file mode 100755 index 0000000000000000000000000000000000000000..9d2fff2318044ceb84f23aef823fed8b9adfe741 GIT binary patch literal 5018 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 literal 0 HcmV?d00001 diff --git a/src/test/core/resources/blackbox/code128-1/4.txt b/src/test/core/resources/blackbox/code128-1/4.txt new file mode 100755 index 00000000..4632e068 --- /dev/null +++ b/src/test/core/resources/blackbox/code128-1/4.txt @@ -0,0 +1 @@ +123456 \ No newline at end of file diff --git a/src/test/core/resources/blackbox/code128-1/5.png b/src/test/core/resources/blackbox/code128-1/5.png new file mode 100755 index 0000000000000000000000000000000000000000..ad71ae36d5828adeb54c163144f2afc4518764cc GIT binary patch literal 1110 zcmeAS@N?(olHy`uVBq!ia0y~yU{M9Ke={-z$@IN@<^n0U0G|+7ApQUU|D`wQ-vuh+ z_H=O!sfc@X&XAFTfrDA$xB9*1tUMc-g$$w<#Kgqpxe=f{x%{55LPw$o16NFgchT$U zNr$<4tWHKBPGjbh`(>zp?Sy)o+mV@~^X{xJdbe)YyqTd}4OUIw8<3c?{_g71MTgh^ z3tqhM760qIFKcGM-}32%-5&n^;Q`bHe{Szgj=7ns!E-?Fsb}WAlouKoN)K|q&{#Lm zTkMdU#=LiuCazxk5A|9lT@O8tW$FyNV72IhP2$hz7TW?cR`76~JbL2s{j=BS-1nUP z|LXT2yB2BhYT^}I%2;t!)KO4|jYU_n?r4%qkMcXQ`3>eVn!OGFUZ-yb3A(v-aTx@d zX>ZAS*W7ZWKvwk$_mpFNJC^k17<4*ao7R=eAgt}Brn&jVs?_4W9vzZd6AV@?aa(i3 zPFBR=)UFlFx++~491!vSlVGOs^25cx?v@>@eHD$TBSy6Pk4*RNjg^5l+FaA6v@iW$ zvm>>Yy^LMr$n@_b`5XK8L-JAMN{RHc3jQ^rAANqaZD`SpeDl*k zv}H|2?&=v%U6CJ?!~U2g6?=q-1}f z;zVy>jB0RSaCY;i_$_&BH#;R3?RcCoVxJ(^`qRfW@5AIrVkazPIIBZ*LLaU^p>Qqo8P!*{188C z-mWxrQO7oo8C^;YKR(?LSi$|^hM4PuMG*la{c8eV$p`&m;{ME;zoM&QQH0{d=tV#$ z*o&@zE4oEB&|uE#F5bMgU6N1DX0LKOobD<&=NOlrwo+=-ywypoxMD>rTb@q;eQ4|a zkf`La3Ev_&9`*@csQB=V{xXe4uHSz7JpQ&;bjF1F*3TJs2&~oYN(r22y;4IWV&;QZ zQ}etJ-eDRYPB))Q2&7J3@~ literal 0 HcmV?d00001 diff --git a/src/test/core/resources/blackbox/code128-1/5.txt b/src/test/core/resources/blackbox/code128-1/5.txt new file mode 100755 index 00000000..50bf4555 --- /dev/null +++ b/src/test/core/resources/blackbox/code128-1/5.txt @@ -0,0 +1 @@ +8101054321120021123456 \ No newline at end of file diff --git a/src/test/core/resources/blackbox/code128-1/6.png b/src/test/core/resources/blackbox/code128-1/6.png new file mode 100755 index 0000000000000000000000000000000000000000..3d99da5653814e3d8e3ebb31b4b190ccfc307e95 GIT binary patch literal 669 zcmeAS@N?(olHy`uVBq!ia0y~yU{nCI?Kpr0!#d}g%nS@nDV{ElAr-gYUNOuN4wPa0 zV6W&g;c*2Er>lx{dyto)=A)2Pypl&wIxb1!Pzvgrq7>v} zE(%P79pp0qOLXWi18V=T8Q^Ue^x6M4BSX}mi$B*e?KGafvNA?g{y@8Bb{W6JWzDG1 zQVen)Z+-pJ-t6gF&?WXLb8$uH$<*f*_g(FxvDKeVsy4V_c*X8DtI zANJR2v6${=WjI&exw^jk>b7TgPNz3-+WTTw;nFF(1~VlWNPEYfubee!;^_}bb~{4O zDL;6+Yub)q`neU~)fc9oE!Wn*SR1gvS$HPrf^{-XXN!{D8u+|+Gi)fd+y8}ou6C`i z;a7%+y)s*57|(XTsCZo@fAI|4h47CJWp;+V0p-6!13oV=}r>mdKI;Vst0GIm|_y7O^ literal 0 HcmV?d00001 diff --git a/src/test/core/resources/blackbox/code128-1/6.txt b/src/test/core/resources/blackbox/code128-1/6.txt new file mode 100755 index 00000000..ba093542 --- /dev/null +++ b/src/test/core/resources/blackbox/code128-1/6.txt @@ -0,0 +1 @@ +óóóó1234óóabózz \ No newline at end of file From 1117c893d6d63bca08cf8bec677af76365fe3502 Mon Sep 17 00:00:00 2001 From: rikmms Date: Mon, 26 Mar 2018 18:57:14 +0100 Subject: [PATCH 03/12] Ported the Multi-format reader for barcode 128. --- src/core/MultiFormatReader.ts | 27 +++--- src/core/oned/Code128Reader.ts | 20 ++--- src/core/oned/MultiFormatOneDReader.ts | 98 +++++++++++++++++++++ src/core/oned/OneDReader.ts | 26 +++--- src/test/core/oned/Code128BlackBox1.spec.ts | 5 +- 5 files changed, 138 insertions(+), 38 deletions(-) create mode 100644 src/core/oned/MultiFormatOneDReader.ts diff --git a/src/core/MultiFormatReader.ts b/src/core/MultiFormatReader.ts index 7eb3841d..514f4269 100644 --- a/src/core/MultiFormatReader.ts +++ b/src/core/MultiFormatReader.ts @@ -21,6 +21,7 @@ import BinaryBitmap from './BinaryBitmap'; import BarcodeFormat from './BarcodeFormat'; import QRCodeReader from './qrcode/QRCodeReader'; import Exception from './Exception'; +import MultiFormatOneDReader from './oned/MultiFormatOneDReader'; /*namespace com.google.zxing {*/ @@ -113,9 +114,9 @@ export default class MultiFormatReader implements Reader { // TYPESCRIPTPORT: TODO: uncomment below as they are ported - // if (addOneDReader && !tryHarder) { - // readers.push(new MultiFormatOneDReader(hints)) - // } + if (addOneDReader && !tryHarder) { + readers.push(new MultiFormatOneDReader(hints)); + } if (formats.contains(BarcodeFormat.QR_CODE)) { readers.push(new QRCodeReader()); } @@ -131,15 +132,15 @@ export default class MultiFormatReader implements Reader { // if (formats.contains(BarcodeFormat.MAXICODE)) { // readers.push(new MaxiCodeReader()) // } - // // At end in "try harder" mode - // if (addOneDReader && tryHarder) { - // readers.push(new MultiFormatOneDReader(hints)) - // } + // At end in "try harder" mode + if (addOneDReader && tryHarder) { + readers.push(new MultiFormatOneDReader(hints)); + } } if (readers.length === 0) { - // if (!tryHarder) { - // readers.push(new MultiFormatOneDReader(hints)) - // } + if (!tryHarder) { + readers.push(new MultiFormatOneDReader(hints)); + } readers.push(new QRCodeReader()); // readers.push(new DataMatrixReader()) @@ -147,9 +148,9 @@ export default class MultiFormatReader implements Reader { // readers.push(new PDF417Reader()) // readers.push(new MaxiCodeReader()) - // if (tryHarder) { - // readers.push(new MultiFormatOneDReader(hints)) - // } + if (tryHarder) { + readers.push(new MultiFormatOneDReader(hints)); + } } this.readers = readers; // .toArray(new Reader[readers.size()]) } diff --git a/src/core/oned/Code128Reader.ts b/src/core/oned/Code128Reader.ts index adb9b07b..319f559a 100644 --- a/src/core/oned/Code128Reader.ts +++ b/src/core/oned/Code128Reader.ts @@ -17,14 +17,14 @@ /*namespace com.google.zxing.oned {*/ import BarcodeFormat from '../BarcodeFormat'; -import BinaryBitmap from './../BinaryBitmap'; -import BitArray from './../common/BitArray'; -import DecodeHintType from './../DecodeHintType'; -import Exception from './../Exception'; -import Reader from './../Reader'; -import Result from './../Result'; -import ResultMetadataType from './../ResultMetadataType'; -import ResultPoint from './../ResultPoint'; +import BinaryBitmap from '../BinaryBitmap'; +import BitArray from '../common/BitArray'; +import DecodeHintType from '../DecodeHintType'; +import Exception from '../Exception'; +import Reader from '../Reader'; +import Result from '../Result'; +import ResultMetadataType from '../ResultMetadataType'; +import ResultPoint from '../ResultPoint'; import OneDReader from './OneDReader'; /** @@ -229,8 +229,8 @@ export default class Code128Reader extends OneDReader { } } - public decodeRow(rowNumber: number, row: BitArray, x: number, hints?: Map): Result { - const convertFNC1 = hints !== undefined && (hints.get(DecodeHintType.ASSUME_GS1) === true); + public decodeRow(rowNumber: number, row: BitArray, hints?: Map): Result { + const convertFNC1 = hints && (hints.get(DecodeHintType.ASSUME_GS1) === true); const startPatternInfo = Code128Reader.findStartPattern(row); const startCode = startPatternInfo[2]; diff --git a/src/core/oned/MultiFormatOneDReader.ts b/src/core/oned/MultiFormatOneDReader.ts new file mode 100644 index 00000000..8ff1eb68 --- /dev/null +++ b/src/core/oned/MultiFormatOneDReader.ts @@ -0,0 +1,98 @@ +/* + * Copyright 2008 ZXing authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*namespace com.google.zxing.oned {*/ + +import DecodeHintType from './../DecodeHintType'; +import OneDReader from './OneDReader'; +import BarcodeFormat from '../BarcodeFormat'; +import Code128Reader from './Code128Reader'; +import Result from '../Result'; +import BitArray from './../common/BitArray'; +import Exception from '../Exception'; + +/** + * @author dswitkin@google.com (Daniel Switkin) + * @author Sean Owen + */ +export default class MultiFormatOneDReader extends OneDReader { + + private readers: OneDReader[] = []; + + public constructor(private hints: Map) { + super(); + const possibleFormats = !hints ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS); + const useCode39CheckDigit = hints && hints.get(DecodeHintType.ASSUME_CODE_39_CHECK_DIGIT) !== undefined; + + if (possibleFormats) { + // if (possibleFormats.contains(BarcodeFormat.EAN_13) || + // possibleFormats.contains(BarcodeFormat.UPC_A) || + // possibleFormats.contains(BarcodeFormat.EAN_8) || + // possibleFormats.contains(BarcodeFormat.UPC_E)) { + // readers.push(new MultiFormatUPCEANReader(hints)); + // } + // if (possibleFormats.contains(BarcodeFormat.CODE_39)) { + // this.readers.push(new Code39Reader(useCode39CheckDigit)); + // } + // if (possibleFormats.contains(BarcodeFormat.CODE_93)) { + // this.readers.push(new Code93Reader()); + // } + if (possibleFormats.contains(BarcodeFormat.CODE_128)) { + this.readers.push(new Code128Reader()); + } + // if (possibleFormats.contains(BarcodeFormat.ITF)) { + // this.readers.push(new ITFReader()); + // } + // if (possibleFormats.contains(BarcodeFormat.CODABAR)) { + // this.readers.push(new CodaBarReader()); + // } + // if (possibleFormats.contains(BarcodeFormat.RSS_14)) { + // this.readers.push(new RSS14Reader()); + // } + // if (possibleFormats.contains(BarcodeFormat.RSS_EXPANDED)) { + // this.readers.push(new RSSExpandedReader()); + // } + } + if (this.readers.length === 0) { + // this.readers.push(new MultiFormatUPCEANReader(hints)); + // this.readers.push(new Code39Reader()); + // this.readers.push(new CodaBarReader()); + // this.readers.push(new Code93Reader()); + this.readers.push(new Code128Reader()); + // this.readers.push(new ITFReader()); + // this.readers.push(new RSS14Reader()); + // this.readers.push(new RSSExpandedReader()); + } + } + + // @Override + public decodeRow(rowNumber: number, row: BitArray, hints: Map): Result { + for (let i = 0; i < this.readers.length; i++) { + try { + return this.readers[i].decodeRow(rowNumber, row, hints); + } catch (re) { + // continue + } + } + + throw new Exception(Exception.NotFoundException); + } + + // @Override + public reset(): void { + this.readers.forEach(reader => reader.reset()); + } +} diff --git a/src/core/oned/OneDReader.ts b/src/core/oned/OneDReader.ts index f372d881..5ccf8619 100644 --- a/src/core/oned/OneDReader.ts +++ b/src/core/oned/OneDReader.ts @@ -16,14 +16,14 @@ /*namespace com.google.zxing.oned {*/ -import BinaryBitmap from './../BinaryBitmap'; -import BitArray from './../common/BitArray'; -import DecodeHintType from './../DecodeHintType'; -import Exception from './../Exception'; -import Reader from './../Reader'; -import Result from './../Result'; -import ResultMetadataType from './../ResultMetadataType'; -import ResultPoint from './../ResultPoint'; +import BinaryBitmap from '../BinaryBitmap'; +import BitArray from '../common/BitArray'; +import DecodeHintType from '../DecodeHintType'; +import Exception from '../Exception'; +import Reader from '../Reader'; +import Result from '../Result'; +import ResultMetadataType from '../ResultMetadataType'; +import ResultPoint from '../ResultPoint'; /** * Encapsulates functionality and implementation that is common to all families @@ -47,7 +47,7 @@ export default abstract class OneDReader implements Reader { try { return this.doDecode(image, hints); } catch (nfe) { - const tryHarder = hints !== undefined && (hints.get(DecodeHintType.TRY_HARDER) === true); + const tryHarder = hints && (hints.get(DecodeHintType.TRY_HARDER) === true); if (tryHarder && image.isRotateSupported()) { const rotatedImage = image.rotateCounterClockwise(); @@ -99,7 +99,7 @@ export default abstract class OneDReader implements Reader { const height = image.getHeight(); let row = new BitArray(width); - const tryHarder = hints !== undefined && (hints.get(DecodeHintType.TRY_HARDER) === true); + const tryHarder = hints && (hints.get(DecodeHintType.TRY_HARDER) === true); const rowStep = Math.max(1, height >> (tryHarder ? 8 : 5)); let maxLines; if (tryHarder) { @@ -134,7 +134,7 @@ export default abstract class OneDReader implements Reader { // since we want to avoid drawing the wrong points after flipping the row, and, // don't want to clutter with noise from every single row scan -- just the scans // that start on the center line. - if (hints !== undefined && (hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK) === true)) { + if (hints && (hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK) === true)) { const newHints = new Map(); hints.forEach((hint, key) => newHints.set(key, hint)); newHints.delete(DecodeHintType.NEED_RESULT_POINT_CALLBACK); @@ -144,7 +144,7 @@ export default abstract class OneDReader implements Reader { try { // Look for a barcode - const result = this.decodeRow(rowNumber, row, x, hints); + const result = this.decodeRow(rowNumber, row, hints); // We found our barcode if (attempt === 1) { // But it was upside down, so note that @@ -282,5 +282,5 @@ export default abstract class OneDReader implements Reader { * @throws ChecksumException if a potential barcode is found but does not pass its checksum * @throws FormatException if a potential barcode is found but format is invalid */ - public abstract decodeRow(rowNumber: number, row: BitArray, x: number, hints?: Map): Result; + public abstract decodeRow(rowNumber: number, row: BitArray, hints?: Map): Result; } diff --git a/src/test/core/oned/Code128BlackBox1.spec.ts b/src/test/core/oned/Code128BlackBox1.spec.ts index e5b5aa55..33572aba 100644 --- a/src/test/core/oned/Code128BlackBox1.spec.ts +++ b/src/test/core/oned/Code128BlackBox1.spec.ts @@ -23,7 +23,7 @@ import * as assert from 'assert'; import BarcodeFormat from './../../../core/BarcodeFormat'; import MultiFormatReader from './../../../core/MultiFormatReader'; import AbstractBlackBoxSpec from './../common/AbstractBlackBox'; -import Code128Reader from '../../../core/oned/Code128Reader'; +// import Code128Reader from '../../../core/oned/Code128Reader'; /** * @author Sean Owen @@ -31,7 +31,8 @@ import Code128Reader from '../../../core/oned/Code128Reader'; class Code128BlackBox1Spec extends AbstractBlackBoxSpec { public constructor() { - super('src/test/core/resources/blackbox/code128-1', new Code128Reader(), BarcodeFormat.CODE_128); + super('src/test/core/resources/blackbox/code128-1', new MultiFormatReader(), BarcodeFormat.CODE_128); + // super('src/test/core/resources/blackbox/code128-1', new Code128Reader(), BarcodeFormat.CODE_128); this.addTest(6, 6, 0.0); this.addTest(6, 6, 180.0); } From af7895bf6112b5a572eb45ba01e2e46ef8efb30e Mon Sep 17 00:00:00 2001 From: rikmms Date: Tue, 27 Mar 2018 17:45:00 +0100 Subject: [PATCH 04/12] Fixed bugs. --- .../HTMLCanvasElementLuminanceSource.ts | 1 + src/core/oned/MultiFormatOneDReader.ts | 24 +++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/browser/HTMLCanvasElementLuminanceSource.ts b/src/browser/HTMLCanvasElementLuminanceSource.ts index 0aab423d..5ad56e8b 100644 --- a/src/browser/HTMLCanvasElementLuminanceSource.ts +++ b/src/browser/HTMLCanvasElementLuminanceSource.ts @@ -104,6 +104,7 @@ export default class HTMLCanvasElementLuminanceSource extends LuminanceSource { const tempCanvasElement = this.canvas.ownerDocument.createElement('canvas'); tempCanvasElement.style.width = `${this.canvas.width}px`; tempCanvasElement.style.height = `${this.canvas.height}px`; + this.tempCanvasElement = tempCanvasElement; } return this.tempCanvasElement; diff --git a/src/core/oned/MultiFormatOneDReader.ts b/src/core/oned/MultiFormatOneDReader.ts index 8ff1eb68..6ccd3bd3 100644 --- a/src/core/oned/MultiFormatOneDReader.ts +++ b/src/core/oned/MultiFormatOneDReader.ts @@ -32,37 +32,37 @@ export default class MultiFormatOneDReader extends OneDReader { private readers: OneDReader[] = []; - public constructor(private hints: Map) { + public constructor(hints: Map) { super(); const possibleFormats = !hints ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS); const useCode39CheckDigit = hints && hints.get(DecodeHintType.ASSUME_CODE_39_CHECK_DIGIT) !== undefined; if (possibleFormats) { - // if (possibleFormats.contains(BarcodeFormat.EAN_13) || - // possibleFormats.contains(BarcodeFormat.UPC_A) || - // possibleFormats.contains(BarcodeFormat.EAN_8) || - // possibleFormats.contains(BarcodeFormat.UPC_E)) { + // if (possibleFormats.get(BarcodeFormat.EAN_13) || + // possibleFormats.get(BarcodeFormat.UPC_A) || + // possibleFormats.get(BarcodeFormat.EAN_8) || + // possibleFormats.get(BarcodeFormat.UPC_E)) { // readers.push(new MultiFormatUPCEANReader(hints)); // } - // if (possibleFormats.contains(BarcodeFormat.CODE_39)) { + // if (possibleFormats.get(BarcodeFormat.CODE_39)) { // this.readers.push(new Code39Reader(useCode39CheckDigit)); // } - // if (possibleFormats.contains(BarcodeFormat.CODE_93)) { + // if (possibleFormats.get(BarcodeFormat.CODE_93)) { // this.readers.push(new Code93Reader()); // } - if (possibleFormats.contains(BarcodeFormat.CODE_128)) { + if (possibleFormats.get(BarcodeFormat.CODE_128)) { this.readers.push(new Code128Reader()); } - // if (possibleFormats.contains(BarcodeFormat.ITF)) { + // if (possibleFormats.get(BarcodeFormat.ITF)) { // this.readers.push(new ITFReader()); // } - // if (possibleFormats.contains(BarcodeFormat.CODABAR)) { + // if (possibleFormats.get(BarcodeFormat.CODABAR)) { // this.readers.push(new CodaBarReader()); // } - // if (possibleFormats.contains(BarcodeFormat.RSS_14)) { + // if (possibleFormats.get(BarcodeFormat.RSS_14)) { // this.readers.push(new RSS14Reader()); // } - // if (possibleFormats.contains(BarcodeFormat.RSS_EXPANDED)) { + // if (possibleFormats.get(BarcodeFormat.RSS_EXPANDED)) { // this.readers.push(new RSSExpandedReader()); // } } From 1a9ce8b851e6e1b585b7f57776deb92aea224f3a Mon Sep 17 00:00:00 2001 From: rikmms Date: Tue, 27 Mar 2018 17:45:25 +0100 Subject: [PATCH 05/12] Implemented the bar code reader for browser. --- src/browser/BrowserBarcodeReader.ts | 24 ++++++++++++++++++++++++ src/browser/BrowserCodeReader.ts | 5 +++-- src/index.ts | 1 + 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src/browser/BrowserBarcodeReader.ts diff --git a/src/browser/BrowserBarcodeReader.ts b/src/browser/BrowserBarcodeReader.ts new file mode 100644 index 00000000..51c7cab4 --- /dev/null +++ b/src/browser/BrowserBarcodeReader.ts @@ -0,0 +1,24 @@ +import MultiFormatOneDReader from '../core/oned/MultiFormatOneDReader'; +import VideoInputDevice from './VideoInputDevice'; +import BrowserCodeReader from './BrowserCodeReader'; +import DecodeHintType from '../core/DecodeHintType'; + +/** + * Barcode reader reader to use from browser. + * + * @class BrowserBarcodeReader + * @extends {BrowserCodeReader} + */ +class BrowserBarcodeReader extends BrowserCodeReader { + /** + * Creates an instance of BrowserBarcodeReader. + * @param {number} [timeBetweenScansMillis=500] the time delay between subsequent decode tries + * @param {Map} hints + * @memberOf BrowserBarcodeReader + */ + public constructor(timeBetweenScansMillis: number = 500, hints?: Map) { + super(new MultiFormatOneDReader(hints), timeBetweenScansMillis, hints); + } +} + +export { VideoInputDevice, BrowserBarcodeReader }; diff --git a/src/browser/BrowserCodeReader.ts b/src/browser/BrowserCodeReader.ts index a8ee6def..b927028f 100644 --- a/src/browser/BrowserCodeReader.ts +++ b/src/browser/BrowserCodeReader.ts @@ -5,6 +5,7 @@ import Result from './../core/Result'; import Exception from './../core/Exception'; import HTMLCanvasElementLuminanceSource from './HTMLCanvasElementLuminanceSource'; import VideoInputDevice from './VideoInputDevice'; +import DecodeHintType from '../core/DecodeHintType'; /** * Base class for browser code reader. @@ -30,7 +31,7 @@ export default class BrowserCodeReader { * * @memberOf BrowserCodeReader */ - public constructor(private reader: Reader, private timeBetweenScansMillis: number = 500) { } + public constructor(private reader: Reader, private timeBetweenScansMillis: number = 500, private hints?: Map) { } /** * Obtain the list of available devices with type 'videoinput'. @@ -264,7 +265,7 @@ export default class BrowserCodeReader { } protected readerDecode(binaryBitmap: BinaryBitmap): Result { - return this.reader.decode(binaryBitmap); + return this.reader.decode(binaryBitmap, this.hints); } private prepareCaptureCanvas() { diff --git a/src/index.ts b/src/index.ts index 783eec21..1a152f72 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ export * from './browser/BrowserQRCodeReader'; export * from './browser/BrowserQRCodeSvgWriter'; export { default as HTMLCanvasElementLuminanceSource } from './browser/HTMLCanvasElementLuminanceSource'; export { default as VideoInputDevice } from './browser/VideoInputDevice'; +export * from './browser/BrowserBarcodeReader'; // core export { default as BarcodeFormat } from './core/BarcodeFormat'; From 1c6507770323e8fc1638e75b5a4d75c2a96a5e2b Mon Sep 17 00:00:00 2001 From: Luiz Machado Date: Fri, 6 Apr 2018 21:05:35 -0300 Subject: [PATCH 06/12] decreased tests timeout --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a06b06f8..8c29706b 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "clean": "shx rm -rf bundles esm5", "build:before": "yarn run clean", "build": "yarn build:before && tsc && tsc --target es2017 --outDir esm5 && webpack && webpack --env.prod", - "test": "mocha-webpack --webpack-config webpack.config.test.js src/test.js --timeout 60000", + "test": "mocha-webpack --webpack-config webpack.config.test.js src/test.js --timeout 4000", "lint": "tslint src/**/*.ts" }, "dependencies": { @@ -94,4 +94,4 @@ "webpack-config-utils": "2.3.0", "webpack-node-externals": "^1.6.0" } -} \ No newline at end of file +} From fbbf2000d7789a13c70dedb8db4c0851ff6063ef Mon Sep 17 00:00:00 2001 From: Luiz Filipe Machado Barni Date: Sat, 7 Apr 2018 10:50:47 -0300 Subject: [PATCH 07/12] style: apply-d editorconfig styles --- src/core/RGBLuminanceSource.ts | 1 + src/core/Writer.ts | 6 +- src/core/oned/Code128Reader.ts | 905 +++++++++++++------------ src/core/oned/MultiFormatOneDReader.ts | 118 ++-- src/core/oned/OneDReader.ts | 440 ++++++------ 5 files changed, 737 insertions(+), 733 deletions(-) diff --git a/src/core/RGBLuminanceSource.ts b/src/core/RGBLuminanceSource.ts index ac0b659e..5bad90c9 100644 --- a/src/core/RGBLuminanceSource.ts +++ b/src/core/RGBLuminanceSource.ts @@ -115,6 +115,7 @@ export default class RGBLuminanceSource extends LuminanceSource { /*@Override*/ public getMatrix(): Uint8ClampedArray { + const width = this.getWidth(); const height = this.getHeight(); diff --git a/src/core/Writer.ts b/src/core/Writer.ts index c2f89d23..1aa3c378 100644 --- a/src/core/Writer.ts +++ b/src/core/Writer.ts @@ -53,11 +53,13 @@ interface Writer { * @return {@link BitMatrix} representing encoded barcode image * @throws WriterException if contents cannot be encoded legally in a format */ - encode(contents: string, + encode( + contents: string, format: BarcodeFormat, width: number /*int*/, height: number /*int*/, - hints: Map): BitMatrix; + hints: Map + ): BitMatrix; /*throws WriterException*/ } diff --git a/src/core/oned/Code128Reader.ts b/src/core/oned/Code128Reader.ts index 319f559a..258614de 100644 --- a/src/core/oned/Code128Reader.ts +++ b/src/core/oned/Code128Reader.ts @@ -34,493 +34,494 @@ import OneDReader from './OneDReader'; */ export default class Code128Reader extends OneDReader { - private static CODE_PATTERNS: number[][] = [ - [2, 1, 2, 2, 2, 2], - [2, 2, 2, 1, 2, 2], - [2, 2, 2, 2, 2, 1], - [1, 2, 1, 2, 2, 3], - [1, 2, 1, 3, 2, 2], - [1, 3, 1, 2, 2, 2], - [1, 2, 2, 2, 1, 3], - [1, 2, 2, 3, 1, 2], - [1, 3, 2, 2, 1, 2], - [2, 2, 1, 2, 1, 3], - [2, 2, 1, 3, 1, 2], - [2, 3, 1, 2, 1, 2], - [1, 1, 2, 2, 3, 2], - [1, 2, 2, 1, 3, 2], - [1, 2, 2, 2, 3, 1], - [1, 1, 3, 2, 2, 2], - [1, 2, 3, 1, 2, 2], - [1, 2, 3, 2, 2, 1], - [2, 2, 3, 2, 1, 1], - [2, 2, 1, 1, 3, 2], - [2, 2, 1, 2, 3, 1], - [2, 1, 3, 2, 1, 2], - [2, 2, 3, 1, 1, 2], - [3, 1, 2, 1, 3, 1], - [3, 1, 1, 2, 2, 2], - [3, 2, 1, 1, 2, 2], - [3, 2, 1, 2, 2, 1], - [3, 1, 2, 2, 1, 2], - [3, 2, 2, 1, 1, 2], - [3, 2, 2, 2, 1, 1], - [2, 1, 2, 1, 2, 3], - [2, 1, 2, 3, 2, 1], - [2, 3, 2, 1, 2, 1], - [1, 1, 1, 3, 2, 3], - [1, 3, 1, 1, 2, 3], - [1, 3, 1, 3, 2, 1], - [1, 1, 2, 3, 1, 3], - [1, 3, 2, 1, 1, 3], - [1, 3, 2, 3, 1, 1], - [2, 1, 1, 3, 1, 3], - [2, 3, 1, 1, 1, 3], - [2, 3, 1, 3, 1, 1], - [1, 1, 2, 1, 3, 3], - [1, 1, 2, 3, 3, 1], - [1, 3, 2, 1, 3, 1], - [1, 1, 3, 1, 2, 3], - [1, 1, 3, 3, 2, 1], - [1, 3, 3, 1, 2, 1], - [3, 1, 3, 1, 2, 1], - [2, 1, 1, 3, 3, 1], - [2, 3, 1, 1, 3, 1], - [2, 1, 3, 1, 1, 3], - [2, 1, 3, 3, 1, 1], - [2, 1, 3, 1, 3, 1], - [3, 1, 1, 1, 2, 3], - [3, 1, 1, 3, 2, 1], - [3, 3, 1, 1, 2, 1], - [3, 1, 2, 1, 1, 3], - [3, 1, 2, 3, 1, 1], - [3, 3, 2, 1, 1, 1], - [3, 1, 4, 1, 1, 1], - [2, 2, 1, 4, 1, 1], - [4, 3, 1, 1, 1, 1], - [1, 1, 1, 2, 2, 4], - [1, 1, 1, 4, 2, 2], - [1, 2, 1, 1, 2, 4], - [1, 2, 1, 4, 2, 1], - [1, 4, 1, 1, 2, 2], - [1, 4, 1, 2, 2, 1], - [1, 1, 2, 2, 1, 4], - [1, 1, 2, 4, 1, 2], - [1, 2, 2, 1, 1, 4], - [1, 2, 2, 4, 1, 1], - [1, 4, 2, 1, 1, 2], - [1, 4, 2, 2, 1, 1], - [2, 4, 1, 2, 1, 1], - [2, 2, 1, 1, 1, 4], - [4, 1, 3, 1, 1, 1], - [2, 4, 1, 1, 1, 2], - [1, 3, 4, 1, 1, 1], - [1, 1, 1, 2, 4, 2], - [1, 2, 1, 1, 4, 2], - [1, 2, 1, 2, 4, 1], - [1, 1, 4, 2, 1, 2], - [1, 2, 4, 1, 1, 2], - [1, 2, 4, 2, 1, 1], - [4, 1, 1, 2, 1, 2], - [4, 2, 1, 1, 1, 2], - [4, 2, 1, 2, 1, 1], - [2, 1, 2, 1, 4, 1], - [2, 1, 4, 1, 2, 1], - [4, 1, 2, 1, 2, 1], - [1, 1, 1, 1, 4, 3], - [1, 1, 1, 3, 4, 1], - [1, 3, 1, 1, 4, 1], - [1, 1, 4, 1, 1, 3], - [1, 1, 4, 3, 1, 1], - [4, 1, 1, 1, 1, 3], - [4, 1, 1, 3, 1, 1], - [1, 1, 3, 1, 4, 1], - [1, 1, 4, 1, 3, 1], - [3, 1, 1, 1, 4, 1], - [4, 1, 1, 1, 3, 1], - [2, 1, 1, 4, 1, 2], - [2, 1, 1, 2, 1, 4], - [2, 1, 1, 2, 3, 2], - [2, 3, 3, 1, 1, 1, 2]]; - - private static MAX_AVG_VARIANCE = 0.25; - private static MAX_INDIVIDUAL_VARIANCE = 0.7; - - private static CODE_SHIFT = 98; - - private static CODE_CODE_C = 99; - private static CODE_CODE_B = 100; - private static CODE_CODE_A = 101; - - private static CODE_FNC_1 = 102; - private static CODE_FNC_2 = 97; - private static CODE_FNC_3 = 96; - private static CODE_FNC_4_A = 101; - private static CODE_FNC_4_B = 100; - - private static CODE_START_A = 103; - private static CODE_START_B = 104; - private static CODE_START_C = 105; - private static CODE_STOP = 106; - - private static findStartPattern(row: BitArray): number[] { - const width = row.getSize(); - const rowOffset = row.getNextSet(0); - - let counterPosition = 0; - const counters = [0, 0, 0, 0, 0, 0]; - let patternStart = rowOffset; - let isWhite = false; - const patternLength = 6; - - for (let i = rowOffset; i < width; i++) { - if (row.get(i) !== isWhite) { - counters[counterPosition]++; - } else { - if (counterPosition === (patternLength - 1)) { - let bestVariance = Code128Reader.MAX_AVG_VARIANCE; - let bestMatch = -1; - for (let startCode = Code128Reader.CODE_START_A; startCode <= Code128Reader.CODE_START_C; startCode++) { - const variance = OneDReader.patternMatchVariance(counters, - Code128Reader.CODE_PATTERNS[startCode], Code128Reader.MAX_INDIVIDUAL_VARIANCE); + private static CODE_PATTERNS: number[][] = [ + [2, 1, 2, 2, 2, 2], + [2, 2, 2, 1, 2, 2], + [2, 2, 2, 2, 2, 1], + [1, 2, 1, 2, 2, 3], + [1, 2, 1, 3, 2, 2], + [1, 3, 1, 2, 2, 2], + [1, 2, 2, 2, 1, 3], + [1, 2, 2, 3, 1, 2], + [1, 3, 2, 2, 1, 2], + [2, 2, 1, 2, 1, 3], + [2, 2, 1, 3, 1, 2], + [2, 3, 1, 2, 1, 2], + [1, 1, 2, 2, 3, 2], + [1, 2, 2, 1, 3, 2], + [1, 2, 2, 2, 3, 1], + [1, 1, 3, 2, 2, 2], + [1, 2, 3, 1, 2, 2], + [1, 2, 3, 2, 2, 1], + [2, 2, 3, 2, 1, 1], + [2, 2, 1, 1, 3, 2], + [2, 2, 1, 2, 3, 1], + [2, 1, 3, 2, 1, 2], + [2, 2, 3, 1, 1, 2], + [3, 1, 2, 1, 3, 1], + [3, 1, 1, 2, 2, 2], + [3, 2, 1, 1, 2, 2], + [3, 2, 1, 2, 2, 1], + [3, 1, 2, 2, 1, 2], + [3, 2, 2, 1, 1, 2], + [3, 2, 2, 2, 1, 1], + [2, 1, 2, 1, 2, 3], + [2, 1, 2, 3, 2, 1], + [2, 3, 2, 1, 2, 1], + [1, 1, 1, 3, 2, 3], + [1, 3, 1, 1, 2, 3], + [1, 3, 1, 3, 2, 1], + [1, 1, 2, 3, 1, 3], + [1, 3, 2, 1, 1, 3], + [1, 3, 2, 3, 1, 1], + [2, 1, 1, 3, 1, 3], + [2, 3, 1, 1, 1, 3], + [2, 3, 1, 3, 1, 1], + [1, 1, 2, 1, 3, 3], + [1, 1, 2, 3, 3, 1], + [1, 3, 2, 1, 3, 1], + [1, 1, 3, 1, 2, 3], + [1, 1, 3, 3, 2, 1], + [1, 3, 3, 1, 2, 1], + [3, 1, 3, 1, 2, 1], + [2, 1, 1, 3, 3, 1], + [2, 3, 1, 1, 3, 1], + [2, 1, 3, 1, 1, 3], + [2, 1, 3, 3, 1, 1], + [2, 1, 3, 1, 3, 1], + [3, 1, 1, 1, 2, 3], + [3, 1, 1, 3, 2, 1], + [3, 3, 1, 1, 2, 1], + [3, 1, 2, 1, 1, 3], + [3, 1, 2, 3, 1, 1], + [3, 3, 2, 1, 1, 1], + [3, 1, 4, 1, 1, 1], + [2, 2, 1, 4, 1, 1], + [4, 3, 1, 1, 1, 1], + [1, 1, 1, 2, 2, 4], + [1, 1, 1, 4, 2, 2], + [1, 2, 1, 1, 2, 4], + [1, 2, 1, 4, 2, 1], + [1, 4, 1, 1, 2, 2], + [1, 4, 1, 2, 2, 1], + [1, 1, 2, 2, 1, 4], + [1, 1, 2, 4, 1, 2], + [1, 2, 2, 1, 1, 4], + [1, 2, 2, 4, 1, 1], + [1, 4, 2, 1, 1, 2], + [1, 4, 2, 2, 1, 1], + [2, 4, 1, 2, 1, 1], + [2, 2, 1, 1, 1, 4], + [4, 1, 3, 1, 1, 1], + [2, 4, 1, 1, 1, 2], + [1, 3, 4, 1, 1, 1], + [1, 1, 1, 2, 4, 2], + [1, 2, 1, 1, 4, 2], + [1, 2, 1, 2, 4, 1], + [1, 1, 4, 2, 1, 2], + [1, 2, 4, 1, 1, 2], + [1, 2, 4, 2, 1, 1], + [4, 1, 1, 2, 1, 2], + [4, 2, 1, 1, 1, 2], + [4, 2, 1, 2, 1, 1], + [2, 1, 2, 1, 4, 1], + [2, 1, 4, 1, 2, 1], + [4, 1, 2, 1, 2, 1], + [1, 1, 1, 1, 4, 3], + [1, 1, 1, 3, 4, 1], + [1, 3, 1, 1, 4, 1], + [1, 1, 4, 1, 1, 3], + [1, 1, 4, 3, 1, 1], + [4, 1, 1, 1, 1, 3], + [4, 1, 1, 3, 1, 1], + [1, 1, 3, 1, 4, 1], + [1, 1, 4, 1, 3, 1], + [3, 1, 1, 1, 4, 1], + [4, 1, 1, 1, 3, 1], + [2, 1, 1, 4, 1, 2], + [2, 1, 1, 2, 1, 4], + [2, 1, 1, 2, 3, 2], + [2, 3, 3, 1, 1, 1, 2]]; + + private static MAX_AVG_VARIANCE = 0.25; + private static MAX_INDIVIDUAL_VARIANCE = 0.7; + + private static CODE_SHIFT = 98; + + private static CODE_CODE_C = 99; + private static CODE_CODE_B = 100; + private static CODE_CODE_A = 101; + + private static CODE_FNC_1 = 102; + private static CODE_FNC_2 = 97; + private static CODE_FNC_3 = 96; + private static CODE_FNC_4_A = 101; + private static CODE_FNC_4_B = 100; + + private static CODE_START_A = 103; + private static CODE_START_B = 104; + private static CODE_START_C = 105; + private static CODE_STOP = 106; + + private static findStartPattern(row: BitArray): number[] { + const width = row.getSize(); + const rowOffset = row.getNextSet(0); + + let counterPosition = 0; + const counters = [0, 0, 0, 0, 0, 0]; + let patternStart = rowOffset; + let isWhite = false; + const patternLength = 6; + + for (let i = rowOffset; i < width; i++) { + if (row.get(i) !== isWhite) { + counters[counterPosition]++; + } else { + if (counterPosition === (patternLength - 1)) { + let bestVariance = Code128Reader.MAX_AVG_VARIANCE; + let bestMatch = -1; + for (let startCode = Code128Reader.CODE_START_A; startCode <= Code128Reader.CODE_START_C; startCode++) { + const variance = OneDReader.patternMatchVariance(counters, + Code128Reader.CODE_PATTERNS[startCode], Code128Reader.MAX_INDIVIDUAL_VARIANCE); + if (variance < bestVariance) { + bestVariance = variance; + bestMatch = startCode; + } + } + // Look for whitespace before start pattern, >= 50% of width of start pattern + if (bestMatch >= 0 && + row.isRange(Math.max(0, patternStart - (i - patternStart) / 2), patternStart, false)) { + return [patternStart, i, bestMatch]; + } + patternStart += counters[0] + counters[1]; + + counters.splice(0, 2); + counters[counterPosition - 1] = 0; + counters[counterPosition] = 0; + counterPosition--; + } else { + counterPosition++; + } + counters[counterPosition] = 1; + isWhite = !isWhite; + } + } + throw new Exception(Exception.NotFoundException); + } + + private static decodeCode(row: BitArray, counters: number[], rowOffset: number): number { + OneDReader.recordPattern(row, rowOffset, counters); + let bestVariance = Code128Reader.MAX_AVG_VARIANCE; // worst variance we'll accept + let bestMatch = -1; + for (let d = 0; d < Code128Reader.CODE_PATTERNS.length; d++) { + const pattern = Code128Reader.CODE_PATTERNS[d]; + const variance = this.patternMatchVariance(counters, pattern, Code128Reader.MAX_INDIVIDUAL_VARIANCE); if (variance < bestVariance) { - bestVariance = variance; - bestMatch = startCode; + bestVariance = variance; + bestMatch = d; } - } - // Look for whitespace before start pattern, >= 50% of width of start pattern - if (bestMatch >= 0 && - row.isRange(Math.max(0, patternStart - (i - patternStart) / 2), patternStart, false)) { - return [patternStart, i, bestMatch]; - } - patternStart += counters[0] + counters[1]; - - counters.splice(0, 2); - counters[counterPosition - 1] = 0; - counters[counterPosition] = 0; - counterPosition--; + } + // TODO We're overlooking the fact that the STOP pattern has 7 values, not 6. + if (bestMatch >= 0) { + return bestMatch; } else { - counterPosition++; + throw new Exception(Exception.NotFoundException); } - counters[counterPosition] = 1; - isWhite = !isWhite; - } - } - throw new Exception(Exception.NotFoundException); - } - - private static decodeCode(row: BitArray, counters: number[], rowOffset: number): number { - OneDReader.recordPattern(row, rowOffset, counters); - let bestVariance = Code128Reader.MAX_AVG_VARIANCE; // worst variance we'll accept - let bestMatch = -1; - for (let d = 0; d < Code128Reader.CODE_PATTERNS.length; d++) { - const pattern = Code128Reader.CODE_PATTERNS[d]; - const variance = this.patternMatchVariance(counters, pattern, Code128Reader.MAX_INDIVIDUAL_VARIANCE); - if (variance < bestVariance) { - bestVariance = variance; - bestMatch = d; - } - } - // TODO We're overlooking the fact that the STOP pattern has 7 values, not 6. - if (bestMatch >= 0) { - return bestMatch; - } else { - throw new Exception(Exception.NotFoundException); - } - } - - public decodeRow(rowNumber: number, row: BitArray, hints?: Map): Result { - const convertFNC1 = hints && (hints.get(DecodeHintType.ASSUME_GS1) === true); - - const startPatternInfo = Code128Reader.findStartPattern(row); - const startCode = startPatternInfo[2]; - - let currentRawCodesIndex = 0; - const rawCodes: Uint8Array = new Uint8Array(20); - rawCodes[currentRawCodesIndex++] = startCode; - - let codeSet; - switch (startCode) { - case Code128Reader.CODE_START_A: - codeSet = Code128Reader.CODE_CODE_A; - break; - case Code128Reader.CODE_START_B: - codeSet = Code128Reader.CODE_CODE_B; - break; - case Code128Reader.CODE_START_C: - codeSet = Code128Reader.CODE_CODE_C; - break; - default: - throw new Exception(Exception.FormatException); } - let done = false; - let isNextShifted = false; + public decodeRow(rowNumber: number, row: BitArray, hints?: Map): Result { + const convertFNC1 = hints && (hints.get(DecodeHintType.ASSUME_GS1) === true); - let result = ''; + const startPatternInfo = Code128Reader.findStartPattern(row); + const startCode = startPatternInfo[2]; - let lastStart = startPatternInfo[0]; - let nextStart = startPatternInfo[1]; - const counters: number[] = [0, 0, 0, 0, 0, 0]; + let currentRawCodesIndex = 0; + const rawCodes: Uint8Array = new Uint8Array(20); + rawCodes[currentRawCodesIndex++] = startCode; - let lastCode = 0; - let code = 0; - let checksumTotal = startCode; - let multiplier = 0; - let lastCharacterWasPrintable = true; - let upperMode = false; - let shiftUpperMode = false; - - while (!done) { + let codeSet; + switch (startCode) { + case Code128Reader.CODE_START_A: + codeSet = Code128Reader.CODE_CODE_A; + break; + case Code128Reader.CODE_START_B: + codeSet = Code128Reader.CODE_CODE_B; + break; + case Code128Reader.CODE_START_C: + codeSet = Code128Reader.CODE_CODE_C; + break; + default: + throw new Exception(Exception.FormatException); + } - const unshift = isNextShifted; - isNextShifted = false; + let done = false; + let isNextShifted = false; - // Save off last code - lastCode = code; + let result = ''; - // Decode another code from image - code = Code128Reader.decodeCode(row, counters, nextStart); + let lastStart = startPatternInfo[0]; + let nextStart = startPatternInfo[1]; + const counters: number[] = [0, 0, 0, 0, 0, 0]; - rawCodes[currentRawCodesIndex++] = code; + let lastCode = 0; + let code = 0; + let checksumTotal = startCode; + let multiplier = 0; + let lastCharacterWasPrintable = true; + let upperMode = false; + let shiftUpperMode = false; - // Remember whether the last code was printable or not (excluding CODE_STOP) - if (code !== Code128Reader.CODE_STOP) { - lastCharacterWasPrintable = true; - } + while (!done) { - // Add to checksum computation (if not CODE_STOP of course) - if (code !== Code128Reader.CODE_STOP) { - multiplier++; - checksumTotal += multiplier * code; - } + const unshift = isNextShifted; + isNextShifted = false; - // Advance to where the next code will to start - lastStart = nextStart; - nextStart += counters.reduce((previous, current) => previous + current, 0); + // Save off last code + lastCode = code; - // Take care of illegal start codes - switch (code) { - case Code128Reader.CODE_START_A: - case Code128Reader.CODE_START_B: - case Code128Reader.CODE_START_C: - throw new Exception(Exception.FormatException); - } + // Decode another code from image + code = Code128Reader.decodeCode(row, counters, nextStart); - switch (codeSet) { + rawCodes[currentRawCodesIndex++] = code; - case Code128Reader.CODE_CODE_A: - if (code < 64) { - if (shiftUpperMode === upperMode) { - result += String.fromCharCode((' '.charCodeAt(0) + code)); - } else { - result += String.fromCharCode((' '.charCodeAt(0) + code + 128)); - } - shiftUpperMode = false; - } else if (code < 96) { - if (shiftUpperMode === upperMode) { - result += String.fromCharCode((code - 64)); - } else { - result += String.fromCharCode((code + 64)); - } - shiftUpperMode = false; - } else { - // Don't let CODE_STOP, which always appears, affect whether whether we think the last - // code was printable or not. + // Remember whether the last code was printable or not (excluding CODE_STOP) if (code !== Code128Reader.CODE_STOP) { - lastCharacterWasPrintable = false; + lastCharacterWasPrintable = true; } - switch (code) { - case Code128Reader.CODE_FNC_1: - if (convertFNC1) { - if (result.length === 0) { - // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code - // is FNC1 then this is GS1-128. We add the symbology identifier. - result += ']C1'; - } else { - // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS) - result += String.fromCharCode(29); - } - } - break; - case Code128Reader.CODE_FNC_2: - case Code128Reader.CODE_FNC_3: - // do nothing? - break; - case Code128Reader.CODE_FNC_4_A: - if (!upperMode && shiftUpperMode) { - upperMode = true; - shiftUpperMode = false; - } else if (upperMode && shiftUpperMode) { - upperMode = false; - shiftUpperMode = false; - } else { - shiftUpperMode = true; - } - break; - case Code128Reader.CODE_SHIFT: - isNextShifted = true; - codeSet = Code128Reader.CODE_CODE_B; - break; - case Code128Reader.CODE_CODE_B: - codeSet = Code128Reader.CODE_CODE_B; - break; - case Code128Reader.CODE_CODE_C: - codeSet = Code128Reader.CODE_CODE_C; - break; - case Code128Reader.CODE_STOP: - done = true; - break; - } - } - break; - case Code128Reader.CODE_CODE_B: - if (code < 96) { - if (shiftUpperMode === upperMode) { - result += String.fromCharCode((' '.charCodeAt(0) + code)); - } else { - result += String.fromCharCode((' '.charCodeAt(0) + code + 128)); - } - shiftUpperMode = false; - } else { + + // Add to checksum computation (if not CODE_STOP of course) if (code !== Code128Reader.CODE_STOP) { - lastCharacterWasPrintable = false; + multiplier++; + checksumTotal += multiplier * code; } + + // Advance to where the next code will to start + lastStart = nextStart; + nextStart += counters.reduce((previous, current) => previous + current, 0); + + // Take care of illegal start codes switch (code) { - case Code128Reader.CODE_FNC_1: - if (convertFNC1) { - if (result.length === 0) { - // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code - // is FNC1 then this is GS1-128. We add the symbology identifier. - result += ']C1'; - } else { - // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS) - result += String.fromCharCode(29); - } - } - break; - case Code128Reader.CODE_FNC_2: - case Code128Reader.CODE_FNC_3: - // do nothing? - break; - case Code128Reader.CODE_FNC_4_B: - if (!upperMode && shiftUpperMode) { - upperMode = true; - shiftUpperMode = false; - } else if (upperMode && shiftUpperMode) { - upperMode = false; - shiftUpperMode = false; - } else { - shiftUpperMode = true; - } - break; - case Code128Reader.CODE_SHIFT: - isNextShifted = true; - codeSet = Code128Reader.CODE_CODE_A; - break; - case Code128Reader.CODE_CODE_A: - codeSet = Code128Reader.CODE_CODE_A; - break; - case Code128Reader.CODE_CODE_C: - codeSet = Code128Reader.CODE_CODE_C; - break; - case Code128Reader.CODE_STOP: - done = true; - break; + case Code128Reader.CODE_START_A: + case Code128Reader.CODE_START_B: + case Code128Reader.CODE_START_C: + throw new Exception(Exception.FormatException); } - } - break; - case Code128Reader.CODE_CODE_C: - if (code < 100) { - if (code < 10) { - result += '0'; - } - result += code; - } else { - if (code !== Code128Reader.CODE_STOP) { - lastCharacterWasPrintable = false; + + switch (codeSet) { + + case Code128Reader.CODE_CODE_A: + if (code < 64) { + if (shiftUpperMode === upperMode) { + result += String.fromCharCode((' '.charCodeAt(0) + code)); + } else { + result += String.fromCharCode((' '.charCodeAt(0) + code + 128)); + } + shiftUpperMode = false; + } else if (code < 96) { + if (shiftUpperMode === upperMode) { + result += String.fromCharCode((code - 64)); + } else { + result += String.fromCharCode((code + 64)); + } + shiftUpperMode = false; + } else { + // Don't let CODE_STOP, which always appears, affect whether whether we think the last + // code was printable or not. + if (code !== Code128Reader.CODE_STOP) { + lastCharacterWasPrintable = false; + } + switch (code) { + case Code128Reader.CODE_FNC_1: + if (convertFNC1) { + if (result.length === 0) { + // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code + // is FNC1 then this is GS1-128. We add the symbology identifier. + result += ']C1'; + } else { + // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS) + result += String.fromCharCode(29); + } + } + break; + case Code128Reader.CODE_FNC_2: + case Code128Reader.CODE_FNC_3: + // do nothing? + break; + case Code128Reader.CODE_FNC_4_A: + if (!upperMode && shiftUpperMode) { + upperMode = true; + shiftUpperMode = false; + } else if (upperMode && shiftUpperMode) { + upperMode = false; + shiftUpperMode = false; + } else { + shiftUpperMode = true; + } + break; + case Code128Reader.CODE_SHIFT: + isNextShifted = true; + codeSet = Code128Reader.CODE_CODE_B; + break; + case Code128Reader.CODE_CODE_B: + codeSet = Code128Reader.CODE_CODE_B; + break; + case Code128Reader.CODE_CODE_C: + codeSet = Code128Reader.CODE_CODE_C; + break; + case Code128Reader.CODE_STOP: + done = true; + break; + } + } + break; + case Code128Reader.CODE_CODE_B: + if (code < 96) { + if (shiftUpperMode === upperMode) { + result += String.fromCharCode((' '.charCodeAt(0) + code)); + } else { + result += String.fromCharCode((' '.charCodeAt(0) + code + 128)); + } + shiftUpperMode = false; + } else { + if (code !== Code128Reader.CODE_STOP) { + lastCharacterWasPrintable = false; + } + switch (code) { + case Code128Reader.CODE_FNC_1: + if (convertFNC1) { + if (result.length === 0) { + // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code + // is FNC1 then this is GS1-128. We add the symbology identifier. + result += ']C1'; + } else { + // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS) + result += String.fromCharCode(29); + } + } + break; + case Code128Reader.CODE_FNC_2: + case Code128Reader.CODE_FNC_3: + // do nothing? + break; + case Code128Reader.CODE_FNC_4_B: + if (!upperMode && shiftUpperMode) { + upperMode = true; + shiftUpperMode = false; + } else if (upperMode && shiftUpperMode) { + upperMode = false; + shiftUpperMode = false; + } else { + shiftUpperMode = true; + } + break; + case Code128Reader.CODE_SHIFT: + isNextShifted = true; + codeSet = Code128Reader.CODE_CODE_A; + break; + case Code128Reader.CODE_CODE_A: + codeSet = Code128Reader.CODE_CODE_A; + break; + case Code128Reader.CODE_CODE_C: + codeSet = Code128Reader.CODE_CODE_C; + break; + case Code128Reader.CODE_STOP: + done = true; + break; + } + } + break; + case Code128Reader.CODE_CODE_C: + if (code < 100) { + if (code < 10) { + result += '0'; + } + result += code; + } else { + if (code !== Code128Reader.CODE_STOP) { + lastCharacterWasPrintable = false; + } + switch (code) { + case Code128Reader.CODE_FNC_1: + if (convertFNC1) { + if (result.length === 0) { + // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code + // is FNC1 then this is GS1-128. We add the symbology identifier. + result += ']C1'; + } else { + // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS) + result += String.fromCharCode(29); + } + } + break; + case Code128Reader.CODE_CODE_A: + codeSet = Code128Reader.CODE_CODE_A; + break; + case Code128Reader.CODE_CODE_B: + codeSet = Code128Reader.CODE_CODE_B; + break; + case Code128Reader.CODE_STOP: + done = true; + break; + } + } + break; } - switch (code) { - case Code128Reader.CODE_FNC_1: - if (convertFNC1) { - if (result.length === 0) { - // GS1 specification 5.4.3.7. and 5.4.6.4. If the first char after the start code - // is FNC1 then this is GS1-128. We add the symbology identifier. - result += ']C1'; - } else { - // GS1 specification 5.4.7.5. Every subsequent FNC1 is returned as ASCII 29 (GS) - result += String.fromCharCode(29); - } - } - break; - case Code128Reader.CODE_CODE_A: - codeSet = Code128Reader.CODE_CODE_A; - break; - case Code128Reader.CODE_CODE_B: - codeSet = Code128Reader.CODE_CODE_B; - break; - case Code128Reader.CODE_STOP: - done = true; - break; + + // Unshift back to another code set if we were shifted + if (unshift) { + codeSet = codeSet === Code128Reader.CODE_CODE_A ? Code128Reader.CODE_CODE_B : Code128Reader.CODE_CODE_A; } - } - break; - } - // Unshift back to another code set if we were shifted - if (unshift) { - codeSet = codeSet === Code128Reader.CODE_CODE_A ? Code128Reader.CODE_CODE_B : Code128Reader.CODE_CODE_A; - } + } - } + const lastPatternSize = nextStart - lastStart; - const lastPatternSize = nextStart - lastStart; + // Check for ample whitespace following pattern, but, to do this we first need to remember that + // we fudged decoding CODE_STOP since it actually has 7 bars, not 6. There is a black bar left + // to read off. Would be slightly better to properly read. Here we just skip it: + nextStart = row.getNextUnset(nextStart); + if (!row.isRange(nextStart, + Math.min(row.getSize(), nextStart + (nextStart - lastStart) / 2), + false)) { + throw new Exception(Exception.NotFoundException); + } - // Check for ample whitespace following pattern, but, to do this we first need to remember that - // we fudged decoding CODE_STOP since it actually has 7 bars, not 6. There is a black bar left - // to read off. Would be slightly better to properly read. Here we just skip it: - nextStart = row.getNextUnset(nextStart); - if (!row.isRange(nextStart, - Math.min(row.getSize(), nextStart + (nextStart - lastStart) / 2), - false)) { - throw new Exception(Exception.NotFoundException); - } + // Pull out from sum the value of the penultimate check code + checksumTotal -= multiplier * lastCode; + // lastCode is the checksum then: + if (checksumTotal % 103 !== lastCode) { + throw new Exception(Exception.ChecksumException); + } - // Pull out from sum the value of the penultimate check code - checksumTotal -= multiplier * lastCode; - // lastCode is the checksum then: - if (checksumTotal % 103 !== lastCode) { - throw new Exception(Exception.ChecksumException); - } + // Need to pull out the check digits from string + const resultLength = result.length; + if (resultLength === 0) { + // false positive + throw new Exception(Exception.NotFoundException); + } - // Need to pull out the check digits from string - const resultLength = result.length; - if (resultLength === 0) { - // false positive - throw new Exception(Exception.NotFoundException); - } + // Only bother if the result had at least one character, and if the checksum digit happened to + // be a printable character. If it was just interpreted as a control code, nothing to remove. + if (resultLength > 0 && lastCharacterWasPrintable) { + if (codeSet === Code128Reader.CODE_CODE_C) { + result = result.substring(0, resultLength - 2); + } else { + result = result.substring(0, resultLength - 1); + } + } - // Only bother if the result had at least one character, and if the checksum digit happened to - // be a printable character. If it was just interpreted as a control code, nothing to remove. - if (resultLength > 0 && lastCharacterWasPrintable) { - if (codeSet === Code128Reader.CODE_CODE_C) { - result = result.substring(0, resultLength - 2); - } else { - result = result.substring(0, resultLength - 1); - } - } + const left = (startPatternInfo[1] + startPatternInfo[0]) / 2.0; + const right = lastStart + lastPatternSize / 2.0; - const left = (startPatternInfo[1] + startPatternInfo[0]) / 2.0; - const right = lastStart + lastPatternSize / 2.0; + const rawCodesSize = rawCodes.length; + const rawBytes: Uint8Array = new Uint8Array(rawCodesSize); - const rawCodesSize = rawCodes.length; - const rawBytes: Uint8Array = new Uint8Array(rawCodesSize); - for (let i = 0; i < rawCodesSize; i++) { - rawBytes[i] = rawCodes[i]; - } + for (let i = 0; i < rawCodesSize; i++) { + rawBytes[i] = rawCodes[i]; + } - const points: ResultPoint[] = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)]; + const points: ResultPoint[] = [new ResultPoint(left, rowNumber), new ResultPoint(right, rowNumber)]; - return new Result(result, rawBytes, 0, points, BarcodeFormat.CODE_128, new Date().getTime()); - } -} \ No newline at end of file + return new Result(result, rawBytes, 0, points, BarcodeFormat.CODE_128, new Date().getTime()); + } +} diff --git a/src/core/oned/MultiFormatOneDReader.ts b/src/core/oned/MultiFormatOneDReader.ts index 6ccd3bd3..2e0e542f 100644 --- a/src/core/oned/MultiFormatOneDReader.ts +++ b/src/core/oned/MultiFormatOneDReader.ts @@ -30,69 +30,69 @@ import Exception from '../Exception'; */ export default class MultiFormatOneDReader extends OneDReader { - private readers: OneDReader[] = []; + private readers: OneDReader[] = []; - public constructor(hints: Map) { - super(); - const possibleFormats = !hints ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS); - const useCode39CheckDigit = hints && hints.get(DecodeHintType.ASSUME_CODE_39_CHECK_DIGIT) !== undefined; + public constructor(hints: Map) { + super(); + const possibleFormats = !hints ? null : hints.get(DecodeHintType.POSSIBLE_FORMATS); + const useCode39CheckDigit = hints && hints.get(DecodeHintType.ASSUME_CODE_39_CHECK_DIGIT) !== undefined; - if (possibleFormats) { - // if (possibleFormats.get(BarcodeFormat.EAN_13) || - // possibleFormats.get(BarcodeFormat.UPC_A) || - // possibleFormats.get(BarcodeFormat.EAN_8) || - // possibleFormats.get(BarcodeFormat.UPC_E)) { - // readers.push(new MultiFormatUPCEANReader(hints)); - // } - // if (possibleFormats.get(BarcodeFormat.CODE_39)) { - // this.readers.push(new Code39Reader(useCode39CheckDigit)); - // } - // if (possibleFormats.get(BarcodeFormat.CODE_93)) { - // this.readers.push(new Code93Reader()); - // } - if (possibleFormats.get(BarcodeFormat.CODE_128)) { - this.readers.push(new Code128Reader()); - } - // if (possibleFormats.get(BarcodeFormat.ITF)) { - // this.readers.push(new ITFReader()); - // } - // if (possibleFormats.get(BarcodeFormat.CODABAR)) { - // this.readers.push(new CodaBarReader()); - // } - // if (possibleFormats.get(BarcodeFormat.RSS_14)) { - // this.readers.push(new RSS14Reader()); - // } - // if (possibleFormats.get(BarcodeFormat.RSS_EXPANDED)) { - // this.readers.push(new RSSExpandedReader()); - // } + if (possibleFormats) { + // if (possibleFormats.get(BarcodeFormat.EAN_13) || + // possibleFormats.get(BarcodeFormat.UPC_A) || + // possibleFormats.get(BarcodeFormat.EAN_8) || + // possibleFormats.get(BarcodeFormat.UPC_E)) { + // readers.push(new MultiFormatUPCEANReader(hints)); + // } + // if (possibleFormats.get(BarcodeFormat.CODE_39)) { + // this.readers.push(new Code39Reader(useCode39CheckDigit)); + // } + // if (possibleFormats.get(BarcodeFormat.CODE_93)) { + // this.readers.push(new Code93Reader()); + // } + if (possibleFormats.get(BarcodeFormat.CODE_128)) { + this.readers.push(new Code128Reader()); + } + // if (possibleFormats.get(BarcodeFormat.ITF)) { + // this.readers.push(new ITFReader()); + // } + // if (possibleFormats.get(BarcodeFormat.CODABAR)) { + // this.readers.push(new CodaBarReader()); + // } + // if (possibleFormats.get(BarcodeFormat.RSS_14)) { + // this.readers.push(new RSS14Reader()); + // } + // if (possibleFormats.get(BarcodeFormat.RSS_EXPANDED)) { + // this.readers.push(new RSSExpandedReader()); + // } + } + if (this.readers.length === 0) { + // this.readers.push(new MultiFormatUPCEANReader(hints)); + // this.readers.push(new Code39Reader()); + // this.readers.push(new CodaBarReader()); + // this.readers.push(new Code93Reader()); + this.readers.push(new Code128Reader()); + // this.readers.push(new ITFReader()); + // this.readers.push(new RSS14Reader()); + // this.readers.push(new RSSExpandedReader()); + } } - if (this.readers.length === 0) { - // this.readers.push(new MultiFormatUPCEANReader(hints)); - // this.readers.push(new Code39Reader()); - // this.readers.push(new CodaBarReader()); - // this.readers.push(new Code93Reader()); - this.readers.push(new Code128Reader()); - // this.readers.push(new ITFReader()); - // this.readers.push(new RSS14Reader()); - // this.readers.push(new RSSExpandedReader()); - } - } - // @Override - public decodeRow(rowNumber: number, row: BitArray, hints: Map): Result { - for (let i = 0; i < this.readers.length; i++) { - try { - return this.readers[i].decodeRow(rowNumber, row, hints); - } catch (re) { - // continue - } - } + // @Override + public decodeRow(rowNumber: number, row: BitArray, hints: Map): Result { + for (let i = 0; i < this.readers.length; i++) { + try { + return this.readers[i].decodeRow(rowNumber, row, hints); + } catch (re) { + // continue + } + } - throw new Exception(Exception.NotFoundException); - } + throw new Exception(Exception.NotFoundException); + } - // @Override - public reset(): void { - this.readers.forEach(reader => reader.reset()); - } + // @Override + public reset(): void { + this.readers.forEach(reader => reader.reset()); + } } diff --git a/src/core/oned/OneDReader.ts b/src/core/oned/OneDReader.ts index 5ccf8619..bcd8ebaa 100644 --- a/src/core/oned/OneDReader.ts +++ b/src/core/oned/OneDReader.ts @@ -34,253 +34,253 @@ import ResultPoint from '../ResultPoint'; */ export default abstract class OneDReader implements Reader { - /* - @Override - public Result decode(BinaryBitmap image) throws NotFoundException, FormatException { - return decode(image, null); - } - */ + /* + @Override + public Result decode(BinaryBitmap image) throws NotFoundException, FormatException { + return decode(image, null); + } + */ - // Note that we don't try rotation without the try harder flag, even if rotation was supported. - // @Override - public decode(image: BinaryBitmap, hints?: Map): Result { - try { - return this.doDecode(image, hints); - } catch (nfe) { - const tryHarder = hints && (hints.get(DecodeHintType.TRY_HARDER) === true); + // Note that we don't try rotation without the try harder flag, even if rotation was supported. + // @Override + public decode(image: BinaryBitmap, hints?: Map): Result { + try { + return this.doDecode(image, hints); + } catch (nfe) { + const tryHarder = hints && (hints.get(DecodeHintType.TRY_HARDER) === true); - if (tryHarder && image.isRotateSupported()) { - const rotatedImage = image.rotateCounterClockwise(); - const result = this.doDecode(rotatedImage, hints); - // Record that we found it rotated 90 degrees CCW / 270 degrees CW - const metadata = result.getResultMetadata(); - let orientation = 270; - if (metadata !== null && (metadata.get(ResultMetadataType.ORIENTATION) === true)) { - // But if we found it reversed in doDecode(), add in that result here: - orientation = (orientation + (metadata.get(ResultMetadataType.ORIENTATION) as number) % 360); - } - result.putMetadata(ResultMetadataType.ORIENTATION, orientation); - // Update result points - const points = result.getResultPoints(); - if (points !== null) { - const height = rotatedImage.getHeight(); - for (let i = 0; i < points.length; i++) { - points[i] = new ResultPoint(height - points[i].getY() - 1, points[i].getX()); - } + if (tryHarder && image.isRotateSupported()) { + const rotatedImage = image.rotateCounterClockwise(); + const result = this.doDecode(rotatedImage, hints); + // Record that we found it rotated 90 degrees CCW / 270 degrees CW + const metadata = result.getResultMetadata(); + let orientation = 270; + if (metadata !== null && (metadata.get(ResultMetadataType.ORIENTATION) === true)) { + // But if we found it reversed in doDecode(), add in that result here: + orientation = (orientation + (metadata.get(ResultMetadataType.ORIENTATION) as number) % 360); + } + result.putMetadata(ResultMetadataType.ORIENTATION, orientation); + // Update result points + const points = result.getResultPoints(); + if (points !== null) { + const height = rotatedImage.getHeight(); + for (let i = 0; i < points.length; i++) { + points[i] = new ResultPoint(height - points[i].getY() - 1, points[i].getX()); + } + } + return result; + } else { + throw new Exception(Exception.NotFoundException); + } } - return result; - } else { - throw new Exception(Exception.NotFoundException); - } } - } - // @Override - public reset(): void { - // do nothing - } + // @Override + public reset(): void { + // do nothing + } - /** - * We're going to examine rows from the middle outward, searching alternately above and below the - * middle, and farther out each time. rowStep is the number of rows between each successive - * attempt above and below the middle. So we'd scan row middle, then middle - rowStep, then - * middle + rowStep, then middle - (2 * rowStep), etc. - * rowStep is bigger as the image is taller, but is always at least 1. We've somewhat arbitrarily - * decided that moving up and down by about 1/16 of the image is pretty good; we try more of the - * image if "trying harder". - * - * @param image The image to decode - * @param hints Any hints that were requested - * @return The contents of the decoded barcode - * @throws NotFoundException Any spontaneous errors which occur - */ - private doDecode(image: BinaryBitmap, hints?: Map): Result { - const width = image.getWidth(); - const height = image.getHeight(); - let row = new BitArray(width); + /** + * We're going to examine rows from the middle outward, searching alternately above and below the + * middle, and farther out each time. rowStep is the number of rows between each successive + * attempt above and below the middle. So we'd scan row middle, then middle - rowStep, then + * middle + rowStep, then middle - (2 * rowStep), etc. + * rowStep is bigger as the image is taller, but is always at least 1. We've somewhat arbitrarily + * decided that moving up and down by about 1/16 of the image is pretty good; we try more of the + * image if "trying harder". + * + * @param image The image to decode + * @param hints Any hints that were requested + * @return The contents of the decoded barcode + * @throws NotFoundException Any spontaneous errors which occur + */ + private doDecode(image: BinaryBitmap, hints?: Map): Result { + const width = image.getWidth(); + const height = image.getHeight(); + let row = new BitArray(width); - const tryHarder = hints && (hints.get(DecodeHintType.TRY_HARDER) === true); - const rowStep = Math.max(1, height >> (tryHarder ? 8 : 5)); - let maxLines; - if (tryHarder) { - maxLines = height; // Look at the whole image, not just the center - } else { - maxLines = 15; // 15 rows spaced 1/32 apart is roughly the middle half of the image - } + const tryHarder = hints && (hints.get(DecodeHintType.TRY_HARDER) === true); + const rowStep = Math.max(1, height >> (tryHarder ? 8 : 5)); + let maxLines; + if (tryHarder) { + maxLines = height; // Look at the whole image, not just the center + } else { + maxLines = 15; // 15 rows spaced 1/32 apart is roughly the middle half of the image + } - const middle = Math.trunc(height / 2); - for (let x = 0; x < maxLines; x++) { - // Scanning from the middle out. Determine which row we're looking at next: - const rowStepsAboveOrBelow = Math.trunc((x + 1) / 2); - const isAbove = (x & 0x01) === 0; // i.e. is x even? - const rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow); - if (rowNumber < 0 || rowNumber >= height) { - // Oops, if we run off the top or bottom, stop - break; - } + const middle = Math.trunc(height / 2); + for (let x = 0; x < maxLines; x++) { + // Scanning from the middle out. Determine which row we're looking at next: + const rowStepsAboveOrBelow = Math.trunc((x + 1) / 2); + const isAbove = (x & 0x01) === 0; // i.e. is x even? + const rowNumber = middle + rowStep * (isAbove ? rowStepsAboveOrBelow : -rowStepsAboveOrBelow); + if (rowNumber < 0 || rowNumber >= height) { + // Oops, if we run off the top or bottom, stop + break; + } - // Estimate black point for this row and load it: - try { - row = image.getBlackRow(rowNumber, row); - } catch (ignored) { continue; } + // Estimate black point for this row and load it: + try { + row = image.getBlackRow(rowNumber, row); + } catch (ignored) { continue; } - // While we have the image data in a BitArray, it's fairly cheap to reverse it in place to - // handle decoding upside down barcodes. - for (let attempt = 0; attempt < 2; attempt++) { - if (attempt === 1) { // trying again? - row.reverse(); // reverse the row and continue + // While we have the image data in a BitArray, it's fairly cheap to reverse it in place to + // handle decoding upside down barcodes. + for (let attempt = 0; attempt < 2; attempt++) { + if (attempt === 1) { // trying again? + row.reverse(); // reverse the row and continue - // This means we will only ever draw result points *once* in the life of this method - // since we want to avoid drawing the wrong points after flipping the row, and, - // don't want to clutter with noise from every single row scan -- just the scans - // that start on the center line. - if (hints && (hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK) === true)) { - const newHints = new Map(); - hints.forEach((hint, key) => newHints.set(key, hint)); - newHints.delete(DecodeHintType.NEED_RESULT_POINT_CALLBACK); - hints = newHints; - } - } + // This means we will only ever draw result points *once* in the life of this method + // since we want to avoid drawing the wrong points after flipping the row, and, + // don't want to clutter with noise from every single row scan -- just the scans + // that start on the center line. + if (hints && (hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK) === true)) { + const newHints = new Map(); + hints.forEach((hint, key) => newHints.set(key, hint)); + newHints.delete(DecodeHintType.NEED_RESULT_POINT_CALLBACK); + hints = newHints; + } + } - try { - // Look for a barcode - const result = this.decodeRow(rowNumber, row, hints); - // We found our barcode - if (attempt === 1) { - // But it was upside down, so note that - result.putMetadata(ResultMetadataType.ORIENTATION, 180); - // And remember to flip the result points horizontally. - const points = result.getResultPoints(); - if (points !== null) { - points[0] = new ResultPoint(width - points[0].getX() - 1, points[0].getY()); - points[1] = new ResultPoint(width - points[1].getX() - 1, points[1].getY()); + try { + // Look for a barcode + const result = this.decodeRow(rowNumber, row, hints); + // We found our barcode + if (attempt === 1) { + // But it was upside down, so note that + result.putMetadata(ResultMetadataType.ORIENTATION, 180); + // And remember to flip the result points horizontally. + const points = result.getResultPoints(); + if (points !== null) { + points[0] = new ResultPoint(width - points[0].getX() - 1, points[0].getY()); + points[1] = new ResultPoint(width - points[1].getX() - 1, points[1].getY()); + } + } + return result; + } catch (re) { + // continue -- just couldn't decode this row + } } - } - return result; - } catch (re) { - // continue -- just couldn't decode this row } - } + + throw new Exception(Exception.NotFoundException); } - throw new Exception(Exception.NotFoundException); - } + /** + * Records the size of successive runs of white and black pixels in a row, starting at a given point. + * The values are recorded in the given array, and the number of runs recorded is equal to the size + * of the array. If the row starts on a white pixel at the given start point, then the first count + * recorded is the run of white pixels starting from that point; likewise it is the count of a run + * of black pixels if the row begin on a black pixels at that point. + * + * @param row row to count from + * @param start offset into row to start at + * @param counters array into which to record counts + * @throws NotFoundException if counters cannot be filled entirely from row before running out + * of pixels + */ + protected static recordPattern(row: BitArray, start: number, counters: number[]): void { + const numCounters = counters.length; + for (let index = 0; index < numCounters; index++) + counters[index] = 0; - /** - * Records the size of successive runs of white and black pixels in a row, starting at a given point. - * The values are recorded in the given array, and the number of runs recorded is equal to the size - * of the array. If the row starts on a white pixel at the given start point, then the first count - * recorded is the run of white pixels starting from that point; likewise it is the count of a run - * of black pixels if the row begin on a black pixels at that point. - * - * @param row row to count from - * @param start offset into row to start at - * @param counters array into which to record counts - * @throws NotFoundException if counters cannot be filled entirely from row before running out - * of pixels - */ - protected static recordPattern(row: BitArray, start: number, counters: number[]): void { - const numCounters = counters.length; - for (let index = 0; index < numCounters; index++) - counters[index] = 0; + const end = row.getSize(); + if (start >= end) { + throw new Exception(Exception.NotFoundException); + } - const end = row.getSize(); - if (start >= end) { - throw new Exception(Exception.NotFoundException); - } + let isWhite = !row.get(start); + let counterPosition = 0; + let i = start; + while (i < end) { + if (row.get(i) !== isWhite) { + counters[counterPosition]++; + } else { + if (++counterPosition === numCounters) { + break; + } else { + counters[counterPosition] = 1; + isWhite = !isWhite; + } + } + i++; + } - let isWhite = !row.get(start); - let counterPosition = 0; - let i = start; - while (i < end) { - if (row.get(i) !== isWhite) { - counters[counterPosition]++; - } else { - if (++counterPosition === numCounters) { - break; - } else { - counters[counterPosition] = 1; - isWhite = !isWhite; + // If we read fully the last section of pixels and filled up our counters -- or filled + // the last counter but ran off the side of the image, OK. Otherwise, a problem. + if (!(counterPosition === numCounters || (counterPosition === numCounters - 1 && i === end))) { + throw new Exception(Exception.NotFoundException); } - } - i++; } - // If we read fully the last section of pixels and filled up our counters -- or filled - // the last counter but ran off the side of the image, OK. Otherwise, a problem. - if (!(counterPosition === numCounters || (counterPosition === numCounters - 1 && i === end))) { - throw new Exception(Exception.NotFoundException); - } - } + protected static recordPatternInReverse(row: BitArray, start: number, counters: number[]): void { + // This could be more efficient I guess + let numTransitionsLeft = counters.length; + let last = row.get(start); + while (start > 0 && numTransitionsLeft >= 0) { + if (row.get(--start) !== last) { + numTransitionsLeft--; + last = !last; + } + } + if (numTransitionsLeft >= 0) { + throw new Exception(Exception.NotFoundException); + } - protected static recordPatternInReverse(row: BitArray, start: number, counters: number[]): void { - // This could be more efficient I guess - let numTransitionsLeft = counters.length; - let last = row.get(start); - while (start > 0 && numTransitionsLeft >= 0) { - if (row.get(--start) !== last) { - numTransitionsLeft--; - last = !last; - } - } - if (numTransitionsLeft >= 0) { - throw new Exception(Exception.NotFoundException); + OneDReader.recordPattern(row, start + 1, counters); } - OneDReader.recordPattern(row, start + 1, counters); - } - - /** - * Determines how closely a set of observed counts of runs of black/white values matches a given - * target pattern. This is reported as the ratio of the total variance from the expected pattern - * proportions across all pattern elements, to the length of the pattern. - * - * @param counters observed counters - * @param pattern expected pattern - * @param maxIndividualVariance The most any counter can differ before we give up - * @return ratio of total variance between counters and pattern compared to total pattern size - */ - protected static patternMatchVariance(counters: number[], pattern: number[], maxIndividualVariance: number): number { - const numCounters = counters.length; - let total = 0; - let patternLength = 0; - for (let i = 0; i < numCounters; i++) { - total += counters[i]; - patternLength += pattern[i]; - } - if (total < patternLength) { - // If we don't even have one pixel per unit of bar width, assume this is too small - // to reliably match, so fail: - return Number.POSITIVE_INFINITY; - } + /** + * Determines how closely a set of observed counts of runs of black/white values matches a given + * target pattern. This is reported as the ratio of the total variance from the expected pattern + * proportions across all pattern elements, to the length of the pattern. + * + * @param counters observed counters + * @param pattern expected pattern + * @param maxIndividualVariance The most any counter can differ before we give up + * @return ratio of total variance between counters and pattern compared to total pattern size + */ + protected static patternMatchVariance(counters: number[], pattern: number[], maxIndividualVariance: number): number { + const numCounters = counters.length; + let total = 0; + let patternLength = 0; + for (let i = 0; i < numCounters; i++) { + total += counters[i]; + patternLength += pattern[i]; + } + if (total < patternLength) { + // If we don't even have one pixel per unit of bar width, assume this is too small + // to reliably match, so fail: + return Number.POSITIVE_INFINITY; + } - const unitBarWidth = total / patternLength; - maxIndividualVariance *= unitBarWidth; + const unitBarWidth = total / patternLength; + maxIndividualVariance *= unitBarWidth; - let totalVariance = 0.0; - for (let x = 0; x < numCounters; x++) { - const counter = counters[x]; - const scaledPattern = pattern[x] * unitBarWidth; - const variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter; - if (variance > maxIndividualVariance) { - return Number.POSITIVE_INFINITY; - } - totalVariance += variance; + let totalVariance = 0.0; + for (let x = 0; x < numCounters; x++) { + const counter = counters[x]; + const scaledPattern = pattern[x] * unitBarWidth; + const variance = counter > scaledPattern ? counter - scaledPattern : scaledPattern - counter; + if (variance > maxIndividualVariance) { + return Number.POSITIVE_INFINITY; + } + totalVariance += variance; + } + return totalVariance / total; } - return totalVariance / total; - } - /** - *

Attempts to decode a one-dimensional barcode format given a single row of - * an image.

- * - * @param rowNumber row number from top of the row - * @param row the black/white pixel data of the row - * @param hints decode hints - * @return {@link Result} containing encoded string and start/end of barcode - * @throws NotFoundException if no potential barcode is found - * @throws ChecksumException if a potential barcode is found but does not pass its checksum - * @throws FormatException if a potential barcode is found but format is invalid - */ - public abstract decodeRow(rowNumber: number, row: BitArray, hints?: Map): Result; + /** + *

Attempts to decode a one-dimensional barcode format given a single row of + * an image.

+ * + * @param rowNumber row number from top of the row + * @param row the black/white pixel data of the row + * @param hints decode hints + * @return {@link Result} containing encoded string and start/end of barcode + * @throws NotFoundException if no potential barcode is found + * @throws ChecksumException if a potential barcode is found but does not pass its checksum + * @throws FormatException if a potential barcode is found but format is invalid + */ + public abstract decodeRow(rowNumber: number, row: BitArray, hints?: Map): Result; } From 503f19a7415abc57bd1f78c51b0d5f74777052c9 Mon Sep 17 00:00:00 2001 From: Luiz Filipe Machado Barni Date: Sat, 7 Apr 2018 10:51:07 -0300 Subject: [PATCH 08/12] chore: up pkg version --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index dae290a0..06908de2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@zxing/library", - "version": "0.3.2", + "version": "0.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { From 06694c0336f4ac5c009a40506d3a700fb97d9ba8 Mon Sep 17 00:00:00 2001 From: Luiz Filipe Machado Barni Date: Sat, 7 Apr 2018 12:00:26 -0300 Subject: [PATCH 09/12] re-increased test timeout we gotta make tests faster --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c29706b..b3974c3a 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "clean": "shx rm -rf bundles esm5", "build:before": "yarn run clean", "build": "yarn build:before && tsc && tsc --target es2017 --outDir esm5 && webpack && webpack --env.prod", - "test": "mocha-webpack --webpack-config webpack.config.test.js src/test.js --timeout 4000", + "test": "mocha-webpack --webpack-config webpack.config.test.js src/test.js --timeout 20000", "lint": "tslint src/**/*.ts" }, "dependencies": { From 823d2897f22e3a2b67811feef7f191b70d406c17 Mon Sep 17 00:00:00 2001 From: Luiz Filipe Machado Barni Date: Sun, 15 Apr 2018 16:22:39 -0300 Subject: [PATCH 10/12] just a few little improvements --- .editorconfig | 9 + .eslintrc | 16 + .unibeautify.json | 12 + .vscode/extensions.json | 8 + .vscode/settings.json | 3 +- karma.conf.js | 5 +- package-lock.json | 1654 +++++++---------- package.json | 1 + src/test/core/common/AbstractBlackBox.ts | 49 +- src/test/core/qrcode/HybridBinarizer.spec.ts | 2 + src/test/core/qrcode/QRCodeBlackBox.1.spec.ts | 1 - src/test/core/qrcode/QRCodeBlackBox.2.spec.ts | 1 - src/test/core/qrcode/QRCodeBlackBox.3.spec.ts | 1 - src/test/core/qrcode/QRCodeBlackBox.4.spec.ts | 1 - src/test/core/qrcode/QRCodeBlackBox.5.spec.ts | 1 - src/test/core/qrcode/QRCodeBlackBox.6.spec.ts | 1 - src/test/core/qrcode/QRCodeBlackBox.7.spec.ts | 1 - src/test/core/qrcode/QRCodeWriter.spec.ts | 29 +- 18 files changed, 778 insertions(+), 1017 deletions(-) create mode 100644 .eslintrc create mode 100644 .unibeautify.json create mode 100644 .vscode/extensions.json diff --git a/.editorconfig b/.editorconfig index e9a9bff8..11c30065 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,3 +11,12 @@ insert_final_newline = true [*.md] trim_trailing_whitespace = false + +[*.txt] +insert_final_newline = false + +[*.json] +insert_final_newline = false + +[*.xml] +insert_final_newline = false diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..ba03e236 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,16 @@ +{ + "parserOptions": { + "ecmaVersion": 8, + "sourceType": "module", + "ecmaFeatures": { + "jsx": false + } + }, + "rules": { + "semi": "error", + "quotes": ["error", "single"] + }, + "env": { + "es6": true + } +} diff --git a/.unibeautify.json b/.unibeautify.json new file mode 100644 index 00000000..6019d591 --- /dev/null +++ b/.unibeautify.json @@ -0,0 +1,12 @@ +{ + "JavaScript": { + "indent_size": 4, + "indent_char": " ", + "quotes": "single" + }, + "TypeScript": { + "indent_size": 4, + "indent_char": " ", + "quotes": "single" + } +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..c7be71a7 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "EditorConfig.EditorConfig", + "eg2.tslint", + "dbaeumer.vscode-eslint", + "Glavin001.unibeautify-vscode" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 4a8759a7..9b3e2bff 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,5 +2,6 @@ { "tslint.enable": true, "autoimport.doubleQuotes": false, - "autoimport.spaceBetweenBraces": true + "autoimport.spaceBetweenBraces": true, + "jshint.enable" : false } diff --git a/karma.conf.js b/karma.conf.js index 7ce446a2..2b51837d 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -3,7 +3,8 @@ * * @see https://karma-runner.github.io/0.13/config/configuration-file.html */ -const path = require('path'); +import * as path from 'path'; + const ROOT = path.resolve(__dirname, '.'); function rootPath() { @@ -12,7 +13,7 @@ function rootPath() { ); } -module.exports = function (config) { +export default function (config) { config.set({ basePath: '', diff --git a/package-lock.json b/package-lock.json index 06908de2..47b39035 100644 --- a/package-lock.json +++ b/package-lock.json @@ -109,6 +109,23 @@ "acorn": "4.0.13" } }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, "acorn-node": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz", @@ -256,6 +273,12 @@ "ansi-wrap": "0.1.0" } }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, "ansi-gray": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", @@ -457,6 +480,15 @@ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", "dev": true }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", @@ -475,6 +507,12 @@ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", "dev": true }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, "asn1": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", @@ -1037,6 +1075,12 @@ "ieee754": "1.1.8" } }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==", + "dev": true + }, "buffer-more-ints": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", @@ -1151,12 +1195,27 @@ "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", "dev": true }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "0.2.0" + } + }, "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, "camelcase": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", @@ -1214,6 +1273,12 @@ "supports-color": "5.3.0" } }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", @@ -1228,7 +1293,6 @@ "requires": { "anymatch": "1.3.2", "async-each": "1.0.1", - "fsevents": "1.1.3", "glob-parent": "2.0.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -1338,6 +1402,21 @@ } } }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", @@ -1943,6 +2022,21 @@ "esprima": "3.1.3" } }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2034,6 +2128,15 @@ "randombytes": "2.0.6" } }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "2.0.2" + } + }, "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -2373,12 +2476,145 @@ "estraverse": "4.2.0" } }, + "eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.3.2", + "concat-stream": "1.6.2", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.4", + "esquery": "1.0.1", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.4.0", + "ignore": "3.3.7", + "imurmurhash": "0.1.4", + "inquirer": "3.3.0", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", + "json-stable-stringify-without-jsonify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.5", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "7.0.0", + "progress": "2.0.0", + "regexpp": "1.1.0", + "require-uncached": "1.0.3", + "semver": "5.5.0", + "strip-ansi": "4.0.0", + "strip-json-comments": "2.0.1", + "table": "4.0.2", + "text-table": "0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "typedarray": "0.0.6" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "5.5.3", + "acorn-jsx": "3.0.1" + }, + "dependencies": { + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", + "dev": true + } + } + }, "esprima": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + } + }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", @@ -2672,6 +2908,17 @@ } } }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + } + }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -2792,6 +3039,25 @@ "pend": "1.2.0" } }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -2878,6 +3144,26 @@ "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", "dev": true }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + }, + "dependencies": { + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + } + } + }, "flush-write-stream": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", @@ -2930,980 +3216,76 @@ "mime-types": "2.1.18" } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5" - } - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "1.0.0" - } - }, - "fs-copy-file-sync": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-copy-file-sync/-/fs-copy-file-sync-1.0.1.tgz", - "integrity": "sha512-fnH+ll0swvNSIgUgsyj1kXyNKM4JoSooz9XeWDhPn5RqMQhEYrDXLU4YFJAVFqxNJR5VJu+OszkqZMypovz2Kg==" - }, - "fs-extra": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1" - } - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "requires": { - "minipass": "2.2.1" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.5" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "dev": true, - "optional": true, - "requires": { - "nan": "2.9.2", - "node-pre-gyp": "0.6.39" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "ajv": { - "version": "4.11.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "bundled": true, - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "caseless": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true - }, - "co": { - "version": "4.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "combined-stream": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "cryptiles": { - "version": "2.0.5", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "bundled": true, - "dev": true, - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "bundled": true, - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "fstream": { - "version": "1.0.11", - "bundled": true, - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "bundled": true, - "dev": true - }, - "har-schema": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "hawk": { - "version": "3.1.3", - "bundled": true, - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "bundled": true, - "dev": true - }, - "http-signature": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.4", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "isstream": { - "version": "0.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "bundled": true, - "dev": true, - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "bundled": true, - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "bundled": true, - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "oauth-sign": { - "version": "0.8.2", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "performance-now": { - "version": "0.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "bundled": true, - "dev": true - }, - "punycode": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "bundled": true, - "dev": true, - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "bundled": true, - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "bundled": true, - "dev": true - }, - "semver": { - "version": "5.3.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sntp": { - "version": "1.0.9", - "bundled": true, - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "2.2.1", - "bundled": true, - "dev": true, - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "bundled": true, - "dev": true, - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "uuid": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "verror": { - "version": "1.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - } - } - }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.5" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "1.0.0" + } + }, + "fs-copy-file-sync": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-copy-file-sync/-/fs-copy-file-sync-1.0.1.tgz", + "integrity": "sha512-fnH+ll0swvNSIgUgsyj1kXyNKM4JoSooz9XeWDhPn5RqMQhEYrDXLU4YFJAVFqxNJR5VJu+OszkqZMypovz2Kg==" + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1" + } + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "requires": { + "minipass": "2.2.1" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.5" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, "ftp": { "version": "0.3.10", "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", @@ -3950,6 +3332,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -4263,6 +3651,26 @@ } } }, + "globals": { + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.4.0.tgz", + "integrity": "sha512-Dyzmifil8n/TmSqYDEXbm+C8yitzJQqQIlJQLNRMwa+BOUJpRC19pyVeN12JAjt61xonvXjtff+hJruTRXn5HA==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, "glogg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", @@ -4766,6 +4174,12 @@ "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", "dev": true }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -4823,6 +4237,61 @@ "source-map": "0.5.7" } }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "3.1.0", + "chalk": "2.3.2", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "2.2.0", + "figures": "2.0.0", + "lodash": "4.17.5", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, "insert-module-globals": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.2.tgz", @@ -5050,6 +4519,30 @@ } } }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -5071,6 +4564,12 @@ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, "is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", @@ -5078,6 +4577,12 @@ "dev": true, "optional": true }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -5310,6 +4815,12 @@ "jsonify": "0.0.0" } }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -6883,6 +6394,12 @@ } } }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, "nan": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", @@ -6908,6 +6425,12 @@ "to-regex": "3.0.2" } }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -7301,6 +6824,15 @@ "wrappy": "1.0.2" } }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", @@ -7572,6 +7104,12 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -7772,6 +7310,12 @@ } } }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -8129,6 +7673,12 @@ "safe-regex": "1.1.0" } }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, "remap-istanbul": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.10.1.tgz", @@ -8284,6 +7834,16 @@ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -8299,12 +7859,28 @@ "path-parse": "1.0.5" } }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "2.0.1", + "signal-exit": "3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -8339,6 +7915,15 @@ "inherits": "2.0.3" } }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "2.1.0" + } + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -8348,6 +7933,21 @@ "aproba": "1.2.0" } }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "4.0.8" + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", @@ -8593,6 +8193,23 @@ "requestretry": "1.13.0" } }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, "smart-buffer": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", @@ -9241,6 +8858,59 @@ "acorn-node": "1.3.0" } }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.3.2", + "lodash": "4.17.5", + "slice-ansi": "1.0.0", + "string-width": "2.1.1" + }, + "dependencies": { + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, "tapable": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", @@ -9298,6 +8968,12 @@ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=" }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", @@ -10020,7 +9696,6 @@ "anymatch": "2.0.0", "async-each": "1.0.1", "braces": "2.3.1", - "fsevents": "1.1.3", "glob-parent": "3.1.0", "inherits": "2.0.3", "is-binary-path": "1.0.1", @@ -10397,6 +10072,12 @@ } } }, + "webpack-combine-loaders": { + "version": "2.0.0", + "resolved": "http://registry.npmjs.org/webpack-combine-loaders/-/webpack-combine-loaders-2.0.0.tgz", + "integrity": "sha1-yM0DPseXdItWnHgj9U1EgWcPPgU=", + "dev": true + }, "webpack-config-utils": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/webpack-config-utils/-/webpack-config-utils-2.3.0.tgz", @@ -10408,16 +10089,8 @@ "dependencies": { "qs": { "version": "5.2.1", - "bundled": true, - "dev": true - }, - "webpack-combine-loaders": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "qs": "5.2.1" - } + "resolved": "http://registry.npmjs.org/qs/-/qs-5.2.1.tgz", + "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=" } } }, @@ -10565,6 +10238,15 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "0.5.1" + } + }, "ws": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", diff --git a/package.json b/package.json index b3974c3a..96d6bcc6 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "async": "^2.6.0", "awesome-typescript-loader": "^3.1.3", "chai": "^4.1.2", + "eslint": "^4.19.1", "jasmine": "^3.0.0", "karma": "^2.0.0", "karma-chai": "^0.1.0", diff --git a/src/test/core/common/AbstractBlackBox.ts b/src/test/core/common/AbstractBlackBox.ts index da74572c..4f5dd649 100644 --- a/src/test/core/common/AbstractBlackBox.ts +++ b/src/test/core/common/AbstractBlackBox.ts @@ -88,9 +88,11 @@ abstract class AbstractBlackBoxSpec { return this.testBase; } - protected addTest(mustPassCount: number /*int*/, - tryHarderCount: number /*int*/, - rotation: number/*float*/): void { + protected addTest( + mustPassCount: number /* int */, + tryHarderCount: number /* int */, + rotation: number /* float */ + ): void { this.addTestWithMax(mustPassCount, tryHarderCount, 0, 0, rotation); } /** @@ -103,11 +105,13 @@ abstract class AbstractBlackBoxSpec { * reading the wrong contents using the try harder flag * @param rotation The rotation in degrees clockwise to use for this test. */ - protected addTestWithMax(mustPassCount: number /*int*/, - tryHarderCount: number /*int*/, - maxMisreads: number /*int*/ = 0, - maxTryHarderMisreads: number /*int*/ = 0, - rotation: number/*float*/): void { + protected addTestWithMax( + mustPassCount: number /* int */, + tryHarderCount: number /* int */, + maxMisreads: number /* int */ = 0, + maxTryHarderMisreads: number /* int */ = 0, + rotation: number/* float */ + ): void { this.testResults.push(new TestResult(mustPassCount, tryHarderCount, maxMisreads, maxTryHarderMisreads, rotation)); } @@ -151,7 +155,10 @@ abstract class AbstractBlackBoxSpec { this.testBlackBoxCountingResults(true, done); } - private testBlackBoxCountingResults(assertOnFailure: boolean, done: () => any): void /*throws IOException */ { + /** + * @throws IOException + */ + private testBlackBoxCountingResults(assertOnFailure: boolean, done: () => any): void { assert.strictEqual(this.testResults.length > 0, true); const imageFiles: Array = this.getImageFiles(); @@ -272,11 +279,16 @@ abstract class AbstractBlackBoxSpec { }); } - private decode(source: BinaryBitmap, + /** + * @throws ReaderException + */ + private decode( + source: BinaryBitmap, rotation: number/*float*/, expectedText: string, expectedMetadata: Map, - tryHarder: boolean): boolean /*throws ReaderException */ { + tryHarder: boolean + ): boolean { const suffix: string = ` (${tryHarder ? 'try harder, ' : ''}rotation: ${rotation})`; @@ -360,7 +372,10 @@ abstract class AbstractBlackBoxSpec { } } - protected static readTextFileAsString(file: string): string /*throws IOException*/ { + /** + * @throws IOException + */ + protected static readTextFileAsString(file: string): string { const stringContents: string = fs.readFileSync(file, { encoding: 'utf8' }); if (stringContents.endsWith('\n')) { console.warn('contents: string of file ' + file + ' end with a newline. ' + @@ -369,7 +384,10 @@ abstract class AbstractBlackBoxSpec { return stringContents; } - protected static readBinFileAsString(file: string): string /*throws IOException*/ { + /** + * @throws IOException + */ + protected static readBinFileAsString(file: string): string { const bufferContents: Buffer = fs.readFileSync(file); const stringContents = StringEncoding.decode(new Uint8Array(bufferContents), 'iso-8859-1'); if (stringContents.endsWith('\n')) { @@ -379,7 +397,10 @@ abstract class AbstractBlackBoxSpec { return stringContents; } - protected static readTextFileAsMetadata(file: string): Map /*throws IOException*/ { + /** + * @throws IOException + */ + protected static readTextFileAsMetadata(file: string): Map { // TODO: return null; } diff --git a/src/test/core/qrcode/HybridBinarizer.spec.ts b/src/test/core/qrcode/HybridBinarizer.spec.ts index 2e0f1469..be6112ac 100644 --- a/src/test/core/qrcode/HybridBinarizer.spec.ts +++ b/src/test/core/qrcode/HybridBinarizer.spec.ts @@ -20,8 +20,10 @@ describe('HybridBinarizer', () => { const source = new SharpImageLuminanceSource(image); const test = new HybridBinarizer(source); const matrix = test.getBlackMatrix(); + assert.equal(0, matrix.get(13, 12)); assert.equal(1, matrix.get(13, 13)); + done(); } }); diff --git a/src/test/core/qrcode/QRCodeBlackBox.1.spec.ts b/src/test/core/qrcode/QRCodeBlackBox.1.spec.ts index c99a1088..e7dcbbf9 100644 --- a/src/test/core/qrcode/QRCodeBlackBox.1.spec.ts +++ b/src/test/core/qrcode/QRCodeBlackBox.1.spec.ts @@ -17,7 +17,6 @@ /*package com.google.zxing.qrcode;*/ import 'mocha'; -import * as assert from 'assert'; import BarcodeFormat from './../../../core/BarcodeFormat'; import MultiFormatReader from './../../../core/MultiFormatReader'; diff --git a/src/test/core/qrcode/QRCodeBlackBox.2.spec.ts b/src/test/core/qrcode/QRCodeBlackBox.2.spec.ts index ca7f273a..e24fc9ea 100644 --- a/src/test/core/qrcode/QRCodeBlackBox.2.spec.ts +++ b/src/test/core/qrcode/QRCodeBlackBox.2.spec.ts @@ -17,7 +17,6 @@ /*package com.google.zxing.qrcode;*/ import 'mocha'; -import * as assert from 'assert'; import BarcodeFormat from './../../../core/BarcodeFormat'; import MultiFormatReader from './../../../core/MultiFormatReader'; diff --git a/src/test/core/qrcode/QRCodeBlackBox.3.spec.ts b/src/test/core/qrcode/QRCodeBlackBox.3.spec.ts index e30750de..ed2fded8 100644 --- a/src/test/core/qrcode/QRCodeBlackBox.3.spec.ts +++ b/src/test/core/qrcode/QRCodeBlackBox.3.spec.ts @@ -17,7 +17,6 @@ /*package com.google.zxing.qrcode;*/ import 'mocha'; -import * as assert from 'assert'; import BarcodeFormat from './../../../core/BarcodeFormat'; import MultiFormatReader from './../../../core/MultiFormatReader'; diff --git a/src/test/core/qrcode/QRCodeBlackBox.4.spec.ts b/src/test/core/qrcode/QRCodeBlackBox.4.spec.ts index bd491a35..996b43c6 100644 --- a/src/test/core/qrcode/QRCodeBlackBox.4.spec.ts +++ b/src/test/core/qrcode/QRCodeBlackBox.4.spec.ts @@ -17,7 +17,6 @@ /*package com.google.zxing.qrcode;*/ import 'mocha'; -import * as assert from 'assert'; import BarcodeFormat from './../../../core/BarcodeFormat'; import MultiFormatReader from './../../../core/MultiFormatReader'; diff --git a/src/test/core/qrcode/QRCodeBlackBox.5.spec.ts b/src/test/core/qrcode/QRCodeBlackBox.5.spec.ts index 71bf7b3e..595e312a 100644 --- a/src/test/core/qrcode/QRCodeBlackBox.5.spec.ts +++ b/src/test/core/qrcode/QRCodeBlackBox.5.spec.ts @@ -17,7 +17,6 @@ /*package com.google.zxing.qrcode;*/ import 'mocha'; -import * as assert from 'assert'; import BarcodeFormat from './../../../core/BarcodeFormat'; import MultiFormatReader from './../../../core/MultiFormatReader'; diff --git a/src/test/core/qrcode/QRCodeBlackBox.6.spec.ts b/src/test/core/qrcode/QRCodeBlackBox.6.spec.ts index 474eaf32..7c9bbb86 100644 --- a/src/test/core/qrcode/QRCodeBlackBox.6.spec.ts +++ b/src/test/core/qrcode/QRCodeBlackBox.6.spec.ts @@ -17,7 +17,6 @@ /*package com.google.zxing.qrcode;*/ import 'mocha'; -import * as assert from 'assert'; import BarcodeFormat from './../../../core/BarcodeFormat'; import MultiFormatReader from './../../../core/MultiFormatReader'; diff --git a/src/test/core/qrcode/QRCodeBlackBox.7.spec.ts b/src/test/core/qrcode/QRCodeBlackBox.7.spec.ts index 10e6fe37..daec7ef6 100644 --- a/src/test/core/qrcode/QRCodeBlackBox.7.spec.ts +++ b/src/test/core/qrcode/QRCodeBlackBox.7.spec.ts @@ -17,7 +17,6 @@ /*package com.google.zxing.qrcode;*/ import 'mocha'; -import * as assert from 'assert'; import BarcodeFormat from './../../../core/BarcodeFormat'; import MultiFormatReader from './../../../core/MultiFormatReader'; diff --git a/src/test/core/qrcode/QRCodeWriter.spec.ts b/src/test/core/qrcode/QRCodeWriter.spec.ts index d911ef22..90924ad3 100644 --- a/src/test/core/qrcode/QRCodeWriter.spec.ts +++ b/src/test/core/qrcode/QRCodeWriter.spec.ts @@ -50,16 +50,26 @@ describe('QRCodeWriter', () => { // The QR should be multiplied up to fit, with extra padding if necessary const bigEnough: number /*int*/ = 256; const writer: Writer = new QRCodeWriter(); - let matrix: BitMatrix = writer.encode('http://www.google.com/', BarcodeFormat.QR_CODE, bigEnough, - bigEnough, null); + let matrix: BitMatrix = writer.encode( + 'http://www.google.com/', + BarcodeFormat.QR_CODE, + bigEnough, + bigEnough, + null + ); assert.strictEqual(matrix !== null, true); assert.strictEqual(matrix.getWidth(), bigEnough); assert.strictEqual(matrix.getHeight(), bigEnough); // The QR will not fit in this size, so the matrix should come back bigger - const tooSmall: number /*int*/ = 20; - matrix = writer.encode('http://www.google.com/', BarcodeFormat.QR_CODE, tooSmall, - tooSmall, null); + const tooSmall: number /* int */ = 20; + matrix = writer.encode( + 'http://www.google.com/', + BarcodeFormat.QR_CODE, + tooSmall, + tooSmall, + null + ); assert.strictEqual(matrix !== null, true); assert.strictEqual(tooSmall < matrix.getWidth(), true); assert.strictEqual(tooSmall < matrix.getHeight(), true); @@ -67,8 +77,13 @@ describe('QRCodeWriter', () => { // We should also be able to handle non-square requests by padding them const strangeWidth: number /*int*/ = 500; const strangeHeight: number /*int*/ = 100; - matrix = writer.encode('http://www.google.com/', BarcodeFormat.QR_CODE, strangeWidth, - strangeHeight, null); + matrix = writer.encode( + 'http://www.google.com/', + BarcodeFormat.QR_CODE, + strangeWidth, + strangeHeight, + null + ); assert.strictEqual(matrix !== null, true); assert.strictEqual(matrix.getWidth(), strangeWidth); assert.strictEqual(matrix.getHeight(), strangeHeight); From be48bbc17574dfa23cc8e5fcadc07ae547263e47 Mon Sep 17 00:00:00 2001 From: Luiz Filipe Machado Barni Date: Thu, 26 Apr 2018 21:45:40 -0300 Subject: [PATCH 11/12] npm upgrade --- package-lock.json | 5001 ++++++++++++++++++++------------------------- 1 file changed, 2245 insertions(+), 2756 deletions(-) diff --git a/package-lock.json b/package-lock.json index 47b39035..957ed4e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,20 @@ "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", "dev": true, "requires": { - "normalize-path": "2.1.1", - "through2": "2.0.3" + "normalize-path": "^2.0.1", + "through2": "^2.0.3" + }, + "dependencies": { + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + } } }, "@sinonjs/formatio": { @@ -24,15 +36,15 @@ } }, "@types/async": { - "version": "2.0.47", - "resolved": "https://registry.npmjs.org/@types/async/-/async-2.0.47.tgz", - "integrity": "sha512-/mQMARXVSuGbwOFFBKA4s0qRKtOaaTgnllp3qU4sMzDVGGAroPblyd529yBALnK/WEY8nHyRGx0/RFUDmhpVmQ==", + "version": "2.0.49", + "resolved": "https://registry.npmjs.org/@types/async/-/async-2.0.49.tgz", + "integrity": "sha512-Benr3i5odUkvpFkOpzGqrltGdbSs+EVCkEBGXbuR7uT0VzhXKIkhem6PDzHdx5EonA+rfbB3QvP6aDOw5+zp5Q==", "dev": true }, "@types/chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.2.tgz", - "integrity": "sha512-D8uQwKYUw2KESkorZ27ykzXgvkDJYXVEihGklgfp5I4HUP8D6IxtcdLTMB1emjQiWzV7WZ5ihm1cxIzVwjoleQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.3.tgz", + "integrity": "sha512-f5dXGzOJycyzSMdaXVhiBhauL4dYydXwVpavfQ1mVCaGjR56a9QfklXObUxlIY9bGTmCPHEEZ04I16BZ/8w5ww==", "dev": true }, "@types/mocha": { @@ -42,9 +54,9 @@ "dev": true }, "@types/node": { - "version": "8.9.5", - "resolved": "http://registry.npmjs.org/@types/node/-/node-8.9.5.tgz", - "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==", + "version": "8.10.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.10.tgz", + "integrity": "sha512-p3W/hFzQs76RlYRIZsZc5a9bht6m0TspmWYYbKhRswmLnwj9fsE40EbuGifeu/XWR/c0UJQ1DDbvTxIsm/OOAA==", "dev": true }, "@types/seedrandom": { @@ -54,12 +66,12 @@ "dev": true }, "@types/sharp": { - "version": "0.17.7", - "resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.17.7.tgz", - "integrity": "sha512-NbTVlmYn+vXWVxBXg6SZq872SCF2J3GgZOZn03aZduN6unFcd7q+7poxd5louMaIrlWJMvAF5DVwftxUgj3Y0w==", + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.17.8.tgz", + "integrity": "sha512-wQGqStKMaSInhLCCGyArCD967bNGZ96jtfTAjiMkDCX+7LF7mBIch5BwVVmPgSZGiyb7Wo7JdIvwXHvIDzWVvA==", "dev": true, "requires": { - "@types/node": "8.9.5" + "@types/node": "*" } }, "@types/text-encoding": { @@ -68,16 +80,6 @@ "integrity": "sha512-kQ79aFmYcD/DR3QKo6wXyvNrKi7PunY0KYTBUhHjHl0SXwWuLRl9Leh73YtnsSJMBi9qSiK+fxWhdJNQPbhc9A==", "dev": true }, - "JSONStream": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", - "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", - "dev": true, - "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" - } - }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -90,7 +92,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -106,7 +108,7 @@ "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", "dev": true, "requires": { - "acorn": "4.0.13" + "acorn": "^4.0.3" } }, "acorn-jsx": { @@ -115,7 +117,7 @@ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", "dev": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -126,24 +128,6 @@ } } }, - "acorn-node": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz", - "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==", - "dev": true, - "requires": { - "acorn": "5.5.3", - "xtend": "4.0.1" - }, - "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - } - } - }, "addressparser": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", @@ -163,8 +147,8 @@ "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", "dev": true, "requires": { - "extend": "3.0.1", - "semver": "5.0.3" + "extend": "~3.0.0", + "semver": "~5.0.1" }, "dependencies": { "semver": { @@ -181,10 +165,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -199,9 +183,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" }, "dependencies": { "kind-of": { @@ -210,7 +194,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -228,11 +212,11 @@ "dev": true, "optional": true, "requires": { - "bitsyntax": "0.0.4", - "bluebird": "3.5.1", + "bitsyntax": "~0.0.4", + "bluebird": "^3.4.6", "buffer-more-ints": "0.0.2", - "readable-stream": "1.1.14", - "safe-buffer": "5.1.1" + "readable-stream": "1.x >=1.1.9", + "safe-buffer": "^5.0.1" }, "dependencies": { "isarray": { @@ -249,10 +233,10 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -308,7 +292,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "ansi-wrap": { @@ -323,8 +307,8 @@ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" }, "dependencies": { "arr-diff": { @@ -333,7 +317,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -348,9 +332,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "expand-brackets": { @@ -359,7 +343,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -368,7 +352,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "kind-of": { @@ -377,7 +361,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -386,19 +370,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } } } @@ -413,8 +397,8 @@ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.5" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "argparse": { @@ -423,7 +407,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -450,30 +434,12 @@ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", "dev": true }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "dev": true }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, "array-slice": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", @@ -486,7 +452,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -525,9 +491,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -564,22 +530,13 @@ "dev": true, "optional": true }, - "astw": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", - "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", - "dev": true, - "requires": { - "acorn": "4.0.13" - } - }, "async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "dev": true, "requires": { - "lodash": "4.17.5" + "lodash": "^4.14.0" } }, "async-each": { @@ -601,9 +558,9 @@ "dev": true }, "atob": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", - "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.0.tgz", + "integrity": "sha512-SuiKH8vbsOyCALjA/+EINmt/Kdl+TQPrtFgW7XZZcwtryFu9e5kQoX3bjCW6mIvGH1fbeAZZuvwGR5IlBRznGw==", "dev": true }, "awesome-typescript-loader": { @@ -612,13 +569,13 @@ "integrity": "sha512-qzgm9SEvodVkSi9QY7Me1/rujg+YBNMjayNSAyzNghwTEez++gXoPCwMvpbHRG7wrOkDCiF6dquvv9ESmUBAuw==", "dev": true, "requires": { - "chalk": "2.3.2", + "chalk": "^2.3.1", "enhanced-resolve": "3.3.0", - "loader-utils": "1.1.0", - "lodash": "4.17.5", - "micromatch": "3.1.9", - "mkdirp": "0.5.1", - "source-map-support": "0.5.4" + "loader-utils": "^1.1.0", + "lodash": "^4.17.4", + "micromatch": "^3.0.3", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.3" } }, "aws-sign2": { @@ -628,9 +585,9 @@ "dev": true }, "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", "dev": true }, "axios": { @@ -641,6 +598,18 @@ "optional": true, "requires": { "follow-redirects": "1.0.0" + }, + "dependencies": { + "follow-redirects": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", + "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.2.0" + } + } } }, "babel-code-frame": { @@ -649,9 +618,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { "ansi-styles": { @@ -666,11 +635,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -687,8 +656,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.3", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "backo2": { @@ -709,13 +678,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -724,7 +693,36 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -736,9 +734,9 @@ "dev": true }, "base64-js": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", - "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", "dev": true }, "base64id": { @@ -754,7 +752,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "beeper": { @@ -795,11 +793,12 @@ } }, "bl": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", - "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "requires": { - "readable-stream": "2.3.5" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "blob": { @@ -827,15 +826,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.2", + "depd": "~1.1.1", + "http-errors": "~1.6.2", "iconv-lite": "0.4.19", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.16" + "type-is": "~1.6.15" } }, "boom": { @@ -844,7 +843,7 @@ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "brace-expansion": { @@ -853,46 +852,35 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", - "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", - "dev": true, - "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "kind-of": "6.0.2", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "1.0.2" - } - }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -903,20 +891,6 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, - "browser-pack": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.4.tgz", - "integrity": "sha512-Q4Rvn7P6ObyWfc4stqLWHtG1MJ8vVtjgT24Zbu+8UTzxYuZouqZsmNRRTFVMY/Ux0eIKv1d+JWzsInTX+fdHPQ==", - "dev": true, - "requires": { - "JSONStream": "1.3.2", - "combine-source-map": "0.8.0", - "defined": "1.0.0", - "safe-buffer": "5.1.1", - "through2": "2.0.3", - "umd": "3.0.3" - } - }, "browser-resolve": { "version": "1.11.2", "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", @@ -924,14 +898,6 @@ "dev": true, "requires": { "resolve": "1.1.7" - }, - "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } } }, "browser-stdout": { @@ -940,95 +906,40 @@ "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", "dev": true }, - "browserify": { - "version": "14.5.0", - "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz", - "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==", - "dev": true, - "requires": { - "JSONStream": "1.3.2", - "assert": "1.4.1", - "browser-pack": "6.0.4", - "browser-resolve": "1.11.2", - "browserify-zlib": "0.2.0", - "buffer": "5.1.0", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "defined": "1.0.0", - "deps-sort": "2.0.0", - "domain-browser": "1.1.7", - "duplexer2": "0.1.4", - "events": "1.1.1", - "glob": "7.1.2", - "has": "1.0.1", - "htmlescape": "1.1.1", - "https-browserify": "1.0.0", - "inherits": "2.0.3", - "insert-module-globals": "7.0.2", - "labeled-stream-splicer": "2.0.0", - "module-deps": "4.1.1", - "os-browserify": "0.3.0", - "parents": "1.0.1", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "read-only-stream": "2.0.0", - "readable-stream": "2.3.5", - "resolve": "1.5.0", - "shasum": "1.0.2", - "shell-quote": "1.6.1", - "stream-browserify": "2.0.1", - "stream-http": "2.8.1", - "string_decoder": "1.0.3", - "subarg": "1.0.0", - "syntax-error": "1.4.0", - "through2": "2.0.3", - "timers-browserify": "1.4.2", - "tty-browserify": "0.0.1", - "url": "0.11.0", - "util": "0.10.3", - "vm-browserify": "0.0.4", - "xtend": "4.0.1" - } - }, "browserify-aes": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", - "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", - "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.1.1", - "browserify-des": "1.0.0", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", - "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", + "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" } }, "browserify-rsa": { @@ -1037,8 +948,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -1047,13 +958,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -1062,7 +973,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "buffer": { @@ -1071,10 +982,29 @@ "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", "dev": true, "requires": { - "base64-js": "1.2.3", - "ieee754": "1.1.8" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-alloc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz", + "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=", + "requires": { + "buffer-alloc-unsafe": "^0.1.0", + "buffer-fill": "^0.1.0" } }, + "buffer-alloc-unsafe": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz", + "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=" + }, + "buffer-fill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz", + "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==" + }, "buffer-from": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", @@ -1129,23 +1059,23 @@ }, "cacache": { "version": "10.0.4", - "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.2", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.0", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" }, "dependencies": { "lru-cache": { @@ -1154,8 +1084,8 @@ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "y18n": { @@ -1178,30 +1108,24 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, - "cached-path-relative": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", - "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", - "dev": true - }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsite": { @@ -1228,8 +1152,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" } }, "caseless": { @@ -1244,8 +1168,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chai": { @@ -1254,23 +1178,23 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.1.0", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.8" + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" } }, "chalk": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", - "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chardet": { @@ -1291,14 +1215,14 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "chownr": { @@ -1312,14 +1236,14 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "circular-json": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.1.tgz", - "integrity": "sha512-UjgcRlTAhAkLeXmDe2wK7ktwy/tgAqxiSndTIPiFZuIPLZmzHzWMwUIe9h9m/OokypG7snxCDEuwJshGBdPvaw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.3.tgz", + "integrity": "sha512-YlxLOimeIoQGHnMe3kbf8qIV2Bj7uXLbljMPRguNT49GmSAzooNfS9EJ91rSJKbLBOOzM5agvtx0WyechZN/Hw==", "dev": true }, "class-utils": { @@ -1328,10 +1252,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1340,65 +1264,8 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -1408,7 +1275,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-width": { @@ -1423,8 +1290,8 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -1437,9 +1304,9 @@ } }, "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, "clone-stats": { @@ -1465,8 +1332,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color": { @@ -1474,8 +1341,8 @@ "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", "requires": { - "color-convert": "1.9.1", - "color-string": "1.5.2" + "color-convert": "^1.9.1", + "color-string": "^1.5.2" } }, "color-convert": { @@ -1483,7 +1350,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -1496,8 +1363,8 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz", "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=", "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, "color-support": { @@ -1518,7 +1385,7 @@ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", "dev": true, "requires": { - "lodash": "4.17.5" + "lodash": "^4.5.0" } }, "combine-source-map": { @@ -1527,10 +1394,18 @@ "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", "dev": true, "requires": { - "convert-source-map": "1.1.3", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "0.5.7" + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + } } }, "combined-stream": { @@ -1539,13 +1414,13 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.0.tgz", - "integrity": "sha512-7B1ilBwtYSbetCgTY1NJFg+gVpestg0fdA1MhC1Vs4ssyfSXnCAjFr+QcQM9/RedXC0EaUx1sG8Smgw2VfgKEg==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", "dev": true }, "commondir": { @@ -1579,42 +1454,14 @@ "dev": true }, "concat-stream": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", - "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "connect": { @@ -1625,7 +1472,7 @@ "requires": { "debug": "2.6.9", "finalhandler": "1.1.0", - "parseurl": "1.3.2", + "parseurl": "~1.3.2", "utils-merge": "1.0.1" } }, @@ -1635,7 +1482,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "console-control-strings": { @@ -1656,9 +1503,9 @@ "dev": true }, "convert-source-map": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", - "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", "dev": true }, "cookie": { @@ -1673,12 +1520,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -1688,9 +1535,9 @@ "dev": true }, "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=", "dev": true }, "core-util-is": { @@ -1699,39 +1546,40 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "create-ecdh": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", - "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.1.tgz", + "integrity": "sha512-iZvCCg8XqHQZ1ioNBTzXS/cQSkqkqcPs8xSX4upNB+DAk9Ht3uzQf2J32uAHNCne8LDmKr29AgZrEs4oIrwLuQ==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", - "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "sha.js": "2.4.10" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", - "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.1.3", - "inherits": "2.0.3", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -1740,9 +1588,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.2", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "dependencies": { "lru-cache": { @@ -1751,8 +1599,8 @@ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "yallist": { @@ -1769,7 +1617,7 @@ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "dev": true, "requires": { - "boom": "5.2.0" + "boom": "5.x.x" }, "dependencies": { "boom": { @@ -1778,7 +1626,7 @@ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } } } @@ -1789,17 +1637,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.0", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.0", - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "diffie-hellman": "5.0.2", - "inherits": "2.0.3", - "pbkdf2": "3.0.14", - "public-encrypt": "4.0.0", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css": { @@ -1808,10 +1656,10 @@ "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", "dev": true, "requires": { - "inherits": "2.0.3", - "source-map": "0.1.43", - "source-map-resolve": "0.3.1", - "urix": "0.1.0" + "inherits": "^2.0.1", + "source-map": "^0.1.38", + "source-map-resolve": "^0.3.0", + "urix": "^0.1.0" }, "dependencies": { "atob": { @@ -1826,7 +1674,7 @@ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "source-map-resolve": { @@ -1835,10 +1683,10 @@ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", "dev": true, "requires": { - "atob": "1.1.3", - "resolve-url": "0.2.1", - "source-map-url": "0.3.0", - "urix": "0.1.0" + "atob": "~1.1.0", + "resolve-url": "~0.2.1", + "source-map-url": "~0.3.0", + "urix": "~0.1.0" } }, "source-map-url": { @@ -1855,7 +1703,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "custom-event": { @@ -1876,7 +1724,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.40" + "es5-ext": "^0.10.9" } }, "dashdash": { @@ -1885,7 +1733,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "data-uri-to-buffer": { @@ -1913,8 +1761,8 @@ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "dev": true, "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" + "get-stdin": "^4.0.1", + "meow": "^3.3.0" } }, "debug": { @@ -1932,8 +1780,8 @@ "integrity": "sha1-+gccXYdIRoVCSAdCHKSxawsaB2M=", "dev": true, "requires": { - "debug": "2.6.9", - "lazy-debug-legacy": "0.0.1", + "debug": "2.X", + "lazy-debug-legacy": "0.0.X", "object-assign": "4.1.0" }, "dependencies": { @@ -1962,7 +1810,7 @@ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "requires": { - "mimic-response": "1.0.0" + "mimic-response": "^1.0.0" } }, "deep-eql": { @@ -1971,7 +1819,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "4.0.8" + "type-detect": "^4.0.0" } }, "deep-extend": { @@ -1991,7 +1839,7 @@ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "clone": "1.0.3" + "clone": "^1.0.2" } }, "define-property": { @@ -2000,16 +1848,41 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, "degenerator": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", @@ -2017,9 +1890,9 @@ "dev": true, "optional": true, "requires": { - "ast-types": "0.11.3", - "escodegen": "1.9.1", - "esprima": "3.1.3" + "ast-types": "0.x.x", + "escodegen": "1.x.x", + "esprima": "3.x.x" } }, "del": { @@ -2028,13 +1901,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "delayed-stream": { @@ -2054,26 +1927,14 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, - "deps-sort": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", - "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", - "dev": true, - "requires": { - "JSONStream": "1.3.2", - "shasum": "1.0.2", - "subarg": "1.0.0", - "through2": "2.0.3" - } - }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "detect-libc": { @@ -2087,24 +1948,6 @@ "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", "dev": true }, - "detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "dev": true, - "requires": { - "acorn": "5.5.3", - "defined": "1.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", - "dev": true - } - } - }, "di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", @@ -2118,14 +1961,14 @@ "dev": true }, "diffie-hellman": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", - "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "doctrine": { @@ -2134,7 +1977,7 @@ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "dom-serialize": { @@ -2143,16 +1986,16 @@ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, "domain-browser": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", - "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, "double-ended-queue": { @@ -2163,12 +2006,38 @@ "optional": true }, "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, "requires": { - "readable-stream": "2.3.5" + "readable-stream": "~1.1.9" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } } }, "duplexify": { @@ -2177,10 +2046,10 @@ "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ecc-jsbn": { @@ -2190,7 +2059,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ee-first": { @@ -2205,13 +2074,13 @@ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "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" } }, "emojis-list": { @@ -2231,7 +2100,7 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "engine.io": { @@ -2240,13 +2109,13 @@ "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", - "uws": "9.14.0", - "ws": "3.3.3" + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "uws": "~9.14.0", + "ws": "~3.3.1" }, "dependencies": { "debug": { @@ -2268,14 +2137,14 @@ "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "3.1.0", - "engine.io-parser": "2.1.2", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "3.3.3", - "xmlhttprequest-ssl": "1.5.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, "dependencies": { @@ -2297,10 +2166,10 @@ "dev": true, "requires": { "after": "0.8.2", - "arraybuffer.slice": "0.0.7", + "arraybuffer.slice": "~0.0.7", "base64-arraybuffer": "0.1.5", "blob": "0.0.4", - "has-binary2": "1.0.2" + "has-binary2": "~1.0.2" } }, "enhanced-resolve": { @@ -2309,10 +2178,10 @@ "integrity": "sha512-2qbxE7ek3YxPJ1ML6V+satHkzHpJQKWkRHmRx6mfAoW59yP8YH8BFplbegSP+u2hBd6B6KCOpvJQ3dZAP+hkpg==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.5" } }, "ent": { @@ -2327,7 +2196,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error-ex": { @@ -2336,7 +2205,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" }, "dependencies": { "is-arrayish": { @@ -2348,13 +2217,14 @@ } }, "es5-ext": { - "version": "0.10.40", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.40.tgz", - "integrity": "sha512-S9Fh3oya5OOvYSNGvPZJ+vyrs6VYpe1IXPowVe3N1OhaiwVaGlwfn3Zf5P5klYcWOA0toIwYQW8XEv/QqhdHvQ==", + "version": "0.10.42", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", + "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", "dev": true, "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, "es6-iterator": { @@ -2363,9 +2233,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-map": { @@ -2374,12 +2244,12 @@ "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" } }, "es6-object-assign": { @@ -2400,11 +2270,11 @@ "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40", - "es6-iterator": "2.0.3", + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" + "event-emitter": "~0.3.5" } }, "es6-symbol": { @@ -2413,8 +2283,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40" + "d": "1", + "es5-ext": "~0.10.14" } }, "es6-weak-map": { @@ -2423,10 +2293,10 @@ "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" } }, "escape-html": { @@ -2448,11 +2318,11 @@ "dev": true, "optional": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.6.1" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -2470,10 +2340,10 @@ "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", "dev": true, "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint": { @@ -2482,44 +2352,44 @@ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", "dev": true, "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.3.2", - "concat-stream": "1.6.2", - "cross-spawn": "5.1.0", - "debug": "3.1.0", - "doctrine": "2.1.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "11.4.0", - "ignore": "3.3.7", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.5", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "7.0.0", - "progress": "2.0.0", - "regexpp": "1.1.0", - "require-uncached": "1.0.3", - "semver": "5.5.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", "table": "4.0.2", - "text-table": "0.2.0" + "text-table": "~0.2.0" }, "dependencies": { "ansi-regex": { @@ -2528,18 +2398,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "typedarray": "0.0.6" - } - }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -2561,7 +2419,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -2572,8 +2430,8 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-visitor-keys": { @@ -2588,8 +2446,8 @@ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" }, "dependencies": { "acorn": { @@ -2612,7 +2470,7 @@ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -2621,7 +2479,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -2642,14 +2500,14 @@ "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.40" + "d": "1", + "es5-ext": "~0.10.14" } }, "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", "dev": true }, "events": { @@ -2664,8 +2522,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.1" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -2674,13 +2532,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "expand-braces": { @@ -2689,9 +2547,9 @@ "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "dev": true, "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" }, "dependencies": { "array-unique": { @@ -2706,7 +2564,7 @@ "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", "dev": true, "requires": { - "expand-range": "0.1.1" + "expand-range": "^0.1.0" } }, "expand-range": { @@ -2715,8 +2573,8 @@ "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" } }, "is-number": { @@ -2739,13 +2597,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2754,7 +2612,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -2763,65 +2621,8 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -2831,7 +2632,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" }, "dependencies": { "fill-range": { @@ -2840,11 +2641,11 @@ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "is-number": { @@ -2853,7 +2654,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "isobject": { @@ -2871,7 +2672,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2893,8 +2694,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2903,7 +2704,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2914,9 +2715,9 @@ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.19", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "extglob": { @@ -2925,14 +2726,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2941,7 +2742,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -2950,7 +2751,36 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -2967,17 +2797,6 @@ "yauzl": "2.4.1" }, "dependencies": { - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "typedarray": "0.0.6" - } - }, "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", @@ -3007,9 +2826,9 @@ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", "dev": true, "requires": { - "ansi-gray": "0.1.1", - "color-support": "1.1.3", - "time-stamp": "1.1.0" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "time-stamp": "^1.0.0" } }, "fast-deep-equal": { @@ -3036,7 +2855,7 @@ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", "dev": true, "requires": { - "pend": "1.2.0" + "pend": "~1.2.0" } }, "figures": { @@ -3045,7 +2864,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { @@ -3054,8 +2873,8 @@ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "file-uri-to-path": { @@ -3077,10 +2896,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -3089,7 +2908,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3101,12 +2920,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" }, "dependencies": { "statuses": { @@ -3123,9 +2942,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.2.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -3134,8 +2953,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "first-chunk-stream": { @@ -3150,10 +2969,10 @@ "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "dev": true, "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" }, "dependencies": { "circular-json": { @@ -3165,23 +2984,33 @@ } }, "flush-write-stream": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", - "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "follow-redirects": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", - "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.4.1.tgz", + "integrity": "sha512-uxYePVPogtya1ktGnAAXOacnbIuRMB4dkvqeNz2qTtTQsuzSfbDolV+wMMKxAmCx0bLgAKLbBOkjItMbbkR1vg==", "dev": true, - "optional": true, "requires": { - "debug": "2.6.9" + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } } }, "for-in": { @@ -3196,7 +3025,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "forever-agent": { @@ -3211,9 +3040,9 @@ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "mime-types": "^2.1.12" } }, "fragment-cache": { @@ -3222,7 +3051,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "from2": { @@ -3231,8 +3060,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-access": { @@ -3241,9 +3070,14 @@ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { - "null-check": "1.0.0" + "null-check": "^1.0.0" } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs-copy-file-sync": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fs-copy-file-sync/-/fs-copy-file-sync-1.0.1.tgz", @@ -3255,9 +3089,9 @@ "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" } }, "fs-minipass": { @@ -3265,7 +3099,7 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "requires": { - "minipass": "2.2.1" + "minipass": "^2.2.1" } }, "fs-write-stream-atomic": { @@ -3274,10 +3108,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.5" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -3293,7 +3127,7 @@ "dev": true, "optional": true, "requires": { - "readable-stream": "1.1.14", + "readable-stream": "1.1.x", "xregexp": "2.0.0" }, "dependencies": { @@ -3311,10 +3145,10 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3326,12 +3160,6 @@ } } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -3343,14 +3171,14 @@ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "generate-function": { @@ -3367,7 +3195,7 @@ "dev": true, "optional": true, "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, "get-caller-file": { @@ -3401,12 +3229,12 @@ "dev": true, "optional": true, "requires": { - "data-uri-to-buffer": "1.2.0", - "debug": "2.6.9", - "extend": "3.0.1", - "file-uri-to-path": "1.0.0", - "ftp": "0.3.10", - "readable-stream": "2.3.5" + "data-uri-to-buffer": "1", + "debug": "2", + "extend": "3", + "file-uri-to-path": "1", + "ftp": "~0.3.10", + "readable-stream": "2" } }, "get-value": { @@ -3421,7 +3249,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "github-from-package": { @@ -3435,12 +3263,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -3449,8 +3277,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -3459,7 +3287,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "glob-stream": { @@ -3468,14 +3296,14 @@ "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", "dev": true, "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" }, "dependencies": { "arr-diff": { @@ -3484,7 +3312,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -3499,9 +3327,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "expand-brackets": { @@ -3510,7 +3338,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -3519,7 +3347,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" }, "dependencies": { "is-extglob": { @@ -3536,11 +3364,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-parent": { @@ -3549,8 +3377,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, "is-extglob": { @@ -3565,7 +3393,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } }, "isarray": { @@ -3580,7 +3408,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -3589,19 +3417,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" }, "dependencies": { "is-extglob": { @@ -3616,7 +3444,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -3627,10 +3455,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3645,8 +3473,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -3663,12 +3491,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "glogg": { @@ -3677,7 +3505,7 @@ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", "dev": true, "requires": { - "sparkles": "1.0.0" + "sparkles": "^1.0.0" } }, "graceful-fs": { @@ -3698,17 +3526,17 @@ "integrity": "sha1-tDfR89mAzyboEYSCNxjOFa5ll7Y=", "dev": true, "requires": { - "@gulp-sourcemaps/map-sources": "1.0.0", - "acorn": "4.0.13", - "convert-source-map": "1.1.3", - "css": "2.2.1", - "debug-fabulous": "0.0.4", - "detect-newline": "2.1.0", - "graceful-fs": "4.1.11", - "source-map": "0.6.1", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" + "@gulp-sourcemaps/map-sources": "1.X", + "acorn": "4.X", + "convert-source-map": "1.X", + "css": "2.X", + "debug-fabulous": "0.0.X", + "detect-newline": "2.X", + "graceful-fs": "4.X", + "source-map": "~0.6.0", + "strip-bom": "2.X", + "through2": "2.X", + "vinyl": "1.X" }, "dependencies": { "source-map": { @@ -3725,11 +3553,11 @@ "integrity": "sha1-vADt8u5x8JvaU/0dC4c7VxNx1N4=", "dev": true, "requires": { - "gulp-util": "3.0.8", - "source-map": "0.5.7", - "through2": "2.0.3", + "gulp-util": "~3.0.7", + "source-map": "~0.5.3", + "through2": "~2.0.1", "typescript": "1.8.10", - "vinyl-fs": "2.4.4" + "vinyl-fs": "~2.4.3" }, "dependencies": { "typescript": { @@ -3746,24 +3574,24 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.2", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" + "through2": "^2.0.0", + "vinyl": "^0.5.0" }, "dependencies": { "ansi-styles": { @@ -3778,11 +3606,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "dateformat": { @@ -3809,8 +3637,8 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -3822,7 +3650,7 @@ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "glogg": "1.0.1" + "glogg": "^1.0.0" } }, "handlebars": { @@ -3831,10 +3659,10 @@ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "async": { @@ -3849,7 +3677,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "uglify-js": { @@ -3859,9 +3687,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "source-map": { @@ -3887,17 +3715,8 @@ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "1.1.1" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" } }, "has-ansi": { @@ -3906,7 +3725,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-binary2": { @@ -3944,7 +3763,7 @@ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "sparkles": "1.0.0" + "sparkles": "^1.0.0" } }, "has-unicode": { @@ -3958,9 +3777,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -3969,8 +3788,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -3979,18 +3798,19 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, "hash-base": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", - "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -3999,8 +3819,8 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.0" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, "hasha": { @@ -4009,8 +3829,8 @@ "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", "dev": true, "requires": { - "is-stream": "1.1.0", - "pinkie-promise": "2.0.1" + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" } }, "hawk": { @@ -4019,10 +3839,10 @@ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "dev": true, "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" + "boom": "4.x.x", + "cryptiles": "3.x.x", + "hoek": "4.x.x", + "sntp": "2.x.x" } }, "he": { @@ -4038,8 +3858,8 @@ "dev": true, "optional": true, "requires": { - "lodash": "4.17.5", - "request": "2.85.0" + "lodash": "^4.0.0", + "request": "^2.0.0" } }, "hmac-drbg": { @@ -4048,9 +3868,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.0", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoek": { @@ -4065,40 +3885,27 @@ "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "dev": true }, - "htmlescape": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", - "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", - "dev": true - }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.1", + "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", - "dev": true - } + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } }, "http-proxy": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", - "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "1.2.0", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-agent": { @@ -4107,9 +3914,9 @@ "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", "dev": true, "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" + "agent-base": "2", + "debug": "2", + "extend": "3" } }, "http-signature": { @@ -4118,9 +3925,9 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "httpntlm": { @@ -4129,8 +3936,8 @@ "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", "dev": true, "requires": { - "httpreq": "0.4.24", - "underscore": "1.7.0" + "httpreq": ">=0.4.22", + "underscore": "~1.7.0" } }, "httpreq": { @@ -4151,9 +3958,9 @@ "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", "dev": true, "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1" + "agent-base": "2", + "debug": "2", + "extend": "3" } }, "iconv-lite": { @@ -4163,9 +3970,9 @@ "dev": true }, "ieee754": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", - "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==", "dev": true }, "iferr": { @@ -4175,9 +3982,9 @@ "dev": true }, "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", + "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", "dev": true }, "imurmurhash": { @@ -4192,7 +3999,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "indexof": { @@ -4214,8 +4021,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4234,7 +4041,7 @@ "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "~0.5.3" } }, "inquirer": { @@ -4243,20 +4050,20 @@ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "dev": true, "requires": { - "ansi-escapes": "3.1.0", - "chalk": "2.3.2", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.5", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { "ansi-regex": { @@ -4277,8 +4084,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -4287,37 +4094,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "insert-module-globals": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.2.tgz", - "integrity": "sha512-p3s7g96Nm62MbHRuj9ZXab0DuJNWD7qcmdUXCOQ/ZZn42DtDXfsLill7bq19lDCx3K3StypqUnuE3H2VmIJFUw==", - "dev": true, - "requires": { - "JSONStream": "1.3.2", - "combine-source-map": "0.7.2", - "concat-stream": "1.5.2", - "is-buffer": "1.1.6", - "lexical-scope": "1.2.0", - "process": "0.11.10", - "through2": "2.0.3", - "xtend": "4.0.1" - }, - "dependencies": { - "combine-source-map": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", - "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", - "dev": true, - "requires": { - "convert-source-map": "1.1.3", - "inline-source-map": "0.6.2", - "lodash.memoize": "3.0.4", - "source-map": "0.5.7" + "ansi-regex": "^3.0.0" } } } @@ -4334,7 +4111,7 @@ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -4351,12 +4128,23 @@ "optional": true }, "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-arrayish": { @@ -4370,7 +4158,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -4385,27 +4173,46 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } } }, "is-dotfile": { @@ -4420,7 +4227,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -4441,7 +4248,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -4449,7 +4256,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-glob": { @@ -4458,7 +4265,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-my-ip-valid": { @@ -4475,11 +4282,11 @@ "dev": true, "optional": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-number": { @@ -4488,7 +4295,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4497,7 +4304,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4508,7 +4315,7 @@ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-number": "4.0.0" + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -4531,7 +4338,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -4540,7 +4347,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -4549,7 +4356,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -4648,20 +4455,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.11", - "js-yaml": "3.11.0", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.3.0", - "wordwrap": "1.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { "async": { @@ -4676,11 +4483,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" } }, "esprima": { @@ -4701,11 +4508,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-flag": { @@ -4714,12 +4521,6 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, "source-map": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", @@ -4727,7 +4528,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "supports-color": { @@ -4736,7 +4537,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -4747,8 +4548,8 @@ "integrity": "sha1-K9Wf1+xuwOistk4J9Fpo7SrRlSo=", "dev": true, "requires": { - "glob": "7.1.2", - "jasmine-core": "3.1.0" + "glob": "^7.0.6", + "jasmine-core": "~3.1.0" } }, "jasmine-core": { @@ -4769,8 +4570,8 @@ "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "dependencies": { "esprima": { @@ -4807,12 +4608,12 @@ "dev": true }, "json-stable-stringify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", - "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stable-stringify-without-jsonify": { @@ -4839,7 +4640,7 @@ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -4848,12 +4649,6 @@ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, "jsonpointer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", @@ -4880,39 +4675,38 @@ "dev": true }, "karma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.0.tgz", - "integrity": "sha512-K9Kjp8CldLyL9ANSUctDyxC7zH3hpqXj/K09qVf06K3T/kXaHtFZ5tQciK7OzQu68FLvI89Na510kqQ2LCbpIw==", - "dev": true, - "requires": { - "bluebird": "3.5.1", - "body-parser": "1.18.2", - "browserify": "14.5.0", - "chokidar": "1.7.0", - "colors": "1.2.1", - "combine-lists": "1.0.1", - "connect": "3.6.6", - "core-js": "2.5.3", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.16.2", - "isbinaryfile": "3.0.2", - "lodash": "4.17.5", - "log4js": "2.5.3", - "mime": "1.6.0", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.2.0", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.2.tgz", + "integrity": "sha1-TS25QChQpmVR+nhLAWT7CCTtjEs=", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^1.4.1", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.4", + "log4js": "^2.3.9", + "mime": "^1.3.4", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", "socket.io": "2.0.4", - "source-map": "0.6.1", + "source-map": "^0.6.1", "tmp": "0.0.33", - "useragent": "2.3.0" + "useragent": "2.2.1" }, "dependencies": { "source-map": { @@ -4935,8 +4729,8 @@ "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", "dev": true, "requires": { - "fs-access": "1.0.1", - "which": "1.3.0" + "fs-access": "^1.0.0", + "which": "^1.2.1" } }, "karma-coverage": { @@ -4945,11 +4739,11 @@ "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", "dev": true, "requires": { - "dateformat": "1.0.12", - "istanbul": "0.4.5", - "lodash": "3.10.1", - "minimatch": "3.0.4", - "source-map": "0.5.7" + "dateformat": "^1.0.6", + "istanbul": "^0.4.0", + "lodash": "^3.8.0", + "minimatch": "^3.0.0", + "source-map": "^0.5.1" }, "dependencies": { "lodash": { @@ -4972,7 +4766,7 @@ "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", "dev": true, "requires": { - "karma-jasmine": "1.1.1" + "karma-jasmine": "^1.0.2" } }, "karma-mocha": { @@ -4990,8 +4784,8 @@ "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", "dev": true, "requires": { - "lodash": "4.17.5", - "phantomjs-prebuilt": "2.1.16" + "lodash": "^4.0.1", + "phantomjs-prebuilt": "^2.1.7" } }, "karma-remap-coverage": { @@ -5000,7 +4794,7 @@ "integrity": "sha512-FM5h8eHcHbMMR+2INBUxD+4+wUbkCnobfn5uWprkLyj6Xcm2MRFQOuAJn9h2H13nNso6rk+QoNpHd5xCevlPOw==", "dev": true, "requires": { - "remap-istanbul": "0.10.1" + "remap-istanbul": "^0.10" } }, "karma-sinon": { @@ -5015,7 +4809,7 @@ "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.2" } }, "karma-typescript": { @@ -5024,54 +4818,48 @@ "integrity": "sha1-qiy90RFEKgnG28uq6vSEmWVMaRM=", "dev": true, "requires": { - "acorn": "4.0.13", - "assert": "1.4.1", - "async": "2.6.0", - "browser-resolve": "1.11.2", - "browserify-zlib": "0.2.0", - "buffer": "5.1.0", - "combine-source-map": "0.8.0", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "convert-source-map": "1.5.1", - "crypto-browserify": "3.12.0", - "diff": "3.5.0", - "domain-browser": "1.1.7", - "events": "1.1.1", - "glob": "7.1.2", - "https-browserify": "1.0.0", + "acorn": "^4.0.4", + "assert": "^1.4.1", + "async": "^2.1.4", + "browser-resolve": "^1.11.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.0.6", + "combine-source-map": "^0.8.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "convert-source-map": "^1.5.0", + "crypto-browserify": "^3.11.1", + "diff": "^3.2.0", + "domain-browser": "^1.1.7", + "events": "^1.1.1", + "glob": "^7.1.1", + "https-browserify": "^1.0.0", "istanbul": "0.4.5", - "json-stringify-safe": "5.0.1", - "karma-coverage": "1.1.1", - "lodash": "4.17.5", - "log4js": "1.1.1", - "minimatch": "3.0.4", - "os-browserify": "0.3.0", - "pad": "2.0.3", + "json-stringify-safe": "^5.0.1", + "karma-coverage": "^1.1.1", + "lodash": "^4.17.4", + "log4js": "^1.1.1", + "minimatch": "^3.0.3", + "os-browserify": "^0.3.0", + "pad": "^2.0.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.5", - "remap-istanbul": "0.10.1", + "process": "^0.11.10", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^2.3.3", + "remap-istanbul": "^0.10.1", "source-map": "0.6.1", - "stream-browserify": "2.0.1", - "stream-http": "2.8.1", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.6", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.3", + "timers-browserify": "^2.0.2", "tmp": "0.0.29", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - }, "date-format": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/date-format/-/date-format-0.0.0.tgz", @@ -5090,9 +4878,9 @@ "integrity": "sha1-wh0px2BAieTyVYM+f5SzRh3h/0M=", "dev": true, "requires": { - "debug": "2.6.9", - "semver": "5.5.0", - "streamroller": "0.4.1" + "debug": "^2.2.0", + "semver": "^5.3.0", + "streamroller": "^0.4.0" } }, "source-map": { @@ -5107,10 +4895,10 @@ "integrity": "sha1-1DW9WXQ3Or2b2QaDWVEwhRBswF8=", "dev": true, "requires": { - "date-format": "0.0.0", - "debug": "0.7.4", - "mkdirp": "0.5.1", - "readable-stream": "1.1.14" + "date-format": "^0.0.0", + "debug": "^0.7.2", + "mkdirp": "^0.5.1", + "readable-stream": "^1.1.7" }, "dependencies": { "debug": { @@ -5125,10 +4913,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -5139,29 +4927,14 @@ } } }, - "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", - "dev": true, - "requires": { - "setimmediate": "1.0.5" - } - }, "tmp": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true } } }, @@ -5171,7 +4944,7 @@ "integrity": "sha1-pO1Jdq8CoIAdF4Q3Vq2MzIAFPVo=", "dev": true, "requires": { - "typescript": "2.7.2" + "typescript": "^2.1.4" } }, "karma-typescript-preprocessor2": { @@ -5180,8 +4953,8 @@ "integrity": "sha1-aR1P6Et77IxrmgTNsOiHwXlCnoY=", "dev": true, "requires": { - "gulp-sourcemaps": "1.12.1", - "gulp-typescript": "2.14.1" + "gulp-sourcemaps": "^1.6.0", + "gulp-typescript": "^2.9.2" } }, "karma-webpack": { @@ -5190,12 +4963,12 @@ "integrity": "sha512-2cyII34jfrAabbI2+4Rk4j95Nazl98FvZQhgSiqKUDarT317rxfv/EdzZ60CyATN4PQxJdO5ucR5bOOXkEVrXw==", "dev": true, "requires": { - "async": "2.6.0", - "babel-runtime": "6.26.0", - "loader-utils": "1.1.0", - "lodash": "4.17.5", - "source-map": "0.5.7", - "webpack-dev-middleware": "1.12.2" + "async": "^2.0.0", + "babel-runtime": "^6.0.0", + "loader-utils": "^1.0.0", + "lodash": "^4.0.0", + "source-map": "^0.5.6", + "webpack-dev-middleware": "^1.12.0" } }, "kew": { @@ -5216,26 +4989,7 @@ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "dev": true, "requires": { - "graceful-fs": "4.1.11" - } - }, - "labeled-stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", - "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "isarray": "0.0.1", - "stream-splicer": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } + "graceful-fs": "^4.1.9" } }, "lazy-cache": { @@ -5256,7 +5010,7 @@ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { - "readable-stream": "2.3.5" + "readable-stream": "^2.0.5" } }, "lcid": { @@ -5265,7 +5019,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "levn": { @@ -5274,17 +5028,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lexical-scope": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", - "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", - "dev": true, - "requires": { - "astw": "2.2.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "libbase64": { @@ -5324,11 +5069,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, "loader-runner": { @@ -5343,9 +5088,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -5354,8 +5099,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "dependencies": { "path-exists": { @@ -5367,9 +5112,9 @@ } }, "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", "dev": true }, "lodash._basecopy": { @@ -5438,7 +5183,7 @@ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "3.0.1" + "lodash._root": "^3.0.0" } }, "lodash.get": { @@ -5471,9 +5216,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.memoize": { @@ -5494,15 +5239,15 @@ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "lodash.templatesettings": { @@ -5511,8 +5256,8 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, "log4js": { @@ -5521,19 +5266,19 @@ "integrity": "sha512-YL/qpTxYtK0iWWbuKCrevDZz5lh+OjyHHD+mICqpjnYGKdNRBvPeh/1uYjkKUemT1CSO4wwLOwphWMpKAnD9kw==", "dev": true, "requires": { - "amqplib": "0.5.2", - "axios": "0.15.3", - "circular-json": "0.5.1", - "date-format": "1.2.0", - "debug": "3.1.0", - "hipchat-notifier": "1.1.0", - "loggly": "1.1.1", - "mailgun-js": "0.7.15", - "nodemailer": "2.7.2", - "redis": "2.8.0", - "semver": "5.5.0", - "slack-node": "0.2.0", - "streamroller": "0.7.0" + "amqplib": "^0.5.2", + "axios": "^0.15.3", + "circular-json": "^0.5.1", + "date-format": "^1.2.0", + "debug": "^3.1.0", + "hipchat-notifier": "^1.1.0", + "loggly": "^1.1.0", + "mailgun-js": "^0.7.0", + "nodemailer": "^2.5.0", + "redis": "^2.7.1", + "semver": "^5.3.0", + "slack-node": "~0.2.0", + "streamroller": "^0.7.0" }, "dependencies": { "debug": { @@ -5554,9 +5299,9 @@ "dev": true, "optional": true, "requires": { - "json-stringify-safe": "5.0.1", - "request": "2.75.0", - "timespan": "2.3.0" + "json-stringify-safe": "5.0.x", + "request": "2.75.x", + "timespan": "2.3.x" }, "dependencies": { "ansi-styles": { @@ -5587,7 +5332,7 @@ "dev": true, "optional": true, "requires": { - "readable-stream": "2.0.6" + "readable-stream": "~2.0.5" } }, "boom": { @@ -5596,7 +5341,7 @@ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "caseless": { @@ -5613,11 +5358,11 @@ "dev": true, "optional": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "cryptiles": { @@ -5627,7 +5372,7 @@ "dev": true, "optional": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "form-data": { @@ -5637,9 +5382,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.11" } }, "har-validator": { @@ -5649,10 +5394,10 @@ "dev": true, "optional": true, "requires": { - "chalk": "1.1.3", - "commander": "2.15.0", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" } }, "hawk": { @@ -5662,10 +5407,10 @@ "dev": true, "optional": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -5681,9 +5426,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "node-uuid": { @@ -5714,12 +5459,12 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } }, "request": { @@ -5729,27 +5474,27 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "bl": "1.1.2", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.0.0", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "node-uuid": "1.4.8", - "oauth-sign": "0.8.2", - "qs": "6.2.3", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "bl": "~1.1.2", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.0.0", + "har-validator": "~2.0.6", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "node-uuid": "~1.4.7", + "oauth-sign": "~0.8.1", + "qs": "~6.2.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1" } }, "sntp": { @@ -5759,7 +5504,7 @@ "dev": true, "optional": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "string_decoder": { @@ -5803,7 +5548,7 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "loud-rejection": { @@ -5812,8 +5557,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lru-cache": { @@ -5841,15 +5586,15 @@ "dev": true, "optional": true, "requires": { - "async": "2.1.5", - "debug": "2.2.0", - "form-data": "2.1.4", - "inflection": "1.10.0", - "is-stream": "1.1.0", - "path-proxy": "1.0.0", - "proxy-agent": "2.0.0", - "q": "1.4.1", - "tsscmp": "1.0.5" + "async": "~2.1.2", + "debug": "~2.2.0", + "form-data": "~2.1.1", + "inflection": "~1.10.0", + "is-stream": "^1.1.0", + "path-proxy": "~1.0.0", + "proxy-agent": "~2.0.0", + "q": "~1.4.0", + "tsscmp": "~1.0.0" }, "dependencies": { "async": { @@ -5859,7 +5604,7 @@ "dev": true, "optional": true, "requires": { - "lodash": "4.17.5" + "lodash": "^4.14.0" } }, "debug": { @@ -5879,9 +5624,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "ms": { @@ -5899,7 +5644,7 @@ "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -5928,7 +5673,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "md5.js": { @@ -5937,20 +5682,8 @@ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - }, - "dependencies": { - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" - } - } + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "media-typer": { @@ -5965,7 +5698,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "memory-fs": { @@ -5974,8 +5707,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.5" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "meow": { @@ -5984,16 +5717,16 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" } }, "merge-stream": { @@ -6002,28 +5735,28 @@ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "dev": true, "requires": { - "readable-stream": "2.3.5" + "readable-stream": "^2.0.1" } }, "micromatch": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", - "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", - "dev": true, - "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.1", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -6032,8 +5765,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -6054,7 +5787,7 @@ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, "mimic-fn": { @@ -6069,9 +5802,9 @@ "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" }, "minimalistic-assert": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", - "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimalistic-crypto-utils": { @@ -6086,7 +5819,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -6095,11 +5828,12 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "minipass": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.1.tgz", - "integrity": "sha512-u1aUllxPJUI07cOqzR7reGmQxmCqlH88uIIsf6XZFEWgw7gXKpJdR+5R9Y3KEDmWYkdIz9wXZs3C0jOPxejk/Q==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.2.4.tgz", + "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", "requires": { - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -6107,7 +5841,7 @@ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz", "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", "requires": { - "minipass": "2.2.1" + "minipass": "^2.2.1" } }, "mississippi": { @@ -6116,16 +5850,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.5.2", - "duplexify": "3.5.4", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.2", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.4.0", - "stream-each": "1.2.2", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -6134,8 +5868,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -6144,7 +5878,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -6215,7 +5949,7 @@ "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -6226,19 +5960,19 @@ "integrity": "sha1-065ax93PKc+UfosO7Xc/pCKODM4=", "dev": true, "requires": { - "anymatch": "1.3.2", - "fs-extra": "0.30.0", - "glob-parent": "2.0.0", - "interpret": "1.1.0", - "invariant": "2.2.4", - "is-glob": "2.0.1", - "loader-utils": "0.2.17", - "lodash": "4.17.5", - "normalize-path": "2.1.1", - "object-hash": "1.2.0", - "webpack-info-plugin": "0.1.0", - "webpack-sources": "0.1.5", - "yargs": "4.8.1" + "anymatch": "^1.3.0", + "fs-extra": "^0.30.0", + "glob-parent": "^2.0.0", + "interpret": "^1.0.1", + "invariant": "^2.2.0", + "is-glob": "^2.0.1", + "loader-utils": "^0.2.13", + "lodash": "^4.3.0", + "normalize-path": "^2.0.1", + "object-hash": "^1.1.2", + "webpack-info-plugin": "^0.1.0", + "webpack-sources": "^0.1.1", + "yargs": "^4.8.0" }, "dependencies": { "cliui": { @@ -6247,9 +5981,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "fs-extra": { @@ -6258,11 +5992,11 @@ "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" } }, "loader-utils": { @@ -6271,10 +6005,10 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } }, "window-size": { @@ -6289,59 +6023,36 @@ "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", "dev": true, "requires": { - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "lodash.assign": "4.2.0", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "window-size": "0.2.0", - "y18n": "3.2.1", - "yargs-parser": "2.4.1" + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" } } } }, - "module-deps": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", - "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", - "dev": true, - "requires": { - "JSONStream": "1.3.2", - "browser-resolve": "1.11.2", - "cached-path-relative": "1.0.1", - "concat-stream": "1.5.2", - "defined": "1.0.0", - "detective": "4.7.1", - "duplexer2": "0.1.4", - "inherits": "2.0.3", - "parents": "1.0.1", - "readable-stream": "2.3.5", - "resolve": "1.5.0", - "stream-combiner2": "1.1.1", - "subarg": "1.0.0", - "through2": "2.0.3", - "xtend": "4.0.1" - } - }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -6357,41 +6068,6 @@ "dev": true, "requires": { "duplexer2": "0.0.2" - }, - "dependencies": { - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "1.1.14" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } } }, "mute-stream": { @@ -6401,9 +6077,9 @@ "dev": true }, "nan": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", - "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==" + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" }, "nanomatch": { "version": "1.2.9", @@ -6411,18 +6087,18 @@ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "natural-compare": { @@ -6438,9 +6114,9 @@ "dev": true }, "neo-async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", - "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", "dev": true }, "netmask": { @@ -6450,25 +6126,31 @@ "dev": true, "optional": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "nise": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.1.tgz", - "integrity": "sha512-kIH3X5YCj1vvj/32zDa9KNgzvfZd51ItGbiaCbtYhpnsCedLo0tIkb9zl169a41ATzF4z7kwMLz35XXDypma3g==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.3.tgz", + "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "just-extend": "1.1.27", - "lolex": "2.3.2", - "path-to-regexp": "1.7.0", - "text-encoding": "0.6.4" + "@sinonjs/formatio": "^2.0.0", + "just-extend": "^1.1.27", + "lolex": "^2.3.2", + "path-to-regexp": "^1.7.0", + "text-encoding": "^0.6.4" } }, "node-abi": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.3.0.tgz", - "integrity": "sha512-zwm6vU3SsVgw3e9fu48JBaRBCJGIvAgysDsqtf5+vEexFE71bEOtaMWb5zr/zODZNzTPtQlqUUpC79k68Hspow==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.4.0.tgz", + "integrity": "sha512-hRUz0vG+eJfSqwU6rOgW6wNyX85ec8OEE9n4A+u+eoiE8oTePhCkUFTNmwQ+86Kyu429PCLNNyI2P2jL9qKXhw==", "requires": { - "semver": "5.5.0" + "semver": "^5.4.1" } }, "node-libs-browser": { @@ -6477,28 +6159,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.1.7", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.5", - "stream-browserify": "2.0.1", - "stream-http": "2.8.1", - "string_decoder": "1.0.3", - "timers-browserify": "2.0.6", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.3", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -6508,25 +6190,10 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.2.3", - "ieee754": "1.1.8", - "isarray": "1.0.0" - } - }, - "timers-browserify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", - "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", - "dev": true, - "requires": { - "setimmediate": "1.0.5" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true } } }, @@ -6560,8 +6227,8 @@ "dev": true, "optional": true, "requires": { - "ip": "1.1.5", - "smart-buffer": "1.1.15" + "ip": "^1.1.2", + "smart-buffer": "^1.0.4" } } } @@ -6633,7 +6300,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } }, "normalize-package-data": { @@ -6642,10 +6309,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.3" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -6654,7 +6321,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-path": { @@ -6663,7 +6330,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npmlog": { @@ -6671,10 +6338,10 @@ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "null-check": { @@ -6711,9 +6378,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -6722,44 +6389,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -6768,15 +6398,15 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, "object-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz", - "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", + "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==", "dev": true }, "object-visit": { @@ -6785,7 +6415,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.omit": { @@ -6794,8 +6424,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -6804,7 +6434,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "on-finished": { @@ -6821,7 +6451,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -6830,7 +6460,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "optimist": { @@ -6839,8 +6469,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { "minimist": { @@ -6863,12 +6493,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "ordered-read-streams": { @@ -6877,8 +6507,8 @@ "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", "dev": true, "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.5" + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" } }, "os-browserify": { @@ -6898,7 +6528,7 @@ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { - "lcid": "1.0.0" + "lcid": "^1.0.0" } }, "os-tmpdir": { @@ -6919,7 +6549,7 @@ "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -6928,7 +6558,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.2.0" + "p-limit": "^1.1.0" } }, "p-try": { @@ -6944,15 +6574,15 @@ "dev": true, "optional": true, "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1", - "get-uri": "2.0.1", - "http-proxy-agent": "1.0.0", - "https-proxy-agent": "1.0.0", - "pac-resolver": "2.0.0", - "raw-body": "2.3.2", - "socks-proxy-agent": "2.1.1" + "agent-base": "2", + "debug": "2", + "extend": "3", + "get-uri": "2", + "http-proxy-agent": "1", + "https-proxy-agent": "1", + "pac-resolver": "~2.0.0", + "raw-body": "2", + "socks-proxy-agent": "2" } }, "pac-resolver": { @@ -6962,11 +6592,11 @@ "dev": true, "optional": true, "requires": { - "co": "3.0.6", - "degenerator": "1.0.4", + "co": "~3.0.6", + "degenerator": "~1.0.2", "ip": "1.0.1", - "netmask": "1.0.6", - "thunkify": "2.1.2" + "netmask": "~1.0.4", + "thunkify": "~2.1.1" }, "dependencies": { "co": { @@ -6984,7 +6614,7 @@ "integrity": "sha512-YVlBmpDQilhUl69RY/0Ku9Il0sNPLgVOVePhCJUfN8qDZKrq1zIY+ZwtCLtaWFtJzuJswwAcZHxf4a5RliV2pQ==", "dev": true, "requires": { - "wcwidth": "1.0.1" + "wcwidth": "^1.0.1" } }, "pako": { @@ -6999,31 +6629,22 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.5" - } - }, - "parents": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", - "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", - "dev": true, - "requires": { - "path-platform": "0.11.15" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "parse-asn1": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", - "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.1.1", - "create-hash": "1.1.3", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.14" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-glob": { @@ -7032,10 +6653,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parse-json": { @@ -7044,7 +6665,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parseqs": { @@ -7053,7 +6674,7 @@ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseuri": { @@ -7062,7 +6683,7 @@ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseurl": { @@ -7095,7 +6716,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -7122,12 +6743,6 @@ "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", "dev": true }, - "path-platform": { - "version": "0.11.15", - "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", - "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", - "dev": true - }, "path-proxy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz", @@ -7135,7 +6750,7 @@ "dev": true, "optional": true, "requires": { - "inflection": "1.3.8" + "inflection": "~1.3.0" }, "dependencies": { "inflection": { @@ -7170,9 +6785,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pathval": { @@ -7182,16 +6797,16 @@ "dev": true }, "pbkdf2": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", - "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "dev": true, "requires": { - "create-hash": "1.1.3", - "create-hmac": "1.1.6", - "ripemd160": "2.0.1", - "safe-buffer": "5.1.1", - "sha.js": "2.4.10" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "pend": { @@ -7212,15 +6827,15 @@ "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", "dev": true, "requires": { - "es6-promise": "4.2.4", - "extract-zip": "1.6.6", - "fs-extra": "1.0.0", - "hasha": "2.2.0", - "kew": "0.7.0", - "progress": "1.1.8", - "request": "2.85.0", - "request-progress": "2.0.1", - "which": "1.3.0" + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", + "hasha": "^2.2.0", + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" } }, "pify": { @@ -7237,11 +6852,11 @@ }, "pinkie-promise": { "version": "2.0.1", - "resolved": "http://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -7250,7 +6865,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" }, "dependencies": { "find-up": { @@ -7259,7 +6874,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } } } @@ -7270,11 +6885,11 @@ "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dev": true, "requires": { - "ansi-cyan": "0.1.1", - "ansi-red": "0.1.1", - "arr-diff": "1.1.0", - "arr-union": "2.1.0", - "extend-shallow": "1.1.4" + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" }, "dependencies": { "arr-diff": { @@ -7283,8 +6898,8 @@ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-slice": "0.2.3" + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" } }, "arr-union": { @@ -7299,7 +6914,7 @@ "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, "requires": { - "kind-of": "1.1.0" + "kind-of": "^1.1.0" } }, "kind-of": { @@ -7323,25 +6938,25 @@ "dev": true }, "prebuild-install": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.1.tgz", - "integrity": "sha512-3DX9L6pzwc1m1ksMkW3Ky2WLgPQUBiySOfXVl3WZyAeJSyJb4wtoH9OmeRGcubAWsMlLiL8BTHbwfm/jPQE9Ag==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz", + "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==", "requires": { - "detect-libc": "1.0.3", - "expand-template": "1.1.0", + "detect-libc": "^1.0.3", + "expand-template": "^1.0.2", "github-from-package": "0.0.0", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "node-abi": "2.3.0", - "noop-logger": "0.1.1", - "npmlog": "4.1.2", - "os-homedir": "1.0.2", - "pump": "2.0.1", - "rc": "1.2.6", - "simple-get": "2.7.0", - "tar-fs": "1.16.0", - "tunnel-agent": "0.6.0", - "which-pm-runs": "1.0.0" + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "node-abi": "^2.2.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "os-homedir": "^1.0.1", + "pump": "^2.0.1", + "rc": "^1.1.6", + "simple-get": "^2.7.0", + "tar-fs": "^1.13.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" } }, "prelude-ls": { @@ -7386,14 +7001,14 @@ "dev": true, "optional": true, "requires": { - "agent-base": "2.1.1", - "debug": "2.6.9", - "extend": "3.0.1", - "http-proxy-agent": "1.0.0", - "https-proxy-agent": "1.0.0", - "lru-cache": "2.6.5", - "pac-proxy-agent": "1.1.0", - "socks-proxy-agent": "2.1.1" + "agent-base": "2", + "debug": "2", + "extend": "3", + "http-proxy-agent": "1", + "https-proxy-agent": "1", + "lru-cache": "~2.6.5", + "pac-proxy-agent": "1", + "socks-proxy-agent": "2" } }, "prr": { @@ -7409,16 +7024,16 @@ "dev": true }, "public-encrypt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", - "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.1.3", - "parse-asn1": "5.1.0", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "pump": { @@ -7426,8 +7041,8 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -7436,9 +7051,9 @@ "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", "dev": true, "requires": { - "duplexify": "3.5.4", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.5.3", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -7484,8 +7099,8 @@ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -7494,7 +7109,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -7505,7 +7120,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -7514,8 +7129,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.1" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -7534,6 +7149,32 @@ "http-errors": "1.6.2", "iconv-lite": "0.4.19", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } } }, "rc": { @@ -7541,19 +7182,10 @@ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.6.tgz", "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - } - }, - "read-only-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", - "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", - "dev": true, - "requires": { - "readable-stream": "2.3.5" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" } }, "read-pkg": { @@ -7562,9 +7194,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -7573,22 +7205,22 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "readable-stream": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", - "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -7597,10 +7229,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.5", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "rechoir": { @@ -7609,7 +7241,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.5.0" + "resolve": "^1.1.6" } }, "redent": { @@ -7618,8 +7250,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "redis": { @@ -7629,9 +7261,9 @@ "dev": true, "optional": true, "requires": { - "double-ended-queue": "2.1.0-0", - "redis-commands": "1.3.5", - "redis-parser": "2.6.0" + "double-ended-queue": "^2.1.0-0", + "redis-commands": "^1.2.0", + "redis-parser": "^2.6.0" } }, "redis-commands": { @@ -7660,7 +7292,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -7669,8 +7301,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpp": { @@ -7681,59 +7313,23 @@ }, "remap-istanbul": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.10.1.tgz", - "integrity": "sha512-gsNQXs5kJLhErICSyYhzVZ++C8LBW8dgwr874Y2QvzAUS75zBlD/juZgXs39nbYJ09fZDlX2AVLVJAY2jbFJoQ==", - "dev": true, - "requires": { - "amdefine": "1.0.1", - "istanbul": "0.4.5", - "minimatch": "3.0.4", - "plugin-error": "0.1.2", - "source-map": "0.6.1", - "through2": "2.0.1" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - }, + "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.10.1.tgz", + "integrity": "sha512-gsNQXs5kJLhErICSyYhzVZ++C8LBW8dgwr874Y2QvzAUS75zBlD/juZgXs39nbYJ09fZDlX2AVLVJAY2jbFJoQ==", + "dev": true, + "requires": { + "amdefine": "^1.0.0", + "istanbul": "0.4.5", + "minimatch": "^3.0.3", + "plugin-error": "^0.1.2", + "source-map": "^0.6.1", + "through2": "2.0.1" + }, + "dependencies": { "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", - "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", - "dev": true, - "requires": { - "readable-stream": "2.0.6", - "xtend": "4.0.1" - } } } }, @@ -7761,7 +7357,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-ext": { @@ -7776,28 +7372,28 @@ "integrity": "sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==", "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "hawk": "~6.0.2", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "stringstream": "~0.0.5", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } }, "request-progress": { @@ -7806,7 +7402,7 @@ "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", "dev": true, "requires": { - "throttleit": "1.0.0" + "throttleit": "^1.0.0" } }, "requestretry": { @@ -7816,10 +7412,10 @@ "dev": true, "optional": true, "requires": { - "extend": "3.0.1", - "lodash": "4.17.5", - "request": "2.85.0", - "when": "3.7.8" + "extend": "^3.0.0", + "lodash": "^4.15.0", + "request": "^2.74.0", + "when": "^3.7.7" } }, "require-directory": { @@ -7840,8 +7436,8 @@ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "requires-port": { @@ -7851,13 +7447,10 @@ "dev": true }, "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "dev": true, - "requires": { - "path-parse": "1.0.5" - } + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true }, "resolve-from": { "version": "1.0.1", @@ -7877,8 +7470,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { @@ -7893,7 +7486,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -7902,17 +7495,17 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", - "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "2.0.2", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-async": { @@ -7921,7 +7514,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "run-queue": { @@ -7930,7 +7523,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "rx-lite": { @@ -7945,13 +7538,13 @@ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", "dev": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" } }, "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "safe-regex": { "version": "1.1.0", @@ -7959,7 +7552,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "samsam": { @@ -7974,19 +7567,20 @@ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "dev": true, "requires": { - "ajv": "6.2.1", - "ajv-keywords": "3.1.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" }, "dependencies": { "ajv": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", - "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "dev": true, "requires": { - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0", + "uri-js": "^3.0.2" } } } @@ -8003,9 +7597,9 @@ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "serialize-javascript": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", - "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", "dev": true }, "set-blocking": { @@ -8025,10 +7619,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -8037,7 +7631,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -8049,46 +7643,36 @@ "dev": true }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, "sha.js": { - "version": "2.4.10", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", - "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "sharp": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.20.0.tgz", - "integrity": "sha512-ogCqr7vsDmkF2I1dYIomExrUPWiUawIfXll6lSzQxHAItibHFj8MI5/o3L16Ng8MQOeaDjYg9O6QgxM4MRj32w==", - "requires": { - "color": "3.0.0", - "detect-libc": "1.0.3", - "fs-copy-file-sync": "1.0.1", - "nan": "2.9.2", - "npmlog": "4.1.2", - "prebuild-install": "2.5.1", - "semver": "5.5.0", - "simple-get": "2.7.0", - "tar": "4.4.0", - "tunnel-agent": "0.6.0" - } - }, - "shasum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", - "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", - "dev": true, - "requires": { - "json-stable-stringify": "0.0.1", - "sha.js": "2.4.10" + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.20.1.tgz", + "integrity": "sha512-Mj6zWnt3vG8TraXqkrjdql4BkKXhoLmHP8+yZglx7Nc1EH5YaClqur/JKRWpkPzPHbYayBt6rxXqfPd2tgYvvg==", + "requires": { + "color": "^3.0.0", + "detect-libc": "^1.0.3", + "fs-copy-file-sync": "^1.0.1", + "nan": "^2.10.0", + "npmlog": "^4.1.2", + "prebuild-install": "^2.5.1", + "semver": "^5.5.0", + "simple-get": "^2.7.0", + "tar": "^4.4.0", + "tunnel-agent": "^0.6.0" } }, "shebang-command": { @@ -8097,7 +7681,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -8106,27 +7690,15 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" - } - }, "shelljs": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", "dev": true, "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, "shx": { @@ -8135,9 +7707,9 @@ "integrity": "sha1-CjBNAgsO3xMGrYFXDoDwNG31ijk=", "dev": true, "requires": { - "es6-object-assign": "1.1.0", - "minimist": "1.2.0", - "shelljs": "0.7.8" + "es6-object-assign": "^1.0.3", + "minimist": "^1.2.0", + "shelljs": "^0.7.3" } }, "signal-exit": { @@ -8151,13 +7723,13 @@ "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" }, "simple-get": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.7.0.tgz", - "integrity": "sha512-RkE9rGPHcxYZ/baYmgJtOSM63vH0Vyq+ma5TijBcLla41SWlh8t6XYIGMR/oeZcmr+/G8k+zrClkkVrtnQ0esg==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", "requires": { - "decompress-response": "3.3.0", - "once": "1.4.0", - "simple-concat": "1.0.0" + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, "simple-swizzle": { @@ -8165,22 +7737,22 @@ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { - "is-arrayish": "0.3.1" + "is-arrayish": "^0.3.1" } }, "sinon": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.4.6.tgz", - "integrity": "sha512-bzQag30yErCC4lJPv+C2HcmD1+3ula4JQNePZldKcagi0Exq6XDfcC2yqXVfEwtfTIq1rYGujrUIZbwHPpKjog==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.5.0.tgz", + "integrity": "sha512-trdx+mB0VBBgoYucy6a9L7/jfQOmvGeaKZT4OOJ+lPAtI8623xyGr8wLiE4eojzBS8G9yXbhx42GHUOVLr4X2w==", "dev": true, "requires": { - "@sinonjs/formatio": "2.0.0", - "diff": "3.5.0", - "lodash.get": "4.4.2", - "lolex": "2.3.2", - "nise": "1.3.1", - "supports-color": "5.3.0", - "type-detect": "4.0.8" + "@sinonjs/formatio": "^2.0.0", + "diff": "^3.1.0", + "lodash.get": "^4.4.2", + "lolex": "^2.2.0", + "nise": "^1.2.0", + "supports-color": "^5.1.0", + "type-detect": "^4.0.5" } }, "slack-node": { @@ -8190,7 +7762,7 @@ "dev": true, "optional": true, "requires": { - "requestretry": "1.13.0" + "requestretry": "^1.2.2" } }, "slice-ansi": { @@ -8199,7 +7771,7 @@ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" }, "dependencies": { "is-fullwidth-code-point": { @@ -8232,14 +7804,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "3.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -8248,7 +7820,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -8257,65 +7829,8 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-extendable": "^0.1.0" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, @@ -8325,9 +7840,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -8336,7 +7851,36 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -8347,7 +7891,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -8356,7 +7900,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8367,7 +7911,7 @@ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" } }, "socket.io": { @@ -8376,11 +7920,11 @@ "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", "dev": true, "requires": { - "debug": "2.6.9", - "engine.io": "3.1.5", - "socket.io-adapter": "1.1.1", + "debug": "~2.6.6", + "engine.io": "~3.1.0", + "socket.io-adapter": "~1.1.0", "socket.io-client": "2.0.4", - "socket.io-parser": "3.1.3" + "socket.io-parser": "~3.1.1" } }, "socket.io-adapter": { @@ -8399,14 +7943,14 @@ "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "2.6.9", - "engine.io-client": "3.1.6", + "debug": "~2.6.4", + "engine.io-client": "~3.1.0", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "3.1.3", + "socket.io-parser": "~3.1.1", "to-array": "0.1.4" } }, @@ -8417,8 +7961,8 @@ "dev": true, "requires": { "component-emitter": "1.2.1", - "debug": "3.1.0", - "has-binary2": "1.0.2", + "debug": "~3.1.0", + "has-binary2": "~1.0.2", "isarray": "2.0.1" }, "dependencies": { @@ -8445,8 +7989,8 @@ "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", "dev": true, "requires": { - "ip": "1.1.5", - "smart-buffer": "1.1.15" + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" }, "dependencies": { "ip": { @@ -8463,9 +8007,9 @@ "integrity": "sha512-sFtmYqdUK5dAMh85H0LEVFUCO7OhJJe1/z2x/Z6mxp3s7/QPf1RkZmpZy+BpuU0bEjcV9npqKjq9Y3kwFUjnxw==", "dev": true, "requires": { - "agent-base": "2.1.1", - "extend": "3.0.1", - "socks": "1.1.10" + "agent-base": "2", + "extend": "3", + "socks": "~1.1.5" } }, "source-list-map": { @@ -8486,20 +8030,21 @@ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "dev": true, "requires": { - "atob": "2.0.3", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.0.0", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.4.tgz", - "integrity": "sha512-PETSPG6BjY1AHs2t64vS2aqAgu6dMIMXJULWFBGbh2Gr8nVLbCFDo6i/RMMvviIQ2h1Z8+5gQhVKSn2je9nmdg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", + "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", "dev": true, "requires": { - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { @@ -8528,8 +8073,8 @@ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -8544,8 +8089,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -8560,7 +8105,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -8575,14 +8120,14 @@ "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" } }, "ssri": { @@ -8591,7 +8136,7 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.1.1" } }, "static-extend": { @@ -8600,8 +8145,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -8610,72 +8155,15 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "3.2.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "1.1.6" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-descriptor": "^0.1.0" } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true } } }, "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, "stream-browserify": { @@ -8684,18 +8172,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5" - } - }, - "stream-combiner2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", - "dev": true, - "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.5" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -8704,8 +8182,8 @@ "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -8714,11 +8192,11 @@ "integrity": "sha512-cQ0jo17BLca2r0GfRdZKYAGLU6JRoIWxqSOakUMuKOT6MOK7AAlE856L33QuDmAy/eeOrhLee3dZKX0Uadu93A==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.3", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -8727,26 +8205,16 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "stream-splicer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", - "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5" - } - }, "streamroller": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", "dev": true, "requires": { - "date-format": "1.2.0", - "debug": "3.1.0", - "mkdirp": "0.5.1", - "readable-stream": "2.3.5" + "date-format": "^1.2.0", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "readable-stream": "^2.3.0" }, "dependencies": { "debug": { @@ -8765,17 +8233,17 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -8789,7 +8257,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -8798,7 +8266,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-bom-stream": { @@ -8807,8 +8275,8 @@ "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", "dev": true, "requires": { - "first-chunk-stream": "1.0.0", - "strip-bom": "2.0.0" + "first-chunk-stream": "^1.0.0", + "strip-bom": "^2.0.0" } }, "strip-eof": { @@ -8823,7 +8291,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, "strip-json-comments": { @@ -8831,31 +8299,13 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "1.2.0" - } - }, "supports-color": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", - "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } - }, - "syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "acorn-node": "1.3.0" + "has-flag": "^3.0.0" } }, "table": { @@ -8864,12 +8314,12 @@ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "dev": true, "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.3.2", - "lodash": "4.17.5", + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", "slice-ansi": "1.0.0", - "string-width": "2.1.1" + "string-width": "^2.1.1" }, "dependencies": { "ajv-keywords": { @@ -8896,8 +8346,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { @@ -8906,7 +8356,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -8918,16 +8368,17 @@ "dev": true }, "tar": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.0.tgz", - "integrity": "sha512-gJlTiiErwo96K904FnoYWl+5+FBgS+FimU6GMh66XLdLa55al8+d4jeDfPoGwSNHdtWI5FJP6xurmVqhBuGJpQ==", - "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.1", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "yallist": "3.0.2" + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.1.tgz", + "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "tar-fs": { @@ -8935,10 +8386,10 @@ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.0.tgz", "integrity": "sha512-I9rb6v7mjWLtOfCau9eH5L7sLJyU2BnxtEZRQ5Mt+eRKmf1F0ohXmT/Jc3fr52kDvjJ/HV5MH3soQfPL5bQ0Yg==", "requires": { - "chownr": "1.0.1", - "mkdirp": "0.5.1", - "pump": "1.0.3", - "tar-stream": "1.5.5" + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" }, "dependencies": { "pump": { @@ -8946,21 +8397,24 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } }, "tar-stream": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", - "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.7.tgz", + "integrity": "sha512-euyxmyeJpl6wjWGnzPfZRQ1IGLNbqEDJWuYyue9sixDY2vfqVBRiIqZLWYhWG5da031WF4qEN9D9Ek9lZHiH1Q==", "requires": { - "bl": "1.2.1", - "end-of-stream": "1.4.1", - "readable-stream": "2.3.5", - "xtend": "4.0.1" + "bl": "^1.0.0", + "buffer-alloc": "^1.1.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.0.0", + "to-buffer": "^1.1.0", + "xtend": "^4.0.0" } }, "text-encoding": { @@ -8987,13 +8441,41 @@ "dev": true }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", + "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", "dev": true, "requires": { - "readable-stream": "2.3.5", - "xtend": "4.0.1" + "readable-stream": "~2.0.0", + "xtend": "~4.0.0" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } } }, "through2-filter": { @@ -9002,8 +8484,8 @@ "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", "dev": true, "requires": { - "through2": "2.0.3", - "xtend": "4.0.1" + "through2": "~2.0.0", + "xtend": "~4.0.0" } }, "thunkify": { @@ -9020,12 +8502,12 @@ "dev": true }, "timers-browserify": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", - "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "process": "0.11.10" + "setimmediate": "^1.0.4" } }, "timespan": { @@ -9041,7 +8523,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "to-absolute-glob": { @@ -9050,7 +8532,7 @@ "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", "dev": true, "requires": { - "extend-shallow": "2.0.1" + "extend-shallow": "^2.0.1" }, "dependencies": { "extend-shallow": { @@ -9059,7 +8541,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -9076,13 +8558,18 @@ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -9091,7 +8578,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -9102,10 +8589,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -9114,8 +8601,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "tough-cookie": { @@ -9124,7 +8611,7 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "trim-newlines": { @@ -9139,11 +8626,11 @@ "integrity": "sha512-JTia3kObhTk36wPFgy0RnkZReiusYx7Le9IhcUWRrCTcFcr6Dy1zGsFd3x8DG4gevlbN65knI8W50FfoykXcng==", "dev": true, "requires": { - "chalk": "2.3.2", - "enhanced-resolve": "3.3.0", - "loader-utils": "1.1.0", - "micromatch": "3.1.9", - "semver": "5.5.0" + "chalk": "^2.3.0", + "enhanced-resolve": "^3.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^3.1.4", + "semver": "^5.0.1" } }, "tslib": { @@ -9158,18 +8645,29 @@ "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.3.2", - "commander": "2.15.0", - "diff": "3.5.0", - "glob": "7.1.2", - "js-yaml": "3.11.0", - "minimatch": "3.0.4", - "resolve": "1.5.0", - "semver": "5.5.0", - "tslib": "1.9.0", - "tsutils": "2.22.2" + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.12.1" + }, + "dependencies": { + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + } } }, "tsscmp": { @@ -9180,18 +8678,18 @@ "optional": true }, "tsutils": { - "version": "2.22.2", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.22.2.tgz", - "integrity": "sha512-u06FUSulCJ+Y8a2ftuqZN6kIGqdP2yJjUPEngXqmdPND4UQfb04igcotH+dw+IFr417yP6muCLE8/5/Qlfnx0w==", + "version": "2.26.2", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.26.2.tgz", + "integrity": "sha512-uzwnhmrSbyinPCiwfzGsOY3IulBTwoky7r83HmZdz9QNCjhSCzavkh47KLWuU0zF2F2WbpmmzoJUIEiYyd+jEQ==", "dev": true, "requires": { - "tslib": "1.9.0" + "tslib": "^1.8.1" } }, "tty-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", - "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, "tunnel-agent": { @@ -9199,7 +8697,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -9215,7 +8713,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-detect": { @@ -9231,7 +8729,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.18" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -9241,19 +8739,19 @@ "dev": true }, "typescript": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", - "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.8.3.tgz", + "integrity": "sha512-K7g15Bb6Ra4lKf7Iq2l/I5/En+hLIHmxWZGq3D4DIRNFxMNV6j2SHSvDOqs2tGd4UvD/fJvrwopzQXjLrT7Itw==", "dev": true }, "uglify-js": { - "version": "3.3.15", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.15.tgz", - "integrity": "sha512-bqtBCAINYXX/OkdnqMGpbXr+OPWc00hsozRpk+dAtfnbdk2jjKiLmyOkQ7zamg648lVMnzATL8JrSN6LmaVpYA==", + "version": "3.3.22", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.22.tgz", + "integrity": "sha512-tqw96rL6/BG+7LM5VItdhDjTQmL5zG/I0b2RqWytlgeHe2eydZHuBHdA9vuGpCDhH/ZskNGcqDhivoR2xt8RIw==", "dev": true, "requires": { - "commander": "2.15.0", - "source-map": "0.6.1" + "commander": "~2.15.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -9272,19 +8770,19 @@ "optional": true }, "uglifyjs-webpack-plugin": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.3.tgz", - "integrity": "sha512-as/50351uuJGiQbhVvE510SCqM/YOWghCzIFJeEOu5oVE0QOZ3/vu2QcnVvu0Lz+vNd0rKsiCFAlbcw0i/YH2w==", - "dev": true, - "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.5", - "serialize-javascript": "1.4.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.1.0", - "worker-farm": "1.6.0" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", + "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "commander": { @@ -9311,8 +8809,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" } }, "webpack-sources": { @@ -9321,8 +8819,8 @@ "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } } } @@ -9333,12 +8831,6 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, - "umd": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", - "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", - "dev": true - }, "underscore": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", @@ -9351,10 +8843,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -9363,7 +8855,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -9372,10 +8864,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -9386,7 +8878,7 @@ "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", "dev": true, "requires": { - "unique-slug": "2.0.0" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -9395,7 +8887,7 @@ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unique-stream": { @@ -9404,19 +8896,8 @@ "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", "dev": true, "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" - }, - "dependencies": { - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - } + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" } }, "unpipe": { @@ -9431,8 +8912,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -9441,9 +8922,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -9471,6 +8952,23 @@ "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", "dev": true }, + "uri-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", + "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true + } + } + }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", @@ -9501,33 +8999,23 @@ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" } }, "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", + "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", "dev": true, "requires": { - "lru-cache": "4.1.2", - "tmp": "0.0.33" + "lru-cache": "2.2.x", + "tmp": "0.0.x" }, "dependencies": { "lru-cache": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", "dev": true } } @@ -9585,8 +9073,8 @@ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "verror": { @@ -9595,9 +9083,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "vinyl": { @@ -9606,8 +9094,8 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } }, @@ -9617,23 +9105,23 @@ "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", "dev": true, "requires": { - "duplexify": "3.5.4", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", "gulp-sourcemaps": "1.6.0", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "readable-stream": "2.3.5", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "vinyl": "1.2.0" + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" }, "dependencies": { "gulp-sourcemaps": { @@ -9642,11 +9130,11 @@ "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", "dev": true, "requires": { - "convert-source-map": "1.1.3", - "graceful-fs": "4.1.11", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" + "convert-source-map": "^1.1.1", + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0" } } } @@ -9667,14 +9155,14 @@ "dev": true }, "watchpack": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", - "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "2.0.2", - "graceful-fs": "4.1.11", - "neo-async": "2.5.0" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" }, "dependencies": { "anymatch": { @@ -9683,27 +9171,27 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.9", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "chokidar": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", - "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.1", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.0.4" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.0" } }, "glob-parent": { @@ -9712,8 +9200,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -9722,7 +9210,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -9739,7 +9227,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } } } @@ -9750,7 +9238,7 @@ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "requires": { - "defaults": "1.0.3" + "defaults": "^1.0.3" } }, "webpack": { @@ -9759,28 +9247,28 @@ "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", "dev": true, "requires": { - "acorn": "5.5.3", - "acorn-dynamic-import": "2.0.2", - "ajv": "6.2.1", - "ajv-keywords": "3.1.0", - "async": "2.6.0", - "enhanced-resolve": "3.4.1", - "escope": "3.6.0", - "interpret": "1.1.0", - "json-loader": "0.5.7", - "json5": "0.5.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "mkdirp": "0.5.1", - "node-libs-browser": "2.1.0", - "source-map": "0.5.7", - "supports-color": "4.5.0", - "tapable": "0.2.8", - "uglifyjs-webpack-plugin": "0.4.6", - "watchpack": "1.5.0", - "webpack-sources": "1.1.0", - "yargs": "8.0.2" + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" }, "dependencies": { "acorn": { @@ -9790,14 +9278,15 @@ "dev": true }, "ajv": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", - "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "dev": true, "requires": { - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0", + "uri-js": "^3.0.2" } }, "ansi-regex": { @@ -9818,10 +9307,10 @@ "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "object-assign": "4.1.1", - "tapable": "0.2.8" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" } }, "find-up": { @@ -9830,7 +9319,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "has-flag": { @@ -9845,10 +9334,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "os-locale": { @@ -9857,9 +9346,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "path-type": { @@ -9868,7 +9357,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "read-pkg": { @@ -9877,9 +9366,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -9888,8 +9377,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "source-list-map": { @@ -9904,8 +9393,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "is-fullwidth-code-point": { @@ -9920,7 +9409,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -9937,7 +9426,7 @@ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } }, "uglify-js": { @@ -9946,9 +9435,9 @@ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "yargs": { @@ -9957,9 +9446,9 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } } @@ -9971,9 +9460,9 @@ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-js": "2.8.29", - "webpack-sources": "1.1.0" + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" } }, "webpack-sources": { @@ -9982,8 +9471,8 @@ "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -10006,19 +9495,19 @@ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", "dev": true, "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" }, "dependencies": { "camelcase": { @@ -10033,9 +9522,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" }, "dependencies": { "string-width": { @@ -10044,9 +9533,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } } } @@ -10059,7 +9548,7 @@ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { @@ -10100,11 +9589,11 @@ "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "1.6.0", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "time-stamp": "2.0.0" + "memory-fs": "~0.4.1", + "mime": "^1.5.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "time-stamp": "^2.0.0" }, "dependencies": { "time-stamp": { @@ -10121,7 +9610,7 @@ "integrity": "sha1-3/56qI/LlsWcxFCXZCHq+YzbeQE=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.1" }, "dependencies": { "ansi-styles": { @@ -10136,11 +9625,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -10152,9 +9641,9 @@ } }, "webpack-node-externals": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-1.6.0.tgz", - "integrity": "sha1-Iyxi7GCSsQBjWj0p2DwXRxKN+b0=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz", + "integrity": "sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg==", "dev": true }, "webpack-sources": { @@ -10163,8 +9652,8 @@ "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", "dev": true, "requires": { - "source-list-map": "0.1.8", - "source-map": "0.5.7" + "source-list-map": "~0.1.7", + "source-map": "~0.5.3" } }, "when": { @@ -10180,7 +9669,7 @@ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -10199,7 +9688,7 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "window-size": { @@ -10220,7 +9709,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -10229,8 +9718,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { @@ -10244,7 +9733,7 @@ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "ws": { @@ -10253,9 +9742,9 @@ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } }, "xmlhttprequest-ssl": { @@ -10294,9 +9783,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" }, "dependencies": { @@ -10315,8 +9804,8 @@ "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", "dev": true, "requires": { - "camelcase": "3.0.0", - "lodash.assign": "4.2.0" + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" }, "dependencies": { "camelcase": { @@ -10333,7 +9822,7 @@ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", "dev": true, "requires": { - "fd-slicer": "1.0.1" + "fd-slicer": "~1.0.1" } }, "yeast": { From 1ef9ee8979fe5aeb9c8abb21c8ed6107cd589175 Mon Sep 17 00:00:00 2001 From: Luiz Filipe Machado Barni Date: Thu, 26 Apr 2018 22:56:08 -0300 Subject: [PATCH 12/12] no docs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 519aea81..477b663a 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Multi-format 1D/2D barcode image processing library. | ---------- | ------------------------ | -------------- | ~UPC-A~ | ~Code 39~ | QR Code | ~UPC-E~ | ~Code 93~ | ~Data Matrix~ -| ~EAN-8~ | Code 128 (_in-progress_) | ~Aztec (beta)~ +| ~EAN-8~ | Code 128 (_no docs_) | ~Aztec (beta)~ | ~EAN-13~ | ~Codabar~ | PDF 417 (_in-progress_) | | ~ITF~ | ~MaxiCode~ | | ~RSS-14~ |