Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
canvas
/
node_modules
/
testcafe
/
lib
/
reporter
/
Filename :
plugin-host.js
back
Copy
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const chalk_1 = __importDefault(require("chalk")); const indent_string_1 = __importDefault(require("indent-string")); const lodash_1 = require("lodash"); const moment_loader_1 = __importDefault(require("../utils/moment-loader")); const os_family_1 = __importDefault(require("os-family")); const string_1 = require("../utils/string"); const get_viewport_width_1 = __importDefault(require("../utils/get-viewport-width")); const colors_1 = require("../utils/diff/colors"); // NOTE: we should not expose internal state to // the plugin, to avoid accidental rewrites. // Therefore we use symbols to store them. const stream = Symbol(); const wordWrapEnabled = Symbol(); const indent = Symbol(); const errorDecorator = Symbol(); class ReporterPluginHost { constructor(plugin, outStream, name) { this.name = name; this.streamController = null; this[stream] = outStream || process.stdout; this[wordWrapEnabled] = false; this[indent] = 0; const useColors = this[stream] === process.stdout && chalk_1.default.enabled && !plugin.noColors; this.chalk = new chalk_1.default.constructor({ enabled: useColors }); this.moment = moment_loader_1.default; this.viewportWidth = get_viewport_width_1.default(this[stream]); this.symbols = os_family_1.default.win ? { ok: '√', err: '×' } : { ok: '✓', err: '✖' }; lodash_1.assignIn(this, plugin); this[errorDecorator] = this.createErrorDecorator(); } // Error decorator createErrorDecorator() { return { 'span user-agent': (str) => this.chalk.grey(str), 'span subtitle': (str) => `- ${this.chalk.bold.red(str)} -`, 'div message': (str) => this.chalk.bold.red(str), 'div screenshot-info': lodash_1.identity, 'a screenshot-path': (str) => this.chalk.grey.underline(str), 'code': lodash_1.identity, 'span syntax-string': (str) => this.chalk.green(str), 'span syntax-punctuator': (str) => this.chalk.grey(str), 'span syntax-keyword': (str) => this.chalk.cyan(str), 'span syntax-number': (str) => this.chalk.magenta(str), 'span syntax-regex': (str) => this.chalk.magenta(str), 'span syntax-comment': (str) => this.chalk.grey.bold(str), 'span syntax-invalid': (str) => this.chalk.inverse(str), [`span ${colors_1.DIFF_COLORS.DIFF_NOT_MODIFIED}`]: (str) => this.chalk.gray(str), [`span ${colors_1.DIFF_COLORS.DIFF_ADDED}`]: (str) => this.chalk.green(str), [`span ${colors_1.DIFF_COLORS.DIFF_REMOVED}`]: (str) => this.chalk.red(str), 'div code-frame': lodash_1.identity, 'div code-line': (str) => str + '\n', 'div code-line-last': lodash_1.identity, 'div code-line-num': (str) => ` ${str} |`, 'div code-line-num-base': (str) => this.chalk.bgRed(` > ${str} `) + '|', 'div code-line-src': lodash_1.identity, 'div stack': (str) => '\n\n' + str, 'div stack-line': (str) => str + '\n', 'div stack-line-last': lodash_1.identity, 'div stack-line-name': (str) => ` at ${this.chalk.bold(str)}`, 'div stack-line-location': (str) => ` (${this.chalk.grey.underline(str)})`, 'strong': (str) => this.chalk.bold(str), 'a': (str) => `"${this.chalk.underline(str)}"` }; } // String helpers indentString(str, indentVal) { return indent_string_1.default(str, ' ', indentVal); } wordWrap(str, indentVal, width) { return string_1.wordWrap(str, indentVal, width); } escapeHtml(str) { return lodash_1.escape(str); } formatError(err, prefix = '') { const prefixLengthWithoutColors = string_1.removeTTYColors(prefix).length; const maxMsgLength = this.viewportWidth - this[indent] - prefixLengthWithoutColors; let msg = err.formatMessage(this[errorDecorator], maxMsgLength); if (this[wordWrapEnabled]) msg = this.wordWrap(msg, prefixLengthWithoutColors, maxMsgLength); else msg = this.indentString(msg, prefixLengthWithoutColors); return prefix + msg.substr(prefixLengthWithoutColors); } // Writing helpers newline() { this._writeToUniqueStream('\n'); return this; } write(text) { if (this[wordWrapEnabled]) text = this.wordWrap(text, this[indent], this.viewportWidth); else text = this.indentString(text, this[indent]); this._writeToUniqueStream(text); return this; } useWordWrap(use) { this[wordWrapEnabled] = use; return this; } setIndent(val) { this[indent] = val; return this; } _writeToUniqueStream(text) { if (!this.streamController || this.streamController.ensureUniqueStream(this[stream], this)) this[stream].write(text); } // Abstract methods implemented in plugin async reportTaskStart( /* startTime, userAgents, testCount, testStructure, taskProperties */) { throw new Error('Not implemented'); } async reportFixtureStart( /* name, path */) { throw new Error('Not implemented'); } // NOTE: It's an optional method // async reportTestStart (/* name, testMeta */) { // throw new Error('Not implemented'); // } async reportTestDone( /* name, testRunInfo */) { throw new Error('Not implemented'); } async reportTaskDone( /* endTime, passed, warnings */) { throw new Error('Not implemented'); } } exports.default = ReporterPluginHost; module.exports = exports.default; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVwb3J0ZXIvcGx1Z2luLWhvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBcUM7QUFDckMsa0VBQXlDO0FBRXpDLG1DQUlnQjtBQUVoQiwyRUFBNEM7QUFDNUMsMERBQTJCO0FBQzNCLDRDQUE0RDtBQUM1RCxxRkFBMkQ7QUFDM0QsaURBQW1EO0FBTW5ELCtDQUErQztBQUMvQyw0Q0FBNEM7QUFDNUMsMENBQTBDO0FBQzFDLE1BQU0sTUFBTSxHQUFZLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sZUFBZSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sTUFBTSxHQUFZLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLE1BQU0sY0FBYyxHQUFJLE1BQU0sRUFBRSxDQUFDO0FBT2pDLE1BQXFCLGtCQUFrQjtJQVluQyxZQUFvQixNQUFXLEVBQUUsU0FBbUIsRUFBRSxJQUFZO1FBQzlELElBQUksQ0FBQyxJQUFJLEdBQWUsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFZLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFZLENBQUMsQ0FBQztRQUUxQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sSUFBSSxlQUFLLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUV2RixJQUFJLENBQUMsS0FBSyxHQUFXLElBQUksZUFBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FB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LENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0o7QUFsS0QscUNBa0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrLCB7IENoYWxrIH0gZnJvbSAnY2hhbGsnO1xuaW1wb3J0IGluZGVudFN0cmluZyBmcm9tICdpbmRlbnQtc3RyaW5nJztcblxuaW1wb3J0IHtcbiAgICBpZGVudGl0eSxcbiAgICBlc2NhcGUgYXMgZXNjYXBlSHRtbCxcbiAgICBhc3NpZ25JblxufSBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL3V0aWxzL21vbWVudC1sb2FkZXInO1xuaW1wb3J0IE9TIGZyb20gJ29zLWZhbWlseSc7XG5pbXBvcnQgeyB3b3JkV3JhcCwgcmVtb3ZlVFRZQ29sb3JzIH0gZnJvbSAnLi4vdXRpbHMvc3RyaW5nJztcbmltcG9ydCBnZXRWaWV3cG9ydFdpZHRoIGZyb20gJy4uL3V0aWxzL2dldC12aWV3cG9ydC13aWR0aCc7XG5pbXBvcnQgeyBESUZGX0NPTE9SUyB9IGZyb20gJy4uL3V0aWxzL2RpZmYvY29sb3JzJztcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgUmVwb3J0ZXJTdHJlYW1Db250cm9sbGVyIGZyb20gJy4uL3J1bm5lci9yZXBvcnRlci1zdHJlYW0tY29udHJvbGxlcic7XG5pbXBvcnQgeyBXcml0YWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyIGZyb20gJy4uL2Vycm9ycy90ZXN0LXJ1bi9mb3JtYXR0YWJsZS1hZGFwdGVyJztcblxuLy8gTk9URTogd2Ugc2hvdWxkIG5vdCBleHBvc2UgaW50ZXJuYWwgc3RhdGUgdG9cbi8vIHRoZSBwbHVnaW4sIHRvIGF2b2lkIGFjY2lkZW50YWwgcmV3cml0ZXMuXG4vLyBUaGVyZWZvcmUgd2UgdXNlIHN5bWJvbHMgdG8gc3RvcmUgdGhlbS5cbmNvbnN0IHN0cmVhbSAgICAgICAgICA9IFN5bWJvbCgpO1xuY29uc3Qgd29yZFdyYXBFbmFibGVkID0gU3ltYm9sKCk7XG5jb25zdCBpbmRlbnQgICAgICAgICAgPSBTeW1ib2woKTtcbmNvbnN0IGVycm9yRGVjb3JhdG9yICA9IFN5bWJvbCgpO1xuXG5pbnRlcmZhY2UgUmVwb3J0ZXJTeW1ib2xzIHtcbiAgICBvazogc3RyaW5nO1xuICAgIGVycjogc3RyaW5nO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXBvcnRlclBsdWdpbkhvc3Qge1xuICAgIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gICAgcHVibGljIHN0cmVhbUNvbnRyb2xsZXI6IFJlcG9ydGVyU3RyZWFtQ29udHJvbGxlciB8IG51bGw7XG4gICAgcHVibGljIGNoYWxrOiBDaGFsaztcbiAgICBwdWJsaWMgbW9tZW50OiBNb21lbnQ7XG4gICAgcHVibGljIHZpZXdwb3J0V2lkdGg6IG51bWJlcjtcbiAgICBwdWJsaWMgc3ltYm9sczogUmVwb3J0ZXJTeW1ib2xzO1xuICAgIHByaXZhdGUgW3N0cmVhbV06IFdyaXRhYmxlO1xuICAgIHByaXZhdGUgW3dvcmRXcmFwRW5hYmxlZF06IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBbaW5kZW50XTogbnVtYmVyO1xuICAgIHByaXZhdGUgW2Vycm9yRGVjb3JhdG9yXTogUmVjb3JkPHN0cmluZywgRnVuY3Rpb24+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yIChwbHVnaW46IGFueSwgb3V0U3RyZWFtOiBXcml0YWJsZSwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmFtZSAgICAgICAgICAgICA9IG5hbWU7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlciA9IG51bGw7XG4gICAgICAgIHRoaXNbc3RyZWFtXSAgICAgICAgICA9IG91dFN0cmVhbSB8fCBwcm9jZXNzLnN0ZG91dDtcbiAgICAgICAgdGhpc1t3b3JkV3JhcEVuYWJsZWRdID0gZmFsc2U7XG4gICAgICAgIHRoaXNbaW5kZW50XSAgICAgICAgICA9IDA7XG5cbiAgICAgICAgY29uc3QgdXNlQ29sb3JzID0gdGhpc1tzdHJlYW1dID09PSBwcm9jZXNzLnN0ZG91dCAmJiBjaGFsay5lbmFibGVkICYmICFwbHVnaW4ubm9Db2xvcnM7XG5cbiAgICAgICAgdGhpcy5jaGFsayAgICAgICAgID0gbmV3IGNoYWxrLmNvbnN0cnVjdG9yKHsgZW5hYmxlZDogdXNlQ29sb3JzIH0pO1xuICAgICAgICB0aGlzLm1vbWVudCAgICAgICAgPSBtb21lbnQ7XG4gICAgICAgIHRoaXMudmlld3BvcnRXaWR0aCA9IGdldFZpZXdwb3J0V2lkdGgodGhpc1tzdHJlYW1dKTtcblxuICAgICAgICB0aGlzLnN5bWJvbHMgPSBPUy53aW4gP1xuICAgICAgICAgICAgeyBvazogJ+KImicsIGVycjogJ8OXJyB9IDpcbiAgICAgICAgICAgIHsgb2s6ICfinJMnLCBlcnI6ICfinJYnIH07XG5cbiAgICAgICAgYXNzaWduSW4odGhpcywgcGx1Z2luKTtcblxuICAgICAgICB0aGlzW2Vycm9yRGVjb3JhdG9yXSA9IHRoaXMuY3JlYXRlRXJyb3JEZWNvcmF0b3IoKTtcbiAgICB9XG5cbiAgICAvLyBFcnJvciBkZWNvcmF0b3JcbiAgICBwdWJsaWMgY3JlYXRlRXJyb3JEZWNvcmF0b3IgKCk6IFJlY29yZDxzdHJpbmcsIEZ1bmN0aW9uPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnc3BhbiB1c2VyLWFnZW50JzogKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmdyZXkoc3RyKSxcblxuICAgICAgICAgICAgJ3NwYW4gc3VidGl0bGUnOiAoc3RyOiBzdHJpbmcpID0+IGAtICR7dGhpcy5jaGFsay5ib2xkLnJlZChzdHIpfSAtYCxcbiAgICAgICAgICAgICdkaXYgbWVzc2FnZSc6ICAgKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmJvbGQucmVkKHN0ciksXG5cbiAgICAgICAgICAgICdkaXYgc2NyZWVuc2hvdC1pbmZvJzogaWRlbnRpdHksXG4gICAgICAgICAgICAnYSBzY3JlZW5zaG90LXBhdGgnOiAgIChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5ncmV5LnVuZGVybGluZShzdHIpLFxuXG4gICAgICAgICAgICAnY29kZSc6IGlkZW50aXR5LFxuXG4gICAgICAgICAgICAnc3BhbiBzeW50YXgtc3RyaW5nJzogICAgIChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5ncmVlbihzdHIpLFxuICAgICAgICAgICAgJ3NwYW4gc3ludGF4LXB1bmN0dWF0b3InOiAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuZ3JleShzdHIpLFxuICAgICAgICAgICAgJ3NwYW4gc3ludGF4LWtleXdvcmQnOiAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuY3lhbihzdHIpLFxuICAgICAgICAgICAgJ3NwYW4gc3ludGF4LW51bWJlcic6ICAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsubWFnZW50YShzdHIpLFxuICAgICAgICAgICAgJ3NwYW4gc3ludGF4LXJlZ2V4JzogICAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsubWFnZW50YShzdHIpLFxuICAgICAgICAgICAgJ3NwYW4gc3ludGF4LWNvbW1lbnQnOiAgICAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuZ3JleS5ib2xkKHN0ciksXG4gICAgICAgICAgICAnc3BhbiBzeW50YXgtaW52YWxpZCc6ICAgIChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5pbnZlcnNlKHN0ciksXG5cbiAgICAgICAgICAgIFtgc3BhbiAke0RJRkZfQ09MT1JTLkRJRkZfTk9UX01PRElGSUVEfWBdOiAoc3RyOiBzdHJpbmcpID0+IHRoaXMuY2hhbGsuZ3JheShzdHIpLFxuICAgICAgICAgICAgW2BzcGFuICR7RElGRl9DT0xPUlMuRElGRl9BRERFRH1gXTogICAgICAgIChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5ncmVlbihzdHIpLFxuICAgICAgICAgICAgW2BzcGFuICR7RElGRl9DT0xPUlMuRElGRl9SRU1PVkVEfWBdOiAgICAgIChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5yZWQoc3RyKSxcblxuICAgICAgICAgICAgJ2RpdiBjb2RlLWZyYW1lJzogICAgICAgICBpZGVudGl0eSxcbiAgICAgICAgICAgICdkaXYgY29kZS1saW5lJzogICAgICAgICAgKHN0cjogc3RyaW5nKSA9PiBzdHIgKyAnXFxuJyxcbiAgICAgICAgICAgICdkaXYgY29kZS1saW5lLWxhc3QnOiAgICAgaWRlbnRpdHksXG4gICAgICAgICAgICAnZGl2IGNvZGUtbGluZS1udW0nOiAgICAgIChzdHI6IHN0cmluZykgPT4gYCAgICR7c3RyfSB8YCxcbiAgICAgICAgICAgICdkaXYgY29kZS1saW5lLW51bS1iYXNlJzogKHN0cjogc3RyaW5nKSA9PiB0aGlzLmNoYWxrLmJnUmVkKGAgPiAke3N0cn0gYCkgKyAnfCcsXG4gICAgICAgICAgICAnZGl2IGNvZGUtbGluZS1zcmMnOiAgICAgIGlkZW50aXR5LFxuXG4gICAgICAgICAgICAnZGl2IHN0YWNrJzogICAgICAgICAgICAgICAoc3RyOiBzdHJpbmcpID0+ICdcXG5cXG4nICsgc3RyLFxuICAgICAgICAgICAgJ2RpdiBzdGFjay1saW5lJzogICAgICAgICAgKHN0cjogc3RyaW5nKSA9PiBzdHIgKyAnXFxuJyxcbiAgICAgICAgICAgICdkaXYgc3RhY2stbGluZS1sYXN0JzogICAgIGlkZW50aXR5LFxuICAgICAgICAgICAgJ2RpdiBzdGFjay1saW5lLW5hbWUnOiAgICAgKHN0cjogc3RyaW5nKSA9PiBgICAgYXQgJHt0aGlzLmNoYWxrLmJvbGQoc3RyKX1gLFxuICAgICAgICAgICAgJ2RpdiBzdGFjay1saW5lLWxvY2F0aW9uJzogKHN0cjogc3RyaW5nKSA9PiBgICgke3RoaXMuY2hhbGsuZ3JleS51bmRlcmxpbmUoc3RyKX0pYCxcblxuICAgICAgICAgICAgJ3N0cm9uZyc6IChzdHI6IHN0cmluZykgPT4gdGhpcy5jaGFsay5ib2xkKHN0ciksXG4gICAgICAgICAgICAnYSc6ICAgICAgKHN0cjogc3RyaW5nKSA9PiBgXCIke3RoaXMuY2hhbGsudW5kZXJsaW5lKHN0cil9XCJgXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gU3RyaW5nIGhlbHBlcnNcbiAgICBwdWJsaWMgaW5kZW50U3RyaW5nIChzdHI6IHN0cmluZywgaW5kZW50VmFsOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gaW5kZW50U3RyaW5nKHN0ciwgJyAnLCBpbmRlbnRWYWwpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3b3JkV3JhcCAoc3RyOiBzdHJpbmcsIGluZGVudFZhbDogbnVtYmVyLCB3aWR0aDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHdvcmRXcmFwKHN0ciwgaW5kZW50VmFsLCB3aWR0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVzY2FwZUh0bWwgKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZUh0bWwoc3RyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9ybWF0RXJyb3IgKGVycjogVGVzdFJ1bkVycm9yRm9ybWF0dGFibGVBZGFwdGVyLCBwcmVmaXggPSAnJyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHByZWZpeExlbmd0aFdpdGhvdXRDb2xvcnMgPSByZW1vdmVUVFlDb2xvcnMocHJlZml4KS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG1heE1zZ0xlbmd0aCAgICAgICAgICAgICAgPSB0aGlzLnZpZXdwb3J0V2lkdGggLSB0aGlzW2luZGVudF0gLSBwcmVmaXhMZW5ndGhXaXRob3V0Q29sb3JzO1xuXG4gICAgICAgIGxldCBtc2cgPSBlcnIuZm9ybWF0TWVzc2FnZSh0aGlzW2Vycm9yRGVjb3JhdG9yXSwgbWF4TXNnTGVuZ3RoKTtcblxuICAgICAgICBpZiAodGhpc1t3b3JkV3JhcEVuYWJsZWRdKVxuICAgICAgICAgICAgbXNnID0gdGhpcy53b3JkV3JhcChtc2csIHByZWZpeExlbmd0aFdpdGhvdXRDb2xvcnMsIG1heE1zZ0xlbmd0aCk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG1zZyA9IHRoaXMuaW5kZW50U3RyaW5nKG1zZywgcHJlZml4TGVuZ3RoV2l0aG91dENvbG9ycyk7XG5cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIG1zZy5zdWJzdHIocHJlZml4TGVuZ3RoV2l0aG91dENvbG9ycyk7XG4gICAgfVxuXG5cbiAgICAvLyBXcml0aW5nIGhlbHBlcnNcbiAgICBwdWJsaWMgbmV3bGluZSAoKTogUmVwb3J0ZXJQbHVnaW5Ib3N0IHtcbiAgICAgICAgdGhpcy5fd3JpdGVUb1VuaXF1ZVN0cmVhbSgnXFxuJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlICh0ZXh0OiBzdHJpbmcpOiBSZXBvcnRlclBsdWdpbkhvc3Qge1xuICAgICAgICBpZiAodGhpc1t3b3JkV3JhcEVuYWJsZWRdKVxuICAgICAgICAgICAgdGV4dCA9IHRoaXMud29yZFdyYXAodGV4dCwgdGhpc1tpbmRlbnRdLCB0aGlzLnZpZXdwb3J0V2lkdGgpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0ZXh0ID0gdGhpcy5pbmRlbnRTdHJpbmcodGV4dCwgdGhpc1tpbmRlbnRdKTtcblxuICAgICAgICB0aGlzLl93cml0ZVRvVW5pcXVlU3RyZWFtKHRleHQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB1c2VXb3JkV3JhcCAodXNlOiBib29sZWFuKTogUmVwb3J0ZXJQbHVnaW5Ib3N0IHtcbiAgICAgICAgdGhpc1t3b3JkV3JhcEVuYWJsZWRdID0gdXNlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRJbmRlbnQgKHZhbDogbnVtYmVyKTogUmVwb3J0ZXJQbHVnaW5Ib3N0IHtcbiAgICAgICAgdGhpc1tpbmRlbnRdID0gdmFsO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3dyaXRlVG9VbmlxdWVTdHJlYW0gKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc3RyZWFtQ29udHJvbGxlciB8fCB0aGlzLnN0cmVhbUNvbnRyb2xsZXIuZW5zdXJlVW5pcXVlU3RyZWFtKHRoaXNbc3RyZWFtXSwgdGhpcykpXG4gICAgICAgICAgICB0aGlzW3N0cmVhbV0ud3JpdGUodGV4dCk7XG4gICAgfVxuXG5cbiAgICAvLyBBYnN0cmFjdCBtZXRob2RzIGltcGxlbWVudGVkIGluIHBsdWdpblxuICAgIHB1YmxpYyBhc3luYyByZXBvcnRUYXNrU3RhcnQgKC8qIHN0YXJ0VGltZSwgdXNlckFnZW50cywgdGVzdENvdW50LCB0ZXN0U3RydWN0dXJlLCB0YXNrUHJvcGVydGllcyAqLyk6IFByb21pc2U8bmV2ZXI+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVwb3J0Rml4dHVyZVN0YXJ0ICgvKiBuYW1lLCBwYXRoICovKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cblxuICAgIC8vIE5PVEU6IEl0J3MgYW4gb3B0aW9uYWwgbWV0aG9kXG4gICAgLy8gYXN5bmMgcmVwb3J0VGVzdFN0YXJ0ICgvKiBuYW1lLCB0ZXN0TWV0YSAqLykge1xuICAgIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIC8vIH1cblxuICAgIHB1YmxpYyBhc3luYyByZXBvcnRUZXN0RG9uZSAoLyogbmFtZSwgdGVzdFJ1bkluZm8gKi8pOiBQcm9taXNlPG5ldmVyPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlcG9ydFRhc2tEb25lICgvKiBlbmRUaW1lLCBwYXNzZWQsIHdhcm5pbmdzICovKTogUHJvbWlzZTxuZXZlcj4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cbn1cbiJdfQ==