ng-easycommerce-v18 0.6.30-refresh-token.2 → 0.6.30-refresh-token.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/esm2022/lib/ec-components/checkout-ec/checkout-ec.component.mjs +20 -1
- package/esm2022/lib/ec-services/auth.service.mjs +22 -5
- package/esm2022/lib/ec-services/cart.service.mjs +31 -1
- package/fesm2022/ng-easycommerce-v18.mjs +70 -4
- package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
- package/lib/ec-components/checkout-ec/checkout-ec.component.d.ts +1 -0
- package/lib/ec-services/auth.service.d.ts +6 -0
- package/lib/ec-services/cart.service.d.ts +5 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
# Version 0.6.30-refresh-token.4
|
|
2
|
+
- Checkout stock: el core corta la inicializacion del checkout cuando detecta items del carrito con stock insuficiente antes de armar los pasos.
|
|
3
|
+
- Checkout stock: si existe un conflicto parcial, el checkout notifica `some-products-out-of-stock`; si todo el carrito queda bloqueado, notifica `all-products-out-of-stock`.
|
|
4
|
+
- Checkout stock: se agregan helpers reutilizables en `CartService` para inspeccionar una instantanea del carrito y resolver items con stock insuficiente sin duplicar logica en los frontends.
|
|
5
|
+
- Checkout stock: se agregan tests de cobertura para `CartService` y `CheckoutEcComponent`.
|
|
6
|
+
# Version 0.6.30-refresh-token.3
|
|
7
|
+
- Auth: `JWT_TOKEN` y `REFRESH_TOKEN` se persisten como cookies con expiración para que cerrar la pestaña o el navegador no borre la sesión si los tokens siguen siendo válidos.
|
|
8
|
+
- Auth: `EXPIRATES_IN` se mantiene alineado con la expiración real del JWT para no depender del ciclo de vida de la pestaña.
|
|
9
|
+
- Auth: si el backend no devuelve `refresh_token`, el core limpia ese dato y mantiene el comportamiento legacy sin refresco automático.
|
|
1
10
|
# Version 0.6.30-refresh-token.2
|
|
2
11
|
- Auth: el core guarda el `refresh_token` real cuando el backend lo devuelve y reintenta una sola vez ante `401` usando `POST /shop-api/token/refresh`.
|
|
3
12
|
- Auth: el flujo sigue siendo compatible con backends viejos que solo devuelven `token`; en ese caso no intenta refresh y conserva el logout clásico ante `401/403`.
|
|
@@ -201,9 +201,28 @@ export class CheckoutEcComponent {
|
|
|
201
201
|
this.finishButtonEl = null;
|
|
202
202
|
}
|
|
203
203
|
initializeCheckout() {
|
|
204
|
+
if (this.blockCheckoutIfCartHasStockIssues()) {
|
|
205
|
+
this.canCheckout = false;
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
204
208
|
this.canCheckout = true;
|
|
205
209
|
this.initializeSteps();
|
|
206
210
|
}
|
|
211
|
+
blockCheckoutIfCartHasStockIssues() {
|
|
212
|
+
const stockIssues = this._cartService.getStockIssueItems();
|
|
213
|
+
if (!stockIssues.length) {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
const totalItems = this._cartService.getCartItemsSnapshot().length;
|
|
217
|
+
const allOutOfStock = totalItems > 0 && stockIssues.length >= totalItems;
|
|
218
|
+
this._checkoutService.notifyCheckoutError({
|
|
219
|
+
error: {
|
|
220
|
+
code: 'out_of_stock',
|
|
221
|
+
message: allOutOfStock ? 'all-products-out-of-stock' : 'some-products-out-of-stock'
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
207
226
|
initializeSteps() {
|
|
208
227
|
const steps = [];
|
|
209
228
|
steps.push({ name: this.ADDRESS, label: 'billing-details', state: 'ready' });
|
|
@@ -639,4 +658,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
639
658
|
type: HostListener,
|
|
640
659
|
args: ['window:resize']
|
|
641
660
|
}] } });
|
|
642
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvY2hlY2tvdXQtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvY2hlY2tvdXQtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFDVCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBR1osV0FBVyxFQUVYLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLHNC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Q0FBQztJQUVPLE9BQU8sQ0FBQyxRQUFrQjtRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDMUQsQ0FBQzt3R0FwbEJXLG1CQUFtQjs0RkFBbkIsbUJBQW1CLCtPQWdEakIsbUJBQW1CLHVFQUNuQixrQkFBa0IsZ0RDbkdqQywyaGNBeU5BLHM1T0RyTEUsU0FBUyw2Q0FDVCxlQUFlLDRGQUNmLHdCQUF3QixxRkFDeEIsOEJBQThCLHlFQUM5QixtQkFBbUIsa0lBQ25CLG1CQUFtQix3SUFDbkIsa0JBQWtCLGdIQUNsQixvQkFBb0IseURBQ3BCLHNCQUFzQjs7NEZBTVgsbUJBQW1CO2tCQWxCL0IsU0FBUzsrQkFDQyxpQkFBaUIsY0FDZixJQUFJLFdBQ1A7d0JBQ1IsU0FBUzt3QkFDVCxlQUFlO3dCQUNmLHdCQUF3Qjt3QkFDeEIsOEJBQThCO3dCQUM5QixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLHNCQUFzQjtxQkFDdEIsV0FHUSxDQUFDLHNCQUFzQixDQUFDO3dEQWtEVSxrQkFBa0I7c0JBQTVELFlBQVk7dUJBQUMsbUJBQW1CO2dCQUNTLGlCQUFpQjtzQkFBMUQsWUFBWTt1QkFBQyxrQkFBa0I7Z0JBK1loQywyQkFBMkI7c0JBRjFCLFlBQVk7dUJBQUMsZUFBZTs7c0JBQzVCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFmdGVyVmlld0luaXQsXG5cdENvbXBvbmVudCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RGVzdHJveVJlZixcblx0RWxlbWVudFJlZixcblx0SG9zdExpc3RlbmVyLFxuXHRPbkRlc3Ryb3ksXG5cdE9uSW5pdCxcblx0UExBVEZPUk1fSUQsXG5cdFF1ZXJ5TGlzdCxcblx0Vmlld0NoaWxkcmVuLFxuXHRpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSwgQ2hlY2tvdXRTZXJ2aWNlLCBQYXltZW50U2VydmljZSwgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBQcmljZVZpc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMvcHJpY2UtdmlzaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSwgQ2hlY2tvdXRWaWV3VHlwZSwgSVN0ZXAsIFN0ZXBUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFY0N1cnJlbmN5U3ltYm9sUGlwZSB9IGZyb20gJy4uLy4uL2VjLXBpcGUnO1xuaW1wb3J0IHsgTG9hZGluZ0Z1bGxFY0NvbXBvbmVudCB9IGZyb20gJy4uL3dpZGdldHMtZWMnO1xuaW1wb3J0IHsgU3RlcENvbnRhaW5lckVjQ29tcG9uZW50IH0gZnJvbSAnLi9zdGVwLWNvbnRhaW5lci1lYy9zdGVwLWNvbnRhaW5lci1lYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGV0YWlsQ2hlY2tvdXRCbG9ja0VjQ29tcG9uZW50IH0gZnJvbSAnLi9kZXRhaWwtY2hlY2tvdXQtYmxvY2stZWMvZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhZm9ybUVjQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhZm9ybS1lYy9kYXRhZm9ybS1lYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGF5bWVudEVjQ29tcG9uZW50IH0gZnJvbSAnLi9wYXltZW50LWVjL3BheW1lbnQtZWMuY29tcG9uZW50JztcbmltcG9ydCB7IFNoaXBtZW50RWNDb21wb25lbnQgfSBmcm9tICcuL3NoaXBtZW50LWVjL3NoaXBtZW50LWVjLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2xpYi1jaGVja291dC1lYycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtcblx0XHRBc3luY1BpcGUsXG5cdFx0VHJhbnNsYXRlTW9kdWxlLFxuXHRcdFN0ZXBDb250YWluZXJFY0NvbXBvbmVudCxcblx0XHREZXRhaWxDaGVja291dEJsb2NrRWNDb21wb25lbnQsXG5cdFx0RGF0YWZvcm1FY0NvbXBvbmVudCxcblx0XHRTaGlwbWVudEVjQ29tcG9uZW50LFxuXHRcdFBheW1lbnRFY0NvbXBvbmVudCxcblx0XHRFY0N1cnJlbmN5U3ltYm9sUGlwZSxcblx0XHRMb2FkaW5nRnVsbEVjQ29tcG9uZW50XG5cdF0sXG5cdHRlbXBsYXRlVXJsOiAnLi9jaGVja291dC1lYy5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9jaGVja291dC1lYy5jb21wb25lbnQuc2NzcycsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja291dEVjQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXHRwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2NoZWNrb3V0U2VydmljZSA9IGluamVjdChDaGVja291dFNlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wYXltZW50U2VydmljZSA9IGluamVjdChQYXltZW50U2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2NhcnRTZXJ2aWNlID0gaW5qZWN0KENhcnRTZXJ2aWNlKTtcblx0cHJpdmF0ZSByZWFkb25seSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9jb3JlQ29uc3RhbnRzID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcblx0cHVibGljIHJlYWRvbmx5IHByaWNlVmlzaWJpbGl0eSA9IGluamVjdChQcmljZVZpc2liaWxpdHlTZXJ2aWNlKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgQUREUkVTUzogU3RlcFR5cGUgPSAnYWRkcmVzcyc7XG5cdHB1YmxpYyByZWFkb25seSBTSElQTUVOVDogU3RlcFR5cGUgPSAnc2hpcG1lbnQnO1xuXHRwdWJsaWMgcmVhZG9ubHkgUEFZTUVOVDogU3RlcFR5cGUgPSAncGF5bWVudCc7XG5cblx0cHVibGljIHN0YXRlJCA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5zdGF0ZSQ7XG5cdHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5sb2FkaW5nJDtcblx0cHVibGljIGFzc29jaWF0ZWREYXRhJCA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5hc3NvY2lhdGVkRGF0YSQ7XG5cblx0cHVibGljIGNoYW5uZWw6IGFueTtcblx0cHVibGljIGNhbkNoZWNrb3V0ID0gZmFsc2U7XG5cdHB1YmxpYyBjaGFubmVsUmVhZHkgPSBmYWxzZTtcblx0cHVibGljIGhpZGVQcmljZXMgPSBmYWxzZTtcblx0cHVibGljIGhpZGVEaXNjb3VudHMgPSBmYWxzZTtcblx0cHVibGljIGhpZGVUYXhlcyA9IGZhbHNlO1xuXHRwdWJsaWMgc2hvd1RheExlZ2VuZCA9IGZhbHNlO1xuXHRwdWJsaWMgY2hlY2tvdXRWaWV3OiBDaGVja291dFZpZXdUeXBlID0gJ2xlZ2FjeSc7XG5cdHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG5cdHB1YmxpYyBvcGVuU2VjdGlvbnM6IHN0cmluZ1tdID0gW107XG5cdHB1YmxpYyBzaGlwbWVudFN1bW1hcnk6IHsgbGFiZWw/OiBzdHJpbmc7IGRldGFpbD86IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XG5cdHB1YmxpYyBoaWRlTW9iaWxlU3VtbWFyeUJhciA9IGZhbHNlO1xuXHRwdWJsaWMgc2hvd1Vuc2F2ZWRNb2RhbCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgbGFzdEFzc29jaWF0ZWREYXRhOiBDaGVja291dERhdGFbXSB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGxhc3RQYXltZW50QWRkcmVzc0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgcGF5bWVudEF1dG9PcGVuZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBhbGxTdGVwc1dlcmVSZWFkeSA9IGZhbHNlO1xuXHRwcml2YXRlIGF1dG9DbG9zZWRTdGVwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRwcml2YXRlIG1hbnVhbGx5T3BlbmVkU3RlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0cHJpdmF0ZSBzdGVwRGlydHlNYXAgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblx0cHJpdmF0ZSBzdW1tYXJ5T2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgZmluaXNoQnV0dG9uRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgc3RpY2t5T2Zmc2V0QXBwbGllZCA9IGZhbHNlO1xuXHRwcml2YXRlIHBlbmRpbmdDbG9zZVN0ZXBOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSByZWFkb25seSBpc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLl9wbGF0Zm9ybUlkKTtcblxuXHRAVmlld0NoaWxkcmVuKERhdGFmb3JtRWNDb21wb25lbnQpIHByaXZhdGUgZGF0YWZvcm1Db21wb25lbnRzITogUXVlcnlMaXN0PERhdGFmb3JtRWNDb21wb25lbnQ+O1xuXHRAVmlld0NoaWxkcmVuKFBheW1lbnRFY0NvbXBvbmVudCkgcHJpdmF0ZSBwYXltZW50Q29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxQYXltZW50RWNDb21wb25lbnQ+O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY2hlY2tvdXRWaWV3ID0gdGhpcy5fY29yZUNvbnN0YW50cy5nZXRDaGVja291dFZpZXcoKTtcblx0XHR0aGlzLl9jb3JlQ29uc3RhbnRzLmNoZWNrb3V0VmlldyRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUodmlldyA9PiB7XG5cdFx0XHRcdHRoaXMuY2hlY2tvdXRWaWV3ID0gdmlldyB8fCAnbGVnYWN5Jztcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5fY2hhbm5lbFNlcnZpY2UuY2hhbm5lbCRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMuY2hhbm5lbCA9IHJlcztcblx0XHRcdFx0dGhpcy5oaWRlUHJpY2VzID0gISFyZXM/LmhpZGVQcmljZXM7XG5cdFx0XHRcdHRoaXMuaGlkZURpc2NvdW50cyA9ICEhcmVzPy5oaWRlRGlzY291bnRzO1xuXHRcdFx0XHR0aGlzLmhpZGVUYXhlcyA9ICEhcmVzPy5oaWRlVGF4ZXM7XG5cdFx0XHRcdHRoaXMuc2hvd1RheExlZ2VuZCA9ICEhcmVzPy5zaG93VGF4TGVnZW5kO1xuXHRcdFx0XHQvLyBTb2xvIG1hcmNhciBjb21vIGxpc3RvIGVuIGVsIGJyb3dzZXI6IGVsIGNoZWNrb3V0IG5vIGRlYmUgcmVuZGVyaXphcnNlXG5cdFx0XHRcdC8vIGVuIFNTUiBwb3JxdWUgZWwgY2hlY2tvdXRWaWV3IGHDum4gbm8gZXN0w6EgcmVzdWVsdG8gZGVsIGNhbmFsLFxuXHRcdFx0XHQvLyBsbyBxdWUgY2F1c2FiYSBoeWRyYXRpb24gbWlzbWF0Y2ggeSBtb3N0cmFiYSBlbCBsZWdhY3kgYWxlYXRvcmlhbWVudGUuXG5cdFx0XHRcdGlmICh0aGlzLmlzQnJvd3Nlcikge1xuXHRcdFx0XHRcdHRoaXMuY2hhbm5lbFJlYWR5ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5oaWRlUHJpY2VzKSB7XG5cdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnLyddKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuY2FuQ2hlY2tvdXQpIHtcblx0XHRcdFx0XHR0aGlzLmluaXRpYWxpemVTdGVwcygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuX2NhcnRTZXJ2aWNlLnNob3dQcmljZSRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUoc2hvd1ByaWNlID0+IHtcblx0XHRcdFx0dGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmFzc29jaWF0ZWREYXRhJFxuXHRcdFx0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuXHRcdFx0LnN1YnNjcmliZShkYXRhID0+IHtcblx0XHRcdFx0dGhpcy5sYXN0QXNzb2NpYXRlZERhdGEgPSBkYXRhO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9yb3V0ZXIuZXZlbnRzXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG5cdFx0XHRcdHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcblx0XHRcdFx0aWYgKHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoJy9jaGVja291dCcpKSB7XG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxUb1RvcE9uRW50ZXIoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLl9jaGVja291dFNlcnZpY2UuY2FuQ2hlY2tvdXQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGNvbnRhaW5JdGVtcyA9PiB7XG5cdFx0XHRpZiAoY29udGFpbkl0ZW1zKSB0aGlzLmluaXRpYWxpemVDaGVja291dCgpO1xuXHRcdFx0ZWxzZSB0aGlzLmNhbkNoZWNrb3V0ID0gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHR0aGlzLl9jaGVja291dFNlcnZpY2Uuc3RhdGUkXG5cdFx0XHQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKChzdGVwczogSVN0ZXBbXSkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkgfHwgIXN0ZXBzKSByZXR1cm47XG5cdFx0XHRcdHN0ZXBzLmZvckVhY2goKHN0ZXA6IElTdGVwKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCFzdGVwPy5uYW1lKSByZXR1cm47XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmlzU3RlcFJlYWR5KHN0ZXAubmFtZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmRlbGV0ZShzdGVwLm5hbWUpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGhpcy5pc1N0ZXBEaXJ0eShzdGVwLm5hbWUpKSByZXR1cm47XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0IXRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmhhcyhzdGVwLm5hbWUpICYmXG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5TZWN0aW9ucy5pbmNsdWRlcyhzdGVwLm5hbWUpICYmXG5cdFx0XHRcdFx0XHQhdGhpcy5tYW51YWxseU9wZW5lZFN0ZXBzLmhhcyhzdGVwLm5hbWUpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5TZWN0aW9ucyA9IHRoaXMub3BlblNlY3Rpb25zLmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHN0ZXAubmFtZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmF1dG9DbG9zZWRTdGVwcy5hZGQoc3RlcC5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBhbGxSZWFkeSA9IHRoaXMuYXJlQWxsU3RlcHNSZWFkeShzdGVwcyBhcyB7IG5hbWU/OiBzdHJpbmcgfVtdKTtcblx0XHRcdFx0aWYgKGFsbFJlYWR5ICYmICF0aGlzLmFsbFN0ZXBzV2VyZVJlYWR5KSB7XG5cdFx0XHRcdFx0dGhpcy5hbGxTdGVwc1dlcmVSZWFkeSA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNCcm93c2VyKSB7XG5cdFx0XHRcdFx0XHR3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFsbFJlYWR5KSB7XG5cdFx0XHRcdFx0dGhpcy5hbGxTdGVwc1dlcmVSZWFkeSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuX2NoZWNrb3V0U2VydmljZS5zdGF0ZSRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkpIHJldHVybjtcblx0XHRcdFx0Y29uc3QgaGFzUGF5bWVudFN0ZXAgPSB0aGlzLmhhc1N0ZXAoJ3BheW1lbnQnKTtcblx0XHRcdFx0aWYgKCFoYXNQYXltZW50U3RlcCkgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCBhZGRyZXNzRGF0YSA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnYWRkcmVzcycpO1xuXHRcdFx0XHRpZiAoIWFkZHJlc3NEYXRhKSByZXR1cm47XG5cdFx0XHRcdGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KGFkZHJlc3NEYXRhKTtcblx0XHRcdFx0aWYgKHRoaXMubGFzdFBheW1lbnRBZGRyZXNzS2V5ID09PSBrZXkpIHJldHVybjtcblx0XHRcdFx0dGhpcy5sYXN0UGF5bWVudEFkZHJlc3NLZXkgPSBrZXk7XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuX3BheW1lbnRTZXJ2aWNlLm1ldGhvZHMkXG5cdFx0XHQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKG1ldGhvZHMgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkpIHJldHVybjtcblx0XHRcdFx0aWYgKHRoaXMucGF5bWVudEF1dG9PcGVuZWQpIHJldHVybjtcblx0XHRcdFx0aWYgKCFtZXRob2RzIHx8ICFtZXRob2RzLmxlbmd0aCkgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCBoYXNTaGlwbWVudFN0ZXAgPSB0aGlzLmhhc1N0ZXAoJ3NoaXBtZW50Jyk7XG5cdFx0XHRcdGlmIChoYXNTaGlwbWVudFN0ZXAgJiYgIXRoaXMuaXNTdGVwUmVhZHkoJ3NoaXBtZW50JykpIHJldHVybjtcblx0XHRcdFx0aWYgKCFoYXNTaGlwbWVudFN0ZXAgJiYgIXRoaXMuaXNTdGVwRW5hYmxlZCgncGF5bWVudCcpKSByZXR1cm47XG5cdFx0XHRcdGlmICghdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMoJ3BheW1lbnQnKSkge1xuXHRcdFx0XHRcdHRoaXMub3BlblNlY3Rpb25zLnB1c2goJ3BheW1lbnQnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnBheW1lbnRBdXRvT3BlbmVkID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcblx0XHR0aGlzLnNjcm9sbFRvVG9wT25FbnRlcigpO1xuXHRcdHRoaXMudXBkYXRlU3RpY2t5T2Zmc2V0KCk7XG5cdFx0dGhpcy5zZXR1cFN1bW1hcnlPYnNlcnZlcigpO1xuXHRcdHRoaXMuZmluaXNoQnV0dG9uRWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG5cdFx0dGhpcy5ldmFsdWF0ZU1vYmlsZUJhclZpc2liaWxpdHkoKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnN1bW1hcnlPYnNlcnZlcikge1xuXHRcdFx0dGhpcy5zdW1tYXJ5T2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0dGhpcy5zdW1tYXJ5T2JzZXJ2ZXIgPSBudWxsO1xuXHRcdH1cblx0XHR0aGlzLmZpbmlzaEJ1dHRvbkVsID0gbnVsbDtcblx0fVxuXG5cdGluaXRpYWxpemVDaGVja291dCgpIHtcblx0XHR0aGlzLmNhbkNoZWNrb3V0ID0gdHJ1ZTtcblx0XHR0aGlzLmluaXRpYWxpemVTdGVwcygpO1xuXHR9XG5cblx0aW5pdGlhbGl6ZVN0ZXBzKCkge1xuXHRcdGNvbnN0IHN0ZXBzOiBJU3RlcFtdID0gW107XG5cdFx0c3RlcHMucHVzaCh7IG5hbWU6IHRoaXMuQUREUkVTUywgbGFiZWw6ICdiaWxsaW5nLWRldGFpbHMnLCBzdGF0ZTogJ3JlYWR5JyB9KTtcblx0XHR0aGlzLmNoYW5uZWw/LmlzU2tpcHBpbmdTaGlwcGluZ1N0ZXBBbGxvd2VkID8gbnVsbCA6IHN0ZXBzLnB1c2goeyBuYW1lOiB0aGlzLlNISVBNRU5ULCBsYWJlbDogJ3NoaXBtZW50LW1ldGhvZCcgfSk7XG5cdFx0dGhpcy5jaGFubmVsPy5pc1NraXBwaW5nUGF5bWVudFN0ZXBBbGxvd2VkID8gbnVsbCA6IHN0ZXBzLnB1c2goeyBuYW1lOiB0aGlzLlBBWU1FTlQsIGxhYmVsOiAncGF5bWVudCcgfSk7XG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLnNldFN0ZXBzKHN0ZXBzKTtcblx0XHRpZiAodGhpcy5jaGVja291dFZpZXcgPT09ICdzaW5nbGUnKSB7XG5cdFx0XHRjb25zdCBmaXJzdE5hbWUgPSBzdGVwc1swXT8ubmFtZTtcblx0XHRcdHRoaXMub3BlblNlY3Rpb25zID0gZmlyc3ROYW1lID8gW2ZpcnN0TmFtZV0gOiBbXTtcblx0XHRcdHRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmNsZWFyKCk7XG5cdFx0XHR0aGlzLm1hbnVhbGx5T3BlbmVkU3RlcHMuY2xlYXIoKTtcblx0XHRcdHRoaXMuc3RlcERpcnR5TWFwLmNsZWFyKCk7XG5cdFx0XHR0aGlzLnBheW1lbnRBdXRvT3BlbmVkID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aXNMZWdhY3lDaGVja291dCA9ICgpID0+IHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJztcblxuXHRnZXRTaW5nbGVTdGVwVGl0bGUgPSAoc3RlcDogSVN0ZXAgJiB7IGxhYmVsPzogc3RyaW5nIH0pID0+XG5cdFx0c3RlcD8ubmFtZSA9PT0gJ2FkZHJlc3MnID8gJ2FkZHJlc3Mtc2VsZWN0aW9uJyA6IHN0ZXA/LmxhYmVsO1xuXG5cdGdldFNpbmdsZVN1bW1hcnlMYWJlbCA9IChzdGVwOiBJU3RlcCAmIHsgbGFiZWw/OiBzdHJpbmcgfSkgPT4ge1xuXHRcdGlmIChzdGVwPy5uYW1lID09PSAnYWRkcmVzcycpIHJldHVybiB0aGlzLmdldEFkZHJlc3NTdW1tYXJ5TGFiZWwoKTtcblx0XHRpZiAoc3RlcD8ubmFtZSA9PT0gJ3NoaXBtZW50JykgcmV0dXJuIHRoaXMuc2hpcG1lbnRTdW1tYXJ5Py5sYWJlbCB8fCAnJztcblx0XHRyZXR1cm4gJyc7XG5cdH1cblxuXHRnZXRTaW5nbGVTdW1tYXJ5VmFsdWUgPSAoc3RlcDogSVN0ZXAgJiB7IGxhYmVsPzogc3RyaW5nIH0pID0+IHtcblx0XHRpZiAoc3RlcD8ubmFtZSA9PT0gJ3NoaXBtZW50JykgcmV0dXJuIHRoaXMuc2hpcG1lbnRTdW1tYXJ5Py5kZXRhaWwgfHwgJyc7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0U3RlcFN1bW1hcnkoc3RlcD8ubmFtZSBhcyBTdGVwVHlwZSk7XG5cdH1cblxuXHRpc1N0ZXBSZWFkeSA9IChzdGVwTmFtZTogU3RlcFR5cGUpID0+IHRoaXMuX2NoZWNrb3V0U2VydmljZS5pc1N0ZXBSZWFkeShzdGVwTmFtZSk7XG5cblx0aXNTdGVwRGlydHkgPSAoc3RlcE5hbWU6IHN0cmluZykgPT4gISF0aGlzLnN0ZXBEaXJ0eU1hcC5nZXQoc3RlcE5hbWUpO1xuXG5cdGlzU3RlcENvbXBsZXRlID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUgYXMgU3RlcFR5cGUpICYmICF0aGlzLmlzU3RlcERpcnR5KHN0ZXBOYW1lKTtcblxuXHRvblN0ZXBEaXJ0eUNoYW5nZSA9IChzdGVwTmFtZTogc3RyaW5nLCBpc0RpcnR5OiBib29sZWFuKSA9PiB7XG5cdFx0dGhpcy5zdGVwRGlydHlNYXAuc2V0KHN0ZXBOYW1lLCBpc0RpcnR5KTtcblx0fVxuXG5cdGlzU3RlcEVuYWJsZWQgPSAoc3RlcE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBzU25hcHNob3QoKTtcblx0XHRjb25zdCBpbmRleCA9IHN0ZXBzLmZpbmRJbmRleCgoc3RlcDogYW55KSA9PiBzdGVwLm5hbWUgPT09IHN0ZXBOYW1lKTtcblx0XHRpZiAoaW5kZXggPD0gMCkgcmV0dXJuIHRydWU7XG5cdFx0aWYgKHRoaXMuY2hlY2tvdXRWaWV3ID09PSAnc2luZ2xlJyAmJiBzdGVwTmFtZSA9PT0gJ3BheW1lbnQnKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pc1N0ZXBSZWFkeSgnYWRkcmVzcycpO1xuXHRcdH1cblx0XHRjb25zdCBwcmV2U3RlcCA9IHN0ZXBzW2luZGV4IC0gMV07XG5cdFx0cmV0dXJuIHRoaXMuaXNTdGVwUmVhZHkocHJldlN0ZXAubmFtZSk7XG5cdH1cblxuXHR0b2dnbGVTZWN0aW9uKHN0ZXBOYW1lOiBzdHJpbmcpIHtcblx0XHRpZiAoIXRoaXMuaXNTdGVwRW5hYmxlZChzdGVwTmFtZSkpIHJldHVybjtcblx0XHRjb25zdCBpbmRleCA9IHRoaXMub3BlblNlY3Rpb25zLmluZGV4T2Yoc3RlcE5hbWUpO1xuXHRcdGlmIChpbmRleCA+PSAwKSB7XG5cdFx0XHRpZiAodGhpcy5pc1N0ZXBSZWFkeShzdGVwTmFtZSBhcyBTdGVwVHlwZSkgJiYgdGhpcy5pc1N0ZXBEaXJ0eShzdGVwTmFtZSkpIHtcblx0XHRcdFx0dGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IHN0ZXBOYW1lO1xuXHRcdFx0XHR0aGlzLnNob3dVbnNhdmVkTW9kYWwgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLm9wZW5TZWN0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9wZW5TZWN0aW9ucy5wdXNoKHN0ZXBOYW1lKTtcblx0XHRcdGlmICh0aGlzLmlzU3RlcFJlYWR5KHN0ZXBOYW1lIGFzIFN0ZXBUeXBlKSkge1xuXHRcdFx0XHR0aGlzLm1hbnVhbGx5T3BlbmVkU3RlcHMuYWRkKHN0ZXBOYW1lKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2Nyb2xsVG9TZWN0aW9uKHN0ZXBOYW1lKTtcblx0XHR9XG5cdH1cblxuXHRnb1RvTmV4dFNlY3Rpb24oc3RlcE5hbWU6IHN0cmluZykge1xuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBzU25hcHNob3QoKTtcblx0XHRjb25zdCBpbmRleCA9IHN0ZXBzLmZpbmRJbmRleCgoc3RlcDogYW55KSA9PiBzdGVwLm5hbWUgPT09IHN0ZXBOYW1lKTtcblx0XHRpZiAoaW5kZXggPT09IC0xIHx8ICFzdGVwc1tpbmRleCArIDFdKSByZXR1cm47XG5cdFx0Y29uc3QgbmV4dE5hbWUgPSBzdGVwc1tpbmRleCArIDFdLm5hbWU7XG5cdFx0dGhpcy5vcGVuU2VjdGlvbnMgPSB0aGlzLm9wZW5TZWN0aW9ucy5maWx0ZXIobmFtZSA9PiBuYW1lICE9PSBzdGVwTmFtZSk7XG5cdFx0aWYgKCF0aGlzLm9wZW5TZWN0aW9ucy5pbmNsdWRlcyhuZXh0TmFtZSkpIHRoaXMub3BlblNlY3Rpb25zLnB1c2gobmV4dE5hbWUpO1xuXHRcdHRoaXMuc2Nyb2xsVG9TZWN0aW9uKG5leHROYW1lKTtcblx0fVxuXG5cdGdvVG9OZXh0RnJvbUFkZHJlc3MgPSAoKSA9PiB0aGlzLmdvVG9OZXh0U2VjdGlvbignYWRkcmVzcycpO1xuXG5cdGlzU2VjdGlvbk9wZW4gPSAoc3RlcE5hbWU6IHN0cmluZykgPT4gdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMoc3RlcE5hbWUpO1xuXG5cdGdldFN1bW1hcnlMYWJlbCA9ICh0eXBlOiBDaGVja291dERhdGFbJ3R5cGUnXSkgPT4ge1xuXHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0Y2FzZSAnc3VidG90YWwnOlxuXHRcdFx0XHRyZXR1cm4gJ3N1YnRvdGFsJztcblx0XHRcdGNhc2UgJ2Rpc2NvdW50Jzpcblx0XHRcdFx0cmV0dXJuICdkaXNjb3VudCc7XG5cdFx0XHRjYXNlICdjb3Vwb24nOlxuXHRcdFx0XHRyZXR1cm4gJ2NvdXBvbic7XG5cdFx0XHRjYXNlICdzaGlwbWVudCc6XG5cdFx0XHRcdHJldHVybiAnc2hpcG1lbnQnO1xuXHRcdFx0Y2FzZSAndGF4ZXMnOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5zaG93VGF4TGVnZW5kID8gJ25hdGlvbmFsLXRheGVzJyA6ICd0YXhlcyc7XG5cdFx0XHRjYXNlICdjbGllbnRUYXhlcyc6XG5cdFx0XHRcdHJldHVybiAnY2xpZW50VGF4ZXMnO1xuXHRcdFx0Y2FzZSAndG90YWwnOlxuXHRcdFx0XHRyZXR1cm4gJ3RvdGFsJztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB0eXBlO1xuXHRcdH1cblx0fVxuXG5cdGdldFN1bW1hcnlEYXRhID0gKGRhdGE6IENoZWNrb3V0RGF0YVtdIHwgbnVsbCkgPT4ge1xuXHRcdGlmICghZGF0YSkgcmV0dXJuIFtdO1xuXHRcdGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybiBkYXRhO1xuXHRcdGxldCBzdW1tYXJ5RGF0YSA9IGRhdGE7XG5cdFx0Y29uc3QgaGFzU2hpcG1lbnQgPSBzdW1tYXJ5RGF0YS5zb21lKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnc2hpcG1lbnQnKTtcblx0XHRpZiAoIWhhc1NoaXBtZW50ICYmIHRoaXMuaXNTdGVwUmVhZHkoJ3NoaXBtZW50JykpIHtcblx0XHRcdGNvbnN0IHN0ZXBEYXRhOiBhbnkgPSB0aGlzLl9jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ3NoaXBtZW50Jyk7XG5cdFx0XHRjb25zdCBzaGlwbWVudEFtb3VudCA9IHN0ZXBEYXRhPy5wcmljZSA/PyBzdGVwRGF0YT8uY29udHJhY3Q/LnByaWNlID8/IHN0ZXBEYXRhPy5hbW91bnQ7XG5cdFx0XHRpZiAoc2hpcG1lbnRBbW91bnQgIT0gbnVsbCkge1xuXHRcdFx0XHRjb25zdCBzaGlwbWVudEl0ZW06IENoZWNrb3V0RGF0YSA9IHtcblx0XHRcdFx0XHR0eXBlOiAnc2hpcG1lbnQnLFxuXHRcdFx0XHRcdG5hbWU6ICdzaGlwbWVudCcsXG5cdFx0XHRcdFx0YW1vdW50OiBzaGlwbWVudEFtb3VudFxuXHRcdFx0XHR9O1xuXHRcdFx0XHRjb25zdCB0b3RhbEluZGV4ID0gc3VtbWFyeURhdGEuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS50eXBlID09PSAndG90YWwnKTtcblx0XHRcdFx0aWYgKHRvdGFsSW5kZXggPT09IC0xKSB7XG5cdFx0XHRcdFx0c3VtbWFyeURhdGEgPSBbLi4uc3VtbWFyeURhdGEsIHNoaXBtZW50SXRlbV07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgdG90YWxJdGVtID0gc3VtbWFyeURhdGFbdG90YWxJbmRleF07XG5cdFx0XHRcdFx0Y29uc3QgYWRqdXN0ZWRUb3RhbCA9IHtcblx0XHRcdFx0XHRcdC4uLnRvdGFsSXRlbSxcblx0XHRcdFx0XHRcdGFtb3VudDogKHRvdGFsSXRlbT8uYW1vdW50IHx8IDApICsgKHNoaXBtZW50QW1vdW50IHx8IDApXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRzdW1tYXJ5RGF0YSA9IFtcblx0XHRcdFx0XHRcdC4uLnN1bW1hcnlEYXRhLnNsaWNlKDAsIHRvdGFsSW5kZXgpLFxuXHRcdFx0XHRcdFx0c2hpcG1lbnRJdGVtLFxuXHRcdFx0XHRcdFx0YWRqdXN0ZWRUb3RhbCxcblx0XHRcdFx0XHRcdC4uLnN1bW1hcnlEYXRhLnNsaWNlKHRvdGFsSW5kZXggKyAxKVxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuYWdncmVnYXRlRGlzY291bnRzKHN1bW1hcnlEYXRhKTtcblx0fVxuXG5cdGdldFRvdGFsQW1vdW50ID0gKGRhdGE6IENoZWNrb3V0RGF0YVtdIHwgbnVsbCkgPT4ge1xuXHRcdGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5nZXRTdW1tYXJ5RGF0YShkYXRhKTtcblx0XHRpZiAoIXN1bW1hcnlEYXRhIHx8ICFzdW1tYXJ5RGF0YS5sZW5ndGgpIHJldHVybiBudWxsO1xuXHRcdGNvbnN0IHRvdGFsSXRlbSA9IHN1bW1hcnlEYXRhLmZpbmQoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICd0b3RhbCcpO1xuXHRcdHJldHVybiB0b3RhbEl0ZW0gPyB0b3RhbEl0ZW0uYW1vdW50IDogbnVsbDtcblx0fVxuXG5cdHNob3VsZFNob3dTdW1tYXJ5SXRlbSA9IChpdGVtOiBDaGVja291dERhdGEpID0+IHtcblx0XHRpZiAoIWl0ZW0pIHJldHVybiBmYWxzZTtcblx0XHRpZiAoKGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JyB8fCBpdGVtLnR5cGUgPT09ICdjb3Vwb24nKSAmJiBpdGVtLmFtb3VudCA9PSAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKChpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJykgJiYgdGhpcy5oaWRlRGlzY291bnRzKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKGl0ZW0udHlwZSA9PT0gJ3RheGVzJyAmJiAodGhpcy5oaWRlVGF4ZXMgfHwgaXRlbS5hbW91bnQgPT0gMCkpIHJldHVybiBmYWxzZTtcblx0XHRpZiAoaXRlbS50eXBlID09PSAnY2xpZW50VGF4ZXMnICYmIGl0ZW0uYW1vdW50ID09IDApIHJldHVybiBmYWxzZTtcblx0XHRpZiAodGhpcy5zaG91bGRIaWRlU3VtbWFyeVN1YnRvdGFsKGl0ZW0pKSByZXR1cm4gZmFsc2U7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRnZXRBZGRyZXNzU3VtbWFyeUxhYmVsID0gKCkgPT4ge1xuXHRcdGNvbnN0IHN0ZXBEYXRhOiBhbnkgPSB0aGlzLl9jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ2FkZHJlc3MnKTtcblx0XHRjb25zdCBhZGRyZXNzID0gc3RlcERhdGE/LnNoaXBwaW5nQWRkcmVzcyB8fCBzdGVwRGF0YT8uc2VsZWN0ZWQ/LnNoaXBwaW5nQWRkcmVzcztcblx0XHRjb25zdCBjb250YWN0ID0gYWRkcmVzcz8uYWRkcmVzc0NvbnRhY3QgfHwgYWRkcmVzcz8uY29udGFjdCB8fCBhZGRyZXNzIHx8IHt9O1xuXHRcdHJldHVybiBbY29udGFjdC5maXJzdE5hbWUsIGNvbnRhY3QubGFzdE5hbWVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyk7XG5cdH1cblxuXHRnZXRTdGVwU3VtbWFyeSA9IChzdGVwTmFtZTogU3RlcFR5cGUgfCB1bmRlZmluZWQpID0+IHtcblx0XHRjb25zdCBzdGVwRGF0YTogYW55ID0gc3RlcE5hbWUgPyB0aGlzLl9jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoc3RlcE5hbWUpIDogbnVsbDtcblx0XHRpZiAoIXN0ZXBEYXRhKSByZXR1cm4gJyc7XG5cdFx0aWYgKHN0ZXBOYW1lID09PSAnYWRkcmVzcycpIHtcblx0XHRcdGNvbnN0IGFkZHJlc3MgPSBzdGVwRGF0YS5zaGlwcGluZ0FkZHJlc3MgfHwgc3RlcERhdGE/LnNlbGVjdGVkPy5zaGlwcGluZ0FkZHJlc3MgfHwgc3RlcERhdGE/LnNoaXBwaW5nQWRkcmVzcztcblx0XHRcdGlmICghYWRkcmVzcykgcmV0dXJuICcnO1xuXHRcdFx0Y29uc3QgbWFpbiA9IFthZGRyZXNzLnN0cmVldCwgYWRkcmVzcy5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpO1xuXHRcdFx0Y29uc3QgcmVnaW9uID0gW2FkZHJlc3MucHJvdmluY2VDb2RlIHx8IGFkZHJlc3MucHJvdmluY2UsIGFkZHJlc3MuY291bnRyeUNvZGUgfHwgYWRkcmVzcy5jb3VudHJ5XVxuXHRcdFx0XHQuZmlsdGVyKEJvb2xlYW4pXG5cdFx0XHRcdC5qb2luKCcsICcpO1xuXHRcdFx0cmV0dXJuIFttYWluLCByZWdpb25dLmZpbHRlcihCb29sZWFuKS5qb2luKCcg4oCUICcpO1xuXHRcdH1cblx0XHRpZiAoc3RlcE5hbWUgPT09ICdzaGlwbWVudCcpIHtcblx0XHRcdGNvbnN0IG1ldGhvZExhYmVsID0gc3RlcERhdGEubWV0aG9kPy5uYW1lIHx8IHN0ZXBEYXRhLm1ldGhvZF9uYW1lIHx8ICcnO1xuXHRcdFx0Y29uc3QgY29udHJhY3RMYWJlbCA9IHN0ZXBEYXRhLmNvbnRyYWN0Py5uYW1lIHx8IHN0ZXBEYXRhLmNvbnRyYWN0X25hbWUgfHwgc3RlcERhdGEubmFtZSB8fCBzdGVwRGF0YS5jb250cmFjdCB8fCAnJztcblx0XHRcdHJldHVybiBbbWV0aG9kTGFiZWwsIGNvbnRyYWN0TGFiZWxdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgwrcgJyk7XG5cdFx0fVxuXHRcdGlmIChzdGVwTmFtZSA9PT0gJ3BheW1lbnQnKSB7XG5cdFx0XHRyZXR1cm4gc3RlcERhdGEubmFtZSB8fCBzdGVwRGF0YS5jb2RlIHx8ICcnO1xuXHRcdH1cblx0XHRyZXR1cm4gJyc7XG5cdH1cblxuXHRzZXRTaGlwbWVudFN1bW1hcnkgPSAoc3VtbWFyeTogeyBsYWJlbD86IHN0cmluZzsgZGV0YWlsPzogc3RyaW5nIH0pID0+IHtcblx0XHRjb25zdCBoYXNMYWJlbCA9IEJvb2xlYW4oc3VtbWFyeT8ubGFiZWwpO1xuXHRcdGNvbnN0IGhhc0RldGFpbCA9IEJvb2xlYW4oc3VtbWFyeT8uZGV0YWlsKTtcblx0XHR0aGlzLnNoaXBtZW50U3VtbWFyeSA9IGhhc0xhYmVsIHx8IGhhc0RldGFpbCA/IHN1bW1hcnkgOiBudWxsO1xuXHR9XG5cblx0YXJlQWxsU3RlcHNSZWFkeSA9IChzdGVwczogeyBuYW1lPzogc3RyaW5nIH1bXSkgPT4ge1xuXHRcdGlmICghc3RlcHMgfHwgIXN0ZXBzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiBzdGVwcy5ldmVyeShzdGVwID0+IHtcblx0XHRcdGlmICghc3RlcD8ubmFtZSkgcmV0dXJuIHRydWU7XG5cdFx0XHRpZiAoIXRoaXMuaXNTdGVwUmVhZHkoc3RlcC5uYW1lIGFzIFN0ZXBUeXBlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0cmV0dXJuICF0aGlzLmlzU3RlcERpcnR5KHN0ZXAubmFtZSk7XG5cdFx0fSk7XG5cdH1cblxuXHRzaG91bGRIaWRlRmluaXNoQnV0dG9uID0gKHN0ZXBzOiB7IG5hbWU/OiBzdHJpbmcgfVtdKSA9PiB7XG5cdFx0aWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICghdGhpcy5hcmVBbGxTdGVwc1JlYWR5KHN0ZXBzKSkgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IHBheW1lbnREYXRhOiBhbnkgPSB0aGlzLl9jaGVja291dFNlcnZpY2UuZ2V0U3RlcERhdGEoJ3BheW1lbnQnKTtcblx0XHRyZXR1cm4gISFwYXltZW50RGF0YT8uYXV0b0NvbXBsZXRlO1xuXHR9XG5cblx0ZW5kQ2hlY2tvdXQgPSAoKSA9PiB7XG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmNvbXBsZXRlKCkudGhlbihcblx0XHRcdHJlcyA9PiByZXMub2sgJiYgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnY2hlY2tvdXQvb3JkZXJfc3VjY2VzcyddKSxcblx0XHRcdCgpID0+IHt9XG5cdFx0KTtcblx0fVxuXG5cdGNhbmNlbFVuc2F2ZWRDbG9zZSA9ICgpID0+IHtcblx0XHR0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lID0gbnVsbDtcblx0XHR0aGlzLnNob3dVbnNhdmVkTW9kYWwgPSBmYWxzZTtcblx0fVxuXG5cdGNvbmZpcm1VbnNhdmVkRGlzY2FyZCA9ICgpID0+IHtcblx0XHRpZiAoIXRoaXMucGVuZGluZ0Nsb3NlU3RlcE5hbWUpIHtcblx0XHRcdHRoaXMuc2hvd1Vuc2F2ZWRNb2RhbCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCBzdGVwTmFtZSA9IHRoaXMucGVuZGluZ0Nsb3NlU3RlcE5hbWU7XG5cdFx0dGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IG51bGw7XG5cdFx0dGhpcy5kaXNjYXJkU3RlcENoYW5nZXMoc3RlcE5hbWUpO1xuXHRcdHRoaXMub3BlblNlY3Rpb25zID0gdGhpcy5vcGVuU2VjdGlvbnMuZmlsdGVyKG5hbWUgPT4gbmFtZSAhPT0gc3RlcE5hbWUpO1xuXHRcdHRoaXMuc2hvd1Vuc2F2ZWRNb2RhbCA9IGZhbHNlO1xuXHR9XG5cblx0ZGlzY2FyZFN0ZXBDaGFuZ2VzKHN0ZXBOYW1lOiBzdHJpbmcpIHtcblx0XHRpZiAoc3RlcE5hbWUgPT09ICdhZGRyZXNzJykge1xuXHRcdFx0Y29uc3QgZGF0YWZvcm0gPSB0aGlzLmRhdGFmb3JtQ29tcG9uZW50cz8uZmlyc3Q7XG5cdFx0XHRkYXRhZm9ybT8uZGlzY2FyZENoYW5nZXM/LigpO1xuXHRcdFx0dGhpcy5zdGVwRGlydHlNYXAuc2V0KHN0ZXBOYW1lLCBmYWxzZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmIChzdGVwTmFtZSA9PT0gJ3BheW1lbnQnKSB7XG5cdFx0XHRjb25zdCBwYXltZW50ID0gdGhpcy5wYXltZW50Q29tcG9uZW50cz8uZmlyc3Q7XG5cdFx0XHRwYXltZW50Py5kaXNjYXJkQ2hhbmdlcz8uKCk7XG5cdFx0XHR0aGlzLnN0ZXBEaXJ0eU1hcC5zZXQoc3RlcE5hbWUsIGZhbHNlKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zdGVwRGlydHlNYXAuc2V0KHN0ZXBOYW1lLCBmYWxzZSk7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJylcblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG5cdGV2YWx1YXRlTW9iaWxlQmFyVmlzaWJpbGl0eSgpIHtcblx0XHRpZiAoIXRoaXMuaXNCcm93c2VyKSByZXR1cm47XG5cdFx0aWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuO1xuXHRcdHRoaXMudXBkYXRlU3RpY2t5T2Zmc2V0KCk7XG5cdFx0aWYgKCF0aGlzLmZpbmlzaEJ1dHRvbkVsKSB7XG5cdFx0XHR0aGlzLmZpbmlzaEJ1dHRvbkVsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjaGVja291dEZpbmlzaEJ0bicpO1xuXHRcdFx0aWYgKCF0aGlzLmZpbmlzaEJ1dHRvbkVsKSByZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IHJlY3QgPSB0aGlzLmZpbmlzaEJ1dHRvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IDA7XG5cdFx0dGhpcy5oaWRlTW9iaWxlU3VtbWFyeUJhciA9IHJlY3QudG9wIDwgdmlld3BvcnRIZWlnaHQgLSA4MDtcblx0fVxuXG5cdHByaXZhdGUgYWdncmVnYXRlRGlzY291bnRzKGRhdGE6IENoZWNrb3V0RGF0YVtdKSB7XG5cdFx0aWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkgcmV0dXJuIFtdO1xuXHRcdGNvbnN0IGRpc2NvdW50VG90YWwgPSBkYXRhXG5cdFx0XHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlID09PSAnZGlzY291bnQnKVxuXHRcdFx0LnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyAoY3Vyci5hbW91bnQgfHwgMCksIDApO1xuXHRcdGNvbnN0IGNvdXBvblRvdGFsID0gZGF0YVxuXHRcdFx0LmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2NvdXBvbicpXG5cdFx0XHQucmVkdWNlKChhY2MsIGN1cnIpID0+IGFjYyArIChjdXJyLmFtb3VudCB8fCAwKSwgMCk7XG5cdFx0Y29uc3QgZmlsdGVyZWQgPSBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPT0gJ2Rpc2NvdW50JyAmJiBpdGVtLnR5cGUgIT09ICdjb3Vwb24nKTtcblxuXHRcdGlmICh0aGlzLmhpZGVEaXNjb3VudHMpIHtcblx0XHRcdHJldHVybiBmaWx0ZXJlZDtcblx0XHR9XG5cblx0XHRjb25zdCBleHRyYXM6IENoZWNrb3V0RGF0YVtdID0gW107XG5cdFx0aWYgKGRpc2NvdW50VG90YWwgIT09IDApIHtcblx0XHRcdGV4dHJhcy5wdXNoKHsgdHlwZTogJ2Rpc2NvdW50JywgbmFtZTogJ2Rpc2NvdW50JywgYW1vdW50OiBkaXNjb3VudFRvdGFsIH0pO1xuXHRcdH1cblx0XHRpZiAoY291cG9uVG90YWwgIT09IDApIHtcblx0XHRcdGV4dHJhcy5wdXNoKHsgdHlwZTogJ2NvdXBvbicsIG5hbWU6ICdjb3Vwb24nLCBhbW91bnQ6IGNvdXBvblRvdGFsIH0pO1xuXHRcdH1cblx0XHRpZiAoIWV4dHJhcy5sZW5ndGgpIHJldHVybiBmaWx0ZXJlZDtcblxuXHRcdGNvbnN0IHN1YnRvdGFsSW5kZXggPSBmaWx0ZXJlZC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzdWJ0b3RhbCcpO1xuXHRcdGlmIChzdWJ0b3RhbEluZGV4ICE9PSAtMSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gWy4uLmZpbHRlcmVkXTtcblx0XHRcdHJlc3VsdC5zcGxpY2Uoc3VidG90YWxJbmRleCArIDEsIDAsIC4uLmV4dHJhcyk7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblxuXHRcdGNvbnN0IGZpcnN0SW5kZXggPSBkYXRhLmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50JyB8fCBpdGVtLnR5cGUgPT09ICdjb3Vwb24nKTtcblx0XHRpZiAoZmlyc3RJbmRleCA9PT0gLTEpIHJldHVybiBbLi4uZmlsdGVyZWQsIC4uLmV4dHJhc107XG5cdFx0Y29uc3QgaW5zZXJ0QXQgPSBkYXRhXG5cdFx0XHQuc2xpY2UoMCwgZmlyc3RJbmRleClcblx0XHRcdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT09ICdkaXNjb3VudCcgJiYgaXRlbS50eXBlICE9PSAnY291cG9uJykubGVuZ3RoO1xuXHRcdGNvbnN0IHJlc3VsdCA9IFsuLi5maWx0ZXJlZF07XG5cdFx0cmVzdWx0LnNwbGljZShpbnNlcnRBdCwgMCwgLi4uZXh0cmFzKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cHJpdmF0ZSBzaG91bGRIaWRlU3VtbWFyeVN1YnRvdGFsKGl0ZW06IENoZWNrb3V0RGF0YSkge1xuXHRcdGlmIChpdGVtPy50eXBlICE9PSAnc3VidG90YWwnKSByZXR1cm4gZmFsc2U7XG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMubGFzdEFzc29jaWF0ZWREYXRhO1xuXHRcdGlmICghZGF0YT8ubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cdFx0Y29uc3Qgc3VtbWFyeURhdGEgPSB0aGlzLmdldFN1bW1hcnlEYXRhKGRhdGEpO1xuXHRcdGNvbnN0IHRvdGFsSXRlbSA9IHN1bW1hcnlEYXRhLmZpbmQoZGF0YUl0ZW0gPT4gZGF0YUl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG5cdFx0cmV0dXJuICEhdG90YWxJdGVtICYmIGl0ZW0uYW1vdW50ID09PSB0b3RhbEl0ZW0uYW1vdW50O1xuXHR9XG5cblx0cHJpdmF0ZSBzY3JvbGxUb1NlY3Rpb24oc3RlcE5hbWU6IHN0cmluZykge1xuXHRcdGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdGNvbnN0IHJvb3QgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRpZiAoIXJvb3QpIHJldHVybjtcblx0XHRcdGNvbnN0IHNlY3Rpb24gPSByb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXN0ZXA9XCIke3N0ZXBOYW1lfVwiXWApIGFzIEhUTUxFbGVtZW50O1xuXHRcdFx0aWYgKCFzZWN0aW9uKSByZXR1cm47XG5cdFx0XHRjb25zdCBoZWFkZXIgPSAoc2VjdGlvbi5xdWVyeVNlbGVjdG9yKCcuc2VjdGlvbi1oZWFkZXInKSBhcyBIVE1MRWxlbWVudCkgfHwgc2VjdGlvbjtcblx0XHRcdGNvbnN0IHRvcCA9IGhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG5cdFx0XHRjb25zdCBvZmZzZXQgPSB0aGlzLmdldFN0aWNreUhlYWRlck9mZnNldCgpO1xuXHRcdFx0d2luZG93LnNjcm9sbFRvKHsgdG9wOiBNYXRoLm1heCgwLCB0b3AgLSBvZmZzZXQpLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG5cdFx0fSwgNTApO1xuXHR9XG5cblx0cHJpdmF0ZSBnZXRTdGlja3lIZWFkZXJPZmZzZXQoKTogbnVtYmVyIHtcblx0XHRpZiAoIXRoaXMuaXNCcm93c2VyKSByZXR1cm4gMTI7XG5cdFx0Y29uc3QgZmFsbGJhY2sgPSAxNjtcblx0XHRjb25zdCBzZWxlY3RvcnMgPSBbXG5cdFx0XHQnaGVhZGVyJyxcblx0XHRcdCcuc2l0ZS1oZWFkZXInLFxuXHRcdFx0Jy5oZWFkZXInLFxuXHRcdFx0Jy5uYXZiYXInLFxuXHRcdFx0Jy5tYWluLWhlYWRlcicsXG5cdFx0XHQnLnRvcGJhcicsXG5cdFx0XHQnLnRvcC1iYXInLFxuXHRcdFx0Jy5hbm5vdW5jZW1lbnQnLFxuXHRcdFx0Jy5hbm5vdW5jZW1lbnQtYmFyJyxcblx0XHRcdCcucHJvbW8tYmFyJyxcblx0XHRcdCcuc3RpY2t5Jyxcblx0XHRcdCcuaXMtc3RpY2t5Jyxcblx0XHRcdCcuZml4ZWQtdG9wJ1xuXHRcdF0uam9pbignLCcpO1xuXHRcdGNvbnN0IGNhbmRpZGF0ZXMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKSkgYXMgSFRNTEVsZW1lbnRbXTtcblx0XHRpZiAoIWNhbmRpZGF0ZXMubGVuZ3RoKSByZXR1cm4gZmFsbGJhY2s7XG5cdFx0bGV0IG1heEJvdHRvbSA9IDA7XG5cdFx0Zm9yIChjb25zdCBlbCBvZiBjYW5kaWRhdGVzKSB7XG5cdFx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0XHRcdGNvbnN0IHBvc2l0aW9uID0gc3R5bGUucG9zaXRpb247XG5cdFx0XHRpZiAocG9zaXRpb24gIT09ICdmaXhlZCcgJiYgcG9zaXRpb24gIT09ICdzdGlja3knKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdGlmIChyZWN0LmhlaWdodCA8PSAwKSBjb250aW51ZTtcblx0XHRcdGlmIChyZWN0LmJvdHRvbSA8PSAwKSBjb250aW51ZTtcblx0XHRcdGlmIChyZWN0LnRvcCA+IDIwKSBjb250aW51ZTtcblx0XHRcdG1heEJvdHRvbSA9IE1hdGgubWF4KG1heEJvdHRvbSwgcmVjdC5ib3R0b20pO1xuXHRcdH1cblx0XHRpZiAoIW1heEJvdHRvbSkgcmV0dXJuIGZhbGxiYWNrO1xuXHRcdHJldHVybiBNYXRoLm1heChmYWxsYmFjaywgTWF0aC5yb3VuZChtYXhCb3R0b20pICsgOCk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVN0aWNreU9mZnNldCgpIHtcblx0XHRpZiAoIXRoaXMuaXNCcm93c2VyKSByZXR1cm47XG5cdFx0aWYgKHRoaXMuY2hlY2tvdXRWaWV3ICE9PSAnc2luZ2xlJykgcmV0dXJuO1xuXHRcdGNvbnN0IHJvb3QgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0aWYgKCFyb290KSByZXR1cm47XG5cdFx0Y29uc3QgdGFyZ2V0ID0gKHJvb3QucXVlcnlTZWxlY3RvcignI2FwcENoZWNrb3V0RWMnKSBhcyBIVE1MRWxlbWVudCkgfHwgcm9vdDtcblx0XHRjb25zdCBvZmZzZXQgPSB0aGlzLmdldFN0aWNreUhlYWRlck9mZnNldCgpO1xuXHRcdHRhcmdldC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1lYy1jaGVja291dC1zdGlja3ktdG9wJywgYCR7b2Zmc2V0fXB4YCk7XG5cdFx0dGhpcy5zdGlja3lPZmZzZXRBcHBsaWVkID0gdHJ1ZTtcblx0fVxuXG5cdHByaXZhdGUgc2Nyb2xsVG9Ub3BPbkVudGVyKCkge1xuXHRcdGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogMCwgbGVmdDogMCwgYmVoYXZpb3I6ICdhdXRvJyB9KTtcblx0XHR9LCAwKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0dXBTdW1tYXJ5T2JzZXJ2ZXIoKSB7XG5cdFx0aWYgKCF0aGlzLmlzQnJvd3NlcikgcmV0dXJuO1xuXHRcdGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybjtcblx0XHRjb25zdCByb290ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXHRcdGlmICghcm9vdCkgcmV0dXJuO1xuXHRcdGNvbnN0IGZpbmlzaEJ0biA9IHJvb3QucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG5cdFx0aWYgKCFmaW5pc2hCdG4pIHJldHVybjtcblxuXHRcdHRoaXMuc3VtbWFyeU9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0XHRjb25zdCBlbnRyeSA9IGVudHJpZXNbMF07XG5cdFx0XHR0aGlzLmhpZGVNb2JpbGVTdW1tYXJ5QmFyID0gISFlbnRyeSAmJiBlbnRyeS5pc0ludGVyc2VjdGluZztcblx0XHR9LCB7IHJvb3RNYXJnaW46ICcwcHggMHB4IC0xMjBweCAwcHgnLCB0aHJlc2hvbGQ6IDAgfSk7XG5cblx0XHR0aGlzLnN1bW1hcnlPYnNlcnZlci5vYnNlcnZlKGZpbmlzaEJ0bik7XG5cdH1cblxuXHRwcml2YXRlIGhhc1N0ZXAoc3RlcE5hbWU6IFN0ZXBUeXBlKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc3RlcHMgPSB0aGlzLl9jaGVja291dFNlcnZpY2UuZ2V0U3RlcHNTbmFwc2hvdCgpO1xuXHRcdHJldHVybiBzdGVwcy5zb21lKChzdGVwOiBhbnkpID0+IHN0ZXAubmFtZSA9PT0gc3RlcE5hbWUpO1xuXHR9XG59XG4iLCI8bWFpbiBjbGFzcz1cInB5LTRcIiBpZD1cImFwcENoZWNrb3V0RWNcIj5cbiAgICBAaWYobG9hZGluZyQgfCBhc3luYzsgYXMgbG9hZCl7XG4gICAgICAgIEBpZihsb2FkKXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1sb2FkaW5nLW92ZXJsYXlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbG9hZGluZy1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtbG9hZGluZy1mdWxsLWVjPjwvYXBwLWxvYWRpbmctZnVsbC1lYz5cbiAgICAgICAgICAgICAgICAgICAgPGg1Pnt7ICdwcm9jZXNzaW5nLXBheW1lbnQnIHwgdHJhbnNsYXRlIH19PC9oNT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQGlmKGNoYW5uZWxSZWFkeSkge1xuICAgIEBpZihjYW5DaGVja291dCl7XG4gICAgICAgIEBpZihjaGVja291dFZpZXcgPT09ICdzaW5nbGUnKXtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXIgY2hlY2tvdXQtc2luZ2xlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjaGVja291dC1zaW5nbGUtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOCBjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihzdGF0ZSQgfCBhc3luYzsgYXMgc3RlcHMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1zaW5nbGUtc3RlcHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvcihzdGVwIG9mIHN0ZXBzOyB0cmFjayBzdGVwLm5hbWU7IGxldCB4ID0gJGluZGV4KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC1zZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXN0ZXBdPVwic3RlcC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZGlzYWJsZWRdPVwiIWlzU3RlcEVuYWJsZWQoc3RlcC5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWNvbXBsZXRlXT1cImlzU3RlcENvbXBsZXRlKHN0ZXAubmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc1NlY3Rpb25PcGVuKHN0ZXAubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzU3RlcEVuYWJsZWQoc3RlcC5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWN0aW9uKHN0ZXAubmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uLWluZGV4XCI+e3sgeCArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U2luZ2xlU3RlcFRpdGxlKHN0ZXApIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGlzU3RlcENvbXBsZXRlKHN0ZXAubmFtZSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uLXN0YXRlXCI+JiMxMDAwMzs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoaXNTdGVwQ29tcGxldGUoc3RlcC5uYW1lKSAmJiAhaXNTZWN0aW9uT3BlbihzdGVwLm5hbWUpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tc3VtbWFyeVwiIHJvbGU9XCJidXR0b25cIiB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlY3Rpb24oc3RlcC5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJ0b2dnbGVTZWN0aW9uKHN0ZXAubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwidG9nZ2xlU2VjdGlvbihzdGVwLm5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY3Rpb24tc3VtbWFyeS1sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFNpbmdsZVN1bW1hcnlMYWJlbChzdGVwKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uLXN1bW1hcnktdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRTaW5nbGVTdW1tYXJ5VmFsdWUoc3RlcCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VjdGlvbi1zdW1tYXJ5LWVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlY3Rpb24oc3RlcC5uYW1lKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJ0b2dnbGVTZWN0aW9uKHN0ZXAubmFtZSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwidG9nZ2xlU2VjdGlvbihzdGVwLm5hbWUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnZWRpdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIiBbaGlkZGVuXT1cIiFpc1NlY3Rpb25PcGVuKHN0ZXAubmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAoc3RlcC5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2FkZHJlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1kYXRhZm9ybS1lY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFjdEFkZHJlc3NWaWV3XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmV4dFN0ZXBdPVwiZ29Ub05leHRGcm9tQWRkcmVzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXJ0eUNoYW5nZSk9XCJvblN0ZXBEaXJ0eUNoYW5nZSgnYWRkcmVzcycsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1kYXRhZm9ybS1lYz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgnc2hpcG1lbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1zaGlwbWVudC1lY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFjdFNoaXBtZW50Vmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkdmFuY2VTdGVwKT1cImdvVG9OZXh0U2VjdGlvbihzdGVwLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1bW1hcnlDaGFuZ2UpPVwic2V0U2hpcG1lbnRTdW1tYXJ5KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1zaGlwbWVudC1lYz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjYXNlICgncGF5bWVudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLXBheW1lbnQtZWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RQYXltZW50Vmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpcnR5Q2hhbmdlKT1cIm9uU3RlcERpcnR5Q2hhbmdlKCdwYXltZW50JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLXBheW1lbnQtZWM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTQgY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoc3RhdGUkIHwgYXN5bmM7IGFzIGNoZWNrb3V0U3RhdGUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihwcmljZVZpc2liaWxpdHkuY2FuU2hvd1ByaWNlcyQgfCBhc3luYyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZSBjbGFzcz1cImNoZWNrb3V0LXN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cInN1bW1hcnktdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGVja291dFZpZXcgPT09ICdzaW5nbGUnID8gKCdwYXltZW50LXN1bW1hcnknIHwgdHJhbnNsYXRlKSA6ICgncHVyY2hhc2Utc3VtbWFyeScgfCB0cmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGFzc29jaWF0ZWREYXRhJCB8IGFzeW5jOyBhcyBkYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS10b3RhbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvcihpdGVtIG9mIGdldFN1bW1hcnlEYXRhKGRhdGEpOyB0cmFjayAkaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKHNob3VsZFNob3dTdW1tYXJ5SXRlbShpdGVtKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktdG90YWwtcm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnN1bW1hcnktdG90YWwtcm93LXRvdGFsXT1cIml0ZW0udHlwZSA9PT0gJ3RvdGFsJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBnZXRTdW1tYXJ5TGFiZWwoaXRlbS50eXBlKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoY2hlY2tvdXRWaWV3ID09PSAnc2luZ2xlJyAmJiBpdGVtLnR5cGUgPT09ICdzaGlwbWVudCcgJiYgKGl0ZW0uYW1vdW50ID09IG51bGwgfHwgaXRlbS5hbW91bnQgPT09IDApKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnZnJlZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uYW1vdW50ICE9IDAgPyAoaXRlbS5hbW91bnQgfCBlY0N1cnJlbmN5U3ltYm9sOidhbHdheXNTaG93RGVjaW1hbHMnKSA6ICgnZnJlZScgfCB0cmFuc2xhdGUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGFyZUFsbFN0ZXBzUmVhZHkoY2hlY2tvdXRTdGF0ZSkgJiYgIXNob3VsZEhpZGVGaW5pc2hCdXR0b24oY2hlY2tvdXRTdGF0ZSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gdmFsaWQtYnRuIHctMTAwIG10LTMgdGV4dC11cHBlcmNhc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNoZWNrb3V0RmluaXNoQnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVuZENoZWNrb3V0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2ZpbmlzaC1jaGVja291dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hc2lkZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGFyZUFsbFN0ZXBzUmVhZHkoY2hlY2tvdXRTdGF0ZSkgJiYgIXNob3VsZEhpZGVGaW5pc2hCdXR0b24oY2hlY2tvdXRTdGF0ZSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzaWRlIGNsYXNzPVwiY2hlY2tvdXQtc3VtbWFyeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gdmFsaWQtYnRuIHctMTAwIG10LTMgdGV4dC11cHBlcmNhc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNoZWNrb3V0RmluaXNoQnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVuZENoZWNrb3V0KClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2ZpbmlzaC1jaGVja291dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgQGlmKGFzc29jaWF0ZWREYXRhJCB8IGFzeW5jOyBhcyBkYXRhKXtcbiAgICAgICAgICAgICAgICAgICAgQGlmKHN0YXRlJCB8IGFzeW5jOyBhcyBjaGVja291dFN0YXRlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihwcmljZVZpc2liaWxpdHkuY2FuU2hvd1ByaWNlcyQgfCBhc3luYyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktbW9iaWxlLWJhclwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiaGlkZU1vYmlsZVN1bW1hcnlCYXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktbW9iaWxlLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktbW9iaWxlLWxhYmVsXCI+e3sgJ3RvdGFsJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS1tb2JpbGUtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRUb3RhbEFtb3VudChkYXRhKSAhPSBudWxsID8gKGdldFRvdGFsQW1vdW50KGRhdGEpIHwgZWNDdXJyZW5jeVN5bWJvbDonYWx3YXlzU2hvd0RlY2ltYWxzJykgOiAnLS0nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoIXNob3VsZEhpZGVGaW5pc2hCdXR0b24oY2hlY2tvdXRTdGF0ZSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2YWxpZC1idG4gc3VtbWFyeS1tb2JpbGUtYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFyZUFsbFN0ZXBzUmVhZHkoY2hlY2tvdXRTdGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbmRDaGVja291dCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2ZpbmlzaC1jaGVja291dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAaWYoc2hvd1Vuc2F2ZWRNb2RhbCl7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja291dC11bnNhdmVkLW1vZGFsLWJhY2tkcm9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtdW5zYXZlZC1tb2RhbC1jb250ZW50XCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPnt7ICd1bnNhdmVkLWNoYW5nZXMtdGl0bGUnIHwgdHJhbnNsYXRlIH19PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbFVuc2F2ZWRDbG9zZSgpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3Vuc2F2ZWQtY2hhbmdlcy1ib2R5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1rZWVwLWVkaXRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbFVuc2F2ZWRDbG9zZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAndW5zYXZlZC1jaGFuZ2VzLWNvbnRpbnVlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWRpc2NhcmRcIiAoY2xpY2spPVwiY29uZmlybVVuc2F2ZWREaXNjYXJkKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICd1bnNhdmVkLWNoYW5nZXMtZGlzY2FyZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGFwcC1kZXRhaWwtY2hlY2tvdXQtYmxvY2stZWM+PC9hcHAtZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtMTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihzdGF0ZSQgfCBhc3luYzsgYXMgc3RlcHMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzdGVwcGVyXCIgY2xhc3M9XCJicy1zdGVwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHJvdyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBzdGVwcGVyQ29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yKHN0ZXAgb2Ygc3RlcHM7IHRyYWNrICRpbmRleDsgbGV0IHg9JGluZGV4KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHB4LTAgY29sLTInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidzdGVwIGQtaW5saW5lLWZsZXggYWxpZ24taXRlbXMtY2VudGVyJ1wiIFthdHRyLmRhdGEtdGFyZ2V0XT1cIicjdGVzdC1sLScrc3RlcC5wcmlvcml0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ3B4LTIgcm91bmRlZC1jaXJjbGUgdGV4dC13aGl0ZSBmb250LWJvbGQgYnMtc3RlcHBlci1udW1iZXIgJyArIChzdGVwLnN0YXRlID09ICdyZWFkeScgPyAnYmctcHJpbWFyeScgOiAnYmctc2Vjb25kYXJ5JykgXCI+e3t4KzF9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnMtc3RlcHBlci1sYWJlbFwiPnt7IHN0ZXAubGFiZWwgfHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYoeCA8IHN0ZXBzLmxlbmd0aC0xKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj48aHIgW2NsYXNzXT1cIid3LTEwMCBsaW5lICcgKyAoc3RlcC5zdGF0ZSA9PSAnZG9pbmcnID8gJ2xpbmUtYWN0aXZlJyA6ICdsaW5lLWRlZmF1bHQnKVwiID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnMtc3RlcHBlci1jb250ZW50IG1hcmdpbi1ib3R0b20taVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1zdGVwLWNvbnRhaW5lci1lYyBbc3RlcHNdPVwic3RlcHNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcFwiPjwvZGl2PlxuICAgIH1cbiAgICB9XG48L21haW4+XG4iXX0=
|
|
661
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tvdXQtZWMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvY2hlY2tvdXQtZWMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZWFzeWNvbW1lcmNlLXYxOC9zcmMvbGliL2VjLWNvbXBvbmVudHMvY2hlY2tvdXQtZWMvY2hlY2tvdXQtZWMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLFNBQVMsRUFDVCxzQkFBc0IsRUFDdEIsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBR1osV0FBVyxFQUVYLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLHNC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a0lBQ25CLG1CQUFtQix3SUFDbkIsa0JBQWtCLGdIQUNsQixvQkFBb0IseURBQ3BCLHNCQUFzQjs7NEZBTVgsbUJBQW1CO2tCQWxCL0IsU0FBUzsrQkFDQyxpQkFBaUIsY0FDZixJQUFJLFdBQ1A7d0JBQ1IsU0FBUzt3QkFDVCxlQUFlO3dCQUNmLHdCQUF3Qjt3QkFDeEIsOEJBQThCO3dCQUM5QixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLHNCQUFzQjtxQkFDdEIsV0FHUSxDQUFDLHNCQUFzQixDQUFDO3dEQWtEVSxrQkFBa0I7c0JBQTVELFlBQVk7dUJBQUMsbUJBQW1CO2dCQUNTLGlCQUFpQjtzQkFBMUQsWUFBWTt1QkFBQyxrQkFBa0I7Z0JBd2FoQywyQkFBMkI7c0JBRjFCLFlBQVk7dUJBQUMsZUFBZTs7c0JBQzVCLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEFmdGVyVmlld0luaXQsXG5cdENvbXBvbmVudCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0RGVzdHJveVJlZixcblx0RWxlbWVudFJlZixcblx0SG9zdExpc3RlbmVyLFxuXHRPbkRlc3Ryb3ksXG5cdE9uSW5pdCxcblx0UExBVEZPUk1fSUQsXG5cdFF1ZXJ5TGlzdCxcblx0Vmlld0NoaWxkcmVuLFxuXHRpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSwgQ2hlY2tvdXRTZXJ2aWNlLCBQYXltZW50U2VydmljZSwgQ2FydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9lYy1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBQcmljZVZpc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWMtc2VydmljZXMvcHJpY2UtdmlzaWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IENvcmVDb25zdGFudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IENoZWNrb3V0RGF0YSwgQ2hlY2tvdXRWaWV3VHlwZSwgSVN0ZXAsIFN0ZXBUeXBlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFY0N1cnJlbmN5U3ltYm9sUGlwZSB9IGZyb20gJy4uLy4uL2VjLXBpcGUnO1xuaW1wb3J0IHsgTG9hZGluZ0Z1bGxFY0NvbXBvbmVudCB9IGZyb20gJy4uL3dpZGdldHMtZWMnO1xuaW1wb3J0IHsgU3RlcENvbnRhaW5lckVjQ29tcG9uZW50IH0gZnJvbSAnLi9zdGVwLWNvbnRhaW5lci1lYy9zdGVwLWNvbnRhaW5lci1lYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGV0YWlsQ2hlY2tvdXRCbG9ja0VjQ29tcG9uZW50IH0gZnJvbSAnLi9kZXRhaWwtY2hlY2tvdXQtYmxvY2stZWMvZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhZm9ybUVjQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhZm9ybS1lYy9kYXRhZm9ybS1lYy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGF5bWVudEVjQ29tcG9uZW50IH0gZnJvbSAnLi9wYXltZW50LWVjL3BheW1lbnQtZWMuY29tcG9uZW50JztcbmltcG9ydCB7IFNoaXBtZW50RWNDb21wb25lbnQgfSBmcm9tICcuL3NoaXBtZW50LWVjL3NoaXBtZW50LWVjLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ2xpYi1jaGVja291dC1lYycsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtcblx0XHRBc3luY1BpcGUsXG5cdFx0VHJhbnNsYXRlTW9kdWxlLFxuXHRcdFN0ZXBDb250YWluZXJFY0NvbXBvbmVudCxcblx0XHREZXRhaWxDaGVja291dEJsb2NrRWNDb21wb25lbnQsXG5cdFx0RGF0YWZvcm1FY0NvbXBvbmVudCxcblx0XHRTaGlwbWVudEVjQ29tcG9uZW50LFxuXHRcdFBheW1lbnRFY0NvbXBvbmVudCxcblx0XHRFY0N1cnJlbmN5U3ltYm9sUGlwZSxcblx0XHRMb2FkaW5nRnVsbEVjQ29tcG9uZW50XG5cdF0sXG5cdHRlbXBsYXRlVXJsOiAnLi9jaGVja291dC1lYy5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsOiAnLi9jaGVja291dC1lYy5jb21wb25lbnQuc2NzcycsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja291dEVjQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXHRwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsU2VydmljZSA9IGluamVjdChDaGFubmVsU2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2NoZWNrb3V0U2VydmljZSA9IGluamVjdChDaGVja291dFNlcnZpY2UpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wYXltZW50U2VydmljZSA9IGluamVjdChQYXltZW50U2VydmljZSk7XG5cdHByaXZhdGUgcmVhZG9ubHkgX2NhcnRTZXJ2aWNlID0gaW5qZWN0KENhcnRTZXJ2aWNlKTtcblx0cHJpdmF0ZSByZWFkb25seSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cdHByaXZhdGUgcmVhZG9ubHkgX3BsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9jb3JlQ29uc3RhbnRzID0gaW5qZWN0KENvcmVDb25zdGFudHNTZXJ2aWNlKTtcblx0cHVibGljIHJlYWRvbmx5IHByaWNlVmlzaWJpbGl0eSA9IGluamVjdChQcmljZVZpc2liaWxpdHlTZXJ2aWNlKTtcblxuXHRwdWJsaWMgcmVhZG9ubHkgQUREUkVTUzogU3RlcFR5cGUgPSAnYWRkcmVzcyc7XG5cdHB1YmxpYyByZWFkb25seSBTSElQTUVOVDogU3RlcFR5cGUgPSAnc2hpcG1lbnQnO1xuXHRwdWJsaWMgcmVhZG9ubHkgUEFZTUVOVDogU3RlcFR5cGUgPSAncGF5bWVudCc7XG5cblx0cHVibGljIHN0YXRlJCA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5zdGF0ZSQ7XG5cdHB1YmxpYyBsb2FkaW5nJCA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5sb2FkaW5nJDtcblx0cHVibGljIGFzc29jaWF0ZWREYXRhJCA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5hc3NvY2lhdGVkRGF0YSQ7XG5cblx0cHVibGljIGNoYW5uZWw6IGFueTtcblx0cHVibGljIGNhbkNoZWNrb3V0ID0gZmFsc2U7XG5cdHB1YmxpYyBjaGFubmVsUmVhZHkgPSBmYWxzZTtcblx0cHVibGljIGhpZGVQcmljZXMgPSBmYWxzZTtcblx0cHVibGljIGhpZGVEaXNjb3VudHMgPSBmYWxzZTtcblx0cHVibGljIGhpZGVUYXhlcyA9IGZhbHNlO1xuXHRwdWJsaWMgc2hvd1RheExlZ2VuZCA9IGZhbHNlO1xuXHRwdWJsaWMgY2hlY2tvdXRWaWV3OiBDaGVja291dFZpZXdUeXBlID0gJ2xlZ2FjeSc7XG5cdHB1YmxpYyBjcmVkaXRBY2NvdW50U2hvd1ByaWNlczogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xuXG5cdHB1YmxpYyBvcGVuU2VjdGlvbnM6IHN0cmluZ1tdID0gW107XG5cdHB1YmxpYyBzaGlwbWVudFN1bW1hcnk6IHsgbGFiZWw/OiBzdHJpbmc7IGRldGFpbD86IHN0cmluZyB9IHwgbnVsbCA9IG51bGw7XG5cdHB1YmxpYyBoaWRlTW9iaWxlU3VtbWFyeUJhciA9IGZhbHNlO1xuXHRwdWJsaWMgc2hvd1Vuc2F2ZWRNb2RhbCA9IGZhbHNlO1xuXG5cdHByaXZhdGUgbGFzdEFzc29jaWF0ZWREYXRhOiBDaGVja291dERhdGFbXSB8IG51bGwgPSBudWxsO1xuXHRwcml2YXRlIGxhc3RQYXltZW50QWRkcmVzc0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgcGF5bWVudEF1dG9PcGVuZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBhbGxTdGVwc1dlcmVSZWFkeSA9IGZhbHNlO1xuXHRwcml2YXRlIGF1dG9DbG9zZWRTdGVwcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRwcml2YXRlIG1hbnVhbGx5T3BlbmVkU3RlcHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblx0cHJpdmF0ZSBzdGVwRGlydHlNYXAgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblx0cHJpdmF0ZSBzdW1tYXJ5T2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgZmluaXNoQnV0dG9uRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdHByaXZhdGUgc3RpY2t5T2Zmc2V0QXBwbGllZCA9IGZhbHNlO1xuXHRwcml2YXRlIHBlbmRpbmdDbG9zZVN0ZXBOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblx0cHJpdmF0ZSByZWFkb25seSBpc0Jyb3dzZXIgPSBpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLl9wbGF0Zm9ybUlkKTtcblxuXHRAVmlld0NoaWxkcmVuKERhdGFmb3JtRWNDb21wb25lbnQpIHByaXZhdGUgZGF0YWZvcm1Db21wb25lbnRzITogUXVlcnlMaXN0PERhdGFmb3JtRWNDb21wb25lbnQ+O1xuXHRAVmlld0NoaWxkcmVuKFBheW1lbnRFY0NvbXBvbmVudCkgcHJpdmF0ZSBwYXltZW50Q29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxQYXltZW50RWNDb21wb25lbnQ+O1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY2hlY2tvdXRWaWV3ID0gdGhpcy5fY29yZUNvbnN0YW50cy5nZXRDaGVja291dFZpZXcoKTtcblx0XHR0aGlzLl9jb3JlQ29uc3RhbnRzLmNoZWNrb3V0VmlldyRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUodmlldyA9PiB7XG5cdFx0XHRcdHRoaXMuY2hlY2tvdXRWaWV3ID0gdmlldyB8fCAnbGVnYWN5Jztcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5fY2hhbm5lbFNlcnZpY2UuY2hhbm5lbCRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMuY2hhbm5lbCA9IHJlcztcblx0XHRcdFx0dGhpcy5oaWRlUHJpY2VzID0gISFyZXM/LmhpZGVQcmljZXM7XG5cdFx0XHRcdHRoaXMuaGlkZURpc2NvdW50cyA9ICEhcmVzPy5oaWRlRGlzY291bnRzO1xuXHRcdFx0XHR0aGlzLmhpZGVUYXhlcyA9ICEhcmVzPy5oaWRlVGF4ZXM7XG5cdFx0XHRcdHRoaXMuc2hvd1RheExlZ2VuZCA9ICEhcmVzPy5zaG93VGF4TGVnZW5kO1xuXHRcdFx0XHQvLyBTb2xvIG1hcmNhciBjb21vIGxpc3RvIGVuIGVsIGJyb3dzZXI6IGVsIGNoZWNrb3V0IG5vIGRlYmUgcmVuZGVyaXphcnNlXG5cdFx0XHRcdC8vIGVuIFNTUiBwb3JxdWUgZWwgY2hlY2tvdXRWaWV3IGHDum4gbm8gZXN0w6EgcmVzdWVsdG8gZGVsIGNhbmFsLFxuXHRcdFx0XHQvLyBsbyBxdWUgY2F1c2FiYSBoeWRyYXRpb24gbWlzbWF0Y2ggeSBtb3N0cmFiYSBlbCBsZWdhY3kgYWxlYXRvcmlhbWVudGUuXG5cdFx0XHRcdGlmICh0aGlzLmlzQnJvd3Nlcikge1xuXHRcdFx0XHRcdHRoaXMuY2hhbm5lbFJlYWR5ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5oaWRlUHJpY2VzKSB7XG5cdFx0XHRcdFx0dGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnLyddKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuY2FuQ2hlY2tvdXQpIHtcblx0XHRcdFx0XHR0aGlzLmluaXRpYWxpemVTdGVwcygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuX2NhcnRTZXJ2aWNlLnNob3dQcmljZSRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUoc2hvd1ByaWNlID0+IHtcblx0XHRcdFx0dGhpcy5jcmVkaXRBY2NvdW50U2hvd1ByaWNlcyA9IHNob3dQcmljZTtcblx0XHRcdH0pO1xuXG5cdFx0dGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmFzc29jaWF0ZWREYXRhJFxuXHRcdFx0LnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuX2Rlc3Ryb3lSZWYpKVxuXHRcdFx0LnN1YnNjcmliZShkYXRhID0+IHtcblx0XHRcdFx0dGhpcy5sYXN0QXNzb2NpYXRlZERhdGEgPSBkYXRhO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9yb3V0ZXIuZXZlbnRzXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG5cdFx0XHRcdHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuXHRcdFx0KVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcblx0XHRcdFx0aWYgKHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoJy9jaGVja291dCcpKSB7XG5cdFx0XHRcdFx0dGhpcy5zY3JvbGxUb1RvcE9uRW50ZXIoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHR0aGlzLl9jaGVja291dFNlcnZpY2UuY2FuQ2hlY2tvdXQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGNvbnRhaW5JdGVtcyA9PiB7XG5cdFx0XHRpZiAoY29udGFpbkl0ZW1zKSB0aGlzLmluaXRpYWxpemVDaGVja291dCgpO1xuXHRcdFx0ZWxzZSB0aGlzLmNhbkNoZWNrb3V0ID0gZmFsc2U7XG5cdFx0fSk7XG5cblx0XHR0aGlzLl9jaGVja291dFNlcnZpY2Uuc3RhdGUkXG5cdFx0XHQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKChzdGVwczogSVN0ZXBbXSkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkgfHwgIXN0ZXBzKSByZXR1cm47XG5cdFx0XHRcdHN0ZXBzLmZvckVhY2goKHN0ZXA6IElTdGVwKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCFzdGVwPy5uYW1lKSByZXR1cm47XG5cdFx0XHRcdFx0aWYgKCF0aGlzLmlzU3RlcFJlYWR5KHN0ZXAubmFtZSkpIHtcblx0XHRcdFx0XHRcdHRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmRlbGV0ZShzdGVwLm5hbWUpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAodGhpcy5pc1N0ZXBEaXJ0eShzdGVwLm5hbWUpKSByZXR1cm47XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0IXRoaXMuYXV0b0Nsb3NlZFN0ZXBzLmhhcyhzdGVwLm5hbWUpICYmXG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5TZWN0aW9ucy5pbmNsdWRlcyhzdGVwLm5hbWUpICYmXG5cdFx0XHRcdFx0XHQhdGhpcy5tYW51YWxseU9wZW5lZFN0ZXBzLmhhcyhzdGVwLm5hbWUpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5TZWN0aW9ucyA9IHRoaXMub3BlblNlY3Rpb25zLmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHN0ZXAubmFtZSk7XG5cdFx0XHRcdFx0XHR0aGlzLmF1dG9DbG9zZWRTdGVwcy5hZGQoc3RlcC5uYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBhbGxSZWFkeSA9IHRoaXMuYXJlQWxsU3RlcHNSZWFkeShzdGVwcyBhcyB7IG5hbWU/OiBzdHJpbmcgfVtdKTtcblx0XHRcdFx0aWYgKGFsbFJlYWR5ICYmICF0aGlzLmFsbFN0ZXBzV2VyZVJlYWR5KSB7XG5cdFx0XHRcdFx0dGhpcy5hbGxTdGVwc1dlcmVSZWFkeSA9IHRydWU7XG5cdFx0XHRcdFx0aWYgKHRoaXMuaXNCcm93c2VyKSB7XG5cdFx0XHRcdFx0XHR3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoIWFsbFJlYWR5KSB7XG5cdFx0XHRcdFx0dGhpcy5hbGxTdGVwc1dlcmVSZWFkeSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuX2NoZWNrb3V0U2VydmljZS5zdGF0ZSRcblx0XHRcdC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKSlcblx0XHRcdC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkpIHJldHVybjtcblx0XHRcdFx0Y29uc3QgaGFzUGF5bWVudFN0ZXAgPSB0aGlzLmhhc1N0ZXAoJ3BheW1lbnQnKTtcblx0XHRcdFx0aWYgKCFoYXNQYXltZW50U3RlcCkgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCBhZGRyZXNzRGF0YSA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5nZXRTdGVwRGF0YSgnYWRkcmVzcycpO1xuXHRcdFx0XHRpZiAoIWFkZHJlc3NEYXRhKSByZXR1cm47XG5cdFx0XHRcdGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KGFkZHJlc3NEYXRhKTtcblx0XHRcdFx0aWYgKHRoaXMubGFzdFBheW1lbnRBZGRyZXNzS2V5ID09PSBrZXkpIHJldHVybjtcblx0XHRcdFx0dGhpcy5sYXN0UGF5bWVudEFkZHJlc3NLZXkgPSBrZXk7XG5cdFx0XHR9KTtcblxuXHRcdHRoaXMuX3BheW1lbnRTZXJ2aWNlLm1ldGhvZHMkXG5cdFx0XHQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5fZGVzdHJveVJlZikpXG5cdFx0XHQuc3Vic2NyaWJlKG1ldGhvZHMgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5pc0xlZ2FjeUNoZWNrb3V0KCkpIHJldHVybjtcblx0XHRcdFx0aWYgKHRoaXMucGF5bWVudEF1dG9PcGVuZWQpIHJldHVybjtcblx0XHRcdFx0aWYgKCFtZXRob2RzIHx8ICFtZXRob2RzLmxlbmd0aCkgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCBoYXNTaGlwbWVudFN0ZXAgPSB0aGlzLmhhc1N0ZXAoJ3NoaXBtZW50Jyk7XG5cdFx0XHRcdGlmIChoYXNTaGlwbWVudFN0ZXAgJiYgIXRoaXMuaXNTdGVwUmVhZHkoJ3NoaXBtZW50JykpIHJldHVybjtcblx0XHRcdFx0aWYgKCFoYXNTaGlwbWVudFN0ZXAgJiYgIXRoaXMuaXNTdGVwRW5hYmxlZCgncGF5bWVudCcpKSByZXR1cm47XG5cdFx0XHRcdGlmICghdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMoJ3BheW1lbnQnKSkge1xuXHRcdFx0XHRcdHRoaXMub3BlblNlY3Rpb25zLnB1c2goJ3BheW1lbnQnKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnBheW1lbnRBdXRvT3BlbmVkID0gdHJ1ZTtcblx0XHRcdH0pO1xuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcblx0XHR0aGlzLnNjcm9sbFRvVG9wT25FbnRlcigpO1xuXHRcdHRoaXMudXBkYXRlU3RpY2t5T2Zmc2V0KCk7XG5cdFx0dGhpcy5zZXR1cFN1bW1hcnlPYnNlcnZlcigpO1xuXHRcdHRoaXMuZmluaXNoQnV0dG9uRWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2NoZWNrb3V0RmluaXNoQnRuJyk7XG5cdFx0dGhpcy5ldmFsdWF0ZU1vYmlsZUJhclZpc2liaWxpdHkoKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLnN1bW1hcnlPYnNlcnZlcikge1xuXHRcdFx0dGhpcy5zdW1tYXJ5T2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0dGhpcy5zdW1tYXJ5T2JzZXJ2ZXIgPSBudWxsO1xuXHRcdH1cblx0XHR0aGlzLmZpbmlzaEJ1dHRvbkVsID0gbnVsbDtcblx0fVxuXG5cdGluaXRpYWxpemVDaGVja291dCgpIHtcblx0XHRpZiAodGhpcy5ibG9ja0NoZWNrb3V0SWZDYXJ0SGFzU3RvY2tJc3N1ZXMoKSkge1xuXHRcdFx0dGhpcy5jYW5DaGVja291dCA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FuQ2hlY2tvdXQgPSB0cnVlO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZVN0ZXBzKCk7XG5cdH1cblxuXHRwcml2YXRlIGJsb2NrQ2hlY2tvdXRJZkNhcnRIYXNTdG9ja0lzc3VlcygpOiBib29sZWFuIHtcblx0XHRjb25zdCBzdG9ja0lzc3VlcyA9IHRoaXMuX2NhcnRTZXJ2aWNlLmdldFN0b2NrSXNzdWVJdGVtcygpO1xuXHRcdGlmICghc3RvY2tJc3N1ZXMubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdG90YWxJdGVtcyA9IHRoaXMuX2NhcnRTZXJ2aWNlLmdldENhcnRJdGVtc1NuYXBzaG90KCkubGVuZ3RoO1xuXHRcdGNvbnN0IGFsbE91dE9mU3RvY2sgPSB0b3RhbEl0ZW1zID4gMCAmJiBzdG9ja0lzc3Vlcy5sZW5ndGggPj0gdG90YWxJdGVtcztcblxuXHRcdHRoaXMuX2NoZWNrb3V0U2VydmljZS5ub3RpZnlDaGVja291dEVycm9yKHtcblx0XHRcdGVycm9yOiB7XG5cdFx0XHRcdGNvZGU6ICdvdXRfb2Zfc3RvY2snLFxuXHRcdFx0XHRtZXNzYWdlOiBhbGxPdXRPZlN0b2NrID8gJ2FsbC1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snIDogJ3NvbWUtcHJvZHVjdHMtb3V0LW9mLXN0b2NrJ1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXG5cdGluaXRpYWxpemVTdGVwcygpIHtcblx0XHRjb25zdCBzdGVwczogSVN0ZXBbXSA9IFtdO1xuXHRcdHN0ZXBzLnB1c2goeyBuYW1lOiB0aGlzLkFERFJFU1MsIGxhYmVsOiAnYmlsbGluZy1kZXRhaWxzJywgc3RhdGU6ICdyZWFkeScgfSk7XG5cdFx0dGhpcy5jaGFubmVsPy5pc1NraXBwaW5nU2hpcHBpbmdTdGVwQWxsb3dlZCA/IG51bGwgOiBzdGVwcy5wdXNoKHsgbmFtZTogdGhpcy5TSElQTUVOVCwgbGFiZWw6ICdzaGlwbWVudC1tZXRob2QnIH0pO1xuXHRcdHRoaXMuY2hhbm5lbD8uaXNTa2lwcGluZ1BheW1lbnRTdGVwQWxsb3dlZCA/IG51bGwgOiBzdGVwcy5wdXNoKHsgbmFtZTogdGhpcy5QQVlNRU5ULCBsYWJlbDogJ3BheW1lbnQnIH0pO1xuXHRcdHRoaXMuX2NoZWNrb3V0U2VydmljZS5zZXRTdGVwcyhzdGVwcyk7XG5cdFx0aWYgKHRoaXMuY2hlY2tvdXRWaWV3ID09PSAnc2luZ2xlJykge1xuXHRcdFx0Y29uc3QgZmlyc3ROYW1lID0gc3RlcHNbMF0/Lm5hbWU7XG5cdFx0XHR0aGlzLm9wZW5TZWN0aW9ucyA9IGZpcnN0TmFtZSA/IFtmaXJzdE5hbWVdIDogW107XG5cdFx0XHR0aGlzLmF1dG9DbG9zZWRTdGVwcy5jbGVhcigpO1xuXHRcdFx0dGhpcy5tYW51YWxseU9wZW5lZFN0ZXBzLmNsZWFyKCk7XG5cdFx0XHR0aGlzLnN0ZXBEaXJ0eU1hcC5jbGVhcigpO1xuXHRcdFx0dGhpcy5wYXltZW50QXV0b09wZW5lZCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlzTGVnYWN5Q2hlY2tvdXQgPSAoKSA9PiB0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZSc7XG5cblx0Z2V0U2luZ2xlU3RlcFRpdGxlID0gKHN0ZXA6IElTdGVwICYgeyBsYWJlbD86IHN0cmluZyB9KSA9PlxuXHRcdHN0ZXA/Lm5hbWUgPT09ICdhZGRyZXNzJyA/ICdhZGRyZXNzLXNlbGVjdGlvbicgOiBzdGVwPy5sYWJlbDtcblxuXHRnZXRTaW5nbGVTdW1tYXJ5TGFiZWwgPSAoc3RlcDogSVN0ZXAgJiB7IGxhYmVsPzogc3RyaW5nIH0pID0+IHtcblx0XHRpZiAoc3RlcD8ubmFtZSA9PT0gJ2FkZHJlc3MnKSByZXR1cm4gdGhpcy5nZXRBZGRyZXNzU3VtbWFyeUxhYmVsKCk7XG5cdFx0aWYgKHN0ZXA/Lm5hbWUgPT09ICdzaGlwbWVudCcpIHJldHVybiB0aGlzLnNoaXBtZW50U3VtbWFyeT8ubGFiZWwgfHwgJyc7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0Z2V0U2luZ2xlU3VtbWFyeVZhbHVlID0gKHN0ZXA6IElTdGVwICYgeyBsYWJlbD86IHN0cmluZyB9KSA9PiB7XG5cdFx0aWYgKHN0ZXA/Lm5hbWUgPT09ICdzaGlwbWVudCcpIHJldHVybiB0aGlzLnNoaXBtZW50U3VtbWFyeT8uZGV0YWlsIHx8ICcnO1xuXHRcdHJldHVybiB0aGlzLmdldFN0ZXBTdW1tYXJ5KHN0ZXA/Lm5hbWUgYXMgU3RlcFR5cGUpO1xuXHR9XG5cblx0aXNTdGVwUmVhZHkgPSAoc3RlcE5hbWU6IFN0ZXBUeXBlKSA9PiB0aGlzLl9jaGVja291dFNlcnZpY2UuaXNTdGVwUmVhZHkoc3RlcE5hbWUpO1xuXG5cdGlzU3RlcERpcnR5ID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+ICEhdGhpcy5zdGVwRGlydHlNYXAuZ2V0KHN0ZXBOYW1lKTtcblxuXHRpc1N0ZXBDb21wbGV0ZSA9IChzdGVwTmFtZTogc3RyaW5nKSA9PiB0aGlzLmlzU3RlcFJlYWR5KHN0ZXBOYW1lIGFzIFN0ZXBUeXBlKSAmJiAhdGhpcy5pc1N0ZXBEaXJ0eShzdGVwTmFtZSk7XG5cblx0b25TdGVwRGlydHlDaGFuZ2UgPSAoc3RlcE5hbWU6IHN0cmluZywgaXNEaXJ0eTogYm9vbGVhbikgPT4ge1xuXHRcdHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgaXNEaXJ0eSk7XG5cdH1cblxuXHRpc1N0ZXBFbmFibGVkID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBzdGVwcyA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5nZXRTdGVwc1NuYXBzaG90KCk7XG5cdFx0Y29uc3QgaW5kZXggPSBzdGVwcy5maW5kSW5kZXgoKHN0ZXA6IGFueSkgPT4gc3RlcC5uYW1lID09PSBzdGVwTmFtZSk7XG5cdFx0aWYgKGluZGV4IDw9IDApIHJldHVybiB0cnVlO1xuXHRcdGlmICh0aGlzLmNoZWNrb3V0VmlldyA9PT0gJ3NpbmdsZScgJiYgc3RlcE5hbWUgPT09ICdwYXltZW50Jykge1xuXHRcdFx0cmV0dXJuIHRoaXMuaXNTdGVwUmVhZHkoJ2FkZHJlc3MnKTtcblx0XHR9XG5cdFx0Y29uc3QgcHJldlN0ZXAgPSBzdGVwc1tpbmRleCAtIDFdO1xuXHRcdHJldHVybiB0aGlzLmlzU3RlcFJlYWR5KHByZXZTdGVwLm5hbWUpO1xuXHR9XG5cblx0dG9nZ2xlU2VjdGlvbihzdGVwTmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKCF0aGlzLmlzU3RlcEVuYWJsZWQoc3RlcE5hbWUpKSByZXR1cm47XG5cdFx0Y29uc3QgaW5kZXggPSB0aGlzLm9wZW5TZWN0aW9ucy5pbmRleE9mKHN0ZXBOYW1lKTtcblx0XHRpZiAoaW5kZXggPj0gMCkge1xuXHRcdFx0aWYgKHRoaXMuaXNTdGVwUmVhZHkoc3RlcE5hbWUgYXMgU3RlcFR5cGUpICYmIHRoaXMuaXNTdGVwRGlydHkoc3RlcE5hbWUpKSB7XG5cdFx0XHRcdHRoaXMucGVuZGluZ0Nsb3NlU3RlcE5hbWUgPSBzdGVwTmFtZTtcblx0XHRcdFx0dGhpcy5zaG93VW5zYXZlZE1vZGFsID0gdHJ1ZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5vcGVuU2VjdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuU2VjdGlvbnMucHVzaChzdGVwTmFtZSk7XG5cdFx0XHRpZiAodGhpcy5pc1N0ZXBSZWFkeShzdGVwTmFtZSBhcyBTdGVwVHlwZSkpIHtcblx0XHRcdFx0dGhpcy5tYW51YWxseU9wZW5lZFN0ZXBzLmFkZChzdGVwTmFtZSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNjcm9sbFRvU2VjdGlvbihzdGVwTmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0Z29Ub05leHRTZWN0aW9uKHN0ZXBOYW1lOiBzdHJpbmcpIHtcblx0XHRjb25zdCBzdGVwcyA9IHRoaXMuX2NoZWNrb3V0U2VydmljZS5nZXRTdGVwc1NuYXBzaG90KCk7XG5cdFx0Y29uc3QgaW5kZXggPSBzdGVwcy5maW5kSW5kZXgoKHN0ZXA6IGFueSkgPT4gc3RlcC5uYW1lID09PSBzdGVwTmFtZSk7XG5cdFx0aWYgKGluZGV4ID09PSAtMSB8fCAhc3RlcHNbaW5kZXggKyAxXSkgcmV0dXJuO1xuXHRcdGNvbnN0IG5leHROYW1lID0gc3RlcHNbaW5kZXggKyAxXS5uYW1lO1xuXHRcdHRoaXMub3BlblNlY3Rpb25zID0gdGhpcy5vcGVuU2VjdGlvbnMuZmlsdGVyKG5hbWUgPT4gbmFtZSAhPT0gc3RlcE5hbWUpO1xuXHRcdGlmICghdGhpcy5vcGVuU2VjdGlvbnMuaW5jbHVkZXMobmV4dE5hbWUpKSB0aGlzLm9wZW5TZWN0aW9ucy5wdXNoKG5leHROYW1lKTtcblx0XHR0aGlzLnNjcm9sbFRvU2VjdGlvbihuZXh0TmFtZSk7XG5cdH1cblxuXHRnb1RvTmV4dEZyb21BZGRyZXNzID0gKCkgPT4gdGhpcy5nb1RvTmV4dFNlY3Rpb24oJ2FkZHJlc3MnKTtcblxuXHRpc1NlY3Rpb25PcGVuID0gKHN0ZXBOYW1lOiBzdHJpbmcpID0+IHRoaXMub3BlblNlY3Rpb25zLmluY2x1ZGVzKHN0ZXBOYW1lKTtcblxuXHRnZXRTdW1tYXJ5TGFiZWwgPSAodHlwZTogQ2hlY2tvdXREYXRhWyd0eXBlJ10pID0+IHtcblx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdGNhc2UgJ3N1YnRvdGFsJzpcblx0XHRcdFx0cmV0dXJuICdzdWJ0b3RhbCc7XG5cdFx0XHRjYXNlICdkaXNjb3VudCc6XG5cdFx0XHRcdHJldHVybiAnZGlzY291bnQnO1xuXHRcdFx0Y2FzZSAnY291cG9uJzpcblx0XHRcdFx0cmV0dXJuICdjb3Vwb24nO1xuXHRcdFx0Y2FzZSAnc2hpcG1lbnQnOlxuXHRcdFx0XHRyZXR1cm4gJ3NoaXBtZW50Jztcblx0XHRcdGNhc2UgJ3RheGVzJzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuc2hvd1RheExlZ2VuZCA/ICduYXRpb25hbC10YXhlcycgOiAndGF4ZXMnO1xuXHRcdFx0Y2FzZSAnY2xpZW50VGF4ZXMnOlxuXHRcdFx0XHRyZXR1cm4gJ2NsaWVudFRheGVzJztcblx0XHRcdGNhc2UgJ3RvdGFsJzpcblx0XHRcdFx0cmV0dXJuICd0b3RhbCc7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdHlwZTtcblx0XHR9XG5cdH1cblxuXHRnZXRTdW1tYXJ5RGF0YSA9IChkYXRhOiBDaGVja291dERhdGFbXSB8IG51bGwpID0+IHtcblx0XHRpZiAoIWRhdGEpIHJldHVybiBbXTtcblx0XHRpZiAodGhpcy5jaGVja291dFZpZXcgIT09ICdzaW5nbGUnKSByZXR1cm4gZGF0YTtcblx0XHRsZXQgc3VtbWFyeURhdGEgPSBkYXRhO1xuXHRcdGNvbnN0IGhhc1NoaXBtZW50ID0gc3VtbWFyeURhdGEuc29tZShpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3NoaXBtZW50Jyk7XG5cdFx0aWYgKCFoYXNTaGlwbWVudCAmJiB0aGlzLmlzU3RlcFJlYWR5KCdzaGlwbWVudCcpKSB7XG5cdFx0XHRjb25zdCBzdGVwRGF0YTogYW55ID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdzaGlwbWVudCcpO1xuXHRcdFx0Y29uc3Qgc2hpcG1lbnRBbW91bnQgPSBzdGVwRGF0YT8ucHJpY2UgPz8gc3RlcERhdGE/LmNvbnRyYWN0Py5wcmljZSA/PyBzdGVwRGF0YT8uYW1vdW50O1xuXHRcdFx0aWYgKHNoaXBtZW50QW1vdW50ICE9IG51bGwpIHtcblx0XHRcdFx0Y29uc3Qgc2hpcG1lbnRJdGVtOiBDaGVja291dERhdGEgPSB7XG5cdFx0XHRcdFx0dHlwZTogJ3NoaXBtZW50Jyxcblx0XHRcdFx0XHRuYW1lOiAnc2hpcG1lbnQnLFxuXHRcdFx0XHRcdGFtb3VudDogc2hpcG1lbnRBbW91bnRcblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgdG90YWxJbmRleCA9IHN1bW1hcnlEYXRhLmZpbmRJbmRleChpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3RvdGFsJyk7XG5cdFx0XHRcdGlmICh0b3RhbEluZGV4ID09PSAtMSkge1xuXHRcdFx0XHRcdHN1bW1hcnlEYXRhID0gWy4uLnN1bW1hcnlEYXRhLCBzaGlwbWVudEl0ZW1dO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IHRvdGFsSXRlbSA9IHN1bW1hcnlEYXRhW3RvdGFsSW5kZXhdO1xuXHRcdFx0XHRcdGNvbnN0IGFkanVzdGVkVG90YWwgPSB7XG5cdFx0XHRcdFx0XHQuLi50b3RhbEl0ZW0sXG5cdFx0XHRcdFx0XHRhbW91bnQ6ICh0b3RhbEl0ZW0/LmFtb3VudCB8fCAwKSArIChzaGlwbWVudEFtb3VudCB8fCAwKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0c3VtbWFyeURhdGEgPSBbXG5cdFx0XHRcdFx0XHQuLi5zdW1tYXJ5RGF0YS5zbGljZSgwLCB0b3RhbEluZGV4KSxcblx0XHRcdFx0XHRcdHNoaXBtZW50SXRlbSxcblx0XHRcdFx0XHRcdGFkanVzdGVkVG90YWwsXG5cdFx0XHRcdFx0XHQuLi5zdW1tYXJ5RGF0YS5zbGljZSh0b3RhbEluZGV4ICsgMSlcblx0XHRcdFx0XHRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmFnZ3JlZ2F0ZURpc2NvdW50cyhzdW1tYXJ5RGF0YSk7XG5cdH1cblxuXHRnZXRUb3RhbEFtb3VudCA9IChkYXRhOiBDaGVja291dERhdGFbXSB8IG51bGwpID0+IHtcblx0XHRjb25zdCBzdW1tYXJ5RGF0YSA9IHRoaXMuZ2V0U3VtbWFyeURhdGEoZGF0YSk7XG5cdFx0aWYgKCFzdW1tYXJ5RGF0YSB8fCAhc3VtbWFyeURhdGEubGVuZ3RoKSByZXR1cm4gbnVsbDtcblx0XHRjb25zdCB0b3RhbEl0ZW0gPSBzdW1tYXJ5RGF0YS5maW5kKGl0ZW0gPT4gaXRlbS50eXBlID09PSAndG90YWwnKTtcblx0XHRyZXR1cm4gdG90YWxJdGVtID8gdG90YWxJdGVtLmFtb3VudCA6IG51bGw7XG5cdH1cblxuXHRzaG91bGRTaG93U3VtbWFyeUl0ZW0gPSAoaXRlbTogQ2hlY2tvdXREYXRhKSA9PiB7XG5cdFx0aWYgKCFpdGVtKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKChpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJykgJiYgaXRlbS5hbW91bnQgPT0gMCkgcmV0dXJuIGZhbHNlO1xuXHRcdGlmICgoaXRlbS50eXBlID09PSAnZGlzY291bnQnIHx8IGl0ZW0udHlwZSA9PT0gJ2NvdXBvbicpICYmIHRoaXMuaGlkZURpc2NvdW50cykgcmV0dXJuIGZhbHNlO1xuXHRcdGlmIChpdGVtLnR5cGUgPT09ICd0YXhlcycgJiYgKHRoaXMuaGlkZVRheGVzIHx8IGl0ZW0uYW1vdW50ID09IDApKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKGl0ZW0udHlwZSA9PT0gJ2NsaWVudFRheGVzJyAmJiBpdGVtLmFtb3VudCA9PSAwKSByZXR1cm4gZmFsc2U7XG5cdFx0aWYgKHRoaXMuc2hvdWxkSGlkZVN1bW1hcnlTdWJ0b3RhbChpdGVtKSkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Z2V0QWRkcmVzc1N1bW1hcnlMYWJlbCA9ICgpID0+IHtcblx0XHRjb25zdCBzdGVwRGF0YTogYW55ID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdhZGRyZXNzJyk7XG5cdFx0Y29uc3QgYWRkcmVzcyA9IHN0ZXBEYXRhPy5zaGlwcGluZ0FkZHJlc3MgfHwgc3RlcERhdGE/LnNlbGVjdGVkPy5zaGlwcGluZ0FkZHJlc3M7XG5cdFx0Y29uc3QgY29udGFjdCA9IGFkZHJlc3M/LmFkZHJlc3NDb250YWN0IHx8IGFkZHJlc3M/LmNvbnRhY3QgfHwgYWRkcmVzcyB8fCB7fTtcblx0XHRyZXR1cm4gW2NvbnRhY3QuZmlyc3ROYW1lLCBjb250YWN0Lmxhc3ROYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpO1xuXHR9XG5cblx0Z2V0U3RlcFN1bW1hcnkgPSAoc3RlcE5hbWU6IFN0ZXBUeXBlIHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0Y29uc3Qgc3RlcERhdGE6IGFueSA9IHN0ZXBOYW1lID8gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKHN0ZXBOYW1lKSA6IG51bGw7XG5cdFx0aWYgKCFzdGVwRGF0YSkgcmV0dXJuICcnO1xuXHRcdGlmIChzdGVwTmFtZSA9PT0gJ2FkZHJlc3MnKSB7XG5cdFx0XHRjb25zdCBhZGRyZXNzID0gc3RlcERhdGEuc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zZWxlY3RlZD8uc2hpcHBpbmdBZGRyZXNzIHx8IHN0ZXBEYXRhPy5zaGlwcGluZ0FkZHJlc3M7XG5cdFx0XHRpZiAoIWFkZHJlc3MpIHJldHVybiAnJztcblx0XHRcdGNvbnN0IG1haW4gPSBbYWRkcmVzcy5zdHJlZXQsIGFkZHJlc3MuY2l0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyDCtyAnKTtcblx0XHRcdGNvbnN0IHJlZ2lvbiA9IFthZGRyZXNzLnByb3ZpbmNlQ29kZSB8fCBhZGRyZXNzLnByb3ZpbmNlLCBhZGRyZXNzLmNvdW50cnlDb2RlIHx8IGFkZHJlc3MuY291bnRyeV1cblx0XHRcdFx0LmZpbHRlcihCb29sZWFuKVxuXHRcdFx0XHQuam9pbignLCAnKTtcblx0XHRcdHJldHVybiBbbWFpbiwgcmVnaW9uXS5maWx0ZXIoQm9vbGVhbikuam9pbignIOKAlCAnKTtcblx0XHR9XG5cdFx0aWYgKHN0ZXBOYW1lID09PSAnc2hpcG1lbnQnKSB7XG5cdFx0XHRjb25zdCBtZXRob2RMYWJlbCA9IHN0ZXBEYXRhLm1ldGhvZD8ubmFtZSB8fCBzdGVwRGF0YS5tZXRob2RfbmFtZSB8fCAnJztcblx0XHRcdGNvbnN0IGNvbnRyYWN0TGFiZWwgPSBzdGVwRGF0YS5jb250cmFjdD8ubmFtZSB8fCBzdGVwRGF0YS5jb250cmFjdF9uYW1lIHx8IHN0ZXBEYXRhLm5hbWUgfHwgc3RlcERhdGEuY29udHJhY3QgfHwgJyc7XG5cdFx0XHRyZXR1cm4gW21ldGhvZExhYmVsLCBjb250cmFjdExhYmVsXS5maWx0ZXIoQm9vbGVhbikuam9pbignIMK3ICcpO1xuXHRcdH1cblx0XHRpZiAoc3RlcE5hbWUgPT09ICdwYXltZW50Jykge1xuXHRcdFx0cmV0dXJuIHN0ZXBEYXRhLm5hbWUgfHwgc3RlcERhdGEuY29kZSB8fCAnJztcblx0XHR9XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cblx0c2V0U2hpcG1lbnRTdW1tYXJ5ID0gKHN1bW1hcnk6IHsgbGFiZWw/OiBzdHJpbmc7IGRldGFpbD86IHN0cmluZyB9KSA9PiB7XG5cdFx0Y29uc3QgaGFzTGFiZWwgPSBCb29sZWFuKHN1bW1hcnk/LmxhYmVsKTtcblx0XHRjb25zdCBoYXNEZXRhaWwgPSBCb29sZWFuKHN1bW1hcnk/LmRldGFpbCk7XG5cdFx0dGhpcy5zaGlwbWVudFN1bW1hcnkgPSBoYXNMYWJlbCB8fCBoYXNEZXRhaWwgPyBzdW1tYXJ5IDogbnVsbDtcblx0fVxuXG5cdGFyZUFsbFN0ZXBzUmVhZHkgPSAoc3RlcHM6IHsgbmFtZT86IHN0cmluZyB9W10pID0+IHtcblx0XHRpZiAoIXN0ZXBzIHx8ICFzdGVwcy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gc3RlcHMuZXZlcnkoc3RlcCA9PiB7XG5cdFx0XHRpZiAoIXN0ZXA/Lm5hbWUpIHJldHVybiB0cnVlO1xuXHRcdFx0aWYgKCF0aGlzLmlzU3RlcFJlYWR5KHN0ZXAubmFtZSBhcyBTdGVwVHlwZSkpIHJldHVybiBmYWxzZTtcblx0XHRcdHJldHVybiAhdGhpcy5pc1N0ZXBEaXJ0eShzdGVwLm5hbWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0c2hvdWxkSGlkZUZpbmlzaEJ1dHRvbiA9IChzdGVwczogeyBuYW1lPzogc3RyaW5nIH1bXSkgPT4ge1xuXHRcdGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybiBmYWxzZTtcblx0XHRpZiAoIXRoaXMuYXJlQWxsU3RlcHNSZWFkeShzdGVwcykpIHJldHVybiBmYWxzZTtcblx0XHRjb25zdCBwYXltZW50RGF0YTogYW55ID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBEYXRhKCdwYXltZW50Jyk7XG5cdFx0cmV0dXJuICEhcGF5bWVudERhdGE/LmF1dG9Db21wbGV0ZTtcblx0fVxuXG5cdGVuZENoZWNrb3V0ID0gKCkgPT4ge1xuXHRcdHRoaXMuX2NoZWNrb3V0U2VydmljZS5jb21wbGV0ZSgpLnRoZW4oXG5cdFx0XHRyZXMgPT4gcmVzLm9rICYmIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ2NoZWNrb3V0L29yZGVyX3N1Y2Nlc3MnXSksXG5cdFx0XHQoKSA9PiB7fVxuXHRcdCk7XG5cdH1cblxuXHRjYW5jZWxVbnNhdmVkQ2xvc2UgPSAoKSA9PiB7XG5cdFx0dGhpcy5wZW5kaW5nQ2xvc2VTdGVwTmFtZSA9IG51bGw7XG5cdFx0dGhpcy5zaG93VW5zYXZlZE1vZGFsID0gZmFsc2U7XG5cdH1cblxuXHRjb25maXJtVW5zYXZlZERpc2NhcmQgPSAoKSA9PiB7XG5cdFx0aWYgKCF0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lKSB7XG5cdFx0XHR0aGlzLnNob3dVbnNhdmVkTW9kYWwgPSBmYWxzZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc3RlcE5hbWUgPSB0aGlzLnBlbmRpbmdDbG9zZVN0ZXBOYW1lO1xuXHRcdHRoaXMucGVuZGluZ0Nsb3NlU3RlcE5hbWUgPSBudWxsO1xuXHRcdHRoaXMuZGlzY2FyZFN0ZXBDaGFuZ2VzKHN0ZXBOYW1lKTtcblx0XHR0aGlzLm9wZW5TZWN0aW9ucyA9IHRoaXMub3BlblNlY3Rpb25zLmZpbHRlcihuYW1lID0+IG5hbWUgIT09IHN0ZXBOYW1lKTtcblx0XHR0aGlzLnNob3dVbnNhdmVkTW9kYWwgPSBmYWxzZTtcblx0fVxuXG5cdGRpc2NhcmRTdGVwQ2hhbmdlcyhzdGVwTmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKHN0ZXBOYW1lID09PSAnYWRkcmVzcycpIHtcblx0XHRcdGNvbnN0IGRhdGFmb3JtID0gdGhpcy5kYXRhZm9ybUNvbXBvbmVudHM/LmZpcnN0O1xuXHRcdFx0ZGF0YWZvcm0/LmRpc2NhcmRDaGFuZ2VzPy4oKTtcblx0XHRcdHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpZiAoc3RlcE5hbWUgPT09ICdwYXltZW50Jykge1xuXHRcdFx0Y29uc3QgcGF5bWVudCA9IHRoaXMucGF5bWVudENvbXBvbmVudHM/LmZpcnN0O1xuXHRcdFx0cGF5bWVudD8uZGlzY2FyZENoYW5nZXM/LigpO1xuXHRcdFx0dGhpcy5zdGVwRGlydHlNYXAuc2V0KHN0ZXBOYW1lLCBmYWxzZSk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuc3RlcERpcnR5TWFwLnNldChzdGVwTmFtZSwgZmFsc2UpO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcpXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuXHRldmFsdWF0ZU1vYmlsZUJhclZpc2liaWxpdHkoKSB7XG5cdFx0aWYgKCF0aGlzLmlzQnJvd3NlcikgcmV0dXJuO1xuXHRcdGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybjtcblx0XHR0aGlzLnVwZGF0ZVN0aWNreU9mZnNldCgpO1xuXHRcdGlmICghdGhpcy5maW5pc2hCdXR0b25FbCkge1xuXHRcdFx0dGhpcy5maW5pc2hCdXR0b25FbCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjY2hlY2tvdXRGaW5pc2hCdG4nKTtcblx0XHRcdGlmICghdGhpcy5maW5pc2hCdXR0b25FbCkgcmV0dXJuO1xuXHRcdH1cblx0XHRjb25zdCByZWN0ID0gdGhpcy5maW5pc2hCdXR0b25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCB2aWV3cG9ydEhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCAwO1xuXHRcdHRoaXMuaGlkZU1vYmlsZVN1bW1hcnlCYXIgPSByZWN0LnRvcCA8IHZpZXdwb3J0SGVpZ2h0IC0gODA7XG5cdH1cblxuXHRwcml2YXRlIGFnZ3JlZ2F0ZURpc2NvdW50cyhkYXRhOiBDaGVja291dERhdGFbXSkge1xuXHRcdGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHJldHVybiBbXTtcblx0XHRjb25zdCBkaXNjb3VudFRvdGFsID0gZGF0YVxuXHRcdFx0LmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2Rpc2NvdW50Jylcblx0XHRcdC5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjICsgKGN1cnIuYW1vdW50IHx8IDApLCAwKTtcblx0XHRjb25zdCBjb3Vwb25Ub3RhbCA9IGRhdGFcblx0XHRcdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdjb3Vwb24nKVxuXHRcdFx0LnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBhY2MgKyAoY3Vyci5hbW91bnQgfHwgMCksIDApO1xuXHRcdGNvbnN0IGZpbHRlcmVkID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT09ICdkaXNjb3VudCcgJiYgaXRlbS50eXBlICE9PSAnY291cG9uJyk7XG5cblx0XHRpZiAodGhpcy5oaWRlRGlzY291bnRzKSB7XG5cdFx0XHRyZXR1cm4gZmlsdGVyZWQ7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZXh0cmFzOiBDaGVja291dERhdGFbXSA9IFtdO1xuXHRcdGlmIChkaXNjb3VudFRvdGFsICE9PSAwKSB7XG5cdFx0XHRleHRyYXMucHVzaCh7IHR5cGU6ICdkaXNjb3VudCcsIG5hbWU6ICdkaXNjb3VudCcsIGFtb3VudDogZGlzY291bnRUb3RhbCB9KTtcblx0XHR9XG5cdFx0aWYgKGNvdXBvblRvdGFsICE9PSAwKSB7XG5cdFx0XHRleHRyYXMucHVzaCh7IHR5cGU6ICdjb3Vwb24nLCBuYW1lOiAnY291cG9uJywgYW1vdW50OiBjb3Vwb25Ub3RhbCB9KTtcblx0XHR9XG5cdFx0aWYgKCFleHRyYXMubGVuZ3RoKSByZXR1cm4gZmlsdGVyZWQ7XG5cblx0XHRjb25zdCBzdWJ0b3RhbEluZGV4ID0gZmlsdGVyZWQuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS50eXBlID09PSAnc3VidG90YWwnKTtcblx0XHRpZiAoc3VidG90YWxJbmRleCAhPT0gLTEpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFsuLi5maWx0ZXJlZF07XG5cdFx0XHRyZXN1bHQuc3BsaWNlKHN1YnRvdGFsSW5kZXggKyAxLCAwLCAuLi5leHRyYXMpO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRjb25zdCBmaXJzdEluZGV4ID0gZGF0YS5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdkaXNjb3VudCcgfHwgaXRlbS50eXBlID09PSAnY291cG9uJyk7XG5cdFx0aWYgKGZpcnN0SW5kZXggPT09IC0xKSByZXR1cm4gWy4uLmZpbHRlcmVkLCAuLi5leHRyYXNdO1xuXHRcdGNvbnN0IGluc2VydEF0ID0gZGF0YVxuXHRcdFx0LnNsaWNlKDAsIGZpcnN0SW5kZXgpXG5cdFx0XHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlICE9PSAnZGlzY291bnQnICYmIGl0ZW0udHlwZSAhPT0gJ2NvdXBvbicpLmxlbmd0aDtcblx0XHRjb25zdCByZXN1bHQgPSBbLi4uZmlsdGVyZWRdO1xuXHRcdHJlc3VsdC5zcGxpY2UoaW5zZXJ0QXQsIDAsIC4uLmV4dHJhcyk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHByaXZhdGUgc2hvdWxkSGlkZVN1bW1hcnlTdWJ0b3RhbChpdGVtOiBDaGVja291dERhdGEpIHtcblx0XHRpZiAoaXRlbT8udHlwZSAhPT0gJ3N1YnRvdGFsJykgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLmxhc3RBc3NvY2lhdGVkRGF0YTtcblx0XHRpZiAoIWRhdGE/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXHRcdGNvbnN0IHN1bW1hcnlEYXRhID0gdGhpcy5nZXRTdW1tYXJ5RGF0YShkYXRhKTtcblx0XHRjb25zdCB0b3RhbEl0ZW0gPSBzdW1tYXJ5RGF0YS5maW5kKGRhdGFJdGVtID0+IGRhdGFJdGVtLnR5cGUgPT09ICd0b3RhbCcpO1xuXHRcdHJldHVybiAhIXRvdGFsSXRlbSAmJiBpdGVtLmFtb3VudCA9PT0gdG90YWxJdGVtLmFtb3VudDtcblx0fVxuXG5cdHByaXZhdGUgc2Nyb2xsVG9TZWN0aW9uKHN0ZXBOYW1lOiBzdHJpbmcpIHtcblx0XHRpZiAoIXRoaXMuaXNCcm93c2VyKSByZXR1cm47XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRjb25zdCByb290ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXHRcdFx0aWYgKCFyb290KSByZXR1cm47XG5cdFx0XHRjb25zdCBzZWN0aW9uID0gcm9vdC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zdGVwPVwiJHtzdGVwTmFtZX1cIl1gKSBhcyBIVE1MRWxlbWVudDtcblx0XHRcdGlmICghc2VjdGlvbikgcmV0dXJuO1xuXHRcdFx0Y29uc3QgaGVhZGVyID0gKHNlY3Rpb24ucXVlcnlTZWxlY3RvcignLnNlY3Rpb24taGVhZGVyJykgYXMgSFRNTEVsZW1lbnQpIHx8IHNlY3Rpb247XG5cdFx0XHRjb25zdCB0b3AgPSBoZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0O1xuXHRcdFx0Y29uc3Qgb2Zmc2V0ID0gdGhpcy5nZXRTdGlja3lIZWFkZXJPZmZzZXQoKTtcblx0XHRcdHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogTWF0aC5tYXgoMCwgdG9wIC0gb2Zmc2V0KSwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuXHRcdH0sIDUwKTtcblx0fVxuXG5cdHByaXZhdGUgZ2V0U3RpY2t5SGVhZGVyT2Zmc2V0KCk6IG51bWJlciB7XG5cdFx0aWYgKCF0aGlzLmlzQnJvd3NlcikgcmV0dXJuIDEyO1xuXHRcdGNvbnN0IGZhbGxiYWNrID0gMTY7XG5cdFx0Y29uc3Qgc2VsZWN0b3JzID0gW1xuXHRcdFx0J2hlYWRlcicsXG5cdFx0XHQnLnNpdGUtaGVhZGVyJyxcblx0XHRcdCcuaGVhZGVyJyxcblx0XHRcdCcubmF2YmFyJyxcblx0XHRcdCcubWFpbi1oZWFkZXInLFxuXHRcdFx0Jy50b3BiYXInLFxuXHRcdFx0Jy50b3AtYmFyJyxcblx0XHRcdCcuYW5ub3VuY2VtZW50Jyxcblx0XHRcdCcuYW5ub3VuY2VtZW50LWJhcicsXG5cdFx0XHQnLnByb21vLWJhcicsXG5cdFx0XHQnLnN0aWNreScsXG5cdFx0XHQnLmlzLXN0aWNreScsXG5cdFx0XHQnLmZpeGVkLXRvcCdcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjb25zdCBjYW5kaWRhdGVzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ycykpIGFzIEhUTUxFbGVtZW50W107XG5cdFx0aWYgKCFjYW5kaWRhdGVzLmxlbmd0aCkgcmV0dXJuIGZhbGxiYWNrO1xuXHRcdGxldCBtYXhCb3R0b20gPSAwO1xuXHRcdGZvciAoY29uc3QgZWwgb2YgY2FuZGlkYXRlcykge1xuXHRcdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCk7XG5cdFx0XHRjb25zdCBwb3NpdGlvbiA9IHN0eWxlLnBvc2l0aW9uO1xuXHRcdFx0aWYgKHBvc2l0aW9uICE9PSAnZml4ZWQnICYmIHBvc2l0aW9uICE9PSAnc3RpY2t5JykgY29udGludWU7XG5cdFx0XHRjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0XHRpZiAocmVjdC5oZWlnaHQgPD0gMCkgY29udGludWU7XG5cdFx0XHRpZiAocmVjdC5ib3R0b20gPD0gMCkgY29udGludWU7XG5cdFx0XHRpZiAocmVjdC50b3AgPiAyMCkgY29udGludWU7XG5cdFx0XHRtYXhCb3R0b20gPSBNYXRoLm1heChtYXhCb3R0b20sIHJlY3QuYm90dG9tKTtcblx0XHR9XG5cdFx0aWYgKCFtYXhCb3R0b20pIHJldHVybiBmYWxsYmFjaztcblx0XHRyZXR1cm4gTWF0aC5tYXgoZmFsbGJhY2ssIE1hdGgucm91bmQobWF4Qm90dG9tKSArIDgpO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVTdGlja3lPZmZzZXQoKSB7XG5cdFx0aWYgKCF0aGlzLmlzQnJvd3NlcikgcmV0dXJuO1xuXHRcdGlmICh0aGlzLmNoZWNrb3V0VmlldyAhPT0gJ3NpbmdsZScpIHJldHVybjtcblx0XHRjb25zdCByb290ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuXHRcdGlmICghcm9vdCkgcmV0dXJuO1xuXHRcdGNvbnN0IHRhcmdldCA9IChyb290LnF1ZXJ5U2VsZWN0b3IoJyNhcHBDaGVja291dEVjJykgYXMgSFRNTEVsZW1lbnQpIHx8IHJvb3Q7XG5cdFx0Y29uc3Qgb2Zmc2V0ID0gdGhpcy5nZXRTdGlja3lIZWFkZXJPZmZzZXQoKTtcblx0XHR0YXJnZXQuc3R5bGUuc2V0UHJvcGVydHkoJy0tZWMtY2hlY2tvdXQtc3RpY2t5LXRvcCcsIGAke29mZnNldH1weGApO1xuXHRcdHRoaXMuc3RpY2t5T2Zmc2V0QXBwbGllZCA9IHRydWU7XG5cdH1cblxuXHRwcml2YXRlIHNjcm9sbFRvVG9wT25FbnRlcigpIHtcblx0XHRpZiAoIXRoaXMuaXNCcm93c2VyKSByZXR1cm47XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGxlZnQ6IDAsIGJlaGF2aW9yOiAnYXV0bycgfSk7XG5cdFx0fSwgMCk7XG5cdH1cblxuXHRwcml2YXRlIHNldHVwU3VtbWFyeU9ic2VydmVyKCkge1xuXHRcdGlmICghdGhpcy5pc0Jyb3dzZXIpIHJldHVybjtcblx0XHRpZiAodGhpcy5jaGVja291dFZpZXcgIT09ICdzaW5nbGUnKSByZXR1cm47XG5cdFx0Y29uc3Qgcm9vdCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoIXJvb3QpIHJldHVybjtcblx0XHRjb25zdCBmaW5pc2hCdG4gPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNjaGVja291dEZpbmlzaEJ0bicpO1xuXHRcdGlmICghZmluaXNoQnRuKSByZXR1cm47XG5cblx0XHR0aGlzLnN1bW1hcnlPYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdFx0Y29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuXHRcdFx0dGhpcy5oaWRlTW9iaWxlU3VtbWFyeUJhciA9ICEhZW50cnkgJiYgZW50cnkuaXNJbnRlcnNlY3Rpbmc7XG5cdFx0fSwgeyByb290TWFyZ2luOiAnMHB4IDBweCAtMTIwcHggMHB4JywgdGhyZXNob2xkOiAwIH0pO1xuXG5cdFx0dGhpcy5zdW1tYXJ5T2JzZXJ2ZXIub2JzZXJ2ZShmaW5pc2hCdG4pO1xuXHR9XG5cblx0cHJpdmF0ZSBoYXNTdGVwKHN0ZXBOYW1lOiBTdGVwVHlwZSk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHN0ZXBzID0gdGhpcy5fY2hlY2tvdXRTZXJ2aWNlLmdldFN0ZXBzU25hcHNob3QoKTtcblx0XHRyZXR1cm4gc3RlcHMuc29tZSgoc3RlcDogYW55KSA9PiBzdGVwLm5hbWUgPT09IHN0ZXBOYW1lKTtcblx0fVxufVxuIiwiPG1haW4gY2xhc3M9XCJweS00XCIgaWQ9XCJhcHBDaGVja291dEVjXCI+XG4gICAgQGlmKGxvYWRpbmckIHwgYXN5bmM7IGFzIGxvYWQpe1xuICAgICAgICBAaWYobG9hZCl7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtbG9hZGluZy1vdmVybGF5XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LWxvYWRpbmctY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWxvYWRpbmctZnVsbC1lYz48L2FwcC1sb2FkaW5nLWZ1bGwtZWM+XG4gICAgICAgICAgICAgICAgICAgIDxoNT57eyAncHJvY2Vzc2luZy1wYXltZW50JyB8IHRyYW5zbGF0ZSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBpZihjaGFubmVsUmVhZHkpIHtcbiAgICBAaWYoY2FuQ2hlY2tvdXQpe1xuICAgICAgICBAaWYoY2hlY2tvdXRWaWV3ID09PSAnc2luZ2xlJyl7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyIGNoZWNrb3V0LXNpbmdsZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY2hlY2tvdXQtc2luZ2xlLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTggY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoc3RhdGUkIHwgYXN5bmM7IGFzIHN0ZXBzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtc2luZ2xlLXN0ZXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3Ioc3RlcCBvZiBzdGVwczsgdHJhY2sgc3RlcC5uYW1lOyBsZXQgeCA9ICRpbmRleCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtc2VjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1zdGVwXT1cInN0ZXAubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWRpc2FibGVkXT1cIiFpc1N0ZXBFbmFibGVkKHN0ZXAubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1jb21wbGV0ZV09XCJpc1N0ZXBDb21wbGV0ZShzdGVwLm5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNTZWN0aW9uT3BlbihzdGVwLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc1N0ZXBFbmFibGVkKHN0ZXAubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VjdGlvbihzdGVwLm5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VjdGlvbi1pbmRleFwiPnt7IHggKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFNpbmdsZVN0ZXBUaXRsZShzdGVwKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpc1N0ZXBDb21wbGV0ZShzdGVwLm5hbWUpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VjdGlvbi1zdGF0ZVwiPiYjMTAwMDM7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGlzU3RlcENvbXBsZXRlKHN0ZXAubmFtZSkgJiYgIWlzU2VjdGlvbk9wZW4oc3RlcC5uYW1lKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXN1bW1hcnlcIiByb2xlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWN0aW9uKHN0ZXAubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidG9nZ2xlU2VjdGlvbihzdGVwLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInRvZ2dsZVNlY3Rpb24oc3RlcC5uYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWN0aW9uLXN1bW1hcnktbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRTaW5nbGVTdW1tYXJ5TGFiZWwoc3RlcCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VjdGlvbi1zdW1tYXJ5LXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U2luZ2xlU3VtbWFyeVZhbHVlKHN0ZXApIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlY3Rpb24tc3VtbWFyeS1lZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWN0aW9uKHN0ZXAubmFtZSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidG9nZ2xlU2VjdGlvbihzdGVwLm5hbWUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cInRvZ2dsZVNlY3Rpb24oc3RlcC5uYW1lKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2VkaXQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCIgW2hpZGRlbl09XCIhaXNTZWN0aW9uT3BlbihzdGVwLm5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzd2l0Y2ggKHN0ZXAubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNhc2UgKCdhZGRyZXNzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtZGF0YWZvcm0tZWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RBZGRyZXNzVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25leHRTdGVwXT1cImdvVG9OZXh0RnJvbUFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGlydHlDaGFuZ2UpPVwib25TdGVwRGlydHlDaGFuZ2UoJ2FkZHJlc3MnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtZGF0YWZvcm0tZWM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3NoaXBtZW50Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtc2hpcG1lbnQtZWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RTaGlwbWVudFZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZHZhbmNlU3RlcCk9XCJnb1RvTmV4dFNlY3Rpb24oc3RlcC5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdW1tYXJ5Q2hhbmdlKT1cInNldFNoaXBtZW50U3VtbWFyeSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtc2hpcG1lbnQtZWM+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3BheW1lbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1wYXltZW50LWVjXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0UGF5bWVudFZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaXJ0eUNoYW5nZSk9XCJvblN0ZXBEaXJ0eUNoYW5nZSgncGF5bWVudCcsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1wYXltZW50LWVjPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy00IGNvbC0xMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKHN0YXRlJCB8IGFzeW5jOyBhcyBjaGVja291dFN0YXRlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYocHJpY2VWaXNpYmlsaXR5LmNhblNob3dQcmljZXMkIHwgYXN5bmMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNpZGUgY2xhc3M9XCJjaGVja291dC1zdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJzdW1tYXJ5LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY2hlY2tvdXRWaWV3ID09PSAnc2luZ2xlJyA/ICgncGF5bWVudC1zdW1tYXJ5JyB8IHRyYW5zbGF0ZSkgOiAoJ3B1cmNoYXNlLXN1bW1hcnknIHwgdHJhbnNsYXRlKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihhc3NvY2lhdGVkRGF0YSQgfCBhc3luYzsgYXMgZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktdG90YWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IoaXRlbSBvZiBnZXRTdW1tYXJ5RGF0YShkYXRhKTsgdHJhY2sgJGluZGV4KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihzaG91bGRTaG93U3VtbWFyeUl0ZW0oaXRlbSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LXRvdGFsLXJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5zdW1tYXJ5LXRvdGFsLXJvdy10b3RhbF09XCJpdGVtLnR5cGUgPT09ICd0b3RhbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0U3VtbWFyeUxhYmVsKGl0ZW0udHlwZSkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGNoZWNrb3V0VmlldyA9PT0gJ3NpbmdsZScgJiYgaXRlbS50eXBlID09PSAnc2hpcG1lbnQnICYmIChpdGVtLmFtb3VudCA9PSBudWxsIHx8IGl0ZW0uYW1vdW50ID09PSAwKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2ZyZWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmFtb3VudCAhPSAwID8gKGl0ZW0uYW1vdW50IHwgZWNDdXJyZW5jeVN5bWJvbDonYWx3YXlzU2hvd0RlY2ltYWxzJykgOiAoJ2ZyZWUnIHwgdHJhbnNsYXRlKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihhcmVBbGxTdGVwc1JlYWR5KGNoZWNrb3V0U3RhdGUpICYmICFzaG91bGRIaWRlRmluaXNoQnV0dG9uKGNoZWNrb3V0U3RhdGUpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHZhbGlkLWJ0biB3LTEwMCBtdC0zIHRleHQtdXBwZXJjYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjaGVja291dEZpbmlzaEJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbmRDaGVja291dCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdmaW5pc2gtY2hlY2tvdXQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXNpZGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihhcmVBbGxTdGVwc1JlYWR5KGNoZWNrb3V0U3RhdGUpICYmICFzaG91bGRIaWRlRmluaXNoQnV0dG9uKGNoZWNrb3V0U3RhdGUpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc2lkZSBjbGFzcz1cImNoZWNrb3V0LXN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHZhbGlkLWJ0biB3LTEwMCBtdC0zIHRleHQtdXBwZXJjYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjaGVja291dEZpbmlzaEJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbmRDaGVja291dCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdmaW5pc2gtY2hlY2tvdXQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FzaWRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIEBpZihhc3NvY2lhdGVkRGF0YSQgfCBhc3luYzsgYXMgZGF0YSl7XG4gICAgICAgICAgICAgICAgICAgIEBpZihzdGF0ZSQgfCBhc3luYzsgYXMgY2hlY2tvdXRTdGF0ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYocHJpY2VWaXNpYmlsaXR5LmNhblNob3dQcmljZXMkIHwgYXN5bmMpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LW1vYmlsZS1iYXJcIiBbY2xhc3MuaXMtaGlkZGVuXT1cImhpZGVNb2JpbGVTdW1tYXJ5QmFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LW1vYmlsZS10b3RhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LW1vYmlsZS1sYWJlbFwiPnt7ICd0b3RhbCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktbW9iaWxlLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0VG90YWxBbW91bnQoZGF0YSkgIT0gbnVsbCA/IChnZXRUb3RhbEFtb3VudChkYXRhKSB8IGVjQ3VycmVuY3lTeW1ib2w6J2Fsd2F5c1Nob3dEZWNpbWFscycpIDogJy0tJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKCFzaG91bGRIaWRlRmluaXNoQnV0dG9uKGNoZWNrb3V0U3RhdGUpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gdmFsaWQtYnRuIHN1bW1hcnktbW9iaWxlLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFhcmVBbGxTdGVwc1JlYWR5KGNoZWNrb3V0U3RhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5kQ2hlY2tvdXQoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdmaW5pc2gtY2hlY2tvdXQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGlmKHNob3dVbnNhdmVkTW9kYWwpe1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tvdXQtdW5zYXZlZC1tb2RhbC1iYWNrZHJvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrb3V0LXVuc2F2ZWQtbW9kYWwtY29udGVudFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLW1vZGFsPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj57eyAndW5zYXZlZC1jaGFuZ2VzLXRpdGxlJyB8IHRyYW5zbGF0ZSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxVbnNhdmVkQ2xvc2UoKVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICd1bnNhdmVkLWNoYW5nZXMtYm9keScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4ta2VlcC1lZGl0aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjYW5jZWxVbnNhdmVkQ2xvc2UoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3Vuc2F2ZWQtY2hhbmdlcy1jb250aW51ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1kaXNjYXJkXCIgKGNsaWNrKT1cImNvbmZpcm1VbnNhdmVkRGlzY2FyZCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAndW5zYXZlZC1jaGFuZ2VzLWRpc2NhcmQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxhcHAtZGV0YWlsLWNoZWNrb3V0LWJsb2NrLWVjPjwvYXBwLWRldGFpbC1jaGVja291dC1ibG9jay1lYz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLTEyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoc3RhdGUkIHwgYXN5bmM7IGFzIHN0ZXBzKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic3RlcHBlclwiIGNsYXNzPVwiYnMtc3RlcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyByb3cgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgcG9zaXRpb24tcmVsYXRpdmUgc3RlcHBlckNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvcihzdGVwIG9mIHN0ZXBzOyB0cmFjayAkaW5kZXg7IGxldCB4PSRpbmRleCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ2QtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBweC0wIGNvbC0yJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCInc3RlcCBkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlcidcIiBbYXR0ci5kYXRhLXRhcmdldF09XCInI3Rlc3QtbC0nK3N0ZXAucHJpb3JpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidweC0yIHJvdW5kZWQtY2lyY2xlIHRleHQtd2hpdGUgZm9udC1ib2xkIGJzLXN0ZXBwZXItbnVtYmVyICcgKyAoc3RlcC5zdGF0ZSA9PSAncmVhZHknID8gJ2JnLXByaW1hcnknIDogJ2JnLXNlY29uZGFyeScpIFwiPnt7eCsxfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJzLXN0ZXBwZXItbGFiZWxcIj57eyBzdGVwLmxhYmVsIHx0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmKHggPCBzdGVwcy5sZW5ndGgtMSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+PGhyIFtjbGFzc109XCIndy0xMDAgbGluZSAnICsgKHN0ZXAuc3RhdGUgPT0gJ2RvaW5nJyA/ICdsaW5lLWFjdGl2ZScgOiAnbGluZS1kZWZhdWx0JylcIiA+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJzLXN0ZXBwZXItY29udGVudCBtYXJnaW4tYm90dG9tLWlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtc3RlcC1jb250YWluZXItZWMgW3N0ZXBzXT1cInN0ZXBzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBcIj48L2Rpdj5cbiAgICB9XG4gICAgfVxuPC9tYWluPlxuIl19
|