info-library 2.15.1-beta → 3.0.0-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/controls/alert/alert.component.d.ts +7 -7
- package/controls/autocomplete/autocomplete.component.d.ts +52 -51
- package/controls/big-checkbox/big-checkbox.component.d.ts +41 -41
- package/controls/card/card.component.d.ts +16 -16
- package/controls/card-menu/card-menu.component.d.ts +23 -23
- package/controls/checkbox/checkbox.component.d.ts +27 -27
- package/controls/chips/chips.component.d.ts +23 -23
- package/controls/date/date.component.d.ts +38 -37
- package/controls/date-month/date-month.component.d.ts +40 -39
- package/controls/editor/editor.component.d.ts +40 -40
- package/controls/grid/grid.component.d.ts +172 -172
- package/controls/input/input.component.d.ts +47 -37
- package/controls/input-list/input-list.component.d.ts +29 -29
- package/controls/list-checkbox/list-checkbox.component.d.ts +26 -26
- package/controls/message/message.component.d.ts +10 -10
- package/controls/multi-select/multi-select.component.d.ts +39 -37
- package/controls/paginator/paginator.component.d.ts +25 -25
- package/controls/select/select.component.d.ts +42 -41
- package/controls/timeline/timeline.component.d.ts +17 -17
- package/directives/mask.directive.d.ts +24 -24
- package/directives/unmask.directive.d.ts +12 -11
- package/enum/dialog-buttons.enum.d.ts +7 -7
- package/enum/index.d.ts +3 -3
- package/enum/modal-action.enum.d.ts +10 -10
- package/enum/page-action.enum.d.ts +8 -8
- package/esm2022/controls/alert/alert.component.mjs +72 -0
- package/esm2022/controls/autocomplete/autocomplete.component.mjs +265 -0
- package/esm2022/controls/big-checkbox/big-checkbox.component.mjs +300 -0
- package/esm2022/controls/card/card.component.mjs +83 -0
- package/esm2022/controls/card-menu/card-menu.component.mjs +143 -0
- package/esm2022/controls/checkbox/checkbox.component.mjs +93 -0
- package/esm2022/controls/chips/chips.component.mjs +114 -0
- package/esm2022/controls/date/date.component.mjs +173 -0
- package/esm2022/controls/date-month/date-month.component.mjs +181 -0
- package/esm2022/controls/editor/editor.component.mjs +139 -0
- package/esm2022/controls/grid/grid.component.mjs +1818 -0
- package/esm2022/controls/input/input.component.mjs +389 -0
- package/esm2022/controls/input-list/input-list.component.mjs +259 -0
- package/{esm2020 → esm2022}/controls/list-checkbox/list-checkbox.component.mjs +242 -238
- package/esm2022/controls/message/message.component.mjs +48 -0
- package/esm2022/controls/multi-select/multi-select.component.mjs +174 -0
- package/esm2022/controls/paginator/paginator.component.mjs +177 -0
- package/esm2022/controls/select/select.component.mjs +189 -0
- package/esm2022/controls/timeline/timeline.component.mjs +116 -0
- package/esm2022/directives/mask.directive.mjs +134 -0
- package/esm2022/directives/unmask.directive.mjs +35 -0
- package/{esm2020 → esm2022}/enum/dialog-buttons.enum.mjs +8 -8
- package/{esm2020 → esm2022}/enum/index.mjs +3 -3
- package/{esm2020 → esm2022}/enum/modal-action.enum.mjs +11 -11
- package/{esm2020 → esm2022}/enum/page-action.enum.mjs +9 -9
- package/{esm2020 → esm2022}/global-config.mjs +3 -3
- package/{esm2020 → esm2022}/info-library.mjs +4 -4
- package/esm2022/info-library.module.mjs +283 -0
- package/esm2022/layouts/dialog/dialog.component.mjs +192 -0
- package/esm2022/layouts/filter/filter.component.mjs +179 -0
- package/esm2022/layouts/loading/loading.component.mjs +40 -0
- package/esm2022/layouts/main/main.component.mjs +305 -0
- package/esm2022/layouts/modal/modal.component.mjs +273 -0
- package/esm2022/layouts/pagebar/pagebar.component.mjs +432 -0
- package/esm2022/layouts/sidebar/sidebar.component.mjs +447 -0
- package/esm2022/layouts/topbar/topbar.component.mjs +1032 -0
- package/esm2022/layouts/topmenu/topmenu.component.mjs +173 -0
- package/esm2022/model/app-config.model.mjs +14 -0
- package/esm2022/model/data-access.model.mjs +37 -0
- package/esm2022/model/dialog-result.model.mjs +9 -0
- package/esm2022/model/dialog.model.mjs +15 -0
- package/esm2022/model/form-prop.model.mjs +37 -0
- package/esm2022/model/grid-button.model.mjs +26 -0
- package/{esm2020 → esm2022}/model/index.mjs +14 -14
- package/esm2022/model/last-search.model.mjs +7 -0
- package/esm2022/model/login.model.mjs +11 -0
- package/esm2022/model/method-grid-button.model.mjs +11 -0
- package/esm2022/model/notification.model.mjs +13 -0
- package/{esm2020 → esm2022}/model/pagebar-buttons.model.mjs +15 -15
- package/esm2022/model/permission.model.mjs +6 -0
- package/esm2022/model/platform.model.mjs +20 -0
- package/esm2022/model/session.model.mjs +27 -0
- package/{esm2020 → esm2022}/pipe/index.mjs +2 -2
- package/esm2022/pipe/mask.pipe.mjs +38 -0
- package/esm2022/pipe/translate.pipe.mjs +27 -0
- package/{esm2020 → esm2022}/public_api.mjs +37 -36
- package/esm2022/service/authentication.service.mjs +411 -0
- package/esm2022/service/configuration.service.mjs +90 -0
- package/esm2022/service/data.service.mjs +129 -0
- package/{esm2020 → esm2022}/service/index.mjs +5 -5
- package/esm2022/service/theme.service.mjs +89 -0
- package/esm2022/service/translate.service.mjs +57 -0
- package/esm2022/utils/utilities.mjs +189 -0
- package/fesm2022/info-library.mjs +9364 -0
- package/fesm2022/info-library.mjs.map +1 -0
- package/global-config.d.ts +3 -3
- package/index.d.ts +5 -5
- package/info-library-3.0.0-beta.tgz +0 -0
- package/info-library.module.d.ts +61 -60
- package/layouts/dialog/dialog.component.d.ts +29 -29
- package/layouts/filter/filter.component.d.ts +24 -0
- package/layouts/loading/loading.component.d.ts +8 -8
- package/layouts/main/main.component.d.ts +60 -56
- package/layouts/modal/modal.component.d.ts +40 -39
- package/layouts/pagebar/pagebar.component.d.ts +45 -45
- package/layouts/sidebar/sidebar.component.d.ts +40 -40
- package/layouts/topbar/topbar.component.d.ts +69 -66
- package/layouts/topmenu/topmenu.component.d.ts +34 -34
- package/model/app-config.model.d.ts +13 -11
- package/model/data-access.model.d.ts +12 -12
- package/model/dialog-result.model.d.ts +6 -6
- package/model/dialog.model.d.ts +14 -14
- package/model/form-prop.model.d.ts +12 -12
- package/model/grid-button.model.d.ts +18 -18
- package/model/index.d.ts +14 -14
- package/model/last-search.model.d.ts +6 -6
- package/model/login.model.d.ts +6 -6
- package/model/method-grid-button.model.d.ts +6 -6
- package/model/notification.model.d.ts +12 -12
- package/model/pagebar-buttons.model.d.ts +10 -10
- package/model/permission.model.d.ts +5 -5
- package/model/platform.model.d.ts +16 -16
- package/model/session.model.d.ts +27 -22
- package/package.json +5 -11
- package/pipe/index.d.ts +2 -2
- package/pipe/mask.pipe.d.ts +8 -8
- package/pipe/translate.pipe.d.ts +10 -10
- package/public_api.d.ts +34 -33
- package/service/authentication.service.d.ts +63 -61
- package/service/configuration.service.d.ts +17 -14
- package/service/data.service.d.ts +41 -39
- package/service/index.d.ts +5 -5
- package/service/theme.service.d.ts +16 -16
- package/service/translate.service.d.ts +16 -16
- package/utils/utilities.d.ts +38 -27
- package/esm2020/controls/alert/alert.component.mjs +0 -74
- package/esm2020/controls/autocomplete/autocomplete.component.mjs +0 -258
- package/esm2020/controls/big-checkbox/big-checkbox.component.mjs +0 -298
- package/esm2020/controls/card/card.component.mjs +0 -77
- package/esm2020/controls/card-menu/card-menu.component.mjs +0 -145
- package/esm2020/controls/checkbox/checkbox.component.mjs +0 -93
- package/esm2020/controls/chips/chips.component.mjs +0 -113
- package/esm2020/controls/date/date.component.mjs +0 -141
- package/esm2020/controls/date-month/date-month.component.mjs +0 -148
- package/esm2020/controls/editor/editor.component.mjs +0 -135
- package/esm2020/controls/grid/grid.component.mjs +0 -1800
- package/esm2020/controls/input/input.component.mjs +0 -314
- package/esm2020/controls/input-list/input-list.component.mjs +0 -258
- package/esm2020/controls/message/message.component.mjs +0 -50
- package/esm2020/controls/multi-select/multi-select.component.mjs +0 -161
- package/esm2020/controls/paginator/paginator.component.mjs +0 -178
- package/esm2020/controls/select/select.component.mjs +0 -180
- package/esm2020/controls/timeline/timeline.component.mjs +0 -117
- package/esm2020/directives/mask.directive.mjs +0 -125
- package/esm2020/directives/unmask.directive.mjs +0 -28
- package/esm2020/info-library.module.mjs +0 -278
- package/esm2020/layouts/dialog/dialog.component.mjs +0 -188
- package/esm2020/layouts/loading/loading.component.mjs +0 -42
- package/esm2020/layouts/main/main.component.mjs +0 -258
- package/esm2020/layouts/modal/modal.component.mjs +0 -258
- package/esm2020/layouts/pagebar/pagebar.component.mjs +0 -404
- package/esm2020/layouts/sidebar/sidebar.component.mjs +0 -395
- package/esm2020/layouts/topbar/topbar.component.mjs +0 -868
- package/esm2020/layouts/topmenu/topmenu.component.mjs +0 -165
- package/esm2020/model/app-config.model.mjs +0 -14
- package/esm2020/model/data-access.model.mjs +0 -35
- package/esm2020/model/dialog-result.model.mjs +0 -8
- package/esm2020/model/dialog.model.mjs +0 -16
- package/esm2020/model/form-prop.model.mjs +0 -35
- package/esm2020/model/grid-button.model.mjs +0 -21
- package/esm2020/model/last-search.model.mjs +0 -9
- package/esm2020/model/login.model.mjs +0 -9
- package/esm2020/model/method-grid-button.model.mjs +0 -9
- package/esm2020/model/notification.model.mjs +0 -9
- package/esm2020/model/permission.model.mjs +0 -3
- package/esm2020/model/platform.model.mjs +0 -21
- package/esm2020/model/session.model.mjs +0 -8
- package/esm2020/pipe/mask.pipe.mjs +0 -34
- package/esm2020/pipe/translate.pipe.mjs +0 -26
- package/esm2020/service/authentication.service.mjs +0 -358
- package/esm2020/service/configuration.service.mjs +0 -59
- package/esm2020/service/data.service.mjs +0 -112
- package/esm2020/service/theme.service.mjs +0 -79
- package/esm2020/service/translate.service.mjs +0 -53
- package/esm2020/utils/utilities.mjs +0 -142
- package/fesm2015/info-library.mjs +0 -9312
- package/fesm2015/info-library.mjs.map +0 -1
- package/fesm2020/info-library.mjs +0 -8462
- package/fesm2020/info-library.mjs.map +0 -1
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from "@angular/core";
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/common";
|
|
4
|
-
import * as i2 from "@angular/material/icon";
|
|
5
|
-
import * as i3 from "../../pipe/translate.pipe";
|
|
6
|
-
function InfoAlertComponent_div_0_li_8_Template(rf, ctx) { if (rf & 1) {
|
|
7
|
-
i0.ɵɵelementStart(0, "li")(1, "mat-icon");
|
|
8
|
-
i0.ɵɵtext(2, "error_outline");
|
|
9
|
-
i0.ɵɵelementEnd();
|
|
10
|
-
i0.ɵɵelement(3, "label", 6);
|
|
11
|
-
i0.ɵɵpipe(4, "translate");
|
|
12
|
-
i0.ɵɵelementEnd();
|
|
13
|
-
} if (rf & 2) {
|
|
14
|
-
const m_r3 = ctx.$implicit;
|
|
15
|
-
i0.ɵɵadvance(3);
|
|
16
|
-
i0.ɵɵproperty("innerHTML", i0.ɵɵpipeBind1(4, 1, m_r3), i0.ɵɵsanitizeHtml);
|
|
17
|
-
} }
|
|
18
|
-
function InfoAlertComponent_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
-
const _r5 = i0.ɵɵgetCurrentView();
|
|
20
|
-
i0.ɵɵelementStart(0, "div")(1, "div", 1, 2)(3, "h5");
|
|
21
|
-
i0.ɵɵtext(4);
|
|
22
|
-
i0.ɵɵpipe(5, "translate");
|
|
23
|
-
i0.ɵɵelementEnd();
|
|
24
|
-
i0.ɵɵprojection(6);
|
|
25
|
-
i0.ɵɵelementStart(7, "ul");
|
|
26
|
-
i0.ɵɵtemplate(8, InfoAlertComponent_div_0_li_8_Template, 5, 3, "li", 3);
|
|
27
|
-
i0.ɵɵelementEnd();
|
|
28
|
-
i0.ɵɵelementStart(9, "a", 4);
|
|
29
|
-
i0.ɵɵlistener("click", function InfoAlertComponent_div_0_Template_a_click_9_listener() { i0.ɵɵrestoreView(_r5); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onClose()); });
|
|
30
|
-
i0.ɵɵelementStart(10, "i", 5);
|
|
31
|
-
i0.ɵɵtext(11, "clear");
|
|
32
|
-
i0.ɵɵelementEnd()()()();
|
|
33
|
-
} if (rf & 2) {
|
|
34
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
35
|
-
i0.ɵɵadvance(4);
|
|
36
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 2, "Atencao"));
|
|
37
|
-
i0.ɵɵadvance(4);
|
|
38
|
-
i0.ɵɵproperty("ngForOf", ctx_r0.messages);
|
|
39
|
-
} }
|
|
40
|
-
const _c0 = function () { return []; };
|
|
41
|
-
const _c1 = ["*"];
|
|
42
|
-
export class InfoAlertComponent {
|
|
43
|
-
constructor() {
|
|
44
|
-
this.messages = [];
|
|
45
|
-
}
|
|
46
|
-
onClose() {
|
|
47
|
-
this.messages = [];
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/** @nocollapse */ InfoAlertComponent.ɵfac = function InfoAlertComponent_Factory(t) { return new (t || InfoAlertComponent)(); };
|
|
51
|
-
/** @nocollapse */ InfoAlertComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: InfoAlertComponent, selectors: [["info-alert"]], inputs: { messages: "messages" }, ngContentSelectors: _c1, decls: 1, vars: 2, consts: [[4, "ngIf"], [1, "alert"], ["alert", ""], [4, "ngFor", "ngForOf"], [1, "close", 3, "click"], [1, "material-icons"], [3, "innerHTML"]], template: function InfoAlertComponent_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
-
i0.ɵɵprojectionDef();
|
|
53
|
-
i0.ɵɵtemplate(0, InfoAlertComponent_div_0_Template, 12, 4, "div", 0);
|
|
54
|
-
} if (rf & 2) {
|
|
55
|
-
i0.ɵɵproperty("ngIf", ctx.messages != i0.ɵɵpureFunction0(1, _c0) && ctx.messages.length > 0);
|
|
56
|
-
} }, dependencies: [i1.NgForOf, i1.NgIf, i2.MatIcon, i3.InfoTranslatePipe], styles: ["[_nghost-%COMP%]{display:block;position:fixed;bottom:70px;right:30px;margin-left:280px;min-width:350px;z-index:100}[_nghost-%COMP%]:last-child{margin-bottom:0}[_nghost-%COMP%] .alert[_ngcontent-%COMP%]{box-shadow:0 5px 5px 2px #00000040;padding:1.0476190667rem 1.5714286rem;position:relative}[_nghost-%COMP%] .alert[_ngcontent-%COMP%] h5[_ngcontent-%COMP%]{text-align:center;padding-bottom:10px;margin:0 -20px 5px;border-bottom:solid 1px rgba(255,255,255,.1)}[_nghost-%COMP%] .alert[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{padding:0;margin:0;list-style:none}[_nghost-%COMP%] .alert[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{border-bottom:solid 1px rgba(255,255,255,.1);padding:7px 5px}[_nghost-%COMP%] .alert[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child{border-bottom:none}[_nghost-%COMP%] .alert[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{color:#fff;font-size:20px;line-height:1;position:absolute;right:10px;top:15px;transition:background .2s ease-in-out,color .2s ease-in-out}[_nghost-%COMP%] .alert[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]:hover{cursor:pointer;color:#ddd}[_nghost-%COMP%] .alert[_ngcontent-%COMP%] .close[_ngcontent-%COMP%] .material-icons[_ngcontent-%COMP%]{color:inherit;font-size:inherit;margin:0;vertical-align:top}[_nghost-%COMP%] .alert[_ngcontent-%COMP%] .material-icons{color:main-color(A100);margin:0 1.5714286rem 0 0;vertical-align:top}"] });
|
|
57
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoAlertComponent, [{
|
|
58
|
-
type: Component,
|
|
59
|
-
args: [{ selector: 'info-alert', template: `
|
|
60
|
-
<div *ngIf="messages != [] && messages.length > 0">
|
|
61
|
-
<div class="alert" #alert >
|
|
62
|
-
<h5>{{ 'Atencao' | translate }}</h5>
|
|
63
|
-
<ng-content></ng-content>
|
|
64
|
-
<ul>
|
|
65
|
-
<li *ngFor="let m of messages"><mat-icon>error_outline</mat-icon><label [innerHTML]="m | translate"></label></li>
|
|
66
|
-
</ul>
|
|
67
|
-
<a class="close" (click)="onClose()"><i class="material-icons">clear</i></a>
|
|
68
|
-
</div>
|
|
69
|
-
</div>
|
|
70
|
-
`, styles: [":host{display:block;position:fixed;bottom:70px;right:30px;margin-left:280px;min-width:350px;z-index:100}:host:last-child{margin-bottom:0}:host .alert{box-shadow:0 5px 5px 2px #00000040;padding:1.0476190667rem 1.5714286rem;position:relative}:host .alert h5{text-align:center;padding-bottom:10px;margin:0 -20px 5px;border-bottom:solid 1px rgba(255,255,255,.1)}:host .alert ul{padding:0;margin:0;list-style:none}:host .alert ul li{border-bottom:solid 1px rgba(255,255,255,.1);padding:7px 5px}:host .alert ul li:last-child{border-bottom:none}:host .alert .close{color:#fff;font-size:20px;line-height:1;position:absolute;right:10px;top:15px;transition:background .2s ease-in-out,color .2s ease-in-out}:host .alert .close:hover{cursor:pointer;color:#ddd}:host .alert .close .material-icons{color:inherit;font-size:inherit;margin:0;vertical-align:top}:host .alert ::ng-deep .material-icons{color:main-color(A100);margin:0 1.5714286rem 0 0;vertical-align:top}\n"] }]
|
|
71
|
-
}], null, { messages: [{
|
|
72
|
-
type: Input
|
|
73
|
-
}] }); })();
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5mby1saWJyYXJ5L3NyYy9jb250cm9scy9hbGVydC9hbGVydC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztJQVU3QiwwQkFBK0IsZUFBQTtJQUFVLDZCQUFhO0lBQUEsaUJBQVc7SUFBQSwyQkFBMkM7O0lBQUEsaUJBQUs7OztJQUF6QyxlQUEyQjtJQUEzQix5RUFBMkI7Ozs7SUFML0csMkJBQW1ELGdCQUFBLFNBQUE7SUFFdkMsWUFBMkI7O0lBQUEsaUJBQUs7SUFDcEMsa0JBQXlCO0lBQ3pCLDBCQUFJO0lBQ0EsdUVBQWlIO0lBQ3JILGlCQUFLO0lBQ0wsNEJBQXFDO0lBQXBCLDBKQUFTLGVBQUEsZ0JBQVMsQ0FBQSxJQUFDO0lBQUMsNkJBQTBCO0lBQUEsc0JBQUs7SUFBQSxpQkFBSSxFQUFBLEVBQUEsRUFBQTs7O0lBTHBFLGVBQTJCO0lBQTNCLHFEQUEyQjtJQUdULGVBQVc7SUFBWCx5Q0FBVzs7OztBQVFqRCxNQUFNLE9BQU8sa0JBQWtCO0lBaEIvQjtRQWtCYSxhQUFRLEdBQWEsRUFBRSxDQUFDO0tBS3BDO0lBSEcsT0FBTztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7O3VHQU5RLGtCQUFrQjtvR0FBbEIsa0JBQWtCOztRQWJ2QixvRUFTTTs7UUFUQSw0RkFBMkM7O3VGQWE1QyxrQkFBa0I7Y0FoQjlCLFNBQVM7MkJBQ0ksWUFBWSxZQUNaOzs7Ozs7Ozs7OztLQVdUO2dCQUtRLFFBQVE7a0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdpbmZvLWFsZXJ0JyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIm1lc3NhZ2VzICE9IFtdICYmIG1lc3NhZ2VzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0XCIgI2FsZXJ0ID5cclxuICAgICAgICAgICAgICAgIDxoNT57eyAnQXRlbmNhbycgfCB0cmFuc2xhdGUgfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbSBvZiBtZXNzYWdlc1wiPjxtYXQtaWNvbj5lcnJvcl9vdXRsaW5lPC9tYXQtaWNvbj48bGFiZWwgW2lubmVySFRNTF09XCJtIHwgdHJhbnNsYXRlXCI+PC9sYWJlbD48L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY2xvc2VcIiAoY2xpY2spPVwib25DbG9zZSgpXCI+PGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmNsZWFyPC9pPjwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVVcmxzOiBbJ2FsZXJ0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEluZm9BbGVydENvbXBvbmVudCB7XHJcblxyXG4gICAgQElucHV0KCkgbWVzc2FnZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgb25DbG9zZSgpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gW107XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
import { Component, Input, forwardRef, Output, EventEmitter } from "@angular/core";
|
|
2
|
-
import { UntypedFormControl, NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
3
|
-
import { debounceTime, switchMap, distinctUntilChanged } from 'rxjs/operators';
|
|
4
|
-
import { InfoDataService } from "../../service/data.service";
|
|
5
|
-
import { Observable } from "rxjs";
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "../../service/data.service";
|
|
8
|
-
import * as i2 from "@angular/common";
|
|
9
|
-
import * as i3 from "@angular/forms";
|
|
10
|
-
import * as i4 from "@angular/material/icon";
|
|
11
|
-
import * as i5 from "@angular/material/form-field";
|
|
12
|
-
import * as i6 from "@angular/material/input";
|
|
13
|
-
import * as i7 from "@angular/material/core";
|
|
14
|
-
import * as i8 from "@angular/material/progress-bar";
|
|
15
|
-
import * as i9 from "@angular/material/autocomplete";
|
|
16
|
-
import * as i10 from "../../pipe/translate.pipe";
|
|
17
|
-
function InfoAutoCompleteComponent_mat_option_6_Template(rf, ctx) { if (rf & 1) {
|
|
18
|
-
const _r6 = i0.ɵɵgetCurrentView();
|
|
19
|
-
i0.ɵɵelementStart(0, "mat-option", 8);
|
|
20
|
-
i0.ɵɵlistener("onSelectionChange", function InfoAutoCompleteComponent_mat_option_6_Template_mat_option_onSelectionChange_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r6); const option_r4 = restoredCtx.$implicit; const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.writeValue(option_r4.Id)); });
|
|
21
|
-
i0.ɵɵelementEnd();
|
|
22
|
-
} if (rf & 2) {
|
|
23
|
-
const option_r4 = ctx.$implicit;
|
|
24
|
-
i0.ɵɵproperty("value", option_r4)("innerHTML", option_r4.Nome, i0.ɵɵsanitizeHtml);
|
|
25
|
-
} }
|
|
26
|
-
function InfoAutoCompleteComponent_mat_progress_bar_10_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
-
i0.ɵɵelement(0, "mat-progress-bar", 9);
|
|
28
|
-
} }
|
|
29
|
-
export class InfoAutoCompleteComponent {
|
|
30
|
-
constructor(_dataAcess) {
|
|
31
|
-
this._dataAcess = _dataAcess;
|
|
32
|
-
this.control = new UntypedFormControl();
|
|
33
|
-
this.placeholder = '';
|
|
34
|
-
this.name = '';
|
|
35
|
-
this.required = false;
|
|
36
|
-
this.selectfirst = false;
|
|
37
|
-
this.disablednoregisters = false;
|
|
38
|
-
this.getdataonchange = false;
|
|
39
|
-
this.getdataonchangetime = 500;
|
|
40
|
-
this.api = null;
|
|
41
|
-
this.method = 'getchavevalor';
|
|
42
|
-
this.maxlist = 10;
|
|
43
|
-
this.startwith = false;
|
|
44
|
-
this.minchar = 1;
|
|
45
|
-
this.onselecteditem = new EventEmitter();
|
|
46
|
-
this.selectedValue = null;
|
|
47
|
-
this.initialized = false;
|
|
48
|
-
this._loading = false;
|
|
49
|
-
this._params = null;
|
|
50
|
-
this._disabled = null;
|
|
51
|
-
this._data = [];
|
|
52
|
-
}
|
|
53
|
-
get loading() {
|
|
54
|
-
return this._loading;
|
|
55
|
-
}
|
|
56
|
-
set loading(value) {
|
|
57
|
-
this._loading = value;
|
|
58
|
-
if (this._disabled == null)
|
|
59
|
-
this._disabled = false;
|
|
60
|
-
else if (this._disabled.toString() == '')
|
|
61
|
-
this._disabled = true;
|
|
62
|
-
if (this._disabled == false)
|
|
63
|
-
this.setDisabledState(this.loading);
|
|
64
|
-
}
|
|
65
|
-
get params() {
|
|
66
|
-
return this._params;
|
|
67
|
-
}
|
|
68
|
-
set params(value) {
|
|
69
|
-
this._params = value;
|
|
70
|
-
if (this.initialized)
|
|
71
|
-
this.getData().subscribe(a => { this.data = a.data; this.loading = false; });
|
|
72
|
-
}
|
|
73
|
-
set disabled(value) {
|
|
74
|
-
if (this._disabled == null)
|
|
75
|
-
this._disabled = value;
|
|
76
|
-
if (value)
|
|
77
|
-
this.control.disable();
|
|
78
|
-
else
|
|
79
|
-
this.control.enable();
|
|
80
|
-
}
|
|
81
|
-
get data() {
|
|
82
|
-
return this._data;
|
|
83
|
-
}
|
|
84
|
-
set data(value) {
|
|
85
|
-
this._data = value;
|
|
86
|
-
if (this.getdataonchange)
|
|
87
|
-
return;
|
|
88
|
-
setTimeout(() => {
|
|
89
|
-
if (this.selectedValue != null)
|
|
90
|
-
if ((this._data == null || (this._data != null && this._data.length == 0)) && !this.loading) {
|
|
91
|
-
this.writeValue(null);
|
|
92
|
-
this.selectedValue = null;
|
|
93
|
-
}
|
|
94
|
-
else
|
|
95
|
-
this.writeValue(this.selectedValue.Id == null ? this.selectedValue : this.selectedValue.Id);
|
|
96
|
-
else if (this.selectfirst && this.data != null && this.data.length > 0)
|
|
97
|
-
this.writeValue(this.data[0].Id);
|
|
98
|
-
if (this.disablednoregisters)
|
|
99
|
-
this.setDisabledState((this.data == null || this.data.length == 0));
|
|
100
|
-
}, 1000);
|
|
101
|
-
}
|
|
102
|
-
ngOnInit() {
|
|
103
|
-
if (this.minchar == null || this.minchar < 0)
|
|
104
|
-
this.minchar = 1;
|
|
105
|
-
this.name = this.placeholder.replace(/ /g, '') + Math.floor(Math.random() * 1000).toString();
|
|
106
|
-
if (!this.getdataonchange) {
|
|
107
|
-
this.getData().subscribe(a => { this.data = a.data; this.loading = false; });
|
|
108
|
-
this.control.valueChanges.subscribe(value => { this.options = this.filter(value); });
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
this.control.valueChanges.pipe(debounceTime(this.getdataonchangetime), distinctUntilChanged(), switchMap(value => this.getData(value))).subscribe(a => this.data = this.options = a.data);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
filter(value) {
|
|
115
|
-
if (value == null || value.length < this.minchar)
|
|
116
|
-
return [];
|
|
117
|
-
let filterValue = value.Nome == null ? value.toString().toLowerCase() : value.Nome;
|
|
118
|
-
if (this.startwith)
|
|
119
|
-
return this.data.filter(option => option.Nome.toLowerCase().indexOf(filterValue) === 0 || (option.Aux == null ? "" : option.Aux.toLowerCase() == filterValue)).slice(0, this.maxlist);
|
|
120
|
-
else
|
|
121
|
-
return this.data.filter(option => option.Nome.toLowerCase().indexOf(filterValue) > -1 || (option.Aux == null ? "" : option.Aux.toLowerCase().indexOf(filterValue) > -1)).slice(0, this.maxlist);
|
|
122
|
-
}
|
|
123
|
-
getData(value = null) {
|
|
124
|
-
this.initialized = true;
|
|
125
|
-
if (this.api == null || this.api == '')
|
|
126
|
-
return new Observable();
|
|
127
|
-
this.loading = !this.getdataonchange;
|
|
128
|
-
this.data = [];
|
|
129
|
-
let parameters = this.params || '';
|
|
130
|
-
if (this.getdataonchange) {
|
|
131
|
-
if (value == null || value == '')
|
|
132
|
-
return new Observable();
|
|
133
|
-
if (parameters != null && parameters != '')
|
|
134
|
-
parameters += '&';
|
|
135
|
-
parameters += `nome=${value.Nome == null ? value.toString().toLowerCase() : value.Nome}&take=${this.maxlist}`;
|
|
136
|
-
let model = parameters.split("&").map(c => ({ [c.split("=")[0].charAt(0).toUpperCase() + c.split("=")[0].substring(1)]: c.split("=")[1] })).reduce((a, b) => ({ ...a, ...b }));
|
|
137
|
-
return this._dataAcess.post(this.api, model, this.method);
|
|
138
|
-
}
|
|
139
|
-
return this._dataAcess.get(this.api, this.method, parameters);
|
|
140
|
-
}
|
|
141
|
-
onBlur(value) {
|
|
142
|
-
setTimeout(() => {
|
|
143
|
-
if (this.selectedValue != null && this.selectedValue.Id != null)
|
|
144
|
-
return;
|
|
145
|
-
if (!value && this.selectedValue != null && this.selectedValue.trim() == '')
|
|
146
|
-
this.writeValue(null);
|
|
147
|
-
else {
|
|
148
|
-
let first = this.filter(value);
|
|
149
|
-
if (first != null && first.length > 0)
|
|
150
|
-
this.writeValue(first[0].Id);
|
|
151
|
-
else
|
|
152
|
-
this.writeValue(null);
|
|
153
|
-
}
|
|
154
|
-
}, 300);
|
|
155
|
-
}
|
|
156
|
-
onFocus(value) {
|
|
157
|
-
if (this.minchar != null && this.minchar == 0 && (value == null || value == ''))
|
|
158
|
-
setTimeout(() => { this.control.setValue(''); }, 200);
|
|
159
|
-
}
|
|
160
|
-
displayFn(model) {
|
|
161
|
-
if (model == null || model.Nome == null)
|
|
162
|
-
return '';
|
|
163
|
-
let indexSmall = model.Nome.indexOf('<small');
|
|
164
|
-
return indexSmall > -1 ? model.Nome.substring(0, indexSmall).trim() : model.Nome;
|
|
165
|
-
}
|
|
166
|
-
writeValue(value) {
|
|
167
|
-
let obj = this.data.find(r => r.Id == value);
|
|
168
|
-
this.control.setValue(obj);
|
|
169
|
-
if (value != null && obj == null)
|
|
170
|
-
this.selectedValue = value;
|
|
171
|
-
if (this.onChange != null)
|
|
172
|
-
this.onChange(value);
|
|
173
|
-
if (this.onselecteditem != null)
|
|
174
|
-
this.onselecteditem.emit(this.data == null ? null : this.data.find(r => r.Id == value));
|
|
175
|
-
}
|
|
176
|
-
registerOnChange(fn) {
|
|
177
|
-
this.onChange = fn;
|
|
178
|
-
}
|
|
179
|
-
registerOnTouched(fn) {
|
|
180
|
-
this.onTouched = fn;
|
|
181
|
-
}
|
|
182
|
-
setDisabledState(isDisabled) {
|
|
183
|
-
this.disabled = this.disablednoregisters && (this.data == null || this.data.length == 0) ? true : isDisabled;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
/** @nocollapse */ InfoAutoCompleteComponent.ɵfac = function InfoAutoCompleteComponent_Factory(t) { return new (t || InfoAutoCompleteComponent)(i0.ɵɵdirectiveInject(i1.InfoDataService)); };
|
|
187
|
-
/** @nocollapse */ InfoAutoCompleteComponent.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: InfoAutoCompleteComponent, selectors: [["info-autocomplete"]], inputs: { placeholder: "placeholder", name: "name", required: "required", selectfirst: "selectfirst", disablednoregisters: "disablednoregisters", getdataonchange: "getdataonchange", getdataonchangetime: "getdataonchangetime", api: "api", method: "method", maxlist: "maxlist", startwith: "startwith", minchar: "minchar", loading: "loading", params: "params", disabled: "disabled", data: "data" }, outputs: { onselecteditem: "onselecteditem" }, features: [i0.ɵɵProvidersFeature([{
|
|
188
|
-
provide: NG_VALUE_ACCESSOR,
|
|
189
|
-
useExisting: forwardRef((() => InfoAutoCompleteComponent)),
|
|
190
|
-
multi: true
|
|
191
|
-
}])], decls: 11, vars: 10, consts: [["matInput", "", "type", "text", 3, "ngModel", "placeholder", "formControl", "matAutocomplete", "required", "ngModelChange", "blur", "focus"], ["inputAuto", ""], [3, "displayWith"], ["auto", "matAutocomplete"], [3, "value", "innerHTML", "onSelectionChange", 4, "ngFor", "ngForOf"], ["matSuffix", "", 2, "color", "#aaa"], [1, "select-loading"], ["color", "primary", "mode", "indeterminate", 4, "ngIf"], [3, "value", "innerHTML", "onSelectionChange"], ["color", "primary", "mode", "indeterminate"]], template: function InfoAutoCompleteComponent_Template(rf, ctx) { if (rf & 1) {
|
|
192
|
-
i0.ɵɵelementStart(0, "mat-form-field")(1, "input", 0, 1);
|
|
193
|
-
i0.ɵɵlistener("ngModelChange", function InfoAutoCompleteComponent_Template_input_ngModelChange_1_listener($event) { return ctx.selectedValue = $event; })("blur", function InfoAutoCompleteComponent_Template_input_blur_1_listener($event) { return ctx.onBlur($event.target.value); })("focus", function InfoAutoCompleteComponent_Template_input_focus_1_listener($event) { return ctx.onFocus($event.target.value); });
|
|
194
|
-
i0.ɵɵpipe(3, "translate");
|
|
195
|
-
i0.ɵɵelementEnd();
|
|
196
|
-
i0.ɵɵelementStart(4, "mat-autocomplete", 2, 3);
|
|
197
|
-
i0.ɵɵtemplate(6, InfoAutoCompleteComponent_mat_option_6_Template, 1, 2, "mat-option", 4);
|
|
198
|
-
i0.ɵɵelementEnd();
|
|
199
|
-
i0.ɵɵelementStart(7, "mat-icon", 5);
|
|
200
|
-
i0.ɵɵtext(8, "spellcheck");
|
|
201
|
-
i0.ɵɵelementEnd()();
|
|
202
|
-
i0.ɵɵelementStart(9, "section", 6);
|
|
203
|
-
i0.ɵɵtemplate(10, InfoAutoCompleteComponent_mat_progress_bar_10_Template, 1, 0, "mat-progress-bar", 7);
|
|
204
|
-
i0.ɵɵelementEnd();
|
|
205
|
-
} if (rf & 2) {
|
|
206
|
-
const _r1 = i0.ɵɵreference(5);
|
|
207
|
-
i0.ɵɵadvance(1);
|
|
208
|
-
i0.ɵɵproperty("ngModel", ctx.selectedValue)("placeholder", i0.ɵɵpipeBind1(3, 8, ctx.placeholder))("formControl", ctx.control)("matAutocomplete", _r1)("required", ctx.required);
|
|
209
|
-
i0.ɵɵadvance(3);
|
|
210
|
-
i0.ɵɵproperty("displayWith", ctx.displayFn);
|
|
211
|
-
i0.ɵɵadvance(2);
|
|
212
|
-
i0.ɵɵproperty("ngForOf", ctx.options);
|
|
213
|
-
i0.ɵɵadvance(4);
|
|
214
|
-
i0.ɵɵproperty("ngIf", ctx.loading);
|
|
215
|
-
} }, dependencies: [i2.NgForOf, i2.NgIf, i3.DefaultValueAccessor, i3.NgControlStatus, i3.RequiredValidator, i3.FormControlDirective, i4.MatIcon, i5.MatFormField, i5.MatSuffix, i6.MatInput, i7.MatOption, i8.MatProgressBar, i9.MatAutocomplete, i9.MatAutocompleteTrigger, i10.InfoTranslatePipe], styles: ["[_nghost-%COMP%] .select-loading[_ngcontent-%COMP%]{position:relative;bottom:15px;opacity:.3;height:1px}[_nghost-%COMP%] .select-loading[_ngcontent-%COMP%] .mat-progress-bar[_ngcontent-%COMP%]{height:1px;margin:0}[_nghost-%COMP%] mat-option[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{margin-left:10px;font-style:italic}"] });
|
|
216
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(InfoAutoCompleteComponent, [{
|
|
217
|
-
type: Component,
|
|
218
|
-
args: [{ selector: 'info-autocomplete', providers: [{
|
|
219
|
-
provide: NG_VALUE_ACCESSOR,
|
|
220
|
-
useExisting: forwardRef((() => InfoAutoCompleteComponent)),
|
|
221
|
-
multi: true
|
|
222
|
-
}], template: "<mat-form-field>\r\n <input matInput type=\"text\" [(ngModel)]=\"selectedValue\" [placeholder]=\"placeholder | translate\" [formControl]=\"control\" [matAutocomplete]=\"auto\" \r\n [required]=\"required\" (blur)=\"onBlur($event.target.value)\" (focus)=\"onFocus($event.target.value)\" #inputAuto>\r\n\r\n <mat-autocomplete #auto=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of options\" [value]=\"option\" (onSelectionChange)=\"writeValue(option.Id)\" [innerHTML]=\"option.Nome\" >\r\n </mat-option>\r\n </mat-autocomplete>\r\n \r\n <mat-icon matSuffix style=\"color: #aaa\">spellcheck</mat-icon>\r\n</mat-form-field>\r\n\r\n<section class=\"select-loading\">\r\n <mat-progress-bar color=\"primary\" mode=\"indeterminate\" *ngIf=\"loading\"></mat-progress-bar>\r\n</section>", styles: [":host .select-loading{position:relative;bottom:15px;opacity:.3;height:1px}:host .select-loading .mat-progress-bar{height:1px;margin:0}:host mat-option small{margin-left:10px;font-style:italic}\n"] }]
|
|
223
|
-
}], function () { return [{ type: i1.InfoDataService }]; }, { placeholder: [{
|
|
224
|
-
type: Input
|
|
225
|
-
}], name: [{
|
|
226
|
-
type: Input
|
|
227
|
-
}], required: [{
|
|
228
|
-
type: Input
|
|
229
|
-
}], selectfirst: [{
|
|
230
|
-
type: Input
|
|
231
|
-
}], disablednoregisters: [{
|
|
232
|
-
type: Input
|
|
233
|
-
}], getdataonchange: [{
|
|
234
|
-
type: Input
|
|
235
|
-
}], getdataonchangetime: [{
|
|
236
|
-
type: Input
|
|
237
|
-
}], api: [{
|
|
238
|
-
type: Input
|
|
239
|
-
}], method: [{
|
|
240
|
-
type: Input
|
|
241
|
-
}], maxlist: [{
|
|
242
|
-
type: Input
|
|
243
|
-
}], startwith: [{
|
|
244
|
-
type: Input
|
|
245
|
-
}], minchar: [{
|
|
246
|
-
type: Input
|
|
247
|
-
}], onselecteditem: [{
|
|
248
|
-
type: Output
|
|
249
|
-
}], loading: [{
|
|
250
|
-
type: Input
|
|
251
|
-
}], params: [{
|
|
252
|
-
type: Input
|
|
253
|
-
}], disabled: [{
|
|
254
|
-
type: Input
|
|
255
|
-
}], data: [{
|
|
256
|
-
type: Input
|
|
257
|
-
}] }); })();
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2luZm8tbGlicmFyeS9zcmMvY29udHJvbHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbmZvLWxpYnJhcnkvc3JjL2NvbnRyb2xzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLGtCQUFrQixFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0lDQzFCLHFDQUFtSTtJQUF2RSxzUUFBcUIsZUFBQSwrQkFBcUIsQ0FBQSxJQUFDO0lBQ3ZHLGlCQUFhOzs7SUFEOEIsaUNBQWdCLGdEQUFBOzs7SUFRL0Qsc0NBQTBGOztBREk5RixNQUFNLE9BQU8seUJBQXlCO0lBa0dsQyxZQUFvQixVQUEyQjtRQUEzQixlQUFVLEdBQVYsVUFBVSxDQUFpQjtRQWpHL0MsWUFBTyxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNqQixTQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ1YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUNwQix3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SUFBSSxFQUFFO2dCQUN0QyxVQUFVLElBQUksR0FBRyxDQUFDO1lBRXRCLFVBQVUsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRTlHLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUM1SyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM3RDtRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSztRQUNSLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FB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RyxlQUFlO2tCQUF2QixLQUFLO1lBQ0csbUJBQW1CO2tCQUEzQixLQUFLO1lBQ0csR0FBRztrQkFBWCxLQUFLO1lBQ0csTUFBTTtrQkFBZCxLQUFLO1lBQ0csT0FBTztrQkFBZixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLE9BQU87a0JBQWYsS0FBSztZQUVJLGNBQWM7a0JBQXZCLE1BQU07WUFZSCxPQUFPO2tCQURWLEtBQUs7WUFvQkYsTUFBTTtrQkFEVCxLQUFLO1lBY0YsUUFBUTtrQkFEWCxLQUFLO1lBYUYsSUFBSTtrQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBmb3J3YXJkUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgc3dpdGNoTWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5mb0RhdGFTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2UvZGF0YS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBJbmZvRGF0YUFjY2Vzc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2luZm8tYXV0b2NvbXBsZXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2F1dG9jb21wbGV0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbe1xyXG4gICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEluZm9BdXRvQ29tcGxldGVDb21wb25lbnQpLFxyXG4gICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW5mb0F1dG9Db21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgY29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICAgIFxyXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcclxuICAgIEBJbnB1dCgpIG5hbWUgPSAnJztcclxuICAgIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZWxlY3RmaXJzdCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWRub3JlZ2lzdGVycyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZ2V0ZGF0YW9uY2hhbmdlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBnZXRkYXRhb25jaGFuZ2V0aW1lID0gNTAwO1xyXG4gICAgQElucHV0KCkgYXBpOiBhbnkgPSBudWxsO1xyXG4gICAgQElucHV0KCkgbWV0aG9kID0gJ2dldGNoYXZldmFsb3InO1xyXG4gICAgQElucHV0KCkgbWF4bGlzdCA9IDEwO1xyXG4gICAgQElucHV0KCkgc3RhcnR3aXRoID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBtaW5jaGFyID0gMTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25zZWxlY3RlZGl0ZW0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgb3B0aW9uczogYW55W107XHJcbiAgICBzZWxlY3RlZFZhbHVlOiBhbnkgPSBudWxsO1xyXG5cclxuICAgIG9uQ2hhbmdlOiBhbnk7XHJcbiAgICBvblRvdWNoZWQ6IGFueTtcclxuICAgIFxyXG4gICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbiAgICBfbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBsb2FkaW5nKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGxvYWRpbmcodmFsdWUpe1xyXG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSB2YWx1ZTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fZGlzYWJsZWQudG9TdHJpbmcoKSA9PSAnJylcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT0gZmFsc2UpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSh0aGlzLmxvYWRpbmcpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfcGFyYW1zOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCBwYXJhbXMoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW1zO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBwYXJhbXModmFsdWUpe1xyXG4gICAgICAgIHRoaXMuX3BhcmFtcyA9IHZhbHVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZClcclxuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCkuc3Vic2NyaWJlKGEgPT4geyB0aGlzLmRhdGEgPSBhLmRhdGE7IHRoaXMubG9hZGluZyA9IGZhbHNlOyB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgX2Rpc2FibGVkOiBib29sZWFuID0gbnVsbDtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHsgICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlKVxyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLmVuYWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9kYXRhOiBhbnkgPSBbXTtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgZGF0YSgpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBkYXRhKHZhbHVlKXtcclxuICAgICAgICB0aGlzLl9kYXRhID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldGRhdGFvbmNoYW5nZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLl9kYXRhID09IG51bGwgfHwgKHRoaXMuX2RhdGEgIT0gbnVsbCAmJiB0aGlzLl9kYXRhLmxlbmd0aCA9PSAwKSkgJiYgIXRoaXMubG9hZGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZS5JZCA9PSBudWxsID8gdGhpcy5zZWxlY3RlZFZhbHVlIDogdGhpcy5zZWxlY3RlZFZhbHVlLklkKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3RmaXJzdCAmJiB0aGlzLmRhdGEgIT0gbnVsbCAmJiB0aGlzLmRhdGEubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLmRhdGFbMF0uSWQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWRub3JlZ2lzdGVycylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzYWJsZWRTdGF0ZSgodGhpcy5kYXRhID09IG51bGwgfHwgdGhpcy5kYXRhLmxlbmd0aCA9PSAwKSk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZGF0YUFjZXNzOiBJbmZvRGF0YVNlcnZpY2UpIHsgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1pbmNoYXIgPT0gbnVsbCB8fCB0aGlzLm1pbmNoYXIgPCAwKSB0aGlzLm1pbmNoYXIgPSAxO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IHRoaXMucGxhY2Vob2xkZXIucmVwbGFjZSgvIC9nLCAnJykgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwKS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuZ2V0ZGF0YW9uY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpLnN1YnNjcmliZShhID0+IHsgdGhpcy5kYXRhID0gYS5kYXRhOyB0aGlzLmxvYWRpbmcgPSBmYWxzZTsgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHsgdGhpcy5vcHRpb25zID0gdGhpcy5maWx0ZXIodmFsdWUpfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZ2V0ZGF0YW9uY2hhbmdldGltZSksIFxyXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB0aGlzLmdldERhdGEodmFsdWUpKVxyXG4gICAgICAgICAgICApLnN1YnNjcmliZShhID0+IHRoaXMuZGF0YSA9IHRoaXMub3B0aW9ucyA9IGEuZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlcih2YWx1ZTogYW55KTogYW55W10ge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA8IHRoaXMubWluY2hhcikgcmV0dXJuIFtdO1xyXG4gICAgICAgIGxldCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLk5vbWUgPT0gbnVsbCA/IHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA6IHZhbHVlLk5vbWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0d2l0aClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi5Ob21lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IDAgfHwgKG9wdGlvbi5BdXggPT0gbnVsbCA/IFwiXCIgOiBvcHRpb24uQXV4LnRvTG93ZXJDYXNlKCkgPT0gZmlsdGVyVmFsdWUpKS5zbGljZSgwLCB0aGlzLm1heGxpc3QpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi5Ob21lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPiAtMSB8fCAob3B0aW9uLkF1eCA9PSBudWxsID8gXCJcIiA6IG9wdGlvbi5BdXgudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlKSA+IC0xKSkuc2xpY2UoMCwgdGhpcy5tYXhsaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhKHZhbHVlOiBhbnkgPSBudWxsKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBpID09IG51bGwgfHwgdGhpcy5hcGkgPT0gJycpXHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxJbmZvRGF0YUFjY2Vzc01vZGVsPigpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSAhdGhpcy5nZXRkYXRhb25jaGFuZ2U7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gW107XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSB0aGlzLnBhcmFtcyB8fCAnJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0ZGF0YW9uY2hhbmdlKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09ICcnKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPEluZm9EYXRhQWNjZXNzTW9kZWw+KCk7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFyYW1ldGVycyAhPSBudWxsICYmIHBhcmFtZXRlcnMgIT0gJycpXHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzICs9ICcmJztcclxuXHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgKz0gYG5vbWU9JHt2YWx1ZS5Ob21lID09IG51bGwgPyB2YWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZS5Ob21lfSZ0YWtlPSR7dGhpcy5tYXhsaXN0fWA7XHJcblxyXG4gICAgICAgICAgICBsZXQgbW9kZWwgPSBwYXJhbWV0ZXJzLnNwbGl0KFwiJlwiKS5tYXAoYyA9PiAoeyBbYy5zcGxpdChcIj1cIilbMF0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjLnNwbGl0KFwiPVwiKVswXS5zdWJzdHJpbmcoMSldOiBjLnNwbGl0KFwiPVwiKVsxXSB9KSkucmVkdWNlKChhLGIpID0+ICh7Li4uYSwgLi4uYn0pKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFBY2Vzcy5wb3N0KHRoaXMuYXBpLCBtb2RlbCwgdGhpcy5tZXRob2QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFBY2Vzcy5nZXQodGhpcy5hcGksIHRoaXMubWV0aG9kLCBwYXJhbWV0ZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJsdXIodmFsdWUpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSAhPSBudWxsICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZS5JZCAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF2YWx1ZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWUgIT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkVmFsdWUudHJpbSgpID09ICcnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBmaXJzdCA9IHRoaXMuZmlsdGVyKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdCAhPSBudWxsICYmIGZpcnN0Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKGZpcnN0WzBdLklkKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgfSwgMzAwKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkZvY3VzKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubWluY2hhciAhPSBudWxsICYmIHRoaXMubWluY2hhciA9PSAwICYmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09ICcnKSlcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuY29udHJvbC5zZXRWYWx1ZSgnJyk7IH0sIDIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheUZuKG1vZGVsKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobW9kZWwgPT0gbnVsbCB8fCBtb2RlbC5Ob21lID09IG51bGwpXHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuXHJcbiAgICAgICAgbGV0IGluZGV4U21hbGwgPSBtb2RlbC5Ob21lLmluZGV4T2YoJzxzbWFsbCcpO1xyXG4gICAgICAgIHJldHVybiBpbmRleFNtYWxsID4gLTEgPyBtb2RlbC5Ob21lLnN1YnN0cmluZygwLCBpbmRleFNtYWxsKS50cmltKCkgOiBtb2RlbC5Ob21lO1xyXG4gICAgfVxyXG5cclxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGxldCBvYmogPSB0aGlzLmRhdGEuZmluZChyID0+IHIuSWQgPT0gdmFsdWUpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShvYmopO1xyXG5cclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiBvYmogPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm9uQ2hhbmdlICE9IG51bGwpXHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5vbnNlbGVjdGVkaXRlbSAhPSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLm9uc2VsZWN0ZWRpdGVtLmVtaXQodGhpcy5kYXRhID09IG51bGwgPyBudWxsIDogdGhpcy5kYXRhLmZpbmQociA9PiByLklkID09IHZhbHVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZG5vcmVnaXN0ZXJzICYmICh0aGlzLmRhdGEgPT0gbnVsbCB8fCB0aGlzLmRhdGEubGVuZ3RoID09IDApID8gdHJ1ZSA6IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcbn0iLCI8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVmFsdWVcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIiBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIFxyXG4gICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiIChibHVyKT1cIm9uQmx1cigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudC50YXJnZXQudmFsdWUpXCIgI2lucHV0QXV0bz5cclxuXHJcbiAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5Rm5cIj5cclxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIG9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCIgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cIndyaXRlVmFsdWUob3B0aW9uLklkKVwiIFtpbm5lckhUTUxdPVwib3B0aW9uLk5vbWVcIiA+XHJcbiAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgXHJcbiAgICA8bWF0LWljb24gbWF0U3VmZml4IHN0eWxlPVwiY29sb3I6ICNhYWFcIj5zcGVsbGNoZWNrPC9tYXQtaWNvbj5cclxuPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbjxzZWN0aW9uIGNsYXNzPVwic2VsZWN0LWxvYWRpbmdcIj5cclxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIGNvbG9yPVwicHJpbWFyeVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJsb2FkaW5nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG48L3NlY3Rpb24+Il19
|