@c8y/ngx-components 1020.14.10 → 1020.14.12

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.
@@ -1 +1 @@
1
- {"version":3,"file":"context-dashboard.service.d.ts","sourceRoot":"","sources":["../../context-dashboard/context-dashboard.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context-dashboard.service.d.ts","sourceRoot":"","sources":["../../context-dashboard/context-dashboard.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-child.component.d.ts","sourceRoot":"","sources":["../../../core/dashboard/dashboard-child.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAGL,UAAU,EACV,YAAY,EAIb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAa,MAAM,MAAM,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;;AAGpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAOa,uBAAwB,YAAW,uBAAuB;IAmJ5D,SAAS,EAAE,kBAAkB;IACpC,OAAO,CAAC,SAAS;IACV,OAAO,EAAE,UAAU;IApJ5B,OAAO,EAAE,6BAA6B,EAAE,CAAM;IAC9C,IAAoD,eAAe,CACjE,OAAO,EAAE,6BAA6B,EAAE,EAGzC;IACD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,UAAS;IACjB,UAAU,UAAS;IACnB,OAAO,KAAM;IAEb,QAAQ,SAAU;IAClB,SAAS,SAAU;IAEnB,QAAQ,CAAC,+CAA+C,OAAO;IAE/D;;OAEG;IACM,CAAC,MAAC;IAEX;;OAEG;IACM,CAAC,MAAC;IAEX;;OAEG;IACM,KAAK,SAAK;IAEnB;;OAEG;IACM,MAAM,SAAK;IAEpB;;OAEG;IACM,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;IAE5B;;OAEG;IACM,MAAM,SAAM;IAErB;;OAEG;IACM,eAAe,UAAS;IAEjC;;;;OAIG;IACH,IACI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAE1B;IAED;;;OAGG;IACM,QAAQ,UAAS;IAE1B;;OAEG;IACO,WAAW,wCAA+C;IAEpE;;OAEG;IACO,SAAS,wCAA+C;IAElE;;OAEG;IAEH,KAAK,EAAE,MAAM,EAAE,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAM;IAElD;;OAEG;IACH,IAAI,OAAO,CAAC,KAAK,KAAA,EAEhB;IAED;;OAEG;IACH,IAAI,QAAQ,CAAC,KAAK,KAAA,EAEjB;IAED;;OAEG;IACH,gBAAgB,EAAE,UAAU,CAAC,OAAO,CAAC,CAUnC;IAEF;;OAEG;IACH,WAAW,UAAS;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAQ;IAErC;;;OAGG;IACH,IACI,WAAW,kDAUd;IAED;;;OAGG;IACH,kBAAkB,EAAE,YAAY,CAAC;gBAGxB,SAAS,EAAE,kBAAkB,EAC5B,SAAS,EAAE,YAAY,EACxB,OAAO,EAAE,UAAU;IAG5B,WAAW,IAAI,IAAI;IASnB,QAAQ,IAAI,IAAI;IAchB,eAAe;IAIf,mBAAmB;IASnB,aAAa,CAAC,MAAM,EAAE,YAAY;IAUlC,WAAW,CAAC,MAAM,EAAE,YAAY;IAShC,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU;IAiBzB,WAAW;IAOX,UAAU,CAAC,OAAO,EAAE,6BAA6B,EAAE,EAAE,OAAO,UAAQ;IAQpE,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;yCA3PR,uBAAuB;2CAAvB,uBAAuB;CAkQnC"}
1
+ {"version":3,"file":"dashboard-child.component.d.ts","sourceRoot":"","sources":["../../../core/dashboard/dashboard-child.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAGL,UAAU,EACV,YAAY,EAIb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAa,MAAM,MAAM,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;;AAGpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAOa,uBAAwB,YAAW,uBAAuB;IAmJ5D,SAAS,EAAE,kBAAkB;IACpC,OAAO,CAAC,SAAS;IACV,OAAO,EAAE,UAAU;IApJ5B,OAAO,EAAE,6BAA6B,EAAE,CAAM;IAC9C,IAAoD,eAAe,CACjE,OAAO,EAAE,6BAA6B,EAAE,EAGzC;IACD,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,UAAS;IACjB,UAAU,UAAS;IACnB,OAAO,KAAM;IAEb,QAAQ,SAAU;IAClB,SAAS,SAAU;IAEnB,QAAQ,CAAC,+CAA+C,OAAO;IAE/D;;OAEG;IACM,CAAC,MAAC;IAEX;;OAEG;IACM,CAAC,MAAC;IAEX;;OAEG;IACM,KAAK,SAAK;IAEnB;;OAEG;IACM,MAAM,SAAK;IAEpB;;OAEG;IACM,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;IAE5B;;OAEG;IACM,MAAM,SAAM;IAErB;;OAEG;IACM,eAAe,UAAS;IAEjC;;;;OAIG;IACH,IACI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAE1B;IAED;;;OAGG;IACM,QAAQ,UAAS;IAE1B;;OAEG;IACO,WAAW,wCAA+C;IAEpE;;OAEG;IACO,SAAS,wCAA+C;IAElE;;OAEG;IAEH,KAAK,EAAE,MAAM,EAAE,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAM;IAElD;;OAEG;IACH,IAAI,OAAO,CAAC,KAAK,KAAA,EAEhB;IAED;;OAEG;IACH,IAAI,QAAQ,CAAC,KAAK,KAAA,EAEjB;IAED;;OAEG;IACH,gBAAgB,EAAE,UAAU,CAAC,OAAO,CAAC,CAUnC;IAEF;;OAEG;IACH,WAAW,UAAS;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAQ;IAErC;;;OAGG;IACH,IACI,WAAW,kDAUd;IAED;;;OAGG;IACH,kBAAkB,EAAE,YAAY,CAAC;gBAGxB,SAAS,EAAE,kBAAkB,EAC5B,SAAS,EAAE,YAAY,EACxB,OAAO,EAAE,UAAU;IAG5B,WAAW,IAAI,IAAI;IASnB,QAAQ,IAAI,IAAI;IAchB,eAAe;IAIf,mBAAmB;IASnB,aAAa,CAAC,MAAM,EAAE,YAAY;IAUlC,WAAW,CAAC,MAAM,EAAE,YAAY;IAShC,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU;IAiBzB,WAAW;IAOX,UAAU,CAAC,OAAO,EAAE,6BAA6B,EAAE,EAAE,OAAO,UAAQ;IAQpE,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;yCA3PR,uBAAuB;2CAAvB,uBAAuB;CAmQnC"}
@@ -412,6 +412,13 @@ export class ContextDashboardService {
412
412
  if (!dashboards.c8y_Dashboard.children) {
413
413
  return dashboards;
414
414
  }
415
+ // Newly created NamedContextDashboards are still created with 12 columns for backwards compatibility.
416
+ // Default widgets might be already configured for 24 columns.
417
+ // If a widget is already configured for more than 12 columns, we should not adjust it.
418
+ const alreadyHasWidgetsConfiguredForMoreThan12Columns = Object.values(dashboards.c8y_Dashboard.children).some(widget => widget._x + widget._width > 12);
419
+ if (alreadyHasWidgetsConfiguredForMoreThan12Columns) {
420
+ return dashboards;
421
+ }
415
422
  // we need to multiply both _width and _x attributes with 2 to migrate from 12 to 24 columns.
416
423
  Object.values(dashboards.c8y_Dashboard.children).forEach(widget => {
417
424
  if (widget._width) {
@@ -587,4 +594,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
587
594
  providedIn: 'root'
588
595
  }]
589
596
  }], ctorParameters: () => [{ type: i1.InventoryService }, { type: i2.TabsService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Router }, { type: i2.NavigatorService }, { type: i2.Permissions }, { type: i2.AlertService }, { type: i2.DynamicComponentService }, { type: i2.GroupService }] });
590
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUNMLFlBQVksRUFFWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLE1BQU0sRUFFTixXQUFXLEVBQ1gsV0FBVyxFQUVaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsT0FBTyxFQUNQLEdBQUcsRUFDSCxHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLEdBQUcsRUFDSCxJQUFJLEVBQ0wsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUNMLHlCQUF5QixFQUd6QixvQkFBb0IsRUFHcEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNuQixNQUFNLDJCQUEyQixDQUFDOzs7Ozs7QUFLbkMsTUFBTSxPQUFPLHVCQUF1QjtJQWtCbEMsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFLO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFlBQ1UsU0FBMkIsRUFDM0IsSUFBaUIsRUFDakIsS0FBbUIsRUFDbkIsZ0JBQWtDLEVBQ2xDLE1BQWMsRUFDZCxTQUEyQixFQUMzQixXQUF3QixFQUN4QixLQUFtQixFQUNuQixnQkFBeUMsRUFDekMsWUFBMEI7UUFUMUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQWxDM0Isd0JBQW1CLEdBQUcsU0FBUyxDQUFDO1FBRWhDLCtCQUEwQixHQUFHLEVBQUUsQ0FBQztRQUN4QixvQkFBZSxHQUFHO1lBQ2pDLFdBQVcsQ0FBQyxvQkFBb0I7WUFDaEMsV0FBVyxDQUFDLHlCQUF5QjtTQUN0QyxDQUFDO1FBQ00sVUFBSyxHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO1FBQ2hELHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4QixrQkFBYSxHQUFHLGVBQWUsQ0FBQztRQUNoQyx5QkFBb0IsR0FBRyxXQUFXLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxHQUFHLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQXVCbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBOEIsRUFBRSxPQUFxQixFQUFFLElBQUksR0FBRyxFQUFFO1FBQzNFLElBQUksU0FBUyxHQUEyQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUNKLFNBQVMsRUFDVCxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFDakUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FDckQsQ0FBQztRQUVGLE1BQU0sQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ3BFLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBbUMsRUFDaEUsT0FBTyxFQUNQLElBQUksRUFDSixLQUFLLENBQ04sQ0FBQztRQUNGLFNBQVMsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUVwRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQzlDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FDWixhQUFhLEtBQUssb0JBQW9CLENBQUMsS0FBSztZQUM1QyxhQUFhLEtBQUssb0JBQW9CLENBQUMsTUFBTTtZQUM3QyxDQUFDLE9BQU8sSUFBSSxhQUFhLEtBQUssb0JBQW9CLENBQUMsS0FBSyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQ3ZDLFNBQVMsRUFDUixPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQWEsSUFBSSxFQUFFLENBQzFDO1lBQ0gsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFxQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQTBDO1FBQ3JELElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hELElBQUksR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBcUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FDVixTQUF3QyxFQUN4QyxPQUFxQjtRQUVyQixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1FBQzdDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFDOUMsTUFBTSxDQUNKLFNBQVMsRUFDVCxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFDakUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FDckQsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixhQUFhLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDO1FBQ3BFLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWpELE1BQU0sQ0FBQyxFQUFFLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVGLGFBQWEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxhQUFhLEVBQUUsR0FBRyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQXdDLEVBQUUsZ0JBQWdCLEdBQUcsSUFBSTtRQUM1RSxJQUFJLENBQUM7WUFDSCxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLElBQUksR0FBRyxHQUFXLE9BQU8sQ0FDdkIsc0ZBQXNGLENBQ3ZGLENBQUM7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLEdBQUcsR0FBRyxPQUFPLENBQ1g7bUNBQ3VCLENBQ3hCLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUN0QixPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7b0JBQ2pDLGFBQWEsRUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUk7b0JBQzNDLFVBQVUsRUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLGVBQWU7aUJBQ3BELENBQUMsRUFDRixNQUFNLENBQUMsTUFBTSxFQUNiO29CQUNFLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO29CQUNyQixNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztpQkFDMUIsQ0FDRixDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDekQsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2IsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDM0UsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUIsY0FBYyxDQUFDLEdBQUcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osaUJBQWlCO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQ3BCLFNBQWlELEVBQ2pELFlBQThCO1FBRTlCLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNwQyxTQUFTLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDckMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzdELENBQUM7UUFFRCxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsU0FBUyxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxDQUFDLFlBQVksRUFBRSxHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFFOUYsSUFBSSxTQUFTLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQzVFLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRztnQkFDL0IsR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUM7YUFDNUUsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsa0JBQWtCLENBQ2hCLEtBQTZCLEVBQzdCLEtBQTZCO1FBRTdCLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3JDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUMvRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2QsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDZixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQseUJBQXlCLENBQUMsSUFBWSxFQUFFLGNBQXdCLEVBQUUsT0FBcUI7UUFDckYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hFLFlBQVksRUFBRSxFQUNkLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FDZCxJQUFJLENBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FDVDtZQUNFLFFBQVE7WUFDUixhQUFhLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFO1NBQzlFLEVBQ0QsT0FBTyxFQUNQLElBQUksQ0FDTCxDQUNGLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLEVBQWtCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDbEMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUNkLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSTtnQkFDYixRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVE7YUFDdEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsV0FBMEM7UUFDbEUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQzNDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQzNDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUQsaUVBQWlFO1lBQ2pFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3JFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQzNDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDdEUsVUFBVSxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDM0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFpQztRQUN0RCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDZCQUE2QjtRQUMzQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ2pDLFdBQVcsQ0FBQyxvQkFBb0I7WUFDaEMsV0FBVyxDQUFDLHFCQUFxQjtZQUNqQyxXQUFXLENBQUMseUJBQXlCO1lBQ3JDLFdBQVcsQ0FBQywwQkFBMEI7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUFpRDtRQUN2RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsSUFBSSxNQUFNLENBQ1IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDNUYsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsU0FBaUQ7UUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQ2xDLElBQUksTUFBTSxDQUNSLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUN2SCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFpRDtRQUM1RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQzdCLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQzNGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNsQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7aUJBQU0sQ0FBQztnQkFDTiwrREFBK0Q7Z0JBQy9ELE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBaUQ7UUFDakUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQ2xDLElBQUksTUFBTSxDQUNSLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQzdGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBaUQ7UUFDaEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQ2xDLElBQUksTUFBTSxDQUNSLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQzVGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsMEJBQTBCLENBQUMsU0FBbUI7UUFDNUMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzFCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZO1FBQzNDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQzVCLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FDdEUsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDaEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFpQjtRQUMxQixPQUFPLEtBQUssQ0FDVixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsRUFDRixJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsaUJBQWlCLEVBQUUsYUFBcUMsRUFBRSxFQUFtQjtRQUN6RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhELE1BQU0sVUFBVSxHQUFHLEVBQUU7WUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUU5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUM5RCxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ2hELE1BQU0sQ0FDSixTQUFTLENBQUMsRUFBRSxDQUNWLFNBQVMsQ0FBQyxFQUFFLEtBQUssaUJBQWlCO1lBQ2xDLEdBQUcsQ0FDRCxTQUFTLEVBQ1QsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLEVBQUUsQ0FDL0csQ0FDSixDQUNGLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDMUMsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBNEI7UUFDL0MsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDO2dCQUNILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFDNUIsVUFBVSxDQUFDLFdBQVcsRUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUN2QyxDQUFDO2dCQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBRTlFLGtJQUFrSTtnQkFDbEksTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUM5QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FDbkIsQ0FBQztnQkFDRixJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzNFLENBQUM7Z0JBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsaUJBQWlCLENBQUMsb0JBQTBDLEVBQUUsS0FBYTtRQUN6RSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILDZCQUE2QixDQUMzQixFQUFpQyxFQUNqQyxlQUF1QjtRQUV2QixJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDM0UsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN4RixJQUFJLEVBQUUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUN6RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBa0M7UUFDN0MsTUFBTSxNQUFNLEdBQTRCLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLE1BQXNCO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDO1lBQzdCLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNsQixJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQzVCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELGVBQWUsQ0FBQyxFQUFrQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNyRCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDcEQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxPQUFPLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSyxxQkFBcUIsQ0FDM0IsV0FBMEMsRUFDMUMsT0FBb0IsRUFDcEIsSUFBWSxFQUNaLE1BQWU7UUFFZixJQUFJLGFBQW1DLENBQUM7UUFDeEMsTUFBTSxFQUFFLEdBQUksT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFhLElBQUksRUFBRSxDQUFDO1FBQ3RELE1BQU0sU0FBUyxHQUEyQixFQUFFLENBQUM7UUFFN0MsSUFBSSxPQUFPLEVBQUUsT0FBTyxLQUFLLFdBQVcsQ0FBQyxNQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sS0FBSyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEYsb0NBQW9DO1lBQ3BDLE1BQU0sV0FBVyxHQUNmLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLE1BQU07Z0JBQ3BDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO2dCQUM3QixDQUFDLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1lBQ2pDLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLFVBQVU7Z0JBQ2xELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJO2dCQUMzQixDQUFDLENBQUMsV0FBVyxDQUFDO1lBRWhCLG9GQUFvRjtZQUNwRixJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVqRSx5Q0FBeUM7WUFDekMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUV6Qyw2QkFBNkI7WUFDN0IsSUFBSSxXQUFXLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUM1QyxvQkFBb0IsQ0FBQyxJQUFJLEVBQ3pCLFdBQVcsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUMxQyxDQUFDO2dCQUNGLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEYsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsYUFBYSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQztZQUMzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEYsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNLLHNCQUFzQixDQUM1QixXQUEwQyxFQUMxQyxJQUEwQixFQUMxQixTQUFpQztRQUVqQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFXTywyQkFBMkIsQ0FDakMsVUFBbUI7UUFFbkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUNELGlFQUFpRTtRQUNqRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckMsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsNkZBQTZGO1FBQzdGLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEUsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNkLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxTQUF3QztRQUMzRSxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDOUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDOUMsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxJQUFzQixFQUN0QixVQUFtQyxFQUNuQyxVQUFtQztRQUVuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQ2IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQztZQUNyQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3pCLE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztnQkFDMUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQ3ZCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztnQkFDckUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQ3ZCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztnQkFDckUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQzVCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztnQkFDckUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FDN0IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO2FBQ3RFLENBQUM7WUFFRixJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUM7Z0JBQzNDLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDckQsQ0FBQztZQUNILENBQUM7WUFFRCxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCO1FBQzFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUM3QyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNsQixHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTywwQkFBMEIsQ0FDaEMsVUFBVSxFQUNWLFVBQW1DLEVBQ25DLFVBQW1DO1FBRW5DLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDdEIsRUFBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8sbUJBQW1CLENBQ3pCLEdBQTRCLEVBQzVCLFVBQW1DLEVBQ25DLFVBQW1DO1FBRW5DLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxRQUFRLENBQUMsRUFBaUMsRUFBRSxhQUFxQztRQUN2RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRWhFLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDaEQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ25FLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUNwRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ2hELEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUNwRCxPQUFPLEVBQUUsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUVPLDRCQUE0QixDQUFDLFNBQXdDO1FBQzNFLE1BQU0sY0FBYyxHQUFHLFNBQVMsRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUN0RixDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FDcEIsQ0FBQyxjQUFjLElBQUksY0FBYyxLQUFLLHlCQUF5QjtZQUM3RCxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztZQUNWLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRTVELE9BQU8sYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNuRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxDQUN2RSxDQUFDO0lBQ0osQ0FBQztJQUVPLHFCQUFxQixDQUFDLE9BQTZDO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDdkIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQ2xCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsSUFBdUMsQ0FBQyxDQUNuRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLEtBQUssQ0FBQyx5QkFBeUIsQ0FDckMsU0FBd0M7UUFFeEMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxhQUFhLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUM5RCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFFNUIsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUscUNBQXFDLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxPQUFPLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQztnQkFDakQsZUFBZSxHQUFHLElBQUksQ0FBQztZQUN6QixDQUFDO1lBQ0QsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztnQkFDckMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDaEMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxTQUF3QztRQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxTQUF3QztRQUNqRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDcEQsT0FBTztZQUNMLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLElBQUksRUFBRSxFQUFFO1lBQzFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSTtZQUN0QixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO1lBQzlCLEtBQUssRUFDSCxVQUFVLENBQUMsVUFBVTtnQkFDckIsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsZUFBZSxDQUFDO2dCQUN2RSxDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDO2dCQUMvQixDQUFDLENBQUMsSUFBSTtZQUNWLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztTQUM5RCxDQUFDO0lBQ1gsQ0FBQztJQUVPLEtBQUssQ0FBQyxTQUFTO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzFELElBQUksR0FBRyxLQUFLLFdBQVcsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzdDLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxJQUFZO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFDekIsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksRUFBRTtZQUMvRyxRQUFRLEVBQUUsQ0FBQztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsRUFBa0IsRUFDbEIsYUFBcUM7UUFFckMsTUFBTSxLQUFLLEdBQUcsYUFBYTthQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQzthQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN6QixLQUFLLEVBQUUsWUFBWSxLQUFLLEdBQUc7WUFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEVBQWtCLEVBQUUsSUFBMEI7UUFDNUUsSUFBSSxLQUFLLENBQUM7UUFDVixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hELENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLElBQUksS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDL0QsQ0FBQztRQUNELE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDdEYsQ0FBQztJQUVPLGVBQWUsQ0FBQyxTQUFpRCxFQUFFLE9BQVE7UUFDakYsSUFDRSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQzVCLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OEdBM3hCVSx1QkFBdUI7a0hBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQ29udGV4dERhdGEsXG4gIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICBnZXRBY3RpdmF0ZWRSb3V0ZSxcbiAgZ2V0dGV4dCxcbiAgR3JvdXBTZXJ2aWNlLFxuICBNb2RhbFNlcnZpY2UsXG4gIE5hdmlnYXRvck5vZGUsXG4gIE5hdmlnYXRvclNlcnZpY2UsXG4gIFBlcm1pc3Npb25zLFxuICBTdGF0dXMsXG4gIFRhYixcbiAgVGFic1NlcnZpY2UsXG4gIFZpZXdDb250ZXh0LFxuICBXaWRnZXRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGNsb25lRGVlcCxcbiAgZm9yRWFjaCxcbiAgZ2V0LFxuICBoYXMsXG4gIGtleUJ5LFxuICBrZXlzLFxuICBwaWNrLFxuICByZWR1Y2UsXG4gIHNldCxcbiAgc29tZVxufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgdGFwLCB0aHJvd0lmRW1wdHksIHRvQXJyYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVELFxuICBDb250ZXh0RGFzaGJvYXJkLFxuICBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgQ29udGV4dERhc2hib2FyZFR5cGUsXG4gIERhc2hib2FyZENvbnRleHQsXG4gIERhc2hib2FyZENvcHlDbGlwYm9hcmQsXG4gIFNUWUxJTkdfQ0xBU1NfUFJFRklYRVMsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRVxufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ29udGV4dERhc2hib2FyZFNlcnZpY2Uge1xuICBkYXNoYm9hcmRUYWJzJDogT2JzZXJ2YWJsZTxUYWJbXT47XG4gIGZvcm1EaXNhYmxlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IFJFUE9SVF9QQVJUSUFMX05BTUUgPSAncmVwb3J0Xyc7XG4gIGNvcHlDbGlwYm9hcmQ6IERhc2hib2FyZENvcHlDbGlwYm9hcmQ7XG4gIHJlYWRvbmx5IFZFUlNJT05fSElTVE9SWV9TSVpFX0xJTUlUID0gMTA7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5WRU5UT1JZX1JPTEVTID0gW1xuICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU5cbiAgXTtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1BBR0VTSVpFID0gMTAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBGUkFHTUVOVF9OQU1FID0gJ2M4eV9EYXNoYm9hcmQnO1xuICBwcml2YXRlIHJlYWRvbmx5IERBU0hCT0FSRF9ST1VURV9QQVRIID0gJ2Rhc2hib2FyZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5ERVhfU1BMSVQgPSAnISc7XG4gIHByaXZhdGUgX2Zvcm1EaXNhYmxlZCA9IHRydWU7XG4gIHByaXZhdGUgZm9ybURpc2FibGVkU3ViamVjdCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgZ2V0IGZvcm1EaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybURpc2FibGVkO1xuICB9XG5cbiAgc2V0IGZvcm1EaXNhYmxlZCh2YWx1ZSkge1xuICAgIHRoaXMuX2Zvcm1EaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuZm9ybURpc2FibGVkU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFiczogVGFic1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbmF2aWdhdG9yOiBOYXZpZ2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGR5bmFtaWNDb21wb25lbnQ6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JvdXBTZXJ2aWNlOiBHcm91cFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5mb3JtRGlzYWJsZWQkID0gdGhpcy5mb3JtRGlzYWJsZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhc2hib2FyZENmZzogQ29udGV4dERhc2hib2FyZCwgY29udGV4dD86IENvbnRleHREYXRhLCBuYW1lID0gJycpIHtcbiAgICBsZXQgZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiA9IHt9O1xuICAgIGFzc2lnbihcbiAgICAgIGRhc2hib2FyZCxcbiAgICAgIHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKHsgYzh5X0Rhc2hib2FyZDogZGFzaGJvYXJkQ2ZnIH0pLFxuICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRIaXN0b3J5KGRhc2hib2FyZCwgZGFzaGJvYXJkQ2ZnKVxuICAgICk7XG5cbiAgICBjb25zdCBbZGFzaGJvYXJkVHlwZSwgZGFzaGJvYXJkRnJhZ21lbnRzXSA9IHRoaXMuZ2V0RGFzaGJvYXJkRnJhZ21lbnRzKFxuICAgICAgeyBjOHlfRGFzaGJvYXJkOiBkYXNoYm9hcmRDZmcgfSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBuYW1lLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIGRhc2hib2FyZCA9IHsgLi4uZGFzaGJvYXJkLCAuLi5kYXNoYm9hcmRGcmFnbWVudHMgfTtcblxuICAgIGlmICh0aGlzLnNob3VsZFNldEdsb2JhbChkYXNoYm9hcmQsIGNvbnRleHQpKSB7XG4gICAgICBhc3NpZ24oZGFzaGJvYXJkLCB7IGM4eV9HbG9iYWw6IHt9IH0pO1xuICAgIH1cbiAgICBkYXNoYm9hcmQubmFtZSA9IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWU7XG4gICAgY29uc3QgeyBkYXRhIH0gPVxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuR3JvdXAgfHxcbiAgICAgIGRhc2hib2FyZFR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZSB8fFxuICAgICAgKGNvbnRleHQgJiYgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWQpXG4gICAgICAgID8gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNDcmVhdGUoXG4gICAgICAgICAgICBkYXNoYm9hcmQsXG4gICAgICAgICAgICAoY29udGV4dD8uY29udGV4dERhdGEuaWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgICAgICAgIClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmludmVudG9yeS5jcmVhdGUoZGFzaGJvYXJkKTtcbiAgICByZXR1cm4gZGF0YSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdDtcbiAgfVxuXG4gIGFzeW5jIGRldGFpbChkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBsZXQgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoZGFzaGJvYXJkTU8pO1xuICAgIGRhdGEgPSB0aGlzLmFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1ucyhkYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KTtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmRNTy5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoXG4gICAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgICBjb250ZXh0PzogQ29udGV4dERhdGFcbiAgKTogUHJvbWlzZTxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4ge1xuICAgIGNvbnN0IGRhc2hib2FyZENmZyA9IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkO1xuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBhc3NpZ24oXG4gICAgICBkYXNoYm9hcmQsXG4gICAgICB0aGlzLmFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1ucyh7IGM4eV9EYXNoYm9hcmQ6IGRhc2hib2FyZENmZyB9KSxcbiAgICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkSGlzdG9yeShkYXNoYm9hcmQsIGRhc2hib2FyZENmZylcbiAgICApO1xuXG4gICAgY29uc3Qga2VlcEZyYWdtZW50cyA9IHRoaXMuY2xlYW4ocGljayhkYXNoYm9hcmQsIFt0aGlzLkZSQUdNRU5UX05BTUUsICdpZCcsICduYW1lJ10pKTtcbiAgICBrZWVwRnJhZ21lbnRzLmM4eV9EYXNoYm9hcmRIaXN0b3J5ID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5O1xuICAgIGF3YWl0IHRoaXMuc2VyaWFsaXplV2lkZ2V0Q29uZmlncyhrZWVwRnJhZ21lbnRzKTtcblxuICAgIGNvbnN0IFssIGRhc2hib2FyZFR5cGVGcmFnbWVudHNdID0gdGhpcy5nZXREYXNoYm9hcmRGcmFnbWVudHMoZGFzaGJvYXJkLCBjb250ZXh0LCAnJywgdHJ1ZSk7XG4gICAga2VlcEZyYWdtZW50cy5jOHlfR2xvYmFsID0gdGhpcy5zaG91bGRTZXRHbG9iYWwoeyAuLi5kYXNoYm9hcmQsIC4uLmRhc2hib2FyZFR5cGVGcmFnbWVudHMgfSk7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS51cGRhdGUoeyAuLi5rZWVwRnJhZ21lbnRzLCAuLi5kYXNoYm9hcmRUeXBlRnJhZ21lbnRzIH0pO1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZC5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgd2l0aENvbmZpcm1hdGlvbiA9IHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHdpdGhDb25maXJtYXRpb24pIHtcbiAgICAgICAgbGV0IG1zZzogc3RyaW5nID0gZ2V0dGV4dChcbiAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGRhc2hib2FyZCBcInt7IGRhc2hib2FyZE5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpKSB7XG4gICAgICAgICAgbXNnID0gZ2V0dGV4dChcbiAgICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0aGUgZGFzaGJvYXJkIFwie3sgZGFzaGJvYXJkTmFtZSB9fVwiIGZyb20gYWxsIGRldmljZXMgb2YgdGhlIHR5cGUgXCJ7eyBkZXZpY2VUeXBlIH19XCIuXG4gICAgICAgICAgIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICAgIGdldHRleHQoJ0RlbGV0ZSBkYXNoYm9hcmQnKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtc2csIHtcbiAgICAgICAgICAgIGRhc2hib2FyZE5hbWU6IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWUsXG4gICAgICAgICAgICBkZXZpY2VUeXBlOiBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9rOiBnZXR0ZXh0KCdEZWxldGUnKSxcbiAgICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5kZWxldGUoZGFzaGJvYXJkKTtcbiAgICAgIGNvbnN0IHRhYlRvUmVtb3ZlID0gQXJyYXkuZnJvbSh0aGlzLnRhYnMuc3RhdGUpLmZpbmQodGFiID0+IHtcbiAgICAgICAgaWYgKHRhYi5wYXRoKSB7XG4gICAgICAgICAgcmV0dXJuIHRhYi5wYXRoLmVuZHNXaXRoKGAke3RoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEh9LyR7ZGFzaGJvYXJkLmlkfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMudGFicy5yZW1vdmUodGFiVG9SZW1vdmUpO1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYnMucmVmcmVzaCgpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRGFzaGJvYXJkSGlzdG9yeShcbiAgICBkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+LFxuICAgIGRhc2hib2FyZENmZzogQ29udGV4dERhc2hib2FyZFxuICApOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgaWYgKCFkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3RvcnkpIHtcbiAgICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeSA9IFtdO1xuICAgIH1cbiAgICBpZiAoIWRhc2hib2FyZENmZy5oaXN0b3J5RGVzY3JpcHRpb24pIHtcbiAgICAgIGRhc2hib2FyZENmZy5oaXN0b3J5RGVzY3JpcHRpb24gPSB7IGNoYW5nZVR5cGU6ICdjcmVhdGUnIH07XG4gICAgfVxuXG4gICAgZGFzaGJvYXJkQ2ZnLmNyZWF0ZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5ID0gY2xvbmVEZWVwKFtkYXNoYm9hcmRDZmcsIC4uLmRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeV0pO1xuXG4gICAgaWYgKGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeS5sZW5ndGggPiB0aGlzLlZFUlNJT05fSElTVE9SWV9TSVpFX0xJTUlUKSB7XG4gICAgICBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3RvcnkgPSBbXG4gICAgICAgIC4uLmRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeS5zbGljZSgwLCB0aGlzLlZFUlNJT05fSElTVE9SWV9TSVpFX0xJTUlUKVxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGFzaGJvYXJkO1xuICB9XG5cbiAgYWN0aXZhdGVEYXNoYm9hcmRzKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHR5cGVzOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdXG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFRhYltdPiB7XG4gICAgY29uc3QgeyBkYXNoYm9hcmRJZCB9ID0gcm91dGUucGFyYW1zO1xuICAgIGlmIChkYXNoYm9hcmRJZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGFzaGJvYXJkJChkYXNoYm9hcmRJZCwgdHlwZXMsIHJvdXRlLnBhcmVudC5kYXRhLmNvbnRleHREYXRhKS5waXBlKFxuICAgICAgICB0YXAoZGFzaGJvYXJkID0+IHtcbiAgICAgICAgICByb3V0ZS5kYXRhID0geyBkYXNoYm9hcmQgfTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXNoYm9hcmRUYWJzJCA9IHRoaXMuZ2V0VGFicyQocm91dGUuZGF0YS5jb250ZXh0RGF0YSwgdHlwZXMpO1xuICAgIHJldHVybiB0aGlzLmRhc2hib2FyZFRhYnMkO1xuICB9XG5cbiAgZ2V0TmFtZWREYXNoYm9hcmRPckNyZWF0ZShuYW1lOiBzdHJpbmcsIGRlZmF1bHRXaWRnZXRzOiBXaWRnZXRbXSwgY29udGV4dD86IENvbnRleHREYXRhKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLm1hcFdpZGdldHMoZGVmYXVsdFdpZGdldHMpO1xuICAgIHJldHVybiB0aGlzLmdldERhc2hib2FyZCQobmFtZSwgW0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkXSkucGlwZShcbiAgICAgIHRocm93SWZFbXB0eSgpLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PlxuICAgICAgICBmcm9tKFxuICAgICAgICAgIHRoaXMuY3JlYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgd2lkZ2V0Q2xhc3NlczogeyAnZGFzaGJvYXJkLXRoZW1lLWxpZ2h0JzogdHJ1ZSwgJ3BhbmVsLXRpdGxlLXJlZ3VsYXInOiB0cnVlIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVOYXZpZ2F0b3JJdGVtKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMubmF2aWdhdG9yLnN0YXRlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBpZiAobm9kZS5wYXRoID09PSBgcmVwb3J0cy8ke21vLmlkfWApIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3IucmVtb3ZlKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChtby5jOHlfSXNOYXZpZ2F0b3JOb2RlKSB7XG4gICAgICBjb25zdCBub2RlVG9BZGQgPSBuZXcgTmF2aWdhdG9yTm9kZSh7XG4gICAgICAgIGxhYmVsOiBtby5uYW1lLFxuICAgICAgICBwYXRoOiBgcmVwb3J0cy8ke21vLmlkfWAsXG4gICAgICAgIGljb246IG1vLmljb24sXG4gICAgICAgIHByaW9yaXR5OiBtby5wcmlvcml0eVxuICAgICAgfSk7XG4gICAgICB0aGlzLm5hdmlnYXRvci5hZGQobm9kZVRvQWRkKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuYXZpZ2F0ZVRvRGFzaGJvYXJkKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICgvZGFzaGJvYXJkLy50ZXN0KHRoaXMucm91dGVyLnVybCkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nLCBkYXNoYm9hcmRNTy5pZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogZ2V0QWN0aXZhdGVkUm91dGUodGhpcy5yb3V0ZXIpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKC9eXFwvKGRldmljZXxncm91cClcXC9bMC05XSskLy50ZXN0KHRoaXMucm91dGVyLnVybCkpIHtcbiAgICAgIC8vIGluIGNhc2UgdGhlIGFkZCBkYXNoYm9hcmQgYnV0dG9uIGlzIHRoZSBvbmx5IHRhYiBvbiB0aGF0IHJvdXRlXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nLCB0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRILCBkYXNoYm9hcmRNTy5pZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogZ2V0QWN0aXZhdGVkUm91dGUodGhpcy5yb3V0ZXIpXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIHRoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEgsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdXNlciBpcyBhYmxlIHRvIGVkaXQgZGFzaGJvYXJkIGFjY29yZGluZyB0byBoaXMgcm9sZXMgYW5kIGRhc2hib2FyZCBvd25lcnNoaXAuXG4gICAqXG4gICAqIEBwYXJhbSBtbyAtIERhc2hib2FyZCBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB1c2VyIGlzIGFibGUgdG8gZWRpdCBkYXNoYm9hcmQsIGZhbHNlIGlmIGhlIGNhbm5vdC5cbiAgICovXG4gIGFzeW5jIGNhbkVkaXREYXNoYm9hcmQobW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGVybWlzc2lvbnMuY2FuRWRpdCh0aGlzLklOVkVOVE9SWV9ST0xFUywgbW8pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB1c2VyIGhhcyBwZXJtaXNzaW9ucyB0byBjb3B5IGRhc2hib2FyZCBhY2NvcmRpbmcgdG8gaGlzIHJvbGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHVzZXIgaGFzIHBlcm1pc3Npb25zIHRvIGNvcHkgZGFzaGJvYXJkLCBmYWxzZSBpZiBoZSBjYW5ub3QuXG4gICAqL1xuICBoYXNQZXJtaXNzaW9uc1RvQ29weURhc2hib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5oYXNBbnlSb2xlKFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQ1JFQVRFLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTixcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQ1JFQVRFXG4gICAgXSk7XG4gIH1cblxuICBpc05hbWVkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc1JlcG9ydChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KSB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke3RoaXMuUkVQT1JUX1BBUlRJQUxfTkFNRX1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNEZXZpY2VUeXBlKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdQcm9wID0gbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcCk7XG4gICAgICBpZiAoIW1hdGNoaW5nUHJvcCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGVyZSBtaWdodCBiZSBtYXRjaGluZyBrZXksIGJ1dCBpdHMgdmFsdWUgY2FuIGJlIHt9IG9yIG51bGxcbiAgICAgICAgcmV0dXJuICEhZGFzaGJvYXJkW3Byb3BdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaXNEZXZpY2VEYXNoYm9hcmQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2V9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0dyb3VwRGFzaGJvYXJkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuR3JvdXB9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZERhc2hib2FyZFN0eWxlcyhzdHlsZUxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHN0eWxlTGlzdC5maWx0ZXIoYyA9PlxuICAgICAgU1RZTElOR19DTEFTU19QUkVGSVhFUy5zb21lKGNsYXNzUHJlZml4ID0+IGMuc3RhcnRzV2l0aChjbGFzc1ByZWZpeCkpXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0eWxpbmcoc3R5bGVMaXN0LCBzdHlsZU5hbWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNvbnN0IHN0eWxpbmcgPSBzdHlsZUxpc3QuZmluZChcbiAgICAgIHN0eWxlID0+IHN0eWxlICYmIG5ldyBSZWdFeHAoYC0ke3N0eWxlTmFtZX0kYCwgJ2knKS50ZXN0KHN0eWxlLmNsYXNzKVxuICAgICk7XG4gICAgcmV0dXJuIHN0eWxpbmcgPyBzdHlsaW5nLmNsYXNzIDogZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbWFwV2lkZ2V0cyh3aWRnZXRzOiBXaWRnZXRbXSkge1xuICAgIHJldHVybiBrZXlCeShcbiAgICAgIHdpZGdldHMubWFwKHdpZGdldCA9PiB7XG4gICAgICAgIHdpZGdldC5pZCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zdWJzdHIoMik7XG4gICAgICAgIHJldHVybiB3aWRnZXQ7XG4gICAgICB9KSxcbiAgICAgICdpZCdcbiAgICApO1xuICB9XG5cbiAgZ2V0RGFzaGJvYXJkJChkYXNoYm9hcmRJZE9yTmFtZSwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSwgbW8/OiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZS5nZXQoZGFzaGJvYXJkSWRPck5hbWUpO1xuXG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IG1vXG4gICAgICA/IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpXG4gICAgICA6IHRoaXMuZ2V0TmFtZWREYXNoYm9hcmQoZGFzaGJvYXJkSWRPck5hbWUpO1xuXG4gICAgY29uc3QgY2FjaGVSZWZyZXNoID0gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyQoZGFzaGJvYXJkcykucGlwZShcbiAgICAgIHRhcChkYXNoYm9hcmQgPT4gdGhpcy5jYWNoZURhc2hib2FyZChkYXNoYm9hcmQpKSxcbiAgICAgIGZpbHRlcihcbiAgICAgICAgZGFzaGJvYXJkID0+XG4gICAgICAgICAgZGFzaGJvYXJkLmlkID09PSBkYXNoYm9hcmRJZE9yTmFtZSB8fFxuICAgICAgICAgIGhhcyhcbiAgICAgICAgICAgIGRhc2hib2FyZCxcbiAgICAgICAgICAgIGAke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9JHtkYXNoYm9hcmRJZE9yTmFtZX1gXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIGNhY2hlID8gb2YoY2FjaGUpIDogY2FjaGVSZWZyZXNoO1xuICB9XG5cbiAgYXN5bmMgcGFzdGVEYXNoYm9hcmQobmV3Q29udGV4dDogRGFzaGJvYXJkQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNvcHlDbGlwYm9hcmQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhc2hib2FyZFRvUGFzdGUgPSB0aGlzLmNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5kYXNoYm9hcmQsXG4gICAgICAgICAgbmV3Q29udGV4dC5jb250ZXh0RGF0YSxcbiAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuY29udGV4dC5jb250ZXh0RGF0YVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkYXNoYm9hcmQgPSBhd2FpdCB0aGlzLmNyZWF0ZSh0aGlzLmNsZWFuKGRhc2hib2FyZFRvUGFzdGUpLCBuZXdDb250ZXh0KTtcblxuICAgICAgICAvLyBsaW5raW5nIGNoaWxkQWRkaXRpb25zIGZvciBlLmcuIHRvIGdyYW50IGFjY2VzcyB0byB0aGUgaW1hZ2VzIHVwbG9hZGVkIGJ5IHRoZSBpbWFnZSB3aWRnZXQgZm9yIHVzZXJzIHdpdGggb25seSBpbnZlbnRvcnkgcm9sZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YTogY2hpbGRBZGRpdGlvbnMgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zTGlzdChcbiAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuZGFzaGJvYXJkSWQsXG4gICAgICAgICAgeyBwYWdlU2l6ZTogMjAwMCB9XG4gICAgICAgICk7XG4gICAgICAgIGlmIChjaGlsZEFkZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0J1bGtBZGQoY2hpbGRBZGRpdGlvbnMsIGRhc2hib2FyZC5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb0Rhc2hib2FyZChkYXNoYm9hcmQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMuYWxlcnQud2FybmluZyhnZXR0ZXh0KCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgZm9yIHRoaXMgYWN0aW9uLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBmcmFnbWVudCB0aGF0IGFzc29jaWF0ZXMgZGFzaGJvYXJkcyB3aXRoIGRldmljZS9hc3NldC4gSXQgY29uc2lzdHMgb2YgdGhyZWUgZWxlbWVudHM6XG4gICAqIC0gRlJBR01FTlRfTkFNRSAtIHN0YXRpYyBzdHJpbmdcbiAgICogLSBkYXNoYm9hcmQgdHlwZSAoZS5nLiAnZ3JvdXAnLCAnZGV2aWNlJylcbiAgICogLSBmcmFnbWVudCB2YWx1ZSAoIGlkIG9mIGRldmljZS9hc3NldCBpZiBpdCBpcyBub3QgdHlwZWQgZGFzaGJvYXJkOyBkZXZpY2VUeXBlVmFsdWUgcHJvcGVydHkgb2YgZGFzaGJvYXJkIGlmIGl0IGlzIHR5cGUgZGFzaGJvYXJkKVxuICAgKiBFeGFtcGxlIGZyYWdtZW50IGZvciBkZXZpY2UgZGFzaGJvYXJkOiAnYzh5X0Rhc2hib2FyZCFkZXZpY2UhNzczMjAwJ1xuICAgKiBFeGFtcGxlIGZyYWdtZW50IGZvciBncm91cCBkYXNoYm9hcmQ6ICdjOHlfRGFzaGJvYXJkIWdyb3VwITg0MTI5MjA4J1xuICAgKiBFeGFtcGxlIGZyYWdtZW50IGZvciB0eXBlZCBkZXZpY2UgZGFzaGJvYXJkOiAnYzh5X0Rhc2hib2FyZCF0eXBlIWM4eV9sd20ybV9jb25uZWN0b3JfZGV2aWNlJ1xuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dERhc2hib2FyZFR5cGUgVHlwZSBvZiBkYXNoYm9hcmRcbiAgICogQHBhcmFtIHZhbHVlIEZyYWdtZW50IHZhbHVlXG4gICAqIEByZXR1cm5zIEZyYWdtZW50IGZvciBkYXNoYm9hcmRcbiAgICovXG4gIGNyZWF0ZUZyYWdtZW50S2V5KGNvbnRleHREYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFt0aGlzLkZSQUdNRU5UX05BTUUsIGNvbnRleHREYXNoYm9hcmRUeXBlLCB2YWx1ZV0uam9pbih0aGlzLklOREVYX1NQTElUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgZGFzaGJvYXJkIGNhbiBiZSBzZXQgdG8gdHlwZSBkYXNoYm9hcmQuXG4gICAqIEZpcnN0LCBpdCBjaGVja3MgaWYgZGV2aWNlVHlwZVZhbHVlIGV4aXN0cyBhbmQgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byBzZXQgZGFzaGJvYXJkIHR5cGUuXG4gICAqIFRoZW4sIGNhc2UgZnJvbSBzZW5zb3IgYXBwIGlzIGNoZWNrZWQtIGRhc2hib2FyZCBjcmVhdGVkIHdpdGggc2Vuc29yIGFwcCBoYXMgZGV2aWNlVHlwZSBzZXQgdG8gdHJ1ZSBidXRcbiAgICogdHlwZSBmcmFnbWVudCBpcyBtaXNzaW5nLSB3ZSBkbyBub3Qgc3VwcG9ydCB0aGlzIGNvbWJpbmF0aW9uLlxuICAgKiBAcGFyYW0gbW8gRGFzaGJvYXJkIG1hbmFnZWQgb2JqZWN0XG4gICAqIEBwYXJhbSBkZXZpY2VUeXBlVmFsdWUgVmFsdWUgb2YgZGV2aWNlIHR5cGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBkYXNoYm9hcmQgY2FuIGJlIHNldCB0byB0eXBlIGRhc2hib2FyZCwgZmFsc2UgaWYgaXQgaXMgZm9yYmlkZGVuLlxuICAgKi9cbiAgc2hvdWxkQWxsb3dUb1NldERhc2hib2FyZFR5cGUoXG4gICAgbW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgIGRldmljZVR5cGVWYWx1ZTogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghZGV2aWNlVHlwZVZhbHVlIHx8ICF0aGlzLnBlcm1pc3Npb25zLmhhc0FueVJvbGUodGhpcy5JTlZFTlRPUllfUk9MRVMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVGcmFnbWVudCA9IHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkoQ29udGV4dERhc2hib2FyZFR5cGUuVHlwZSwgZGV2aWNlVHlwZVZhbHVlKTtcbiAgICBpZiAobW8uYzh5X0Rhc2hib2FyZCAmJiBtby5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGUgJiYgIW1vW3R5cGVGcmFnbWVudF0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjcmVhdGVSZXBvcnQocmVwb3J0Q2ZnOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0Pikge1xuICAgIGNvbnN0IHJlcG9ydDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7fTtcbiAgICBPYmplY3QuYXNzaWduKHJlcG9ydCwgcmVwb3J0Q2ZnKTtcbiAgICBPYmplY3QuYXNzaWduKHJlcG9ydCwgeyBjOHlfUmVwb3J0OiB7fSB9KTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY3JlYXRlKHJlcG9ydCk7XG4gIH1cblxuICBhZGRSZXBvcnROYXZpZ2F0b3JOb2RlKHJlcG9ydDogSU1hbmFnZWRPYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gbmV3IE5hdmlnYXRvck5vZGUoe1xuICAgICAgbGFiZWw6IHJlcG9ydC5uYW1lLFxuICAgICAgcGF0aDogYHJlcG9ydHMvJHtyZXBvcnQuaWR9YCxcbiAgICAgIGljb246IHJlcG9ydC5pY29uLFxuICAgICAgcHJpb3JpdHk6IHJlcG9ydC5wcmlvcml0eVxuICAgIH0pO1xuICAgIHRoaXMubmF2aWdhdG9yLmFkZChub2RlKTtcbiAgfVxuXG4gIGdldENvbnRleHRGb3JHUyhtbzogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNEZXZpY2UobW8pKSB7XG4gICAgICByZXR1cm4gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULkRFVklDRTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBTZXJ2aWNlLmlzQXNzZXQobW8pKSB7XG4gICAgICByZXR1cm4gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULkFTU0VUO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNHcm91cChtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuR1JPVVA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHVwbGUgZGVzY3JpYmluZyB0aGUgZGFzaGJvYXJkIHR5cGUgYW5kIGl0cyBmcmFnbWVudHMuIEZvciBhc3NldHMgbGlrZSBkZXZpY2VzIGFuZCBncm91cHMsIGl0J3MgcG9zc2libGVcbiAgICogdG8gaGF2ZSB0d28gZnJhZ21lbnRzOiBvbmUgaW5kaWNhdGluZyB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlL2Fzc2V0IHdpdGggaXRzIElELCBhbmQgdGhlIHNlY29uZCBpbmRpY2F0aW5nXG4gICAqIHRoZSBkZXZpY2UvYXNzZXQgdHlwZSAoaWYgdGhlIGRhc2hib2FyZCBpcyBtZWFudCB0byBiZSBhcHBsaWVkIHRvIGFsbCBhc3NldHMgb2YgdGhpcyB0eXBlKS5cbiAgICpcbiAgICogQHBhcmFtIGRhc2hib2FyZE1PIC0gRGFzaGJvYXJkIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gY29udGV4dCAtIENvbnRleHQgZGF0YSBvZiBhc3NldC5cbiAgICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBpc0VkaXQgLSBUcnVlIGlmIGV4aXN0aW5nIGRhc2hib2FyZCBpcyB1cGRhdGVkLCBmYWxzZSB3aGVuIGl0J3MgY3JlYXRpb24gb2YgbmV3IGRhc2hib2FyZC5cbiAgICogQHJldHVybnMgVHVwbGUgb2YgZGFzaGJvYXJkIHR5cGUgYW5kIG9iamVjdCBjb250YWluaW5nIGRhc2hib2FyZCBmcmFnbWVudHMuXG4gICAqL1xuICBwcml2YXRlIGdldERhc2hib2FyZEZyYWdtZW50cyhcbiAgICBkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gICAgY29udGV4dDogQ29udGV4dERhdGEsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGlzRWRpdDogYm9vbGVhblxuICApOiBbQ29udGV4dERhc2hib2FyZFR5cGUsIFJlY29yZDxzdHJpbmcsIG9iamVjdD5dIHtcbiAgICBsZXQgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGU7XG4gICAgY29uc3QgaWQgPSAoY29udGV4dD8uY29udGV4dERhdGE/LmlkIGFzIHN0cmluZykgfHwgJyc7XG4gICAgY29uc3QgZnJhZ21lbnRzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cbiAgICBpZiAoY29udGV4dD8uY29udGV4dCA9PT0gVmlld0NvbnRleHQuRGV2aWNlIHx8IGNvbnRleHQ/LmNvbnRleHQgPT09IFZpZXdDb250ZXh0Lkdyb3VwKSB7XG4gICAgICAvLyBnZXQgYmFzZSB0eXBlIGZvciBkZXZpY2Ugb3IgZ3JvdXBcbiAgICAgIGNvbnN0IGRlZmF1bHRUeXBlID1cbiAgICAgICAgY29udGV4dC5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5EZXZpY2VcbiAgICAgICAgICA/IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVxuICAgICAgICAgIDogQ29udGV4dERhc2hib2FyZFR5cGUuR3JvdXA7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlXG4gICAgICAgID8gQ29udGV4dERhc2hib2FyZFR5cGUuVHlwZVxuICAgICAgICA6IGRlZmF1bHRUeXBlO1xuXG4gICAgICAvLyBjbGVhciBmcmFnbWVudHMgZnJvbSBvdGhlciBhc3NldCBpZiBjdXJyZW50IGFzc2V0IGlzIG5vdCBvcmlnaW4gb2YgdGhpcyBkYXNoYm9hcmRcbiAgICAgIHRoaXMuY2xlYXJSZWR1bmRhbnRGcmFnbWVudChkYXNoYm9hcmRNTywgZGVmYXVsdFR5cGUsIGZyYWdtZW50cyk7XG5cbiAgICAgIC8vIGFkZCBiYXNlIGZyYWdtZW50IGZvciBwYXJ0aWN1bGFyIGFzc2V0XG4gICAgICBjb25zdCBkZXZpY2VPckdyb3VwRnJhZ21lbnRLZXkgPSB0aGlzLmNyZWF0ZUZyYWdtZW50S2V5KGRlZmF1bHRUeXBlLCBpZCk7XG4gICAgICBmcmFnbWVudHNbZGV2aWNlT3JHcm91cEZyYWdtZW50S2V5XSA9IHt9O1xuXG4gICAgICAvLyBhZGQgb3IgY2xlYXIgdHlwZSBmcmFnbWVudFxuICAgICAgaWYgKGRhc2hib2FyZE1PLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZSB8fCBpc0VkaXQpIHtcbiAgICAgICAgY29uc3QgdHlwZUZyYWdtZW50S2V5ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShcbiAgICAgICAgICBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlLFxuICAgICAgICAgIGRhc2hib2FyZE1PLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGZyYWdtZW50c1t0eXBlRnJhZ21lbnRLZXldID0gZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlID8ge30gOiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWQ7XG4gICAgICBjb25zdCBuYW1lZEZyYWdtZW50S2V5ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZCwgbmFtZSk7XG4gICAgICBmcmFnbWVudHNbbmFtZWRGcmFnbWVudEtleV0gPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2Rhc2hib2FyZFR5cGUsIGZyYWdtZW50c107XG4gIH1cbiAgLyoqXG4gICAqIENsZWFycyBmcmFnbWVudHMgdGhhdCBvcmlnaW5hdGVzIGZyb20gb3RoZXIgbWFuYWdlZCBvYmplY3QuXG4gICAqIEUuZy4gdHlwZWQgZGFzaGJvYXJkIGlzIGNyZWF0ZWQgZm9yIGRldmljZSBBIG9mIHR5cGUgYzh5X01RVFREZXZpY2UgYW5kIGlkIDEsIHNvIGl0IGdldHMgZnJhZ21lbnRzIG9iamVjdFxuICAgKiBgYGB0c1xuICAgKiB7XG4gICAqIGM4eV9EYXNoYm9hcmQhZGV2aWNlITE6IHt9LFxuICAgKiBjOHlfRGFzaGJvYXJkIXR5cGUhYzh5X01RVFREZXZpY2U6IHt9XG4gICAqIH1cbiAgICpgYGBcbiAgICogdGhlbiwgb24gZGV2aWNlIEIgb2YgdHlwZSBjOHlfTVFUVERldmljZSBhbmQgaWQgMiwgd2hpY2ggYWxzbyBoYXMgYWNjZXNzIHRvIHRoaXMgZGFzaGJvYXJkLCBkZXZpY2VUeXBlIGlzIHNldCB0b1xuICAgKiBmYWxzZSwgc28gZGFzaGJvYXJkIGlzIG5vdCB0eXBlZCBkYXNoYm9hcmQgYW55bW9yZSBhbmQgbm93IGJlbG9uZ3MgdG8gZGV2aWNlIEIsIHRoZXJlZm9yZSBmcmFnbWVudHMgc2hvdWxkIGxvb2sgbGlrZVxuICAgKiBgYGB0c1xuICAgKiB7XG4gICAqIGM4eV9EYXNoYm9hcmQhZGV2aWNlITE6IG51bGwsIC8vIHRoaXMgdmFsdWUgaXMgY2xlYXJlZCBiZWNhdXNlIGRhc2hib2FyZCBpcyBkb2Vzbid0IGJlbG9uZyB0byBkZXZpY2UgQSBhbnltb3JlXG4gICAqIGM4eV9EYXNoYm9hcmQhZGV2aWNlITI6IHt9LCAvLyBhc3NpZ24gZGFzaGJvYXJkIHRvIGRldmljZSBCXG4gICAqIGM4eV9EYXNoYm9hcmQhdHlwZSFjOHlfTVFUVERldmljZTogbnVsbCAvLyB0aGlzIHZhbHVlIGlzIGNsZWFyZWQgaW4gZ2V0RGFzaGJvYXJkRnJhZ21lbnRzIG1ldGhvZCBhcyBpdCdzIG5vdCB0eXBlZCBkYXNoYm9hcmQgYW55bW9yZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gZGFzaGJvYXJkTU8gLSBEYXNoYm9hcmQgbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSB0eXBlIC0gQ29udGV4dCBkYXNoYm9hcmQgdHlwZS5cbiAgICogQHBhcmFtIGZyYWdtZW50cyAtIEZyYWdtZW50cyBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIGNsZWFyUmVkdW5kYW50RnJhZ21lbnQoXG4gICAgZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgIHR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlLFxuICAgIGZyYWdtZW50czogUmVjb3JkPHN0cmluZywgb2JqZWN0PlxuICApOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhkYXNoYm9hcmRNTylcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkodHlwZSwgJycpKSlcbiAgICAgIC5mb3JFYWNoKGtleSA9PiAoZnJhZ21lbnRzW2tleV0gPSBudWxsKSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBtaWdyYXRlIGRhc2hib2FyZHMgZnJvbSBwcmV2aW91cyAxMiBjb2x1bW5zIGxheW91dCB0byAyNCBjb2x1bW5zLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnM8VCBleHRlbmRzIHsgYzh5X0Rhc2hib2FyZD86IENvbnRleHREYXNoYm9hcmQgfT4oXG4gICAgZGFzaGJvYXJkczogVFtdXG4gICk6IFRbXTtcbiAgcHJpdmF0ZSBhZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnM8VCBleHRlbmRzIHsgYzh5X0Rhc2hib2FyZD86IENvbnRleHREYXNoYm9hcmQgfT4oXG4gICAgZGFzaGJvYXJkczogVFxuICApOiBUO1xuICBwcml2YXRlIGFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1uczxUIGV4dGVuZHMgeyBjOHlfRGFzaGJvYXJkPzogQ29udGV4dERhc2hib2FyZCB9PihcbiAgICBkYXNoYm9hcmRzOiBUIHwgVFtdXG4gICk6IFQgfCBUW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhc2hib2FyZHMpKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcy5tYXAoZGFzaGJvYXJkID0+IHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKGRhc2hib2FyZCkpO1xuICAgIH1cbiAgICAvLyBpZiBgY29sdW1uc2AgYXR0cmlidXRlIGV4aXN0cywgZGFzaGJvYXJkIHdhcyBhbHJlYWR5IGFkanVzdGVkLlxuICAgIGlmIChkYXNoYm9hcmRzLmM4eV9EYXNoYm9hcmQuY29sdW1ucykge1xuICAgICAgcmV0dXJuIGRhc2hib2FyZHM7XG4gICAgfVxuXG4gICAgZGFzaGJvYXJkcy5jOHlfRGFzaGJvYXJkLmNvbHVtbnMgPSAyNDtcbiAgICBpZiAoIWRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIGRhc2hib2FyZHM7XG4gICAgfVxuICAgIC8vIHdlIG5lZWQgdG8gbXVsdGlwbHkgYm90aCBfd2lkdGggYW5kIF94IGF0dHJpYnV0ZXMgd2l0aCAyIHRvIG1pZ3JhdGUgZnJvbSAxMiB0byAyNCBjb2x1bW5zLlxuICAgIE9iamVjdC52YWx1ZXMoZGFzaGJvYXJkcy5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKS5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICBpZiAod2lkZ2V0Ll93aWR0aCkge1xuICAgICAgICB3aWRnZXQuX3dpZHRoID0gd2lkZ2V0Ll93aWR0aCAqIDI7XG4gICAgICB9XG4gICAgICBpZiAod2lkZ2V0Ll94KSB7XG4gICAgICAgIHdpZGdldC5feCA9IHdpZGdldC5feCAqIDI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhc2hib2FyZHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlcmlhbGl6ZVdpZGdldENvbmZpZ3MoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY2xvbmVEZWVwKGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKTtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3MgPSBPYmplY3QudmFsdWVzKGNoaWxkcmVuKTtcbiAgICBjb25zdCBkZXRhaWxzID0gY29uZmlncy5tYXAoKHsgY29tcG9uZW50SWQsIGNvbmZpZyB9KSA9PiAoeyBjb21wb25lbnRJZCwgY29uZmlnIH0pKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50LnNlcmlhbGl6ZUNvbmZpZ3MoZGV0YWlscyk7XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBzZXQoZGV0YWlsc1tpbmRleF0uY29uZmlnLCBrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgIGRhc2g6IENvbnRleHREYXNoYm9hcmQsXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKTogQ29udGV4dERhc2hib2FyZCB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSByZWR1Y2UoXG4gICAgICBkYXNoLmNoaWxkcmVuLFxuICAgICAgKF9jaGlsZHJlbiwgY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgeyBpZCB9ID0gY2hpbGQ7XG4gICAgICAgIGNvbnN0IGNmZyA9IGNoaWxkLmNvbmZpZztcbiAgICAgICAgY29uc3QgcHJvcGVydGllc1RvQ29weSA9IHtcbiAgICAgICAgICBkZXZpY2U6IGRldmljZSA9PiB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZGV2aWNlLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFQb2ludHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50c0dhdWdlOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNMYWJlbHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2ZnKSB7XG4gICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIGlmIChjZmcub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcub3B0aW9ucywgcHJvcGVydGllc1RvQ29weSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkcmVuW2lkXSA9IGNsb25lRGVlcChjaGlsZCk7XG4gICAgICAgIHJldHVybiBfY2hpbGRyZW47XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuXG4gICAgZGFzaC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHJldHVybiBkYXNoO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3B5UHJvcGVydGllcyhvYmosIHByb3BlcnRpZXNUb0NvcHkpIHtcbiAgICBmb3JFYWNoKHByb3BlcnRpZXNUb0NvcHksIChjb3B5Rm4sIHByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAob2JqW3Byb3BlcnR5XSkge1xuICAgICAgICBvYmpbcHJvcGVydHldID0gY29weUZuKG9ialtwcm9wZXJ0eV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhcbiAgICBkYXRhUG9pbnRzLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICkge1xuICAgIGRhdGFQb2ludHMuZm9yRWFjaChkcCA9PiB7XG4gICAgICBkcC5fX3RhcmdldCA9IHRoaXMucmVwbGFjZUNvbnRleHRJbk9iaihkcC5fX3RhcmdldCwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFQb2ludHM7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VDb250ZXh0SW5PYmooXG4gICAgb2JqOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBpZiAob2JqICYmIG9iai5pZCA9PT0gb2xkQ29udGV4dC5pZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHBpY2sobmV3Q29udGV4dCwgWydpZCcsICduYW1lJ10pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFicyQobW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdKSB7XG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMkKGRhc2hib2FyZHMpLnBpcGUoXG4gICAgICBtZXJnZU1hcChkYXNoYm9hcmQgPT4gdGhpcy52ZXJpZnlEYXNoYm9hcmRBdmFpbGFiaWxpdHkkKGRhc2hib2FyZCkpLFxuICAgICAgbWVyZ2VNYXAoKFtkYXNoYm9hcmRdKSA9PiB0aGlzLnJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoZGFzaGJvYXJkKSksXG4gICAgICB0YXAoZGFzaGJvYXJkID0+IHRoaXMuY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkKSksXG4gICAgICBtYXAoZGFzaGJvYXJkID0+IHRoaXMuY3JlYXRlRGFzaGJvYXJkVGFiKGRhc2hib2FyZCkpLFxuICAgICAgdG9BcnJheSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgZ2xvYmFsUm9sZXNJZHMgPSBkYXNoYm9hcmQ/LmM4eV9EYXNoYm9hcmQ/Lmdsb2JhbFJvbGVzSWRzO1xuICAgIGNvbnN0IGNhbkVkaXQgPSBmcm9tKFxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5jYW5FZGl0KHRoaXMuSU5WRU5UT1JZX1JPTEVTLCBkYXNoYm9hcmQsIHsgc2tpcFJlcXVlc3RDaGVjazogdHJ1ZSB9KVxuICAgICk7XG4gICAgY29uc3QgaGFzQW55R2xvYmFsUm9sZSA9XG4gICAgICAhZ2xvYmFsUm9sZXNJZHMgfHwgZ2xvYmFsUm9sZXNJZHMgPT09IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURURcbiAgICAgICAgPyBvZih0cnVlKVxuICAgICAgICA6IG9mKHRoaXMucGVybWlzc2lvbnMuaGFzQW55R2xvYmFsUm9sZShnbG9iYWxSb2xlc0lkcykpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW29mKGRhc2hib2FyZCksIGNhbkVkaXQsIGhhc0FueUdsb2JhbFJvbGVdKS5waXBlKFxuICAgICAgZmlsdGVyKChbLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkgPT4gY2FuRWRpdCB8fCBoYXNBbnlHbG9iYWxSb2xlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHREYXNoYm9hcmRzJChyZXF1ZXN0OiBQcm9taXNlPElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0Pj4pIHtcbiAgICByZXR1cm4gZnJvbShyZXF1ZXN0KS5waXBlKFxuICAgICAgbWVyZ2VNYXAocmVzcG9uc2UgPT5cbiAgICAgICAgdGhpcy5hZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnMocmVzcG9uc2UuZGF0YSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdFtdKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIGFscmVhZHkgY29ycnVwdGVkIGRhc2hib2FyZHMgZnJvbSBkYXNoYm9hcmRNbyBwcm9wZXJ0eS5cbiAgICogQWRkZWQgdG8gZml4IGRhc2hib2FyZHMgb24gdGhlIGNsb3VkIGluc3RhbmNlIChldS1sYXRlc3QpLlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIGlzIGdvaW5nIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgMTAwNy43LjAuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoXG4gICAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ29weSA9IGNsb25lRGVlcChkYXNoYm9hcmQpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ2V0KGRhc2hib2FyZENvcHksICdjOHlfRGFzaGJvYXJkLmNoaWxkcmVuJyk7XG4gICAgbGV0IHVwZGF0ZURhc2hib2FyZCA9IGZhbHNlO1xuXG4gICAgZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgaWYgKGdldChjaGlsZCwgJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JykpIHtcbiAgICAgICAgZGVsZXRlIGNoaWxkLmNvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0O1xuICAgICAgICB1cGRhdGVEYXNoYm9hcmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGdldChjaGlsZCwgJ2NvbmZpZy5kYXNoYm9hcmRNbycpKSB7XG4gICAgICAgIGRlbGV0ZSBjaGlsZC5jb25maWcuZGFzaGJvYXJkTW87XG4gICAgICAgIHVwZGF0ZURhc2hib2FyZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodXBkYXRlRGFzaGJvYXJkKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZShkYXNoYm9hcmRDb3B5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhc2hib2FyZENvcHk7XG4gIH1cblxuICBwcml2YXRlIGNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmQuaWQsIGRhc2hib2FyZCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZFRhYihkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgeyBjOHlfRGFzaGJvYXJkOiBfZGFzaGJvYXJkLCBpZCB9ID0gZGFzaGJvYXJkO1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiBfZGFzaGJvYXJkLmljb24sXG4gICAgICBwYXRoOiBgJHt0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRIfS8ke2lkfWAsXG4gICAgICBsYWJlbDogX2Rhc2hib2FyZC5uYW1lLFxuICAgICAgcHJpb3JpdHk6IF9kYXNoYm9hcmQucHJpb3JpdHksXG4gICAgICBoaWRlOiB0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCksXG4gICAgICBiYWRnZTpcbiAgICAgICAgX2Rhc2hib2FyZC5kZXZpY2VUeXBlICYmXG4gICAgICAgIHRoaXMuc2hvdWxkQWxsb3dUb1NldERhc2hib2FyZFR5cGUoZGFzaGJvYXJkLCBfZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSlcbiAgICAgICAgICA/IGdldHRleHQoJ0Rhc2hib2FyZCB0ZW1wbGF0ZScpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgdG9vbHRpcFRleHQ6IF9kYXNoYm9hcmQuZGVzY3JpcHRpb24gfHwgZ2V0dGV4dCgnRGFzaGJvYXJkIHRlbXBsYXRlJylcbiAgICB9IGFzIFRhYjtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW4oZGFzaGJvYXJkKSB7XG4gICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhc2hib2FyZCwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICckJGhhc2hLZXknIHx8IGtleSA9PT0gJ2tsYXNzZXMnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmFtZWREYXNoYm9hcmQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3Qoe1xuICAgICAgZnJhZ21lbnRUeXBlOiBgJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7bmFtZX1gLFxuICAgICAgcGFnZVNpemU6IDFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGV4dERhc2hib2FyZHMoXG4gICAgbW86IElNYW5hZ2VkT2JqZWN0LFxuICAgIGRhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlW11cbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+IHtcbiAgICBjb25zdCBxdWVyeSA9IGRhc2hib2FyZFR5cGVcbiAgICAgIC5tYXAodCA9PiBgKGhhcygnJHt0aGlzLmNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vLCB0KX0nKSlgKVxuICAgICAgLmpvaW4oJyBvciAnKTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBxdWVyeTogYCRmaWx0ZXI9KCR7cXVlcnl9KWAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5ERUZBVUxUX1BBR0VTSVpFXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vOiBJTWFuYWdlZE9iamVjdCwgdHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKG1vLmM4eV9SZXBvcnQpIHtcbiAgICAgIHZhbHVlID0gYCR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfSR7bW8uaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0eXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlID8gbW8udHlwZSA6IG1vLmlkO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke3R5cGV9JHt0aGlzLklOREVYX1NQTElUfSR7dmFsdWV9YDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sIGNvbnRleHQ/KSB7XG4gICAgaWYgKFxuICAgICAgKCFjb250ZXh0ICYmIHRoaXMuaXNOYW1lZChkYXNoYm9hcmQpICYmICF0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCkpIHx8XG4gICAgICB0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
597
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUNMLFlBQVksRUFFWix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxZQUFZLEVBQ1osWUFBWSxFQUNaLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLE1BQU0sRUFFTixXQUFXLEVBQ1gsV0FBVyxFQUVaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsT0FBTyxFQUNQLEdBQUcsRUFDSCxHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLEdBQUcsRUFDSCxJQUFJLEVBQ0wsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0YsT0FBTyxFQUNMLHlCQUF5QixFQUd6QixvQkFBb0IsRUFHcEIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNuQixNQUFNLDJCQUEyQixDQUFDOzs7Ozs7QUFLbkMsTUFBTSxPQUFPLHVCQUF1QjtJQWtCbEMsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFLO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFlBQ1UsU0FBMkIsRUFDM0IsSUFBaUIsRUFDakIsS0FBbUIsRUFDbkIsZ0JBQWtDLEVBQ2xDLE1BQWMsRUFDZCxTQUEyQixFQUMzQixXQUF3QixFQUN4QixLQUFtQixFQUNuQixnQkFBeUMsRUFDekMsWUFBMEI7UUFUMUIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQWxDM0Isd0JBQW1CLEdBQUcsU0FBUyxDQUFDO1FBRWhDLCtCQUEwQixHQUFHLEVBQUUsQ0FBQztRQUN4QixvQkFBZSxHQUFHO1lBQ2pDLFdBQVcsQ0FBQyxvQkFBb0I7WUFDaEMsV0FBVyxDQUFDLHlCQUF5QjtTQUN0QyxDQUFDO1FBQ00sVUFBSyxHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO1FBQ2hELHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4QixrQkFBYSxHQUFHLGVBQWUsQ0FBQztRQUNoQyx5QkFBb0IsR0FBRyxXQUFXLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxHQUFHLENBQUM7UUFDM0Isa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFDckIsd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQXVCbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBOEIsRUFBRSxPQUFxQixFQUFFLElBQUksR0FBRyxFQUFFO1FBQzNFLElBQUksU0FBUyxHQUEyQyxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUNKLFNBQVMsRUFDVCxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFDakUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FDckQsQ0FBQztRQUVGLE1BQU0sQ0FBQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ3BFLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBbUMsRUFDaEUsT0FBTyxFQUNQLElBQUksRUFDSixLQUFLLENBQ04sQ0FBQztRQUNGLFNBQVMsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUVwRCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0MsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFDRCxTQUFTLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQzlDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FDWixhQUFhLEtBQUssb0JBQW9CLENBQUMsS0FBSztZQUM1QyxhQUFhLEtBQUssb0JBQW9CLENBQUMsTUFBTTtZQUM3QyxDQUFDLE9BQU8sSUFBSSxhQUFhLEtBQUssb0JBQW9CLENBQUMsS0FBSyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQ3ZDLFNBQVMsRUFDUixPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQWEsSUFBSSxFQUFFLENBQzFDO1lBQ0gsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFxQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQTBDO1FBQ3JELElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hELElBQUksR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBcUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FDVixTQUF3QyxFQUN4QyxPQUFxQjtRQUVyQixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1FBQzdDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFDOUMsTUFBTSxDQUNKLFNBQVMsRUFDVCxJQUFJLENBQUMsMkJBQTJCLENBQUMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFDakUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FDckQsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RixhQUFhLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDO1FBQ3BFLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWpELE1BQU0sQ0FBQyxFQUFFLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVGLGFBQWEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxhQUFhLEVBQUUsR0FBRyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQXdDLEVBQUUsZ0JBQWdCLEdBQUcsSUFBSTtRQUM1RSxJQUFJLENBQUM7WUFDSCxJQUFJLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3JCLElBQUksR0FBRyxHQUFXLE9BQU8sQ0FDdkIsc0ZBQXNGLENBQ3ZGLENBQUM7Z0JBQ0YsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLEdBQUcsR0FBRyxPQUFPLENBQ1g7bUNBQ3VCLENBQ3hCLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUN0QixPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7b0JBQ2pDLGFBQWEsRUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUk7b0JBQzNDLFVBQVUsRUFBRSxTQUFTLENBQUMsYUFBYSxDQUFDLGVBQWU7aUJBQ3BELENBQUMsRUFDRixNQUFNLENBQUMsTUFBTSxFQUNiO29CQUNFLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO29CQUNyQixNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQztpQkFDMUIsQ0FDRixDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDekQsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2IsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDM0UsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUIsY0FBYyxDQUFDLEdBQUcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osaUJBQWlCO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQ3BCLFNBQWlELEVBQ2pELFlBQThCO1FBRTlCLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUNwQyxTQUFTLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDckMsWUFBWSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzdELENBQUM7UUFFRCxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsU0FBUyxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxDQUFDLFlBQVksRUFBRSxHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFFOUYsSUFBSSxTQUFTLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQzVFLFNBQVMsQ0FBQyxvQkFBb0IsR0FBRztnQkFDL0IsR0FBRyxTQUFTLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUM7YUFDNUUsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsa0JBQWtCLENBQ2hCLEtBQTZCLEVBQzdCLEtBQTZCO1FBRTdCLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3JDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUMvRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ2QsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFDZixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQseUJBQXlCLENBQUMsSUFBWSxFQUFFLGNBQXdCLEVBQUUsT0FBcUI7UUFDckYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hFLFlBQVksRUFBRSxFQUNkLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FDZCxJQUFJLENBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FDVDtZQUNFLFFBQVE7WUFDUixhQUFhLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFO1NBQzlFLEVBQ0QsT0FBTyxFQUNQLElBQUksQ0FDTCxDQUNGLENBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELG1CQUFtQixDQUFDLEVBQWtCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxFQUFFLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBQztnQkFDbEMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUNkLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSTtnQkFDYixRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVE7YUFDdEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsV0FBMEM7UUFDbEUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQzNDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQzNDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUQsaUVBQWlFO1lBQ2pFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3JFLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQzNDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDdEUsVUFBVSxFQUFFLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDM0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFpQztRQUN0RCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDZCQUE2QjtRQUMzQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQ2pDLFdBQVcsQ0FBQyxvQkFBb0I7WUFDaEMsV0FBVyxDQUFDLHFCQUFxQjtZQUNqQyxXQUFXLENBQUMseUJBQXlCO1lBQ3JDLFdBQVcsQ0FBQywwQkFBMEI7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUFpRDtRQUN2RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FDbEMsSUFBSSxNQUFNLENBQ1IsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FDNUYsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsU0FBaUQ7UUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQ2xDLElBQUksTUFBTSxDQUNSLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUN2SCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFpRDtRQUM1RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQzdCLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQzNGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNsQixPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7aUJBQU0sQ0FBQztnQkFDTiwrREFBK0Q7Z0JBQy9ELE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBaUQ7UUFDakUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQ2xDLElBQUksTUFBTSxDQUNSLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQzdGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBaUQ7UUFDaEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQ2xDLElBQUksTUFBTSxDQUNSLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQzVGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsMEJBQTBCLENBQUMsU0FBbUI7UUFDNUMsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzFCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZO1FBQzNDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQzVCLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FDdEUsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDaEQsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFpQjtRQUMxQixPQUFPLEtBQUssQ0FDVixPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsRUFDRixJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQUMsaUJBQWlCLEVBQUUsYUFBcUMsRUFBRSxFQUFtQjtRQUN6RixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhELE1BQU0sVUFBVSxHQUFHLEVBQUU7WUFDbkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUU5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUM5RCxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ2hELE1BQU0sQ0FDSixTQUFTLENBQUMsRUFBRSxDQUNWLFNBQVMsQ0FBQyxFQUFFLEtBQUssaUJBQWlCO1lBQ2xDLEdBQUcsQ0FDRCxTQUFTLEVBQ1QsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLEVBQUUsQ0FDL0csQ0FDSixDQUNGLENBQUM7UUFDRixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDMUMsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsVUFBNEI7UUFDL0MsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDO2dCQUNILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFDNUIsVUFBVSxDQUFDLFdBQVcsRUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUN2QyxDQUFDO2dCQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBRTlFLGtJQUFrSTtnQkFDbEksTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQ3RFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUM5QixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FDbkIsQ0FBQztnQkFDRixJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzNFLENBQUM7Z0JBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN0QyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLENBQUM7WUFDM0UsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsaUJBQWlCLENBQUMsb0JBQTBDLEVBQUUsS0FBYTtRQUN6RSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILDZCQUE2QixDQUMzQixFQUFpQyxFQUNqQyxlQUF1QjtRQUV2QixJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDM0UsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUN4RixJQUFJLEVBQUUsQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUN6RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBa0M7UUFDN0MsTUFBTSxNQUFNLEdBQTRCLEVBQUUsQ0FBQztRQUMzQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELHNCQUFzQixDQUFDLE1BQXNCO1FBQzNDLE1BQU0sSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDO1lBQzdCLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNsQixJQUFJLEVBQUUsV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFO1lBQzVCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELGVBQWUsQ0FBQyxFQUFrQjtRQUNoQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNyRCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDcEQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxPQUFPLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSyxxQkFBcUIsQ0FDM0IsV0FBMEMsRUFDMUMsT0FBb0IsRUFDcEIsSUFBWSxFQUNaLE1BQWU7UUFFZixJQUFJLGFBQW1DLENBQUM7UUFDeEMsTUFBTSxFQUFFLEdBQUksT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFhLElBQUksRUFBRSxDQUFDO1FBQ3RELE1BQU0sU0FBUyxHQUEyQixFQUFFLENBQUM7UUFFN0MsSUFBSSxPQUFPLEVBQUUsT0FBTyxLQUFLLFdBQVcsQ0FBQyxNQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sS0FBSyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEYsb0NBQW9DO1lBQ3BDLE1BQU0sV0FBVyxHQUNmLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxDQUFDLE1BQU07Z0JBQ3BDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO2dCQUM3QixDQUFDLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1lBQ2pDLGFBQWEsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLFVBQVU7Z0JBQ2xELENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJO2dCQUMzQixDQUFDLENBQUMsV0FBVyxDQUFDO1lBRWhCLG9GQUFvRjtZQUNwRixJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVqRSx5Q0FBeUM7WUFDekMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLFNBQVMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUV6Qyw2QkFBNkI7WUFDN0IsSUFBSSxXQUFXLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUM1QyxvQkFBb0IsQ0FBQyxJQUFJLEVBQ3pCLFdBQVcsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUMxQyxDQUFDO2dCQUNGLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDaEYsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsYUFBYSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQztZQUMzQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEYsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXNCRztJQUNLLHNCQUFzQixDQUM1QixXQUEwQyxFQUMxQyxJQUEwQixFQUMxQixTQUFpQztRQUVqQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMvRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFXTywyQkFBMkIsQ0FDakMsVUFBbUI7UUFFbkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUNELGlFQUFpRTtRQUNqRSxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckMsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBRUQsc0dBQXNHO1FBQ3RHLDhEQUE4RDtRQUM5RCx1RkFBdUY7UUFDdkYsTUFBTSwrQ0FBK0MsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNuRSxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FDbEMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakQsSUFBSSwrQ0FBK0MsRUFBRSxDQUFDO1lBQ3BELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFFRCw2RkFBNkY7UUFDN0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU8sS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQXdDO1FBQzNFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO2dCQUM5QyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUM5QyxDQUFDO0lBRU8sMEJBQTBCLENBQ2hDLElBQXNCLEVBQ3RCLFVBQW1DLEVBQ25DLFVBQW1DO1FBRW5DLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FDckIsSUFBSSxDQUFDLFFBQVEsRUFDYixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuQixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDekIsTUFBTSxnQkFBZ0IsR0FBRztnQkFDdkIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO2dCQUMxRSxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FDdkIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO2dCQUNyRSxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FDdkIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO2dCQUNyRSxlQUFlLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDO2dCQUNyRSxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUM3QixJQUFJLENBQUMsMEJBQTBCLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUM7YUFDdEUsQ0FBQztZQUVGLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDO1lBQ0gsQ0FBQztZQUVELFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxFQUNELEVBQUUsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0I7UUFDMUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQzdDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xCLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUNoQyxVQUFVLEVBQ1YsVUFBbUMsRUFDbkMsVUFBbUM7UUFFbkMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN0QixFQUFFLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsR0FBNEIsRUFDNUIsVUFBbUMsRUFDbkMsVUFBbUM7UUFFbkMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVPLFFBQVEsQ0FBQyxFQUFpQyxFQUFFLGFBQXFDO1FBQ3ZGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFaEUsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUNoRCxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDbkUsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ3BFLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDaEQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQ3BELE9BQU8sRUFBRSxDQUNWLENBQUM7SUFDSixDQUFDO0lBRU8sNEJBQTRCLENBQUMsU0FBd0M7UUFDM0UsTUFBTSxjQUFjLEdBQUcsU0FBUyxFQUFFLGFBQWEsRUFBRSxjQUFjLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLENBQ3RGLENBQUM7UUFDRixNQUFNLGdCQUFnQixHQUNwQixDQUFDLGNBQWMsSUFBSSxjQUFjLEtBQUsseUJBQXlCO1lBQzdELENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ1YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ25FLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLGdCQUFnQixDQUFDLENBQ3ZFLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCLENBQUMsT0FBNkM7UUFDekUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUN2QixRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDbEIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxJQUF1QyxDQUFDLENBQ25GLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssS0FBSyxDQUFDLHlCQUF5QixDQUNyQyxTQUF3QztRQUV4QyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLGFBQWEsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO1FBQzlELElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU1QixPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxxQ0FBcUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELE9BQU8sS0FBSyxDQUFDLG1DQUFtQyxDQUFDO2dCQUNqRCxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLENBQUM7WUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2dCQUNoQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBRU8sY0FBYyxDQUFDLFNBQXdDO1FBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFNBQXdDO1FBQ2pFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUNwRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUU7WUFDMUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3RCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7WUFDOUIsS0FBSyxFQUNILFVBQVUsQ0FBQyxVQUFVO2dCQUNyQixJQUFJLENBQUMsNkJBQTZCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxlQUFlLENBQUM7Z0JBQ3ZFLENBQUMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxJQUFJO1lBQ1YsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDO1NBQzlELENBQUM7SUFDWCxDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVM7UUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDMUQsSUFBSSxHQUFHLEtBQUssV0FBVyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLElBQVk7UUFDcEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUN6QixZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxFQUFFO1lBQy9HLFFBQVEsRUFBRSxDQUFDO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUMxQixFQUFrQixFQUNsQixhQUFxQztRQUVyQyxNQUFNLEtBQUssR0FBRyxhQUFhO2FBQ3hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ3pCLEtBQUssRUFBRSxZQUFZLEtBQUssR0FBRztZQUMzQixRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtTQUNoQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsRUFBa0IsRUFBRSxJQUEwQjtRQUM1RSxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDaEQsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUcsSUFBSSxLQUFLLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUN0RixDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQWlELEVBQUUsT0FBUTtRQUNqRixJQUNFLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFDNUIsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs4R0F0eUJVLHVCQUF1QjtrSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBDb250ZXh0RGF0YSxcbiAgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gIGdldEFjdGl2YXRlZFJvdXRlLFxuICBnZXR0ZXh0LFxuICBHcm91cFNlcnZpY2UsXG4gIE1vZGFsU2VydmljZSxcbiAgTmF2aWdhdG9yTm9kZSxcbiAgTmF2aWdhdG9yU2VydmljZSxcbiAgUGVybWlzc2lvbnMsXG4gIFN0YXR1cyxcbiAgVGFiLFxuICBUYWJzU2VydmljZSxcbiAgVmlld0NvbnRleHQsXG4gIFdpZGdldFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7XG4gIGFzc2lnbixcbiAgY2xvbmVEZWVwLFxuICBmb3JFYWNoLFxuICBnZXQsXG4gIGhhcyxcbiAga2V5QnksXG4gIGtleXMsXG4gIHBpY2ssXG4gIHJlZHVjZSxcbiAgc2V0LFxuICBzb21lXG59IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCB0YXAsIHRocm93SWZFbXB0eSwgdG9BcnJheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQsXG4gIENvbnRleHREYXNoYm9hcmQsXG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBDb250ZXh0RGFzaGJvYXJkVHlwZSxcbiAgRGFzaGJvYXJkQ29udGV4dCxcbiAgRGFzaGJvYXJkQ29weUNsaXBib2FyZCxcbiAgU1RZTElOR19DTEFTU19QUkVGSVhFUyxcbiAgUFJPRFVDVF9FWFBFUklFTkNFXG59IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB7XG4gIGRhc2hib2FyZFRhYnMkOiBPYnNlcnZhYmxlPFRhYltdPjtcbiAgZm9ybURpc2FibGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcmVhZG9ubHkgUkVQT1JUX1BBUlRJQUxfTkFNRSA9ICdyZXBvcnRfJztcbiAgY29weUNsaXBib2FyZDogRGFzaGJvYXJkQ29weUNsaXBib2FyZDtcbiAgcmVhZG9ubHkgVkVSU0lPTl9ISVNUT1JZX1NJWkVfTElNSVQgPSAxMDtcbiAgcHJpdmF0ZSByZWFkb25seSBJTlZFTlRPUllfUk9MRVMgPSBbXG4gICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTlxuICBdO1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfUEFHRVNJWkUgPSAxMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IEZSQUdNRU5UX05BTUUgPSAnYzh5X0Rhc2hib2FyZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgREFTSEJPQVJEX1JPVVRFX1BBVEggPSAnZGFzaGJvYXJkJztcbiAgcHJpdmF0ZSByZWFkb25seSBJTkRFWF9TUExJVCA9ICchJztcbiAgcHJpdmF0ZSBfZm9ybURpc2FibGVkID0gdHJ1ZTtcbiAgcHJpdmF0ZSBmb3JtRGlzYWJsZWRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICBnZXQgZm9ybURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtRGlzYWJsZWQ7XG4gIH1cblxuICBzZXQgZm9ybURpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZm9ybURpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5mb3JtRGlzYWJsZWRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm1EaXNhYmxlZCQgPSB0aGlzLmZvcm1EaXNhYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGFzaGJvYXJkQ2ZnOiBDb250ZXh0RGFzaGJvYXJkLCBjb250ZXh0PzogQ29udGV4dERhdGEsIG5hbWUgPSAnJykge1xuICAgIGxldCBkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+ID0ge307XG4gICAgYXNzaWduKFxuICAgICAgZGFzaGJvYXJkLFxuICAgICAgdGhpcy5hZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnMoeyBjOHlfRGFzaGJvYXJkOiBkYXNoYm9hcmRDZmcgfSksXG4gICAgICB0aGlzLnVwZGF0ZURhc2hib2FyZEhpc3RvcnkoZGFzaGJvYXJkLCBkYXNoYm9hcmRDZmcpXG4gICAgKTtcblxuICAgIGNvbnN0IFtkYXNoYm9hcmRUeXBlLCBkYXNoYm9hcmRGcmFnbWVudHNdID0gdGhpcy5nZXREYXNoYm9hcmRGcmFnbWVudHMoXG4gICAgICB7IGM4eV9EYXNoYm9hcmQ6IGRhc2hib2FyZENmZyB9IGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgICAgY29udGV4dCxcbiAgICAgIG5hbWUsXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgZGFzaGJvYXJkID0geyAuLi5kYXNoYm9hcmQsIC4uLmRhc2hib2FyZEZyYWdtZW50cyB9O1xuXG4gICAgaWYgKHRoaXMuc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZCwgY29udGV4dCkpIHtcbiAgICAgIGFzc2lnbihkYXNoYm9hcmQsIHsgYzh5X0dsb2JhbDoge30gfSk7XG4gICAgfVxuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBjb25zdCB7IGRhdGEgfSA9XG4gICAgICBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cCB8fFxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlIHx8XG4gICAgICAoY29udGV4dCAmJiBkYXNoYm9hcmRUeXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZClcbiAgICAgICAgPyBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0NyZWF0ZShcbiAgICAgICAgICAgIGRhc2hib2FyZCxcbiAgICAgICAgICAgIChjb250ZXh0Py5jb250ZXh0RGF0YS5pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICAgICAgKVxuICAgICAgICA6IGF3YWl0IHRoaXMuaW52ZW50b3J5LmNyZWF0ZShkYXNoYm9hcmQpO1xuICAgIHJldHVybiBkYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0O1xuICB9XG5cbiAgYXN5bmMgZGV0YWlsKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGxldCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChkYXNoYm9hcmRNTyk7XG4gICAgZGF0YSA9IHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKGRhdGEgYXMgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpO1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZE1PLmlkLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShcbiAgICBkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgIGNvbnRleHQ/OiBDb250ZXh0RGF0YVxuICApOiBQcm9taXNlPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2ZnID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQ7XG4gICAgZGFzaGJvYXJkLm5hbWUgPSBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5uYW1lO1xuICAgIGFzc2lnbihcbiAgICAgIGRhc2hib2FyZCxcbiAgICAgIHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKHsgYzh5X0Rhc2hib2FyZDogZGFzaGJvYXJkQ2ZnIH0pLFxuICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRIaXN0b3J5KGRhc2hib2FyZCwgZGFzaGJvYXJkQ2ZnKVxuICAgICk7XG5cbiAgICBjb25zdCBrZWVwRnJhZ21lbnRzID0gdGhpcy5jbGVhbihwaWNrKGRhc2hib2FyZCwgW3RoaXMuRlJBR01FTlRfTkFNRSwgJ2lkJywgJ25hbWUnXSkpO1xuICAgIGtlZXBGcmFnbWVudHMuYzh5X0Rhc2hib2FyZEhpc3RvcnkgPSBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3Rvcnk7XG4gICAgYXdhaXQgdGhpcy5zZXJpYWxpemVXaWRnZXRDb25maWdzKGtlZXBGcmFnbWVudHMpO1xuXG4gICAgY29uc3QgWywgZGFzaGJvYXJkVHlwZUZyYWdtZW50c10gPSB0aGlzLmdldERhc2hib2FyZEZyYWdtZW50cyhkYXNoYm9hcmQsIGNvbnRleHQsICcnLCB0cnVlKTtcbiAgICBrZWVwRnJhZ21lbnRzLmM4eV9HbG9iYWwgPSB0aGlzLnNob3VsZFNldEdsb2JhbCh7IC4uLmRhc2hib2FyZCwgLi4uZGFzaGJvYXJkVHlwZUZyYWdtZW50cyB9KTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LnVwZGF0ZSh7IC4uLmtlZXBGcmFnbWVudHMsIC4uLmRhc2hib2FyZFR5cGVGcmFnbWVudHMgfSk7XG4gICAgdGhpcy5jYWNoZS5zZXQoZGFzaGJvYXJkLmlkLCBkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LCB3aXRoQ29uZmlybWF0aW9uID0gdHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAod2l0aENvbmZpcm1hdGlvbikge1xuICAgICAgICBsZXQgbXNnOiBzdHJpbmcgPSBnZXR0ZXh0KFxuICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0aGUgZGFzaGJvYXJkIFwie3sgZGFzaGJvYXJkTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuaXNEZXZpY2VUeXBlKGRhc2hib2FyZCkpIHtcbiAgICAgICAgICBtc2cgPSBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBkYXNoYm9hcmQgXCJ7eyBkYXNoYm9hcmROYW1lIH19XCIgZnJvbSBhbGwgZGV2aWNlcyBvZiB0aGUgdHlwZSBcInt7IGRldmljZVR5cGUgfX1cIi5cbiAgICAgICAgICAgRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGRhc2hib2FyZCcpLFxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1zZywge1xuICAgICAgICAgICAgZGFzaGJvYXJkTmFtZTogZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZSxcbiAgICAgICAgICAgIGRldmljZVR5cGU6IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb2s6IGdldHRleHQoJ0RlbGV0ZScpLFxuICAgICAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmRlbGV0ZShkYXNoYm9hcmQpO1xuICAgICAgY29uc3QgdGFiVG9SZW1vdmUgPSBBcnJheS5mcm9tKHRoaXMudGFicy5zdGF0ZSkuZmluZCh0YWIgPT4ge1xuICAgICAgICBpZiAodGFiLnBhdGgpIHtcbiAgICAgICAgICByZXR1cm4gdGFiLnBhdGguZW5kc1dpdGgoYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtkYXNoYm9hcmQuaWR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy50YWJzLnJlbW92ZSh0YWJUb1JlbW92ZSk7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMudGFicy5yZWZyZXNoKCk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gaW50ZW5kZWQgZW1wdHlcbiAgICB9XG4gIH1cblxuICB1cGRhdGVEYXNoYm9hcmRIaXN0b3J5KFxuICAgIGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sXG4gICAgZGFzaGJvYXJkQ2ZnOiBDb250ZXh0RGFzaGJvYXJkXG4gICk6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+IHtcbiAgICBpZiAoIWRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeSkge1xuICAgICAgZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5ID0gW107XG4gICAgfVxuICAgIGlmICghZGFzaGJvYXJkQ2ZnLmhpc3RvcnlEZXNjcmlwdGlvbikge1xuICAgICAgZGFzaGJvYXJkQ2ZnLmhpc3RvcnlEZXNjcmlwdGlvbiA9IHsgY2hhbmdlVHlwZTogJ2NyZWF0ZScgfTtcbiAgICB9XG5cbiAgICBkYXNoYm9hcmRDZmcuY3JlYXRlZCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3RvcnkgPSBjbG9uZURlZXAoW2Rhc2hib2FyZENmZywgLi4uZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5XSk7XG5cbiAgICBpZiAoZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5Lmxlbmd0aCA+IHRoaXMuVkVSU0lPTl9ISVNUT1JZX1NJWkVfTElNSVQpIHtcbiAgICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeSA9IFtcbiAgICAgICAgLi4uZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5LnNsaWNlKDAsIHRoaXMuVkVSU0lPTl9ISVNUT1JZX1NJWkVfTElNSVQpXG4gICAgICBdO1xuICAgIH1cblxuICAgIHJldHVybiBkYXNoYm9hcmQ7XG4gIH1cblxuICBhY3RpdmF0ZURhc2hib2FyZHMoXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgdHlwZXM6IENvbnRleHREYXNoYm9hcmRUeXBlW11cbiAgKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgVGFiW10+IHtcbiAgICBjb25zdCB7IGRhc2hib2FyZElkIH0gPSByb3V0ZS5wYXJhbXM7XG4gICAgaWYgKGRhc2hib2FyZElkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXNoYm9hcmQkKGRhc2hib2FyZElkLCB0eXBlcywgcm91dGUucGFyZW50LmRhdGEuY29udGV4dERhdGEpLnBpcGUoXG4gICAgICAgIHRhcChkYXNoYm9hcmQgPT4ge1xuICAgICAgICAgIHJvdXRlLmRhdGEgPSB7IGRhc2hib2FyZCB9O1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKCgpID0+IHRydWUpLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhc2hib2FyZFRhYnMkID0gdGhpcy5nZXRUYWJzJChyb3V0ZS5kYXRhLmNvbnRleHREYXRhLCB0eXBlcyk7XG4gICAgcmV0dXJuIHRoaXMuZGFzaGJvYXJkVGFicyQ7XG4gIH1cblxuICBnZXROYW1lZERhc2hib2FyZE9yQ3JlYXRlKG5hbWU6IHN0cmluZywgZGVmYXVsdFdpZGdldHM6IFdpZGdldFtdLCBjb250ZXh0PzogQ29udGV4dERhdGEpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubWFwV2lkZ2V0cyhkZWZhdWx0V2lkZ2V0cyk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGFzaGJvYXJkJChuYW1lLCBbQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWRdKS5waXBlKFxuICAgICAgdGhyb3dJZkVtcHR5KCksXG4gICAgICBjYXRjaEVycm9yKCgpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgdGhpcy5jcmVhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICB3aWRnZXRDbGFzc2VzOiB7ICdkYXNoYm9hcmQtdGhlbWUtbGlnaHQnOiB0cnVlLCAncGFuZWwtdGl0bGUtcmVndWxhcic6IHRydWUgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBuYW1lXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZU5hdmlnYXRvckl0ZW0obW86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5uYXZpZ2F0b3Iuc3RhdGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGlmIChub2RlLnBhdGggPT09IGByZXBvcnRzLyR7bW8uaWR9YCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRvci5yZW1vdmUobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG1vLmM4eV9Jc05hdmlnYXRvck5vZGUpIHtcbiAgICAgIGNvbnN0IG5vZGVUb0FkZCA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgICAgICAgbGFiZWw6IG1vLm5hbWUsXG4gICAgICAgIHBhdGg6IGByZXBvcnRzLyR7bW8uaWR9YCxcbiAgICAgICAgaWNvbjogbW8uaWNvbixcbiAgICAgICAgcHJpb3JpdHk6IG1vLnByaW9yaXR5XG4gICAgICB9KTtcbiAgICAgIHRoaXMubmF2aWdhdG9yLmFkZChub2RlVG9BZGQpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlVG9EYXNoYm9hcmQoZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgaWYgKC9kYXNoYm9hcmQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoL15cXC8oZGV2aWNlfGdyb3VwKVxcL1swLTldKyQvLnRlc3QodGhpcy5yb3V0ZXIudXJsKSkge1xuICAgICAgLy8gaW4gY2FzZSB0aGUgYWRkIGRhc2hib2FyZCBidXR0b24gaXMgdGhlIG9ubHkgdGFiIG9uIHRoYXQgcm91dGVcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLicsIHRoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEgsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uJywgdGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSCwgZGFzaGJvYXJkTU8uaWRdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IGdldEFjdGl2YXRlZFJvdXRlKHRoaXMucm91dGVyKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB1c2VyIGlzIGFibGUgdG8gZWRpdCBkYXNoYm9hcmQgYWNjb3JkaW5nIHRvIGhpcyByb2xlcyBhbmQgZGFzaGJvYXJkIG93bmVyc2hpcC5cbiAgICpcbiAgICogQHBhcmFtIG1vIC0gRGFzaGJvYXJkIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHVzZXIgaXMgYWJsZSB0byBlZGl0IGRhc2hib2FyZCwgZmFsc2UgaWYgaGUgY2Fubm90LlxuICAgKi9cbiAgYXN5bmMgY2FuRWRpdERhc2hib2FyZChtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5wZXJtaXNzaW9ucy5jYW5FZGl0KHRoaXMuSU5WRU5UT1JZX1JPTEVTLCBtbyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHVzZXIgaGFzIHBlcm1pc3Npb25zIHRvIGNvcHkgZGFzaGJvYXJkIGFjY29yZGluZyB0byBoaXMgcm9sZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdXNlciBoYXMgcGVybWlzc2lvbnMgdG8gY29weSBkYXNoYm9hcmQsIGZhbHNlIGlmIGhlIGNhbm5vdC5cbiAgICovXG4gIGhhc1Blcm1pc3Npb25zVG9Db3B5RGFzaGJvYXJkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zLmhhc0FueVJvbGUoW1xuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQURNSU4sXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9DUkVBVEUsXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9DUkVBVEVcbiAgICBdKTtcbiAgfVxuXG4gIGlzTmFtZWQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzUmVwb3J0KGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0RldmljZVR5cGUoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pikge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1Byb3AgPSBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLlR5cGV9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKTtcbiAgICAgIGlmICghbWF0Y2hpbmdQcm9wKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoZXJlIG1pZ2h0IGJlIG1hdGNoaW5nIGtleSwgYnV0IGl0cyB2YWx1ZSBjYW4gYmUge30gb3IgbnVsbFxuICAgICAgICByZXR1cm4gISFkYXNoYm9hcmRbcHJvcF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpc0RldmljZURhc2hib2FyZChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZX0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGlzR3JvdXBEYXNoYm9hcmQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cH0ke3RoaXMuSU5ERVhfU1BMSVR9YFxuICAgICAgKS50ZXN0KHByb3ApXG4gICAgKTtcbiAgfVxuXG4gIGdldEZpbHRlcmVkRGFzaGJvYXJkU3R5bGVzKHN0eWxlTGlzdDogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gc3R5bGVMaXN0LmZpbHRlcihjID0+XG4gICAgICBTVFlMSU5HX0NMQVNTX1BSRUZJWEVTLnNvbWUoY2xhc3NQcmVmaXggPT4gYy5zdGFydHNXaXRoKGNsYXNzUHJlZml4KSlcbiAgICApO1xuICB9XG5cbiAgZ2V0U3R5bGluZyhzdHlsZUxpc3QsIHN0eWxlTmFtZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3Qgc3R5bGluZyA9IHN0eWxlTGlzdC5maW5kKFxuICAgICAgc3R5bGUgPT4gc3R5bGUgJiYgbmV3IFJlZ0V4cChgLSR7c3R5bGVOYW1lfSRgLCAnaScpLnRlc3Qoc3R5bGUuY2xhc3MpXG4gICAgKTtcbiAgICByZXR1cm4gc3R5bGluZyA/IHN0eWxpbmcuY2xhc3MgOiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBtYXBXaWRnZXRzKHdpZGdldHM6IFdpZGdldFtdKSB7XG4gICAgcmV0dXJuIGtleUJ5KFxuICAgICAgd2lkZ2V0cy5tYXAod2lkZ2V0ID0+IHtcbiAgICAgICAgd2lkZ2V0LmlkID0gU3RyaW5nKE1hdGgucmFuZG9tKCkpLnN1YnN0cigyKTtcbiAgICAgICAgcmV0dXJuIHdpZGdldDtcbiAgICAgIH0pLFxuICAgICAgJ2lkJ1xuICAgICk7XG4gIH1cblxuICBnZXREYXNoYm9hcmQkKGRhc2hib2FyZElkT3JOYW1lLCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdLCBtbz86IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLmNhY2hlLmdldChkYXNoYm9hcmRJZE9yTmFtZSk7XG5cbiAgICBjb25zdCBkYXNoYm9hcmRzID0gbW9cbiAgICAgID8gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyhtbywgZGFzaGJvYXJkVHlwZSlcbiAgICAgIDogdGhpcy5nZXROYW1lZERhc2hib2FyZChkYXNoYm9hcmRJZE9yTmFtZSk7XG5cbiAgICBjb25zdCBjYWNoZVJlZnJlc2ggPSB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzJChkYXNoYm9hcmRzKS5waXBlKFxuICAgICAgdGFwKGRhc2hib2FyZCA9PiB0aGlzLmNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZCkpLFxuICAgICAgZmlsdGVyKFxuICAgICAgICBkYXNoYm9hcmQgPT5cbiAgICAgICAgICBkYXNoYm9hcmQuaWQgPT09IGRhc2hib2FyZElkT3JOYW1lIHx8XG4gICAgICAgICAgaGFzKFxuICAgICAgICAgICAgZGFzaGJvYXJkLFxuICAgICAgICAgICAgYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke2Rhc2hib2FyZElkT3JOYW1lfWBcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gY2FjaGUgPyBvZihjYWNoZSkgOiBjYWNoZVJlZnJlc2g7XG4gIH1cblxuICBhc3luYyBwYXN0ZURhc2hib2FyZChuZXdDb250ZXh0OiBEYXNoYm9hcmRDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY29weUNsaXBib2FyZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGFzaGJvYXJkVG9QYXN0ZSA9IHRoaXMuY3JlYXRlQ29udGV4dERhc2hib2FyZENvcHkoXG4gICAgICAgICAgdGhpcy5jb3B5Q2xpcGJvYXJkLmRhc2hib2FyZCxcbiAgICAgICAgICBuZXdDb250ZXh0LmNvbnRleHREYXRhLFxuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5jb250ZXh0LmNvbnRleHREYXRhXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGRhc2hib2FyZCA9IGF3YWl0IHRoaXMuY3JlYXRlKHRoaXMuY2xlYW4oZGFzaGJvYXJkVG9QYXN0ZSksIG5ld0NvbnRleHQpO1xuXG4gICAgICAgIC8vIGxpbmtpbmcgY2hpbGRBZGRpdGlvbnMgZm9yIGUuZy4gdG8gZ3JhbnQgYWNjZXNzIHRvIHRoZSBpbWFnZXMgdXBsb2FkZWQgYnkgdGhlIGltYWdlIHdpZGdldCBmb3IgdXNlcnMgd2l0aCBvbmx5IGludmVudG9yeSByb2xlcy5cbiAgICAgICAgY29uc3QgeyBkYXRhOiBjaGlsZEFkZGl0aW9ucyB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNMaXN0KFxuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5kYXNoYm9hcmRJZCxcbiAgICAgICAgICB7IHBhZ2VTaXplOiAyMDAwIH1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGNoaWxkQWRkaXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zQnVsa0FkZChjaGlsZEFkZGl0aW9ucywgZGFzaGJvYXJkLmlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29weUNsaXBib2FyZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvRGFzaGJvYXJkKGRhc2hib2FyZCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5hbGVydC53YXJuaW5nKGdldHRleHQoJ0luc3VmZmljaWVudCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBhY3Rpb24uJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGZyYWdtZW50IHRoYXQgYXNzb2NpYXRlcyBkYXNoYm9hcmRzIHdpdGggZGV2aWNlL2Fzc2V0LiBJdCBjb25zaXN0cyBvZiB0aHJlZSBlbGVtZW50czpcbiAgICogLSBGUkFHTUVOVF9OQU1FIC0gc3RhdGljIHN0cmluZ1xuICAgKiAtIGRhc2hib2FyZCB0eXBlIChlLmcuICdncm91cCcsICdkZXZpY2UnKVxuICAgKiAtIGZyYWdtZW50IHZhbHVlICggaWQgb2YgZGV2aWNlL2Fzc2V0IGlmIGl0IGlzIG5vdCB0eXBlZCBkYXNoYm9hcmQ7IGRldmljZVR5cGVWYWx1ZSBwcm9wZXJ0eSBvZiBkYXNoYm9hcmQgaWYgaXQgaXMgdHlwZSBkYXNoYm9hcmQpXG4gICAqIEV4YW1wbGUgZnJhZ21lbnQgZm9yIGRldmljZSBkYXNoYm9hcmQ6ICdjOHlfRGFzaGJvYXJkIWRldmljZSE3NzMyMDAnXG4gICAqIEV4YW1wbGUgZnJhZ21lbnQgZm9yIGdyb3VwIGRhc2hib2FyZDogJ2M4eV9EYXNoYm9hcmQhZ3JvdXAhODQxMjkyMDgnXG4gICAqIEV4YW1wbGUgZnJhZ21lbnQgZm9yIHR5cGVkIGRldmljZSBkYXNoYm9hcmQ6ICdjOHlfRGFzaGJvYXJkIXR5cGUhYzh5X2x3bTJtX2Nvbm5lY3Rvcl9kZXZpY2UnXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0RGFzaGJvYXJkVHlwZSBUeXBlIG9mIGRhc2hib2FyZFxuICAgKiBAcGFyYW0gdmFsdWUgRnJhZ21lbnQgdmFsdWVcbiAgICogQHJldHVybnMgRnJhZ21lbnQgZm9yIGRhc2hib2FyZFxuICAgKi9cbiAgY3JlYXRlRnJhZ21lbnRLZXkoY29udGV4dERhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW3RoaXMuRlJBR01FTlRfTkFNRSwgY29udGV4dERhc2hib2FyZFR5cGUsIHZhbHVlXS5qb2luKHRoaXMuSU5ERVhfU1BMSVQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBkYXNoYm9hcmQgY2FuIGJlIHNldCB0byB0eXBlIGRhc2hib2FyZC5cbiAgICogRmlyc3QsIGl0IGNoZWNrcyBpZiBkZXZpY2VUeXBlVmFsdWUgZXhpc3RzIGFuZCBpZiB1c2VyIGhhcyBwZXJtaXNzaW9uIHRvIHNldCBkYXNoYm9hcmQgdHlwZS5cbiAgICogVGhlbiwgY2FzZSBmcm9tIHNlbnNvciBhcHAgaXMgY2hlY2tlZC0gZGFzaGJvYXJkIGNyZWF0ZWQgd2l0aCBzZW5zb3IgYXBwIGhhcyBkZXZpY2VUeXBlIHNldCB0byB0cnVlIGJ1dFxuICAgKiB0eXBlIGZyYWdtZW50IGlzIG1pc3NpbmctIHdlIGRvIG5vdCBzdXBwb3J0IHRoaXMgY29tYmluYXRpb24uXG4gICAqIEBwYXJhbSBtbyBEYXNoYm9hcmQgbWFuYWdlZCBvYmplY3RcbiAgICogQHBhcmFtIGRldmljZVR5cGVWYWx1ZSBWYWx1ZSBvZiBkZXZpY2UgdHlwZVxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGRhc2hib2FyZCBjYW4gYmUgc2V0IHRvIHR5cGUgZGFzaGJvYXJkLCBmYWxzZSBpZiBpdCBpcyBmb3JiaWRkZW4uXG4gICAqL1xuICBzaG91bGRBbGxvd1RvU2V0RGFzaGJvYXJkVHlwZShcbiAgICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gICAgZGV2aWNlVHlwZVZhbHVlOiBzdHJpbmdcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFkZXZpY2VUeXBlVmFsdWUgfHwgIXRoaXMucGVybWlzc2lvbnMuaGFzQW55Um9sZSh0aGlzLklOVkVOVE9SWV9ST0xFUykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZUZyYWdtZW50ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlLCBkZXZpY2VUeXBlVmFsdWUpO1xuICAgIGlmIChtby5jOHlfRGFzaGJvYXJkICYmIG1vLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZSAmJiAhbW9bdHlwZUZyYWdtZW50XSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNyZWF0ZVJlcG9ydChyZXBvcnRDZmc6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KSB7XG4gICAgY29uc3QgcmVwb3J0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiA9IHt9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVwb3J0LCByZXBvcnRDZmcpO1xuICAgIE9iamVjdC5hc3NpZ24ocmVwb3J0LCB7IGM4eV9SZXBvcnQ6IHt9IH0pO1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5jcmVhdGUocmVwb3J0KTtcbiAgfVxuXG4gIGFkZFJlcG9ydE5hdmlnYXRvck5vZGUocmVwb3J0OiBJTWFuYWdlZE9iamVjdCk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGUgPSBuZXcgTmF2aWdhdG9yTm9kZSh7XG4gICAgICBsYWJlbDogcmVwb3J0Lm5hbWUsXG4gICAgICBwYXRoOiBgcmVwb3J0cy8ke3JlcG9ydC5pZH1gLFxuICAgICAgaWNvbjogcmVwb3J0Lmljb24sXG4gICAgICBwcmlvcml0eTogcmVwb3J0LnByaW9yaXR5XG4gICAgfSk7XG4gICAgdGhpcy5uYXZpZ2F0b3IuYWRkKG5vZGUpO1xuICB9XG5cbiAgZ2V0Q29udGV4dEZvckdTKG1vOiBJTWFuYWdlZE9iamVjdCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLmdyb3VwU2VydmljZS5pc0RldmljZShtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuREVWSUNFO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNBc3NldChtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuQVNTRVQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwU2VydmljZS5pc0dyb3VwKG1vKSkge1xuICAgICAgcmV0dXJuIFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09OVEVYVC5HUk9VUDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0dXBsZSBkZXNjcmliaW5nIHRoZSBkYXNoYm9hcmQgdHlwZSBhbmQgaXRzIGZyYWdtZW50cy4gRm9yIGFzc2V0cyBsaWtlIGRldmljZXMgYW5kIGdyb3VwcywgaXQncyBwb3NzaWJsZVxuICAgKiB0byBoYXZlIHR3byBmcmFnbWVudHM6IG9uZSBpbmRpY2F0aW5nIHRoaXMgcGFydGljdWxhciBkZXZpY2UvYXNzZXQgd2l0aCBpdHMgSUQsIGFuZCB0aGUgc2Vjb25kIGluZGljYXRpbmdcbiAgICogdGhlIGRldmljZS9hc3NldCB0eXBlIChpZiB0aGUgZGFzaGJvYXJkIGlzIG1lYW50IHRvIGJlIGFwcGxpZWQgdG8gYWxsIGFzc2V0cyBvZiB0aGlzIHR5cGUpLlxuICAgKlxuICAgKiBAcGFyYW0gZGFzaGJvYXJkTU8gLSBEYXNoYm9hcmQgbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gQ29udGV4dCBkYXRhIG9mIGFzc2V0LlxuICAgKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGRhc2hib2FyZC5cbiAgICogQHBhcmFtIGlzRWRpdCAtIFRydWUgaWYgZXhpc3RpbmcgZGFzaGJvYXJkIGlzIHVwZGF0ZWQsIGZhbHNlIHdoZW4gaXQncyBjcmVhdGlvbiBvZiBuZXcgZGFzaGJvYXJkLlxuICAgKiBAcmV0dXJucyBUdXBsZSBvZiBkYXNoYm9hcmQgdHlwZSBhbmQgb2JqZWN0IGNvbnRhaW5pbmcgZGFzaGJvYXJkIGZyYWdtZW50cy5cbiAgICovXG4gIHByaXZhdGUgZ2V0RGFzaGJvYXJkRnJhZ21lbnRzKFxuICAgIGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgICBjb250ZXh0OiBDb250ZXh0RGF0YSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaXNFZGl0OiBib29sZWFuXG4gICk6IFtDb250ZXh0RGFzaGJvYXJkVHlwZSwgUmVjb3JkPHN0cmluZywgb2JqZWN0Pl0ge1xuICAgIGxldCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZTtcbiAgICBjb25zdCBpZCA9IChjb250ZXh0Py5jb250ZXh0RGF0YT8uaWQgYXMgc3RyaW5nKSB8fCAnJztcbiAgICBjb25zdCBmcmFnbWVudHM6IFJlY29yZDxzdHJpbmcsIG9iamVjdD4gPSB7fTtcblxuICAgIGlmIChjb250ZXh0Py5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5EZXZpY2UgfHwgY29udGV4dD8uY29udGV4dCA9PT0gVmlld0NvbnRleHQuR3JvdXApIHtcbiAgICAgIC8vIGdldCBiYXNlIHR5cGUgZm9yIGRldmljZSBvciBncm91cFxuICAgICAgY29uc3QgZGVmYXVsdFR5cGUgPVxuICAgICAgICBjb250ZXh0LmNvbnRleHQgPT09IFZpZXdDb250ZXh0LkRldmljZVxuICAgICAgICAgID8gQ29udGV4dERhc2hib2FyZFR5cGUuRGV2aWNlXG4gICAgICAgICAgOiBDb250ZXh0RGFzaGJvYXJkVHlwZS5Hcm91cDtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGVcbiAgICAgICAgPyBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlXG4gICAgICAgIDogZGVmYXVsdFR5cGU7XG5cbiAgICAgIC8vIGNsZWFyIGZyYWdtZW50cyBmcm9tIG90aGVyIGFzc2V0IGlmIGN1cnJlbnQgYXNzZXQgaXMgbm90IG9yaWdpbiBvZiB0aGlzIGRhc2hib2FyZFxuICAgICAgdGhpcy5jbGVhclJlZHVuZGFudEZyYWdtZW50KGRhc2hib2FyZE1PLCBkZWZhdWx0VHlwZSwgZnJhZ21lbnRzKTtcblxuICAgICAgLy8gYWRkIGJhc2UgZnJhZ21lbnQgZm9yIHBhcnRpY3VsYXIgYXNzZXRcbiAgICAgIGNvbnN0IGRldmljZU9yR3JvdXBGcmFnbWVudEtleSA9IHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkoZGVmYXVsdFR5cGUsIGlkKTtcbiAgICAgIGZyYWdtZW50c1tkZXZpY2VPckdyb3VwRnJhZ21lbnRLZXldID0ge307XG5cbiAgICAgIC8vIGFkZCBvciBjbGVhciB0eXBlIGZyYWdtZW50XG4gICAgICBpZiAoZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlIHx8IGlzRWRpdCkge1xuICAgICAgICBjb25zdCB0eXBlRnJhZ21lbnRLZXkgPSB0aGlzLmNyZWF0ZUZyYWdtZW50S2V5KFxuICAgICAgICAgIENvbnRleHREYXNoYm9hcmRUeXBlLlR5cGUsXG4gICAgICAgICAgZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgZnJhZ21lbnRzW3R5cGVGcmFnbWVudEtleV0gPSBkYXNoYm9hcmRNTy5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGUgPyB7fSA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGRhc2hib2FyZFR5cGUgPSBDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZDtcbiAgICAgIGNvbnN0IG5hbWVkRnJhZ21lbnRLZXkgPSB0aGlzLmNyZWF0ZUZyYWdtZW50S2V5KENvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkLCBuYW1lKTtcbiAgICAgIGZyYWdtZW50c1tuYW1lZEZyYWdtZW50S2V5XSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBbZGFzaGJvYXJkVHlwZSwgZnJhZ21lbnRzXTtcbiAgfVxuICAvKipcbiAgICogQ2xlYXJzIGZyYWdtZW50cyB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBvdGhlciBtYW5hZ2VkIG9iamVjdC5cbiAgICogRS5nLiB0eXBlZCBkYXNoYm9hcmQgaXMgY3JlYXRlZCBmb3IgZGV2aWNlIEEgb2YgdHlwZSBjOHlfTVFUVERldmljZSBhbmQgaWQgMSwgc28gaXQgZ2V0cyBmcmFnbWVudHMgb2JqZWN0XG4gICAqIGBgYHRzXG4gICAqIHtcbiAgICogYzh5X0Rhc2hib2FyZCFkZXZpY2UhMToge30sXG4gICAqIGM4eV9EYXNoYm9hcmQhdHlwZSFjOHlfTVFUVERldmljZToge31cbiAgICogfVxuICAgKmBgYFxuICAgKiB0aGVuLCBvbiBkZXZpY2UgQiBvZiB0eXBlIGM4eV9NUVRURGV2aWNlIGFuZCBpZCAyLCB3aGljaCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhpcyBkYXNoYm9hcmQsIGRldmljZVR5cGUgaXMgc2V0IHRvXG4gICAqIGZhbHNlLCBzbyBkYXNoYm9hcmQgaXMgbm90IHR5cGVkIGRhc2hib2FyZCBhbnltb3JlIGFuZCBub3cgYmVsb25ncyB0byBkZXZpY2UgQiwgdGhlcmVmb3JlIGZyYWdtZW50cyBzaG91bGQgbG9vayBsaWtlXG4gICAqIGBgYHRzXG4gICAqIHtcbiAgICogYzh5X0Rhc2hib2FyZCFkZXZpY2UhMTogbnVsbCwgLy8gdGhpcyB2YWx1ZSBpcyBjbGVhcmVkIGJlY2F1c2UgZGFzaGJvYXJkIGlzIGRvZXNuJ3QgYmVsb25nIHRvIGRldmljZSBBIGFueW1vcmVcbiAgICogYzh5X0Rhc2hib2FyZCFkZXZpY2UhMjoge30sIC8vIGFzc2lnbiBkYXNoYm9hcmQgdG8gZGV2aWNlIEJcbiAgICogYzh5X0Rhc2hib2FyZCF0eXBlIWM4eV9NUVRURGV2aWNlOiBudWxsIC8vIHRoaXMgdmFsdWUgaXMgY2xlYXJlZCBpbiBnZXREYXNoYm9hcmRGcmFnbWVudHMgbWV0aG9kIGFzIGl0J3Mgbm90IHR5cGVkIGRhc2hib2FyZCBhbnltb3JlXG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBkYXNoYm9hcmRNTyAtIERhc2hib2FyZCBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHBhcmFtIHR5cGUgLSBDb250ZXh0IGRhc2hib2FyZCB0eXBlLlxuICAgKiBAcGFyYW0gZnJhZ21lbnRzIC0gRnJhZ21lbnRzIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgY2xlYXJSZWR1bmRhbnRGcmFnbWVudChcbiAgICBkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gICAgdHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUsXG4gICAgZnJhZ21lbnRzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+XG4gICk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKGRhc2hib2FyZE1PKVxuICAgICAgLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgodGhpcy5jcmVhdGVGcmFnbWVudEtleSh0eXBlLCAnJykpKVxuICAgICAgLmZvckVhY2goa2V5ID0+IChmcmFnbWVudHNba2V5XSA9IG51bGwpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1pZ3JhdGUgZGFzaGJvYXJkcyBmcm9tIHByZXZpb3VzIDEyIGNvbHVtbnMgbGF5b3V0IHRvIDI0IGNvbHVtbnMuXG4gICAqL1xuICBwcml2YXRlIGFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1uczxUIGV4dGVuZHMgeyBjOHlfRGFzaGJvYXJkPzogQ29udGV4dERhc2hib2FyZCB9PihcbiAgICBkYXNoYm9hcmRzOiBUW11cbiAgKTogVFtdO1xuICBwcml2YXRlIGFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1uczxUIGV4dGVuZHMgeyBjOHlfRGFzaGJvYXJkPzogQ29udGV4dERhc2hib2FyZCB9PihcbiAgICBkYXNoYm9hcmRzOiBUXG4gICk6IFQ7XG4gIHByaXZhdGUgYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zPFQgZXh0ZW5kcyB7IGM4eV9EYXNoYm9hcmQ/OiBDb250ZXh0RGFzaGJvYXJkIH0+KFxuICAgIGRhc2hib2FyZHM6IFQgfCBUW11cbiAgKTogVCB8IFRbXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGFzaGJvYXJkcykpIHtcbiAgICAgIHJldHVybiBkYXNoYm9hcmRzLm1hcChkYXNoYm9hcmQgPT4gdGhpcy5hZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnMoZGFzaGJvYXJkKSk7XG4gICAgfVxuICAgIC8vIGlmIGBjb2x1bW5zYCBhdHRyaWJ1dGUgZXhpc3RzLCBkYXNoYm9hcmQgd2FzIGFscmVhZHkgYWRqdXN0ZWQuXG4gICAgaWYgKGRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jb2x1bW5zKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcztcbiAgICB9XG5cbiAgICBkYXNoYm9hcmRzLmM4eV9EYXNoYm9hcmQuY29sdW1ucyA9IDI0O1xuICAgIGlmICghZGFzaGJvYXJkcy5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcztcbiAgICB9XG5cbiAgICAvLyBOZXdseSBjcmVhdGVkIE5hbWVkQ29udGV4dERhc2hib2FyZHMgYXJlIHN0aWxsIGNyZWF0ZWQgd2l0aCAxMiBjb2x1bW5zIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICAvLyBEZWZhdWx0IHdpZGdldHMgbWlnaHQgYmUgYWxyZWFkeSBjb25maWd1cmVkIGZvciAyNCBjb2x1bW5zLlxuICAgIC8vIElmIGEgd2lkZ2V0IGlzIGFscmVhZHkgY29uZmlndXJlZCBmb3IgbW9yZSB0aGFuIDEyIGNvbHVtbnMsIHdlIHNob3VsZCBub3QgYWRqdXN0IGl0LlxuICAgIGNvbnN0IGFscmVhZHlIYXNXaWRnZXRzQ29uZmlndXJlZEZvck1vcmVUaGFuMTJDb2x1bW5zID0gT2JqZWN0LnZhbHVlcyhcbiAgICAgIGRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jaGlsZHJlblxuICAgICkuc29tZSh3aWRnZXQgPT4gd2lkZ2V0Ll94ICsgd2lkZ2V0Ll93aWR0aCA+IDEyKTtcbiAgICBpZiAoYWxyZWFkeUhhc1dpZGdldHNDb25maWd1cmVkRm9yTW9yZVRoYW4xMkNvbHVtbnMpIHtcbiAgICAgIHJldHVybiBkYXNoYm9hcmRzO1xuICAgIH1cblxuICAgIC8vIHdlIG5lZWQgdG8gbXVsdGlwbHkgYm90aCBfd2lkdGggYW5kIF94IGF0dHJpYnV0ZXMgd2l0aCAyIHRvIG1pZ3JhdGUgZnJvbSAxMiB0byAyNCBjb2x1bW5zLlxuICAgIE9iamVjdC52YWx1ZXMoZGFzaGJvYXJkcy5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKS5mb3JFYWNoKHdpZGdldCA9PiB7XG4gICAgICBpZiAod2lkZ2V0Ll93aWR0aCkge1xuICAgICAgICB3aWRnZXQuX3dpZHRoID0gd2lkZ2V0Ll93aWR0aCAqIDI7XG4gICAgICB9XG4gICAgICBpZiAod2lkZ2V0Ll94KSB7XG4gICAgICAgIHdpZGdldC5feCA9IHdpZGdldC5feCAqIDI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhc2hib2FyZHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlcmlhbGl6ZVdpZGdldENvbmZpZ3MoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gY2xvbmVEZWVwKGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuKTtcbiAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZ3MgPSBPYmplY3QudmFsdWVzKGNoaWxkcmVuKTtcbiAgICBjb25zdCBkZXRhaWxzID0gY29uZmlncy5tYXAoKHsgY29tcG9uZW50SWQsIGNvbmZpZyB9KSA9PiAoeyBjb21wb25lbnRJZCwgY29uZmlnIH0pKTtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5keW5hbWljQ29tcG9uZW50LnNlcmlhbGl6ZUNvbmZpZ3MoZGV0YWlscyk7XG4gICAgcmVzdWx0cy5mb3JFYWNoKChyZXN1bHQsIGluZGV4KSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhyZXN1bHQpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBzZXQoZGV0YWlsc1tpbmRleF0uY29uZmlnLCBrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgIGRhc2g6IENvbnRleHREYXNoYm9hcmQsXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKTogQ29udGV4dERhc2hib2FyZCB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSByZWR1Y2UoXG4gICAgICBkYXNoLmNoaWxkcmVuLFxuICAgICAgKF9jaGlsZHJlbiwgY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgeyBpZCB9ID0gY2hpbGQ7XG4gICAgICAgIGNvbnN0IGNmZyA9IGNoaWxkLmNvbmZpZztcbiAgICAgICAgY29uc3QgcHJvcGVydGllc1RvQ29weSA9IHtcbiAgICAgICAgICBkZXZpY2U6IGRldmljZSA9PiB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZGV2aWNlLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFQb2ludHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50c0dhdWdlOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNMYWJlbHM6IGRhdGFQb2ludHMgPT5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoZGF0YVBvaW50cywgbmV3Q29udGV4dCwgb2xkQ29udGV4dClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoY2ZnKSB7XG4gICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIGlmIChjZmcub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5jb3B5UHJvcGVydGllcyhjZmcub3B0aW9ucywgcHJvcGVydGllc1RvQ29weSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkcmVuW2lkXSA9IGNsb25lRGVlcChjaGlsZCk7XG4gICAgICAgIHJldHVybiBfY2hpbGRyZW47XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuXG4gICAgZGFzaC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHJldHVybiBkYXNoO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3B5UHJvcGVydGllcyhvYmosIHByb3BlcnRpZXNUb0NvcHkpIHtcbiAgICBmb3JFYWNoKHByb3BlcnRpZXNUb0NvcHksIChjb3B5Rm4sIHByb3BlcnR5KSA9PiB7XG4gICAgICBpZiAob2JqW3Byb3BlcnR5XSkge1xuICAgICAgICBvYmpbcHJvcGVydHldID0gY29weUZuKG9ialtwcm9wZXJ0eV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhcbiAgICBkYXRhUG9pbnRzLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICkge1xuICAgIGRhdGFQb2ludHMuZm9yRWFjaChkcCA9PiB7XG4gICAgICBkcC5fX3RhcmdldCA9IHRoaXMucmVwbGFjZUNvbnRleHRJbk9iaihkcC5fX3RhcmdldCwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFQb2ludHM7XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VDb250ZXh0SW5PYmooXG4gICAgb2JqOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBpZiAob2JqICYmIG9iai5pZCA9PT0gb2xkQ29udGV4dC5pZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmosIHBpY2sobmV3Q29udGV4dCwgWydpZCcsICduYW1lJ10pKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFicyQobW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LCBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdKSB7XG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMkKGRhc2hib2FyZHMpLnBpcGUoXG4gICAgICBtZXJnZU1hcChkYXNoYm9hcmQgPT4gdGhpcy52ZXJpZnlEYXNoYm9hcmRBdmFpbGFiaWxpdHkkKGRhc2hib2FyZCkpLFxuICAgICAgbWVyZ2VNYXAoKFtkYXNoYm9hcmRdKSA9PiB0aGlzLnJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoZGFzaGJvYXJkKSksXG4gICAgICB0YXAoZGFzaGJvYXJkID0+IHRoaXMuY2FjaGVEYXNoYm9hcmQoZGFzaGJvYXJkKSksXG4gICAgICBtYXAoZGFzaGJvYXJkID0+IHRoaXMuY3JlYXRlRGFzaGJvYXJkVGFiKGRhc2hib2FyZCkpLFxuICAgICAgdG9BcnJheSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgZ2xvYmFsUm9sZXNJZHMgPSBkYXNoYm9hcmQ/LmM4eV9EYXNoYm9hcmQ/Lmdsb2JhbFJvbGVzSWRzO1xuICAgIGNvbnN0IGNhbkVkaXQgPSBmcm9tKFxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5jYW5FZGl0KHRoaXMuSU5WRU5UT1JZX1JPTEVTLCBkYXNoYm9hcmQsIHsgc2tpcFJlcXVlc3RDaGVjazogdHJ1ZSB9KVxuICAgICk7XG4gICAgY29uc3QgaGFzQW55R2xvYmFsUm9sZSA9XG4gICAgICAhZ2xvYmFsUm9sZXNJZHMgfHwgZ2xvYmFsUm9sZXNJZHMgPT09IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURURcbiAgICAgICAgPyBvZih0cnVlKVxuICAgICAgICA6IG9mKHRoaXMucGVybWlzc2lvbnMuaGFzQW55R2xvYmFsUm9sZShnbG9iYWxSb2xlc0lkcykpO1xuXG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW29mKGRhc2hib2FyZCksIGNhbkVkaXQsIGhhc0FueUdsb2JhbFJvbGVdKS5waXBlKFxuICAgICAgZmlsdGVyKChbLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkgPT4gY2FuRWRpdCB8fCBoYXNBbnlHbG9iYWxSb2xlKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHREYXNoYm9hcmRzJChyZXF1ZXN0OiBQcm9taXNlPElSZXN1bHRMaXN0PElNYW5hZ2VkT2JqZWN0Pj4pIHtcbiAgICByZXR1cm4gZnJvbShyZXF1ZXN0KS5waXBlKFxuICAgICAgbWVyZ2VNYXAocmVzcG9uc2UgPT5cbiAgICAgICAgdGhpcy5hZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnMocmVzcG9uc2UuZGF0YSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdFtdKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIGFscmVhZHkgY29ycnVwdGVkIGRhc2hib2FyZHMgZnJvbSBkYXNoYm9hcmRNbyBwcm9wZXJ0eS5cbiAgICogQWRkZWQgdG8gZml4IGRhc2hib2FyZHMgb24gdGhlIGNsb3VkIGluc3RhbmNlIChldS1sYXRlc3QpLlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIGlzIGdvaW5nIHRvIGJlIHJlbW92ZWQgYWZ0ZXIgMTAwNy43LjAuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlbW92ZURhc2hib2FyZE1vUHJvcGVydHkoXG4gICAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ29weSA9IGNsb25lRGVlcChkYXNoYm9hcmQpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gZ2V0KGRhc2hib2FyZENvcHksICdjOHlfRGFzaGJvYXJkLmNoaWxkcmVuJyk7XG4gICAgbGV0IHVwZGF0ZURhc2hib2FyZCA9IGZhbHNlO1xuXG4gICAgZm9yRWFjaChjaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgaWYgKGdldChjaGlsZCwgJ2NvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0JykpIHtcbiAgICAgICAgZGVsZXRlIGNoaWxkLmNvbXBvbmVudFRyYW5zZm9ybUNvbmZpZ1dpdGhDb250ZXh0O1xuICAgICAgICB1cGRhdGVEYXNoYm9hcmQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGdldChjaGlsZCwgJ2NvbmZpZy5kYXNoYm9hcmRNbycpKSB7XG4gICAgICAgIGRlbGV0ZSBjaGlsZC5jb25maWcuZGFzaGJvYXJkTW87XG4gICAgICAgIHVwZGF0ZURhc2hib2FyZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodXBkYXRlRGFzaGJvYXJkKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZShkYXNoYm9hcmRDb3B5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhc2hib2FyZENvcHk7XG4gIH1cblxuICBwcml2YXRlIGNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmQuaWQsIGRhc2hib2FyZCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZFRhYihkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgeyBjOHlfRGFzaGJvYXJkOiBfZGFzaGJvYXJkLCBpZCB9ID0gZGFzaGJvYXJkO1xuICAgIHJldHVybiB7XG4gICAgICBpY29uOiBfZGFzaGJvYXJkLmljb24sXG4gICAgICBwYXRoOiBgJHt0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRIfS8ke2lkfWAsXG4gICAgICBsYWJlbDogX2Rhc2hib2FyZC5uYW1lLFxuICAgICAgcHJpb3JpdHk6IF9kYXNoYm9hcmQucHJpb3JpdHksXG4gICAgICBoaWRlOiB0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCksXG4gICAgICBiYWRnZTpcbiAgICAgICAgX2Rhc2hib2FyZC5kZXZpY2VUeXBlICYmXG4gICAgICAgIHRoaXMuc2hvdWxkQWxsb3dUb1NldERhc2hib2FyZFR5cGUoZGFzaGJvYXJkLCBfZGFzaGJvYXJkLmRldmljZVR5cGVWYWx1ZSlcbiAgICAgICAgICA/IGdldHRleHQoJ0Rhc2hib2FyZCB0ZW1wbGF0ZScpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgdG9vbHRpcFRleHQ6IF9kYXNoYm9hcmQuZGVzY3JpcHRpb24gfHwgZ2V0dGV4dCgnRGFzaGJvYXJkIHRlbXBsYXRlJylcbiAgICB9IGFzIFRhYjtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW4oZGFzaGJvYXJkKSB7XG4gICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhc2hib2FyZCwgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICckJGhhc2hLZXknIHx8IGtleSA9PT0gJ2tsYXNzZXMnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TmFtZWREYXNoYm9hcmQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3Qoe1xuICAgICAgZnJhZ21lbnRUeXBlOiBgJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfSR7bmFtZX1gLFxuICAgICAgcGFnZVNpemU6IDFcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGV4dERhc2hib2FyZHMoXG4gICAgbW86IElNYW5hZ2VkT2JqZWN0LFxuICAgIGRhc2hib2FyZFR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlW11cbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+IHtcbiAgICBjb25zdCBxdWVyeSA9IGRhc2hib2FyZFR5cGVcbiAgICAgIC5tYXAodCA9PiBgKGhhcygnJHt0aGlzLmNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vLCB0KX0nKSlgKVxuICAgICAgLmpvaW4oJyBvciAnKTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICBxdWVyeTogYCRmaWx0ZXI9KCR7cXVlcnl9KWAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5ERUZBVUxUX1BBR0VTSVpFXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vOiBJTWFuYWdlZE9iamVjdCwgdHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKG1vLmM4eV9SZXBvcnQpIHtcbiAgICAgIHZhbHVlID0gYCR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfSR7bW8uaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0eXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlID8gbW8udHlwZSA6IG1vLmlkO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke3R5cGV9JHt0aGlzLklOREVYX1NQTElUfSR7dmFsdWV9YDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sIGNvbnRleHQ/KSB7XG4gICAgaWYgKFxuICAgICAgKCFjb250ZXh0ICYmIHRoaXMuaXNOYW1lZChkYXNoYm9hcmQpICYmICF0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCkpIHx8XG4gICAgICB0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
@@ -162,7 +162,7 @@ export class DashboardChildComponent {
162
162
  setTimeout(() => this.setDynamicDimension());
163
163
  }
164
164
  if (this.useIntersection && 'IntersectionObserver' in window) {
165
- const intersectionObserver = new IntersectionObserver(event => (this.intersected = this.childInView(event[0], intersectionObserver)));
165
+ const intersectionObserver = new IntersectionObserver(events => (this.intersected = this.childInView(events, intersectionObserver)));
166
166
  intersectionObserver.observe(this.element.nativeElement);
167
167
  }
168
168
  else {
@@ -235,9 +235,10 @@ export class DashboardChildComponent {
235
235
  getOrder() {
236
236
  return `${Math.round((this.y + (this.x + 1) / 100) * 100)}`;
237
237
  }
238
- childInView(event, observer) {
239
- if (event.isIntersecting) {
240
- observer.unobserve(event.target);
238
+ childInView(events, observer) {
239
+ const intersectingEvent = events.find(event => event.isIntersecting);
240
+ if (intersectingEvent) {
241
+ observer.unobserve(intersectingEvent.target);
241
242
  return true;
242
243
  }
243
244
  return false;
@@ -281,4 +282,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
281
282
  type: HostBinding,
282
283
  args: ['attr.style']
283
284
  }] } });
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZGFzaGJvYXJkL2Rhc2hib2FyZC1jaGlsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUE0QixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBRTlEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQVFILE1BQU0sT0FBTyx1QkFBdUI7SUFFbEMsSUFBb0QsZUFBZSxDQUNqRSxPQUF3QztRQUV4QyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBOENEOzs7O09BSUc7SUFDSCxJQUNJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQXdCRDs7T0FFRztJQUNILElBQUksT0FBTyxDQUFDLEtBQUs7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Q0FBQztZQUN6QixRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OEdBalFVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLDhiQUVqQiw2QkFBNkIsa0RDL0RoRCw0eUZBeUZBOzsyRkQ1QmEsdUJBQXVCO2tCQVBuQyxTQUFTOytCQUNFLHFCQUFxQixRQUV6Qjt3QkFDSixLQUFLLEVBQUUsc0JBQXNCO3FCQUM5QjsySUFJbUQsZUFBZTtzQkFBbEUsZUFBZTt1QkFBQyw2QkFBNkI7Z0JBa0JyQyxDQUFDO3NCQUFULEtBQUs7Z0JBS0csQ0FBQztzQkFBVCxLQUFLO2dCQUtHLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csSUFBSTtzQkFBWixLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQVFGLFFBQVE7c0JBRFgsS0FBSztnQkFTRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtJLFdBQVc7c0JBQXBCLE1BQU07Z0JBS0csU0FBUztzQkFBbEIsTUFBTTtnQkFNUCxLQUFLO3NCQURKLEtBQUs7Z0JBK0NGLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0VuZCwgQ2RrRHJhZ1N0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQtY2hpbGQtYWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGlsZENoYW5nZSB9IGZyb20gJy4vZGFzaGJvYXJkLWNoaWxkLWNoYW5nZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDb21wb25lbnQgfSBmcm9tICcuL2Rhc2hib2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGREaW1lbnNpb24sIFdpZGdldCB9IGZyb20gJy4vZGFzaGJvYXJkLm1vZGVsJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8qKlxuICogQSBkYXNoYm9hcmQgY2hpbGQgYWxsb3dzIHRvIHBvc2l0aW9uIGVsZW1lbnRzXG4gKiBjb3JyZWN0bHkgb24gYSBncmlkLlxuICpcbiAqIEJ5IHNldHRpbmcgYGM4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uc2AgYW5kXG4gKiBgYzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZWAgb24gdGhlIGVsZW1lbnQgeW91IGNhbiBhZGRcbiAqIGN1c3RvbSBhY3Rpb25zIG9yIGEgY3VzdG9tIHRpdGxlIHRvIHRoZSBjdXJyZW50IGNoaWxkLlxuICpcbiAqIEJ5IGFkZGluZyB0aGUgY29ycmVjdCBicmFuZGVkIGNsYXNzZXMsIHlvdSBjYW4gZGVmaW5lXG4gKiB0aGUgbG9vayBhbmQgZmVlbCBvZiB0aGUgY2hpbGQuIEJ5IGRlZmF1bHQgaXQgaXMgZGlzcGxheWVkXG4gKiBhcyBhIGNhcmQuXG4gKlxuICogYGBgaHRtbFxuICogICA8Yzh5LWRhc2hib2FyZC1jaGlsZFxuICogICAgICNjcFdpZGdldDNcbiAqICAgICBbeF09XCIwXCJcbiAqICAgICBbeV09XCIzXCJcbiAqICAgICBbd2lkdGhdPVwiNFwiXG4gKiAgICAgW2hlaWdodF09XCI0XCJcbiAqICAgICBbY2xhc3NdPVwiJ2NhcmQtZGFzaGJvYXJkIHBhbmVsLWNvbnRlbnQtdHJhbnNwYXJlbnQnXCJcbiAqICAgPlxuICogICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlICpuZ0lmPVwic2hvd1RpdGxlXCI+XG4gKiAgICAgICA8c3Bhbj5UcmFuc3BhcmVudCE8L3NwYW4+XG4gKiAgICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlPlxuICogICAgIDxjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbj5cbiAqICAgICAgIDxhIGhyZWY9XCJcIiAoY2xpY2spPVwic2hvd1RpdGxlID0gIXNob3dUaXRsZTsgKGZhbHNlKVwiPlxuICogICAgICAgICA8aSBbYzh5SWNvbl09XCInaGVhZGluZydcIj48L2k+IEhpZGUvc2hvdyB0aXRsZVxuICogICAgICAgPC9hPlxuICogICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgeDoge3sgY3BXaWRnZXQzLnggfX08YnIgLz5cbiAqICAgICB5OiB7eyBjcFdpZGdldDMueSB9fTxiciAvPlxuICogICAgIHdpZHRoOiB7eyBjcFdpZGdldDMud2lkdGggfX08YnIgLz5cbiAqICAgICBoZWlnaHQ6IHt7IGNwV2lkZ2V0My5oZWlnaHQgfX08YnIgLz5cbiAqICAgPC9jOHktZGFzaGJvYXJkLWNoaWxkPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXNoYm9hcmQtY2hpbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZGFzaGJvYXJkLWdyaWQtY2hpbGQnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQ2hpbGRDb21wb25lbnQgaW1wbGVtZW50cyBEYXNoYm9hcmRDaGlsZERpbWVuc2lvbiB7XG4gIGFjdGlvbnM6IERhc2hib2FyZENoaWxkQWN0aW9uQ29tcG9uZW50W10gPSBbXTtcbiAgQENvbnRlbnRDaGlsZHJlbihEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudCkgc2V0IHRlbXBsYXRlQWN0aW9ucyhcbiAgICBhY3Rpb25zOiBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudFtdXG4gICkge1xuICAgIHRoaXMuYWRkQWN0aW9ucyhhY3Rpb25zLCB0cnVlKTtcbiAgfVxuICBkcmFnU291cmNlOiBDZGtEcmFnO1xuICBpc1Jlc2l6ZSA9IGZhbHNlO1xuICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIGtsYXNzZXMgPSB7fTtcblxuICBfcHhXaWR0aCA9ICcxMDAlJztcbiAgX3B4SGVpZ2h0ID0gJzEwMCUnO1xuXG4gIHJlYWRvbmx5IE1EX0JPT1RTVFJBUF9CUkVBS1BPSU5UX1JFQURPTkxZX0NMQVNTX1BST1BFUlRZID0gNzY4O1xuXG4gIC8qKlxuICAgKiBUaGUgeCBwb3NpdGlvbiBvZiB0aGUgY2hpbGQuXG4gICAqL1xuICBASW5wdXQoKSB4O1xuXG4gIC8qKlxuICAgKiBUaGUgeSBwb3NpdGlvbiBvZiB0aGUgY2hpbGQuXG4gICAqL1xuICBASW5wdXQoKSB5O1xuXG4gIC8qKlxuICAgKiBUaGUgd2lkdGggb2YgdGhlIGNvbXBvbmVudCBpbiBncmlkLWNvbHVtbnMuXG4gICAqL1xuICBASW5wdXQoKSB3aWR0aCA9IDE7XG5cbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIGNvbXBvbmVudCBpbiBncmlkLXJvd3MuXG4gICAqL1xuICBASW5wdXQoKSBoZWlnaHQgPSAxO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSBvYmplY3QgY2FuIGJlIHVzZWQgYXMgYSBkYXRhVHJhbnNmZXIgb2JqZWN0IGZvciBldmVudHMgb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgZGF0YTogV2lkZ2V0IHwgYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgbWFyZ2luIG9mIHRoZSBjaGlsZCBpbiBwaXhlbC5cbiAgICovXG4gIEBJbnB1dCgpIG1hcmdpbiA9IDEyO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hpbGQgY29udGVudCBpcyBpbml0aWFsaXplZCwgYXMgc29vbiBpdCBpcyBzY3JvbGxlZCBpbnRvIHZpZXdwb3J0XG4gICAqL1xuICBASW5wdXQoKSB1c2VJbnRlcnNlY3Rpb24gPSBmYWxzZTtcblxuICAvKipcbiAgICogSWYgYSBkYXNoYm9hcmQgaXMgZnJvemVuLCBhbGwgY2hpbGRyZW4gY2Fubm90IGJlIG1vdmVkXG4gICAqIG9yIHJlc2l6ZWQuXG4gICAqIEBkZXByZWNhdGVkIHVzZSBlZGl0TW9kZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBpc0Zyb3plbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZWRpdE1vZGUgPSAhdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogSWYgYSBkYXNoYm9hcmQgZWRpdGluZyBpcyBkaXNhYmxlZCBubyB3aWRnZXRzIGNhbiBiZSBtb3ZlZCwgZWRpdGVkLCByZW1vdmVkXG4gICAqIG9yIGFkZGVkLlxuICAgKi9cbiAgQElucHV0KCkgZWRpdE1vZGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZmlyZWQgaWYgYSBjaGlsZCBjaGFuZ2UgaXMgc3RhcnRlZCAoZHJhZ2dpbmcgb3IgcmVzaXppbmcpXG4gICAqL1xuICBAT3V0cHV0KCkgY2hhbmdlU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPERhc2hib2FyZENoaWxkQ29tcG9uZW50PigpO1xuXG4gIC8qKlxuICAgKiBBbiBldmVudCBmaXJlZCBpZiBhIGNoaWxkIGNoYW5nZSBpcyBlbmRlZFxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZUVuZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkQ2hpbGRDb21wb25lbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEFsbCBjbGFzc2VzIGFkZGVkIHRvIHRoaXMgY2hpbGRcbiAgICovXG4gIEBJbnB1dCgpXG4gIGNsYXNzOiBzdHJpbmdbXSB8IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBpeGVsIHdpZHRoIG9mIHRoZSBjaGlsZCAodXNlZCBmb3IgcmVzaXppbmcpXG4gICAqL1xuICBzZXQgcHhXaWR0aCh2YWx1ZSkge1xuICAgIHRoaXMuX3B4V2lkdGggPSBgJHt2YWx1ZX1weGA7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGl4ZWwgaGVpZ2h0IG9mIHRoZSBjaGlsZCAodXNlZCBmb3IgcmVzaXppbmcpXG4gICAqL1xuICBzZXQgcHhIZWlnaHQodmFsdWUpIHtcbiAgICB0aGlzLl9weEhlaWdodCA9IGAke3ZhbHVlfXB4YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBvbiBldmVyeSByZXNpemUgYW5kIHJldHVybnMgdHJ1ZSBpZiBpbiBvbmUgY29sdW1uIHZpZXcgKG1vYmlsZSB2aWV3KVxuICAgKi9cbiAgaXNPbmVDb2x1bW5WaWV3JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKFxuICAgIG1hcChfID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA8PSB0aGlzLk1EX0JPT1RTVFJBUF9CUkVBS1BPSU5UX1JFQURPTkxZX0NMQVNTX1BST1BFUlRZXG4gICAgICApO1xuICAgIH0pLFxuICAgIGRlYm91bmNlVGltZSgyMDApLFxuICAgIHN0YXJ0V2l0aChcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA8PSB0aGlzLk1EX0JPT1RTVFJBUF9CUkVBS1BPSU5UX1JFQURPTkxZX0NMQVNTX1BST1BFUlRZXG4gICAgKVxuICApO1xuXG4gIC8qKlxuICAgKiBBbiBpbmRpY2F0b3IgaWYgdGhlIGNoaWxkIGlzIGludGVyc2VjdGVkICh0aGF0IG1lYW4gdmlzaWJsZSBmb3IgdGhlIHVzZXIpXG4gICAqL1xuICBpbnRlcnNlY3RlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUZWxscyBpZiB0aGUgbGFzdCBjaGFuZ2Ugd2FzIGEgZHJhZ2dpbmcgb3IgcmVzaXppbmcgZXZlbnQ7XG4gICAqL1xuICBsYXN0Q2hhbmdlOiAnZHJhZycgfCAncmVzaXplJyA9IG51bGw7XG5cbiAgLyoqXG4gICAqIG5hc3R5IHdvcmthcm91bmQgZm9yIHRoYXQgaXNzdWU6XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzkzNDNcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5zdHlsZScpXG4gIGdldCBpbmxpbmVTdHlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGBcbiAgICBncmlkLWNvbHVtbi1zdGFydDogJHt0aGlzLnggKyAxfTtcbiAgICBncmlkLXJvdy1zdGFydDogJHt0aGlzLnkgKyAxfTtcbiAgICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gJHt0aGlzLndpZHRofTtcbiAgICBncmlkLXJvdy1lbmQ6IHNwYW4gJHt0aGlzLmhlaWdodH07XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAke3RoaXMubWFyZ2luIHx8IDEyfXB4O1xuICAgIG9yZGVyOiAke3RoaXMuZ2V0T3JkZXIoKX07XG4gICAgYCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIHdoaWNoIGlzIGxpc3RlbiB0b1xuICAgKiBvbiBjaGFuZ2VzIChkcmFnIG9yIHJlc2l6ZSkuXG4gICAqL1xuICBjaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGFzaGJvYXJkOiBEYXNoYm9hcmRDb21wb25lbnQsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5rbGFzc2VzID0ge1xuICAgICAgY2FyZDogdHJ1ZSxcbiAgICAgICdjYXJkLWRhc2hib2FyZCc6IHRydWUsXG4gICAgICAnb24tcmVzaXplJzogdGhpcy5pc1Jlc2l6ZSxcbiAgICAgIC4uLnRoaXMuY2xhc3NcbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMueCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMueSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0RHluYW1pY0RpbWVuc2lvbigpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlSW50ZXJzZWN0aW9uICYmICdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93KSB7XG4gICAgICBjb25zdCBpbnRlcnNlY3Rpb25PYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgICAgZXZlbnQgPT4gKHRoaXMuaW50ZXJzZWN0ZWQgPSB0aGlzLmNoaWxkSW5WaWV3KGV2ZW50WzBdLCBpbnRlcnNlY3Rpb25PYnNlcnZlcikpXG4gICAgICApO1xuICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmRhc2hib2FyZC5jaGlsZHJlbi5wdXNoKHRoaXMpO1xuICB9XG5cbiAgc2V0RHluYW1pY0RpbWVuc2lvbigpIHtcbiAgICBjb25zdCBkcyA9IG5ldyBEYXNoYm9hcmRDaGlsZENoYW5nZSh0aGlzKTtcbiAgICBjb25zdCB7IHgsIHkgfSA9IGRzLmZpbmRGcmVlRGltZW5zaW9uKCk7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuXG4gICAgdGhpcy5kYXNoYm9hcmQuZW1pdENoYW5nZSh0aGlzKTtcbiAgfVxuXG4gIHJlc2l6ZVN0YXJ0ZWQoJGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICB0aGlzLmlzUmVzaXplID0gdHJ1ZTtcbiAgICB0aGlzLmRhc2hib2FyZC51cGRhdGVSZWN0U2l6ZSgpO1xuICAgIHRoaXMuZHJhZ1NvdXJjZSA9ICRldmVudC5zb3VyY2U7XG4gICAgY29uc3QgcG9zaXRpb25pbmcgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UodGhpcyk7XG4gICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24gPSBwb3NpdGlvbmluZy5yZXNpemUkLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhcnQuZW1pdCh0aGlzKTtcbiAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gIH1cblxuICBkcmFnU3RhcnRlZCgkZXZlbnQ6IENka0RyYWdTdGFydCkge1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgdGhpcy5kYXNoYm9hcmQudXBkYXRlUmVjdFNpemUoKTtcbiAgICB0aGlzLmRyYWdTb3VyY2UgPSAkZXZlbnQuc291cmNlO1xuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHRoaXMpO1xuICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gcG9zaXRpb25pbmcuZHJhZyQuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGFydC5lbWl0KHRoaXMpO1xuICB9XG5cbiAgcmVzZXQoJGV2ZW50PzogQ2RrRHJhZ0VuZCkge1xuICAgIHRoaXMubGFzdENoYW5nZSA9IHRoaXMuaXNSZXNpemUgPyAncmVzaXplJyA6ICdkcmFnJztcbiAgICB0aGlzLmlzUmVzaXplID0gZmFsc2U7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcHhXaWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLl9weEhlaWdodCA9ICcxMDAlJztcbiAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gICAgaWYgKCRldmVudCkge1xuICAgICAgJGV2ZW50LnNvdXJjZS5yZXNldCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmRhc2hib2FyZC5lbWl0Q2hhbmdlKHRoaXMpO1xuICAgICAgdGhpcy5jaGFuZ2VFbmQuZW1pdCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlU2VsZkZyb21EYXNoYm9hcmQoKTtcbiAgfVxuXG4gIGFkZEFjdGlvbnMoYWN0aW9uczogRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnRbXSwgcHJlcGVuZCA9IGZhbHNlKSB7XG4gICAgaWYgKHByZXBlbmQpIHtcbiAgICAgIHRoaXMuYWN0aW9ucyA9IFsuLi5hY3Rpb25zLCAuLi50aGlzLmFjdGlvbnNdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGlvbnMgPSBbLi4udGhpcy5hY3Rpb25zLCAuLi5hY3Rpb25zXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVNlbGZGcm9tRGFzaGJvYXJkKCkge1xuICAgIGNvbnN0IGkgPSB0aGlzLmRhc2hib2FyZC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuXG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5kYXNoYm9hcmQuY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JkZXIoKSB7XG4gICAgcmV0dXJuIGAke01hdGgucm91bmQoKHRoaXMueSArICh0aGlzLnggKyAxKSAvIDEwMCkgKiAxMDApfWA7XG4gIH1cblxuICBwcml2YXRlIGNoaWxkSW5WaWV3KGV2ZW50LCBvYnNlcnZlcikge1xuICAgIGlmIChldmVudC5pc0ludGVyc2VjdGluZykge1xuICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKGV2ZW50LnRhcmdldCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2IGNka0Ryb3BMaXN0PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjYXJkLXBsYWNlaG9sZGVyXCJcbiAgICAqbmdJZj1cImlzUmVzaXplXCJcbiAgPjwvZGl2PlxuICA8ZGl2XG4gICAgW25nU3R5bGVdPVwieyB3aWR0aDogX3B4V2lkdGgsIGhlaWdodDogX3B4SGVpZ2h0IH1cIlxuICAgIFtuZ0NsYXNzXT1cImtsYXNzZXNcIlxuICAgIGNka0RyYWdcbiAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiZHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgKGNka0RyYWdFbmRlZCk9XCJyZXNldCgkZXZlbnQpXCJcbiAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIihpc09uZUNvbHVtblZpZXckIHwgYXN5bmMpIHx8ICFlZGl0TW9kZVwiXG4gID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNhcmQtaGVhZGVyLWFjdGlvbnMgY2FyZC1oZWFkZXItZ3JpZFwiXG4gICAgICBbbmdDbGFzc109XCJ7ICdkcmFnLWhhbmRsZSc6IGVkaXRNb2RlLCBkcmFnZ2FibGVDdXJzb3I6IGVkaXRNb2RlIH1cIlxuICAgICAgY2RrRHJhZ0hhbmRsZVxuICAgID5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImM4eS1kYXNoYm9hcmQtY2hpbGQtdGl0bGVcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaGVhZGVyLWFjdGlvbnMgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICAgICAqbmdJZj1cImFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICA+XG4gICAgICAgIDxjOHktd2lkZ2V0LXRpbWUtY29udGV4dC1pY29uLWJhclxuICAgICAgICAgICpuZ0lmPVwiZGF0YT8uY29uZmlnPy5kaXNwbGF5U2V0dGluZ3MgJiYgZGF0YT8uY29uZmlnPy53aWRnZXRJbnN0YW5jZUdsb2JhbFRpbWVDb250ZXh0XCJcbiAgICAgICAgICBbY29uZmlnXT1cImRhdGEuY29uZmlnXCJcbiAgICAgICAgPjwvYzh5LXdpZGdldC10aW1lLWNvbnRleHQtaWNvbi1iYXI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIm9wdGlvbnNCdG4gZHJvcGRvd25cIlxuICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSByaWdodFwiXG4gICAgICAgICAgZHJvcGRvd25cbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuSWNvbiBjOHktZHJvcGRvd25cIlxuICAgICAgICAgICAgKm5nSWY9XCJlZGl0TW9kZVwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdTZXR0aW5ncycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1kYXNoYm9hcmQtY2hpbGQtLXNldHRpbmdzXCJcbiAgICAgICAgICAgIChjbGljayk9XCIoZmFsc2UpXCJcbiAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2NvZydcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG5JY29uIGM4eS1kcm9wZG93blwiXG4gICAgICAgICAgICAqbmdJZj1cIiFlZGl0TW9kZVwiXG4gICAgICAgICAgICB0b29sdGlwPVwie3sgJ0NsaWNrICZxdW90O0VkaXQgd2lkZ2V0cyZxdW90OyB0byB1bmxvY2snIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ2xpY2sgJnF1b3Q7RWRpdCB3aWRnZXRzJnF1b3Q7IHRvIHVubG9jaycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIihmYWxzZSlcIlxuICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1kYXNoYm9hcmQtY2hpbGQtLXNldHRpbmdzLWxvY2tlZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2xvY2snXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDx1bFxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIlxuICAgICAgICAgICAgc3R5bGU9XCJyaWdodDogLTFweFwiXG4gICAgICAgICAgICAqZHJvcGRvd25NZW51XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjdGlvbi50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbm5lci1zY3JvbGxcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJlc2l6ZS1oYW5kbGUgaGlkZGVuLXhzXCJcbiAgICAgICpuZ0lmPVwiZWRpdE1vZGUgJiYgIWlzRHJhZ2dpbmdcIlxuICAgICAgY2RrRHJhZ1xuICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhZWRpdE1vZGVcIlxuICAgICAgKGNka0RyYWdTdGFydGVkKT1cInJlc2l6ZVN0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAoY2RrRHJhZ0VuZGVkKT1cInJlc2V0KCRldmVudClcIlxuICAgID48L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJlc2l6ZS1pY29uIGhpZGRlbi14c1wiXG4gICAgICAqbmdJZj1cImVkaXRNb2RlICYmICFpc0RyYWdnaW5nXCJcbiAgICA+PC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNhcmQtcGxhY2Vob2xkZXJcIlxuICAgICAgKmNka0RyYWdQbGFjZWhvbGRlclxuICAgID48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWNoaWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZGFzaGJvYXJkL2Rhc2hib2FyZC1jaGlsZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2Rhc2hib2FyZC9kYXNoYm9hcmQtY2hpbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUE0QixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7O0FBRTlEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQVFILE1BQU0sT0FBTyx1QkFBdUI7SUFFbEMsSUFBb0QsZUFBZSxDQUNqRSxPQUF3QztRQUV4QyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBOENEOzs7O09BSUc7SUFDSCxJQUNJLFFBQVEsQ0FBQyxLQUFjO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQXdCRDs7T0FFRztJQUNILElBQUksT0FBTyxDQUFDLEtBQUs7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SyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLFFBQVEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzhHQWxRVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qiw4YkFFakIsNkJBQTZCLGtEQy9EaEQsNHlGQXlGQTs7MkZENUJhLHVCQUF1QjtrQkFQbkMsU0FBUzsrQkFDRSxxQkFBcUIsUUFFekI7d0JBQ0osS0FBSyxFQUFFLHNCQUFzQjtxQkFDOUI7MklBSW1ELGVBQWU7c0JBQWxFLGVBQWU7dUJBQUMsNkJBQTZCO2dCQWtCckMsQ0FBQztzQkFBVCxLQUFLO2dCQUtHLENBQUM7c0JBQVQsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csTUFBTTtzQkFBZCxLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csZUFBZTtzQkFBdkIsS0FBSztnQkFRRixRQUFRO3NCQURYLEtBQUs7Z0JBU0csUUFBUTtzQkFBaEIsS0FBSztnQkFLSSxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLFNBQVM7c0JBQWxCLE1BQU07Z0JBTVAsS0FBSztzQkFESixLQUFLO2dCQStDRixXQUFXO3NCQURkLFdBQVc7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWcsIENka0RyYWdFbmQsIENka0RyYWdTdGFydCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vZGFzaGJvYXJkLWNoaWxkLWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UgfSBmcm9tICcuL2Rhc2hib2FyZC1jaGlsZC1jaGFuZ2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9kYXNoYm9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IERhc2hib2FyZENoaWxkRGltZW5zaW9uLCBXaWRnZXQgfSBmcm9tICcuL2Rhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIEEgZGFzaGJvYXJkIGNoaWxkIGFsbG93cyB0byBwb3NpdGlvbiBlbGVtZW50c1xuICogY29ycmVjdGx5IG9uIGEgZ3JpZC5cbiAqXG4gKiBCeSBzZXR0aW5nIGBjOHktZGFzaGJvYXJkLWNoaWxkLWFjdGlvbnNgIGFuZFxuICogYGM4eS1kYXNoYm9hcmQtY2hpbGQtdGl0bGVgIG9uIHRoZSBlbGVtZW50IHlvdSBjYW4gYWRkXG4gKiBjdXN0b20gYWN0aW9ucyBvciBhIGN1c3RvbSB0aXRsZSB0byB0aGUgY3VycmVudCBjaGlsZC5cbiAqXG4gKiBCeSBhZGRpbmcgdGhlIGNvcnJlY3QgYnJhbmRlZCBjbGFzc2VzLCB5b3UgY2FuIGRlZmluZVxuICogdGhlIGxvb2sgYW5kIGZlZWwgb2YgdGhlIGNoaWxkLiBCeSBkZWZhdWx0IGl0IGlzIGRpc3BsYXllZFxuICogYXMgYSBjYXJkLlxuICpcbiAqIGBgYGh0bWxcbiAqICAgPGM4eS1kYXNoYm9hcmQtY2hpbGRcbiAqICAgICAjY3BXaWRnZXQzXG4gKiAgICAgW3hdPVwiMFwiXG4gKiAgICAgW3ldPVwiM1wiXG4gKiAgICAgW3dpZHRoXT1cIjRcIlxuICogICAgIFtoZWlnaHRdPVwiNFwiXG4gKiAgICAgW2NsYXNzXT1cIidjYXJkLWRhc2hib2FyZCBwYW5lbC1jb250ZW50LXRyYW5zcGFyZW50J1wiXG4gKiAgID5cbiAqICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZSAqbmdJZj1cInNob3dUaXRsZVwiPlxuICogICAgICAgPHNwYW4+VHJhbnNwYXJlbnQhPC9zcGFuPlxuICogICAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZC10aXRsZT5cbiAqICAgICA8Yzh5LWRhc2hib2FyZC1jaGlsZC1hY3Rpb24+XG4gKiAgICAgICA8YSBocmVmPVwiXCIgKGNsaWNrKT1cInNob3dUaXRsZSA9ICFzaG93VGl0bGU7IChmYWxzZSlcIj5cbiAqICAgICAgICAgPGkgW2M4eUljb25dPVwiJ2hlYWRpbmcnXCI+PC9pPiBIaWRlL3Nob3cgdGl0bGVcbiAqICAgICAgIDwvYT5cbiAqICAgICA8L2M4eS1kYXNoYm9hcmQtY2hpbGQtYWN0aW9uPlxuICogICAgIHg6IHt7IGNwV2lkZ2V0My54IH19PGJyIC8+XG4gKiAgICAgeToge3sgY3BXaWRnZXQzLnkgfX08YnIgLz5cbiAqICAgICB3aWR0aDoge3sgY3BXaWRnZXQzLndpZHRoIH19PGJyIC8+XG4gKiAgICAgaGVpZ2h0OiB7eyBjcFdpZGdldDMuaGVpZ2h0IH19PGJyIC8+XG4gKiAgIDwvYzh5LWRhc2hib2FyZC1jaGlsZD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGFzaGJvYXJkLWNoaWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC1jaGlsZC5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2Rhc2hib2FyZC1ncmlkLWNoaWxkJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENoaWxkQ29tcG9uZW50IGltcGxlbWVudHMgRGFzaGJvYXJkQ2hpbGREaW1lbnNpb24ge1xuICBhY3Rpb25zOiBEYXNoYm9hcmRDaGlsZEFjdGlvbkNvbXBvbmVudFtdID0gW107XG4gIEBDb250ZW50Q2hpbGRyZW4oRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnQpIHNldCB0ZW1wbGF0ZUFjdGlvbnMoXG4gICAgYWN0aW9uczogRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnRbXVxuICApIHtcbiAgICB0aGlzLmFkZEFjdGlvbnMoYWN0aW9ucywgdHJ1ZSk7XG4gIH1cbiAgZHJhZ1NvdXJjZTogQ2RrRHJhZztcbiAgaXNSZXNpemUgPSBmYWxzZTtcbiAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBrbGFzc2VzID0ge307XG5cbiAgX3B4V2lkdGggPSAnMTAwJSc7XG4gIF9weEhlaWdodCA9ICcxMDAlJztcblxuICByZWFkb25seSBNRF9CT09UU1RSQVBfQlJFQUtQT0lOVF9SRUFET05MWV9DTEFTU19QUk9QRVJUWSA9IDc2ODtcblxuICAvKipcbiAgICogVGhlIHggcG9zaXRpb24gb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgeDtcblxuICAvKipcbiAgICogVGhlIHkgcG9zaXRpb24gb2YgdGhlIGNoaWxkLlxuICAgKi9cbiAgQElucHV0KCkgeTtcblxuICAvKipcbiAgICogVGhlIHdpZHRoIG9mIHRoZSBjb21wb25lbnQgaW4gZ3JpZC1jb2x1bW5zLlxuICAgKi9cbiAgQElucHV0KCkgd2lkdGggPSAxO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjb21wb25lbnQgaW4gZ3JpZC1yb3dzLlxuICAgKi9cbiAgQElucHV0KCkgaGVpZ2h0ID0gMTtcblxuICAvKipcbiAgICogVGhlIGRhdGEgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGEgZGF0YVRyYW5zZmVyIG9iamVjdCBmb3IgZXZlbnRzIG9mIHRoZSBjaGlsZC5cbiAgICovXG4gIEBJbnB1dCgpIGRhdGE6IFdpZGdldCB8IGFueTtcblxuICAvKipcbiAgICogVGhlIG1hcmdpbiBvZiB0aGUgY2hpbGQgaW4gcGl4ZWwuXG4gICAqL1xuICBASW5wdXQoKSBtYXJnaW4gPSAxMjtcblxuICAvKipcbiAgICogVGhlIGNoaWxkIGNvbnRlbnQgaXMgaW5pdGlhbGl6ZWQsIGFzIHNvb24gaXQgaXMgc2Nyb2xsZWQgaW50byB2aWV3cG9ydFxuICAgKi9cbiAgQElucHV0KCkgdXNlSW50ZXJzZWN0aW9uID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElmIGEgZGFzaGJvYXJkIGlzIGZyb3plbiwgYWxsIGNoaWxkcmVuIGNhbm5vdCBiZSBtb3ZlZFxuICAgKiBvciByZXNpemVkLlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZWRpdE1vZGUuXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgaXNGcm96ZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmVkaXRNb2RlID0gIXZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIGEgZGFzaGJvYXJkIGVkaXRpbmcgaXMgZGlzYWJsZWQgbm8gd2lkZ2V0cyBjYW4gYmUgbW92ZWQsIGVkaXRlZCwgcmVtb3ZlZFxuICAgKiBvciBhZGRlZC5cbiAgICovXG4gIEBJbnB1dCgpIGVkaXRNb2RlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFuIGV2ZW50IGZpcmVkIGlmIGEgY2hpbGQgY2hhbmdlIGlzIHN0YXJ0ZWQgKGRyYWdnaW5nIG9yIHJlc2l6aW5nKVxuICAgKi9cbiAgQE91dHB1dCgpIGNoYW5nZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRDaGlsZENvbXBvbmVudD4oKTtcblxuICAvKipcbiAgICogQW4gZXZlbnQgZmlyZWQgaWYgYSBjaGlsZCBjaGFuZ2UgaXMgZW5kZWRcbiAgICovXG4gIEBPdXRwdXQoKSBjaGFuZ2VFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPERhc2hib2FyZENoaWxkQ29tcG9uZW50PigpO1xuXG4gIC8qKlxuICAgKiBBbGwgY2xhc3NlcyBhZGRlZCB0byB0aGlzIGNoaWxkXG4gICAqL1xuICBASW5wdXQoKVxuICBjbGFzczogc3RyaW5nW10gfCB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwaXhlbCB3aWR0aCBvZiB0aGUgY2hpbGQgKHVzZWQgZm9yIHJlc2l6aW5nKVxuICAgKi9cbiAgc2V0IHB4V2lkdGgodmFsdWUpIHtcbiAgICB0aGlzLl9weFdpZHRoID0gYCR7dmFsdWV9cHhgO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBpeGVsIGhlaWdodCBvZiB0aGUgY2hpbGQgKHVzZWQgZm9yIHJlc2l6aW5nKVxuICAgKi9cbiAgc2V0IHB4SGVpZ2h0KHZhbHVlKSB7XG4gICAgdGhpcy5fcHhIZWlnaHQgPSBgJHt2YWx1ZX1weGA7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgb24gZXZlcnkgcmVzaXplIGFuZCByZXR1cm5zIHRydWUgaWYgaW4gb25lIGNvbHVtbiB2aWV3IChtb2JpbGUgdmlldylcbiAgICovXG4gIGlzT25lQ29sdW1uVmlldyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShcbiAgICBtYXAoXyA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggPD0gdGhpcy5NRF9CT09UU1RSQVBfQlJFQUtQT0lOVF9SRUFET05MWV9DTEFTU19QUk9QRVJUWVxuICAgICAgKTtcbiAgICB9KSxcbiAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICBzdGFydFdpdGgoXG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggPD0gdGhpcy5NRF9CT09UU1RSQVBfQlJFQUtQT0lOVF9SRUFET05MWV9DTEFTU19QUk9QRVJUWVxuICAgIClcbiAgKTtcblxuICAvKipcbiAgICogQW4gaW5kaWNhdG9yIGlmIHRoZSBjaGlsZCBpcyBpbnRlcnNlY3RlZCAodGhhdCBtZWFuIHZpc2libGUgZm9yIHRoZSB1c2VyKVxuICAgKi9cbiAgaW50ZXJzZWN0ZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGVsbHMgaWYgdGhlIGxhc3QgY2hhbmdlIHdhcyBhIGRyYWdnaW5nIG9yIHJlc2l6aW5nIGV2ZW50O1xuICAgKi9cbiAgbGFzdENoYW5nZTogJ2RyYWcnIHwgJ3Jlc2l6ZScgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBuYXN0eSB3b3JrYXJvdW5kIGZvciB0aGF0IGlzc3VlOlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy85MzQzXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3R5bGUnKVxuICBnZXQgaW5saW5lU3R5bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShgXG4gICAgZ3JpZC1jb2x1bW4tc3RhcnQ6ICR7dGhpcy54ICsgMX07XG4gICAgZ3JpZC1yb3ctc3RhcnQ6ICR7dGhpcy55ICsgMX07XG4gICAgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuICR7dGhpcy53aWR0aH07XG4gICAgZ3JpZC1yb3ctZW5kOiBzcGFuICR7dGhpcy5oZWlnaHR9O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogJHt0aGlzLm1hcmdpbiB8fCAxMn1weDtcbiAgICBvcmRlcjogJHt0aGlzLmdldE9yZGVyKCl9O1xuICAgIGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiB3aGljaCBpcyBsaXN0ZW4gdG9cbiAgICogb24gY2hhbmdlcyAoZHJhZyBvciByZXNpemUpLlxuICAgKi9cbiAgY2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRhc2hib2FyZDogRGFzaGJvYXJkQ29tcG9uZW50LFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMua2xhc3NlcyA9IHtcbiAgICAgIGNhcmQ6IHRydWUsXG4gICAgICAnY2FyZC1kYXNoYm9hcmQnOiB0cnVlLFxuICAgICAgJ29uLXJlc2l6ZSc6IHRoaXMuaXNSZXNpemUsXG4gICAgICAuLi50aGlzLmNsYXNzXG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnggPT09IHVuZGVmaW5lZCB8fCB0aGlzLnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldER5bmFtaWNEaW1lbnNpb24oKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUludGVyc2VjdGlvbiAmJiAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInIGluIHdpbmRvdykge1xuICAgICAgY29uc3QgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAgIGV2ZW50cyA9PiAodGhpcy5pbnRlcnNlY3RlZCA9IHRoaXMuY2hpbGRJblZpZXcoZXZlbnRzLCBpbnRlcnNlY3Rpb25PYnNlcnZlcikpXG4gICAgICApO1xuICAgICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJzZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmRhc2hib2FyZC5jaGlsZHJlbi5wdXNoKHRoaXMpO1xuICB9XG5cbiAgc2V0RHluYW1pY0RpbWVuc2lvbigpIHtcbiAgICBjb25zdCBkcyA9IG5ldyBEYXNoYm9hcmRDaGlsZENoYW5nZSh0aGlzKTtcbiAgICBjb25zdCB7IHgsIHkgfSA9IGRzLmZpbmRGcmVlRGltZW5zaW9uKCk7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuXG4gICAgdGhpcy5kYXNoYm9hcmQuZW1pdENoYW5nZSh0aGlzKTtcbiAgfVxuXG4gIHJlc2l6ZVN0YXJ0ZWQoJGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICB0aGlzLmlzUmVzaXplID0gdHJ1ZTtcbiAgICB0aGlzLmRhc2hib2FyZC51cGRhdGVSZWN0U2l6ZSgpO1xuICAgIHRoaXMuZHJhZ1NvdXJjZSA9ICRldmVudC5zb3VyY2U7XG4gICAgY29uc3QgcG9zaXRpb25pbmcgPSBuZXcgRGFzaGJvYXJkQ2hpbGRDaGFuZ2UodGhpcyk7XG4gICAgdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24gPSBwb3NpdGlvbmluZy5yZXNpemUkLnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2hhbmdlU3RhcnQuZW1pdCh0aGlzKTtcbiAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gIH1cblxuICBkcmFnU3RhcnRlZCgkZXZlbnQ6IENka0RyYWdTdGFydCkge1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgdGhpcy5kYXNoYm9hcmQudXBkYXRlUmVjdFNpemUoKTtcbiAgICB0aGlzLmRyYWdTb3VyY2UgPSAkZXZlbnQuc291cmNlO1xuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gbmV3IERhc2hib2FyZENoaWxkQ2hhbmdlKHRoaXMpO1xuICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uID0gcG9zaXRpb25pbmcuZHJhZyQuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jaGFuZ2VTdGFydC5lbWl0KHRoaXMpO1xuICB9XG5cbiAgcmVzZXQoJGV2ZW50PzogQ2RrRHJhZ0VuZCkge1xuICAgIHRoaXMubGFzdENoYW5nZSA9IHRoaXMuaXNSZXNpemUgPyAncmVzaXplJyA6ICdkcmFnJztcbiAgICB0aGlzLmlzUmVzaXplID0gZmFsc2U7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fcHhXaWR0aCA9ICcxMDAlJztcbiAgICB0aGlzLl9weEhlaWdodCA9ICcxMDAlJztcbiAgICB0aGlzLm5nT25DaGFuZ2VzKCk7XG4gICAgaWYgKCRldmVudCkge1xuICAgICAgJGV2ZW50LnNvdXJjZS5yZXNldCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmRhc2hib2FyZC5lbWl0Q2hhbmdlKHRoaXMpO1xuICAgICAgdGhpcy5jaGFuZ2VFbmQuZW1pdCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlU2VsZkZyb21EYXNoYm9hcmQoKTtcbiAgfVxuXG4gIGFkZEFjdGlvbnMoYWN0aW9uczogRGFzaGJvYXJkQ2hpbGRBY3Rpb25Db21wb25lbnRbXSwgcHJlcGVuZCA9IGZhbHNlKSB7XG4gICAgaWYgKHByZXBlbmQpIHtcbiAgICAgIHRoaXMuYWN0aW9ucyA9IFsuLi5hY3Rpb25zLCAuLi50aGlzLmFjdGlvbnNdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGlvbnMgPSBbLi4udGhpcy5hY3Rpb25zLCAuLi5hY3Rpb25zXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVNlbGZGcm9tRGFzaGJvYXJkKCkge1xuICAgIGNvbnN0IGkgPSB0aGlzLmRhc2hib2FyZC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuXG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5kYXNoYm9hcmQuY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3JkZXIoKSB7XG4gICAgcmV0dXJuIGAke01hdGgucm91bmQoKHRoaXMueSArICh0aGlzLnggKyAxKSAvIDEwMCkgKiAxMDApfWA7XG4gIH1cblxuICBwcml2YXRlIGNoaWxkSW5WaWV3KGV2ZW50cywgb2JzZXJ2ZXIpIHtcbiAgICBjb25zdCBpbnRlcnNlY3RpbmdFdmVudCA9IGV2ZW50cy5maW5kKGV2ZW50ID0+IGV2ZW50LmlzSW50ZXJzZWN0aW5nKTtcbiAgICBpZiAoaW50ZXJzZWN0aW5nRXZlbnQpIHtcbiAgICAgIG9ic2VydmVyLnVub2JzZXJ2ZShpbnRlcnNlY3RpbmdFdmVudC50YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwiPGRpdiBjZGtEcm9wTGlzdD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2FyZC1wbGFjZWhvbGRlclwiXG4gICAgKm5nSWY9XCJpc1Jlc2l6ZVwiXG4gID48L2Rpdj5cbiAgPGRpdlxuICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IF9weFdpZHRoLCBoZWlnaHQ6IF9weEhlaWdodCB9XCJcbiAgICBbbmdDbGFzc109XCJrbGFzc2VzXCJcbiAgICBjZGtEcmFnXG4gICAgKGNka0RyYWdTdGFydGVkKT1cImRyYWdTdGFydGVkKCRldmVudClcIlxuICAgIChjZGtEcmFnRW5kZWQpPVwicmVzZXQoJGV2ZW50KVwiXG4gICAgW2Nka0RyYWdEaXNhYmxlZF09XCIoaXNPbmVDb2x1bW5WaWV3JCB8IGFzeW5jKSB8fCAhZWRpdE1vZGVcIlxuICA+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjYXJkLWhlYWRlci1hY3Rpb25zIGNhcmQtaGVhZGVyLWdyaWRcIlxuICAgICAgW25nQ2xhc3NdPVwieyAnZHJhZy1oYW5kbGUnOiBlZGl0TW9kZSwgZHJhZ2dhYmxlQ3Vyc29yOiBlZGl0TW9kZSB9XCJcbiAgICAgIGNka0RyYWdIYW5kbGVcbiAgICA+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJjOHktZGFzaGJvYXJkLWNoaWxkLXRpdGxlXCI+PC9uZy1jb250ZW50PlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImhlYWRlci1hY3Rpb25zIGQtZmxleCBhLWktY2VudGVyXCJcbiAgICAgICAgKm5nSWY9XCJhY3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8Yzh5LXdpZGdldC10aW1lLWNvbnRleHQtaWNvbi1iYXJcbiAgICAgICAgICAqbmdJZj1cImRhdGE/LmNvbmZpZz8uZGlzcGxheVNldHRpbmdzICYmIGRhdGE/LmNvbmZpZz8ud2lkZ2V0SW5zdGFuY2VHbG9iYWxUaW1lQ29udGV4dFwiXG4gICAgICAgICAgW2NvbmZpZ109XCJkYXRhLmNvbmZpZ1wiXG4gICAgICAgID48L2M4eS13aWRnZXQtdGltZS1jb250ZXh0LWljb24tYmFyPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJvcHRpb25zQnRuIGRyb3Bkb3duXCJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gcmlnaHRcIlxuICAgICAgICAgIGRyb3Bkb3duXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ0bkljb24gYzh5LWRyb3Bkb3duXCJcbiAgICAgICAgICAgICpuZ0lmPVwiZWRpdE1vZGVcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2V0dGluZ3MnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktZGFzaGJvYXJkLWNoaWxkLS1zZXR0aW5nc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiKGZhbHNlKVwiXG4gICAgICAgICAgICBkcm9wZG93blRvZ2dsZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidjb2cnXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuSWNvbiBjOHktZHJvcGRvd25cIlxuICAgICAgICAgICAgKm5nSWY9XCIhZWRpdE1vZGVcIlxuICAgICAgICAgICAgdG9vbHRpcD1cInt7ICdDbGljayAmcXVvdDtFZGl0IHdpZGdldHMmcXVvdDsgdG8gdW5sb2NrJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0NsaWNrICZxdW90O0VkaXQgd2lkZ2V0cyZxdW90OyB0byB1bmxvY2snIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgIChjbGljayk9XCIoZmFsc2UpXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktZGFzaGJvYXJkLWNoaWxkLS1zZXR0aW5ncy1sb2NrZWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIFtjOHlJY29uXT1cIidsb2NrJ1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8dWxcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LXJpZ2h0XCJcbiAgICAgICAgICAgIHN0eWxlPVwicmlnaHQ6IC0xcHhcIlxuICAgICAgICAgICAgKmRyb3Bkb3duTWVudVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb24udGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNhcmQtaW5uZXItc2Nyb2xsXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyZXNpemUtaGFuZGxlIGhpZGRlbi14c1wiXG4gICAgICAqbmdJZj1cImVkaXRNb2RlICYmICFpc0RyYWdnaW5nXCJcbiAgICAgIGNka0RyYWdcbiAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIWVkaXRNb2RlXCJcbiAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJyZXNpemVTdGFydGVkKCRldmVudClcIlxuICAgICAgKGNka0RyYWdFbmRlZCk9XCJyZXNldCgkZXZlbnQpXCJcbiAgICA+PC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyZXNpemUtaWNvbiBoaWRkZW4teHNcIlxuICAgICAgKm5nSWY9XCJlZGl0TW9kZSAmJiAhaXNEcmFnZ2luZ1wiXG4gICAgPjwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjYXJkLXBsYWNlaG9sZGVyXCJcbiAgICAgICpjZGtEcmFnUGxhY2Vob2xkZXJcbiAgICA+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -789,6 +789,13 @@ class ContextDashboardService {
789
789
  if (!dashboards.c8y_Dashboard.children) {
790
790
  return dashboards;
791
791
  }
792
+ // Newly created NamedContextDashboards are still created with 12 columns for backwards compatibility.
793
+ // Default widgets might be already configured for 24 columns.
794
+ // If a widget is already configured for more than 12 columns, we should not adjust it.
795
+ const alreadyHasWidgetsConfiguredForMoreThan12Columns = Object.values(dashboards.c8y_Dashboard.children).some(widget => widget._x + widget._width > 12);
796
+ if (alreadyHasWidgetsConfiguredForMoreThan12Columns) {
797
+ return dashboards;
798
+ }
792
799
  // we need to multiply both _width and _x attributes with 2 to migrate from 12 to 24 columns.
793
800
  Object.values(dashboards.c8y_Dashboard.children).forEach(widget => {
794
801
  if (widget._width) {