@libs-ui/components-list 0.2.134 → 0.2.136

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  ;
2
2
  export {};
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWl0ZW0uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2xpc3Qvc3JjL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFKQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSUF2YXRhckNvbmZpZyB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWF2YXRhclwiO1xuaW1wb3J0IHsgSUJhZGdlIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtYmFkZ2VcIjtcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblwiO1xuaW1wb3J0IHsgSVNvcnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXNvcnRcIjtcbmltcG9ydCB7IElDaGVja2JveEl0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1jaGVja2JveC1ncm91cFwiO1xuaW1wb3J0IHsgSUxhYmVsIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWxcIjtcbmltcG9ydCB7IElQb3BvdmVyLCBJUG9wb3Zlck92ZXJsYXksIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IElIdHRwUmVxdWVzdENvbmZpZyB9IGZyb20gXCJAbGlicy11aS9zZXJ2aWNlcy1odHRwLXJlcXVlc3RcIjtcbmltcG9ydCB7IFRZUEVfVEVNUExBVEUgfSBmcm9tIFwiLi90ZW1wbGF0ZXMtdHlwZS50eXBlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFdyaXRhYmxlU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJTGlzdENvbmZpZ0l0ZW0ge1xuICB0eXBlOiBUWVBFX1RFTVBMQVRFO1xuICBodHRwUmVxdWVzdERhdGE/OiBXcml0YWJsZVNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWc+O1xuICBjb25maWdUZW1wbGF0ZVRleHQ/OiBXcml0YWJsZVNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1UZXh0PjtcbiAgY29uZmlnVGVtcGxhdGVSYWRpbz86IFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbVJhZGlvPjtcbiAgY29uZmlnVGVtcGxhdGVDaGVja2JveD86IFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbUNoZWNrYm94PjtcbiAgY29uZmlnVGVtcGxhdGVHcm91cD86IFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbUdyb3VwPjtcbiAgY29uZmlnVGVtcGxhdGVUYWc/OiBXcml0YWJsZVNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1UYWc+O1xuICBjb25maWdEZXNjcmlwdGlvbkdyb3VwPzogV3JpdGFibGVTaWduYWw8SUNvbmZpZ0Rlc2NyaXB0aW9uR3JvdXA+O1xuICB0ZXh0Tm9EYXRhPzogc3RyaW5nO1xuICB0ZXh0Tm9EYXRhQ2xhc3NJbmNsdWRlPzogc3RyaW5nO1xuICB0ZXh0U2VhcmNoTm9EYXRhPzogc3RyaW5nO1xuICBhdXRvU2VsZWN0Rmlyc3RJdGVtPzogYm9vbGVhbjsgLy8gbuG6v3UgbmjGsCBjw7MgZOG7ryBsaeG7h3UgbcOgIGNoxrBhIGPDsyBrZXlTZWxlY3RlZCB0aMOsIHPhur0gdOG7sSDEkeG7mW5nIGNo4buNbiBwaOG6p24gdOG7qyDEkeG6p3UgdGnDqm47XG4gIGJhY2tncm91bmRMaXN0Q3VzdG9tPzogc3RyaW5nO1xuICBwYWRkaW5nTGVmdEl0ZW0/OiBib29sZWFuO1xuICBzb3J0PzogKGl0ZW1zOiBBcnJheTxhbnk+KSA9PiB2b2lkO1xuICBoYXNJY29uTm9EYXRhPzogYm9vbGVhbjtcbiAgaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaWdub3JlRml4SGVpZ2h0U2hvd0RhdGFXaGVuTm90U2VhcmNoPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaGlnaGxpZ2h0VGV4dFNlYXJjaEluUmVzdWx0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaGVpZ2h0SXRlbT86IG51bWJlcjtcbiAgbWluSGVpZ2h0SXRlbT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGlzdENvbmZpZ0l0ZW1UZXh0IHtcbiAgZmllbGRLZXk6IHN0cmluZztcbiAgZ2V0VmFsdWU/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIGZpZWxkR2V0SW1hZ2U/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZUltYWdlPzogc3RyaW5nO1xuICBnZXRJbWFnZT86IChkYXRhOiBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdldEltYWdlRXJyb3I/OiAoZGF0YTogSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBpbWdUeXBlSWNvbj86IGJvb2xlYW47XG4gIGlnbm9yZUljb25TZWxlY3RlZD86IGJvb2xlYW47XG4gIGNsYXNzSW5jbHVkZUljb25TZWxlY3RlZD86IHN0cmluZztcbiAgaWdub3JlU2hvd0ZpZWxkTGFiZWw/OiBib29sZWFuO1xuICBnZXRIcmVmQnV0dG9uPzogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xuICBnZXRDbGFzc0l0ZW0/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIGdldENsYXNzSW5jbHVkZVBvcG92ZXI/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIGdldENvbmZpZ0J1dHRvbkxlZnQ/OiAoaXRlbTogYW55KSA9PiBJQnV0dG9uO1xuICBnZXRDbGFzc0ljb25MZWZ0PzogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xuICBnZXRDb25maWdIb3ZlckRhbmdlcj86IChpdGVtOiBhbnkpID0+IGJvb2xlYW47XG4gIGdldFBvcG92ZXI/OiAoaXRlbTogYW55KSA9PiBJUG9wb3ZlciB8IHVuZGVmaW5lZDtcbiAgcm93cz86IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbVRleHRSb3c+Pj47XG4gIGNsYXNzUm93c1dyYXBwZXI/OiBzdHJpbmc7XG4gIGNsYXNzUm93cz86IHN0cmluZztcbiAgY29uZmlnTGFiZWxQb3BvdmVyPzogV3JpdGFibGVTaWduYWw8SVBvcG92ZXJPdmVybGF5PjtcbiAgYXV0b1Njcm9sbFRvSXRlbVNlbGVjdGVkPzogYm9vbGVhbjtcbiAgaXRlbVNvcnQ/OiBXcml0YWJsZVNpZ25hbDxJU29ydD47IC8vIGJp4bq/biBsxrB1IHRy4buvIGl0ZW0gc29ydFxuICBhY3Rpb25Tb3J0PzogKGl0ZW1Tb3J0OiBJU29ydCkgPT4gdm9pZDsgLy8gc2V0IGjDoG0gbsOgeSBu4bq/dSBtdeG7kW4gYuG6rXQgc29ydCB0csOqbiBsaXN0XG4gIG5vdFVzZVZpcnR1YWxTY3JvbGw/OiBib29sZWFuOyAvLyBz4butIGThu6VuZyBjaG8gdHLGsOG7nW5nIGjhu6NwIGNvbmZpZyBiYWRnZSB0cm9uZyB0YWJsZVxuICBnZXRBdmF0YXJDb25maWc/OiAoaXRlbTogYW55KSA9PiBJQXZhdGFyQ29uZmlnO1xuICBnZXRDb25maWdBbGlnblN0YXJ0PzogKGl0ZW06IGFueSkgPT4gYm9vbGVhbjtcbiAgc3R5bGVQYWRkaW5nUmlnaHRJdGVtT3RoZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMaXN0Q29uZmlnSXRlbVRhZyBleHRlbmRzIElMaXN0Q29uZmlnSXRlbVRleHQge1xuICBmaWVsZEtleTogc3RyaW5nO1xuICBpZ25vcmVJdGVtRmxleFdyYXA/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVDb250YWluZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RDb25maWdJdGVtUmFkaW8ge1xuICBmaWVsZEtleTogc3RyaW5nO1xuICBmaWVsZEdldEltYWdlPzogc3RyaW5nO1xuICBjbGFzc0luY2x1ZGVJbWFnZT86IHN0cmluZztcbiAgaGFzQXZhdGFyUGFnZXNTb2NpYWw/OiBib29sZWFuO1xuICBoYXNBdmF0YXJHcm91cFNvY2lhbD86IGJvb2xlYW47XG4gIGdldFZhbHVlPzogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xuICBnZXRQb3BvdmVyPzogKGl0ZW06IGFueSkgPT4gSVBvcG92ZXIgfCB1bmRlZmluZWQ7XG4gIHJvd3M/OiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1UZXh0Um93Pj4+O1xuICBjbGFzc1Jvd3M/OiBzdHJpbmc7XG4gIGF1dG9TY3JvbGxUb0l0ZW1TZWxlY3RlZD86IGJvb2xlYW47XG4gIHpJbmRleFBvcG92ZXI/OiBudW1iZXI7XG4gIGdldEF2YXRhckNvbmZpZz86IChpdGVtOiBhbnkpID0+IElBdmF0YXJDb25maWc7XG4gIGdldENsYXNzSXRlbT86IChpdGVtOiBhbnkpID0+IHN0cmluZztcbiAgY2xhc3NJdGVtSW5jbHVkZT86IHN0cmluZztcbiAgZ2V0SW1hZ2U/OiAoZGF0YTogSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRJbWFnZUVycm9yPzogKGRhdGE6IElEYXRhRnVuY3Rpb25DYWxsSW5Db25maWcpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGlzdENvbmZpZ0l0ZW1DaGVja2JveCB7XG4gIGF1dG9TZWxlY3RBbGxJdGVtPzogYm9vbGVhbjsgLy8gZHJvcGRvd24gbuG6v3UgbmjGsCBjw7MgZOG7ryBsaeG7h3UgbcOgIGNoxrBhIGPDsyBtdWx0aUtleVNlbGVjdGVkIHRow6wgc+G6vSB04buxIMSR4buZbmcgY2jhu41uIHBo4bqnbiB04burIMSR4bqndSB0acOqbjtcbiAgY2xhc3NMaXN0SW5jbHVkZT86IHN0cmluZztcbiAgaHR0cFJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3Q/OiBXcml0YWJsZVNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWc+O1xuICBjb25maWdCdXR0b25TZWxlY3RBbmRVbmRTZWxlY3RJdGVtPzogV3JpdGFibGVTaWduYWw8e1xuICAgIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgICBidXR0b25DaGVja0FsbD86IElCdXR0b247XG4gICAgYnV0dG9uVW5jaGVja0FsbD86IElCdXR0b247XG4gIH0+O1xuICBjb25maWdDaGVja2JveENoZWNrQWxsPzogV3JpdGFibGVTaWduYWw8SUNoZWNrYm94SXRlbT47XG4gIGNsYXNzSW5jbHVkZUhhc0NvbmZpZ0NoZWNrQm94QWxsPzogc3RyaW5nO1xuICBmaWVsZEtleTogc3RyaW5nO1xuICBnZXRWYWx1ZT86IChpdGVtOiBhbnkpID0+IHN0cmluZztcbiAgZ2V0UG9wb3Zlcj86IChpdGVtOiBhbnkpID0+IElQb3BvdmVyO1xuICBnZXRDbGFzc0l0ZW0/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIGdldEltYWdlPzogKGRhdGE6IElEYXRhRnVuY3Rpb25DYWxsSW5Db25maWcpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZ2V0SW1hZ2VFcnJvcj86IChkYXRhOiBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGZpZWxkR2V0SW1hZ2U/OiBzdHJpbmc7XG4gIGhhc0F2YXRhclBhZ2VzU29jaWFsPzogYm9vbGVhbjtcbiAgaGFzQXZhdGFyR3JvdXBTb2NpYWw/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVJbWFnZT86IHN0cmluZztcbiAgcm93cz86IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbVRleHRSb3c+Pj47XG4gIGNsYXNzUm93c1dyYXBwZXI/OiBzdHJpbmc7XG4gIGNsYXNzUm93cz86IHN0cmluZztcbiAgaWdub3JlQ2xpY2tJdGVtVW5DaGVja2VkPzogYm9vbGVhbjtcbiAgY2xhc3NMYWJlbEluY2x1ZGU/OiBzdHJpbmc7XG4gIGZpZWxkR2V0TGlua0ltYWdlRXJyb3I/OiBzdHJpbmc7XG4gIHpJbmRleFBvcG92ZXI/OiBudW1iZXI7XG4gIGNsYXNzSXRlbUluY2x1ZGU/OiBzdHJpbmc7XG4gIGdldEF2YXRhckNvbmZpZz86IChpdGVtOiBhbnkpID0+IElBdmF0YXJDb25maWc7XG4gIGNsYXNzQ2hlY2tib3hJdGVtSW5jbHVkZT86IHN0cmluZztcbiAgaWdub3JlSXRlbVdpZHRoMTAwPzogYm9vbGVhbjtcbiAgY2xhc3NJbmNsdWRlTGFzdFZpZXdJdGVtPzogc3RyaW5nO1xuICBjbGFzc0luY2x1ZGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RDb25maWdJdGVtVGV4dFJvdyB7XG4gIGNsYXNzUm93Pzogc3RyaW5nO1xuICBjbGFzc0l0ZW1TZWxlY3RlZD86IHN0cmluZztcbiAgZ2V0VmFsdWU/OiAoZGF0YTogSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBjbGFzc0dldFZhbHVlPzogc3RyaW5nO1xuICBjbGFzc0NvbHM/OiBzdHJpbmc7XG4gIGNvbHM/OiBXcml0YWJsZVNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1UZXh0Q29sPj4+O1xuICBnZXRSb3dTdHlsZXNEeW5hbWljQ29scz86IChpdGVtOiBhbnkpID0+IHN0cmluZztcbiAgYWN0aW9uPzogKGl0ZW06IGFueSkgPT4gdm9pZDtcbiAgZ2V0SW1hZ2U/OiAoaXRlbTogSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRDbGFzc0ltYWdlPzogKGl0ZW06IElEYXRhRnVuY3Rpb25DYWxsSW5Db25maWcpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZ2V0SW1hZ2VFcnJvcj86IChpdGVtOiBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdldFBvcG92ZXJDb25maWc/OiAoaXRlbTogYW55KSA9PiBPYnNlcnZhYmxlPElQb3BvdmVyT3ZlcmxheT47XG4gIGdldEF2YXRhckNvbmZpZz86IChpdGVtOiBhbnkpID0+IElBdmF0YXJDb25maWc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZyB7XG4gIHZhbHVlPzogYW55O1xuICBpdGVtPzogYW55O1xuICBvdGhlckRhdGE/OiBhbnk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElMaXN0Q29uZmlnSXRlbVRleHRDb2wge1xuICBnZXRDbGFzc0NvbD86IChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZ2V0VmFsdWU/OiAoZGF0YTogSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRQb3BvdmVyPzogKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gSVBvcG92ZXIgfCB1bmRlZmluZWQ7XG4gIGFjdGlvbj86IChpdGVtOiBhbnkpID0+IHZvaWQ7XG4gIGdldEltYWdlPzogKGl0ZW06IGFueSkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRDbGFzc0ltYWdlPzogKGl0ZW06IGFueSkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRJbWFnZUVycm9yPzogKGl0ZW06IGFueSkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRDb25maWdCYWRnZT86IChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IElCYWRnZSB8IHVuZGVmaW5lZDtcbiAgZ2V0U3R5bGVzRHluYW1pY0NvbD86IChkYXRhOiBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdldEJ1dHRvbj86IChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IElCdXR0b24gfCB1bmRlZmluZWQ7XG4gIGdldExhYmVsU3dpdGNoPzogKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gSUxhYmVsIHwgdW5kZWZpbmVkO1xuICBnZXRBdmF0YXJDb25maWc/OiAoaXRlbTogYW55KSA9PiBJQXZhdGFyQ29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMaXN0Q29uZmlnSXRlbUdyb3VwIHtcbiAgZmxhdEl0ZW1zU3VwcG9ydEF1dG9TZWxlY3Q/OiAoZGF0YTogQXJyYXk8YW55PikgPT4gQXJyYXk8YW55PjsgLy8gc+G7rSBk4bulbmcga2hpIG114buRbiBt4bq3YyDEkeG7i25oIHNlbGVjdGVkIHThuqV0IGPhuqMgY8OhYyBrZXkgdHJvbmcgZ3JvdXBcbiAgZmllbGRLZXk/OiBzdHJpbmc7XG4gIGlzVmlld1JhZGlvPzogYm9vbGVhbjtcbiAgdGltZUludGVydmFsQ2FsY3VsYXRvckhlaWdodD86IG51bWJlcjsgLy8gdHLGsMahzIBuZyBoxqHMo3AgdHJvbmcgcGFnZSBuaGnDqsyAdSBsaXN0IHRoYW0gc8O0zIEgbmHMgHkgc2XMgyB0aGF5IMSRw7TMiWkgdHXMgHkgdMawzIBuZyB0csawxqHMgG5nIGjGocyjcFxuICBjb25maWdCdXR0b25TZWxlY3RBbmRVbmRTZWxlY3RJdGVtPzogV3JpdGFibGVTaWduYWw8e1xuICAgIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgICBidXR0b25DaGVja0FsbD86IElCdXR0b247XG4gICAgYnV0dG9uVW5jaGVja0FsbD86IElCdXR0b247XG4gIH0+O1xuICBjb25maWdDaGVja2JveENoZWNrQWxsPzogV3JpdGFibGVTaWduYWw8SUNoZWNrYm94SXRlbT47XG4gIGNsYXNzSW5jbHVkZUhhc0NvbmZpZ0NoZWNrQm94QWxsPzogc3RyaW5nO1xuICBnZXRMYWJlbFNlYXJjaD86IChpdGVtOiBhbnkpID0+IHN0cmluZzsgLy8gRMO5bmcgxJHhu4MgIGN1c3RvbXMga2hpIHNlYXJjaCBraMO0bmcgY2jhu4kgZmllbGQgbGFiZWw6IHbDrSBk4bulOiBzZWFyY2ggY+G6oyBjb2RlIHbDoCBuYW1lIG5oxrBuZyBjaOG7iSBoaeG7g24gdGjhu4sgbmFtZVxuICBnZXRMYWJlbEdyb3VwOiAoZ3JvdXA6IGFueSkgPT4gc3RyaW5nO1xuICBnZXRFeHBhbmRHcm91cD86IChncm91cDogYW55KSA9PiBib29sZWFuO1xuICBnZXRQb3BvdmVyR3JvdXA/OiAoZ3JvdXA6IGFueSkgPT4gc3RyaW5nO1xuICBnZXRNYXhMZXZlbEdyb3VwOiAoZ3JvdXA6IGFueSkgPT4gbnVtYmVyO1xuICBnZXREZXNjcmlwdGlvbkdyb3VwV2hlbk5vRGF0YT86IChncm91cDogYW55KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGdldEJ1dHRvbkdyb3VwPzogKGdyb3VwOiBhbnkpID0+IElCdXR0b247XG4gIGdldEljb25FbXB0eURhdGFJbkdyb3VwPzogKGdyb3VwOiBhbnkpID0+IGJvb2xlYW47IC8vIGhp4buDbiB0aOG7iyBpbWFnZSBlbXB0eSB0cm9uZyB04burbmcgZ3JvdXBcbiAgaWdub3JlQ2hlY2tib3hHcm91cD86IGJvb2xlYW47XG4gIGNsYXNzSW5jbHVkZU5vZGF0YT86IHN0cmluZztcbiAgY2xhc3NJbmNsdWRlR3JvdXA/OiBzdHJpbmc7XG4gIGlnbm9yZVJhZGlvR3JvdXA/OiBib29sZWFuO1xuICBpZ25vcmVUZXh0VXBwZXJjYXNlTGFiZWxHcm91cD86IGJvb2xlYW47XG4gIGlnbm9yZUdyb3VwTGluZT86IGJvb2xlYW47XG4gIG1hcmdpblRvcEhhc0xpbmU/OiBudW1iZXI7XG4gIGlnbm9yZUNsaWNrTGFiZWxHcm91cD86IGJvb2xlYW47XG5cbiAgZmllbGRHZXRJdGVtczogc3RyaW5nO1xuICBmaWVsZEdldEF2YXRhckl0ZW0/OiBzdHJpbmc7XG4gIGltZ1R5cGVJY29uPzogYm9vbGVhbjtcbiAgY2xhc3NJbWFnZUluY2x1ZGU/OiBzdHJpbmc7XG4gIGlzVmlld1RyZWU/OiBib29sZWFuO1xuICBpc1ZpZXdUcmVlSnNvbj86IGJvb2xlYW47XG4gIGdldExhYmVsSXRlbTogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xuICBnZXRQb3BvdmVySXRlbT86IChpdGVtOiBhbnkpID0+IElQb3BvdmVyIHwgdW5kZWZpbmVkO1xuICBhY3Rpb25Qb3BvdmVyQnlJdGVtPzogKGl0ZW06IGFueSwgZXZlbnQ6IFRZUEVfUE9QT1ZFUl9FVkVOVCkgPT4gdm9pZDtcbiAgZ2V0RXhwYW5kSXRlbT86IChncm91cDogYW55KSA9PiBib29sZWFuO1xuICBnZXRCb251c1BhZGRpbmdMZWZ0SXRlbT86IChpdGVtOiBhbnksIHBhcmVudEl0ZW0/OiBhbnkpID0+IG51bWJlcjtcbiAgZ2V0Q2xhc3NJbmNsdWRlSXRlbU5vRGF0YT86IChpdGVtOiBhbnksIHBhcmVudEl0ZW0/OiBhbnkpID0+IHN0cmluZztcbiAgaWdub3JlQ2hlY2tib3hJdGVtPzogYm9vbGVhbjtcbiAgaWdub3JlUmFkaW9JdGVtPzogYm9vbGVhbjtcbiAgbm90Q2hhbmdlU3RhdGVJdGVtQ2hlY2tPdGhlcj86IGJvb2xlYW47IC8vIHPhu60gZOG7pW5nIGNobyB0csaw4budbmcgaOG7o3AgZGFuaCBt4bulYyBz4bqjbiBwaOG6qW0ga2hpIGLhu48gY2jhu41uIDEgbm9kZSB0aMOsIGPDoWMgbm9kZSBjaGEgdsOgIGNvbiBraMO0bmcg4bqjbmggaMaw4bufbmdcbiAgc2VhcmNoQWxsTGV2ZWw/OiBib29sZWFuOyAvLyBu4bq/dSBi4bqtdCBzZWFyY2ggYWxsIGxldmVsIHRow6wga2hpIHTDrG0gdOG6pXQgY+G6oyBjw6FjIGdyb3VwIGtow7RuZyBwaMO5IGjhu6NwIHbhu5tpIGtleSBzZWFyY2ggc+G6vSBi4buLIOG6qW4sIGtvIHBow6JuIGJp4buHdCBj4bqlcCBi4bqtY1xuICBlbWl0QWxsSXRlbUNoZWNrZWQ/OiBib29sZWFuOyAvLyB0aGFtIGto4bqjbyB0csaw4budbmcgaOG7o3AgZGFuaCBt4bulYyBz4bqjbiBwaOG6qW1cbiAgc2luZ2xlU2VsZWN0SXRlbT86IGJvb2xlYW47IC8vIHPhu60gZOG7pW5nIGtoaSBjaOG7iSBtdeG7kW4gY2jhu41uIG5vZGUg4bufIGxldmVsIGN14buRaSBjw7luZ1xuICBzaW5nbGVTZWxlY3RJdGVtQnlUcmVlPzogYm9vbGVhbjsgLy90aGFtIGto4bqjbyB0csaw4budbmcgaOG7o3AgZMOybmcgc+G6o24gcGjhuqltIGPhu6dhIGJhbmtcbiAgaGFzSWNvbkNoZWNrU2luZ2xlU2VsZWN0SXRlbT86IGJvb2xlYW47XG4gIGNvbG9yQmx1ZVdoZW5JdGVtU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBoYXNCYWNrZ3JvdW5kQ29sb3JXaGVuSXRlbVNlbGVjdGVkPzogYm9vbGVhbjtcbiAgaWNvbkV4cGFuZDogJycgfCAnbGVmdCcgfCAncmlnaHQnO1xuICBpZ25vcmVJY29uRXhwYW5kTWFyZ2luUmlnaHQ/OiBib29sZWFuO1xuICBvbmx5U2VsZWN0Rmlyc3RJdGVtPzogYm9vbGVhbjtcbiAgaWdub3JlQ2hvb3NlUGFyZW50VGhlbkF1dG9DaG9vc2VDaGlsZHJlbj86IGJvb2xlYW47IC8vIHRoYW0ga2jhuqNvIHRyxrDhu51uZyBo4bujcCBkw7JuZyBz4bqjbiBwaOG6qW0gY+G7p2EgYmFua1xuICBjaG9vc2VDaGlsZFRoZW5BdXRvQ2hvb3NlUGFyZW50PzogYm9vbGVhbjsgLy8gdGhhbSBraOG6o28gdHLGsOG7nW5nIGjhu6NwIGTDsm5nIHPhuqNuIHBo4bqpbSBj4bunYSBiYW5rXG4gIGlnbm9yZVVuc2VsZWN0Q2hpbGRyZW5SZW1vdmVTZWxlY3RQYXJlbnQ/OiBib29sZWFuOyAvLyB0aGFtIGto4bqjbyB0csaw4budbmcgaOG7o3AgZMOybmcgc+G6o24gcGjhuqltIGPhu6dhIGJhbmtcbiAgaWdub3JlRW1pdEFsbEl0ZW1DaGVja2VkV2hlbkNob29zZUNoaWxkVGhlbkF1dG9DaG9vc2VQYXJlbnQ/OiBib29sZWFuOyAvLyB0aGFtIGto4bqjbyB0csaw4budbmcgaOG7o3AgZMOybmcgc+G6o24gcGjhuqltIGPhu6dhIGJhbmtcbiAgZGlzYWJsZUl0ZW1Ob3RMYXN0TGV2ZWw/OiBib29sZWFuOyAvLyB0aGFtIGto4bqjbyB0csaw4budbmcgaOG7o3AgZMOybmcgc+G6o24gcGjhuqltIGPhu6dhIGJhbmtcbiAgY2xhc3NMYWJlbEl0ZW0/OiBzdHJpbmdcbiAgYWxsb3dEaXNhYmxlTGFiZWw/OiBib29sZWFuO1xuICB6SW5kZXhMYWJlbD86IG51bWJlcjtcbiAgZXhwYW5kRmlyc3RJdGVtPzogYm9vbGVhbjtcbiAgd2lkdGhMYWJlbFN1YjI0V2hlbk5vdFRyZWVWaWV3PzogYm9vbGVhbjsgLy8gd2lkdGggbGFiZWwgaXRlbSB0cuG7qyAyNHB4IGtoaSBraMO0bmcgcGjhuqNpIGThuqFuZyB0cmVldmlldyxcbiAgY2xhc3NJbmNsdWRlSXRlbT86IHN0cmluZztcbiAgZ2V0Q2xhc3NJbmNsdWRlSXRlbUNvbnRlbnQ/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7IC8vIHRydXnhu4FuIGNsYXNzIGNobyBpdGVtXG4gIGdldExpbmtJbWFnZUVycm9yPzogKGl0ZW06IGFueSkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRJbWFnZT86IChpdGVtOiBhbnkpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZ2V0QXZhdGFyQ29uZmlnPzogKGl0ZW06IGFueSkgPT4gSUF2YXRhckNvbmZpZztcbiAgZ2V0SWNvbkltYWdlQ2xhc3M/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZUxhc3RJdGVtPzogc3RyaW5nO1xuICBhdXRvQ291bnRXaGVuR3JvdXBFbXB0eUl0ZW1MZXZlbDE/OiBib29sZWFuOyAvLyBUcsaw4budbmcgaOG7o3AgY2jhu4kgY8OzIDEgZ3JvdXAgaXRlbSB2w6Agc3ViX2l0ZW0gZW1wdHksIHNldCA9IHRydWUgdMSDbmcgY2hp4buBdSBjYW8gcG9wdXAgxJHhu4MgbmjDrG4gdGjhuqV5IGVtcHR5IHRleHQgKFRoYW0ga2jhuqNvIGRyb3Bkb3duIGNo4buNbiBsb+G6oWkgc+G6o24gcGjhuqltIGJhbmsga2hpIGfhuq9uIGTDsm5nLyBsb+G6oWkgc+G6o24gcGjhuqltKVxuICBpZ25vcmVDaGFuZ2VDaGlsZHJlbkRpc2FibGVXaGVuQ2hhbmdlUGFyZW50PzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWdEZXNjcmlwdGlvbkdyb3VwIHtcbiAgY2xhc3NJbmNsdWRlPzogc3RyaW5nO1xuICB0b29sdGlwRGVzY3JpcHRpb24/OiBXcml0YWJsZVNpZ25hbDxJUG9wb3Zlck92ZXJsYXk+O1xuICB0ZXh0RGVzY3JpcHRpb246IHN0cmluZztcbiAgY2xhc3NUZXh0RGVzY3JpcHRpb25JbmNsdWRlPzogc3RyaW5nO1xufVxuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWl0ZW0uaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2xpc3Qvc3JjL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVKQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgSUF2YXRhckNvbmZpZyB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWF2YXRhclwiO1xuaW1wb3J0IHsgSUJhZGdlIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtYmFkZ2VcIjtcbmltcG9ydCB7IElCdXR0b24gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblwiO1xuaW1wb3J0IHsgSVNvcnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLXNvcnRcIjtcbmltcG9ydCB7IElDaGVja2JveEl0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1jaGVja2JveC1ncm91cFwiO1xuaW1wb3J0IHsgSUxhYmVsIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWxcIjtcbmltcG9ydCB7IElQb3BvdmVyLCBJUG9wb3Zlck92ZXJsYXksIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IElIdHRwUmVxdWVzdENvbmZpZyB9IGZyb20gXCJAbGlicy11aS9zZXJ2aWNlcy1odHRwLXJlcXVlc3RcIjtcbmltcG9ydCB7IFRZUEVfVEVNUExBVEUgfSBmcm9tIFwiLi90ZW1wbGF0ZXMtdHlwZS50eXBlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFdyaXRhYmxlU2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFRZUEVfT0JKRUNUIH0gZnJvbSBcIkBsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJTGlzdENvbmZpZ0l0ZW0ge1xuICB0eXBlOiBUWVBFX1RFTVBMQVRFO1xuICBodHRwUmVxdWVzdERhdGE/OiBXcml0YWJsZVNpZ25hbDxJSHR0cFJlcXVlc3RDb25maWc+O1xuICBjb25maWdUZW1wbGF0ZVRleHQ/OiBXcml0YWJsZVNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1UZXh0PjtcbiAgY29uZmlnVGVtcGxhdGVSYWRpbz86IFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbVJhZGlvPjtcbiAgY29uZmlnVGVtcGxhdGVDaGVja2JveD86IFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbUNoZWNrYm94PjtcbiAgY29uZmlnVGVtcGxhdGVHcm91cD86IFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbUdyb3VwPjtcbiAgY29uZmlnVGVtcGxhdGVUYWc/OiBXcml0YWJsZVNpZ25hbDxJTGlzdENvbmZpZ0l0ZW1UYWc+O1xuICBjb25maWdEZXNjcmlwdGlvbkdyb3VwPzogV3JpdGFibGVTaWduYWw8SUNvbmZpZ0Rlc2NyaXB0aW9uR3JvdXA+O1xuICB0ZXh0Tm9EYXRhPzogc3RyaW5nO1xuICB0ZXh0Tm9EYXRhQ2xhc3NJbmNsdWRlPzogc3RyaW5nO1xuICB0ZXh0U2VhcmNoTm9EYXRhPzogc3RyaW5nO1xuICBhdXRvU2VsZWN0Rmlyc3RJdGVtPzogYm9vbGVhbjsgLy8gbuG6v3UgbmjGsCBjw7MgZOG7ryBsaeG7h3UgbcOgIGNoxrBhIGPDsyBrZXlTZWxlY3RlZCB0aMOsIHPhur0gdOG7sSDEkeG7mW5nIGNo4buNbiBwaOG6p24gdOG7qyDEkeG6p3UgdGnDqm47XG4gIGJhY2tncm91bmRMaXN0Q3VzdG9tPzogc3RyaW5nO1xuICBwYWRkaW5nTGVmdEl0ZW0/OiBib29sZWFuO1xuICBzb3J0PzogKGl0ZW1zOiBBcnJheTxhbnk+KSA9PiB2b2lkO1xuICBoYXNJY29uTm9EYXRhPzogYm9vbGVhbjtcbiAgaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaWdub3JlRml4SGVpZ2h0U2hvd0RhdGFXaGVuTm90U2VhcmNoPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaGlnaGxpZ2h0VGV4dFNlYXJjaEluUmVzdWx0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgaGVpZ2h0SXRlbT86IG51bWJlcjtcbiAgbWluSGVpZ2h0SXRlbT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGlzdENvbmZpZ0l0ZW1UZXh0IHtcbiAgZmllbGRLZXk6IHN0cmluZztcbiAgZ2V0VmFsdWU/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIGZpZWxkR2V0SW1hZ2U/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZUltYWdlPzogc3RyaW5nO1xuICBnZXRJbWFnZT86IChkYXRhOiBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdldEltYWdlRXJyb3I/OiAoZGF0YTogSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBpbWdUeXBlSWNvbj86IGJvb2xlYW47XG4gIGlnbm9yZUljb25TZWxlY3RlZD86IGJvb2xlYW47XG4gIGNsYXNzSW5jbHVkZUljb25TZWxlY3RlZD86IHN0cmluZztcbiAgaWdub3JlU2hvd0ZpZWxkTGFiZWw/OiBib29sZWFuO1xuICBnZXRIcmVmQnV0dG9uPzogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xuICBnZXRDbGFzc0l0ZW0/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIGdldENsYXNzSW5jbHVkZVBvcG92ZXI/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIGdldENvbmZpZ0J1dHRvbkxlZnQ/OiAoaXRlbTogYW55KSA9PiBJQnV0dG9uO1xuICBnZXRDbGFzc0ljb25MZWZ0PzogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xuICBnZXRDb25maWdIb3ZlckRhbmdlcj86IChpdGVtOiBhbnkpID0+IGJvb2xlYW47XG4gIGdldFBvcG92ZXI/OiAoaXRlbTogYW55KSA9PiBJUG9wb3ZlciB8IHVuZGVmaW5lZDtcbiAgcm93cz86IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbVRleHRSb3c+Pj47XG4gIGNsYXNzUm93c1dyYXBwZXI/OiBzdHJpbmc7XG4gIGNsYXNzUm93cz86IHN0cmluZztcbiAgY29uZmlnTGFiZWxQb3BvdmVyPzogV3JpdGFibGVTaWduYWw8SVBvcG92ZXJPdmVybGF5PjtcbiAgYXV0b1Njcm9sbFRvSXRlbVNlbGVjdGVkPzogYm9vbGVhbjtcbiAgaXRlbVNvcnQ/OiBXcml0YWJsZVNpZ25hbDxJU29ydD47IC8vIGJp4bq/biBsxrB1IHRy4buvIGl0ZW0gc29ydFxuICBhY3Rpb25Tb3J0PzogKGl0ZW1Tb3J0OiBJU29ydCkgPT4gdm9pZDsgLy8gc2V0IGjDoG0gbsOgeSBu4bq/dSBtdeG7kW4gYuG6rXQgc29ydCB0csOqbiBsaXN0XG4gIG5vdFVzZVZpcnR1YWxTY3JvbGw/OiBib29sZWFuOyAvLyBz4butIGThu6VuZyBjaG8gdHLGsOG7nW5nIGjhu6NwIGNvbmZpZyBiYWRnZSB0cm9uZyB0YWJsZVxuICBnZXRBdmF0YXJDb25maWc/OiAoaXRlbTogYW55KSA9PiBJQXZhdGFyQ29uZmlnO1xuICBnZXRDb25maWdBbGlnblN0YXJ0PzogKGl0ZW06IGFueSkgPT4gYm9vbGVhbjtcbiAgc3R5bGVQYWRkaW5nUmlnaHRJdGVtT3RoZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMaXN0Q29uZmlnSXRlbVRhZyBleHRlbmRzIElMaXN0Q29uZmlnSXRlbVRleHQge1xuICBmaWVsZEtleTogc3RyaW5nO1xuICBpZ25vcmVJdGVtRmxleFdyYXA/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVDb250YWluZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RDb25maWdJdGVtUmFkaW8ge1xuICBmaWVsZEtleTogc3RyaW5nO1xuICBmaWVsZEdldEltYWdlPzogc3RyaW5nO1xuICBjbGFzc0luY2x1ZGVJbWFnZT86IHN0cmluZztcbiAgaGFzQXZhdGFyUGFnZXNTb2NpYWw/OiBib29sZWFuO1xuICBoYXNBdmF0YXJHcm91cFNvY2lhbD86IGJvb2xlYW47XG4gIGdldFZhbHVlPzogKGl0ZW06IGFueSwgaXRlbVZpZXdJbkxpc3Q/OiBXcml0YWJsZVNpZ25hbDxUWVBFX09CSkVDVD4pID0+IHN0cmluZztcbiAgZ2V0UG9wb3Zlcj86IChpdGVtOiBhbnkpID0+IElQb3BvdmVyIHwgdW5kZWZpbmVkO1xuICByb3dzPzogV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SUxpc3RDb25maWdJdGVtVGV4dFJvdz4+PjtcbiAgY2xhc3NSb3dzPzogc3RyaW5nO1xuICBhdXRvU2Nyb2xsVG9JdGVtU2VsZWN0ZWQ/OiBib29sZWFuO1xuICB6SW5kZXhQb3BvdmVyPzogbnVtYmVyO1xuICBnZXRBdmF0YXJDb25maWc/OiAoaXRlbTogYW55KSA9PiBJQXZhdGFyQ29uZmlnO1xuICBnZXRDbGFzc0l0ZW0/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIGNsYXNzSXRlbUluY2x1ZGU/OiBzdHJpbmc7XG4gIGdldEltYWdlPzogKGRhdGE6IElEYXRhRnVuY3Rpb25DYWxsSW5Db25maWcpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZ2V0SW1hZ2VFcnJvcj86IChkYXRhOiBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RDb25maWdJdGVtQ2hlY2tib3gge1xuICBhdXRvU2VsZWN0QWxsSXRlbT86IGJvb2xlYW47IC8vIGRyb3Bkb3duIG7hur91IG5oxrAgY8OzIGThu68gbGnhu4d1IG3DoCBjaMawYSBjw7MgbXVsdGlLZXlTZWxlY3RlZCB0aMOsIHPhur0gdOG7sSDEkeG7mW5nIGNo4buNbiBwaOG6p24gdOG7qyDEkeG6p3UgdGnDqm47XG4gIGNsYXNzTGlzdEluY2x1ZGU/OiBzdHJpbmc7XG4gIGh0dHBSZXF1ZXN0QWxsSWRTZWxlY3RPclVuU2VsZWN0PzogV3JpdGFibGVTaWduYWw8SUh0dHBSZXF1ZXN0Q29uZmlnPjtcbiAgY29uZmlnQnV0dG9uU2VsZWN0QW5kVW5kU2VsZWN0SXRlbT86IFdyaXRhYmxlU2lnbmFsPHtcbiAgICBjbGFzc0luY2x1ZGU/OiBzdHJpbmc7XG4gICAgYnV0dG9uQ2hlY2tBbGw/OiBJQnV0dG9uO1xuICAgIGJ1dHRvblVuY2hlY2tBbGw/OiBJQnV0dG9uO1xuICB9PjtcbiAgY29uZmlnQ2hlY2tib3hDaGVja0FsbD86IFdyaXRhYmxlU2lnbmFsPElDaGVja2JveEl0ZW0+O1xuICBjbGFzc0luY2x1ZGVIYXNDb25maWdDaGVja0JveEFsbD86IHN0cmluZztcbiAgZmllbGRLZXk6IHN0cmluZztcbiAgZ2V0VmFsdWU/OiAoaXRlbTogYW55LCBpdGVtVmlld0luTGlzdD86IFdyaXRhYmxlU2lnbmFsPFRZUEVfT0JKRUNUPikgPT4gc3RyaW5nO1xuICBnZXRQb3BvdmVyPzogKGl0ZW06IGFueSkgPT4gSVBvcG92ZXI7XG4gIGdldENsYXNzSXRlbT86IChpdGVtOiBhbnkpID0+IHN0cmluZztcbiAgZ2V0SW1hZ2U/OiAoZGF0YTogSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRJbWFnZUVycm9yPzogKGRhdGE6IElEYXRhRnVuY3Rpb25DYWxsSW5Db25maWcpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZmllbGRHZXRJbWFnZT86IHN0cmluZztcbiAgaGFzQXZhdGFyUGFnZXNTb2NpYWw/OiBib29sZWFuO1xuICBoYXNBdmF0YXJHcm91cFNvY2lhbD86IGJvb2xlYW47XG4gIGNsYXNzSW5jbHVkZUltYWdlPzogc3RyaW5nO1xuICByb3dzPzogV3JpdGFibGVTaWduYWw8QXJyYXk8V3JpdGFibGVTaWduYWw8SUxpc3RDb25maWdJdGVtVGV4dFJvdz4+PjtcbiAgY2xhc3NSb3dzV3JhcHBlcj86IHN0cmluZztcbiAgY2xhc3NSb3dzPzogc3RyaW5nO1xuICBpZ25vcmVDbGlja0l0ZW1VbkNoZWNrZWQ/OiBib29sZWFuO1xuICBjbGFzc0xhYmVsSW5jbHVkZT86IHN0cmluZztcbiAgZmllbGRHZXRMaW5rSW1hZ2VFcnJvcj86IHN0cmluZztcbiAgekluZGV4UG9wb3Zlcj86IG51bWJlcjtcbiAgY2xhc3NJdGVtSW5jbHVkZT86IHN0cmluZztcbiAgZ2V0QXZhdGFyQ29uZmlnPzogKGl0ZW06IGFueSkgPT4gSUF2YXRhckNvbmZpZztcbiAgY2xhc3NDaGVja2JveEl0ZW1JbmNsdWRlPzogc3RyaW5nO1xuICBpZ25vcmVJdGVtV2lkdGgxMDA/OiBib29sZWFuO1xuICBjbGFzc0luY2x1ZGVMYXN0Vmlld0l0ZW0/OiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgYXV0b1Njcm9sbFRvSXRlbVNlbGVjdGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGlzdENvbmZpZ0l0ZW1UZXh0Um93IHtcbiAgY2xhc3NSb3c/OiBzdHJpbmc7XG4gIGNsYXNzSXRlbVNlbGVjdGVkPzogc3RyaW5nO1xuICBnZXRWYWx1ZT86IChpdGVtOiBhbnksIGl0ZW1WaWV3SW5MaXN0PzogV3JpdGFibGVTaWduYWw8VFlQRV9PQkpFQ1Q+KSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGNsYXNzR2V0VmFsdWU/OiBzdHJpbmc7XG4gIGNsYXNzQ29scz86IHN0cmluZztcbiAgY29scz86IFdyaXRhYmxlU2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElMaXN0Q29uZmlnSXRlbVRleHRDb2w+Pj47XG4gIGdldFJvd1N0eWxlc0R5bmFtaWNDb2xzPzogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xuICBhY3Rpb24/OiAoaXRlbTogYW55KSA9PiB2b2lkO1xuICBnZXRJbWFnZT86IChpdGVtOiBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdldENsYXNzSW1hZ2U/OiAoaXRlbTogSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRJbWFnZUVycm9yPzogKGl0ZW06IElEYXRhRnVuY3Rpb25DYWxsSW5Db25maWcpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZ2V0UG9wb3ZlckNvbmZpZz86IChpdGVtOiBhbnkpID0+IE9ic2VydmFibGU8SVBvcG92ZXJPdmVybGF5PjtcbiAgZ2V0QXZhdGFyQ29uZmlnPzogKGl0ZW06IGFueSkgPT4gSUF2YXRhckNvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnIHtcbiAgdmFsdWU/OiBhbnk7XG4gIGl0ZW0/OiBhbnk7XG4gIG90aGVyRGF0YT86IGFueTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxpc3RDb25maWdJdGVtVGV4dENvbCB7XG4gIGdldENsYXNzQ29sPzogKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBnZXRWYWx1ZT86IChkYXRhOiBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnLCBpdGVtVmlld0luTGlzdD86IFdyaXRhYmxlU2lnbmFsPFRZUEVfT0JKRUNUPikgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRQb3BvdmVyPzogKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gSVBvcG92ZXIgfCB1bmRlZmluZWQ7XG4gIGFjdGlvbj86IChpdGVtOiBhbnkpID0+IHZvaWQ7XG4gIGdldEltYWdlPzogKGl0ZW06IGFueSkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRDbGFzc0ltYWdlPzogKGl0ZW06IGFueSkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRJbWFnZUVycm9yPzogKGl0ZW06IGFueSkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRDb25maWdCYWRnZT86IChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IElCYWRnZSB8IHVuZGVmaW5lZDtcbiAgZ2V0U3R5bGVzRHluYW1pY0NvbD86IChkYXRhOiBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnKSA9PiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIGdldEJ1dHRvbj86IChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IElCdXR0b24gfCB1bmRlZmluZWQ7XG4gIGdldExhYmVsU3dpdGNoPzogKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4gSUxhYmVsIHwgdW5kZWZpbmVkO1xuICBnZXRBdmF0YXJDb25maWc/OiAoaXRlbTogYW55KSA9PiBJQXZhdGFyQ29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElMaXN0Q29uZmlnSXRlbUdyb3VwIHtcbiAgZmxhdEl0ZW1zU3VwcG9ydEF1dG9TZWxlY3Q/OiAoZGF0YTogQXJyYXk8YW55PikgPT4gQXJyYXk8YW55PjsgLy8gc+G7rSBk4bulbmcga2hpIG114buRbiBt4bq3YyDEkeG7i25oIHNlbGVjdGVkIHThuqV0IGPhuqMgY8OhYyBrZXkgdHJvbmcgZ3JvdXBcbiAgZmllbGRLZXk/OiBzdHJpbmc7XG4gIGlzVmlld1JhZGlvPzogYm9vbGVhbjtcbiAgdGltZUludGVydmFsQ2FsY3VsYXRvckhlaWdodD86IG51bWJlcjsgLy8gdHLGsMahzIBuZyBoxqHMo3AgdHJvbmcgcGFnZSBuaGnDqsyAdSBsaXN0IHRoYW0gc8O0zIEgbmHMgHkgc2XMgyB0aGF5IMSRw7TMiWkgdHXMgHkgdMawzIBuZyB0csawxqHMgG5nIGjGocyjcFxuICBjb25maWdCdXR0b25TZWxlY3RBbmRVbmRTZWxlY3RJdGVtPzogV3JpdGFibGVTaWduYWw8e1xuICAgIGNsYXNzSW5jbHVkZT86IHN0cmluZztcbiAgICBidXR0b25DaGVja0FsbD86IElCdXR0b247XG4gICAgYnV0dG9uVW5jaGVja0FsbD86IElCdXR0b247XG4gIH0+O1xuICBjb25maWdDaGVja2JveENoZWNrQWxsPzogV3JpdGFibGVTaWduYWw8SUNoZWNrYm94SXRlbT47XG4gIGNsYXNzSW5jbHVkZUhhc0NvbmZpZ0NoZWNrQm94QWxsPzogc3RyaW5nO1xuICBnZXRMYWJlbFNlYXJjaD86IChpdGVtOiBhbnkpID0+IHN0cmluZzsgLy8gRMO5bmcgxJHhu4MgIGN1c3RvbXMga2hpIHNlYXJjaCBraMO0bmcgY2jhu4kgZmllbGQgbGFiZWw6IHbDrSBk4bulOiBzZWFyY2ggY+G6oyBjb2RlIHbDoCBuYW1lIG5oxrBuZyBjaOG7iSBoaeG7g24gdGjhu4sgbmFtZVxuICBnZXRMYWJlbEdyb3VwOiAoZ3JvdXA6IGFueSkgPT4gc3RyaW5nO1xuICBnZXRFeHBhbmRHcm91cD86IChncm91cDogYW55KSA9PiBib29sZWFuO1xuICBnZXRQb3BvdmVyR3JvdXA/OiAoZ3JvdXA6IGFueSkgPT4gc3RyaW5nO1xuICBnZXRNYXhMZXZlbEdyb3VwOiAoZ3JvdXA6IGFueSkgPT4gbnVtYmVyO1xuICBnZXREZXNjcmlwdGlvbkdyb3VwV2hlbk5vRGF0YT86IChncm91cDogYW55KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGdldEJ1dHRvbkdyb3VwPzogKGdyb3VwOiBhbnkpID0+IElCdXR0b247XG4gIGdldEljb25FbXB0eURhdGFJbkdyb3VwPzogKGdyb3VwOiBhbnkpID0+IGJvb2xlYW47IC8vIGhp4buDbiB0aOG7iyBpbWFnZSBlbXB0eSB0cm9uZyB04burbmcgZ3JvdXBcbiAgaWdub3JlQ2hlY2tib3hHcm91cD86IGJvb2xlYW47XG4gIGNsYXNzSW5jbHVkZU5vZGF0YT86IHN0cmluZztcbiAgY2xhc3NJbmNsdWRlR3JvdXA/OiBzdHJpbmc7XG4gIGlnbm9yZVJhZGlvR3JvdXA/OiBib29sZWFuO1xuICBpZ25vcmVUZXh0VXBwZXJjYXNlTGFiZWxHcm91cD86IGJvb2xlYW47XG4gIGlnbm9yZUdyb3VwTGluZT86IGJvb2xlYW47XG4gIG1hcmdpblRvcEhhc0xpbmU/OiBudW1iZXI7XG4gIGlnbm9yZUNsaWNrTGFiZWxHcm91cD86IGJvb2xlYW47XG5cbiAgZmllbGRHZXRJdGVtczogc3RyaW5nO1xuICBmaWVsZEdldEF2YXRhckl0ZW0/OiBzdHJpbmc7XG4gIGltZ1R5cGVJY29uPzogYm9vbGVhbjtcbiAgY2xhc3NJbWFnZUluY2x1ZGU/OiBzdHJpbmc7XG4gIGlzVmlld1RyZWU/OiBib29sZWFuO1xuICBpc1ZpZXdUcmVlSnNvbj86IGJvb2xlYW47XG4gIGdldExhYmVsSXRlbTogKGl0ZW06IGFueSkgPT4gc3RyaW5nO1xuICBnZXRQb3BvdmVySXRlbT86IChpdGVtOiBhbnkpID0+IElQb3BvdmVyIHwgdW5kZWZpbmVkO1xuICBhY3Rpb25Qb3BvdmVyQnlJdGVtPzogKGl0ZW06IGFueSwgZXZlbnQ6IFRZUEVfUE9QT1ZFUl9FVkVOVCkgPT4gdm9pZDtcbiAgZ2V0RXhwYW5kSXRlbT86IChncm91cDogYW55KSA9PiBib29sZWFuO1xuICBnZXRCb251c1BhZGRpbmdMZWZ0SXRlbT86IChpdGVtOiBhbnksIHBhcmVudEl0ZW0/OiBhbnkpID0+IG51bWJlcjtcbiAgZ2V0Q2xhc3NJbmNsdWRlSXRlbU5vRGF0YT86IChpdGVtOiBhbnksIHBhcmVudEl0ZW0/OiBhbnkpID0+IHN0cmluZztcbiAgaWdub3JlQ2hlY2tib3hJdGVtPzogYm9vbGVhbjtcbiAgaWdub3JlUmFkaW9JdGVtPzogYm9vbGVhbjtcbiAgbm90Q2hhbmdlU3RhdGVJdGVtQ2hlY2tPdGhlcj86IGJvb2xlYW47IC8vIHPhu60gZOG7pW5nIGNobyB0csaw4budbmcgaOG7o3AgZGFuaCBt4bulYyBz4bqjbiBwaOG6qW0ga2hpIGLhu48gY2jhu41uIDEgbm9kZSB0aMOsIGPDoWMgbm9kZSBjaGEgdsOgIGNvbiBraMO0bmcg4bqjbmggaMaw4bufbmdcbiAgc2VhcmNoQWxsTGV2ZWw/OiBib29sZWFuOyAvLyBu4bq/dSBi4bqtdCBzZWFyY2ggYWxsIGxldmVsIHRow6wga2hpIHTDrG0gdOG6pXQgY+G6oyBjw6FjIGdyb3VwIGtow7RuZyBwaMO5IGjhu6NwIHbhu5tpIGtleSBzZWFyY2ggc+G6vSBi4buLIOG6qW4sIGtvIHBow6JuIGJp4buHdCBj4bqlcCBi4bqtY1xuICBlbWl0QWxsSXRlbUNoZWNrZWQ/OiBib29sZWFuOyAvLyB0aGFtIGto4bqjbyB0csaw4budbmcgaOG7o3AgZGFuaCBt4bulYyBz4bqjbiBwaOG6qW1cbiAgc2luZ2xlU2VsZWN0SXRlbT86IGJvb2xlYW47IC8vIHPhu60gZOG7pW5nIGtoaSBjaOG7iSBtdeG7kW4gY2jhu41uIG5vZGUg4bufIGxldmVsIGN14buRaSBjw7luZ1xuICBzaW5nbGVTZWxlY3RJdGVtQnlUcmVlPzogYm9vbGVhbjsgLy90aGFtIGto4bqjbyB0csaw4budbmcgaOG7o3AgZMOybmcgc+G6o24gcGjhuqltIGPhu6dhIGJhbmtcbiAgaGFzSWNvbkNoZWNrU2luZ2xlU2VsZWN0SXRlbT86IGJvb2xlYW47XG4gIGNvbG9yQmx1ZVdoZW5JdGVtU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBoYXNCYWNrZ3JvdW5kQ29sb3JXaGVuSXRlbVNlbGVjdGVkPzogYm9vbGVhbjtcbiAgaWNvbkV4cGFuZDogJycgfCAnbGVmdCcgfCAncmlnaHQnO1xuICBpZ25vcmVJY29uRXhwYW5kTWFyZ2luUmlnaHQ/OiBib29sZWFuO1xuICBvbmx5U2VsZWN0Rmlyc3RJdGVtPzogYm9vbGVhbjtcbiAgaWdub3JlQ2hvb3NlUGFyZW50VGhlbkF1dG9DaG9vc2VDaGlsZHJlbj86IGJvb2xlYW47IC8vIHRoYW0ga2jhuqNvIHRyxrDhu51uZyBo4bujcCBkw7JuZyBz4bqjbiBwaOG6qW0gY+G7p2EgYmFua1xuICBjaG9vc2VDaGlsZFRoZW5BdXRvQ2hvb3NlUGFyZW50PzogYm9vbGVhbjsgLy8gdGhhbSBraOG6o28gdHLGsOG7nW5nIGjhu6NwIGTDsm5nIHPhuqNuIHBo4bqpbSBj4bunYSBiYW5rXG4gIGlnbm9yZVVuc2VsZWN0Q2hpbGRyZW5SZW1vdmVTZWxlY3RQYXJlbnQ/OiBib29sZWFuOyAvLyB0aGFtIGto4bqjbyB0csaw4budbmcgaOG7o3AgZMOybmcgc+G6o24gcGjhuqltIGPhu6dhIGJhbmtcbiAgaWdub3JlRW1pdEFsbEl0ZW1DaGVja2VkV2hlbkNob29zZUNoaWxkVGhlbkF1dG9DaG9vc2VQYXJlbnQ/OiBib29sZWFuOyAvLyB0aGFtIGto4bqjbyB0csaw4budbmcgaOG7o3AgZMOybmcgc+G6o24gcGjhuqltIGPhu6dhIGJhbmtcbiAgZGlzYWJsZUl0ZW1Ob3RMYXN0TGV2ZWw/OiBib29sZWFuOyAvLyB0aGFtIGto4bqjbyB0csaw4budbmcgaOG7o3AgZMOybmcgc+G6o24gcGjhuqltIGPhu6dhIGJhbmtcbiAgY2xhc3NMYWJlbEl0ZW0/OiBzdHJpbmdcbiAgYWxsb3dEaXNhYmxlTGFiZWw/OiBib29sZWFuO1xuICB6SW5kZXhMYWJlbD86IG51bWJlcjtcbiAgZXhwYW5kRmlyc3RJdGVtPzogYm9vbGVhbjtcbiAgd2lkdGhMYWJlbFN1YjI0V2hlbk5vdFRyZWVWaWV3PzogYm9vbGVhbjsgLy8gd2lkdGggbGFiZWwgaXRlbSB0cuG7qyAyNHB4IGtoaSBraMO0bmcgcGjhuqNpIGThuqFuZyB0cmVldmlldyxcbiAgY2xhc3NJbmNsdWRlSXRlbT86IHN0cmluZztcbiAgZ2V0Q2xhc3NJbmNsdWRlSXRlbUNvbnRlbnQ/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7IC8vIHRydXnhu4FuIGNsYXNzIGNobyBpdGVtXG4gIGdldExpbmtJbWFnZUVycm9yPzogKGl0ZW06IGFueSkgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBnZXRJbWFnZT86IChpdGVtOiBhbnkpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgZ2V0QXZhdGFyQ29uZmlnPzogKGl0ZW06IGFueSkgPT4gSUF2YXRhckNvbmZpZztcbiAgZ2V0SWNvbkltYWdlQ2xhc3M/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG4gIGNsYXNzSW5jbHVkZUxhc3RJdGVtPzogc3RyaW5nO1xuICBhdXRvQ291bnRXaGVuR3JvdXBFbXB0eUl0ZW1MZXZlbDE/OiBib29sZWFuOyAvLyBUcsaw4budbmcgaOG7o3AgY2jhu4kgY8OzIDEgZ3JvdXAgaXRlbSB2w6Agc3ViX2l0ZW0gZW1wdHksIHNldCA9IHRydWUgdMSDbmcgY2hp4buBdSBjYW8gcG9wdXAgxJHhu4MgbmjDrG4gdGjhuqV5IGVtcHR5IHRleHQgKFRoYW0ga2jhuqNvIGRyb3Bkb3duIGNo4buNbiBsb+G6oWkgc+G6o24gcGjhuqltIGJhbmsga2hpIGfhuq9uIGTDsm5nLyBsb+G6oWkgc+G6o24gcGjhuqltKVxuICBpZ25vcmVDaGFuZ2VDaGlsZHJlbkRpc2FibGVXaGVuQ2hhbmdlUGFyZW50PzogYm9vbGVhblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWdEZXNjcmlwdGlvbkdyb3VwIHtcbiAgY2xhc3NJbmNsdWRlPzogc3RyaW5nO1xuICB0b29sdGlwRGVzY3JpcHRpb24/OiBXcml0YWJsZVNpZ25hbDxJUG9wb3Zlck92ZXJsYXk+O1xuICB0ZXh0RGVzY3JpcHRpb246IHN0cmluZztcbiAgY2xhc3NUZXh0RGVzY3JpcHRpb25JbmNsdWRlPzogc3RyaW5nO1xufVxuIl19
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  import { AsyncPipe, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
4
- import { VirtualScrollerModule } from '@iharbeck/ngx-virtual-scroller';
3
+ import { ChangeDetectionStrategy, Component, signal, viewChild } from '@angular/core';
4
+ import { VirtualScrollerComponent, VirtualScrollerModule } from '@iharbeck/ngx-virtual-scroller';
5
5
  import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
6
6
  import { LibsUiComponentsCheckboxSingleComponent } from '@libs-ui/components-checkbox-single';
7
7
  import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
@@ -20,6 +20,7 @@ import * as i2 from "@ngx-translate/core";
20
20
  export class LibsUiComponentsListCheckboxComponent extends LibsUiComponentsListTemplatesComponentAbstract {
21
21
  // #region PROPERTY
22
22
  configTemplateCheckbox = signal(undefined);
23
+ virtualScrollerComponent = viewChild(VirtualScrollerComponent);
23
24
  ngOnInit() {
24
25
  if (isEmpty(this.config()?.configTemplateCheckbox?.())) {
25
26
  return;
@@ -234,7 +235,8 @@ export class LibsUiComponentsListCheckboxComponent extends LibsUiComponentsListT
234
235
  });
235
236
  }
236
237
  });
237
- const checkLoadItem = (preStateHasScroll, currentHasScroll) => {
238
+ const callbackCheckScroll = (preStateHasScroll, currentHasScroll) => {
239
+ this.scrollToItemSelected();
238
240
  if (this.keysHiddenItem()?.length && preStateHasScroll && !currentHasScroll && (this.isSearchOnline())) {
239
241
  this.callApiByService(false);
240
242
  }
@@ -244,7 +246,7 @@ export class LibsUiComponentsListCheckboxComponent extends LibsUiComponentsListT
244
246
  this.config()?.sort?.(this.items());
245
247
  this.autoSelectFirstItem(this.items());
246
248
  this.setHeightViewPort();
247
- this.checkViewPortScroll(checkLoadItem);
249
+ this.checkViewPortScroll(callbackCheckScroll);
248
250
  this.loading.set(false);
249
251
  this.outLoading.emit(this.loading());
250
252
  this.outLoadItemsComplete.emit({ items: this.items() });
@@ -253,11 +255,28 @@ export class LibsUiComponentsListCheckboxComponent extends LibsUiComponentsListT
253
255
  this.items.update(items => [...itemsAddNew, ...(items || []), ...itemByKeySearch]);
254
256
  this.config()?.sort?.(this.items());
255
257
  this.setHeightViewPort();
256
- this.checkViewPortScroll(checkLoadItem);
258
+ this.checkViewPortScroll(callbackCheckScroll);
257
259
  this.loading.set(false);
258
260
  this.outLoading.emit(this.loading());
259
261
  this.outLoadItemsComplete.emit({ items: this.items() });
260
262
  }
263
+ scrollToItemSelected() {
264
+ if (!this.configTemplateCheckbox()?.autoScrollToItemSelected) {
265
+ return;
266
+ }
267
+ clearTimeout(this.timeAutoScrollItemSelected());
268
+ this.timeAutoScrollItemSelected.set(setTimeout(() => {
269
+ if (!this.keySelected) {
270
+ return;
271
+ }
272
+ const index = this.items().findIndex(item => item()[this.fieldKey()] === this.keySelected());
273
+ if (index !== -1) {
274
+ const offsetContainer = this.elementScroll()?.nativeElement?.offsetHeight;
275
+ const additionalOffset = ((offsetContainer ? offsetContainer - this.heightItem() : 0) / 2) * -1;
276
+ this.virtualScrollerComponent()?.scrollToIndex(index, true, additionalOffset, this.timeAnimationScrollToIndexItem());
277
+ }
278
+ }));
279
+ }
261
280
  autoSelectFirstItem(items) {
262
281
  if (this.autoSelectedFirstItemCallOutsideBefore() || this.multiKeySelected()?.length || !this.config()?.autoSelectFirstItem || !items || !items.length) {
263
282
  return;
@@ -268,7 +287,7 @@ export class LibsUiComponentsListCheckboxComponent extends LibsUiComponentsListT
268
287
  return this.items().length;
269
288
  }
270
289
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListCheckboxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
271
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListCheckboxComponent, isStandalone: true, selector: "libs_ui-components-list-templates_checkbox", usesInheritance: true, ngImport: i0, template: "@if (configTemplateCheckbox(); as configTemplateCheckbox) {\n <div class=\"flex flex-col w-full h-full\">\n @if (items().length && configTemplateCheckbox.configButtonSelectAndUndSelectItem?.(); as configButtonSelectItem) {\n <div [class]=\"'flex items-center bg-[#ffffff] '+(configButtonSelectItem.classInclude ?? 'libs-ui-border-bottom-general')\">\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonCheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonCheckAll?.label ?? 'i18n_select_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonCheckAll?.classInclude || 'pr-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonCheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(true)\" />\n <div class=\"text-[#e6e7ea]\">|</div>\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonUncheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonUncheckAll?.label ?? 'i18n_unselect_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonUncheckAll?.classInclude || 'pl-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonUncheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(false)\" />\n </div>\n }\n @if (items().length && configTemplateCheckbox.configCheckboxCheckAll?.(); as configCheckBox) {\n <div [class]=\"'flex libs-ui-border-bottom-general bg-[#ffffff] pl-[12px] '+(configTemplateCheckbox.classIncludeHasConfigCheckBoxAll ?? 'py-[6px] libs-ui-border-bottom-general')\">\n <libs_ui-components-checkbox-single [label]=\"configCheckBox.label ?? 'i18n_all'\"\n [classLabelInclude]=\"configCheckBox.classLabelInclude || ''\"\n [checked]=\"(multiKeySelected()?.length && (multiKeySelected()?.length ||0) >= (store().length || -1)) || false\"\n [stillOtherOptions]=\"!!multiKeySelected()?.length && (multiKeySelected()?.length ||0) < (store().length || -1)\"\n [disable]=\"loading() || disable() || false\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerSelect($event.checked)\" />\n </div>\n }\n <div [class]=\"'relative h-full w-full ' +((!items() || !items().length) ? 'bg-[#ffffff]': configTemplateCheckbox.classListInclude || '')\">\n @if (items() && items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() && !config()?.ignoreShowDataWhenNotSearch ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]; let last = $last) {\n <div [class]=\"last ? (configTemplateCheckbox.classIncludeLastViewItem || '') : ''\">\n <div #itemRef\n LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [attr.clickExactly]=\"clickExactly\"\n [class]=\"'libs-ui-list-template-checkbox-item flex ' + (configTemplateCheckbox.classItemInclude || '')\"\n [class.w-full]=\"!configTemplateCheckbox.ignoreItemWidth100\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.!py-[6px]]=\"clickExactly()\"\n [class.!pr-[4px]]=\"hasScroll() && configTemplateCheckbox.rows\"\n [class.!pr-[12px]]=\"!hasScroll() && configTemplateCheckbox.rows\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-checkbox-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [linkImage]=\"configTemplateCheckbox.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImage:item()) | async) : item()[configTemplateCheckbox.fieldGetImage || '']\"\n [linkImageError]=\"configTemplateCheckbox.getImageError ? (('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImageError:item()) | async) : item()[configTemplateCheckbox.fieldGetLinkImageError || '']\"\n [classLabelInclude]=\"item().classLabelInclude || configTemplateCheckbox.classLabelInclude || 'libs-ui-font-h5r'\"\n [zIndexLabel]=\"configTemplateCheckbox.zIndexPopover ?? 1200\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateCheckbox.hasAvatarGroupSocial\"\n [classInclude]=\"configTemplateCheckbox.classInclude || ''\"\n [classImageInclude]=\"configTemplateCheckbox.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [popover]=\"item().dataPopover\"\n [clickExactly]=\"clickExactly()\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('checkbox',item())\" />\n }\n @if (configTemplateCheckbox?.rows) {\n <libs_ui-components-list-templates_rows class=\"{{ !configTemplateCheckbox.ignoreItemWidth100 ? 'w-full' : '' }} {{ configTemplateCheckbox.classRowsWrapper || configTemplateCheckbox.classRows ?? '' }}\"\n [item]=\"item()\"\n [zIndex]=\"zIndex()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) ? item()[fieldKey()] : undefined\"\n [configTemplate]=\"configTemplateCheckbox\"\n (outEvent)=\"handlerChange('checkbox',$event.item)\" />\n }\n </div>\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (config()?.hasIconNoData && !loading()) {\n <div class=\"mb-[16px]\">\n <div *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\">\n </div>\n </div>\n }\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span>&nbsp;</span>\n }\n\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n </div>\n}\n", styles: [".libs-ui-list-template-checkbox-item{padding:6px 0 6px 16px;margin-right:8px;font-size:12px;line-height:18px;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i1.VirtualScrollerComponent, selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "RTL", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }, { kind: "directive", type: LibsUiComponentsListHighlightKeySearchDirective, selector: "[LibsUiComponentsListHighlightKeySearchDirective]", inputs: ["isHighlight", "keySearch", "classHighlight"] }, { kind: "component", type: LibsUiComponentsListRowsComponent, selector: "libs_ui-components-list-templates_rows", inputs: ["configTemplate", "item", "keySelected", "fieldKey", "zIndex"], outputs: ["outChangStageFlagMousePopover", "outEvent"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
290
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsListCheckboxComponent, isStandalone: true, selector: "libs_ui-components-list-templates_checkbox", viewQueries: [{ propertyName: "virtualScrollerComponent", first: true, predicate: VirtualScrollerComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (configTemplateCheckbox(); as configTemplateCheckbox) {\n <div class=\"flex flex-col w-full h-full\">\n @if (items().length && configTemplateCheckbox.configButtonSelectAndUndSelectItem?.(); as configButtonSelectItem) {\n <div [class]=\"'flex items-center bg-[#ffffff] '+(configButtonSelectItem.classInclude ?? 'libs-ui-border-bottom-general')\">\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonCheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonCheckAll?.label ?? 'i18n_select_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonCheckAll?.classInclude || 'pr-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonCheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(true)\" />\n <div class=\"text-[#e6e7ea]\">|</div>\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonUncheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonUncheckAll?.label ?? 'i18n_unselect_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonUncheckAll?.classInclude || 'pl-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonUncheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(false)\" />\n </div>\n }\n @if (items().length && configTemplateCheckbox.configCheckboxCheckAll?.(); as configCheckBox) {\n <div [class]=\"'flex libs-ui-border-bottom-general bg-[#ffffff] pl-[12px] '+(configTemplateCheckbox.classIncludeHasConfigCheckBoxAll ?? 'py-[6px] libs-ui-border-bottom-general')\">\n <libs_ui-components-checkbox-single [label]=\"configCheckBox.label ?? 'i18n_all'\"\n [classLabelInclude]=\"configCheckBox.classLabelInclude || ''\"\n [checked]=\"(multiKeySelected()?.length && (multiKeySelected()?.length ||0) >= (store().length || -1)) || false\"\n [stillOtherOptions]=\"!!multiKeySelected()?.length && (multiKeySelected()?.length ||0) < (store().length || -1)\"\n [disable]=\"loading() || disable() || false\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerSelect($event.checked)\" />\n </div>\n }\n <div [class]=\"'relative h-full w-full ' +((!items() || !items().length) ? 'bg-[#ffffff]': configTemplateCheckbox.classListInclude || '')\">\n @if (items() && items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() && !config()?.ignoreShowDataWhenNotSearch ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]; let last = $last) {\n <div [class]=\"last ? (configTemplateCheckbox.classIncludeLastViewItem || '') : ''\">\n <div #itemRef\n LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [attr.clickExactly]=\"clickExactly\"\n [class]=\"'libs-ui-list-template-checkbox-item flex ' + (configTemplateCheckbox.classItemInclude || '')\"\n [class.w-full]=\"!configTemplateCheckbox.ignoreItemWidth100\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.!py-[6px]]=\"clickExactly()\"\n [class.!pr-[4px]]=\"hasScroll() && configTemplateCheckbox.rows\"\n [class.!pr-[12px]]=\"!hasScroll() && configTemplateCheckbox.rows\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-checkbox-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [linkImage]=\"configTemplateCheckbox.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImage:item()) | async) : item()[configTemplateCheckbox.fieldGetImage || '']\"\n [linkImageError]=\"configTemplateCheckbox.getImageError ? (('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImageError:item()) | async) : item()[configTemplateCheckbox.fieldGetLinkImageError || '']\"\n [classLabelInclude]=\"item().classLabelInclude || configTemplateCheckbox.classLabelInclude || 'libs-ui-font-h5r'\"\n [zIndexLabel]=\"configTemplateCheckbox.zIndexPopover ?? 1200\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateCheckbox.hasAvatarGroupSocial\"\n [classInclude]=\"configTemplateCheckbox.classInclude || ''\"\n [classImageInclude]=\"configTemplateCheckbox.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [popover]=\"item().dataPopover\"\n [clickExactly]=\"clickExactly()\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('checkbox',item())\" />\n }\n @if (configTemplateCheckbox?.rows) {\n <libs_ui-components-list-templates_rows class=\"{{ !configTemplateCheckbox.ignoreItemWidth100 ? 'w-full' : '' }} {{ configTemplateCheckbox.classRowsWrapper || configTemplateCheckbox.classRows ?? '' }}\"\n [item]=\"item()\"\n [zIndex]=\"zIndex()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) ? item()[fieldKey()] : undefined\"\n [configTemplate]=\"configTemplateCheckbox\"\n (outEvent)=\"handlerChange('checkbox',$event.item)\" />\n }\n </div>\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (config()?.hasIconNoData && !loading()) {\n <div class=\"mb-[16px]\">\n <div *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\">\n </div>\n </div>\n }\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span>&nbsp;</span>\n }\n\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n </div>\n}\n", styles: [".libs-ui-list-template-checkbox-item{padding:6px 0 6px 16px;margin-right:8px;font-size:12px;line-height:18px;position:relative}\n"], dependencies: [{ kind: "ngmodule", type: VirtualScrollerModule }, { kind: "component", type: i1.VirtualScrollerComponent, selector: "virtual-scroller,[virtualScroller]", inputs: ["executeRefreshOutsideAngularZone", "enableUnequalChildrenSizes", "RTL", "useMarginInsteadOfTranslate", "modifyOverflowStyleOfParentScroll", "stripedTable", "scrollbarWidth", "scrollbarHeight", "childWidth", "childHeight", "ssrChildWidth", "ssrChildHeight", "ssrViewportWidth", "ssrViewportHeight", "bufferAmount", "scrollAnimationTime", "resizeBypassRefreshThreshold", "scrollThrottlingTime", "scrollDebounceTime", "checkResizeInterval", "items", "compareItems", "horizontal", "parentScroll"], outputs: ["vsUpdate", "vsChange", "vsStart", "vsEnd"], exportAs: ["virtualScroller"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsCheckboxSingleComponent, selector: "libs_ui-components-checkbox-single", inputs: ["key", "checked", "label", "classLabelInclude", "ignoreShowPopoverLabel", "typeLabelPopover", "popover", "linkImage", "linkImageError", "avatarConfig", "classImageInclude", "imgTypeIcon", "bullet", "classInclude", "clickExactly", "disable", "disableLabel", "ignoreCheckbox", "zIndexLabel", "stillOtherOptions", "error", "showBorderError", "description", "iconImageClass", "classIconInclude", "modeBorder"], outputs: ["checkedChange", "linkImageChange", "outChange", "outEventPopover", "outClickLabel", "outChangStageFlagMousePopover"] }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "directive", type: LibsUiComponentsScrollOverlayDirective, selector: "[LibsUiComponentsScrollOverlayDirective]", inputs: ["debugMode", "classContainer", "options", "elementCheckScrollX", "elementCheckScrollY"], outputs: ["outScroll", "outScrollX", "outScrollY", "outScrollTop", "outScrollBottom"] }, { kind: "pipe", type: LibsUiCheckSelectedByKeyPipe, name: "LibsUiCheckSelectedByKeyPipe" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }, { kind: "directive", type: LibsUiComponentsListHighlightKeySearchDirective, selector: "[LibsUiComponentsListHighlightKeySearchDirective]", inputs: ["isHighlight", "keySearch", "classHighlight"] }, { kind: "component", type: LibsUiComponentsListRowsComponent, selector: "libs_ui-components-list-templates_rows", inputs: ["configTemplate", "item", "keySelected", "fieldKey", "zIndex"], outputs: ["outChangStageFlagMousePopover", "outEvent"] }, { kind: "pipe", type: LibsUiPipesCallFunctionInTemplatePipe, name: "LibsUiPipesCallFunctionInTemplatePipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
272
291
  }
273
292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsListCheckboxComponent, decorators: [{
274
293
  type: Component,
@@ -285,4 +304,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
285
304
  LibsUiPipesCallFunctionInTemplatePipe
286
305
  ], template: "@if (configTemplateCheckbox(); as configTemplateCheckbox) {\n <div class=\"flex flex-col w-full h-full\">\n @if (items().length && configTemplateCheckbox.configButtonSelectAndUndSelectItem?.(); as configButtonSelectItem) {\n <div [class]=\"'flex items-center bg-[#ffffff] '+(configButtonSelectItem.classInclude ?? 'libs-ui-border-bottom-general')\">\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonCheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonCheckAll?.label ?? 'i18n_select_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonCheckAll?.classInclude || 'pr-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonCheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(true)\" />\n <div class=\"text-[#e6e7ea]\">|</div>\n <libs_ui-components-buttons-button [type]=\"configButtonSelectItem.buttonUncheckAll?.type ?? 'button-link-primary'\"\n [label]=\"configButtonSelectItem.buttonUncheckAll?.label ?? 'i18n_unselect_all_searched_results'\"\n [classInclude]=\"configButtonSelectItem.buttonUncheckAll?.classInclude || 'pl-[8px]'\"\n [classLabel]=\"configButtonSelectItem.buttonUncheckAll?.classLabel || 'libs-ui-font-h6r'\"\n [disable]=\"loading() || disable() || false\"\n (outClick)=\"handlerSelect(false)\" />\n </div>\n }\n @if (items().length && configTemplateCheckbox.configCheckboxCheckAll?.(); as configCheckBox) {\n <div [class]=\"'flex libs-ui-border-bottom-general bg-[#ffffff] pl-[12px] '+(configTemplateCheckbox.classIncludeHasConfigCheckBoxAll ?? 'py-[6px] libs-ui-border-bottom-general')\">\n <libs_ui-components-checkbox-single [label]=\"configCheckBox.label ?? 'i18n_all'\"\n [classLabelInclude]=\"configCheckBox.classLabelInclude || ''\"\n [checked]=\"(multiKeySelected()?.length && (multiKeySelected()?.length ||0) >= (store().length || -1)) || false\"\n [stillOtherOptions]=\"!!multiKeySelected()?.length && (multiKeySelected()?.length ||0) < (store().length || -1)\"\n [disable]=\"loading() || disable() || false\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerSelect($event.checked)\" />\n </div>\n }\n <div [class]=\"'relative h-full w-full ' +((!items() || !items().length) ? 'bg-[#ffffff]': configTemplateCheckbox.classListInclude || '')\">\n @if (items() && items().length) {\n <div #elementScroll\n LibsUiComponentsScrollOverlayDirective\n class=\"w-full\"\n [style.height]=\"heightViewPort() && !config()?.ignoreShowDataWhenNotSearch ? heightViewPort()+'px':'100%'\"\n (outScrollBottom)=\"handlerScrollBottom()\">\n <virtual-scroller #scroll\n [parentScroll]=\"elementScroll\"\n [items]=\"items()\"\n class=\"h-full\">\n @for (item of scroll.viewPortItems; track item()[fieldKey()]; let last = $last) {\n <div [class]=\"last ? (configTemplateCheckbox.classIncludeLastViewItem || '') : ''\">\n <div #itemRef\n LibsUiComponentsListHighlightKeySearchDirective\n [isHighlight]=\"config()?.highlightTextSearchInResult\"\n [keySearch]=\"keySearch()\"\n [attr.clickExactly]=\"clickExactly\"\n [class]=\"'libs-ui-list-template-checkbox-item flex ' + (configTemplateCheckbox.classItemInclude || '')\"\n [class.w-full]=\"!configTemplateCheckbox.ignoreItemWidth100\"\n [class.libs-ui-bg-list-hover]=\"!clickExactly()\"\n [class.libs-ui-bg-list-hover-active]=\"!clickExactly()\"\n [class.!pl-[12px]]=\"paddingLeftItem()\"\n [class.!py-[6px]]=\"clickExactly()\"\n [class.!pr-[4px]]=\"hasScroll() && configTemplateCheckbox.rows\"\n [class.!pr-[12px]]=\"!hasScroll() && configTemplateCheckbox.rows\"\n (click)=\"handlerChange($event,item())\">\n <div class=\"flex flex-col w-full\">\n @if (item().fieldLabel) {\n <libs_ui-components-checkbox-single [label]=\"item().fieldLabel\"\n [avatarConfig]=\"item().avatarConfig\"\n [linkImage]=\"configTemplateCheckbox.getImage ? (('avatar' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImage:item()) | async) : item()[configTemplateCheckbox.fieldGetImage || '']\"\n [linkImageError]=\"configTemplateCheckbox.getImageError ? (('avatar_error' | LibsUiPipesCallFunctionInTemplatePipe:configTemplateCheckbox.getImageError:item()) | async) : item()[configTemplateCheckbox.fieldGetLinkImageError || '']\"\n [classLabelInclude]=\"item().classLabelInclude || configTemplateCheckbox.classLabelInclude || 'libs-ui-font-h5r'\"\n [zIndexLabel]=\"configTemplateCheckbox.zIndexPopover ?? 1200\"\n [checked]=\"item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length\"\n [key]=\"item()[fieldKey()]\"\n [imgTypeIcon]=\"configTemplateCheckbox.hasAvatarGroupSocial\"\n [classInclude]=\"configTemplateCheckbox.classInclude || ''\"\n [classImageInclude]=\"configTemplateCheckbox.classIncludeImage || ''\"\n [bullet]=\"item().bullet?.()\"\n [disable]=\"loading() || disable() || (item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:keysDisableItem():keysDisableItem()?.length)\"\n [popover]=\"item().dataPopover\"\n [clickExactly]=\"clickExactly()\"\n (outChangStageFlagMousePopover)='handlerChangStageFlagMouse($event)'\n (outChange)=\"handlerChange('checkbox',item())\" />\n }\n @if (configTemplateCheckbox?.rows) {\n <libs_ui-components-list-templates_rows class=\"{{ !configTemplateCheckbox.ignoreItemWidth100 ? 'w-full' : '' }} {{ configTemplateCheckbox.classRowsWrapper || configTemplateCheckbox.classRows ?? '' }}\"\n [item]=\"item()\"\n [zIndex]=\"zIndex()\"\n [fieldKey]=\"fieldKey()\"\n [keySelected]=\"(item()[fieldKey()] | LibsUiCheckSelectedByKeyPipe:multiKeySelected():multiKeySelected()?.length) ? item()[fieldKey()] : undefined\"\n [configTemplate]=\"configTemplateCheckbox\"\n (outEvent)=\"handlerChange('checkbox',$event.item)\" />\n }\n </div>\n </div>\n </div>\n }\n </virtual-scroller>\n </div>\n }\n @if ((!items() || !items().length) && (!config()?.ignoreShowDataWhenNotSearch || keySearch())) {\n <div [class]=\"'libs-ui-font-h5r text-[#9ca2ad] '+ (config()?.textNoDataClassInclude ?? 'py-[4px] px-[12px]')\">\n @if (config()?.hasIconNoData && !loading()) {\n <div class=\"mb-[16px]\">\n <div *ngComponentOutlet=\"(keySearch() ? 'no-result' : 'no-data') | LibsUiIconsGetIconComponentPipe | async\">\n </div>\n </div>\n }\n @if (!keySearch() && !loading()) {\n <span>{{ (config()?.textNoData ?? 'i18n_have_no_selection') | translate }}</span>\n }\n @if (templateRefSearchNoData() && keySearch() && !loading()) {\n <ng-container *ngTemplateOutlet=\"templateRefSearchNoData() || null;context:{keySearch:keySearch()}\" />\n }\n @if (!templateRefSearchNoData() && keySearch() && !loading()) {\n <span>{{ (config()?.textSearchNoData ?? 'i18n_no_result') | translate }}</span>\n }\n @if (loading()) {\n <span>&nbsp;</span>\n }\n\n </div>\n }\n @if (loading()) {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n </div>\n}\n", styles: [".libs-ui-list-template-checkbox-item{padding:6px 0 6px 16px;margin-right:8px;font-size:12px;line-height:18px;position:relative}\n"] }]
287
306
  }] });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2xpc3Qvc3JjL3RlbXBsYXRlcy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSwrQ0FBK0Ms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QUFDO0lBQzFELENBQUM7SUFFUyxhQUFhO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQztJQUM3QixDQUFDO3dHQTVTVSxxQ0FBcUM7NEZBQXJDLHFDQUFxQyw2SEN2Q2xELDhwUUEwSEEsMExEL0ZJLHFCQUFxQix1dEJBQUUsaUJBQWlCLCtPQUFFLFNBQVMsNkNBQUUsZUFBZSw0RkFBRSxnQkFBZ0Isb0pBQ3RGLHNDQUFzQyxpaEJBQ3RDLHVDQUF1QyxnbkJBQ3ZDLGdDQUFnQyxpR0FDaEMsc0NBQXNDLHlRQUN0Qyw0QkFBNEIsZ0VBQzVCLCtCQUErQix3RUFDL0IsK0NBQStDLHNKQUMvQyxpQ0FBaUMsK01BQ2pDLHFDQUFxQzs7NEZBRzVCLHFDQUFxQztrQkFwQmpELFNBQVM7K0JBRUUsNENBQTRDLGNBRzFDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGdCQUFnQjt3QkFDdEYsc0NBQXNDO3dCQUN0Qyx1Q0FBdUM7d0JBQ3ZDLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0Qyw0QkFBNEI7d0JBQzVCLCtCQUErQjt3QkFDL0IsK0NBQStDO3dCQUMvQyxpQ0FBaUM7d0JBQ2pDLHFDQUFxQztxQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ29tcG9uZW50T3V0bGV0LCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCwgc2lnbmFsLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbGVyTW9kdWxlIH0gZnJvbSAnQGloYXJiZWNrL25neC12aXJ0dWFsLXNjcm9sbGVyJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWNoZWNrYm94LXNpbmdsZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc2Nyb2xsLW92ZXJsYXknO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNwaW5uZXInO1xuaW1wb3J0IHsgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB9IGZyb20gJ0BsaWJzLXVpL2ljb25zJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1jYWxsLWZ1bmN0aW9uLWluLXRlbXBsYXRlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgY29udmVydFNpZ25hbFRvT2JqZWN0LCBkZWxldGVVbmljb2RlLCBlc2NhcGVIdG1sLCBpc0VtcHR5LCBpc05pbCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RIaWdobGlnaHRLZXlTZWFyY2hEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9oaWdobGlnaHQta2V5LXNlYXJjaC9oaWdobGlnaHQta2V5LXNlYXJjaC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSUxpc3REYXRhRW1pdEtleSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGF0YS1lbWl0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvY2hlY2stc2VsZWN0ZWQtYnkta2V5LnBpcGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RSb3dzQ29tcG9uZW50IH0gZnJvbSAnLi4vcm93cy9yb3dzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzTGlzdFRlbXBsYXRlc0NvbXBvbmVudEFic3RyYWN0IH0gZnJvbSAnLi4vdGVtcGxhdGVzLmNvbXBvbmVudC5hYnN0cmFjdCc7XG5pbXBvcnQgeyBJTGlzdENvbmZpZ0l0ZW1DaGVja2JveCB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9jb25maWctaXRlbS5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtbGlzdC10ZW1wbGF0ZXNfY2hlY2tib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGVja2JveC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFZpcnR1YWxTY3JvbGxlck1vZHVsZSwgTmdDb21wb25lbnRPdXRsZXQsIEFzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNDaGVja2JveFNpbmdsZUNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlLFxuICAgIExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RIaWdobGlnaHRLZXlTZWFyY2hEaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RSb3dzQ29tcG9uZW50LFxuICAgIExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzTGlzdENoZWNrYm94Q29tcG9uZW50IGV4dGVuZHMgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vICNyZWdpb24gUFJPUEVSVFlcbiAgcHJvdGVjdGVkIGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3ggPSBzaWduYWw8SUxpc3RDb25maWdJdGVtQ2hlY2tib3ggfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKGlzRW1wdHkodGhpcy5jb25maWcoKT8uY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94LnNldCh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKSk7XG4gICAgdGhpcy5maWVsZEtleS5zZXQodGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmZpZWxkS2V5ID8/IHRoaXMuZmllbGRLZXlEZWZhdWx0KCkpO1xuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSgpO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0KGlzU2VsZWN0QWxsOiBib29sZWFuKSB7XG4gICAgaWYgKGlzU2VsZWN0QWxsICYmIHRoaXMucmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24oKSkge1xuICAgICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnNldChbXSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC5zZXQoW10pO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkaW5nKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldElkc0J5U2VydmljZSgpO1xuXG4gICAgdGhpcy5wcm9jZXNzSGFuZGxlclNlbGVjdERhdGEoaXNTZWxlY3RBbGwsIHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0hhbmRsZXJTZWxlY3REYXRhKGlzU2VsZWN0QWxsOiBib29sZWFuLCBpZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCBrZXlzRGlzYWJsZSA9IHRoaXMua2V5c0Rpc2FibGVJdGVtKCkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpO1xuXG4gICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnNldChbXSk7XG4gICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIGlmIChpc1NlbGVjdEFsbCkge1xuICAgICAgaWYgKGlkcy5sZW5ndGgpIHtcbiAgICAgICAgaWRzLmZvckVhY2goaWQgPT4gIWtleXNEaXNhYmxlLnNvbWUoa2V5ID0+IGtleSA9PT0gaWQpICYmIGtleXMuYWRkKGlkKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaWRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLml0ZW1zKCkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBpdGVtKClbdGhpcy5maWVsZEtleSgpXTtcblxuICAgICAgICAgIGlmICgha2V5c0Rpc2FibGUuc29tZShrZXlEaXNhYmxlID0+IGtleURpc2FibGUgPT09IGtleSkpIHtcbiAgICAgICAgICAgIGtleXMuYWRkKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIC4uLmtleXNdKTtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdE11bHRpS2V5KHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpIHx8IFtdKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlVblNlbGVjdGVkID0gbmV3IFNldDx1bmtub3duPigpO1xuXG4gICAgaWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgaWYgKCFrZXlzRGlzYWJsZS5zb21lKGtleSA9PiBrZXkgPT09IGlkKSkge1xuICAgICAgICBrZXlzLmRlbGV0ZShpZCk7XG4gICAgICAgIGtleVVuU2VsZWN0ZWQuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWlkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXRlbXMoKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBpdGVtKClbdGhpcy5maWVsZEtleSgpXTtcblxuICAgICAgICBpZiAoIWtleXNEaXNhYmxlLnNvbWUoa2V5ID0+IGtleSA9PT0ga2V5KSkge1xuICAgICAgICAgIGtleXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAga2V5VW5TZWxlY3RlZC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIC4uLmtleXNdKTtcbiAgICB0aGlzLm91dFVuU2VsZWN0TXVsdGlLZXkuZW1pdChBcnJheS5mcm9tKGtleVVuU2VsZWN0ZWQpKTtcbiAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyBrZXlzOiB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSB8fCBbXSwgbWFwS2V5czogW10sIGlzQ2xpY2tNYW51YWw6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldElkc0J5U2VydmljZSgpIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoQ29uZmlnKCkgfHwgIXRoaXMuaXNTZWFyY2hPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogMjAwLCBkYXRhOiB0aGlzLml0ZW1zKCkubWFwKGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pIH07XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8uKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogW10gfTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdCA9IHRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8uKCk7XG5cbiAgICAgIGlmICghaHR0cFJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogW10gfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYXJndW1lbnRzVmFsdWUsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlIH0gPSBodHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdDtcblxuICAgICAgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UudXBkYXRlQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlLCB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5mYWtlUmVzcG9uc2VQYWdpbmdBcGkoKSwge30sIHRoaXMua2V5U2VhcmNoKCksIHRoaXMuaXNTZWFyY2hPbmxpbmUoKSwgZmFsc2UsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UuY2FsbEFwaShodHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdCk7XG5cbiAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuZGF0YSB8fCAhcmVzdWx0LmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IFtdIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcblxuICAgICAgcmV0dXJuIHsgZGF0YTogW10gfTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNjcm9sbEJvdHRvbSgpIHtcbiAgICBpZiAodGhpcy5sb2FkZWRMYXN0SXRlbSgpKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkaW5nKCkgfHwgdGhpcy5sb2FkZWRMYXN0SXRlbSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZShmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1NlYXJjaCgpIHtcbiAgICBpZiAoIXRoaXMuaXNTZWFyY2hPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzS2V5Q2hhbmdlVW5TZWxlY3QoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKGlzTmlsKGl0ZW1bdGhpcy5maWVsZEtleSgpXSkgfHwgaXRlbVt0aGlzLmZpZWxkS2V5KCldID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQW5kRW1pdE11bHRpS2V5U2VsZWN0ZWQoaXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZShldmVudDogYW55LCBpdGVtOiBhbnksIGlnbm9yZURpc2FibGUgPSBmYWxzZSwgaXNDbGlja01hbnVhbCA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/Lmlnbm9yZUNsaWNrSXRlbVVuQ2hlY2tlZCkge1xuICAgICAgY29uc3Qga2V5ID0gaXRlbVt0aGlzLmZpZWxkS2V5KCldO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMubXVsdGlLZXlTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLm11bHRpS2V5U2VsZWN0ZWQuc2V0KFtdKTtcbiAgICB9XG4gICAgaWYgKCFpZ25vcmVEaXNhYmxlICYmICh0aGlzLmRpc2FibGUoKSB8fCB0aGlzLmtleXNEaXNhYmxlSXRlbSgpPy5zb21lKGtleSA9PiBrZXkgPT09IGl0ZW1bdGhpcy5maWVsZEtleSgpXSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5jbGlja0V4YWN0bHkoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrQW5kRW1pdE11bHRpS2V5U2VsZWN0ZWQoaXRlbSwgaXNDbGlja01hbnVhbCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGVja0FuZEVtaXRNdWx0aUtleVNlbGVjdGVkKGl0ZW0sIGlzQ2xpY2tNYW51YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZEVtaXRNdWx0aUtleVNlbGVjdGVkKGl0ZW06IGFueSwgaXNDbGlja01hbnVhbCA9IHRydWUpIHtcbiAgICBjb25zdCBrZXkgPSBpdGVtW3RoaXMuZmllbGRLZXkoKV07XG4gICAgY29uc3QgaW5kZXhPZktleSA9IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5pbmRleE9mKGtleSkgPz8gLTE7XG5cbiAgICBpZiAoaW5kZXhPZktleSA8IDApIHtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIGtleV0pO1xuICAgICAgdGhpcy5lbWl0U2VsZWN0TXVsdGlLZXkodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgfHwgW10sIGlzQ2xpY2tNYW51YWwpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5zcGxpY2UoaW5kZXhPZktleSwgMSk7XG4gICAgdGhpcy5vdXRVblNlbGVjdE11bHRpS2V5LmVtaXQoW2tleV0pO1xuICAgIHRoaXMuZW1pdFNlbGVjdE11bHRpS2V5KHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpIHx8IFtdLCBpc0NsaWNrTWFudWFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW1pdFNlbGVjdE11bHRpS2V5KG11bHRpS2V5U2VsZWN0ZWQ6IEFycmF5PHVua25vd24+LCBpc0NsaWNrTWFudWFsID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1hcEtleXMgPSBuZXcgQXJyYXk8SUxpc3REYXRhRW1pdEtleT4oKTtcblxuICAgIGlmICghbXVsdGlLZXlTZWxlY3RlZCB8fCAhbXVsdGlLZXlTZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyBrZXlzOiBbXSwgbWFwS2V5cywgaXNDbGlja01hbnVhbCB9KTtcbiAgICB9XG5cbiAgICBtdWx0aUtleVNlbGVjdGVkLmZvckVhY2goKGtleTogdW5rbm93bikgPT4ge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc3RvcmUoKS5maW5kKGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIG1hcEtleXMucHVzaCh7IGtleSwgaXRlbTogY29udmVydFNpZ25hbFRvT2JqZWN0KGl0ZW0pLCBpc0NsaWNrTWFudWFsIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHsga2V5czogdGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgfHwgW10sIG1hcEtleXMsIGlzQ2xpY2tNYW51YWwgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc0RhdGEocmVwbGFjZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQnlLZXlTZWFyY2g6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+ID0gW107XG4gICAgY29uc3Qga2V5c0hpZGRlbiA9IHRoaXMua2V5c0hpZGRlbkl0ZW0oKSB8fCBbXTtcbiAgICBjb25zdCBpdGVtc0FkZE5ldzogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4gPSBbXTtcblxuICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICB0aGlzLml0ZW1zLnNldChbXSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZSgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1UeXBlQWRkTmV3ID0gaXRlbSgpLmlzQWRkTmV3O1xuXG4gICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgZGVsZXRlIGN1cnJlbnQuaXNBZGROZXc7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KVxuICAgICAgY29uc3QgZGF0YVN0b3JlOiBXcml0YWJsZVNpZ25hbDxhbnk+ID0gY2xvbmVEZWVwKGl0ZW0pO1xuXG4gICAgICBkYXRhU3RvcmUudXBkYXRlKGN1cnJlbnRTdG9yZSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRTdG9yZSwgcmVmOiBpdGVtKCkgfTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmdldFBvcG92ZXIpIHtcbiAgICAgICAgZGF0YVN0b3JlLnVwZGF0ZShjdXJyZW50U3RvcmUgPT4ge1xuICAgICAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRTdG9yZSwgZGF0YVRvb2x0aXA6IHRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5nZXRQb3BvdmVyPy4oZGF0YVN0b3JlKCkpIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qga2V5ID0ga2V5c0hpZGRlbi5maW5kKGtleSA9PiBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuXG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGRlbGV0ZVVuaWNvZGUodGhpcy5idWlsZFZhbHVlQnlDb25maWcoZGF0YVN0b3JlLCB0aGlzLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3goKSkpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRleHRFc2NhcGUgPSBlc2NhcGVIdG1sKHRleHQpO1xuICAgICAgICBjb25zdCBrZXlTZWFyY2ggPSBkZWxldGVVbmljb2RlKGVzY2FwZUh0bWwodGhpcy5rZXlTZWFyY2goKS50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XG5cbiAgICAgICAgaWYgKCgodGhpcy5pc1NlYXJjaE9ubGluZSgpICYmIHRoaXMuY29uZmlnKCk/Lmh0dHBSZXF1ZXN0RGF0YT8uKCk/LnNlcnZpY2VOYW1lICYmICF0aGlzLmNvbmZpZygpPy5odHRwUmVxdWVzdERhdGE/LigpPy5zZXJ2aWNlT3RoZXIpIHx8XG4gICAgICAgICAgKHRleHQgJiYgKHRleHQuaW5jbHVkZXMoa2V5U2VhcmNoKSB8fCB0ZXh0RXNjYXBlLmluY2x1ZGVzKGtleVNlYXJjaCkpKSkgJiYgKHJlcGxhY2UgfHwgKCFyZXBsYWNlICYmICF0aGlzLml0ZW1zKCkuZmluZChkYXRhSXRlbSA9PiBkYXRhSXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGRhdGFTdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0pKSkgJiYgIWl0ZW1CeUtleVNlYXJjaC5maW5kKGRhdGFJdGVtID0+IGRhdGFJdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gZGF0YVN0b3JlKClbdGhpcy5maWVsZEtleSgpXSkpIHtcblxuICAgICAgICAgIGRhdGFTdG9yZS51cGRhdGUoY3VycmVudFN0b3JlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmN1cnJlbnRTdG9yZSxcbiAgICAgICAgICAgICAgY2xhc3NMYWJlbEluY2x1ZGU6IHRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5nZXRDbGFzc0l0ZW0/LihkYXRhU3RvcmUoKSksXG4gICAgICAgICAgICAgIGF2YXRhckNvbmZpZzogdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmdldEF2YXRhckNvbmZpZz8uKGRhdGFTdG9yZSgpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpdGVtVHlwZUFkZE5ldykge1xuICAgICAgICAgICAgaXRlbXNBZGROZXcudW5zaGlmdChkYXRhU3RvcmUpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGl0ZW1CeUtleVNlYXJjaC5wdXNoKGRhdGFTdG9yZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleEl0ZW1SZW1vdmUgPSB0aGlzLml0ZW1zKCkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIGlmIChpbmRleEl0ZW1SZW1vdmUgPiAtMSkge1xuICAgICAgICB0aGlzLml0ZW1zLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4SXRlbVJlbW92ZSwgMSk7XG5cbiAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNoZWNrTG9hZEl0ZW0gPSAocHJlU3RhdGVIYXNTY3JvbGw6IGJvb2xlYW4sIGN1cnJlbnRIYXNTY3JvbGw6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICh0aGlzLmtleXNIaWRkZW5JdGVtKCk/Lmxlbmd0aCAmJiBwcmVTdGF0ZUhhc1Njcm9sbCAmJiAhY3VycmVudEhhc1Njcm9sbCAmJiAodGhpcy5pc1NlYXJjaE9ubGluZSgpKSkge1xuICAgICAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAocmVwbGFjZSkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQoaXRlbUJ5S2V5U2VhcmNoKTtcbiAgICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgICAgdGhpcy5hdXRvU2VsZWN0Rmlyc3RJdGVtKHRoaXMuaXRlbXMoKSk7XG4gICAgICB0aGlzLnNldEhlaWdodFZpZXdQb3J0KCk7XG4gICAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2hlY2tMb2FkSXRlbSk7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCkgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4gWy4uLml0ZW1zQWRkTmV3LCAuLi4oaXRlbXMgfHwgW10pLCAuLi5pdGVtQnlLZXlTZWFyY2hdKVxuICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2hlY2tMb2FkSXRlbSk7XG4gICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCkgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXV0b1NlbGVjdEZpcnN0SXRlbShpdGVtczogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4pIHtcbiAgICBpZiAodGhpcy5hdXRvU2VsZWN0ZWRGaXJzdEl0ZW1DYWxsT3V0c2lkZUJlZm9yZSgpIHx8IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGggfHwgIXRoaXMuY29uZmlnKCk/LmF1dG9TZWxlY3RGaXJzdEl0ZW0gfHwgIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2hhbmdlKCdjaGVja2JveCcsIGl0ZW1zWzBdKCksIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMZW5ndGhJdGVtKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMoKS5sZW5ndGg7XG4gIH1cbn1cbiIsIkBpZiAoY29uZmlnVGVtcGxhdGVDaGVja2JveCgpOyBhcyBjb25maWdUZW1wbGF0ZUNoZWNrYm94KSB7XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIj5cbiAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoICYmIGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY29uZmlnQnV0dG9uU2VsZWN0QW5kVW5kU2VsZWN0SXRlbT8uKCk7IGFzIGNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0pIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cIidmbGV4IGl0ZW1zLWNlbnRlciBiZy1bI2ZmZmZmZl0gJysoY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5jbGFzc0luY2x1ZGUgPz8gJ2xpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsJylcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvbkNoZWNrQWxsPy50eXBlID8/ICdidXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uQ2hlY2tBbGw/LmxhYmVsID8/ICdpMThuX3NlbGVjdF9hbGxfc2VhcmNoZWRfcmVzdWx0cydcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25DaGVja0FsbD8uY2xhc3NJbmNsdWRlIHx8ICdwci1bOHB4XSdcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uQ2hlY2tBbGw/LmNsYXNzTGFiZWwgfHwgJ2xpYnMtdWktZm9udC1oNnInXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgZGlzYWJsZSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNlbGVjdCh0cnVlKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LVsjZTZlN2VhXVwiPnw8L2Rpdj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvblVuY2hlY2tBbGw/LnR5cGUgPz8gJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5sYWJlbCA/PyAnaTE4bl91bnNlbGVjdF9hbGxfc2VhcmNoZWRfcmVzdWx0cydcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5jbGFzc0luY2x1ZGUgfHwgJ3BsLVs4cHhdJ1wiXG4gICAgICAgICAgW2NsYXNzTGFiZWxdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5jbGFzc0xhYmVsIHx8ICdsaWJzLXVpLWZvbnQtaDZyJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCBmYWxzZVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTZWxlY3QoZmFsc2UpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoICYmIGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY29uZmlnQ2hlY2tib3hDaGVja0FsbD8uKCk7IGFzIGNvbmZpZ0NoZWNrQm94KSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCInZmxleCBsaWJzLXVpLWJvcmRlci1ib3R0b20tZ2VuZXJhbCBiZy1bI2ZmZmZmZl0gcGwtWzEycHhdICcrKGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJbmNsdWRlSGFzQ29uZmlnQ2hlY2tCb3hBbGwgPz8gJ3B5LVs2cHhdIGxpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsJylcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2xhYmVsXT1cImNvbmZpZ0NoZWNrQm94LmxhYmVsID8/ICdpMThuX2FsbCdcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCJjb25maWdDaGVja0JveC5jbGFzc0xhYmVsSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiKG11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoICYmIChtdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCB8fDApID49IChzdG9yZSgpLmxlbmd0aCB8fCAtMSkpIHx8IGZhbHNlXCJcbiAgICAgICAgICBbc3RpbGxPdGhlck9wdGlvbnNdPVwiISFtdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCAmJiAobXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGggfHwwKSA8IChzdG9yZSgpLmxlbmd0aCB8fCAtMSlcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBkaXNhYmxlKCkgfHwgZmFsc2VcIlxuICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyU2VsZWN0KCRldmVudC5jaGVja2VkKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBbY2xhc3NdPVwiJ3JlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgJyArKCghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpID8gJ2JnLVsjZmZmZmZmXSc6IGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NMaXN0SW5jbHVkZSB8fCAnJylcIj5cbiAgICAgIEBpZiAoaXRlbXMoKSAmJiBpdGVtcygpLmxlbmd0aCkge1xuICAgICAgICA8ZGl2ICNlbGVtZW50U2Nyb2xsXG4gICAgICAgICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRWaWV3UG9ydCgpICYmICFjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoID8gaGVpZ2h0Vmlld1BvcnQoKSsncHgnOicxMDAlJ1wiXG4gICAgICAgICAgKG91dFNjcm9sbEJvdHRvbSk9XCJoYW5kbGVyU2Nyb2xsQm90dG9tKClcIj5cbiAgICAgICAgICA8dmlydHVhbC1zY3JvbGxlciAjc2Nyb2xsXG4gICAgICAgICAgICBbcGFyZW50U2Nyb2xsXT1cImVsZW1lbnRTY3JvbGxcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cIml0ZW1zKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJoLWZ1bGxcIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc2Nyb2xsLnZpZXdQb3J0SXRlbXM7IHRyYWNrIGl0ZW0oKVtmaWVsZEtleSgpXTsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJsYXN0ID8gKGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJbmNsdWRlTGFzdFZpZXdJdGVtIHx8ICcnKSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAjaXRlbVJlZlxuICAgICAgICAgICAgICAgICAgTGlic1VpQ29tcG9uZW50c0xpc3RIaWdobGlnaHRLZXlTZWFyY2hEaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgIFtpc0hpZ2hsaWdodF09XCJjb25maWcoKT8uaGlnaGxpZ2h0VGV4dFNlYXJjaEluUmVzdWx0XCJcbiAgICAgICAgICAgICAgICAgIFtrZXlTZWFyY2hdPVwia2V5U2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuY2xpY2tFeGFjdGx5XT1cImNsaWNrRXhhY3RseVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktbGlzdC10ZW1wbGF0ZS1jaGVja2JveC1pdGVtIGZsZXggJyArIChjb25maWdUZW1wbGF0ZUNoZWNrYm94LmNsYXNzSXRlbUluY2x1ZGUgfHwgJycpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guaWdub3JlSXRlbVdpZHRoMTAwXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtaG92ZXJdPVwiIWNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtaG92ZXItYWN0aXZlXT1cIiFjbGlja0V4YWN0bHkoKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuIXBsLVsxMnB4XV09XCJwYWRkaW5nTGVmdEl0ZW0oKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuIXB5LVs2cHhdXT1cImNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy4hcHItWzRweF1dPVwiaGFzU2Nyb2xsKCkgJiYgY29uZmlnVGVtcGxhdGVDaGVja2JveC5yb3dzXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy4hcHItWzEycHhdXT1cIiFoYXNTY3JvbGwoKSAmJiBjb25maWdUZW1wbGF0ZUNoZWNrYm94LnJvd3NcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDaGFuZ2UoJGV2ZW50LGl0ZW0oKSlcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0oKS5maWVsZExhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2xhYmVsXT1cIml0ZW0oKS5maWVsZExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdmF0YXJDb25maWddPVwiaXRlbSgpLmF2YXRhckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGlua0ltYWdlXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guZ2V0SW1hZ2UgPyAoKCdhdmF0YXInIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpjb25maWdUZW1wbGF0ZUNoZWNrYm94LmdldEltYWdlOml0ZW0oKSkgfCBhc3luYykgOiBpdGVtKClbY29uZmlnVGVtcGxhdGVDaGVja2JveC5maWVsZEdldEltYWdlIHx8ICcnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGlua0ltYWdlRXJyb3JdPVwiY29uZmlnVGVtcGxhdGVDaGVja2JveC5nZXRJbWFnZUVycm9yID8gKCgnYXZhdGFyX2Vycm9yJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6Y29uZmlnVGVtcGxhdGVDaGVja2JveC5nZXRJbWFnZUVycm9yOml0ZW0oKSkgfCBhc3luYykgOiBpdGVtKClbY29uZmlnVGVtcGxhdGVDaGVja2JveC5maWVsZEdldExpbmtJbWFnZUVycm9yIHx8ICcnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbEluY2x1ZGVdPVwiaXRlbSgpLmNsYXNzTGFiZWxJbmNsdWRlIHx8IGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NMYWJlbEluY2x1ZGUgfHwgJ2xpYnMtdWktZm9udC1oNXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhMYWJlbF09XCJjb25maWdUZW1wbGF0ZUNoZWNrYm94LnpJbmRleFBvcG92ZXIgPz8gMTIwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOm11bHRpS2V5U2VsZWN0ZWQoKTptdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2V5XT1cIml0ZW0oKVtmaWVsZEtleSgpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW1nVHlwZUljb25dPVwiY29uZmlnVGVtcGxhdGVDaGVja2JveC5oYXNBdmF0YXJHcm91cFNvY2lhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0ltYWdlSW5jbHVkZV09XCJjb25maWdUZW1wbGF0ZUNoZWNrYm94LmNsYXNzSW5jbHVkZUltYWdlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtidWxsZXRdPVwiaXRlbSgpLmJ1bGxldD8uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTprZXlzRGlzYWJsZUl0ZW0oKTprZXlzRGlzYWJsZUl0ZW0oKT8ubGVuZ3RoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrRXhhY3RseV09XCJjbGlja0V4YWN0bHkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPSdoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlKCdjaGVja2JveCcsaXRlbSgpKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjb25maWdUZW1wbGF0ZUNoZWNrYm94Py5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc19yb3dzIGNsYXNzPVwie3sgIWNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guaWdub3JlSXRlbVdpZHRoMTAwID8gJ3ctZnVsbCcgOiAnJyB9fSB7eyBjb25maWdUZW1wbGF0ZUNoZWNrYm94LmNsYXNzUm93c1dyYXBwZXIgfHwgY29uZmlnVGVtcGxhdGVDaGVja2JveC5jbGFzc1Jvd3MgPz8gJycgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2tleVNlbGVjdGVkXT1cIihpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOm11bHRpS2V5U2VsZWN0ZWQoKTptdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCkgPyBpdGVtKClbZmllbGRLZXkoKV0gOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ1RlbXBsYXRlXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJDaGFuZ2UoJ2NoZWNrYm94JywkZXZlbnQuaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC92aXJ0dWFsLXNjcm9sbGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoKCFpdGVtcygpIHx8ICFpdGVtcygpLmxlbmd0aCkgJiYgKCFjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoIHx8IGtleVNlYXJjaCgpKSkge1xuICAgICAgICA8ZGl2IFtjbGFzc109XCInbGlicy11aS1mb250LWg1ciB0ZXh0LVsjOWNhMmFkXSAnKyAoY29uZmlnKCk/LnRleHROb0RhdGFDbGFzc0luY2x1ZGUgPz8gJ3B5LVs0cHhdIHB4LVsxMnB4XScpXCI+XG4gICAgICAgICAgQGlmIChjb25maWcoKT8uaGFzSWNvbk5vRGF0YSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItWzE2cHhdXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nQ29tcG9uZW50T3V0bGV0PVwiKGtleVNlYXJjaCgpICA/ICduby1yZXN1bHQnIDogJ25vLWRhdGEnKSB8IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfCBhc3luY1wiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKCFrZXlTZWFyY2goKSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyAoY29uZmlnKCk/LnRleHROb0RhdGEgPz8gJ2kxOG5faGF2ZV9ub19zZWxlY3Rpb24nKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICh0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpICYmIGtleVNlYXJjaCgpICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpIHx8IG51bGw7Y29udGV4dDp7a2V5U2VhcmNoOmtleVNlYXJjaCgpfVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoIXRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgJiYga2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPHNwYW4+e3sgKGNvbmZpZygpPy50ZXh0U2VhcmNoTm9EYXRhID8/ICdpMThuX25vX3Jlc3VsdCcpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgIH1cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufVxuIl19
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2xpc3Qvc3JjL3RlbXBsYXRlcy9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvbGlzdC9zcmMvdGVtcGxhdGVzL2NoZWNrYm94L2NoZWNrYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRyxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM5RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztB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RUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVTLGFBQWE7UUFDckIsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO0lBQzdCLENBQUM7d0dBblVVLHFDQUFxQzs0RkFBckMscUNBQXFDLGdLQUdRLHdCQUF3Qix1RkMxQ2xGLDhwUUEwSEEsMExEL0ZJLHFCQUFxQix1dEJBQUUsaUJBQWlCLCtPQUFFLFNBQVMsNkNBQUUsZUFBZSw0RkFBRSxnQkFBZ0Isb0pBQ3RGLHNDQUFzQyxpaEJBQ3RDLHVDQUF1QyxnbkJBQ3ZDLGdDQUFnQyxpR0FDaEMsc0NBQXNDLHlRQUN0Qyw0QkFBNEIsZ0VBQzVCLCtCQUErQix3RUFDL0IsK0NBQStDLHNKQUMvQyxpQ0FBaUMsK01BQ2pDLHFDQUFxQzs7NEZBRzVCLHFDQUFxQztrQkFwQmpELFNBQVM7K0JBRUUsNENBQTRDLGNBRzFDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGdCQUFnQjt3QkFDdEYsc0NBQXNDO3dCQUN0Qyx1Q0FBdUM7d0JBQ3ZDLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0Qyw0QkFBNEI7d0JBQzVCLCtCQUErQjt3QkFDL0IsK0NBQStDO3dCQUMvQyxpQ0FBaUM7d0JBQ2pDLHFDQUFxQztxQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBBc3luY1BpcGUsIE5nQ29tcG9uZW50T3V0bGV0LCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCwgc2lnbmFsLCB2aWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBWaXJ0dWFsU2Nyb2xsZXJDb21wb25lbnQsIFZpcnR1YWxTY3JvbGxlck1vZHVsZSB9IGZyb20gJ0BpaGFyYmVjay9uZ3gtdmlydHVhbC1zY3JvbGxlcic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0NoZWNrYm94U2luZ2xlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNTcGlubmVyQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1zcGlubmVyJztcbmltcG9ydCB7IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfSBmcm9tICdAbGlicy11aS9pY29ucyc7XG5pbXBvcnQgeyBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlIH0gZnJvbSAnQGxpYnMtdWkvcGlwZXMtY2FsbC1mdW5jdGlvbi1pbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGNvbnZlcnRTaWduYWxUb09iamVjdCwgZGVsZXRlVW5pY29kZSwgZXNjYXBlSHRtbCwgaXNFbXB0eSwgaXNOaWwgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0SGlnaGxpZ2h0S2V5U2VhcmNoRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vaGlnaGxpZ2h0LWtleS1zZWFyY2gvaGlnaGxpZ2h0LWtleS1zZWFyY2guZGlyZWN0aXZlJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RhdGEtZW1pdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2NoZWNrLXNlbGVjdGVkLWJ5LWtleS5waXBlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNMaXN0Um93c0NvbXBvbmVudCB9IGZyb20gJy4uL3Jvd3Mvcm93cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0xpc3RUZW1wbGF0ZXNDb21wb25lbnRBYnN0cmFjdCB9IGZyb20gJy4uL3RlbXBsYXRlcy5jb21wb25lbnQuYWJzdHJhY3QnO1xuaW1wb3J0IHsgSUxpc3RDb25maWdJdGVtQ2hlY2tib3ggfSBmcm9tICcuLy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLWl0ZW0uaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWxpc3QtdGVtcGxhdGVzX2NoZWNrYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2tib3guY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBWaXJ0dWFsU2Nyb2xsZXJNb2R1bGUsIE5nQ29tcG9uZW50T3V0bGV0LCBBc3luY1BpcGUsIFRyYW5zbGF0ZU1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQ2hlY2tib3hTaW5nbGVDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUsXG4gICAgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZSxcbiAgICBMaWJzVWlJY29uc0dldEljb25Db21wb25lbnRQaXBlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMaXN0SGlnaGxpZ2h0S2V5U2VhcmNoRGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMaXN0Um93c0NvbXBvbmVudCxcbiAgICBMaWJzVWlQaXBlc0NhbGxGdW5jdGlvbkluVGVtcGxhdGVQaXBlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0xpc3RDaGVja2JveENvbXBvbmVudCBleHRlbmRzIExpYnNVaUNvbXBvbmVudHNMaXN0VGVtcGxhdGVzQ29tcG9uZW50QWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICAvLyAjcmVnaW9uIFBST1BFUlRZXG4gIHByb3RlY3RlZCBjb25maWdUZW1wbGF0ZUNoZWNrYm94ID0gc2lnbmFsPElMaXN0Q29uZmlnSXRlbUNoZWNrYm94IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlydHVhbFNjcm9sbGVyQ29tcG9uZW50ID0gdmlld0NoaWxkKFZpcnR1YWxTY3JvbGxlckNvbXBvbmVudCk7XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKGlzRW1wdHkodGhpcy5jb25maWcoKT8uY29uZmlnVGVtcGxhdGVDaGVja2JveD8uKCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94LnNldCh0aGlzLmNvbmZpZygpPy5jb25maWdUZW1wbGF0ZUNoZWNrYm94Py4oKSk7XG4gICAgdGhpcy5maWVsZEtleS5zZXQodGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmZpZWxkS2V5ID8/IHRoaXMuZmllbGRLZXlEZWZhdWx0KCkpO1xuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSgpO1xuICB9XG5cbiAgLyogRlVOQ1RJT05TICovXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0KGlzU2VsZWN0QWxsOiBib29sZWFuKSB7XG4gICAgaWYgKGlzU2VsZWN0QWxsICYmIHRoaXMucmVzZXRLZXlXaGVuU2VsZWN0QWxsS2V5RHJvcGRvd24oKSkge1xuICAgICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnNldChbXSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC5zZXQoW10pO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkaW5nKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldElkc0J5U2VydmljZSgpO1xuXG4gICAgdGhpcy5wcm9jZXNzSGFuZGxlclNlbGVjdERhdGEoaXNTZWxlY3RBbGwsIHJlc3VsdC5kYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc0hhbmRsZXJTZWxlY3REYXRhKGlzU2VsZWN0QWxsOiBib29sZWFuLCBpZHM6IEFycmF5PHN0cmluZz4pIHtcbiAgICBjb25zdCBrZXlzRGlzYWJsZSA9IHRoaXMua2V5c0Rpc2FibGVJdGVtKCkgfHwgW107XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkpO1xuXG4gICAgdGhpcy5tdWx0aUtleVNlbGVjdGVkLnNldChbXSk7XG4gICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIGlmIChpc1NlbGVjdEFsbCkge1xuICAgICAgaWYgKGlkcy5sZW5ndGgpIHtcbiAgICAgICAgaWRzLmZvckVhY2goaWQgPT4gIWtleXNEaXNhYmxlLnNvbWUoa2V5ID0+IGtleSA9PT0gaWQpICYmIGtleXMuYWRkKGlkKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaWRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLml0ZW1zKCkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBpdGVtKClbdGhpcy5maWVsZEtleSgpXTtcblxuICAgICAgICAgIGlmICgha2V5c0Rpc2FibGUuc29tZShrZXlEaXNhYmxlID0+IGtleURpc2FibGUgPT09IGtleSkpIHtcbiAgICAgICAgICAgIGtleXMuYWRkKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIC4uLmtleXNdKTtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdE11bHRpS2V5KHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpIHx8IFtdKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlVblNlbGVjdGVkID0gbmV3IFNldDx1bmtub3duPigpO1xuXG4gICAgaWRzLmZvckVhY2goaWQgPT4ge1xuICAgICAgaWYgKCFrZXlzRGlzYWJsZS5zb21lKGtleSA9PiBrZXkgPT09IGlkKSkge1xuICAgICAgICBrZXlzLmRlbGV0ZShpZCk7XG4gICAgICAgIGtleVVuU2VsZWN0ZWQuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWlkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaXRlbXMoKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBpdGVtKClbdGhpcy5maWVsZEtleSgpXTtcblxuICAgICAgICBpZiAoIWtleXNEaXNhYmxlLnNvbWUoa2V5ID0+IGtleSA9PT0ga2V5KSkge1xuICAgICAgICAgIGtleXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAga2V5VW5TZWxlY3RlZC5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIC4uLmtleXNdKTtcbiAgICB0aGlzLm91dFVuU2VsZWN0TXVsdGlLZXkuZW1pdChBcnJheS5mcm9tKGtleVVuU2VsZWN0ZWQpKTtcbiAgICB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyBrZXlzOiB0aGlzLm11bHRpS2V5U2VsZWN0ZWQoKSB8fCBbXSwgbWFwS2V5czogW10sIGlzQ2xpY2tNYW51YWw6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldElkc0J5U2VydmljZSgpIHtcbiAgICBpZiAoIXRoaXMuc2VhcmNoQ29uZmlnKCkgfHwgIXRoaXMuaXNTZWFyY2hPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogMjAwLCBkYXRhOiB0aGlzLml0ZW1zKCkubWFwKGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pIH07XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8uKCkpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogW10gfTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLm91dExvYWRpbmcuZW1pdCh0aGlzLmxvYWRpbmcoKSk7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdCA9IHRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5odHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdD8uKCk7XG5cbiAgICAgIGlmICghaHR0cFJlcXVlc3RBbGxJZFNlbGVjdE9yVW5TZWxlY3QpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogW10gfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYXJndW1lbnRzVmFsdWUsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlIH0gPSBodHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdDtcblxuICAgICAgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UudXBkYXRlQXJndW1lbnRzKGFyZ3VtZW50c1ZhbHVlLCB0aGlzLmh0dHBSZXF1ZXN0U2VydmljZS5mYWtlUmVzcG9uc2VQYWdpbmdBcGkoKSwge30sIHRoaXMua2V5U2VhcmNoKCksIHRoaXMuaXNTZWFyY2hPbmxpbmUoKSwgZmFsc2UsIGd1aWRlQXV0b1VwZGF0ZUFyZ3VtZW50c1ZhbHVlKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwUmVxdWVzdFNlcnZpY2UuY2FsbEFwaShodHRwUmVxdWVzdEFsbElkU2VsZWN0T3JVblNlbGVjdCk7XG5cbiAgICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQuZGF0YSB8fCAhcmVzdWx0LmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IFtdIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcblxuICAgICAgcmV0dXJuIHsgZGF0YTogW10gfTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNjcm9sbEJvdHRvbSgpIHtcbiAgICBpZiAodGhpcy5sb2FkZWRMYXN0SXRlbSgpKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sb2FkaW5nKCkgfHwgdGhpcy5sb2FkZWRMYXN0SXRlbSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZShmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc1NlYXJjaCgpIHtcbiAgICBpZiAoIXRoaXMuaXNTZWFyY2hPbmxpbmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2FsbEFwaUJ5U2VydmljZSh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzS2V5Q2hhbmdlVW5TZWxlY3QoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKGlzTmlsKGl0ZW1bdGhpcy5maWVsZEtleSgpXSkgfHwgaXRlbVt0aGlzLmZpZWxkS2V5KCldID09PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQW5kRW1pdE11bHRpS2V5U2VsZWN0ZWQoaXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZShldmVudDogYW55LCBpdGVtOiBhbnksIGlnbm9yZURpc2FibGUgPSBmYWxzZSwgaXNDbGlja01hbnVhbCA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/Lmlnbm9yZUNsaWNrSXRlbVVuQ2hlY2tlZCkge1xuICAgICAgY29uc3Qga2V5ID0gaXRlbVt0aGlzLmZpZWxkS2V5KCldO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aUtleVNlbGVjdGVkKCk/LmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXRoaXMubXVsdGlLZXlTZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLm11bHRpS2V5U2VsZWN0ZWQuc2V0KFtdKTtcbiAgICB9XG4gICAgaWYgKCFpZ25vcmVEaXNhYmxlICYmICh0aGlzLmRpc2FibGUoKSB8fCB0aGlzLmtleXNEaXNhYmxlSXRlbSgpPy5zb21lKGtleSA9PiBrZXkgPT09IGl0ZW1bdGhpcy5maWVsZEtleSgpXSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5jbGlja0V4YWN0bHkoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmNoZWNrQW5kRW1pdE11bHRpS2V5U2VsZWN0ZWQoaXRlbSwgaXNDbGlja01hbnVhbCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGVja0FuZEVtaXRNdWx0aUtleVNlbGVjdGVkKGl0ZW0sIGlzQ2xpY2tNYW51YWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZEVtaXRNdWx0aUtleVNlbGVjdGVkKGl0ZW06IGFueSwgaXNDbGlja01hbnVhbCA9IHRydWUpIHtcbiAgICBjb25zdCBrZXkgPSBpdGVtW3RoaXMuZmllbGRLZXkoKV07XG4gICAgY29uc3QgaW5kZXhPZktleSA9IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5pbmRleE9mKGtleSkgPz8gLTE7XG5cbiAgICBpZiAoaW5kZXhPZktleSA8IDApIHtcbiAgICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZC51cGRhdGUoaXRlbXMgPT4gWy4uLihpdGVtcyB8fCBbXSksIGtleV0pO1xuICAgICAgdGhpcy5lbWl0U2VsZWN0TXVsdGlLZXkodGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgfHwgW10sIGlzQ2xpY2tNYW51YWwpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5zcGxpY2UoaW5kZXhPZktleSwgMSk7XG4gICAgdGhpcy5vdXRVblNlbGVjdE11bHRpS2V5LmVtaXQoW2tleV0pO1xuICAgIHRoaXMuZW1pdFNlbGVjdE11bHRpS2V5KHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpIHx8IFtdLCBpc0NsaWNrTWFudWFsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW1pdFNlbGVjdE11bHRpS2V5KG11bHRpS2V5U2VsZWN0ZWQ6IEFycmF5PHVua25vd24+LCBpc0NsaWNrTWFudWFsID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1hcEtleXMgPSBuZXcgQXJyYXk8SUxpc3REYXRhRW1pdEtleT4oKTtcblxuICAgIGlmICghbXVsdGlLZXlTZWxlY3RlZCB8fCAhbXVsdGlLZXlTZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLm91dFNlbGVjdE11bHRpS2V5LmVtaXQoeyBrZXlzOiBbXSwgbWFwS2V5cywgaXNDbGlja01hbnVhbCB9KTtcbiAgICB9XG5cbiAgICBtdWx0aUtleVNlbGVjdGVkLmZvckVhY2goKGtleTogdW5rbm93bikgPT4ge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc3RvcmUoKS5maW5kKGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIG1hcEtleXMucHVzaCh7IGtleSwgaXRlbTogY29udmVydFNpZ25hbFRvT2JqZWN0KGl0ZW0pLCBpc0NsaWNrTWFudWFsIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5vdXRTZWxlY3RNdWx0aUtleS5lbWl0KHsga2V5czogdGhpcy5tdWx0aUtleVNlbGVjdGVkKCkgfHwgW10sIG1hcEtleXMsIGlzQ2xpY2tNYW51YWwgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc0RhdGEocmVwbGFjZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQnlLZXlTZWFyY2g6IEFycmF5PFdyaXRhYmxlU2lnbmFsPGFueT4+ID0gW107XG4gICAgY29uc3Qga2V5c0hpZGRlbiA9IHRoaXMua2V5c0hpZGRlbkl0ZW0oKSB8fCBbXTtcbiAgICBjb25zdCBpdGVtc0FkZE5ldzogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4gPSBbXTtcblxuICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICB0aGlzLml0ZW1zLnNldChbXSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9yZSgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1UeXBlQWRkTmV3ID0gaXRlbSgpLmlzQWRkTmV3O1xuXG4gICAgICBpdGVtLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgZGVsZXRlIGN1cnJlbnQuaXNBZGROZXc7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KVxuICAgICAgY29uc3QgZGF0YVN0b3JlOiBXcml0YWJsZVNpZ25hbDxhbnk+ID0gY2xvbmVEZWVwKGl0ZW0pO1xuXG4gICAgICBkYXRhU3RvcmUudXBkYXRlKGN1cnJlbnRTdG9yZSA9PiB7XG4gICAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRTdG9yZSwgcmVmOiBpdGVtKCkgfTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmdldFBvcG92ZXIpIHtcbiAgICAgICAgZGF0YVN0b3JlLnVwZGF0ZShjdXJyZW50U3RvcmUgPT4ge1xuICAgICAgICAgIHJldHVybiB7IC4uLmN1cnJlbnRTdG9yZSwgZGF0YVRvb2x0aXA6IHRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5nZXRQb3BvdmVyPy4oZGF0YVN0b3JlKCkpIH07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qga2V5ID0ga2V5c0hpZGRlbi5maW5kKGtleSA9PiBkYXRhU3RvcmUoKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuXG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGRlbGV0ZVVuaWNvZGUodGhpcy5idWlsZFZhbHVlQnlDb25maWcoZGF0YVN0b3JlLCB0aGlzLmNvbmZpZ1RlbXBsYXRlQ2hlY2tib3goKSkpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRleHRFc2NhcGUgPSBlc2NhcGVIdG1sKHRleHQpO1xuICAgICAgICBjb25zdCBrZXlTZWFyY2ggPSBkZWxldGVVbmljb2RlKGVzY2FwZUh0bWwodGhpcy5rZXlTZWFyY2goKS50b0xvY2FsZUxvd2VyQ2FzZSgpKSk7XG5cbiAgICAgICAgaWYgKCgodGhpcy5pc1NlYXJjaE9ubGluZSgpICYmIHRoaXMuY29uZmlnKCk/Lmh0dHBSZXF1ZXN0RGF0YT8uKCk/LnNlcnZpY2VOYW1lICYmICF0aGlzLmNvbmZpZygpPy5odHRwUmVxdWVzdERhdGE/LigpPy5zZXJ2aWNlT3RoZXIpIHx8XG4gICAgICAgICAgKHRleHQgJiYgKHRleHQuaW5jbHVkZXMoa2V5U2VhcmNoKSB8fCB0ZXh0RXNjYXBlLmluY2x1ZGVzKGtleVNlYXJjaCkpKSkgJiYgKHJlcGxhY2UgfHwgKCFyZXBsYWNlICYmICF0aGlzLml0ZW1zKCkuZmluZChkYXRhSXRlbSA9PiBkYXRhSXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGRhdGFTdG9yZSgpW3RoaXMuZmllbGRLZXkoKV0pKSkgJiYgIWl0ZW1CeUtleVNlYXJjaC5maW5kKGRhdGFJdGVtID0+IGRhdGFJdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gZGF0YVN0b3JlKClbdGhpcy5maWVsZEtleSgpXSkpIHtcblxuICAgICAgICAgIGRhdGFTdG9yZS51cGRhdGUoY3VycmVudFN0b3JlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmN1cnJlbnRTdG9yZSxcbiAgICAgICAgICAgICAgY2xhc3NMYWJlbEluY2x1ZGU6IHRoaXMuY29uZmlnVGVtcGxhdGVDaGVja2JveCgpPy5nZXRDbGFzc0l0ZW0/LihkYXRhU3RvcmUoKSksXG4gICAgICAgICAgICAgIGF2YXRhckNvbmZpZzogdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmdldEF2YXRhckNvbmZpZz8uKGRhdGFTdG9yZSgpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpdGVtVHlwZUFkZE5ldykge1xuICAgICAgICAgICAgaXRlbXNBZGROZXcudW5zaGlmdChkYXRhU3RvcmUpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGl0ZW1CeUtleVNlYXJjaC5wdXNoKGRhdGFTdG9yZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleEl0ZW1SZW1vdmUgPSB0aGlzLml0ZW1zKCkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IGtleSk7XG5cbiAgICAgIGlmIChpbmRleEl0ZW1SZW1vdmUgPiAtMSkge1xuICAgICAgICB0aGlzLml0ZW1zLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICAgICAgaXRlbXMuc3BsaWNlKGluZGV4SXRlbVJlbW92ZSwgMSk7XG5cbiAgICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNhbGxiYWNrQ2hlY2tTY3JvbGwgPSAocHJlU3RhdGVIYXNTY3JvbGw6IGJvb2xlYW4sIGN1cnJlbnRIYXNTY3JvbGw6IGJvb2xlYW4pID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9JdGVtU2VsZWN0ZWQoKTtcbiAgICAgIGlmICh0aGlzLmtleXNIaWRkZW5JdGVtKCk/Lmxlbmd0aCAmJiBwcmVTdGF0ZUhhc1Njcm9sbCAmJiAhY3VycmVudEhhc1Njcm9sbCAmJiAodGhpcy5pc1NlYXJjaE9ubGluZSgpKSkge1xuICAgICAgICB0aGlzLmNhbGxBcGlCeVNlcnZpY2UoZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAocmVwbGFjZSkge1xuICAgICAgdGhpcy5pdGVtcy5zZXQoaXRlbUJ5S2V5U2VhcmNoKTtcbiAgICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgICAgdGhpcy5hdXRvU2VsZWN0Rmlyc3RJdGVtKHRoaXMuaXRlbXMoKSk7XG4gICAgICB0aGlzLnNldEhlaWdodFZpZXdQb3J0KCk7XG4gICAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2FsbGJhY2tDaGVja1Njcm9sbCk7XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMub3V0TG9hZGluZy5lbWl0KHRoaXMubG9hZGluZygpKTtcbiAgICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCkgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pdGVtcy51cGRhdGUoaXRlbXMgPT4gWy4uLml0ZW1zQWRkTmV3LCAuLi4oaXRlbXMgfHwgW10pLCAuLi5pdGVtQnlLZXlTZWFyY2hdKVxuICAgIHRoaXMuY29uZmlnKCk/LnNvcnQ/Lih0aGlzLml0ZW1zKCkpO1xuICAgIHRoaXMuc2V0SGVpZ2h0Vmlld1BvcnQoKTtcbiAgICB0aGlzLmNoZWNrVmlld1BvcnRTY3JvbGwoY2FsbGJhY2tDaGVja1Njcm9sbCk7XG4gICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5vdXRMb2FkaW5nLmVtaXQodGhpcy5sb2FkaW5nKCkpO1xuICAgIHRoaXMub3V0TG9hZEl0ZW1zQ29tcGxldGUuZW1pdCh7IGl0ZW1zOiB0aGlzLml0ZW1zKCkgfSk7XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvSXRlbVNlbGVjdGVkKCkge1xuICAgIGlmICghdGhpcy5jb25maWdUZW1wbGF0ZUNoZWNrYm94KCk/LmF1dG9TY3JvbGxUb0l0ZW1TZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lQXV0b1Njcm9sbEl0ZW1TZWxlY3RlZCgpKTtcbiAgICB0aGlzLnRpbWVBdXRvU2Nyb2xsSXRlbVNlbGVjdGVkLnNldCgoc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMua2V5U2VsZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1zKCkuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0gPT09IHRoaXMua2V5U2VsZWN0ZWQoKSk7XG5cbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0Q29udGFpbmVyID0gKHRoaXMuZWxlbWVudFNjcm9sbCgpPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KT8ub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBhZGRpdGlvbmFsT2Zmc2V0ID0gKChvZmZzZXRDb250YWluZXIgPyBvZmZzZXRDb250YWluZXIgLSB0aGlzLmhlaWdodEl0ZW0oKSA6IDApIC8gMikgKiAtMTtcblxuICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxlckNvbXBvbmVudCgpPy5zY3JvbGxUb0luZGV4KGluZGV4LCB0cnVlLCBhZGRpdGlvbmFsT2Zmc2V0LCB0aGlzLnRpbWVBbmltYXRpb25TY3JvbGxUb0luZGV4SXRlbSgpKTtcbiAgICAgIH1cbiAgICB9KSBhcyB1bmtub3duKSBhcyBudW1iZXIpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgYXV0b1NlbGVjdEZpcnN0SXRlbShpdGVtczogQXJyYXk8V3JpdGFibGVTaWduYWw8YW55Pj4pIHtcbiAgICBpZiAodGhpcy5hdXRvU2VsZWN0ZWRGaXJzdEl0ZW1DYWxsT3V0c2lkZUJlZm9yZSgpIHx8IHRoaXMubXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGggfHwgIXRoaXMuY29uZmlnKCk/LmF1dG9TZWxlY3RGaXJzdEl0ZW0gfHwgIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2hhbmdlKCdjaGVja2JveCcsIGl0ZW1zWzBdKCksIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRMZW5ndGhJdGVtKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMoKS5sZW5ndGg7XG4gIH1cbn1cbiIsIkBpZiAoY29uZmlnVGVtcGxhdGVDaGVja2JveCgpOyBhcyBjb25maWdUZW1wbGF0ZUNoZWNrYm94KSB7XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbCBoLWZ1bGxcIj5cbiAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoICYmIGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY29uZmlnQnV0dG9uU2VsZWN0QW5kVW5kU2VsZWN0SXRlbT8uKCk7IGFzIGNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0pIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cIidmbGV4IGl0ZW1zLWNlbnRlciBiZy1bI2ZmZmZmZl0gJysoY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5jbGFzc0luY2x1ZGUgPz8gJ2xpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsJylcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvbkNoZWNrQWxsPy50eXBlID8/ICdidXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgICAgW2xhYmVsXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uQ2hlY2tBbGw/LmxhYmVsID8/ICdpMThuX3NlbGVjdF9hbGxfc2VhcmNoZWRfcmVzdWx0cydcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25DaGVja0FsbD8uY2xhc3NJbmNsdWRlIHx8ICdwci1bOHB4XSdcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsXT1cImNvbmZpZ0J1dHRvblNlbGVjdEl0ZW0uYnV0dG9uQ2hlY2tBbGw/LmNsYXNzTGFiZWwgfHwgJ2xpYnMtdWktZm9udC1oNnInXCJcbiAgICAgICAgICBbZGlzYWJsZV09XCJsb2FkaW5nKCkgfHwgZGlzYWJsZSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlclNlbGVjdCh0cnVlKVwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LVsjZTZlN2VhXVwiPnw8L2Rpdj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCJjb25maWdCdXR0b25TZWxlY3RJdGVtLmJ1dHRvblVuY2hlY2tBbGw/LnR5cGUgPz8gJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgICBbbGFiZWxdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5sYWJlbCA/PyAnaTE4bl91bnNlbGVjdF9hbGxfc2VhcmNoZWRfcmVzdWx0cydcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5jbGFzc0luY2x1ZGUgfHwgJ3BsLVs4cHhdJ1wiXG4gICAgICAgICAgW2NsYXNzTGFiZWxdPVwiY29uZmlnQnV0dG9uU2VsZWN0SXRlbS5idXR0b25VbmNoZWNrQWxsPy5jbGFzc0xhYmVsIHx8ICdsaWJzLXVpLWZvbnQtaDZyJ1wiXG4gICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCBmYWxzZVwiXG4gICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTZWxlY3QoZmFsc2UpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgICBAaWYgKGl0ZW1zKCkubGVuZ3RoICYmIGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY29uZmlnQ2hlY2tib3hDaGVja0FsbD8uKCk7IGFzIGNvbmZpZ0NoZWNrQm94KSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCInZmxleCBsaWJzLXVpLWJvcmRlci1ib3R0b20tZ2VuZXJhbCBiZy1bI2ZmZmZmZl0gcGwtWzEycHhdICcrKGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJbmNsdWRlSGFzQ29uZmlnQ2hlY2tCb3hBbGwgPz8gJ3B5LVs2cHhdIGxpYnMtdWktYm9yZGVyLWJvdHRvbS1nZW5lcmFsJylcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2xhYmVsXT1cImNvbmZpZ0NoZWNrQm94LmxhYmVsID8/ICdpMThuX2FsbCdcIlxuICAgICAgICAgIFtjbGFzc0xhYmVsSW5jbHVkZV09XCJjb25maWdDaGVja0JveC5jbGFzc0xhYmVsSW5jbHVkZSB8fCAnJ1wiXG4gICAgICAgICAgW2NoZWNrZWRdPVwiKG11bHRpS2V5U2VsZWN0ZWQoKT8ubGVuZ3RoICYmIChtdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCB8fDApID49IChzdG9yZSgpLmxlbmd0aCB8fCAtMSkpIHx8IGZhbHNlXCJcbiAgICAgICAgICBbc3RpbGxPdGhlck9wdGlvbnNdPVwiISFtdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCAmJiAobXVsdGlLZXlTZWxlY3RlZCgpPy5sZW5ndGggfHwwKSA8IChzdG9yZSgpLmxlbmd0aCB8fCAtMSlcIlxuICAgICAgICAgIFtkaXNhYmxlXT1cImxvYWRpbmcoKSB8fCBkaXNhYmxlKCkgfHwgZmFsc2VcIlxuICAgICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlUG9wb3Zlcik9J2hhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudCknXG4gICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyU2VsZWN0KCRldmVudC5jaGVja2VkKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBbY2xhc3NdPVwiJ3JlbGF0aXZlIGgtZnVsbCB3LWZ1bGwgJyArKCghaXRlbXMoKSB8fCAhaXRlbXMoKS5sZW5ndGgpID8gJ2JnLVsjZmZmZmZmXSc6IGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NMaXN0SW5jbHVkZSB8fCAnJylcIj5cbiAgICAgIEBpZiAoaXRlbXMoKSAmJiBpdGVtcygpLmxlbmd0aCkge1xuICAgICAgICA8ZGl2ICNlbGVtZW50U2Nyb2xsXG4gICAgICAgICAgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmVcbiAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRWaWV3UG9ydCgpICYmICFjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoID8gaGVpZ2h0Vmlld1BvcnQoKSsncHgnOicxMDAlJ1wiXG4gICAgICAgICAgKG91dFNjcm9sbEJvdHRvbSk9XCJoYW5kbGVyU2Nyb2xsQm90dG9tKClcIj5cbiAgICAgICAgICA8dmlydHVhbC1zY3JvbGxlciAjc2Nyb2xsXG4gICAgICAgICAgICBbcGFyZW50U2Nyb2xsXT1cImVsZW1lbnRTY3JvbGxcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cIml0ZW1zKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJoLWZ1bGxcIj5cbiAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc2Nyb2xsLnZpZXdQb3J0SXRlbXM7IHRyYWNrIGl0ZW0oKVtmaWVsZEtleSgpXTsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJsYXN0ID8gKGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJbmNsdWRlTGFzdFZpZXdJdGVtIHx8ICcnKSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAjaXRlbVJlZlxuICAgICAgICAgICAgICAgICAgTGlic1VpQ29tcG9uZW50c0xpc3RIaWdobGlnaHRLZXlTZWFyY2hEaXJlY3RpdmVcbiAgICAgICAgICAgICAgICAgIFtpc0hpZ2hsaWdodF09XCJjb25maWcoKT8uaGlnaGxpZ2h0VGV4dFNlYXJjaEluUmVzdWx0XCJcbiAgICAgICAgICAgICAgICAgIFtrZXlTZWFyY2hdPVwia2V5U2VhcmNoKClcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuY2xpY2tFeGFjdGx5XT1cImNsaWNrRXhhY3RseVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiJ2xpYnMtdWktbGlzdC10ZW1wbGF0ZS1jaGVja2JveC1pdGVtIGZsZXggJyArIChjb25maWdUZW1wbGF0ZUNoZWNrYm94LmNsYXNzSXRlbUluY2x1ZGUgfHwgJycpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guaWdub3JlSXRlbVdpZHRoMTAwXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtaG92ZXJdPVwiIWNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJnLWxpc3QtaG92ZXItYWN0aXZlXT1cIiFjbGlja0V4YWN0bHkoKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuIXBsLVsxMnB4XV09XCJwYWRkaW5nTGVmdEl0ZW0oKVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuIXB5LVs2cHhdXT1cImNsaWNrRXhhY3RseSgpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy4hcHItWzRweF1dPVwiaGFzU2Nyb2xsKCkgJiYgY29uZmlnVGVtcGxhdGVDaGVja2JveC5yb3dzXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy4hcHItWzEycHhdXT1cIiFoYXNTY3JvbGwoKSAmJiBjb25maWdUZW1wbGF0ZUNoZWNrYm94LnJvd3NcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDaGFuZ2UoJGV2ZW50LGl0ZW0oKSlcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0oKS5maWVsZExhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1jaGVja2JveC1zaW5nbGUgW2xhYmVsXT1cIml0ZW0oKS5maWVsZExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdmF0YXJDb25maWddPVwiaXRlbSgpLmF2YXRhckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGlua0ltYWdlXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guZ2V0SW1hZ2UgPyAoKCdhdmF0YXInIHwgTGlic1VpUGlwZXNDYWxsRnVuY3Rpb25JblRlbXBsYXRlUGlwZTpjb25maWdUZW1wbGF0ZUNoZWNrYm94LmdldEltYWdlOml0ZW0oKSkgfCBhc3luYykgOiBpdGVtKClbY29uZmlnVGVtcGxhdGVDaGVja2JveC5maWVsZEdldEltYWdlIHx8ICcnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGlua0ltYWdlRXJyb3JdPVwiY29uZmlnVGVtcGxhdGVDaGVja2JveC5nZXRJbWFnZUVycm9yID8gKCgnYXZhdGFyX2Vycm9yJyB8IExpYnNVaVBpcGVzQ2FsbEZ1bmN0aW9uSW5UZW1wbGF0ZVBpcGU6Y29uZmlnVGVtcGxhdGVDaGVja2JveC5nZXRJbWFnZUVycm9yOml0ZW0oKSkgfCBhc3luYykgOiBpdGVtKClbY29uZmlnVGVtcGxhdGVDaGVja2JveC5maWVsZEdldExpbmtJbWFnZUVycm9yIHx8ICcnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NMYWJlbEluY2x1ZGVdPVwiaXRlbSgpLmNsYXNzTGFiZWxJbmNsdWRlIHx8IGNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NMYWJlbEluY2x1ZGUgfHwgJ2xpYnMtdWktZm9udC1oNXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhMYWJlbF09XCJjb25maWdUZW1wbGF0ZUNoZWNrYm94LnpJbmRleFBvcG92ZXIgPz8gMTIwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOm11bHRpS2V5U2VsZWN0ZWQoKTptdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBba2V5XT1cIml0ZW0oKVtmaWVsZEtleSgpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW1nVHlwZUljb25dPVwiY29uZmlnVGVtcGxhdGVDaGVja2JveC5oYXNBdmF0YXJHcm91cFNvY2lhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guY2xhc3NJbmNsdWRlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc0ltYWdlSW5jbHVkZV09XCJjb25maWdUZW1wbGF0ZUNoZWNrYm94LmNsYXNzSW5jbHVkZUltYWdlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtidWxsZXRdPVwiaXRlbSgpLmJ1bGxldD8uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwibG9hZGluZygpIHx8IGRpc2FibGUoKSB8fCAoaXRlbSgpW2ZpZWxkS2V5KCldIHwgTGlic1VpQ2hlY2tTZWxlY3RlZEJ5S2V5UGlwZTprZXlzRGlzYWJsZUl0ZW0oKTprZXlzRGlzYWJsZUl0ZW0oKT8ubGVuZ3RoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJpdGVtKCkuZGF0YVBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrRXhhY3RseV09XCJjbGlja0V4YWN0bHkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZVBvcG92ZXIpPSdoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKG91dENoYW5nZSk9XCJoYW5kbGVyQ2hhbmdlKCdjaGVja2JveCcsaXRlbSgpKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjb25maWdUZW1wbGF0ZUNoZWNrYm94Py5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0LXRlbXBsYXRlc19yb3dzIGNsYXNzPVwie3sgIWNvbmZpZ1RlbXBsYXRlQ2hlY2tib3guaWdub3JlSXRlbVdpZHRoMTAwID8gJ3ctZnVsbCcgOiAnJyB9fSB7eyBjb25maWdUZW1wbGF0ZUNoZWNrYm94LmNsYXNzUm93c1dyYXBwZXIgfHwgY29uZmlnVGVtcGxhdGVDaGVja2JveC5jbGFzc1Jvd3MgPz8gJycgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2tleVNlbGVjdGVkXT1cIihpdGVtKClbZmllbGRLZXkoKV0gfCBMaWJzVWlDaGVja1NlbGVjdGVkQnlLZXlQaXBlOm11bHRpS2V5U2VsZWN0ZWQoKTptdWx0aUtleVNlbGVjdGVkKCk/Lmxlbmd0aCkgPyBpdGVtKClbZmllbGRLZXkoKV0gOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ1RlbXBsYXRlXT1cImNvbmZpZ1RlbXBsYXRlQ2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJDaGFuZ2UoJ2NoZWNrYm94JywkZXZlbnQuaXRlbSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC92aXJ0dWFsLXNjcm9sbGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAoKCFpdGVtcygpIHx8ICFpdGVtcygpLmxlbmd0aCkgJiYgKCFjb25maWcoKT8uaWdub3JlU2hvd0RhdGFXaGVuTm90U2VhcmNoIHx8IGtleVNlYXJjaCgpKSkge1xuICAgICAgICA8ZGl2IFtjbGFzc109XCInbGlicy11aS1mb250LWg1ciB0ZXh0LVsjOWNhMmFkXSAnKyAoY29uZmlnKCk/LnRleHROb0RhdGFDbGFzc0luY2x1ZGUgPz8gJ3B5LVs0cHhdIHB4LVsxMnB4XScpXCI+XG4gICAgICAgICAgQGlmIChjb25maWcoKT8uaGFzSWNvbk5vRGF0YSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItWzE2cHhdXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nQ29tcG9uZW50T3V0bGV0PVwiKGtleVNlYXJjaCgpICA/ICduby1yZXN1bHQnIDogJ25vLWRhdGEnKSB8IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfCBhc3luY1wiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKCFrZXlTZWFyY2goKSAmJiAhbG9hZGluZygpKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyAoY29uZmlnKCk/LnRleHROb0RhdGEgPz8gJ2kxOG5faGF2ZV9ub19zZWxlY3Rpb24nKSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICh0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpICYmIGtleVNlYXJjaCgpICYmICFsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJlZlNlYXJjaE5vRGF0YSgpIHx8IG51bGw7Y29udGV4dDp7a2V5U2VhcmNoOmtleVNlYXJjaCgpfVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoIXRlbXBsYXRlUmVmU2VhcmNoTm9EYXRhKCkgJiYga2V5U2VhcmNoKCkgJiYgIWxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPHNwYW4+e3sgKGNvbmZpZygpPy50ZXh0U2VhcmNoTm9EYXRhID8/ICdpMThuX25vX3Jlc3VsdCcpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgPHNwYW4+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgIH1cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIEBpZiAobG9hZGluZygpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufVxuIl19