Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@universe/util

Package Overview
Dependencies
Maintainers
0
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@universe/util - npm Package Compare versions

Comparing version 1.2.2 to 1.3.0

1

dist/cjs/src/index.d.ts

@@ -61,2 +61,3 @@ export declare const isNull: (v: unknown) => v is null;

export declare const abbrNum: (num: number, fixed?: number) => string | null;
export declare function sha1Digest(message: string): Promise<string>;
export declare function sha256Digest(message: string): Promise<string>;

@@ -63,0 +64,0 @@ export declare const toLowerCase: (str: string) => string;

73

dist/cjs/test/index.js
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
/* global describe, it */
const fs = require("fs");
const path = require("path");
const assert = __importStar(require("assert"));
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const index_1 = require("../src/index");
const assert = require("assert");
describe('Utils', function () {
describe('debounce should', function () {
it('delay a call', async function () {
describe('Utils', () => {
describe('debounce should', () => {
it('delay a call', async () => {
const first = Date.now();

@@ -16,3 +39,3 @@ let second = 0;

});
it('only call the function once', async function () {
it('only call the function once', async () => {
const first = Date.now();

@@ -24,3 +47,3 @@ let second = 0;

second = Date.now();
}, 1000);
}, 1200);
func();

@@ -48,8 +71,8 @@ func();

});
it('runs md5', function () {
it('runs md5', () => {
assert.strictEqual((0, index_1.md5)('hello'), '5d41402abc4b2a76b9719d911017c592');
assert.strictEqual((0, index_1.md5)('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 'c1906fa4ec71ebdc02c49c5d19908a39');
assert.strictEqual((0, index_1.md5)(fs.readFileSync(path.join(__dirname, '../../fixtures/share.jpg'), 'binary')), '7b55446ad872973c5db5006905cc92aa');
assert.strictEqual((0, index_1.md5)(fs.readFileSync(path.join(__dirname, '../../../fixtures/share.jpg'), 'binary')), '7b55446ad872973c5db5006905cc92aa');
});
it('runs base64Url', function () {
it('runs base64Url', () => {
assert.strictEqual((0, index_1.base64UrlEncode)('Adam Miller'), 'QWRhbSBNaWxsZXI');

@@ -60,3 +83,3 @@ assert.strictEqual((0, index_1.base64UrlDecode)((0, index_1.base64UrlEncode)('Adam Miller')), 'Adam Miller');

});
it('runs base85UuidEncode / base85UuidEncode', function () {
it('runs base85UuidEncode / base85UuidEncode', () => {
const id = '1d0d0699-7002-4273-b013-2a963852c388';

@@ -75,3 +98,3 @@ const encoded = (0, index_1.base85UuidEncode)(id);

});
it('validates emails', function () {
it('validates emails', () => {
assert.ok((0, index_1.validateEmail)('adam@universe.app'));

@@ -114,3 +137,3 @@ assert.ok((0, index_1.validateEmail)('adam+tag@universe.app'));

});
describe('deferrable should', function () {
describe('deferrable should', () => {
it('resolve', async () => {

@@ -139,4 +162,4 @@ let runs = false;

});
describe('string methods should', function () {
it('run toLowerCase', function () {
describe('string methods should', () => {
it('run toLowerCase', () => {
assert.strictEqual((0, index_1.toLowerCase)('WORKS'), 'works');

@@ -146,3 +169,3 @@ assert.strictEqual((0, index_1.toLowerCase)('works'), 'works');

});
it('run toUpperCase', function () {
it('run toUpperCase', () => {
assert.strictEqual((0, index_1.toUpperCase)('WORKS'), 'WORKS');

@@ -152,3 +175,3 @@ assert.strictEqual((0, index_1.toUpperCase)('works'), 'WORKS');

});
it('run toSnakeCase', function () {
it('run toSnakeCase', () => {
assert.strictEqual((0, index_1.toSnakeCase)('WORKS'), 'works');

@@ -163,3 +186,3 @@ assert.strictEqual((0, index_1.toSnakeCase)('works'), 'works');

});
it('run toKebabCase', function () {
it('run toKebabCase', () => {
assert.strictEqual((0, index_1.toKebabCase)('WORKS'), 'works');

@@ -173,3 +196,3 @@ assert.strictEqual((0, index_1.toKebabCase)('works'), 'works');

});
it('run toTitleCase', function () {
it('run toTitleCase', () => {
assert.strictEqual((0, index_1.toTitleCase)('WORKS'), 'WORKS');

@@ -183,3 +206,3 @@ assert.strictEqual((0, index_1.toTitleCase)('works'), 'Works');

});
it('run toPascalCase', function () {
it('run toPascalCase', () => {
assert.strictEqual((0, index_1.toPascalCase)('WORKS'), 'Works');

@@ -193,3 +216,3 @@ assert.strictEqual((0, index_1.toPascalCase)('works'), 'Works');

});
it('run toCamelCase', function () {
it('run toCamelCase', () => {
assert.strictEqual((0, index_1.toCamelCase)('WORKS'), 'works');

@@ -203,3 +226,3 @@ assert.strictEqual((0, index_1.toCamelCase)('works'), 'works');

});
it('run toNameCase', function () {
it('run toNameCase', () => {
assert.strictEqual((0, index_1.toNameCase)('WORKS'), 'Works');

@@ -217,3 +240,3 @@ assert.strictEqual((0, index_1.toNameCase)('works'), 'Works');

});
describe('Local Hours to UTC', function () {
describe('Local Hours to UTC', () => {
it('should convert local hours to utc while maintaining minutes elapsed', () => {

@@ -239,2 +262,2 @@ assert.strictEqual((0, index_1.localHourToUTC)(2.5), 10.5);

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0Isd0NBdUJzQjtBQUV0QixpQ0FBaUM7QUFFakMsUUFBUSxDQUFDLE9BQU8sRUFBRTtJQUNoQixRQUFRLENBQUMsaUJBQWlCLEVBQUU7UUFDMUIsRUFBRSxDQUFDLGNBQWMsRUFBRSxLQUFLO1lBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDZixNQUFNLElBQUEsZ0JBQVEsRUFBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEtBQUs7WUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLE1BQU0sSUFBSSxHQUFHLElBQUEsZ0JBQVEsRUFBQyxHQUFHLEVBQUU7Z0JBQ3pCLEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUNiLE1BQU0sQ0FBQyxFQUFFLENB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VyxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFdBQVcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlCQUFpQixFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFdBQVcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtCQUFrQixFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxvQkFBWSxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxvQkFBWSxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxvQkFBWSxFQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxvQkFBWSxFQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxvQkFBWSxFQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxvQkFBWSxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxvQkFBWSxFQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlCQUFpQixFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdCQUFnQixFQUFFO1lBQ25CLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLG1CQUFtQixDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUN6RSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsa0JBQVUsRUFBQyxpQkFBaUIsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1lBQzdFLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxzQkFBYyxFQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlFQUF5RSxFQUFFLEdBQUcsRUFBRTtZQUNqRixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsc0JBQWMsRUFBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUU7WUFDM0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHNCQUFjLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1lBQzdFLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxzQkFBYyxFQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlFQUF5RSxFQUFFLEdBQUcsRUFBRTtZQUNqRixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsc0JBQWMsRUFBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUU7WUFDM0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHNCQUFjLEVBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGRlc2NyaWJlLCBpdCAqL1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtcbiAgZGVib3VuY2UsXG4gIG1kNSxcbiAgdXVpZCxcbiAgaXNVdWlkLFxuICBiYXNlNjRVcmxEZWNvZGUsXG4gIGJhc2U2NFVybEVuY29kZSxcbiAgZGVlcENsb25lLFxuICB2YWxpZGF0ZUVtYWlsLFxuICBiYXNlODVVdWlkRW5jb2RlLFxuICBiYXNlODVVdWlkRGVjb2RlLFxuICBwb3NpeFRvRGF0ZSxcbiAgbG9jYWxIb3VyVG9VVEMsXG4gIHV0Y0hvdXJUb0xvY2FsLFxuICB0b0xvd2VyQ2FzZSxcbiAgdG9VcHBlckNhc2UsXG4gIHRvU25ha2VDYXNlLFxuICB0b0tlYmFiQ2FzZSxcbiAgdG9UaXRsZUNhc2UsXG4gIHRvUGFzY2FsQ2FzZSxcbiAgdG9OYW1lQ2FzZSxcbiAgdG9DYW1lbENhc2UsXG4gIERlZmVycmVkLFxufSBmcm9tICcuLi9zcmMvaW5kZXgnO1xuXG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZGVzY3JpYmUoJ1V0aWxzJywgZnVuY3Rpb24oKSB7XG4gIGRlc2NyaWJlKCdkZWJvdW5jZSBzaG91bGQnLCBmdW5jdGlvbigpIHtcbiAgICBpdCgnZGVsYXkgYSBjYWxsJywgYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IERhdGUubm93KCk7XG4gICAgICBsZXQgc2Vjb25kID0gMDtcbiAgICAgIGF3YWl0IGRlYm91bmNlKCgpID0+IHNlY29uZCA9IERhdGUubm93KCksIDEwMDApKCk7XG4gICAgICBhc3NlcnQub2soc2Vjb25kIC0gZmlyc3QgPj0gMTAwMCk7XG4gICAgfSk7XG4gICAgaXQoJ29ubHkgY2FsbCB0aGUgZnVuY3Rpb24gb25jZScsIGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgZmlyc3QgPSBEYXRlLm5vdygpO1xuICAgICAgbGV0IHNlY29uZCA9IDA7XG4gICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgY29uc3QgZnVuYyA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgc2Vjb25kID0gRGF0ZS5ub3coKTtcbiAgICAgIH0sIDEwMDApO1xuICAgICAgZnVuYygpO1xuICAgICAgZnVuYygpO1xuICAgICAgZnVuYygpO1xuICAgICAgYXdhaXQgZnVuYygpO1xuICAgICAgYXNzZXJ0Lm9rKHNlY29uZCAtIGZpcnN0ID49IDEwMDApO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvdW50LCAxKTtcbiAgICB9KTtcbiAgICBpdCgnbm8gZGVib3VuY2UgbWVtb3J5IGxlYWsnLCBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMudGltZW91dCgxMjAwMDApO1xuICAgICAgY29uc3QgZnVuYyA9IGRlYm91bmNlKChhcnI6IG51bWJlcltdKSA9PiB7XG4gICAgICAgIGFyclswXSA9IGFyclsxXTtcbiAgICAgIH0sIDEpO1xuICAgICAgY29uc3QgYmVmb3JlID0gcHJvY2Vzcy5tZW1vcnlVc2FnZSgpLmhlYXBVc2VkIC8gMTAyNCAvIDEwMjQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDA7IGkrKykge1xuICAgICAgICBhd2FpdCBmdW5jKG5ldyBBcnJheSgxMDAwMDAwKS5maWxsKDEpKTtcbiAgICAgIH1cbiAgICAgIGdsb2JhbD8uZ2M/LigpO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDMwMDApKTtcbiAgICAgIGNvbnN0IGFmdGVyID0gcHJvY2Vzcy5tZW1vcnlVc2FnZSgpLmhlYXBVc2VkIC8gMTAyNCAvIDEwMjQ7XG4gICAgICBhc3NlcnQub2soYWZ0ZXIgPD0gYmVmb3JlLCAnbWVtb3J5IHVzYWdlIGRvZXMgbm90IGdyb3cgd2l0aCBtYW55IGRlYm91bmNlIGNhbGxzJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdydW5zIG1kNScsIGZ1bmN0aW9uKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtZDUoJ2hlbGxvJyksICc1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MicpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtZDUoJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OScpLCAnYzE5MDZmYTRlYzcxZWJkYzAyYzQ5YzVkMTk5MDhhMzknKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobWQ1KGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vZml4dHVyZXMvc2hhcmUuanBnJyksICdiaW5hcnknKSksICc3YjU1NDQ2YWQ4NzI5NzNjNWRiNTAwNjkwNWNjOTJhYScpO1xuICB9KTtcblxuICBpdCgncnVucyBiYXNlNjRVcmwnLCBmdW5jdGlvbigpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZTY0VXJsRW5jb2RlKCdBZGFtIE1pbGxlcicpLCAnUVdSaGJTQk5hV3hzWlhJJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U2NFVybERlY29kZShiYXNlNjRVcmxFbmNvZGUoJ0FkYW0gTWlsbGVyJykpLCAnQWRhbSBNaWxsZXInKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlNjRVcmxFbmNvZGUoJ0tlbGx5JyksICdTMlZzYkhrJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U2NFVybERlY29kZShiYXNlNjRVcmxFbmNvZGUoJ0tlbGx5JykpLCAnS2VsbHknKTtcbiAgfSk7XG5cbiAgaXQoJ3J1bnMgYmFzZTg1VXVpZEVuY29kZSAvIGJhc2U4NVV1aWRFbmNvZGUnLCBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBpZCA9ICcxZDBkMDY5OS03MDAyLTQyNzMtYjAxMy0yYTk2Mzg1MmMzODgnO1xuICAgIGNvbnN0IGVuY29kZWQgPSBiYXNlODVVdWlkRW5jb2RlKGlkKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNVdWlkKGlkKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY29kZWQubGVuZ3RoLCAyMCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U4NVV1aWREZWNvZGUoZW5jb2RlZCksIGlkKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDA7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSB1dWlkKCk7XG4gICAgICBjb25zdCBlbmNvZGVkID0gYmFzZTg1VXVpZEVuY29kZShpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNVdWlkKGlkKSwgdHJ1ZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jb2RlZC5sZW5ndGgsIDIwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlODVVdWlkRGVjb2RlKGVuY29kZWQpLCBpZCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgndmFsaWRhdGVzIGVtYWlscycsIGZ1bmN0aW9uKCkge1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZUVtYWlsKCdhZGFtQHVuaXZlcnNlLmFwcCcpKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVFbWFpbCgnYWRhbSt0YWdAdW5pdmVyc2UuYXBwJykpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgnQHVuaXZlcnNlLmFwcCcpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ2FkYW1AdW5pdmVyc2UnKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKCdhZGFtQHVuaXZlcnNlLicpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ3N1cGVyZHVwZXJsb25nZW1haWxhZGRyZXNzdGhhdGlzdGVjaG5pY2FsbHlub3RhbGxvd2Vkc3VwZXJkdXBlcmxvbmdlbWFpbGFkZHJlc3N0aGF0aXN0ZWNobmljYWxseW5vdGFsbG93ZWRAdW5pdmVyc2UuYXBwJykpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgnSU5WQUxJRCcpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoZmFsc2UpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoMTAwKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKG5ldyBEYXRlKCkpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoe30pKTtcbiAgfSk7XG5cbiAgaXQoJ2RlZXAgY2xvbmVzJywgYXN5bmMoKSA9PiB7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgYTogMSxcbiAgICAgIGI6IHsgYzogMyB9LFxuICAgICAgZDogWyAxLCAyLCB7IGU6IDUgfV0sXG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSA9IGF3YWl0IGRlZXBDbG9uZShvYmopO1xuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChvYmosIGNsb25lKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKG9iaiwgY2xvbmUpO1xuICB9KTtcblxuICBpdCgnY29udmVydHMgcG9zaXggdG8gZGF0ZScsIGFzeW5jKCkgPT4ge1xuICAgIGNvbnN0IGRhdGVzID0gW1xuICAgICAgJzYvMjkvMTk5MScsXG4gICAgICAnMS8xLzE5MDAnLFxuICAgICAgJzEvMS8zMDMwJyxcbiAgICAgICcxMi8zMS8xODQ1JyxcbiAgICAgICcxMi8zMS83MDgyJyxcbiAgICAgICc2LzEvMjAwOScsXG4gICAgICAnNi8yOS8yMDA5JyxcbiAgICBdO1xuICAgIGZvciAoY29uc3QgZGF0ZSBvZiBkYXRlcykge1xuICAgICAgY29uc3QgcmVzID0gcG9zaXhUb0RhdGUoKyhuZXcgRGF0ZShkYXRlKSkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGAke3Jlcy5tb250aH0vJHtyZXMuZGF5fS8ke3Jlcy55ZWFyfWAsIGRhdGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlZmVycmFibGUgc2hvdWxkJywgZnVuY3Rpb24oKSB7XG4gICAgaXQoJ3Jlc29sdmUnLCBhc3luYygpID0+IHtcbiAgICAgIGxldCBydW5zID0gZmFsc2U7XG4gICAgICBjb25zdCBkZWZlcnJhYmxlID0gbmV3IERlZmVycmVkPG51bWJlcj4oKTtcbiAgICAgIGNvbnN0IHByb21pc2UgPSBkZWZlcnJhYmxlLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBydW5zID0gdHJ1ZTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKDEsIHJlcyk7XG4gICAgICB9KTtcbiAgICAgIGRlZmVycmFibGUucmVzb2x2ZSgxKTtcbiAgICAgIGF3YWl0IHByb21pc2U7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgcnVucyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0JywgYXN5bmMoKSA9PiB7XG4gICAgICBsZXQgcnVucyA9IGZhbHNlO1xuICAgICAgY29uc3QgZGVmZXJyYWJsZSA9IG5ldyBEZWZlcnJlZDxudW1iZXI+KCk7XG4gICAgICBjb25zdCBwcm9taXNlID0gZGVmZXJyYWJsZS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHJ1bnMgPSB0cnVlO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoJ1Rlc3QnLCBlcnIubWVzc2FnZSk7XG4gICAgICB9KTtcbiAgICAgIGRlZmVycmFibGUucmVqZWN0KG5ldyBFcnJvcignVGVzdCcpKTtcbiAgICAgIGF3YWl0IHByb21pc2U7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgcnVucyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJpbmcgbWV0aG9kcyBzaG91bGQnLCBmdW5jdGlvbigpIHtcbiAgICBpdCgncnVuIHRvTG93ZXJDYXNlJywgZnVuY3Rpb24oKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9Mb3dlckNhc2UoJ1dPUktTJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTG93ZXJDYXNlKCd3b3JrcycpLCAnd29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0xvd2VyQ2FzZSgnV29Sa3ogNC1BIGMwXl5QMTNYIHNUUmluZycpLCAnd29ya3ogNC1hIGMwXl5wMTN4IHN0cmluZycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3J1biB0b1VwcGVyQ2FzZScsIGZ1bmN0aW9uKCkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVXBwZXJDYXNlKCdXT1JLUycpLCAnV09SS1MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1VwcGVyQ2FzZSgnd29ya3MnKSwgJ1dPUktTJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9VcHBlckNhc2UoJ1dvUmt6IDQtQSBjMF5eUDEzWCBzVFJpbmcnKSwgJ1dPUktaIDQtQSBDMF5eUDEzWCBTVFJJTkcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9TbmFrZUNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ3dvcmtzJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdXb1JreiA0LUEgYzBeXlAxM1ggc1RSaW5nJyksICd3b19ya3pfNF9hX2MwX3BfMTNfeF9zX3RfcmluZycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdrZWJhYi1jYXNlJyksICdrZWJhYl9jYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ3NuYWtlX2Nhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnVGl0bGUgQ2FzZScpLCAndGl0bGVfY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdQYXNjYWxDYXNlJyksICdwYXNjYWxfY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdjYW1hbENhc2UnKSwgJ2NhbWFsX2Nhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9LZWJhYkNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0tlYmFiQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ3dvcmtzJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdrZWJhYi1jYXNlJyksICdrZWJhYi1jYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ3NuYWtlLWNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0tlYmFiQ2FzZSgnVGl0bGUgQ2FzZScpLCAndGl0bGUtY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdQYXNjYWxDYXNlJyksICdwYXNjYWwtY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdjYW1hbENhc2UnKSwgJ2NhbWFsLWNhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9UaXRsZUNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgnV09SS1MnKSwgJ1dPUktTJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9UaXRsZUNhc2UoJ3dvcmtzJyksICdXb3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdrZWJhYi1jYXNlJyksICdLZWJhYiBDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9UaXRsZUNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ1NuYWtlIENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgnVGl0bGUgQ2FzZScpLCAnVGl0bGUgQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdQYXNjYWxDYXNlJyksICdQYXNjYWwgQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdjYW1hbENhc2UnKSwgJ0NhbWFsIENhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9QYXNjYWxDYXNlJywgZnVuY3Rpb24oKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9QYXNjYWxDYXNlKCdXT1JLUycpLCAnV29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ3dvcmtzJyksICdXb3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvUGFzY2FsQ2FzZSgna2ViYWItY2FzZScpLCAnS2ViYWJDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9QYXNjYWxDYXNlKCdzbmFrZV9jYXNlJyksICdTbmFrZUNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ1RpdGxlIENhc2UnKSwgJ1RpdGxlQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvUGFzY2FsQ2FzZSgnUGFzY2FsQ2FzZScpLCAnUGFzY2FsQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvUGFzY2FsQ2FzZSgnY2FtYWxDYXNlJyksICdDYW1hbENhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9DYW1lbENhc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ3dvcmtzJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQ2FtZWxDYXNlKCdrZWJhYi1jYXNlJyksICdrZWJhYkNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnc25ha2VfY2FzZScpLCAnc25ha2VDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ1RpdGxlIENhc2UnKSwgJ3RpdGxlQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQ2FtZWxDYXNlKCdQYXNjYWxDYXNlJyksICdwYXNjYWxDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ2NhbWFsQ2FzZScpLCAnY2FtYWxDYXNlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVuIHRvTmFtZUNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdXT1JLUycpLCAnV29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCd3b3JrcycpLCAnV29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdrZWJhYi1jYXNlJyksICdLZWJhYi1DYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnc25ha2VfY2FzZScpLCAnU25ha2VDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnVGl0bGUgQ2FzZScpLCAnVGl0bGUgQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ1Bhc2NhbENhc2UnKSwgJ1Bhc2NhbENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdjYW1hbENhc2UnKSwgJ0NhbWFsQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoXCJvJ0ZhcnJlbGxcIiksIFwiTydGYXJyZWxsXCIpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ2VtaWx5IGJha2VyLXdoaXRlJyksICdFbWlseSBCYWtlci1XaGl0ZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ0tlbGx5Um9zZSBmbHV0eScpLCAnS2VsbHlSb3NlIEZsdXR5Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdMb2NhbCBIb3VycyB0byBVVEMnLCBmdW5jdGlvbigpIHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgbG9jYWwgaG91cnMgdG8gdXRjIHdoaWxlIG1haW50YWluaW5nIG1pbnV0ZXMgZWxhcHNlZCcsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsb2NhbEhvdXJUb1VUQygyLjUpLCAxMC41KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBsb2NhbCBob3VycyB0byB1dGMgd2hpbGUgd3JhcHBpbmcgZm9yIHRoZSAyNHRoIGhvdXIgbWFyaycsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsb2NhbEhvdXJUb1VUQygyMi41KSwgNi41KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBsb2NhbCBob3VycyB0byB1dGMnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobG9jYWxIb3VyVG9VVEMoMjIpLCA2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCB1dGMgaG91cnMgdG8gbG9jYWwgd2hpbGUgbWFpbnRhaW5pbmcgbWludXRlcyBlbGFwc2VkJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHV0Y0hvdXJUb0xvY2FsKDIuNSksIDE4LjUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHV0YyBob3VycyB0byBsb2NhbCB3aGlsZSB3cmFwcGluZyBmb3IgdGhlIDI0dGggaG91ciBtYXJrJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHV0Y0hvdXJUb0xvY2FsKDIyLjUpLCAxNC41KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCB1dGMgaG91cnMgdG8gbG9jYWwnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodXRjSG91clRvTG9jYWwoMjIpLCAxNCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5QkFBeUI7QUFDekIsK0NBQWlDO0FBQ2pDLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0Isd0NBdUJzQjtBQUV0QixRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtJQUNyQixRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1FBQy9CLEVBQUUsQ0FBQyxjQUFjLEVBQUUsS0FBSyxJQUFHLEVBQUU7WUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLE1BQU0sSUFBQSxnQkFBUSxFQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsRCxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxJQUFHLEVBQUU7WUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNmLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLE1BQU0sSUFBSSxHQUFHLElBQUEsZ0JBQVEsRUFBQyxHQUFHLEVBQUU7Z0JBQ3pCLEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1QsSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLEVBQUUsQ0FBQztZQUNQ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LFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsWUFBWSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDN0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsV0FBVyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFlBQVksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxtQkFBVyxFQUFDLFdBQVcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtZQUMxQixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsb0JBQVksRUFBQyxZQUFZLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM1RCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsb0JBQVksRUFBQyxZQUFZLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM1RCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsb0JBQVksRUFBQyxZQUFZLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUM1RCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsb0JBQVksRUFBQyxZQUFZLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM3RCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsb0JBQVksRUFBQyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7WUFDekIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLG1CQUFXLEVBQUMsV0FBVyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxrQkFBVSxFQUFDLG1CQUFtQixDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUN6RSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsa0JBQVUsRUFBQyxpQkFBaUIsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7UUFDbEMsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEdBQUcsRUFBRTtZQUM3RSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsc0JBQWMsRUFBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5RUFBeUUsRUFBRSxHQUFHLEVBQUU7WUFDakYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHNCQUFjLEVBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1lBQzNDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxzQkFBYyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHFFQUFxRSxFQUFFLEdBQUcsRUFBRTtZQUM3RSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUEsc0JBQWMsRUFBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5RUFBeUUsRUFBRSxHQUFHLEVBQUU7WUFDakYsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFBLHNCQUFjLEVBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO1lBQzNDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBQSxzQkFBYyxFQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBkZXNjcmliZSwgaXQgKi9cbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtcbiAgYmFzZTY0VXJsRGVjb2RlLFxuICBiYXNlNjRVcmxFbmNvZGUsXG4gIGJhc2U4NVV1aWREZWNvZGUsXG4gIGJhc2U4NVV1aWRFbmNvZGUsXG4gIGRlYm91bmNlLFxuICBkZWVwQ2xvbmUsXG4gIERlZmVycmVkLFxuICBpc1V1aWQsXG4gIGxvY2FsSG91clRvVVRDLFxuICBtZDUsXG4gIHBvc2l4VG9EYXRlLFxuICB0b0NhbWVsQ2FzZSxcbiAgdG9LZWJhYkNhc2UsXG4gIHRvTG93ZXJDYXNlLFxuICB0b05hbWVDYXNlLFxuICB0b1Bhc2NhbENhc2UsXG4gIHRvU25ha2VDYXNlLFxuICB0b1RpdGxlQ2FzZSxcbiAgdG9VcHBlckNhc2UsXG4gIHV0Y0hvdXJUb0xvY2FsLFxuICB1dWlkLFxuICB2YWxpZGF0ZUVtYWlsLFxufSBmcm9tICcuLi9zcmMvaW5kZXgnO1xuXG5kZXNjcmliZSgnVXRpbHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdkZWJvdW5jZSBzaG91bGQnLCAoKSA9PiB7XG4gICAgaXQoJ2RlbGF5IGEgY2FsbCcsIGFzeW5jKCkgPT4ge1xuICAgICAgY29uc3QgZmlyc3QgPSBEYXRlLm5vdygpO1xuICAgICAgbGV0IHNlY29uZCA9IDA7XG4gICAgICBhd2FpdCBkZWJvdW5jZSgoKSA9PiBzZWNvbmQgPSBEYXRlLm5vdygpLCAxMDAwKSgpO1xuICAgICAgYXNzZXJ0Lm9rKHNlY29uZCAtIGZpcnN0ID49IDEwMDApO1xuICAgIH0pO1xuICAgIGl0KCdvbmx5IGNhbGwgdGhlIGZ1bmN0aW9uIG9uY2UnLCBhc3luYygpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGxldCBzZWNvbmQgPSAwO1xuICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgIGNvbnN0IGZ1bmMgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIHNlY29uZCA9IERhdGUubm93KCk7XG4gICAgICB9LCAxMjAwKTtcbiAgICAgIGZ1bmMoKTtcbiAgICAgIGZ1bmMoKTtcbiAgICAgIGZ1bmMoKTtcbiAgICAgIGF3YWl0IGZ1bmMoKTtcbiAgICAgIGFzc2VydC5vayhzZWNvbmQgLSBmaXJzdCA+PSAxMDAwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb3VudCwgMSk7XG4gICAgfSk7XG4gICAgaXQoJ25vIGRlYm91bmNlIG1lbW9yeSBsZWFrJywgYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLnRpbWVvdXQoMTIwMDAwKTtcbiAgICAgIGNvbnN0IGZ1bmMgPSBkZWJvdW5jZSgoYXJyOiBudW1iZXJbXSkgPT4ge1xuICAgICAgICBhcnJbMF0gPSBhcnJbMV07XG4gICAgICB9LCAxKTtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IHByb2Nlc3MubWVtb3J5VXNhZ2UoKS5oZWFwVXNlZCAvIDEwMjQgLyAxMDI0O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDAwOyBpKyspIHtcbiAgICAgICAgYXdhaXQgZnVuYyhuZXcgQXJyYXkoMTAwMDAwMCkuZmlsbCgxKSk7XG4gICAgICB9XG4gICAgICBnbG9iYWw/LmdjPy4oKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDAwKSk7XG4gICAgICBjb25zdCBhZnRlciA9IHByb2Nlc3MubWVtb3J5VXNhZ2UoKS5oZWFwVXNlZCAvIDEwMjQgLyAxMDI0O1xuICAgICAgYXNzZXJ0Lm9rKGFmdGVyIDw9IGJlZm9yZSwgJ21lbW9yeSB1c2FnZSBkb2VzIG5vdCBncm93IHdpdGggbWFueSBkZWJvdW5jZSBjYWxscycpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgncnVucyBtZDUnLCAoKSA9PiB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG1kNSgnaGVsbG8nKSwgJzVkNDE0MDJhYmM0YjJhNzZiOTcxOWQ5MTEwMTdjNTkyJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKG1kNSgnMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5JyksICdjMTkwNmZhNGVjNzFlYmRjMDJjNDljNWQxOTkwOGEzOScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtZDUoZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9maXh0dXJlcy9zaGFyZS5qcGcnKSwgJ2JpbmFyeScpKSwgJzdiNTU0NDZhZDg3Mjk3M2M1ZGI1MDA2OTA1Y2M5MmFhJyk7XG4gIH0pO1xuXG4gIGl0KCdydW5zIGJhc2U2NFVybCcsICgpID0+IHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZTY0VXJsRW5jb2RlKCdBZGFtIE1pbGxlcicpLCAnUVdSaGJTQk5hV3hzWlhJJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U2NFVybERlY29kZShiYXNlNjRVcmxFbmNvZGUoJ0FkYW0gTWlsbGVyJykpLCAnQWRhbSBNaWxsZXInKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlNjRVcmxFbmNvZGUoJ0tlbGx5JyksICdTMlZzYkhrJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U2NFVybERlY29kZShiYXNlNjRVcmxFbmNvZGUoJ0tlbGx5JykpLCAnS2VsbHknKTtcbiAgfSk7XG5cbiAgaXQoJ3J1bnMgYmFzZTg1VXVpZEVuY29kZSAvIGJhc2U4NVV1aWRFbmNvZGUnLCAoKSA9PiB7XG4gICAgY29uc3QgaWQgPSAnMWQwZDA2OTktNzAwMi00MjczLWIwMTMtMmE5NjM4NTJjMzg4JztcbiAgICBjb25zdCBlbmNvZGVkID0gYmFzZTg1VXVpZEVuY29kZShpZCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVXVpZChpZCksIHRydWUpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNvZGVkLmxlbmd0aCwgMjApO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlODVVdWlkRGVjb2RlKGVuY29kZWQpLCBpZCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDAwOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkID0gdXVpZCgpO1xuICAgICAgY29uc3QgZW5jb2RlZCA9IGJhc2U4NVV1aWRFbmNvZGUoaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVXVpZChpZCksIHRydWUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY29kZWQubGVuZ3RoLCAyMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZTg1VXVpZERlY29kZShlbmNvZGVkKSwgaWQpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ3ZhbGlkYXRlcyBlbWFpbHMnLCAoKSA9PiB7XG4gICAgYXNzZXJ0Lm9rKHZhbGlkYXRlRW1haWwoJ2FkYW1AdW5pdmVyc2UuYXBwJykpO1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZUVtYWlsKCdhZGFtK3RhZ0B1bml2ZXJzZS5hcHAnKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKCdAdW5pdmVyc2UuYXBwJykpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgnYWRhbUB1bml2ZXJzZScpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ2FkYW1AdW5pdmVyc2UuJykpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgnc3VwZXJkdXBlcmxvbmdlbWFpbGFkZHJlc3N0aGF0aXN0ZWNobmljYWxseW5vdGFsbG93ZWRzdXBlcmR1cGVybG9uZ2VtYWlsYWRkcmVzc3RoYXRpc3RlY2huaWNhbGx5bm90YWxsb3dlZEB1bml2ZXJzZS5hcHAnKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKCdJTlZBTElEJykpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbChmYWxzZSkpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgxMDApKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwobmV3IERhdGUoKSkpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCh7fSkpO1xuICB9KTtcblxuICBpdCgnZGVlcCBjbG9uZXMnLCBhc3luYygpID0+IHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBhOiAxLFxuICAgICAgYjogeyBjOiAzIH0sXG4gICAgICBkOiBbIDEsIDIsIHsgZTogNSB9XSxcbiAgICB9O1xuICAgIGNvbnN0IGNsb25lID0gYXdhaXQgZGVlcENsb25lKG9iaik7XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKG9iaiwgY2xvbmUpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwob2JqLCBjbG9uZSk7XG4gIH0pO1xuXG4gIGl0KCdjb252ZXJ0cyBwb3NpeCB0byBkYXRlJywgYXN5bmMoKSA9PiB7XG4gICAgY29uc3QgZGF0ZXMgPSBbXG4gICAgICAnNi8yOS8xOTkxJyxcbiAgICAgICcxLzEvMTkwMCcsXG4gICAgICAnMS8xLzMwMzAnLFxuICAgICAgJzEyLzMxLzE4NDUnLFxuICAgICAgJzEyLzMxLzcwODInLFxuICAgICAgJzYvMS8yMDA5JyxcbiAgICAgICc2LzI5LzIwMDknLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBkYXRlIG9mIGRhdGVzKSB7XG4gICAgICBjb25zdCByZXMgPSBwb3NpeFRvRGF0ZSgrKG5ldyBEYXRlKGRhdGUpKSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYCR7cmVzLm1vbnRofS8ke3Jlcy5kYXl9LyR7cmVzLnllYXJ9YCwgZGF0ZSk7XG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZSgnZGVmZXJyYWJsZSBzaG91bGQnLCAoKSA9PiB7XG4gICAgaXQoJ3Jlc29sdmUnLCBhc3luYygpID0+IHtcbiAgICAgIGxldCBydW5zID0gZmFsc2U7XG4gICAgICBjb25zdCBkZWZlcnJhYmxlID0gbmV3IERlZmVycmVkPG51bWJlcj4oKTtcbiAgICAgIGNvbnN0IHByb21pc2UgPSBkZWZlcnJhYmxlLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBydW5zID0gdHJ1ZTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKDEsIHJlcyk7XG4gICAgICB9KTtcbiAgICAgIGRlZmVycmFibGUucmVzb2x2ZSgxKTtcbiAgICAgIGF3YWl0IHByb21pc2U7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgcnVucyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0JywgYXN5bmMoKSA9PiB7XG4gICAgICBsZXQgcnVucyA9IGZhbHNlO1xuICAgICAgY29uc3QgZGVmZXJyYWJsZSA9IG5ldyBEZWZlcnJlZDxudW1iZXI+KCk7XG4gICAgICBjb25zdCBwcm9taXNlID0gZGVmZXJyYWJsZS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHJ1bnMgPSB0cnVlO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoJ1Rlc3QnLCBlcnIubWVzc2FnZSk7XG4gICAgICB9KTtcbiAgICAgIGRlZmVycmFibGUucmVqZWN0KG5ldyBFcnJvcignVGVzdCcpKTtcbiAgICAgIGF3YWl0IHByb21pc2U7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgcnVucyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJpbmcgbWV0aG9kcyBzaG91bGQnLCAoKSA9PiB7XG4gICAgaXQoJ3J1biB0b0xvd2VyQ2FzZScsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0xvd2VyQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9Mb3dlckNhc2UoJ3dvcmtzJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTG93ZXJDYXNlKCdXb1JreiA0LUEgYzBeXlAxM1ggc1RSaW5nJyksICd3b3JreiA0LWEgYzBeXnAxM3ggc3RyaW5nJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVuIHRvVXBwZXJDYXNlJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVXBwZXJDYXNlKCdXT1JLUycpLCAnV09SS1MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1VwcGVyQ2FzZSgnd29ya3MnKSwgJ1dPUktTJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9VcHBlckNhc2UoJ1dvUmt6IDQtQSBjMF5eUDEzWCBzVFJpbmcnKSwgJ1dPUktaIDQtQSBDMF5eUDEzWCBTVFJJTkcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9TbmFrZUNhc2UnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ1dPUktTJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCd3b3JrcycpLCAnd29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnV29Sa3ogNC1BIGMwXl5QMTNYIHNUUmluZycpLCAnd29fcmt6XzRfYV9jMF9wXzEzX3hfc190X3JpbmcnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgna2ViYWItY2FzZScpLCAna2ViYWJfY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdzbmFrZV9jYXNlJyksICdzbmFrZV9jYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ1RpdGxlIENhc2UnKSwgJ3RpdGxlX2Nhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnUGFzY2FsQ2FzZScpLCAncGFzY2FsX2Nhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnY2FtYWxDYXNlJyksICdjYW1hbF9jYXNlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVuIHRvS2ViYWJDYXNlJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdXT1JLUycpLCAnd29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0tlYmFiQ2FzZSgnd29ya3MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ2tlYmFiLWNhc2UnKSwgJ2tlYmFiLWNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0tlYmFiQ2FzZSgnc25ha2VfY2FzZScpLCAnc25ha2UtY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdUaXRsZSBDYXNlJyksICd0aXRsZS1jYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ1Bhc2NhbENhc2UnKSwgJ3Bhc2NhbC1jYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ2NhbWFsQ2FzZScpLCAnY2FtYWwtY2FzZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3J1biB0b1RpdGxlQ2FzZScsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgnV09SS1MnKSwgJ1dPUktTJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9UaXRsZUNhc2UoJ3dvcmtzJyksICdXb3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdrZWJhYi1jYXNlJyksICdLZWJhYiBDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9UaXRsZUNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ1NuYWtlIENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgnVGl0bGUgQ2FzZScpLCAnVGl0bGUgQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdQYXNjYWxDYXNlJyksICdQYXNjYWwgQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdjYW1hbENhc2UnKSwgJ0NhbWFsIENhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9QYXNjYWxDYXNlJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvUGFzY2FsQ2FzZSgnV09SS1MnKSwgJ1dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9QYXNjYWxDYXNlKCd3b3JrcycpLCAnV29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ2tlYmFiLWNhc2UnKSwgJ0tlYmFiQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvUGFzY2FsQ2FzZSgnc25ha2VfY2FzZScpLCAnU25ha2VDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9QYXNjYWxDYXNlKCdUaXRsZSBDYXNlJyksICdUaXRsZUNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ1Bhc2NhbENhc2UnKSwgJ1Bhc2NhbENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ2NhbWFsQ2FzZScpLCAnQ2FtYWxDYXNlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVuIHRvQ2FtZWxDYXNlJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQ2FtZWxDYXNlKCdXT1JLUycpLCAnd29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnd29ya3MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ2tlYmFiLWNhc2UnKSwgJ2tlYmFiQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQ2FtZWxDYXNlKCdzbmFrZV9jYXNlJyksICdzbmFrZUNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnVGl0bGUgQ2FzZScpLCAndGl0bGVDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ1Bhc2NhbENhc2UnKSwgJ3Bhc2NhbENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnY2FtYWxDYXNlJyksICdjYW1hbENhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9OYW1lQ2FzZScsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdXT1JLUycpLCAnV29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCd3b3JrcycpLCAnV29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdrZWJhYi1jYXNlJyksICdLZWJhYi1DYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnc25ha2VfY2FzZScpLCAnU25ha2VDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnVGl0bGUgQ2FzZScpLCAnVGl0bGUgQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ1Bhc2NhbENhc2UnKSwgJ1Bhc2NhbENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdjYW1hbENhc2UnKSwgJ0NhbWFsQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoXCJvJ0ZhcnJlbGxcIiksIFwiTydGYXJyZWxsXCIpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ2VtaWx5IGJha2VyLXdoaXRlJyksICdFbWlseSBCYWtlci1XaGl0ZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ0tlbGx5Um9zZSBmbHV0eScpLCAnS2VsbHlSb3NlIEZsdXR5Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdMb2NhbCBIb3VycyB0byBVVEMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGxvY2FsIGhvdXJzIHRvIHV0YyB3aGlsZSBtYWludGFpbmluZyBtaW51dGVzIGVsYXBzZWQnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobG9jYWxIb3VyVG9VVEMoMi41KSwgMTAuNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgbG9jYWwgaG91cnMgdG8gdXRjIHdoaWxlIHdyYXBwaW5nIGZvciB0aGUgMjR0aCBob3VyIG1hcmsnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobG9jYWxIb3VyVG9VVEMoMjIuNSksIDYuNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgbG9jYWwgaG91cnMgdG8gdXRjJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxvY2FsSG91clRvVVRDKDIyKSwgNik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgdXRjIGhvdXJzIHRvIGxvY2FsIHdoaWxlIG1haW50YWluaW5nIG1pbnV0ZXMgZWxhcHNlZCcsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh1dGNIb3VyVG9Mb2NhbCgyLjUpLCAxOC41KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCB1dGMgaG91cnMgdG8gbG9jYWwgd2hpbGUgd3JhcHBpbmcgZm9yIHRoZSAyNHRoIGhvdXIgbWFyaycsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh1dGNIb3VyVG9Mb2NhbCgyMi41KSwgMTQuNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgdXRjIGhvdXJzIHRvIGxvY2FsJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHV0Y0hvdXJUb0xvY2FsKDIyKSwgMTQpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19

@@ -61,2 +61,3 @@ export declare const isNull: (v: unknown) => v is null;

export declare const abbrNum: (num: number, fixed?: number) => string | null;
export declare function sha1Digest(message: string): Promise<string>;
export declare function sha256Digest(message: string): Promise<string>;

@@ -63,0 +64,0 @@ export declare const toLowerCase: (str: string) => string;

/* global describe, it */
import * as assert from 'assert';
import * as fs from 'fs';
import * as path from 'path';
import { debounce, md5, uuid, isUuid, base64UrlDecode, base64UrlEncode, deepClone, validateEmail, base85UuidEncode, base85UuidDecode, posixToDate, localHourToUTC, utcHourToLocal, toLowerCase, toUpperCase, toSnakeCase, toKebabCase, toTitleCase, toPascalCase, toNameCase, toCamelCase, Deferred, } from '../src/index';
import * as assert from 'assert';
describe('Utils', function () {
describe('debounce should', function () {
it('delay a call', async function () {
import { base64UrlDecode, base64UrlEncode, base85UuidDecode, base85UuidEncode, debounce, deepClone, Deferred, isUuid, localHourToUTC, md5, posixToDate, toCamelCase, toKebabCase, toLowerCase, toNameCase, toPascalCase, toSnakeCase, toTitleCase, toUpperCase, utcHourToLocal, uuid, validateEmail, } from '../src/index';
describe('Utils', () => {
describe('debounce should', () => {
it('delay a call', async () => {
const first = Date.now();

@@ -14,3 +14,3 @@ let second = 0;

});
it('only call the function once', async function () {
it('only call the function once', async () => {
const first = Date.now();

@@ -22,3 +22,3 @@ let second = 0;

second = Date.now();
}, 1000);
}, 1200);
func();

@@ -46,8 +46,8 @@ func();

});
it('runs md5', function () {
it('runs md5', () => {
assert.strictEqual(md5('hello'), '5d41402abc4b2a76b9719d911017c592');
assert.strictEqual(md5('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 'c1906fa4ec71ebdc02c49c5d19908a39');
assert.strictEqual(md5(fs.readFileSync(path.join(__dirname, '../../fixtures/share.jpg'), 'binary')), '7b55446ad872973c5db5006905cc92aa');
assert.strictEqual(md5(fs.readFileSync(path.join(__dirname, '../../../fixtures/share.jpg'), 'binary')), '7b55446ad872973c5db5006905cc92aa');
});
it('runs base64Url', function () {
it('runs base64Url', () => {
assert.strictEqual(base64UrlEncode('Adam Miller'), 'QWRhbSBNaWxsZXI');

@@ -58,3 +58,3 @@ assert.strictEqual(base64UrlDecode(base64UrlEncode('Adam Miller')), 'Adam Miller');

});
it('runs base85UuidEncode / base85UuidEncode', function () {
it('runs base85UuidEncode / base85UuidEncode', () => {
const id = '1d0d0699-7002-4273-b013-2a963852c388';

@@ -73,3 +73,3 @@ const encoded = base85UuidEncode(id);

});
it('validates emails', function () {
it('validates emails', () => {
assert.ok(validateEmail('adam@universe.app'));

@@ -112,3 +112,3 @@ assert.ok(validateEmail('adam+tag@universe.app'));

});
describe('deferrable should', function () {
describe('deferrable should', () => {
it('resolve', async () => {

@@ -137,4 +137,4 @@ let runs = false;

});
describe('string methods should', function () {
it('run toLowerCase', function () {
describe('string methods should', () => {
it('run toLowerCase', () => {
assert.strictEqual(toLowerCase('WORKS'), 'works');

@@ -144,3 +144,3 @@ assert.strictEqual(toLowerCase('works'), 'works');

});
it('run toUpperCase', function () {
it('run toUpperCase', () => {
assert.strictEqual(toUpperCase('WORKS'), 'WORKS');

@@ -150,3 +150,3 @@ assert.strictEqual(toUpperCase('works'), 'WORKS');

});
it('run toSnakeCase', function () {
it('run toSnakeCase', () => {
assert.strictEqual(toSnakeCase('WORKS'), 'works');

@@ -161,3 +161,3 @@ assert.strictEqual(toSnakeCase('works'), 'works');

});
it('run toKebabCase', function () {
it('run toKebabCase', () => {
assert.strictEqual(toKebabCase('WORKS'), 'works');

@@ -171,3 +171,3 @@ assert.strictEqual(toKebabCase('works'), 'works');

});
it('run toTitleCase', function () {
it('run toTitleCase', () => {
assert.strictEqual(toTitleCase('WORKS'), 'WORKS');

@@ -181,3 +181,3 @@ assert.strictEqual(toTitleCase('works'), 'Works');

});
it('run toPascalCase', function () {
it('run toPascalCase', () => {
assert.strictEqual(toPascalCase('WORKS'), 'Works');

@@ -191,3 +191,3 @@ assert.strictEqual(toPascalCase('works'), 'Works');

});
it('run toCamelCase', function () {
it('run toCamelCase', () => {
assert.strictEqual(toCamelCase('WORKS'), 'works');

@@ -201,3 +201,3 @@ assert.strictEqual(toCamelCase('works'), 'works');

});
it('run toNameCase', function () {
it('run toNameCase', () => {
assert.strictEqual(toNameCase('WORKS'), 'Works');

@@ -215,3 +215,3 @@ assert.strictEqual(toNameCase('works'), 'Works');

});
describe('Local Hours to UTC', function () {
describe('Local Hours to UTC', () => {
it('should convert local hours to utc while maintaining minutes elapsed', () => {

@@ -237,2 +237,2 @@ assert.strictEqual(localHourToUTC(2.5), 10.5);

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlCQUF5QjtBQUN6QixPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQ0wsUUFBUSxFQUNSLEdBQUcsRUFDSCxJQUFJLEVBQ0osTUFBTSxFQUNOLGVBQWUsRUFDZixlQUFlLEVBQ2YsU0FBUyxFQUNULGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsY0FBYyxFQUNkLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFdBQVcsRUFDWCxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxHQUNULE1BQU0sY0FBYyxDQUFDO0FBRXRCLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7SUFDaEIsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQzFCLEVBQUUsQ0FBQyxjQUFjLEVBQUUsS0FBSztZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxLQUFLO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6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QUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlCQUFpQixFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtCQUFrQixFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlCQUFpQixFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdCQUFnQixFQUFFO1lBQ25CLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUN6RSxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1lBQzdFLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlFQUF5RSxFQUFFLEdBQUcsRUFBRTtZQUNqRixNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUU7WUFDM0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1lBQzdFLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlFQUF5RSxFQUFFLEdBQUcsRUFBRTtZQUNqRixNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRSxHQUFHLEVBQUU7WUFDM0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGRlc2NyaWJlLCBpdCAqL1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtcbiAgZGVib3VuY2UsXG4gIG1kNSxcbiAgdXVpZCxcbiAgaXNVdWlkLFxuICBiYXNlNjRVcmxEZWNvZGUsXG4gIGJhc2U2NFVybEVuY29kZSxcbiAgZGVlcENsb25lLFxuICB2YWxpZGF0ZUVtYWlsLFxuICBiYXNlODVVdWlkRW5jb2RlLFxuICBiYXNlODVVdWlkRGVjb2RlLFxuICBwb3NpeFRvRGF0ZSxcbiAgbG9jYWxIb3VyVG9VVEMsXG4gIHV0Y0hvdXJUb0xvY2FsLFxuICB0b0xvd2VyQ2FzZSxcbiAgdG9VcHBlckNhc2UsXG4gIHRvU25ha2VDYXNlLFxuICB0b0tlYmFiQ2FzZSxcbiAgdG9UaXRsZUNhc2UsXG4gIHRvUGFzY2FsQ2FzZSxcbiAgdG9OYW1lQ2FzZSxcbiAgdG9DYW1lbENhc2UsXG4gIERlZmVycmVkLFxufSBmcm9tICcuLi9zcmMvaW5kZXgnO1xuXG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcblxuZGVzY3JpYmUoJ1V0aWxzJywgZnVuY3Rpb24oKSB7XG4gIGRlc2NyaWJlKCdkZWJvdW5jZSBzaG91bGQnLCBmdW5jdGlvbigpIHtcbiAgICBpdCgnZGVsYXkgYSBjYWxsJywgYXN5bmMgZnVuY3Rpb24oKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IERhdGUubm93KCk7XG4gICAgICBsZXQgc2Vjb25kID0gMDtcbiAgICAgIGF3YWl0IGRlYm91bmNlKCgpID0+IHNlY29uZCA9IERhdGUubm93KCksIDEwMDApKCk7XG4gICAgICBhc3NlcnQub2soc2Vjb25kIC0gZmlyc3QgPj0gMTAwMCk7XG4gICAgfSk7XG4gICAgaXQoJ29ubHkgY2FsbCB0aGUgZnVuY3Rpb24gb25jZScsIGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgZmlyc3QgPSBEYXRlLm5vdygpO1xuICAgICAgbGV0IHNlY29uZCA9IDA7XG4gICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgY29uc3QgZnVuYyA9IGRlYm91bmNlKCgpID0+IHtcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgc2Vjb25kID0gRGF0ZS5ub3coKTtcbiAgICAgIH0sIDEwMDApO1xuICAgICAgZnVuYygpO1xuICAgICAgZnVuYygpO1xuICAgICAgZnVuYygpO1xuICAgICAgYXdhaXQgZnVuYygpO1xuICAgICAgYXNzZXJ0Lm9rKHNlY29uZCAtIGZpcnN0ID49IDEwMDApO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvdW50LCAxKTtcbiAgICB9KTtcbiAgICBpdCgnbm8gZGVib3VuY2UgbWVtb3J5IGxlYWsnLCBhc3luYyBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMudGltZW91dCgxMjAwMDApO1xuICAgICAgY29uc3QgZnVuYyA9IGRlYm91bmNlKChhcnI6IG51bWJlcltdKSA9PiB7XG4gICAgICAgIGFyclswXSA9IGFyclsxXTtcbiAgICAgIH0sIDEpO1xuICAgICAgY29uc3QgYmVmb3JlID0gcHJvY2Vzcy5tZW1vcnlVc2FnZSgpLmhlYXBVc2VkIC8gMTAyNCAvIDEwMjQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDA7IGkrKykge1xuICAgICAgICBhd2FpdCBmdW5jKG5ldyBBcnJheSgxMDAwMDAwKS5maWxsKDEpKTtcbiAgICAgIH1cbiAgICAgIGdsb2JhbD8uZ2M/LigpO1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDMwMDApKTtcbiAgICAgIGNvbnN0IGFmdGVyID0gcHJvY2Vzcy5tZW1vcnlVc2FnZSgpLmhlYXBVc2VkIC8gMTAyNCAvIDEwMjQ7XG4gICAgICBhc3NlcnQub2soYWZ0ZXIgPD0gYmVmb3JlLCAnbWVtb3J5IHVzYWdlIGRvZXMgbm90IGdyb3cgd2l0aCBtYW55IGRlYm91bmNlIGNhbGxzJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdydW5zIG1kNScsIGZ1bmN0aW9uKCkge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtZDUoJ2hlbGxvJyksICc1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MicpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtZDUoJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OScpLCAnYzE5MDZmYTRlYzcxZWJkYzAyYzQ5YzVkMTk5MDhhMzknKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobWQ1KGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vZml4dHVyZXMvc2hhcmUuanBnJyksICdiaW5hcnknKSksICc3YjU1NDQ2YWQ4NzI5NzNjNWRiNTAwNjkwNWNjOTJhYScpO1xuICB9KTtcblxuICBpdCgncnVucyBiYXNlNjRVcmwnLCBmdW5jdGlvbigpIHtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZTY0VXJsRW5jb2RlKCdBZGFtIE1pbGxlcicpLCAnUVdSaGJTQk5hV3hzWlhJJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U2NFVybERlY29kZShiYXNlNjRVcmxFbmNvZGUoJ0FkYW0gTWlsbGVyJykpLCAnQWRhbSBNaWxsZXInKTtcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlNjRVcmxFbmNvZGUoJ0tlbGx5JyksICdTMlZzYkhrJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U2NFVybERlY29kZShiYXNlNjRVcmxFbmNvZGUoJ0tlbGx5JykpLCAnS2VsbHknKTtcbiAgfSk7XG5cbiAgaXQoJ3J1bnMgYmFzZTg1VXVpZEVuY29kZSAvIGJhc2U4NVV1aWRFbmNvZGUnLCBmdW5jdGlvbigpIHtcbiAgICBjb25zdCBpZCA9ICcxZDBkMDY5OS03MDAyLTQyNzMtYjAxMy0yYTk2Mzg1MmMzODgnO1xuICAgIGNvbnN0IGVuY29kZWQgPSBiYXNlODVVdWlkRW5jb2RlKGlkKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNVdWlkKGlkKSwgdHJ1ZSk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGVuY29kZWQubGVuZ3RoLCAyMCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U4NVV1aWREZWNvZGUoZW5jb2RlZCksIGlkKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDA7IGkrKykge1xuICAgICAgY29uc3QgaWQgPSB1dWlkKCk7XG4gICAgICBjb25zdCBlbmNvZGVkID0gYmFzZTg1VXVpZEVuY29kZShpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNVdWlkKGlkKSwgdHJ1ZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jb2RlZC5sZW5ndGgsIDIwKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlODVVdWlkRGVjb2RlKGVuY29kZWQpLCBpZCk7XG4gICAgfVxuICB9KTtcblxuICBpdCgndmFsaWRhdGVzIGVtYWlscycsIGZ1bmN0aW9uKCkge1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZUVtYWlsKCdhZGFtQHVuaXZlcnNlLmFwcCcpKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVFbWFpbCgnYWRhbSt0YWdAdW5pdmVyc2UuYXBwJykpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgnQHVuaXZlcnNlLmFwcCcpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ2FkYW1AdW5pdmVyc2UnKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKCdhZGFtQHVuaXZlcnNlLicpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ3N1cGVyZHVwZXJsb25nZW1haWxhZGRyZXNzdGhhdGlzdGVjaG5pY2FsbHlub3RhbGxvd2Vkc3VwZXJkdXBlcmxvbmdlbWFpbGFkZHJlc3N0aGF0aXN0ZWNobmljYWxseW5vdGFsbG93ZWRAdW5pdmVyc2UuYXBwJykpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgnSU5WQUxJRCcpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoZmFsc2UpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoMTAwKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKG5ldyBEYXRlKCkpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoe30pKTtcbiAgfSk7XG5cbiAgaXQoJ2RlZXAgY2xvbmVzJywgYXN5bmMoKSA9PiB7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgYTogMSxcbiAgICAgIGI6IHsgYzogMyB9LFxuICAgICAgZDogWyAxLCAyLCB7IGU6IDUgfV0sXG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSA9IGF3YWl0IGRlZXBDbG9uZShvYmopO1xuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChvYmosIGNsb25lKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKG9iaiwgY2xvbmUpO1xuICB9KTtcblxuICBpdCgnY29udmVydHMgcG9zaXggdG8gZGF0ZScsIGFzeW5jKCkgPT4ge1xuICAgIGNvbnN0IGRhdGVzID0gW1xuICAgICAgJzYvMjkvMTk5MScsXG4gICAgICAnMS8xLzE5MDAnLFxuICAgICAgJzEvMS8zMDMwJyxcbiAgICAgICcxMi8zMS8xODQ1JyxcbiAgICAgICcxMi8zMS83MDgyJyxcbiAgICAgICc2LzEvMjAwOScsXG4gICAgICAnNi8yOS8yMDA5JyxcbiAgICBdO1xuICAgIGZvciAoY29uc3QgZGF0ZSBvZiBkYXRlcykge1xuICAgICAgY29uc3QgcmVzID0gcG9zaXhUb0RhdGUoKyhuZXcgRGF0ZShkYXRlKSkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGAke3Jlcy5tb250aH0vJHtyZXMuZGF5fS8ke3Jlcy55ZWFyfWAsIGRhdGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlZmVycmFibGUgc2hvdWxkJywgZnVuY3Rpb24oKSB7XG4gICAgaXQoJ3Jlc29sdmUnLCBhc3luYygpID0+IHtcbiAgICAgIGxldCBydW5zID0gZmFsc2U7XG4gICAgICBjb25zdCBkZWZlcnJhYmxlID0gbmV3IERlZmVycmVkPG51bWJlcj4oKTtcbiAgICAgIGNvbnN0IHByb21pc2UgPSBkZWZlcnJhYmxlLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICBydW5zID0gdHJ1ZTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKDEsIHJlcyk7XG4gICAgICB9KTtcbiAgICAgIGRlZmVycmFibGUucmVzb2x2ZSgxKTtcbiAgICAgIGF3YWl0IHByb21pc2U7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgcnVucyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVqZWN0JywgYXN5bmMoKSA9PiB7XG4gICAgICBsZXQgcnVucyA9IGZhbHNlO1xuICAgICAgY29uc3QgZGVmZXJyYWJsZSA9IG5ldyBEZWZlcnJlZDxudW1iZXI+KCk7XG4gICAgICBjb25zdCBwcm9taXNlID0gZGVmZXJyYWJsZS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHJ1bnMgPSB0cnVlO1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoJ1Rlc3QnLCBlcnIubWVzc2FnZSk7XG4gICAgICB9KTtcbiAgICAgIGRlZmVycmFibGUucmVqZWN0KG5ldyBFcnJvcignVGVzdCcpKTtcbiAgICAgIGF3YWl0IHByb21pc2U7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodHJ1ZSwgcnVucyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdHJpbmcgbWV0aG9kcyBzaG91bGQnLCBmdW5jdGlvbigpIHtcbiAgICBpdCgncnVuIHRvTG93ZXJDYXNlJywgZnVuY3Rpb24oKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9Mb3dlckNhc2UoJ1dPUktTJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTG93ZXJDYXNlKCd3b3JrcycpLCAnd29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0xvd2VyQ2FzZSgnV29Sa3ogNC1BIGMwXl5QMTNYIHNUUmluZycpLCAnd29ya3ogNC1hIGMwXl5wMTN4IHN0cmluZycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3J1biB0b1VwcGVyQ2FzZScsIGZ1bmN0aW9uKCkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVXBwZXJDYXNlKCdXT1JLUycpLCAnV09SS1MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1VwcGVyQ2FzZSgnd29ya3MnKSwgJ1dPUktTJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9VcHBlckNhc2UoJ1dvUmt6IDQtQSBjMF5eUDEzWCBzVFJpbmcnKSwgJ1dPUktaIDQtQSBDMF5eUDEzWCBTVFJJTkcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9TbmFrZUNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ3dvcmtzJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdXb1JreiA0LUEgYzBeXlAxM1ggc1RSaW5nJyksICd3b19ya3pfNF9hX2MwX3BfMTNfeF9zX3RfcmluZycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdrZWJhYi1jYXNlJyksICdrZWJhYl9jYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ3NuYWtlX2Nhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnVGl0bGUgQ2FzZScpLCAndGl0bGVfY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdQYXNjYWxDYXNlJyksICdwYXNjYWxfY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdjYW1hbENhc2UnKSwgJ2NhbWFsX2Nhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9LZWJhYkNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0tlYmFiQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ3dvcmtzJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdrZWJhYi1jYXNlJyksICdrZWJhYi1jYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ3NuYWtlLWNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0tlYmFiQ2FzZSgnVGl0bGUgQ2FzZScpLCAndGl0bGUtY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdQYXNjYWxDYXNlJyksICdwYXNjYWwtY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdjYW1hbENhc2UnKSwgJ2NhbWFsLWNhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9UaXRsZUNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgnV09SS1MnKSwgJ1dPUktTJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9UaXRsZUNhc2UoJ3dvcmtzJyksICdXb3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdrZWJhYi1jYXNlJyksICdLZWJhYiBDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9UaXRsZUNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ1NuYWtlIENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgnVGl0bGUgQ2FzZScpLCAnVGl0bGUgQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdQYXNjYWxDYXNlJyksICdQYXNjYWwgQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdjYW1hbENhc2UnKSwgJ0NhbWFsIENhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9QYXNjYWxDYXNlJywgZnVuY3Rpb24oKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9QYXNjYWxDYXNlKCdXT1JLUycpLCAnV29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ3dvcmtzJyksICdXb3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvUGFzY2FsQ2FzZSgna2ViYWItY2FzZScpLCAnS2ViYWJDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9QYXNjYWxDYXNlKCdzbmFrZV9jYXNlJyksICdTbmFrZUNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ1RpdGxlIENhc2UnKSwgJ1RpdGxlQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvUGFzY2FsQ2FzZSgnUGFzY2FsQ2FzZScpLCAnUGFzY2FsQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvUGFzY2FsQ2FzZSgnY2FtYWxDYXNlJyksICdDYW1hbENhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9DYW1lbENhc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ3dvcmtzJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQ2FtZWxDYXNlKCdrZWJhYi1jYXNlJyksICdrZWJhYkNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnc25ha2VfY2FzZScpLCAnc25ha2VDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ1RpdGxlIENhc2UnKSwgJ3RpdGxlQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQ2FtZWxDYXNlKCdQYXNjYWxDYXNlJyksICdwYXNjYWxDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ2NhbWFsQ2FzZScpLCAnY2FtYWxDYXNlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVuIHRvTmFtZUNhc2UnLCBmdW5jdGlvbigpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdXT1JLUycpLCAnV29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCd3b3JrcycpLCAnV29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdrZWJhYi1jYXNlJyksICdLZWJhYi1DYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnc25ha2VfY2FzZScpLCAnU25ha2VDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnVGl0bGUgQ2FzZScpLCAnVGl0bGUgQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ1Bhc2NhbENhc2UnKSwgJ1Bhc2NhbENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdjYW1hbENhc2UnKSwgJ0NhbWFsQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoXCJvJ0ZhcnJlbGxcIiksIFwiTydGYXJyZWxsXCIpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ2VtaWx5IGJha2VyLXdoaXRlJyksICdFbWlseSBCYWtlci1XaGl0ZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ0tlbGx5Um9zZSBmbHV0eScpLCAnS2VsbHlSb3NlIEZsdXR5Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdMb2NhbCBIb3VycyB0byBVVEMnLCBmdW5jdGlvbigpIHtcbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgbG9jYWwgaG91cnMgdG8gdXRjIHdoaWxlIG1haW50YWluaW5nIG1pbnV0ZXMgZWxhcHNlZCcsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsb2NhbEhvdXJUb1VUQygyLjUpLCAxMC41KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBsb2NhbCBob3VycyB0byB1dGMgd2hpbGUgd3JhcHBpbmcgZm9yIHRoZSAyNHRoIGhvdXIgbWFyaycsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsb2NhbEhvdXJUb1VUQygyMi41KSwgNi41KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBsb2NhbCBob3VycyB0byB1dGMnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwobG9jYWxIb3VyVG9VVEMoMjIpLCA2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCB1dGMgaG91cnMgdG8gbG9jYWwgd2hpbGUgbWFpbnRhaW5pbmcgbWludXRlcyBlbGFwc2VkJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHV0Y0hvdXJUb0xvY2FsKDIuNSksIDE4LjUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHV0YyBob3VycyB0byBsb2NhbCB3aGlsZSB3cmFwcGluZyBmb3IgdGhlIDI0dGggaG91ciBtYXJrJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHV0Y0hvdXJUb0xvY2FsKDIyLjUpLCAxNC41KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCB1dGMgaG91cnMgdG8gbG9jYWwnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodXRjSG91clRvTG9jYWwoMjIpLCAxNCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlCQUF5QjtBQUN6QixPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixjQUFjLEVBQ2QsR0FBRyxFQUNILFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFdBQVcsRUFDWCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLGNBQWMsRUFDZCxJQUFJLEVBQ0osYUFBYSxHQUNkLE1BQU0sY0FBYyxDQUFDO0FBRXRCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0lBQ3JCLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFDL0IsRUFBRSxDQUFDLGNBQWMsRUFBRSxLQUFLLElBQUcsRUFBRTtZQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsTUFBTSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNILEVBQUUsQ0FBQyw2QkFBNkIsRUFBRSxLQUFLLElBQUcsRUFBRTtZQUMxQyxNQUFN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WUFDMUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDNUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDN0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1lBQ3pCLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtZQUN4QixNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMzRCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMxRCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMzRCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMzRCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN6RCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN6RCxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDekUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxFQUFFO1FBQ2xDLEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxHQUFHLEVBQUU7WUFDN0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUVBQXlFLEVBQUUsR0FBRyxFQUFFO1lBQ2pGLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtZQUMzQyxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxRUFBcUUsRUFBRSxHQUFHLEVBQUU7WUFDN0UsTUFBTSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUVBQXlFLEVBQUUsR0FBRyxFQUFFO1lBQ2pGLE1BQU0sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtZQUMzQyxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVzY3JpYmUsIGl0ICovXG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7XG4gIGJhc2U2NFVybERlY29kZSxcbiAgYmFzZTY0VXJsRW5jb2RlLFxuICBiYXNlODVVdWlkRGVjb2RlLFxuICBiYXNlODVVdWlkRW5jb2RlLFxuICBkZWJvdW5jZSxcbiAgZGVlcENsb25lLFxuICBEZWZlcnJlZCxcbiAgaXNVdWlkLFxuICBsb2NhbEhvdXJUb1VUQyxcbiAgbWQ1LFxuICBwb3NpeFRvRGF0ZSxcbiAgdG9DYW1lbENhc2UsXG4gIHRvS2ViYWJDYXNlLFxuICB0b0xvd2VyQ2FzZSxcbiAgdG9OYW1lQ2FzZSxcbiAgdG9QYXNjYWxDYXNlLFxuICB0b1NuYWtlQ2FzZSxcbiAgdG9UaXRsZUNhc2UsXG4gIHRvVXBwZXJDYXNlLFxuICB1dGNIb3VyVG9Mb2NhbCxcbiAgdXVpZCxcbiAgdmFsaWRhdGVFbWFpbCxcbn0gZnJvbSAnLi4vc3JjL2luZGV4JztcblxuZGVzY3JpYmUoJ1V0aWxzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnZGVib3VuY2Ugc2hvdWxkJywgKCkgPT4ge1xuICAgIGl0KCdkZWxheSBhIGNhbGwnLCBhc3luYygpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0ID0gRGF0ZS5ub3coKTtcbiAgICAgIGxldCBzZWNvbmQgPSAwO1xuICAgICAgYXdhaXQgZGVib3VuY2UoKCkgPT4gc2Vjb25kID0gRGF0ZS5ub3coKSwgMTAwMCkoKTtcbiAgICAgIGFzc2VydC5vayhzZWNvbmQgLSBmaXJzdCA+PSAxMDAwKTtcbiAgICB9KTtcbiAgICBpdCgnb25seSBjYWxsIHRoZSBmdW5jdGlvbiBvbmNlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdCA9IERhdGUubm93KCk7XG4gICAgICBsZXQgc2Vjb25kID0gMDtcbiAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICBjb25zdCBmdW5jID0gZGVib3VuY2UoKCkgPT4ge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgICBzZWNvbmQgPSBEYXRlLm5vdygpO1xuICAgICAgfSwgMTIwMCk7XG4gICAgICBmdW5jKCk7XG4gICAgICBmdW5jKCk7XG4gICAgICBmdW5jKCk7XG4gICAgICBhd2FpdCBmdW5jKCk7XG4gICAgICBhc3NlcnQub2soc2Vjb25kIC0gZmlyc3QgPj0gMTAwMCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY291bnQsIDEpO1xuICAgIH0pO1xuICAgIGl0KCdubyBkZWJvdW5jZSBtZW1vcnkgbGVhaycsIGFzeW5jIGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy50aW1lb3V0KDEyMDAwMCk7XG4gICAgICBjb25zdCBmdW5jID0gZGVib3VuY2UoKGFycjogbnVtYmVyW10pID0+IHtcbiAgICAgICAgYXJyWzBdID0gYXJyWzFdO1xuICAgICAgfSwgMSk7XG4gICAgICBjb25zdCBiZWZvcmUgPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCkuaGVhcFVzZWQgLyAxMDI0IC8gMTAyNDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7XG4gICAgICAgIGF3YWl0IGZ1bmMobmV3IEFycmF5KDEwMDAwMDApLmZpbGwoMSkpO1xuICAgICAgfVxuICAgICAgZ2xvYmFsPy5nYz8uKCk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMzAwMCkpO1xuICAgICAgY29uc3QgYWZ0ZXIgPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCkuaGVhcFVzZWQgLyAxMDI0IC8gMTAyNDtcbiAgICAgIGFzc2VydC5vayhhZnRlciA8PSBiZWZvcmUsICdtZW1vcnkgdXNhZ2UgZG9lcyBub3QgZ3JvdyB3aXRoIG1hbnkgZGVib3VuY2UgY2FsbHMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3J1bnMgbWQ1JywgKCkgPT4ge1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtZDUoJ2hlbGxvJyksICc1ZDQxNDAyYWJjNGIyYTc2Yjk3MTlkOTExMDE3YzU5MicpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChtZDUoJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4OScpLCAnYzE5MDZmYTRlYzcxZWJkYzAyYzQ5YzVkMTk5MDhhMzknKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwobWQ1KGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vZml4dHVyZXMvc2hhcmUuanBnJyksICdiaW5hcnknKSksICc3YjU1NDQ2YWQ4NzI5NzNjNWRiNTAwNjkwNWNjOTJhYScpO1xuICB9KTtcblxuICBpdCgncnVucyBiYXNlNjRVcmwnLCAoKSA9PiB7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U2NFVybEVuY29kZSgnQWRhbSBNaWxsZXInKSwgJ1FXUmhiU0JOYVd4c1pYSScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlNjRVcmxEZWNvZGUoYmFzZTY0VXJsRW5jb2RlKCdBZGFtIE1pbGxlcicpKSwgJ0FkYW0gTWlsbGVyJyk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZTY0VXJsRW5jb2RlKCdLZWxseScpLCAnUzJWc2JIaycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChiYXNlNjRVcmxEZWNvZGUoYmFzZTY0VXJsRW5jb2RlKCdLZWxseScpKSwgJ0tlbGx5Jyk7XG4gIH0pO1xuXG4gIGl0KCdydW5zIGJhc2U4NVV1aWRFbmNvZGUgLyBiYXNlODVVdWlkRW5jb2RlJywgKCkgPT4ge1xuICAgIGNvbnN0IGlkID0gJzFkMGQwNjk5LTcwMDItNDI3My1iMDEzLTJhOTYzODUyYzM4OCc7XG4gICAgY29uc3QgZW5jb2RlZCA9IGJhc2U4NVV1aWRFbmNvZGUoaWQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1V1aWQoaWQpLCB0cnVlKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZW5jb2RlZC5sZW5ndGgsIDIwKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYmFzZTg1VXVpZERlY29kZShlbmNvZGVkKSwgaWQpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7XG4gICAgICBjb25zdCBpZCA9IHV1aWQoKTtcbiAgICAgIGNvbnN0IGVuY29kZWQgPSBiYXNlODVVdWlkRW5jb2RlKGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1V1aWQoaWQpLCB0cnVlKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChlbmNvZGVkLmxlbmd0aCwgMjApO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGJhc2U4NVV1aWREZWNvZGUoZW5jb2RlZCksIGlkKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCd2YWxpZGF0ZXMgZW1haWxzJywgKCkgPT4ge1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZUVtYWlsKCdhZGFtQHVuaXZlcnNlLmFwcCcpKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGVFbWFpbCgnYWRhbSt0YWdAdW5pdmVyc2UuYXBwJykpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgnQHVuaXZlcnNlLmFwcCcpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ2FkYW1AdW5pdmVyc2UnKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKCdhZGFtQHVuaXZlcnNlLicpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoJ3N1cGVyZHVwZXJsb25nZW1haWxhZGRyZXNzdGhhdGlzdGVjaG5pY2FsbHlub3RhbGxvd2Vkc3VwZXJkdXBlcmxvbmdlbWFpbGFkZHJlc3N0aGF0aXN0ZWNobmljYWxseW5vdGFsbG93ZWRAdW5pdmVyc2UuYXBwJykpO1xuICAgIGFzc2VydC5vayghdmFsaWRhdGVFbWFpbCgnSU5WQUxJRCcpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoZmFsc2UpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoMTAwKSk7XG4gICAgYXNzZXJ0Lm9rKCF2YWxpZGF0ZUVtYWlsKG5ldyBEYXRlKCkpKTtcbiAgICBhc3NlcnQub2soIXZhbGlkYXRlRW1haWwoe30pKTtcbiAgfSk7XG5cbiAgaXQoJ2RlZXAgY2xvbmVzJywgYXN5bmMoKSA9PiB7XG4gICAgY29uc3Qgb2JqID0ge1xuICAgICAgYTogMSxcbiAgICAgIGI6IHsgYzogMyB9LFxuICAgICAgZDogWyAxLCAyLCB7IGU6IDUgfV0sXG4gICAgfTtcbiAgICBjb25zdCBjbG9uZSA9IGF3YWl0IGRlZXBDbG9uZShvYmopO1xuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChvYmosIGNsb25lKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKG9iaiwgY2xvbmUpO1xuICB9KTtcblxuICBpdCgnY29udmVydHMgcG9zaXggdG8gZGF0ZScsIGFzeW5jKCkgPT4ge1xuICAgIGNvbnN0IGRhdGVzID0gW1xuICAgICAgJzYvMjkvMTk5MScsXG4gICAgICAnMS8xLzE5MDAnLFxuICAgICAgJzEvMS8zMDMwJyxcbiAgICAgICcxMi8zMS8xODQ1JyxcbiAgICAgICcxMi8zMS83MDgyJyxcbiAgICAgICc2LzEvMjAwOScsXG4gICAgICAnNi8yOS8yMDA5JyxcbiAgICBdO1xuICAgIGZvciAoY29uc3QgZGF0ZSBvZiBkYXRlcykge1xuICAgICAgY29uc3QgcmVzID0gcG9zaXhUb0RhdGUoKyhuZXcgRGF0ZShkYXRlKSkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGAke3Jlcy5tb250aH0vJHtyZXMuZGF5fS8ke3Jlcy55ZWFyfWAsIGRhdGUpO1xuICAgIH1cbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RlZmVycmFibGUgc2hvdWxkJywgKCkgPT4ge1xuICAgIGl0KCdyZXNvbHZlJywgYXN5bmMoKSA9PiB7XG4gICAgICBsZXQgcnVucyA9IGZhbHNlO1xuICAgICAgY29uc3QgZGVmZXJyYWJsZSA9IG5ldyBEZWZlcnJlZDxudW1iZXI+KCk7XG4gICAgICBjb25zdCBwcm9taXNlID0gZGVmZXJyYWJsZS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgcnVucyA9IHRydWU7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCgxLCByZXMpO1xuICAgICAgfSk7XG4gICAgICBkZWZlcnJhYmxlLnJlc29sdmUoMSk7XG4gICAgICBhd2FpdCBwcm9taXNlO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRydWUsIHJ1bnMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlamVjdCcsIGFzeW5jKCkgPT4ge1xuICAgICAgbGV0IHJ1bnMgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGRlZmVycmFibGUgPSBuZXcgRGVmZXJyZWQ8bnVtYmVyPigpO1xuICAgICAgY29uc3QgcHJvbWlzZSA9IGRlZmVycmFibGUuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBydW5zID0gdHJ1ZTtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKCdUZXN0JywgZXJyLm1lc3NhZ2UpO1xuICAgICAgfSk7XG4gICAgICBkZWZlcnJhYmxlLnJlamVjdChuZXcgRXJyb3IoJ1Rlc3QnKSk7XG4gICAgICBhd2FpdCBwcm9taXNlO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRydWUsIHJ1bnMpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RyaW5nIG1ldGhvZHMgc2hvdWxkJywgKCkgPT4ge1xuICAgIGl0KCdydW4gdG9Mb3dlckNhc2UnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9Mb3dlckNhc2UoJ1dPUktTJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTG93ZXJDYXNlKCd3b3JrcycpLCAnd29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0xvd2VyQ2FzZSgnV29Sa3ogNC1BIGMwXl5QMTNYIHNUUmluZycpLCAnd29ya3ogNC1hIGMwXl5wMTN4IHN0cmluZycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3J1biB0b1VwcGVyQ2FzZScsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1VwcGVyQ2FzZSgnV09SS1MnKSwgJ1dPUktTJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9VcHBlckNhc2UoJ3dvcmtzJyksICdXT1JLUycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVXBwZXJDYXNlKCdXb1JreiA0LUEgYzBeXlAxM1ggc1RSaW5nJyksICdXT1JLWiA0LUEgQzBeXlAxM1ggU1RSSU5HJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVuIHRvU25ha2VDYXNlJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdXT1JLUycpLCAnd29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnd29ya3MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ1dvUmt6IDQtQSBjMF5eUDEzWCBzVFJpbmcnKSwgJ3dvX3Jrel80X2FfYzBfcF8xM194X3NfdF9yaW5nJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ2tlYmFiLWNhc2UnKSwgJ2tlYmFiX2Nhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1NuYWtlQ2FzZSgnc25ha2VfY2FzZScpLCAnc25ha2VfY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvU25ha2VDYXNlKCdUaXRsZSBDYXNlJyksICd0aXRsZV9jYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ1Bhc2NhbENhc2UnKSwgJ3Bhc2NhbF9jYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9TbmFrZUNhc2UoJ2NhbWFsQ2FzZScpLCAnY2FtYWxfY2FzZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3J1biB0b0tlYmFiQ2FzZScsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0tlYmFiQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ3dvcmtzJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdrZWJhYi1jYXNlJyksICdrZWJhYi1jYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9LZWJhYkNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ3NuYWtlLWNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0tlYmFiQ2FzZSgnVGl0bGUgQ2FzZScpLCAndGl0bGUtY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdQYXNjYWxDYXNlJyksICdwYXNjYWwtY2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvS2ViYWJDYXNlKCdjYW1hbENhc2UnKSwgJ2NhbWFsLWNhc2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdydW4gdG9UaXRsZUNhc2UnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9UaXRsZUNhc2UoJ1dPUktTJyksICdXT1JLUycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCd3b3JrcycpLCAnV29ya3MnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgna2ViYWItY2FzZScpLCAnS2ViYWIgQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvVGl0bGVDYXNlKCdzbmFrZV9jYXNlJyksICdTbmFrZSBDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9UaXRsZUNhc2UoJ1RpdGxlIENhc2UnKSwgJ1RpdGxlIENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgnUGFzY2FsQ2FzZScpLCAnUGFzY2FsIENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1RpdGxlQ2FzZSgnY2FtYWxDYXNlJyksICdDYW1hbCBDYXNlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVuIHRvUGFzY2FsQ2FzZScsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ1dPUktTJyksICdXb3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvUGFzY2FsQ2FzZSgnd29ya3MnKSwgJ1dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9QYXNjYWxDYXNlKCdrZWJhYi1jYXNlJyksICdLZWJhYkNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b1Bhc2NhbENhc2UoJ3NuYWtlX2Nhc2UnKSwgJ1NuYWtlQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvUGFzY2FsQ2FzZSgnVGl0bGUgQ2FzZScpLCAnVGl0bGVDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9QYXNjYWxDYXNlKCdQYXNjYWxDYXNlJyksICdQYXNjYWxDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9QYXNjYWxDYXNlKCdjYW1hbENhc2UnKSwgJ0NhbWFsQ2FzZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3J1biB0b0NhbWVsQ2FzZScsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnV09SS1MnKSwgJ3dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ3dvcmtzJyksICd3b3JrcycpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQ2FtZWxDYXNlKCdrZWJhYi1jYXNlJyksICdrZWJhYkNhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b0NhbWVsQ2FzZSgnc25ha2VfY2FzZScpLCAnc25ha2VDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ1RpdGxlIENhc2UnKSwgJ3RpdGxlQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvQ2FtZWxDYXNlKCdQYXNjYWxDYXNlJyksICdwYXNjYWxDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9DYW1lbENhc2UoJ2NhbWFsQ2FzZScpLCAnY2FtYWxDYXNlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncnVuIHRvTmFtZUNhc2UnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnV09SS1MnKSwgJ1dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnd29ya3MnKSwgJ1dvcmtzJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgna2ViYWItY2FzZScpLCAnS2ViYWItQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ3NuYWtlX2Nhc2UnKSwgJ1NuYWtlQ2FzZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRvTmFtZUNhc2UoJ1RpdGxlIENhc2UnKSwgJ1RpdGxlIENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdQYXNjYWxDYXNlJyksICdQYXNjYWxDYXNlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodG9OYW1lQ2FzZSgnY2FtYWxDYXNlJyksICdDYW1hbENhc2UnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKFwibydGYXJyZWxsXCIpLCBcIk8nRmFycmVsbFwiKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdlbWlseSBiYWtlci13aGl0ZScpLCAnRW1pbHkgQmFrZXItV2hpdGUnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0b05hbWVDYXNlKCdLZWxseVJvc2UgZmx1dHknKSwgJ0tlbGx5Um9zZSBGbHV0eScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTG9jYWwgSG91cnMgdG8gVVRDJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgY29udmVydCBsb2NhbCBob3VycyB0byB1dGMgd2hpbGUgbWFpbnRhaW5pbmcgbWludXRlcyBlbGFwc2VkJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxvY2FsSG91clRvVVRDKDIuNSksIDEwLjUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGxvY2FsIGhvdXJzIHRvIHV0YyB3aGlsZSB3cmFwcGluZyBmb3IgdGhlIDI0dGggaG91ciBtYXJrJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGxvY2FsSG91clRvVVRDKDIyLjUpLCA2LjUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGxvY2FsIGhvdXJzIHRvIHV0YycsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChsb2NhbEhvdXJUb1VUQygyMiksIDYpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHV0YyBob3VycyB0byBsb2NhbCB3aGlsZSBtYWludGFpbmluZyBtaW51dGVzIGVsYXBzZWQnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodXRjSG91clRvTG9jYWwoMi41KSwgMTguNSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgdXRjIGhvdXJzIHRvIGxvY2FsIHdoaWxlIHdyYXBwaW5nIGZvciB0aGUgMjR0aCBob3VyIG1hcmsnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodXRjSG91clRvTG9jYWwoMjIuNSksIDE0LjUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHV0YyBob3VycyB0byBsb2NhbCcsICgpID0+IHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbCh1dGNIb3VyVG9Mb2NhbCgyMiksIDE0KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
{
"name": "@universe/util",
"version": "1.2.2",
"version": "1.3.0",
"main": "dist/cjs/src/index.js",

@@ -5,0 +5,0 @@ "description": "Universe development utilities.",

/* eslint-disable max-len */
/* global MessageChannel */
import * as nodeCrypto from 'node:crypto';
import type { MessageChannel as IMessageChannel } from 'worker_threads';
const IS_BROWSER = typeof window === 'object' && window.document;
const crypto = IS_BROWSER ? window.crypto : nodeCrypto;

@@ -63,14 +65,11 @@ // Generics type checking utils.

/* eslint-disable-next-line @typescript-eslint/no-var-requires */
type NodeCrypto = typeof import("crypto");
let crypto = IS_BROWSER ? window.crypto : (globalThis.crypto as unknown as NodeCrypto);
const rand = (crypto as Crypto).getRandomValues?.bind(crypto) || nodeCrypto.randomFillSync;
/* eslint-disable-next-line @typescript-eslint/no-var-requires */
const rand = IS_BROWSER ? (crypto as Crypto)?.getRandomValues.bind(window.crypto) : (crypto as NodeCrypto)?.randomFillSync;
// https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
const uuidValidator = /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i;
const TMPL_UUID = ('' + 1e7 + -1e3 + -4e3 + -8e3 + -1e11);
const TMPL_UUID = (`${ 1e7 }${-1e3 }${-4e3 }${-8e3 }${-1e11}`);
export const NIL_UUID = '00000000-0000-0000-0000-000000000000';
export const isUuid = (v: unknown): v is string => isString(v) && (v === NIL_UUID || uuidValidator.test(v));
/* eslint-disable-next-line */
/* @ts-ignore-next-line */
export const uuid: (() => string) = crypto?.randomUUID?.bind(crypto) || ((): string => TMPL_UUID.replace(/[018]/g, c => (+c ^ rand(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)));

@@ -220,10 +219,16 @@

export async function sha1Digest(message: string): Promise<string> {
if (!IS_BROWSER && nodeCrypto.createHash) { return nodeCrypto.createHash('sha1').update(message, 'utf8').digest('hex'); }
const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array
const hashBuffer = await crypto.subtle.digest('SHA-1', msgUint8); // hash the message
const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array
return hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string
}
export async function sha256Digest(message: string): Promise<string> {
/* eslint-disable-next-line @typescript-eslint/no-var-requires */
if (!IS_BROWSER) { return (crypto as NodeCrypto).createHash('sha256').update(message, 'utf8').digest('hex'); }
if (!IS_BROWSER && nodeCrypto.createHash) { return nodeCrypto.createHash('sha256').update(message, 'utf8').digest('hex'); }
const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array
const hashBuffer = await (crypto as Crypto).subtle.digest('SHA-256', msgUint8); // hash the message
const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8); // hash the message
const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string
return hashHex;
return hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); // convert bytes to hex string
}

@@ -257,3 +262,3 @@

if (IS_BROWSER) {
throw new Error('[@universe/util] The lineCount function can only be used in a Node.js environment.')
throw new Error('[@universe/util] The lineCount function can only be used in a Node.js environment.');
}

@@ -265,3 +270,3 @@ /* eslint-disable-next-line */

fs.createReadStream(filePath)
.on('data', function(chunk: string) {
.on('data', (chunk: string) => {
let idx = -1;

@@ -274,3 +279,3 @@ lineCount--; // Because the loop will run once for idx=-1

})
.on('end', function() {
.on('end', () => {
resolve(lineCount);

@@ -367,3 +372,3 @@ });

/* eslint-disable-next-line @typescript-eslint/no-var-requires */
if (!IS_BROWSER) { return (crypto as NodeCrypto).createHash('md5').update(s, 'binary').digest('hex'); }
if (!IS_BROWSER && nodeCrypto.createHash) { return nodeCrypto.createHash('md5').update(s, 'binary').digest('hex'); }
const n = s.length;

@@ -392,8 +397,8 @@ const state = [ 1732584193, -271733879, -1732584194, 271733878 ];

if (diff < 120) return '1 minute ago';
if (diff < 3600) return Math.floor(diff / 60) + ' minutes ago';
if (diff < 3600) return `${Math.floor(diff / 60) } minutes ago`;
if (diff < 7200) return '1 hour ago';
if (diff < 86400) return Math.floor(diff / 3600) + ' hours ago';
if (diff < 86400) return `${Math.floor(diff / 3600) } hours ago`;
if (dayDiff === 1) return 'yesterday';
if (dayDiff < 7) return dayDiff + ' days ago';
if (dayDiff < 31) return Math.ceil(dayDiff / 7) + ' weeks ago';
if (dayDiff < 7) return `${dayDiff } days ago`;
if (dayDiff < 31) return `${Math.ceil(dayDiff / 7) } weeks ago`;
return '';

@@ -436,3 +441,3 @@ }

}
else {
// In the browser its better to create a new message channel for each clone. It does not (for whatever reason...) have the

@@ -448,3 +453,3 @@ // same primitive cloning overhead as Node.js, and because it is more sync under the hood, re-using th same message channel

});
}
};

@@ -451,0 +456,0 @@

/* global describe, it */
import * as assert from 'assert';
import * as fs from 'fs';

@@ -6,31 +7,29 @@ import * as path from 'path';

import {
debounce,
md5,
uuid,
isUuid,
base64UrlDecode,
base64UrlEncode,
base85UuidDecode,
base85UuidEncode,
debounce,
deepClone,
validateEmail,
base85UuidEncode,
base85UuidDecode,
Deferred,
isUuid,
localHourToUTC,
md5,
posixToDate,
localHourToUTC,
utcHourToLocal,
toCamelCase,
toKebabCase,
toLowerCase,
toUpperCase,
toNameCase,
toPascalCase,
toSnakeCase,
toKebabCase,
toTitleCase,
toPascalCase,
toNameCase,
toCamelCase,
Deferred,
toUpperCase,
utcHourToLocal,
uuid,
validateEmail,
} from '../src/index';
import * as assert from 'assert';
describe('Utils', function() {
describe('debounce should', function() {
it('delay a call', async function() {
describe('Utils', () => {
describe('debounce should', () => {
it('delay a call', async() => {
const first = Date.now();

@@ -41,3 +40,3 @@ let second = 0;

});
it('only call the function once', async function() {
it('only call the function once', async() => {
const first = Date.now();

@@ -49,3 +48,3 @@ let second = 0;

second = Date.now();
}, 1000);
}, 1200);
func();

@@ -74,9 +73,9 @@ func();

it('runs md5', function() {
it('runs md5', () => {
assert.strictEqual(md5('hello'), '5d41402abc4b2a76b9719d911017c592');
assert.strictEqual(md5('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 'c1906fa4ec71ebdc02c49c5d19908a39');
assert.strictEqual(md5(fs.readFileSync(path.join(__dirname, '../../fixtures/share.jpg'), 'binary')), '7b55446ad872973c5db5006905cc92aa');
assert.strictEqual(md5(fs.readFileSync(path.join(__dirname, '../../../fixtures/share.jpg'), 'binary')), '7b55446ad872973c5db5006905cc92aa');
});
it('runs base64Url', function() {
it('runs base64Url', () => {
assert.strictEqual(base64UrlEncode('Adam Miller'), 'QWRhbSBNaWxsZXI');

@@ -89,3 +88,3 @@ assert.strictEqual(base64UrlDecode(base64UrlEncode('Adam Miller')), 'Adam Miller');

it('runs base85UuidEncode / base85UuidEncode', function() {
it('runs base85UuidEncode / base85UuidEncode', () => {
const id = '1d0d0699-7002-4273-b013-2a963852c388';

@@ -105,3 +104,3 @@ const encoded = base85UuidEncode(id);

it('validates emails', function() {
it('validates emails', () => {
assert.ok(validateEmail('adam@universe.app'));

@@ -147,3 +146,3 @@ assert.ok(validateEmail('adam+tag@universe.app'));

describe('deferrable should', function() {
describe('deferrable should', () => {
it('resolve', async() => {

@@ -174,4 +173,4 @@ let runs = false;

describe('string methods should', function() {
it('run toLowerCase', function() {
describe('string methods should', () => {
it('run toLowerCase', () => {
assert.strictEqual(toLowerCase('WORKS'), 'works');

@@ -182,3 +181,3 @@ assert.strictEqual(toLowerCase('works'), 'works');

it('run toUpperCase', function() {
it('run toUpperCase', () => {
assert.strictEqual(toUpperCase('WORKS'), 'WORKS');

@@ -189,3 +188,3 @@ assert.strictEqual(toUpperCase('works'), 'WORKS');

it('run toSnakeCase', function() {
it('run toSnakeCase', () => {
assert.strictEqual(toSnakeCase('WORKS'), 'works');

@@ -201,3 +200,3 @@ assert.strictEqual(toSnakeCase('works'), 'works');

it('run toKebabCase', function() {
it('run toKebabCase', () => {
assert.strictEqual(toKebabCase('WORKS'), 'works');

@@ -212,3 +211,3 @@ assert.strictEqual(toKebabCase('works'), 'works');

it('run toTitleCase', function() {
it('run toTitleCase', () => {
assert.strictEqual(toTitleCase('WORKS'), 'WORKS');

@@ -223,3 +222,3 @@ assert.strictEqual(toTitleCase('works'), 'Works');

it('run toPascalCase', function() {
it('run toPascalCase', () => {
assert.strictEqual(toPascalCase('WORKS'), 'Works');

@@ -234,3 +233,3 @@ assert.strictEqual(toPascalCase('works'), 'Works');

it('run toCamelCase', function() {
it('run toCamelCase', () => {
assert.strictEqual(toCamelCase('WORKS'), 'works');

@@ -245,3 +244,3 @@ assert.strictEqual(toCamelCase('works'), 'works');

it('run toNameCase', function() {
it('run toNameCase', () => {
assert.strictEqual(toNameCase('WORKS'), 'Works');

@@ -260,3 +259,3 @@ assert.strictEqual(toNameCase('works'), 'Works');

describe('Local Hours to UTC', function() {
describe('Local Hours to UTC', () => {
it('should convert local hours to utc while maintaining minutes elapsed', () => {

@@ -263,0 +262,0 @@ assert.strictEqual(localHourToUTC(2.5), 10.5);

@@ -5,3 +5,4 @@ {

"compilerOptions": {
"module": "CommonJS",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"outDir": "dist/cjs"

@@ -8,0 +9,0 @@ },

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc