application-sidebar 1.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/README.md +24 -0
- package/application-sidebar.theme.scss +44 -0
- package/assets/logos/Intentwise.svg +11 -0
- package/assets/logos/ProfitlogiQ_logo.png +0 -0
- package/assets/logos/bmc_logo.png +0 -0
- package/assets/logos/intentwise_logo.png +0 -0
- package/assets/logos/krooga_logo.png +0 -0
- package/assets/logos/opt_logo.png +0 -0
- package/assets/logos/optivations_logo.png +0 -0
- package/assets/logos/upstart_logo.png +0 -0
- package/assets/sidemenu-icons/Perf_Diagnostics_Detail.svg +15 -0
- package/assets/sidemenu-icons/Performance_Diagnostics.svg +12 -0
- package/assets/sidemenu-icons/account_management.svg +15 -0
- package/assets/sidemenu-icons/asin_overview.svg +18 -0
- package/assets/sidemenu-icons/audience.svg +22 -0
- package/assets/sidemenu-icons/auto_targeting.svg +16 -0
- package/assets/sidemenu-icons/automated_rule.svg +17 -0
- package/assets/sidemenu-icons/bookmark-archive.svg +15 -0
- package/assets/sidemenu-icons/calendar.svg +1 -0
- package/assets/sidemenu-icons/campaign_placement.svg +16 -0
- package/assets/sidemenu-icons/campaign_report.svg +13 -0
- package/assets/sidemenu-icons/cardboard-box.svg +13 -0
- package/assets/sidemenu-icons/category_reporting.svg +14 -0
- package/assets/sidemenu-icons/coins.svg +24 -0
- package/assets/sidemenu-icons/compettive_ad_tracking.svg +17 -0
- package/assets/sidemenu-icons/configuration-5968_94f8832d-fd0a-4001-9bf0-c5820072ab85.svg +16 -0
- package/assets/sidemenu-icons/creatives.svg +18 -0
- package/assets/sidemenu-icons/demand_forcasting.svg +27 -0
- package/assets/sidemenu-icons/document-error.svg +17 -0
- package/assets/sidemenu-icons/download-40586C.svg +1 -0
- package/assets/sidemenu-icons/favorite-window.svg +19 -0
- package/assets/sidemenu-icons/file-explorer.svg +12 -0
- package/assets/sidemenu-icons/help-circle.svg +1 -0
- package/assets/sidemenu-icons/help-icon.svg +1 -0
- package/assets/sidemenu-icons/help_icon.png +0 -0
- package/assets/sidemenu-icons/help_icon_white.png +0 -0
- package/assets/sidemenu-icons/high_level_metrics.svg +20 -0
- package/assets/sidemenu-icons/horizontal-mixer-158_fe655cc6-eb7e-4e44-af0f-0ce0830c9433.svg +19 -0
- package/assets/sidemenu-icons/inventory_forecast.svg +13 -0
- package/assets/sidemenu-icons/keyword_suggestion.svg +16 -0
- package/assets/sidemenu-icons/keywords.svg +18 -0
- package/assets/sidemenu-icons/line-item.svg +17 -0
- package/assets/sidemenu-icons/management.svg +14 -0
- package/assets/sidemenu-icons/maximize-40586C.svg +1 -0
- package/assets/sidemenu-icons/maximize.svg +1 -0
- package/assets/sidemenu-icons/mental-health.svg +16 -0
- package/assets/sidemenu-icons/minimize-40586C.svg +1 -0
- package/assets/sidemenu-icons/minimize.svg +1 -0
- package/assets/sidemenu-icons/new_product.svg +11 -0
- package/assets/sidemenu-icons/orders.svg +15 -0
- package/assets/sidemenu-icons/organic_ranking.svg +17 -0
- package/assets/sidemenu-icons/placement.svg +14 -0
- package/assets/sidemenu-icons/portfolio-grid.svg +17 -0
- package/assets/sidemenu-icons/pos_and_ams.svg +17 -0
- package/assets/sidemenu-icons/price-tag.svg +14 -0
- package/assets/sidemenu-icons/prime_day.svg +16 -0
- package/assets/sidemenu-icons/product_asin.svg +21 -0
- package/assets/sidemenu-icons/product_content.svg +13 -0
- package/assets/sidemenu-icons/product_overview_download.svg +15 -0
- package/assets/sidemenu-icons/purchase-order.svg +15 -0
- package/assets/sidemenu-icons/quit.svg +12 -0
- package/assets/sidemenu-icons/radar-signal.svg +15 -0
- package/assets/sidemenu-icons/report-download.svg +15 -0
- package/assets/sidemenu-icons/report.svg +18 -0
- package/assets/sidemenu-icons/ring-binders-3503_6f429b0c-3931-476a-b65e-ce5a4b9249de.svg +25 -0
- package/assets/sidemenu-icons/sales_overview.svg +19 -0
- package/assets/sidemenu-icons/sb_search_terms.svg +22 -0
- package/assets/sidemenu-icons/sc_order_report.svg +18 -0
- package/assets/sidemenu-icons/schedule_icon.png +0 -0
- package/assets/sidemenu-icons/search-place.svg +15 -0
- package/assets/sidemenu-icons/setting.svg +12 -0
- package/assets/sidemenu-icons/settings-2180_735e6b4c-49a9-4407-9ca1-5078e3c6eb1b.svg +20 -0
- package/assets/sidemenu-icons/signout_icon.png +0 -0
- package/assets/sidemenu-icons/sorting-149_8150e98a-647b-477d-a382-2ff46463a1fd.svg +16 -0
- package/assets/sidemenu-icons/sp_ad-groups.svg +16 -0
- package/assets/sidemenu-icons/sreenath_pic.jpg +0 -0
- package/assets/sidemenu-icons/targeting.svg +14 -0
- package/assets/sidemenu-icons/user-icon.svg +1 -0
- package/assets/sidemenu-icons/user.svg +1 -0
- package/assets/sidemenu-icons/user_icon.png +0 -0
- package/assets/sidemenu-icons/user_icon_white.png +0 -0
- package/assets/sidemenu-icons/vendor_charge_backs.svg +12 -0
- package/assets/sidemenu-icons/vendor_replenishment_code.svg +16 -0
- package/assets/sidemenu-icons/vendor_sales_alert.svg +20 -0
- package/assets/sidemenu-icons/vendor_sales_overivew.svg +14 -0
- package/assets/sidemenu-icons/video-icon.svg +1 -0
- package/assets/sidemenu-icons/video.svg +1 -0
- package/assets/sidemenu-icons/video_icon.png +0 -0
- package/assets/sidemenu-icons/video_icon_white.png +0 -0
- package/assets/sidemenu-icons/x-circle.svg +1 -0
- package/esm2022/application-sidebar.mjs +5 -0
- package/esm2022/lib/app-details.mjs +2 -0
- package/esm2022/lib/application-sidebar.component.mjs +473 -0
- package/esm2022/lib/application-sidebar.module.mjs +152 -0
- package/esm2022/lib/constants.mjs +1016 -0
- package/esm2022/lib/nav-menu-item.mjs +2 -0
- package/esm2022/lib/nav-menu.directive.mjs +32 -0
- package/esm2022/lib/nav-menus/nav-menus.component.mjs +264 -0
- package/esm2022/lib/services/application-sidebar.service.mjs +627 -0
- package/esm2022/lib/services/rest-api.services.mjs +98 -0
- package/esm2022/lib/services/url-context.service.mjs +104 -0
- package/esm2022/lib/translations/translations-en.mjs +33 -0
- package/esm2022/lib/translations/translations-ja.mjs +33 -0
- package/esm2022/public-api.mjs +7 -0
- package/fesm2022/application-sidebar.mjs +2778 -0
- package/fesm2022/application-sidebar.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/app-details.d.ts +13 -0
- package/lib/application-sidebar.component.d.ts +63 -0
- package/lib/application-sidebar.module.d.ts +44 -0
- package/lib/constants.d.ts +496 -0
- package/lib/nav-menu-item.d.ts +32 -0
- package/lib/nav-menu.directive.d.ts +17 -0
- package/lib/nav-menus/nav-menus.component.d.ts +41 -0
- package/lib/services/application-sidebar.service.d.ts +97 -0
- package/lib/services/rest-api.services.d.ts +22 -0
- package/lib/services/url-context.service.d.ts +15 -0
- package/lib/translations/translations-en.d.ts +32 -0
- package/lib/translations/translations-ja.d.ts +32 -0
- package/package.json +72 -0
- package/public-api.d.ts +3 -0
|
@@ -0,0 +1,627 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { MENULIST } from '../constants';
|
|
3
|
+
import { GLOBAL_SETTING_LIST } from '../constants';
|
|
4
|
+
import { RestApiService } from './rest-api.services';
|
|
5
|
+
import { ActivatedRoute } from '@angular/router';
|
|
6
|
+
import { UrlContextService } from './url-context.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./rest-api.services";
|
|
9
|
+
import * as i2 from "@angular/router";
|
|
10
|
+
import * as i3 from "./url-context.service";
|
|
11
|
+
export class ApplicationSidebarService {
|
|
12
|
+
RestApiService;
|
|
13
|
+
activatedRoute;
|
|
14
|
+
urlContextService;
|
|
15
|
+
conditions = ['org_user_ctrl', 'visibility_roles', 'visibility_roles_not_in', 'account_ids', 'organization_ids', 'organization_ids_not_in', 'account_type', 'account_ids_not_in', 'organization_setting', 'organization_setting_not_in', 'campaign_types', 'incontext_campaign_targeting', 'incontext_campaign_targeting_walmart', 'subscription_types', 'siteIds', 'not_account_type', 'not_account_name', 'disable_readonly_org', 'user_emails', 'app_org_setting'];
|
|
16
|
+
MenuList = [];
|
|
17
|
+
applicationIds = ['ads_amazon_advertising', 'ads_seller_sales', 'ads_vendor_sales', 'ads_amazon_content_share_of_voice', 'ads_amazon_content_content_analytics', 'ads_amazon_dsp', 'ads_amazon_attribution', 'ads_instacart', 'ads_criteo', 'ads_walmart', 'ads_data_platform', 'amc-platform-web', 'ads_amazon_seller_seller_analytics', 'ads_amazon_seller_vendor_analytics'];
|
|
18
|
+
enableAllMenusByOrg = [30780];
|
|
19
|
+
appDetails;
|
|
20
|
+
isStructureApiSupport;
|
|
21
|
+
SettingsMenuList;
|
|
22
|
+
appNames;
|
|
23
|
+
contentAppRoutes = ['content-insight', 'content-analytics', 'content', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
|
|
24
|
+
sovAppRoutes = ['insights', 'share-of-voice', 'sov', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
|
|
25
|
+
sellerAnalyticsAppRoutes = ['seller/insights', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
|
|
26
|
+
vendorAnalyticsAppRoutes = ['vendor/insights', 'product-meta-data', 'brand-terms-settings', 'labels-settings', 'sub-brands', 'sub-brands-mapping', 'sov-settings', 'content-settings'];
|
|
27
|
+
typeStatusConfigs = {
|
|
28
|
+
'SPONSORED_KEYWORD_BIDS': true,
|
|
29
|
+
'SPONSORED_PRODUCT_MANUAL_TARGETING_BIDS': true,
|
|
30
|
+
'SPONSORED_PRODUCT_AUTO_TARGETING_BIDS': true,
|
|
31
|
+
'SPONSORED_KEYWORD_AUTO': true,
|
|
32
|
+
'SPONSORED_KEYWORD': true,
|
|
33
|
+
'SP_KEYWORDS_BID_GAP': false,
|
|
34
|
+
'SP_PLACEMENT_BID': false,
|
|
35
|
+
'SP_TARGETING_TYPE_BREAKDOWN': false,
|
|
36
|
+
'SP_MATCH_TYPE_BREAKDOWN': false,
|
|
37
|
+
'SP_SB_KEYWORD_PARITY': true,
|
|
38
|
+
'HEADLINE_KEYWORD_BIDS': true,
|
|
39
|
+
'SB_KEYWORDS_BID_GAP': false,
|
|
40
|
+
'SB_MATCH_TYPE_BREAKDOWN': false,
|
|
41
|
+
'SB_SP_KEYWORD_PARITY': true,
|
|
42
|
+
'NO_KEYWORD_BIDS': true,
|
|
43
|
+
'CAMPAIGN_TYPE_BREAKDOWN': false,
|
|
44
|
+
'AUTO_TO_MANUAL_ASIN_PARITY': true,
|
|
45
|
+
'MANUAL_TO_AUTO_ASIN_PARITY': true,
|
|
46
|
+
'COMPETITOR_PRODUCT': true,
|
|
47
|
+
'SPONSORED_BRAND_KEYWORD': true
|
|
48
|
+
};
|
|
49
|
+
constructor(RestApiService, activatedRoute, urlContextService) {
|
|
50
|
+
this.RestApiService = RestApiService;
|
|
51
|
+
this.activatedRoute = activatedRoute;
|
|
52
|
+
this.urlContextService = urlContextService;
|
|
53
|
+
}
|
|
54
|
+
getTypeStatusConfigs() {
|
|
55
|
+
return this.typeStatusConfigs;
|
|
56
|
+
}
|
|
57
|
+
constructChildMenus(menuItems) {
|
|
58
|
+
if (this.appDetails.listMenus) {
|
|
59
|
+
for (let item of menuItems) {
|
|
60
|
+
if (this.appDetails.appSet) {
|
|
61
|
+
if (item.id.includes(this.appDetails.applicationId)) {
|
|
62
|
+
for (let listMenuItem of this.appDetails.listMenus) {
|
|
63
|
+
if (item.id == listMenuItem.id) {
|
|
64
|
+
item.children = listMenuItem.children;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else if (item.id == this.appDetails.applicationId) {
|
|
70
|
+
item.children = this.appDetails.listMenus;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return menuItems;
|
|
75
|
+
}
|
|
76
|
+
getMenuList(appDetails) {
|
|
77
|
+
this.appDetails = appDetails;
|
|
78
|
+
this.MenuList = [];
|
|
79
|
+
let appendChildMenus = this.constructChildMenus(MENULIST);
|
|
80
|
+
let MENULIST_SORTED = MENULIST.sort((a, b) => (a.order > b.order) ? 1 : -1);
|
|
81
|
+
this.appNames = this.applicationIds;
|
|
82
|
+
if ((this.appDetails.currentOrganization.organizationId === 10390 ||
|
|
83
|
+
this.appDetails.currentOrganization.organizationId === 10530) &&
|
|
84
|
+
this.appDetails.userInfo.email == "sreenath@intentwise.com") {
|
|
85
|
+
this.appNames = this.applicationIds.filter((name) => {
|
|
86
|
+
return (name != 'ads_amazon_content_share_of_voice' && name != 'ads_amazon_content_content_analytics');
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
for (let appName of MENULIST_SORTED) {
|
|
90
|
+
if (this.appNames.indexOf(appName.id) >= 0) {
|
|
91
|
+
let list = this.getApplicationMenuItem(appName);
|
|
92
|
+
if (list && list.children != undefined) {
|
|
93
|
+
if (appName.id == 'ads_amazon_dsp') {
|
|
94
|
+
if (list.children && list.children.length > 0) {
|
|
95
|
+
for (let child of list.children) {
|
|
96
|
+
if (!this.isStructureApiSupport && child.id == "ams_dsp_settings") {
|
|
97
|
+
child.children = child.children.filter(s_child => s_child.id !== 'ams_dsp_rules');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
this.MenuList.push(list);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.MenuList.push(list);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else if (appName.type != 'expandable') {
|
|
109
|
+
let list = this.getApplicationMenuItem(appName);
|
|
110
|
+
if (list != undefined) {
|
|
111
|
+
this.MenuList.push(list);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return this.MenuList;
|
|
116
|
+
}
|
|
117
|
+
getApplicationMenuItem(currentMenuItem) {
|
|
118
|
+
let menuItem = {
|
|
119
|
+
children: []
|
|
120
|
+
};
|
|
121
|
+
if (currentMenuItem.type != 'expandable') {
|
|
122
|
+
let allKeys = Object.keys(currentMenuItem);
|
|
123
|
+
const hasConditionstoCheck = this.conditions.some(condition => allKeys.includes(condition));
|
|
124
|
+
if (hasConditionstoCheck) {
|
|
125
|
+
let isMenuAllowed = this.checkAllConditions(currentMenuItem, allKeys);
|
|
126
|
+
if (isMenuAllowed) {
|
|
127
|
+
menuItem = currentMenuItem;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// console.log('return empty');
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
menuItem = currentMenuItem;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
let allKeys = Object.keys(currentMenuItem);
|
|
140
|
+
const hasConditionstoCheck = this.conditions.some(condition => allKeys.includes(condition));
|
|
141
|
+
if (!hasConditionstoCheck || (hasConditionstoCheck && this.checkAllConditions(currentMenuItem, allKeys))) {
|
|
142
|
+
Object.keys(currentMenuItem).forEach((key) => {
|
|
143
|
+
if (typeof currentMenuItem[key] != "object") {
|
|
144
|
+
menuItem[key] = currentMenuItem[key];
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
menuItem.children = [];
|
|
148
|
+
for (let child of currentMenuItem.children) {
|
|
149
|
+
let nav_menu = this.getApplicationMenuItem(child);
|
|
150
|
+
if (nav_menu != null) {
|
|
151
|
+
if (nav_menu.children != undefined) {
|
|
152
|
+
if (nav_menu.children.length > 0) {
|
|
153
|
+
menuItem.children.push(nav_menu);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
menuItem.children.push(nav_menu);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return menuItem;
|
|
167
|
+
}
|
|
168
|
+
getGlobalSettingsMenu(appDetails) {
|
|
169
|
+
this.appDetails = appDetails;
|
|
170
|
+
this.SettingsMenuList = [];
|
|
171
|
+
let GLOBAL_SETTING_LIST_SORTED = GLOBAL_SETTING_LIST.sort((a, b) => (a.order > b.order) ? 1 : -1);
|
|
172
|
+
for (let appName of GLOBAL_SETTING_LIST_SORTED) {
|
|
173
|
+
if (appName.type == 'expandable') {
|
|
174
|
+
let list = this.getApplicationMenuItem(appName);
|
|
175
|
+
if (list.children != undefined && list.children.length > 0) {
|
|
176
|
+
this.SettingsMenuList.push(list);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else if (appName.type != 'expandable') {
|
|
180
|
+
let list = this.getApplicationMenuItem(appName);
|
|
181
|
+
if (list != undefined) {
|
|
182
|
+
this.SettingsMenuList.push(list);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return this.SettingsMenuList;
|
|
187
|
+
}
|
|
188
|
+
checkAllConditions(currentMenuItem, allKeys) {
|
|
189
|
+
let includeMenu = false;
|
|
190
|
+
if ((!this.appDetails.currentAccount && currentMenuItem.id == "ads_overview" && !this.appDetails.currentOrganization['noActiveAccounts'])) {
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
else if (currentMenuItem.id === "ads_signup_overview") {
|
|
194
|
+
if (!this.appDetails.currentAccount && this.appDetails.currentOrganization['noActiveAccounts']) {
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
for (let cond of this.conditions) {
|
|
202
|
+
if (currentMenuItem[cond] != undefined) {
|
|
203
|
+
switch (cond) {
|
|
204
|
+
case 'visibility_roles': {
|
|
205
|
+
includeMenu = this.checkForRoles(currentMenuItem[cond]);
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
case 'visibility_roles_not_in': {
|
|
209
|
+
includeMenu = this.checkForvisibilityRolesNotIn(currentMenuItem[cond]);
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
case 'disable_readonly_org': {
|
|
213
|
+
includeMenu = this.disableForOrgwithReadOnly(currentMenuItem[cond]);
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
case 'organization_ids': {
|
|
217
|
+
if (this.appDetails.currentAccount && this.appDetails.currentAccount.organizationId) {
|
|
218
|
+
includeMenu = this.checkForSpecifiedIds(currentMenuItem[cond], currentMenuItem, this.appDetails.currentAccount.organizationId);
|
|
219
|
+
}
|
|
220
|
+
else if (this.appDetails.currentOrganization && this.appDetails.currentOrganization.organizationId) {
|
|
221
|
+
includeMenu = this.checkForSpecifiedIds(currentMenuItem[cond], currentMenuItem, this.appDetails.currentOrganization.organizationId);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
includeMenu = false;
|
|
225
|
+
}
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
case 'organization_ids_not_in': {
|
|
229
|
+
if (this.appDetails.currentAccount && this.appDetails.currentAccount.organizationId) {
|
|
230
|
+
includeMenu = this.checkForSpecifiedIdsNotIn(currentMenuItem[cond], currentMenuItem, this.appDetails.currentAccount.organizationId);
|
|
231
|
+
}
|
|
232
|
+
else if (this.appDetails.currentOrganization && this.appDetails.currentOrganization.organizationId) {
|
|
233
|
+
includeMenu = this.checkForSpecifiedIdsNotIn(currentMenuItem[cond], currentMenuItem, this.appDetails.currentOrganization.organizationId);
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
includeMenu = false;
|
|
237
|
+
}
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
case 'org_user_ctrl': {
|
|
241
|
+
if (this.appDetails.currentOrganization && this.appDetails.currentOrganization.organizationId) {
|
|
242
|
+
includeMenu = this.checkForOrgWithUserRole(currentMenuItem[cond], currentMenuItem, this.appDetails.currentOrganization.organizationId);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
includeMenu = false;
|
|
246
|
+
}
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
case 'account_ids': {
|
|
250
|
+
if (this.appDetails.currentAccount && this.appDetails.currentAccount.amsAccountId) {
|
|
251
|
+
includeMenu = this.checkForSpecifiedIds(currentMenuItem[cond], currentMenuItem, this.appDetails.currentAccount.amsAccountId);
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
includeMenu = false;
|
|
255
|
+
}
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
case 'account_ids_not_in': {
|
|
259
|
+
includeMenu = this.checkForSpecifiedAccountIdsNotIn(currentMenuItem[cond], currentMenuItem, this.appDetails.currentAccount.amsAccountId);
|
|
260
|
+
break;
|
|
261
|
+
}
|
|
262
|
+
case 'not_account_name': {
|
|
263
|
+
includeMenu = this.checkForNotAccName(currentMenuItem[cond]);
|
|
264
|
+
break;
|
|
265
|
+
}
|
|
266
|
+
// case 'account_type' : {
|
|
267
|
+
// if(this.appDetails.currentAccount && this.appDetails.currentAccount.type) {
|
|
268
|
+
// includeMenu = this.checkForAccType(currentMenuItem);
|
|
269
|
+
// } else {
|
|
270
|
+
// includeMenu = false;
|
|
271
|
+
// }
|
|
272
|
+
// break;
|
|
273
|
+
// }
|
|
274
|
+
case 'organization_setting': {
|
|
275
|
+
includeMenu = this.checkForOrgSettings(currentMenuItem[cond]);
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
case 'app_org_setting': {
|
|
279
|
+
includeMenu = this.checkForOrgAppSettings(currentMenuItem[cond]);
|
|
280
|
+
break;
|
|
281
|
+
}
|
|
282
|
+
case 'organization_setting_not_in': {
|
|
283
|
+
includeMenu = this.checkForNotOrgSettings(currentMenuItem[cond]);
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
case 'siteIds': {
|
|
287
|
+
includeMenu = this.checkForSiteIds(currentMenuItem[cond]);
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
// case 'subscription_types' : {
|
|
291
|
+
// if(currentMenuItem['account_type'] == undefined){
|
|
292
|
+
// if(this.appDetails.currentAccount && this.appDetails.currentAccount.subscription) {
|
|
293
|
+
// includeMenu = this.checkForSubscriptions(currentMenuItem[cond])
|
|
294
|
+
// } else {
|
|
295
|
+
// includeMenu = false;
|
|
296
|
+
// }
|
|
297
|
+
// }else{
|
|
298
|
+
// if(this.appDetails.currentAccount && this.appDetails.currentAccount.type) {
|
|
299
|
+
// includeMenu = this.checkForAccType(currentMenuItem);
|
|
300
|
+
// } else {
|
|
301
|
+
// includeMenu = false;
|
|
302
|
+
// }
|
|
303
|
+
// }
|
|
304
|
+
// break;
|
|
305
|
+
// }
|
|
306
|
+
case 'campaign_types': {
|
|
307
|
+
if (this.appDetails.campaignInContext) {
|
|
308
|
+
includeMenu = this.checkForCampaignType(currentMenuItem[cond]);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
includeMenu = true;
|
|
312
|
+
}
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
case 'incontext_campaign_targeting': {
|
|
316
|
+
if (this.appDetails.campaignInContext) {
|
|
317
|
+
includeMenu = this.checkForCampaignTargeting(currentMenuItem[cond]);
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
includeMenu = true;
|
|
321
|
+
}
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
case 'incontext_campaign_targeting_walmart': {
|
|
325
|
+
if (this.appDetails.campaignInContextwalmart) {
|
|
326
|
+
includeMenu = this.checkForCampaignTargetingWalmart(currentMenuItem[cond]);
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
includeMenu = true;
|
|
330
|
+
}
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
case 'user_emails': {
|
|
334
|
+
includeMenu = this.authenticateUserMailMenu(currentMenuItem[cond]);
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
// default: {
|
|
338
|
+
// //statements;
|
|
339
|
+
// break;
|
|
340
|
+
// }
|
|
341
|
+
}
|
|
342
|
+
if (!includeMenu) {
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
includeMenu = true;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return includeMenu;
|
|
351
|
+
}
|
|
352
|
+
checkForNotAccName(possibleValues) {
|
|
353
|
+
if (possibleValues.indexOf(this.appDetails.currentAccount.name) == -1) {
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
checkForCampaignType(possibleValues) {
|
|
361
|
+
if (this.appDetails.campaignInContext && possibleValues.indexOf(this.appDetails.campaignInContext[0].dataType) >= 0) {
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
return false;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
checkForCampaignTargeting(possibleValues) {
|
|
369
|
+
if (this.appDetails.campaignInContext && possibleValues.indexOf(this.appDetails.campaignInContext[0].campaignTargeting) >= 0) {
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
else {
|
|
373
|
+
return false;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
checkForCampaignTargetingWalmart(possibleValues) {
|
|
377
|
+
if (this.appDetails.campaignInContextwalmart && possibleValues.indexOf(this.appDetails.campaignInContextwalmart[0].campaignTargeting) >= 0) {
|
|
378
|
+
return true;
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
return false;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
authenticateUserMailMenu(possibleValues) {
|
|
385
|
+
return possibleValues && possibleValues.includes(this.appDetails.userInfo.email);
|
|
386
|
+
}
|
|
387
|
+
checkForSubscriptions(possibleValues) {
|
|
388
|
+
for (let settings of this.appDetails.currentAccount.subscription) {
|
|
389
|
+
if ((possibleValues.indexOf(settings.type) >= 0) && settings.status == "ACTIVE") {
|
|
390
|
+
return true;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
395
|
+
checkForSiteIds(possibleValues) {
|
|
396
|
+
if (this.appDetails.sidebarInfo && this.appDetails.sidebarInfo.siteId && possibleValues.indexOf(+this.appDetails.sidebarInfo.siteId) >= 0) {
|
|
397
|
+
return true;
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
checkForOrgSettings(possibleValues) {
|
|
404
|
+
if (this.appDetails.orgSettings) {
|
|
405
|
+
for (let settings of this.appDetails.orgSettings) {
|
|
406
|
+
if (possibleValues.indexOf(settings.setting) >= 0) {
|
|
407
|
+
return true;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return false;
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
checkForOrgAppSettings(possibleValues) {
|
|
417
|
+
if (this.appDetails.orgAppSettings) {
|
|
418
|
+
for (let settings of this.appDetails.orgAppSettings) {
|
|
419
|
+
if (possibleValues.indexOf(settings.type) >= 0 && settings.status == 'ACTIVE') {
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
else {
|
|
426
|
+
return false;
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
checkForNotOrgSettings(possibleValues) {
|
|
430
|
+
let allow = true;
|
|
431
|
+
const role = ['SUPER_ADMIN', 'SUPER_ADMIN_READ_ONLY'];
|
|
432
|
+
const isAdminRole = role.indexOf(this.appDetails.userInfo.role) > -1 ? true : false;
|
|
433
|
+
if (this.appDetails.orgSettings && this.appDetails.orgSettings.length > 0) {
|
|
434
|
+
for (let settings of this.appDetails.orgSettings) {
|
|
435
|
+
if (!isAdminRole && possibleValues.indexOf(settings.setting) > -1) {
|
|
436
|
+
allow = false;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return allow;
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
return allow;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
checkForAccType(menuItem) {
|
|
446
|
+
if (menuItem['account_type'].indexOf(this.appDetails.currentAccount.type) >= 0) {
|
|
447
|
+
return true;
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
if (menuItem['subscription_types']) {
|
|
451
|
+
return this.checkForSubscriptions(menuItem['subscription_types']);
|
|
452
|
+
}
|
|
453
|
+
else {
|
|
454
|
+
return false;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
checkForSpecifiedIds(possibleValues, currentMenuItem, id) {
|
|
459
|
+
if (possibleValues[0].id) {
|
|
460
|
+
for (let item of possibleValues) {
|
|
461
|
+
if (item.id === id) {
|
|
462
|
+
Object.keys(item).forEach((key) => {
|
|
463
|
+
if (key != 'id') {
|
|
464
|
+
currentMenuItem[key] = item[key];
|
|
465
|
+
}
|
|
466
|
+
});
|
|
467
|
+
console.log('Link changed to ' + currentMenuItem.link + ' and route changed to ' + currentMenuItem.route);
|
|
468
|
+
return true;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return true;
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
if (possibleValues.indexOf(id) >= 0) {
|
|
475
|
+
return true;
|
|
476
|
+
}
|
|
477
|
+
else {
|
|
478
|
+
return false;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
checkForOrgWithUserRole(possibleValues, currentMenuItem, id) {
|
|
483
|
+
if (possibleValues && possibleValues.length > 0) {
|
|
484
|
+
for (let item of possibleValues) {
|
|
485
|
+
if (item.organizations) {
|
|
486
|
+
if (item.visibility_sa_roles.includes(this.appDetails.userInfo.role) ||
|
|
487
|
+
(item.organizations && item.visibilityroles && item.organizations.includes(id) && item.visibilityroles.includes(this.appDetails.userInfo.role))) {
|
|
488
|
+
return true;
|
|
489
|
+
}
|
|
490
|
+
else {
|
|
491
|
+
return false;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
else if (item.organization_setting) {
|
|
495
|
+
if ((this.checkForOrgSettings(item.organization_setting) && item.visibilityroles.includes(this.appDetails.userInfo.role)) ||
|
|
496
|
+
item.visibility_sa_roles.includes(this.appDetails.userInfo.role)) {
|
|
497
|
+
return true;
|
|
498
|
+
}
|
|
499
|
+
else {
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
checkForSpecifiedIdsNotIn(possibleValues, currentMenuItem, id) {
|
|
507
|
+
return possibleValues.indexOf(id) < 0;
|
|
508
|
+
}
|
|
509
|
+
checkForSpecifiedAccountIdsNotIn(possibleValues, currentMenuItem, id) {
|
|
510
|
+
return possibleValues.indexOf(id) < 0;
|
|
511
|
+
}
|
|
512
|
+
checkForRoles(possibleValues) {
|
|
513
|
+
if (possibleValues.indexOf(this.appDetails.userInfo.role) >= 0) {
|
|
514
|
+
return true;
|
|
515
|
+
}
|
|
516
|
+
else {
|
|
517
|
+
return false;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
checkForvisibilityRolesNotIn(possibleValues) {
|
|
521
|
+
if (possibleValues.indexOf(this.appDetails.userInfo.role) >= 0) {
|
|
522
|
+
return false;
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
return true;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
disableForOrgwithReadOnly(possibleValues) {
|
|
529
|
+
if (this.appDetails.userInfo.role === 'READ_ONLY' && possibleValues.indexOf(this.appDetails.currentAccount.organizationId) >= 0) {
|
|
530
|
+
return false;
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
return true;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
getHostOriginAndNavigate(route, applicationId = undefined) {
|
|
537
|
+
if (window.location.href.indexOf(route) == -1) {
|
|
538
|
+
this.activatedRoute.queryParams.subscribe(params => {
|
|
539
|
+
if (applicationId) {
|
|
540
|
+
params = { ...params, ...applicationId };
|
|
541
|
+
}
|
|
542
|
+
let urlToNavigate = this.urlContextService.prepareUrlWithQueryParams(route, params);
|
|
543
|
+
urlToNavigate = `${window.location.origin}/${urlToNavigate}`;
|
|
544
|
+
// urlToNavigate = `http://localhost:3000/${urlToNavigate}`
|
|
545
|
+
console.log('Navigating to - ', urlToNavigate);
|
|
546
|
+
window.open(urlToNavigate, '_self');
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
fetchKeyValue(key) {
|
|
551
|
+
if (this.appDetails && this.appDetails.currentAccount) {
|
|
552
|
+
return (this.appDetails.currentAccount[key]);
|
|
553
|
+
}
|
|
554
|
+
else {
|
|
555
|
+
return null;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
setActiveRecoCount(count) {
|
|
559
|
+
this.appDetails.currentAccount['activeRecommendation'] = count;
|
|
560
|
+
}
|
|
561
|
+
isHavingAnyActiveSubs(id, subs, type) {
|
|
562
|
+
if (id === 'ads_amazon_attribution' && this.checkSubscriptionActive(subs, type, 'AMS_ATTRIBUTION')) {
|
|
563
|
+
return true;
|
|
564
|
+
}
|
|
565
|
+
else if (id === 'ads_amazon_dsp' && this.checkSubscriptionActive(subs, type, 'DSP')) {
|
|
566
|
+
return true;
|
|
567
|
+
}
|
|
568
|
+
else if ((id === 'ads_amazon_content') && this.checkSubscriptionActive(subs, type, 'CONTENT')) {
|
|
569
|
+
return true;
|
|
570
|
+
}
|
|
571
|
+
else if ((id === 'ads_instacart') && this.checkSubscriptionActive(subs, type, 'INSTACART')) {
|
|
572
|
+
return true;
|
|
573
|
+
}
|
|
574
|
+
else if ((id === 'ads_criteo') && this.checkSubscriptionActive(subs, type, 'CRITEO')) {
|
|
575
|
+
return true;
|
|
576
|
+
}
|
|
577
|
+
else if ((id === 'ads_walmart') && this.checkSubscriptionActive(subs, type, 'WALMART')) {
|
|
578
|
+
return true;
|
|
579
|
+
}
|
|
580
|
+
else if (id === 'ads_data_platform' || id === 'amc-platform-web' || id === 'ads_amazon_seller') {
|
|
581
|
+
return true;
|
|
582
|
+
}
|
|
583
|
+
else if (id === 'ads_amazon_advertising' || id === 'ads_vendor_sales' || id === 'ads_seller_sales') {
|
|
584
|
+
for (let settings of subs) {
|
|
585
|
+
if (settings.type != type && settings.status == "ACTIVE") {
|
|
586
|
+
return true;
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
return false;
|
|
590
|
+
}
|
|
591
|
+
return false;
|
|
592
|
+
}
|
|
593
|
+
checkSubscriptionActive(subs, accType, subType) {
|
|
594
|
+
if (subType === accType) {
|
|
595
|
+
return true;
|
|
596
|
+
}
|
|
597
|
+
const currentTypeSub = subs.filter(subscription => subscription.type === subType);
|
|
598
|
+
if (currentTypeSub.length === 0) {
|
|
599
|
+
return false;
|
|
600
|
+
}
|
|
601
|
+
if (currentTypeSub[0].status === 'ACTIVE' || currentTypeSub[0].type === accType) {
|
|
602
|
+
return true;
|
|
603
|
+
}
|
|
604
|
+
else {
|
|
605
|
+
return false;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
getApplicationID() {
|
|
609
|
+
let urlArray = this.urlContextService.router.url.split('/');
|
|
610
|
+
let currentRoute = urlArray[urlArray.length - 1];
|
|
611
|
+
if (this.contentAppRoutes.indexOf(currentRoute) > -1) {
|
|
612
|
+
return "ads_amazon_content_content_analytics";
|
|
613
|
+
}
|
|
614
|
+
else if (this.sovAppRoutes.indexOf(currentRoute) > -1) {
|
|
615
|
+
return "ads_amazon_content_share_of_voice";
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApplicationSidebarService, deps: [{ token: i1.RestApiService }, { token: i2.ActivatedRoute }, { token: i3.UrlContextService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
619
|
+
/** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApplicationSidebarService, providedIn: 'root' });
|
|
620
|
+
}
|
|
621
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApplicationSidebarService, decorators: [{
|
|
622
|
+
type: Injectable,
|
|
623
|
+
args: [{
|
|
624
|
+
providedIn: 'root'
|
|
625
|
+
}]
|
|
626
|
+
}], ctorParameters: function () { return [{ type: i1.RestApiService }, { type: i2.ActivatedRoute }, { type: i3.UrlContextService }]; } });
|
|
627
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tc2lkZWJhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwbGljYXRpb24tc2lkZWJhci9zcmMvbGliL3NlcnZpY2VzL2FwcGxpY2F0aW9uLXNpZGViYXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7O0FBTzFELE1BQU0sT0FBTyx5QkFBeUI7SUE0QzVCO0lBQ0E7SUFDQTtJQTVDVCxVQUFVLEdBQU0sQ0FBQyxlQUFlLEVBQUUsa0JBQWtCLEVBQUcseUJBQXlCLEVBQUcsYUFBYSxFQUFHLGtCQUFrQixFQUFFLHlCQUF5QixFQUFDLGNBQWMsRUFBRyxvQkFBb0IsRUFBQyxzQkFBc0IsRUFBRyw2QkFBNkIsRUFBQyxnQkFBZ0IsRUFBRSw4QkFBOEIsRUFBRSxzQ0FBc0MsRUFBRyxvQkFBb0IsRUFBRSxTQUFTLEVBQUMsa0JBQWtCLEVBQUMsa0JBQWtCLEVBQUMsc0JBQXNCLEVBQUMsYUFBYSxFQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdmMsUUFBUSxHQUFNLEVBQUUsQ0FBQztJQUVqQixjQUFjLEdBQUssQ0FBQyx3QkFBd0IsRUFBQyxrQkFBa0IsRUFBQyxrQkFBa0IsRUFBQyxtQ0FBbUMsRUFBQyxzQ0FBc0MsRUFBQyxnQkFBZ0IsRUFBQyx3QkFBd0IsRUFBRSxlQUFlLEVBQUMsWUFBWSxF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YjtJQUNGLENBQUM7SUFFTSxnQkFBZ0I7UUFDdEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVELElBQUksWUFBWSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWpELElBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRztZQUNuRCxPQUFPLHNDQUFzQyxDQUFDO1NBQzlDO2FBQU0sSUFBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyRCxPQUFPLG1DQUFtQyxDQUFDO1NBQzNDO0lBQ0YsQ0FBQzsySEExbUJXLHlCQUF5QjsrSEFBekIseUJBQXlCLGNBRnhCLE1BQU07OzRGQUVQLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNRU5VTElTVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBHTE9CQUxfU0VUVElOR19MSVNUIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFJlc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi9yZXN0LWFwaS5zZXJ2aWNlcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFVybENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi91cmwtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IEVOX0xBQkVMUyB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbnMtZW4nO1xuaW1wb3J0IHsgSkFfTEFCRUxTIH0gZnJvbSAnLi4vdHJhbnNsYXRpb25zL3RyYW5zbGF0aW9ucy1qYSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwcGxpY2F0aW9uU2lkZWJhclNlcnZpY2Uge1xuXG5cdGNvbmRpdGlvbnMgXHRcdFx0PSBbJ29yZ191c2VyX2N0cmwnLCAndmlzaWJpbGl0eV9yb2xlcycgLCAndmlzaWJpbGl0eV9yb2xlc19ub3RfaW4nICwgJ2FjY291bnRfaWRzJyAsICdvcmdhbml6YXRpb25faWRzJywgJ29yZ2FuaXphdGlvbl9pZHNfbm90X2luJywnYWNjb3VudF90eXBlJyAsICdhY2NvdW50X2lkc19ub3RfaW4nLCdvcmdhbml6YXRpb25fc2V0dGluZycgLCAnb3JnYW5pemF0aW9uX3NldHRpbmdfbm90X2luJywnY2FtcGFpZ25fdHlwZXMnLCAnaW5jb250ZXh0X2NhbXBhaWduX3RhcmdldGluZycsICdpbmNvbnRleHRfY2FtcGFpZ25fdGFyZ2V0aW5nX3dhbG1hcnQnICwgJ3N1YnNjcmlwdGlvbl90eXBlcycgLCdzaXRlSWRzJywnbm90X2FjY291bnRfdHlwZScsJ25vdF9hY2NvdW50X25hbWUnLCdkaXNhYmxlX3JlYWRvbmx5X29yZycsJ3VzZXJfZW1haWxzJywnYXBwX29yZ19zZXR0aW5nJ107XG5cdE1lbnVMaXN0IFx0XHRcdD0gW107XG5cblx0YXBwbGljYXRpb25JZHMgXHRcdD0gWydhZHNfYW1hem9uX2FkdmVydGlzaW5nJywnYWRzX3NlbGxlcl9zYWxlcycsJ2Fkc192ZW5kb3Jfc2FsZXMnLCdhZHNfYW1hem9uX2NvbnRlbnRfc2hhcmVfb2Zfdm9pY2UnLCdhZHNfYW1hem9uX2NvbnRlbnRfY29udGVudF9hbmFseXRpY3MnLCdhZHNfYW1hem9uX2RzcCcsJ2Fkc19hbWF6b25fYXR0cmlidXRpb24nLCAnYWRzX2luc3RhY2FydCcsJ2Fkc19jcml0ZW8nLCdhZHNfd2FsbWFydCcsJ2Fkc19kYXRhX3BsYXRmb3JtJywnYW1jLXBsYXRmb3JtLXdlYicsJ2Fkc19hbWF6b25fc2VsbGVyX3NlbGxlcl9hbmFseXRpY3MnLCdhZHNfYW1hem9uX3NlbGxlcl92ZW5kb3JfYW5hbHl0aWNzJ107XG5cdGVuYWJsZUFsbE1lbnVzQnlPcmcgPSBbMzA3ODBdXG5cdFxuXHRhcHBEZXRhaWxzOlx0YW55O1xuXHRpc1N0cnVjdHVyZUFwaVN1cHBvcnQ6XHRhbnk7XG5cdFNldHRpbmdzTWVudUxpc3Q6IGFueVtdO1xuXHRhcHBOYW1lczogc3RyaW5nW107XG5cblx0Y29udGVudEFwcFJvdXRlcz1bJ2NvbnRlbnQtaW5zaWdodCcsJ2NvbnRlbnQtYW5hbHl0aWNzJywnY29udGVudCcsJ3Byb2R1Y3QtbWV0YS1kYXRhJywnYnJhbmQtdGVybXMtc2V0dGluZ3MnLCdsYWJlbHMtc2V0dGluZ3MnLCdzdWItYnJhbmRzJywnc3ViLWJyYW5kcy1tYXBwaW5nJywnc292LXNldHRpbmdzJyAsJ2NvbnRlbnQtc2V0dGluZ3MnXVxuXHRzb3ZBcHBSb3V0ZXM9WydpbnNpZ2h0cycsJ3NoYXJlLW9mLXZvaWNlJywnc292JywncHJvZHVjdC1tZXRhLWRhdGEnLCdicmFuZC10ZXJtcy1zZXR0aW5ncycsJ2xhYmVscy1zZXR0aW5ncycsJ3N1Yi1icmFuZHMnLCdzdWItYnJhbmRzLW1hcHBpbmcnLCdzb3Ytc2V0dGluZ3MnICwnY29udGVudC1zZXR0aW5ncyddXG5cdHNlbGxlckFuYWx5dGljc0FwcFJvdXRlcz1bJ3NlbGxlci9pbnNpZ2h0cycsJ3Byb2R1Y3QtbWV0YS1kYXRhJywnYnJhbmQtdGVybXMtc2V0dGluZ3MnLCdsYWJlbHMtc2V0dGluZ3MnLCdzdWItYnJhbmRzJywnc3ViLWJyYW5kcy1tYXBwaW5nJywnc292LXNldHRpbmdzJyAsJ2NvbnRlbnQtc2V0dGluZ3MnXVxuXHR2ZW5kb3JBbmFseXRpY3NBcHBSb3V0ZXM9Wyd2ZW5kb3IvaW5zaWdodHMnLCdwcm9kdWN0LW1ldGEtZGF0YScsJ2JyYW5kLXRlcm1zLXNldHRpbmdzJywnbGFiZWxzLXNldHRpbmdzJywnc3ViLWJyYW5kcycsJ3N1Yi1icmFuZHMtbWFwcGluZycsJ3Nvdi1zZXR0aW5ncycgLCdjb250ZW50LXNldHRpbmdzJ11cblx0XG5cdHR5cGVTdGF0dXNDb25maWdzID0ge1xuICAgICAgICAnU1BPTlNPUkVEX0tFWVdPUkRfQklEUycgOiB0cnVlLFxuICAgICAgICAnU1BPTlNPUkVEX1BST0RVQ1RfTUFOVUFMX1RBUkdFVElOR19CSURTJyA6IHRydWUsXG4gICAgICAgICdTUE9OU09SRURfUFJPRFVDVF9BVVRPX1RBUkdFVElOR19CSURTJyA6IHRydWUsXG4gICAgICAgICdTUE9OU09SRURfS0VZV09SRF9BVVRPJyA6IHRydWUsXG4gICAgICAgICdTUE9OU09SRURfS0VZV09SRCcgOiB0cnVlLFxuICAgICAgICAnU1BfS0VZV09SRFNfQklEX0dBUCcgOiBmYWxzZSxcbiAgICAgICAgJ1NQX1BMQUNFTUVOVF9CSUQnIDogZmFsc2UsXG4gICAgICAgICdTUF9UQVJHRVRJTkdfVFlQRV9CUkVBS0RPV04nIDogZmFsc2UsXG4gICAgICAgICdTUF9NQVRDSF9UWVBFX0JSRUFLRE9XTicgOiBmYWxzZSxcbiAgICAgICAgJ1NQX1NCX0tFWVdPUkRfUEFSSVRZJyA6IHRydWUsXG4gICAgICAgICdIRUFETElORV9LRVlXT1JEX0JJRFMnIDogdHJ1ZSxcbiAgICAgICAgJ1NCX0tFWVdPUkRTX0JJRF9HQVAnIDogZmFsc2UsXG4gICAgICAgICdTQl9NQVRDSF9UWVBFX0JSRUFLRE9XTicgOiBmYWxzZSxcbiAgICAgICAgJ1NCX1NQX0tFWVdPUkRfUEFSSVRZJyA6IHRydWUsXG4gICAgICAgICdOT19LRVlXT1JEX0JJRFMnIDogdHJ1ZSxcbiAgICAgICAgJ0NBTVBBSUdOX1RZUEVfQlJFQUtET1dOJyA6IGZhbHNlLFxuICAgICAgICAnQVVUT19UT19NQU5VQUxfQVNJTl9QQVJJVFknIDogdHJ1ZSxcbiAgICAgICAgJ01BTlVBTF9UT19BVVRPX0FTSU5fUEFSSVRZJyA6IHRydWUsXG4gICAgICAgICdDT01QRVRJVE9SX1BST0RVQ1QnIDogdHJ1ZSxcbiAgICAgICAgJ1NQT05TT1JFRF9CUkFORF9LRVlXT1JEJzogdHJ1ZVxuICAgIH1cblxuXHRcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIFJlc3RBcGlTZXJ2aWNlOiBSZXN0QXBpU2VydmljZSxcblx0XHRwcml2YXRlIGFjdGl2YXRlZFJvdXRlOkFjdGl2YXRlZFJvdXRlLFxuXHRcdHByaXZhdGUgdXJsQ29udGV4dFNlcnZpY2U6IFVybENvbnRleHRTZXJ2aWNlKSB7fVxuXG5cdGdldFR5cGVTdGF0dXNDb25maWdzKCl7XG5cdFx0cmV0dXJuIHRoaXMudHlwZVN0YXR1c0NvbmZpZ3M7XG5cdH1cblx0Y29uc3RydWN0Q2hpbGRNZW51cyhtZW51SXRlbXMpe1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5saXN0TWVudXMpe1xuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiBtZW51SXRlbXMpIHtcblx0XHRcdFx0aWYgKHRoaXMuYXBwRGV0YWlscy5hcHBTZXQpIHtcblx0XHRcdFx0XHRpZiAoaXRlbS5pZC5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMuYXBwbGljYXRpb25JZCkpIHtcblx0XHRcdFx0XHRcdGZvciAobGV0IGxpc3RNZW51SXRlbSBvZiB0aGlzLmFwcERldGFpbHMubGlzdE1lbnVzKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChpdGVtLmlkID09IGxpc3RNZW51SXRlbS5pZCkge1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW0uY2hpbGRyZW4gPSBsaXN0TWVudUl0ZW0uY2hpbGRyZW5cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChpdGVtLmlkID09IHRoaXMuYXBwRGV0YWlscy5hcHBsaWNhdGlvbklkKSB7XG5cdFx0XHRcdFx0aXRlbS5jaGlsZHJlbiA9IHRoaXMuYXBwRGV0YWlscy5saXN0TWVudXNcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbWVudUl0ZW1zO1xuXHR9XG5cblx0Z2V0TWVudUxpc3QoYXBwRGV0YWlscyA6IGFueSkge1x0XG5cdFx0dGhpcy5hcHBEZXRhaWxzIFx0XHQ9IGFwcERldGFpbHM7XG5cdFx0dGhpcy5NZW51TGlzdCBcdFx0XHQ9IFtdO1xuXHRcdGxldCBhcHBlbmRDaGlsZE1lbnVzIFx0PSB0aGlzLmNvbnN0cnVjdENoaWxkTWVudXMoTUVOVUxJU1QpO1xuXHRcdGxldCBNRU5VTElTVF9TT1JURUQgXHQ9IE1FTlVMSVNULnNvcnQoKGEsIGIpID0+IChhLm9yZGVyID4gYi5vcmRlcikgPyAxIDogLTEpO1xuXHRcdHRoaXMuYXBwTmFtZXMgXHRcdFx0PSB0aGlzLmFwcGxpY2F0aW9uSWRzO1xuXG5cdFx0aWYoKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkID09PSAxMDM5MCB8fCBcblx0XHRcdHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkID09PSAxMDUzMCkgJiYgXG5cdFx0XHR0aGlzLmFwcERldGFpbHMudXNlckluZm8uZW1haWwgPT0gXCJzcmVlbmF0aEBpbnRlbnR3aXNlLmNvbVwiKXtcblxuXHRcdFx0dGhpcy5hcHBOYW1lcyA9IHRoaXMuYXBwbGljYXRpb25JZHMuZmlsdGVyKChuYW1lKT0+e1xuXHRcdFx0XHRyZXR1cm4gKG5hbWUgIT0gJ2Fkc19hbWF6b25fY29udGVudF9zaGFyZV9vZl92b2ljZScgJiYgbmFtZSAhPSAnYWRzX2FtYXpvbl9jb250ZW50X2NvbnRlbnRfYW5hbHl0aWNzJylcblx0XHRcdH0pO1xuXHRcdFx0XG5cdFx0fVxuXG5cdFx0Zm9yIChsZXQgYXBwTmFtZSBvZiBNRU5VTElTVF9TT1JURUQpIHtcblx0XHRcdGlmKHRoaXMuYXBwTmFtZXMuaW5kZXhPZihhcHBOYW1lLmlkKSA+PSAwKXtcblx0XHRcdFx0bGV0IGxpc3QgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oYXBwTmFtZSk7XG5cdFx0XHRcdGlmKGxpc3QgJiYgbGlzdC5jaGlsZHJlbiAhPSB1bmRlZmluZWQpe1xuXHRcdFx0XHRcdGlmKGFwcE5hbWUuaWQgPT0nYWRzX2FtYXpvbl9kc3AnKXtcblx0XHRcdFx0XHRcdGlmKGxpc3QuY2hpbGRyZW4gJiYgbGlzdC5jaGlsZHJlbi5sZW5ndGggPiAwKXtcblx0XHRcdFx0XHRcdFx0Zm9yKGxldCBjaGlsZCBvZiBsaXN0LmNoaWxkcmVuKXtcblx0XHRcdFx0XHRcdFx0XHRpZighdGhpcy5pc1N0cnVjdHVyZUFwaVN1cHBvcnQgJiYgY2hpbGQuaWQgPT1cImFtc19kc3Bfc2V0dGluZ3NcIil7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaGlsZC5jaGlsZHJlbiA9IGNoaWxkLmNoaWxkcmVuLmZpbHRlcihzX2NoaWxkID0+IHNfY2hpbGQuaWQgIT09ICdhbXNfZHNwX3J1bGVzJyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLk1lbnVMaXN0LnB1c2gobGlzdCk7XG5cdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHR0aGlzLk1lbnVMaXN0LnB1c2gobGlzdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHR9ZWxzZSBpZihhcHBOYW1lLnR5cGUgIT0gJ2V4cGFuZGFibGUnKXtcblx0XHRcdFx0bGV0IGxpc3QgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oYXBwTmFtZSk7XG5cdFx0XHRcdGlmKGxpc3QgIT0gdW5kZWZpbmVkKXtcblx0XHRcdFx0XHR0aGlzLk1lbnVMaXN0LnB1c2gobGlzdClcblx0XHRcdFx0fVxuXHRcdFx0fVx0XHRcdFxuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5NZW51TGlzdDtcblx0fVxuXG5cdGdldEFwcGxpY2F0aW9uTWVudUl0ZW0oY3VycmVudE1lbnVJdGVtOmFueSk6IGFueSB7XG5cdFx0bGV0IG1lbnVJdGVtID0ge1xuXHRcdFx0Y2hpbGRyZW4gOiBbXVxuXHRcdH07XG5cblx0XHRpZihjdXJyZW50TWVudUl0ZW0udHlwZSAhPSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0bGV0IGFsbEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0Y29uc3QgaGFzQ29uZGl0aW9uc3RvQ2hlY2sgPSB0aGlzLmNvbmRpdGlvbnMuc29tZShjb25kaXRpb24gPT4gYWxsS2V5cy5pbmNsdWRlcyhjb25kaXRpb24pKVxuXHRcdFx0aWYoaGFzQ29uZGl0aW9uc3RvQ2hlY2spe1xuXHRcdFx0XHRsZXQgaXNNZW51QWxsb3dlZCA9IHRoaXMuY2hlY2tBbGxDb25kaXRpb25zKGN1cnJlbnRNZW51SXRlbSAsIGFsbEtleXMpO1xuXHRcdFx0XHRpZihpc01lbnVBbGxvd2VkKXtcblx0XHRcdFx0XHRtZW51SXRlbSA9IGN1cnJlbnRNZW51SXRlbTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdC8vIGNvbnNvbGUubG9nKCdyZXR1cm4gZW1wdHknKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdG1lbnVJdGVtID0gY3VycmVudE1lbnVJdGVtO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0bGV0IGFsbEtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0Y29uc3QgaGFzQ29uZGl0aW9uc3RvQ2hlY2sgPSB0aGlzLmNvbmRpdGlvbnMuc29tZShjb25kaXRpb24gPT4gYWxsS2V5cy5pbmNsdWRlcyhjb25kaXRpb24pKVxuXHRcdFx0aWYoIWhhc0NvbmRpdGlvbnN0b0NoZWNrIHx8IChoYXNDb25kaXRpb25zdG9DaGVjayAmJiB0aGlzLmNoZWNrQWxsQ29uZGl0aW9ucyhjdXJyZW50TWVudUl0ZW0gLCBhbGxLZXlzKSkpIHtcblx0XHRcdFx0T2JqZWN0LmtleXMoY3VycmVudE1lbnVJdGVtKS5mb3JFYWNoKChrZXkpPT57IFxuXHRcdFx0XHRcdGlmICh0eXBlb2YgY3VycmVudE1lbnVJdGVtW2tleV0gIT0gXCJvYmplY3RcIiApIHtcblx0XHRcdFx0XHRcdG1lbnVJdGVtW2tleV0gPSBjdXJyZW50TWVudUl0ZW1ba2V5XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdG1lbnVJdGVtLmNoaWxkcmVuID0gW107XG5cdFx0XHRcdGZvcihsZXQgY2hpbGQgb2YgY3VycmVudE1lbnVJdGVtLmNoaWxkcmVuKXtcblx0XHRcdFx0XHRsZXQgbmF2X21lbnUgPSB0aGlzLmdldEFwcGxpY2F0aW9uTWVudUl0ZW0oY2hpbGQpO1xuXHRcdFx0XHRcdGlmKG5hdl9tZW51ICE9IG51bGwpeyBcblx0XHRcdFx0XHRcdGlmKG5hdl9tZW51LmNoaWxkcmVuICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdFx0XHRcdGlmKG5hdl9tZW51LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdG1lbnVJdGVtLmNoaWxkcmVuLnB1c2gobmF2X21lbnUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHRtZW51SXRlbS5jaGlsZHJlbi5wdXNoKG5hdl9tZW51KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1lbHNle1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XHRcdFx0XG5cdFx0fVxuXHRcdHJldHVybiBtZW51SXRlbTtcblx0fVxuXG5cdGdldEdsb2JhbFNldHRpbmdzTWVudShhcHBEZXRhaWxzIDogYW55KSB7XG5cdFx0dGhpcy5hcHBEZXRhaWxzID0gYXBwRGV0YWlscztcdFxuXHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdCA9IFtdO1xuXHRcdGxldCBHTE9CQUxfU0VUVElOR19MSVNUX1NPUlRFRCA9IEdMT0JBTF9TRVRUSU5HX0xJU1Quc29ydCgoYSwgYikgPT4gKGEub3JkZXIgPiBiLm9yZGVyKSA/IDEgOiAtMSk7XG5cdFx0Zm9yIChsZXQgYXBwTmFtZSBvZiBHTE9CQUxfU0VUVElOR19MSVNUX1NPUlRFRCkge1xuXHRcdFx0aWYoYXBwTmFtZS50eXBlID09ICdleHBhbmRhYmxlJyl7XG5cdFx0XHRcdGxldCBsaXN0ID0gdGhpcy5nZXRBcHBsaWNhdGlvbk1lbnVJdGVtKGFwcE5hbWUpO1xuXHRcdFx0XHRpZihsaXN0LmNoaWxkcmVuICE9IHVuZGVmaW5lZCAmJiBsaXN0LmNoaWxkcmVuLmxlbmd0aCA+IDApe1xuXHRcdFx0XHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdC5wdXNoKGxpc3QpO1xuXHRcdFx0XHR9XHRcdFx0XHRcblx0XHRcdH1lbHNlIGlmKGFwcE5hbWUudHlwZSAhPSAnZXhwYW5kYWJsZScpe1xuXHRcdFx0XHRsZXQgbGlzdCA9IHRoaXMuZ2V0QXBwbGljYXRpb25NZW51SXRlbShhcHBOYW1lKTtcblx0XHRcdFx0aWYobGlzdCAhPSB1bmRlZmluZWQpe1xuXHRcdFx0XHRcdHRoaXMuU2V0dGluZ3NNZW51TGlzdC5wdXNoKGxpc3QpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XHRcdFxuXHRcdHJldHVybiB0aGlzLlNldHRpbmdzTWVudUxpc3Q7XG5cdH1cblxuXHRjaGVja0FsbENvbmRpdGlvbnMoY3VycmVudE1lbnVJdGVtOiBhbnksIGFsbEtleXM6IHN0cmluZ1tdKTogYW55IHtcblx0XHRsZXQgaW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRpZigoIXRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiBjdXJyZW50TWVudUl0ZW0uaWQgPT0gXCJhZHNfb3ZlcnZpZXdcIiAmJiAhdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb25bJ25vQWN0aXZlQWNjb3VudHMnXSkpe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2UgaWYoY3VycmVudE1lbnVJdGVtLmlkID09PSBcImFkc19zaWdudXBfb3ZlcnZpZXdcIikge1xuXHRcdFx0aWYoIXRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvblsnbm9BY3RpdmVBY2NvdW50cyddKXtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRlbHNle1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvcihsZXQgY29uZCBvZiB0aGlzLmNvbmRpdGlvbnMpe1xuXHRcdFx0aWYoY3VycmVudE1lbnVJdGVtW2NvbmRdICE9IHVuZGVmaW5lZCl7XG5cdFx0XHRcdHN3aXRjaChjb25kKXtcblx0XHRcdFx0XHRjYXNlICd2aXNpYmlsaXR5X3JvbGVzJzogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclJvbGVzKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0Y2FzZSAndmlzaWJpbGl0eV9yb2xlc19ub3RfaW4nOiB7IFxuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9ydmlzaWJpbGl0eVJvbGVzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHRjYXNlICdkaXNhYmxlX3JlYWRvbmx5X29yZyc6e1xuXHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmRpc2FibGVGb3JPcmd3aXRoUmVhZE9ubHkoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnb3JnYW5pemF0aW9uX2lkcycgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkcyhjdXJyZW50TWVudUl0ZW1bY29uZF0sY3VycmVudE1lbnVJdGVtLHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5vcmdhbml6YXRpb25JZCk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSBpZih0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbiAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9pZHNfbm90X2luJyA6IHtcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudCAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yU3BlY2lmaWVkSWRzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQub3JnYW5pemF0aW9uSWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50T3JnYW5pemF0aW9uLm9yZ2FuaXphdGlvbklkKSB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNwZWNpZmllZElkc05vdEluKGN1cnJlbnRNZW51SXRlbVtjb25kXSxjdXJyZW50TWVudUl0ZW0sdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uSWQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdvcmdfdXNlcl9jdHJsJzp7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbiAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdXaXRoVXNlclJvbGUoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudE9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb25JZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2FjY291bnRfaWRzJyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LmFtc0FjY291bnRJZCkge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKTtcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNhc2UgJ2FjY291bnRfaWRzX25vdF9pbicgOiB7XG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTcGVjaWZpZWRBY2NvdW50SWRzTm90SW4oY3VycmVudE1lbnVJdGVtW2NvbmRdLGN1cnJlbnRNZW51SXRlbSx0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQuYW1zQWNjb3VudElkKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Y2FzZSAnbm90X2FjY291bnRfbmFtZScgOiB7XG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JOb3RBY2NOYW1lKGN1cnJlbnRNZW51SXRlbVtjb25kXSk7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gY2FzZSAnYWNjb3VudF90eXBlJyA6IHsgXG5cdFx0XHRcdFx0Ly8gXHRpZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQgJiYgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LnR5cGUpIHtcblx0XHRcdFx0XHQvLyBcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQWNjVHlwZShjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0XHRcdC8vIFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBcdFx0aW5jbHVkZU1lbnUgPSBmYWxzZTtcblx0XHRcdFx0XHQvLyBcdH1cblx0XHRcdFx0XHQvLyBicmVhazsgXG5cdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdGNhc2UgJ29yZ2FuaXphdGlvbl9zZXR0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9Y2FzZSAnYXBwX29yZ19zZXR0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JPcmdBcHBTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAnb3JnYW5pemF0aW9uX3NldHRpbmdfbm90X2luJyA6IHsgXG5cdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JOb3RPcmdTZXR0aW5ncyhjdXJyZW50TWVudUl0ZW1bY29uZF0pO1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdGNhc2UgJ3NpdGVJZHMnIDogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5jaGVja0ZvclNpdGVJZHMoY3VycmVudE1lbnVJdGVtW2NvbmRdKTtcblx0XHRcdFx0XHRicmVhazsgXG5cdFx0XHRcdFx0fSBcblx0XHRcdFx0XHQvLyBjYXNlICdzdWJzY3JpcHRpb25fdHlwZXMnIDogeyBcblx0XHRcdFx0XHQvLyBcdGlmKGN1cnJlbnRNZW51SXRlbVsnYWNjb3VudF90eXBlJ10gPT0gdW5kZWZpbmVkKXtcblx0XHRcdFx0XHQvLyBcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC5zdWJzY3JpcHRpb24pIHtcblx0XHRcdFx0XHQvLyBcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JTdWJzY3JpcHRpb25zKGN1cnJlbnRNZW51SXRlbVtjb25kXSlcblx0XHRcdFx0XHQvLyBcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBcdFx0XHRpbmNsdWRlTWVudSA9IGZhbHNlO1xuXHRcdFx0XHRcdC8vIFx0XHR9XG5cdFx0XHRcdFx0Ly8gXHR9ZWxzZXtcblx0XHRcdFx0XHQvLyBcdFx0aWYodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50ICYmIHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC50eXBlKSB7XG5cdFx0XHRcdFx0Ly8gXHRcdFx0aW5jbHVkZU1lbnUgPSB0aGlzLmNoZWNrRm9yQWNjVHlwZShjdXJyZW50TWVudUl0ZW0pO1xuXHRcdFx0XHRcdC8vIFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIFx0XHRcdGluY2x1ZGVNZW51ID0gZmFsc2U7XG5cdFx0XHRcdFx0Ly8gXHRcdH1cblx0XHRcdFx0XHQvLyBcdH1cblx0XHRcdFx0XHQvLyBicmVhazsgXG5cdFx0XHRcdFx0Ly8gfSBcblx0XHRcdFx0XHRjYXNlICdjYW1wYWlnbl90eXBlcycgOiB7XG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQpe1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JDYW1wYWlnblR5cGUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdpbmNvbnRleHRfY2FtcGFpZ25fdGFyZ2V0aW5nJyA6IHsgXG5cdFx0XHRcdFx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQpe1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JDYW1wYWlnblRhcmdldGluZyhjdXJyZW50TWVudUl0ZW1bY29uZF0pXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRlbHNle1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7IFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjYXNlICdpbmNvbnRleHRfY2FtcGFpZ25fdGFyZ2V0aW5nX3dhbG1hcnQnIDogeyBcblx0XHRcdFx0XHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dHdhbG1hcnQpe1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlTWVudSA9IHRoaXMuY2hlY2tGb3JDYW1wYWlnblRhcmdldGluZ1dhbG1hcnQoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2FzZSAndXNlcl9lbWFpbHMnIDogeyBcblx0XHRcdFx0XHRcdGluY2x1ZGVNZW51ID0gdGhpcy5hdXRoZW50aWNhdGVVc2VyTWFpbE1lbnUoY3VycmVudE1lbnVJdGVtW2NvbmRdKVxuXHRcdFx0XHRcdGJyZWFrOyBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gZGVmYXVsdDogeyBcblx0XHRcdFx0XHQvLyAvL3N0YXRlbWVudHM7IFxuXHRcdFx0XHRcdC8vIGJyZWFrOyBcblx0XHRcdFx0XHQvLyB9IFxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKCFpbmNsdWRlTWVudSl7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XHRcdFx0XG5cdFx0XHR9ZWxzZXtcblx0XHRcdFx0aW5jbHVkZU1lbnUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBpbmNsdWRlTWVudTtcblx0fVxuXG5cdGNoZWNrRm9yTm90QWNjTmFtZShwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQubmFtZSkgPT0gLTEpe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JDYW1wYWlnblR5cGUocG9zc2libGVWYWx1ZXM6IGFueSk6Ym9vbGVhbntcblx0XHRpZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHQgJiYgcG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHRbMF0uZGF0YVR5cGUpID49IDApe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JDYW1wYWlnblRhcmdldGluZyhwb3NzaWJsZVZhbHVlczogYW55KTpib29sZWFue1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dCAmJiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dFswXS5jYW1wYWlnblRhcmdldGluZykgPj0gMCl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRjaGVja0ZvckNhbXBhaWduVGFyZ2V0aW5nV2FsbWFydChwb3NzaWJsZVZhbHVlczogYW55KTpib29sZWFue1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5jYW1wYWlnbkluQ29udGV4dHdhbG1hcnQgJiYgcG9zc2libGVWYWx1ZXMuaW5kZXhPZih0aGlzLmFwcERldGFpbHMuY2FtcGFpZ25JbkNvbnRleHR3YWxtYXJ0WzBdLmNhbXBhaWduVGFyZ2V0aW5nKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGF1dGhlbnRpY2F0ZVVzZXJNYWlsTWVudShwb3NzaWJsZVZhbHVlczogYW55KTpib29sZWFue1xuXHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcyAmJiBwb3NzaWJsZVZhbHVlcy5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMudXNlckluZm8uZW1haWwpO1xuXHR9XG5cblx0Y2hlY2tGb3JTdWJzY3JpcHRpb25zKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFue1xuXHRcdGZvcihsZXQgc2V0dGluZ3Mgb2YgdGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50LnN1YnNjcmlwdGlvbil7XG5cdFx0XHRpZigocG9zc2libGVWYWx1ZXMuaW5kZXhPZihzZXR0aW5ncy50eXBlKSA+PSAwKSAmJiBzZXR0aW5ncy5zdGF0dXMgPT0gXCJBQ1RJVkVcIil7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRjaGVja0ZvclNpdGVJZHMocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5zaWRlYmFySW5mbyAmJiB0aGlzLmFwcERldGFpbHMuc2lkZWJhckluZm8uc2l0ZUlkICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YoK3RoaXMuYXBwRGV0YWlscy5zaWRlYmFySW5mby5zaXRlSWQpID49IDApe1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JPcmdTZXR0aW5ncyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzKXtcblx0XHRcdGZvcihsZXQgc2V0dGluZ3Mgb2YgdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzKXtcblx0XHRcdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZihzZXR0aW5ncy5zZXR0aW5nKSA+PSAwKXtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9yT3JnQXBwU2V0dGluZ3MocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscy5vcmdBcHBTZXR0aW5ncyl7XG5cdFx0XHRmb3IobGV0IHNldHRpbmdzIG9mIHRoaXMuYXBwRGV0YWlscy5vcmdBcHBTZXR0aW5ncyl7XG5cdFx0XHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2Yoc2V0dGluZ3MudHlwZSkgPj0gMCAmJiBzZXR0aW5ncy5zdGF0dXMgPT0gJ0FDVElWRScpe1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fWVsc2V7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0Y2hlY2tGb3JOb3RPcmdTZXR0aW5ncyhwb3NzaWJsZVZhbHVlczogYW55KTogYm9vbGVhbiB7XG5cdFx0bGV0IGFsbG93ID0gdHJ1ZTtcblx0XHRjb25zdCByb2xlID0gWydTVVBFUl9BRE1JTicsICdTVVBFUl9BRE1JTl9SRUFEX09OTFknXTtcblx0XHRjb25zdCBpc0FkbWluUm9sZSA9IHJvbGUuaW5kZXhPZih0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSkgPiAtMSA/IHRydWUgOiBmYWxzZTtcblx0XHRpZih0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3MgJiYgdGhpcy5hcHBEZXRhaWxzLm9yZ1NldHRpbmdzLmxlbmd0aCA+IDApe1xuXHRcdFx0Zm9yKGxldCBzZXR0aW5ncyBvZiB0aGlzLmFwcERldGFpbHMub3JnU2V0dGluZ3Mpe1xuXHRcdFx0XHRpZighaXNBZG1pblJvbGUgJiYgcG9zc2libGVWYWx1ZXMuaW5kZXhPZihzZXR0aW5ncy5zZXR0aW5nKSA+IC0xICl7XG5cdFx0XHRcdFx0YWxsb3cgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFsbG93O1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIGFsbG93O1xuXHRcdH1cblx0fVxuXHRcblxuXHRjaGVja0ZvckFjY1R5cGUobWVudUl0ZW06IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKG1lbnVJdGVtWydhY2NvdW50X3R5cGUnXS5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy5jdXJyZW50QWNjb3VudC50eXBlKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0aWYobWVudUl0ZW1bJ3N1YnNjcmlwdGlvbl90eXBlcyddKXtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hlY2tGb3JTdWJzY3JpcHRpb25zKG1lbnVJdGVtWydzdWJzY3JpcHRpb25fdHlwZXMnXSlcblx0XHRcdH1cblx0XHRcdGVsc2V7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjaGVja0ZvclNwZWNpZmllZElkcyhwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzWzBdLmlkKXtcblx0XHRcdGZvciAobGV0IGl0ZW0gb2YgcG9zc2libGVWYWx1ZXMpIHtcblx0XHRcdFx0aWYoIGl0ZW0uaWQgPT09IGlkICl7XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoaXRlbSkuZm9yRWFjaCgoa2V5KT0+eyBcblx0XHRcdFx0XHRcdGlmIChrZXkgIT0gJ2lkJykge1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50TWVudUl0ZW1ba2V5XSA9IGl0ZW1ba2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKCdMaW5rIGNoYW5nZWQgdG8gJytjdXJyZW50TWVudUl0ZW0ubGluaysnIGFuZCByb3V0ZSBjaGFuZ2VkIHRvICcrY3VycmVudE1lbnVJdGVtLnJvdXRlKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0aWYocG9zc2libGVWYWx1ZXMuaW5kZXhPZihpZCkgPj0gMCl7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZXtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRjaGVja0Zvck9yZ1dpdGhVc2VyUm9sZShwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzICYmIHBvc3NpYmxlVmFsdWVzLmxlbmd0aCA+IDApe1xuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiBwb3NzaWJsZVZhbHVlcykge1xuXHRcdFx0XHRpZihpdGVtLm9yZ2FuaXphdGlvbnMpe1xuXHRcdFx0XHRcdGlmKGl0ZW0udmlzaWJpbGl0eV9zYV9yb2xlcy5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSkgfHwgXG5cdFx0XHRcdFx0ICAoaXRlbS5vcmdhbml6YXRpb25zICYmIGl0ZW0udmlzaWJpbGl0eXJvbGVzICYmIGl0ZW0ub3JnYW5pemF0aW9ucy5pbmNsdWRlcyhpZCkgJiYgaXRlbS52aXNpYmlsaXR5cm9sZXMuaW5jbHVkZXModGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpKSl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1lbHNlIGlmKGl0ZW0ub3JnYW5pemF0aW9uX3NldHRpbmcpe1xuXHRcdFx0XHRcdGlmICgodGhpcy5jaGVja0Zvck9yZ1NldHRpbmdzKGl0ZW0ub3JnYW5pemF0aW9uX3NldHRpbmcpICYmIGl0ZW0udmlzaWJpbGl0eXJvbGVzLmluY2x1ZGVzKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5yb2xlKSkgfHxcblx0XHRcdFx0XHRcdGl0ZW0udmlzaWJpbGl0eV9zYV9yb2xlcy5pbmNsdWRlcyh0aGlzLmFwcERldGFpbHMudXNlckluZm8ucm9sZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y2hlY2tGb3JTcGVjaWZpZWRJZHNOb3RJbihwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKGlkKSA8IDA7XG5cdH1cblxuXHRjaGVja0ZvclNwZWNpZmllZEFjY291bnRJZHNOb3RJbihwb3NzaWJsZVZhbHVlczogYW55ICwgY3VycmVudE1lbnVJdGVtOmFueSAsIGlkOm51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBwb3NzaWJsZVZhbHVlcy5pbmRleE9mKGlkKSA8IDA7XG5cdH1cblxuXHRjaGVja0ZvclJvbGVzKHBvc3NpYmxlVmFsdWVzOiBhbnkpOiBib29sZWFuIHtcblx0XHRpZihwb3NzaWJsZVZhbHVlcy5pbmRleE9mKHRoaXMuYXBwRGV0YWlscy51c2VySW5mby5yb2xlKSA+PSAwKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRlbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrRm9ydmlzaWJpbGl0eVJvbGVzTm90SW4ocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW4ge1xuXHRcdGlmKHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUpID49IDApe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGRpc2FibGVGb3JPcmd3aXRoUmVhZE9ubHkocG9zc2libGVWYWx1ZXM6IGFueSk6IGJvb2xlYW57XG5cdFx0aWYodGhpcy5hcHBEZXRhaWxzLnVzZXJJbmZvLnJvbGUgPT09ICdSRUFEX09OTFknICYmIHBvc3NpYmxlVmFsdWVzLmluZGV4T2YodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50Lm9yZ2FuaXphdGlvbklkKSA+PSAwKXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRIb3N0T3JpZ2luQW5kTmF2aWdhdGUocm91dGUgLCBhcHBsaWNhdGlvbklkPXVuZGVmaW5lZCkge1xuXHRcdGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHJvdXRlKSA9PSAtMSkge1xuXHRcdFx0dGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocGFyYW1zID0+IHtcblx0XHRcdFx0aWYgKGFwcGxpY2F0aW9uSWQpIHtcblx0XHRcdFx0XHRwYXJhbXMgPSB7Li4ucGFyYW1zLCAuLi5hcHBsaWNhdGlvbklkfTtcdFxuXHRcdFx0XHR9XG5cdFx0XHRcdGxldCB1cmxUb05hdmlnYXRlID0gdGhpcy51cmxDb250ZXh0U2VydmljZS5wcmVwYXJlVXJsV2l0aFF1ZXJ5UGFyYW1zKHJvdXRlLCBwYXJhbXMpO1xuXHRcdFx0XHR1cmxUb05hdmlnYXRlID0gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vJHt1cmxUb05hdmlnYXRlfWBcblx0XHRcdFx0Ly8gdXJsVG9OYXZpZ2F0ZSA9IGBodHRwOi8vbG9jYWxob3N0OjMwMDAvJHt1cmxUb05hdmlnYXRlfWBcblx0XHRcdFx0Y29uc29sZS5sb2coJ05hdmlnYXRpbmcgdG8gLSAnLHVybFRvTmF2aWdhdGUpO1xuXHRcdFx0XHR3aW5kb3cub3Blbih1cmxUb05hdmlnYXRlLCAnX3NlbGYnKTtcblx0XHRcdH0pO1xuXHRcdH1cbiAgICB9XG5cdFxuXHRwdWJsaWMgZmV0Y2hLZXlWYWx1ZShrZXk6IHN0cmluZykge1xuXHRcdGlmKHRoaXMuYXBwRGV0YWlscyAmJiB0aGlzLmFwcERldGFpbHMuY3VycmVudEFjY291bnQpIHtcblx0XHRcdHJldHVybiAodGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50W2tleV0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0XG5cdH1cblxuXHRwdWJsaWMgc2V0QWN0aXZlUmVjb0NvdW50KGNvdW50Om51bWJlcil7XG5cdFx0dGhpcy5hcHBEZXRhaWxzLmN1cnJlbnRBY2NvdW50WydhY3RpdmVSZWNvbW1lbmRhdGlvbiddID0gY291bnQ7XG5cdH1cblx0XG5cdHB1YmxpYyBpc0hhdmluZ0FueUFjdGl2ZVN1YnMoaWQsc3Vicyx0eXBlKXtcbiAgICBpZihpZCA9PT0gJ2Fkc19hbWF6b25fYXR0cmlidXRpb24nICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ0FNU19BVFRSSUJVVElPTicpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYoaWQgPT09ICdhZHNfYW1hem9uX2RzcCcgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnRFNQJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZigoaWQgPT09ICdhZHNfYW1hem9uX2NvbnRlbnQnKSAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdDT05URU5UJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZigoaWQgPT09ICdhZHNfaW5zdGFjYXJ0JykgJiYgdGhpcy5jaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCB0eXBlLCAnSU5TVEFDQVJUJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1lbHNlIGlmKChpZCA9PT0gJ2Fkc19jcml0ZW8nKSAmJiB0aGlzLmNoZWNrU3Vic2NyaXB0aW9uQWN0aXZlKHN1YnMsIHR5cGUsICdDUklURU8nKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9ZWxzZSBpZigoaWQgPT09ICdhZHNfd2FsbWFydCcpICYmIHRoaXMuY2hlY2tTdWJzY3JpcHRpb25BY3RpdmUoc3VicywgdHlwZSwgJ1dBTE1BUlQnKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9ZWxzZSBpZihpZCA9PT0gJ2Fkc19kYXRhX3BsYXRmb3JtJ3x8IGlkID09PSAnYW1jLXBsYXRmb3JtLXdlYicgfHwgaWQgPT09ICdhZHNfYW1hem9uX3NlbGxlcicpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fWVsc2UgaWYoaWQgPT09ICdhZHNfYW1hem9uX2FkdmVydGlzaW5nJyB8fCBpZCA9PT0gJ2Fkc192ZW5kb3Jfc2FsZXMnIHx8IGlkID09PSAnYWRzX3NlbGxlcl9zYWxlcycpIHtcbiAgICAgIGZvcihsZXQgc2V0dGluZ3Mgb2Ygc3Vicyl7XG4gICAgICAgIGlmKHNldHRpbmdzLnR5cGUgIT0gdHlwZSAmJiBzZXR0aW5ncy5zdGF0dXMgPT0gXCJBQ1RJVkVcIil7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIFx0fVxuXG5cdHB1YmxpYyBjaGVja1N1YnNjcmlwdGlvbkFjdGl2ZShzdWJzLCBhY2NUeXBlICxzdWJUeXBlKSB7XG5cdFx0aWYoc3ViVHlwZSA9PT0gYWNjVHlwZSl7XG5cdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGNvbnN0IGN1cnJlbnRUeXBlU3ViID0gc3Vicy5maWx0ZXIoc3Vic2NyaXB0aW9uID0+IHN1YnNjcmlwdGlvbi50eXBlID09PSBzdWJUeXBlKTtcblx0XHRpZihjdXJyZW50VHlwZVN1Yi5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChjdXJyZW50VHlwZVN1YlswXS5zdGF0dXMgPT09ICdBQ1RJVkUnIHx8IGN1cnJlbnRUeXBlU3ViWzBdLnR5cGUgPT09IGFjY1R5cGUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldEFwcGxpY2F0aW9uSUQoKSB7XG5cdFx0bGV0IHVybEFycmF5ID0gdGhpcy51cmxDb250ZXh0U2VydmljZS5yb3V0ZXIudXJsLnNwbGl0KCcvJyk7XG5cdFx0bGV0IGN1cnJlbnRSb3V0ZSA9IHVybEFycmF5W3VybEFycmF5Lmxlbmd0aCAtIDFdO1xuXHRcdFxuXHRcdGlmKHRoaXMuY29udGVudEFwcFJvdXRlcy5pbmRleE9mKGN1cnJlbnRSb3V0ZSk+LTEgKSB7XG5cdFx0XHRyZXR1cm4gXCJhZHNfYW1hem9uX2NvbnRlbnRfY29udGVudF9hbmFseXRpY3NcIjtcblx0XHR9IGVsc2UgaWYodGhpcy5zb3ZBcHBSb3V0ZXMuaW5kZXhPZihjdXJyZW50Um91dGUpPi0xKSB7XG5cdFx0XHRyZXR1cm4gXCJhZHNfYW1hem9uX2NvbnRlbnRfc2hhcmVfb2Zfdm9pY2VcIjtcblx0XHR9XG5cdH1cbn0iXX0=
|