UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

541 lines (540 loc) 35.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, EventEmitter, ApplicationRef } from '@angular/core'; import { Option } from '../../../../../decorator/Option.decorator'; import { NeedFocusService } from '../../../../../service/NeedFocusService.service'; import { FileSelector } from '../../../../../component/dataview/input/FileSelector.component'; import { I18N } from '../../../../../decorator/I18N.decorator'; const /** @type {?} */ TYPE_NAME = "material-file-selector"; export class MaterialFileSelector extends FileSelector { /** * @param {?} elementRef * @param {?} needFocusService * @param {?} applicationRef */ constructor(elementRef, needFocusService, applicationRef) { super(elementRef, needFocusService); this._applicationRef = applicationRef; this._bgColor = '#ededed'; //extract(@CLR_1, 7); } /** * @return {?} */ ngOnInit() { super.ngOnInit(); } /** * @param {?} inputValue * @param {?} results * @return {?} */ onValidationEnd(inputValue, results) { //! do sthing } /** * @param {?} data * @param {?} inputVal * @return {?} */ onDataChange(data, inputVal) { // throw new Error("Method not implemented."); } /** * @param {?} $event * @return {?} */ doFocus($event) { // throw new Error("Method not implemented."); } /** * @param {?} $event * @return {?} */ doLostFocus($event) { // throw new Error("Method not implemented."); } /** * @return {?} */ getAllowMultipleSelect() { return this.allowMultipleSelect; } /** * @param {?} file * @return {?} */ handleFiles(file) { if (this.isAccept(file.files)) { this.addFiles(file.files, event); } } /** * @return {?} */ openFileSelector() { document.getElementById('file').click(); } /** * @return {?} */ isSelfDataDirty() { let /** @type {?} */ d1 = FileSelector.resolveMappedData(this.field, this.originalValue); let /** @type {?} */ d2 = this.getInputValue(); if (d1 !== d2) { return true; } return false; } /** * @param {?} data * @return {?} */ selfSaveData(data) { if (data !== undefined && data !== null) { this.originalValue = JSON.parse(JSON.stringify(data)); } else { this.originalValue = data; } } /** * @return {?} */ selfResetData() { this.setInputValue(this.originalValue); } /** * @return {?} */ getWidth() { return this.width; } /** * @param {?} width * @return {?} */ setWidth(width) { return this.width = width; } /** * @return {?} */ getHeight() { return this.height; } /** * @param {?} height * @return {?} */ setHeight(height) { return this.height = height; } /** * @return {?} */ getLabel() { return this.label; } /** * @param {?} label * @return {?} */ setLabel(label) { return this.label = label; } /** * @return {?} */ getDescription() { return this.description; } /** * @param {?} description * @return {?} */ setDescription(description) { return this.description = description; } /** * @param {?} event * @param {?} format * @param {?} data * @return {?} */ isAcceptDragData(event, format, data) { return this.isAccept(event.dataTransfer.files); } /** * @param {?} event * @return {?} */ getDragOverDataTransfer(event) { return; } /** * @param {?} event * @return {?} */ onDragEnter(event) { this._bgColor = '#d6d6d6'; //extract(@CLR_1, 5); this._applicationRef.tick(); } /** * @param {?} event * @return {?} */ onDragOver(event) { } /** * @param {?} event * @return {?} */ onDragLeave(event) { this._bgColor = '#ededed'; //extract(@CLR_1, 7); this._applicationRef.tick(); } /** * @param {?} event * @return {?} */ onDrop(event) { } /** * @param {?} event * @param {?} data * @return {?} */ onDropAccepted(event, data) { this._bgColor = '#ededed'; //extract(@CLR_1, 7); this._applicationRef.tick(); event.preventDefault(); var /** @type {?} */ files = event.dataTransfer.files; this.addFiles(files, event); clearTimeout(this._timeout); this._timeout = setTimeout(() => { this.setDefaultState(); this._applicationRef.tick(); }, 5000); } /** * @param {?} event * @return {?} */ onDropRejected(event) { this._applicationRef.tick(); event.preventDefault(); clearTimeout(this._timeout); this._timeout = setTimeout(() => { this.setDefaultState(); this._applicationRef.tick(); }, 5000); } } MaterialFileSelector.TYPE_NAME = TYPE_NAME; MaterialFileSelector.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div (click)="file.click()" class="material-file-selector" [style.background-color]="_bgColor" [dropAccept]="'FILES'" [phxDroppable]="this" [style.width]="getWidth()" [style.height]="getHeight()"> <div class="material-file-selector-box"> <div class="icon-clouds "> <div class="icon-clouds-text"> {{getFiles().length}} <div class="icon-clouds-text-type"> {{getLabel()}} </div> </div> </div> <div *ngIf="isAcceptStatus() && getAlertMessage() === null"> {{getDescription()}} </div> <div *ngIf="isAcceptStatus() && getAlertMessage() !== null"> {{getAlertMessage()}} </div> <div *ngIf="!isAcceptStatus() && getAlertMessage() !== null" style="color: red;"> {{getAlertMessage()}} </div> </div> <input #file type="file" style="display: none;" [multiple]="getAllowMultipleSelect()" (change)="handleFiles(file)"> </div> `, },] }, ]; /** @nocollapse */ MaterialFileSelector.ctorParameters = () => [ { type: ElementRef, }, { type: NeedFocusService, }, { type: ApplicationRef, }, ]; MaterialFileSelector.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "field": [{ type: Input },], "name": [{ type: Input },], "typeOfData": [{ type: Input },], "readOnly": [{ type: Input },], "help": [{ type: Input },], "maxFilesize": [{ type: Input },], "allowMultipleSelect": [{ type: Input },], "fileTypes": [{ type: Input },], "label": [{ type: Input },], "description": [{ type: Input },], "width": [{ type: Input },], "height": [{ type: Input },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },], "endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeSelectEvent": [{ type: Output, args: ['phxBeforeSelect',] },], "selectEvent": [{ type: Output, args: ['phxSelect',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialFileSelector.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], MaterialFileSelector.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialFileSelector.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], MaterialFileSelector.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "field", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "name", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "typeOfData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "readOnly", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], MaterialFileSelector.prototype, "help", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Number) ], MaterialFileSelector.prototype, "maxFilesize", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], MaterialFileSelector.prototype, "allowMultipleSelect", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Array) ], MaterialFileSelector.prototype, "fileTypes", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "label", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "description", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "width", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], MaterialFileSelector.prototype, "height", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "endValidateEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "beforeSelectEvent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", EventEmitter) ], MaterialFileSelector.prototype, "selectEvent", void 0); function MaterialFileSelector_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ MaterialFileSelector.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ MaterialFileSelector.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ MaterialFileSelector.propDecorators; /** @type {?} */ MaterialFileSelector.TYPE_NAME; /** @type {?} */ MaterialFileSelector.prototype.dataParent; /** @type {?} */ MaterialFileSelector.prototype.ignoreParentData; /** @type {?} */ MaterialFileSelector.prototype.data; /** @type {?} */ MaterialFileSelector.prototype.ignoreParentDisabled; /** @type {?} */ MaterialFileSelector.prototype.delegateHistory; /** @type {?} */ MaterialFileSelector.prototype.onDisabled; /** @type {?} */ MaterialFileSelector.prototype.onEnabled; /** @type {?} */ MaterialFileSelector.prototype.loadingEnabled; /** @type {?} */ MaterialFileSelector.prototype.i18nKey; /** @type {?} */ MaterialFileSelector.prototype.bypass; /** @type {?} */ MaterialFileSelector.prototype.options; /** @type {?} */ MaterialFileSelector.prototype.disabled; /** @type {?} */ MaterialFileSelector.prototype.field; /** @type {?} */ MaterialFileSelector.prototype.name; /** @type {?} */ MaterialFileSelector.prototype.typeOfData; /** @type {?} */ MaterialFileSelector.prototype.readOnly; /** @type {?} */ MaterialFileSelector.prototype.help; /** @type {?} */ MaterialFileSelector.prototype.maxFilesize; /** @type {?} */ MaterialFileSelector.prototype.allowMultipleSelect; /** @type {?} */ MaterialFileSelector.prototype.fileTypes; /** @type {?} */ MaterialFileSelector.prototype.label; /** @type {?} */ MaterialFileSelector.prototype.description; /** @type {?} */ MaterialFileSelector.prototype.width; /** @type {?} */ MaterialFileSelector.prototype.height; /** @type {?} */ MaterialFileSelector.prototype.loadEvent; /** @type {?} */ MaterialFileSelector.prototype.startValidateEvent; /** @type {?} */ MaterialFileSelector.prototype.endValidateEvent; /** @type {?} */ MaterialFileSelector.prototype.beforeFocusEvent; /** @type {?} */ MaterialFileSelector.prototype.focusEvent; /** @type {?} */ MaterialFileSelector.prototype.beforeLostFocusEvent; /** @type {?} */ MaterialFileSelector.prototype.lostFocusEvent; /** @type {?} */ MaterialFileSelector.prototype.beforeChangeEvent; /** @type {?} */ MaterialFileSelector.prototype.changeEvent; /** @type {?} */ MaterialFileSelector.prototype.beforeSelectEvent; /** @type {?} */ MaterialFileSelector.prototype.selectEvent; /** @type {?} */ MaterialFileSelector.prototype.originalValue; /** @type {?} */ MaterialFileSelector.prototype._bgColor; /** @type {?} */ MaterialFileSelector.prototype._applicationRef; /** @type {?} */ MaterialFileSelector.prototype._timeout; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0ZXJpYWxGaWxlU2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvdGhlbWUvbWF0ZXJpYWwvY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L01hdGVyaWFsRmlsZVNlbGVjdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBRTlGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUkvRCx1QkFBTSxTQUFTLEdBQVcsd0JBQXdCLENBQUM7QUE4Qm5ELE1BQU0sMkJBQTRCLFNBQVEsWUFBWTs7Ozs7O0lBaUlsRCxZQUFZLFVBQXNCLEVBQUUsZ0JBQWtDLEVBQUUsY0FBOEI7UUFDbEcsS0FBSyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO0tBQzdCOzs7O0lBRU0sUUFBUTtRQUNYLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7Ozs7OztJQUdYLGVBQWUsQ0FBQyxVQUFlLEVBQUUsT0FBMkI7O0tBRXJFOzs7Ozs7SUFFUyxZQUFZLENBQUMsSUFBUyxFQUFFLFFBQWE7O0tBRTlDOzs7OztJQUVTLE9BQU8sQ0FBQyxNQUFhOztLQUU5Qjs7Ozs7SUFFUyxXQUFXLENBQUMsTUFBYTs7S0FFbEM7Ozs7SUFF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SUFDTixNQUFNLEVBQUU7Ozs7SUFHUixJQUFJLEVBQUU7SUFDTixNQUFNLEVBQUU7Ozs7SUFJUixNQUFNLEVBQUU7Ozs7SUFHUixNQUFNLEVBQUU7Ozs7SUFNUixNQUFNLENBQUMsTUFBTSxDQUFDO3NDQUNNLFlBQVk7OztJQUloQyxNQUFNLENBQUMsZUFBZSxDQUFDO3NDQUNNLFlBQVk7OztJQUV6QyxNQUFNLENBQUMsYUFBYSxDQUFDO3NDQUNNLFlBQVk7OztJQUV2QyxNQUFNLENBQUMsYUFBYSxDQUFDO3NDQUNNLFlBQVk7OztJQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDO3NDQUNNLFlBQVk7OztJQUVqQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7c0NBQ00sWUFBWTs7O0lBRTNDLE1BQU0sQ0FBQyxXQUFXLENBQUM7c0NBQ00sWUFBWTs7O0lBRXJDLE1BQU0sQ0FBQyxjQUFjLENBQUM7c0NBQ00sWUFBWTs7O0lBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUM7c0NBQ00sWUFBWTs7O0lBR2xDLE1BQU0sRUFBRTtzQ0FDb0IsWUFBWTs7O0lBRXhDLE1BQU0sRUFBRTtzQ0FDYyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQXBwbGljYXRpb25SZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9PcHRpb24uZGVjb3JhdG9yJztcbmltcG9ydCB7IE5lZWRGb2N1c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlL05lZWRGb2N1c1NlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L21vZGVsL1ZhbGlkYXRpb25SZXN1bHQnO1xuaW1wb3J0IHsgSURyb3BwYWJsZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9JRHJvcHBhYmxlJztcbmltcG9ydCB7IERyYWdEYXRhVHJhbnNmZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvbW9kZWwvRHJhZ0RhdGFUcmFuc2Zlcic7XG5pbXBvcnQgeyBGaWxlU2VsZWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvZGF0YXZpZXcvaW5wdXQvRmlsZVNlbGVjdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJSGFzRGF0YSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9JSGFzRGF0YSc7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBUWVBFX05BTUU6IHN0cmluZyA9IFwibWF0ZXJpYWwtZmlsZS1zZWxlY3RvclwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBtb2R1bGVJZDogbW9kdWxlLmlkLFxuICAgIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gICAgdGVtcGxhdGU6IGA8ZGl2IChjbGljayk9XCJmaWxlLmNsaWNrKClcIiBjbGFzcz1cIm1hdGVyaWFsLWZpbGUtc2VsZWN0b3JcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJfYmdDb2xvclwiIFtkcm9wQWNjZXB0XT1cIidGSUxFUydcIlxuICAgIFtwaHhEcm9wcGFibGVdPVwidGhpc1wiIFtzdHlsZS53aWR0aF09XCJnZXRXaWR0aCgpXCIgW3N0eWxlLmhlaWdodF09XCJnZXRIZWlnaHQoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJtYXRlcmlhbC1maWxlLXNlbGVjdG9yLWJveFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jbG91ZHMgXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jbG91ZHMtdGV4dFwiPlxuICAgICAgICAgICAgICAgIHt7Z2V0RmlsZXMoKS5sZW5ndGh9fVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNsb3Vkcy10ZXh0LXR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3tnZXRMYWJlbCgpfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzQWNjZXB0U3RhdHVzKCkgJiYgZ2V0QWxlcnRNZXNzYWdlKCkgPT09IG51bGxcIj5cbiAgICAgICAgICAgIHt7Z2V0RGVzY3JpcHRpb24oKX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNBY2NlcHRTdGF0dXMoKSAmJiBnZXRBbGVydE1lc3NhZ2UoKSAhPT0gbnVsbFwiPlxuICAgICAgICAgICAge3tnZXRBbGVydE1lc3NhZ2UoKX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzQWNjZXB0U3RhdHVzKCkgJiYgZ2V0QWxlcnRNZXNzYWdlKCkgIT09IG51bGxcIiBzdHlsZT1cImNvbG9yOiByZWQ7XCI+XG4gICAgICAgICAgICB7e2dldEFsZXJ0TWVzc2FnZSgpfX1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGlucHV0ICNmaWxlIHR5cGU9XCJmaWxlXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIFttdWx0aXBsZV09XCJnZXRBbGxvd011bHRpcGxlU2VsZWN0KClcIiAoY2hhbmdlKT1cImhhbmRsZUZpbGVzKGZpbGUpXCI+XG48L2Rpdj5cbmAsXG59KVxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsRmlsZVNlbGVjdG9yIGV4dGVuZHMgRmlsZVNlbGVjdG9yIGltcGxlbWVudHMgT25Jbml0LCBJRHJvcHBhYmxlIHtcblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVFlQRV9OQU1FOiBzdHJpbmcgPSBUWVBFX05BTUU7XG5cbiAgICAvLyBSZS1kZWNsYXJlIGZpZWxkIHRvIGRlY2xhcmUgbmcgQElucHV0LlxuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBvbkRpc2FibGVkOiBGdW5jdGlvbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGkxOG5LZXk6IHN0cmluZztcbiAgICBASW5wdXQoJ2kxOG5CeXBhc3MnKVxuICAgIEBPcHRpb24oJ2kxOG5CeXBhc3MnKVxuICAgIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgb3B0aW9uczogYW55O1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGRpc2FibGVkOiBib29sZWFuO1xuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBmaWVsZDogc3RyaW5nO1xuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0SW5wdXREYXRhVmlld1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCB0eXBlT2ZEYXRhOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgcmVhZE9ubHk6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBASTE4TigpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGhlbHA6IGFueTtcbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjRmlsZVNlbGVjdG9yXG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgbWF4RmlsZXNpemU6IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBhbGxvd011bHRpcGxlU2VsZWN0OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGZpbGVUeXBlczogc3RyaW5nW107XG4gICAgLy8gLS0tIHNlbGZcbiAgICBASTE4TigpXG4gICAgQE9wdGlvbigpXG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgbGFiZWw6IHN0cmluZztcbiAgICBASTE4TigpXG4gICAgQE9wdGlvbigpXG4gICAgQElucHV0KClcbiAgICBwcm90ZWN0ZWQgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCB3aWR0aDogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGhlaWdodDogc3RyaW5nO1xuXG4gICAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBPdXRwdXQuXG4gICAgLy8gLS0tIGZyb20gQWJzdHJhY3RIYXNEYXRhXG4gICAgQE91dHB1dCgncGh4TG9hZCcpXG4gICAgQE9wdGlvbignbG9hZCcpXG4gICAgcHJvdGVjdGVkIGxvYWRFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gICAgLy8gLS0tIGZyb20gQWJzdHJhY3REYXRhVmlld1xuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0SW5wdXREYXRhVmlld1xuICAgIEBPdXRwdXQoJ3BoeFN0YXJ0VmFsaWRhdGUnKVxuICAgIEBPcHRpb24oJ3N0YXJ0VmFsaWRhdGUnKVxuICAgIHByb3RlY3RlZCBzdGFydFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEVuZFZhbGlkYXRlJylcbiAgICBAT3B0aW9uKCdlbmRWYWxpZGF0ZScpXG4gICAgcHJvdGVjdGVkIGVuZFZhbGlkYXRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEJlZm9yZUZvY3VzJylcbiAgICBAT3B0aW9uKCdiZWZvcmVGb2N1cycpXG4gICAgcHJvdGVjdGVkIGJlZm9yZUZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEZvY3VzJylcbiAgICBAT3B0aW9uKCdmb2N1cycpXG4gICAgcHJvdGVjdGVkIGZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEJlZm9yZUxvc3RGb2N1cycpXG4gICAgQE9wdGlvbignYmVmb3JlTG9zdEZvY3VzJylcbiAgICBwcm90ZWN0ZWQgYmVmb3JlTG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeExvc3RGb2N1cycpXG4gICAgQE9wdGlvbignbG9zdEZvY3VzJylcbiAgICBwcm90ZWN0ZWQgbG9zdEZvY3VzRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEJlZm9yZUNoYW5nZScpXG4gICAgQE9wdGlvbignYmVmb3JlQ2hhbmdlJylcbiAgICBwcm90ZWN0ZWQgYmVmb3JlQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeENoYW5nZScpXG4gICAgQE9wdGlvbignY2hhbmdlJylcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIC8vIC0tLSBmcm9tIEFic3RyYWNGaWxlU2VsZWN0b3JcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVTZWxlY3QnKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBiZWZvcmVTZWxlY3RFdmVudDogRXZlbnRFbWl0dGVyPGFueT47XG4gICAgQE91dHB1dCgncGh4U2VsZWN0JylcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgc2VsZWN0RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIHByb3RlY3RlZCBvcmlnaW5hbFZhbHVlOiBhbnk7XG5cbiAgICBwdWJsaWMgX2JnQ29sb3I6IHN0cmluZztcbiAgICBwcml2YXRlIF9hcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWY7XG4gICAgcHJpdmF0ZSBfdGltZW91dDogYW55O1xuXG4gICAgY29uc3RydWN0b3IoZWxlbWVudFJlZjogRWxlbWVudFJlZiwgbmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSwgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIG5lZWRGb2N1c1NlcnZpY2UpO1xuXG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmID0gYXBwbGljYXRpb25SZWY7XG4gICAgICAgIHRoaXMuX2JnQ29sb3IgPSAnI2VkZWRlZCc7Ly9leHRyYWN0KEBDTFJfMSwgNyk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvblZhbGlkYXRpb25FbmQoaW5wdXRWYWx1ZTogYW55LCByZXN1bHRzOiBWYWxpZGF0aW9uUmVzdWx0W10pOiB2b2lkIHtcbiAgICAgICAgLy8hIGRvIHN0aGluZ1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkRhdGFDaGFuZ2UoZGF0YTogYW55LCBpbnB1dFZhbDogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBkb0ZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGRvTG9zdEZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbG93TXVsdGlwbGVTZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93TXVsdGlwbGVTZWxlY3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUZpbGVzKGZpbGU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5pc0FjY2VwdChmaWxlLmZpbGVzKSkgeyBcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZXMoZmlsZS5maWxlcywgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5GaWxlU2VsZWN0b3IoKSB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlJykuY2xpY2soKTtcbiAgICB9IFxuXG4gICAgcHVibGljIGlzU2VsZkRhdGFEaXJ0eSgpOiBib29sZWFuIHsgXG4gICAgICAgIGxldCBkMSA9IEZpbGVTZWxlY3Rvci5yZXNvbHZlTWFwcGVkRGF0YSh0aGlzLmZpZWxkLCB0aGlzLm9yaWdpbmFsVmFsdWUpO1xuICAgICAgICBsZXQgZDIgPSB0aGlzLmdldElucHV0VmFsdWUoKTtcbiAgICAgICAgaWYgKGQxICE9PSBkMikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlOyBcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZlNhdmVEYXRhKGRhdGE6IGFueSk6IHZvaWQge1xuICAgICAgICBpZihkYXRhICE9PSB1bmRlZmluZWQgJiYgZGF0YSAhPT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxWYWx1ZSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZlJlc2V0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKHRoaXMub3JpZ2luYWxWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFdpZHRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZHRoO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRXaWR0aCh3aWR0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGVpZ2h0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0SGVpZ2h0KGhlaWdodDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsID0gbGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY2NlcHREcmFnRGF0YShldmVudDogYW55LCBmb3JtYXQ6IHN0cmluZywgZGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQWNjZXB0KGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERyYWdPdmVyRGF0YVRyYW5zZmVyKGV2ZW50OiBhbnkpOiBEcmFnRGF0YVRyYW5zZmVyIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRyYWdFbnRlcihldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JnQ29sb3IgPSAnI2Q2ZDZkNic7Ly9leHRyYWN0KEBDTFJfMSwgNSk7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EcmFnT3ZlcihldmVudDogYW55KTogdm9pZCB7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRHJhZ0xlYXZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYmdDb2xvciA9ICcjZWRlZGVkJzsvL2V4dHJhY3QoQENMUl8xLCA3KTtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRyb3AoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRyb3BBY2NlcHRlZChldmVudDogYW55LCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYmdDb2xvciA9ICcjZWRlZGVkJzsvL2V4dHJhY3QoQENMUl8xLCA3KTtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHZhciBmaWxlczogRmlsZVtdID0gZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzO1xuXG4gICAgICAgIHRoaXMuYWRkRmlsZXMoZmlsZXMsIGV2ZW50KTtcbiBcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgICAgICB9LCA1MDAwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ecm9wUmVqZWN0ZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi50aWNrKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgICAgICB9LCA1MDAwKTtcbiAgICB9XG59XG4iXX0=