survery-lib 0.0.6 → 0.1.0

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.
@@ -0,0 +1,154 @@
1
+ import { of } from "rxjs";
2
+ import { Injectable } from "@angular/core";
3
+ import { QuestionTypeEnum } from "../../shared/enums/question-type.enum";
4
+ import { LogicPropertyEnum } from "../../shared/enums/Logic-Property.enum";
5
+ import { OperatorEnum } from "../../shared/enums/operator.enum";
6
+ import * as i0 from "@angular/core";
7
+ export class CheckRuleExpsUsecase {
8
+ constructor() {
9
+ }
10
+ execute(params) {
11
+ var useCaseResult = {
12
+ exprestionResultArr: []
13
+ };
14
+ params.ruleExps.forEach(ruleExp => {
15
+ const index = params.questions.findIndex(x => x.questionId == ruleExp.questionId);
16
+ var questionGroupValue = params.questions.at(index);
17
+ var result;
18
+ if (questionGroupValue.questionType == QuestionTypeEnum.TextInput) {
19
+ result = this.checkRuleExpForAnswerText(ruleExp, questionGroupValue.answerText);
20
+ }
21
+ else if (questionGroupValue.questionType == QuestionTypeEnum.CheckBox) {
22
+ result = this.checkRuleExpForAnswerIdArr(ruleExp, questionGroupValue.answerIdArr);
23
+ }
24
+ else {
25
+ result = this.checkRuleExpForAnswerId(ruleExp, questionGroupValue.answerId);
26
+ }
27
+ var answers = ruleExp.ruleExpAnswers.map(x => x.answerId + '-' + x.answerTitle);
28
+ console.log(`Question ${questionGroupValue.questionId} type ${QuestionTypeEnum[questionGroupValue.questionType]} --- ${result == true ? 'passed' : 'not passed'} ---`, ` answers (${answers.join(' , ')}) logic (${LogicPropertyEnum[ruleExp.logicPropertyId]}) operator (${OperatorEnum[ruleExp.opporator]})`);
29
+ useCaseResult.exprestionResultArr.push(result);
30
+ });
31
+ return of(useCaseResult);
32
+ }
33
+ checkRuleExpForAnswerId(ruleExp, answerId) {
34
+ var ruleExpResultArr = [];
35
+ if (ruleExp.logicPropertyId == LogicPropertyEnum.GreaterThan) {
36
+ ruleExp.ruleExpAnswers.forEach(answer => {
37
+ var result = answerId > answer.answerId;
38
+ ruleExpResultArr.push(result);
39
+ });
40
+ }
41
+ else if (ruleExp.logicPropertyId == LogicPropertyEnum.GreaterThanOrEqual) {
42
+ ruleExp.ruleExpAnswers.forEach(answer => {
43
+ var result = answerId >= answer.answerId;
44
+ ruleExpResultArr.push(result);
45
+ });
46
+ }
47
+ else if (ruleExp.logicPropertyId == LogicPropertyEnum.LessThan) {
48
+ ruleExp.ruleExpAnswers.forEach(answer => {
49
+ var result = answerId < answer.answerId;
50
+ ruleExpResultArr.push(result);
51
+ });
52
+ }
53
+ else if (ruleExp.logicPropertyId == LogicPropertyEnum.LessThanOrEqual) {
54
+ ruleExp.ruleExpAnswers.forEach(answer => {
55
+ var result = answerId <= answer.answerId;
56
+ ruleExpResultArr.push(result);
57
+ });
58
+ }
59
+ else if (ruleExp.logicPropertyId == LogicPropertyEnum.Equal) {
60
+ ruleExp.ruleExpAnswers.forEach(answer => {
61
+ var result = answerId == answer.answerId;
62
+ ruleExpResultArr.push(result);
63
+ });
64
+ }
65
+ else if (ruleExp.logicPropertyId == LogicPropertyEnum.NotEqual) {
66
+ ruleExp.ruleExpAnswers.forEach(answer => {
67
+ var result = answerId != answer.answerId;
68
+ ruleExpResultArr.push(result);
69
+ });
70
+ }
71
+ else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsEmpty) {
72
+ var result = answerId == null;
73
+ ruleExpResultArr.push(result);
74
+ }
75
+ else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsNotEmpty) {
76
+ var result = answerId != null;
77
+ ruleExpResultArr.push(result);
78
+ }
79
+ else if (ruleExp.logicPropertyId == LogicPropertyEnum.AnyOf) {
80
+ var answerIdArr = ruleExp.ruleExpAnswers.map(x => x.answerId);
81
+ var result = answerIdArr.findIndex(x => x == answerId) > -1;
82
+ ruleExpResultArr.push(result);
83
+ }
84
+ else if (ruleExp.logicPropertyId == LogicPropertyEnum.Then) {
85
+ var answerIdArr = ruleExp.ruleExpAnswers.map(x => x.answerId);
86
+ var result = answerIdArr.findIndex(x => x == answerId) == -1;
87
+ ruleExpResultArr.push(result);
88
+ }
89
+ if (ruleExpResultArr.length == 0) {
90
+ return false;
91
+ }
92
+ else if (ruleExp.ruleExpAnswers.length == 1) {
93
+ return ruleExpResultArr.filter(x => x == true).length > 0;
94
+ }
95
+ else if (ruleExp.opporator == OperatorEnum.Or) {
96
+ return ruleExpResultArr.filter(x => x == true).length > 0;
97
+ }
98
+ else {
99
+ return ruleExpResultArr.filter(x => x == false).length == 0;
100
+ }
101
+ }
102
+ checkRuleExpForAnswerIdArr(ruleExp, answerIdArr) {
103
+ var ruleExpResultArr = [];
104
+ answerIdArr?.forEach(answer => {
105
+ var isResult = this.checkRuleExpForAnswerId(ruleExp, answer);
106
+ ruleExpResultArr.push(isResult);
107
+ });
108
+ if (ruleExpResultArr.length == 0) {
109
+ return false;
110
+ }
111
+ else if (ruleExp.ruleExpAnswers.length == 1) {
112
+ return ruleExpResultArr.filter(x => x == true).length > 0;
113
+ }
114
+ else if (ruleExp.opporator == OperatorEnum.Or) {
115
+ return ruleExpResultArr.filter(x => x == true).length > 0;
116
+ }
117
+ else {
118
+ return ruleExpResultArr.filter(x => x == false).length == 0;
119
+ }
120
+ }
121
+ checkRuleExpForAnswerText(ruleExp, answer) {
122
+ var ruleExpResultArr = [];
123
+ if (ruleExp.logicPropertyId == LogicPropertyEnum.IsEmpty) {
124
+ var result = answer == null || answer == '';
125
+ ruleExpResultArr.push(result);
126
+ }
127
+ else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsNotEmpty) {
128
+ var result = answer != null && answer != '';
129
+ ruleExpResultArr.push(result);
130
+ }
131
+ if (ruleExp.ruleExpAnswers.length == 1) {
132
+ return ruleExpResultArr.filter(x => x == true).length > 0;
133
+ }
134
+ else if (ruleExp.opporator == OperatorEnum.Or) {
135
+ return ruleExpResultArr.filter(x => x == true).length > 0;
136
+ }
137
+ else {
138
+ return ruleExpResultArr.filter(x => x == false).length == 0;
139
+ }
140
+ }
141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckRuleExpsUsecase, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
142
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckRuleExpsUsecase, providedIn: 'root' }); }
143
+ }
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckRuleExpsUsecase, decorators: [{
145
+ type: Injectable,
146
+ args: [{
147
+ providedIn: 'root'
148
+ }]
149
+ }], ctorParameters: function () { return []; } });
150
+ export class CheckRulesUsecaseModel {
151
+ }
152
+ export class CheckRulesUsecaseResult {
153
+ }
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stcnVsZS1leHBzLnVzZWNhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdXJ2ZXJ5LWxpYi9zcmMvbGliL3VzZWNhc2VzL2NoZWNrLXJ1bGUtZXhwcy51c2VjYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBS2hFLE1BQU0sT0FBTyxvQkFBb0I7SUFFL0I7SUFFQSxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQThCO1FBRXBDLElBQUksYUFBYSxHQUE0QjtZQUMzQyxtQkFBbUIsRUFBRSxFQUFFO1NBQ3hCLENBQUM7UUFFRixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xGLElBQUksa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFcEQsSUFBSSxNQUFlLENBQUM7WUFFcEIsSUFBSSxrQkFBa0IsQ0FBQyxZQUFZLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFO2dCQUNqRSxNQUFNLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTth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Q0FBQztTQUUvQjthQUFNLElBQUksT0FBTyxDQUFDLGVBQWUsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUU7WUFFbEUsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLElBQUksRUFBRSxDQUFBO1lBQzNDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUUvQjtRQUdELElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ3RDLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7U0FDMUQ7YUFDSSxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1NBQzFEO2FBQU07WUFDTCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFBO1NBQzVEO0lBQ0gsQ0FBQzs4R0FuS1Usb0JBQW9CO2tIQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7MkZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7QUF3S0QsTUFBTSxPQUFPLHNCQUFzQjtDQUdsQztBQUVELE1BQU0sT0FBTyx1QkFBdUI7Q0FFbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFVzZUNhc2UgfSBmcm9tIFwiLi9iYXNlL3VzZS1jYXNlXCI7XHJcbmltcG9ydCB7IFN1cnZleVJ1bGVEdG8gfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2R0b3Mvc3VydmV5LXJ1bGUuZHRvXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZSB9IGZyb20gXCIuLi8uLi9zaGFyZWQvZm9ybS1pbnRlcmZhY2VzL3N1cnZlcnktbGliLmZvcm0taW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IFJ1bGVFeHBEdG8gfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2R0b3MvcnVsZS1leHAuZHRvXCI7XHJcbmltcG9ydCB7IFF1ZXN0aW9uVHlwZUVudW0gfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2VudW1zL3F1ZXN0aW9uLXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBMb2dpY1Byb3BlcnR5RW51bSB9IGZyb20gXCIuLi8uLi9zaGFyZWQvZW51bXMvTG9naWMtUHJvcGVydHkuZW51bVwiO1xyXG5pbXBvcnQgeyBPcGVyYXRvckVudW0gfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2VudW1zL29wZXJhdG9yLmVudW1cIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENoZWNrUnVsZUV4cHNVc2VjYXNlIGltcGxlbWVudHMgVXNlQ2FzZTxDaGVja1J1bGVzVXNlY2FzZU1vZGVsLCBDaGVja1J1bGVzVXNlY2FzZVJlc3VsdD57XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICB9XHJcblxyXG4gIGV4ZWN1dGUocGFyYW1zOiBDaGVja1J1bGVzVXNlY2FzZU1vZGVsKTogT2JzZXJ2YWJsZTxDaGVja1J1bGVzVXNlY2FzZVJlc3VsdD4ge1xyXG5cclxuICAgIHZhciB1c2VDYXNlUmVzdWx0OiBDaGVja1J1bGVzVXNlY2FzZVJlc3VsdCA9IHtcclxuICAgICAgZXhwcmVzdGlvblJlc3VsdEFycjogW11cclxuICAgIH07XHJcblxyXG4gICAgcGFyYW1zLnJ1bGVFeHBzLmZvckVhY2gocnVsZUV4cCA9PiB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gcGFyYW1zLnF1ZXN0aW9ucy5maW5kSW5kZXgoeCA9PiB4LnF1ZXN0aW9uSWQgPT0gcnVsZUV4cC5xdWVzdGlvbklkKTtcclxuICAgICAgdmFyIHF1ZXN0aW9uR3JvdXBWYWx1ZSA9IHBhcmFtcy5xdWVzdGlvbnMuYXQoaW5kZXgpO1xyXG5cclxuICAgICAgdmFyIHJlc3VsdDogYm9vbGVhbjtcclxuXHJcbiAgICAgIGlmIChxdWVzdGlvbkdyb3VwVmFsdWUucXVlc3Rpb25UeXBlID09IFF1ZXN0aW9uVHlwZUVudW0uVGV4dElucHV0KSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5jaGVja1J1bGVFeHBGb3JBbnN3ZXJUZXh0KHJ1bGVFeHAsIHF1ZXN0aW9uR3JvdXBWYWx1ZS5hbnN3ZXJUZXh0KVxyXG4gICAgICB9IFxyXG4gICAgICBlbHNlIGlmIChxdWVzdGlvbkdyb3VwVmFsdWUucXVlc3Rpb25UeXBlID09IFF1ZXN0aW9uVHlwZUVudW0uQ2hlY2tCb3gpIHtcclxuICAgICAgICByZXN1bHQgPSB0aGlzLmNoZWNrUnVsZUV4cEZvckFuc3dlcklkQXJyKHJ1bGVFeHAsIHF1ZXN0aW9uR3JvdXBWYWx1ZS5hbnN3ZXJJZEFycik7XHJcbiAgICAgIH0gXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHJlc3VsdCA9IHRoaXMuY2hlY2tSdWxlRXhwRm9yQW5zd2VySWQocnVsZUV4cCwgcXVlc3Rpb25Hcm91cFZhbHVlLmFuc3dlcklkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIGFuc3dlcnMgPXJ1bGVFeHAucnVsZUV4cEFuc3dlcnMubWFwKHg9PnguYW5zd2VySWQrJy0nK3guYW5zd2VyVGl0bGUpO1xyXG4gICAgICBjb25zb2xlLmxvZyhgUXVlc3Rpb24gJHtxdWVzdGlvbkdyb3VwVmFsdWUucXVlc3Rpb25JZH0gdHlwZSAke1F1ZXN0aW9uVHlwZUVudW1bcXVlc3Rpb25Hcm91cFZhbHVlLnF1ZXN0aW9uVHlwZV19IC0tLSAke3Jlc3VsdCA9PSB0cnVlID8ncGFzc2VkJzonbm90IHBhc3NlZCd9IC0tLWAsXHJcbiAgICAgIGAgYW5zd2VycyAoJHthbnN3ZXJzLmpvaW4oJyAsICcpfSkgbG9naWMgKCR7IExvZ2ljUHJvcGVydHlFbnVtW3J1bGVFeHAubG9naWNQcm9wZXJ0eUlkXX0pIG9wZXJhdG9yICgke09wZXJhdG9yRW51bSBbcnVsZUV4cC5vcHBvcmF0b3JdfSlgKTtcclxuXHJcbiAgICAgIHVzZUNhc2VSZXN1bHQuZXhwcmVzdGlvblJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gb2YodXNlQ2FzZVJlc3VsdCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrUnVsZUV4cEZvckFuc3dlcklkKHJ1bGVFeHA6IFJ1bGVFeHBEdG8sIGFuc3dlcklkOiBudW1iZXIpIHtcclxuICAgIHZhciBydWxlRXhwUmVzdWx0QXJyOiBib29sZWFuW10gPSBbXTtcclxuICAgIGlmIChydWxlRXhwLmxvZ2ljUHJvcGVydHlJZCA9PSBMb2dpY1Byb3BlcnR5RW51bS5HcmVhdGVyVGhhbikge1xyXG5cclxuICAgICAgcnVsZUV4cC5ydWxlRXhwQW5zd2Vycy5mb3JFYWNoKGFuc3dlciA9PiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkID4gYW5zd2VyLmFuc3dlcklkXHJcbiAgICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uR3JlYXRlclRoYW5PckVxdWFsKSB7XHJcblxyXG4gICAgICBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWQgPj0gYW5zd2VyLmFuc3dlcklkXHJcbiAgICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uTGVzc1RoYW4pIHtcclxuXHJcbiAgICAgIHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMuZm9yRWFjaChhbnN3ZXIgPT4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBhbnN3ZXJJZCA8IGFuc3dlci5hbnN3ZXJJZFxyXG4gICAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChyZXN1bHQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLkxlc3NUaGFuT3JFcXVhbCkge1xyXG5cclxuICAgICAgcnVsZUV4cC5ydWxlRXhwQW5zd2Vycy5mb3JFYWNoKGFuc3dlciA9PiB7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlcklkIDw9IGFuc3dlci5hbnN3ZXJJZFxyXG4gICAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChyZXN1bHQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLkVxdWFsKSB7XHJcblxyXG4gICAgICBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLmZvckVhY2goYW5zd2VyID0+IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWQgPT0gYW5zd2VyLmFuc3dlcklkXHJcbiAgICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uTm90RXF1YWwpIHtcclxuXHJcbiAgICAgIHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMuZm9yRWFjaChhbnN3ZXIgPT4ge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBhbnN3ZXJJZCAhPSBhbnN3ZXIuYW5zd2VySWRcclxuICAgICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSBlbHNlIGlmIChydWxlRXhwLmxvZ2ljUHJvcGVydHlJZCA9PSBMb2dpY1Byb3BlcnR5RW51bS5Jc0VtcHR5KSB7XHJcblxyXG4gICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWQgPT0gbnVsbFxyXG4gICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLklzTm90RW1wdHkpIHtcclxuXHJcbiAgICAgIHZhciByZXN1bHQgPSBhbnN3ZXJJZCAhPSBudWxsXHJcbiAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChyZXN1bHQpO1xyXG5cclxuICAgIH0gZWxzZSBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uQW55T2YpIHtcclxuXHJcbiAgICAgIHZhciBhbnN3ZXJJZEFycjogbnVtYmVyW10gPSBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLm1hcCh4ID0+IHguYW5zd2VySWQpO1xyXG4gICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWRBcnIuZmluZEluZGV4KHggPT4geCA9PSBhbnN3ZXJJZCkgPiAtMVxyXG4gICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLlRoZW4pIHtcclxuXHJcbiAgICAgIHZhciBhbnN3ZXJJZEFycjogbnVtYmVyW10gPSBydWxlRXhwLnJ1bGVFeHBBbnN3ZXJzLm1hcCh4ID0+IHguYW5zd2VySWQpO1xyXG4gICAgICB2YXIgcmVzdWx0ID0gYW5zd2VySWRBcnIuZmluZEluZGV4KHggPT4geCA9PSBhbnN3ZXJJZCkgPT0gLTFcclxuICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmIChydWxlRXhwUmVzdWx0QXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMubGVuZ3RoID09IDEpIHtcclxuICAgICAgcmV0dXJuIHJ1bGVFeHBSZXN1bHRBcnIuZmlsdGVyKHggPT4geCA9PSB0cnVlKS5sZW5ndGggPiAwXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChydWxlRXhwLm9wcG9yYXRvciA9PSBPcGVyYXRvckVudW0uT3IpIHtcclxuICAgICAgcmV0dXJuIHJ1bGVFeHBSZXN1bHRBcnIuZmlsdGVyKHggPT4geCA9PSB0cnVlKS5sZW5ndGggPiAwXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IGZhbHNlKS5sZW5ndGggPT0gMFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1J1bGVFeHBGb3JBbnN3ZXJJZEFycihydWxlRXhwOiBSdWxlRXhwRHRvLCBhbnN3ZXJJZEFycjogbnVtYmVyW10pIHtcclxuICAgIHZhciBydWxlRXhwUmVzdWx0QXJyOiBib29sZWFuW10gPSBbXTtcclxuXHJcbiAgICBhbnN3ZXJJZEFycj8uZm9yRWFjaChhbnN3ZXIgPT4ge1xyXG4gICAgICB2YXIgaXNSZXN1bHQgPSB0aGlzLmNoZWNrUnVsZUV4cEZvckFuc3dlcklkKHJ1bGVFeHAsIGFuc3dlcik7XHJcbiAgICAgIHJ1bGVFeHBSZXN1bHRBcnIucHVzaChpc1Jlc3VsdCk7XHJcbiAgICB9KVxyXG5cclxuICAgIGlmIChydWxlRXhwUmVzdWx0QXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJ1bGVFeHAucnVsZUV4cEFuc3dlcnMubGVuZ3RoID09IDEpIHtcclxuICAgICAgcmV0dXJuIHJ1bGVFeHBSZXN1bHRBcnIuZmlsdGVyKHggPT4geCA9PSB0cnVlKS5sZW5ndGggPiAwXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChydWxlRXhwLm9wcG9yYXRvciA9PSBPcGVyYXRvckVudW0uT3IpIHtcclxuICAgICAgcmV0dXJuIHJ1bGVFeHBSZXN1bHRBcnIuZmlsdGVyKHggPT4geCA9PSB0cnVlKS5sZW5ndGggPiAwXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IGZhbHNlKS5sZW5ndGggPT0gMFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1J1bGVFeHBGb3JBbnN3ZXJUZXh0KHJ1bGVFeHA6IFJ1bGVFeHBEdG8sIGFuc3dlcjogc3RyaW5nKSB7XHJcbiAgICB2YXIgcnVsZUV4cFJlc3VsdEFycjogYm9vbGVhbltdID0gW107XHJcbiAgICBpZiAocnVsZUV4cC5sb2dpY1Byb3BlcnR5SWQgPT0gTG9naWNQcm9wZXJ0eUVudW0uSXNFbXB0eSkge1xyXG5cclxuICAgICAgdmFyIHJlc3VsdCA9IGFuc3dlciA9PSBudWxsIHx8IGFuc3dlciA9PSAnJ1xyXG4gICAgICBydWxlRXhwUmVzdWx0QXJyLnB1c2gocmVzdWx0KTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKHJ1bGVFeHAubG9naWNQcm9wZXJ0eUlkID09IExvZ2ljUHJvcGVydHlFbnVtLklzTm90RW1wdHkpIHtcclxuXHJcbiAgICAgIHZhciByZXN1bHQgPSBhbnN3ZXIgIT0gbnVsbCAmJiBhbnN3ZXIgIT0gJydcclxuICAgICAgcnVsZUV4cFJlc3VsdEFyci5wdXNoKHJlc3VsdCk7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAocnVsZUV4cC5ydWxlRXhwQW5zd2Vycy5sZW5ndGggPT0gMSkge1xyXG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IHRydWUpLmxlbmd0aCA+IDBcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHJ1bGVFeHAub3Bwb3JhdG9yID09IE9wZXJhdG9yRW51bS5Pcikge1xyXG4gICAgICByZXR1cm4gcnVsZUV4cFJlc3VsdEFyci5maWx0ZXIoeCA9PiB4ID09IHRydWUpLmxlbmd0aCA+IDBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBydWxlRXhwUmVzdWx0QXJyLmZpbHRlcih4ID0+IHggPT0gZmFsc2UpLmxlbmd0aCA9PSAwXHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENoZWNrUnVsZXNVc2VjYXNlTW9kZWwge1xyXG4gIHJ1bGVFeHBzOiBSdWxlRXhwRHRvW107XHJcbiAgcXVlc3Rpb25zOiBRdWVzdGlvbkNoaWxkT2ZTdXJ2ZXJ5TGliRm9ybUludGVyZmFjZVtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2hlY2tSdWxlc1VzZWNhc2VSZXN1bHQge1xyXG4gIGV4cHJlc3Rpb25SZXN1bHRBcnI6IGJvb2xlYW5bXTtcclxufSJdfQ==