UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

165 lines 22.2 kB
import { Directive, Host, Input, IterableDiffers, TemplateRef, ViewContainerRef, } from '@angular/core'; import { TranslateService } from './translate.service'; import * as i0 from "@angular/core"; import * as i1 from "./translate.service"; const TEMPLATE_INTERPOLATE = /(\{\{([^}]+)\}\}|\{([^}]+)\})/g; const placeholder = (val) => ({ type: 'placeholder', val: val.trim(), }); const text = (val) => ({ type: 'text', val }); export class TranslateView { constructor(templateRef, match = '') { this.templateRef = templateRef; this.match = match; } isText() { return !this.match; } } export class TranslateDirective { constructor(viewContainer, translate, differs) { this.viewContainer = viewContainer; this.translate = translate; this.differs = differs; this.dirty = false; this.views = {}; this.differ = null; this.viewIndexes = {}; this.inlineTracker = (index, item) => item.type === 'text' ? `${item.val}_${index}` : `${item.val}_${index}_${this.views[item.val] ? 'has_view' : 'no_view'}`; } set aclTranslate(key) { this.translateKey = key; this.dirty = true; } ngDoCheck() { if (this.dirty || this.locale !== this.translate.locale) { this.locale = this.translate.locale; this.inlines = this.separateContent(this.translate.getRaw(this.translateKey)); if (!this.differ) { try { this.differ = this.differs.find([]).create(this.inlineTracker); } catch { throw new Error(`Cannot find differ for translate directive inlines`); } } this.update(this.inlines); } } separateContent(content) { if (content.length === 0) { return []; } const matches = content.matchAll(TEMPLATE_INTERPOLATE); const result = []; let prevIndex = 0; for (const match of matches) { if (match.index > prevIndex) { result.push(text(content.slice(prevIndex, match.index))); } const placeholderContent = match[2] || match[3]; result.push(placeholder(placeholderContent)); prevIndex = match.index + match[0].length; } if (prevIndex < content.length) { result.push(text(content.slice(prevIndex, content.length))); } return result; } update(inlines) { if (!this.textView) { throw new Error('translate directive need aclTranslateText to render text'); } if (!this.differ) { return; } const changes = this.differ.diff(inlines); if (!changes) { return; } this.applyChanges(changes); this.dirty = false; } applyChanges(changes) { changes.forEachOperation((change, adjustedPreviousIndex, currentIndex) => { if (change.previousIndex === null) { const item = change.item; const index = currentIndex === null ? undefined : currentIndex; if (item.type === 'text') { this.viewContainer.createEmbeddedView(this.textView.templateRef, { $implicit: item.val }, index); } else { const view = this.views[item.val]; if (view) { this.viewContainer.createEmbeddedView(view.templateRef, null, index); } else { this.viewContainer.createEmbeddedView(this.textView.templateRef, { $implicit: item.val }, index); } this.viewIndexes[item.val] = this.viewIndexes[item.val] || [index]; } } else if (currentIndex === null) { this.viewContainer.remove(adjustedPreviousIndex === null ? undefined : adjustedPreviousIndex); } else if (adjustedPreviousIndex !== null) { const view = this.viewContainer.get(adjustedPreviousIndex); this.viewContainer.move(view, currentIndex); } }); } addView(view) { if (view.isText()) { this.textView = view; } else { this.views[view.match] = view; this.update(this.inlines); } } static { this.ɵfac = function TranslateDirective_Factory(t) { return new (t || TranslateDirective)(i0.ɵɵdirectiveInject(i0.ViewContainerRef), i0.ɵɵdirectiveInject(i1.TranslateService), i0.ɵɵdirectiveInject(i0.IterableDiffers)); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TranslateDirective, selectors: [["", "aclTranslate", ""]], inputs: { aclTranslate: "aclTranslate" }, standalone: true }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TranslateDirective, [{ type: Directive, args: [{ selector: '[aclTranslate]', standalone: true }] }], () => [{ type: i0.ViewContainerRef }, { type: i1.TranslateService }, { type: i0.IterableDiffers }], { aclTranslate: [{ type: Input }] }); })(); export class TranslateMatchDirective { constructor(templateRef, aclTranslate) { this.templateRef = templateRef; this.aclTranslate = aclTranslate; } set aclTranslateMatch(val) { this.aclTranslate.addView(new TranslateView(this.templateRef, val)); } static { this.ɵfac = function TranslateMatchDirective_Factory(t) { return new (t || TranslateMatchDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(TranslateDirective, 1)); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TranslateMatchDirective, selectors: [["", "aclTranslateMatch", ""]], inputs: { aclTranslateMatch: "aclTranslateMatch" }, standalone: true }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TranslateMatchDirective, [{ type: Directive, args: [{ selector: '[aclTranslateMatch]', standalone: true }] }], () => [{ type: i0.TemplateRef }, { type: TranslateDirective, decorators: [{ type: Host }] }], { aclTranslateMatch: [{ type: Input }] }); })(); export class TranslateTextDirective { constructor(templateRef, aclTranslate) { this.aclTranslate = aclTranslate; this.aclTranslate.addView(new TranslateView(templateRef)); } static { this.ɵfac = function TranslateTextDirective_Factory(t) { return new (t || TranslateTextDirective)(i0.ɵɵdirectiveInject(i0.TemplateRef), i0.ɵɵdirectiveInject(TranslateDirective, 1)); }; } static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: TranslateTextDirective, selectors: [["", "aclTranslateText", ""]], standalone: true }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TranslateTextDirective, [{ type: Directive, args: [{ selector: '[aclTranslateText]', standalone: true }] }], () => [{ type: i0.TemplateRef }, { type: TranslateDirective, decorators: [{ type: Host }] }], null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy90cmFuc2xhdGUvdHJhbnNsYXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULElBQUksRUFDSixLQUFLLEVBR0wsZUFBZSxFQUNmLFdBQVcsRUFDWCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQU92RCxNQUFNLG9CQUFvQixHQUFHLGdDQUFnQyxDQUFDO0FBRTlELE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLElBQUksRUFBRSxhQUFhO0lBQ25CLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFO0NBQ2hCLENBQUMsQ0FBQztBQUVILE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBRTlELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ2tCLFdBQTZCLEVBQzdCLFFBQVEsRUFBRTtRQURWLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3QixVQUFLLEdBQUwsS0FBSyxDQUFLO0lBQ3pCLENBQUM7SUFFSixNQUFNO1FBQ0osT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDckIsQ0FBQztDQUNGO0FBR0QsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixZQUNtQixhQUErQixFQUMvQixTQUEyQixFQUMzQixPQUF3QjtRQUZ4QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFZbkMsVUFBSyxHQUFHLEtB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QkFBc0I7b0VBQXRCLHNCQUFzQjs7aUZBQXRCLHNCQUFzQjtjQURsQyxTQUFTO2VBQUMsRUFBRSxRQUFRLEVBQUUsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs7c0JBSTFELElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIERvQ2hlY2ssXG4gIEhvc3QsXG4gIElucHV0LFxuICBJdGVyYWJsZUNoYW5nZXMsXG4gIEl0ZXJhYmxlRGlmZmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICd0cy1lc3NlbnRpYWxzJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4vdHJhbnNsYXRlLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSW5saW5lIHtcbiAgdHlwZTogJ3BsYWNlaG9sZGVyJyB8ICd0ZXh0JztcbiAgdmFsOiBzdHJpbmc7XG59XG5cbmNvbnN0IFRFTVBMQVRFX0lOVEVSUE9MQVRFID0gLyhcXHtcXHsoW159XSspXFx9XFx9fFxceyhbXn1dKylcXH0pL2c7XG5cbmNvbnN0IHBsYWNlaG9sZGVyID0gKHZhbDogc3RyaW5nKTogSW5saW5lID0+ICh7XG4gIHR5cGU6ICdwbGFjZWhvbGRlcicsXG4gIHZhbDogdmFsLnRyaW0oKSxcbn0pO1xuXG5jb25zdCB0ZXh0ID0gKHZhbDogc3RyaW5nKTogSW5saW5lID0+ICh7IHR5cGU6ICd0ZXh0JywgdmFsIH0pO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlVmlldyB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBwdWJsaWMgcmVhZG9ubHkgbWF0Y2ggPSAnJyxcbiAgKSB7fVxuXG4gIGlzVGV4dCgpIHtcbiAgICByZXR1cm4gIXRoaXMubWF0Y2g7XG4gIH1cbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2FjbFRyYW5zbGF0ZV0nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlRGlyZWN0aXZlIGltcGxlbWVudHMgRG9DaGVjayB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycyxcbiAgKSB7fVxuXG4gIEBJbnB1dCgpIHNldCBhY2xUcmFuc2xhdGUoa2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnRyYW5zbGF0ZUtleSA9IGtleTtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIHRyYW5zbGF0ZUtleTogc3RyaW5nIHwgRGljdGlvbmFyeTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgbG9jYWxlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBkaXJ0eSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgdGV4dFZpZXc6IFRyYW5zbGF0ZVZpZXc7XG5cbiAgcHJpdmF0ZSB2aWV3czogRGljdGlvbmFyeTxUcmFuc2xhdGVWaWV3PiA9IHt9O1xuXG4gIHByaXZhdGUgZGlmZmVyOiBJdGVyYWJsZURpZmZlcjxJbmxpbmU+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSB2aWV3SW5kZXhlczogRGljdGlvbmFyeTxudW1iZXJbXT4gPSB7fTtcblxuICBwcml2YXRlIGlubGluZXM6IElubGluZVtdO1xuXG4gIGlubGluZVRyYWNrZXIgPSAoaW5kZXg6IG51bWJlciwgaXRlbTogSW5saW5lKSA9PlxuICAgIGl0ZW0udHlwZSA9PT0gJ3RleHQnXG4gICAgICA/IGAke2l0ZW0udmFsfV8ke2luZGV4fWBcbiAgICAgIDogYCR7aXRlbS52YWx9XyR7aW5kZXh9XyR7dGhpcy52aWV3c1tpdGVtLnZhbF0gPyAnaGFzX3ZpZXcnIDogJ25vX3ZpZXcnfWA7XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpcnR5IHx8IHRoaXMubG9jYWxlICE9PSB0aGlzLnRyYW5zbGF0ZS5sb2NhbGUpIHtcbiAgICAgIHRoaXMubG9jYWxlID0gdGhpcy50cmFuc2xhdGUubG9jYWxlO1xuICAgICAgdGhpcy5pbmxpbmVzID0gdGhpcy5zZXBhcmF0ZUNvbnRlbnQoXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldFJhdyh0aGlzLnRyYW5zbGF0ZUtleSksXG4gICAgICApO1xuXG4gICAgICBpZiAoIXRoaXMuZGlmZmVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5kaWZmZXIgPSB0aGlzLmRpZmZlcnMuZmluZChbXSkuY3JlYXRlKHRoaXMuaW5saW5lVHJhY2tlcik7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgZGlmZmVyIGZvciB0cmFuc2xhdGUgZGlyZWN0aXZlIGlubGluZXNgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZSh0aGlzLmlubGluZXMpO1xuICAgIH1cbiAgfVxuXG4gIHNlcGFyYXRlQ29udGVudChjb250ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAoY29udGVudC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGVzID0gY29udGVudC5tYXRjaEFsbChURU1QTEFURV9JTlRFUlBPTEFURSk7XG5cbiAgICBjb25zdCByZXN1bHQ6IElubGluZVtdID0gW107XG4gICAgbGV0IHByZXZJbmRleCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMpIHtcbiAgICAgIGlmIChtYXRjaC5pbmRleCA+IHByZXZJbmRleCkge1xuICAgICAgICByZXN1bHQucHVzaCh0ZXh0KGNvbnRlbnQuc2xpY2UocHJldkluZGV4LCBtYXRjaC5pbmRleCkpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJDb250ZW50ID0gbWF0Y2hbMl0gfHwgbWF0Y2hbM107XG4gICAgICByZXN1bHQucHVzaChwbGFjZWhvbGRlcihwbGFjZWhvbGRlckNvbnRlbnQpKTtcblxuICAgICAgcHJldkluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHByZXZJbmRleCA8IGNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICByZXN1bHQucHVzaCh0ZXh0KGNvbnRlbnQuc2xpY2UocHJldkluZGV4LCBjb250ZW50Lmxlbmd0aCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGUoaW5saW5lczogSW5saW5lW10pIHtcbiAgICBpZiAoIXRoaXMudGV4dFZpZXcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ3RyYW5zbGF0ZSBkaXJlY3RpdmUgbmVlZCBhY2xUcmFuc2xhdGVUZXh0IHRvIHJlbmRlciB0ZXh0JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRpZmZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmRpZmZlci5kaWZmKGlubGluZXMpO1xuXG4gICAgaWYgKCFjaGFuZ2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseUNoYW5nZXMoY2hhbmdlcyk7XG5cbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q2hhbmdlcyhjaGFuZ2VzOiBJdGVyYWJsZUNoYW5nZXM8SW5saW5lPikge1xuICAgIGNoYW5nZXMuZm9yRWFjaE9wZXJhdGlvbigoY2hhbmdlLCBhZGp1c3RlZFByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCkgPT4ge1xuICAgICAgaWYgKGNoYW5nZS5wcmV2aW91c0luZGV4ID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjaGFuZ2UuaXRlbTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBjdXJyZW50SW5kZXggPT09IG51bGwgPyB1bmRlZmluZWQgOiBjdXJyZW50SW5kZXg7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoXG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3LnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgeyAkaW1wbGljaXQ6IGl0ZW0udmFsIH0sXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdzW2l0ZW0udmFsXTtcbiAgICAgICAgICBpZiAodmlldykge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgICAgICAgdmlldy50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KFxuICAgICAgICAgICAgICB0aGlzLnRleHRWaWV3LnRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICB7ICRpbXBsaWNpdDogaXRlbS52YWwgfSxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMudmlld0luZGV4ZXNbaXRlbS52YWxdID0gdGhpcy52aWV3SW5kZXhlc1tpdGVtLnZhbF0gfHwgW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW5kZXggPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLnJlbW92ZShcbiAgICAgICAgICBhZGp1c3RlZFByZXZpb3VzSW5kZXggPT09IG51bGwgPyB1bmRlZmluZWQgOiBhZGp1c3RlZFByZXZpb3VzSW5kZXgsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGFkanVzdGVkUHJldmlvdXNJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3Q29udGFpbmVyLmdldChhZGp1c3RlZFByZXZpb3VzSW5kZXgpITtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLm1vdmUodmlldywgY3VycmVudEluZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFkZFZpZXcodmlldzogVHJhbnNsYXRlVmlldykge1xuICAgIGlmICh2aWV3LmlzVGV4dCgpKSB7XG4gICAgICB0aGlzLnRleHRWaWV3ID0gdmlldztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3c1t2aWV3Lm1hdGNoXSA9IHZpZXc7XG4gICAgICB0aGlzLnVwZGF0ZSh0aGlzLmlubGluZXMpO1xuICAgIH1cbiAgfVxufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbYWNsVHJhbnNsYXRlTWF0Y2hdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZU1hdGNoRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICBASG9zdCgpIHByaXZhdGUgcmVhZG9ubHkgYWNsVHJhbnNsYXRlOiBUcmFuc2xhdGVEaXJlY3RpdmUsXG4gICkge31cblxuICBASW5wdXQoKSBzZXQgYWNsVHJhbnNsYXRlTWF0Y2godmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFjbFRyYW5zbGF0ZS5hZGRWaWV3KG5ldyBUcmFuc2xhdGVWaWV3KHRoaXMudGVtcGxhdGVSZWYsIHZhbCkpO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1thY2xUcmFuc2xhdGVUZXh0XScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGVUZXh0RGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgQEhvc3QoKSBwcml2YXRlIHJlYWRvbmx5IGFjbFRyYW5zbGF0ZTogVHJhbnNsYXRlRGlyZWN0aXZlLFxuICApIHtcbiAgICB0aGlzLmFjbFRyYW5zbGF0ZS5hZGRWaWV3KG5ldyBUcmFuc2xhdGVWaWV3KHRlbXBsYXRlUmVmKSk7XG4gIH1cbn1cbiJdfQ==