@huntsman-cancer-institute/navigation 17.3.4 → 17.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1499,4 +1499,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
1499
1499
  static: false
1500
1500
  }]
1501
1501
  }] } });
1502
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF5TUksSUFBTSxtQkFBbUIsR0FBekIsTUFB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MkJBQTJCLEVBQUU7d0JBQ3RDLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsS0FBSztxQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDaGlsZHJlblxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7ZGVsYXksIGZpbmFsaXplfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtOZ2JEcm9wZG93bn0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcblxyXG5pbXBvcnQge0hjaURhdGFEdG8sIEhjaUZpbHRlckR0bywgSGNpR3JpZER0bywgSGNpR3JvdXBpbmdEdG8sIEhjaVBhZ2luZ0R0bywgSGNpU29ydER0b30gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL2hjaS1uZy1ncmlkLWR0b1wiO1xyXG5pbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS91dGlsc1wiO1xyXG5cclxuaW1wb3J0IHtOYXZDb21wb25lbnR9IGZyb20gXCIuLi9uYXYuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtSb3dHcm91cH0gZnJvbSBcIi4vcm93LWdyb3VwXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkdsb2JhbFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLWdsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7U2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnR9IGZyb20gXCIuL3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50XCI7XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGdyb3VwZWQgb3Igbm90IGdyb3VwZWQuICBUaGUgZGF0YSBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gYW4gYXJyYXksIG9yIGZyb20gYW4gZXh0ZXJuYWxcclxuICogZGF0YSBjYWxsIHVzaW5nIGpwYS1zZXJ2aWNlcy5cclxuICovXHJcbkBDb21wb25lbnRUeXBlKFwiU2VhcmNoTGlzdENvbXBvbmVudFwiKVxyXG5AQ29tcG9uZW50KFxyXG4gIHtcclxuICAgIHNlbGVjdG9yOiBcImhjaS1zZWFyY2gtbGlzdFwiLFxyXG4gICAgc3R5bGVzOiBbXHJcbiAgICAgIGBcclxuICAgICAgICAucmVzdWx0cy1jb3VudCB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ncmV5d2FybS1tZWRkYXJrKTtcclxuICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMTcuM3B4O1xyXG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAxOHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZvcm1hdC1ib3R0b20tcGFkZGluZyB7XHJcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjVweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdltpZF49J3Jvdy0nXTpudGgtY2hpbGQoZXZlbikge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUtbWVkaXVtKSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2W2lkXj0ncm93LSddIHtcclxuICAgICAgICAgIGJvcmRlcjogMCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Q6Om5nLWRlZXAgZGl2LnJvdy1wYXJlbnQuYWN0aXZlIHtcclxuICAgICAgICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZXdhcm12aXZpZC1saWdodGVzdCkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIC5yaS1zaWRlYmFyLWNlbGwge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcbiAgICAgIGBcclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UmVzdWx0c0NvdW50ICYmIHNlYXJjaFJlc3VsdE1lc3NhZ2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJyZXN1bHRzLWNvdW50XCIgW25nQ2xhc3NdPVwieyAnZm9ybWF0LWJvdHRvbS1wYWRkaW5nJzogdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID09PSAnJyB9XCI+XHJcbiAgICAgICAgICB7eyB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBzY3JvbGxhYmxlXCI+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwibm8tcmVzdWx0cy1mb3VuZFwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInNlYXJjaC10aXRsZVwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggcHMtM1wiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBpZD1cInJlc3VsdC1saXN0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIiBbY2xhc3MueS1oaWRkZW5dPVwic2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICAgIDxoY2ktYnVzeSBbYnVzeVN1YmplY3RzXT1cImxvYWRpbmdTdWJqZWN0c1wiIHBhcmVudFNlbGVjdG9yPVwiLnNjcm9sbGFibGVcIiBbaWNvbl09XCJidXN5SWNvblwiPjwvaGNpLWJ1c3k+XHJcbiAgICAgICAgICAgICAgPCEtLSBObyBncm91cGluZyAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWdyb3VwaW5nLmZpZWxkcyB8fCBncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3dHcm91cC5yZ1Jvd3NbMF0pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7Y2hhbmdlRGV0ZWN0aW9uOiByb3dSZWZyZXNofVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3dHcm91cC5yZ1Jvd3NbMF0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3dHcm91cC5yZ1Jvd3NbMF19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93R3JvdXAucmdSb3dzWzBdfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEdyb3VwaW5nIHdpdGggaW5saW5lIGV4cGFuc2lvbiAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBpbmcuZmllbGRzICYmIGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwICYmICFzZWxlY3RlZFJvd0dyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dHcm91cCBvZiB2aWV3RGF0YTsgbGV0IGkgPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBbaWRdPVwiZ2V0Um93R3JvdXBJZChyb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcGFyZW50IG5hdi1pdGVtIGdyb3VwIHt7Z3JvdXBDbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHJvd0dyb3VwLCBjbXB0OiBjbXB0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0dyb3VwLnJnRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWNvbnRhaW5lclwiIChjbGljayk9XCJvbkdyb3VwQ2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicm91dGUocm93R3JvdXAsIHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2NoYW5nZURldGVjdGlvbjogcm93UmVmcmVzaH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBHcm91cGluZyB3aXRoIHNlcGFyYXRlIGluZGl2aWR1YWwgZXhwYW5zaW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cGluZy5maWVsZHMgJiYgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dHcm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAjZ3JvdXBTZWxlY3RlZFBhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1zZWxlY3RlZC1wYXJlbnQgZmxleC1jb2x1bW4ge3tncm91cENsYXNzfX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cImdldFJvd0dyb3VwSWQoc2VsZWN0ZWRSb3dHcm91cClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXBhcmVudCBuYXYtaXRlbSBncm91cCBhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgc2VsZWN0ZWRSb3dHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOyBjb250ZXh0OiB7cm93R3JvdXA6IHNlbGVjdGVkUm93R3JvdXAsIGNtcHQ6IGNtcHR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2ICNzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGlkPVwic2VsZWN0ZWQtZ3JvdXAtY29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4geS1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2Ygc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJyb3V0ZShyb3dHcm91cCwgcm93KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIFBhZ2luZyBmb290ZXIgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInBhZ2luZy5wYWdlU2l6ZSA+IDBcIiBjbGFzcz1cImQtZmxleCBmbGV4LXNocmluay0wIHBhZ2luZy1mb290ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gcHMtMyBwZS0zXCJcclxuICAgICAgICAgICAgIHN0eWxlPVwibWluLWhlaWdodDogMXJlbTsgYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VGaXJzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mYXN0LWJhY2t3YXJkIGZhLXhzXCI+PC9pPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VQcmV2aW91cygpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSAwXCI+PGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1iYWNrd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZTogMC44cmVtO1wiPnt7cGFnaW5nLnBhZ2UgKyAxfX0gb2Yge3twYWdpbmcubnVtUGFnZXN9fTwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IChjbGljayk9XCJkb1BhZ2VOZXh0KClcIiBjbGFzcz1cImQtZmxleCBtdC0xIG1iLTFcIiBbY2xhc3MuZGlzYWJsZWRdPVwicGFnaW5nLnBhZ2UgPT09IHBhZ2luZy5udW1QYWdlcyAtIDFcIj5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlTGFzdCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSBwYWdpbmcubnVtUGFnZXMgLSAxXCI+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZhc3QtZm9yd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIERlZmF1bHQgdGVtcGxhdGUgZm9yIGEgZ3JvdXAgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBUZW1wbGF0ZSBsZXQtcm93R3JvdXA9XCJyb3dHcm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3ctMSBwcy0yXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBtZS1hdXRvXCI+e3tnZXRHcm91cERpc3BsYXkocm93R3JvdXApfX08L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBjbGFzcz1cImQtZmxleCBtZS0xXCIgc3R5bGU9XCJhbGlnbi1pdGVtczogY2VudGVyO1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlOyBlbHNlIHBsdXNUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbWludXMgZmEtc20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3BsdXNUZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgZmEtc20gbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgKHt7cm93R3JvdXAucmdDb3VudH19KVxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDwhLS0gRGVmYXVsdCB0ZW1wbGF0ZSBmb3IgYW4gaW5kaXZpZHVhbCBzZWxlY3RlZCBncm91cCAtLT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGUgbGV0LXJvd0dyb3VwPVwicm93R3JvdXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93LTEgcHMtMlwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTNcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1sZXZlbC11cC1hbHRcIiBkYXRhLWZhLXRyYW5zZm9ybT1cImZsaXAtaFwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXdlaWdodC1ib2xkIG1lLWF1dG9cIj57e2dldEdyb3VwRGlzcGxheShyb3dHcm91cCl9fTwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgYFxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoTGlzdENvbXBvbmVudCBleHRlbmRzIE5hdkNvbXBvbmVudCB7XHJcblxyXG4gIHNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBcIlwiO1xyXG5cclxuICAvLyBUaGUgZGF0YSB0aGF0IGlzIGFjdHVhbGx5IHJlbmRlcmVkLlxyXG4gIHZpZXdEYXRhOiBSb3dHcm91cFtdO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byB0aGUgc2VhcmNoIGxpc3QgY29udHJvbGxlciBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGNvbnRyb2xsZXI6IFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFcIikgYm91bmREYXRhOiBPYmplY3RbXTtcclxuXHJcbiAgLy8gQSBzdWJqZWN0IHRoYXQgcmVwcmVzZW50cyBhbiBhcnJheSBvZiBkYXRhLlxyXG4gIEBJbnB1dChcImRhdGFTdWJqZWN0XCIpIGRhdGFTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8T2JqZWN0W10+O1xyXG5cclxuICAvLyBBIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGluIGEgSGNpR3JpZER0byBhbmQgcmV0dXJucyBhIEhjaURhdGFEdG8gd2hpY2ggd3JhcHMgYW4gYXJyYXkgb2YgZGF0YS5cclxuICBASW5wdXQoXCJkYXRhQ2FsbFwiKSBleHRlcm5hbERhdGFDYWxsOiAoZHRvOiBIY2lHcmlkRHRvKSA9PiBPYnNlcnZhYmxlPEhjaURhdGFEdG8+O1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBzdWJqZWN0cyB3aXRoIGJvb2xlYW5zIHRvIGNvbnRyb2wgdGhlIGhjaS1idXN5IG92ZXJsYXlpbmcgdGhlIHNlYXJjaC1saXN0LlxyXG4gIEBJbnB1dCgpIGxvYWRpbmdTdWJqZWN0czogU3ViamVjdDxib29sZWFuPltdO1xyXG5cclxuICAvLyBBbiBhcnJheSBvZiBib29sZWFucyB0byBjb250cm9sIHRoZSBoY2ktYnVzeSBvdmVybGF5aW5nIHRoZSBzZWFyY2gtbGlzdC5cclxuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuW10gPSBbZmFsc2VdO1xyXG5cclxuICAvLyBJZiBjbGlja2luZyBhIHJvdyBjaGFuZ2VzIGEgcm91dGUsIHRoaXMgZnVuY3Rpb24gc3BlY2lmaWVzIHRoZSByb3V0ZSB0byB1c2UuXHJcbiAgQElucHV0KCkgcm91dGU6IChyb3dHcm91cDogYW55LCByb3c6IGFueSkgPT4gYW55W107XHJcblxyXG4gIC8vIEV4cGFuZCB0aGUgc2VsZWN0ZWQgcm93IGdyb3VwIGFzIGl0cyBvd24gc2NyZWVuLCBvciBzaG93IHJvd3MgdW5kZXIgc2VsZWN0ZWQgcm93IGdyb3VwcyBpbiB0aGUgc2FtZSB2aWV3LlxyXG4gIEBJbnB1dCgpIGlubGluZUV4cGFuZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBXaXRob3V0IGFueSBvdGhlciBtZXRhZGF0YSBmb3Igd2hhdCBhIHJvdyBpcywgcHJvdmlkZSB0aGUgZmllbGQgdG8gYmUgdXNlZCBmb3IgdGhlIGlkLlxyXG4gIC8vIFRoaXMgaXMgYWN0dWFsbHkgdGhlIGZpZWxkIHRoYXQgaGFzIHRoZSAoZGVmaW5lZCkgcm93SWQgLS0gd2hhdGV2ZXIgaXQgaXMgdW5kZXIgZGlmZmVyZW50XHJcbiAgLy8gc3RydWN0dXJlczogaWRQYXRpZW50LCBpZE1lZGljYWxFdmVudCBldGNcclxuICBASW5wdXQoKSByb3dJZDogYW55O1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IGdyb3VwIHBhcmVudC5cclxuICBASW5wdXQoKSBncm91cENsYXNzOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICAvLyBDc3MgY2xhc3MgYXBwbGllZCB0byB0aGUgcm93IHBhcmVudC5cclxuICBASW5wdXQoKSByb3dDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLy8gQSB0ZW1wbGF0ZSBmb3IgaG93IHRvIGRpc3BsYXkgcm93IGdyb3VwIGluZm8gaWYgdXNpbmcgdGhlIGRlZmF1bHQgdGVtcGxhdGUuICBlLmcuIFwibGFzdE5hbWUsIGZpcnN0TmFtZVwiIGZpZWxkIG5hbWVzIGdldCByZXBsYWNlZCB3aXRoIHZhbHVlcy5cclxuICBASW5wdXQoKSBncm91cERpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnRcclxuICBASW5wdXQoKSBjbG9zZU90aGVyczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8vIFRoZSBsaXN0IG9mIGZpZWxkcyB0byBncm91cCBieS5cclxuICBASW5wdXQoKSBncm91cGluZ0ZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8gZGVsaW1pdGVyIGZvciBnZXRHcm91cERpc3BsYXlcclxuICBASW5wdXQoKSBkZWxpbWl0ZXI6IHN0cmluZyA9IFwiLCBcIjtcclxuXHJcbiAgLy8gVE9ETzogUmVpbXBsZW1lbnQgaWYgd2Ugd2FudCB1c2VycyB0byBiZSBhYmxlIHRvIGNvbnRyb2wgZ3JvdXBpbmcuXHJcbiAgQElucHV0KCkgZ3JvdXBCeUFsbG93ZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93IGdyb3VwcyBvciByb3dzIGlmIG5vIGdyb3VwaW5nLlxyXG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXI7XHJcblxyXG4gIC8vIFRoZSBwYWdlIHNpemUgb2Ygcm93cyBpbiBhIHNlbGVjdGVkIGdyb3VwLlxyXG4gIEBJbnB1dCgpIGdyb3VwUGFnZVNpemU6IG51bWJlciA9IDUwO1xyXG5cclxuICAvLyBUaGUgbnVtYmVyIG9mIHBhZ2VzIG9mIHJvd3MgdG8gY2FjaGUgaW50ZXJuYWxseSBiZWZvcmUgYW4gZXh0ZXJuYWwgY2FsbCBpcyBtYWRlLlxyXG4gIEBJbnB1dCgpIGdyb3VwQ2FjaGVOdW1QYWdlczogbnVtYmVyO1xyXG5cclxuICAvLyBBIHJlZmVyZW5jZSB0byBhIHBhcmVudCBkcm9wZG93biBpZiBhcHBsaWNhYmxlLlxyXG4gIEBJbnB1dCgpIGRyb3Bkb3duOiBOZ2JEcm9wZG93bjtcclxuXHJcbiAgLy9XaGljaCBpY29uIHRvIHVzZSBmb3IgdGhlIGJ1c3kgc3Bpbm5lclxyXG4gIEBJbnB1dCgpIGJ1c3lJY29uOiBzdHJpbmcgPSBcImhjaSBmYS1jb3JlIGZhLXNwaW5cIjtcclxuXHJcbiAgQElucHV0KCkgc2hvd1Jlc3VsdHNDb3VudDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyBJZiBubyBvbkdyb3VwQ2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdEdyb3VwQ2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSA9PiB2b2lkID0gKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHtcclxuICAgIGNtcHQuc2V0R3JvdXBFeHBhbmRlZChldmVudCwgcm93R3JvdXApO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBDbGljay5lbWl0KHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICByb3dHcm91cDogcm93R3JvdXBcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIG9uR3JvdXBDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXApID0+IHZvaWQ7XHJcblxyXG4gIC8vIElmIG5vIG9uUm93Q2xpY2sgZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoaXMgaXMgdXNlZC4gIFRoZSBvdmVycmlkaW5nIGZ1bmN0aW9uIHNob3VsZCBzdGlsbCBjYWxsIHRoaXMuXHJcbiAgZGVmYXVsdFJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93ID0gcm93O1xyXG5cclxuICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgcm93OiByb3csXHJcbiAgICAgIHJvd0dyb3VwOiByb3dHcm91cFxyXG4gICAgfSk7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfTtcclxuICBASW5wdXQoKSBvblJvd0NsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCwgcm93OiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIEBJbnB1dCgpIGdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgZ3JvdXBTZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KCkgb25Hcm91cENsb3NlOiBGdW5jdGlvbjtcclxuXHJcbiAgQE91dHB1dCgpIGdyb3VwQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBkYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwVGVtcGxhdGVcIiwge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KSBkZWZhdWx0R3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZVwiLCB7XHJcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcclxuICAgIHN0YXRpYzogdHJ1ZVxyXG4gIH0pIGRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIHNlbGVjdGVkUm93OiBhbnk7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cDogUm93R3JvdXA7XHJcbiAgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgaW5uZXJSb3dHcm91cENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIC8vIEdyaWQgRFRPIGluZm8gbmVlZGVkIHRvIGJ1aWxkIGV4dGVybmFsIGRhdGEgcmVxdWVzdHMuXHJcbiAgc29ydHM6IEhjaVNvcnREdG9bXSA9IFtdO1xyXG4gIGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcbiAgcGFnaW5nOiBIY2lQYWdpbmdEdG8gPSBuZXcgSGNpUGFnaW5nRHRvKDAsIC0xKTtcclxuICBncm91cGluZzogSGNpR3JvdXBpbmdEdG8gPSBuZXcgSGNpR3JvdXBpbmdEdG8oW10pO1xyXG5cclxuICAvL2dsb2JhbFJvd0dyb3VwTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuICBncm91cGVkRGF0YVNldCA9IFtdO1xyXG5cclxuICBwYWdpbmdTdWJqZWN0OiBTdWJqZWN0PEhjaVBhZ2luZ0R0bz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaVBhZ2luZ0R0bz4odGhpcy5wYWdpbmcpO1xyXG5cclxuICAvLyBBIGR1bW15IG51bWJlciB0aGF0IGluY3JlbWVudHMgYmFzZWQgb24gc2VsZWN0aW9uIGNoYW5nZXMuICBGb3JjZXMgcm91dGVyTGlua0FjdGl2ZSB0byByZWNoZWNrLlxyXG4gIHJvd1JlZnJlc2g6IG51bWJlciA9IDA7XHJcblxyXG4gIGJ1c3k6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbGFzdFNjcm9sbFRvcDogbnVtYmVyID0gLTE7XHJcbiAgbGFzdFNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gIHNldFNjcm9sbFRvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50ID0gdGhpcztcclxuXHJcbiAgbGFzdEV2ZW50OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICAgICAgICAgICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgICAgICAgICAgIG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlOiBOYXZpZ2F0aW9uR2xvYmFsU2VydmljZSxcclxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcbiAgICBzdXBlcihlbGVtZW50UmVmLCByZW5kZXJlciwgcmVzb2x2ZXIsIG5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgaWYgKCFuYXZpZ2F0aW9uU2VydmljZSkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmV3IE5hdmlnYXRpb25TZXJ2aWNlKG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZCgpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNldENvbmZpZyh7fSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGlkIGZvciB0aGUgcm93IGdyb3VwIGJhc2VkIHVwb24gdGhlIGdyb3VwIGtleSBvciBpZiB1bmRlZmluZWQsIHRoZSBmaXJzdCByb3cncyBpZC4gIGUuZy4gXCJyb3ctZ3JvdXAtYm9iLXNtaXRoXCJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dHcm91cElkKHJvd0dyb3VwOiBSb3dHcm91cCk6IHN0cmluZyB7XHJcbiAgICBpZiAocm93R3JvdXAucmdLZXkpIHtcclxuICAgICAgcmV0dXJuIFwicm93LWdyb3VwLVwiICsgcm93R3JvdXAucmdLZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgcm93SWQ6IHN0cmluZyA9IHRoaXMuZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKTtcclxuICAgICAgcmV0dXJuIHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwicm93LWdyb3VwLVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgcm93IGlkLiAgZS5nLiBcInJvdy0xXCIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcm93XHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRSb3dJZChyb3c6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5yb3dJZCkge1xyXG4gICAgICByZXR1cm4gXCJyb3ctXCIgKyA8c3RyaW5nPjxhbnk+cm93W3RoaXMucm93SWRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwicm93LXVuZGVmaW5lZFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gaW5pdCwgbGlzdGVuIGZvciBsb2FkaW5nIHN1YmplY3RzIGFuZCBsaXN0ZW4gZm9yIHBhZ2UgY2hhbmdlcy5cclxuICAgKi9cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLnN1YnNjcmliZSgoYnVzeTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IGJ1c3k7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nU3ViamVjdC5zdWJzY3JpYmUoKHBhZ2luZzogSGNpUGFnaW5nRHRvKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnaW5nID0gcGFnaW5nO1xyXG4gICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gaW5wdXRzIGNoYW5nZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U2ltcGxlQ2hhbmdlc30gY2hhbmdlc1xyXG4gICAqL1xyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG4gICAgaWYgKGNoYW5nZXNbXCJncm91cGluZ0ZpZWxkc1wiXSkge1xyXG4gICAgICBsZXQgY2hhbmdlOiBTaW1wbGVDaGFuZ2UgPSA8U2ltcGxlQ2hhbmdlPmNoYW5nZXNbXCJncm91cGluZ0ZpZWxkc1wiXTtcclxuICAgICAgaWYgKGNoYW5nZS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhjaGFuZ2UuY3VycmVudFZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nLnNldEZpZWxkcyhbXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkYXRhIG9ubHkgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBmdWxseSBpbml0aWFsaXplZCBhbmQgaXMgcmVuZGVyZWQuXHJcbiAgICovXHJcbiAgY2hlY2tJbml0aWFsaXplZCgpIHtcclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcclxuICAgICAgdGhpcy5wb3N0SW5pdCgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YVN1YmplY3QpIHtcclxuICAgICAgICAvL01heSBhcyB3ZWxsIG1ha2UgaXQgc3BpbiB3aGlsZSBwcm9jZXNzaW5nLCBhcyB3ZWxsIGFzIGxvYWRpbmcuIE90aGVyd2lzZSBpdCBsb29rcyBmcm96ZW5cclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nU3ViamVjdHMpIHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0XHJcbiAgICAgICAgICAucGlwZShkZWxheSgwKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IE9iamVjdFtdKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcblxyXG4gICAgICAgICAgICAvL05vdyBkb25lIGxvYWRpbmdcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcG9uIG5ldyByb3dQYXJlbnQgYmVpbmcgc2V0LCBhZGQgYW55IGNsYXNzZXMgaWYgcm93Q2xhc3MgaXMgZGVmaW5lZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlMaXN0PEVsZW1lbnRSZWY+fSByb3dQYXJlbnRzXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZHJlbihcInJvd1BhcmVudFwiLCB7cmVhZDogRWxlbWVudFJlZn0pIHNldCByb3dQYXJlbnRzKHJvd1BhcmVudHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPikge1xyXG4gICAgaWYgKHJvd1BhcmVudHMgJiYgdGhpcy5yb3dDbGFzcykge1xyXG4gICAgICByb3dQYXJlbnRzLmZvckVhY2goKGU6IEVsZW1lbnRSZWYpID0+IHtcclxuICAgICAgICBsZXQgY2xhc3Nlczogc3RyaW5nW10gPSB0aGlzLnJvd0NsYXNzLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICBmb3IgKGxldCBjbGFzc05hbWUgb2YgY2xhc3Nlcykge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yb3dSZWZyZXNoICs9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwb3N0SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbXBvbmVudC5wb3N0SW5pdDogXCIgKyB0aGlzLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5nZXRQYXJlbnQoKSkge1xyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIgPSA8U2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQ+dGhpcy5nZXRQYXJlbnQoKS5nZXRDb21wb25lbnRCeVR5cGUoXCJTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb250cm9sbGVyKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29tcG9uZW50OiB1c2luZyBjb250cm9sbGVyXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuYWRkU2VhcmNoTGlzdCh0aGlzLnRpdGxlKTtcclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5maWx0ZXJzU3ViamVjdC5zdWJzY3JpYmUoKGZpbHRlcnM6IEhjaUZpbHRlckR0b1tdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgICB0aGlzLnJlc2V0UGFnaW5nKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNvcnRzU3ViamVjdC5zdWJzY3JpYmUoKHNvcnRzOiBIY2lTb3J0RHRvW10pID0+IHtcclxuICAgICAgICB0aGlzLnNvcnRzID0gc29ydHM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Quc3Vic2NyaWJlKCh0aXRsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwic2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5zdWJzY3JpYmU6IFwiICsgdGhpcy50aXRsZSArIFwiLCBcIiArIHRpdGxlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB2aXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGl0bGUgJiYgdGl0bGUgJiYgdGhpcy50aXRsZSAhPT0gdGl0bGUpIHtcclxuICAgICAgICAgIHZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIHJlc2V0IHBhZ2luZyBhbmQgZmlyZXNcclxuICAgKi9cclxuICByZXNldFBhZ2luZygpIHtcclxuICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBjb25maWcgd2l0aCBvcHRpb25zIGFuZCByZS1mZXRjaGVzIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICovXHJcbiAgdXBkYXRlQ29uZmlnKGNvbmZpZykge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGRhdGVDb25maWdcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBjb25maWcpO1xyXG5cclxuICAgICAgaWYgKGNvbmZpZy5yb3V0ZSkge1xyXG4gICAgICAgIHRoaXMucm91dGUgPSBjb25maWcucm91dGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cEJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuZ3JvdXBCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0cykge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBjb25maWcuc29ydHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cGluZ0ZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmdGaWVsZHMgPSBjb25maWcuZ3JvdXBpbmdGaWVsZHM7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoY29uZmlnLmdyb3VwaW5nRmllbGRzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnBhZ2VTaXplKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGNvbmZpZy5wYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlU2l6ZShjb25maWcucGFnZVNpemUpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBEaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5ncm91cERpc3BsYXkgPSBjb25maWcuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGVsaW1pdGVyKSB7XHJcbiAgICAgICAgdGhpcy5kZWxpbWl0ZXIgPSBjb25maWcuZGVsaW1pdGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuY2xvc2VPdGhlcnMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuY2xvc2VPdGhlcnMgPSBjb25maWcuY2xvc2VPdGhlcnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFRlbXBsYXRlID0gY29uZmlnLmdyb3VwVGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGVkVGVtcGxhdGUgPSBjb25maWcuZ3JvdXBUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gY29uZmlnLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLml0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuaXRlbVRlbXBsYXRlID0gY29uZmlnLml0ZW1UZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRhdGEpIHtcclxuICAgICAgICB0aGlzLmJvdW5kRGF0YSA9IGNvbmZpZy5kYXRhO1xyXG4gICAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhU3ViamVjdCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVN1YmplY3QgPSBjb25maWcuZGF0YVN1YmplY3Q7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhQ2FsbCkge1xyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCA9IGNvbmZpZy5kYXRhQ2FsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsaWNrID0gY29uZmlnLm9uR3JvdXBDbGljaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmlubGluZUV4cGFuZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pbmxpbmVFeHBhbmQgPSBjb25maWcuaW5saW5lRXhwYW5kO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDbGFzcykge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBDbGFzcyA9IGNvbmZpZy5ncm91cENsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93Q2xhc3MpIHtcclxuICAgICAgICB0aGlzLnJvd0NsYXNzID0gY29uZmlnLnJvd0NsYXNzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucm93SWQpIHtcclxuICAgICAgICB0aGlzLnJvd0lkID0gY29uZmlnLnJvd0lkO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Hcm91cENsaWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2xpY2sgPSBjb25maWcub25Hcm91cENsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcub25Sb3dDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Sb3dDbGljayA9IGNvbmZpZy5vblJvd0NsaWNrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBjb25maWcubG9hZGluZ1N1YmplY3RzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBQYWdlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBQYWdlU2l6ZSA9IGNvbmZpZy5ncm91cFBhZ2VTaXplO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5ncm91cENhY2hlTnVtUGFnZXMgPj0gMikge1xyXG4gICAgICAgICAgdGhpcy5ncm91cENhY2hlTnVtUGFnZXMgPSBjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJncm91cENhY2hlTnVtUGFnZXMgbXVzdCBiZSAyIG9yIG1vcmUuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlID0gY29uZmlnLm9uR3JvdXBDbG9zZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmJ1c3lJY29uKSB7XHJcbiAgICAgICAgdGhpcy5idXN5SWNvbiA9IGNvbmZpZy5idXN5SWNvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5zaG93UmVzdWx0c0NvdW50KSB7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzdWx0c0NvdW50ID0gY29uZmlnLnNob3dSZXN1bHRzQ291bnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMub25Hcm91cENsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Hcm91cENsaWNrID0gdGhpcy5kZWZhdWx0R3JvdXBDbGljaztcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5vblJvd0NsaWNrKSB7XHJcbiAgICAgIHRoaXMub25Sb3dDbGljayA9IHRoaXMuZGVmYXVsdFJvd0NsaWNrO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pdGVtVGVtcGxhdGUpIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiU2VhcmNoTGlzdENvbXBvbmVudDogQW4gaXRlbVRlbXBsYXRlIG11c3QgYmUgcHJvdmlkZWQhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ncm91cFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEdyb3VwVGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gdGhpcy5kZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmV4dGVybmFsRGF0YUNhbGwpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHMgPSBbbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSldO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKTtcclxuXHJcbiAgICB0aGlzLnNldERhdGEoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgZGF0YSBpZiBhbiBhcnJheSwgY2FsbHMgdGhlIGRhdGEgaWYgZXh0ZXJuYWwgY2FsbC5cclxuICAgKi9cclxuICBzZXREYXRhKGRhdGE/OiBPYmplY3RbXSk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJzZXREYXRhXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhID0gZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCkge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKHRoaXMuZmlsdGVycywgdGhpcy5zb3J0cywgdGhpcy5wYWdpbmcsIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCkpKVxyXG4gICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlRGF0YShleHRlcm5hbERhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVEYXRhKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgYXJyYXkgdGhhdCB0aGUgaW50ZXJmYWNlIHVzZXMgdG8gcmVuZGVyIChyZWdhcmRsZXNzIG9mIHNvdXJjZSkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hjaURhdGFEdG99IGV4dGVybmFsRGF0YVxyXG4gICAqL1xyXG4gIGdlbmVyYXRlRGF0YShleHRlcm5hbERhdGE/OiBIY2lEYXRhRHRvKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcImdlbmVyYXRlRGF0YVwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhleHRlcm5hbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChleHRlcm5hbERhdGEpIHtcclxuICAgICAgdGhpcy5ib3VuZERhdGEgPSBleHRlcm5hbERhdGEuZGF0YTtcclxuICAgICAgdGhpcy5zZXRSZXN1bHRNZXNzYWdlKHRoaXMuYm91bmREYXRhKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0RGF0YVNpemUoZXh0ZXJuYWxEYXRhLmdyaWREdG8ucGFnaW5nLmRhdGFTaXplKTtcclxuXHJcbiAgICAgIC8vIENyZWF0ZSByb3cgZ3JvdXBzLlxyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIGxldCByb3dHcm91cDogUm93R3JvdXA7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm91bmREYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcm93R3JvdXAgPSBuZXcgUm93R3JvdXAodW5kZWZpbmVkLCB0aGlzLmJvdW5kRGF0YVtpXSwgKGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICYmIGV4dGVybmFsRGF0YS5kYXRhQ291bnRzICE9PSBudWxsKSA/IGV4dGVybmFsRGF0YS5kYXRhQ291bnRzW2ldIDogMCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBncm91cGluZ0ZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2dyb3VwaW5nRmllbGRdID0gdGhpcy5ib3VuZERhdGFbaV1bZ3JvdXBpbmdGaWVsZF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnZpZXdEYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDcmVhdGUgYW5kIHBvcHVsYXRlIHJvdyBncm91cHMuXHJcbiAgICAgIHRoaXMucG9wdWxhdGVGcm9tQm91bmREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQoT2JqZWN0LmFzc2lnbih7dHlwZTogXCJub25lXCJ9LCB0aGlzLmxhc3RFdmVudCwge1xyXG4gICAgICBwYWdpbmc6IHRoaXMucGFnaW5nLFxyXG4gICAgICBuVmlld0RhdGE6IHRoaXMudmlld0RhdGEubGVuZ3RoXHJcbiAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgaWYgdGhlIGRhdGEgaXMgYW4gYXJyYXkgKG5vdCBleHRlcm5hbCkuXHJcbiAgICovXHJcbiAgcG9wdWxhdGVGcm9tQm91bmREYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJwb3B1bGF0ZUZyb21Cb3VuZERhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEpIHtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYm91bmREYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiQm91bmQgRGF0YSBsZW5ndGggZm91bmQgYXMgMFwiKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0TnVtUGFnZXMoMSk7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKDApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwcmVwYXJlZERhdGEgPSBbXTtcclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBbXTtcclxuXHJcbiAgICBsZXQgcm93R3JvdXBNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG5cclxuICAgIGxldCBkb1Jvd0dyb3VwaW5nOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuICAgIGZvciAobGV0IHJvdyBvZiB0aGlzLmJvdW5kRGF0YSkge1xyXG4gICAgICBsZXQgZ3JvdXBLZXk6IHN0cmluZztcclxuICAgICAgaWYgKGRvUm93R3JvdXBpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgZ3JvdXBLZXkgPSAoZ3JvdXBLZXkpID8gZ3JvdXBLZXkgKyBcIjpcIiArIHJvd1tmaWVsZF0gOiByb3dbZmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmlsdGVycyAmJiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCBpbmNsdWRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuZmlsdGVycykge1xyXG4gICAgICAgICAgaWYgKCFmaWx0ZXIudmFsaWQpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaCAmJiB0aGlzLmNvbnRyb2xsZXIuYWR2YW5jZWRTZWFyY2gubGVuZ3RoID4gMCAmJiAhdGhpcy5jb250cm9sbGVyLmFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXIpIHtcclxuICAgICAgICAgIC8vICBBZHZhbmNlZCBzZWFyY2ggZG9lcyBub3QgYXV0byBmaWx0ZXIgYnkgZGVmYXVsdFxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJWYWx1ZXMgPSBmaWx0ZXIuZ2V0VmFsdWUoKS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJGaWVsZHMgPSBmaWx0ZXIuZ2V0RmllbGQoKS5zcGxpdChcIiBvciBcIik7XHJcblxyXG4gICAgICAgICAgICBsZXQgaW5uZXJJbmNsdWRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIGZpbHRlckZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGlmIChyb3dbZmllbGRdICYmIHR5cGVvZiByb3dbZmllbGRdID09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSA9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiByb3dbZmllbGRdIGluc3RhbmNlb2YgRGF0ZSB8fCBmaWx0ZXIuZ2V0RGF0YVR5cGUoKSA9PSBcImRhdGVcIikge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgZmlsdGVyVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKG5ldyBEYXRlKHJvd1tmaWVsZF0pKS5nZXRUaW1lKCkgPT0gKG5ldyBEYXRlKHZhbHVlKSkuZ2V0VGltZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgdHlwZW9mIHJvd1tmaWVsZF0gPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgbXVsdGlwbGUgc2VhcmNoIHN0cmluZ3NcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodmFsdWUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoaW5uZXJJbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghaW5uZXJJbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgaW5jbHVkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZihpbmNsdWRlKSB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFpbmNsdWRlKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkb1Jvd0dyb3VwaW5nKSB7XHJcbiAgICAgICAgaWYgKHJvd0dyb3VwTWFwLmdldChncm91cEtleSkgPj0gMCkge1xyXG4gICAgICAgICAgcHJlcGFyZWREYXRhW3Jvd0dyb3VwTWFwLmdldChncm91cEtleSldLnJnUm93cy5wdXNoKHJvdyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJvd0dyb3VwTWFwLnNldChncm91cEtleSwgcHJlcGFyZWREYXRhLmxlbmd0aCk7XHJcblxyXG4gICAgICAgICAgbGV0IHJvd0dyb3VwOiBSb3dHcm91cCA9IG5ldyBSb3dHcm91cChncm91cEtleSwgcm93KTtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwW2ZpZWxkXSA9IHJvd1tmaWVsZF07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcHJlcGFyZWREYXRhLnB1c2gocm93R3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwcmVwYXJlZERhdGEucHVzaChuZXcgUm93R3JvdXAoZ3JvdXBLZXksIHJvdykpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3RoaXMuZ2xvYmFsUm93R3JvdXBNYXAgPSByb3dHcm91cE1hcDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHByZXBhcmVkRGF0YS5zb3J0KChhOiBSb3dHcm91cCwgYjogUm93R3JvdXApID0+IHtcclxuICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICBpZiAoc29ydC5nZXRBc2MoKSkge1xyXG4gICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cGluZy5nZXRGaWVsZHMoKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA8IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPiBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPiBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldIDwgYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB2O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdyb3VwaW5nLmdldEZpZWxkcygpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCByb3dHcm91cCBvZiBwcmVwYXJlZERhdGEpIHtcclxuICAgICAgICAgIHJvd0dyb3VwLnJnUm93cy5zb3J0KChhOiBPYmplY3QsIGI6IE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdjogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5pc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydC5nZXRGaWVsZCgpKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA8IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKGFbc29ydC5nZXRGaWVsZCgpXSA+IGJbc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHYgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gMTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2ICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG5cclxuICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQgPSBwcmVwYXJlZERhdGE7XHJcblxyXG4gICAgaWYgKHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkgPiAwKSB7XHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMucGFnaW5nLmdldFBhZ2UoKSAqIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCk7IGkgPCBNYXRoLm1pbihwcmVwYXJlZERhdGEubGVuZ3RoLCAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpICsgMSkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy52aWV3RGF0YS5wdXNoKHByZXBhcmVkRGF0YVtpXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gcHJlcGFyZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IHJvd0dyb3VwIG9mIHRoaXMudmlld0RhdGEpIHtcclxuICAgICAgcm93R3JvdXAucmdDb3VudCA9IHJvd0dyb3VwLnJnUm93cy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHNvcnQgZmllbGQgaXMgYSBncm91cGluZyBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKi9cclxuICBpc1NvcnRGaWVsZEdyb3VwRmllbGQoc29ydEZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5ncm91cGluZyB8fCAhdGhpcy5ncm91cGluZy5maWVsZHMgfHwgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGlmIChzb3J0RmllbGQgPT09IGdyb3VwRmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VsZWN0IGEgZ3JvdXAgb2YgZGF0YS4gIENhbGwgdGhlIGZpcnN0IHBhZ2Ugb2YgZGF0YSB1cG9uIGV4cGFuZGluZy4gIElmIGFscmVhZHkgZXhwYW5kZWQsIGNsb3NlIGFuZCBnbyBiYWNrIHRvIHRoZVxyXG4gICAqIGxpc3Qgb2YgZ3JvdXBzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKi9cclxuICBzZXRHcm91cEV4cGFuZGVkKGV2ZW50OiBNb3VzZUV2ZW50LCByb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0R3JvdXBFeHBhbmRlZDogXCIgKyByb3dHcm91cC5yZ0V4cGFuZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsICYmICFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgcm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgICAgcm93R3JvdXAucmdQYWdlTWF4ID0gMDtcclxuXHJcbiAgICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0bygwLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICAgIHJvd0dyb3VwLnJnUm93cyA9IGV4dGVybmFsRGF0YS5kYXRhO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cCA9IHJvd0dyb3VwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1pbiA9IDA7XHJcbiAgICAgIHJvd0dyb3VwLnJnUGFnZU1heCA9IDA7XHJcbiAgICAgIGlmICghdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSByb3dHcm91cDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50OiBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+KDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsb3Nlc3QoXCIuZ3JvdXAtcGFyZW50XCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgLy9ncm91cFNlbGVjdGVkUGFyZW50LmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG9mKG51bGwpLnBpcGUoZGVsYXkoMjUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLm9uR3JvdXBDbG9zZSkge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIXJvd0dyb3VwLnJnRXhwYW5kZWQgJiYgdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgIC8vZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZ3JvdXBTZWxlY3RlZFBhcmVudCwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmICF0aGlzLmlubGluZUV4cGFuZCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidGhpcy5zZWxlY3RlZFJvd0dyb3VwXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcm93R3JvdXAucmdFeHBhbmRlZCA9ICFyb3dHcm91cC5yZ0V4cGFuZGVkO1xyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBzY3JvbGwgbGlzdGVuZXIgdG8gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICBhZGRHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gLTE7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cCAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdDb3VudCAhPT0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNzZWxlY3RlZC1ncm91cC1jb250YWluZXJcIik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIHRoaXMub25Hcm91cFNjcm9sbC5iaW5kKHRoaXMpLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB0aGUgc2Nyb2xsIGxpc3RlbmVyIGZyb20gdGhlIGdyb3VwIGNvbnRhaW5lci5cclxuICAgKi9cclxuICByZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uR3JvdXBTY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gZm9yIHRoZSBzY3JvbGwgZXZlbnQsIGRldGVybWluZSBpZiB0aGUgc2Nyb2xsIGhpdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgY29udGFpbmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICBvbkdyb3VwU2Nyb2xsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgbGV0IG5ld1Njcm9sbFRvcDogbnVtYmVyID0gTWF0aC5yb3VuZCh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wKTtcclxuICAgICAgbGV0IHNjcm9sbFBvc2l0aW9uOiBudW1iZXIgPSAxO1xyXG4gICAgICBpZiAobmV3U2Nyb2xsVG9wID09PSAwICYmIHNjcm9sbFBvc2l0aW9uICE9PSAwKSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uICE9PSAyICYmIE1hdGguYWJzKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSAobmV3U2Nyb2xsVG9wICsgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm9mZnNldEhlaWdodCkpIDwgMykge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmxhc3RTY3JvbGxQb3NpdGlvbiAhPT0gc2Nyb2xsUG9zaXRpb24gJiYgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPT09IDEpIHtcclxuICAgICAgICBpZiAoc2Nyb2xsUG9zaXRpb24gPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBQcmV2aW91c1BhZ2UoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAyKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwTmV4dFBhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IG5ld1Njcm9sbFRvcDtcclxuICAgICAgdGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIHRvcCwgbG9hZCB0aGUgcHJldmlvdXMgcGFnZSBvZiBncm91cCBkYXRhLlxyXG4gICAqL1xyXG4gIGdyb3VwUHJldmlvdXNQYWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPT09IDApIHtcclxuICAgICAgY29uc29sZS53YXJuKFwiRmlyc3QgcGFnZSBhbHJlYWR5IGxvYWRlZC5cIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZUdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuXHJcbiAgICBsZXQgZ3JvdXBGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IHRoaXMuZmlsdGVycy5zbGljZSgpO1xyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuc2VsZWN0ZWRSb3dHcm91cFtncm91cEZpZWxkXSwgdW5kZWZpbmVkLCBcIkVcIiwgdHJ1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8odGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtIDEsIHRoaXMuZ3JvdXBQYWdlU2l6ZSksIG5ldyBIY2lHcm91cGluZ0R0byh0aGlzLmdyb3VwaW5nLmZpZWxkcywgZmFsc2UpKSlcclxuICAgICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9mKHVuZGVmaW5lZCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwic2Nyb2xsVG9wXCIsIFwiMVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5hZGRHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcbiAgICAgICAgfSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWxEYXRhOiBIY2lEYXRhRHRvKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzID0gZXh0ZXJuYWxEYXRhLmRhdGEuY29uY2F0KHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiAtPSAxO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAmJiB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC0gdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiA+PSB0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLnNwbGljZSh0aGlzLmdyb3VwQ2FjaGVOdW1QYWdlcyAqIHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLT0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gc2Nyb2xsaW5nIGhpdHMgdGhlIGJvdHRvbSwgbG9hZCB0aGUgbmV4dCBwYWdlIG9mIGdyb3VwIGRhdGEuXHJcbiAgICovXHJcbiAgZ3JvdXBOZXh0UGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICgodGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCArIDEpICogdGhpcy5ncm91cFBhZ2VTaXplID49IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ0NvdW50KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkFsbCByb3dzIGFscmVhZHkgbG9hZGVkXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLnNlbGVjdGVkUm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKyAxLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUoZGVsYXkoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MuY29uY2F0KGV4dGVybmFsRGF0YS5kYXRhKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKz0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPj0gdGhpcy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5zcGxpY2UoMCwgdGhpcy5ncm91cFBhZ2VTaXplKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1pbiArPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGZpcnN0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZUZpcnN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VQcmV2aW91cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgLSAxKTtcclxuICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBuZXh0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZU5leHQoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpIDwgdGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpIHtcclxuICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldFBhZ2UoKSArIDEpO1xyXG4gICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR28gdG8gdGhlIGxhc3QgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlTGFzdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEpO1xyXG4gICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWZ0ZXIgcGFnZSB0dXJucywgY2hlY2sgaWYgdGhlIHBhZ2UgaGFzIHRoZSByb3cgdGhhdCBuZWVkIHRvIGJlIGhpZ2hsaWdodGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjaGVja0FjdGl2ZVJvd0lkKCk6IHZvaWQge1xyXG4gICAgLy9pZiBhIHJvdyBpcyBzZWxlY3RlZCwgYW5kIHJvd0lkIGZpZWxkIGlzIHNwZWNpZmllZCAodXN1YWxseSBjb25maWd1cmVkIGJ5IGNvbmZpZylcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93ICYmIHRoaXMucm93SWQpIHtcclxuICAgICAgbGV0IGlkID0gdGhpcy5zZWxlY3RlZFJvd1t0aGlzLnJvd0lkXTtcclxuICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQoaWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25jYXQgZ3JvdXAgYnkgZmllbGRzIHRvIGNvbW1hIGRlbGltaXRlZCB3b3Jkc1xyXG4gICAqIG9yIGRlbGltaXRlciBkZWxpbWl0ZWQgd29yZHMgaWYgdGhlIGRlbGltaW5hdG9yIGhhcyBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Jvd0dyb3VwfSByb3dHcm91cFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwOiBSb3dHcm91cCk6IHN0cmluZyB7XHJcbiAgICBsZXQgZGlzcGxheTogc3RyaW5nO1xyXG5cclxuICAgIGlmICh0aGlzLmdyb3VwRGlzcGxheSkge1xyXG4gICAgICBkaXNwbGF5ID0gdGhpcy5ncm91cERpc3BsYXk7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXkucmVwbGFjZShmaWVsZCwgcm93R3JvdXBbZmllbGRdKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICBpZiAocm93R3JvdXBbZmllbGRdICE9PSBudWxsICYmIHJvd0dyb3VwW2ZpZWxkXSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgZGlzcGxheSA9IChkaXNwbGF5KSA/IGRpc3BsYXkgKyB0aGlzLmRlbGltaXRlciArIHJvd0dyb3VwW2ZpZWxkXSA6IHJvd0dyb3VwW2ZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGlzcGxheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RWxlbWVudFJlZn0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclxyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGQoXCJzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyXCIsIHtcclxuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXHJcbiAgICBzdGF0aWM6IGZhbHNlXHJcbiAgfSkgc2V0IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJTZXR0ZXIoc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcjogRWxlbWVudFJlZikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciAmJiB0aGlzLnNldFNjcm9sbFRvcCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsVG9wID0gKDxIVE1MRWxlbWVudD50aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpKS5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIHRoaXMuc2V0U2Nyb2xsVG9wID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgPSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLmNsb3Nlc3QoXCIuZ3JvdXAtc2VsZWN0ZWQtcGFyZW50XCIpO1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiZGlzcGxheVwiLCBcImZsZXhcIik7XHJcblxyXG4gICAgICBvZihudWxsKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciA9IHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiI2lubmVyUm93R3JvdXBDb250YWluZXJcIik7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIsIFwiaGVpZ2h0XCIsIHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5pbm5lclJvd0dyb3VwQ29udGFpbmVyLCBcIm1pbi1oZWlnaHRcIiwgKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQgKyAzMCkgKyBcInB4XCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsUm93cygpOiB2b2lkIHtcclxuICAgIGxldCBlczogSFRNTEVsZW1lbnRbXSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucm93LXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIGdyb3VwIGNsaWNrIGZ1bmN0aW9uIHRvIGNvbnRyb2wgZGVzZWxlY3Rpb24uXHJcbiAgICovXHJcbiAgZGVzZWxlY3RBbGxHcm91cHMoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgIGZvciAobGV0IGUgb2YgZXMpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFsbG93IGEgY3VzdG9tIHJvdyBjbGljayBmdW5jdGlvbiB0byBzZWxlY3QgYSByb3cuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRcclxuICAgKi9cclxuICBhY3RpdmF0ZVJvd0J5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGVHcm91cEJ5SWQoaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNyb3ctZ3JvdXAtXCIgKyBpZCk7XHJcbiAgICBpZiAoZSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGUsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGV0aGVyIGEgcGFydGljdWxhciBncm91cCBpcyBleHBhbmRlZCBvciBjb2xsYXBzZWRcclxuICAgKiBAcGFyYW0gcm93R3JvdXBcclxuICAgKi9cclxuICBnZXRHcm91cEV4cGFuZGVkSW5kaWNhdG9yKHJvd0dyb3VwOiBSb3dHcm91cCkge1xyXG4gICAgaWYgKHJvd0dyb3VwLnJnRXhwYW5kZWQgPT09IHRydWUpIHtcclxuICAgICAgcmV0dXJuIFwibWludXNcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcInBsdXNcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vVE9EbyA6IEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciB1c2VzIGEgY3VzdG9tIGdyb3VwVGVtcGxhdGVcclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2UgU2VhcmNoTGlzdENvbXBvbmVudCB0byBuYXZpZ2F0ZSB0byBhIHBhZ2UgYW5kIGhpZ2hsaWdodCB0aGUgZ2l2ZW4gZ3JvdXAgaXRlbSwgb3JcclxuICAgKiB0aGUgcm93IChpbi1jYXNlIG9mIG5vbi1ncm91cGVkIGxpc3QpXHJcbiAgICogVGhpc1xyXG4gICAqIEBwYXJhbSBncm91cElkIDogVGhpcyBzaG91bGQgY29udGFpbiBhIHN0cmluZyB0byB1bmlxdWVseSBpZGVudGlmeSBhIHBhcnRpY3VsYXIgZ3JvdXAtZGlzcGxheVxyXG4gICAqIEBwYXJhbSByb3dJZCA6IFRoaXMgaXMgdGhlIGFjdHVhbCByb3dJZCBmb3IgdGhlIHJvdyB0byBiZSBzZWxlY3RlZC5cclxuICAgKi9cclxuICBuYXZpZ2F0ZVRvUGFnZUNvbnRhaW5pbmdFbGVtZW50KGdyb3VwSWQ6IHN0cmluZywgcm93SWQ6IHN0cmluZykge1xyXG5cclxuICAgIC8vSW50cm9kdWNpbmcgdGhlIGFkZGl0aW9uYWwgY2hlY2sgYmVsb3cgdG8gYWRkcmVzcyBDQ1JVSS0xMTYzLlxyXG4gICAgaWYgKCF0aGlzLmJvdW5kRGF0YSB8fCB0aGlzLmJvdW5kRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ2hlY2sgaWYgZ3JvdXBlZFxyXG4gICAgbGV0IHJvd0dyb3VwZWQ6IGJvb2xlYW4gPSB0aGlzLmdyb3VwaW5nLmZpZWxkcyAmJiB0aGlzLmdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwO1xyXG5cclxuICAgIGlmIChyb3dHcm91cGVkKSB7XHJcbiAgICAgIHRoaXMuZ3JvdXBlZERhdGFTZXQuZm9yRWFjaCgocm93R3JvdXAsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGdyb3VwRGlzcGxheSA9IHRoaXMuZ2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKTtcclxuICAgICAgICBpZiAoZ3JvdXBEaXNwbGF5LmluY2x1ZGVzKGdyb3VwSWQpKSB7XHJcbiAgICAgICAgICAvL1NldCB0aGUgcGFnZSB0byB0aGUgaW5kZXhcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIC8vdGhpcy5kZWZhdWx0R3JvdXBDbGljayhudWxsLCB0aGlzLCByb3dHcm91cCk7XHJcbiAgICAgICAgICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQgPSA8SFRNTEVsZW1lbnQ+PHVua25vd24+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRSb3dHcm91cElkKHJvd0dyb3VwKSk7XHJcbiAgICAgICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RBbGxSb3dzKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhLmZvckVhY2goKHJvdywgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5nZXRSb3dJZChyb3cpID09PSByb3dJZCkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgICAgICAgbGV0IHBhZ2UgPSBNYXRoLmZsb29yKGluZGV4IC8gdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luZy5nZXROdW1QYWdlcygpIC0gMSA+PSBwYWdlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZShwYWdlKTtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvd0J5SWQocm93SWQucmVwbGFjZShcInJvdy1cIiwgXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UmVzdWx0TWVzc2FnZShkYXRhOiBPYmplY3RbXSkge1xyXG4gICAgaWYgKHRoaXMuc2hvd1Jlc3VsdHNDb3VudCAmJiBkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdE1lc3NhZ2UgPSBkYXRhLmxlbmd0aCArIFwiIHJlc3VsdChzKVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gXCJcIjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
1502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF2aWdhdGlvbi9zcmMvY29tcG9uZW50cy9zZWFyY2gtbGlzdC9zZWFyY2gtbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBQ3hCLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBR1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFDLGVBQWUsRUFBYyxFQUFFLEVBQVUsTUFBTSxNQUFNLENBQUM7QUFDOUQsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdkQsT0FBTyxFQUFhLFlBQVksRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBYSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFJLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQUVqRjs7O0dBR0c7QUF5TUksSUFBTSxtQkFBbUIsR0FBekIsTUFB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LDJCQUEyQixFQUFFO3dCQUN0QyxJQUFJLEVBQUUsVUFBVTt3QkFDaEIsTUFBTSxFQUFFLEtBQUs7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFNpbXBsZUNoYW5nZSxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW5cclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2RlbGF5LCBmaW5hbGl6ZX0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7TmdiRHJvcGRvd259IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5cclxuaW1wb3J0IHtIY2lEYXRhRHRvLCBIY2lGaWx0ZXJEdG8sIEhjaUdyaWREdG8sIEhjaUdyb3VwaW5nRHRvLCBIY2lQYWdpbmdEdG8sIEhjaVNvcnREdG99IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9oY2ktbmctZ3JpZC1kdG9cIjtcclxuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7TmF2Q29tcG9uZW50fSBmcm9tIFwiLi4vbmF2LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7Um93R3JvdXB9IGZyb20gXCIuL3Jvdy1ncm91cFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25HbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi1nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge1NlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50fSBmcm9tIFwiLi9zZWFyY2gtbGlzdC1jb250cm9sbGVyLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGNhbiBiZSBncm91cGVkIG9yIG5vdCBncm91cGVkLiAgVGhlIGRhdGEgY2FuIGJlIGdlbmVyYXRlZCBmcm9tIGFuIGFycmF5LCBvciBmcm9tIGFuIGV4dGVybmFsXHJcbiAqIGRhdGEgY2FsbCB1c2luZyBqcGEtc2VydmljZXMuXHJcbiAqL1xyXG5AQ29tcG9uZW50VHlwZShcIlNlYXJjaExpc3RDb21wb25lbnRcIilcclxuQENvbXBvbmVudChcclxuICB7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktc2VhcmNoLWxpc3RcIixcclxuICAgIHN0eWxlczogW1xyXG4gICAgICBgXHJcbiAgICAgICAgLnJlc3VsdHMtY291bnQge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3JleXdhcm0tbWVkZGFyayk7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgICBmb250LXNpemU6IDE3LjNweDtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogMThweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5mb3JtYXQtYm90dG9tLXBhZGRpbmcge1xyXG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDI1cHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCBkaXZbaWRePSdyb3ctJ106bnRoLWNoaWxkKGV2ZW4pIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlLW1lZGl1bSkgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdltpZF49J3Jvdy0nXSB7XHJcbiAgICAgICAgICBib3JkZXI6IDAgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDpob3N0OjpuZy1kZWVwIGRpdi5yb3ctcGFyZW50LmFjdGl2ZSB7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWV3YXJtdml2aWQtbGlnaHRlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA6aG9zdDo6bmctZGVlcCAucmktc2lkZWJhci1jZWxsIHtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICBgXHJcbiAgICBdLFxyXG4gICAgdGVtcGxhdGU6XHJcbiAgICAgIGBcclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1Jlc3VsdHNDb3VudCAmJiBzZWFyY2hSZXN1bHRNZXNzYWdlXCJcclxuICAgICAgICAgIGNsYXNzPVwicmVzdWx0cy1jb3VudFwiIFtuZ0NsYXNzXT1cInsgJ2Zvcm1hdC1ib3R0b20tcGFkZGluZyc6IHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSA9PT0gJycgfVwiPlxyXG4gICAgICAgICAge3sgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggc2Nyb2xsYWJsZVwiPlxyXG4gICAgICAgICAgPGRpdiBpZD1cIm5vLXJlc3VsdHMtZm91bmRcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJzZWFyY2gtdGl0bGVcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHBzLTNcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJyZXN1bHQtbGlzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCIgW2NsYXNzLnktaGlkZGVuXT1cInNlbGVjdGVkUm93R3JvdXBcIj5cclxuICAgICAgICAgICAgICA8aGNpLWJ1c3kgW2J1c3lTdWJqZWN0c109XCJsb2FkaW5nU3ViamVjdHNcIiBwYXJlbnRTZWxlY3Rvcj1cIi5zY3JvbGxhYmxlXCIgW2ljb25dPVwiYnVzeUljb25cIj48L2hjaS1idXN5PlxyXG4gICAgICAgICAgICAgIDwhLS0gTm8gZ3JvdXBpbmcgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFncm91cGluZy5maWVsZHMgfHwgZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93R3JvdXAgb2Ygdmlld0RhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0Um93SWQocm93R3JvdXAucmdSb3dzWzBdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicm91dGUocm93R3JvdXAsIHJvd0dyb3VwLnJnUm93c1swXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2NoYW5nZURldGVjdGlvbjogcm93UmVmcmVzaH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50LCBjbXB0LCByb3dHcm91cCwgcm93R3JvdXAucmdSb3dzWzBdKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UZW1wbGF0ZTsgY29udGV4dDoge3Jvdzogcm93R3JvdXAucmdSb3dzWzBdfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvd0dyb3VwLnJnUm93c1swXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvd0dyb3VwLnJnUm93c1swXSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd0dyb3VwLnJnUm93c1swXX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBHcm91cGluZyB3aXRoIGlubGluZSBleHBhbnNpb24gLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwaW5nLmZpZWxkcyAmJiBncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCAmJiAhc2VsZWN0ZWRSb3dHcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93R3JvdXAgb2Ygdmlld0RhdGE7IGxldCBpID0gaW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2lkXT1cImdldFJvd0dyb3VwSWQocm93R3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLXBhcmVudCBuYXYtaXRlbSBncm91cCB7e2dyb3VwQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBUZW1wbGF0ZTsgY29udGV4dDoge3Jvd0dyb3VwOiByb3dHcm91cCwgY21wdDogY21wdH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dHcm91cC5yZ0V4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1jb250YWluZXJcIiAoY2xpY2spPVwib25Hcm91cENsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2Ygcm93R3JvdXAucmdSb3dzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3V0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3ctcGFyZW50IG5hdi1pdGVtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInJvdXRlKHJvd0dyb3VwLCByb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntjaGFuZ2VEZXRlY3Rpb246IHJvd1JlZnJlc2h9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvd31cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICNyb3dQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQsIGNtcHQsIHJvd0dyb3VwLCByb3cpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3d9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gR3JvdXBpbmcgd2l0aCBzZXBhcmF0ZSBpbmRpdmlkdWFsIGV4cGFuc2lvbiAtLT5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBpbmcuZmllbGRzICYmIGdyb3VwaW5nLmZpZWxkcy5sZW5ndGggPiAwICYmIHNlbGVjdGVkUm93R3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgI2dyb3VwU2VsZWN0ZWRQYXJlbnRcclxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtc2VsZWN0ZWQtcGFyZW50IGZsZXgtY29sdW1uIHt7Z3JvdXBDbGFzc319XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtpZF09XCJnZXRSb3dHcm91cElkKHNlbGVjdGVkUm93R3JvdXApXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJncm91cC1wYXJlbnQgbmF2LWl0ZW0gZ3JvdXAgYWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uR3JvdXBDbGljaygkZXZlbnQsIGNtcHQsIHNlbGVjdGVkUm93R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTsgY29udGV4dDoge3Jvd0dyb3VwOiBzZWxlY3RlZFJvd0dyb3VwLCBjbXB0OiBjbXB0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiAjc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciBpZD1cInNlbGVjdGVkLWdyb3VwLWNvbnRhaW5lclwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHktYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiaW5uZXJSb3dHcm91cENvbnRhaW5lclwiIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIHNlbGVjdGVkUm93R3JvdXAucmdSb3dzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm91dGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAjcm93UGFyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldFJvd0lkKHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93LXBhcmVudCBuYXYtaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwicm91dGUocm93R3JvdXAsIHJvdylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3d9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvdXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgI3Jvd1BhcmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRSb3dJZChyb3cpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdy1wYXJlbnQgbmF2LWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgY21wdCwgcm93R3JvdXAsIHJvdylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7cm93OiByb3d9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBQYWdpbmcgZm9vdGVyIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJwYWdpbmcucGFnZVNpemUgPiAwXCIgY2xhc3M9XCJkLWZsZXggZmxleC1zaHJpbmstMCBwYWdpbmctZm9vdGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHBzLTMgcGUtM1wiXHJcbiAgICAgICAgICAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDFyZW07IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbGVjdGVkUm93R3JvdXBcIj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlRmlyc3QoKVwiIGNsYXNzPVwiZC1mbGV4IG10LTEgbWItMVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdpbmcucGFnZSA9PT0gMFwiPjxpXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtZmFzdC1iYWNrd2FyZCBmYS14c1wiPjwvaT48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlUHJldmlvdXMoKVwiIGNsYXNzPVwiZC1mbGV4IG10LTEgbWItMVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdpbmcucGFnZSA9PT0gMFwiPjxpXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmYXMgZmEtYmFja3dhcmQgZmEteHNcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6IDAuOHJlbTtcIj57e3BhZ2luZy5wYWdlICsgMX19IG9mIHt7cGFnaW5nLm51bVBhZ2VzfX08L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiZG9QYWdlTmV4dCgpXCIgY2xhc3M9XCJkLWZsZXggbXQtMSBtYi0xXCIgW2NsYXNzLmRpc2FibGVkXT1cInBhZ2luZy5wYWdlID09PSBwYWdpbmcubnVtUGFnZXMgLSAxXCI+XHJcbiAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmFzIGZhLWZvcndhcmQgZmEteHNcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImRvUGFnZUxhc3QoKVwiIGNsYXNzPVwiZC1mbGV4IG10LTEgbWItMVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdpbmcucGFnZSA9PT0gcGFnaW5nLm51bVBhZ2VzIC0gMVwiPlxyXG4gICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mYXN0LWZvcndhcmQgZmEteHNcIj48L2k+PC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBEZWZhdWx0IHRlbXBsYXRlIGZvciBhIGdyb3VwIC0tPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyb3VwVGVtcGxhdGUgbGV0LXJvd0dyb3VwPVwicm93R3JvdXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93LTEgcHMtMlwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtd2VpZ2h0LWJvbGQgbWUtYXV0b1wiPnt7Z2V0R3JvdXBEaXNwbGF5KHJvd0dyb3VwKX19PC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2xhc3M9XCJkLWZsZXggbWUtMVwiIHN0eWxlPVwiYWxpZ24taXRlbXM6IGNlbnRlcjtcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93R3JvdXAucmdFeHBhbmRlZCA9PT0gdHJ1ZTsgZWxzZSBwbHVzVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLW1pbnVzIGZhLXNtIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNwbHVzVGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIGZhLXNtIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICh7e3Jvd0dyb3VwLnJnQ291bnR9fSlcclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8IS0tIERlZmF1bHQgdGVtcGxhdGUgZm9yIGFuIGluZGl2aWR1YWwgc2VsZWN0ZWQgZ3JvdXAgLS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlIGxldC1yb3dHcm91cD1cInJvd0dyb3VwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3Jvdy0xIHBzLTJcIiBzdHlsZT1cImFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0zXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtbGV2ZWwtdXAtYWx0XCIgZGF0YS1mYS10cmFuc2Zvcm09XCJmbGlwLWhcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC13ZWlnaHQtYm9sZCBtZS1hdXRvXCI+e3tnZXRHcm91cERpc3BsYXkocm93R3JvdXApfX08L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIGBcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIFNlYXJjaExpc3RDb21wb25lbnQgZXh0ZW5kcyBOYXZDb21wb25lbnQge1xyXG5cclxuICBzZWFyY2hSZXN1bHRNZXNzYWdlID0gXCJcIjtcclxuXHJcbiAgLy8gVGhlIGRhdGEgdGhhdCBpcyBhY3R1YWxseSByZW5kZXJlZC5cclxuICB2aWV3RGF0YTogUm93R3JvdXBbXTtcclxuXHJcbiAgLy8gQSByZWZlcmVuY2UgdG8gdGhlIHNlYXJjaCBsaXN0IGNvbnRyb2xsZXIgaWYgYXBwbGljYWJsZS5cclxuICBASW5wdXQoKSBjb250cm9sbGVyOiBTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudDtcclxuXHJcbiAgLy8gQW4gYXJyYXkgb2YgZGF0YS5cclxuICBASW5wdXQoXCJkYXRhXCIpIGJvdW5kRGF0YTogT2JqZWN0W107XHJcblxyXG4gIC8vIEEgc3ViamVjdCB0aGF0IHJlcHJlc2VudHMgYW4gYXJyYXkgb2YgZGF0YS5cclxuICBASW5wdXQoXCJkYXRhU3ViamVjdFwiKSBkYXRhU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PE9iamVjdFtdPjtcclxuXHJcbiAgLy8gQSBmdW5jdGlvbiB3aGljaCB0YWtlcyBpbiBhIEhjaUdyaWREdG8gYW5kIHJldHVybnMgYSBIY2lEYXRhRHRvIHdoaWNoIHdyYXBzIGFuIGFycmF5IG9mIGRhdGEuXHJcbiAgQElucHV0KFwiZGF0YUNhbGxcIikgZXh0ZXJuYWxEYXRhQ2FsbDogKGR0bzogSGNpR3JpZER0bykgPT4gT2JzZXJ2YWJsZTxIY2lEYXRhRHRvPjtcclxuXHJcbiAgLy8gQW4gYXJyYXkgb2Ygc3ViamVjdHMgd2l0aCBib29sZWFucyB0byBjb250cm9sIHRoZSBoY2ktYnVzeSBvdmVybGF5aW5nIHRoZSBzZWFyY2gtbGlzdC5cclxuICBASW5wdXQoKSBsb2FkaW5nU3ViamVjdHM6IFN1YmplY3Q8Ym9vbGVhbj5bXTtcclxuXHJcbiAgLy8gQW4gYXJyYXkgb2YgYm9vbGVhbnMgdG8gY29udHJvbCB0aGUgaGNpLWJ1c3kgb3ZlcmxheWluZyB0aGUgc2VhcmNoLWxpc3QuXHJcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbltdID0gW2ZhbHNlXTtcclxuXHJcbiAgLy8gSWYgY2xpY2tpbmcgYSByb3cgY2hhbmdlcyBhIHJvdXRlLCB0aGlzIGZ1bmN0aW9uIHNwZWNpZmllcyB0aGUgcm91dGUgdG8gdXNlLlxyXG4gIEBJbnB1dCgpIHJvdXRlOiAocm93R3JvdXA6IGFueSwgcm93OiBhbnkpID0+IGFueVtdO1xyXG5cclxuICAvLyBFeHBhbmQgdGhlIHNlbGVjdGVkIHJvdyBncm91cCBhcyBpdHMgb3duIHNjcmVlbiwgb3Igc2hvdyByb3dzIHVuZGVyIHNlbGVjdGVkIHJvdyBncm91cHMgaW4gdGhlIHNhbWUgdmlldy5cclxuICBASW5wdXQoKSBpbmxpbmVFeHBhbmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gV2l0aG91dCBhbnkgb3RoZXIgbWV0YWRhdGEgZm9yIHdoYXQgYSByb3cgaXMsIHByb3ZpZGUgdGhlIGZpZWxkIHRvIGJlIHVzZWQgZm9yIHRoZSBpZC5cclxuICAvLyBUaGlzIGlzIGFjdHVhbGx5IHRoZSBmaWVsZCB0aGF0IGhhcyB0aGUgKGRlZmluZWQpIHJvd0lkIC0tIHdoYXRldmVyIGl0IGlzIHVuZGVyIGRpZmZlcmVudFxyXG4gIC8vIHN0cnVjdHVyZXM6IGlkUGF0aWVudCwgaWRNZWRpY2FsRXZlbnQgZXRjXHJcbiAgQElucHV0KCkgcm93SWQ6IGFueTtcclxuXHJcbiAgLy8gQ3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIHJvdyBncm91cCBwYXJlbnQuXHJcbiAgQElucHV0KCkgZ3JvdXBDbGFzczogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgLy8gQ3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIHJvdyBwYXJlbnQuXHJcbiAgQElucHV0KCkgcm93Q2xhc3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vIEEgdGVtcGxhdGUgZm9yIGhvdyB0byBkaXNwbGF5IHJvdyBncm91cCBpbmZvIGlmIHVzaW5nIHRoZSBkZWZhdWx0IHRlbXBsYXRlLiAgZS5nLiBcImxhc3ROYW1lLCBmaXJzdE5hbWVcIiBmaWVsZCBuYW1lcyBnZXQgcmVwbGFjZWQgd2l0aCB2YWx1ZXMuXHJcbiAgQElucHV0KCkgZ3JvdXBEaXNwbGF5OiBzdHJpbmc7XHJcblxyXG4gIC8vIFRPRE86IFJlaW1wbGVtZW50XHJcbiAgQElucHV0KCkgY2xvc2VPdGhlcnM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyBUaGUgbGlzdCBvZiBmaWVsZHMgdG8gZ3JvdXAgYnkuXHJcbiAgQElucHV0KCkgZ3JvdXBpbmdGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8vIGRlbGltaXRlciBmb3IgZ2V0R3JvdXBEaXNwbGF5XHJcbiAgQElucHV0KCkgZGVsaW1pdGVyOiBzdHJpbmcgPSBcIiwgXCI7XHJcblxyXG4gIC8vIFRPRE86IFJlaW1wbGVtZW50IGlmIHdlIHdhbnQgdXNlcnMgdG8gYmUgYWJsZSB0byBjb250cm9sIGdyb3VwaW5nLlxyXG4gIEBJbnB1dCgpIGdyb3VwQnlBbGxvd2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAvLyBUaGUgcGFnZSBzaXplIG9mIHJvdyBncm91cHMgb3Igcm93cyBpZiBubyBncm91cGluZy5cclxuICBASW5wdXQoKSBwYWdlU2l6ZTogbnVtYmVyO1xyXG5cclxuICAvLyBUaGUgcGFnZSBzaXplIG9mIHJvd3MgaW4gYSBzZWxlY3RlZCBncm91cC5cclxuICBASW5wdXQoKSBncm91cFBhZ2VTaXplOiBudW1iZXIgPSA1MDtcclxuXHJcbiAgLy8gVGhlIG51bWJlciBvZiBwYWdlcyBvZiByb3dzIHRvIGNhY2hlIGludGVybmFsbHkgYmVmb3JlIGFuIGV4dGVybmFsIGNhbGwgaXMgbWFkZS5cclxuICBASW5wdXQoKSBncm91cENhY2hlTnVtUGFnZXM6IG51bWJlcjtcclxuXHJcbiAgLy8gQSByZWZlcmVuY2UgdG8gYSBwYXJlbnQgZHJvcGRvd24gaWYgYXBwbGljYWJsZS5cclxuICBASW5wdXQoKSBkcm9wZG93bjogTmdiRHJvcGRvd247XHJcblxyXG4gIC8vV2hpY2ggaWNvbiB0byB1c2UgZm9yIHRoZSBidXN5IHNwaW5uZXJcclxuICBASW5wdXQoKSBidXN5SWNvbjogc3RyaW5nID0gXCJoY2kgZmEtY29yZSBmYS1zcGluXCI7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dSZXN1bHRzQ291bnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gSWYgbm8gb25Hcm91cENsaWNrIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCB0aGlzIGlzIHVzZWQuICBUaGUgb3ZlcnJpZGluZyBmdW5jdGlvbiBzaG91bGQgc3RpbGwgY2FsbCB0aGlzLlxyXG4gIGRlZmF1bHRHcm91cENsaWNrOiAoZXZlbnQ6IE1vdXNlRXZlbnQsIGNtcHQ6IFNlYXJjaExpc3RDb21wb25lbnQsIHJvd0dyb3VwOiBSb3dHcm91cCkgPT4gdm9pZCA9IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSA9PiB7XHJcbiAgICBjbXB0LnNldEdyb3VwRXhwYW5kZWQoZXZlbnQsIHJvd0dyb3VwKTtcclxuXHJcbiAgICB0aGlzLmdyb3VwQ2xpY2suZW1pdCh7XHJcbiAgICAgIGV2ZW50OiBldmVudCxcclxuICAgICAgcm93R3JvdXA6IHJvd0dyb3VwXHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBASW5wdXQoKSBvbkdyb3VwQ2xpY2s6IChldmVudDogTW91c2VFdmVudCwgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSA9PiB2b2lkO1xyXG5cclxuICAvLyBJZiBubyBvblJvd0NsaWNrIGZ1bmN0aW9uIGlzIHByb3ZpZGVkLCB0aGlzIGlzIHVzZWQuICBUaGUgb3ZlcnJpZGluZyBmdW5jdGlvbiBzaG91bGQgc3RpbGwgY2FsbCB0aGlzLlxyXG4gIGRlZmF1bHRSb3dDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXAsIHJvdzogYW55KSA9PiB2b2lkID0gKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXAsIHJvdzogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bikge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJvdyA9IHJvdztcclxuXHJcbiAgICB0aGlzLnJvd0NsaWNrLmVtaXQoe1xyXG4gICAgICBldmVudDogZXZlbnQsXHJcbiAgICAgIHJvdzogcm93LFxyXG4gICAgICByb3dHcm91cDogcm93R3JvdXBcclxuICAgIH0pO1xyXG5cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH07XHJcbiAgQElucHV0KCkgb25Sb3dDbGljazogKGV2ZW50OiBNb3VzZUV2ZW50LCBjbXB0OiBTZWFyY2hMaXN0Q29tcG9uZW50LCByb3dHcm91cDogUm93R3JvdXAsIHJvdzogYW55KSA9PiB2b2lkO1xyXG5cclxuICBASW5wdXQoKSBncm91cFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBJbnB1dCgpIG9uR3JvdXBDbG9zZTogRnVuY3Rpb247XHJcblxyXG4gIEBPdXRwdXQoKSBncm91cENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSByb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZGF0YUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChcImRlZmF1bHRHcm91cFRlbXBsYXRlXCIsIHtyZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiB0cnVlfSkgZGVmYXVsdEdyb3VwVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImRlZmF1bHRHcm91cFNlbGVjdGVkVGVtcGxhdGVcIiwge1xyXG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXHJcbiAgICBzdGF0aWM6IHRydWVcclxuICB9KSBkZWZhdWx0R3JvdXBTZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBzZWxlY3RlZFJvdzogYW55O1xyXG4gIHNlbGVjdGVkUm93R3JvdXA6IFJvd0dyb3VwO1xyXG4gIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXI6IEhUTUxFbGVtZW50O1xyXG4gIGlubmVyUm93R3JvdXBDb250YWluZXI6IEhUTUxFbGVtZW50O1xyXG5cclxuICAvLyBHcmlkIERUTyBpbmZvIG5lZWRlZCB0byBidWlsZCBleHRlcm5hbCBkYXRhIHJlcXVlc3RzLlxyXG4gIHNvcnRzOiBIY2lTb3J0RHRvW10gPSBbXTtcclxuICBmaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IFtdO1xyXG4gIHBhZ2luZzogSGNpUGFnaW5nRHRvID0gbmV3IEhjaVBhZ2luZ0R0bygwLCAtMSk7XHJcbiAgZ3JvdXBpbmc6IEhjaUdyb3VwaW5nRHRvID0gbmV3IEhjaUdyb3VwaW5nRHRvKFtdKTtcclxuXHJcbiAgLy9nbG9iYWxSb3dHcm91cE1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XHJcbiAgZ3JvdXBlZERhdGFTZXQgPSBbXTtcclxuXHJcbiAgcGFnaW5nU3ViamVjdDogU3ViamVjdDxIY2lQYWdpbmdEdG8+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIY2lQYWdpbmdEdG8+KHRoaXMucGFnaW5nKTtcclxuXHJcbiAgLy8gQSBkdW1teSBudW1iZXIgdGhhdCBpbmNyZW1lbnRzIGJhc2VkIG9uIHNlbGVjdGlvbiBjaGFuZ2VzLiAgRm9yY2VzIHJvdXRlckxpbmtBY3RpdmUgdG8gcmVjaGVjay5cclxuICByb3dSZWZyZXNoOiBudW1iZXIgPSAwO1xyXG5cclxuICBidXN5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGxhc3RTY3JvbGxUb3A6IG51bWJlciA9IC0xO1xyXG4gIGxhc3RTY3JvbGxQb3NpdGlvbjogbnVtYmVyID0gMTtcclxuICBzZXRTY3JvbGxUb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY21wdDogU2VhcmNoTGlzdENvbXBvbmVudCA9IHRoaXM7XHJcblxyXG4gIGxhc3RFdmVudDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgICAgICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICAgICAgICAgICAgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgICAgICAgICAgICBuYXZpZ2F0aW9uR2xvYmFsU2VydmljZTogTmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gICAgc3VwZXIoZWxlbWVudFJlZiwgcmVuZGVyZXIsIHJlc29sdmVyLCBuYXZpZ2F0aW9uU2VydmljZSwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cclxuICAgIGlmICghbmF2aWdhdGlvblNlcnZpY2UpIHtcclxuICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IG5ldyBOYXZpZ2F0aW9uU2VydmljZShuYXZpZ2F0aW9uR2xvYmFsU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0SWQoKSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNSb290ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zZXRDb25maWcoe30pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBpZCBmb3IgdGhlIHJvdyBncm91cCBiYXNlZCB1cG9uIHRoZSBncm91cCBrZXkgb3IgaWYgdW5kZWZpbmVkLCB0aGUgZmlyc3Qgcm93J3MgaWQuICBlLmcuIFwicm93LWdyb3VwLWJvYi1zbWl0aFwiXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Jvd0dyb3VwfSByb3dHcm91cFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0Um93R3JvdXBJZChyb3dHcm91cDogUm93R3JvdXApOiBzdHJpbmcge1xyXG4gICAgaWYgKHJvd0dyb3VwLnJnS2V5KSB7XHJcbiAgICAgIHJldHVybiBcInJvdy1ncm91cC1cIiArIHJvd0dyb3VwLnJnS2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJvd0lkOiBzdHJpbmcgPSB0aGlzLmdldFJvd0lkKHJvd0dyb3VwLnJnUm93c1swXSk7XHJcbiAgICAgIHJldHVybiByb3dJZC5yZXBsYWNlKFwicm93LVwiLCBcInJvdy1ncm91cC1cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHJvdyBpZC4gIGUuZy4gXCJyb3ctMVwiLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHJvd1xyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0Um93SWQocm93OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMucm93SWQpIHtcclxuICAgICAgcmV0dXJuIFwicm93LVwiICsgPHN0cmluZz48YW55PnJvd1t0aGlzLnJvd0lkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcInJvdy11bmRlZmluZWRcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIGluaXQsIGxpc3RlbiBmb3IgbG9hZGluZyBzdWJqZWN0cyBhbmQgbGlzdGVuIGZvciBwYWdlIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5zdWJzY3JpYmUoKGJ1c3k6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSBidXN5O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luZ1N1YmplY3Quc3Vic2NyaWJlKChwYWdpbmc6IEhjaVBhZ2luZ0R0bykgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2luZyA9IHBhZ2luZztcclxuICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIGlucHV0cyBjaGFuZ2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1NpbXBsZUNoYW5nZXN9IGNoYW5nZXNcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgIGlmIChjaGFuZ2VzW1wiZ3JvdXBpbmdGaWVsZHNcIl0pIHtcclxuICAgICAgbGV0IGNoYW5nZTogU2ltcGxlQ2hhbmdlID0gPFNpbXBsZUNoYW5nZT5jaGFuZ2VzW1wiZ3JvdXBpbmdGaWVsZHNcIl07XHJcbiAgICAgIGlmIChjaGFuZ2UuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoY2hhbmdlLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ncm91cGluZy5zZXRGaWVsZHMoW10pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGF0YSBvbmx5IHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGlzIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIGNoZWNrSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0KSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmNvbmZpZyk7XHJcbiAgICAgIHRoaXMucG9zdEluaXQoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGFTdWJqZWN0KSB7XHJcbiAgICAgICAgLy9NYXkgYXMgd2VsbCBtYWtlIGl0IHNwaW4gd2hpbGUgcHJvY2Vzc2luZywgYXMgd2VsbCBhcyBsb2FkaW5nLiBPdGhlcndpc2UgaXQgbG9va3MgZnJvemVuXHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZ1N1YmplY3RzKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhU3ViamVjdFxyXG4gICAgICAgICAgLnBpcGUoZGVsYXkoMCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBPYmplY3RbXSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kRGF0YSA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG5cclxuICAgICAgICAgICAgLy9Ob3cgZG9uZSBsb2FkaW5nXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNldERhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBvbiBuZXcgcm93UGFyZW50IGJlaW5nIHNldCwgYWRkIGFueSBjbGFzc2VzIGlmIHJvd0NsYXNzIGlzIGRlZmluZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5TGlzdDxFbGVtZW50UmVmPn0gcm93UGFyZW50c1xyXG4gICAqL1xyXG4gIEBWaWV3Q2hpbGRyZW4oXCJyb3dQYXJlbnRcIiwge3JlYWQ6IEVsZW1lbnRSZWZ9KSBzZXQgcm93UGFyZW50cyhyb3dQYXJlbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4pIHtcclxuICAgIGlmIChyb3dQYXJlbnRzICYmIHRoaXMucm93Q2xhc3MpIHtcclxuICAgICAgcm93UGFyZW50cy5mb3JFYWNoKChlOiBFbGVtZW50UmVmKSA9PiB7XHJcbiAgICAgICAgbGV0IGNsYXNzZXM6IHN0cmluZ1tdID0gdGhpcy5yb3dDbGFzcy5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgZm9yIChsZXQgY2xhc3NOYW1lIG9mIGNsYXNzZXMpIHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZS5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucm93UmVmcmVzaCArPSAxO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9zdEluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIlNlYXJjaExpc3RDb21wb25lbnQucG9zdEluaXQ6IFwiICsgdGhpcy5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZ2V0UGFyZW50KCkpIHtcclxuICAgICAgdGhpcy5jb250cm9sbGVyID0gPFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50PnRoaXMuZ2V0UGFyZW50KCkuZ2V0Q29tcG9uZW50QnlUeXBlKFwiU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29udHJvbGxlcikge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbXBvbmVudDogdXNpbmcgY29udHJvbGxlclwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb250cm9sbGVyLmFkZFNlYXJjaExpc3QodGhpcy50aXRsZSk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRyb2xsZXIuZmlsdGVyc1N1YmplY3Quc3Vic2NyaWJlKChmaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldFBhZ2luZygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5zb3J0c1N1YmplY3Quc3Vic2NyaWJlKChzb3J0czogSGNpU29ydER0b1tdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IHNvcnRzO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0LnN1YnNjcmliZSgodGl0bGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcInNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Quc3Vic2NyaWJlOiBcIiArIHRoaXMudGl0bGUgKyBcIiwgXCIgKyB0aXRsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRpdGxlICYmIHRpdGxlICYmIHRoaXMudGl0bGUgIT09IHRpdGxlKSB7XHJcbiAgICAgICAgICB2aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmlzaWJsZSkge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJkaXNwbGF5XCIsIFwiZmxleFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3b3VsZCByZXNldCBwYWdpbmcgYW5kIGZpcmVzXHJcbiAgICovXHJcbiAgcmVzZXRQYWdpbmcoKSB7XHJcbiAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKDApO1xyXG4gICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgY29uZmlnIHdpdGggb3B0aW9ucyBhbmQgcmUtZmV0Y2hlcyBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidXBkYXRlQ29uZmlnXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZywgY29uZmlnKTtcclxuXHJcbiAgICAgIGlmIChjb25maWcucm91dGUpIHtcclxuICAgICAgICB0aGlzLnJvdXRlID0gY29uZmlnLnJvdXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmdyb3VwQnlBbGxvd2VkRmllbGRzID0gY29uZmlnLmdyb3VwQnlBbGxvd2VkRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc29ydHMpIHtcclxuICAgICAgICB0aGlzLnNvcnRzID0gY29uZmlnLnNvcnRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBpbmdGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmdyb3VwaW5nRmllbGRzID0gY29uZmlnLmdyb3VwaW5nRmllbGRzO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBpbmcuc2V0RmllbGRzKGNvbmZpZy5ncm91cGluZ0ZpZWxkcyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5wYWdlU2l6ZSkge1xyXG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBjb25maWcucGFnZVNpemU7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZVNpemUoY29uZmlnLnBhZ2VTaXplKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwRGlzcGxheSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBEaXNwbGF5ID0gY29uZmlnLmdyb3VwRGlzcGxheTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRlbGltaXRlcikge1xyXG4gICAgICAgIHRoaXMuZGVsaW1pdGVyID0gY29uZmlnLmRlbGltaXRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmNsb3NlT3RoZXJzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmNsb3NlT3RoZXJzID0gY29uZmlnLmNsb3NlT3RoZXJzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ3JvdXBUZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZ3JvdXBUZW1wbGF0ZSA9IGNvbmZpZy5ncm91cFRlbXBsYXRlO1xyXG4gICAgICAgIHRoaXMuZ3JvdXBTZWxlY3RlZFRlbXBsYXRlID0gY29uZmlnLmdyb3VwVGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5ncm91cFNlbGVjdGVkVGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSA9IGNvbmZpZy5ncm91cFNlbGVjdGVkVGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5pdGVtVGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLml0ZW1UZW1wbGF0ZSA9IGNvbmZpZy5pdGVtVGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kYXRhKSB7XHJcbiAgICAgICAgdGhpcy5ib3VuZERhdGEgPSBjb25maWcuZGF0YTtcclxuICAgICAgICB0aGlzLnNldFJlc3VsdE1lc3NhZ2UodGhpcy5ib3VuZERhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGF0YVN1YmplY3QpIHtcclxuICAgICAgICB0aGlzLmRhdGFTdWJqZWN0ID0gY29uZmlnLmRhdGFTdWJqZWN0O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGF0YUNhbGwpIHtcclxuICAgICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwgPSBjb25maWcuZGF0YUNhbGw7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vbkdyb3VwQ2xpY2spIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbGljayA9IGNvbmZpZy5vbkdyb3VwQ2xpY2s7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5pbmxpbmVFeHBhbmQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuaW5saW5lRXhwYW5kID0gY29uZmlnLmlubGluZUV4cGFuZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwQ2xhc3MpIHtcclxuICAgICAgICB0aGlzLmdyb3VwQ2xhc3MgPSBjb25maWcuZ3JvdXBDbGFzcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnJvd0NsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5yb3dDbGFzcyA9IGNvbmZpZy5yb3dDbGFzcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnJvd0lkKSB7XHJcbiAgICAgICAgdGhpcy5yb3dJZCA9IGNvbmZpZy5yb3dJZDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uR3JvdXBDbGljaykge1xyXG4gICAgICAgIHRoaXMub25Hcm91cENsaWNrID0gY29uZmlnLm9uR3JvdXBDbGljaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLm9uUm93Q2xpY2spIHtcclxuICAgICAgICB0aGlzLm9uUm93Q2xpY2sgPSBjb25maWcub25Sb3dDbGljaztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmxvYWRpbmdTdWJqZWN0cykge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzID0gY29uZmlnLmxvYWRpbmdTdWJqZWN0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwUGFnZVNpemUpIHtcclxuICAgICAgICB0aGlzLmdyb3VwUGFnZVNpemUgPSBjb25maWcuZ3JvdXBQYWdlU2l6ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdyb3VwQ2FjaGVOdW1QYWdlcykge1xyXG4gICAgICAgIGlmIChjb25maWcuZ3JvdXBDYWNoZU51bVBhZ2VzID49IDIpIHtcclxuICAgICAgICAgIHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzID0gY29uZmlnLmdyb3VwQ2FjaGVOdW1QYWdlcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFwiZ3JvdXBDYWNoZU51bVBhZ2VzIG11c3QgYmUgMiBvciBtb3JlLlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5vbkdyb3VwQ2xvc2UpIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbG9zZSA9IGNvbmZpZy5vbkdyb3VwQ2xvc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5idXN5SWNvbikge1xyXG4gICAgICAgIHRoaXMuYnVzeUljb24gPSBjb25maWcuYnVzeUljb247XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25maWcuc2hvd1Jlc3VsdHNDb3VudCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc3VsdHNDb3VudCA9IGNvbmZpZy5zaG93UmVzdWx0c0NvdW50O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLm9uR3JvdXBDbGljaykge1xyXG4gICAgICB0aGlzLm9uR3JvdXBDbGljayA9IHRoaXMuZGVmYXVsdEdyb3VwQ2xpY2s7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMub25Sb3dDbGljaykge1xyXG4gICAgICB0aGlzLm9uUm93Q2xpY2sgPSB0aGlzLmRlZmF1bHRSb3dDbGljaztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuaXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIlNlYXJjaExpc3RDb21wb25lbnQ6IEFuIGl0ZW1UZW1wbGF0ZSBtdXN0IGJlIHByb3ZpZGVkIVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBUZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmdyb3VwVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRHcm91cFRlbXBsYXRlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmdyb3VwU2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEdyb3VwU2VsZWN0ZWRUZW1wbGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5leHRlcm5hbERhdGFDYWxsKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzID0gW25ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpXTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgc3VwZXIudXBkYXRlQ29uZmlnKGNvbmZpZyk7XHJcblxyXG4gICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIGRhdGEgaWYgYW4gYXJyYXksIGNhbGxzIHRoZSBkYXRhIGlmIGV4dGVybmFsIGNhbGwuXHJcbiAgICovXHJcbiAgc2V0RGF0YShkYXRhPzogT2JqZWN0W10pOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwic2V0RGF0YVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YSA9IGRhdGE7XHJcbiAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmICh0aGlzLmV4dGVybmFsRGF0YUNhbGwpIHtcclxuICAgICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byh0aGlzLmZpbHRlcnMsIHRoaXMuc29ydHMsIHRoaXMucGFnaW5nLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIHRoaXMuZ3JvdXBpbmcuZmllbGRzICYmIHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDApKSlcclxuICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuYnVzeSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChleHRlcm5hbERhdGE6IEhjaURhdGFEdG8pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZURhdGEoZXh0ZXJuYWxEYXRhKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlRGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIHRoZSBkYXRhIGFycmF5IHRoYXQgdGhlIGludGVyZmFjZSB1c2VzIHRvIHJlbmRlciAocmVnYXJkbGVzcyBvZiBzb3VyY2UpLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIY2lEYXRhRHRvfSBleHRlcm5hbERhdGFcclxuICAgKi9cclxuICBnZW5lcmF0ZURhdGEoZXh0ZXJuYWxEYXRhPzogSGNpRGF0YUR0byk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJnZW5lcmF0ZURhdGFcIik7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoZXh0ZXJuYWxEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXh0ZXJuYWxEYXRhKSB7XHJcbiAgICAgIHRoaXMuYm91bmREYXRhID0gZXh0ZXJuYWxEYXRhLmRhdGE7XHJcbiAgICAgIHRoaXMuc2V0UmVzdWx0TWVzc2FnZSh0aGlzLmJvdW5kRGF0YSk7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldERhdGFTaXplKGV4dGVybmFsRGF0YS5ncmlkRHRvLnBhZ2luZy5kYXRhU2l6ZSk7XHJcblxyXG4gICAgICAvLyBDcmVhdGUgcm93IGdyb3Vwcy5cclxuICAgICAgdGhpcy52aWV3RGF0YSA9IFtdO1xyXG4gICAgICBsZXQgcm93R3JvdXA6IFJvd0dyb3VwO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvdW5kRGF0YS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHJvd0dyb3VwID0gbmV3IFJvd0dyb3VwKHVuZGVmaW5lZCwgdGhpcy5ib3VuZERhdGFbaV0sIChleHRlcm5hbERhdGEuZGF0YUNvdW50cyAmJiBleHRlcm5hbERhdGEuZGF0YUNvdW50cyAhPT0gbnVsbCkgPyBleHRlcm5hbERhdGEuZGF0YUNvdW50c1tpXSA6IDApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgZ3JvdXBpbmdGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgICByb3dHcm91cFtncm91cGluZ0ZpZWxkXSA9IHRoaXMuYm91bmREYXRhW2ldW2dyb3VwaW5nRmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy52aWV3RGF0YS5wdXNoKHJvd0dyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ3JlYXRlIGFuZCBwb3B1bGF0ZSByb3cgZ3JvdXBzLlxyXG4gICAgICB0aGlzLnBvcHVsYXRlRnJvbUJvdW5kRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KE9iamVjdC5hc3NpZ24oe3R5cGU6IFwibm9uZVwifSwgdGhpcy5sYXN0RXZlbnQsIHtcclxuICAgICAgcGFnaW5nOiB0aGlzLnBhZ2luZyxcclxuICAgICAgblZpZXdEYXRhOiB0aGlzLnZpZXdEYXRhLmxlbmd0aFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGVzIHRoZSBkYXRhIGlmIHRoZSBkYXRhIGlzIGFuIGFycmF5IChub3QgZXh0ZXJuYWwpLlxyXG4gICAqL1xyXG4gIHBvcHVsYXRlRnJvbUJvdW5kRGF0YSgpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwicG9wdWxhdGVGcm9tQm91bmREYXRhXCIpO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKHRoaXMuYm91bmREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYm91bmREYXRhKSB7XHJcbiAgICAgIHRoaXMudmlld0RhdGEgPSBbXTtcclxuICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSgwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmJvdW5kRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkJvdW5kIERhdGEgbGVuZ3RoIGZvdW5kIGFzIDBcIik7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldE51bVBhZ2VzKDEpO1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZSgwKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcHJlcGFyZWREYXRhID0gW107XHJcbiAgICB0aGlzLmdyb3VwZWREYXRhU2V0ID0gW107XHJcblxyXG4gICAgbGV0IHJvd0dyb3VwTWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcclxuXHJcbiAgICBsZXQgZG9Sb3dHcm91cGluZzogYm9vbGVhbiA9IHRoaXMuZ3JvdXBpbmcuZmllbGRzICYmIHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA+IDA7XHJcbiAgICBmb3IgKGxldCByb3cgb2YgdGhpcy5ib3VuZERhdGEpIHtcclxuICAgICAgbGV0IGdyb3VwS2V5OiBzdHJpbmc7XHJcbiAgICAgIGlmIChkb1Jvd0dyb3VwaW5nKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgICAgIGdyb3VwS2V5ID0gKGdyb3VwS2V5KSA/IGdyb3VwS2V5ICsgXCI6XCIgKyByb3dbZmllbGRdIDogcm93W2ZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZpbHRlcnMgJiYgdGhpcy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgaW5jbHVkZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmZpbHRlcnMpIHtcclxuICAgICAgICAgIGlmICghZmlsdGVyLnZhbGlkKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRyb2xsZXIuYWR2YW5jZWRTZWFyY2ggJiYgdGhpcy5jb250cm9sbGVyLmFkdmFuY2VkU2VhcmNoLmxlbmd0aCA+IDAgJiYgIXRoaXMuY29udHJvbGxlci5hZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyKSB7XHJcbiAgICAgICAgICAvLyAgQWR2YW5jZWQgc2VhcmNoIGRvZXMgbm90IGF1dG8gZmlsdGVyIGJ5IGRlZmF1bHRcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgZmlsdGVyVmFsdWVzID0gZmlsdGVyLmdldFZhbHVlKCkuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgICAgICBsZXQgZmlsdGVyRmllbGRzID0gZmlsdGVyLmdldEZpZWxkKCkuc3BsaXQoXCIgb3IgXCIpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlubmVySW5jbHVkZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWx0ZXJGaWVsZHMpIHtcclxuICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXSAmJiB0eXBlb2Ygcm93W2ZpZWxkXSA9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiBmaWx0ZXJWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJvd1tmaWVsZF0gPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmIHJvd1tmaWVsZF0gaW5zdGFuY2VvZiBEYXRlIHx8IGZpbHRlci5nZXREYXRhVHlwZSgpID09IFwiZGF0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiBmaWx0ZXJWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgobmV3IERhdGUocm93W2ZpZWxkXSkpLmdldFRpbWUoKSA9PSAobmV3IERhdGUodmFsdWUpKS5nZXRUaW1lKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlubmVySW5jbHVkZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgdHlwZW9mIHJvd1tmaWVsZF0gPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgbXVsdGlwbGUgc2VhcmNoIHN0cmluZ3NcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGZpbHRlclZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocm93W2ZpZWxkXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodmFsdWUudG9Mb3dlckNhc2UoKSkgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpbm5lckluY2x1ZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChpbm5lckluY2x1ZGUpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFpbm5lckluY2x1ZGUpIHtcclxuICAgICAgICAgICAgICBpbmNsdWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYoaW5jbHVkZSkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghaW5jbHVkZSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZG9Sb3dHcm91cGluZykge1xyXG4gICAgICAgIGlmIChyb3dHcm91cE1hcC5nZXQoZ3JvdXBLZXkpID49IDApIHtcclxuICAgICAgICAgIHByZXBhcmVkRGF0YVtyb3dHcm91cE1hcC5nZXQoZ3JvdXBLZXkpXS5yZ1Jvd3MucHVzaChyb3cpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByb3dHcm91cE1hcC5zZXQoZ3JvdXBLZXksIHByZXBhcmVkRGF0YS5sZW5ndGgpO1xyXG5cclxuICAgICAgICAgIGxldCByb3dHcm91cDogUm93R3JvdXAgPSBuZXcgUm93R3JvdXAoZ3JvdXBLZXksIHJvdyk7XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgICAgICByb3dHcm91cFtmaWVsZF0gPSByb3dbZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHByZXBhcmVkRGF0YS5wdXNoKHJvd0dyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHJlcGFyZWREYXRhLnB1c2gobmV3IFJvd0dyb3VwKGdyb3VwS2V5LCByb3cpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy90aGlzLmdsb2JhbFJvd0dyb3VwTWFwID0gcm93R3JvdXBNYXA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBwcmVwYXJlZERhdGEuc29ydCgoYTogUm93R3JvdXAsIGI6IFJvd0dyb3VwKSA9PiB7XHJcbiAgICAgICAgbGV0IHY6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNTb3J0RmllbGRHcm91cEZpZWxkKHNvcnQuZ2V0RmllbGQoKSkpIHtcclxuICAgICAgICAgICAgaWYgKHNvcnQuZ2V0QXNjKCkpIHtcclxuICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHYgIT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBpbmcuZ2V0RmllbGRzKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmIChzb3J0LmdldEFzYygpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKGEucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0gPCBiLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldID4gYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChhLnJnUm93c1swXVtzb3J0LmdldEZpZWxkKCldID4gYi5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSkge1xyXG4gICAgICAgICAgICAgICAgdiA9IC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYS5yZ1Jvd3NbMF1bc29ydC5nZXRGaWVsZCgpXSA8IGIucmdSb3dzWzBdW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgIHYgPSAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHYgIT0gMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5ncm91cGluZy5nZXRGaWVsZHMoKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcm93R3JvdXAgb2YgcHJlcGFyZWREYXRhKSB7XHJcbiAgICAgICAgICByb3dHcm91cC5yZ1Jvd3Muc29ydCgoYTogT2JqZWN0LCBiOiBPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHY6IG51bWJlciA9IDA7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNTb3J0RmllbGRHcm91cEZpZWxkKHNvcnQuZ2V0RmllbGQoKSkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzb3J0LmdldEFzYygpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPCBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldID4gYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChhW3NvcnQuZ2V0RmllbGQoKV0gPiBiW3NvcnQuZ2V0RmllbGQoKV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB2ID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYVtzb3J0LmdldEZpZWxkKCldIDwgYltzb3J0LmdldEZpZWxkKCldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdiA9IDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodiAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHY7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZShwcmVwYXJlZERhdGEubGVuZ3RoKTtcclxuXHJcbiAgICB0aGlzLmdyb3VwZWREYXRhU2V0ID0gcHJlcGFyZWREYXRhO1xyXG5cclxuICAgIGlmICh0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpID4gMCkge1xyXG4gICAgICB0aGlzLnZpZXdEYXRhID0gW107XHJcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnBhZ2luZy5nZXRQYWdlKCkgKiB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpOyBpIDwgTWF0aC5taW4ocHJlcGFyZWREYXRhLmxlbmd0aCwgKHRoaXMucGFnaW5nLmdldFBhZ2UoKSArIDEpICogdGhpcy5wYWdpbmcuZ2V0UGFnZVNpemUoKSk7IGkrKykge1xyXG4gICAgICAgIHRoaXMudmlld0RhdGEucHVzaChwcmVwYXJlZERhdGFbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXREYXRhU2l6ZShwcmVwYXJlZERhdGEubGVuZ3RoKTtcclxuICAgICAgdGhpcy52aWV3RGF0YSA9IHByZXBhcmVkRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCByb3dHcm91cCBvZiB0aGlzLnZpZXdEYXRhKSB7XHJcbiAgICAgIHJvd0dyb3VwLnJnQ291bnQgPSByb3dHcm91cC5yZ1Jvd3MubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzb3J0IGZpZWxkIGlzIGEgZ3JvdXBpbmcgZmllbGQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICovXHJcbiAgaXNTb3J0RmllbGRHcm91cEZpZWxkKHNvcnRGaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBpbmcgfHwgIXRoaXMuZ3JvdXBpbmcuZmllbGRzIHx8IHRoaXMuZ3JvdXBpbmcuZmllbGRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZ3JvdXBGaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICBpZiAoc29ydEZpZWxkID09PSBncm91cEZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBhIGdyb3VwIG9mIGRhdGEuICBDYWxsIHRoZSBmaXJzdCBwYWdlIG9mIGRhdGEgdXBvbiBleHBhbmRpbmcuICBJZiBhbHJlYWR5IGV4cGFuZGVkLCBjbG9zZSBhbmQgZ28gYmFjayB0byB0aGVcclxuICAgKiBsaXN0IG9mIGdyb3Vwcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Um93R3JvdXB9IHJvd0dyb3VwXHJcbiAgICovXHJcbiAgc2V0R3JvdXBFeHBhbmRlZChldmVudDogTW91c2VFdmVudCwgcm93R3JvdXA6IFJvd0dyb3VwKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInNldEdyb3VwRXhwYW5kZWQ6IFwiICsgcm93R3JvdXAucmdFeHBhbmRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbCAmJiAhcm93R3JvdXAucmdFeHBhbmRlZCkge1xyXG4gICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgICAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgICBncm91cEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGdyb3VwRmllbGQsIFwic3RyaW5nXCIsIHJvd0dyb3VwW2dyb3VwRmllbGRdLCB1bmRlZmluZWQsIFwiRVwiLCB0cnVlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByb3dHcm91cC5yZ1BhZ2VNaW4gPSAwO1xyXG4gICAgICAgIHJvd0dyb3VwLnJnUGFnZU1heCA9IDA7XHJcblxyXG4gICAgICAgIHRoaXMuZXh0ZXJuYWxEYXRhQ2FsbChuZXcgSGNpR3JpZER0byhncm91cEZpbHRlcnMsIHRoaXMuc29ydHMsIG5ldyBIY2lQYWdpbmdEdG8oMCwgdGhpcy5ncm91cFBhZ2VTaXplKSwgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCBmYWxzZSkpKVxyXG4gICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgICByb3dHcm91cC5yZ1Jvd3MgPSBleHRlcm5hbERhdGEuZGF0YTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAgPSByb3dHcm91cDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICghcm93R3JvdXAucmdFeHBhbmRlZCkge1xyXG4gICAgICByb3dHcm91cC5yZ1BhZ2VNaW4gPSAwO1xyXG4gICAgICByb3dHcm91cC5yZ1BhZ2VNYXggPSAwO1xyXG4gICAgICBpZiAoIXRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwID0gcm93R3JvdXA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocm93R3JvdXAucmdFeHBhbmRlZCkge1xyXG4gICAgICBpZiAodGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgICBsZXQgZ3JvdXBTZWxlY3RlZFBhcmVudDogSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgICBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pig8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbG9zZXN0KFwiLmdyb3VwLXBhcmVudFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD48dW5rbm93bj5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmdldFJvd0dyb3VwSWQocm93R3JvdXApKTtcclxuICAgICAgICAgIC8vZ3JvdXBTZWxlY3RlZFBhcmVudC5jbGljaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBvZihudWxsKS5waXBlKGRlbGF5KDI1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciA9IHVuZGVmaW5lZDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5vbkdyb3VwQ2xvc2UpIHtcclxuICAgICAgICB0aGlzLm9uR3JvdXBDbG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFyb3dHcm91cC5yZ0V4cGFuZGVkICYmIHRoaXMuaW5saW5lRXhwYW5kKSB7XHJcbiAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50OiBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD4oPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xvc2VzdChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZ3JvdXBTZWxlY3RlZFBhcmVudCA9IDxIVE1MRWxlbWVudD48dW5rbm93bj5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmdldFJvd0dyb3VwSWQocm93R3JvdXApKTtcclxuICAgICAgICAvL2dyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGdyb3VwU2VsZWN0ZWRQYXJlbnQsIFwiYWN0aXZlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0Rldk1vZGUoKSAmJiAhdGhpcy5pbmxpbmVFeHBhbmQpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInRoaXMuc2VsZWN0ZWRSb3dHcm91cFwiKTtcclxuICAgICAgY29uc29sZS5kZWJ1Zyh0aGlzLnNlbGVjdGVkUm93R3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHJvd0dyb3VwLnJnRXhwYW5kZWQgPSAhcm93R3JvdXAucmdFeHBhbmRlZDtcclxuXHJcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0aGUgc2Nyb2xsIGxpc3RlbmVyIHRvIHRoZSBncm91cCBjb250YWluZXIuXHJcbiAgICovXHJcbiAgYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIHRoaXMucmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG5cclxuICAgIHRoaXMubGFzdFNjcm9sbFRvcCA9IC0xO1xyXG5cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXAgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnQ291bnQgIT09IHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2VsZWN0ZWQtZ3JvdXAtY29udGFpbmVyXCIpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCB0aGlzLm9uR3JvdXBTY3JvbGwuYmluZCh0aGlzKSwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgdGhlIHNjcm9sbCBsaXN0ZW5lciBmcm9tIHRoZSBncm91cCBjb250YWluZXIuXHJcbiAgICovXHJcbiAgcmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgdGhpcy5vbkdyb3VwU2Nyb2xsLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciB0aGUgc2Nyb2xsIGV2ZW50LCBkZXRlcm1pbmUgaWYgdGhlIHNjcm9sbCBoaXQgdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIGNvbnRhaW5lci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XHJcbiAgICovXHJcbiAgb25Hcm91cFNjcm9sbChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIGxldCBuZXdTY3JvbGxUb3A6IG51bWJlciA9IE1hdGgucm91bmQodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCk7XHJcbiAgICAgIGxldCBzY3JvbGxQb3NpdGlvbjogbnVtYmVyID0gMTtcclxuICAgICAgaWYgKG5ld1Njcm9sbFRvcCA9PT0gMCAmJiBzY3JvbGxQb3NpdGlvbiAhPT0gMCkge1xyXG4gICAgICAgIHNjcm9sbFBvc2l0aW9uID0gMDtcclxuICAgICAgfSBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbiAhPT0gMiAmJiBNYXRoLmFicyh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gKG5ld1Njcm9sbFRvcCArIHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5vZmZzZXRIZWlnaHQpKSA8IDMpIHtcclxuICAgICAgICBzY3JvbGxQb3NpdGlvbiA9IDI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5sYXN0U2Nyb2xsUG9zaXRpb24gIT09IHNjcm9sbFBvc2l0aW9uICYmIHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uID09PSAxKSB7XHJcbiAgICAgICAgaWYgKHNjcm9sbFBvc2l0aW9uID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwUHJldmlvdXNQYWdlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbiA9PT0gMikge1xyXG4gICAgICAgICAgdGhpcy5ncm91cE5leHRQYWdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSBuZXdTY3JvbGxUb3A7XHJcbiAgICAgIHRoaXMubGFzdFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHNjcm9sbGluZyBoaXRzIHRoZSB0b3AsIGxvYWQgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgZ3JvdXAgZGF0YS5cclxuICAgKi9cclxuICBncm91cFByZXZpb3VzUGFnZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIkZpcnN0IHBhZ2UgYWxyZWFkeSBsb2FkZWQuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW1vdmVHcm91cFNjcm9sbExpc3RlbmVyKCk7XHJcblxyXG4gICAgbGV0IGdyb3VwRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSB0aGlzLmZpbHRlcnMuc2xpY2UoKTtcclxuICAgIGZvciAobGV0IGdyb3VwRmllbGQgb2YgdGhpcy5ncm91cGluZy5maWVsZHMpIHtcclxuICAgICAgZ3JvdXBGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhncm91cEZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLnNlbGVjdGVkUm93R3JvdXBbZ3JvdXBGaWVsZF0sIHVuZGVmaW5lZCwgXCJFXCIsIHRydWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLmJ1c3kgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0c1swXS5uZXh0KHRydWUpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRGF0YUNhbGwobmV3IEhjaUdyaWREdG8oZ3JvdXBGaWx0ZXJzLCB0aGlzLnNvcnRzLCBuZXcgSGNpUGFnaW5nRHRvKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gLSAxLCB0aGlzLmdyb3VwUGFnZVNpemUpLCBuZXcgSGNpR3JvdXBpbmdEdG8odGhpcy5ncm91cGluZy5maWVsZHMsIGZhbHNlKSkpXHJcbiAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLmJ1c3kgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBvZih1bmRlZmluZWQpLnBpcGUoZGVsYXkoNTApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcInNjcm9sbFRvcFwiLCBcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuYWRkR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG4gICAgICAgIH0pKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsRGF0YTogSGNpRGF0YUR0bykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cyA9IGV4dGVybmFsRGF0YS5kYXRhLmNvbmNhdCh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gLT0gMTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgJiYgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUGFnZU1heCAtIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gPj0gdGhpcy5ncm91cENhY2hlTnVtUGFnZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwLnJnUm93cy5zcGxpY2UodGhpcy5ncm91cENhY2hlTnVtUGFnZXMgKiB0aGlzLmdyb3VwUGFnZVNpemUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4IC09IDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIHNjcm9sbGluZyBoaXRzIHRoZSBib3R0b20sIGxvYWQgdGhlIG5leHQgcGFnZSBvZiBncm91cCBkYXRhLlxyXG4gICAqL1xyXG4gIGdyb3VwTmV4dFBhZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAoKHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggKyAxKSAqIHRoaXMuZ3JvdXBQYWdlU2l6ZSA+PSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdDb3VudCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJBbGwgcm93cyBhbHJlYWR5IGxvYWRlZFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVtb3ZlR3JvdXBTY3JvbGxMaXN0ZW5lcigpO1xyXG5cclxuICAgIGxldCBncm91cEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gdGhpcy5maWx0ZXJzLnNsaWNlKCk7XHJcbiAgICBmb3IgKGxldCBncm91cEZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgIGdyb3VwRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZ3JvdXBGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5zZWxlY3RlZFJvd0dyb3VwW2dyb3VwRmllbGRdLCB1bmRlZmluZWQsIFwiRVwiLCB0cnVlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgdGhpcy5idXN5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdHNbMF0ubmV4dCh0cnVlKTtcclxuICAgICAgdGhpcy5leHRlcm5hbERhdGFDYWxsKG5ldyBIY2lHcmlkRHRvKGdyb3VwRmlsdGVycywgdGhpcy5zb3J0cywgbmV3IEhjaVBhZ2luZ0R0byh0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4ICsgMSwgdGhpcy5ncm91cFBhZ2VTaXplKSwgbmV3IEhjaUdyb3VwaW5nRHRvKHRoaXMuZ3JvdXBpbmcuZmllbGRzLCBmYWxzZSkpKVxyXG4gICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3RzWzBdLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgdGhpcy5idXN5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgb2YodW5kZWZpbmVkKS5waXBlKGRlbGF5KDUwKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5zY3JvbGxUb3AgPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgICB9KSlcclxuICAgICAgICAuc3Vic2NyaWJlKChleHRlcm5hbERhdGE6IEhjaURhdGFEdG8pID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3MgPSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdSb3dzLmNvbmNhdChleHRlcm5hbERhdGEuZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWF4ICs9IDE7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzICYmIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNYXggLSB0aGlzLnNlbGVjdGVkUm93R3JvdXAucmdQYWdlTWluID49IHRoaXMuZ3JvdXBDYWNoZU51bVBhZ2VzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1Jvd3Muc3BsaWNlKDAsIHRoaXMuZ3JvdXBQYWdlU2l6ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dHcm91cC5yZ1BhZ2VNaW4gKz0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBmaXJzdCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VGaXJzdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UoMCk7XHJcbiAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHbyB0byB0aGUgcHJldmlvdXMgcGFnZS5cclxuICAgKi9cclxuICBwdWJsaWMgZG9QYWdlUHJldmlvdXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0UGFnZSgpID4gMCkge1xyXG4gICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UodGhpcy5wYWdpbmcuZ2V0UGFnZSgpIC0gMSk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tBY3RpdmVSb3dJZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHbyB0byB0aGUgbmV4dCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBkb1BhZ2VOZXh0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmJ1c3kpIHtcclxuICAgICAgaWYgKHRoaXMucGFnaW5nLmdldFBhZ2UoKSA8IHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxKSB7XHJcbiAgICAgICAgdGhpcy5wYWdpbmcuc2V0UGFnZSh0aGlzLnBhZ2luZy5nZXRQYWdlKCkgKyAxKTtcclxuICAgICAgICB0aGlzLnBhZ2luZ1N1YmplY3QubmV4dCh0aGlzLnBhZ2luZyk7XHJcbiAgICAgICAgdGhpcy5jaGVja0FjdGl2ZVJvd0lkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIHRvIHRoZSBsYXN0IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIGRvUGFnZUxhc3QoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxKTtcclxuICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICB0aGlzLmNoZWNrQWN0aXZlUm93SWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFmdGVyIHBhZ2UgdHVybnMsIGNoZWNrIGlmIHRoZSBwYWdlIGhhcyB0aGUgcm93IHRoYXQgbmVlZCB0byBiZSBoaWdobGlnaHRlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgY2hlY2tBY3RpdmVSb3dJZCgpOiB2b2lkIHtcclxuICAgIC8vaWYgYSByb3cgaXMgc2VsZWN0ZWQsIGFuZCByb3dJZCBmaWVsZCBpcyBzcGVjaWZpZWQgKHVzdWFsbHkgY29uZmlndXJlZCBieSBjb25maWcpXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFJvdyAmJiB0aGlzLnJvd0lkKSB7XHJcbiAgICAgIGxldCBpZCA9IHRoaXMuc2VsZWN0ZWRSb3dbdGhpcy5yb3dJZF07XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKGlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29uY2F0IGdyb3VwIGJ5IGZpZWxkcyB0byBjb21tYSBkZWxpbWl0ZWQgd29yZHNcclxuICAgKiBvciBkZWxpbWl0ZXIgZGVsaW1pdGVkIHdvcmRzIGlmIHRoZSBkZWxpbWluYXRvciBoYXMgaXRzIGRlZmF1bHQgdmFsdWUgc2V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtSb3dHcm91cH0gcm93R3JvdXBcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEdyb3VwRGlzcGxheShyb3dHcm91cDogUm93R3JvdXApOiBzdHJpbmcge1xyXG4gICAgbGV0IGRpc3BsYXk6IHN0cmluZztcclxuXHJcbiAgICBpZiAodGhpcy5ncm91cERpc3BsYXkpIHtcclxuICAgICAgZGlzcGxheSA9IHRoaXMuZ3JvdXBEaXNwbGF5O1xyXG4gICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmdyb3VwaW5nLmZpZWxkcykge1xyXG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5LnJlcGxhY2UoZmllbGQsIHJvd0dyb3VwW2ZpZWxkXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZ3JvdXBpbmcuZmllbGRzKSB7XHJcbiAgICAgICAgaWYgKHJvd0dyb3VwW2ZpZWxkXSAhPT0gbnVsbCAmJiByb3dHcm91cFtmaWVsZF0gIT09IFwiXCIpIHtcclxuICAgICAgICAgIGRpc3BsYXkgPSAoZGlzcGxheSkgPyBkaXNwbGF5ICsgdGhpcy5kZWxpbWl0ZXIgKyByb3dHcm91cFtmaWVsZF0gOiByb3dHcm91cFtmaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRpc3BsYXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0VsZW1lbnRSZWZ9IHNlbGVjdGVkUm93R3JvdXBDb250YWluZXJcclxuICAgKi9cclxuICBAVmlld0NoaWxkKFwic2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lclwiLCB7XHJcbiAgICByZWFkOiBFbGVtZW50UmVmLFxyXG4gICAgc3RhdGljOiBmYWxzZVxyXG4gIH0pIHNldCBzZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyU2V0dGVyKHNlbGVjdGVkUm93R3JvdXBDb250YWluZXI6IEVsZW1lbnRSZWYpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIgJiYgdGhpcy5zZXRTY3JvbGxUb3ApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnNjcm9sbFRvcCA9ICg8SFRNTEVsZW1lbnQ+dGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIjaW5uZXJSb3dHcm91cENvbnRhaW5lclwiKSkub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICB0aGlzLnNldFNjcm9sbFRvcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyICYmIHNlbGVjdGVkUm93R3JvdXBDb250YWluZXIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyID0gc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgbGV0IGdyb3VwU2VsZWN0ZWRQYXJlbnQ6IEhUTUxFbGVtZW50ID0gPEhUTUxFbGVtZW50PnRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lci5jbG9zZXN0KFwiLmdyb3VwLXNlbGVjdGVkLXBhcmVudFwiKTtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShncm91cFNlbGVjdGVkUGFyZW50LCBcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xyXG5cclxuICAgICAgb2YobnVsbCkucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhncm91cFNlbGVjdGVkUGFyZW50LCBcImFjdGl2ZVwiKTtcclxuICAgICAgICB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIgPSB0aGlzLnNlbGVjdGVkUm93R3JvdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNpbm5lclJvd0dyb3VwQ29udGFpbmVyXCIpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zZWxlY3RlZFJvd0dyb3VwQ29udGFpbmVyLCBcImhlaWdodFwiLCB0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuaW5uZXJSb3dHcm91cENvbnRhaW5lciwgXCJtaW4taGVpZ2h0XCIsICh0aGlzLmlubmVyUm93R3JvdXBDb250YWluZXIub2Zmc2V0SGVpZ2h0ICsgMzApICsgXCJweFwiKTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VsZWN0ZWRSb3dHcm91cENvbnRhaW5lciwgXCJzY3JvbGxUb3BcIiwgXCIxXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmFkZEdyb3VwU2Nyb2xsTGlzdGVuZXIoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gY29udHJvbCBkZXNlbGVjdGlvbi5cclxuICAgKi9cclxuICBkZXNlbGVjdEFsbFJvd3MoKTogdm9pZCB7XHJcbiAgICBsZXQgZXM6IEhUTUxFbGVtZW50W10gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnJvdy1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSBncm91cCBjbGljayBmdW5jdGlvbiB0byBjb250cm9sIGRlc2VsZWN0aW9uLlxyXG4gICAqL1xyXG4gIGRlc2VsZWN0QWxsR3JvdXBzKCk6IHZvaWQge1xyXG4gICAgbGV0IGVzOiBIVE1MRWxlbWVudFtdID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5ncm91cC1wYXJlbnRcIik7XHJcbiAgICBmb3IgKGxldCBlIG9mIGVzKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZSwgXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBbGxvdyBhIGN1c3RvbSByb3cgY2xpY2sgZnVuY3Rpb24gdG8gc2VsZWN0IGEgcm93LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkXHJcbiAgICovXHJcbiAgYWN0aXZhdGVSb3dCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGl2YXRlR3JvdXBCeUlkKGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCBlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcm93LWdyb3VwLVwiICsgaWQpO1xyXG4gICAgaWYgKGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlLCBcImFjdGl2ZVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hldGhlciBhIHBhcnRpY3VsYXIgZ3JvdXAgaXMgZXhwYW5kZWQgb3IgY29sbGFwc2VkXHJcbiAgICogQHBhcmFtIHJvd0dyb3VwXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBFeHBhbmRlZEluZGljYXRvcihyb3dHcm91cDogUm93R3JvdXApIHtcclxuICAgIGlmIChyb3dHcm91cC5yZ0V4cGFuZGVkID09PSB0cnVlKSB7XHJcbiAgICAgIHJldHVybiBcIm1pbnVzXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJwbHVzXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1RPRG8gOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHVzZXIgdXNlcyBhIGN1c3RvbSBncm91cFRlbXBsYXRlXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlIFNlYXJjaExpc3RDb21wb25lbnQgdG8gbmF2aWdhdGUgdG8gYSBwYWdlIGFuZCBoaWdobGlnaHQgdGhlIGdpdmVuIGdyb3VwIGl0ZW0sIG9yXHJcbiAgICogdGhlIHJvdyAoaW4tY2FzZSBvZiBub24tZ3JvdXBlZCBsaXN0KVxyXG4gICAqIFRoaXNcclxuICAgKiBAcGFyYW0gZ3JvdXBJZCA6IFRoaXMgc2hvdWxkIGNvbnRhaW4gYSBzdHJpbmcgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGdyb3VwLWRpc3BsYXlcclxuICAgKiBAcGFyYW0gcm93SWQgOiBUaGlzIGlzIHRoZSBhY3R1YWwgcm93SWQgZm9yIHRoZSByb3cgdG8gYmUgc2VsZWN0ZWQuXHJcbiAgICovXHJcbiAgbmF2aWdhdGVUb1BhZ2VDb250YWluaW5nRWxlbWVudChncm91cElkOiBzdHJpbmcsIHJvd0lkOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvL0ludHJvZHVjaW5nIHRoZSBhZGRpdGlvbmFsIGNoZWNrIGJlbG93IHRvIGFkZHJlc3MgQ0NSVUktMTE2My5cclxuICAgIGlmICghdGhpcy5ib3VuZERhdGEgfHwgdGhpcy5ib3VuZERhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIENoZWNrIGlmIGdyb3VwZWRcclxuICAgIGxldCByb3dHcm91cGVkOiBib29sZWFuID0gdGhpcy5ncm91cGluZy5maWVsZHMgJiYgdGhpcy5ncm91cGluZy5maWVsZHMubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAocm93R3JvdXBlZCkge1xyXG4gICAgICB0aGlzLmdyb3VwZWREYXRhU2V0LmZvckVhY2goKHJvd0dyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGxldCBncm91cERpc3BsYXkgPSB0aGlzLmdldEdyb3VwRGlzcGxheShyb3dHcm91cCk7XHJcbiAgICAgICAgaWYgKGdyb3VwRGlzcGxheS5pbmNsdWRlcyhncm91cElkKSkge1xyXG4gICAgICAgICAgLy9TZXQgdGhlIHBhZ2UgdG8gdGhlIGluZGV4XHJcbiAgICAgICAgICBpZiAoIXRoaXMuYnVzeSkge1xyXG4gICAgICAgICAgICBsZXQgcGFnZSA9IE1hdGguZmxvb3IoaW5kZXggLyB0aGlzLnBhZ2luZy5nZXRQYWdlU2l6ZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5nLmdldE51bVBhZ2VzKCkgLSAxID49IHBhZ2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBhZ2luZy5zZXRQYWdlKHBhZ2UpO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nU3ViamVjdC5uZXh0KHRoaXMucGFnaW5nKTtcclxuICAgICAgICAgICAgICAvL3RoaXMuZGVmYXVsdEdyb3VwQ2xpY2sobnVsbCwgdGhpcywgcm93R3JvdXApO1xyXG4gICAgICAgICAgICAgIGxldCBncm91cFNlbGVjdGVkUGFyZW50ID0gPEhUTUxFbGVtZW50Pjx1bmtub3duPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0Um93R3JvdXBJZChyb3dHcm91cCkpO1xyXG4gICAgICAgICAgICAgIGdyb3VwU2VsZWN0ZWRQYXJlbnQuY2xpY2soKTtcclxuICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0QWxsUm93cygpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJvdW5kRGF0YS5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0Um93SWQocm93KSA9PT0gcm93SWQpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5idXN5KSB7XHJcbiAgICAgICAgICAgIGxldCBwYWdlID0gTWF0aC5mbG9vcihpbmRleCAvIHRoaXMucGFnaW5nLmdldFBhZ2VTaXplKCkpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wYWdpbmcuZ2V0TnVtUGFnZXMoKSAtIDEgPj0gcGFnZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5nLnNldFBhZ2UocGFnZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdpbmdTdWJqZWN0Lm5leHQodGhpcy5wYWdpbmcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3dCeUlkKHJvd0lkLnJlcGxhY2UoXCJyb3ctXCIsIFwiXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJlc3VsdE1lc3NhZ2UoZGF0YTogT2JqZWN0W10pIHtcclxuICAgIGlmICh0aGlzLnNob3dSZXN1bHRzQ291bnQgJiYgZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRNZXNzYWdlID0gZGF0YS5sZW5ndGggKyBcIiByZXN1bHQocylcIjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0TWVzc2FnZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==