UNPKG

truly-ui

Version:

Web Components for Desktop Applications.

157 lines 25.1 kB
import { CurrencyManager } from './currency.manager'; export class CurrencyService { initialize() { this.PER_AR_NUMBER.set('\u06F0', '0'); this.PER_AR_NUMBER.set('\u06F1', '1'); this.PER_AR_NUMBER.set('\u06F2', '2'); this.PER_AR_NUMBER.set('\u06F3', '3'); this.PER_AR_NUMBER.set('\u06F4', '4'); this.PER_AR_NUMBER.set('\u06F5', '5'); this.PER_AR_NUMBER.set('\u06F6', '6'); this.PER_AR_NUMBER.set('\u06F7', '7'); this.PER_AR_NUMBER.set('\u06F8', '8'); this.PER_AR_NUMBER.set('\u06F9', '9'); this.PER_AR_NUMBER.set('\u0660', '0'); this.PER_AR_NUMBER.set('\u0661', '1'); this.PER_AR_NUMBER.set('\u0662', '2'); this.PER_AR_NUMBER.set('\u0663', '3'); this.PER_AR_NUMBER.set('\u0664', '4'); this.PER_AR_NUMBER.set('\u0665', '5'); this.PER_AR_NUMBER.set('\u0666', '6'); this.PER_AR_NUMBER.set('\u0667', '7'); this.PER_AR_NUMBER.set('\u0668', '8'); this.PER_AR_NUMBER.set('\u0669', '9'); } constructor(htmlInputElement, options) { this.htmlInputElement = htmlInputElement; this.options = options; this.PER_AR_NUMBER = new Map(); this.inputManager = new CurrencyManager(htmlInputElement); this.initialize(); } addNumber(keyCode) { if (!this.rawValue) { this.rawValue = this.applyMask(false, '0'); } const keyChar = String.fromCharCode(keyCode); const selectionStart = this.inputSelection.selectionStart; const selectionEnd = this.inputSelection.selectionEnd; this.rawValue = this.rawValue.substring(0, selectionStart) + keyChar + this.rawValue.substring(selectionEnd, this.rawValue.length); this.updateFieldValue(selectionStart + 1); } applyMask(isNumber, rawValue) { const { allowNegative, decimal, precision, prefix, suffix, thousands, nullable } = this.options; rawValue = isNumber ? Number(rawValue).toFixed(precision) : rawValue; const onlyNumbers = rawValue.replace(/[^0-9\u0660-\u0669\u06F0-\u06F9]/g, ''); if (!onlyNumbers) { return ''; } let integerPart = onlyNumbers.slice(0, onlyNumbers.length - precision) .replace(/^\u0660*/g, '') .replace(/^\u06F0*/g, '') .replace(/^0*/g, '') .replace(/\B(?=([0-9\u0660-\u0669\u06F0-\u06F9]{3})+(?![0-9\u0660-\u0669\u06F0-\u06F9]))/g, thousands); if (integerPart.startsWith(thousands)) { integerPart = integerPart.substring(1); } if (integerPart === '') { integerPart = '0'; } let newRawValue = integerPart; const decimalPart = onlyNumbers.slice(onlyNumbers.length - precision); if (precision > 0) { newRawValue += decimal + decimalPart; } const isZero = parseInt(integerPart, 10) === 0 && (parseInt(decimalPart, 10) === 0 || decimalPart === ''); const operator = (rawValue.indexOf('-') > -1 && allowNegative && !isZero) ? '-' : ''; return operator + prefix + newRawValue + suffix; } clearMask(rawValue) { if (this.isNullable() && rawValue === '') { return null; } let value = (rawValue || '0').replace(this.options.prefix, '').replace(this.options.suffix, ''); if (this.options.thousands) { value = value.replace(new RegExp('\\' + this.options.thousands, 'g'), ''); } if (this.options.decimal) { value = value.replace(this.options.decimal, '.'); } this.PER_AR_NUMBER.forEach((val, key) => { const re = new RegExp(key, 'g'); value = value.replace(re, val); }); return parseFloat(value); } changeToNegative() { if (this.options.allowNegative && this.rawValue !== '' && this.rawValue.charAt(0) !== '-' && this.value !== 0) { this.rawValue = '-' + this.rawValue; } } changeToPositive() { this.rawValue = this.rawValue.replace('-', ''); } removeNumber(keyCode) { if (this.isNullable() && this.value === 0) { this.rawValue = null; return; } let selectionEnd = this.inputSelection.selectionEnd; let selectionStart = this.inputSelection.selectionStart; if (selectionStart > this.rawValue.length - this.options.suffix.length) { selectionEnd = this.rawValue.length - this.options.suffix.length; selectionStart = this.rawValue.length - this.options.suffix.length; } let move = this.rawValue.substr(selectionStart - 1, 1).match(/\d/) ? 0 : -1; if ((keyCode === 8 && selectionStart - 1 === 0 && !(this.rawValue.substr(selectionStart, 1).match(/\d/))) || ((keyCode === 46 || keyCode === 63272) && selectionStart === 0 && !(this.rawValue.substr(selectionStart + 1, 1).match(/\d/)))) { move = 1; } selectionEnd = keyCode === 46 || keyCode === 63272 ? selectionEnd + 1 : selectionEnd; selectionStart = keyCode === 8 ? selectionStart - 1 : selectionStart; this.rawValue = this.rawValue.substring(0, selectionStart) + this.rawValue.substring(selectionEnd, this.rawValue.length); this.updateFieldValue(selectionStart + move); } updateFieldValue(selectionStart) { const newRawValue = this.applyMask(false, this.rawValue || ''); selectionStart = selectionStart === undefined ? this.rawValue.length : selectionStart; this.inputManager.updateValueAndCursor(newRawValue, this.rawValue.length, selectionStart); } updateOptions(options) { const value = this.value; this.options = options; this.value = value; } prefixLength() { return this.options.prefix.length; } isNullable() { return this.options.nullable; } get canInputMoreNumbers() { return this.inputManager.canInputMoreNumbers; } get inputSelection() { return this.inputManager.inputSelection; } get rawValue() { return this.inputManager.rawValue; } set rawValue(value) { this.inputManager.rawValue = value; } get storedRawValue() { return this.inputManager.storedRawValue; } get value() { return this.clearMask(this.rawValue); } set value(value) { this.rawValue = this.applyMask(true, '' + value); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RydWx5LXVpL3NyYy9jb21wb25lbnRzL2lucHV0L2RpcmVjdGl2ZXMvY3VycmVuY3kvY3VycmVuY3kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFJbkQsTUFBTSxPQUFPLGVBQWU7SUFLMUIsVUFBVTtRQUNSLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV0QyxJQUFJLENBQUMsYUFBYSxDQUFD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LElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ25ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q3VycmVuY3lNYW5hZ2VyfSBmcm9tICcuL2N1cnJlbmN5Lm1hbmFnZXInO1xuaW1wb3J0IHtDdXJyZW5jeUNvbmZpZ30gZnJvbSAnLi9jdXJyZW5jeS1tYXNrLmNvbmZpZyc7XG5cblxuZXhwb3J0IGNsYXNzIEN1cnJlbmN5U2VydmljZSB7XG4gIFBFUl9BUl9OVU1CRVI6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIHB1YmxpYyBpbnB1dE1hbmFnZXI6IEN1cnJlbmN5TWFuYWdlcjtcblxuICBpbml0aWFsaXplKCkge1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjAnLCAnMCcpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjEnLCAnMScpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjInLCAnMicpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjMnLCAnMycpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjQnLCAnNCcpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjUnLCAnNScpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjYnLCAnNicpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjcnLCAnNycpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjgnLCAnOCcpO1xuICAgIHRoaXMuUEVSX0FSX05VTUJFUi5zZXQoJ1xcdTA2RjknLCAnOScpO1xuXG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2MCcsICcwJyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2MScsICcxJyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2MicsICcyJyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2MycsICczJyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2NCcsICc0Jyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2NScsICc1Jyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2NicsICc2Jyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2NycsICc3Jyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2OCcsICc4Jyk7XG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLnNldCgnXFx1MDY2OScsICc5Jyk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0bWxJbnB1dEVsZW1lbnQ6IGFueSwgcHJpdmF0ZSBvcHRpb25zOiBDdXJyZW5jeUNvbmZpZykge1xuICAgIHRoaXMuaW5wdXRNYW5hZ2VyID0gbmV3IEN1cnJlbmN5TWFuYWdlcihodG1sSW5wdXRFbGVtZW50KTtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGFkZE51bWJlcihrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmF3VmFsdWUpIHtcbiAgICAgIHRoaXMucmF3VmFsdWUgPSB0aGlzLmFwcGx5TWFzayhmYWxzZSwgJzAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXlDb2RlKTtcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydCA9IHRoaXMuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhcnQ7XG4gICAgY29uc3Qgc2VsZWN0aW9uRW5kID0gdGhpcy5pbnB1dFNlbGVjdGlvbi5zZWxlY3Rpb25FbmQ7XG4gICAgdGhpcy5yYXdWYWx1ZSA9IHRoaXMucmF3VmFsdWUuc3Vic3RyaW5nKDAsIHNlbGVjdGlvblN0YXJ0KSArIGtleUNoYXIgKyB0aGlzLnJhd1ZhbHVlLnN1YnN0cmluZyhzZWxlY3Rpb25FbmQsIHRoaXMucmF3VmFsdWUubGVuZ3RoKTtcbiAgICB0aGlzLnVwZGF0ZUZpZWxkVmFsdWUoc2VsZWN0aW9uU3RhcnQgKyAxKTtcbiAgfVxuXG4gIGFwcGx5TWFzayhpc051bWJlcjogYm9vbGVhbiwgcmF3VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qge2FsbG93TmVnYXRpdmUsIGRlY2ltYWwsIHByZWNpc2lvbiwgcHJlZml4LCBzdWZmaXgsIHRob3VzYW5kcywgbnVsbGFibGV9ID0gdGhpcy5vcHRpb25zO1xuICAgIHJhd1ZhbHVlID0gaXNOdW1iZXIgPyBOdW1iZXIocmF3VmFsdWUpLnRvRml4ZWQocHJlY2lzaW9uKSA6IHJhd1ZhbHVlO1xuICAgIGNvbnN0IG9ubHlOdW1iZXJzID0gcmF3VmFsdWUucmVwbGFjZSgvW14wLTlcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjldL2csICcnKTtcblxuICAgIGlmICghb25seU51bWJlcnMpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBsZXQgaW50ZWdlclBhcnQgPSBvbmx5TnVtYmVycy5zbGljZSgwLCBvbmx5TnVtYmVycy5sZW5ndGggLSBwcmVjaXNpb24pXG4gICAgICAucmVwbGFjZSgvXlxcdTA2NjAqL2csICcnKVxuICAgICAgLnJlcGxhY2UoL15cXHUwNkYwKi9nLCAnJylcbiAgICAgIC5yZXBsYWNlKC9eMCovZywgJycpXG4gICAgICAucmVwbGFjZSgvXFxCKD89KFswLTlcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjldezN9KSsoPyFbMC05XFx1MDY2MC1cXHUwNjY5XFx1MDZGMC1cXHUwNkY5XSkpL2csIHRob3VzYW5kcyk7XG5cbiAgICBpZiAoaW50ZWdlclBhcnQuc3RhcnRzV2l0aCh0aG91c2FuZHMpKSB7XG4gICAgICBpbnRlZ2VyUGFydCA9IGludGVnZXJQYXJ0LnN1YnN0cmluZygxKTtcbiAgICB9XG5cblxuICAgIGlmIChpbnRlZ2VyUGFydCA9PT0gJycpIHtcbiAgICAgIGludGVnZXJQYXJ0ID0gJzAnO1xuICAgIH1cblxuICAgIGxldCBuZXdSYXdWYWx1ZSA9IGludGVnZXJQYXJ0O1xuICAgIGNvbnN0IGRlY2ltYWxQYXJ0ID0gb25seU51bWJlcnMuc2xpY2Uob25seU51bWJlcnMubGVuZ3RoIC0gcHJlY2lzaW9uKTtcblxuICAgIGlmIChwcmVjaXNpb24gPiAwKSB7XG4gICAgICBuZXdSYXdWYWx1ZSArPSBkZWNpbWFsICsgZGVjaW1hbFBhcnQ7XG4gICAgfVxuXG4gICAgY29uc3QgaXNaZXJvID0gcGFyc2VJbnQoaW50ZWdlclBhcnQsIDEwKSA9PT0gMCAmJiAocGFyc2VJbnQoZGVjaW1hbFBhcnQsIDEwKSA9PT0gMCB8fCBkZWNpbWFsUGFydCA9PT0gJycpO1xuICAgIGNvbnN0IG9wZXJhdG9yID0gKHJhd1ZhbHVlLmluZGV4T2YoJy0nKSA+IC0xICYmIGFsbG93TmVnYXRpdmUgJiYgIWlzWmVybykgPyAnLScgOiAnJztcbiAgICByZXR1cm4gb3BlcmF0b3IgKyBwcmVmaXggKyBuZXdSYXdWYWx1ZSArIHN1ZmZpeDtcbiAgfVxuXG4gIGNsZWFyTWFzayhyYXdWYWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5pc051bGxhYmxlKCkgJiYgcmF3VmFsdWUgPT09ICcnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgdmFsdWUgPSAocmF3VmFsdWUgfHwgJzAnKS5yZXBsYWNlKHRoaXMub3B0aW9ucy5wcmVmaXgsICcnKS5yZXBsYWNlKHRoaXMub3B0aW9ucy5zdWZmaXgsICcnKTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMudGhvdXNhbmRzKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXCcgKyB0aGlzLm9wdGlvbnMudGhvdXNhbmRzLCAnZycpLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kZWNpbWFsKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UodGhpcy5vcHRpb25zLmRlY2ltYWwsICcuJyk7XG4gICAgfVxuXG4gICAgdGhpcy5QRVJfQVJfTlVNQkVSLmZvckVhY2goKHZhbDogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGtleSwgJ2cnKTtcbiAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZShyZSwgdmFsKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gIH1cblxuICBjaGFuZ2VUb05lZ2F0aXZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuYWxsb3dOZWdhdGl2ZSAmJiB0aGlzLnJhd1ZhbHVlICE9PSAnJyAmJiB0aGlzLnJhd1ZhbHVlLmNoYXJBdCgwKSAhPT0gJy0nICYmIHRoaXMudmFsdWUgIT09IDApIHtcbiAgICAgIHRoaXMucmF3VmFsdWUgPSAnLScgKyB0aGlzLnJhd1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZVRvUG9zaXRpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5yYXdWYWx1ZSA9IHRoaXMucmF3VmFsdWUucmVwbGFjZSgnLScsICcnKTtcbiAgfVxuXG4gIHJlbW92ZU51bWJlcihrZXlDb2RlOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc051bGxhYmxlKCkgJiYgdGhpcy52YWx1ZSA9PT0gMCkge1xuICAgICAgdGhpcy5yYXdWYWx1ZSA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHNlbGVjdGlvbkVuZCA9IHRoaXMuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uRW5kO1xuICAgIGxldCBzZWxlY3Rpb25TdGFydCA9IHRoaXMuaW5wdXRTZWxlY3Rpb24uc2VsZWN0aW9uU3RhcnQ7XG5cbiAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPiB0aGlzLnJhd1ZhbHVlLmxlbmd0aCAtIHRoaXMub3B0aW9ucy5zdWZmaXgubGVuZ3RoKSB7XG4gICAgICBzZWxlY3Rpb25FbmQgPSB0aGlzLnJhd1ZhbHVlLmxlbmd0aCAtIHRoaXMub3B0aW9ucy5zdWZmaXgubGVuZ3RoO1xuICAgICAgc2VsZWN0aW9uU3RhcnQgPSB0aGlzLnJhd1ZhbHVlLmxlbmd0aCAtIHRoaXMub3B0aW9ucy5zdWZmaXgubGVuZ3RoO1xuICAgIH1cblxuICAgIGxldCBtb3ZlID0gdGhpcy5yYXdWYWx1ZS5zdWJzdHIoc2VsZWN0aW9uU3RhcnQgLSAxLCAxKS5tYXRjaCgvXFxkLykgPyAwIDogLTE7XG4gICAgaWYgKChcbiAgICAgICAga2V5Q29kZSA9PT0gOCAmJlxuICAgICAgICBzZWxlY3Rpb25TdGFydCAtIDEgPT09IDAgJiZcbiAgICAgICAgISh0aGlzLnJhd1ZhbHVlLnN1YnN0cihzZWxlY3Rpb25TdGFydCwgMSkubWF0Y2goL1xcZC8pKVxuICAgICAgKSB8fFxuICAgICAgKFxuICAgICAgICAoa2V5Q29kZSA9PT0gNDYgfHwga2V5Q29kZSA9PT0gNjMyNzIpICYmXG4gICAgICAgIHNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICAgICEodGhpcy5yYXdWYWx1ZS5zdWJzdHIoc2VsZWN0aW9uU3RhcnQgKyAxLCAxKS5tYXRjaCgvXFxkLykpXG4gICAgICApXG4gICAgKSB7XG4gICAgICBtb3ZlID0gMTtcbiAgICB9XG4gICAgc2VsZWN0aW9uRW5kID0ga2V5Q29kZSA9PT0gNDYgfHwga2V5Q29kZSA9PT0gNjMyNzIgPyBzZWxlY3Rpb25FbmQgKyAxIDogc2VsZWN0aW9uRW5kO1xuICAgIHNlbGVjdGlvblN0YXJ0ID0ga2V5Q29kZSA9PT0gOCA/IHNlbGVjdGlvblN0YXJ0IC0gMSA6IHNlbGVjdGlvblN0YXJ0O1xuICAgIHRoaXMucmF3VmFsdWUgPSB0aGlzLnJhd1ZhbHVlLnN1YnN0cmluZygwLCBzZWxlY3Rpb25TdGFydCkgKyB0aGlzLnJhd1ZhbHVlLnN1YnN0cmluZyhzZWxlY3Rpb25FbmQsIHRoaXMucmF3VmFsdWUubGVuZ3RoKTtcbiAgICB0aGlzLnVwZGF0ZUZpZWxkVmFsdWUoc2VsZWN0aW9uU3RhcnQgKyBtb3ZlKTtcbiAgfVxuXG4gIHVwZGF0ZUZpZWxkVmFsdWUoc2VsZWN0aW9uU3RhcnQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdSYXdWYWx1ZSA9IHRoaXMuYXBwbHlNYXNrKGZhbHNlLCB0aGlzLnJhd1ZhbHVlIHx8ICcnKTtcbiAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0ID09PSB1bmRlZmluZWQgPyB0aGlzLnJhd1ZhbHVlLmxlbmd0aCA6IHNlbGVjdGlvblN0YXJ0O1xuICAgIHRoaXMuaW5wdXRNYW5hZ2VyLnVwZGF0ZVZhbHVlQW5kQ3Vyc29yKG5ld1Jhd1ZhbHVlLCB0aGlzLnJhd1ZhbHVlLmxlbmd0aCwgc2VsZWN0aW9uU3RhcnQpO1xuICB9XG5cbiAgdXBkYXRlT3B0aW9ucyhvcHRpb25zOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZTogbnVtYmVyID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHByZWZpeExlbmd0aCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucHJlZml4Lmxlbmd0aDtcbiAgfVxuXG4gIGlzTnVsbGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5udWxsYWJsZTtcbiAgfVxuXG4gIGdldCBjYW5JbnB1dE1vcmVOdW1iZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlucHV0TWFuYWdlci5jYW5JbnB1dE1vcmVOdW1iZXJzO1xuICB9XG5cbiAgZ2V0IGlucHV0U2VsZWN0aW9uKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRNYW5hZ2VyLmlucHV0U2VsZWN0aW9uO1xuICB9XG5cbiAgZ2V0IHJhd1ZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRNYW5hZ2VyLnJhd1ZhbHVlO1xuICB9XG5cbiAgc2V0IHJhd1ZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlucHV0TWFuYWdlci5yYXdWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHN0b3JlZFJhd1ZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRNYW5hZ2VyLnN0b3JlZFJhd1ZhbHVlO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuY2xlYXJNYXNrKHRoaXMucmF3VmFsdWUpO1xuICB9XG5cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnJhd1ZhbHVlID0gdGhpcy5hcHBseU1hc2sodHJ1ZSwgJycgKyB2YWx1ZSk7XG4gIH1cbn1cbiJdfQ==