@sabstravtech/obtservices 0.2.2310120830 → 0.2.2310131300
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/bundles/sabstravtech-obtservices-base.umd.js +10 -6
- package/bundles/sabstravtech-obtservices-base.umd.js.map +1 -1
- package/esm2015/base/lib/vendor/services/enterprise-basket.service.js +11 -7
- package/fesm2015/sabstravtech-obtservices-base.js +10 -6
- package/fesm2015/sabstravtech-obtservices-base.js.map +1 -1
- package/package.json +1 -1
|
@@ -294,7 +294,7 @@ export class BaseEnterpriseBasketService {
|
|
|
294
294
|
}
|
|
295
295
|
if (currentBaskets.length > 0) {
|
|
296
296
|
// if currentBaskets items don't have currentBasketID reset currentBasketID ENT-4959
|
|
297
|
-
if (currentBaskets.every(basket => basket.id !== this.currentBasketID)) {
|
|
297
|
+
if (currentBaskets.every(basket => basket.id !== this.currentBasketID) && this.currentBaskets.every(basket => basket.id !== this.currentBasketID)) {
|
|
298
298
|
this.currentBasketID = currentBaskets[0].id;
|
|
299
299
|
}
|
|
300
300
|
// if currentBasketID exists - don't replace currentBasketID with currentBasketsCopy[0].id (if multiple services, we must have a specific currentBasketID ENT-4661)
|
|
@@ -845,11 +845,15 @@ export class BaseEnterpriseBasketService {
|
|
|
845
845
|
updateBasket(basketid, obs) {
|
|
846
846
|
return new Promise((resolve, reject) => {
|
|
847
847
|
obs.pipe(take(1)).subscribe((basket) => {
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
848
|
+
// ENT-7827 added this timeout as we were trying to grab the current baskets sometimes and we were still waiting for an update, tbh i would have rather found which call was causing the delay
|
|
849
|
+
setTimeout(() => {
|
|
850
|
+
console.log(this.currentBaskets, this.currentBasketID, basketid);
|
|
851
|
+
const intBasket = this.findBasket(basketid);
|
|
852
|
+
// this can be the only place we need to do mi, dont need on add/remove/getall
|
|
853
|
+
const isGetMi = basket.status === BasketStatus.Open && !!basket.basketItems.length;
|
|
854
|
+
intBasket.next(basket, isGetMi);
|
|
855
|
+
resolve();
|
|
856
|
+
}, 100);
|
|
853
857
|
}, (error) => {
|
|
854
858
|
console.error(error);
|
|
855
859
|
const intBasket = this.findBasket(basketid);
|
|
@@ -1363,4 +1367,4 @@ export class BaseEnterpriseBasketService {
|
|
|
1363
1367
|
return this.userService.userIsAgent();
|
|
1364
1368
|
}
|
|
1365
1369
|
}
|
|
1366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3Ivc2VydmljZXMvZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBd0IsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDbEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFLTCxnQkFBZ0IsRUFHaEIsWUFBWSxFQU1aLGlCQUFpQixFQUtqQixhQUFhLEVBR2IsV0FBVyxFQVNaLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLDRCQUE0QixFQUM1QixrQkFBa0IsRUFLbEIsYUFBYSxFQUVkLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBbUVqRixPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUF5Q3hFLE9BQU8sRUFDTCx5QkFBeUIsRUFFMUIsTUFBTSwyQkFBMkIsQ0FBQztBQTJFbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU0vQyxPQUFPLEVBQ0wsaUNB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QUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDbkU7YUFBTTtZQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDbkM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFOztZQUMxQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQywwQ0FBRSxPQUFPLDBDQUFFLEtBQUssMENBQUUsV0FBVyxDQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUM5QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQywwQ0FBRSxPQUFPLDBDQUFFLEtBQUssMENBQUUsV0FBVyxDQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUM5QyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUNwRSxDQUFD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LENBQUM7SUFDN0MsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IEFqdiBmcm9tICdhanYnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZSwgbWFwLCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIEFkZEl0ZW1Ub0Jhc2tldCxcbiAgQmFza2V0LFxuICBCYXNrZXRJdGVtLFxuICBCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrLFxuICBCYXNrZXRJdGVtU3RhdHVzLFxuICBCYXNrZXROb3RlLFxuICBCYXNrZXRRdW90ZSxcbiAgQmFza2V0U3RhdHVzLFxuICBCZWZvcmVDYW5jZWxsYXRpb25JbmZvLFxuICBDcmVhdGVCYXNrZXRNdXRhdGlvblZhcmlhYmxlcyxcbiAgRG9jdW1lbnRJbnB1dCxcbiAgRHJhZnRCYXNrZXQsXG4gIERyYWZ0QmFza2V0SXRlbSxcbiAgTGVhZFBhc3NlbmdlclR5cGUsXG4gIE1hbmFnZW1lbnRJbmZvLFxuICBNYW5hZ2VtZW50SW5mb0lucHV0LFxuICBNYW5hZ2VtZW50SW5mb1ZhbHVlLFxuICBPZmZpY2UsXG4gIFBhc3NlbmdlclR5cGUsXG4gIFBob25lTnVtYmVySW5wdXQsXG4gIFNlcnZpY2UsXG4gIFNlcnZpY2VUeXBlLFxuICBTZXRCYXNrZXRJdGVtTWlWYWx1ZSxcbiAgU2V0QmFza2V0SXRlbU1pVmFsdWVJbnB1dCxcbiAgU2V0QmFza2V0SXRlbU11bHRpcGxlTWlWYWx1ZSxcbiAgU2V0QmFza2V0SXRlbU11bHRpcGxlTWlWYWx1ZU11dGF0aW9uVmFyaWFibGVzLFxuICBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm8sXG4gIFVzZXJJbmZvSW5wdXQsXG4gIFVzZXIsXG4gIEJlZm9yZUFtZW5kSW5mb1xufSBmcm9tICcuLi90eXBlcy9ncmFwaHFsLnR5cGVzJztcbmltcG9ydCB7XG4gIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMsXG4gIERpZmZlcmVudFRyYXZlbGxlcixcbiAgR2V0TWlBdXRvU3VnZXN0aW9uQXJyYXksXG4gIEdldFVzZXJCYXNrZXRJdGVtUmVzdWx0LFxuICBHZXRVc2VyQmFza2V0UmVzdWx0LFxuICBNYW5hZ2VtZW50SW5mb1ZhbHVlUmVzdWx0LFxuICBNZW51U2xpZGVFbnVtLFxuICBVc2VyQmFza2V0UmVzdWx0XG59IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcbmltcG9ydCB7IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZCB9IGZyb20gJy4uL2NsYXNzZXMvbWFuYWdlbWVudC1pbmZvLWFuZC12YWxpZCc7XG5pbXBvcnQgeyBNb2RhbFR5cGVzIH0gZnJvbSAnLi4vY2xhc3Nlcy9tb2RhbC10eXBlcy5lbnVtJztcbmltcG9ydCB7IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ltcGwgfSBmcm9tICcuLi9jbGFzc2VzL3N1cHBsZW1lbnRhcnktYm9va2luZy1pbmZvLWltcGwnO1xuaW1wb3J0IHsgQmFza2V0SW5mb01pRGV0YWlsc0ltcGwgfSBmcm9tICcuLi9jbGFzc2VzL2Jhc2tldC1pbmZvLW1pLWRldGFpbHMuaW1wbCc7XG5pbXBvcnQgeyBCYXNlSGVscGVyUm91dGluZXMgfSBmcm9tICcuLi9jbGFzc2VzL2hlbHBlcnMnO1xuaW1wb3J0IHsgQmFzZU1vZGFsT3BlbmVyU2VydmljZSB9IGZyb20gJy4vbW9kYWwtb3BlbmVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFzZUdldFVzZXJGZXRjaGVyLCBTZWFyY2hHZXRVc2VyRmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy91c2VyLWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQWNjZXB0TmV3UHJpY2VGZXRjaGVyVHlwZSxcbiAgQmFzZUFjY2VwdE5ld1ByaWNlVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy9hY2NlcHQtbmV3LXByaWNlLnVwZGF0ZXInO1xuaW1wb3J0IHsgQmFzZUdldEJhc2tldEZldGNoZXIsIEdldEJhc2tldEZldGNoZXJUeXBlIH0gZnJvbSAnLi4vZmV0Y2hlcnMvYmFza2V0LWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJCYXNrZXRzRmV0Y2hlcixcbiAgR2V0VXNlckJhc2tldHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlcnMtYmFza2V0cy1mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRNaUF1dG9TdWdlc3Rpb25GZXRjaGVyLFxuICBNaUF1dG9TdWdnZXN0RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0TWlBdXRvU3VnZXN0aW9ucy5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRVc2VyRGVmYXVsdE1JVmFsdWVGZXRjaGVyLFxuICBHZXRVc2VyRGVmYXVsdE1JVmFsdWVUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLWRlZmF1bHQtbWktdmFsdWUuZmV0Y2hlcic7XG5pbXBvcnQge1xuICBBZGRJdGVtVG9CYXNrZXRGZXRjaGVyVHlwZSxcbiAgQmFzZUFkZEl0ZW1Ub0Jhc2tldFVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvYWRkLWl0ZW0tdG8tYmFza2V0LnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQWRkVXNlckJhc2tldEZldGNoZXJUeXBlLFxuICBCYXNlQWRkVXNlclRvQmFza2V0SXRlbVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvYWRkVXNlclRvQmFza2V0SXRlbSc7XG5pbXBvcnQge1xuICBBZGRHdWVzdEJhc2tldEZldGNoZXJUeXBlLFxuICBCYXNlQWRkR3Vlc3RUb0Jhc2tldEl0ZW1VcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FkZEd1ZXN0VG9CYXNrZXRJdGVtJztcbmltcG9ydCB7XG4gIFNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyRmV0Y2hlclR5cGUsXG4gIEJhc2VTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlclVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2V0LWJhc2tldC1pdGVtLWxlYWQtcGFzc2VuZ2VyLnVwZGF0ZXInO1xuaW1wb3J0IHsgQmFzZUJvb2tCYXNrZXRVcGRhdGVyLCBCb29rQmFza2V0RmV0Y2hlclR5cGUgfSBmcm9tICcuLi91cGRhdGVycy9ib29rLWJhc2tldC11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VDcmVhdGVCYXNrZXRVcGRhdGVyLFxuICBDcmVhdGVCYXNrZXRGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9jcmVhdGUtYmFza2V0LXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZURlbGV0ZUJhc2tldFVwZGF0ZXIsXG4gIERlbGV0ZUJhc2tldEZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JlbW92ZS1iYXNrZXQtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlUmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyLFxuICBEZWxldGVCYXNrZXRJdGVtRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvcmVtb3ZlLWl0ZW0tZnJvbS1iYXNrZXQudXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlUmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXIsXG4gIFJldmFsaWRhdGVCYXNrZXRGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9yZXZhbGlkYXRlLWJhc2tldC11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VBZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlcixcbiAgQWRkVXBkYXRlZEl0ZW1Ub0Jhc2tldFVwZGF0ZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3VwZGF0ZS1iYXNrZXQtaXRlbS51cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZW5kQmFza2V0Rm9yQXBwcm92YWxVcGRhdGVyLFxuICBTZW5kQmFza2V0QXBwcm92YWxGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZW5kLWJhc2tldC1mb3ItYXBwcm92YWwudXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VTZXRCYXNrZXRJdGVtTWlHcm91cFVwZGF0ZXIsXG4gIFNldEJhc2tldEl0TWlHcm91cEZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1iYXNrZXQtaXRlbS1taS1ncm91cCc7XG5pbXBvcnQgeyBUcmF2ZWxsZXIsIFRyYXZlbGxlck9iamVjdCB9IGZyb20gJy4uL21vZGVscy90cmF2ZWxsZXIub2JqZWN0JztcbmltcG9ydCB7IFNlYXJjaE9iamVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VhcmNoLW9iamVjdHMuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEJhc2VTZXRCYXNrZXRJdGVtTWlWYWx1ZVVwZGF0ZXIsXG4gIFNldEJhc2tldEl0TWlGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZXQtYmFza2V0LWl0ZW0tbWktdmFsdWUtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlU2V0QmFza2V0SXRlbU11bHRpcGxlTWlWYWx1ZVVwZGF0ZXIsXG4gIFNldEJhc2tldEl0ZW1NdWx0aXBsZU1pRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2V0LWJhc2tldC1pdGVtLW11bHRpcGxlLW1pLXZhbHVlLXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVZhbGlkYXRlTWlGcmVlVmFsdWVUZXN0ZXIsXG4gIFZhbGlkYXRlTWlGZXRjaGVyVHlwZVxufSBmcm9tICcuLi90ZXN0ZXJzL3ZhbGlkYXRlLW1pLWZyZWUtdmFsdWUudGVzdGVyJztcbmltcG9ydCB7IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9Jc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnVsbFVzZXJEZXRhaWxzLCBVc2VyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXVzZXIuc2VydmljZSc7XG5pbXBvcnQge1xuICBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2Vcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZSc7XG5pbXBvcnQgeyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzdXBwbGVtZW50YXJ5LWJvb2tpbmctaW5mby1pbXBsJztcbmltcG9ydCB7XG4gIEJhc2Vtb3ZlQmFza2V0SXRlbVRvQmFza2V0LFxuICBNb3ZlSXRlbVRvQURpZmZlcmVudEJhc2tldFR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvbW92ZS1iYXNrZXQtaXRlbS10by1iYXNrZXQnO1xuaW1wb3J0IHtcbiAgQmFzZVVwZGF0ZUJhc2tldE5vdGVzVHlwZSxcbiAgQmFzZVVwZGF0ZUJhc2tldE5vdGVVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3VwZGF0ZS1iYXNrZXQtbm90ZXMtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlVXBkYXRlQmFza2V0VGl0bGVUeXBlLFxuICBCYXNlVXBkYXRlQmFza2V0VGl0bGVVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL3VwZGF0ZS1iYXNrZXQtdGl0bGUtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlU2V0UGF5bWVudE9wdGlvblVwZGF0ZXIsXG4gIFNldEJhc2tldEl0ZW1QYXltZW50TWV0aG9kVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZXQtYmFza2V0LWl0ZW0tcGF5bWVuci1vcHRpb24udXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0Q2FuY2VsbGF0aW9uSW5mb0ZldGNoZXIsXG4gIEdldENhbmNlbGxhdGlvbkluZm9UeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1jYW5jZWxsYXRpb24taW5mby5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEJhc2VSZXF1aXJlc1JlYXNvblNlcnZpY2UsXG4gIFJlcXVpcmVzUmVhc29uU2VydmljZUludGVyZmFjZVxufSBmcm9tICcuL3JlcXVpcmVzLXJlYXNvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJhc2VDcmVhdGVCYXNrZXROb3RlVXBkYXRlcixcbiAgQ3JlYXRlQmFza2V0Tm90ZVVwZGF0ZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL2NyZWF0ZS1iYXNrZXQtbm90ZS11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VBZGRCYXNrZXRJdGVtTWFya3VwVXBkYXRlcixcbiAgQWRkQmFza2V0SXRlbU1hcmt1cFR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvYWRkLWJhc2tldC1pdGVtLW1hcmt1cC51cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VBZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrVXBkYXRlcixcbiAgQWRkQmFza2V0SXRlbUN1c3RvbVJlbWFya1VwZGF0ZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FkZC1iYXNrZXQtaXRlbS1jdXN0b20tcmVtYXJrLXVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0QmFza2V0SXRlbUN1c3RvbVJlbWFya3NGZXRjaGVyLFxuICBHZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1iYXNrZXQtaXRlbS1jdXN0b20tcmVtYXJrcy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUNoYW5nZUJhc2tldE93bmVyc2hpcFVwZGF0ZXIsXG4gIENoYW5nZUJhc2tldE93bmVyc2hpcFVwZGF0ZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL2NoYW5nZS1iYXNrZXQtb3duZXJzaGlwLXVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0QmFza2V0UXVvdGVGZXRjaGVyLFxuICBHZXRCYXNrZXRRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1iYXNrZXQtcXVvdGUuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRCYXNrZXROb3Rlc0ZldGNoZXIsXG4gIEdldEJhc2tldE5vdGVzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1ub3Rlcy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVJlc2VuZEFwcHJvdmVyRW1haWxGZXRjaGVyLFxuICBSZXNlbmRBcHByb3ZlckVtYWlsUXVvdGVGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9yZXNlbmQtYXBwcm92YWwtZW1haWwuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VDaGVja0lmQmFza2V0UmVxdWlyZXNBcHByb3ZhbEZldGNoZXIsXG4gIENoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2hlY2staWYtYmFza2V0LXJlcXVpcmVzLWFwcHJvdmFsJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJNaUF1dG9TdWdlc3Rpb25Vc2VyUHJlZmVyZW5jZXNGZXRjaGVyLFxuICBNaVVzZXJBdXRvU3VnZ2VzdFVzZXJQcmVmZXJlbmNlc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLW1pLWF1dG8tc3VnZXN0aW9ucy11c2VyLXByZWZlcmVuY2VzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0RHJhZnRCYXNrZXRzRmV0Y2hlcixcbiAgRHJhZnRCYXNrZXRzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWRyYWZ0LWJhc2tldHMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyLFxuICBDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9jcmVhdGUtYmFza2V0LWZyb20tZHJhZnQtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtb2ZmaWNlLWFwcHJvdmVycy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNlbGVjdEJhc2tldEFwcHJvdmVyVXBkYXRlcixcbiAgU2VsZWN0QmFza2V0QXBwcm92ZXJNdXRhdGlvblR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2VsZWN0LWJhc2tldC1hcHByb3Zlci51cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJBcHByb3ZlcnNGZXRjaGVyLFxuICBHZXRVc2VyQXBwcm92ZXJzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItYXBwcm92ZXJzLmZldGNoZXInO1xuXG5pbXBvcnQgeyBCYXNlV2ViVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi93ZWJ0b2tlbi5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJGYXZvcnVyaXRlIH0gZnJvbSAnLi4vY2xhc3Nlcy91c2VyLWZhdm91cml0ZS5lbnVtJztcbmltcG9ydCB7IE1pQ29tbWFuZCB9IGZyb20gJy4uL2RhdGEvbWktY29tbWFuZCc7XG5pbXBvcnQge1xuICBCYXNlU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyLFxuICBTZWxlY3RCYXNrZXROb3RpZnlBcHByb3Zlck11dGF0aW9uVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZWxlY3QtYmFza2V0LW5vdGlmeS1hcHByb3Zlci51cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlLFxuICBSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZUludGVyZmFjZVxufSBmcm9tICcuL3JlcXVpcmVzLW92ZXJyaWRlLXJlYXNvbi5zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgQmFzZUNhbkFtZW5kQm9va2luZ0ZldGNoZXIsXG4gIENhbkFtZW5kQm9va2luZ1R5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvY2FuLWFtZW5kLWJvb2tpbmcuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VTaGFyZUJhc2tldFVwZGF0ZXIsXG4gIFNoYXJlQmFza2V0VXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2hhcmUtYmFza2V0LnVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlclNoYXJlZEJhc2tldHNGZXRjaGVyLFxuICBHZXRVc2VyU2hhcmVkQmFza2V0c0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2VyLXNoYXJlZC1iYXNrZXRzLmZldGNoZXInO1xuaW1wb3J0IHsgQmFzZVN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuXG5jb25zdCBURU1QSUQgPSAnVEVNUElEXyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFza2V0QW5kSXRlbSB7XG4gIGJhc2tldElkOiBzdHJpbmc7XG4gIGl0ZW06IEJhc2tldEl0ZW07XG59XG5leHBvcnQgaW50ZXJmYWNlIE1pR3JvdXBEZXRhaWwge1xuICB0eXBlOiBTZXJ2aWNlVHlwZTtcbiAgb3B0aW9uczogc3RyaW5nW107XG4gIGJhc2tldEl0ZW06IEJhc2tldEl0ZW07XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEJhc2tldEl0ZW1NYW5hZ2VtZW50SW5mbyB7XG4gIG1pUGVySXRlbTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW107XG4gIG1pUGVyVXNlcjoge1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgIG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXTtcbiAgICAgIHN1cHBsZW1lbnRhcnlCb29raW5nSW5mbz86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZTtcbiAgICB9O1xuICB9O1xuICBtaVBlckd1ZXN0OiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdO1xuICAgICAgc3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvPzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlO1xuICAgIH07XG4gIH07XG4gIHVzZXJzOiBzdHJpbmdbXTtcbiAgYmFza2V0SXRlbTogQmFza2V0SXRlbTtcbiAgaGlkZUZvclNhbWVTZXJ2aWNlPzogYm9vbGVhbjtcbiAgZ3Vlc3RzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcmFmdEJhc2tldEl0ZW1NYW5hZ2VtZW50SW5mbyB7XG4gIG1pUGVySXRlbTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW107XG4gIG1pUGVyVXNlcjoge1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgIG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXTtcbiAgICAgIHN1cHBsZW1lbnRhcnlCb29raW5nSW5mbz86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZTtcbiAgICB9O1xuICB9O1xuICBtaVBlckd1ZXN0OiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdO1xuICAgICAgc3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvPzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlO1xuICAgIH07XG4gIH07XG4gIHVzZXJzOiBzdHJpbmdbXTtcbiAgYmFza2V0SXRlbTogRHJhZnRCYXNrZXRJdGVtO1xuICBoaWRlRm9yU2FtZVNlcnZpY2U/OiBib29sZWFuO1xuICBndWVzdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2tldEluZm9ybWF0aW9uIHtcbiAgcHJpY2VzOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9O1xuICBtaXhlZEN1cnJlbmN5OiBib29sZWFuO1xuICBjb3VudDogbnVtYmVyO1xuICBtaUdyb3VwczogTWlHcm91cERldGFpbFtdO1xuICBiYXNrZXRJbmZvTWlEZXRhaWxzOiBCYXNrZXRJbmZvTWlEZXRhaWxzSW1wbFtdO1xuICBzdXBwSW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlW107XG4gIHJlcXVpcmVzU2VsZWN0ZWRBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWROb3RpZnlBcHByb3Zlcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFza2V0UHJpY2VzTGlzdCB7XG4gIHR5cGU6IFNlcnZpY2VUeXBlO1xuICBwcmljZTogbnVtYmVyO1xuICBjdXJyZW5jeT86IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICBjbzI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRQcmljZXMge1xuICB0b3RhbDogbnVtYmVyO1xuICB0b3RhbENvMjogbnVtYmVyO1xuICBjdXJyZW5jeT86IHN0cmluZztcbiAgbGlzdDogQmFza2V0UHJpY2VzTGlzdFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2tldFNlbGVjdGVkQXBwcm92ZXIge1xuICBzZWxlY3RlZEFwcHJvdmVyPzogVXNlcjtcbiAgc2VsZWN0ZWROb3RpZnlBcHByb3Zlcj86IFVzZXI7XG59XG5cbmV4cG9ydCB0eXBlIEJhc2tldERldGFpbHMgPSBVc2VyQmFza2V0UmVzdWx0ICYgQmFza2V0SW5mb3JtYXRpb247XG5leHBvcnQgY2xhc3MgSW50ZXJuYWxCYXNrZXQ8USBleHRlbmRzIFNlYXJjaEdldFVzZXJGZXRjaGVyVHlwZT5cbiAgaW1wbGVtZW50cyBCYXNrZXRJbmZvcm1hdGlvbiwgSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2VcbntcbiAgc3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+O1xuICBwcml2YXRlIF9iYXNrZXRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz47XG4gIGlkPzogc3RyaW5nO1xuICB0ZW1waWQ/OiBzdHJpbmc7XG4gIHJlcXVpcmVzU2VsZWN0ZWRBcHByb3Zlcj86IGJvb2xlYW47XG4gIHJlcXVpcmVzU2VsZWN0ZWROb3RpZnlBcHByb3Zlcj86IGJvb2xlYW47XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHByaWNlczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfTtcbiAgbWl4ZWRDdXJyZW5jeTogYm9vbGVhbjtcbiAgbG93ZXN0UHJpY2U6IG51bWJlcjtcbiAgY291bnQ6IG51bWJlcjtcbiAgbWlHcm91cHM6IE1pR3JvdXBEZXRhaWxbXTtcbiAgYmFza2V0SW5mb01pRGV0YWlsczogQmFza2V0SW5mb01pRGV0YWlsc0ltcGxbXTtcbiAgc3VwcEluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZVtdO1xuICBncmFuZFRvdGFsOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9O1xuICBjb25zdHJ1Y3RvcihcbiAgICBiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQsXG4gICAgcHJpdmF0ZSBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgcHJpdmF0ZSBiYXNrZXRTZXJ2aWNlOiBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIGdldFVzZXJGZXRjaGVyOiBCYXNlR2V0VXNlckZldGNoZXI8UT4sXG4gICAgcHJpdmF0ZSByZXF1aXJlc1NlcnZpY2U6IEJhc2VSZXF1aXJlc1JlYXNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXF1aXJlc092ZXJyaWRlU2VydmljZTogQmFzZVJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlXG4gICkge1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywge1xuICAgICAgc3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXREZXRhaWxzPih7XG4gICAgICAgIC4uLmJhc2tldCxcbiAgICAgICAgcHJpY2VzOiB7fSxcbiAgICAgICAgbWl4ZWRDdXJyZW5jeTogZmFsc2UsXG4gICAgICAgIGNvdW50OiAwLFxuICAgICAgICBtaUdyb3VwczogW10sXG4gICAgICAgIGJhc2tldEluZm9NaURldGFpbHM6IFtdLFxuICAgICAgICBzdXBwSW5mbzogW11cbiAgICAgIH0pLFxuICAgICAgX2Jhc2tldFN1YmplY3Q6IG5ldyBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz4oe1xuICAgICAgICAuLi5iYXNrZXQsXG4gICAgICAgIHByaWNlczoge30sXG4gICAgICAgIG1peGVkQ3VycmVuY3k6IGZhbHNlLFxuICAgICAgICBjb3VudDogMCxcbiAgICAgICAgbWlHcm91cHM6IFtdLFxuICAgICAgICBiYXNrZXRJbmZvTWlEZXRhaWxzOiBbXSxcbiAgICAgICAgc3VwcEluZm86IFtdXG4gICAgICB9KSxcbiAgICAgIHRlbXBpZDogYmFza2V0LmlkLFxuICAgICAgaWQ6IGJhc2tldC5pZCxcbiAgICAgIHRpdGxlOiBiYXNrZXQudGl0bGUsXG4gICAgICBwcmljZXM6IHt9LFxuICAgICAgbWl4ZWRDdXJyZW5jeTogZmFsc2UsXG4gICAgICBjb3VudDogMCxcbiAgICAgIG1pR3JvdXBzOiBbXSxcbiAgICAgIGJhc2tldEluZm9NaURldGFpbHM6IFtdLFxuICAgICAgc3VwcEluZm86IFtdXG4gICAgfSk7XG5cbiAgICB0aGlzLl9iYXNrZXRTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKDUwMCkpLnN1YnNjcmliZShcbiAgICAgIGRhdGEgPT4ge1xuICAgICAgICB0aGlzLnN1YmplY3QubmV4dChkYXRhKTtcbiAgICAgIH0sXG4gICAgICBlcnIgPT4ge1xuICAgICAgICB0aGlzLnN1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5uZXh0KGJhc2tldCk7XG4gIH1cblxuICBkZXN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3ViamVjdC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbmV4dChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQsIGdldE1pID0gZmFsc2UpIHtcbiAgICBiYXNrZXQgPSB0aGlzLmhlbHBlcnMuY2xvbmUoYmFza2V0KTtcbiAgICB0aGlzLmlkID0gYmFza2V0LmlkO1xuICAgIHRoaXMudGl0bGUgPSBiYXNrZXQudGl0bGU7XG4gICAgY29uc3QgaXNJbnZva2VkID0gISFiYXNrZXQuaW52b2tlZFVzZXI/LmlkO1xuICAgIGNvbnN0IHRvU2VuZDogQmFza2V0RGV0YWlscyA9IHtcbiAgICAgIC4uLmJhc2tldCxcbiAgICAgIC4uLihiYXNrZXQuYmFza2V0SXRlbXMgfHwgW10pLnJlZHVjZShcbiAgICAgICAgKGFjY3VtOiBCYXNrZXRJbmZvcm1hdGlvbiwgaXRlbTogQmFza2V0SXRlbSkgPT4ge1xuICAgICAgICAgIGlmICghYWNjdW0ucHJpY2VzW2l0ZW0uY3VycmVuY3ldKSB7XG4gICAgICAgICAgICBhY2N1bS5wcmljZXNbaXRlbS5jdXJyZW5jeV0gPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFjY3VtLnByaWNlc1tpdGVtLmN1cnJlbmN5XSArPSBpdGVtLnByaWNlO1xuXG4gICAgICAgICAgYWNjdW0uc3VwcEluZm8ucHVzaChcbiAgICAgICAgICAgIG5ldyBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbXBsKGl0ZW0sIHRoaXMuaGVscGVycywgdGhpcy5nZXRVc2VyRmV0Y2hlcilcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpdGVtLm1pR3JvdXBzQXZhaWxhYmxlICYmIGl0ZW0ubWlHcm91cHNBdmFpbGFibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYWNjdW0ubWlHcm91cHMucHVzaCh7XG4gICAgICAgICAgICAgIHR5cGU6IGl0ZW0uc2VydmljZS50eXBlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBpdGVtLm1pR3JvdXBzQXZhaWxhYmxlLFxuICAgICAgICAgICAgICBiYXNrZXRJdGVtOiBpdGVtLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5taUdyb3VwU2VsZWN0ZWQgfHwgJydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpdGVtLm1hbmFnZW1lbnRJbmZvPy5sZW5ndGggPiAwICYmIChpdGVtLnVzZXJzPy5sZW5ndGggPiAwIHx8IGl0ZW0uZ3Vlc3RzPy5sZW5ndGgpKSB7XG4gICAgICAgICAgICBhY2N1bS5iYXNrZXRJbmZvTWlEZXRhaWxzLnB1c2goXG4gICAgICAgICAgICAgIG5ldyBCYXNrZXRJbmZvTWlEZXRhaWxzSW1wbChpdGVtLCB0aGlzLmJhc2tldFNlcnZpY2UsIHRoaXMuaGVscGVycywgaXNJbnZva2VkLCBnZXRNaSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHByaWNlczoge30sXG4gICAgICAgICAgbWl4ZWRDdXJyZW5jeTogZmFsc2UsXG4gICAgICAgICAgY291bnQ6IGJhc2tldC5iYXNrZXRJdGVtcz8ubGVuZ3RoIHx8IDAsXG4gICAgICAgICAgbWlHcm91cHM6IFtdLFxuICAgICAgICAgIGJhc2tldEluZm9NaURldGFpbHM6IFtdLFxuICAgICAgICAgIHN1cHBJbmZvOiBbXVxuICAgICAgICB9XG4gICAgICApXG4gICAgfTtcbiAgICB0b1NlbmQubWl4ZWRDdXJyZW5jeSA9IE9iamVjdC5rZXlzKHRvU2VuZC5wcmljZXMpLmxlbmd0aCA+IDE7XG4gICAgdGhpcy5fYmFza2V0U3ViamVjdC5uZXh0KHRvU2VuZCk7XG5cbiAgICBpZiAoYmFza2V0LmJhc2tldEl0ZW1zLmV2ZXJ5KGl0ZW0gPT4gaXRlbT8uZGV0YWlsPy5vdXR3YXJkRGV0YWlsPy5zcGxpdElEKSkge1xuICAgICAgaWYgKCEoYmFza2V0LmJhc2tldEl0ZW1zLmxlbmd0aCAlIDIpKSB7XG4gICAgICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlLmFkZEJhc2tldEl0ZW0oYmFza2V0KTtcbiAgICAgICAgdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZS5hZGRCYXNrZXRJdGVtKGJhc2tldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlLmFkZEJhc2tldEl0ZW0oYmFza2V0KTtcbiAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUVudGVycHJpc2VCYXNrZXRTZXJ2aWNlPFxuICBBTlBVX1EgZXh0ZW5kcyBBY2NlcHROZXdQcmljZUZldGNoZXJUeXBlLFxuICBBSVRCX1EgZXh0ZW5kcyBBZGRJdGVtVG9CYXNrZXRGZXRjaGVyVHlwZSxcbiAgQVVUQl9RIGV4dGVuZHMgQWRkVXNlckJhc2tldEZldGNoZXJUeXBlLFxuICBDQl9RIGV4dGVuZHMgQ3JlYXRlQmFza2V0RmV0Y2hlclR5cGUsXG4gIEdCX1EgZXh0ZW5kcyBHZXRCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQkJfUSBleHRlbmRzIEJvb2tCYXNrZXRGZXRjaGVyVHlwZSxcbiAgREJfUSBleHRlbmRzIERlbGV0ZUJhc2tldEZldGNoZXJUeXBlLFxuICBHQVNfUSBleHRlbmRzIE1pQXV0b1N1Z2dlc3RGZXRjaGVyVHlwZSxcbiAgR1VETVZfUSBleHRlbmRzIEdldFVzZXJEZWZhdWx0TUlWYWx1ZVR5cGUsXG4gIFJJQl9RIGV4dGVuZHMgRGVsZXRlQmFza2V0SXRlbUZldGNoZXJUeXBlLFxuICBSVkJfUSBleHRlbmRzIFJldmFsaWRhdGVCYXNrZXRGZXRjaGVyVHlwZSxcbiAgU0JNSV9RIGV4dGVuZHMgU2V0QmFza2V0SXRNaUdyb3VwRmV0Y2hlclR5cGUsXG4gIFNWTUlfUSBleHRlbmRzIFNldEJhc2tldEl0TWlGZXRjaGVyVHlwZSxcbiAgU0JJTU1JX1EgZXh0ZW5kcyBTZXRCYXNrZXRJdGVtTXVsdGlwbGVNaUZldGNoZXJUeXBlLFxuICBWTUlfUSBleHRlbmRzIFZhbGlkYXRlTWlGZXRjaGVyVHlwZSxcbiAgU0JBX1EgZXh0ZW5kcyBTZW5kQmFza2V0QXBwcm92YWxGZXRjaGVyVHlwZSxcbiAgR1VfUSBleHRlbmRzIFNlYXJjaEdldFVzZXJGZXRjaGVyVHlwZSxcbiAgR1VCX1EgZXh0ZW5kcyBHZXRVc2VyQmFza2V0c0ZldGNoZXJUeXBlLFxuICBTQkxQX1EgZXh0ZW5kcyBTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlckZldGNoZXJUeXBlLFxuICBNSVREQl9RIGV4dGVuZHMgTW92ZUl0ZW1Ub0FEaWZmZXJlbnRCYXNrZXRUeXBlLFxuICBVQk5fUSBleHRlbmRzIEJhc2VVcGRhdGVCYXNrZXROb3Rlc1R5cGUsXG4gIFVCVF9RIGV4dGVuZHMgQmFzZVVwZGF0ZUJhc2tldFRpdGxlVHlwZSxcbiAgU0JNX1EgZXh0ZW5kcyBTZXRCYXNrZXRJdGVtUGF5bWVudE1ldGhvZFR5cGUsXG4gIEdDSV9RIGV4dGVuZHMgR2V0Q2FuY2VsbGF0aW9uSW5mb1R5cGUsXG4gIEFHVEJfUSBleHRlbmRzIEFkZEd1ZXN0QmFza2V0RmV0Y2hlclR5cGUsXG4gIEFVSUJfUSBleHRlbmRzIEFkZFVwZGF0ZWRJdGVtVG9CYXNrZXRVcGRhdGVyVHlwZSxcbiAgQ0JOX1EgZXh0ZW5kcyBDcmVhdGVCYXNrZXROb3RlVXBkYXRlclR5cGUsXG4gIEdCTkZfUSBleHRlbmRzIEdldEJhc2tldE5vdGVzRmV0Y2hlclR5cGUsXG4gIEFNX1EgZXh0ZW5kcyBBZGRCYXNrZXRJdGVtTWFya3VwVHlwZSxcbiAgQUJJQ1JfUSBleHRlbmRzIEFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmtVcGRhdGVyVHlwZSxcbiAgR0JJQ19RIGV4dGVuZHMgR2V0QmFza2V0SXRlbUN1c3RvbVJlbWFya3NGZXRjaGVyVHlwZSxcbiAgQ0JPVV9RIGV4dGVuZHMgQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlclR5cGUsXG4gIEdCUUZfUSBleHRlbmRzIEdldEJhc2tldFF1b3RlRmV0Y2hlclR5cGUsXG4gIFJBRV9RIGV4dGVuZHMgUmVzZW5kQXBwcm92ZXJFbWFpbFF1b3RlRmV0Y2hlclR5cGUsXG4gIENJQlJBX1EgZXh0ZW5kcyBDaGVja0lmQmFza2V0UmVxdWlyZXNBcHByb3ZhbEZldGNoZXJUeXBlLFxuICBHVU1JX1EgZXh0ZW5kcyBNaVVzZXJBdXRvU3VnZ2VzdFVzZXJQcmVmZXJlbmNlc0ZldGNoZXJUeXBlLFxuICBHT0FGX1EgZXh0ZW5kcyBHZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyVHlwZSxcbiAgU0JBX1UgZXh0ZW5kcyBTZWxlY3RCYXNrZXRBcHByb3Zlck11dGF0aW9uVHlwZSxcbiAgR0RCX1EgZXh0ZW5kcyBEcmFmdEJhc2tldHNGZXRjaGVyVHlwZSxcbiAgQ0JGRF9RIGV4dGVuZHMgQ3JlYXRlQmFza2V0RnJvbURyYWZ0VXBkYXRlclR5cGUsXG4gIFNCTkFfVSBleHRlbmRzIFNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyTXV0YXRpb25UeXBlLFxuICBDQUJfUSBleHRlbmRzIENhbkFtZW5kQm9va2luZ1R5cGUsXG4gIEdVQUZfUSBleHRlbmRzIEdldFVzZXJBcHByb3ZlcnNGZXRjaGVyVHlwZSxcbiAgU0JVX1EgZXh0ZW5kcyBTaGFyZUJhc2tldFVwZGF0ZXJUeXBlLFxuICBHVVNCX1EgZXh0ZW5kcyBHZXRVc2VyU2hhcmVkQmFza2V0c0ZldGNoZXJUeXBlXG4+IGltcGxlbWVudHMgRW50ZXJwcmlzZUJhc2tldFNlcnZpY2VJbnRlcmZhY2VcbntcbiAgcHVibGljIGJhc2tldFVwZGF0aW5nID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjdXJyZW50QmFza2V0czogSW50ZXJuYWxCYXNrZXQ8R1VfUT5bXSA9IFtdO1xuXG4gIGhpZ2hsaWdodEJhc2tldEl0ZW1zRW1pdHRlcjogU3ViamVjdDxHZXRVc2VyQmFza2V0SXRlbVJlc3VsdFtdPiA9IG5ldyBTdWJqZWN0PFxuICAgIEdldFVzZXJCYXNrZXRJdGVtUmVzdWx0W11cbiAgPigpO1xuXG4gIGJhc2tldENoYW5nZUVtaXR0ZXI6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgYWRkaW5nVG9CYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZW1vdmluZ0Zyb21CYXNrZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBkZWxldGluZ0Jhc2tldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGF1dG9TdWdnZXN0RGVmYXVsdHNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSAgbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgc2VsZWN0ZWRCYXNrZXRJZDogc3RyaW5nID0gJyc7XG4gIG5ld0ludm9rZWRCYXNrZXRJZDogc3RyaW5nO1xuXG4gIF9nb2luZ0ZvckFwcHJvdmFsOiBib29sZWFuID0gZmFsc2U7XG4gIGdldCBnb2luZ0ZvckFwcHJvdmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9nb2luZ0ZvckFwcHJvdmFsO1xuICB9XG5cbiAgc2V0IGdvaW5nRm9yQXBwcm92YWwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9nb2luZ0ZvckFwcHJvdmFsID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBnZXQgY3VycmVudEJhc2tldElEKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IGN1cnJlbnRCYXNrZXRJRCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCkge1xuICAgICAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgZW1pdHRlciBnZXR0aW5nIHN0dWNrIGluIGEgbG9vcCAgLSBjYXN1aW5nIGJyb3dzZXIgb3ZlcmxvYWRzXG4gICAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYmFza2V0cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SW50ZXJuYWxCYXNrZXQ8R1VfUT5bXT4oW10pO1xuXG4gIGJhc2tldExpc3Q6IEJhc2tldFByaWNlc0xpc3RbXSA9IFtcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5GbGlnaHQsXG4gICAgICB0ZXh0OiAnRkxJR0hUUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuUmFpbCxcbiAgICAgIHRleHQ6ICdSQUlMJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5Ib3RlbCxcbiAgICAgIHRleHQ6ICdIT1RFTFMnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkNhYixcbiAgICAgIHRleHQ6ICdUQVhJUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuQ2FyLFxuICAgICAgdGV4dDogJ0NBUlMnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkV1cm9zdGFyLFxuICAgICAgdGV4dDogJ0VVUk9TVEFSJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5JbnRlcm5hdGlvbmFsUmFpbCxcbiAgICAgIHRleHQ6ICdJTlRFUk5BVElPTkFMIFJBSUwnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLlBhcmtpbmcsXG4gICAgICB0ZXh0OiAnUEFSS0lORycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuTG91bmdlLFxuICAgICAgdGV4dDogJ0xPVU5HRVMnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkNvYWNoLFxuICAgICAgdGV4dDogJ0NPQUNIJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5GYXN0VHJhY2ssXG4gICAgICB0ZXh0OiAnRkFTVF9UUkFDSycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH1cbiAgXTtcblxuICBiYXNrZXRQcmljZXM6IEJlaGF2aW9yU3ViamVjdDxCYXNrZXRQcmljZXM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXRQcmljZXM+KHtcbiAgICB0b3RhbDogbnVsbCxcbiAgICB0b3RhbENvMjogbnVsbCxcbiAgICBsaXN0OiB0aGlzLmJhc2tldExpc3RcbiAgfSk7XG5cbiAgbWVudVN0YXRlID0gTWVudVNsaWRlRW51bS5PVVQ7XG4gIHByaXZhdGUgcmVxdWlyZXNTZXJ2aWNlOiBCYXNlUmVxdWlyZXNSZWFzb25TZXJ2aWNlO1xuICBwcml2YXRlIHJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlOiBCYXNlUmVxdWlyZXNPdmVycmlkZVJlYXNvblNlcnZpY2U7XG4gIHByaXZhdGUgdXNlckN1cnJlbmN5ID0gJ0dCUCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhY2NlcHROZXdQcmljZVVwZGF0ZXI6IEJhc2VBY2NlcHROZXdQcmljZVVwZGF0ZXI8QU5QVV9RPixcbiAgICBwcml2YXRlIGFkZEl0ZW1Ub0Jhc2tldFVwZGF0ZXI6IEJhc2VBZGRJdGVtVG9CYXNrZXRVcGRhdGVyPEFJVEJfUT4sXG4gICAgcHJpdmF0ZSBhZGRVc2VyVG9CYXNrZXRJdGVtOiBCYXNlQWRkVXNlclRvQmFza2V0SXRlbVVwZGF0ZXI8QVVUQl9RPixcbiAgICBwcml2YXRlIGJhc2tldENyZWF0b3I6IEJhc2VDcmVhdGVCYXNrZXRVcGRhdGVyPENCX1E+LFxuICAgIHB1YmxpYyBiYXNrZXRGZXRjaGVyOiBCYXNlR2V0QmFza2V0RmV0Y2hlcjxHQl9RPixcbiAgICBwcml2YXRlIGJvb2tCYXNrZXRVcGRhdGVyOiBCYXNlQm9va0Jhc2tldFVwZGF0ZXI8QkJfUT4sXG4gICAgcHJpdmF0ZSBkZWxldGVCYXNrZXRVcGRhdGVyOiBCYXNlRGVsZXRlQmFza2V0VXBkYXRlcjxEQl9RPixcbiAgICBwcml2YXRlIGdldE1pQXV0b1N1Z2VzdGlvbkZldGNoZXI6IEJhc2VHZXRNaUF1dG9TdWdlc3Rpb25GZXRjaGVyPEdBU19RPixcbiAgICBwcml2YXRlIGdldFVzZXJEZWZhdWx0TUlWYWx1ZUZldGNoZXI6IEJhc2VHZXRVc2VyRGVmYXVsdE1JVmFsdWVGZXRjaGVyPEdVRE1WX1E+LFxuICAgIHByaXZhdGUgaGVscGVyczogQmFzZUhlbHBlclJvdXRpbmVzLFxuICAgIHByaXZhdGUgcmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyOiBCYXNlUmVtb3ZlSXRlbUZyb21CYXNrZXRVcGRhdGVyPFJJQl9RPixcbiAgICBwcml2YXRlIHJldmFsaWRhdGVCYXNrZXRVcGRhdGVyOiBCYXNlUmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXI8UlZCX1E+LFxuICAgIHByaXZhdGUgc2V0QmFza2V0SXRlbU1pR3JvdXBVcGRhdGVyOiBCYXNlU2V0QmFza2V0SXRlbU1pR3JvdXBVcGRhdGVyPFNCTUlfUT4sXG4gICAgcHJpdmF0ZSBzZXRCYXNrZXRJdGVtTWlWYWx1ZVVwZGF0ZXI6IEJhc2VTZXRCYXNrZXRJdGVtTWlWYWx1ZVVwZGF0ZXI8U1ZNSV9RPixcbiAgICBwcml2YXRlIHNldEJhc2tldEl0ZW1NdWx0aXBsZU1pVmFsdWVVcGRhdGVyOiBCYXNlU2V0QmFza2V0SXRlbU11bHRpcGxlTWlWYWx1ZVVwZGF0ZXI8U0JJTU1JX1E+LFxuICAgIHByaXZhdGUgdmFsaWRhdGVNaUZyZWVWYWx1ZTogQmFzZVZhbGlkYXRlTWlGcmVlVmFsdWVUZXN0ZXI8Vk1JX1E+LFxuICAgIHByaXZhdGUgc2VuZEJhc2tldEZvckFwcHJvdmFsVXBkYXRlcjogQmFzZVNlbmRCYXNrZXRGb3JBcHByb3ZhbFVwZGF0ZXI8U0JBX1E+LFxuXG4gICAgcHJpdmF0ZSBnZXRVc2VyRmV0Y2hlcjogQmFzZUdldFVzZXJGZXRjaGVyPEdVX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlckJhc2tldHNGZXRjaGVyOiBCYXNlR2V0VXNlckJhc2tldHNGZXRjaGVyPEdVQl9RPixcbiAgICBwcml2YXRlIFNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyOiBCYXNlU2V0QmFza2V0SXRlbUxlYWRQYXNzZW5nZXJVcGRhdGVyPFNCTFBfUT4sXG4gICAgcHJpdmF0ZSBtb3ZlSXRlbVRvQURpZmZlcmVudEJhc2tldDogQmFzZW1vdmVCYXNrZXRJdGVtVG9CYXNrZXQ8TUlUREJfUT4sXG4gICAgcHJpdmF0ZSB1cGRhdGVCYXNrZXROb3Rlc1VwZGF0ZXI6IEJhc2VVcGRhdGVCYXNrZXROb3RlVXBkYXRlcjxVQk5fUT4sXG4gICAgcHJpdmF0ZSB1cGRhdGVCYXNrZXRUaXRsZVVwZGF0ZXI6IEJhc2VVcGRhdGVCYXNrZXRUaXRsZVVwZGF0ZXI8VUJUX1E+LFxuICAgIHByaXZhdGUgc2V0UGF5bWVudE1ldGhvZFVwZGF0ZXI6IEJhc2VTZXRQYXltZW50T3B0aW9uVXBkYXRlcjxTQk1fUT4sXG4gICAgcHJpdmF0ZSBnZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlcjogQmFzZUdldENhbmNlbGxhdGlvbkluZm9GZXRjaGVyPEdDSV9RPixcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQmFzZU1vZGFsT3BlbmVyU2VydmljZSxcbiAgICBwcml2YXRlIGFkZEd1ZXN0VG9CYXNrZXRJdGVtOiBCYXNlQWRkR3Vlc3RUb0Jhc2tldEl0ZW1VcGRhdGVyPEFHVEJfUT4sXG4gICAgcHJpdmF0ZSBhZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlcjogQmFzZUFkZFVwZGF0ZWRJdGVtVG9CYXNrZXRVcGRhdGVyPEFVSUJfUT4sXG4gICAgcHJpdmF0ZSBjcmVhdGVCYXNrZXROb3RlOiBCYXNlQ3JlYXRlQmFza2V0Tm90ZVVwZGF0ZXI8Q0JOX1E+LFxuICAgIHByaXZhdGUgZ2V0QmFza2V0Tm90ZXM6IEJhc2VHZXRCYXNrZXROb3Rlc0ZldGNoZXI8R0JORl9RPixcbiAgICBwcml2YXRlIGFkZEJhc2tldEl0ZW1NYXJrdXBVcGRhdGVyOiBCYXNlQWRkQmFza2V0SXRlbU1hcmt1cFVwZGF0ZXI8QU1fUT4sXG4gICAgcHJpdmF0ZSBhZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrOiBCYXNlQWRkQmFza2V0SXRlbUN1c3RvbVJlbWFya1VwZGF0ZXI8QUJJQ1JfUT4sXG4gICAgcHJpdmF0ZSBnZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrczogQmFzZUdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzRmV0Y2hlcjxHQklDX1E+LFxuICAgIHByaXZhdGUgY2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlcjogQmFzZUNoYW5nZUJhc2tldE93bmVyc2hpcFVwZGF0ZXI8Q0JPVV9RPixcbiAgICBwcml2YXRlIGdldEJhc2tldFF1b3RlRmV0Y2hlcjogQmFzZUdldEJhc2tldFF1b3RlRmV0Y2hlcjxHQlFGX1E+LFxuICAgIHByaXZhdGUgcmVzZW5kQXBwcm92ZXJFbWFpbDogQmFzZVJlc2VuZEFwcHJvdmVyRW1haWxGZXRjaGVyPFJBRV9RPixcbiAgICBwcml2YXRlIGJhc2tldFJlcXVpcmVzQXBwcm92YWw6IEJhc2VDaGVja0lmQmFza2V0UmVxdWlyZXNBcHByb3ZhbEZldGNoZXI8Q0lCUkFfUT4sXG4gICAgcHJpdmF0ZSBnZXRVc2VyTWlBdXRvU3VnZ2VzdFVzZXJQcmVmZXJlbmNlc0ZldGNoZXI6IEJhc2VHZXRVc2VyTWlBdXRvU3VnZXN0aW9uVXNlclByZWZlcmVuY2VzRmV0Y2hlcjxHVU1JX1E+LFxuICAgIHByaXZhdGUgZ2V0T2ZmaWNlQXBwcm92ZXJzRmV0Y2hlcjogQmFzZUdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXI8R09BRl9RPixcbiAgICBwcml2YXRlIHNlbGVjdEJhc2tldEFwcHJvdmVyVXBkYXRlcjogQmFzZVNlbGVjdEJhc2tldEFwcHJvdmVyVXBkYXRlcjxTQkFfVT4sXG4gICAgcHJpdmF0ZSBnZXREcmFmdEJhc2tldHNGZXRjaGVyOiBCYXNlR2V0RHJhZnRCYXNrZXRzRmV0Y2hlcjxHREJfUT4sXG4gICAgcHJpdmF0ZSBjcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyOiBCYXNlQ3JlYXRlQmFza2V0RnJvbURyYWZ0VXBkYXRlcjxDQkZEX1E+LFxuICAgIHByaXZhdGUgc2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyOiBCYXNlU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyPFNCTkFfVT4sXG4gICAgcHJpdmF0ZSBjYW5BbWVuZEJvb2tpbmdJbmZvRmV0Y2hlcjogQmFzZUNhbkFtZW5kQm9va2luZ0ZldGNoZXI8Q0FCX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlckFwcHJvdmVyc0ZldGNoZXI6IEJhc2VHZXRVc2VyQXBwcm92ZXJzRmV0Y2hlcjxHVUFGX1E+LFxuICAgIHByaXZhdGUgc2hhcmVCYXNrZXRVcGRhdGVyOiBCYXNlU2hhcmVCYXNrZXRVcGRhdGVyPFNCVV9RPixcbiAgICBwcml2YXRlIGdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlcjogQmFzZUdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlcjxHVVNCX1E+LFxuICAgIHByb3RlY3RlZCBzdG9yYWdlU2VydmljZTogQmFzZVN0b3JhZ2VTZXJ2aWNlLFxuXG4gICkge1xuICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlID0gbmV3IEJhc2VSZXF1aXJlc1JlYXNvblNlcnZpY2UobW9kYWxTZXJ2aWNlLCB0aGlzKTtcbiAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlID0gbmV3IEJhc2VSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZShtb2RhbFNlcnZpY2UsIHRoaXMpO1xuICAgIHRoaXMudXNlclNlcnZpY2UuY2hhbmdlVXNlci5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRSZXF1aXJlc1JlYXNvblNlcnZpY2UoKTogUmVxdWlyZXNSZWFzb25TZXJ2aWNlSW50ZXJmYWNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlc1NlcnZpY2U7XG4gIH1cblxuICBnZXRSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZSgpOiBSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZUludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2U7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKSB7XG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuZ2V0ZnVsbFVzZXJEZXRhaWxzKGZhbHNlKS51c2VyRGF0YS52YWx1ZSkge1xuICAgICAgdGhpcy5nZXRVc2VyQmFza2V0c0ZldGNoZXJcbiAgICAgICAgLmZldGNoTGlzdCh7XG4gICAgICAgICAgYmFza2V0U3RhdHVzZXM6IFtCYXNrZXRTdGF0dXMuT3Blbl0sXG4gICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5nZXRmdWxsVXNlckRldGFpbHModHJ1ZSkudXNlckRhdGEudmFsdWUudXNlcl9pZC50b1N0cmluZygpXG4gICAgICAgIH0pXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJhc2tldHM6IFVzZXJCYXNrZXRSZXN1bHRbXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IHRoaXMuY3VycmVudEJhc2tldHMuZmlsdGVyKFxuICAgICAgICAgICAgICAoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPikgPT5cbiAgICAgICAgICAgICAgICBiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5PcGVuIHx8ICFiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsZXQgY3VycmVudEJhc2tldHMgPSBiYXNrZXRzLm1hcCgoYmFza2V0OiBVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChiYXNrZXQpIHtcbiAgICAgICAgICAgICAgICBsZXQgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldC5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnRCYXNrZXQpIHtcbiAgICAgICAgICAgICAgICAgIGludEJhc2tldCA9IHRoaXMuY3JlYXRlSW50QmFza2V0KGJhc2tldCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2goaW50QmFza2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludEJhc2tldDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxldCBjdXJyZW50QmFza2V0c0NvcHkgPSB0aGlzLmhlbHBlcnMuY2xvbmUoY3VycmVudEJhc2tldHMpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJTZXJ2aWNlLmJvYm8pIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIGJhc2tlc3Qgd2l0aCBpbnZva2VkIHVzZXIgaWYgd2UgYXJlIG5vdCBjdXJyZW50bHkgaW52b2tpbmcgYSB1c2VyIC8vID8gLSBzaG91bGQgd2UgZG8gdGhlIG9wcG9zaXRlIGFzIHdlbGw/XG4gICAgICAgICAgICAgIGN1cnJlbnRCYXNrZXRzQ29weSA9IGN1cnJlbnRCYXNrZXRzQ29weS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgYmFza2V0ID0+ICFiYXNrZXQuc3ViamVjdC52YWx1ZS5pbnZva2VkVXNlclxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KGN1cnJlbnRCYXNrZXRzKTsgLy8gdXBkYXRlIGJhc2tldCBiZWZvcmUgY3VycmVudEJhc2tldElEIHVwZGF0ZSBiYXNrZXRDaGFuZ2VFbWl0dGVyIHdpdGggdGhlIG9sZCBiYXNrZXRcblxuICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHNDb3B5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0SUQgZXhpc3RzIC0gZG9uJ3QgcmVwbGFjZSBjdXJyZW50QmFza2V0SUQgd2l0aCBjdXJyZW50QmFza2V0c0NvcHlbMF0uaWQgKGlmIG11bHRpcGxlIHNlcnZpY2VzLCB3ZSBtdXN0IGhhdmUgYSBzcGVjaWZpYyBjdXJyZW50QmFza2V0SUQpXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSB0aGlzLmN1cnJlbnRCYXNrZXRJRCB8fCBjdXJyZW50QmFza2V0c0NvcHlbMF0uaWQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBudWxsO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCYXNrZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0cyBpdGVtcyBkb24ndCBoYXZlIGN1cnJlbnRCYXNrZXRJRCByZXNldCBjdXJyZW50QmFza2V0SUQgRU5ULTQ5NTlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMuZXZlcnkoYmFza2V0ID0+IGJhc2tldC5pZCAhPT0gdGhpcy5jdXJyZW50QmFza2V0SUQpKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IGN1cnJlbnRCYXNrZXRzWzBdLmlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0SUQgZXhpc3RzIC0gZG9uJ3QgcmVwbGFjZSBjdXJyZW50QmFza2V0SUQgd2l0aCBjdXJyZW50QmFza2V0c0NvcHlbMF0uaWQgKGlmIG11bHRpcGxlIHNlcnZpY2VzLCB3ZSBtdXN0IGhhdmUgYSBzcGVjaWZpYyBjdXJyZW50QmFza2V0SUQgRU5ULTQ2NjEpXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSB0aGlzLmN1cnJlbnRCYXNrZXRJRCB8fCBjdXJyZW50QmFza2V0c1swXS5pZDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICAgICAgICAgIH0gLy8gd2FudCB0byBrZWVwIHRoZSBpbnZva2VkIGJhc2tldHNcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5iYXNrZXRzLm5leHQoY3VycmVudEJhc2tldHMpO1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0cyBpdGVtcyBkb24ndCBoYXZlIGN1cnJlbnRCYXNrZXRJRCByZXNldCBjdXJyZW50QmFza2V0SUQgRU5ULTQ5NTlcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCYXNrZXRzLmV2ZXJ5KGJhc2tldCA9PiBiYXNrZXQuaWQgIT09IHRoaXMuY3VycmVudEJhc2tldElEKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gY3VycmVudEJhc2tldHNbMF0uaWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gaWYgY3VycmVudEJhc2tldElEIGV4aXN0cyAtIGRvbid0IHJlcGxhY2UgY3VycmVudEJhc2tldElEIHdpdGggY3VycmVudEJhc2tldHNDb3B5WzBdLmlkIChpZiBtdWx0aXBsZSBzZXJ2aWNlcywgd2UgbXVzdCBoYXZlIGEgc3BlY2lmaWMgY3VycmVudEJhc2tldElEIEVOVC00NjYxKVxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IHRoaXMuY3VycmVudEJhc2tldElEIHx8IGN1cnJlbnRCYXNrZXRzWzBdLmlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50QmFza2V0cy5mb3JFYWNoKChiYXNrZXQ6IEludGVybmFsQmFza2V0SW50ZXJmYWNlKSA9PlxuICAgICAgICBiYXNrZXQuc3ViamVjdC51bnN1YnNjcmliZSgpXG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IFtdO1xuICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBudWxsO1xuICAgICAgdGhpcy5iYXNrZXRzLm5leHQodGhpcy5jdXJyZW50QmFza2V0cyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFsbE9wZW5CYXNrZXRzKHVzZXJfaWQ6IHN0cmluZyk6IFByb21pc2U8VXNlckJhc2tldFJlc3VsdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckJhc2tldHNGZXRjaGVyXG4gICAgICAuZmV0Y2hMaXN0KHsgYmFza2V0U3RhdHVzZXM6IFtCYXNrZXRTdGF0dXMuT3Blbl0sIHVzZXI6IHVzZXJfaWQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICBtYXAoKHJlc3VsdHM6IFVzZXJCYXNrZXRSZXN1bHRbXSkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbmRCYXNrZXQocmVzdWx0LmlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IG5ldyBJbnRlcm5hbEJhc2tldChcbiAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGVscGVycyxcbiAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICB0aGlzLmdldFVzZXJGZXRjaGVyLFxuICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2goaW50QmFza2V0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVG9CYXNrZXQoXG4gICAgaXRlbTogQWRkSXRlbVRvQmFza2V0LlZhcmlhYmxlcyxcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+LFxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdID0gW10sXG4gICAgcmVxdWlyZXNSZWFzb246IGJvb2xlYW4sXG4gICAgaW52b2tlZFNwbGl0PzogYm9vbGVhbixcbiAgICBpZ25vcmVJbnZva2VkQ2hlY2s/OiBib29sZWFuXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIGNvbnNvbGUud2FybignKysrIEF0dGVtcHRpbmcgdG8gYWRkIGl0ZW0gdG8gYmFza2V0OiAnLCBpdGVtLCAnICsrKycpO1xuXG4gICAgaWYgKGludm9rZWRTcGxpdCkge1xuICAgICAgLy8gRU5ULTY5NDMgZG8gdGhpcyBzbyB3ZSB1c2UgdGhlIGludEJhc2tldCBpZiB3ZSBoYXZlIG9uZSwgaGFkIGFuIGlzc3VlIGFkZGluZyB0byBiYXNrZXQgd2l0aCBubyBjdXJyZW50QmFrZXRJRCBidXQgd2UgZGlkIGhhdmUgaW50YmFza2V0XG4gICAgICBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpIHx8IGludEJhc2tldDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElEKSB8fCBpbnRCYXNrZXQ7XG4gICAgICBzd2l0Y2ggKFxuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQmFza2V0Rm9ySW52b2tlZChpbnRCYXNrZXQsIHRoaXMudXNlclNlcnZpY2UuYm9ibywgaWdub3JlSW52b2tlZENoZWNrKVxuICAgICAgKSB7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jb250aW51ZTpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDpcbiAgICAgICAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5uZXdCYXNrZXQ6XG4gICAgICAgICAgaW50QmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IGludEJhc2tldC5pZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLnJlc2VhcmNoOlxuICAgICAgICAgIGlmIChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5pbnZva2VkVXNlcikge1xuICAgICAgICAgICAgY29uc3QgaW52b2tlZFVzZXIgPSBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtc1swXS51c2Vycy5maW5kKFxuICAgICAgICAgICAgICB1c2VyID0+IHVzZXIuaWQgPT09IGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmludm9rZWRVc2VyLmlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5zZXRCb2JvKFRyYXZlbGxlck9iamVjdC5tYWtlVHJhdmVsbGVyT2JqZWN0RnJvbVVzZXIoaW52b2tlZFVzZXIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGJvYm9cbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2Uuc2V0Qm9ibyhudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQ6IGFueSA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckZhdm9yaXRlT2JqZWN0KFxuICAgICAgVXNlckZhdm9ydXJpdGUuQWxsb3dTYW1lVHJhdmVsbGVzclBlckJhc2tldFxuICAgIClcbiAgICAgID8gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3QoVXNlckZhdm9ydXJpdGUuQWxsb3dTYW1lVHJhdmVsbGVzclBlckJhc2tldClcbiAgICAgIDogW107XG5cbiAgICBjb25zb2xlLmxvZyhzYW1lVHJhdmVsbGVzclBlckJhc2tldCk7XG5cbiAgICBpZiAoXG4gICAgICBzYW1lVHJhdmVsbGVzclBlckJhc2tldCAmJlxuICAgICAgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXRbJ3NhbWVUcmF2ZWxsZXJzJ10gJiZcbiAgICAgIHRyYXZlbGxlcnMgJiZcbiAgICAgIHRyYXZlbGxlcnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJysrKyBTYW1lIFRyYXZlbGxlcnMgaXMgRW5hYmxlZCArKysnKTtcbiAgICAgIHN3aXRjaCAoXG4gICAgICAgIGF3YWl0IHRoaXMuaXNTYW1lVHJhdmVsbGVzclBlckJhc2tldChcbiAgICAgICAgICBpbnRCYXNrZXQsXG4gICAgICAgICAgdHJhdmVsbGVycyxcbiAgICAgICAgICBzYW1lVHJhdmVsbGVzclBlckJhc2tldFsnc2FtZVRyYXZlbGxlcnMnXVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRUcmF2ZWxsZXIuY29udGludWU6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50VHJhdmVsbGVyLmNhbmNlbDpcbiAgICAgICAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jYW5jZWw7XG4gICAgICAgIGNhc2UgRGlmZmVyZW50VHJhdmVsbGVyLm5ld0Jhc2tldDpcbiAgICAgICAgICBpbnRCYXNrZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2tldCgpO1xuICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gaW50QmFza2V0LmlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGl0ZW0uYmFza2V0ID0gaW50QmFza2V0LmlkO1xuICAgIGl0ZW0uY29udmVydEN1cnJlbmN5VG8gPSAnR0JQJztcbiAgICBpZiAodHJhdmVsbGVycz8ubGVuZ3RoID4gMCkge1xuICAgICAgaXRlbS51c2VycyA9IHRoaXMuaGVscGVycy5tYWtlVXNlcnModHJhdmVsbGVycy5maWx0ZXIodHJhdiA9PiAhdHJhdi5ndWVzdCkpO1xuICAgICAgaXRlbS5ndWVzdHMgPSB0aGlzLmhlbHBlcnMubWFrZVVzZXJzKHRyYXZlbGxlcnMuZmlsdGVyKHRyYXYgPT4gdHJhdi5ndWVzdCkpO1xuICAgICAgaXRlbS5sZWFkUGFzc2VuZ2VyID0gdHJhdmVsbGVyc1swXS5pZDtcbiAgICAgIGl0ZW0ubGVhZFBhc3NlbmdlclR5cGUgPSB0cmF2ZWxsZXJzWzBdLmd1ZXN0XG4gICAgICAgID8gTGVhZFBhc3NlbmdlclR5cGUuR3Vlc3RcbiAgICAgICAgOiBMZWFkUGFzc2VuZ2VyVHlwZS5Vc2VyO1xuICAgIH1cbiAgICBpdGVtLm91dGJvdW5kRGF0ZSA9IGl0ZW0ub3V0Ym91bmREYXRlXG4gICAgICA/IG5ldyBEYXRlKHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlVGltZShpdGVtLm91dGJvdW5kRGF0ZSkpXG4gICAgICA6IGl0ZW0ub3V0Ym91bmREYXRlO1xuICAgIGl0ZW0uaW5ib3VuZERhdGUgPSBpdGVtLmluYm91bmREYXRlXG4gICAgICA/IG5ldyBEYXRlKHRoaXMuaGVscGVycy5mb3JtYXRJc29EYXRlVGltZShpdGVtLmluYm91bmREYXRlKSlcbiAgICAgIDogaXRlbS5pbmJvdW5kRGF0ZTtcblxuICAgIGl0ZW0ucmVxdWlyZXNSZWFzb24gPSByZXF1aXJlc1JlYXNvbjtcbiAgICBpdGVtID0gdGhpcy5jaGVja0RldGFpbHMoaXRlbSk7XG5cbiAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShpdGVtLnNlcnZpY2UpLnR5cGU7XG5cbiAgICB0aGlzLnJlbW92ZUJvb2tlZEJhc2tldCgpO1xuXG4gICAgaWYgKGl0ZW0gJiYgaW50QmFza2V0KSB7XG4gICAgICB0aGlzLmFkZGluZ1RvQmFza2V0Lm5leHQodHJ1ZSk7XG4gICAgICBhd2FpdCB0aGlzLmFkZEl0ZW1Ub0Jhc2tldFVwZGF0ZXJcbiAgICAgICAgLnVwZGF0ZU9uZShpdGVtKVxuICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgICAgLnRoZW4oXG4gICAgICAgICAgKG5ld0Jhc2tldDogUGFydGlhbDxVc2VyQmFza2V0UmVzdWx0PikgPT4ge1xuICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCBtaSBoZXJlXG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dCh7XG4gICAgICAgICAgICAgIC4uLmludEJhc2tldC5zdWJqZWN0LnZhbHVlLFxuICAgICAgICAgICAgICAuLi5uZXdCYXNrZXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc2VhcmNoU2VydmljZS5zZWFyY2hfb2JqZWN0c1tzZXJ2aWNlXS5ib29raW5nX2Nob3NlbiA9IHRydWU7XG4gICAgICAgICAgICBzZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW3NlcnZpY2VdLmNob3NlbiA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgYmk6IEdldFVzZXJCYXNrZXRJdGVtUmVzdWx0W10gPSBuZXdCYXNrZXQuYmFza2V0SXRlbXM7XG4gICAgICAgICAgICB0aGlzLmhpZ2hsaWdodEJhc2tldEl0ZW1zRW1pdHRlci5uZXh0KGJpKTtcbiAgICAgICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KG5ld0Jhc2tldC5pZCk7XG4gICAgICAgICAgICB0aGlzLmFkZGluZ1RvQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYCsrKyBDdXJyZW50bHkgQWRkaW5nOiAke3RoaXMuaXRlbXNDdXJyZW50bHlCZWluZ0FkZGVkfSBpdGVtcyArKytgKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcrKysgQWRkIEl0ZW0gdG8gQmFza2V0IENhbGwgRmluaXNoZWQhICsrKycpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgaW50QmFza2V0Lm5leHQoaW50QmFza2V0LnN1YmplY3QudmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5hZGRpbmdUb0Jhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlO1xuICB9XG5cbiAgY2hlY2tCYXNrZXRGb3JJbnZva2VkKFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4sXG4gICAgYm9ibzogVHJhdmVsbGVyLFxuICAgIGlnbm9yZUludm9rZWRDaGVjazogYm9vbGVhblxuICApOiBQcm9taXNlPERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnM+IHtcbiAgICAvLyB0aGlzIGNoYW5nZSBpcyBwb3RlbnRpYWxseSB0aGUgcmVhc29uIHdoeSB3ZSBzb21ldGltZXMgZ2V0IGFuIGVycm9yIGFkZGluZyB0byBiYXNrZXQsIG5vIGludEJhc2tldFxuICAgIGlmIChpbnRCYXNrZXQgJiYgaW50QmFza2V0LnN1YmplY3QudmFsdWU/Lmludm9rZWRVc2VyPy5pZCAhPT0gYm9ibz8uaWQpIHtcbiAgICAgIGlmIChpZ25vcmVJbnZva2VkQ2hlY2spIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLm5ld0Jhc2tldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICBNb2RhbFR5cGVzLkRpZmZlcmVudEludm9rZGVkVXNlckNvbXBvbmVudCxcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICBiYXNrZXRCb2JvOiBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5pbnZva2VkVXNlcixcbiAgICAgICAgICBjdXJyZW50Qm9ibzogYm9ib1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY29udGludWUpO1xuICB9XG5cbiAgaXNTYW1lVHJhdmVsbGVzclBlckJhc2tldChcbiAgICBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+LFxuICAgIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxuICAgIHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0OiBudW1iZXJcbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRUcmF2ZWxsZXI+IHtcbiAgICBsZXQgc2FtZVRyYXZlbGxlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgdW5pcXVlVXNlcnM6IFVzZXJbXSA9IFtdO1xuICAgIGxldCB1bmlxdWVVc2Vyc0lkczogc3RyaW5nW10gPSBbXTtcbiAgICBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtcy5mb3JFYWNoKChiYXNrZXQ6IEJhc2tldEl0ZW0pID0+IHtcbiAgICAgIGJhc2tldC51c2Vycy5mb3JFYWNoKCh1c2VyOiBVc2VyKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gdW5pcXVlVXNlcnMuc29tZSgoZXhpc3RpbmdVc2VyOiBVc2VyKSA9PiBleGlzdGluZ1VzZXIuaWQgPT09IHVzZXIuaWQpO1xuXG4gICAgICAgIGlmICghaXNEdXBsaWNhdGUpIHtcbiAgICAgICAgICB1bmlxdWVVc2Vycy5wdXNoKHVzZXIpO1xuICAgICAgICAgIHVuaXF1ZVVzZXJzSWRzLnB1c2godXNlci5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdHJhdmVsbGVycy5mb3JFYWNoKCh0cmF2ZWxsZXI6IFRyYXZlbGxlcikgPT4ge1xuICAgICAgICBpZiAoIXVuaXF1ZVVzZXJzSWRzLnNvbWUoKGlkOiBzdHJpbmcpID0+IGlkID09PSB0cmF2ZWxsZXIuaWQpKSB7XG4gICAgICAgICAgdW5pcXVlVXNlcnNJZHMucHVzaCh0cmF2ZWxsZXIuaWQpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgc2FtZVRyYXZlbGxlcnMgPSB1bmlxdWVVc2Vyc0lkcy5sZW5ndGggPD0gc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCsrKyBFcnJvciBkZXRlcm1lbmluZyBzYW1lIHRyYXZlbGxlcnM6ICR7ZXJyb3J9ICsrK2ApO1xuICAgIH1cblxuICAgIGlmIChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtcy5sZW5ndGggPiAwICYmICFzYW1lVHJhdmVsbGVycykge1xuICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgIE1vZGFsVHlwZXMuRGlmZmVyZW50VHJhdmVsbGVyUGVyQmFza2V0Q29tcG9uZW50LFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJbkJhc2tldDogdW5pcXVlVXNlcnMsXG4gICAgICAgICAgdHJhdmVsbGVyczogdHJhdmVsbGVyc1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudFRyYXZlbGxlci5jb250aW51ZSk7XG4gIH1cblxuICBsb2FkQmFza2V0KGlkOiBzdHJpbmcsIGZvcmNlbG9hZDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgbGV0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChpZCk7XG4gICAgaWYgKCFpbnRCYXNrZXQgfHwgZm9yY2Vsb2FkKSB7XG4gICAgICBpbnRCYXNrZXQgPSBuZXcgSW50ZXJuYWxCYXNrZXQoXG4gICAgICAgIHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBiYXNrZXRJdGVtczogW11cbiAgICAgICAgfSBhcyBCYXNrZXREZXRhaWxzLFxuICAgICAgICB0aGlzLmhlbHBlcnMsXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlLFxuICAgICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50QmFza2V0cy5wdXNoKGludEJhc2tldCk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbmN5T2JqZWN0ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3Q8e1xuICAgICAgY3VycmVuY3k6IHN0cmluZztcbiAgICAgIGhvdGVsOiB7XG4gICAgICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgICBjYXJoaXJlOiB7XG4gICAgICAgIGVuYWJsZTogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgfT4oVXNlckZhdm9ydXJpdGUuUHJlZmVycmVkQ3VycmVuY3kpO1xuICAgIGlmIChjdXJyZW5jeU9iamVjdD8uaG90ZWw/LmVuYWJsZSB8fCBjdXJyZW5jeU9iamVjdD8uY2FyaGlyZT8uZW5hYmxlKSB7XG4gICAgICB0aGlzLnVzZXJDdXJyZW5jeSA9IGN1cnJlbmN5T2JqZWN0LmN1cnJlbmN5O1xuICAgIH1cblxuICAgIHRoaXMuYmFza2V0RmV0Y2hlclxuICAgICAgLmZldGNoT25lKHsgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LCBpZCwgd2l0aFN1cHBsZW1lbnRhbDogdHJ1ZSB9KVxuICAgICAgLnN1YnNjcmliZSgobmV3QmFza2V0OiBVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgIC8vIEVOVC02ODk5IHJlbW92ZWQgdGhpcyBhcyBpdCBzZWVtZWQgbGlrZSBkb3VibGluZyBpdFxuICAgICAgICAvLyBpbnRCYXNrZXQubmV4dChuZXdCYXNrZXQpO1xuICAgICAgICAvLyBkb24ndCBuZWVkIG1pIGhlcmVcbiAgICAgICAgdGhpcy51cGRhdGVCYXNrZXQoaWQsIG9mKDxCYXNrZXREZXRhaWxzPm5ld0Jhc2tldCkpO1xuICAgICAgfSk7XG4gIH1cblxuICBzdWJzcmliZVRvQmFza2V0KGlkOiBzdHJpbmcsIG9ic2VydmVyOiBPYnNlcnZlcjxCYXNrZXREZXRhaWxzPik6IHZvaWQge1xuICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChpZCk7XG4gICAgaWYgKGludEJhc2tldCkge1xuICAgICAgaW50QmFza2V0LnN1YmplY3Quc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVFeHBpcmVkSXRlbXMoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChpZCk7XG4gICAgaW50QmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXNcbiAgICAgIC5maWx0ZXIoKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIGJhc2tldEl0ZW0ubGF0ZXN0VmFsaWRhdGlvblByaWNlRGlmZmVyZW5jZSAhPT0gMCB8fCBiYXNrZXRJdGVtLmV4cGlyZWQ7XG4gICAgICB9KVxuICAgICAgLmZvckVhY2goKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVCYXNrZXRJdGVtKGlkLCBiYXNrZXRJdGVtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlQmFza2V0SXRlbShiYXNrZXRJZDogc3RyaW5nLCBpdGVtOiBHZXRVc2VyQmFza2V0SXRlbVJlc3VsdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucmVtb3ZpbmdGcm9tQmFza2V0Lm5leHQodHJ1ZSk7XG4gICAgY29uc3QgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPiA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRJZCk7XG4gICAgLy8gaWYgaXQncyBhIGhvdGVsIHJlbW92ZSBhbGwgbGlua2VkIGl0ZW1zXG4gICAgaWYgKGl0ZW0/LnNlcnZpY2U/LnR5cGUgPT09IFNlcnZpY2VUeXBlLkhvdGVsKSB7XG4gICAgICBjb25zdCBob3RlbEl0ZW1zID0gaW50QmFza2V0Py5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zLmZpbHRlcigoYmFza2V0SXRlbTogQmFza2V0SXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGl0ZW0uZGV0YWlsLmhvdGVsSWQgPT09IGJhc2tldEl0ZW0uZGV0YWlsLmhvdGVsSWQgJiZcbiAgICAgICAgICBpdGVtLmRldGFpbC5yb29tc1swXS5pZCA9PT0gYmFza2V0SXRlbS5kZXRhaWwucm9vbXNbMF0uaWQgJiZcbiAgICAgICAgICBpdGVtLmRldGFpbC5yb29tc1swXS5jaGVja0luID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5jaGVja0luICYmXG4gICAgICAgICAgaXRlbS5kZXRhaWwucm9vbXNbMF0uY2hlY2tPdXQgPT09IGJhc2tldEl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrT3V0XG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGlmIChob3RlbEl0ZW1zPy5sZW5ndGggPiAxKSB7XG4gICAgICAgIC8vIEVOVC0yNDQ3IG5ldyBtb2RhbCBtYWRlIGluIExVLCBuZWVkcyB0byBiZSBtYWRlIGluIGFsbCBvYnRzIGFuZCBhcHAgb3Igd2lsbCBnZXQgZXJyb3JcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLldhcm5pbmdSZW1vdmVNb2RhbENvbXBvbmVudCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBob3RlbEl0ZW1zKSB7XG4gICAgICAgICAgY29uc3QgbmV3QmFza2V0ID0gYXdhaXQgdGhpcy5yZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXJcbiAgICAgICAgICAgIC51cGRhdGVPbmUoeyBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksIGJhc2tldEl0ZW06IGl0ZW0uaWQgfSkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICAgIGlmIChuZXdCYXNrZXQpIHtcbiAgICAgICAgICAgICAgICBpbnRCYXNrZXQ/Lm5leHQoe1xuICAgICAgICAgICAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgICAgICAgICAgICAuLi5uZXdCYXNrZXRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92aW5nRnJvbUJhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dChiYXNrZXRJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3QmFza2V0ID0gYXdhaXQgdGhpcy5yZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXJcbiAgICAgICAgICAudXBkYXRlT25lKHsgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LCBiYXNrZXRJdGVtOiBpdGVtLmlkIH0pLnRvUHJvbWlzZSgpO1xuICAgICAgICAgICAgaWYgKG5ld0Jhc2tldCkge1xuICAgICAgICAgICAgICBpbnRCYXNrZXQ/Lm5leHQoe1xuICAgICAgICAgICAgICAgIC4uLmludEJhc2tldC5zdWJqZWN0LnZhbHVlLFxuICAgICAgICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmluZ0Zyb21CYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3QmFza2V0ID0gYXdhaXQgdGhpcy5yZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXJcbiAgICAgICAgLnVwZGF0ZU9uZSh7IGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSwgYmFza2V0SXRlbTogaXRlbS5pZCB9KS50b1Byb21pc2UoKTtcblxuICAgICAgICAgIGlmIChuZXdCYXNrZXQpIHtcbiAgICAgICAgICAgIGludEJhc2tldD8ubmV4dCh7XG4gICAgICAgICAgICAgIC4uLmludEJhc2tldC5zdWJqZWN0LnZhbHVlLFxuICAgICAgICAgICAgICAuLi5uZXdCYXNrZXRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmluZ0Zyb21CYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dChiYXNrZXRJZCk7XG4gICAgICAgICAgfVxuXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlZmF1bHRCYXNrZXQoXG4gICAgZ2V0Qm9va2VkQmFza2V0OiBib29sZWFuID0gZmFsc2UsXG4gICAgaW5pdGlhbDogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8SW50ZXJuYWxCYXNrZXQ8R1VfUT4+IHtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmN1cnJlbnRCYXNrZXRJRCk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZE9yQ3JlYXRlQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElELCBnZXRCb29rZWRCYXNrZXQpLnRoZW4oZGF0YSA9PiB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZEJhc2tldChpZDogc3RyaW5nKTogSW50ZXJuYWxCYXNrZXQ8R1VfUT4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbmQoKGJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4pID0+IHtcbiAgICAgIHJldHVybiBiYXNrZXQuaWQgPT09IGlkIHx8IGJhc2tldC50ZW1waWQgPT09IGlkO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5kT3JDcmVhdGVCYXNrZXQoXG4gICAgaWQ/OiBzdHJpbmcsXG4gICAgZ2V0Qm9va2VkQmFza2V0OiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxJbnRlcm5hbEJhc2tldDxHVV9RPj4ge1xuICAgIGxldCBiYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+ID0gbnVsbDtcblxuICAgIGlmICghaWQpIHtcbiAgICAgIGxldCBhbGxPcGVuQmFza2V0cyA9IGF3YWl0IHRoaXMuZ2V0QWxsT3BlbkJhc2tldHMoXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0ZnVsbFVzZXJEZXRhaWxzKHRydWUpLnVzZXJEYXRhLnZhbHVlLnVzZXJfaWQudG9TdHJpbmcoKVxuICAgICAgKTtcblxuICAgICAgaWYgKCF0aGlzLnVzZXJTZXJ2aWNlLmJvYm8pIHtcbiAgICAgICAgLy8gRU5ULTMyNzYgcmVtb3ZlIGJhc2tlc3Qgd2l0aCBpbnZva2VkIHVzZXIgaWYgd2UgYXJlIG5vdCBjdXJyZW50bHkgaW52b2tpbmcgYSB1c2VyIC8vID8gLSBzaG91bGQgd2UgZG8gdGhlIG9wcG9zaXRlIGFzIHdlbGw/XG4gICAgICAgIGFsbE9wZW5CYXNrZXRzID0gYWxsT3BlbkJhc2tldHMuZmlsdGVyKGJhc2tldCA9PiAhYmFza2V0Lmludm9rZWRVc2VyKTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbnNvbGUubG9nKCdvcGVuIGJhc2tldHM6ICcsIGFsbE9wZW5CYXNrZXRzKTtcbiAgICAgIC8vIGZpbmQgdGhlIGxhc3QgdXBkYXRlZCBiYXNrZXRcbiAgICAgIGlmICghYWxsT3BlbkJhc2tldHM/Lmxlbmd0aCkge1xuICAgICAgICAvLyBFTlQtMjYxNiByZW1vdmVkIGFkZGluZyB0byBjdXJyZW50IGJhc2tldCBhcyB0aGlzIHdhcyBhIGR1cGVcbiAgICAgICAgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJhc2tldHMgYXJlIGFscmVhZHkgc29ydGVkIGJ5IGxhc3QgdXBkYXRlZCAtIHJldHVybiB0aGUgbGFzdCB1cGRhdGVkIGJhc2tldFxuICAgICAgICBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYWxsT3BlbkJhc2tldHNbMF0uaWQpO1xuXG4gICAgICAgIGlmIChiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09ICdCT09LRUQnICYmICFnZXRCb29rZWRCYXNrZXQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJysrKyBSZXRyaWV2ZWQgYmFza2V0IGlzIGluIGJvb2tlZCBzdGF0dXMgLSBjcmVhdGluZyBhIG5ldyBvbmUgKysrJyk7XG4gICAgICAgICAgYmFza2V0ID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXQoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2goYmFza2V0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2hvdyBiYXNrZXRzIHdpdGggT3BlbiBCYXNrZXRTdGF0dXMgb25seSBFTlQtNTI1OVxuICAgICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IHRoaXMuY3VycmVudEJhc2tldHMuZmlsdGVyKFxuICAgICAgICBpbnRCYSA9PiBpbnRCYS5zdWJqZWN0Py52YWx1ZT8uc3RhdHVzID09PSBCYXNrZXRTdGF0dXMuT3BlblxuICAgICAgKTtcbiAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuICAgICAgYmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGlkKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCcrKysgRm91bmQgQmFza2V0OiAnLCBiYXNrZXQsICcgKysrJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2tldDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVCYXNrZXQoKTogUHJvbWlzZTxJbnRlcm5hbEJhc2tldDxHVV9RPj4ge1xuICAgIGNvbnN0IGJhc2tldDogVXNlckJhc2tldFJlc3VsdCA9IHtcbiAgICAgIGlkOiBURU1QSUQgKyBtb21lbnQoKS51bml4KCkudG9TdHJpbmcoKSxcbiAgICAgIG93bmVyOiBudWxsLFxuICAgICAgcmVmZXJlbmNlOiBudWxsLFxuICAgICAgdGl0bGU6IG51bGwsXG4gICAgICBub3RlczogbnVsbCxcbiAgICAgIGNyZWF0ZWRBdDogbnVsbCxcbiAgICAgIHVwZGF0ZWRBdDogbnVsbCxcbiAgICAgIGJhc2tldEl0ZW1zOiBbXSxcbiAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgIHZhbGlkYXRlZDogZmFsc2VcbiAgICB9O1xuXG4gICAgY29uc3QgaW50QmFza2V0ID0gbmV3IEludGVybmFsQmFza2V0PEdVX1E+KFxuICAgICAgYmFza2V0LFxuICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICB0aGlzLnJlcXVpcmVzU2VydmljZSxcbiAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2VcbiAgICApO1xuICAgIC8vIHsgc3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXQ+KGJhc2tldCksIHRlbXBpZDogYmFza2V0LmlkLCBpZDogYmFza2V0LmlkLCB0aXRsZTogYmFza2V0LmlkIH07XG5cbiAgICAvLyBlbnQtMjYxNiBvbmx5IHBsYWNlIHdlIG5lZWQgdG8gYWRkIGEgYmFza2V0IHRvIGN1cnJlbnQgYmFza2V0c1xuICAgIGNvbnN0IHRvUmV0dXJuID0gYXdhaXQgdGhpcy5jcmVhdGVCYXNrZXRPbkRCKGludEJhc2tldCk7XG4gICAgdGhpcy5jdXJyZW50QmFza2V0cy5wdXNoKHRvUmV0dXJuKTtcbiAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dCh0b1JldHVybi5pZCk7XG4gICAgcmV0dXJuIHRvUmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCYXNrZXRPbkRCKGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4pOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgY29uc3QgbXV0YXRpb246IENyZWF0ZUJhc2tldE11dGF0aW9uVmFyaWFibGVzID0gdGhpcy51c2VyU2VydmljZS5ib2JvPy5pZFxuICAgICAgPyB7IGludm9rZWRVc2VyOiB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkIH1cbiAgICAgIDoge307XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5iYXNrZXRDcmVhdG9yXG4gICAgICAgIC51cGRhdGVPbmUobXV0YXRpb24pXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJhc2tldDogVXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaW50QmFza2V0LmlkID0gYmFza2V0LmlkO1xuICAgICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0KTtcbiAgICAgICAgICAgIHJlc29sdmUoaW50QmFza2V0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge31cbiAgICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZU1lbnUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVudVN0YXRlID09PSBNZW51U2xpZGVFbnVtLklOIHx8IHRoaXMubWVudVN0YXRlID09PSBNZW51U2xpZGVFbnVtLkZMQVQpIHtcbiAgICAgIHRoaXMubWVudVN0YXRlID0gTWVudVNsaWRlRW51bS5PVVQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVudVN0YXRlID0gTWVudVNsaWRlRW51bS5JTjtcbiAgICB9XG4gIH1cblxuICBjbG9zZU1lbnUoKTogdm9pZCB7XG4gICAgdGhpcy5tZW51U3RhdGUgPSBNZW51U2xpZGVFbnVtLklOO1xuICB9XG5cbiAgZ2V0TGF0ZXN0QmFza2V0SXRlbUZvclR5cGVzKGJhc2tldEl0ZW1zOiBCYXNrZXRJdGVtW10pOiBSZWNvcmQ8U2VydmljZVR5cGUsIEJhc2tldEl0ZW0+IHtcbiAgICByZXR1cm4gKGJhc2tldEl0ZW1zIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAobGF0ZXN0SXRlbXM6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4sIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pID0+IHtcbiAgICAgICAgbGF0ZXN0SXRlbXNbYmFza2V0SXRlbS5zZXJ2aWNlLnR5cGVdID0gYmFza2V0SXRlbTtcbiAgICAgICAgcmV0dXJuIGxhdGVzdEl0ZW1zO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0RldGFpbHMoaXRlbTogQWRkSXRlbVRvQmFza2V0LlZhcmlhYmxlcyk6IEFkZEl0ZW1Ub0Jhc2tldC5WYXJpYWJsZXMge1xuICAgIGNvbnN0IHNlcnZpY2VUb0NoZWNrOiBTZXJ2aWNlID0gdGhpcy51c2VyU2VydmljZS5maW5kU2VydmljZShpdGVtLnNlcnZpY2UpO1xuICAgIGlmICghc2VydmljZVRvQ2hlY2spIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuYWJsZSB0byBmaW5kIHNlcnZpY2UgZm9yIGJhc2tldCBpdGVtIDogJyArIGl0ZW0uc2VydmljZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayB0aGUgaXRlbS5kZXRhaWwgb2JqZWN0IGFnYWluc3QgdGhlIHJlbGV2YW50IHNlcnZpY2UgZGV0YWlsU2NoZW1hIHVzaW5nIEFqdlxuICAgIGNvbnN0IGFqdiA9IG5ldyBBanYoKTtcblxuICAgIC8vIEN1c3RvbSBKYXZhc2NyaXB0IElTTyBEYXRlIFRpbWUgZm9ybWF0XG4gICAgYWp2LmFkZEZvcm1hdCgnanMtZGF0ZS10aW1lJywgKGRhdGVUaW1lU3RyaW5nOiBhbnkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZGF0ZVRpbWVTdHJpbmcgPT09ICdvYmplY3QnICYmIGRhdGVUaW1lU3RyaW5nLmhhc093blByb3BlcnR5KCd0b0lTT1N0cmluZycpKSB7XG4gICAgICAgIGRhdGVUaW1lU3RyaW5nID0gZGF0ZVRpbWVTdHJpbmcudG9JU09TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc05hTihEYXRlLnBhcnNlKGRhdGVUaW1lU3RyaW5nKSk7IC8vIGFueSB0ZXN0IHRoYXQgcmV0dXJucyB0cnVlL2ZhbHNlXG4gICAgfSk7XG5cbiAgICBhanYuYWRkRm9ybWF0KCdyYWlsU2VhdGluZycsICgpID0+IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgYWp2LmFkZEZvcm1hdCgncGFzc3BvcnQnLCAoKSA9PiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGFqdi5hZGRGb3JtYXQoJ3NwZWNpYWxSZXF1ZXN0JywgKCkgPT4ge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB2YWxpZGF0ZURldGFpbFNjaGVtYSA9IGFqdi5jb21waWxlKHNlcnZpY2VUb0NoZWNrLmRldGFpbFNjaGVtYSk7XG4gICAgY29uc3QgdmFsaWRhdGVTZWFyY2hTY2hlbWEgPSBhanYuY29tcGlsZShzZXJ2aWNlVG9DaGVjay5zZWFyY2hRdWVyeVNjaGVtYSk7XG5cbiAgICAvLyBpZiB0aGVyZSBhcmUgYW55IG1vbWVudCBkYXRlIG9iamVjdHMgaW4gdGhlIHNlYXJjaFF1ZXJ5IG9iamVjdCBjb252ZXJ0IHRoZXNlIHRvIGRhdGUtdGltZSBzdHJpbmdzXG4gICAgaXRlbS5zZWFyY2hRdWVyeSA9IHRoaXMuaGVscGVycy5zYW5pdGl6ZU1vbWVudERhdGVzKGl0ZW0uc2VhcmNoUXVlcnkpO1xuICAgIGl0ZW0uZGV0YWlsID0gdGhpcy5oZWxwZXJzLnJlbW92ZU51bGxzKGl0ZW0uZGV0YWlsKTtcblxuICAgIGlmICghdmFsaWRhdGVTZWFyY2hTY2hlbWEoaXRlbS5zZWFyY2hRdWVyeSkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gYEl0ZW0gc2VhcmNoUXVlcnkgaXMgbm90IHZhbGlkIGZvciAke3NlcnZpY2VUb0NoZWNrLm5hbWV9IHNlYXJjaCBzY2hlbWEuYDtcbiAgICAgIGNvbnNvbGUud2Fybignc2VhcmNoU2NoZW1hJywgc2VydmljZVRvQ2hlY2suc2VhcmNoUXVlcnlTY2hlbWEpO1xuICAgICAgY29uc29sZS53YXJuKCdpdGVtLnNlYXJjaFF1ZXJ5JywgaXRlbS5zZWFyY2hRdWVyeSk7XG4gICAgICBjb25zb2xlLndhcm4oJ1NlYXJjaCBRdWVyeSBWYWxpZGF0aW9uIGVycm9ycycsIHZhbGlkYXRlU2VhcmNoU2NoZW1hLmVycm9ycyk7XG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxFcnJvckNvbXBvbmVudCwge30sIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoIXZhbGlkYXRlRGV0YWlsU2NoZW1hKGl0ZW0uZGV0YWlsKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBgSXRlbSBkZXRhaWwgaXMgbm90IHZhbGlkIGZvciAke3NlcnZpY2VUb0NoZWNrLm5hbWV9IGRldGFpbCBzY2hlbWEuYDtcbiAgICAgIGNvbnNvbGUud2FybignZGV0YWlsU2NoZW1hJywgc2VydmljZVRvQ2hlY2suZGV0YWlsU2NoZW1hKTtcbiAgICAgIGNvbnNvbGUud2FybignaXRlbS5kZXRhaWwnLCBpdGVtLmRldGFpbCk7XG4gICAgICBjb25zb2xlLndhcm4oJ0RldGFpbCBlcnJvcnMnLCB2YWxpZGF0ZURldGFpbFNjaGVtYS5lcnJvcnMpO1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsIHt9LCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpdGVtLmxvd2VzdFByaWNlKSBpdGVtLmxvd2VzdFByaWNlID0gK2l0ZW0ubG93ZXN0UHJpY2UudG9GaXhlZCgyKTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGdldE51bWJlckl0ZW1zRm9yQmFza2V0KGJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4gPSBudWxsKTogbnVtYmVyIHtcbiAgICBiYXNrZXQgPSBiYXNrZXQgfHwgdGhpcy5maW5kQmFza2V0KHRoaXMuY3VycmVudEJhc2tldElEKTtcbiAgICByZXR1cm4gYmFza2V0Py5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zLmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgcmVtb3ZlQmFza2V0KGJhc2tldGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICBpZiAoYmFza2V0aWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUJhc2tldFVwZGF0ZXIudXBkYXRlT25lKHsgaWQ6IGJhc2tldGlkIH0pLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgoZGF0YTogYW55KTogYW55ID0+IHtcbiAgICAgICAgICB0aGlzLmZpbmRCYXNrZXQoYmFza2V0aWQpPy5kZXN0cnVjdG9yKCk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJSZW1vdmVCYXNrZXRCeUlkKGJhc2tldGlkKTtcbiAgICAgICAgICBpZiAoYmFza2V0aWQgPT09IHRoaXMuc2VsZWN0ZWRCYXNrZXRJZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJhc2tldElkID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IHRoaXMuY3VycmVudEJhc2tldHMuZmlsdGVyKGJhc2tldCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYmFza2V0LnN1YmplY3QudmFsdWUuc3RhdHVzID09PSBCYXNrZXRTdGF0dXMuT3BlbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcblxuICAgICAgICAgIGlmIChiYXNrZXRpZCA9PT0gdGhpcy5jdXJyZW50QmFza2V0SUQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gdGhpcy5jdXJyZW50QmFza2V0c1swXT8uaWQgfHwgbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kZWxldGluZ0Jhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICByZXR1cm4gb2YoZGF0YSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRpbnVlU2VhcmNoQW5kQm9vayhcbiAgICBiYXNrZXRJdGVtczogYW55W10sXG4gICAgaXRpbmlhcnlVcmw6IHN0cmluZ1tdLFxuICAgIHNlYXJjaFNlcnZpY2U6IEVudGVycHJpc2VTZWFyY2hTZXJ2aWNlSW50ZXJmYWNlXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsYXRlc3RCYXNrZXRJdGVtcyA9IHRoaXMuZ2V0TGF0ZXN0QmFza2V0SXRlbUZvclR5cGVzKGJhc2tldEl0ZW1zKTtcbiAgICBjb25zdCBuZXh0U2VhcmNoOiBTZWFyY2hPYmplY3QgPVxuICAgICAgc2VhcmNoU2VydmljZS5nZXRIaWdoZXN0U2VhcmNoUHJpb3JpdHlPYmplY3QobGF0ZXN0QmFza2V0SXRlbXMpO1xuICAgIGlmIChuZXh0U2VhcmNoKSB7XG4gICAgICAoc2VhcmNoU2VydmljZS5zZWFyY2hlcyBhcyBhbnkpW25leHRTZWFyY2gudHlwZV0udXBkYXRlRnJvbVByZXZpb3VzU2VhcmNoZXMoXG4gICAgICAgIGxhdGVzdEJhc2tldEl0ZW1zXG4gICAgICApO1xuICAgICAgcmV0dXJuIFtuZXh0U2VhcmNoLnNlYXJjaFVybF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGluaWFyeVVybDtcbiAgICB9XG4gIH1cblxuICBhZGRUcmF2ZWxsZXJzKFxuICAgIGJhc2tldGlkOiBzdHJpbmcsXG4gICAgYmFza2V0SXRlbTogQmFza2V0SXRlbSxcbiAgICB0cmF2ZWxsZXJzOiBUcmF2ZWxsZXJbXSxcbiAgICBpbmRleDogbnVtYmVyID0gMFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0aWQpO1xuICAgIGlmIChpbmRleCA8IHRyYXZlbGxlcnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0cmF2ZWxsZXIgPSB0cmF2ZWxsZXJzW2luZGV4XTtcbiAgICAgIGNvbnN0IHBhc3NlbmdlclR5cGU6IFBhc3NlbmdlclR5cGUgPSB0cmF2ZWxsZXIuaXNDaGlsZFxuICAgICAgICA/IFBhc3NlbmdlclR5cGUuQ2hpbGRcbiAgICAgICAgOiB0cmF2ZWxsZXIuaXNJbmZhbnRcbiAgICAgICAgPyBQYXNzZW5nZXJUeXBlLkluZmFudFxuICAgICAgICA6IFBhc3NlbmdlclR5cGUuQWR1bHQ7XG5cbiAgICAgIGlmICh0cmF2ZWxsZXIuZ3Vlc3QpIHtcbiAgICAgICAgdGhpcy5hZGRHdWVzdFRvQmFza2V0SXRlbVxuICAgICAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCxcbiAgICAgICAgICAgIGd1ZXN0czogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IHRyYXZlbGxlci5pZCxcbiAgICAgICAgICAgICAgICBwYXNzZW5nZXJUeXBlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRUcmF2ZWxsZXJzKGJhc2tldC5pZCwgYmFza2V0SXRlbSwgdHJhdmVsbGVycywgaW5kZXggKyAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWRkVXNlclRvQmFza2V0SXRlbVxuICAgICAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCxcbiAgICAgICAgICAgIHVzZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogdHJhdmVsbGVyLmlkLFxuICAgICAgICAgICAgICAgIHBhc3NlbmdlclR5cGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHdpdGhTdXBwbGVtZW50YWw6IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkVHJhdmVsbGVycyhiYXNrZXQuaWQsIGJhc2tldEl0ZW0sIHRyYXZlbGxlcnMsIGluZGV4ICsgMSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFza2V0RmV0Y2hlclxuICAgICAgICAuZmV0Y2hPbmUoeyBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksIGlkOiBiYXNrZXQuaWQgfSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0MTogR2V0VXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgYmFza2V0LnN1YmplY3QubmV4dCh7IC4uLmJhc2tldC5zdWJqZWN0LnZhbHVlLCAuLi5iYXNrZXQxIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXyA9PiB7fSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQubmV4dChiYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNldExlYWRQYXNzZW5nZXIoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLFxuICAgIHRyYXZlbGxlcnM6IFRyYXZlbGxlcixcbiAgICBpbmRleDogbnVtYmVyID0gMCxcbiAgICBsZWFkUGFzc2VuZ2VyVHlwZTogTGVhZFBhc3NlbmdlclR5cGUgPSBMZWFkUGFzc2VuZ2VyVHlwZS5Vc2VyXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgaWYgKGluZGV4IDwgMSkge1xuICAgICAgdGhpcy5TZXRCYXNrZXRJdGVtTGVhZFBhc3Nlbmdlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGlkOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICB1c2VyT3JHdWVzdDogdHJhdmVsbGVycy5pZCxcbiAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogZmFsc2UsXG4gICAgICAgIGxlYWRQYXNzZW5nZXJUeXBlOiBsZWFkUGFzc2VuZ2VyVHlwZVxuICAgICAgfSkuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldExlYWRQYXNzZW5nZXIoYmFza2V0LmlkLCBiYXNrZXRJdGVtLCB0cmF2ZWxsZXJzLCBpbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJhc2tldEZldGNoZXJcbiAgICAgICAgLmZldGNoT25lKHsgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LCBpZDogYmFza2V0LmlkIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJhc2tldDE6IEdldFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGJhc2tldC5zdWJqZWN0Lm5leHQoeyAuLi5iYXNrZXQuc3ViamVjdC52YWx1ZSwgLi4uYmFza2V0MSB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIF8gPT4ge30sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgYmFza2V0Lm5leHQoYmFza2V0LnN1YmplY3QudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVCYXNrZXQoYmFza2V0aWQ6IHN0cmluZywgb2JzOiBPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG9icy5waXBlKHRha2UoMSkpLnN1YnNjcmliZShcbiAgICAgICAgKGJhc2tldDogQmFza2V0RGV0YWlscykgPT4ge1xuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgLy8gdGhpcyBjYW4gYmUgdGhlIG9ubHkgcGxhY2Ugd2UgbmVlZCB0byBkbyBtaSwgZG9udCBuZWVkIG9uIGFkZC9yZW1vdmUvZ2V0YWxsXG4gICAgICAgICAgY29uc3QgaXNHZXRNaSA9IGJhc2tldC5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5PcGVuICYmICEhYmFza2V0LmJhc2tldEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQsIGlzR2V0TWkpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0aWQpO1xuICAgICAgICAgIGludEJhc2tldC5uZXh0KGludEJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7fVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJldmFsaWRhdGUoYmFza2V0aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0aWQsXG4gICAgICB0aGlzLnJldmFsaWRhdGVCYXNrZXRVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldGlkLFxuICAgICAgICB3aXRoU3VwcGxlbWVudGFsOiB0cnVlXG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQoYmFza2V0aWQpO1xuICB9XG5cbiAgc2V0QmFza2V0SXRlbU1pR3JvdXAoYmFza2V0aWQ6IHN0cmluZywgYmFza2V0SXRlbWlkOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUJhc2tldChcbiAgICAgIGJhc2tldGlkLFxuICAgICAgdGhpcy5zZXRCYXNrZXRJdGVtTWlHcm91cFVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtaWQsXG4gICAgICAgIGdyb3VwXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhY2NlcHROZXdQcmljZShiYXNrZXRpZDogc3RyaW5nLCBpdGVtOiBCYXNrZXRJdGVtKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRpZCxcbiAgICAgIHRoaXMuYWNjZXB0TmV3UHJpY2VVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGl0ZW0uaWRcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHZhbGlkYXRlRnJlZVZhbGVNaShtaUl0ZW06IE1hbmFnZW1lbnRJbmZvLCBmcmVlVmFsdWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlTWlGcmVlVmFsdWUudGVzdCh7IG1pOiBtaUl0ZW0uaWQsIGZyZWVWYWx1ZSB9KS5zdWJzY3JpYmUocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldE1pRnJlZVZhbHVlKFxuICAgIGJhc2tldGlkOiBzdHJpbmcsXG4gICAgbWlJdGVtOiBNYW5hZ2VtZW50SW5mbyxcbiAgICBmcmVlVmFsdWU6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZyA9IG51bGwsXG4gICAgZ3Vlc3Q/OiBib29sZWFuXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgY29uc3QgYXJnczogU2V0QmFza2V0SXRlbU1pVmFsdWUuVmFyaWFibGVzID0ge1xuICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgbWk6IG1pSXRlbS5pZCxcbiAgICAgIG1pRnJlZVZhbHVlOiBmcmVlVmFsdWVcbiAgICB9O1xuICAgIGlmICghIXVzZXJJZCkge1xuICAgICAgaWYgKGd1ZXN0KSB7XG4gICAgICAgIGFyZ3MuZ3Vlc3QgPSB1c2VySWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzLnVzZXIgPSB1c2VySWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnNldEJhc2tldEl0ZW1NaVZhbHVlVXBkYXRlclxuICAgICAgICAudXBkYXRlT25lKGFyZ3MpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKGJhc2tldDogQmFza2V0RGV0YWlscykgPT4ge1xuICAgICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAvLyBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TWlTZWxlY3RlZFZhbHVlKFxuICAgIGJhc2tldGlkOiBzdHJpbmcsXG4gICAgbWlJdGVtOiBNYW5hZ2VtZW50SW5mbyxcbiAgICBzZWxlY3RlZFZhbHVlOiBzdHJpbmcsXG4gICAgdXNlcklkOiBzdHJpbmcgPSBudWxsLFxuICAgIGd1ZXN0PzogYm9vbGVhblxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhcmdzOiBTZXRCYXNrZXRJdGVtTWlWYWx1ZS5WYXJpYWJsZXMgPSB7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBtaTogbWlJdGVtLmlkLFxuICAgICAgbWlWYWx1ZTogc2VsZWN0ZWRWYWx1ZVxuICAgIH07XG4gICAgaWYgKCEhdXNlcklkKSB7XG4gICAgICBpZiAoZ3Vlc3QpIHtcbiAgICAgICAgYXJncy5ndWVzdCA9IHVzZXJJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyZ3MudXNlciA9IHVzZXJJZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlQmFza2V0KGJhc2tldGlkLCB0aGlzLnNldEJhc2tldEl0ZW1NaVZhbHVlVXBkYXRlci51cGRhdGVPbmUoYXJncykpO1xuICB9XG5cbiAgZ2V0TWlBdXRvU3VnZXN0aW9ucyhcbiAgICBtaUlkOiBzdHJpbmcsXG4gICAgdGVybTogc3RyaW5nLFxuICAgIGlzTG9hZGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxuICAgIHNlcnZpY2VJZD86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEdldE1pQXV0b1N1Z2VzdGlvbkFycmF5PiB7XG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xuXG4gICAgY29uc3QgZ2V0TWlBdXRvQnlWYWx1ZTogT2JzZXJ2YWJsZTxHZXRNaUF1dG9TdWdlc3Rpb25BcnJheT4gPVxuICAgICAgdGhpcy5nZXRNaUF1dG9TdWdlc3Rpb25GZXRjaGVyLmZldGNoTGlzdCh7XG4gICAgICAgIG1pOiBtaUlkLFxuICAgICAgICBwYXJ0aWFsVmFsdWU6IHRlcm0sXG4gICAgICAgIHNlcnZpY2VJZFxuICAgICAgfSk7XG4gICAgY29uc3QgZ2V0TWlBdXRvQnlMYWJlbDogT2JzZXJ2YWJsZTxHZXRNaUF1dG9TdWdlc3Rpb25BcnJheT4gPVxuICAgICAgdGhpcy5nZXRNaUF1dG9TdWdlc3Rpb25GZXRjaGVyLmZldGNoTGlzdCh7XG4gICAgICAgIG1pOiBtaUlkLFxuICAgICAgICBwYXJ0aWFsTGFiZWw6IHRlcm0sXG4gICAgICAgIHNlcnZpY2VJZFxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZm9ya0pvaW4oW2dldE1pQXV0b0J5VmFsdWUsIGdldE1pQXV0b0J5TGFiZWxdKS5waXBlKFxuICAgICAgbWFwKChbbWlCeVZhbHVlLCBtaUJ5TGFiZWxdKSA9PiB7XG4gICAgICAgIGxldCBtaUJ5VmFsdWVMYWJlbCA9IFsuLi5taUJ5VmFsdWUsIC4uLm1pQnlMYWJlbF07XG4gICAgICAgIG1pQnlWYWx1ZUxhYmVsID0gbWlCeVZhbHVlTGFiZWwuZmlsdGVyKFxuICAgICAgICAgIChtaUl0ZW0sIGluZGV4KSA9PiBtaUJ5VmFsdWVMYWJlbC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09IG1pSXRlbS5pZCkgPT09IGluZGV4XG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKG1pQnlWYWx1ZUxhYmVsKTtcblxuICAgICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gbWlCeVZhbHVlTGFiZWw7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRNaUF1dG9TdWdnZXN0aW9uc1VzZXJQcmVmZXJlbmNlcyhcbiAgICBtaUlkOiBzdHJpbmcsXG4gICAgdGVybTogc3RyaW5nLFxuICAgIHNlcnZpY2VJZDogc3RyaW5nLFxuICAgIGlzTG9hZGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxuICAgIGlnbm9yZVVzZXJSZXN0cmljdGlvbnM6IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxNYW5hZ2VtZW50SW5mb1ZhbHVlW10+IHtcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBnZXRNaUF1dG9CeVZhbHVlOiBPYnNlcnZhYmxlPEdldE1pQXV0b1N1Z2VzdGlvbkFycmF5PiA9XG4gICAgICB0aGlzLmdldFVzZXJNaUF1dG9TdWdnZXN0VXNlclByZWZlcmVuY2VzRmV0Y2hlci5mZXRjaExpc3Qoe1xuICAgICAgICBtaTogbWlJZCxcbiAgICAgICAgcGFydGlhbFZhbHVlOiB0ZXJtLFxuICAgICAgICBzZXJ2aWNlSWQsXG4gICAgICAgIGlnbm9yZVVzZXJSZXN0cmljdGlvbnNcbiAgICAgIH0pO1xuICAgIGNvbnN0IGdldE1pQXV0b0J5TGFiZWw6IE9ic2VydmFibGU8R2V0TWlBdXRvU3VnZXN0aW9uQXJyYXk+ID1cbiAgICAgIHRoaXMuZ2V0VXNlck1pQXV0b1N1Z2dlc3RVc2VyUHJlZmVyZW5jZXNGZXRjaGVyLmZldGNoTGlzdCh7XG4gICAgICAgIG1pOiBtaUlkLFxuICAgICAgICBwYXJ0aWFsTGFiZWw6IHRlcm0sXG4gICAgICAgIHNlcnZpY2VJZCxcbiAgICAgICAgaWdub3JlVXNlclJlc3RyaWN0aW9uc1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZm9ya0pvaW4oW2dldE1pQXV0b0J5VmFsdWUsIGdldE1pQXV0b0J5TGFiZWxdKS5waXBlKFxuICAgICAgbWFwKChbbWlCeVZhbHVlLCBtaUJ5TGFiZWxdKSA9PiB7XG4gICAgICAgIGxldCBtaUJ5VmFsdWVMYWJlbCA9IFsuLi5taUJ5VmFsdWUsIC4uLm1pQnlMYWJlbF07XG4gICAgICAgIG1pQnlWYWx1ZUxhYmVsID0gbWlCeVZhbHVlTGFiZWwuZmlsdGVyKFxuICAgICAgICAgIChtaUl0ZW0sIGluZGV4KSA9PiBtaUJ5VmFsdWVMYWJlbC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09IG1pSXRlbS5pZCkgPT09IGluZGV4XG4gICAgICAgICk7XG5cbiAgICAgICAgaXNMb2FkaW5nPy5uZXh0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIG1pQnlWYWx1ZUxhYmVsO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0VXNlckRlZmF1bHRNSVZhbHVlKFxuICAgIG1pOiBzdHJpbmcsXG4gICAgdXNlcjogc3RyaW5nLFxuICAgIGlzTG9hZGluZzogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+LFxuICAgIHNlcnZpY2U/OiBzdHJpbmcsXG4gICAgd2l0aG91dEhhc2g/OiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8TWFuYWdlbWVudEluZm9WYWx1ZVJlc3VsdD4ge1xuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiB0aGlzLmdldFVzZXJEZWZhdWx0TUlWYWx1ZUZldGNoZXIuZmV0Y2hPbmUod2l0aG91dEhhc2ggPyB7IG1pOiBtaSwgdXNlcjogdXNlciwgc2VydmljZSwgd2l0aG91dEhhc2ggfSA6eyBtaTogbWksIHVzZXI6IHVzZXIgfSkucGlwZSh0YWtlKDEpKTtcbiAgfVxuXG4gIHNhdmVNaURhdGEoYmFza2V0SWQ6IHN0cmluZywgYm1pQXJyYXk6IEJhc2tldEl0ZW1NYW5hZ2VtZW50SW5mb1tdKSB7XG4gICAgY29uc3QgYmFza2V0SXRlbU11bHRpcGxlTUlWYWx1ZTogU2V0QmFza2V0SXRlbU1pVmFsdWVJbnB1dFtdID0gW107XG4gICAgYm1pQXJyYXkuZm9yRWFjaCgoYm1pOiBCYXNrZXRJdGVtTWFuYWdlbWVudEluZm8pID0+IHtcbiAgICAgIGJtaS5taVBlckl0ZW0uZm9yRWFjaCgoaXRlbTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkKSA9PiB7XG4gICAgICAgIGJhc2tldEl0ZW1NdWx0aXBsZU1JVmFsdWUucHVzaCh7XG4gICAgICAgICAgbWk6IGl0ZW0uaWQsXG4gICAgICAgICAgbWlWYWx1ZTogaXRlbS5zZWxlY3RlZFZhbHVlc1swXT8udmFsdWU/LmlkIHx8ICcnLFxuICAgICAgICAgIG1pRnJlZVZhbHVlOiBpdGVtLnNlbGVjdGVkVmFsdWVzWzBdPy5mcmVlVmFsdWU/LnRyaW0oKSB8fCAnJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBibWkudXNlcnMuZm9yRWFjaCgodXNlcjogc3RyaW5nKSA9PiB7XG4gICAgICAgIGJtaS5taVBlclVzZXJbdXNlcl0ubWFuYWdlbWVudEluZm8uZm9yRWFjaCgoaXRlbTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkKSA9PiB7XG4gICAgICAgICAgYmFza2V0SXRlbU11bHRpcGxlTUlWYWx1ZS5wdXNoKHtcbiAgICAgICAgICAgIG1pOiBpdGVtLmlkLFxuICAgICAgICAgICAgbWlWYWx1ZTogaXRlbS5zZWxlY3RlZFZhbHVlc1swXT8udmFsdWU/LmlkIHx8ICcnLFxuICAgICAgICAgICAgbWlGcmVlVmFsdWU6IGl0ZW0uc2VsZWN0ZWRWYWx1ZXNbMF0/LmZyZWVWYWx1ZT8udHJpbSgpIHx8ICcnLFxuICAgICAgICAgICAgdXNlcjogdXNlclxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgYm1pLmd1ZXN0cy5mb3JFYWNoKCh1c2VyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgYm1pLm1pUGVyR3Vlc3RbdXNlcl0ubWFuYWdlbWVudEluZm8uZm9yRWFjaCgoaXRlbTogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkKSA9PiB7XG4gICAgICAgICAgYmFza2V0SXRlbU11bHRpcGxlTUlWYWx1ZS5wdXNoKHtcbiAgICAgICAgICAgIG1pOiBpdGVtLmlkLFxuICAgICAgICAgICAgbWlWYWx1ZTogaXRlbS5zZWxlY3RlZFZhbHVlc1swXT8udmFsdWU/LmlkIHx8ICcnLFxuICAgICAgICAgICAgbWlGcmVlVmFsdWU6IGl0ZW0uc2VsZWN0ZWRWYWx1ZXNbMF0/LmZyZWVWYWx1ZT8udHJpbSgpIHx8ICcnLFxuICAgICAgICAgICAgZ3Vlc3Q6IHVzZXJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnNldEJhc2tldEl0ZW1NdWx0aXBsZU1JVmFsdWUoYmFza2V0SWQsIGJhc2tldEl0ZW1NdWx0aXBsZU1JVmFsdWUpO1xuICB9XG5cbiAgc2V0QmFza2V0SXRlbU11bHRpcGxlTUlWYWx1ZShcbiAgICBiYXNrZXRJZDogc3RyaW5nLFxuICAgIGJhc2tldEl0ZW1NdWx0aXBsZU1JVmFsdWU6IFNldEJhc2tldEl0ZW1NaVZhbHVlSW5wdXRbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldElkKTtcbiAgICAgIGNvbnN0IGFyZ3M6IFNldEJhc2tldEl0ZW1NdWx0aXBsZU1pVmFsdWVNdXRhdGlvblZhcmlhYmxlcyA9IHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlOiBiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlLFxuICAgICAgICBiYXNrZXRJZDogYmFza2V0SWRcbiAgICAgIH07XG4gICAgICB0aGlzLnNldEJhc2tldEl0ZW1NdWx0aXBsZU1pVmFsdWVVcGRhdGVyXG4gICAgICAgIC51cGRhdGVPbmUoYXJncylcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0OiBCYXNrZXREZXRhaWxzKSA9PiB7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBhd2FpdGluZ0FwcHJvdmFsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2VuZEJhc2tldEZvckFwcHJvdmFsKGJhc2tldGlkOiBzdHJpbmcsIGlzUmVhc3NpZ246IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZUJhc2tldChcbiAgICAgIGJhc2tldGlkLFxuICAgICAgdGhpcy5zZW5kQmFza2V0Rm9yQXBwcm92YWxVcGRhdGVyXG4gICAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgICBiYXNrZXQ6IGJhc2tldGlkLFxuICAgICAgICAgIGlzUmVhc3NpZ246IGlzUmVhc3NpZ25cbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICApO1xuICB9XG5cbiAgc2V0QmFza2V0SXRlbVBheW1lbnRPcHRpb24oXG4gICAgYmFza2V0OiBCYXNrZXREZXRhaWxzLFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgcGF5bWVudE1ldGhvZDogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZUJhc2tldChcbiAgICAgIGJhc2tldC5pZCxcbiAgICAgIHRoaXMuc2V0UGF5bWVudE1ldGhvZFVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICBwYXltZW50TWV0aG9kXG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgc2V0QmFza2V0SXRlbVBheW1lbnRPcHRpb25Ob1VwZGF0ZShcbiAgICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLFxuICAgIHBheW1lbnRNZXRob2Q6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zZXRQYXltZW50TWV0aG9kVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCxcbiAgICAgIHBheW1lbnRNZXRob2RcbiAgICB9KTtcbiAgfVxuICBib29rQmFza2V0KFxuICAgIGJhc2tldGlkOiBzdHJpbmcsXG4gICAgc3VwcGxlbWVudGFyeUluZm86IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb1tdLFxuICAgIGFkZGl0aW9uYWxFbWFpbDogc3RyaW5nW11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5nb2luZ0ZvckFwcHJvdmFsID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuYm9va0Jhc2tldFVwZGF0ZXJcbiAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGlkOiBiYXNrZXRpZCxcbiAgICAgICAgc3VwcGxlbWVudGFyeUluZm8sXG4gICAgICAgIGFkZGl0aW9uYWxFbWFpbFxuICAgICAgfSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKFxuICAgICAgICAoYmFza2V0OiBCYXNrZXREZXRhaWxzKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldGlkKTtcbiAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICB9LFxuICAgICAgICBhc3luYyAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIGNvbnN0IGJhc2tldFVwZGF0ZSA9IGF3YWl0IHRoaXMuZ2V0QmFza2V0KHtcbiAgICAgICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgICAgIGlkOiBiYXNrZXRpZCxcbiAgICAgICAgICAgIHdpdGhTdXBwbGVtZW50YWw6IHRydWVcbiAgICAgICAgICB9KS50b1Byb21pc2UoKTtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0aWQpO1xuICAgICAgICAgIGludEJhc2tldC5uZXh0KGJhc2tldFVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBtb3ZlQmFza2V0SXRlbShvcmlnaW5hbEJhc2tldElkOiBzdHJpbmcsIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sIGJhc2tldElkVG9Nb3ZlVG86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubW92ZUl0ZW1Ub0FEaWZmZXJlbnRCYXNrZXRcbiAgICAgIC51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIG5ld0Jhc2tldDogYmFza2V0SWRUb01vdmVUb1xuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmxvYWRCYXNrZXQob3JpZ2luYWxCYXNrZXRJZCk7XG4gICAgICAgIHRoaXMubG9hZEJhc2tldChiYXNrZXRJZFRvTW92ZVRvKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlQmFza2V0Tm90ZXMoYmFza2V0SWQ6IHN0cmluZywgbm90ZXM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0SWQsXG4gICAgICB0aGlzLnVwZGF0ZUJhc2tldE5vdGVzVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGlkOiBiYXNrZXRJZCxcbiAgICAgICAgbm90ZXNcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUJhc2tldFRpdGxlKGJhc2tldElkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUJhc2tldChcbiAgICAgIGJhc2tldElkLFxuICAgICAgdGhpcy51cGRhdGVCYXNrZXRUaXRsZVVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogYmFza2V0SWQsXG4gICAgICAgIG5ld1RpdGxlOiB0aXRsZVxuICAgICAgfSlcbiAgICApO1xuICB9XG4gIGdldEJhc2tldChxdWVyeToge1xuICAgIGNvbnZlcnRDdXJyZW5jeVRvOiBzdHJpbmc7XG4gICAgaWQ6IHN0cmluZztcbiAgICB3aXRoU3VwcGxlbWVudGFsOiBib29sZWFuO1xuICB9KTogT2JzZXJ2YWJsZTxHZXRVc2VyQmFza2V0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuYmFza2V0RmV0Y2hlci5mZXRjaE9uZShxdWVyeSk7XG4gIH1cblxuICBhZGRCYXNrZXRJdGVtTWFya3VwKFxuICAgIGJhc2tldEl0ZW1JZDogc3RyaW5nLFxuICAgIGFtb3VudDogbnVtYmVyLFxuICAgIGFnZW50SWQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRCYXNrZXRJdGVtTWFya3VwVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbUlkLFxuICAgICAgbWFya3VwOiAnJyxcbiAgICAgIGFtb3VudCxcbiAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICBhZ2VudDogYWdlbnRJZCxcbiAgICAgIHRpdGxlOiAnQWdlbnQgTWFya3VwJ1xuICAgIH0pO1xuICB9XG5cbiAgYXRMZWFzdE9uZVNlYXJjaENob3NlbigpOiBib29sZWFuIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGFueSBpdGVtIG9uIGFueSBiYXNrZXQgd2Ugc2hvdyBiYXNrZXRzIGluIHNlYXJjaCBzY3JlZW5cbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbHRlcihiYXNrZXQgPT4gYmFza2V0LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoKS5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmFza2V0U3RhdHMoaW5kZXg6IG51bWJlcik6IEJlaGF2aW9yU3ViamVjdDxCYXNrZXRQcmljZXM+IHtcbiAgICBjb25zdCBiYXNrZXRQcmljZXNPYmogPSB0aGlzLmJhc2tldHMudmFsdWVbaW5kZXhdPy5zdWJqZWN0Py52YWx1ZT8ucHJpY2VzIHx8IHt9O1xuICAgIGNvbnN0IGJhc2tldFByaWNlc0tleSA9IE9iamVjdC5rZXlzKGJhc2tldFByaWNlc09iailbMF07XG4gICAgaWYgKGJhc2tldFByaWNlc0tleSkge1xuICAgICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUuY3VycmVuY3kgPSBiYXNrZXRQcmljZXNLZXk7XG4gICAgICB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS50b3RhbCA9XG4gICAgICAgIHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0uc3ViamVjdC52YWx1ZS5wcmljZXNbYmFza2V0UHJpY2VzS2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUudG90YWwgPSAwO1xuICAgIH1cblxuICAgIHRoaXMuYmFza2V0UHJpY2VzLnZhbHVlLmxpc3QuZm9yRWFjaChrZXlzID0+IHtcbiAgICAgIGtleXMucHJpY2UgPSB0aGlzLmJhc2tldHMudmFsdWVbaW5kZXhdPy5zdWJqZWN0Py52YWx1ZT8uYmFza2V0SXRlbXNcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VydmljZS50eXBlID09PSBrZXlzLnR5cGUpXG4gICAgICAgIC5yZWR1Y2UoKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudC5wcmljZSwgMCk7XG4gICAgICBrZXlzLmNvMiA9IHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0/LnN1YmplY3Q/LnZhbHVlPy5iYXNrZXRJdGVtc1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZXJ2aWNlLnR5cGUgPT09IGtleXMudHlwZSlcbiAgICAgICAgLnJlZHVjZSgoc3VtLCBjdXJyZW50KSA9PiBzdW0gKyBjdXJyZW50LmNvMlBlckl0ZW0sIDApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUudG90YWxDbzIgPSB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS5saXN0LnJlZHVjZShcbiAgICAgIChzdW0sIGN1cnJlbnQpID0+IHN1bSArIGN1cnJlbnQuY28yLFxuICAgICAgMFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuYmFza2V0UHJpY2VzO1xuICB9XG5cbiAgY2FuQ2FuY2VsKGJhc2tldEl0ZW06IEJhc2tldEl0ZW0pOiBPYnNlcnZhYmxlPEJlZm9yZUNhbmNlbGxhdGlvbkluZm8+IHtcbiAgICAvLyBOb3QgY2FuY2VsbGFibGUgaWYgdGhlIG91dGJvdW5kIGRhdGUgcGFzc2VkXG4gICAgaWYgKG1vbWVudChiYXNrZXRJdGVtLm91dGJvdW5kRGF0ZSkuZGlmZihtb21lbnQobmV3IERhdGUoKSksICdtaW51dGVzJykgPD0gMCkge1xuICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgY2FuY2VsbGFibGU6IGZhbHNlLFxuICAgICAgICBjYW5jZWxsYXRpb25GZWU6IDAsXG4gICAgICAgIGluZm86ICdPdXRib3VuZCBkYXRldGltZSBwYXNzZWQuJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYmFza2V0SXRlbS5zdGF0dXMgPT09IEJhc2tldEl0ZW1TdGF0dXMuQm9va2VkIHx8XG4gICAgICBiYXNrZXRJdGVtLnN0YXR1cyA9PT0gQmFza2V0SXRlbVN0YXR1cy5QYXJ0aWFsbHlDYW5jZWxsZWRcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENhbmNlbGxhdGlvbkluZm9GZXRjaGVyLmZldGNoT25lKHtcbiAgICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHtcbiAgICAgIGNhbmNlbGxhYmxlOiBmYWxzZSxcbiAgICAgIGNhbmNlbGxhdGlvbkZlZTogMCxcbiAgICAgIGluZm86IFwiSXRlbSBpc24ndCBib29rZWRcIlxuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlQm9va2VkQmFza2V0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEJhc2tldHMgPSB0aGlzLmN1cnJlbnRCYXNrZXRzLnJlZHVjZSgoYWNjLCBiYXNrZXQpID0+IHtcbiAgICAgIGlmIChiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgIT09IEJhc2tldFN0YXR1cy5Cb29rZWQpIHtcbiAgICAgICAgYWNjLnB1c2goYmFza2V0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10pO1xuICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuICB9XG5cbiAgc2hvd0Vycm9yTW9kYWwoKSB7XG4gICAgY29uc3Qgb2ZmaWNlID0gdGhpcy51c2VyU2VydmljZS5mdWxsVXNlckRldGFpbHMuYWxsRGV0YWlscy52YWx1ZS5vZmZpY2U7XG4gICAgY29uc3QgZW1haWwgPSBvZmZpY2U/LnN1cHBvcnRFbWFpbCB8fCAnJztcbiAgICBjb25zdCBjb3VudHJ5Q29kZSA9IG9mZmljZT8uc3VwcG9ydFBob25lTnVtYmVyPy5jb3VudHJ5Q29kZVxuICAgICAgPyAnKycgKyBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8uY291bnRyeUNvZGVcbiAgICAgIDogJyc7XG4gICAgY29uc3QgbnVtYmVyID0gb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/Lm51bWJlciA/IG9mZmljZT8uc3VwcG9ydFBob25lTnVtYmVyPy5udW1iZXIgOiAnJztcblxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICBNb2RhbFR5cGVzLk1vZGFsRXJyb3JDb21wb25lbnQsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZXJyb3I6XG4gICAgICAgICAgJ1RoZXJlIGFyZSBtaXNzaW5nIHZhbHVlcyBpbiB0aGUgTWFuYWdlbWVudCBJbmZvcm1hdGlvbiBzZWN0aW9uIHdpdGhpbiB5b3VyIGNvbmZpZ3VyYXRpb24uJyxcbiAgICAgICAgbWlFcnJvcjogdHJ1ZSxcbiAgICAgICAgZW1haWwsXG4gICAgICAgIG51bWJlcjogYCR7Y291bnRyeUNvZGV9ICR7bnVtYmVyfWBcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZUJhc2tldFNjcmF0Y2hwYWROb3RlKGJhc2tldElkOiBzdHJpbmcsIG5vdGU6IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0Tm90ZT4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUJhc2tldE5vdGUudXBkYXRlT25lKHsgYmFza2V0SWQsIG5vdGUgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmFza2V0U2NyYXRjaHBhZE5vdGVzKGJhc2tldElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJhc2tldE5vdGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2tldE5vdGVzLmZldGNoTGlzdCh7IGJhc2tldElkIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJlbWFya3Moc2VydmljZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgcmV0dXJuIG9mKE1pQ29tbWFuZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmFza2V0SXRlbVJlbWFya3MoYmFza2V0SXRlbUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJhc2tldEl0ZW1DdXN0b21SZW1hcmtbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzLmZldGNoTGlzdCh7IGJhc2tldEl0ZW06IGJhc2tldEl0ZW1JZCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRCYXNrZXRJdGVtUmVtYXJrKFxuICAgIGJhc2tldEl0ZW1JZDogc3RyaW5nLFxuICAgIHJlbWFya1R5cGU6IHN0cmluZyxcbiAgICB0ZXh0OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQmFza2V0SXRlbUN1c3RvbVJlbWFyay51cGRhdGVPbmUoe1xuICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbUlkLFxuICAgICAgcmVtYXJrX3R5cGU6IHJlbWFya1R5cGUsXG4gICAgICB0ZXh0XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmFza2V0UXVvdGUoYmFza2V0SWQ6IHN0cmluZywgcmVzZW5kOiBib29sZWFuLCBub3RlPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXRRdW90ZT4ge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2tldFF1b3RlRmV0Y2hlci5mZXRjaExpc3QoeyBiYXNrZXQ6IGJhc2tldElkLCByZXNlbmQsIG5vdGUgfSk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlQmFza2V0T3duZXJzaGlwKFxuICAgIGJhc2tldElkOiBzdHJpbmcsXG4gICAgdXNlcklkOiBzdHJpbmcsXG4gICAgbm90ZT86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEJhc2tldFF1b3RlPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlci51cGRhdGVPbmUoeyBiYXNrZXQ6IGJhc2tldElkLCB1c2VyOiB1c2VySWQsIG5vdGUgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RHJhZnRCYXNrZXRzKCk6IE9ic2VydmFibGU8RHJhZnRCYXNrZXQ+IHtcbiAgICByZXR1cm4gdGhpcy5nZXREcmFmdEJhc2tldHNGZXRjaGVyLmZldGNoTGlzdCgpO1xuICB9XG5cbiAgcHVibGljIHJlc2VuZEFwcHJvdmFsKGlkOiBzdHJpbmcsIGFwcHJvdmVyQ2hhbmdlZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5yZXNlbmRBcHByb3ZlckVtYWlsLmZldGNoTGlzdCh7IGlkLCBhcHByb3ZlckNoYW5nZWQgfSkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgTW9kYWxUeXBlcy5SZXNlbmRBcHByb3ZhbEVtYWlsQ29tcG9uZW50LFxuICAgICAgICB7IGNlbnRlcmVkOiB0cnVlIH0sXG4gICAgICAgIHsgZGF0YTogISFkYXRhIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tJZkJhc2tldFJlcXVpcmVzQXBwcm92YWwoYmFza2V0OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNrZXRSZXF1aXJlc0FwcHJvdmFsLmZldGNoTGlzdCh7IGJhc2tldCB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEJhc2tldHMoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IFtdO1xuICB9XG5cbiAgcHVibGljIGZpbHRlclJlbW92ZUJhc2tldEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudEJhc2tldHMgPSB0aGlzLmN1cnJlbnRCYXNrZXRzLmZpbHRlcihiYXNrZXQgPT4gYmFza2V0LmlkICE9PSBpZCk7XG4gIH1cblxuICBjcmVhdGVJbnRCYXNrZXQoYmFza2V0OiBVc2VyQmFza2V0UmVzdWx0KTogSW50ZXJuYWxCYXNrZXQ8R1VfUT4ge1xuICAgIHJldHVybiBuZXcgSW50ZXJuYWxCYXNrZXQoXG4gICAgICBiYXNrZXQsXG4gICAgICB0aGlzLmhlbHBlcnMsXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5nZXRVc2VyRmV0Y2hlcixcbiAgICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlLFxuICAgICAgdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVCYXNrZXRGcm9tRHJhZnQoXG4gICAgZHJhZnRCYXNrZXRJZDogc3RyaW5nLFxuICAgIGxlYWRQYXNzZW5nZXJJZDogc3RyaW5nLFxuICAgIG1hbmFnZW1lbnRJbmZvOiBNYW5hZ2VtZW50SW5mb0lucHV0W10sXG4gICAgdXNlckluZm86IFVzZXJJbmZvSW5wdXRbXSxcbiAgICBhbWVuZDogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPEdldFVzZXJCYXNrZXRSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBkcmFmdEJhc2tldElkLFxuICAgICAgbGVhZFBhc3NlbmdlcklkLFxuICAgICAgbWFuYWdlbWVudEluZm8sXG4gICAgICB1c2VySW5mbyxcbiAgICAgIGFtZW5kXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRBcHByb3Zlckxpc3RBbmRVcGRhdGUoYmFza2V0OiBzdHJpbmcpOiBQcm9taXNlPFN1YnNjcmlwdGlvbj4ge1xuICAgIC8vIHJhbiBvdXQgb2Ygd2lsbCB0byBnZXQgdGhpcyB3b3JraW5nLCB3aWxsIG5lZWQgdG8gZ2V0IHRoaXMgd29ya2luZyBmb3Igb3RoZXIgT0JUc1xuICAgIGNvbnN0IG9mZmljZSA9IHRoaXMuZ2V0T2ZmaWNlQXBwcm92ZXJzRmV0Y2hlci5mZXRjaExpc3QoKTtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRVc2VyQXBwcm92ZXJzRmV0Y2hlci5mZXRjaExpc3QoKTtcbiAgICByZXR1cm4gZm9ya0pvaW4oW29mZmljZSwgdXNlcl0pLnN1YnNjcmliZShhc3luYyAoYXBwcm92ZXJzOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGFsbEFwcHJvdmVycyA9IGFwcHJvdmVyc1swXS5jb25jYXQoYXBwcm92ZXJzWzFdKTtcbiAgICAgIGNvbnN0IGVtYWlscyA9IGFsbEFwcHJvdmVycy5tYXAoKHsgZW1haWwgfTogVXNlcikgPT4gZW1haWwpO1xuICAgICAgY29uc3QgZmlsdGVyZWRBcHByb3ZlcnMgPSBhbGxBcHByb3ZlcnMuZmlsdGVyKFxuICAgICAgICAoeyBlbWFpbCB9OiBVc2VyLCBpbmRleDogbnVtYmVyKSA9PiAhZW1haWxzLmluY2x1ZGVzKGVtYWlsLCBpbmRleCArIDEpXG4gICAgICApO1xuICAgICAgaWYgKGZpbHRlcmVkQXBwcm92ZXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhcHByb3ZlciA9IGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgICAgTW9kYWxUeXBlcy5BcHByb3ZlcnNNb2RhbENvbXBvbmVudCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXG4gICAgICAgICAgICB3aW5kb3dDbGFzczogJ3JlcXVpcmVzLXJlYXNvbi1kaWFsb2cnLFxuICAgICAgICAgICAgY2VudGVyZWQ6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgZmlsdGVyZWRBcHByb3ZlcnMgfVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChhcHByb3Zlcikge1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdEJhc2tldEFwcHJvdmVyVXBkYXRlclxuICAgICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICAgIGJhc2tldCxcbiAgICAgICAgICAgICAgYXBwcm92ZXJcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRBcHByb3ZlcnNMaXN0KCk6IE9ic2VydmFibGU8W1VzZXJbXSwgVXNlcltdXT4ge1xuICAgIGNvbnN0IG9mZmljZSA9IHRoaXMuZ2V0T2ZmaWNlQXBwcm92ZXJzRmV0Y2hlci5mZXRjaExpc3QoKTtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRVc2VyQXBwcm92ZXJzRmV0Y2hlci5mZXRjaExpc3QoKTtcbiAgICByZXR1cm4gZm9ya0pvaW4oW29mZmljZSwgdXNlcl0pO1xuICB9XG5cbiAgdXBkYXRlQXBwcm92ZXIoXG4gICAgYmFza2V0OiBzdHJpbmcsXG4gICAgYXBwcm92ZXI6IHN0cmluZyxcbiAgICBjb252ZXJ0Q3VycmVuY3lUbz86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RCYXNrZXRBcHByb3ZlclVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldCxcbiAgICAgIGFwcHJvdmVyLFxuICAgICAgY29udmVydEN1cnJlbmN5VG9cbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU5vdGlmeUFwcHJvdmVyKFxuICAgIGJhc2tldDogc3RyaW5nLFxuICAgIGFwcHJvdmVyOiBzdHJpbmcsXG4gICAgY29udmVydEN1cnJlbmN5VG8/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCYXNrZXREZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBiYXNrZXQsXG4gICAgICBhcHByb3ZlcixcbiAgICAgIGNvbnZlcnRDdXJyZW5jeVRvXG4gICAgfSk7XG4gIH1cblxuICBvcGVuQXBwcm92ZXJNb2RhbChcbiAgICBhcHByb3ZlcnM6IFVzZXJbXSxcbiAgICBpc1NlbGVjdGVkQXBwcm92ZXI6IGJvb2xlYW4sXG4gICAgaXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyOiBib29sZWFuLFxuICAgIGJhc2tldFVzZXI6IFVzZXJcbiAgKTogUHJvbWlzZTxCYXNrZXRTZWxlY3RlZEFwcHJvdmVyPiB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICBNb2RhbFR5cGVzLkFwcHJvdmVyc01vZGFsQ29tcG9uZW50LFxuICAgICAge1xuICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXG4gICAgICAgIHdpbmRvd0NsYXNzOiAncmVxdWlyZXMtcmVhc29uLWRpYWxvZycsXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlXG4gICAgICB9LFxuICAgICAgeyBhcHByb3ZlcnMsIGlzU2VsZWN0ZWRBcHByb3ZlciwgaXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyLCBiYXNrZXRVc2VyIH1cbiAgICApO1xuICB9XG5cbiAgc2hhcmVCYXNrZXQoYmFza2V0SWQ6IHN0cmluZywgc2hhcmVkVXNlcnM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxCYXNrZXQ+IHtcbiAgICByZXR1cm4gdGhpcy5zaGFyZUJhc2tldFVwZGF0ZXIudXBkYXRlT25lKHtiYXNrZXRJZCwgc2hhcmVkVXNlcnN9KVxuICB9XG5cbiAgZ2V0VXNlclNoYXJlZEJhc2tldHMobG9nZ2VkSW5Vc2VySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyU2hhcmVkQmFza2V0c0ZldGNoZXIuZmV0Y2hMaXN0KHtsb2dnZWRJblVzZXJJZH0pXG4gIH1cblxuICAvLyAhIC0gVXNlIGxvY2Fsc3RvcmFnZSB0byB0cmFjayB0aGUgc2l6ZSBvZiBzaGFyZWQgYmFza2V0cyBmb3IgZWFjaCB1c2VyXG4gIC8vICEgLSB0YWtlcyBvbmx5IGEgZmV3IGJ5dGVzIC0gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgYW1vdW50IHVzZWRcbiAgLy8gLSBzb21lIGhlbHBmdWwgY29kZSB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgbG9jYWwgc3RvcmFnZSAtIHVzZSBpdCBpbiB0aGUgYnJvd3NlciBjb25zb2xlXG4gIC8vIHZhciBfbHNUb3RhbD0wLF94TGVuLF94O2ZvcihfeCBpbiBsb2NhbFN0b3JhZ2UpeyBpZighbG9jYWxTdG9yYWdlLmhhc093blByb3BlcnR5KF94KSl7Y29udGludWU7fSBfeExlbj0gKChsb2NhbFN0b3JhZ2VbX3hdLmxlbmd0aCArIF94Lmxlbmd0aCkqIDIpO19sc1RvdGFsKz1feExlbjsgY29uc29sZS5sb2coX3guc3Vic3RyKDAsNTApK1wiID0gXCIrIChfeExlbi8xMDI0KS50b0ZpeGVkKDIpK1wiIEtCXCIpfTtjb25zb2xlLmxvZyhcIlRvdGFsID0gXCIgKyAoX2xzVG90YWwgLyAxMDI0KS50b0ZpeGVkKDIpICsgXCIgS0JcIik7XG5cbiAgdXBkYXRlU2hhcmVkQmFza2V0Q291bnQoc2hhcmVkQmFza2V0czogQmFza2V0W10sIHVzZXJJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRMb2NhbEl0ZW0oYCR7dXNlcklkfV9zaGFyZWRfYmFza2V0X2NvdW50YCwgc2hhcmVkQmFza2V0cy5sZW5ndGgpO1xuICB9XG5cbiAgZ2V0U2hhcmVkQmFza2V0Q291bnQodXNlcklkOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IHN0b3JlZCA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0TG9jYWxJdGVtKGAke3VzZXJJZH1fc2hhcmVkX2Jhc2tldF9jb3VudGApO1xuXG4gICAgcmV0dXJuIHN0b3JlZDtcbiAgfVxuXG4gIGNhbkFtZW5kQm9va2luZyhcbiAgICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLFxuICAgIGFycml2YWxEYXRlOiBzdHJpbmcsXG4gICAgZGVwYXJ0dXJlRGF0ZTogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmVmb3JlQW1lbmRJbmZvPiB7XG4gICAgLy8gTm90IGFtZW5kYWJsZSBpZiB0aGUgb3V0Ym91bmQgZGF0ZSBwYXNzZWRcblxuICAgIGlmIChiYXNrZXRJdGVtLnN0YXR1cyA9PT0gQmFza2V0SXRlbVN0YXR1cy5Cb29rZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbkFtZW5kQm9va2luZ0luZm9GZXRjaGVyLmZldGNoT25lKHtcbiAgICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCxcbiAgICAgICAgYXJyaXZhbERhdGU6IGFycml2YWxEYXRlLFxuICAgICAgICBkZXBhcnR1cmVEYXRlOiBkZXBhcnR1cmVEYXRlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2Yoe1xuICAgICAgY2FuQW1lbmQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBjaGVja0ZvclNlbGZBcHByb3ZlKGJhc2tldDogQmFza2V0RGV0YWlscyk6IGJvb2xlYW4ge1xuICAgIGxldCBiYXNrZXRVc2VyID0gYmFza2V0Lmludm9rZWRVc2VyID8gYmFza2V0Lmludm9rZWRVc2VyIDogYmFza2V0Lm93bmVyO1xuICAgIGxldCBpc0FsbG93U2VsZkFwcHJvdmUgPSBiYXNrZXRVc2VyLm9mZmljZS5hbGxvd1NlbGZBcHByb3ZlO1xuICAgIGxldCB1c2VyQXBwcm92ZXJzID0gYmFza2V0VXNlci51c2VyQXBwcm92ZXJzO1xuICAgIGlmIChpc0FsbG93U2VsZkFwcHJvdmUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBpc1NlbGZBcHByb3ZlciA9XG4gICAgICB1c2VyQXBwcm92ZXJzLmxlbmd0aCA9PT0gMSAmJiB1c2VyQXBwcm92ZXJzWzBdPy5hcHByb3Zlci5pZCA9PT0gYmFza2V0VXNlci5pZDtcbiAgICByZXR1cm4gIWlzU2VsZkFwcHJvdmVyO1xuICB9XG5cbiAgYXN5bmMgb3BlbkFwcHJvdmVXYXJuaW5nKHdhcm5pbmdNZXNzYWdlOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgTW9kYWxUeXBlcy5CYXNpY01vZGFsQ29tcG9uZW50LFxuICAgICAgeyBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0sXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgYm9keTogd2FybmluZ01lc3NhZ2UsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBidXR0b25PazogdHJ1ZSxcbiAgICAgICAgICBidXR0b25Pa1RleHQ6ICdPaycsXG4gICAgICAgICAgYnV0dG9uQ2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICBidXR0b25Pa0FjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNldFJlcXVpcmVzUmVhc29uQm9va2luZyhpc0Jvb2tpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJlcXVpcmVzU2VydmljZS5pc0Jvb2tpbmcgPSBpc0Jvb2tpbmc7XG4gIH1cblxuICBpc1VzZXJBZ2VudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS51c2VySXNBZ2VudCgpO1xuICB9XG59XG5cbmludGVyZmFjZSBEZXRhaWxTY2hlbWFQcm9wZXJ0aWVzIHtcbiAgdHlwZT86ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnaW50ZWdlcicgfCAnYXJyYXknO1xuICAkcmVmPzogc3RyaW5nO1xuICBmb3JtYXQ/OiBzdHJpbmc7XG59XG5cbiJdfQ==
|
|
1370
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29idHNlcnZpY2VzL2Jhc2Uvc3JjL2xpYi92ZW5kb3Ivc2VydmljZXMvZW50ZXJwcmlzZS1iYXNrZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBd0IsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDbEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBFLE9BQU8sRUFLTCxnQkFBZ0IsRUFHaEIsWUFBWSxFQU1aLGlCQUFpQixFQUtqQixhQUFhLEVBR2IsV0FBVyxFQVNaLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUNMLDRCQUE0QixFQUM1QixrQkFBa0IsRUFLbEIsYUFBYSxFQUVkLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBbUVqRixPQUFPLEVBQWEsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUF5Q3hFLE9BQU8sRUFDTCx5QkFBeUIsRUFFMUIsTUFBTSwyQkFBMkIsQ0FBQztBQTJFbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU0vQyxPQUFPLEVBQ0wsaUNB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QUFJO29CQUNkLFlBQVksRUFBRSxJQUFJO29CQUNsQixZQUFZLEVBQUUsS0FBSztvQkFDbkIsY0FBYyxFQUFFLEdBQUcsRUFBRTt3QkFDbkIsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztpQkFDRjtnQkFDRCxTQUFTLEVBQUUsS0FBSzthQUNqQixDQUNGLENBQUM7WUFFRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7S0FBQTtJQUVELHdCQUF3QixDQUFDLFNBQWtCO1FBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBPYnNlcnZlciwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlLCBtYXAsIGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQWRkSXRlbVRvQmFza2V0LFxuICBCYXNrZXQsXG4gIEJhc2tldEl0ZW0sXG4gIEJhc2tldEl0ZW1DdXN0b21SZW1hcmssXG4gIEJhc2tldEl0ZW1TdGF0dXMsXG4gIEJhc2tldE5vdGUsXG4gIEJhc2tldFF1b3RlLFxuICBCYXNrZXRTdGF0dXMsXG4gIEJlZm9yZUNhbmNlbGxhdGlvbkluZm8sXG4gIENyZWF0ZUJhc2tldE11dGF0aW9uVmFyaWFibGVzLFxuICBEb2N1bWVudElucHV0LFxuICBEcmFmdEJhc2tldCxcbiAgRHJhZnRCYXNrZXRJdGVtLFxuICBMZWFkUGFzc2VuZ2VyVHlwZSxcbiAgTWFuYWdlbWVudEluZm8sXG4gIE1hbmFnZW1lbnRJbmZvSW5wdXQsXG4gIE1hbmFnZW1lbnRJbmZvVmFsdWUsXG4gIE9mZmljZSxcbiAgUGFzc2VuZ2VyVHlwZSxcbiAgUGhvbmVOdW1iZXJJbnB1dCxcbiAgU2VydmljZSxcbiAgU2VydmljZVR5cGUsXG4gIFNldEJhc2tldEl0ZW1NaVZhbHVlLFxuICBTZXRCYXNrZXRJdGVtTWlWYWx1ZUlucHV0LFxuICBTZXRCYXNrZXRJdGVtTXVsdGlwbGVNaVZhbHVlLFxuICBTZXRCYXNrZXRJdGVtTXVsdGlwbGVNaVZhbHVlTXV0YXRpb25WYXJpYWJsZXMsXG4gIFN1cHBsZW1lbnRhcnlCb29raW5nSW5mbyxcbiAgVXNlckluZm9JbnB1dCxcbiAgVXNlcixcbiAgQmVmb3JlQW1lbmRJbmZvXG59IGZyb20gJy4uL3R5cGVzL2dyYXBocWwudHlwZXMnO1xuaW1wb3J0IHtcbiAgRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucyxcbiAgRGlmZmVyZW50VHJhdmVsbGVyLFxuICBHZXRNaUF1dG9TdWdlc3Rpb25BcnJheSxcbiAgR2V0VXNlckJhc2tldEl0ZW1SZXN1bHQsXG4gIEdldFVzZXJCYXNrZXRSZXN1bHQsXG4gIE1hbmFnZW1lbnRJbmZvVmFsdWVSZXN1bHQsXG4gIE1lbnVTbGlkZUVudW0sXG4gIFVzZXJCYXNrZXRSZXN1bHRcbn0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHsgTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkIH0gZnJvbSAnLi4vY2xhc3Nlcy9tYW5hZ2VtZW50LWluZm8tYW5kLXZhbGlkJztcbmltcG9ydCB7IE1vZGFsVHlwZXMgfSBmcm9tICcuLi9jbGFzc2VzL21vZGFsLXR5cGVzLmVudW0nO1xuaW1wb3J0IHsgU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW1wbCB9IGZyb20gJy4uL2NsYXNzZXMvc3VwcGxlbWVudGFyeS1ib29raW5nLWluZm8taW1wbCc7XG5pbXBvcnQgeyBCYXNrZXRJbmZvTWlEZXRhaWxzSW1wbCB9IGZyb20gJy4uL2NsYXNzZXMvYmFza2V0LWluZm8tbWktZGV0YWlscy5pbXBsJztcbmltcG9ydCB7IEJhc2VIZWxwZXJSb3V0aW5lcyB9IGZyb20gJy4uL2NsYXNzZXMvaGVscGVycyc7XG5pbXBvcnQgeyBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1vcGVuZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlR2V0VXNlckZldGNoZXIsIFNlYXJjaEdldFVzZXJGZXRjaGVyVHlwZSB9IGZyb20gJy4uL2ZldGNoZXJzL3VzZXItZmV0Y2hlcic7XG5pbXBvcnQge1xuICBBY2NlcHROZXdQcmljZUZldGNoZXJUeXBlLFxuICBCYXNlQWNjZXB0TmV3UHJpY2VVcGRhdGVyXG59IGZyb20gJy4uL3VwZGF0ZXJzL2FjY2VwdC1uZXctcHJpY2UudXBkYXRlcic7XG5pbXBvcnQgeyBCYXNlR2V0QmFza2V0RmV0Y2hlciwgR2V0QmFza2V0RmV0Y2hlclR5cGUgfSBmcm9tICcuLi9mZXRjaGVycy9iYXNrZXQtZmV0Y2hlcic7XG5pbXBvcnQge1xuICBCYXNlR2V0VXNlckJhc2tldHNGZXRjaGVyLFxuICBHZXRVc2VyQmFza2V0c0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC11c2Vycy1iYXNrZXRzLWZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldE1pQXV0b1N1Z2VzdGlvbkZldGNoZXIsXG4gIE1pQXV0b1N1Z2dlc3RGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXRNaUF1dG9TdWdlc3Rpb25zLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZUdldFVzZXJEZWZhdWx0TUlWYWx1ZUZldGNoZXIsXG4gIEdldFVzZXJEZWZhdWx0TUlWYWx1ZVR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItZGVmYXVsdC1taS12YWx1ZS5mZXRjaGVyJztcbmltcG9ydCB7XG4gIEFkZEl0ZW1Ub0Jhc2tldEZldGNoZXJUeXBlLFxuICBCYXNlQWRkSXRlbVRvQmFza2V0VXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy9hZGQtaXRlbS10by1iYXNrZXQudXBkYXRlcic7XG5pbXBvcnQge1xuICBBZGRVc2VyQmFza2V0RmV0Y2hlclR5cGUsXG4gIEJhc2VBZGRVc2VyVG9CYXNrZXRJdGVtVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy9hZGRVc2VyVG9CYXNrZXRJdGVtJztcbmltcG9ydCB7XG4gIEFkZEd1ZXN0QmFza2V0RmV0Y2hlclR5cGUsXG4gIEJhc2VBZGRHdWVzdFRvQmFza2V0SXRlbVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvYWRkR3Vlc3RUb0Jhc2tldEl0ZW0nO1xuaW1wb3J0IHtcbiAgU2V0QmFza2V0SXRlbUxlYWRQYXNzZW5nZXJGZXRjaGVyVHlwZSxcbiAgQmFzZVNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyVXBkYXRlclxufSBmcm9tICcuLi91cGRhdGVycy9zZXQtYmFza2V0LWl0ZW0tbGVhZC1wYXNzZW5nZXIudXBkYXRlcic7XG5pbXBvcnQgeyBCYXNlQm9va0Jhc2tldFVwZGF0ZXIsIEJvb2tCYXNrZXRGZXRjaGVyVHlwZSB9IGZyb20gJy4uL3VwZGF0ZXJzL2Jvb2stYmFza2V0LXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUNyZWF0ZUJhc2tldFVwZGF0ZXIsXG4gIENyZWF0ZUJhc2tldEZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL2NyZWF0ZS1iYXNrZXQtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlRGVsZXRlQmFza2V0VXBkYXRlcixcbiAgRGVsZXRlQmFza2V0RmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvcmVtb3ZlLWJhc2tldC11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VSZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXIsXG4gIERlbGV0ZUJhc2tldEl0ZW1GZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9yZW1vdmUtaXRlbS1mcm9tLWJhc2tldC51cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VSZXZhbGlkYXRlQmFza2V0VXBkYXRlcixcbiAgUmV2YWxpZGF0ZUJhc2tldEZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3JldmFsaWRhdGUtYmFza2V0LXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUFkZFVwZGF0ZWRJdGVtVG9CYXNrZXRVcGRhdGVyLFxuICBBZGRVcGRhdGVkSXRlbVRvQmFza2V0VXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWJhc2tldC1pdGVtLnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZVNlbmRCYXNrZXRGb3JBcHByb3ZhbFVwZGF0ZXIsXG4gIFNlbmRCYXNrZXRBcHByb3ZhbEZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NlbmQtYmFza2V0LWZvci1hcHByb3ZhbC51cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNldEJhc2tldEl0ZW1NaUdyb3VwVXBkYXRlcixcbiAgU2V0QmFza2V0SXRNaUdyb3VwRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvc2V0LWJhc2tldC1pdGVtLW1pLWdyb3VwJztcbmltcG9ydCB7IFRyYXZlbGxlciwgVHJhdmVsbGVyT2JqZWN0IH0gZnJvbSAnLi4vbW9kZWxzL3RyYXZlbGxlci5vYmplY3QnO1xuaW1wb3J0IHsgU2VhcmNoT2JqZWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWFyY2gtb2JqZWN0cy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQmFzZVNldEJhc2tldEl0ZW1NaVZhbHVlVXBkYXRlcixcbiAgU2V0QmFza2V0SXRNaUZldGNoZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1iYXNrZXQtaXRlbS1taS12YWx1ZS11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZXRCYXNrZXRJdGVtTXVsdGlwbGVNaVZhbHVlVXBkYXRlcixcbiAgU2V0QmFza2V0SXRlbU11bHRpcGxlTWlGZXRjaGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZXQtYmFza2V0LWl0ZW0tbXVsdGlwbGUtbWktdmFsdWUtdXBkYXRlcic7XG5pbXBvcnQge1xuICBCYXNlVmFsaWRhdGVNaUZyZWVWYWx1ZVRlc3RlcixcbiAgVmFsaWRhdGVNaUZldGNoZXJUeXBlXG59IGZyb20gJy4uL3Rlc3RlcnMvdmFsaWRhdGUtbWktZnJlZS12YWx1ZS50ZXN0ZXInO1xuaW1wb3J0IHsgRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lzZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBGdWxsVXNlckRldGFpbHMsIFVzZXJTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxufSBmcm9tICcuLi9pbnRlcmZhY2VzL0llbnRlcnByaXNlLWJhc2tldC5zZXJ2aWNlJztcbmltcG9ydCB7IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ludGVyZmFjZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSXN1cHBsZW1lbnRhcnktYm9va2luZy1pbmZvLWltcGwnO1xuaW1wb3J0IHtcbiAgQmFzZW1vdmVCYXNrZXRJdGVtVG9CYXNrZXQsXG4gIE1vdmVJdGVtVG9BRGlmZmVyZW50QmFza2V0VHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9tb3ZlLWJhc2tldC1pdGVtLXRvLWJhc2tldCc7XG5pbXBvcnQge1xuICBCYXNlVXBkYXRlQmFza2V0Tm90ZXNUeXBlLFxuICBCYXNlVXBkYXRlQmFza2V0Tm90ZVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWJhc2tldC1ub3Rlcy11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVR5cGUsXG4gIEJhc2VVcGRhdGVCYXNrZXRUaXRsZVVwZGF0ZXJcbn0gZnJvbSAnLi4vdXBkYXRlcnMvdXBkYXRlLWJhc2tldC10aXRsZS11cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VTZXRQYXltZW50T3B0aW9uVXBkYXRlcixcbiAgU2V0QmFza2V0SXRlbVBheW1lbnRNZXRob2RUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NldC1iYXNrZXQtaXRlbS1wYXltZW5yLW9wdGlvbi51cGRhdGVyJztcbmltcG9ydCB7XG4gIEJhc2VHZXRDYW5jZWxsYXRpb25JbmZvRmV0Y2hlcixcbiAgR2V0Q2FuY2VsbGF0aW9uSW5mb1R5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWNhbmNlbGxhdGlvbi1pbmZvLmZldGNoZXInO1xuaW1wb3J0IHtcbiAgQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZSxcbiAgUmVxdWlyZXNSZWFzb25TZXJ2aWNlSW50ZXJmYWNlXG59IGZyb20gJy4vcmVxdWlyZXMtcmVhc29uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQmFzZUNyZWF0ZUJhc2tldE5vdGVVcGRhdGVyLFxuICBDcmVhdGVCYXNrZXROb3RlVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY3JlYXRlLWJhc2tldC1ub3RlLXVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUFkZEJhc2tldEl0ZW1NYXJrdXBVcGRhdGVyLFxuICBBZGRCYXNrZXRJdGVtTWFya3VwVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9hZGQtYmFza2V0LWl0ZW0tbWFya3VwLnVwZGF0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcmtVcGRhdGVyLFxuICBBZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvYWRkLWJhc2tldC1pdGVtLWN1c3RvbS1yZW1hcmstdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrc0ZldGNoZXIsXG4gIEdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1pdGVtLWN1c3RvbS1yZW1hcmtzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlcixcbiAgQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlclR5cGVcbn0gZnJvbSAnLi4vdXBkYXRlcnMvY2hhbmdlLWJhc2tldC1vd25lcnNoaXAtdXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRCYXNrZXRRdW90ZUZldGNoZXIsXG4gIEdldEJhc2tldFF1b3RlRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LWJhc2tldC1xdW90ZS5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldEJhc2tldE5vdGVzRmV0Y2hlcixcbiAgR2V0QmFza2V0Tm90ZXNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtYmFza2V0LW5vdGVzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlUmVzZW5kQXBwcm92ZXJFbWFpbEZldGNoZXIsXG4gIFJlc2VuZEFwcHJvdmVyRW1haWxRdW90ZUZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL3Jlc2VuZC1hcHByb3ZhbC1lbWFpbC5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUNoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlcixcbiAgQ2hlY2tJZkJhc2tldFJlcXVpcmVzQXBwcm92YWxGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9jaGVjay1pZi1iYXNrZXQtcmVxdWlyZXMtYXBwcm92YWwnO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlck1pQXV0b1N1Z2VzdGlvblVzZXJQcmVmZXJlbmNlc0ZldGNoZXIsXG4gIE1pVXNlckF1dG9TdWdnZXN0VXNlclByZWZlcmVuY2VzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItbWktYXV0by1zdWdlc3Rpb25zLXVzZXItcHJlZmVyZW5jZXMuZmV0Y2hlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXREcmFmdEJhc2tldHNGZXRjaGVyLFxuICBEcmFmdEJhc2tldHNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtZHJhZnQtYmFza2V0cy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUNyZWF0ZUJhc2tldEZyb21EcmFmdFVwZGF0ZXIsXG4gIENyZWF0ZUJhc2tldEZyb21EcmFmdFVwZGF0ZXJUeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL2NyZWF0ZS1iYXNrZXQtZnJvbS1kcmFmdC11cGRhdGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZUdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXIsXG4gIEdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXJUeXBlXG59IGZyb20gJy4uL2ZldGNoZXJzL2dldC1vZmZpY2UtYXBwcm92ZXJzLmZldGNoZXInO1xuXG5pbXBvcnQge1xuICBCYXNlU2VsZWN0QmFza2V0QXBwcm92ZXJVcGRhdGVyLFxuICBTZWxlY3RCYXNrZXRBcHByb3Zlck11dGF0aW9uVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zZWxlY3QtYmFza2V0LWFwcHJvdmVyLnVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlR2V0VXNlckFwcHJvdmVyc0ZldGNoZXIsXG4gIEdldFVzZXJBcHByb3ZlcnNGZXRjaGVyVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9nZXQtdXNlci1hcHByb3ZlcnMuZmV0Y2hlcic7XG5cbmltcG9ydCB7IEJhc2VXZWJUb2tlblNlcnZpY2UgfSBmcm9tICcuL3dlYnRva2VuLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckZhdm9ydXJpdGUgfSBmcm9tICcuLi9jbGFzc2VzL3VzZXItZmF2b3VyaXRlLmVudW0nO1xuaW1wb3J0IHsgTWlDb21tYW5kIH0gZnJvbSAnLi4vZGF0YS9taS1jb21tYW5kJztcbmltcG9ydCB7XG4gIEJhc2VTZWxlY3RCYXNrZXROb3RpZnlBcHByb3ZlclVwZGF0ZXIsXG4gIFNlbGVjdEJhc2tldE5vdGlmeUFwcHJvdmVyTXV0YXRpb25UeXBlXG59IGZyb20gJy4uL3VwZGF0ZXJzL3NlbGVjdC1iYXNrZXQtbm90aWZ5LWFwcHJvdmVyLnVwZGF0ZXInO1xuXG5pbXBvcnQge1xuICBCYXNlUmVxdWlyZXNPdmVycmlkZVJlYXNvblNlcnZpY2UsXG4gIFJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlSW50ZXJmYWNlXG59IGZyb20gJy4vcmVxdWlyZXMtb3ZlcnJpZGUtcmVhc29uLnNlcnZpY2UnO1xuXG5pbXBvcnQge1xuICBCYXNlQ2FuQW1lbmRCb29raW5nRmV0Y2hlcixcbiAgQ2FuQW1lbmRCb29raW5nVHlwZVxufSBmcm9tICcuLi9mZXRjaGVycy9jYW4tYW1lbmQtYm9va2luZy5mZXRjaGVyJztcblxuaW1wb3J0IHtcbiAgQmFzZVNoYXJlQmFza2V0VXBkYXRlcixcbiAgU2hhcmVCYXNrZXRVcGRhdGVyVHlwZVxufSBmcm9tICcuLi91cGRhdGVycy9zaGFyZS1iYXNrZXQudXBkYXRlcic7XG5cbmltcG9ydCB7XG4gIEJhc2VHZXRVc2VyU2hhcmVkQmFza2V0c0ZldGNoZXIsXG4gIEdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlclR5cGVcbn0gZnJvbSAnLi4vZmV0Y2hlcnMvZ2V0LXVzZXItc2hhcmVkLWJhc2tldHMuZmV0Y2hlcic7XG5pbXBvcnQgeyBCYXNlU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5cbmNvbnN0IFRFTVBJRCA9ICdURU1QSURfJztcblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRBbmRJdGVtIHtcbiAgYmFza2V0SWQ6IHN0cmluZztcbiAgaXRlbTogQmFza2V0SXRlbTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgTWlHcm91cERldGFpbCB7XG4gIHR5cGU6IFNlcnZpY2VUeXBlO1xuICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgYmFza2V0SXRlbTogQmFza2V0SXRlbTtcbiAgdmFsdWU6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvIHtcbiAgbWlQZXJJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXTtcbiAgbWlQZXJVc2VyOiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdO1xuICAgICAgc3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvPzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlO1xuICAgIH07XG4gIH07XG4gIG1pUGVyR3Vlc3Q6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW107XG4gICAgICBzdXBwbGVtZW50YXJ5Qm9va2luZ0luZm8/OiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2U7XG4gICAgfTtcbiAgfTtcbiAgdXNlcnM6IHN0cmluZ1tdO1xuICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtO1xuICBoaWRlRm9yU2FtZVNlcnZpY2U/OiBib29sZWFuO1xuICBndWVzdHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERyYWZ0QmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvIHtcbiAgbWlQZXJJdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWRbXTtcbiAgbWlQZXJVc2VyOiB7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvQW5kSXNWYWxpZFtdO1xuICAgICAgc3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvPzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlO1xuICAgIH07XG4gIH07XG4gIG1pUGVyR3Vlc3Q6IHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBtYW5hZ2VtZW50SW5mbzogTWFuYWdlbWVudEluZm9BbmRJc1ZhbGlkW107XG4gICAgICBzdXBwbGVtZW50YXJ5Qm9va2luZ0luZm8/OiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2U7XG4gICAgfTtcbiAgfTtcbiAgdXNlcnM6IHN0cmluZ1tdO1xuICBiYXNrZXRJdGVtOiBEcmFmdEJhc2tldEl0ZW07XG4gIGhpZGVGb3JTYW1lU2VydmljZT86IGJvb2xlYW47XG4gIGd1ZXN0czogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFza2V0SW5mb3JtYXRpb24ge1xuICBwcmljZXM6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07XG4gIG1peGVkQ3VycmVuY3k6IGJvb2xlYW47XG4gIGNvdW50OiBudW1iZXI7XG4gIG1pR3JvdXBzOiBNaUdyb3VwRGV0YWlsW107XG4gIGJhc2tldEluZm9NaURldGFpbHM6IEJhc2tldEluZm9NaURldGFpbHNJbXBsW107XG4gIHN1cHBJbmZvOiBTdXBwbGVtZW50YXJ5Qm9va2luZ0luZm9JbnRlcmZhY2VbXTtcbiAgcmVxdWlyZXNTZWxlY3RlZEFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYXNrZXRQcmljZXNMaXN0IHtcbiAgdHlwZTogU2VydmljZVR5cGU7XG4gIHByaWNlOiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG4gIGNvMjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2tldFByaWNlcyB7XG4gIHRvdGFsOiBudW1iZXI7XG4gIHRvdGFsQ28yOiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICBsaXN0OiBCYXNrZXRQcmljZXNMaXN0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFza2V0U2VsZWN0ZWRBcHByb3ZlciB7XG4gIHNlbGVjdGVkQXBwcm92ZXI/OiBVc2VyO1xuICBzZWxlY3RlZE5vdGlmeUFwcHJvdmVyPzogVXNlcjtcbn1cblxuZXhwb3J0IHR5cGUgQmFza2V0RGV0YWlscyA9IFVzZXJCYXNrZXRSZXN1bHQgJiBCYXNrZXRJbmZvcm1hdGlvbjtcbmV4cG9ydCBjbGFzcyBJbnRlcm5hbEJhc2tldDxRIGV4dGVuZHMgU2VhcmNoR2V0VXNlckZldGNoZXJUeXBlPlxuICBpbXBsZW1lbnRzIEJhc2tldEluZm9ybWF0aW9uLCBJbnRlcm5hbEJhc2tldEludGVyZmFjZVxue1xuICBzdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QmFza2V0RGV0YWlscz47XG4gIHByaXZhdGUgX2Jhc2tldFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxCYXNrZXREZXRhaWxzPjtcbiAgaWQ/OiBzdHJpbmc7XG4gIHRlbXBpZD86IHN0cmluZztcbiAgcmVxdWlyZXNTZWxlY3RlZEFwcHJvdmVyPzogYm9vbGVhbjtcbiAgcmVxdWlyZXNTZWxlY3RlZE5vdGlmeUFwcHJvdmVyPzogYm9vbGVhbjtcbiAgdGl0bGU6IHN0cmluZztcbiAgcHJpY2VzOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9O1xuICBtaXhlZEN1cnJlbmN5OiBib29sZWFuO1xuICBsb3dlc3RQcmljZTogbnVtYmVyO1xuICBjb3VudDogbnVtYmVyO1xuICBtaUdyb3VwczogTWlHcm91cERldGFpbFtdO1xuICBiYXNrZXRJbmZvTWlEZXRhaWxzOiBCYXNrZXRJbmZvTWlEZXRhaWxzSW1wbFtdO1xuICBzdXBwSW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvSW50ZXJmYWNlW107XG4gIGdyYW5kVG90YWw6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH07XG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhc2tldDogVXNlckJhc2tldFJlc3VsdCxcbiAgICBwcml2YXRlIGhlbHBlcnM6IEJhc2VIZWxwZXJSb3V0aW5lcyxcbiAgICBwcml2YXRlIGJhc2tldFNlcnZpY2U6IEVudGVycHJpc2VCYXNrZXRTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgZ2V0VXNlckZldGNoZXI6IEJhc2VHZXRVc2VyRmV0Y2hlcjxRPixcbiAgICBwcml2YXRlIHJlcXVpcmVzU2VydmljZTogQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZSxcbiAgICBwcml2YXRlIHJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlOiBCYXNlUmVxdWlyZXNPdmVycmlkZVJlYXNvblNlcnZpY2VcbiAgKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7XG4gICAgICBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldERldGFpbHM+KHtcbiAgICAgICAgLi4uYmFza2V0LFxuICAgICAgICBwcmljZXM6IHt9LFxuICAgICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgICAgY291bnQ6IDAsXG4gICAgICAgIG1pR3JvdXBzOiBbXSxcbiAgICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICAgIHN1cHBJbmZvOiBbXVxuICAgICAgfSksXG4gICAgICBfYmFza2V0U3ViamVjdDogbmV3IEJlaGF2aW9yU3ViamVjdDxCYXNrZXREZXRhaWxzPih7XG4gICAgICAgIC4uLmJhc2tldCxcbiAgICAgICAgcHJpY2VzOiB7fSxcbiAgICAgICAgbWl4ZWRDdXJyZW5jeTogZmFsc2UsXG4gICAgICAgIGNvdW50OiAwLFxuICAgICAgICBtaUdyb3VwczogW10sXG4gICAgICAgIGJhc2tldEluZm9NaURldGFpbHM6IFtdLFxuICAgICAgICBzdXBwSW5mbzogW11cbiAgICAgIH0pLFxuICAgICAgdGVtcGlkOiBiYXNrZXQuaWQsXG4gICAgICBpZDogYmFza2V0LmlkLFxuICAgICAgdGl0bGU6IGJhc2tldC50aXRsZSxcbiAgICAgIHByaWNlczoge30sXG4gICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgIGNvdW50OiAwLFxuICAgICAgbWlHcm91cHM6IFtdLFxuICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICBzdXBwSW5mbzogW11cbiAgICB9KTtcblxuICAgIHRoaXMuX2Jhc2tldFN1YmplY3QucGlwZShkZWJvdW5jZVRpbWUoNTAwKSkuc3Vic2NyaWJlKFxuICAgICAgZGF0YSA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdC5uZXh0KGRhdGEpO1xuICAgICAgfSxcbiAgICAgIGVyciA9PiB7XG4gICAgICAgIHRoaXMuc3ViamVjdC5lcnJvcihlcnIpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLm5leHQoYmFza2V0KTtcbiAgfVxuXG4gIGRlc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBuZXh0KGJhc2tldDogVXNlckJhc2tldFJlc3VsdCwgZ2V0TWkgPSBmYWxzZSkge1xuICAgIGJhc2tldCA9IHRoaXMuaGVscGVycy5jbG9uZShiYXNrZXQpO1xuICAgIHRoaXMuaWQgPSBiYXNrZXQuaWQ7XG4gICAgdGhpcy50aXRsZSA9IGJhc2tldC50aXRsZTtcbiAgICBjb25zdCBpc0ludm9rZWQgPSAhIWJhc2tldC5pbnZva2VkVXNlcj8uaWQ7XG4gICAgY29uc3QgdG9TZW5kOiBCYXNrZXREZXRhaWxzID0ge1xuICAgICAgLi4uYmFza2V0LFxuICAgICAgLi4uKGJhc2tldC5iYXNrZXRJdGVtcyB8fCBbXSkucmVkdWNlKFxuICAgICAgICAoYWNjdW06IEJhc2tldEluZm9ybWF0aW9uLCBpdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKCFhY2N1bS5wcmljZXNbaXRlbS5jdXJyZW5jeV0pIHtcbiAgICAgICAgICAgIGFjY3VtLnByaWNlc1tpdGVtLmN1cnJlbmN5XSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYWNjdW0ucHJpY2VzW2l0ZW0uY3VycmVuY3ldICs9IGl0ZW0ucHJpY2U7XG5cbiAgICAgICAgICBhY2N1bS5zdXBwSW5mby5wdXNoKFxuICAgICAgICAgICAgbmV3IFN1cHBsZW1lbnRhcnlCb29raW5nSW5mb0ltcGwoaXRlbSwgdGhpcy5oZWxwZXJzLCB0aGlzLmdldFVzZXJGZXRjaGVyKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGl0ZW0ubWlHcm91cHNBdmFpbGFibGUgJiYgaXRlbS5taUdyb3Vwc0F2YWlsYWJsZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBhY2N1bS5taUdyb3Vwcy5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogaXRlbS5zZXJ2aWNlLnR5cGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IGl0ZW0ubWlHcm91cHNBdmFpbGFibGUsXG4gICAgICAgICAgICAgIGJhc2tldEl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLm1pR3JvdXBTZWxlY3RlZCB8fCAnJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGl0ZW0ubWFuYWdlbWVudEluZm8/Lmxlbmd0aCA+IDAgJiYgKGl0ZW0udXNlcnM/Lmxlbmd0aCA+IDAgfHwgaXRlbS5ndWVzdHM/Lmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGFjY3VtLmJhc2tldEluZm9NaURldGFpbHMucHVzaChcbiAgICAgICAgICAgICAgbmV3IEJhc2tldEluZm9NaURldGFpbHNJbXBsKGl0ZW0sIHRoaXMuYmFza2V0U2VydmljZSwgdGhpcy5oZWxwZXJzLCBpc0ludm9rZWQsIGdldE1pKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJpY2VzOiB7fSxcbiAgICAgICAgICBtaXhlZEN1cnJlbmN5OiBmYWxzZSxcbiAgICAgICAgICBjb3VudDogYmFza2V0LmJhc2tldEl0ZW1zPy5sZW5ndGggfHwgMCxcbiAgICAgICAgICBtaUdyb3VwczogW10sXG4gICAgICAgICAgYmFza2V0SW5mb01pRGV0YWlsczogW10sXG4gICAgICAgICAgc3VwcEluZm86IFtdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9O1xuICAgIHRvU2VuZC5taXhlZEN1cnJlbmN5ID0gT2JqZWN0LmtleXModG9TZW5kLnByaWNlcykubGVuZ3RoID4gMTtcbiAgICB0aGlzLl9iYXNrZXRTdWJqZWN0Lm5leHQodG9TZW5kKTtcblxuICAgIGlmIChiYXNrZXQuYmFza2V0SXRlbXMuZXZlcnkoaXRlbSA9PiBpdGVtPy5kZXRhaWw/Lm91dHdhcmREZXRhaWw/LnNwbGl0SUQpKSB7XG4gICAgICBpZiAoIShiYXNrZXQuYmFza2V0SXRlbXMubGVuZ3RoICUgMikpIHtcbiAgICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQpO1xuICAgICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlLmFkZEJhc2tldEl0ZW0oYmFza2V0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UuYWRkQmFza2V0SXRlbShiYXNrZXQpO1xuICAgICAgdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZS5hZGRCYXNrZXRJdGVtKGJhc2tldCk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRW50ZXJwcmlzZUJhc2tldFNlcnZpY2U8XG4gIEFOUFVfUSBleHRlbmRzIEFjY2VwdE5ld1ByaWNlRmV0Y2hlclR5cGUsXG4gIEFJVEJfUSBleHRlbmRzIEFkZEl0ZW1Ub0Jhc2tldEZldGNoZXJUeXBlLFxuICBBVVRCX1EgZXh0ZW5kcyBBZGRVc2VyQmFza2V0RmV0Y2hlclR5cGUsXG4gIENCX1EgZXh0ZW5kcyBDcmVhdGVCYXNrZXRGZXRjaGVyVHlwZSxcbiAgR0JfUSBleHRlbmRzIEdldEJhc2tldEZldGNoZXJUeXBlLFxuICBCQl9RIGV4dGVuZHMgQm9va0Jhc2tldEZldGNoZXJUeXBlLFxuICBEQl9RIGV4dGVuZHMgRGVsZXRlQmFza2V0RmV0Y2hlclR5cGUsXG4gIEdBU19RIGV4dGVuZHMgTWlBdXRvU3VnZ2VzdEZldGNoZXJUeXBlLFxuICBHVURNVl9RIGV4dGVuZHMgR2V0VXNlckRlZmF1bHRNSVZhbHVlVHlwZSxcbiAgUklCX1EgZXh0ZW5kcyBEZWxldGVCYXNrZXRJdGVtRmV0Y2hlclR5cGUsXG4gIFJWQl9RIGV4dGVuZHMgUmV2YWxpZGF0ZUJhc2tldEZldGNoZXJUeXBlLFxuICBTQk1JX1EgZXh0ZW5kcyBTZXRCYXNrZXRJdE1pR3JvdXBGZXRjaGVyVHlwZSxcbiAgU1ZNSV9RIGV4dGVuZHMgU2V0QmFza2V0SXRNaUZldGNoZXJUeXBlLFxuICBTQklNTUlfUSBleHRlbmRzIFNldEJhc2tldEl0ZW1NdWx0aXBsZU1pRmV0Y2hlclR5cGUsXG4gIFZNSV9RIGV4dGVuZHMgVmFsaWRhdGVNaUZldGNoZXJUeXBlLFxuICBTQkFfUSBleHRlbmRzIFNlbmRCYXNrZXRBcHByb3ZhbEZldGNoZXJUeXBlLFxuICBHVV9RIGV4dGVuZHMgU2VhcmNoR2V0VXNlckZldGNoZXJUeXBlLFxuICBHVUJfUSBleHRlbmRzIEdldFVzZXJCYXNrZXRzRmV0Y2hlclR5cGUsXG4gIFNCTFBfUSBleHRlbmRzIFNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyRmV0Y2hlclR5cGUsXG4gIE1JVERCX1EgZXh0ZW5kcyBNb3ZlSXRlbVRvQURpZmZlcmVudEJhc2tldFR5cGUsXG4gIFVCTl9RIGV4dGVuZHMgQmFzZVVwZGF0ZUJhc2tldE5vdGVzVHlwZSxcbiAgVUJUX1EgZXh0ZW5kcyBCYXNlVXBkYXRlQmFza2V0VGl0bGVUeXBlLFxuICBTQk1fUSBleHRlbmRzIFNldEJhc2tldEl0ZW1QYXltZW50TWV0aG9kVHlwZSxcbiAgR0NJX1EgZXh0ZW5kcyBHZXRDYW5jZWxsYXRpb25JbmZvVHlwZSxcbiAgQUdUQl9RIGV4dGVuZHMgQWRkR3Vlc3RCYXNrZXRGZXRjaGVyVHlwZSxcbiAgQVVJQl9RIGV4dGVuZHMgQWRkVXBkYXRlZEl0ZW1Ub0Jhc2tldFVwZGF0ZXJUeXBlLFxuICBDQk5fUSBleHRlbmRzIENyZWF0ZUJhc2tldE5vdGVVcGRhdGVyVHlwZSxcbiAgR0JORl9RIGV4dGVuZHMgR2V0QmFza2V0Tm90ZXNGZXRjaGVyVHlwZSxcbiAgQU1fUSBleHRlbmRzIEFkZEJhc2tldEl0ZW1NYXJrdXBUeXBlLFxuICBBQklDUl9RIGV4dGVuZHMgQWRkQmFza2V0SXRlbUN1c3RvbVJlbWFya1VwZGF0ZXJUeXBlLFxuICBHQklDX1EgZXh0ZW5kcyBHZXRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrc0ZldGNoZXJUeXBlLFxuICBDQk9VX1EgZXh0ZW5kcyBDaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyVHlwZSxcbiAgR0JRRl9RIGV4dGVuZHMgR2V0QmFza2V0UXVvdGVGZXRjaGVyVHlwZSxcbiAgUkFFX1EgZXh0ZW5kcyBSZXNlbmRBcHByb3ZlckVtYWlsUXVvdGVGZXRjaGVyVHlwZSxcbiAgQ0lCUkFfUSBleHRlbmRzIENoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlclR5cGUsXG4gIEdVTUlfUSBleHRlbmRzIE1pVXNlckF1dG9TdWdnZXN0VXNlclByZWZlcmVuY2VzRmV0Y2hlclR5cGUsXG4gIEdPQUZfUSBleHRlbmRzIEdldE9mZmljZUFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBTQkFfVSBleHRlbmRzIFNlbGVjdEJhc2tldEFwcHJvdmVyTXV0YXRpb25UeXBlLFxuICBHREJfUSBleHRlbmRzIERyYWZ0QmFza2V0c0ZldGNoZXJUeXBlLFxuICBDQkZEX1EgZXh0ZW5kcyBDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyVHlwZSxcbiAgU0JOQV9VIGV4dGVuZHMgU2VsZWN0QmFza2V0Tm90aWZ5QXBwcm92ZXJNdXRhdGlvblR5cGUsXG4gIENBQl9RIGV4dGVuZHMgQ2FuQW1lbmRCb29raW5nVHlwZSxcbiAgR1VBRl9RIGV4dGVuZHMgR2V0VXNlckFwcHJvdmVyc0ZldGNoZXJUeXBlLFxuICBTQlVfUSBleHRlbmRzIFNoYXJlQmFza2V0VXBkYXRlclR5cGUsXG4gIEdVU0JfUSBleHRlbmRzIEdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlclR5cGVcbj4gaW1wbGVtZW50cyBFbnRlcnByaXNlQmFza2V0U2VydmljZUludGVyZmFjZVxue1xuICBwdWJsaWMgYmFza2V0VXBkYXRpbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIGN1cnJlbnRCYXNrZXRzOiBJbnRlcm5hbEJhc2tldDxHVV9RPltdID0gW107XG5cbiAgaGlnaGxpZ2h0QmFza2V0SXRlbXNFbWl0dGVyOiBTdWJqZWN0PEdldFVzZXJCYXNrZXRJdGVtUmVzdWx0W10+ID0gbmV3IFN1YmplY3Q8XG4gICAgR2V0VXNlckJhc2tldEl0ZW1SZXN1bHRbXVxuICA+KCk7XG5cbiAgYmFza2V0Q2hhbmdlRW1pdHRlcjogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuICBhZGRpbmdUb0Jhc2tldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlbW92aW5nRnJvbUJhc2tldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGRlbGV0aW5nQmFza2V0OiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgYXV0b1N1Z2dlc3REZWZhdWx0c0xvYWRpbmc6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9ICBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBzZWxlY3RlZEJhc2tldElkOiBzdHJpbmcgPSAnJztcbiAgbmV3SW52b2tlZEJhc2tldElkOiBzdHJpbmc7XG5cbiAgX2dvaW5nRm9yQXBwcm92YWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2V0IGdvaW5nRm9yQXBwcm92YWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2dvaW5nRm9yQXBwcm92YWw7XG4gIH1cblxuICBzZXQgZ29pbmdGb3JBcHByb3ZhbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2dvaW5nRm9yQXBwcm92YWwgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIGdldCBjdXJyZW50QmFza2V0SUQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLnZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXQgY3VycmVudEJhc2tldElEKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuY3VycmVudEJhc2tldElEKSB7XG4gICAgICAvLyB0aGlzIHByZXZlbnRzIHRoZSBlbWl0dGVyIGdldHRpbmcgc3R1Y2sgaW4gYSBsb29wICAtIGNhc3VpbmcgYnJvd3NlciBvdmVybG9hZHNcbiAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBiYXNrZXRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJbnRlcm5hbEJhc2tldDxHVV9RPltdPihbXSk7XG5cbiAgYmFza2V0TGlzdDogQmFza2V0UHJpY2VzTGlzdFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkZsaWdodCxcbiAgICAgIHRleHQ6ICdGTElHSFRTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5SYWlsLFxuICAgICAgdGV4dDogJ1JBSUwnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkhvdGVsLFxuICAgICAgdGV4dDogJ0hPVEVMUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuQ2FiLFxuICAgICAgdGV4dDogJ1RBWElTJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5DYXIsXG4gICAgICB0ZXh0OiAnQ0FSUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuRXVyb3N0YXIsXG4gICAgICB0ZXh0OiAnRVVST1NUQVInLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkludGVybmF0aW9uYWxSYWlsLFxuICAgICAgdGV4dDogJ0lOVEVSTkFUSU9OQUwgUkFJTCcsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuUGFya2luZyxcbiAgICAgIHRleHQ6ICdQQVJLSU5HJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiBTZXJ2aWNlVHlwZS5Mb3VuZ2UsXG4gICAgICB0ZXh0OiAnTE9VTkdFUycsXG4gICAgICBwcmljZTogMCxcbiAgICAgIGNvMjogMFxuICAgIH0sXG4gICAge1xuICAgICAgdHlwZTogU2VydmljZVR5cGUuQ29hY2gsXG4gICAgICB0ZXh0OiAnQ09BQ0gnLFxuICAgICAgcHJpY2U6IDAsXG4gICAgICBjbzI6IDBcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6IFNlcnZpY2VUeXBlLkZhc3RUcmFjayxcbiAgICAgIHRleHQ6ICdGQVNUX1RSQUNLJyxcbiAgICAgIHByaWNlOiAwLFxuICAgICAgY28yOiAwXG4gICAgfVxuICBdO1xuXG4gIGJhc2tldFByaWNlczogQmVoYXZpb3JTdWJqZWN0PEJhc2tldFByaWNlcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldFByaWNlcz4oe1xuICAgIHRvdGFsOiBudWxsLFxuICAgIHRvdGFsQ28yOiBudWxsLFxuICAgIGxpc3Q6IHRoaXMuYmFza2V0TGlzdFxuICB9KTtcblxuICBtZW51U3RhdGUgPSBNZW51U2xpZGVFbnVtLk9VVDtcbiAgcHJpdmF0ZSByZXF1aXJlc1NlcnZpY2U6IEJhc2VSZXF1aXJlc1JlYXNvblNlcnZpY2U7XG4gIHByaXZhdGUgcmVxdWlyZXNPdmVycmlkZVNlcnZpY2U6IEJhc2VSZXF1aXJlc092ZXJyaWRlUmVhc29uU2VydmljZTtcbiAgcHJpdmF0ZSB1c2VyQ3VycmVuY3kgPSAnR0JQJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjY2VwdE5ld1ByaWNlVXBkYXRlcjogQmFzZUFjY2VwdE5ld1ByaWNlVXBkYXRlcjxBTlBVX1E+LFxuICAgIHByaXZhdGUgYWRkSXRlbVRvQmFza2V0VXBkYXRlcjogQmFzZUFkZEl0ZW1Ub0Jhc2tldFVwZGF0ZXI8QUlUQl9RPixcbiAgICBwcml2YXRlIGFkZFVzZXJUb0Jhc2tldEl0ZW06IEJhc2VBZGRVc2VyVG9CYXNrZXRJdGVtVXBkYXRlcjxBVVRCX1E+LFxuICAgIHByaXZhdGUgYmFza2V0Q3JlYXRvcjogQmFzZUNyZWF0ZUJhc2tldFVwZGF0ZXI8Q0JfUT4sXG4gICAgcHVibGljIGJhc2tldEZldGNoZXI6IEJhc2VHZXRCYXNrZXRGZXRjaGVyPEdCX1E+LFxuICAgIHByaXZhdGUgYm9va0Jhc2tldFVwZGF0ZXI6IEJhc2VCb29rQmFza2V0VXBkYXRlcjxCQl9RPixcbiAgICBwcml2YXRlIGRlbGV0ZUJhc2tldFVwZGF0ZXI6IEJhc2VEZWxldGVCYXNrZXRVcGRhdGVyPERCX1E+LFxuICAgIHByaXZhdGUgZ2V0TWlBdXRvU3VnZXN0aW9uRmV0Y2hlcjogQmFzZUdldE1pQXV0b1N1Z2VzdGlvbkZldGNoZXI8R0FTX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlckRlZmF1bHRNSVZhbHVlRmV0Y2hlcjogQmFzZUdldFVzZXJEZWZhdWx0TUlWYWx1ZUZldGNoZXI8R1VETVZfUT4sXG4gICAgcHJpdmF0ZSBoZWxwZXJzOiBCYXNlSGVscGVyUm91dGluZXMsXG4gICAgcHJpdmF0ZSByZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXI6IEJhc2VSZW1vdmVJdGVtRnJvbUJhc2tldFVwZGF0ZXI8UklCX1E+LFxuICAgIHByaXZhdGUgcmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXI6IEJhc2VSZXZhbGlkYXRlQmFza2V0VXBkYXRlcjxSVkJfUT4sXG4gICAgcHJpdmF0ZSBzZXRCYXNrZXRJdGVtTWlHcm91cFVwZGF0ZXI6IEJhc2VTZXRCYXNrZXRJdGVtTWlHcm91cFVwZGF0ZXI8U0JNSV9RPixcbiAgICBwcml2YXRlIHNldEJhc2tldEl0ZW1NaVZhbHVlVXBkYXRlcjogQmFzZVNldEJhc2tldEl0ZW1NaVZhbHVlVXBkYXRlcjxTVk1JX1E+LFxuICAgIHByaXZhdGUgc2V0QmFza2V0SXRlbU11bHRpcGxlTWlWYWx1ZVVwZGF0ZXI6IEJhc2VTZXRCYXNrZXRJdGVtTXVsdGlwbGVNaVZhbHVlVXBkYXRlcjxTQklNTUlfUT4sXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZU1pRnJlZVZhbHVlOiBCYXNlVmFsaWRhdGVNaUZyZWVWYWx1ZVRlc3RlcjxWTUlfUT4sXG4gICAgcHJpdmF0ZSBzZW5kQmFza2V0Rm9yQXBwcm92YWxVcGRhdGVyOiBCYXNlU2VuZEJhc2tldEZvckFwcHJvdmFsVXBkYXRlcjxTQkFfUT4sXG5cbiAgICBwcml2YXRlIGdldFVzZXJGZXRjaGVyOiBCYXNlR2V0VXNlckZldGNoZXI8R1VfUT4sXG4gICAgcHJpdmF0ZSBnZXRVc2VyQmFza2V0c0ZldGNoZXI6IEJhc2VHZXRVc2VyQmFza2V0c0ZldGNoZXI8R1VCX1E+LFxuICAgIHByaXZhdGUgU2V0QmFza2V0SXRlbUxlYWRQYXNzZW5nZXI6IEJhc2VTZXRCYXNrZXRJdGVtTGVhZFBhc3NlbmdlclVwZGF0ZXI8U0JMUF9RPixcbiAgICBwcml2YXRlIG1vdmVJdGVtVG9BRGlmZmVyZW50QmFza2V0OiBCYXNlbW92ZUJhc2tldEl0ZW1Ub0Jhc2tldDxNSVREQl9RPixcbiAgICBwcml2YXRlIHVwZGF0ZUJhc2tldE5vdGVzVXBkYXRlcjogQmFzZVVwZGF0ZUJhc2tldE5vdGVVcGRhdGVyPFVCTl9RPixcbiAgICBwcml2YXRlIHVwZGF0ZUJhc2tldFRpdGxlVXBkYXRlcjogQmFzZVVwZGF0ZUJhc2tldFRpdGxlVXBkYXRlcjxVQlRfUT4sXG4gICAgcHJpdmF0ZSBzZXRQYXltZW50TWV0aG9kVXBkYXRlcjogQmFzZVNldFBheW1lbnRPcHRpb25VcGRhdGVyPFNCTV9RPixcbiAgICBwcml2YXRlIGdldENhbmNlbGxhdGlvbkluZm9GZXRjaGVyOiBCYXNlR2V0Q2FuY2VsbGF0aW9uSW5mb0ZldGNoZXI8R0NJX1E+LFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlSW50ZXJmYWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCYXNlTW9kYWxPcGVuZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWRkR3Vlc3RUb0Jhc2tldEl0ZW06IEJhc2VBZGRHdWVzdFRvQmFza2V0SXRlbVVwZGF0ZXI8QUdUQl9RPixcbiAgICBwcml2YXRlIGFkZFVwZGF0ZWRJdGVtVG9CYXNrZXRVcGRhdGVyOiBCYXNlQWRkVXBkYXRlZEl0ZW1Ub0Jhc2tldFVwZGF0ZXI8QVVJQl9RPixcbiAgICBwcml2YXRlIGNyZWF0ZUJhc2tldE5vdGU6IEJhc2VDcmVhdGVCYXNrZXROb3RlVXBkYXRlcjxDQk5fUT4sXG4gICAgcHJpdmF0ZSBnZXRCYXNrZXROb3RlczogQmFzZUdldEJhc2tldE5vdGVzRmV0Y2hlcjxHQk5GX1E+LFxuICAgIHByaXZhdGUgYWRkQmFza2V0SXRlbU1hcmt1cFVwZGF0ZXI6IEJhc2VBZGRCYXNrZXRJdGVtTWFya3VwVXBkYXRlcjxBTV9RPixcbiAgICBwcml2YXRlIGFkZEJhc2tldEl0ZW1DdXN0b21SZW1hcms6IEJhc2VBZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrVXBkYXRlcjxBQklDUl9RPixcbiAgICBwcml2YXRlIGdldEJhc2tldEl0ZW1DdXN0b21SZW1hcmtzOiBCYXNlR2V0QmFza2V0SXRlbUN1c3RvbVJlbWFya3NGZXRjaGVyPEdCSUNfUT4sXG4gICAgcHJpdmF0ZSBjaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyOiBCYXNlQ2hhbmdlQmFza2V0T3duZXJzaGlwVXBkYXRlcjxDQk9VX1E+LFxuICAgIHByaXZhdGUgZ2V0QmFza2V0UXVvdGVGZXRjaGVyOiBCYXNlR2V0QmFza2V0UXVvdGVGZXRjaGVyPEdCUUZfUT4sXG4gICAgcHJpdmF0ZSByZXNlbmRBcHByb3ZlckVtYWlsOiBCYXNlUmVzZW5kQXBwcm92ZXJFbWFpbEZldGNoZXI8UkFFX1E+LFxuICAgIHByaXZhdGUgYmFza2V0UmVxdWlyZXNBcHByb3ZhbDogQmFzZUNoZWNrSWZCYXNrZXRSZXF1aXJlc0FwcHJvdmFsRmV0Y2hlcjxDSUJSQV9RPixcbiAgICBwcml2YXRlIGdldFVzZXJNaUF1dG9TdWdnZXN0VXNlclByZWZlcmVuY2VzRmV0Y2hlcjogQmFzZUdldFVzZXJNaUF1dG9TdWdlc3Rpb25Vc2VyUHJlZmVyZW5jZXNGZXRjaGVyPEdVTUlfUT4sXG4gICAgcHJpdmF0ZSBnZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyOiBCYXNlR2V0T2ZmaWNlQXBwcm92ZXJzRmV0Y2hlcjxHT0FGX1E+LFxuICAgIHByaXZhdGUgc2VsZWN0QmFza2V0QXBwcm92ZXJVcGRhdGVyOiBCYXNlU2VsZWN0QmFza2V0QXBwcm92ZXJVcGRhdGVyPFNCQV9VPixcbiAgICBwcml2YXRlIGdldERyYWZ0QmFza2V0c0ZldGNoZXI6IEJhc2VHZXREcmFmdEJhc2tldHNGZXRjaGVyPEdEQl9RPixcbiAgICBwcml2YXRlIGNyZWF0ZUJhc2tldEZyb21EcmFmdFVwZGF0ZXI6IEJhc2VDcmVhdGVCYXNrZXRGcm9tRHJhZnRVcGRhdGVyPENCRkRfUT4sXG4gICAgcHJpdmF0ZSBzZWxlY3RCYXNrZXROb3RpZnlBcHByb3ZlclVwZGF0ZXI6IEJhc2VTZWxlY3RCYXNrZXROb3RpZnlBcHByb3ZlclVwZGF0ZXI8U0JOQV9VPixcbiAgICBwcml2YXRlIGNhbkFtZW5kQm9va2luZ0luZm9GZXRjaGVyOiBCYXNlQ2FuQW1lbmRCb29raW5nRmV0Y2hlcjxDQUJfUT4sXG4gICAgcHJpdmF0ZSBnZXRVc2VyQXBwcm92ZXJzRmV0Y2hlcjogQmFzZUdldFVzZXJBcHByb3ZlcnNGZXRjaGVyPEdVQUZfUT4sXG4gICAgcHJpdmF0ZSBzaGFyZUJhc2tldFVwZGF0ZXI6IEJhc2VTaGFyZUJhc2tldFVwZGF0ZXI8U0JVX1E+LFxuICAgIHByaXZhdGUgZ2V0VXNlclNoYXJlZEJhc2tldHNGZXRjaGVyOiBCYXNlR2V0VXNlclNoYXJlZEJhc2tldHNGZXRjaGVyPEdVU0JfUT4sXG4gICAgcHJvdGVjdGVkIHN0b3JhZ2VTZXJ2aWNlOiBCYXNlU3RvcmFnZVNlcnZpY2UsXG5cbiAgKSB7XG4gICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UgPSBuZXcgQmFzZVJlcXVpcmVzUmVhc29uU2VydmljZShtb2RhbFNlcnZpY2UsIHRoaXMpO1xuICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2UgPSBuZXcgQmFzZVJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlKG1vZGFsU2VydmljZSwgdGhpcyk7XG4gICAgdGhpcy51c2VyU2VydmljZS5jaGFuZ2VVc2VyLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldFJlcXVpcmVzUmVhc29uU2VydmljZSgpOiBSZXF1aXJlc1JlYXNvblNlcnZpY2VJbnRlcmZhY2Uge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVzU2VydmljZTtcbiAgfVxuXG4gIGdldFJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlKCk6IFJlcXVpcmVzT3ZlcnJpZGVSZWFzb25TZXJ2aWNlSW50ZXJmYWNlIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS5nZXRmdWxsVXNlckRldGFpbHMoZmFsc2UpLnVzZXJEYXRhLnZhbHVlKSB7XG4gICAgICB0aGlzLmdldFVzZXJCYXNrZXRzRmV0Y2hlclxuICAgICAgICAuZmV0Y2hMaXN0KHtcbiAgICAgICAgICBiYXNrZXRTdGF0dXNlczogW0Jhc2tldFN0YXR1cy5PcGVuXSxcbiAgICAgICAgICB1c2VyOiB0aGlzLnVzZXJTZXJ2aWNlLmdldGZ1bGxVc2VyRGV0YWlscyh0cnVlKS51c2VyRGF0YS52YWx1ZS51c2VyX2lkLnRvU3RyaW5nKClcbiAgICAgICAgfSlcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0czogVXNlckJhc2tldFJlc3VsdFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5maWx0ZXIoXG4gICAgICAgICAgICAgIChiYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+KSA9PlxuICAgICAgICAgICAgICAgIGJhc2tldC5zdWJqZWN0LnZhbHVlLnN0YXR1cyA9PT0gQmFza2V0U3RhdHVzLk9wZW4gfHwgIWJhc2tldC5zdWJqZWN0LnZhbHVlLnN0YXR1c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBjdXJyZW50QmFza2V0cyA9IGJhc2tldHMubWFwKChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGJhc2tldCkge1xuICAgICAgICAgICAgICAgIGxldCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0LmlkKTtcbiAgICAgICAgICAgICAgICBpZiAoIWludEJhc2tldCkge1xuICAgICAgICAgICAgICAgICAgaW50QmFza2V0ID0gdGhpcy5jcmVhdGVJbnRCYXNrZXQoYmFza2V0KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMucHVzaChpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaW50QmFza2V0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbGV0IGN1cnJlbnRCYXNrZXRzQ29weSA9IHRoaXMuaGVscGVycy5jbG9uZShjdXJyZW50QmFza2V0cyk7XG4gICAgICAgICAgICBpZiAoIXRoaXMudXNlclNlcnZpY2UuYm9ibykge1xuICAgICAgICAgICAgICAvLyByZW1vdmUgYmFza2VzdCB3aXRoIGludm9rZWQgdXNlciBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbnZva2luZyBhIHVzZXIgLy8gPyAtIHNob3VsZCB3ZSBkbyB0aGUgb3Bwb3NpdGUgYXMgd2VsbD9cbiAgICAgICAgICAgICAgY3VycmVudEJhc2tldHNDb3B5ID0gY3VycmVudEJhc2tldHNDb3B5LmZpbHRlcihcbiAgICAgICAgICAgICAgICBiYXNrZXQgPT4gIWJhc2tldC5zdWJqZWN0LnZhbHVlLmludm9rZWRVc2VyXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgdGhpcy5iYXNrZXRzLm5leHQoY3VycmVudEJhc2tldHMpOyAvLyB1cGRhdGUgYmFza2V0IGJlZm9yZSBjdXJyZW50QmFza2V0SUQgdXBkYXRlIGJhc2tldENoYW5nZUVtaXR0ZXIgd2l0aCB0aGUgb2xkIGJhc2tldFxuXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50QmFza2V0c0NvcHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRJRCBleGlzdHMgLSBkb24ndCByZXBsYWNlIGN1cnJlbnRCYXNrZXRJRCB3aXRoIGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZCAoaWYgbXVsdGlwbGUgc2VydmljZXMsIHdlIG11c3QgaGF2ZSBhIHNwZWNpZmljIGN1cnJlbnRCYXNrZXRJRClcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IHRoaXMuY3VycmVudEJhc2tldElEIHx8IGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRzIGl0ZW1zIGRvbid0IGhhdmUgY3VycmVudEJhc2tldElEIHJlc2V0IGN1cnJlbnRCYXNrZXRJRCBFTlQtNDk1OVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmFza2V0cy5ldmVyeShiYXNrZXQgPT4gYmFza2V0LmlkICE9PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCkgJiYgdGhpcy5jdXJyZW50QmFza2V0cy5ldmVyeShiYXNrZXQgPT4gYmFza2V0LmlkICE9PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCkpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gY3VycmVudEJhc2tldHNbMF0uaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRJRCBleGlzdHMgLSBkb24ndCByZXBsYWNlIGN1cnJlbnRCYXNrZXRJRCB3aXRoIGN1cnJlbnRCYXNrZXRzQ29weVswXS5pZCAoaWYgbXVsdGlwbGUgc2VydmljZXMsIHdlIG11c3QgaGF2ZSBhIHNwZWNpZmljIGN1cnJlbnRCYXNrZXRJRCBFTlQtNDY2MSlcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IHRoaXMuY3VycmVudEJhc2tldElEIHx8IGN1cnJlbnRCYXNrZXRzWzBdLmlkO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gbnVsbDtcbiAgICAgICAgICAgICAgfSAvLyB3YW50IHRvIGtlZXAgdGhlIGludm9rZWQgYmFza2V0c1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJhc2tldHMubmV4dChjdXJyZW50QmFza2V0cyk7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50QmFza2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIGlmIGN1cnJlbnRCYXNrZXRzIGl0ZW1zIGRvbid0IGhhdmUgY3VycmVudEJhc2tldElEIHJlc2V0IGN1cnJlbnRCYXNrZXRJRCBFTlQtNDk1OVxuICAgICAgICAgICAgICBpZiAoY3VycmVudEJhc2tldHMuZXZlcnkoYmFza2V0ID0+IGJhc2tldC5pZCAhPT0gdGhpcy5jdXJyZW50QmFza2V0SUQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBjdXJyZW50QmFza2V0c1swXS5pZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBpZiBjdXJyZW50QmFza2V0SUQgZXhpc3RzIC0gZG9uJ3QgcmVwbGFjZSBjdXJyZW50QmFza2V0SUQgd2l0aCBjdXJyZW50QmFza2V0c0NvcHlbMF0uaWQgKGlmIG11bHRpcGxlIHNlcnZpY2VzLCB3ZSBtdXN0IGhhdmUgYSBzcGVjaWZpYyBjdXJyZW50QmFza2V0SUQgRU5ULTQ2NjEpXG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gdGhpcy5jdXJyZW50QmFza2V0SUQgfHwgY3VycmVudEJhc2tldHNbMF0uaWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLmZvckVhY2goKGJhc2tldDogSW50ZXJuYWxCYXNrZXRJbnRlcmZhY2UpID0+XG4gICAgICAgIGJhc2tldC5zdWJqZWN0LnVuc3Vic2NyaWJlKClcbiAgICAgICk7XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gW107XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRJRCA9IG51bGw7XG4gICAgICB0aGlzLmJhc2tldHMubmV4dCh0aGlzLmN1cnJlbnRCYXNrZXRzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWxsT3BlbkJhc2tldHModXNlcl9pZDogc3RyaW5nKTogUHJvbWlzZTxVc2VyQmFza2V0UmVzdWx0W10+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRVc2VyQmFza2V0c0ZldGNoZXJcbiAgICAgIC5mZXRjaExpc3QoeyBiYXNrZXRTdGF0dXNlczogW0Jhc2tldFN0YXR1cy5PcGVuXSwgdXNlcjogdXNlcl9pZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcCgocmVzdWx0czogVXNlckJhc2tldFJlc3VsdFtdKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXN1bHRzLmZvckVhY2goKHJlc3VsdDogVXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuZmluZEJhc2tldChyZXN1bHQuaWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50QmFza2V0ID0gbmV3IEludGVybmFsQmFza2V0KFxuICAgICAgICAgICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgdGhpcy5oZWxwZXJzLFxuICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VXNlckZldGNoZXIsXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlcXVpcmVzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMucHVzaChpbnRCYXNrZXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUb0Jhc2tldChcbiAgICBpdGVtOiBBZGRJdGVtVG9CYXNrZXQuVmFyaWFibGVzLFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4sXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10gPSBbXSxcbiAgICByZXF1aXJlc1JlYXNvbjogYm9vbGVhbixcbiAgICBpbnZva2VkU3BsaXQ/OiBib29sZWFuLFxuICAgIGlnbm9yZUludm9rZWRDaGVjaz86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zPiB7XG4gICAgY29uc29sZS53YXJuKCcrKysgQXR0ZW1wdGluZyB0byBhZGQgaXRlbSB0byBiYXNrZXQ6ICcsIGl0ZW0sICcgKysrJyk7XG5cbiAgICBpZiAoaW52b2tlZFNwbGl0KSB7XG4gICAgICAvLyBFTlQtNjk0MyBkbyB0aGlzIHNvIHdlIHVzZSB0aGUgaW50QmFza2V0IGlmIHdlIGhhdmUgb25lLCBoYWQgYW4gaXNzdWUgYWRkaW5nIHRvIGJhc2tldCB3aXRoIG5vIGN1cnJlbnRCYWtldElEIGJ1dCB3ZSBkaWQgaGF2ZSBpbnRiYXNrZXRcbiAgICAgIGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldCh0aGlzLmN1cnJlbnRCYXNrZXRJRCkgfHwgaW50QmFza2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpIHx8IGludEJhc2tldDtcbiAgICAgIHN3aXRjaCAoXG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tCYXNrZXRGb3JJbnZva2VkKGludEJhc2tldCwgdGhpcy51c2VyU2VydmljZS5ib2JvLCBpZ25vcmVJbnZva2VkQ2hlY2spXG4gICAgICApIHtcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNvbnRpbnVlOlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY2FuY2VsOlxuICAgICAgICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLm5ld0Jhc2tldDpcbiAgICAgICAgICBpbnRCYXNrZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2tldCgpO1xuICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldElEID0gaW50QmFza2V0LmlkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMucmVzZWFyY2g6XG4gICAgICAgICAgaWYgKGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmludm9rZWRVc2VyKSB7XG4gICAgICAgICAgICBjb25zdCBpbnZva2VkVXNlciA9IGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zWzBdLnVzZXJzLmZpbmQoXG4gICAgICAgICAgICAgIHVzZXIgPT4gdXNlci5pZCA9PT0gaW50QmFza2V0LnN1YmplY3QudmFsdWUuaW52b2tlZFVzZXIuaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnNldEJvYm8oVHJhdmVsbGVyT2JqZWN0Lm1ha2VUcmF2ZWxsZXJPYmplY3RGcm9tVXNlcihpbnZva2VkVXNlcikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgYm9ib1xuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5zZXRCb2JvKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5yZXNlYXJjaDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzYW1lVHJhdmVsbGVzclBlckJhc2tldDogYW55ID0gdGhpcy51c2VyU2VydmljZS5nZXRVc2VyRmF2b3JpdGVPYmplY3QoXG4gICAgICBVc2VyRmF2b3J1cml0ZS5BbGxvd1NhbWVUcmF2ZWxsZXNyUGVyQmFza2V0XG4gICAgKVxuICAgICAgPyB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdChVc2VyRmF2b3J1cml0ZS5BbGxvd1NhbWVUcmF2ZWxsZXNyUGVyQmFza2V0KVxuICAgICAgOiBbXTtcblxuICAgIGNvbnNvbGUubG9nKHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0KTtcblxuICAgIGlmIChcbiAgICAgIHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0ICYmXG4gICAgICBzYW1lVHJhdmVsbGVzclBlckJhc2tldFsnc2FtZVRyYXZlbGxlcnMnXSAmJlxuICAgICAgdHJhdmVsbGVycyAmJlxuICAgICAgdHJhdmVsbGVycy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZygnKysrIFNhbWUgVHJhdmVsbGVycyBpcyBFbmFibGVkICsrKycpO1xuICAgICAgc3dpdGNoIChcbiAgICAgICAgYXdhaXQgdGhpcy5pc1NhbWVUcmF2ZWxsZXNyUGVyQmFza2V0KFxuICAgICAgICAgIGludEJhc2tldCxcbiAgICAgICAgICB0cmF2ZWxsZXJzLFxuICAgICAgICAgIHNhbWVUcmF2ZWxsZXNyUGVyQmFza2V0WydzYW1lVHJhdmVsbGVycyddXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBjYXNlIERpZmZlcmVudFRyYXZlbGxlci5jb250aW51ZTpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRUcmF2ZWxsZXIuY2FuY2VsOlxuICAgICAgICAgIHJldHVybiBEaWZmZXJlbnRJbnZva2RlZFVzZXJSZWFzb25zLmNhbmNlbDtcbiAgICAgICAgY2FzZSBEaWZmZXJlbnRUcmF2ZWxsZXIubmV3QmFza2V0OlxuICAgICAgICAgIGludEJhc2tldCA9IGF3YWl0IHRoaXMuY3JlYXRlQmFza2V0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSBpbnRCYXNrZXQuaWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaXRlbS5iYXNrZXQgPSBpbnRCYXNrZXQuaWQ7XG4gICAgaXRlbS5jb252ZXJ0Q3VycmVuY3lUbyA9ICdHQlAnO1xuICAgIGlmICh0cmF2ZWxsZXJzPy5sZW5ndGggPiAwKSB7XG4gICAgICBpdGVtLnVzZXJzID0gdGhpcy5oZWxwZXJzLm1ha2VVc2Vycyh0cmF2ZWxsZXJzLmZpbHRlcih0cmF2ID0+ICF0cmF2Lmd1ZXN0KSk7XG4gICAgICBpdGVtLmd1ZXN0cyA9IHRoaXMuaGVscGVycy5tYWtlVXNlcnModHJhdmVsbGVycy5maWx0ZXIodHJhdiA9PiB0cmF2Lmd1ZXN0KSk7XG4gICAgICBpdGVtLmxlYWRQYXNzZW5nZXIgPSB0cmF2ZWxsZXJzWzBdLmlkO1xuICAgICAgaXRlbS5sZWFkUGFzc2VuZ2VyVHlwZSA9IHRyYXZlbGxlcnNbMF0uZ3Vlc3RcbiAgICAgICAgPyBMZWFkUGFzc2VuZ2VyVHlwZS5HdWVzdFxuICAgICAgICA6IExlYWRQYXNzZW5nZXJUeXBlLlVzZXI7XG4gICAgfVxuICAgIGl0ZW0ub3V0Ym91bmREYXRlID0gaXRlbS5vdXRib3VuZERhdGVcbiAgICAgID8gbmV3IERhdGUodGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGVUaW1lKGl0ZW0ub3V0Ym91bmREYXRlKSlcbiAgICAgIDogaXRlbS5vdXRib3VuZERhdGU7XG4gICAgaXRlbS5pbmJvdW5kRGF0ZSA9IGl0ZW0uaW5ib3VuZERhdGVcbiAgICAgID8gbmV3IERhdGUodGhpcy5oZWxwZXJzLmZvcm1hdElzb0RhdGVUaW1lKGl0ZW0uaW5ib3VuZERhdGUpKVxuICAgICAgOiBpdGVtLmluYm91bmREYXRlO1xuXG4gICAgaXRlbS5yZXF1aXJlc1JlYXNvbiA9IHJlcXVpcmVzUmVhc29uO1xuICAgIGl0ZW0gPSB0aGlzLmNoZWNrRGV0YWlscyhpdGVtKTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnVzZXJTZXJ2aWNlLmZpbmRTZXJ2aWNlKGl0ZW0uc2VydmljZSkudHlwZTtcblxuICAgIHRoaXMucmVtb3ZlQm9va2VkQmFza2V0KCk7XG5cbiAgICBpZiAoaXRlbSAmJiBpbnRCYXNrZXQpIHtcbiAgICAgIHRoaXMuYWRkaW5nVG9CYXNrZXQubmV4dCh0cnVlKTtcbiAgICAgIGF3YWl0IHRoaXMuYWRkSXRlbVRvQmFza2V0VXBkYXRlclxuICAgICAgICAudXBkYXRlT25lKGl0ZW0pXG4gICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICAudGhlbihcbiAgICAgICAgICAobmV3QmFza2V0OiBQYXJ0aWFsPFVzZXJCYXNrZXRSZXN1bHQ+KSA9PiB7XG4gICAgICAgICAgICAvLyBkb24ndCBuZWVkIG1pIGhlcmVcbiAgICAgICAgICAgIGludEJhc2tldC5uZXh0KHtcbiAgICAgICAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZWFyY2hTZXJ2aWNlLnNlYXJjaF9vYmplY3RzW3NlcnZpY2VdLmJvb2tpbmdfY2hvc2VuID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlYXJjaFNlcnZpY2Uuc2VhcmNoX29iamVjdHNbc2VydmljZV0uY2hvc2VuID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBiaTogR2V0VXNlckJhc2tldEl0ZW1SZXN1bHRbXSA9IG5ld0Jhc2tldC5iYXNrZXRJdGVtcztcbiAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0QmFza2V0SXRlbXNFbWl0dGVyLm5leHQoYmkpO1xuICAgICAgICAgICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQobmV3QmFza2V0LmlkKTtcbiAgICAgICAgICAgIHRoaXMuYWRkaW5nVG9CYXNrZXQubmV4dChmYWxzZSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgKysrIEN1cnJlbnRseSBBZGRpbmc6ICR7dGhpcy5pdGVtc0N1cnJlbnRseUJlaW5nQWRkZWR9IGl0ZW1zICsrK2ApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJysrKyBBZGQgSXRlbSB0byBCYXNrZXQgQ2FsbCBGaW5pc2hlZCEgKysrJyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChpbnRCYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmFkZGluZ1RvQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMuY29udGludWU7XG4gIH1cblxuICBjaGVja0Jhc2tldEZvckludm9rZWQoXG4gICAgaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPixcbiAgICBib2JvOiBUcmF2ZWxsZXIsXG4gICAgaWdub3JlSW52b2tlZENoZWNrOiBib29sZWFuXG4gICk6IFByb21pc2U8RGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucz4ge1xuICAgIC8vIHRoaXMgY2hhbmdlIGlzIHBvdGVudGlhbGx5IHRoZSByZWFzb24gd2h5IHdlIHNvbWV0aW1lcyBnZXQgYW4gZXJyb3IgYWRkaW5nIHRvIGJhc2tldCwgbm8gaW50QmFza2V0XG4gICAgaWYgKGludEJhc2tldCAmJiBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZT8uaW52b2tlZFVzZXI/LmlkICE9PSBib2JvPy5pZCkge1xuICAgICAgaWYgKGlnbm9yZUludm9rZWRDaGVjaykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKERpZmZlcmVudEludm9rZGVkVXNlclJlYXNvbnMubmV3QmFza2V0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICAgIE1vZGFsVHlwZXMuRGlmZmVyZW50SW52b2tkZWRVc2VyQ29tcG9uZW50LFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgIGJhc2tldEJvYm86IGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmludm9rZWRVc2VyLFxuICAgICAgICAgIGN1cnJlbnRCb2JvOiBib2JvXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50SW52b2tkZWRVc2VyUmVhc29ucy5jb250aW51ZSk7XG4gIH1cblxuICBpc1NhbWVUcmF2ZWxsZXNyUGVyQmFza2V0KFxuICAgIGludEJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4sXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyW10sXG4gICAgc2FtZVRyYXZlbGxlc3JQZXJCYXNrZXQ6IG51bWJlclxuICApOiBQcm9taXNlPERpZmZlcmVudFRyYXZlbGxlcj4ge1xuICAgIGxldCBzYW1lVHJhdmVsbGVyczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCB1bmlxdWVVc2VyczogVXNlcltdID0gW107XG4gICAgbGV0IHVuaXF1ZVVzZXJzSWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zLmZvckVhY2goKGJhc2tldDogQmFza2V0SXRlbSkgPT4ge1xuICAgICAgYmFza2V0LnVzZXJzLmZvckVhY2goKHVzZXI6IFVzZXIpID0+IHtcbiAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSB1bmlxdWVVc2Vycy5zb21lKChleGlzdGluZ1VzZXI6IFVzZXIpID0+IGV4aXN0aW5nVXNlci5pZCA9PT0gdXNlci5pZCk7XG5cbiAgICAgICAgaWYgKCFpc0R1cGxpY2F0ZSkge1xuICAgICAgICAgIHVuaXF1ZVVzZXJzLnB1c2godXNlcik7XG4gICAgICAgICAgdW5pcXVlVXNlcnNJZHMucHVzaCh1c2VyLmlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0cmF2ZWxsZXJzLmZvckVhY2goKHRyYXZlbGxlcjogVHJhdmVsbGVyKSA9PiB7XG4gICAgICAgIGlmICghdW5pcXVlVXNlcnNJZHMuc29tZSgoaWQ6IHN0cmluZykgPT4gaWQgPT09IHRyYXZlbGxlci5pZCkpIHtcbiAgICAgICAgICB1bmlxdWVVc2Vyc0lkcy5wdXNoKHRyYXZlbGxlci5pZCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBzYW1lVHJhdmVsbGVycyA9IHVuaXF1ZVVzZXJzSWRzLmxlbmd0aCA8PSBzYW1lVHJhdmVsbGVzclBlckJhc2tldDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgKysrIEVycm9yIGRldGVybWVuaW5nIHNhbWUgdHJhdmVsbGVyczogJHtlcnJvcn0gKysrYCk7XG4gICAgfVxuXG4gICAgaWYgKGludEJhc2tldC5zdWJqZWN0LnZhbHVlLmJhc2tldEl0ZW1zLmxlbmd0aCA+IDAgJiYgIXNhbWVUcmF2ZWxsZXJzKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgTW9kYWxUeXBlcy5EaWZmZXJlbnRUcmF2ZWxsZXJQZXJCYXNrZXRDb21wb25lbnQsXG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgdXNlckluQmFza2V0OiB1bmlxdWVVc2VycyxcbiAgICAgICAgICB0cmF2ZWxsZXJzOiB0cmF2ZWxsZXJzXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoRGlmZmVyZW50VHJhdmVsbGVyLmNvbnRpbnVlKTtcbiAgfVxuXG4gIGxvYWRCYXNrZXQoaWQ6IHN0cmluZywgZm9yY2Vsb2FkOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBsZXQgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGlkKTtcbiAgICBpZiAoIWludEJhc2tldCB8fCBmb3JjZWxvYWQpIHtcbiAgICAgIGludEJhc2tldCA9IG5ldyBJbnRlcm5hbEJhc2tldChcbiAgICAgICAge1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIGJhc2tldEl0ZW1zOiBbXVxuICAgICAgICB9IGFzIEJhc2tldERldGFpbHMsXG4gICAgICAgIHRoaXMuaGVscGVycyxcbiAgICAgICAgdGhpcyxcbiAgICAgICAgdGhpcy5nZXRVc2VyRmV0Y2hlcixcbiAgICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UsXG4gICAgICAgIHRoaXMucmVxdWlyZXNPdmVycmlkZVNlcnZpY2VcbiAgICAgICk7XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2goaW50QmFza2V0KTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVuY3lPYmplY3QgPSB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJGYXZvcml0ZU9iamVjdDx7XG4gICAgICBjdXJyZW5jeTogc3RyaW5nO1xuICAgICAgaG90ZWw6IHtcbiAgICAgICAgZW5hYmxlOiBib29sZWFuO1xuICAgICAgfTtcbiAgICAgIGNhcmhpcmU6IHtcbiAgICAgICAgZW5hYmxlOiBib29sZWFuO1xuICAgICAgfTtcbiAgICB9PihVc2VyRmF2b3J1cml0ZS5QcmVmZXJyZWRDdXJyZW5jeSk7XG4gICAgaWYgKGN1cnJlbmN5T2JqZWN0Py5ob3RlbD8uZW5hYmxlIHx8IGN1cnJlbmN5T2JqZWN0Py5jYXJoaXJlPy5lbmFibGUpIHtcbiAgICAgIHRoaXMudXNlckN1cnJlbmN5ID0gY3VycmVuY3lPYmplY3QuY3VycmVuY3k7XG4gICAgfVxuXG4gICAgdGhpcy5iYXNrZXRGZXRjaGVyXG4gICAgICAuZmV0Y2hPbmUoeyBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksIGlkLCB3aXRoU3VwcGxlbWVudGFsOiB0cnVlIH0pXG4gICAgICAuc3Vic2NyaWJlKChuZXdCYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpID0+IHtcbiAgICAgICAgLy8gRU5ULTY4OTkgcmVtb3ZlZCB0aGlzIGFzIGl0IHNlZW1lZCBsaWtlIGRvdWJsaW5nIGl0XG4gICAgICAgIC8vIGludEJhc2tldC5uZXh0KG5ld0Jhc2tldCk7XG4gICAgICAgIC8vIGRvbid0IG5lZWQgbWkgaGVyZVxuICAgICAgICB0aGlzLnVwZGF0ZUJhc2tldChpZCwgb2YoPEJhc2tldERldGFpbHM+bmV3QmFza2V0KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHN1YnNyaWJlVG9CYXNrZXQoaWQ6IHN0cmluZywgb2JzZXJ2ZXI6IE9ic2VydmVyPEJhc2tldERldGFpbHM+KTogdm9pZCB7XG4gICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGlkKTtcbiAgICBpZiAoaW50QmFza2V0KSB7XG4gICAgICBpbnRCYXNrZXQuc3ViamVjdC5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUV4cGlyZWRJdGVtcyhpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGlkKTtcbiAgICBpbnRCYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtc1xuICAgICAgLmZpbHRlcigoYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICByZXR1cm4gYmFza2V0SXRlbS5sYXRlc3RWYWxpZGF0aW9uUHJpY2VEaWZmZXJlbmNlICE9PSAwIHx8IGJhc2tldEl0ZW0uZXhwaXJlZDtcbiAgICAgIH0pXG4gICAgICAuZm9yRWFjaCgoYmFza2V0SXRlbTogQmFza2V0SXRlbSkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZUJhc2tldEl0ZW0oaWQsIGJhc2tldEl0ZW0pO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyByZW1vdmVCYXNrZXRJdGVtKGJhc2tldElkOiBzdHJpbmcsIGl0ZW06IEdldFVzZXJCYXNrZXRJdGVtUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZW1vdmluZ0Zyb21CYXNrZXQubmV4dCh0cnVlKTtcbiAgICBjb25zdCBpbnRCYXNrZXQ6IEludGVybmFsQmFza2V0PEdVX1E+ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldElkKTtcbiAgICAvLyBpZiBpdCdzIGEgaG90ZWwgcmVtb3ZlIGFsbCBsaW5rZWQgaXRlbXNcbiAgICBpZiAoaXRlbT8uc2VydmljZT8udHlwZSA9PT0gU2VydmljZVR5cGUuSG90ZWwpIHtcbiAgICAgIGNvbnN0IGhvdGVsSXRlbXMgPSBpbnRCYXNrZXQ/LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMuZmlsdGVyKChiYXNrZXRJdGVtOiBCYXNrZXRJdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaXRlbS5kZXRhaWwuaG90ZWxJZCA9PT0gYmFza2V0SXRlbS5kZXRhaWwuaG90ZWxJZCAmJlxuICAgICAgICAgIGl0ZW0uZGV0YWlsLnJvb21zWzBdLmlkID09PSBiYXNrZXRJdGVtLmRldGFpbC5yb29tc1swXS5pZCAmJlxuICAgICAgICAgIGl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrSW4gPT09IGJhc2tldEl0ZW0uZGV0YWlsLnJvb21zWzBdLmNoZWNrSW4gJiZcbiAgICAgICAgICBpdGVtLmRldGFpbC5yb29tc1swXS5jaGVja091dCA9PT0gYmFza2V0SXRlbS5kZXRhaWwucm9vbXNbMF0uY2hlY2tPdXRcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGhvdGVsSXRlbXM/Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgLy8gRU5ULTI0NDcgbmV3IG1vZGFsIG1hZGUgaW4gTFUsIG5lZWRzIHRvIGJlIG1hZGUgaW4gYWxsIG9idHMgYW5kIGFwcCBvciB3aWxsIGdldCBlcnJvclxuICAgICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuV2FybmluZ1JlbW92ZU1vZGFsQ29tcG9uZW50KTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGhvdGVsSXRlbXMpIHtcbiAgICAgICAgICBjb25zdCBuZXdCYXNrZXQgPSBhd2FpdCB0aGlzLnJlbW92ZUl0ZW1Gcm9tQmFza2V0VXBkYXRlclxuICAgICAgICAgICAgLnVwZGF0ZU9uZSh7IGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSwgYmFza2V0SXRlbTogaXRlbS5pZCB9KS50b1Byb21pc2UoKTtcbiAgICAgICAgICAgICAgaWYgKG5ld0Jhc2tldCkge1xuICAgICAgICAgICAgICAgIGludEJhc2tldD8ubmV4dCh7XG4gICAgICAgICAgICAgICAgICAuLi5pbnRCYXNrZXQuc3ViamVjdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZpbmdGcm9tQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdCYXNrZXQgPSBhd2FpdCB0aGlzLnJlbW92ZUl0ZW1Gcm9tQmFza2V0VXBkYXRlclxuICAgICAgICAgIC51cGRhdGVPbmUoeyBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksIGJhc2tldEl0ZW06IGl0ZW0uaWQgfSkudG9Qcm9taXNlKCk7XG4gICAgICAgICAgICBpZiAobmV3QmFza2V0KSB7XG4gICAgICAgICAgICAgIGludEJhc2tldD8ubmV4dCh7XG4gICAgICAgICAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgICAgICAgICAgLi4ubmV3QmFza2V0XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLnJlbW92aW5nRnJvbUJhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgdGhpcy5iYXNrZXRDaGFuZ2VFbWl0dGVyLm5leHQoYmFza2V0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXdCYXNrZXQgPSBhd2FpdCB0aGlzLnJlbW92ZUl0ZW1Gcm9tQmFza2V0VXBkYXRlclxuICAgICAgICAudXBkYXRlT25lKHsgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LCBiYXNrZXRJdGVtOiBpdGVtLmlkIH0pLnRvUHJvbWlzZSgpO1xuXG4gICAgICAgICAgaWYgKG5ld0Jhc2tldCkge1xuICAgICAgICAgICAgaW50QmFza2V0Py5uZXh0KHtcbiAgICAgICAgICAgICAgLi4uaW50QmFza2V0LnN1YmplY3QudmFsdWUsXG4gICAgICAgICAgICAgIC4uLm5ld0Jhc2tldFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlbW92aW5nRnJvbUJhc2tldC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KGJhc2tldElkKTtcbiAgICAgICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGVmYXVsdEJhc2tldChcbiAgICBnZXRCb29rZWRCYXNrZXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBpbml0aWFsOiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxJbnRlcm5hbEJhc2tldDxHVV9RPj4ge1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudEJhc2tldElEKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5maW5kT3JDcmVhdGVCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQsIGdldEJvb2tlZEJhc2tldCkudGhlbihkYXRhID0+IHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQmFza2V0KGlkOiBzdHJpbmcpOiBJbnRlcm5hbEJhc2tldDxHVV9RPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEJhc2tldHMuZmluZCgoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPikgPT4ge1xuICAgICAgcmV0dXJuIGJhc2tldC5pZCA9PT0gaWQgfHwgYmFza2V0LnRlbXBpZCA9PT0gaWQ7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRPckNyZWF0ZUJhc2tldChcbiAgICBpZD86IHN0cmluZyxcbiAgICBnZXRCb29rZWRCYXNrZXQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgbGV0IGJhc2tldDogSW50ZXJuYWxCYXNrZXQ8R1VfUT4gPSBudWxsO1xuXG4gICAgaWYgKCFpZCkge1xuICAgICAgbGV0IGFsbE9wZW5CYXNrZXRzID0gYXdhaXQgdGhpcy5nZXRBbGxPcGVuQmFza2V0cyhcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRmdWxsVXNlckRldGFpbHModHJ1ZSkudXNlckRhdGEudmFsdWUudXNlcl9pZC50b1N0cmluZygpXG4gICAgICApO1xuXG4gICAgICBpZiAoIXRoaXMudXNlclNlcnZpY2UuYm9ibykge1xuICAgICAgICAvLyBFTlQtMzI3NiByZW1vdmUgYmFza2VzdCB3aXRoIGludm9rZWQgdXNlciBpZiB3ZSBhcmUgbm90IGN1cnJlbnRseSBpbnZva2luZyBhIHVzZXIgLy8gPyAtIHNob3VsZCB3ZSBkbyB0aGUgb3Bwb3NpdGUgYXMgd2VsbD9cbiAgICAgICAgYWxsT3BlbkJhc2tldHMgPSBhbGxPcGVuQmFza2V0cy5maWx0ZXIoYmFza2V0ID0+ICFiYXNrZXQuaW52b2tlZFVzZXIpO1xuICAgICAgfVxuICAgICAgLy8gY29uc29sZS5sb2coJ29wZW4gYmFza2V0czogJywgYWxsT3BlbkJhc2tldHMpO1xuICAgICAgLy8gZmluZCB0aGUgbGFzdCB1cGRhdGVkIGJhc2tldFxuICAgICAgaWYgKCFhbGxPcGVuQmFza2V0cz8ubGVuZ3RoKSB7XG4gICAgICAgIC8vIEVOVC0yNjE2IHJlbW92ZWQgYWRkaW5nIHRvIGN1cnJlbnQgYmFza2V0IGFzIHRoaXMgd2FzIGEgZHVwZVxuICAgICAgICBiYXNrZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2tldCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYmFza2V0cyBhcmUgYWxyZWFkeSBzb3J0ZWQgYnkgbGFzdCB1cGRhdGVkIC0gcmV0dXJuIHRoZSBsYXN0IHVwZGF0ZWQgYmFza2V0XG4gICAgICAgIGJhc2tldCA9IHRoaXMuZmluZEJhc2tldChhbGxPcGVuQmFza2V0c1swXS5pZCk7XG5cbiAgICAgICAgaWYgKGJhc2tldC5zdWJqZWN0LnZhbHVlLnN0YXR1cyA9PT0gJ0JPT0tFRCcgJiYgIWdldEJvb2tlZEJhc2tldCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignKysrIFJldHJpZXZlZCBiYXNrZXQgaXMgaW4gYm9va2VkIHN0YXR1cyAtIGNyZWF0aW5nIGEgbmV3IG9uZSArKysnKTtcbiAgICAgICAgICBiYXNrZXQgPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2tldCgpO1xuICAgICAgICAgIHRoaXMuY3VycmVudEJhc2tldHMucHVzaChiYXNrZXQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaG93IGJhc2tldHMgd2l0aCBPcGVuIEJhc2tldFN0YXR1cyBvbmx5IEVOVC01MjU5XG4gICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5maWx0ZXIoXG4gICAgICAgIGludEJhID0+IGludEJhLnN1YmplY3Q/LnZhbHVlPy5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5PcGVuXG4gICAgICApO1xuICAgICAgdGhpcy5iYXNrZXRzLm5leHQodGhpcy5jdXJyZW50QmFza2V0cyk7XG4gICAgICBiYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoaWQpO1xuICAgICAgLy8gY29uc29sZS5sb2coJysrKyBGb3VuZCBCYXNrZXQ6ICcsIGJhc2tldCwgJyArKysnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFza2V0O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUJhc2tldCgpOiBQcm9taXNlPEludGVybmFsQmFza2V0PEdVX1E+PiB7XG4gICAgY29uc3QgYmFza2V0OiBVc2VyQmFza2V0UmVzdWx0ID0ge1xuICAgICAgaWQ6IFRFTVBJRCArIG1vbWVudCgpLnVuaXgoKS50b1N0cmluZygpLFxuICAgICAgb3duZXI6IG51bGwsXG4gICAgICByZWZlcmVuY2U6IG51bGwsXG4gICAgICB0aXRsZTogbnVsbCxcbiAgICAgIG5vdGVzOiBudWxsLFxuICAgICAgY3JlYXRlZEF0OiBudWxsLFxuICAgICAgdXBkYXRlZEF0OiBudWxsLFxuICAgICAgYmFza2V0SXRlbXM6IFtdLFxuICAgICAgc3RhdHVzOiBudWxsLFxuICAgICAgdmFsaWRhdGVkOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCBpbnRCYXNrZXQgPSBuZXcgSW50ZXJuYWxCYXNrZXQ8R1VfUT4oXG4gICAgICBiYXNrZXQsXG4gICAgICB0aGlzLmhlbHBlcnMsXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5nZXRVc2VyRmV0Y2hlcixcbiAgICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlLFxuICAgICAgdGhpcy5yZXF1aXJlc092ZXJyaWRlU2VydmljZVxuICAgICk7XG4gICAgLy8geyBzdWJqZWN0OiBuZXcgQmVoYXZpb3JTdWJqZWN0PEJhc2tldD4oYmFza2V0KSwgdGVtcGlkOiBiYXNrZXQuaWQsIGlkOiBiYXNrZXQuaWQsIHRpdGxlOiBiYXNrZXQuaWQgfTtcblxuICAgIC8vIGVudC0yNjE2IG9ubHkgcGxhY2Ugd2UgbmVlZCB0byBhZGQgYSBiYXNrZXQgdG8gY3VycmVudCBiYXNrZXRzXG4gICAgY29uc3QgdG9SZXR1cm4gPSBhd2FpdCB0aGlzLmNyZWF0ZUJhc2tldE9uREIoaW50QmFza2V0KTtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzLnB1c2godG9SZXR1cm4pO1xuICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuICAgIHRoaXMuYmFza2V0Q2hhbmdlRW1pdHRlci5uZXh0KHRvUmV0dXJuLmlkKTtcbiAgICByZXR1cm4gdG9SZXR1cm47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUJhc2tldE9uREIoaW50QmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPik6IFByb21pc2U8SW50ZXJuYWxCYXNrZXQ8R1VfUT4+IHtcbiAgICBjb25zdCBtdXRhdGlvbjogQ3JlYXRlQmFza2V0TXV0YXRpb25WYXJpYWJsZXMgPSB0aGlzLnVzZXJTZXJ2aWNlLmJvYm8/LmlkXG4gICAgICA/IHsgaW52b2tlZFVzZXI6IHRoaXMudXNlclNlcnZpY2UuYm9ibz8uaWQgfVxuICAgICAgOiB7fTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLmJhc2tldENyZWF0b3JcbiAgICAgICAgLnVwZGF0ZU9uZShtdXRhdGlvbilcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0OiBVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpbnRCYXNrZXQuaWQgPSBiYXNrZXQuaWQ7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgICAgcmVzb2x2ZShpbnRCYXNrZXQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7fVxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlTWVudSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZW51U3RhdGUgPT09IE1lbnVTbGlkZUVudW0uSU4gfHwgdGhpcy5tZW51U3RhdGUgPT09IE1lbnVTbGlkZUVudW0uRkxBVCkge1xuICAgICAgdGhpcy5tZW51U3RhdGUgPSBNZW51U2xpZGVFbnVtLk9VVDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZW51U3RhdGUgPSBNZW51U2xpZGVFbnVtLklOO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlTWVudSgpOiB2b2lkIHtcbiAgICB0aGlzLm1lbnVTdGF0ZSA9IE1lbnVTbGlkZUVudW0uSU47XG4gIH1cblxuICBnZXRMYXRlc3RCYXNrZXRJdGVtRm9yVHlwZXMoYmFza2V0SXRlbXM6IEJhc2tldEl0ZW1bXSk6IFJlY29yZDxTZXJ2aWNlVHlwZSwgQmFza2V0SXRlbT4ge1xuICAgIHJldHVybiAoYmFza2V0SXRlbXMgfHwgW10pLnJlZHVjZShcbiAgICAgIChsYXRlc3RJdGVtczogUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPiwgYmFza2V0SXRlbTogQmFza2V0SXRlbSkgPT4ge1xuICAgICAgICBsYXRlc3RJdGVtc1tiYXNrZXRJdGVtLnNlcnZpY2UudHlwZV0gPSBiYXNrZXRJdGVtO1xuICAgICAgICByZXR1cm4gbGF0ZXN0SXRlbXM7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPFNlcnZpY2VUeXBlLCBCYXNrZXRJdGVtPlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRGV0YWlscyhpdGVtOiBBZGRJdGVtVG9CYXNrZXQuVmFyaWFibGVzKTogQWRkSXRlbVRvQmFza2V0LlZhcmlhYmxlcyB7XG4gICAgY29uc3Qgc2VydmljZVRvQ2hlY2s6IFNlcnZpY2UgPSB0aGlzLnVzZXJTZXJ2aWNlLmZpbmRTZXJ2aWNlKGl0ZW0uc2VydmljZSk7XG4gICAgaWYgKCFzZXJ2aWNlVG9DaGVjaykge1xuICAgICAgY29uc29sZS5lcnJvcignVW5hYmxlIHRvIGZpbmQgc2VydmljZSBmb3IgYmFza2V0IGl0ZW0gOiAnICsgaXRlbS5zZXJ2aWNlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIHRoZSBpdGVtLmRldGFpbCBvYmplY3QgYWdhaW5zdCB0aGUgcmVsZXZhbnQgc2VydmljZSBkZXRhaWxTY2hlbWEgdXNpbmcgQWp2XG4gICAgY29uc3QgYWp2ID0gbmV3IEFqdigpO1xuXG4gICAgLy8gQ3VzdG9tIEphdmFzY3JpcHQgSVNPIERhdGUgVGltZSBmb3JtYXRcbiAgICBhanYuYWRkRm9ybWF0KCdqcy1kYXRlLXRpbWUnLCAoZGF0ZVRpbWVTdHJpbmc6IGFueSkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZVN0cmluZyA9PT0gJ29iamVjdCcgJiYgZGF0ZVRpbWVTdHJpbmcuaGFzT3duUHJvcGVydHkoJ3RvSVNPU3RyaW5nJykpIHtcbiAgICAgICAgZGF0ZVRpbWVTdHJpbmcgPSBkYXRlVGltZVN0cmluZy50b0lTT1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWlzTmFOKERhdGUucGFyc2UoZGF0ZVRpbWVTdHJpbmcpKTsgLy8gYW55IHRlc3QgdGhhdCByZXR1cm5zIHRydWUvZmFsc2VcbiAgICB9KTtcblxuICAgIGFqdi5hZGRGb3JtYXQoJ3JhaWxTZWF0aW5nJywgKCkgPT4ge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBhanYuYWRkRm9ybWF0KCdwYXNzcG9ydCcsICgpID0+IHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuXG4gICAgYWp2LmFkZEZvcm1hdCgnc3BlY2lhbFJlcXVlc3QnLCAoKSA9PiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHZhbGlkYXRlRGV0YWlsU2NoZW1hID0gYWp2LmNvbXBpbGUoc2VydmljZVRvQ2hlY2suZGV0YWlsU2NoZW1hKTtcbiAgICBjb25zdCB2YWxpZGF0ZVNlYXJjaFNjaGVtYSA9IGFqdi5jb21waWxlKHNlcnZpY2VUb0NoZWNrLnNlYXJjaFF1ZXJ5U2NoZW1hKTtcblxuICAgIC8vIGlmIHRoZXJlIGFyZSBhbnkgbW9tZW50IGRhdGUgb2JqZWN0cyBpbiB0aGUgc2VhcmNoUXVlcnkgb2JqZWN0IGNvbnZlcnQgdGhlc2UgdG8gZGF0ZS10aW1lIHN0cmluZ3NcbiAgICBpdGVtLnNlYXJjaFF1ZXJ5ID0gdGhpcy5oZWxwZXJzLnNhbml0aXplTW9tZW50RGF0ZXMoaXRlbS5zZWFyY2hRdWVyeSk7XG4gICAgaXRlbS5kZXRhaWwgPSB0aGlzLmhlbHBlcnMucmVtb3ZlTnVsbHMoaXRlbS5kZXRhaWwpO1xuXG4gICAgaWYgKCF2YWxpZGF0ZVNlYXJjaFNjaGVtYShpdGVtLnNlYXJjaFF1ZXJ5KSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBgSXRlbSBzZWFyY2hRdWVyeSBpcyBub3QgdmFsaWQgZm9yICR7c2VydmljZVRvQ2hlY2submFtZX0gc2VhcmNoIHNjaGVtYS5gO1xuICAgICAgY29uc29sZS53YXJuKCdzZWFyY2hTY2hlbWEnLCBzZXJ2aWNlVG9DaGVjay5zZWFyY2hRdWVyeVNjaGVtYSk7XG4gICAgICBjb25zb2xlLndhcm4oJ2l0ZW0uc2VhcmNoUXVlcnknLCBpdGVtLnNlYXJjaFF1ZXJ5KTtcbiAgICAgIGNvbnNvbGUud2FybignU2VhcmNoIFF1ZXJ5IFZhbGlkYXRpb24gZXJyb3JzJywgdmFsaWRhdGVTZWFyY2hTY2hlbWEuZXJyb3JzKTtcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxUeXBlcy5Nb2RhbEVycm9yQ29tcG9uZW50LCB7fSwgeyBlcnJvciB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghdmFsaWRhdGVEZXRhaWxTY2hlbWEoaXRlbS5kZXRhaWwpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGBJdGVtIGRldGFpbCBpcyBub3QgdmFsaWQgZm9yICR7c2VydmljZVRvQ2hlY2submFtZX0gZGV0YWlsIHNjaGVtYS5gO1xuICAgICAgY29uc29sZS53YXJuKCdkZXRhaWxTY2hlbWEnLCBzZXJ2aWNlVG9DaGVjay5kZXRhaWxTY2hlbWEpO1xuICAgICAgY29uc29sZS53YXJuKCdpdGVtLmRldGFpbCcsIGl0ZW0uZGV0YWlsKTtcbiAgICAgIGNvbnNvbGUud2FybignRGV0YWlsIGVycm9ycycsIHZhbGlkYXRlRGV0YWlsU2NoZW1hLmVycm9ycyk7XG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsVHlwZXMuTW9kYWxFcnJvckNvbXBvbmVudCwge30sIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGl0ZW0ubG93ZXN0UHJpY2UpIGl0ZW0ubG93ZXN0UHJpY2UgPSAraXRlbS5sb3dlc3RQcmljZS50b0ZpeGVkKDIpO1xuICAgIHJldHVybiBpdGVtO1xuICB9XG5cbiAgZ2V0TnVtYmVySXRlbXNGb3JCYXNrZXQoYmFza2V0OiBJbnRlcm5hbEJhc2tldDxHVV9RPiA9IG51bGwpOiBudW1iZXIge1xuICAgIGJhc2tldCA9IGJhc2tldCB8fCB0aGlzLmZpbmRCYXNrZXQodGhpcy5jdXJyZW50QmFza2V0SUQpO1xuICAgIHJldHVybiBiYXNrZXQ/LnN1YmplY3QudmFsdWUuYmFza2V0SXRlbXMubGVuZ3RoIHx8IDA7XG4gIH1cblxuICByZW1vdmVCYXNrZXQoYmFza2V0aWQ6IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgIGlmIChiYXNrZXRpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQmFza2V0VXBkYXRlci51cGRhdGVPbmUoeyBpZDogYmFza2V0aWQgfSkucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgc3dpdGNoTWFwKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk/LmRlc3RydWN0b3IoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlclJlbW92ZUJhc2tldEJ5SWQoYmFza2V0aWQpO1xuICAgICAgICAgIGlmIChiYXNrZXRpZCA9PT0gdGhpcy5zZWxlY3RlZEJhc2tldElkKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQmFza2V0SWQgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gdGhpcy5jdXJyZW50QmFza2V0cy5maWx0ZXIoYmFza2V0ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBiYXNrZXQuc3ViamVjdC52YWx1ZS5zdGF0dXMgPT09IEJhc2tldFN0YXR1cy5PcGVuO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYmFza2V0cy5uZXh0KHRoaXMuY3VycmVudEJhc2tldHMpO1xuXG4gICAgICAgICAgaWYgKGJhc2tldGlkID09PSB0aGlzLmN1cnJlbnRCYXNrZXRJRCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50QmFza2V0SUQgPSB0aGlzLmN1cnJlbnRCYXNrZXRzWzBdPy5pZCB8fCBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRlbGV0aW5nQmFza2V0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIHJldHVybiBvZihkYXRhKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29udGludWVTZWFyY2hBbmRCb29rKFxuICAgIGJhc2tldEl0ZW1zOiBhbnlbXSxcbiAgICBpdGluaWFyeVVybDogc3RyaW5nW10sXG4gICAgc2VhcmNoU2VydmljZTogRW50ZXJwcmlzZVNlYXJjaFNlcnZpY2VJbnRlcmZhY2VcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGxhdGVzdEJhc2tldEl0ZW1zID0gdGhpcy5nZXRMYXRlc3RCYXNrZXRJdGVtRm9yVHlwZXMoYmFza2V0SXRlbXMpO1xuICAgIGNvbnN0IG5leHRTZWFyY2g6IFNlYXJjaE9iamVjdCA9XG4gICAgICBzZWFyY2hTZXJ2aWNlLmdldEhpZ2hlc3RTZWFyY2hQcmlvcml0eU9iamVjdChsYXRlc3RCYXNrZXRJdGVtcyk7XG4gICAgaWYgKG5leHRTZWFyY2gpIHtcbiAgICAgIChzZWFyY2hTZXJ2aWNlLnNlYXJjaGVzIGFzIGFueSlbbmV4dFNlYXJjaC50eXBlXS51cGRhdGVGcm9tUHJldmlvdXNTZWFyY2hlcyhcbiAgICAgICAgbGF0ZXN0QmFza2V0SXRlbXNcbiAgICAgICk7XG4gICAgICByZXR1cm4gW25leHRTZWFyY2guc2VhcmNoVXJsXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGl0aW5pYXJ5VXJsO1xuICAgIH1cbiAgfVxuXG4gIGFkZFRyYXZlbGxlcnMoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBiYXNrZXRJdGVtOiBCYXNrZXRJdGVtLFxuICAgIHRyYXZlbGxlcnM6IFRyYXZlbGxlcltdLFxuICAgIGluZGV4OiBudW1iZXIgPSAwXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgaWYgKGluZGV4IDwgdHJhdmVsbGVycy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHRyYXZlbGxlciA9IHRyYXZlbGxlcnNbaW5kZXhdO1xuICAgICAgY29uc3QgcGFzc2VuZ2VyVHlwZTogUGFzc2VuZ2VyVHlwZSA9IHRyYXZlbGxlci5pc0NoaWxkXG4gICAgICAgID8gUGFzc2VuZ2VyVHlwZS5DaGlsZFxuICAgICAgICA6IHRyYXZlbGxlci5pc0luZmFudFxuICAgICAgICA/IFBhc3NlbmdlclR5cGUuSW5mYW50XG4gICAgICAgIDogUGFzc2VuZ2VyVHlwZS5BZHVsdDtcblxuICAgICAgaWYgKHRyYXZlbGxlci5ndWVzdCkge1xuICAgICAgICB0aGlzLmFkZEd1ZXN0VG9CYXNrZXRJdGVtXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICAgICAgZ3Vlc3RzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogdHJhdmVsbGVyLmlkLFxuICAgICAgICAgICAgICAgIHBhc3NlbmdlclR5cGVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZFRyYXZlbGxlcnMoYmFza2V0LmlkLCBiYXNrZXRJdGVtLCB0cmF2ZWxsZXJzLCBpbmRleCArIDEpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hZGRVc2VyVG9CYXNrZXRJdGVtXG4gICAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICAgICAgdXNlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiB0cmF2ZWxsZXIuaWQsXG4gICAgICAgICAgICAgICAgcGFzc2VuZ2VyVHlwZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRUcmF2ZWxsZXJzKGJhc2tldC5pZCwgYmFza2V0SXRlbSwgdHJhdmVsbGVycywgaW5kZXggKyAxKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNrZXRGZXRjaGVyXG4gICAgICAgIC5mZXRjaE9uZSh7IGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSwgaWQ6IGJhc2tldC5pZCB9KVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChiYXNrZXQxOiBHZXRVc2VyQmFza2V0UmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQuc3ViamVjdC5uZXh0KHsgLi4uYmFza2V0LnN1YmplY3QudmFsdWUsIC4uLmJhc2tldDEgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBfID0+IHt9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIGJhc2tldC5uZXh0KGJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGVhZFBhc3NlbmdlcihcbiAgICBiYXNrZXRpZDogc3RyaW5nLFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgdHJhdmVsbGVyczogVHJhdmVsbGVyLFxuICAgIGluZGV4OiBudW1iZXIgPSAwLFxuICAgIGxlYWRQYXNzZW5nZXJUeXBlOiBMZWFkUGFzc2VuZ2VyVHlwZSA9IExlYWRQYXNzZW5nZXJUeXBlLlVzZXJcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldGlkKTtcbiAgICBpZiAoaW5kZXggPCAxKSB7XG4gICAgICB0aGlzLlNldEJhc2tldEl0ZW1MZWFkUGFzc2VuZ2VyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIHVzZXJPckd1ZXN0OiB0cmF2ZWxsZXJzLmlkLFxuICAgICAgICB3aXRoU3VwcGxlbWVudGFsOiBmYWxzZSxcbiAgICAgICAgbGVhZFBhc3NlbmdlclR5cGU6IGxlYWRQYXNzZW5nZXJUeXBlXG4gICAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAgICgpID0+IHt9LFxuICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0TGVhZFBhc3NlbmdlcihiYXNrZXQuaWQsIGJhc2tldEl0ZW0sIHRyYXZlbGxlcnMsIGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFza2V0RmV0Y2hlclxuICAgICAgICAuZmV0Y2hPbmUoeyBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksIGlkOiBiYXNrZXQuaWQgfSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0MTogR2V0VXNlckJhc2tldFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgYmFza2V0LnN1YmplY3QubmV4dCh7IC4uLmJhc2tldC5zdWJqZWN0LnZhbHVlLCAuLi5iYXNrZXQxIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgXyA9PiB7fSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBiYXNrZXQubmV4dChiYXNrZXQuc3ViamVjdC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUJhc2tldChiYXNrZXRpZDogc3RyaW5nLCBvYnM6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgb2JzLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKFxuICAgICAgICAoYmFza2V0OiBCYXNrZXREZXRhaWxzKSA9PiB7XG4gICAgICAgICAgLy8gRU5ULTc4MjcgYWRkZWQgdGhpcyB0aW1lb3V0IGFzIHdlIHdlcmUgdHJ5aW5nIHRvIGdyYWIgdGhlIGN1cnJlbnQgYmFza2V0cyBzb21ldGltZXMgYW5kIHdlIHdlcmUgc3RpbGwgd2FpdGluZyBmb3IgYW4gdXBkYXRlLCB0YmggaSB3b3VsZCBoYXZlIHJhdGhlciBmb3VuZCB3aGljaCBjYWxsIHdhcyBjYXVzaW5nIHRoZSBkZWxheVxuICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudEJhc2tldHMsIHRoaXMuY3VycmVudEJhc2tldElELCBiYXNrZXRpZClcbiAgICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgICAvLyB0aGlzIGNhbiBiZSB0aGUgb25seSBwbGFjZSB3ZSBuZWVkIHRvIGRvIG1pLCBkb250IG5lZWQgb24gYWRkL3JlbW92ZS9nZXRhbGxcbiAgICAgICAgICAgIGNvbnN0IGlzR2V0TWkgPSBiYXNrZXQuc3RhdHVzID09PSBCYXNrZXRTdGF0dXMuT3BlbiAmJiAhIWJhc2tldC5iYXNrZXRJdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQsIGlzR2V0TWkpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sMTAwKVxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgaW50QmFza2V0Lm5leHQoaW50QmFza2V0LnN1YmplY3QudmFsdWUpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHt9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmV2YWxpZGF0ZShiYXNrZXRpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRpZCxcbiAgICAgIHRoaXMucmV2YWxpZGF0ZUJhc2tldFVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogYmFza2V0aWQsXG4gICAgICAgIHdpdGhTdXBwbGVtZW50YWw6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmJhc2tldENoYW5nZUVtaXR0ZXIubmV4dChiYXNrZXRpZCk7XG4gIH1cblxuICBzZXRCYXNrZXRJdGVtTWlHcm91cChiYXNrZXRpZDogc3RyaW5nLCBiYXNrZXRJdGVtaWQ6IHN0cmluZywgZ3JvdXA6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0aWQsXG4gICAgICB0aGlzLnNldEJhc2tldEl0ZW1NaUdyb3VwVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW1pZCxcbiAgICAgICAgZ3JvdXBcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFjY2VwdE5ld1ByaWNlKGJhc2tldGlkOiBzdHJpbmcsIGl0ZW06IEJhc2tldEl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUJhc2tldChcbiAgICAgIGJhc2tldGlkLFxuICAgICAgdGhpcy5hY2NlcHROZXdQcmljZVVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICBpZDogaXRlbS5pZFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdmFsaWRhdGVGcmVlVmFsZU1pKG1pSXRlbTogTWFuYWdlbWVudEluZm8sIGZyZWVWYWx1ZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVNaUZyZWVWYWx1ZS50ZXN0KHsgbWk6IG1pSXRlbS5pZCwgZnJlZVZhbHVlIH0pLnN1YnNjcmliZShyZXNvbHZlLCByZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0TWlGcmVlVmFsdWUoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBtaUl0ZW06IE1hbmFnZW1lbnRJbmZvLFxuICAgIGZyZWVWYWx1ZTogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nID0gbnVsbCxcbiAgICBndWVzdD86IGJvb2xlYW5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW50QmFza2V0ID0gdGhpcy5maW5kQmFza2V0KGJhc2tldGlkKTtcbiAgICBjb25zdCBhcmdzOiBTZXRCYXNrZXRJdGVtTWlWYWx1ZS5WYXJpYWJsZXMgPSB7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBtaTogbWlJdGVtLmlkLFxuICAgICAgbWlGcmVlVmFsdWU6IGZyZWVWYWx1ZVxuICAgIH07XG4gICAgaWYgKCEhdXNlcklkKSB7XG4gICAgICBpZiAoZ3Vlc3QpIHtcbiAgICAgICAgYXJncy5ndWVzdCA9IHVzZXJJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyZ3MudXNlciA9IHVzZXJJZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuc2V0QmFza2V0SXRlbU1pVmFsdWVVcGRhdGVyXG4gICAgICAgIC51cGRhdGVPbmUoYXJncylcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoYmFza2V0OiBCYXNrZXREZXRhaWxzKSA9PiB7XG4gICAgICAgICAgICBpbnRCYXNrZXQubmV4dChiYXNrZXQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIC8vIGludEJhc2tldC5uZXh0KGludEJhc2tldC5zdWJqZWN0LnZhbHVlKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRNaVNlbGVjdGVkVmFsdWUoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBtaUl0ZW06IE1hbmFnZW1lbnRJbmZvLFxuICAgIHNlbGVjdGVkVmFsdWU6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZyA9IG51bGwsXG4gICAgZ3Vlc3Q/OiBib29sZWFuXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFyZ3M6IFNldEJhc2tldEl0ZW1NaVZhbHVlLlZhcmlhYmxlcyA9IHtcbiAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgIG1pOiBtaUl0ZW0uaWQsXG4gICAgICBtaVZhbHVlOiBzZWxlY3RlZFZhbHVlXG4gICAgfTtcbiAgICBpZiAoISF1c2VySWQpIHtcbiAgICAgIGlmIChndWVzdCkge1xuICAgICAgICBhcmdzLmd1ZXN0ID0gdXNlcklkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJncy51c2VyID0gdXNlcklkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVCYXNrZXQoYmFza2V0aWQsIHRoaXMuc2V0QmFza2V0SXRlbU1pVmFsdWVVcGRhdGVyLnVwZGF0ZU9uZShhcmdzKSk7XG4gIH1cblxuICBnZXRNaUF1dG9TdWdlc3Rpb25zKFxuICAgIG1pSWQ6IHN0cmluZyxcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgc2VydmljZUlkPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8R2V0TWlBdXRvU3VnZXN0aW9uQXJyYXk+IHtcbiAgICBpc0xvYWRpbmc/Lm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBnZXRNaUF1dG9CeVZhbHVlOiBPYnNlcnZhYmxlPEdldE1pQXV0b1N1Z2VzdGlvbkFycmF5PiA9XG4gICAgICB0aGlzLmdldE1pQXV0b1N1Z2VzdGlvbkZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgICAgbWk6IG1pSWQsXG4gICAgICAgIHBhcnRpYWxWYWx1ZTogdGVybSxcbiAgICAgICAgc2VydmljZUlkXG4gICAgICB9KTtcbiAgICBjb25zdCBnZXRNaUF1dG9CeUxhYmVsOiBPYnNlcnZhYmxlPEdldE1pQXV0b1N1Z2VzdGlvbkFycmF5PiA9XG4gICAgICB0aGlzLmdldE1pQXV0b1N1Z2VzdGlvbkZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgICAgbWk6IG1pSWQsXG4gICAgICAgIHBhcnRpYWxMYWJlbDogdGVybSxcbiAgICAgICAgc2VydmljZUlkXG4gICAgICB9KTtcblxuICAgIHJldHVybiBmb3JrSm9pbihbZ2V0TWlBdXRvQnlWYWx1ZSwgZ2V0TWlBdXRvQnlMYWJlbF0pLnBpcGUoXG4gICAgICBtYXAoKFttaUJ5VmFsdWUsIG1pQnlMYWJlbF0pID0+IHtcbiAgICAgICAgbGV0IG1pQnlWYWx1ZUxhYmVsID0gWy4uLm1pQnlWYWx1ZSwgLi4ubWlCeUxhYmVsXTtcbiAgICAgICAgbWlCeVZhbHVlTGFiZWwgPSBtaUJ5VmFsdWVMYWJlbC5maWx0ZXIoXG4gICAgICAgICAgKG1pSXRlbSwgaW5kZXgpID0+IG1pQnlWYWx1ZUxhYmVsLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT0gbWlJdGVtLmlkKSA9PT0gaW5kZXhcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2cobWlCeVZhbHVlTGFiZWwpO1xuXG4gICAgICAgIGlzTG9hZGluZz8ubmV4dChmYWxzZSk7XG4gICAgICAgIHJldHVybiBtaUJ5VmFsdWVMYWJlbDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldE1pQXV0b1N1Z2dlc3Rpb25zVXNlclByZWZlcmVuY2VzKFxuICAgIG1pSWQ6IHN0cmluZyxcbiAgICB0ZXJtOiBzdHJpbmcsXG4gICAgc2VydmljZUlkOiBzdHJpbmcsXG4gICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgaWdub3JlVXNlclJlc3RyaWN0aW9uczogYm9vbGVhblxuICApOiBPYnNlcnZhYmxlPE1hbmFnZW1lbnRJbmZvVmFsdWVbXT4ge1xuICAgIGlzTG9hZGluZz8ubmV4dCh0cnVlKTtcblxuICAgIGNvbnN0IGdldE1pQXV0b0J5VmFsdWU6IE9ic2VydmFibGU8R2V0TWlBdXRvU3VnZXN0aW9uQXJyYXk+ID1cbiAgICAgIHRoaXMuZ2V0VXNlck1pQXV0b1N1Z2dlc3RVc2VyUHJlZmVyZW5jZXNGZXRjaGVyLmZldGNoTGlzdCh7XG4gICAgICAgIG1pOiBtaUlkLFxuICAgICAgICBwYXJ0aWFsVmFsdWU6IHRlcm0sXG4gICAgICAgIHNlcnZpY2VJZCxcbiAgICAgICAgaWdub3JlVXNlclJlc3RyaWN0aW9uc1xuICAgICAgfSk7XG4gICAgY29uc3QgZ2V0TWlBdXRvQnlMYWJlbDogT2JzZXJ2YWJsZTxHZXRNaUF1dG9TdWdlc3Rpb25BcnJheT4gPVxuICAgICAgdGhpcy5nZXRVc2VyTWlBdXRvU3VnZ2VzdFVzZXJQcmVmZXJlbmNlc0ZldGNoZXIuZmV0Y2hMaXN0KHtcbiAgICAgICAgbWk6IG1pSWQsXG4gICAgICAgIHBhcnRpYWxMYWJlbDogdGVybSxcbiAgICAgICAgc2VydmljZUlkLFxuICAgICAgICBpZ25vcmVVc2VyUmVzdHJpY3Rpb25zXG4gICAgICB9KTtcblxuICAgIHJldHVybiBmb3JrSm9pbihbZ2V0TWlBdXRvQnlWYWx1ZSwgZ2V0TWlBdXRvQnlMYWJlbF0pLnBpcGUoXG4gICAgICBtYXAoKFttaUJ5VmFsdWUsIG1pQnlMYWJlbF0pID0+IHtcbiAgICAgICAgbGV0IG1pQnlWYWx1ZUxhYmVsID0gWy4uLm1pQnlWYWx1ZSwgLi4ubWlCeUxhYmVsXTtcbiAgICAgICAgbWlCeVZhbHVlTGFiZWwgPSBtaUJ5VmFsdWVMYWJlbC5maWx0ZXIoXG4gICAgICAgICAgKG1pSXRlbSwgaW5kZXgpID0+IG1pQnlWYWx1ZUxhYmVsLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT0gbWlJdGVtLmlkKSA9PT0gaW5kZXhcbiAgICAgICAgKTtcblxuICAgICAgICBpc0xvYWRpbmc/Lm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm4gbWlCeVZhbHVlTGFiZWw7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXRVc2VyRGVmYXVsdE1JVmFsdWUoXG4gICAgbWk6IHN0cmluZyxcbiAgICB1c2VyOiBzdHJpbmcsXG4gICAgaXNMb2FkaW5nOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4sXG4gICAgc2VydmljZT86IHN0cmluZyxcbiAgICB3aXRob3V0SGFzaD86IGJvb2xlYW5cbiAgKTogT2JzZXJ2YWJsZTxNYW5hZ2VtZW50SW5mb1ZhbHVlUmVzdWx0PiB7XG4gICAgaXNMb2FkaW5nPy5uZXh0KHRydWUpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckRlZmF1bHRNSVZhbHVlRmV0Y2hlci5mZXRjaE9uZSh3aXRob3V0SGFzaCA/IHsgbWk6IG1pLCB1c2VyOiB1c2VyLCBzZXJ2aWNlLCB3aXRob3V0SGFzaCB9IDp7IG1pOiBtaSwgdXNlcjogdXNlciB9KS5waXBlKHRha2UoMSkpO1xuICB9XG5cbiAgc2F2ZU1pRGF0YShiYXNrZXRJZDogc3RyaW5nLCBibWlBcnJheTogQmFza2V0SXRlbU1hbmFnZW1lbnRJbmZvW10pIHtcbiAgICBjb25zdCBiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlOiBTZXRCYXNrZXRJdGVtTWlWYWx1ZUlucHV0W10gPSBbXTtcbiAgICBibWlBcnJheS5mb3JFYWNoKChibWk6IEJhc2tldEl0ZW1NYW5hZ2VtZW50SW5mbykgPT4ge1xuICAgICAgYm1pLm1pUGVySXRlbS5mb3JFYWNoKChpdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcbiAgICAgICAgYmFza2V0SXRlbU11bHRpcGxlTUlWYWx1ZS5wdXNoKHtcbiAgICAgICAgICBtaTogaXRlbS5pZCxcbiAgICAgICAgICBtaVZhbHVlOiBpdGVtLnNlbGVjdGVkVmFsdWVzWzBdPy52YWx1ZT8uaWQgfHwgJycsXG4gICAgICAgICAgbWlGcmVlVmFsdWU6IGl0ZW0uc2VsZWN0ZWRWYWx1ZXNbMF0/LmZyZWVWYWx1ZT8udHJpbSgpIHx8ICcnXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGJtaS51c2Vycy5mb3JFYWNoKCh1c2VyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgYm1pLm1pUGVyVXNlclt1c2VyXS5tYW5hZ2VtZW50SW5mby5mb3JFYWNoKChpdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcbiAgICAgICAgICBiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlLnB1c2goe1xuICAgICAgICAgICAgbWk6IGl0ZW0uaWQsXG4gICAgICAgICAgICBtaVZhbHVlOiBpdGVtLnNlbGVjdGVkVmFsdWVzWzBdPy52YWx1ZT8uaWQgfHwgJycsXG4gICAgICAgICAgICBtaUZyZWVWYWx1ZTogaXRlbS5zZWxlY3RlZFZhbHVlc1swXT8uZnJlZVZhbHVlPy50cmltKCkgfHwgJycsXG4gICAgICAgICAgICB1c2VyOiB1c2VyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBibWkuZ3Vlc3RzLmZvckVhY2goKHVzZXI6IHN0cmluZykgPT4ge1xuICAgICAgICBibWkubWlQZXJHdWVzdFt1c2VyXS5tYW5hZ2VtZW50SW5mby5mb3JFYWNoKChpdGVtOiBNYW5hZ2VtZW50SW5mb0FuZElzVmFsaWQpID0+IHtcbiAgICAgICAgICBiYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlLnB1c2goe1xuICAgICAgICAgICAgbWk6IGl0ZW0uaWQsXG4gICAgICAgICAgICBtaVZhbHVlOiBpdGVtLnNlbGVjdGVkVmFsdWVzWzBdPy52YWx1ZT8uaWQgfHwgJycsXG4gICAgICAgICAgICBtaUZyZWVWYWx1ZTogaXRlbS5zZWxlY3RlZFZhbHVlc1swXT8uZnJlZVZhbHVlPy50cmltKCkgfHwgJycsXG4gICAgICAgICAgICBndWVzdDogdXNlclxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc2V0QmFza2V0SXRlbU11bHRpcGxlTUlWYWx1ZShiYXNrZXRJZCwgYmFza2V0SXRlbU11bHRpcGxlTUlWYWx1ZSk7XG4gIH1cblxuICBzZXRCYXNrZXRJdGVtTXVsdGlwbGVNSVZhbHVlKFxuICAgIGJhc2tldElkOiBzdHJpbmcsXG4gICAgYmFza2V0SXRlbU11bHRpcGxlTUlWYWx1ZTogU2V0QmFza2V0SXRlbU1pVmFsdWVJbnB1dFtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0SWQpO1xuICAgICAgY29uc3QgYXJnczogU2V0QmFza2V0SXRlbU11bHRpcGxlTWlWYWx1ZU11dGF0aW9uVmFyaWFibGVzID0ge1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW1NdWx0aXBsZU1JVmFsdWU6IGJhc2tldEl0ZW1NdWx0aXBsZU1JVmFsdWUsXG4gICAgICAgIGJhc2tldElkOiBiYXNrZXRJZFxuICAgICAgfTtcbiAgICAgIHRoaXMuc2V0QmFza2V0SXRlbU11bHRpcGxlTWlWYWx1ZVVwZGF0ZXJcbiAgICAgICAgLnVwZGF0ZU9uZShhcmdzKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChiYXNrZXQ6IEJhc2tldERldGFpbHMpID0+IHtcbiAgICAgICAgICAgIGludEJhc2tldC5uZXh0KGJhc2tldCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIGF3YWl0aW5nQXBwcm92YWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzZW5kQmFza2V0Rm9yQXBwcm92YWwoYmFza2V0aWQ6IHN0cmluZywgaXNSZWFzc2lnbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0aWQsXG4gICAgICB0aGlzLnNlbmRCYXNrZXRGb3JBcHByb3ZhbFVwZGF0ZXJcbiAgICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICAgIGJhc2tldDogYmFza2V0aWQsXG4gICAgICAgICAgaXNSZWFzc2lnbjogaXNSZWFzc2lnblxuICAgICAgICB9KVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICk7XG4gIH1cblxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbihcbiAgICBiYXNrZXQ6IEJhc2tldERldGFpbHMsXG4gICAgYmFza2V0SXRlbTogQmFza2V0SXRlbSxcbiAgICBwYXltZW50TWV0aG9kOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0LmlkLFxuICAgICAgdGhpcy5zZXRQYXltZW50TWV0aG9kVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGJhc2tldEl0ZW06IGJhc2tldEl0ZW0uaWQsXG4gICAgICAgIHBheW1lbnRNZXRob2RcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBzZXRCYXNrZXRJdGVtUGF5bWVudE9wdGlvbk5vVXBkYXRlKFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgcGF5bWVudE1ldGhvZDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLnNldFBheW1lbnRNZXRob2RVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgcGF5bWVudE1ldGhvZFxuICAgIH0pO1xuICB9XG4gIGJvb2tCYXNrZXQoXG4gICAgYmFza2V0aWQ6IHN0cmluZyxcbiAgICBzdXBwbGVtZW50YXJ5SW5mbzogU3VwcGxlbWVudGFyeUJvb2tpbmdJbmZvW10sXG4gICAgYWRkaXRpb25hbEVtYWlsOiBzdHJpbmdbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmdvaW5nRm9yQXBwcm92YWwgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5ib29rQmFza2V0VXBkYXRlclxuICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldGlkLFxuICAgICAgICBzdXBwbGVtZW50YXJ5SW5mbyxcbiAgICAgICAgYWRkaXRpb25hbEVtYWlsXG4gICAgICB9KVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChiYXNrZXQ6IEJhc2tldERldGFpbHMpID0+IHtcbiAgICAgICAgICBjb25zdCBpbnRCYXNrZXQgPSB0aGlzLmZpbmRCYXNrZXQoYmFza2V0aWQpO1xuICAgICAgICAgIGludEJhc2tldC5uZXh0KGJhc2tldCk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgY29uc3QgYmFza2V0VXBkYXRlID0gYXdhaXQgdGhpcy5nZXRCYXNrZXQoe1xuICAgICAgICAgICAgY29udmVydEN1cnJlbmN5VG86IHRoaXMudXNlckN1cnJlbmN5LFxuICAgICAgICAgICAgaWQ6IGJhc2tldGlkLFxuICAgICAgICAgICAgd2l0aFN1cHBsZW1lbnRhbDogdHJ1ZVxuICAgICAgICAgIH0pLnRvUHJvbWlzZSgpO1xuICAgICAgICAgIGNvbnN0IGludEJhc2tldCA9IHRoaXMuZmluZEJhc2tldChiYXNrZXRpZCk7XG4gICAgICAgICAgaW50QmFza2V0Lm5leHQoYmFza2V0VXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIG1vdmVCYXNrZXRJdGVtKG9yaWdpbmFsQmFza2V0SWQ6IHN0cmluZywgYmFza2V0SXRlbTogQmFza2V0SXRlbSwgYmFza2V0SWRUb01vdmVUbzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tb3ZlSXRlbVRvQURpZmZlcmVudEJhc2tldFxuICAgICAgLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgYmFza2V0SXRlbTogYmFza2V0SXRlbS5pZCxcbiAgICAgICAgbmV3QmFza2V0OiBiYXNrZXRJZFRvTW92ZVRvXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZEJhc2tldChvcmlnaW5hbEJhc2tldElkKTtcbiAgICAgICAgdGhpcy5sb2FkQmFza2V0KGJhc2tldElkVG9Nb3ZlVG8pO1xuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVCYXNrZXROb3RlcyhiYXNrZXRJZDogc3RyaW5nLCBub3Rlczogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVCYXNrZXQoXG4gICAgICBiYXNrZXRJZCxcbiAgICAgIHRoaXMudXBkYXRlQmFza2V0Tm90ZXNVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICAgIGNvbnZlcnRDdXJyZW5jeVRvOiB0aGlzLnVzZXJDdXJyZW5jeSxcbiAgICAgICAgaWQ6IGJhc2tldElkLFxuICAgICAgICBub3Rlc1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgdXBkYXRlQmFza2V0VGl0bGUoYmFza2V0SWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQmFza2V0KFxuICAgICAgYmFza2V0SWQsXG4gICAgICB0aGlzLnVwZGF0ZUJhc2tldFRpdGxlVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgICBjb252ZXJ0Q3VycmVuY3lUbzogdGhpcy51c2VyQ3VycmVuY3ksXG4gICAgICAgIGlkOiBiYXNrZXRJZCxcbiAgICAgICAgbmV3VGl0bGU6IHRpdGxlXG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgZ2V0QmFza2V0KHF1ZXJ5OiB7XG4gICAgY29udmVydEN1cnJlbmN5VG86IHN0cmluZztcbiAgICBpZDogc3RyaW5nO1xuICAgIHdpdGhTdXBwbGVtZW50YWw6IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPEdldFVzZXJCYXNrZXRSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5iYXNrZXRGZXRjaGVyLmZldGNoT25lKHF1ZXJ5KTtcbiAgfVxuXG4gIGFkZEJhc2tldEl0ZW1NYXJrdXAoXG4gICAgYmFza2V0SXRlbUlkOiBzdHJpbmcsXG4gICAgYW1vdW50OiBudW1iZXIsXG4gICAgYWdlbnRJZDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLmFkZEJhc2tldEl0ZW1NYXJrdXBVcGRhdGVyLnVwZGF0ZU9uZSh7XG4gICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQsXG4gICAgICBtYXJrdXA6ICcnLFxuICAgICAgYW1vdW50LFxuICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgIGFnZW50OiBhZ2VudElkLFxuICAgICAgdGl0bGU6ICdBZ2VudCBNYXJrdXAnXG4gICAgfSk7XG4gIH1cblxuICBhdExlYXN0T25lU2VhcmNoQ2hvc2VuKCk6IGJvb2xlYW4ge1xuICAgIC8vIGlmIHdlIGhhdmUgYW55IGl0ZW0gb24gYW55IGJhc2tldCB3ZSBzaG93IGJhc2tldHMgaW4gc2VhcmNoIHNjcmVlblxuICAgIHJldHVybiAhIXRoaXMuY3VycmVudEJhc2tldHMuZmlsdGVyKGJhc2tldCA9PiBiYXNrZXQuc3ViamVjdC52YWx1ZS5iYXNrZXRJdGVtcy5sZW5ndGgpLmxlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCYXNrZXRTdGF0cyhpbmRleDogbnVtYmVyKTogQmVoYXZpb3JTdWJqZWN0PEJhc2tldFByaWNlcz4ge1xuICAgIGNvbnN0IGJhc2tldFByaWNlc09iaiA9IHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0/LnN1YmplY3Q/LnZhbHVlPy5wcmljZXMgfHwge307XG4gICAgY29uc3QgYmFza2V0UHJpY2VzS2V5ID0gT2JqZWN0LmtleXMoYmFza2V0UHJpY2VzT2JqKVswXTtcbiAgICBpZiAoYmFza2V0UHJpY2VzS2V5KSB7XG4gICAgICB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS5jdXJyZW5jeSA9IGJhc2tldFByaWNlc0tleTtcbiAgICAgIHRoaXMuYmFza2V0UHJpY2VzLnZhbHVlLnRvdGFsID1cbiAgICAgICAgdGhpcy5iYXNrZXRzLnZhbHVlW2luZGV4XS5zdWJqZWN0LnZhbHVlLnByaWNlc1tiYXNrZXRQcmljZXNLZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS50b3RhbCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5iYXNrZXRQcmljZXMudmFsdWUubGlzdC5mb3JFYWNoKGtleXMgPT4ge1xuICAgICAga2V5cy5wcmljZSA9IHRoaXMuYmFza2V0cy52YWx1ZVtpbmRleF0/LnN1YmplY3Q/LnZhbHVlPy5iYXNrZXRJdGVtc1xuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZXJ2aWNlLnR5cGUgPT09IGtleXMudHlwZSlcbiAgICAgICAgLnJlZHVjZSgoc3VtLCBjdXJyZW50KSA9PiBzdW0gKyBjdXJyZW50LnByaWNlLCAwKTtcbiAgICAgIGtleXMuY28yID0gdGhpcy5iYXNrZXRzLnZhbHVlW2luZGV4XT8uc3ViamVjdD8udmFsdWU/LmJhc2tldEl0ZW1zXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlcnZpY2UudHlwZSA9PT0ga2V5cy50eXBlKVxuICAgICAgICAucmVkdWNlKChzdW0sIGN1cnJlbnQpID0+IHN1bSArIGN1cnJlbnQuY28yUGVySXRlbSwgMCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmJhc2tldFByaWNlcy52YWx1ZS50b3RhbENvMiA9IHRoaXMuYmFza2V0UHJpY2VzLnZhbHVlLmxpc3QucmVkdWNlKFxuICAgICAgKHN1bSwgY3VycmVudCkgPT4gc3VtICsgY3VycmVudC5jbzIsXG4gICAgICAwXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5iYXNrZXRQcmljZXM7XG4gIH1cblxuICBjYW5DYW5jZWwoYmFza2V0SXRlbTogQmFza2V0SXRlbSk6IE9ic2VydmFibGU8QmVmb3JlQ2FuY2VsbGF0aW9uSW5mbz4ge1xuICAgIC8vIE5vdCBjYW5jZWxsYWJsZSBpZiB0aGUgb3V0Ym91bmQgZGF0ZSBwYXNzZWRcbiAgICBpZiAobW9tZW50KGJhc2tldEl0ZW0ub3V0Ym91bmREYXRlKS5kaWZmKG1vbWVudChuZXcgRGF0ZSgpKSwgJ21pbnV0ZXMnKSA8PSAwKSB7XG4gICAgICByZXR1cm4gb2Yoe1xuICAgICAgICBjYW5jZWxsYWJsZTogZmFsc2UsXG4gICAgICAgIGNhbmNlbGxhdGlvbkZlZTogMCxcbiAgICAgICAgaW5mbzogJ091dGJvdW5kIGRhdGV0aW1lIHBhc3NlZC4nXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBiYXNrZXRJdGVtLnN0YXR1cyA9PT0gQmFza2V0SXRlbVN0YXR1cy5Cb29rZWQgfHxcbiAgICAgIGJhc2tldEl0ZW0uc3RhdHVzID09PSBCYXNrZXRJdGVtU3RhdHVzLlBhcnRpYWxseUNhbmNlbGxlZFxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2FuY2VsbGF0aW9uSW5mb0ZldGNoZXIuZmV0Y2hPbmUoe1xuICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2Yoe1xuICAgICAgY2FuY2VsbGFibGU6IGZhbHNlLFxuICAgICAgY2FuY2VsbGF0aW9uRmVlOiAwLFxuICAgICAgaW5mbzogXCJJdGVtIGlzbid0IGJvb2tlZFwiXG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVCb29rZWRCYXNrZXQoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IHRoaXMuY3VycmVudEJhc2tldHMucmVkdWNlKChhY2MsIGJhc2tldCkgPT4ge1xuICAgICAgaWYgKGJhc2tldC5zdWJqZWN0LnZhbHVlLnN0YXR1cyAhPT0gQmFza2V0U3RhdHVzLkJvb2tlZCkge1xuICAgICAgICBhY2MucHVzaChiYXNrZXQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBbXSk7XG4gICAgdGhpcy5iYXNrZXRzLm5leHQodGhpcy5jdXJyZW50QmFza2V0cyk7XG4gIH1cblxuICBzaG93RXJyb3JNb2RhbCgpIHtcbiAgICBjb25zdCBvZmZpY2UgPSB0aGlzLnVzZXJTZXJ2aWNlLmZ1bGxVc2VyRGV0YWlscy5hbGxEZXRhaWxzLnZhbHVlLm9mZmljZTtcbiAgICBjb25zdCBlbWFpbCA9IG9mZmljZT8uc3VwcG9ydEVtYWlsIHx8ICcnO1xuICAgIGNvbnN0IGNvdW50cnlDb2RlID0gb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/LmNvdW50cnlDb2RlXG4gICAgICA/ICcrJyArIG9mZmljZT8uc3VwcG9ydFBob25lTnVtYmVyPy5jb3VudHJ5Q29kZVxuICAgICAgOiAnJztcbiAgICBjb25zdCBudW1iZXIgPSBvZmZpY2U/LnN1cHBvcnRQaG9uZU51bWJlcj8ubnVtYmVyID8gb2ZmaWNlPy5zdXBwb3J0UGhvbmVOdW1iZXI/Lm51bWJlciA6ICcnO1xuXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuTW9kYWxFcnJvckNvbXBvbmVudCxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBlcnJvcjpcbiAgICAgICAgICAnVGhlcmUgYXJlIG1pc3NpbmcgdmFsdWVzIGluIHRoZSBNYW5hZ2VtZW50IEluZm9ybWF0aW9uIHNlY3Rpb24gd2l0aGluIHlvdXIgY29uZmlndXJhdGlvbi4nLFxuICAgICAgICBtaUVycm9yOiB0cnVlLFxuICAgICAgICBlbWFpbCxcbiAgICAgICAgbnVtYmVyOiBgJHtjb3VudHJ5Q29kZX0gJHtudW1iZXJ9YFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlQmFza2V0U2NyYXRjaHBhZE5vdGUoYmFza2V0SWQ6IHN0cmluZywgbm90ZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXROb3RlPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlQmFza2V0Tm90ZS51cGRhdGVPbmUoeyBiYXNrZXRJZCwgbm90ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCYXNrZXRTY3JhdGNocGFkTm90ZXMoYmFza2V0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0Tm90ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFza2V0Tm90ZXMuZmV0Y2hMaXN0KHsgYmFza2V0SWQgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVtYXJrcyhzZXJ2aWNlSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55W10+IHtcbiAgICByZXR1cm4gb2YoTWlDb21tYW5kKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCYXNrZXRJdGVtUmVtYXJrcyhiYXNrZXRJdGVtSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmFza2V0SXRlbUN1c3RvbVJlbWFya1tdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFza2V0SXRlbUN1c3RvbVJlbWFya3MuZmV0Y2hMaXN0KHsgYmFza2V0SXRlbTogYmFza2V0SXRlbUlkIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZEJhc2tldEl0ZW1SZW1hcmsoXG4gICAgYmFza2V0SXRlbUlkOiBzdHJpbmcsXG4gICAgcmVtYXJrVHlwZTogc3RyaW5nLFxuICAgIHRleHQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEJhc2tldEl0ZW1DdXN0b21SZW1hcms+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRCYXNrZXRJdGVtQ3VzdG9tUmVtYXJrLnVwZGF0ZU9uZSh7XG4gICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtSWQsXG4gICAgICByZW1hcmtfdHlwZTogcmVtYXJrVHlwZSxcbiAgICAgIHRleHRcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRCYXNrZXRRdW90ZShiYXNrZXRJZDogc3RyaW5nLCByZXNlbmQ6IGJvb2xlYW4sIG5vdGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEJhc2tldFF1b3RlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFza2V0UXVvdGVGZXRjaGVyLmZldGNoTGlzdCh7IGJhc2tldDogYmFza2V0SWQsIHJlc2VuZCwgbm90ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VCYXNrZXRPd25lcnNoaXAoXG4gICAgYmFza2V0SWQ6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZyxcbiAgICBub3RlPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0UXVvdGU+IHtcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2VCYXNrZXRPd25lcnNoaXBVcGRhdGVyLnVwZGF0ZU9uZSh7IGJhc2tldDogYmFza2V0SWQsIHVzZXI6IHVzZXJJZCwgbm90ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREcmFmdEJhc2tldHMoKTogT2JzZXJ2YWJsZTxEcmFmdEJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLmdldERyYWZ0QmFza2V0c0ZldGNoZXIuZmV0Y2hMaXN0KCk7XG4gIH1cblxuICBwdWJsaWMgcmVzZW5kQXBwcm92YWwoaWQ6IHN0cmluZywgYXBwcm92ZXJDaGFuZ2VkID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2VuZEFwcHJvdmVyRW1haWwuZmV0Y2hMaXN0KHsgaWQsIGFwcHJvdmVyQ2hhbmdlZCB9KS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFxuICAgICAgICBNb2RhbFR5cGVzLlJlc2VuZEFwcHJvdmFsRW1haWxDb21wb25lbnQsXG4gICAgICAgIHsgY2VudGVyZWQ6IHRydWUgfSxcbiAgICAgICAgeyBkYXRhOiAhIWRhdGEgfVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0lmQmFza2V0UmVxdWlyZXNBcHByb3ZhbChiYXNrZXQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmJhc2tldFJlcXVpcmVzQXBwcm92YWwuZmV0Y2hMaXN0KHsgYmFza2V0IH0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0QmFza2V0cygpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRCYXNrZXRzID0gW107XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyUmVtb3ZlQmFza2V0QnlJZChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50QmFza2V0cyA9IHRoaXMuY3VycmVudEJhc2tldHMuZmlsdGVyKGJhc2tldCA9PiBiYXNrZXQuaWQgIT09IGlkKTtcbiAgfVxuXG4gIGNyZWF0ZUludEJhc2tldChiYXNrZXQ6IFVzZXJCYXNrZXRSZXN1bHQpOiBJbnRlcm5hbEJhc2tldDxHVV9RPiB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcm5hbEJhc2tldChcbiAgICAgIGJhc2tldCxcbiAgICAgIHRoaXMuaGVscGVycyxcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLmdldFVzZXJGZXRjaGVyLFxuICAgICAgdGhpcy5yZXF1aXJlc1NlcnZpY2UsXG4gICAgICB0aGlzLnJlcXVpcmVzT3ZlcnJpZGVTZXJ2aWNlXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUJhc2tldEZyb21EcmFmdChcbiAgICBkcmFmdEJhc2tldElkOiBzdHJpbmcsXG4gICAgbGVhZFBhc3NlbmdlcklkOiBzdHJpbmcsXG4gICAgbWFuYWdlbWVudEluZm86IE1hbmFnZW1lbnRJbmZvSW5wdXRbXSxcbiAgICB1c2VySW5mbzogVXNlckluZm9JbnB1dFtdLFxuICAgIGFtZW5kOiBib29sZWFuXG4gICk6IE9ic2VydmFibGU8R2V0VXNlckJhc2tldFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUJhc2tldEZyb21EcmFmdFVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGRyYWZ0QmFza2V0SWQsXG4gICAgICBsZWFkUGFzc2VuZ2VySWQsXG4gICAgICBtYW5hZ2VtZW50SW5mbyxcbiAgICAgIHVzZXJJbmZvLFxuICAgICAgYW1lbmRcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldEFwcHJvdmVyTGlzdEFuZFVwZGF0ZShiYXNrZXQ6IHN0cmluZyk6IFByb21pc2U8U3Vic2NyaXB0aW9uPiB7XG4gICAgLy8gcmFuIG91dCBvZiB3aWxsIHRvIGdldCB0aGlzIHdvcmtpbmcsIHdpbGwgbmVlZCB0byBnZXQgdGhpcyB3b3JraW5nIGZvciBvdGhlciBPQlRzXG4gICAgY29uc3Qgb2ZmaWNlID0gdGhpcy5nZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyLmZldGNoTGlzdCgpO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldFVzZXJBcHByb3ZlcnNGZXRjaGVyLmZldGNoTGlzdCgpO1xuICAgIHJldHVybiBmb3JrSm9pbihbb2ZmaWNlLCB1c2VyXSkuc3Vic2NyaWJlKGFzeW5jIChhcHByb3ZlcnM6IGFueSkgPT4ge1xuICAgICAgY29uc3QgYWxsQXBwcm92ZXJzID0gYXBwcm92ZXJzWzBdLmNvbmNhdChhcHByb3ZlcnNbMV0pO1xuICAgICAgY29uc3QgZW1haWxzID0gYWxsQXBwcm92ZXJzLm1hcCgoeyBlbWFpbCB9OiBVc2VyKSA9PiBlbWFpbCk7XG4gICAgICBjb25zdCBmaWx0ZXJlZEFwcHJvdmVycyA9IGFsbEFwcHJvdmVycy5maWx0ZXIoXG4gICAgICAgICh7IGVtYWlsIH06IFVzZXIsIGluZGV4OiBudW1iZXIpID0+ICFlbWFpbHMuaW5jbHVkZXMoZW1haWwsIGluZGV4ICsgMSlcbiAgICAgICk7XG4gICAgICBpZiAoZmlsdGVyZWRBcHByb3ZlcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGFwcHJvdmVyID0gYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgICAgICBNb2RhbFR5cGVzLkFwcHJvdmVyc01vZGFsQ29tcG9uZW50LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcbiAgICAgICAgICAgIHdpbmRvd0NsYXNzOiAncmVxdWlyZXMtcmVhc29uLWRpYWxvZycsXG4gICAgICAgICAgICBjZW50ZXJlZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBmaWx0ZXJlZEFwcHJvdmVycyB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFwcHJvdmVyKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QmFza2V0QXBwcm92ZXJVcGRhdGVyXG4gICAgICAgICAgICAudXBkYXRlT25lKHtcbiAgICAgICAgICAgICAgYmFza2V0LFxuICAgICAgICAgICAgICBhcHByb3ZlclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEFwcHJvdmVyc0xpc3QoKTogT2JzZXJ2YWJsZTxbVXNlcltdLCBVc2VyW11dPiB7XG4gICAgY29uc3Qgb2ZmaWNlID0gdGhpcy5nZXRPZmZpY2VBcHByb3ZlcnNGZXRjaGVyLmZldGNoTGlzdCgpO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmdldFVzZXJBcHByb3ZlcnNGZXRjaGVyLmZldGNoTGlzdCgpO1xuICAgIHJldHVybiBmb3JrSm9pbihbb2ZmaWNlLCB1c2VyXSk7XG4gIH1cblxuICB1cGRhdGVBcHByb3ZlcihcbiAgICBiYXNrZXQ6IHN0cmluZyxcbiAgICBhcHByb3Zlcjogc3RyaW5nLFxuICAgIGNvbnZlcnRDdXJyZW5jeVRvPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8QmFza2V0RGV0YWlscz4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEJhc2tldEFwcHJvdmVyVXBkYXRlci51cGRhdGVPbmUoe1xuICAgICAgYmFza2V0LFxuICAgICAgYXBwcm92ZXIsXG4gICAgICBjb252ZXJ0Q3VycmVuY3lUb1xuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlTm90aWZ5QXBwcm92ZXIoXG4gICAgYmFza2V0OiBzdHJpbmcsXG4gICAgYXBwcm92ZXI6IHN0cmluZyxcbiAgICBjb252ZXJ0Q3VycmVuY3lUbz86IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEJhc2tldERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RCYXNrZXROb3RpZnlBcHByb3ZlclVwZGF0ZXIudXBkYXRlT25lKHtcbiAgICAgIGJhc2tldCxcbiAgICAgIGFwcHJvdmVyLFxuICAgICAgY29udmVydEN1cnJlbmN5VG9cbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5BcHByb3Zlck1vZGFsKFxuICAgIGFwcHJvdmVyczogVXNlcltdLFxuICAgIGlzU2VsZWN0ZWRBcHByb3ZlcjogYm9vbGVhbixcbiAgICBpc1NlbGVjdGVkTm90aWZ5QXBwcm92ZXI6IGJvb2xlYW4sXG4gICAgYmFza2V0VXNlcjogVXNlclxuICApOiBQcm9taXNlPEJhc2tldFNlbGVjdGVkQXBwcm92ZXI+IHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihcbiAgICAgIE1vZGFsVHlwZXMuQXBwcm92ZXJzTW9kYWxDb21wb25lbnQsXG4gICAgICB7XG4gICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcbiAgICAgICAgd2luZG93Q2xhc3M6ICdyZXF1aXJlcy1yZWFzb24tZGlhbG9nJyxcbiAgICAgICAgY2VudGVyZWQ6IHRydWVcbiAgICAgIH0sXG4gICAgICB7IGFwcHJvdmVycywgaXNTZWxlY3RlZEFwcHJvdmVyLCBpc1NlbGVjdGVkTm90aWZ5QXBwcm92ZXIsIGJhc2tldFVzZXIgfVxuICAgICk7XG4gIH1cblxuICBzaGFyZUJhc2tldChiYXNrZXRJZDogc3RyaW5nLCBzaGFyZWRVc2Vyczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPEJhc2tldD4ge1xuICAgIHJldHVybiB0aGlzLnNoYXJlQmFza2V0VXBkYXRlci51cGRhdGVPbmUoe2Jhc2tldElkLCBzaGFyZWRVc2Vyc30pXG4gIH1cblxuICBnZXRVc2VyU2hhcmVkQmFza2V0cyhsb2dnZWRJblVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCYXNrZXRbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldFVzZXJTaGFyZWRCYXNrZXRzRmV0Y2hlci5mZXRjaExpc3Qoe2xvZ2dlZEluVXNlcklkfSlcbiAgfVxuXG4gIC8vICEgLSBVc2UgbG9jYWxzdG9yYWdlIHRvIHRyYWNrIHRoZSBzaXplIG9mIHNoYXJlZCBiYXNrZXRzIGZvciBlYWNoIHVzZXJcbiAgLy8gISAtIHRha2VzIG9ubHkgYSBmZXcgYnl0ZXMgLSB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBhbW91bnQgdXNlZFxuICAvLyAtIHNvbWUgaGVscGZ1bCBjb2RlIHRvIGRldGVybWluZSB0aGUgc2l6ZSBvZiBsb2NhbCBzdG9yYWdlIC0gdXNlIGl0IGluIHRoZSBicm93c2VyIGNvbnNvbGVcbiAgLy8gdmFyIF9sc1RvdGFsPTAsX3hMZW4sX3g7Zm9yKF94IGluIGxvY2FsU3RvcmFnZSl7IGlmKCFsb2NhbFN0b3JhZ2UuaGFzT3duUHJvcGVydHkoX3gpKXtjb250aW51ZTt9IF94TGVuPSAoKGxvY2FsU3RvcmFnZVtfeF0ubGVuZ3RoICsgX3gubGVuZ3RoKSogMik7X2xzVG90YWwrPV94TGVuOyBjb25zb2xlLmxvZyhfeC5zdWJzdHIoMCw1MCkrXCIgPSBcIisgKF94TGVuLzEwMjQpLnRvRml4ZWQoMikrXCIgS0JcIil9O2NvbnNvbGUubG9nKFwiVG90YWwgPSBcIiArIChfbHNUb3RhbCAvIDEwMjQpLnRvRml4ZWQoMikgKyBcIiBLQlwiKTtcblxuICB1cGRhdGVTaGFyZWRCYXNrZXRDb3VudChzaGFyZWRCYXNrZXRzOiBCYXNrZXRbXSwgdXNlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldExvY2FsSXRlbShgJHt1c2VySWR9X3NoYXJlZF9iYXNrZXRfY291bnRgLCBzaGFyZWRCYXNrZXRzLmxlbmd0aCk7XG4gIH1cblxuICBnZXRTaGFyZWRCYXNrZXRDb3VudCh1c2VySWQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3Qgc3RvcmVkID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRMb2NhbEl0ZW0oYCR7dXNlcklkfV9zaGFyZWRfYmFza2V0X2NvdW50YCk7XG5cbiAgICByZXR1cm4gc3RvcmVkO1xuICB9XG5cbiAgY2FuQW1lbmRCb29raW5nKFxuICAgIGJhc2tldEl0ZW06IEJhc2tldEl0ZW0sXG4gICAgYXJyaXZhbERhdGU6IHN0cmluZyxcbiAgICBkZXBhcnR1cmVEYXRlOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxCZWZvcmVBbWVuZEluZm8+IHtcbiAgICAvLyBOb3QgYW1lbmRhYmxlIGlmIHRoZSBvdXRib3VuZCBkYXRlIHBhc3NlZFxuXG4gICAgaWYgKGJhc2tldEl0ZW0uc3RhdHVzID09PSBCYXNrZXRJdGVtU3RhdHVzLkJvb2tlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FuQW1lbmRCb29raW5nSW5mb0ZldGNoZXIuZmV0Y2hPbmUoe1xuICAgICAgICBiYXNrZXRJdGVtOiBiYXNrZXRJdGVtLmlkLFxuICAgICAgICBhcnJpdmFsRGF0ZTogYXJyaXZhbERhdGUsXG4gICAgICAgIGRlcGFydHVyZURhdGU6IGRlcGFydHVyZURhdGVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBvZih7XG4gICAgICBjYW5BbWVuZDogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIGNoZWNrRm9yU2VsZkFwcHJvdmUoYmFza2V0OiBCYXNrZXREZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgbGV0IGJhc2tldFVzZXIgPSBiYXNrZXQuaW52b2tlZFVzZXIgPyBiYXNrZXQuaW52b2tlZFVzZXIgOiBiYXNrZXQub3duZXI7XG4gICAgbGV0IGlzQWxsb3dTZWxmQXBwcm92ZSA9IGJhc2tldFVzZXIub2ZmaWNlLmFsbG93U2VsZkFwcHJvdmU7XG4gICAgbGV0IHVzZXJBcHByb3ZlcnMgPSBiYXNrZXRVc2VyLnVzZXJBcHByb3ZlcnM7XG4gICAgaWYgKGlzQWxsb3dTZWxmQXBwcm92ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzU2VsZkFwcHJvdmVyID1cbiAgICAgIHVzZXJBcHByb3ZlcnMubGVuZ3RoID09PSAxICYmIHVzZXJBcHByb3ZlcnNbMF0/LmFwcHJvdmVyLmlkID09PSBiYXNrZXRVc2VyLmlkO1xuICAgIHJldHVybiAhaXNTZWxmQXBwcm92ZXI7XG4gIH1cblxuICBhc3luYyBvcGVuQXBwcm92ZVdhcm5pbmcod2FybmluZ01lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oXG4gICAgICBNb2RhbFR5cGVzLkJhc2ljTW9kYWxDb21wb25lbnQsXG4gICAgICB7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBiYWNrZHJvcDogJ3N0YXRpYycgfSxcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICBib2R5OiB3YXJuaW5nTWVzc2FnZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJ1dHRvbk9rOiB0cnVlLFxuICAgICAgICAgIGJ1dHRvbk9rVGV4dDogJ09rJyxcbiAgICAgICAgICBidXR0b25DYW5jZWw6IGZhbHNlLFxuICAgICAgICAgIGJ1dHRvbk9rQWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc2V0UmVxdWlyZXNSZWFzb25Cb29raW5nKGlzQm9va2luZzogYm9vbGVhbikge1xuICAgIHRoaXMucmVxdWlyZXNTZXJ2aWNlLmlzQm9va2luZyA9IGlzQm9va2luZztcbiAgfVxuXG4gIGlzVXNlckFnZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJc0FnZW50KCk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIERldGFpbFNjaGVtYVByb3BlcnRpZXMge1xuICB0eXBlPzogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdpbnRlZ2VyJyB8ICdhcnJheSc7XG4gICRyZWY/OiBzdHJpbmc7XG4gIGZvcm1hdD86IHN0cmluZztcbn1cblxuIl19
|