@cdktn/provider-pagerduty 15.0.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.
- package/.jsii +110408 -0
- package/LICENSE +355 -0
- package/README.md +94 -0
- package/lib/addon/index.d.ts +53 -0
- package/lib/addon/index.js +115 -0
- package/lib/alert-grouping-setting/index.d.ts +144 -0
- package/lib/alert-grouping-setting/index.js +366 -0
- package/lib/automation-actions-action/index.d.ts +232 -0
- package/lib/automation-actions-action/index.js +560 -0
- package/lib/automation-actions-action-service-association/index.d.ts +64 -0
- package/lib/automation-actions-action-service-association/index.js +129 -0
- package/lib/automation-actions-action-team-association/index.d.ts +64 -0
- package/lib/automation-actions-action-team-association/index.js +129 -0
- package/lib/automation-actions-runner/index.d.ts +102 -0
- package/lib/automation-actions-runner/index.js +224 -0
- package/lib/automation-actions-runner-team-association/index.d.ts +64 -0
- package/lib/automation-actions-runner-team-association/index.js +129 -0
- package/lib/business-service/index.d.ts +84 -0
- package/lib/business-service/index.js +190 -0
- package/lib/business-service-subscriber/index.d.ts +72 -0
- package/lib/business-service-subscriber/index.js +147 -0
- package/lib/data-pagerduty-alert-grouping-setting/index.d.ts +70 -0
- package/lib/data-pagerduty-alert-grouping-setting/index.js +190 -0
- package/lib/data-pagerduty-automation-actions-action/index.d.ts +186 -0
- package/lib/data-pagerduty-automation-actions-action/index.js +425 -0
- package/lib/data-pagerduty-automation-actions-runner/index.d.ts +78 -0
- package/lib/data-pagerduty-automation-actions-runner/index.js +172 -0
- package/lib/data-pagerduty-business-service/index.d.ts +46 -0
- package/lib/data-pagerduty-business-service/index.js +101 -0
- package/lib/data-pagerduty-escalation-policy/index.d.ts +47 -0
- package/lib/data-pagerduty-escalation-policy/index.js +105 -0
- package/lib/data-pagerduty-event-orchestration/index.d.ts +137 -0
- package/lib/data-pagerduty-event-orchestration/index.js +306 -0
- package/lib/data-pagerduty-event-orchestration-global-cache-variable/index.d.ts +138 -0
- package/lib/data-pagerduty-event-orchestration-global-cache-variable/index.js +315 -0
- package/lib/data-pagerduty-event-orchestration-integration/index.d.ts +100 -0
- package/lib/data-pagerduty-event-orchestration-integration/index.js +216 -0
- package/lib/data-pagerduty-event-orchestration-service-cache-variable/index.d.ts +138 -0
- package/lib/data-pagerduty-event-orchestration-service-cache-variable/index.js +315 -0
- package/lib/data-pagerduty-event-orchestrations/index.d.ts +161 -0
- package/lib/data-pagerduty-event-orchestrations/index.js +366 -0
- package/lib/data-pagerduty-extension-schema/index.d.ts +46 -0
- package/lib/data-pagerduty-extension-schema/index.js +101 -0
- package/lib/data-pagerduty-incident-custom-field/index.d.ts +60 -0
- package/lib/data-pagerduty-incident-custom-field/index.js +130 -0
- package/lib/data-pagerduty-incident-type/index.d.ts +50 -0
- package/lib/data-pagerduty-incident-type/index.js +117 -0
- package/lib/data-pagerduty-incident-type-custom-field/index.d.ts +115 -0
- package/lib/data-pagerduty-incident-type-custom-field/index.js +295 -0
- package/lib/data-pagerduty-incident-workflow/index.d.ts +57 -0
- package/lib/data-pagerduty-incident-workflow/index.js +118 -0
- package/lib/data-pagerduty-jira-cloud-account-mapping/index.d.ts +46 -0
- package/lib/data-pagerduty-jira-cloud-account-mapping/index.js +101 -0
- package/lib/data-pagerduty-license/index.d.ts +74 -0
- package/lib/data-pagerduty-license/index.js +170 -0
- package/lib/data-pagerduty-licenses/index.d.ts +92 -0
- package/lib/data-pagerduty-licenses/index.js +213 -0
- package/lib/data-pagerduty-priority/index.d.ts +48 -0
- package/lib/data-pagerduty-priority/index.js +101 -0
- package/lib/data-pagerduty-ruleset/index.d.ts +57 -0
- package/lib/data-pagerduty-ruleset/index.js +115 -0
- package/lib/data-pagerduty-schedule/index.d.ts +45 -0
- package/lib/data-pagerduty-schedule/index.js +97 -0
- package/lib/data-pagerduty-service/index.d.ts +86 -0
- package/lib/data-pagerduty-service/index.js +205 -0
- package/lib/data-pagerduty-service-custom-field/index.d.ts +92 -0
- package/lib/data-pagerduty-service-custom-field/index.js +221 -0
- package/lib/data-pagerduty-service-custom-field-value/index.d.ts +88 -0
- package/lib/data-pagerduty-service-custom-field-value/index.js +205 -0
- package/lib/data-pagerduty-service-integration/index.d.ts +56 -0
- package/lib/data-pagerduty-service-integration/index.js +119 -0
- package/lib/data-pagerduty-standards/index.d.ts +154 -0
- package/lib/data-pagerduty-standards/index.js +361 -0
- package/lib/data-pagerduty-standards-resource-scores/index.d.ts +112 -0
- package/lib/data-pagerduty-standards-resource-scores/index.js +268 -0
- package/lib/data-pagerduty-standards-resources-scores/index.d.ts +144 -0
- package/lib/data-pagerduty-standards-resources-scores/index.js +352 -0
- package/lib/data-pagerduty-tag/index.d.ts +47 -0
- package/lib/data-pagerduty-tag/index.js +97 -0
- package/lib/data-pagerduty-team/index.d.ts +77 -0
- package/lib/data-pagerduty-team/index.js +157 -0
- package/lib/data-pagerduty-team-members/index.d.ts +95 -0
- package/lib/data-pagerduty-team-members/index.js +203 -0
- package/lib/data-pagerduty-teams/index.d.ts +96 -0
- package/lib/data-pagerduty-teams/index.js +206 -0
- package/lib/data-pagerduty-user/index.d.ts +50 -0
- package/lib/data-pagerduty-user/index.js +117 -0
- package/lib/data-pagerduty-user-contact-method/index.d.ts +82 -0
- package/lib/data-pagerduty-user-contact-method/index.js +174 -0
- package/lib/data-pagerduty-users/index.d.ts +87 -0
- package/lib/data-pagerduty-users/index.js +208 -0
- package/lib/data-pagerduty-vendor/index.d.ts +46 -0
- package/lib/data-pagerduty-vendor/index.js +101 -0
- package/lib/enablement/index.d.ts +70 -0
- package/lib/enablement/index.js +151 -0
- package/lib/escalation-policy/index.d.ts +232 -0
- package/lib/escalation-policy/index.js +565 -0
- package/lib/event-orchestration/index.d.ts +156 -0
- package/lib/event-orchestration/index.js +352 -0
- package/lib/event-orchestration-global/index.d.ts +1253 -0
- package/lib/event-orchestration-global/index.js +3350 -0
- package/lib/event-orchestration-global-cache-variable/index.d.ts +182 -0
- package/lib/event-orchestration-global-cache-variable/index.js +459 -0
- package/lib/event-orchestration-integration/index.d.ts +88 -0
- package/lib/event-orchestration-integration/index.js +196 -0
- package/lib/event-orchestration-router/index.d.ts +363 -0
- package/lib/event-orchestration-router/index.js +954 -0
- package/lib/event-orchestration-service/index.d.ts +1328 -0
- package/lib/event-orchestration-service/index.js +3573 -0
- package/lib/event-orchestration-service-cache-variable/index.d.ts +182 -0
- package/lib/event-orchestration-service-cache-variable/index.js +459 -0
- package/lib/event-orchestration-unrouted/index.d.ts +653 -0
- package/lib/event-orchestration-unrouted/index.js +1722 -0
- package/lib/event-rule/index.d.ts +74 -0
- package/lib/event-rule/index.js +154 -0
- package/lib/extension/index.d.ts +91 -0
- package/lib/extension/index.js +204 -0
- package/lib/extension-servicenow/index.d.ts +138 -0
- package/lib/extension-servicenow/index.js +308 -0
- package/lib/incident-custom-field/index.d.ts +98 -0
- package/lib/incident-custom-field/index.js +207 -0
- package/lib/incident-custom-field-option/index.d.ts +72 -0
- package/lib/incident-custom-field-option/index.js +147 -0
- package/lib/incident-type/index.d.ts +80 -0
- package/lib/incident-type/index.js +176 -0
- package/lib/incident-type-custom-field/index.d.ts +117 -0
- package/lib/incident-type-custom-field/index.js +265 -0
- package/lib/incident-workflow/index.d.ts +378 -0
- package/lib/incident-workflow/index.js +943 -0
- package/lib/incident-workflow-trigger/index.d.ts +133 -0
- package/lib/incident-workflow-trigger/index.js +314 -0
- package/lib/index.d.ts +91 -0
- package/lib/index.js +97 -0
- package/lib/jira-cloud-account-mapping-rule/index.d.ts +559 -0
- package/lib/jira-cloud-account-mapping-rule/index.js +1578 -0
- package/lib/lazy-index.d.ts +4 -0
- package/lib/lazy-index.js +94 -0
- package/lib/maintenance-window/index.d.ts +81 -0
- package/lib/maintenance-window/index.js +168 -0
- package/lib/provider/index.d.ts +128 -0
- package/lib/provider/index.js +279 -0
- package/lib/response-play/index.d.ts +426 -0
- package/lib/response-play/index.js +1009 -0
- package/lib/ruleset/index.d.ts +94 -0
- package/lib/ruleset/index.js +215 -0
- package/lib/ruleset-rule/index.d.ts +1026 -0
- package/lib/ruleset-rule/index.js +2670 -0
- package/lib/schedule/index.d.ts +299 -0
- package/lib/schedule/index.js +740 -0
- package/lib/service/index.d.ts +592 -0
- package/lib/service/index.js +1608 -0
- package/lib/service-custom-field/index.d.ts +174 -0
- package/lib/service-custom-field/index.js +379 -0
- package/lib/service-custom-field-value/index.d.ts +117 -0
- package/lib/service-custom-field-value/index.js +269 -0
- package/lib/service-dependency/index.d.ts +216 -0
- package/lib/service-dependency/index.js +525 -0
- package/lib/service-event-rule/index.d.ts +964 -0
- package/lib/service-event-rule/index.js +2512 -0
- package/lib/service-integration/index.d.ts +546 -0
- package/lib/service-integration/index.js +1404 -0
- package/lib/slack-connection/index.d.ts +159 -0
- package/lib/slack-connection/index.js +369 -0
- package/lib/tag/index.d.ts +47 -0
- package/lib/tag/index.js +105 -0
- package/lib/tag-assignment/index.d.ts +61 -0
- package/lib/tag-assignment/index.js +130 -0
- package/lib/team/index.d.ts +73 -0
- package/lib/team/index.js +161 -0
- package/lib/team-membership/index.d.ts +62 -0
- package/lib/team-membership/index.js +136 -0
- package/lib/user/index.d.ts +130 -0
- package/lib/user/index.js +291 -0
- package/lib/user-contact-method/index.d.ts +98 -0
- package/lib/user-contact-method/index.js +219 -0
- package/lib/user-handoff-notification-rule/index.d.ts +131 -0
- package/lib/user-handoff-notification-rule/index.js +285 -0
- package/lib/user-notification-rule/index.d.ts +105 -0
- package/lib/user-notification-rule/index.js +258 -0
- package/lib/webhook-subscription/index.d.ts +276 -0
- package/lib/webhook-subscription/index.js +664 -0
- package/package.json +155 -0
|
@@ -0,0 +1,954 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.EventOrchestrationRouter = exports.EventOrchestrationRouterSetOutputReference = exports.EventOrchestrationRouterSetRuleList = exports.EventOrchestrationRouterSetRuleOutputReference = exports.EventOrchestrationRouterSetRuleConditionList = exports.EventOrchestrationRouterSetRuleConditionOutputReference = exports.EventOrchestrationRouterSetRuleActionsOutputReference = exports.EventOrchestrationRouterSetRuleActionsDynamicRouteToList = exports.EventOrchestrationRouterSetRuleActionsDynamicRouteToOutputReference = exports.EventOrchestrationRouterCatchAllOutputReference = exports.EventOrchestrationRouterCatchAllActionsOutputReference = void 0;
|
|
5
|
+
exports.eventOrchestrationRouterCatchAllActionsToTerraform = eventOrchestrationRouterCatchAllActionsToTerraform;
|
|
6
|
+
exports.eventOrchestrationRouterCatchAllActionsToHclTerraform = eventOrchestrationRouterCatchAllActionsToHclTerraform;
|
|
7
|
+
exports.eventOrchestrationRouterCatchAllToTerraform = eventOrchestrationRouterCatchAllToTerraform;
|
|
8
|
+
exports.eventOrchestrationRouterCatchAllToHclTerraform = eventOrchestrationRouterCatchAllToHclTerraform;
|
|
9
|
+
exports.eventOrchestrationRouterSetRuleActionsDynamicRouteToToTerraform = eventOrchestrationRouterSetRuleActionsDynamicRouteToToTerraform;
|
|
10
|
+
exports.eventOrchestrationRouterSetRuleActionsDynamicRouteToToHclTerraform = eventOrchestrationRouterSetRuleActionsDynamicRouteToToHclTerraform;
|
|
11
|
+
exports.eventOrchestrationRouterSetRuleActionsToTerraform = eventOrchestrationRouterSetRuleActionsToTerraform;
|
|
12
|
+
exports.eventOrchestrationRouterSetRuleActionsToHclTerraform = eventOrchestrationRouterSetRuleActionsToHclTerraform;
|
|
13
|
+
exports.eventOrchestrationRouterSetRuleConditionToTerraform = eventOrchestrationRouterSetRuleConditionToTerraform;
|
|
14
|
+
exports.eventOrchestrationRouterSetRuleConditionToHclTerraform = eventOrchestrationRouterSetRuleConditionToHclTerraform;
|
|
15
|
+
exports.eventOrchestrationRouterSetRuleToTerraform = eventOrchestrationRouterSetRuleToTerraform;
|
|
16
|
+
exports.eventOrchestrationRouterSetRuleToHclTerraform = eventOrchestrationRouterSetRuleToHclTerraform;
|
|
17
|
+
exports.eventOrchestrationRouterSetToTerraform = eventOrchestrationRouterSetToTerraform;
|
|
18
|
+
exports.eventOrchestrationRouterSetToHclTerraform = eventOrchestrationRouterSetToHclTerraform;
|
|
19
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
20
|
+
const cdktn = require("cdktn");
|
|
21
|
+
function eventOrchestrationRouterCatchAllActionsToTerraform(struct) {
|
|
22
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
23
|
+
return struct;
|
|
24
|
+
}
|
|
25
|
+
if (cdktn.isComplexElement(struct)) {
|
|
26
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
route_to: cdktn.stringToTerraform(struct.routeTo),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function eventOrchestrationRouterCatchAllActionsToHclTerraform(struct) {
|
|
33
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
34
|
+
return struct;
|
|
35
|
+
}
|
|
36
|
+
if (cdktn.isComplexElement(struct)) {
|
|
37
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
38
|
+
}
|
|
39
|
+
const attrs = {
|
|
40
|
+
route_to: {
|
|
41
|
+
value: cdktn.stringToHclTerraform(struct.routeTo),
|
|
42
|
+
isBlock: false,
|
|
43
|
+
type: "simple",
|
|
44
|
+
storageClassType: "string",
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
// remove undefined attributes
|
|
48
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
49
|
+
}
|
|
50
|
+
class EventOrchestrationRouterCatchAllActionsOutputReference extends cdktn.ComplexObject {
|
|
51
|
+
/**
|
|
52
|
+
* @param terraformResource The parent resource
|
|
53
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
54
|
+
*/
|
|
55
|
+
constructor(terraformResource, terraformAttribute) {
|
|
56
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
57
|
+
this.isEmptyObject = false;
|
|
58
|
+
}
|
|
59
|
+
get internalValue() {
|
|
60
|
+
let hasAnyValues = this.isEmptyObject;
|
|
61
|
+
const internalValueResult = {};
|
|
62
|
+
if (this._routeTo !== undefined) {
|
|
63
|
+
hasAnyValues = true;
|
|
64
|
+
internalValueResult.routeTo = this._routeTo;
|
|
65
|
+
}
|
|
66
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
67
|
+
}
|
|
68
|
+
set internalValue(value) {
|
|
69
|
+
if (value === undefined) {
|
|
70
|
+
this.isEmptyObject = false;
|
|
71
|
+
this._routeTo = undefined;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
75
|
+
this._routeTo = value.routeTo;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
get routeTo() {
|
|
79
|
+
return this.getStringAttribute('route_to');
|
|
80
|
+
}
|
|
81
|
+
set routeTo(value) {
|
|
82
|
+
this._routeTo = value;
|
|
83
|
+
}
|
|
84
|
+
// Temporarily expose input value. Use with caution.
|
|
85
|
+
get routeToInput() {
|
|
86
|
+
return this._routeTo;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.EventOrchestrationRouterCatchAllActionsOutputReference = EventOrchestrationRouterCatchAllActionsOutputReference;
|
|
90
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
91
|
+
EventOrchestrationRouterCatchAllActionsOutputReference[_a] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouterCatchAllActionsOutputReference", version: "15.0.0" };
|
|
92
|
+
function eventOrchestrationRouterCatchAllToTerraform(struct) {
|
|
93
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
94
|
+
return struct;
|
|
95
|
+
}
|
|
96
|
+
if (cdktn.isComplexElement(struct)) {
|
|
97
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
actions: eventOrchestrationRouterCatchAllActionsToTerraform(struct.actions),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
function eventOrchestrationRouterCatchAllToHclTerraform(struct) {
|
|
104
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
105
|
+
return struct;
|
|
106
|
+
}
|
|
107
|
+
if (cdktn.isComplexElement(struct)) {
|
|
108
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
109
|
+
}
|
|
110
|
+
const attrs = {
|
|
111
|
+
actions: {
|
|
112
|
+
value: eventOrchestrationRouterCatchAllActionsToHclTerraform(struct.actions),
|
|
113
|
+
isBlock: true,
|
|
114
|
+
type: "list",
|
|
115
|
+
storageClassType: "EventOrchestrationRouterCatchAllActionsList",
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
// remove undefined attributes
|
|
119
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
120
|
+
}
|
|
121
|
+
class EventOrchestrationRouterCatchAllOutputReference extends cdktn.ComplexObject {
|
|
122
|
+
/**
|
|
123
|
+
* @param terraformResource The parent resource
|
|
124
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
125
|
+
*/
|
|
126
|
+
constructor(terraformResource, terraformAttribute) {
|
|
127
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
128
|
+
this.isEmptyObject = false;
|
|
129
|
+
// actions - computed: false, optional: false, required: true
|
|
130
|
+
this._actions = new EventOrchestrationRouterCatchAllActionsOutputReference(this, "actions");
|
|
131
|
+
}
|
|
132
|
+
get internalValue() {
|
|
133
|
+
let hasAnyValues = this.isEmptyObject;
|
|
134
|
+
const internalValueResult = {};
|
|
135
|
+
if (this._actions?.internalValue !== undefined) {
|
|
136
|
+
hasAnyValues = true;
|
|
137
|
+
internalValueResult.actions = this._actions?.internalValue;
|
|
138
|
+
}
|
|
139
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
140
|
+
}
|
|
141
|
+
set internalValue(value) {
|
|
142
|
+
if (value === undefined) {
|
|
143
|
+
this.isEmptyObject = false;
|
|
144
|
+
this._actions.internalValue = undefined;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
148
|
+
this._actions.internalValue = value.actions;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
get actions() {
|
|
152
|
+
return this._actions;
|
|
153
|
+
}
|
|
154
|
+
putActions(value) {
|
|
155
|
+
this._actions.internalValue = value;
|
|
156
|
+
}
|
|
157
|
+
// Temporarily expose input value. Use with caution.
|
|
158
|
+
get actionsInput() {
|
|
159
|
+
return this._actions.internalValue;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.EventOrchestrationRouterCatchAllOutputReference = EventOrchestrationRouterCatchAllOutputReference;
|
|
163
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
164
|
+
EventOrchestrationRouterCatchAllOutputReference[_b] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouterCatchAllOutputReference", version: "15.0.0" };
|
|
165
|
+
function eventOrchestrationRouterSetRuleActionsDynamicRouteToToTerraform(struct) {
|
|
166
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
167
|
+
return struct;
|
|
168
|
+
}
|
|
169
|
+
if (cdktn.isComplexElement(struct)) {
|
|
170
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
lookup_by: cdktn.stringToTerraform(struct.lookupBy),
|
|
174
|
+
regex: cdktn.stringToTerraform(struct.regex),
|
|
175
|
+
source: cdktn.stringToTerraform(struct.source),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function eventOrchestrationRouterSetRuleActionsDynamicRouteToToHclTerraform(struct) {
|
|
179
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
180
|
+
return struct;
|
|
181
|
+
}
|
|
182
|
+
if (cdktn.isComplexElement(struct)) {
|
|
183
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
184
|
+
}
|
|
185
|
+
const attrs = {
|
|
186
|
+
lookup_by: {
|
|
187
|
+
value: cdktn.stringToHclTerraform(struct.lookupBy),
|
|
188
|
+
isBlock: false,
|
|
189
|
+
type: "simple",
|
|
190
|
+
storageClassType: "string",
|
|
191
|
+
},
|
|
192
|
+
regex: {
|
|
193
|
+
value: cdktn.stringToHclTerraform(struct.regex),
|
|
194
|
+
isBlock: false,
|
|
195
|
+
type: "simple",
|
|
196
|
+
storageClassType: "string",
|
|
197
|
+
},
|
|
198
|
+
source: {
|
|
199
|
+
value: cdktn.stringToHclTerraform(struct.source),
|
|
200
|
+
isBlock: false,
|
|
201
|
+
type: "simple",
|
|
202
|
+
storageClassType: "string",
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
// remove undefined attributes
|
|
206
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
207
|
+
}
|
|
208
|
+
class EventOrchestrationRouterSetRuleActionsDynamicRouteToOutputReference extends cdktn.ComplexObject {
|
|
209
|
+
/**
|
|
210
|
+
* @param terraformResource The parent resource
|
|
211
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
212
|
+
* @param complexObjectIndex the index of this item in the list
|
|
213
|
+
* @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
214
|
+
*/
|
|
215
|
+
constructor(terraformResource, terraformAttribute, complexObjectIndex, complexObjectIsFromSet) {
|
|
216
|
+
super(terraformResource, terraformAttribute, complexObjectIsFromSet, complexObjectIndex);
|
|
217
|
+
this.isEmptyObject = false;
|
|
218
|
+
}
|
|
219
|
+
get internalValue() {
|
|
220
|
+
if (this.resolvableValue) {
|
|
221
|
+
return this.resolvableValue;
|
|
222
|
+
}
|
|
223
|
+
let hasAnyValues = this.isEmptyObject;
|
|
224
|
+
const internalValueResult = {};
|
|
225
|
+
if (this._lookupBy !== undefined) {
|
|
226
|
+
hasAnyValues = true;
|
|
227
|
+
internalValueResult.lookupBy = this._lookupBy;
|
|
228
|
+
}
|
|
229
|
+
if (this._regex !== undefined) {
|
|
230
|
+
hasAnyValues = true;
|
|
231
|
+
internalValueResult.regex = this._regex;
|
|
232
|
+
}
|
|
233
|
+
if (this._source !== undefined) {
|
|
234
|
+
hasAnyValues = true;
|
|
235
|
+
internalValueResult.source = this._source;
|
|
236
|
+
}
|
|
237
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
238
|
+
}
|
|
239
|
+
set internalValue(value) {
|
|
240
|
+
if (value === undefined) {
|
|
241
|
+
this.isEmptyObject = false;
|
|
242
|
+
this.resolvableValue = undefined;
|
|
243
|
+
this._lookupBy = undefined;
|
|
244
|
+
this._regex = undefined;
|
|
245
|
+
this._source = undefined;
|
|
246
|
+
}
|
|
247
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
248
|
+
this.isEmptyObject = false;
|
|
249
|
+
this.resolvableValue = value;
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
253
|
+
this.resolvableValue = undefined;
|
|
254
|
+
this._lookupBy = value.lookupBy;
|
|
255
|
+
this._regex = value.regex;
|
|
256
|
+
this._source = value.source;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
get lookupBy() {
|
|
260
|
+
return this.getStringAttribute('lookup_by');
|
|
261
|
+
}
|
|
262
|
+
set lookupBy(value) {
|
|
263
|
+
this._lookupBy = value;
|
|
264
|
+
}
|
|
265
|
+
// Temporarily expose input value. Use with caution.
|
|
266
|
+
get lookupByInput() {
|
|
267
|
+
return this._lookupBy;
|
|
268
|
+
}
|
|
269
|
+
get regex() {
|
|
270
|
+
return this.getStringAttribute('regex');
|
|
271
|
+
}
|
|
272
|
+
set regex(value) {
|
|
273
|
+
this._regex = value;
|
|
274
|
+
}
|
|
275
|
+
// Temporarily expose input value. Use with caution.
|
|
276
|
+
get regexInput() {
|
|
277
|
+
return this._regex;
|
|
278
|
+
}
|
|
279
|
+
get source() {
|
|
280
|
+
return this.getStringAttribute('source');
|
|
281
|
+
}
|
|
282
|
+
set source(value) {
|
|
283
|
+
this._source = value;
|
|
284
|
+
}
|
|
285
|
+
// Temporarily expose input value. Use with caution.
|
|
286
|
+
get sourceInput() {
|
|
287
|
+
return this._source;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
exports.EventOrchestrationRouterSetRuleActionsDynamicRouteToOutputReference = EventOrchestrationRouterSetRuleActionsDynamicRouteToOutputReference;
|
|
291
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
292
|
+
EventOrchestrationRouterSetRuleActionsDynamicRouteToOutputReference[_c] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouterSetRuleActionsDynamicRouteToOutputReference", version: "15.0.0" };
|
|
293
|
+
class EventOrchestrationRouterSetRuleActionsDynamicRouteToList extends cdktn.ComplexList {
|
|
294
|
+
/**
|
|
295
|
+
* @param terraformResource The parent resource
|
|
296
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
297
|
+
* @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
298
|
+
*/
|
|
299
|
+
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
300
|
+
super(terraformResource, terraformAttribute, wrapsSet);
|
|
301
|
+
this.terraformResource = terraformResource;
|
|
302
|
+
this.terraformAttribute = terraformAttribute;
|
|
303
|
+
this.wrapsSet = wrapsSet;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* @param index the index of the item to return
|
|
307
|
+
*/
|
|
308
|
+
get(index) {
|
|
309
|
+
return new EventOrchestrationRouterSetRuleActionsDynamicRouteToOutputReference(this.terraformResource, this.terraformAttribute, index, this.wrapsSet);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
exports.EventOrchestrationRouterSetRuleActionsDynamicRouteToList = EventOrchestrationRouterSetRuleActionsDynamicRouteToList;
|
|
313
|
+
_d = JSII_RTTI_SYMBOL_1;
|
|
314
|
+
EventOrchestrationRouterSetRuleActionsDynamicRouteToList[_d] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouterSetRuleActionsDynamicRouteToList", version: "15.0.0" };
|
|
315
|
+
function eventOrchestrationRouterSetRuleActionsToTerraform(struct) {
|
|
316
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
317
|
+
return struct;
|
|
318
|
+
}
|
|
319
|
+
if (cdktn.isComplexElement(struct)) {
|
|
320
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
321
|
+
}
|
|
322
|
+
return {
|
|
323
|
+
route_to: cdktn.stringToTerraform(struct.routeTo),
|
|
324
|
+
dynamic_route_to: cdktn.listMapper(eventOrchestrationRouterSetRuleActionsDynamicRouteToToTerraform, true)(struct.dynamicRouteTo),
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
function eventOrchestrationRouterSetRuleActionsToHclTerraform(struct) {
|
|
328
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
329
|
+
return struct;
|
|
330
|
+
}
|
|
331
|
+
if (cdktn.isComplexElement(struct)) {
|
|
332
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
333
|
+
}
|
|
334
|
+
const attrs = {
|
|
335
|
+
route_to: {
|
|
336
|
+
value: cdktn.stringToHclTerraform(struct.routeTo),
|
|
337
|
+
isBlock: false,
|
|
338
|
+
type: "simple",
|
|
339
|
+
storageClassType: "string",
|
|
340
|
+
},
|
|
341
|
+
dynamic_route_to: {
|
|
342
|
+
value: cdktn.listMapperHcl(eventOrchestrationRouterSetRuleActionsDynamicRouteToToHclTerraform, true)(struct.dynamicRouteTo),
|
|
343
|
+
isBlock: true,
|
|
344
|
+
type: "list",
|
|
345
|
+
storageClassType: "EventOrchestrationRouterSetRuleActionsDynamicRouteToList",
|
|
346
|
+
},
|
|
347
|
+
};
|
|
348
|
+
// remove undefined attributes
|
|
349
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
350
|
+
}
|
|
351
|
+
class EventOrchestrationRouterSetRuleActionsOutputReference extends cdktn.ComplexObject {
|
|
352
|
+
/**
|
|
353
|
+
* @param terraformResource The parent resource
|
|
354
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
355
|
+
*/
|
|
356
|
+
constructor(terraformResource, terraformAttribute) {
|
|
357
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
358
|
+
this.isEmptyObject = false;
|
|
359
|
+
// dynamic_route_to - computed: false, optional: true, required: false
|
|
360
|
+
this._dynamicRouteTo = new EventOrchestrationRouterSetRuleActionsDynamicRouteToList(this, "dynamic_route_to", false);
|
|
361
|
+
}
|
|
362
|
+
get internalValue() {
|
|
363
|
+
let hasAnyValues = this.isEmptyObject;
|
|
364
|
+
const internalValueResult = {};
|
|
365
|
+
if (this._routeTo !== undefined) {
|
|
366
|
+
hasAnyValues = true;
|
|
367
|
+
internalValueResult.routeTo = this._routeTo;
|
|
368
|
+
}
|
|
369
|
+
if (this._dynamicRouteTo?.internalValue !== undefined) {
|
|
370
|
+
hasAnyValues = true;
|
|
371
|
+
internalValueResult.dynamicRouteTo = this._dynamicRouteTo?.internalValue;
|
|
372
|
+
}
|
|
373
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
374
|
+
}
|
|
375
|
+
set internalValue(value) {
|
|
376
|
+
if (value === undefined) {
|
|
377
|
+
this.isEmptyObject = false;
|
|
378
|
+
this._routeTo = undefined;
|
|
379
|
+
this._dynamicRouteTo.internalValue = undefined;
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
383
|
+
this._routeTo = value.routeTo;
|
|
384
|
+
this._dynamicRouteTo.internalValue = value.dynamicRouteTo;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
get routeTo() {
|
|
388
|
+
return this.getStringAttribute('route_to');
|
|
389
|
+
}
|
|
390
|
+
set routeTo(value) {
|
|
391
|
+
this._routeTo = value;
|
|
392
|
+
}
|
|
393
|
+
resetRouteTo() {
|
|
394
|
+
this._routeTo = undefined;
|
|
395
|
+
}
|
|
396
|
+
// Temporarily expose input value. Use with caution.
|
|
397
|
+
get routeToInput() {
|
|
398
|
+
return this._routeTo;
|
|
399
|
+
}
|
|
400
|
+
get dynamicRouteTo() {
|
|
401
|
+
return this._dynamicRouteTo;
|
|
402
|
+
}
|
|
403
|
+
putDynamicRouteTo(value) {
|
|
404
|
+
this._dynamicRouteTo.internalValue = value;
|
|
405
|
+
}
|
|
406
|
+
resetDynamicRouteTo() {
|
|
407
|
+
this._dynamicRouteTo.internalValue = undefined;
|
|
408
|
+
}
|
|
409
|
+
// Temporarily expose input value. Use with caution.
|
|
410
|
+
get dynamicRouteToInput() {
|
|
411
|
+
return this._dynamicRouteTo.internalValue;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
exports.EventOrchestrationRouterSetRuleActionsOutputReference = EventOrchestrationRouterSetRuleActionsOutputReference;
|
|
415
|
+
_e = JSII_RTTI_SYMBOL_1;
|
|
416
|
+
EventOrchestrationRouterSetRuleActionsOutputReference[_e] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouterSetRuleActionsOutputReference", version: "15.0.0" };
|
|
417
|
+
function eventOrchestrationRouterSetRuleConditionToTerraform(struct) {
|
|
418
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
419
|
+
return struct;
|
|
420
|
+
}
|
|
421
|
+
if (cdktn.isComplexElement(struct)) {
|
|
422
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
423
|
+
}
|
|
424
|
+
return {
|
|
425
|
+
expression: cdktn.stringToTerraform(struct.expression),
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
function eventOrchestrationRouterSetRuleConditionToHclTerraform(struct) {
|
|
429
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
430
|
+
return struct;
|
|
431
|
+
}
|
|
432
|
+
if (cdktn.isComplexElement(struct)) {
|
|
433
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
434
|
+
}
|
|
435
|
+
const attrs = {
|
|
436
|
+
expression: {
|
|
437
|
+
value: cdktn.stringToHclTerraform(struct.expression),
|
|
438
|
+
isBlock: false,
|
|
439
|
+
type: "simple",
|
|
440
|
+
storageClassType: "string",
|
|
441
|
+
},
|
|
442
|
+
};
|
|
443
|
+
// remove undefined attributes
|
|
444
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
445
|
+
}
|
|
446
|
+
class EventOrchestrationRouterSetRuleConditionOutputReference extends cdktn.ComplexObject {
|
|
447
|
+
/**
|
|
448
|
+
* @param terraformResource The parent resource
|
|
449
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
450
|
+
* @param complexObjectIndex the index of this item in the list
|
|
451
|
+
* @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
452
|
+
*/
|
|
453
|
+
constructor(terraformResource, terraformAttribute, complexObjectIndex, complexObjectIsFromSet) {
|
|
454
|
+
super(terraformResource, terraformAttribute, complexObjectIsFromSet, complexObjectIndex);
|
|
455
|
+
this.isEmptyObject = false;
|
|
456
|
+
}
|
|
457
|
+
get internalValue() {
|
|
458
|
+
if (this.resolvableValue) {
|
|
459
|
+
return this.resolvableValue;
|
|
460
|
+
}
|
|
461
|
+
let hasAnyValues = this.isEmptyObject;
|
|
462
|
+
const internalValueResult = {};
|
|
463
|
+
if (this._expression !== undefined) {
|
|
464
|
+
hasAnyValues = true;
|
|
465
|
+
internalValueResult.expression = this._expression;
|
|
466
|
+
}
|
|
467
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
468
|
+
}
|
|
469
|
+
set internalValue(value) {
|
|
470
|
+
if (value === undefined) {
|
|
471
|
+
this.isEmptyObject = false;
|
|
472
|
+
this.resolvableValue = undefined;
|
|
473
|
+
this._expression = undefined;
|
|
474
|
+
}
|
|
475
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
476
|
+
this.isEmptyObject = false;
|
|
477
|
+
this.resolvableValue = value;
|
|
478
|
+
}
|
|
479
|
+
else {
|
|
480
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
481
|
+
this.resolvableValue = undefined;
|
|
482
|
+
this._expression = value.expression;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
get expression() {
|
|
486
|
+
return this.getStringAttribute('expression');
|
|
487
|
+
}
|
|
488
|
+
set expression(value) {
|
|
489
|
+
this._expression = value;
|
|
490
|
+
}
|
|
491
|
+
// Temporarily expose input value. Use with caution.
|
|
492
|
+
get expressionInput() {
|
|
493
|
+
return this._expression;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
exports.EventOrchestrationRouterSetRuleConditionOutputReference = EventOrchestrationRouterSetRuleConditionOutputReference;
|
|
497
|
+
_f = JSII_RTTI_SYMBOL_1;
|
|
498
|
+
EventOrchestrationRouterSetRuleConditionOutputReference[_f] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouterSetRuleConditionOutputReference", version: "15.0.0" };
|
|
499
|
+
class EventOrchestrationRouterSetRuleConditionList extends cdktn.ComplexList {
|
|
500
|
+
/**
|
|
501
|
+
* @param terraformResource The parent resource
|
|
502
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
503
|
+
* @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
504
|
+
*/
|
|
505
|
+
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
506
|
+
super(terraformResource, terraformAttribute, wrapsSet);
|
|
507
|
+
this.terraformResource = terraformResource;
|
|
508
|
+
this.terraformAttribute = terraformAttribute;
|
|
509
|
+
this.wrapsSet = wrapsSet;
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* @param index the index of the item to return
|
|
513
|
+
*/
|
|
514
|
+
get(index) {
|
|
515
|
+
return new EventOrchestrationRouterSetRuleConditionOutputReference(this.terraformResource, this.terraformAttribute, index, this.wrapsSet);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
exports.EventOrchestrationRouterSetRuleConditionList = EventOrchestrationRouterSetRuleConditionList;
|
|
519
|
+
_g = JSII_RTTI_SYMBOL_1;
|
|
520
|
+
EventOrchestrationRouterSetRuleConditionList[_g] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouterSetRuleConditionList", version: "15.0.0" };
|
|
521
|
+
function eventOrchestrationRouterSetRuleToTerraform(struct) {
|
|
522
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
523
|
+
return struct;
|
|
524
|
+
}
|
|
525
|
+
if (cdktn.isComplexElement(struct)) {
|
|
526
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
527
|
+
}
|
|
528
|
+
return {
|
|
529
|
+
disabled: cdktn.booleanToTerraform(struct.disabled),
|
|
530
|
+
label: cdktn.stringToTerraform(struct.label),
|
|
531
|
+
actions: eventOrchestrationRouterSetRuleActionsToTerraform(struct.actions),
|
|
532
|
+
condition: cdktn.listMapper(eventOrchestrationRouterSetRuleConditionToTerraform, true)(struct.condition),
|
|
533
|
+
};
|
|
534
|
+
}
|
|
535
|
+
function eventOrchestrationRouterSetRuleToHclTerraform(struct) {
|
|
536
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
537
|
+
return struct;
|
|
538
|
+
}
|
|
539
|
+
if (cdktn.isComplexElement(struct)) {
|
|
540
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
541
|
+
}
|
|
542
|
+
const attrs = {
|
|
543
|
+
disabled: {
|
|
544
|
+
value: cdktn.booleanToHclTerraform(struct.disabled),
|
|
545
|
+
isBlock: false,
|
|
546
|
+
type: "simple",
|
|
547
|
+
storageClassType: "boolean",
|
|
548
|
+
},
|
|
549
|
+
label: {
|
|
550
|
+
value: cdktn.stringToHclTerraform(struct.label),
|
|
551
|
+
isBlock: false,
|
|
552
|
+
type: "simple",
|
|
553
|
+
storageClassType: "string",
|
|
554
|
+
},
|
|
555
|
+
actions: {
|
|
556
|
+
value: eventOrchestrationRouterSetRuleActionsToHclTerraform(struct.actions),
|
|
557
|
+
isBlock: true,
|
|
558
|
+
type: "list",
|
|
559
|
+
storageClassType: "EventOrchestrationRouterSetRuleActionsList",
|
|
560
|
+
},
|
|
561
|
+
condition: {
|
|
562
|
+
value: cdktn.listMapperHcl(eventOrchestrationRouterSetRuleConditionToHclTerraform, true)(struct.condition),
|
|
563
|
+
isBlock: true,
|
|
564
|
+
type: "list",
|
|
565
|
+
storageClassType: "EventOrchestrationRouterSetRuleConditionList",
|
|
566
|
+
},
|
|
567
|
+
};
|
|
568
|
+
// remove undefined attributes
|
|
569
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
570
|
+
}
|
|
571
|
+
class EventOrchestrationRouterSetRuleOutputReference extends cdktn.ComplexObject {
|
|
572
|
+
/**
|
|
573
|
+
* @param terraformResource The parent resource
|
|
574
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
575
|
+
* @param complexObjectIndex the index of this item in the list
|
|
576
|
+
* @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
577
|
+
*/
|
|
578
|
+
constructor(terraformResource, terraformAttribute, complexObjectIndex, complexObjectIsFromSet) {
|
|
579
|
+
super(terraformResource, terraformAttribute, complexObjectIsFromSet, complexObjectIndex);
|
|
580
|
+
this.isEmptyObject = false;
|
|
581
|
+
// actions - computed: false, optional: false, required: true
|
|
582
|
+
this._actions = new EventOrchestrationRouterSetRuleActionsOutputReference(this, "actions");
|
|
583
|
+
// condition - computed: false, optional: true, required: false
|
|
584
|
+
this._condition = new EventOrchestrationRouterSetRuleConditionList(this, "condition", false);
|
|
585
|
+
}
|
|
586
|
+
get internalValue() {
|
|
587
|
+
if (this.resolvableValue) {
|
|
588
|
+
return this.resolvableValue;
|
|
589
|
+
}
|
|
590
|
+
let hasAnyValues = this.isEmptyObject;
|
|
591
|
+
const internalValueResult = {};
|
|
592
|
+
if (this._disabled !== undefined) {
|
|
593
|
+
hasAnyValues = true;
|
|
594
|
+
internalValueResult.disabled = this._disabled;
|
|
595
|
+
}
|
|
596
|
+
if (this._label !== undefined) {
|
|
597
|
+
hasAnyValues = true;
|
|
598
|
+
internalValueResult.label = this._label;
|
|
599
|
+
}
|
|
600
|
+
if (this._actions?.internalValue !== undefined) {
|
|
601
|
+
hasAnyValues = true;
|
|
602
|
+
internalValueResult.actions = this._actions?.internalValue;
|
|
603
|
+
}
|
|
604
|
+
if (this._condition?.internalValue !== undefined) {
|
|
605
|
+
hasAnyValues = true;
|
|
606
|
+
internalValueResult.condition = this._condition?.internalValue;
|
|
607
|
+
}
|
|
608
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
609
|
+
}
|
|
610
|
+
set internalValue(value) {
|
|
611
|
+
if (value === undefined) {
|
|
612
|
+
this.isEmptyObject = false;
|
|
613
|
+
this.resolvableValue = undefined;
|
|
614
|
+
this._disabled = undefined;
|
|
615
|
+
this._label = undefined;
|
|
616
|
+
this._actions.internalValue = undefined;
|
|
617
|
+
this._condition.internalValue = undefined;
|
|
618
|
+
}
|
|
619
|
+
else if (cdktn.Tokenization.isResolvable(value)) {
|
|
620
|
+
this.isEmptyObject = false;
|
|
621
|
+
this.resolvableValue = value;
|
|
622
|
+
}
|
|
623
|
+
else {
|
|
624
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
625
|
+
this.resolvableValue = undefined;
|
|
626
|
+
this._disabled = value.disabled;
|
|
627
|
+
this._label = value.label;
|
|
628
|
+
this._actions.internalValue = value.actions;
|
|
629
|
+
this._condition.internalValue = value.condition;
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
get disabled() {
|
|
633
|
+
return this.getBooleanAttribute('disabled');
|
|
634
|
+
}
|
|
635
|
+
set disabled(value) {
|
|
636
|
+
this._disabled = value;
|
|
637
|
+
}
|
|
638
|
+
resetDisabled() {
|
|
639
|
+
this._disabled = undefined;
|
|
640
|
+
}
|
|
641
|
+
// Temporarily expose input value. Use with caution.
|
|
642
|
+
get disabledInput() {
|
|
643
|
+
return this._disabled;
|
|
644
|
+
}
|
|
645
|
+
// id - computed: true, optional: false, required: false
|
|
646
|
+
get id() {
|
|
647
|
+
return this.getStringAttribute('id');
|
|
648
|
+
}
|
|
649
|
+
get label() {
|
|
650
|
+
return this.getStringAttribute('label');
|
|
651
|
+
}
|
|
652
|
+
set label(value) {
|
|
653
|
+
this._label = value;
|
|
654
|
+
}
|
|
655
|
+
resetLabel() {
|
|
656
|
+
this._label = undefined;
|
|
657
|
+
}
|
|
658
|
+
// Temporarily expose input value. Use with caution.
|
|
659
|
+
get labelInput() {
|
|
660
|
+
return this._label;
|
|
661
|
+
}
|
|
662
|
+
get actions() {
|
|
663
|
+
return this._actions;
|
|
664
|
+
}
|
|
665
|
+
putActions(value) {
|
|
666
|
+
this._actions.internalValue = value;
|
|
667
|
+
}
|
|
668
|
+
// Temporarily expose input value. Use with caution.
|
|
669
|
+
get actionsInput() {
|
|
670
|
+
return this._actions.internalValue;
|
|
671
|
+
}
|
|
672
|
+
get condition() {
|
|
673
|
+
return this._condition;
|
|
674
|
+
}
|
|
675
|
+
putCondition(value) {
|
|
676
|
+
this._condition.internalValue = value;
|
|
677
|
+
}
|
|
678
|
+
resetCondition() {
|
|
679
|
+
this._condition.internalValue = undefined;
|
|
680
|
+
}
|
|
681
|
+
// Temporarily expose input value. Use with caution.
|
|
682
|
+
get conditionInput() {
|
|
683
|
+
return this._condition.internalValue;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
exports.EventOrchestrationRouterSetRuleOutputReference = EventOrchestrationRouterSetRuleOutputReference;
|
|
687
|
+
_h = JSII_RTTI_SYMBOL_1;
|
|
688
|
+
EventOrchestrationRouterSetRuleOutputReference[_h] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouterSetRuleOutputReference", version: "15.0.0" };
|
|
689
|
+
class EventOrchestrationRouterSetRuleList extends cdktn.ComplexList {
|
|
690
|
+
/**
|
|
691
|
+
* @param terraformResource The parent resource
|
|
692
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
693
|
+
* @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
|
|
694
|
+
*/
|
|
695
|
+
constructor(terraformResource, terraformAttribute, wrapsSet) {
|
|
696
|
+
super(terraformResource, terraformAttribute, wrapsSet);
|
|
697
|
+
this.terraformResource = terraformResource;
|
|
698
|
+
this.terraformAttribute = terraformAttribute;
|
|
699
|
+
this.wrapsSet = wrapsSet;
|
|
700
|
+
}
|
|
701
|
+
/**
|
|
702
|
+
* @param index the index of the item to return
|
|
703
|
+
*/
|
|
704
|
+
get(index) {
|
|
705
|
+
return new EventOrchestrationRouterSetRuleOutputReference(this.terraformResource, this.terraformAttribute, index, this.wrapsSet);
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
exports.EventOrchestrationRouterSetRuleList = EventOrchestrationRouterSetRuleList;
|
|
709
|
+
_j = JSII_RTTI_SYMBOL_1;
|
|
710
|
+
EventOrchestrationRouterSetRuleList[_j] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouterSetRuleList", version: "15.0.0" };
|
|
711
|
+
function eventOrchestrationRouterSetToTerraform(struct) {
|
|
712
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
713
|
+
return struct;
|
|
714
|
+
}
|
|
715
|
+
if (cdktn.isComplexElement(struct)) {
|
|
716
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
717
|
+
}
|
|
718
|
+
return {
|
|
719
|
+
id: cdktn.stringToTerraform(struct.id),
|
|
720
|
+
rule: cdktn.listMapper(eventOrchestrationRouterSetRuleToTerraform, true)(struct.rule),
|
|
721
|
+
};
|
|
722
|
+
}
|
|
723
|
+
function eventOrchestrationRouterSetToHclTerraform(struct) {
|
|
724
|
+
if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
|
|
725
|
+
return struct;
|
|
726
|
+
}
|
|
727
|
+
if (cdktn.isComplexElement(struct)) {
|
|
728
|
+
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
|
|
729
|
+
}
|
|
730
|
+
const attrs = {
|
|
731
|
+
id: {
|
|
732
|
+
value: cdktn.stringToHclTerraform(struct.id),
|
|
733
|
+
isBlock: false,
|
|
734
|
+
type: "simple",
|
|
735
|
+
storageClassType: "string",
|
|
736
|
+
},
|
|
737
|
+
rule: {
|
|
738
|
+
value: cdktn.listMapperHcl(eventOrchestrationRouterSetRuleToHclTerraform, true)(struct.rule),
|
|
739
|
+
isBlock: true,
|
|
740
|
+
type: "list",
|
|
741
|
+
storageClassType: "EventOrchestrationRouterSetRuleList",
|
|
742
|
+
},
|
|
743
|
+
};
|
|
744
|
+
// remove undefined attributes
|
|
745
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
746
|
+
}
|
|
747
|
+
class EventOrchestrationRouterSetOutputReference extends cdktn.ComplexObject {
|
|
748
|
+
/**
|
|
749
|
+
* @param terraformResource The parent resource
|
|
750
|
+
* @param terraformAttribute The attribute on the parent resource this class is referencing
|
|
751
|
+
*/
|
|
752
|
+
constructor(terraformResource, terraformAttribute) {
|
|
753
|
+
super(terraformResource, terraformAttribute, false, 0);
|
|
754
|
+
this.isEmptyObject = false;
|
|
755
|
+
// rule - computed: false, optional: true, required: false
|
|
756
|
+
this._rule = new EventOrchestrationRouterSetRuleList(this, "rule", false);
|
|
757
|
+
}
|
|
758
|
+
get internalValue() {
|
|
759
|
+
let hasAnyValues = this.isEmptyObject;
|
|
760
|
+
const internalValueResult = {};
|
|
761
|
+
if (this._id !== undefined) {
|
|
762
|
+
hasAnyValues = true;
|
|
763
|
+
internalValueResult.id = this._id;
|
|
764
|
+
}
|
|
765
|
+
if (this._rule?.internalValue !== undefined) {
|
|
766
|
+
hasAnyValues = true;
|
|
767
|
+
internalValueResult.rule = this._rule?.internalValue;
|
|
768
|
+
}
|
|
769
|
+
return hasAnyValues ? internalValueResult : undefined;
|
|
770
|
+
}
|
|
771
|
+
set internalValue(value) {
|
|
772
|
+
if (value === undefined) {
|
|
773
|
+
this.isEmptyObject = false;
|
|
774
|
+
this._id = undefined;
|
|
775
|
+
this._rule.internalValue = undefined;
|
|
776
|
+
}
|
|
777
|
+
else {
|
|
778
|
+
this.isEmptyObject = Object.keys(value).length === 0;
|
|
779
|
+
this._id = value.id;
|
|
780
|
+
this._rule.internalValue = value.rule;
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
get id() {
|
|
784
|
+
return this.getStringAttribute('id');
|
|
785
|
+
}
|
|
786
|
+
set id(value) {
|
|
787
|
+
this._id = value;
|
|
788
|
+
}
|
|
789
|
+
// Temporarily expose input value. Use with caution.
|
|
790
|
+
get idInput() {
|
|
791
|
+
return this._id;
|
|
792
|
+
}
|
|
793
|
+
get rule() {
|
|
794
|
+
return this._rule;
|
|
795
|
+
}
|
|
796
|
+
putRule(value) {
|
|
797
|
+
this._rule.internalValue = value;
|
|
798
|
+
}
|
|
799
|
+
resetRule() {
|
|
800
|
+
this._rule.internalValue = undefined;
|
|
801
|
+
}
|
|
802
|
+
// Temporarily expose input value. Use with caution.
|
|
803
|
+
get ruleInput() {
|
|
804
|
+
return this._rule.internalValue;
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
exports.EventOrchestrationRouterSetOutputReference = EventOrchestrationRouterSetOutputReference;
|
|
808
|
+
_k = JSII_RTTI_SYMBOL_1;
|
|
809
|
+
EventOrchestrationRouterSetOutputReference[_k] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouterSetOutputReference", version: "15.0.0" };
|
|
810
|
+
/**
|
|
811
|
+
* Represents a {@link https://registry.terraform.io/providers/pagerduty/pagerduty/3.31.0/docs/resources/event_orchestration_router pagerduty_event_orchestration_router}
|
|
812
|
+
*/
|
|
813
|
+
class EventOrchestrationRouter extends cdktn.TerraformResource {
|
|
814
|
+
// ==============
|
|
815
|
+
// STATIC Methods
|
|
816
|
+
// ==============
|
|
817
|
+
/**
|
|
818
|
+
* Generates CDKTN code for importing a EventOrchestrationRouter resource upon running "cdktn plan <stack-name>"
|
|
819
|
+
* @param scope The scope in which to define this construct
|
|
820
|
+
* @param importToId The construct id used in the generated config for the EventOrchestrationRouter to import
|
|
821
|
+
* @param importFromId The id of the existing EventOrchestrationRouter that should be imported. Refer to the {@link https://registry.terraform.io/providers/pagerduty/pagerduty/3.31.0/docs/resources/event_orchestration_router#import import section} in the documentation of this resource for the id to use
|
|
822
|
+
* @param provider? Optional instance of the provider where the EventOrchestrationRouter to import is found
|
|
823
|
+
*/
|
|
824
|
+
static generateConfigForImport(scope, importToId, importFromId, provider) {
|
|
825
|
+
return new cdktn.ImportableResource(scope, importToId, { terraformResourceType: "pagerduty_event_orchestration_router", importId: importFromId, provider });
|
|
826
|
+
}
|
|
827
|
+
// ===========
|
|
828
|
+
// INITIALIZER
|
|
829
|
+
// ===========
|
|
830
|
+
/**
|
|
831
|
+
* Create a new {@link https://registry.terraform.io/providers/pagerduty/pagerduty/3.31.0/docs/resources/event_orchestration_router pagerduty_event_orchestration_router} Resource
|
|
832
|
+
*
|
|
833
|
+
* @param scope The scope in which to define this construct
|
|
834
|
+
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
|
|
835
|
+
* @param options EventOrchestrationRouterConfig
|
|
836
|
+
*/
|
|
837
|
+
constructor(scope, id, config) {
|
|
838
|
+
super(scope, id, {
|
|
839
|
+
terraformResourceType: 'pagerduty_event_orchestration_router',
|
|
840
|
+
terraformGeneratorMetadata: {
|
|
841
|
+
providerName: 'pagerduty',
|
|
842
|
+
providerVersion: '3.31.0',
|
|
843
|
+
providerVersionConstraint: '~> 3.0'
|
|
844
|
+
},
|
|
845
|
+
provider: config.provider,
|
|
846
|
+
dependsOn: config.dependsOn,
|
|
847
|
+
count: config.count,
|
|
848
|
+
lifecycle: config.lifecycle,
|
|
849
|
+
provisioners: config.provisioners,
|
|
850
|
+
connection: config.connection,
|
|
851
|
+
forEach: config.forEach
|
|
852
|
+
});
|
|
853
|
+
// catch_all - computed: false, optional: false, required: true
|
|
854
|
+
this._catchAll = new EventOrchestrationRouterCatchAllOutputReference(this, "catch_all");
|
|
855
|
+
// set - computed: false, optional: false, required: true
|
|
856
|
+
this._set = new EventOrchestrationRouterSetOutputReference(this, "set");
|
|
857
|
+
this._eventOrchestration = config.eventOrchestration;
|
|
858
|
+
this._id = config.id;
|
|
859
|
+
this._catchAll.internalValue = config.catchAll;
|
|
860
|
+
this._set.internalValue = config.set;
|
|
861
|
+
}
|
|
862
|
+
get eventOrchestration() {
|
|
863
|
+
return this.getStringAttribute('event_orchestration');
|
|
864
|
+
}
|
|
865
|
+
set eventOrchestration(value) {
|
|
866
|
+
this._eventOrchestration = value;
|
|
867
|
+
}
|
|
868
|
+
// Temporarily expose input value. Use with caution.
|
|
869
|
+
get eventOrchestrationInput() {
|
|
870
|
+
return this._eventOrchestration;
|
|
871
|
+
}
|
|
872
|
+
get id() {
|
|
873
|
+
return this.getStringAttribute('id');
|
|
874
|
+
}
|
|
875
|
+
set id(value) {
|
|
876
|
+
this._id = value;
|
|
877
|
+
}
|
|
878
|
+
resetId() {
|
|
879
|
+
this._id = undefined;
|
|
880
|
+
}
|
|
881
|
+
// Temporarily expose input value. Use with caution.
|
|
882
|
+
get idInput() {
|
|
883
|
+
return this._id;
|
|
884
|
+
}
|
|
885
|
+
get catchAll() {
|
|
886
|
+
return this._catchAll;
|
|
887
|
+
}
|
|
888
|
+
putCatchAll(value) {
|
|
889
|
+
this._catchAll.internalValue = value;
|
|
890
|
+
}
|
|
891
|
+
// Temporarily expose input value. Use with caution.
|
|
892
|
+
get catchAllInput() {
|
|
893
|
+
return this._catchAll.internalValue;
|
|
894
|
+
}
|
|
895
|
+
get set() {
|
|
896
|
+
return this._set;
|
|
897
|
+
}
|
|
898
|
+
putSet(value) {
|
|
899
|
+
this._set.internalValue = value;
|
|
900
|
+
}
|
|
901
|
+
// Temporarily expose input value. Use with caution.
|
|
902
|
+
get setInput() {
|
|
903
|
+
return this._set.internalValue;
|
|
904
|
+
}
|
|
905
|
+
// =========
|
|
906
|
+
// SYNTHESIS
|
|
907
|
+
// =========
|
|
908
|
+
synthesizeAttributes() {
|
|
909
|
+
return {
|
|
910
|
+
event_orchestration: cdktn.stringToTerraform(this._eventOrchestration),
|
|
911
|
+
id: cdktn.stringToTerraform(this._id),
|
|
912
|
+
catch_all: eventOrchestrationRouterCatchAllToTerraform(this._catchAll.internalValue),
|
|
913
|
+
set: eventOrchestrationRouterSetToTerraform(this._set.internalValue),
|
|
914
|
+
};
|
|
915
|
+
}
|
|
916
|
+
synthesizeHclAttributes() {
|
|
917
|
+
const attrs = {
|
|
918
|
+
event_orchestration: {
|
|
919
|
+
value: cdktn.stringToHclTerraform(this._eventOrchestration),
|
|
920
|
+
isBlock: false,
|
|
921
|
+
type: "simple",
|
|
922
|
+
storageClassType: "string",
|
|
923
|
+
},
|
|
924
|
+
id: {
|
|
925
|
+
value: cdktn.stringToHclTerraform(this._id),
|
|
926
|
+
isBlock: false,
|
|
927
|
+
type: "simple",
|
|
928
|
+
storageClassType: "string",
|
|
929
|
+
},
|
|
930
|
+
catch_all: {
|
|
931
|
+
value: eventOrchestrationRouterCatchAllToHclTerraform(this._catchAll.internalValue),
|
|
932
|
+
isBlock: true,
|
|
933
|
+
type: "list",
|
|
934
|
+
storageClassType: "EventOrchestrationRouterCatchAllList",
|
|
935
|
+
},
|
|
936
|
+
set: {
|
|
937
|
+
value: eventOrchestrationRouterSetToHclTerraform(this._set.internalValue),
|
|
938
|
+
isBlock: true,
|
|
939
|
+
type: "list",
|
|
940
|
+
storageClassType: "EventOrchestrationRouterSetList",
|
|
941
|
+
},
|
|
942
|
+
};
|
|
943
|
+
// remove undefined attributes
|
|
944
|
+
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
exports.EventOrchestrationRouter = EventOrchestrationRouter;
|
|
948
|
+
_l = JSII_RTTI_SYMBOL_1;
|
|
949
|
+
EventOrchestrationRouter[_l] = { fqn: "@cdktn/provider-pagerduty.eventOrchestrationRouter.EventOrchestrationRouter", version: "15.0.0" };
|
|
950
|
+
// =================
|
|
951
|
+
// STATIC PROPERTIES
|
|
952
|
+
// =================
|
|
953
|
+
EventOrchestrationRouter.tfResourceType = "pagerduty_event_orchestration_router";
|
|
954
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXZlbnQtb3JjaGVzdHJhdGlvbi1yb3V0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTZDQSxnSEFRQztBQUdELHNIQWdCQztBQXdERCxrR0FRQztBQUdELHdHQWdCQztBQThERCwwSUFVQztBQUdELGdKQTRCQztBQWtJRCw4R0FTQztBQUdELG9IQXNCQztBQStFRCxrSEFRQztBQUdELHdIQWdCQztBQXNHRCxnR0FXQztBQUdELHNHQWtDQztBQXNLRCx3RkFTQztBQUdELDhGQXNCQzs7QUFyMkJELCtCQUErQjtBQW9DL0IsU0FBZ0Isa0RBQWtELENBQUMsTUFBeUc7SUFDMUssSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sTUFBTSxDQUFDO0lBQUMsQ0FBQztJQUM1RixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0hBQW9ILENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBQ0QsT0FBTztRQUNMLFFBQVEsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTyxDQUFDLE9BQU8sQ0FBQztLQUNuRCxDQUFBO0FBQ0gsQ0FBQztBQUdELFNBQWdCLHFEQUFxRCxDQUFDLE1BQXlHO0lBQzdLLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBQztJQUFDLENBQUM7SUFDNUYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElB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S0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUUsQ0FBQyxDQUFBO0lBQzVILENBQUM7O0FBNUpILDREQTZKQzs7O0FBM0pDLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ0csdUNBQWMsR0FBRyxzQ0FBc0MsQUFBekMsQ0FBMEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAyMSwgMjAyNlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG4vLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXJcbi8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBjZGt0biBmcm9tICdjZGt0bic7XG5cbi8vIENvbmZpZ3VyYXRpb25cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDb25maWcgZXh0ZW5kcyBjZGt0bi5UZXJyYWZvcm1NZXRhQXJndW1lbnRzIHtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjZXZlbnRfb3JjaGVzdHJhdGlvbiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXIjZXZlbnRfb3JjaGVzdHJhdGlvbn1cbiAgKi9cbiAgcmVhZG9ubHkgZXZlbnRPcmNoZXN0cmF0aW9uOiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL2V2ZW50X29yY2hlc3RyYXRpb25fcm91dGVyI2lkIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlciNpZH1cbiAgKlxuICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHRoZSBpZCBmaWVsZCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIGFsbCByZXNvdXJjZXMgaW4gVGVycmFmb3JtIHByb3ZpZGVycyB1c2luZyBhIFRlcnJhZm9ybSBwcm92aWRlciBTREsgdmVyc2lvbiBiZWxvdyAyLlxuICAqIElmIHlvdSBleHBlcmllbmNlIHByb2JsZW1zIHNldHRpbmcgdGhpcyB2YWx1ZSBpdCBtaWdodCBub3QgYmUgc2V0dGFibGUuIFBsZWFzZSB0YWtlIGEgbG9vayBhdCB0aGUgcHJvdmlkZXIgZG9jdW1lbnRhdGlvbiB0byBlbnN1cmUgaXQgc2hvdWxkIGJlIHNldHRhYmxlLlxuICAqL1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgLyoqXG4gICogY2F0Y2hfYWxsIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9ldmVudF9vcmNoZXN0cmF0aW9uX3JvdXRlciNjYXRjaF9hbGwgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyI2NhdGNoX2FsbH1cbiAgKi9cbiAgcmVhZG9ubHkgY2F0Y2hBbGw6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNhdGNoQWxsO1xuICAvKipcbiAgKiBzZXQgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL2V2ZW50X29yY2hlc3RyYXRpb25fcm91dGVyI3NldCBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXIjc2V0fVxuICAqL1xuICByZWFkb25seSBzZXQ6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ2F0Y2hBbGxBY3Rpb25zIHtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjcm91dGVfdG8gRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyI3JvdXRlX3RvfVxuICAqL1xuICByZWFkb25seSByb3V0ZVRvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbEFjdGlvbnNUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbEFjdGlvbnNPdXRwdXRSZWZlcmVuY2UgfCBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbEFjdGlvbnMpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgcm91dGVfdG86IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEucm91dGVUbyksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ2F0Y2hBbGxBY3Rpb25zVG9IY2xUZXJyYWZvcm0oc3RydWN0PzogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ2F0Y2hBbGxBY3Rpb25zT3V0cHV0UmVmZXJlbmNlIHwgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ2F0Y2hBbGxBY3Rpb25zKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICByb3V0ZV90bzoge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEucm91dGVUbyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbEFjdGlvbnNPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNhdGNoQWxsQWN0aW9ucyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fcm91dGVUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5yb3V0ZVRvID0gdGhpcy5fcm91dGVUbztcbiAgICB9XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlcyA/IGludGVybmFsVmFsdWVSZXN1bHQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGludGVybmFsVmFsdWUodmFsdWU6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNhdGNoQWxsQWN0aW9ucyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMuX3JvdXRlVG8gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuX3JvdXRlVG8gPSB2YWx1ZS5yb3V0ZVRvO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJvdXRlX3RvIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX3JvdXRlVG8/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHJvdXRlVG8oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdyb3V0ZV90bycpO1xuICB9XG4gIHB1YmxpYyBzZXQgcm91dGVUbyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcm91dGVUbyA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCByb3V0ZVRvSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlVG87XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ2F0Y2hBbGwge1xuICAvKipcbiAgKiBhY3Rpb25zIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9ldmVudF9vcmNoZXN0cmF0aW9uX3JvdXRlciNhY3Rpb25zIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlciNhY3Rpb25zfVxuICAqL1xuICByZWFkb25seSBhY3Rpb25zOiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbEFjdGlvbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbFRvVGVycmFmb3JtKHN0cnVjdD86IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNhdGNoQWxsT3V0cHV0UmVmZXJlbmNlIHwgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ2F0Y2hBbGwpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIHJldHVybiB7XG4gICAgYWN0aW9uczogZXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ2F0Y2hBbGxBY3Rpb25zVG9UZXJyYWZvcm0oc3RydWN0IS5hY3Rpb25zKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbFRvSGNsVGVycmFmb3JtKHN0cnVjdD86IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNhdGNoQWxsT3V0cHV0UmVmZXJlbmNlIHwgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ2F0Y2hBbGwpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIGFjdGlvbnM6IHtcbiAgICAgIHZhbHVlOiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbEFjdGlvbnNUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmFjdGlvbnMpLFxuICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbEFjdGlvbnNMaXN0XCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNhdGNoQWxsT3V0cHV0UmVmZXJlbmNlIGV4dGVuZHMgY2RrdG4uQ29tcGxleE9iamVjdCB7XG4gIHByaXZhdGUgaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuXG4gIC8qKlxuICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlXG4gICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ1xuICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IodGVycmFmb3JtUmVzb3VyY2U6IGNka3RuLklJbnRlcnBvbGF0aW5nUGFyZW50LCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZykge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGZhbHNlLCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJuYWxWYWx1ZSgpOiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fYWN0aW9ucz8uaW50ZXJuYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5hY3Rpb25zID0gdGhpcy5fYWN0aW9ucz8uaW50ZXJuYWxWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlcyA/IGludGVybmFsVmFsdWVSZXN1bHQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGludGVybmFsVmFsdWUodmFsdWU6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNhdGNoQWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5fYWN0aW9ucy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLl9hY3Rpb25zLmludGVybmFsVmFsdWUgPSB2YWx1ZS5hY3Rpb25zO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFjdGlvbnMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfYWN0aW9ucyA9IG5ldyBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbEFjdGlvbnNPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJhY3Rpb25zXCIpO1xuICBwdWJsaWMgZ2V0IGFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gIH1cbiAgcHVibGljIHB1dEFjdGlvbnModmFsdWU6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNhdGNoQWxsQWN0aW9ucykge1xuICAgIHRoaXMuX2FjdGlvbnMuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhY3Rpb25zSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnMuaW50ZXJuYWxWYWx1ZTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQWN0aW9uc0R5bmFtaWNSb3V0ZVRvIHtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjbG9va3VwX2J5IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlciNsb29rdXBfYnl9XG4gICovXG4gIHJlYWRvbmx5IGxvb2t1cEJ5OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL2V2ZW50X29yY2hlc3RyYXRpb25fcm91dGVyI3JlZ2V4IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlciNyZWdleH1cbiAgKi9cbiAgcmVhZG9ubHkgcmVnZXg6IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjc291cmNlIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlciNzb3VyY2V9XG4gICovXG4gIHJlYWRvbmx5IHNvdXJjZTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnNEeW5hbWljUm91dGVUb1RvVGVycmFmb3JtKHN0cnVjdD86IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zRHluYW1pY1JvdXRlVG8gfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBsb29rdXBfYnk6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEubG9va3VwQnkpLFxuICAgIHJlZ2V4OiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnJlZ2V4KSxcbiAgICBzb3VyY2U6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuc291cmNlKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQWN0aW9uc0R5bmFtaWNSb3V0ZVRvVG9IY2xUZXJyYWZvcm0oc3RydWN0PzogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnNEeW5hbWljUm91dGVUbyB8IGNka3RuLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICBsb29rdXBfYnk6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmxvb2t1cEJ5KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICByZWdleDoge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEucmVnZXgpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHNvdXJjZToge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuc291cmNlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zRHluYW1pY1JvdXRlVG9PdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gIHByaXZhdGUgcmVzb2x2YWJsZVZhbHVlPzogY2RrdG4uSVJlc29sdmFibGU7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICogQHBhcmFtIGNvbXBsZXhPYmplY3RJbmRleCB0aGUgaW5kZXggb2YgdGhpcyBpdGVtIGluIHRoZSBsaXN0XG4gICogQHBhcmFtIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLCBjb21wbGV4T2JqZWN0SW5kZXg6IG51bWJlciwgY29tcGxleE9iamVjdElzRnJvbVNldDogYm9vbGVhbikge1xuICAgIHN1cGVyKHRlcnJhZm9ybVJlc291cmNlLCB0ZXJyYWZvcm1BdHRyaWJ1dGUsIGNvbXBsZXhPYmplY3RJc0Zyb21TZXQsIGNvbXBsZXhPYmplY3RJbmRleCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVybmFsVmFsdWUoKTogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnNEeW5hbWljUm91dGVUbyB8IGNka3RuLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5yZXNvbHZhYmxlVmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmFibGVWYWx1ZTtcbiAgICB9XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fbG9va3VwQnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubG9va3VwQnkgPSB0aGlzLl9sb29rdXBCeTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlZ2V4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnJlZ2V4ID0gdGhpcy5fcmVnZXg7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuc291cmNlID0gdGhpcy5fc291cmNlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnNEeW5hbWljUm91dGVUbyB8IGNka3RuLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9sb29rdXBCeSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3JlZ2V4ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fc291cmNlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2xvb2t1cEJ5ID0gdmFsdWUubG9va3VwQnk7XG4gICAgICB0aGlzLl9yZWdleCA9IHZhbHVlLnJlZ2V4O1xuICAgICAgdGhpcy5fc291cmNlID0gdmFsdWUuc291cmNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGxvb2t1cF9ieSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF9sb29rdXBCeT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgbG9va3VwQnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdsb29rdXBfYnknKTtcbiAgfVxuICBwdWJsaWMgc2V0IGxvb2t1cEJ5KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9sb29rdXBCeSA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBsb29rdXBCeUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9sb29rdXBCeTtcbiAgfVxuXG4gIC8vIHJlZ2V4IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX3JlZ2V4Pzogc3RyaW5nOyBcbiAgcHVibGljIGdldCByZWdleCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3JlZ2V4Jyk7XG4gIH1cbiAgcHVibGljIHNldCByZWdleCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcmVnZXggPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcmVnZXhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVnZXg7XG4gIH1cblxuICAvLyBzb3VyY2UgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfc291cmNlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdzb3VyY2UnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNvdXJjZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fc291cmNlID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHNvdXJjZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9zb3VyY2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zRHluYW1pY1JvdXRlVG9MaXN0IGV4dGVuZHMgY2RrdG4uQ29tcGxleExpc3Qge1xuICBwdWJsaWMgaW50ZXJuYWxWYWx1ZT8gOiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQWN0aW9uc0R5bmFtaWNSb3V0ZVRvW10gfCBjZGt0bi5JUmVzb2x2YWJsZVxuXG4gIC8qKlxuICAqIEBwYXJhbSB0ZXJyYWZvcm1SZXNvdXJjZSBUaGUgcGFyZW50IHJlc291cmNlXG4gICogQHBhcmFtIHRlcnJhZm9ybUF0dHJpYnV0ZSBUaGUgYXR0cmlidXRlIG9uIHRoZSBwYXJlbnQgcmVzb3VyY2UgdGhpcyBjbGFzcyBpcyByZWZlcmVuY2luZ1xuICAqIEBwYXJhbSB3cmFwc1NldCB3aGV0aGVyIHRoZSBsaXN0IGlzIHdyYXBwaW5nIGEgc2V0ICh3aWxsIGFkZCB0b2xpc3QoKSB0byBiZSBhYmxlIHRvIGFjY2VzcyBhbiBpdGVtIHZpYSBhbiBpbmRleClcbiAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgcHJvdGVjdGVkIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nLCBwcm90ZWN0ZWQgd3JhcHNTZXQ6IGJvb2xlYW4pIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCB3cmFwc1NldClcbiAgfVxuXG4gIC8qKlxuICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gcmV0dXJuXG4gICovXG4gIHB1YmxpYyBnZXQoaW5kZXg6IG51bWJlcik6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zRHluYW1pY1JvdXRlVG9PdXRwdXRSZWZlcmVuY2Uge1xuICAgIHJldHVybiBuZXcgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnNEeW5hbWljUm91dGVUb091dHB1dFJlZmVyZW5jZSh0aGlzLnRlcnJhZm9ybVJlc291cmNlLCB0aGlzLnRlcnJhZm9ybUF0dHJpYnV0ZSwgaW5kZXgsIHRoaXMud3JhcHNTZXQpO1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zIHtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjcm91dGVfdG8gRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyI3JvdXRlX3RvfVxuICAqL1xuICByZWFkb25seSByb3V0ZVRvPzogc3RyaW5nO1xuICAvKipcbiAgKiBkeW5hbWljX3JvdXRlX3RvIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9ldmVudF9vcmNoZXN0cmF0aW9uX3JvdXRlciNkeW5hbWljX3JvdXRlX3RvIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlciNkeW5hbWljX3JvdXRlX3RvfVxuICAqL1xuICByZWFkb25seSBkeW5hbWljUm91dGVUbz86IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zRHluYW1pY1JvdXRlVG9bXSB8IGNka3RuLklSZXNvbHZhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnNUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQWN0aW9uc091dHB1dFJlZmVyZW5jZSB8IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJvdXRlX3RvOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnJvdXRlVG8pLFxuICAgIGR5bmFtaWNfcm91dGVfdG86IGNka3RuLmxpc3RNYXBwZXIoZXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnNEeW5hbWljUm91dGVUb1RvVGVycmFmb3JtLCB0cnVlKShzdHJ1Y3QhLmR5bmFtaWNSb3V0ZVRvKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQWN0aW9uc1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zT3V0cHV0UmVmZXJlbmNlIHwgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnMpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIHJvdXRlX3RvOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5yb3V0ZVRvKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBkeW5hbWljX3JvdXRlX3RvOiB7XG4gICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQWN0aW9uc0R5bmFtaWNSb3V0ZVRvVG9IY2xUZXJyYWZvcm0sIHRydWUpKHN0cnVjdCEuZHluYW1pY1JvdXRlVG8pLFxuICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQWN0aW9uc0R5bmFtaWNSb3V0ZVRvTGlzdFwiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQWN0aW9uc091dHB1dFJlZmVyZW5jZSBleHRlbmRzIGNka3RuLkNvbXBsZXhPYmplY3Qge1xuICBwcml2YXRlIGlzRW1wdHlPYmplY3QgPSBmYWxzZTtcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcpIHtcbiAgICBzdXBlcih0ZXJyYWZvcm1SZXNvdXJjZSwgdGVycmFmb3JtQXR0cmlidXRlLCBmYWxzZSwgMCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVybmFsVmFsdWUoKTogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnMgfCB1bmRlZmluZWQge1xuICAgIGxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XG4gICAgY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHRoaXMuX3JvdXRlVG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQucm91dGVUbyA9IHRoaXMuX3JvdXRlVG87XG4gICAgfVxuICAgIGlmICh0aGlzLl9keW5hbWljUm91dGVUbz8uaW50ZXJuYWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5keW5hbWljUm91dGVUbyA9IHRoaXMuX2R5bmFtaWNSb3V0ZVRvPy5pbnRlcm5hbFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnMgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9yb3V0ZVRvID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZHluYW1pY1JvdXRlVG8uaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5fcm91dGVUbyA9IHZhbHVlLnJvdXRlVG87XG4gICAgICB0aGlzLl9keW5hbWljUm91dGVUby5pbnRlcm5hbFZhbHVlID0gdmFsdWUuZHluYW1pY1JvdXRlVG87XG4gICAgfVxuICB9XG5cbiAgLy8gcm91dGVfdG8gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcm91dGVUbz86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgcm91dGVUbygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3JvdXRlX3RvJyk7XG4gIH1cbiAgcHVibGljIHNldCByb3V0ZVRvKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9yb3V0ZVRvID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Um91dGVUbygpIHtcbiAgICB0aGlzLl9yb3V0ZVRvID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCByb3V0ZVRvSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlVG87XG4gIH1cblxuICAvLyBkeW5hbWljX3JvdXRlX3RvIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2R5bmFtaWNSb3V0ZVRvID0gbmV3IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zRHluYW1pY1JvdXRlVG9MaXN0KHRoaXMsIFwiZHluYW1pY19yb3V0ZV90b1wiLCBmYWxzZSk7XG4gIHB1YmxpYyBnZXQgZHluYW1pY1JvdXRlVG8oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2R5bmFtaWNSb3V0ZVRvO1xuICB9XG4gIHB1YmxpYyBwdXREeW5hbWljUm91dGVUbyh2YWx1ZTogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnNEeW5hbWljUm91dGVUb1tdIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9keW5hbWljUm91dGVUby5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RHluYW1pY1JvdXRlVG8oKSB7XG4gICAgdGhpcy5fZHluYW1pY1JvdXRlVG8uaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZHluYW1pY1JvdXRlVG9JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZHluYW1pY1JvdXRlVG8uaW50ZXJuYWxWYWx1ZTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQ29uZGl0aW9uIHtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjZXhwcmVzc2lvbiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXIjZXhwcmVzc2lvbn1cbiAgKi9cbiAgcmVhZG9ubHkgZXhwcmVzc2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUNvbmRpdGlvblRvVGVycmFmb3JtKHN0cnVjdD86IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVDb25kaXRpb24gfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleHByZXNzaW9uOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmV4cHJlc3Npb24pLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVDb25kaXRpb25Ub0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQ29uZGl0aW9uIHwgY2RrdG4uSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIGV4cHJlc3Npb246IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmV4cHJlc3Npb24pLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICB9O1xuXG4gIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkpO1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUNvbmRpdGlvbk91dHB1dFJlZmVyZW5jZSBleHRlbmRzIGNka3RuLkNvbXBsZXhPYmplY3Qge1xuICBwcml2YXRlIGlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXNvbHZhYmxlVmFsdWU/OiBjZGt0bi5JUmVzb2x2YWJsZTtcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKiBAcGFyYW0gY29tcGxleE9iamVjdEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGl0ZW0gaW4gdGhlIGxpc3RcbiAgKiBAcGFyYW0gY29tcGxleE9iamVjdElzRnJvbVNldCB3aGV0aGVyIHRoZSBsaXN0IGlzIHdyYXBwaW5nIGEgc2V0ICh3aWxsIGFkZCB0b2xpc3QoKSB0byBiZSBhYmxlIHRvIGFjY2VzcyBhbiBpdGVtIHZpYSBhbiBpbmRleClcbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsIGNvbXBsZXhPYmplY3RJbmRleDogbnVtYmVyLCBjb21wbGV4T2JqZWN0SXNGcm9tU2V0OiBib29sZWFuKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgY29tcGxleE9iamVjdElzRnJvbVNldCwgY29tcGxleE9iamVjdEluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJuYWxWYWx1ZSgpOiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQ29uZGl0aW9uIHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnJlc29sdmFibGVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2YWJsZVZhbHVlO1xuICAgIH1cbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl9leHByZXNzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmV4cHJlc3Npb24gPSB0aGlzLl9leHByZXNzaW9uO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUNvbmRpdGlvbiB8IGNka3RuLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9leHByZXNzaW9uID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2V4cHJlc3Npb24gPSB2YWx1ZS5leHByZXNzaW9uO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cHJlc3Npb24gLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfZXhwcmVzc2lvbj86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2V4cHJlc3Npb24nKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV4cHJlc3Npb24odmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2V4cHJlc3Npb24gPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZXhwcmVzc2lvbklucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9leHByZXNzaW9uO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQ29uZGl0aW9uTGlzdCBleHRlbmRzIGNka3RuLkNvbXBsZXhMaXN0IHtcbiAgcHVibGljIGludGVybmFsVmFsdWU/IDogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUNvbmRpdGlvbltdIHwgY2RrdG4uSVJlc29sdmFibGVcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKiBAcGFyYW0gd3JhcHNTZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpXG4gICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpXG4gIH1cblxuICAvKipcbiAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVyblxuICAqL1xuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQ29uZGl0aW9uT3V0cHV0UmVmZXJlbmNlIHtcbiAgICByZXR1cm4gbmV3IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVDb25kaXRpb25PdXRwdXRSZWZlcmVuY2UodGhpcy50ZXJyYWZvcm1SZXNvdXJjZSwgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsIGluZGV4LCB0aGlzLndyYXBzU2V0KTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlIHtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjZGlzYWJsZWQgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyI2Rpc2FibGVkfVxuICAqL1xuICByZWFkb25seSBkaXNhYmxlZD86IGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjbGFiZWwgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyI2xhYmVsfVxuICAqL1xuICByZWFkb25seSBsYWJlbD86IHN0cmluZztcbiAgLyoqXG4gICogYWN0aW9ucyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjYWN0aW9ucyBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXIjYWN0aW9uc31cbiAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uczogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnM7XG4gIC8qKlxuICAqIGNvbmRpdGlvbiBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjY29uZGl0aW9uIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlciNjb25kaXRpb259XG4gICovXG4gIHJlYWRvbmx5IGNvbmRpdGlvbj86IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVDb25kaXRpb25bXSB8IGNka3RuLklSZXNvbHZhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZVRvVGVycmFmb3JtKHN0cnVjdD86IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGUgfCBjZGt0bi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBkaXNhYmxlZDogY2RrdG4uYm9vbGVhblRvVGVycmFmb3JtKHN0cnVjdCEuZGlzYWJsZWQpLFxuICAgIGxhYmVsOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmxhYmVsKSxcbiAgICBhY3Rpb25zOiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQWN0aW9uc1RvVGVycmFmb3JtKHN0cnVjdCEuYWN0aW9ucyksXG4gICAgY29uZGl0aW9uOiBjZGt0bi5saXN0TWFwcGVyKGV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVDb25kaXRpb25Ub1RlcnJhZm9ybSwgdHJ1ZSkoc3RydWN0IS5jb25kaXRpb24pLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlIHwgY2RrdG4uSVJlc29sdmFibGUpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIGRpc2FibGVkOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uYm9vbGVhblRvSGNsVGVycmFmb3JtKHN0cnVjdCEuZGlzYWJsZWQpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgfSxcbiAgICBsYWJlbDoge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEubGFiZWwpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIHZhbHVlOiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQWN0aW9uc1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuYWN0aW9ucyksXG4gICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zTGlzdFwiLFxuICAgIH0sXG4gICAgY29uZGl0aW9uOiB7XG4gICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQ29uZGl0aW9uVG9IY2xUZXJyYWZvcm0sIHRydWUpKHN0cnVjdCEuY29uZGl0aW9uKSxcbiAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUNvbmRpdGlvbkxpc3RcIixcbiAgICB9LFxuICB9O1xuXG4gIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkpO1xufVxuXG5leHBvcnQgY2xhc3MgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZU91dHB1dFJlZmVyZW5jZSBleHRlbmRzIGNka3RuLkNvbXBsZXhPYmplY3Qge1xuICBwcml2YXRlIGlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXNvbHZhYmxlVmFsdWU/OiBjZGt0bi5JUmVzb2x2YWJsZTtcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKiBAcGFyYW0gY29tcGxleE9iamVjdEluZGV4IHRoZSBpbmRleCBvZiB0aGlzIGl0ZW0gaW4gdGhlIGxpc3RcbiAgKiBAcGFyYW0gY29tcGxleE9iamVjdElzRnJvbVNldCB3aGV0aGVyIHRoZSBsaXN0IGlzIHdyYXBwaW5nIGEgc2V0ICh3aWxsIGFkZCB0b2xpc3QoKSB0byBiZSBhYmxlIHRvIGFjY2VzcyBhbiBpdGVtIHZpYSBhbiBpbmRleClcbiAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRlcnJhZm9ybVJlc291cmNlOiBjZGt0bi5JSW50ZXJwb2xhdGluZ1BhcmVudCwgdGVycmFmb3JtQXR0cmlidXRlOiBzdHJpbmcsIGNvbXBsZXhPYmplY3RJbmRleDogbnVtYmVyLCBjb21wbGV4T2JqZWN0SXNGcm9tU2V0OiBib29sZWFuKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgY29tcGxleE9iamVjdElzRnJvbVNldCwgY29tcGxleE9iamVjdEluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJuYWxWYWx1ZSgpOiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlIHwgY2RrdG4uSVJlc29sdmFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnJlc29sdmFibGVWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2YWJsZVZhbHVlO1xuICAgIH1cbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl9kaXNhYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGFiZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubGFiZWwgPSB0aGlzLl9sYWJlbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2FjdGlvbnM/LmludGVybmFsVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuYWN0aW9ucyA9IHRoaXMuX2FjdGlvbnM/LmludGVybmFsVmFsdWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25kaXRpb24/LmludGVybmFsVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuY29uZGl0aW9uID0gdGhpcy5fY29uZGl0aW9uPy5pbnRlcm5hbFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZSB8IGNka3RuLklSZXNvbHZhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNvbHZhYmxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2xhYmVsID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYWN0aW9ucy5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fY29uZGl0aW9uLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUodmFsdWUpKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZS5kaXNhYmxlZDtcbiAgICAgIHRoaXMuX2xhYmVsID0gdmFsdWUubGFiZWw7XG4gICAgICB0aGlzLl9hY3Rpb25zLmludGVybmFsVmFsdWUgPSB2YWx1ZS5hY3Rpb25zO1xuICAgICAgdGhpcy5fY29uZGl0aW9uLmludGVybmFsVmFsdWUgPSB2YWx1ZS5jb25kaXRpb247XG4gICAgfVxuICB9XG5cbiAgLy8gZGlzYWJsZWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ/OiBib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gIH1cbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREaXNhYmxlZCgpIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICAvLyBpZCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwdWJsaWMgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaWQnKTtcbiAgfVxuXG4gIC8vIGxhYmVsIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2xhYmVsPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBsYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2xhYmVsJyk7XG4gIH1cbiAgcHVibGljIHNldCBsYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbGFiZWwgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRMYWJlbCgpIHtcbiAgICB0aGlzLl9sYWJlbCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbGFiZWxJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWw7XG4gIH1cblxuICAvLyBhY3Rpb25zIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX2FjdGlvbnMgPSBuZXcgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUFjdGlvbnNPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJhY3Rpb25zXCIpO1xuICBwdWJsaWMgZ2V0IGFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnM7XG4gIH1cbiAgcHVibGljIHB1dEFjdGlvbnModmFsdWU6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVBY3Rpb25zKSB7XG4gICAgdGhpcy5fYWN0aW9ucy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGFjdGlvbnNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gY29uZGl0aW9uIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2NvbmRpdGlvbiA9IG5ldyBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlQ29uZGl0aW9uTGlzdCh0aGlzLCBcImNvbmRpdGlvblwiLCBmYWxzZSk7XG4gIHB1YmxpYyBnZXQgY29uZGl0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25kaXRpb247XG4gIH1cbiAgcHVibGljIHB1dENvbmRpdGlvbih2YWx1ZTogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZUNvbmRpdGlvbltdIHwgY2RrdG4uSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9jb25kaXRpb24uaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldENvbmRpdGlvbigpIHtcbiAgICB0aGlzLl9jb25kaXRpb24uaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY29uZGl0aW9uSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbi5pbnRlcm5hbFZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlTGlzdCBleHRlbmRzIGNka3RuLkNvbXBsZXhMaXN0IHtcbiAgcHVibGljIGludGVybmFsVmFsdWU/IDogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZVtdIHwgY2RrdG4uSVJlc29sdmFibGVcblxuICAvKipcbiAgKiBAcGFyYW0gdGVycmFmb3JtUmVzb3VyY2UgVGhlIHBhcmVudCByZXNvdXJjZVxuICAqIEBwYXJhbSB0ZXJyYWZvcm1BdHRyaWJ1dGUgVGhlIGF0dHJpYnV0ZSBvbiB0aGUgcGFyZW50IHJlc291cmNlIHRoaXMgY2xhc3MgaXMgcmVmZXJlbmNpbmdcbiAgKiBAcGFyYW0gd3JhcHNTZXQgd2hldGhlciB0aGUgbGlzdCBpcyB3cmFwcGluZyBhIHNldCAod2lsbCBhZGQgdG9saXN0KCkgdG8gYmUgYWJsZSB0byBhY2Nlc3MgYW4gaXRlbSB2aWEgYW4gaW5kZXgpXG4gICovXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHByb3RlY3RlZCB0ZXJyYWZvcm1BdHRyaWJ1dGU6IHN0cmluZywgcHJvdGVjdGVkIHdyYXBzU2V0OiBib29sZWFuKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgd3JhcHNTZXQpXG4gIH1cblxuICAvKipcbiAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIHJldHVyblxuICAqL1xuICBwdWJsaWMgZ2V0KGluZGV4OiBudW1iZXIpOiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlT3V0cHV0UmVmZXJlbmNlIHtcbiAgICByZXR1cm4gbmV3IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVPdXRwdXRSZWZlcmVuY2UodGhpcy50ZXJyYWZvcm1SZXNvdXJjZSwgdGhpcy50ZXJyYWZvcm1BdHRyaWJ1dGUsIGluZGV4LCB0aGlzLndyYXBzU2V0KTtcbiAgfVxufVxuZXhwb3J0IGludGVyZmFjZSBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXQge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9ldmVudF9vcmNoZXN0cmF0aW9uX3JvdXRlciNpZCBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXIjaWR9XG4gICpcbiAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgaWQgZmllbGQgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgcmVzb3VyY2VzIGluIFRlcnJhZm9ybSBwcm92aWRlcnMgdXNpbmcgYSBUZXJyYWZvcm0gcHJvdmlkZXIgU0RLIHZlcnNpb24gYmVsb3cgMi5cbiAgKiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyBzZXR0aW5nIHRoaXMgdmFsdWUgaXQgbWlnaHQgbm90IGJlIHNldHRhYmxlLiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVyIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIGl0IHNob3VsZCBiZSBzZXR0YWJsZS5cbiAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqXG4gICogcnVsZSBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvcGFnZXJkdXR5L3BhZ2VyZHV0eS8zLjMxLjAvZG9jcy9yZXNvdXJjZXMvZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXIjcnVsZSBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXIjcnVsZX1cbiAgKi9cbiAgcmVhZG9ubHkgcnVsZT86IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVbXSB8IGNka3RuLklSZXNvbHZhYmxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0VG9UZXJyYWZvcm0oc3RydWN0PzogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0T3V0cHV0UmVmZXJlbmNlIHwgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0KTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGlkOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmlkKSxcbiAgICBydWxlOiBjZGt0bi5saXN0TWFwcGVyKGV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVUb1RlcnJhZm9ybSwgdHJ1ZSkoc3RydWN0IS5ydWxlKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRPdXRwdXRSZWZlcmVuY2UgfCBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXQpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIGlkOiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pZCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgcnVsZToge1xuICAgICAgdmFsdWU6IGNka3RuLmxpc3RNYXBwZXJIY2woZXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0UnVsZVRvSGNsVGVycmFmb3JtLCB0cnVlKShzdHJ1Y3QhLnJ1bGUpLFxuICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlTGlzdFwiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5faWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuaWQgPSB0aGlzLl9pZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3J1bGU/LmludGVybmFsVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQucnVsZSA9IHRoaXMuX3J1bGU/LmludGVybmFsVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXQgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9pZCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3J1bGUuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5faWQgPSB2YWx1ZS5pZDtcbiAgICAgIHRoaXMuX3J1bGUuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlLnJ1bGU7XG4gICAgfVxuICB9XG5cbiAgLy8gaWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfaWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaWQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuXG4gIC8vIHJ1bGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcnVsZSA9IG5ldyBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRSdWxlTGlzdCh0aGlzLCBcInJ1bGVcIiwgZmFsc2UpO1xuICBwdWJsaWMgZ2V0IHJ1bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3J1bGU7XG4gIH1cbiAgcHVibGljIHB1dFJ1bGUodmFsdWU6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldFJ1bGVbXSB8IGNka3RuLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fcnVsZS5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UnVsZSgpIHtcbiAgICB0aGlzLl9ydWxlLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJ1bGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcnVsZS5pbnRlcm5hbFZhbHVlO1xuICB9XG59XG5cbi8qKlxuKiBSZXByZXNlbnRzIGEge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9ldmVudF9vcmNoZXN0cmF0aW9uX3JvdXRlciBwYWdlcmR1dHlfZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXJ9XG4qL1xuZXhwb3J0IGNsYXNzIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlciBleHRlbmRzIGNka3RuLlRlcnJhZm9ybVJlc291cmNlIHtcblxuICAvLyA9PT09PT09PT09PT09PT09PVxuICAvLyBTVEFUSUMgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHRmUmVzb3VyY2VUeXBlID0gXCJwYWdlcmR1dHlfZXZlbnRfb3JjaGVzdHJhdGlvbl9yb3V0ZXJcIjtcblxuICAvLyA9PT09PT09PT09PT09PVxuICAvLyBTVEFUSUMgTWV0aG9kc1xuICAvLyA9PT09PT09PT09PT09PVxuICAvKipcbiAgKiBHZW5lcmF0ZXMgQ0RLVE4gY29kZSBmb3IgaW1wb3J0aW5nIGEgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyIHJlc291cmNlIHVwb24gcnVubmluZyBcImNka3RuIHBsYW4gPHN0YWNrLW5hbWU+XCJcbiAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAqIEBwYXJhbSBpbXBvcnRUb0lkIFRoZSBjb25zdHJ1Y3QgaWQgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIGNvbmZpZyBmb3IgdGhlIEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlciB0byBpbXBvcnRcbiAgKiBAcGFyYW0gaW1wb3J0RnJvbUlkIFRoZSBpZCBvZiB0aGUgZXhpc3RpbmcgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyIHRoYXQgc2hvdWxkIGJlIGltcG9ydGVkLiBSZWZlciB0byB0aGUge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9wYWdlcmR1dHkvcGFnZXJkdXR5LzMuMzEuMC9kb2NzL3Jlc291cmNlcy9ldmVudF9vcmNoZXN0cmF0aW9uX3JvdXRlciNpbXBvcnQgaW1wb3J0IHNlY3Rpb259IGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgcmVzb3VyY2UgZm9yIHRoZSBpZCB0byB1c2VcbiAgKiBAcGFyYW0gcHJvdmlkZXI/IE9wdGlvbmFsIGluc3RhbmNlIG9mIHRoZSBwcm92aWRlciB3aGVyZSB0aGUgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyIHRvIGltcG9ydCBpcyBmb3VuZFxuICAqL1xuICBwdWJsaWMgc3RhdGljIGdlbmVyYXRlQ29uZmlnRm9ySW1wb3J0KHNjb3BlOiBDb25zdHJ1Y3QsIGltcG9ydFRvSWQ6IHN0cmluZywgaW1wb3J0RnJvbUlkOiBzdHJpbmcsIHByb3ZpZGVyPzogY2RrdG4uVGVycmFmb3JtUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBjZGt0bi5JbXBvcnRhYmxlUmVzb3VyY2Uoc2NvcGUsIGltcG9ydFRvSWQsIHsgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiBcInBhZ2VyZHV0eV9ldmVudF9vcmNoZXN0cmF0aW9uX3JvdXRlclwiLCBpbXBvcnRJZDogaW1wb3J0RnJvbUlkLCBwcm92aWRlciB9KTtcbiAgICAgIH1cblxuICAvLyA9PT09PT09PT09PVxuICAvLyBJTklUSUFMSVpFUlxuICAvLyA9PT09PT09PT09PVxuXG4gIC8qKlxuICAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL3BhZ2VyZHV0eS9wYWdlcmR1dHkvMy4zMS4wL2RvY3MvcmVzb3VyY2VzL2V2ZW50X29yY2hlc3RyYXRpb25fcm91dGVyIHBhZ2VyZHV0eV9ldmVudF9vcmNoZXN0cmF0aW9uX3JvdXRlcn0gUmVzb3VyY2VcbiAgKlxuICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICogQHBhcmFtIGlkIFRoZSBzY29wZWQgY29uc3RydWN0IElELiBNdXN0IGJlIHVuaXF1ZSBhbW9uZ3N0IHNpYmxpbmdzIGluIHRoZSBzYW1lIHNjb3BlXG4gICogQHBhcmFtIG9wdGlvbnMgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ29uZmlnXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNvbmZpZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiAncGFnZXJkdXR5X2V2ZW50X29yY2hlc3RyYXRpb25fcm91dGVyJyxcbiAgICAgIHRlcnJhZm9ybUdlbmVyYXRvck1ldGFkYXRhOiB7XG4gICAgICAgIHByb3ZpZGVyTmFtZTogJ3BhZ2VyZHV0eScsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogJzMuMzEuMCcsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQ6ICd+PiAzLjAnXG4gICAgICB9LFxuICAgICAgcHJvdmlkZXI6IGNvbmZpZy5wcm92aWRlcixcbiAgICAgIGRlcGVuZHNPbjogY29uZmlnLmRlcGVuZHNPbixcbiAgICAgIGNvdW50OiBjb25maWcuY291bnQsXG4gICAgICBsaWZlY3ljbGU6IGNvbmZpZy5saWZlY3ljbGUsXG4gICAgICBwcm92aXNpb25lcnM6IGNvbmZpZy5wcm92aXNpb25lcnMsXG4gICAgICBjb25uZWN0aW9uOiBjb25maWcuY29ubmVjdGlvbixcbiAgICAgIGZvckVhY2g6IGNvbmZpZy5mb3JFYWNoXG4gICAgfSk7XG4gICAgdGhpcy5fZXZlbnRPcmNoZXN0cmF0aW9uID0gY29uZmlnLmV2ZW50T3JjaGVzdHJhdGlvbjtcbiAgICB0aGlzLl9pZCA9IGNvbmZpZy5pZDtcbiAgICB0aGlzLl9jYXRjaEFsbC5pbnRlcm5hbFZhbHVlID0gY29uZmlnLmNhdGNoQWxsO1xuICAgIHRoaXMuX3NldC5pbnRlcm5hbFZhbHVlID0gY29uZmlnLnNldDtcbiAgfVxuXG4gIC8vID09PT09PT09PT1cbiAgLy8gQVRUUklCVVRFU1xuICAvLyA9PT09PT09PT09XG5cbiAgLy8gZXZlbnRfb3JjaGVzdHJhdGlvbiAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF9ldmVudE9yY2hlc3RyYXRpb24/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGV2ZW50T3JjaGVzdHJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2V2ZW50X29yY2hlc3RyYXRpb24nKTtcbiAgfVxuICBwdWJsaWMgc2V0IGV2ZW50T3JjaGVzdHJhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZXZlbnRPcmNoZXN0cmF0aW9uID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGV2ZW50T3JjaGVzdHJhdGlvbklucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9ldmVudE9yY2hlc3RyYXRpb247XG4gIH1cblxuICAvLyBpZCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2lkPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2lkJyk7XG4gIH1cbiAgcHVibGljIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faWQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJZCgpIHtcbiAgICB0aGlzLl9pZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaWRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICAvLyBjYXRjaF9hbGwgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfY2F0Y2hBbGwgPSBuZXcgRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ2F0Y2hBbGxPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJjYXRjaF9hbGxcIik7XG4gIHB1YmxpYyBnZXQgY2F0Y2hBbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGNoQWxsO1xuICB9XG4gIHB1YmxpYyBwdXRDYXRjaEFsbCh2YWx1ZTogRXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyQ2F0Y2hBbGwpIHtcbiAgICB0aGlzLl9jYXRjaEFsbC5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNhdGNoQWxsSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhdGNoQWxsLmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyBzZXQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfc2V0ID0gbmV3IEV2ZW50T3JjaGVzdHJhdGlvblJvdXRlclNldE91dHB1dFJlZmVyZW5jZSh0aGlzLCBcInNldFwiKTtcbiAgcHVibGljIGdldCBzZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldDtcbiAgfVxuICBwdWJsaWMgcHV0U2V0KHZhbHVlOiBFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXQpIHtcbiAgICB0aGlzLl9zZXQuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBzZXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0LmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyA9PT09PT09PT1cbiAgLy8gU1lOVEhFU0lTXG4gIC8vID09PT09PT09PVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X29yY2hlc3RyYXRpb246IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2V2ZW50T3JjaGVzdHJhdGlvbiksXG4gICAgICBpZDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5faWQpLFxuICAgICAgY2F0Y2hfYWxsOiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJDYXRjaEFsbFRvVGVycmFmb3JtKHRoaXMuX2NhdGNoQWxsLmludGVybmFsVmFsdWUpLFxuICAgICAgc2V0OiBldmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRUb1RlcnJhZm9ybSh0aGlzLl9zZXQuaW50ZXJuYWxWYWx1ZSksXG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplSGNsQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgY29uc3QgYXR0cnMgPSB7XG4gICAgICBldmVudF9vcmNoZXN0cmF0aW9uOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9ldmVudE9yY2hlc3RyYXRpb24pLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBpZDoge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5faWQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBjYXRjaF9hbGw6IHtcbiAgICAgICAgdmFsdWU6IGV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNhdGNoQWxsVG9IY2xUZXJyYWZvcm0odGhpcy5fY2F0Y2hBbGwuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIkV2ZW50T3JjaGVzdHJhdGlvblJvdXRlckNhdGNoQWxsTGlzdFwiLFxuICAgICAgfSxcbiAgICAgIHNldDoge1xuICAgICAgICB2YWx1ZTogZXZlbnRPcmNoZXN0cmF0aW9uUm91dGVyU2V0VG9IY2xUZXJyYWZvcm0odGhpcy5fc2V0LmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJFdmVudE9yY2hlc3RyYXRpb25Sb3V0ZXJTZXRMaXN0XCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCApKVxuICB9XG59XG4iXX0=
|