UNPKG

dbweb-common

Version:

用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上

142 lines 19.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { moveItemInArray } from '@angular/cdk/drag-drop'; import { Component, HostBinding } from '@angular/core'; import { ThemeService } from '../../../services/theme.service'; import { ElementService } from '../../service/element.service'; import ace from 'ace-builds'; export class ParamsRecordviewFetchSQLComponent { /** * @param {?} elementSvr * @param {?} theme */ constructor(elementSvr, theme) { this.elementSvr = elementSvr; this.theme = theme; this.hostClass = true; this.svr = (/** @type {?} */ (this.elementSvr.data.recordview)); this.options = { maxLines: 12, printMargin: false }; this.dataColumns = true; this.startCheck = false; this.messageShow = false; } /** * @return {?} */ ngOnInit() { ace.config.set('basePath', '/front/assets/ace-builds/src-min-noconflict'); } /** * @return {?} */ genSQL() { this.svr.Params.Sql = `<<if eq "oci8" .Driver>> <<if ge .Limit 0>> SELECT * FROM( <<end>> SELECT <<if .Columns>><<.Columns>><<else>>*<<end>> FROM ${this.svr.Params.TableName} <<if .Where>>WHERE <<.Where>><<end>> <<if .OrderBy>>ORDER BY <<.OrderBy>><<end>> <<if ge .Limit 0>> )WHERE ROWNUM<=<<.Limit>> <<end>> <<else>> SELECT <<if .Columns>><<.Columns>><<else>>*<<end>> FROM ${this.svr.Params.TableName} <<if .Where>>WHERE <<.Where>><<end>> <<if .OrderBy>>ORDER BY <<.OrderBy>><<end>> <<if ge .Limit 0>>LIMIT <<.Limit>><<end>> <<end>>`; } /** * @return {?} */ rebuildColumns() { this.elementSvr.back .checkSQL({ DB: this.svr.Params.DB, Table: this.svr.Params.TableName, ManualPage: this.svr.Params.ManualPage, SQL: this.svr.Params.Sql }) .subscribe((/** * @param {?} v * @return {?} */ v => { this.svr.SQLCheckError = v.Error; if (!this.svr.SQLCheckError) { this.svr.Params.AllColumns = v.Columns; } })); } /** * @param {?} event * @return {?} */ drop(event) { moveItemInArray(this.svr.Params.AllColumns, event.previousIndex, event.currentIndex); /** @type {?} */ const FieldChange = []; this.svr.Params.AllColumns.forEach((/** * @param {?} v * @return {?} */ v => { if (this.svr.Params.UniqueField.includes(v.Name)) { FieldChange.push(v.Name); } })); this.svr.Params.UniqueField = FieldChange; } /** * @return {?} */ checkSQL() { this.startCheck = true; this.svr.checkSQL().subscribe((/** * @return {?} */ () => { this.startCheck = false; this.messageShow = true; })); } } ParamsRecordviewFetchSQLComponent.decorators = [ { type: Component, args: [{ selector: 'common-params-recordview-fetch-sql', template: "<div class=\"\u53D6\u6570SQl\">\r\n\t<div class=\"\u4E00\u7EA7\u6807\u9898 \u5B57\u4F53\u989C\u8272\">\u53D6\u6570SQL</div>\r\n\t<div class=\"\u6570\u636E\u5E93\">\r\n\t\t<div class=\"\u4E8C\u7EA7\u6807\u9898\">\u6570\u636E\u5E93</div>\r\n\t\t<mat-form-field appearance=\"outline\">\r\n\t\t\t<mat-select [(ngModel)]=\"svr.Params.DB\"\r\n\t\t\t\t(valueChange)=\"svr.refreshTables()\">\r\n\t\t\t\t<mat-option [value]=\"\"> (\u5F53\u524D\u6570\u636E\u5E93) </mat-option>\r\n\t\t\t\t<mat-option *ngFor=\"let db of svr.DBList\" [value]=\"db\">\r\n\t\t\t\t\t{{ db }}\r\n\t\t\t\t</mat-option>\r\n\t\t\t</mat-select>\r\n\t\t</mat-form-field>\r\n\t</div>\r\n\t<div class=\"\u8868\">\r\n\t\t<div class=\"\u4E8C\u7EA7\u6807\u9898\">\u8868</div>\r\n\t\t<mat-form-field appearance=\"outline\">\r\n\t\t\t<mat-select [(ngModel)]=\"svr.Params.TableName\"\r\n\t\t\t\t(selectionChange)=\"checkSQL()\">\r\n\t\t\t\t<mat-option [value]=\"\">(\u7A7A) </mat-option>\r\n\t\t\t\t<mat-option *ngFor=\"let tab of svr.Tables\"\r\n\t\t\t\t\t[value]=\"tab|uppercase\">\r\n\t\t\t\t\t{{ tab|uppercase }}\r\n\t\t\t\t</mat-option>\r\n\t\t\t</mat-select>\r\n\t\t</mat-form-field>\r\n\t</div>\r\n\t<div class=\"\u4E8C\u7EA7\u6807\u9898\">\u4E3B\u952E</div>\r\n\t<mat-form-field appearance=\"outline\">\r\n\t\t<mat-select [(ngModel)]=\"svr.Params.UniqueField\" multiple>\r\n\t\t\t<div cdkDropList (cdkDropListDropped)=\"drop($event)\">\r\n\t\t\t\t<span *ngFor=\"let col of svr.Params.AllColumns\" cdkDrag>\r\n\t\t\t\t\t<mat-option [value]=\"col.Name\">\r\n\t\t\t\t\t\t{{ col.Name }}\r\n\t\t\t\t\t</mat-option>\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t</mat-select>\r\n\t</mat-form-field>\r\n\t<div class=\"SQL\u8BBE\u7F6E\">\r\n\t\t<div class=\"SQL\u8BBE\u7F6E-\u6807\u9898 \u5B57\u4F53\u989C\u8272\">\r\n\t\t\t<span>SQL</span>\r\n\t\t\t<button class=\"\u6D6E\u52A8 \u751F\u6210SQL\" mat-raised-button\r\n\t\t\t\t(click)=\"genSQL()\">\u751F\u6210SQL</button>\r\n\t\t\t<mat-checkbox class=\"\u6D6E\u52A8\" [(ngModel)]=\"svr.Params.ManualPage\">\u624B\u5DE5\u5206\u9875\r\n\t\t\t</mat-checkbox>\r\n\t\t</div>\r\n\t\t<div class=\" SQL\u8BBE\u7F6E-\u5185\u5BB9 SQL\u8BBE\u7F6E-\u8FB9\u6846\">\r\n\t\t\t<div ace-editor [(text)]=\"svr.Params.Sql\" mode=\"sql\"\r\n\t\t\t\t[theme]=\"(theme.theme|async).model==='dark'?'tomorrow_night': 'eclipse'\"\r\n\t\t\t\t[options]=\"options\" [autoUpdateContent]=\"true\"\r\n\t\t\t\t[durationBeforeCallback]=\"1000\"\r\n\t\t\t\tstyle=\"min-height: 192px; width:100%; overflow: auto;\"></div>\r\n\t\t</div>\r\n\t\t<div class=\"check-toolbar\">\r\n\t\t\t<button class=\"\u9A8C\u8BC1SQL\" mat-stroked-button [disabled]=\"startCheck\"\r\n\t\t\t\t(click)=\"checkSQL()\">\r\n\t\t\t\t\u9A8C\u8BC1SQL\r\n\t\t\t</button>\r\n\t\t\t<div *ngIf=\"dataColumns\" class=\"\u6570\u636E\u5217\">\r\n\t\t\t\t<span class=\"\u663E\u793A\u6570\u636E\u5217\u6309\u94AE\" (click)=\"dataColumns = !dataColumns\">\r\n\t\t\t\t\t\u7ED3\u679C\u53CA\u6570\u636E\u5217\r\n\t\t\t\t\t<mat-icon svgIcon=\"expand_more\"></mat-icon>\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t\t<div *ngIf=\"!dataColumns\" class=\"\u6570\u636E\u5217\">\r\n\t\t\t\t<button class=\"\u91CD\u7F6E\" mat-button (click)=\"rebuildColumns()\">\r\n\t\t\t\t\t\u590D\u4F4D\r\n\t\t\t\t</button>\r\n\t\t\t\t<span class=\"\u663E\u793A\u6570\u636E\u5217\u6309\u94AE\" (click)=\"dataColumns = !dataColumns\">\r\n\t\t\t\t\t\u6536\u8D77\r\n\t\t\t\t\t<mat-icon svgIcon=\"expand_less\"></mat-icon>\r\n\t\t\t\t</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<div *ngIf=\"!dataColumns\" class=\"\u4E3B\u952E\">\r\n\t\t\t<div class=\"\u4E3B\u952E\u7C7B\u578B\" *ngFor=\"let col of svr.Params.AllColumns\">\r\n\t\t\t\t<div class=\"\u4E8C\u7EA7\u6807\u9898 \u4E3B\u952E\u6807\u9898\">{{ col.Name }}</div>\r\n\t\t\t\t<mat-form-field class=\"\u9009\u62E9\u7C7B\u578B \u5B57\u4F53\u989C\u8272\" appearance=\"outline\">\r\n\t\t\t\t\t<mat-select [(ngModel)]=\"col.Type\">\r\n\t\t\t\t\t\t<mat-option value=\"STR\">\u5B57\u7B26\u4E32</mat-option>\r\n\t\t\t\t\t\t<mat-option value=\"FLOAT\">\u6570\u503C</mat-option>\r\n\t\t\t\t\t\t<mat-option value=\"INT\">\u6574\u578B</mat-option>\r\n\t\t\t\t\t\t<mat-option value=\"DATE\">\u65E5\u671F</mat-option>\r\n\t\t\t\t\t\t<mat-option value=\"BYTEA\">\u4E8C\u8FDB\u5236</mat-option>\r\n\t\t\t\t\t</mat-select>\r\n\t\t\t\t</mat-form-field>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t\t<ng-template #noError>\r\n\t\t\t<div *ngIf=\"messageShow\" class=\"\u6821\u9A8C\u6210\u529F\">\r\n\t\t\t\t<span>\r\n\t\t\t\t\t<mat-icon svgIcon=\"check_circle\"></mat-icon>SQL\u6821\u9A8C\u6210\u529F\r\n\t\t\t\t</span>\r\n\t\t\t\t<mat-icon class=\"\u5220\u9664\" svgIcon=\"cancel\"\r\n\t\t\t\t\t(click)=\"messageShow=false\"></mat-icon>\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t\t<div *ngIf=\"svr.SQLCheckError && messageShow;else noError\"\r\n\t\t\tclass=\"SQL\u8BBE\u7F6E-\u68C0\u9A8C\u5185\u5BB9 SQL\u8BBE\u7F6E-\u80CC\u666F\">\r\n\t\t\t<div class=\"\u6821\u9A8C\u5931\u8D25\">\r\n\t\t\t\t<mat-icon svgIcon=\"warning\"></mat-icon>\u4EE3\u7801\u62A5\u9519\uFF1A\r\n\t\t\t\t<mat-icon class=\"\u5220\u9664\" svgIcon=\"cancel\"\r\n\t\t\t\t\t(click)=\"messageShow=false\"></mat-icon>\r\n\t\t\t</div>\r\n\t\t\t<pre>\r\n\t\t\t{{ svr.SQLCheckError }}\r\n\t\t\t</pre>\r\n\t\t</div>\r\n\t</div>\r\n</div>", styles: ["@charset \"UTF-8\";.\u53D6\u6570SQl{max-width:808px;height:100%;padding:24px 24px 24px 48px;overflow-y:auto;box-sizing:border-box}.\u53D6\u6570SQl .\u6570\u636E\u5E93{display:inline-block;margin-right:48px}.\u53D6\u6570SQl .\u8868{display:inline-block}.\u53D6\u6570SQl .\u91CD\u7F6E{min-width:56px;height:24px;line-height:24px;color:#fff;font-size:12px}.\u53D6\u6570SQl ::ng-deep .mat-form-field-wrapper{margin:0;padding-bottom:10px}.\u53D6\u6570SQl ::ng-deep .mat-form-field-infix{border:0;padding:8px 0}.\u53D6\u6570SQl ::ng-deep .mat-select-arrow-wrapper{display:block}.\u53D6\u6570SQl .mat-form-field{width:340px;font-size:14px}.\u53D6\u6570SQl .SQL\u8BBE\u7F6E-\u6807\u9898{height:48px;line-height:48px;font-size:14px}.\u53D6\u6570SQl .\u751F\u6210SQL{color:#fff;margin:6px 0 6px 16px}.\u53D6\u6570SQl .\u9A8C\u8BC1SQL{margin:16px 0}.\u53D6\u6570SQl .SQL\u8BBE\u7F6E-\u5185\u5BB9{height:192px;border-radius:4px;box-sizing:border-box;vertical-align:top;overflow:hidden}.\u53D6\u6570SQl .SQL\u8BBE\u7F6E-\u68C0\u9A8C\u5185\u5BB9{border-radius:4px;padding:8px;box-sizing:border-box;overflow:auto;font-size:12px}.\u53D6\u6570SQl .\u6821\u9A8C\u6210\u529F{height:36px;line-height:20px;border-radius:4px;padding:8px;box-sizing:border-box;font-size:14px;font-weight:700;background-color:rgba(126,211,33,.1);color:#7ed321}.\u53D6\u6570SQl .\u6821\u9A8C\u6210\u529F .mat-icon{width:16px;height:16px;line-height:16px;vertical-align:middle;margin:2px 8px 2px 0}.\u53D6\u6570SQl .\u6821\u9A8C\u6210\u529F .\u5220\u9664{float:right;margin:2px 8px 2px 0}.\u53D6\u6570SQl .\u6821\u9A8C\u5931\u8D25{height:36px;line-height:20px;padding:0 0 8px 16px;box-sizing:border-box;font-size:14px;font-weight:700}.\u53D6\u6570SQl .\u6821\u9A8C\u5931\u8D25 .mat-icon{width:16px;height:16px;line-height:16px;vertical-align:middle;margin:2px 8px 2px 0}.\u53D6\u6570SQl .\u6821\u9A8C\u5931\u8D25 .\u5220\u9664{float:right;margin:2px 0}.\u53D6\u6570SQl .\u6570\u636E\u5217{height:32px;line-height:32px;font-size:14px;margin:18px 0}.\u53D6\u6570SQl .\u6570\u636E\u5217 .mat-icon{width:24px;height:24px;line-height:24px;vertical-align:middle}.\u53D6\u6570SQl .\u6570\u636E\u5217 .\u663E\u793A\u6570\u636E\u5217\u6309\u94AE{cursor:pointer}.\u53D6\u6570SQl .\u6D6E\u52A8{float:right;font-size:14px}.\u53D6\u6570SQl .\u4E3B\u952E{width:100%;display:flex;flex-wrap:wrap;justify-content:flex-start}.\u53D6\u6570SQl .\u4E3B\u952E .\u4E3B\u952E\u7C7B\u578B{margin-right:20px;margin-bottom:14px;position:relative}.\u53D6\u6570SQl .\u4E3B\u952E .\u4E3B\u952E\u7C7B\u578B .\u9009\u62E9{position:absolute;left:0;bottom:15px}.\u53D6\u6570SQl .\u4E3B\u952E .\u9009\u62E9\u7C7B\u578B{width:140px;font-size:14px}.\u53D6\u6570SQl .\u4E3B\u952E .\u4E3B\u952E\u6807\u9898{font-weight:700}.check-toolbar{display:flex;justify-content:space-between}.\u4E00\u7EA7\u6807\u9898{font-size:16px;font-weight:700;margin-bottom:16px}.\u4E8C\u7EA7\u6807\u9898{font-size:12px;margin-bottom:8px}"] }] } ]; /** @nocollapse */ ParamsRecordviewFetchSQLComponent.ctorParameters = () => [ { type: ElementService }, { type: ThemeService } ]; ParamsRecordviewFetchSQLComponent.propDecorators = { hostClass: [{ type: HostBinding, args: ['class.recordview-fetchSQL',] }] }; if (false) { /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.hostClass; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.svr; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.options; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.dataColumns; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.startCheck; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.messageShow; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.elementSvr; /** @type {?} */ ParamsRecordviewFetchSQLComponent.prototype.theme; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1zLXJlY29yZHZpZXctZmV0Y2gtc3FsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Rid2ViLWNvbW1vbi8iLCJzb3VyY2VzIjpbImxpYi9lbGVtZW50L3NldC1wcm9wZXJ0eS1yZWNvcmR2aWV3L3BhcmFtcy1yZWNvcmR2aWV3LWZldGNoLXNxbC9wYXJhbXMtcmVjb3Jkdmlldy1mZXRjaC1zcWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBeUIsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEYsT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDO0FBTTdCLE1BQU0sT0FBTyxpQ0FBaUM7Ozs7O0lBRzdDLFlBQW1CLFVBQTBCLEVBQVMsS0FBbUI7UUFBdEQsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBRi9CLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDcEQsUUFBRyxHQUFHLG1CQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBeUIsQ0FBQztRQUV0RSxZQUFPLEdBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNwRCxnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBSndELENBQUM7Ozs7SUFLN0UsUUFBUTtRQUNQLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSw2Q0FBNkMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7Ozs7SUFFRCxNQUFNO1FBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHOzs7OztVQUtkLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVM7Ozs7Ozs7O1VBUXpCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVM7Ozs7U0FJMUIsQ0FBQztJQUNULENBQUM7Ozs7SUFDRCxjQUFjO1FBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJO2FBQ2xCLFFBQVEsQ0FBQztZQUNULEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQ2hDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQ3RDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHO1NBQ3hCLENBQUM7YUFDRCxTQUFTOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDdkM7UUFDRixDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7O0lBQ0QsSUFBSSxDQUFDLEtBQTRCO1FBQ2hDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7O2NBQy9FLFdBQVcsR0FBRyxFQUFFO1FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdEMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakQsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDekI7UUFDRixDQUFDLEVBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDM0MsQ0FBQzs7OztJQUNELFFBQVE7UUFDUCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVM7OztRQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDLEVBQUMsQ0FBQztJQUNKLENBQUM7OztZQXBFRCxTQUFTLFNBQUM7Z0JBQ1YsUUFBUSxFQUFFLG9DQUFvQztnQkFDOUMsb25LQUEyRDs7YUFFM0Q7Ozs7WUFOK0IsY0FBYztZQURyQyxZQUFZOzs7d0JBU25CLFdBQVcsU0FBQywyQkFBMkI7Ozs7SUFBeEMsc0RBQTJEOztJQUMzRCxnREFBc0U7O0lBRXRFLG9EQUFvRDs7SUFDcEQsd0RBQW1COztJQUNuQix1REFBbUI7O0lBQ25CLHdEQUFvQjs7SUFKUix1REFBaUM7O0lBQUUsa0RBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdGhlbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IEVsZW1lbnREYXRhUmVjb3JkVmlldywgRWxlbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2VsZW1lbnQuc2VydmljZSc7XHJcbmltcG9ydCBhY2UgZnJvbSAnYWNlLWJ1aWxkcyc7XHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnY29tbW9uLXBhcmFtcy1yZWNvcmR2aWV3LWZldGNoLXNxbCcsXHJcblx0dGVtcGxhdGVVcmw6ICcuL3BhcmFtcy1yZWNvcmR2aWV3LWZldGNoLXNxbC5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vcGFyYW1zLXJlY29yZHZpZXctZmV0Y2gtc3FsLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFBhcmFtc1JlY29yZHZpZXdGZXRjaFNRTENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0QEhvc3RCaW5kaW5nKCdjbGFzcy5yZWNvcmR2aWV3LWZldGNoU1FMJykgaG9zdENsYXNzID0gdHJ1ZTtcclxuXHRwdWJsaWMgc3ZyID0gdGhpcy5lbGVtZW50U3ZyLmRhdGEucmVjb3JkdmlldyBhcyBFbGVtZW50RGF0YVJlY29yZFZpZXc7XHJcblx0Y29uc3RydWN0b3IocHVibGljIGVsZW1lbnRTdnI6IEVsZW1lbnRTZXJ2aWNlLCBwdWJsaWMgdGhlbWU6IFRoZW1lU2VydmljZSkge31cclxuXHRvcHRpb25zOiBhbnkgPSB7IG1heExpbmVzOiAxMiwgcHJpbnRNYXJnaW46IGZhbHNlIH07XHJcblx0ZGF0YUNvbHVtbnMgPSB0cnVlO1xyXG5cdHN0YXJ0Q2hlY2sgPSBmYWxzZTtcclxuXHRtZXNzYWdlU2hvdyA9IGZhbHNlO1xyXG5cdG5nT25Jbml0KCkge1xyXG5cdFx0YWNlLmNvbmZpZy5zZXQoJ2Jhc2VQYXRoJywgJy9mcm9udC9hc3NldHMvYWNlLWJ1aWxkcy9zcmMtbWluLW5vY29uZmxpY3QnKTtcclxuXHR9XHJcblxyXG5cdGdlblNRTCgpIHtcclxuXHRcdHRoaXMuc3ZyLlBhcmFtcy5TcWwgPSBgPDxpZiBlcSBcIm9jaThcIiAuRHJpdmVyPj5cclxuXHRcdDw8aWYgZ2UgLkxpbWl0IDA+PlxyXG5cdFx0U0VMRUNUICogRlJPTShcclxuXHRcdDw8ZW5kPj5cclxuXHRcdFx0U0VMRUNUIDw8aWYgLkNvbHVtbnM+Pjw8LkNvbHVtbnM+Pjw8ZWxzZT4+Kjw8ZW5kPj5cclxuXHRcdFx0RlJPTSAke3RoaXMuc3ZyLlBhcmFtcy5UYWJsZU5hbWV9XHJcblx0XHRcdDw8aWYgLldoZXJlPj5XSEVSRSA8PC5XaGVyZT4+PDxlbmQ+PlxyXG5cdFx0XHQ8PGlmIC5PcmRlckJ5Pj5PUkRFUiBCWSA8PC5PcmRlckJ5Pj48PGVuZD4+XHJcblx0XHQ8PGlmIGdlIC5MaW1pdCAwPj5cclxuXHRcdClXSEVSRSBST1dOVU08PTw8LkxpbWl0Pj5cclxuXHRcdDw8ZW5kPj5cclxuXHQ8PGVsc2U+PlxyXG5cdFx0U0VMRUNUIDw8aWYgLkNvbHVtbnM+Pjw8LkNvbHVtbnM+Pjw8ZWxzZT4+Kjw8ZW5kPj5cclxuXHRcdEZST00gICR7dGhpcy5zdnIuUGFyYW1zLlRhYmxlTmFtZX1cclxuXHRcdDw8aWYgLldoZXJlPj5XSEVSRSA8PC5XaGVyZT4+PDxlbmQ+PlxyXG5cdFx0PDxpZiAuT3JkZXJCeT4+T1JERVIgQlkgPDwuT3JkZXJCeT4+PDxlbmQ+PlxyXG5cdFx0PDxpZiBnZSAuTGltaXQgMD4+TElNSVQgPDwuTGltaXQ+Pjw8ZW5kPj5cclxuXHQ8PGVuZD4+YDtcclxuXHR9XHJcblx0cmVidWlsZENvbHVtbnMoKSB7XHJcblx0XHR0aGlzLmVsZW1lbnRTdnIuYmFja1xyXG5cdFx0XHQuY2hlY2tTUUwoe1xyXG5cdFx0XHRcdERCOiB0aGlzLnN2ci5QYXJhbXMuREIsXHJcblx0XHRcdFx0VGFibGU6IHRoaXMuc3ZyLlBhcmFtcy5UYWJsZU5hbWUsXHJcblx0XHRcdFx0TWFudWFsUGFnZTogdGhpcy5zdnIuUGFyYW1zLk1hbnVhbFBhZ2UsXHJcblx0XHRcdFx0U1FMOiB0aGlzLnN2ci5QYXJhbXMuU3FsXHJcblx0XHRcdH0pXHJcblx0XHRcdC5zdWJzY3JpYmUodiA9PiB7XHJcblx0XHRcdFx0dGhpcy5zdnIuU1FMQ2hlY2tFcnJvciA9IHYuRXJyb3I7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnN2ci5TUUxDaGVja0Vycm9yKSB7XHJcblx0XHRcdFx0XHR0aGlzLnN2ci5QYXJhbXMuQWxsQ29sdW1ucyA9IHYuQ29sdW1ucztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHRkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxzdHJpbmdbXT4pIHtcclxuXHRcdG1vdmVJdGVtSW5BcnJheSh0aGlzLnN2ci5QYXJhbXMuQWxsQ29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuXHRcdGNvbnN0IEZpZWxkQ2hhbmdlID0gW107XHJcblx0XHR0aGlzLnN2ci5QYXJhbXMuQWxsQ29sdW1ucy5mb3JFYWNoKHYgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5zdnIuUGFyYW1zLlVuaXF1ZUZpZWxkLmluY2x1ZGVzKHYuTmFtZSkpIHtcclxuXHRcdFx0XHRGaWVsZENoYW5nZS5wdXNoKHYuTmFtZSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5zdnIuUGFyYW1zLlVuaXF1ZUZpZWxkID0gRmllbGRDaGFuZ2U7XHJcblx0fVxyXG5cdGNoZWNrU1FMKCkge1xyXG5cdFx0dGhpcy5zdGFydENoZWNrID0gdHJ1ZTtcclxuXHRcdHRoaXMuc3ZyLmNoZWNrU1FMKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0dGhpcy5zdGFydENoZWNrID0gZmFsc2U7XHJcblx0XHRcdHRoaXMubWVzc2FnZVNob3cgPSB0cnVlO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiJdfQ==