@flogeez/angular-tiptap-editor 3.1.5 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/esm2022/lib/components/bubble-menus/base/ate-base-bubble-menu.mjs +1 -1
- package/esm2022/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.mjs +1 -1
- package/esm2022/lib/components/bubble-menus/link/ate-link-bubble-menu.component.mjs +1 -1
- package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +40 -3
- package/esm2022/lib/components/slash-commands/ate-slash-commands.component.mjs +1 -1
- package/esm2022/lib/models/ate-editor-ref.mjs +319 -0
- package/esm2022/lib/services/ate-editor-commands.service.mjs +4 -1
- package/esm2022/lib/services/ate-editor-registry.service.mjs +94 -0
- package/esm2022/lib/services/ate-image.service.mjs +4 -1
- package/esm2022/lib/utils/ate-markdown.utils.mjs +2 -4
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/flogeez-angular-tiptap-editor.mjs +456 -6
- package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
- package/lib/components/editor/angular-tiptap-editor.component.d.ts +11 -2
- package/lib/models/ate-editor-ref.d.ts +73 -0
- package/lib/services/ate-editor-commands.service.d.ts +2 -1
- package/lib/services/ate-editor-registry.service.d.ts +36 -0
- package/lib/services/ate-image.service.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -325,4 +325,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
325
325
|
</div>
|
|
326
326
|
`, styles: [".slash-commands-menu{background:var(--ate-menu-bg);border:1px solid var(--ate-menu-border);border-radius:var(--ate-menu-border-radius, 12px);box-shadow:var(--ate-menu-shadow);padding:var(--ate-menu-padding);max-height:320px;overflow-y:auto;min-width:280px;outline:none;animation:slashMenuFadeIn .2s cubic-bezier(0,0,.2,1);scrollbar-width:thin;scrollbar-color:var(--ate-scrollbar-thumb) var(--ate-scrollbar-track)}.slash-commands-menu::-webkit-scrollbar{width:var(--ate-scrollbar-width)}.slash-commands-menu::-webkit-scrollbar-track{background:var(--ate-scrollbar-track)}.slash-commands-menu::-webkit-scrollbar-thumb{background:var(--ate-scrollbar-thumb);border:3px solid transparent;background-clip:content-box;border-radius:10px}.slash-commands-menu::-webkit-scrollbar-thumb:hover{background:var(--ate-scrollbar-thumb-hover);background-clip:content-box}@keyframes slashMenuFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.slash-command-item{display:flex;align-items:center;gap:12px;padding:var(--ate-menu-padding);border-radius:var(--ate-menu-border-radius, 8px);cursor:pointer;transition:all .15s ease;border:var(--ate-border-width, 1px) solid transparent;outline:none;margin-bottom:2px}.slash-command-item:last-child{margin-bottom:0}.slash-command-item:hover{background:var(--ate-surface-secondary)}.slash-command-item.selected{background:var(--ate-primary-light);border-color:var(--ate-primary-light-alpha)}.slash-command-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:var(--ate-surface-tertiary);border-radius:var(--ate-sub-border-radius, 8px);color:var(--ate-primary);flex-shrink:0;transition:all .15s ease}.slash-command-item.selected .slash-command-icon{background:var(--ate-primary);color:var(--ate-primary-contrast, #ffffff)}.slash-command-icon .material-symbols-outlined{font-size:18px}.slash-command-content{flex:1;min-width:0}.slash-command-title{font-weight:500;color:var(--ate-text);font-size:14px;margin-bottom:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.slash-command-description{color:var(--ate-text-secondary);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
327
327
|
}], ctorParameters: () => [] });
|
|
328
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLXNsYXNoLWNvbW1hbmRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvc2xhc2gtY29tbWFuZHMvYXRlLXNsYXNoLWNvbW1hbmRzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLHVCQUF1QixHQUV4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssRUFBRSxFQUE2QixNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBR3JELDZGQUE2RjtBQWtKN0YsTUFBTSxPQUFPLHlCQUF5QjtJQStDcEM7UUE5Q1MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxXQUFNLEdBQUcsS0FBSyxDQUFxQyxTQUFTLENBQUMsQ0FBQztRQUU5RCxZQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNkIsU0FBUyxDQUFDLENBQUM7UUFFNUQsa0JBQWEsR0FBeUIsSUFBSSxDQUFDO1FBQzNDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFMUQsY0FBYztRQUNOLGFBQVEsR0FBRyxLQUFLLENB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LENBQUMsQ0FBQyxDQUFDOzRCQUNkLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7NEJBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzs0QkFDakIsbUJBQW1COzRCQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQ0FDcEIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQzFCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQ0FDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDcEIsQ0FBQzs0QkFDRCxPQUFPLElBQUksQ0FBQzt3QkFDZCxDQUFDO29CQUNILENBQUM7b0JBRUQsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQzthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsdUJBQXVCO1FBQ3ZCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUNqQixFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1NBQ3BELENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0FsVVUseUJBQXlCO21HQUF6Qix5QkFBeUIsbWNBNUkxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JUOzs0RkEwSFUseUJBQXlCO2tCQWhKckMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICB2aWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgZWZmZWN0LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHRpcHB5LCB7IEluc3RhbmNlIGFzIFRpcHB5SW5zdGFuY2UsIHN0aWNreSB9IGZyb20gXCJ0aXBweS5qc1wiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgQXRlSTE4blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWkxOG4uc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yQ29tbWFuZHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1lZGl0b3ItY29tbWFuZHMuc2VydmljZVwiO1xuaW1wb3J0IHsgY3JlYXRlRGVmYXVsdFNsYXNoQ29tbWFuZHMgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F0ZS1zbGFzaC1jb21tYW5kcy5jb25maWdcIjtcbmltcG9ydCB7IEF0ZVNsYXNoQ29tbWFuZEl0ZW0sIEF0ZUN1c3RvbVNsYXNoQ29tbWFuZHMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1zbGFzaC1jb21tYW5kLm1vZGVsXCI7XG5pbXBvcnQgeyBQbHVnaW4sIFBsdWdpbktleSB9IGZyb20gXCJAdGlwdGFwL3BtL3N0YXRlXCI7XG5pbXBvcnQgeyBFZGl0b3JWaWV3IH0gZnJvbSBcIkB0aXB0YXAvcG0vdmlld1wiO1xuXG4vLyBEZWZhdWx0IGNvbW1hbmQgZGVmaW5pdGlvbnMgYXJlIG5vdyBjZW50cmFsaXplZCBpbiBzcmMvbGliL2NvbmZpZy9zbGFzaC1jb21tYW5kcy5jb25maWcudHNcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImF0ZS1zbGFzaC1jb21tYW5kc1wiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICNtZW51UmVmIGNsYXNzPVwic2xhc2gtY29tbWFuZHMtbWVudVwiPlxuICAgICAgQGZvciAoY29tbWFuZCBvZiBmaWx0ZXJlZENvbW1hbmRzKCk7IHRyYWNrIGNvbW1hbmQudGl0bGUpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2xhc2gtY29tbWFuZC1pdGVtXCJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiJGluZGV4ID09PSBzZWxlY3RlZEluZGV4KClcIlxuICAgICAgICAgIChtb3VzZWRvd24pPVwiZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXguc2V0KCRpbmRleClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xhc2gtY29tbWFuZC1pY29uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57eyBjb21tYW5kLmljb24gfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNsYXNoLWNvbW1hbmQtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNsYXNoLWNvbW1hbmQtdGl0bGVcIj57eyBjb21tYW5kLnRpdGxlIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xhc2gtY29tbWFuZC1kZXNjcmlwdGlvblwiPnt7IGNvbW1hbmQuZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5zbGFzaC1jb21tYW5kcy1tZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLW1lbnUtYmcpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdGUtbWVudS1ib3JkZXIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtbWVudS1ib3JkZXItcmFkaXVzLCAxMnB4KTtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tYXRlLW1lbnUtc2hhZG93KTtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tYXRlLW1lbnUtcGFkZGluZyk7XG4gICAgICAgIG1heC1oZWlnaHQ6IDMyMHB4O1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICBtaW4td2lkdGg6IDI4MHB4O1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBhbmltYXRpb246IHNsYXNoTWVudUZhZGVJbiAwLjJzIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xuICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgICAgIHNjcm9sbGJhci1jb2xvcjogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYikgdmFyKC0tYXRlLXNjcm9sbGJhci10cmFjayk7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kcy1tZW51Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgIHdpZHRoOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXdpZHRoKTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmRzLW1lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXNjcm9sbGJhci10cmFjayk7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kcy1tZW51Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1zY3JvbGxiYXItdGh1bWIpO1xuICAgICAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmRzLW1lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYi1ob3Zlcik7XG4gICAgICAgIGJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3g7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgc2xhc2hNZW51RmFkZUluIHtcbiAgICAgICAgZnJvbSB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTtcbiAgICAgICAgfVxuICAgICAgICB0byB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtaXRlbSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tYXRlLW1lbnUtcGFkZGluZyk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1tZW51LWJvcmRlci1yYWRpdXMsIDhweCk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgICAgIGJvcmRlcjogdmFyKC0tYXRlLWJvcmRlci13aWR0aCwgMXB4KSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pdGVtOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pdGVtOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5KTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtaXRlbS5zZWxlY3RlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0KTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeS1saWdodC1hbHBoYSk7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kLWljb24ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2UtdGVydGlhcnkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtc3ViLWJvcmRlci1yYWRpdXMsIDhweCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtaXRlbS5zZWxlY3RlZCAuc2xhc2gtY29tbWFuZC1pY29uIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXByaW1hcnktY29udHJhc3QsICNmZmZmZmYpO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pY29uIC5tYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1jb250ZW50IHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC10aXRsZSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGV4dCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMXB4O1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtZGVzY3JpcHRpb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXRleHQtc2Vjb25kYXJ5KTtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBdGVTbGFzaENvbW1hbmRzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgaTE4blNlcnZpY2UgPSBpbmplY3QoQXRlSTE4blNlcnZpY2UpO1xuICBlZGl0b3IgPSBpbnB1dC5yZXF1aXJlZDxFZGl0b3I+KCk7XG4gIGNvbmZpZyA9IGlucHV0PEF0ZUN1c3RvbVNsYXNoQ29tbWFuZHMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgbWVudVJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oXCJtZW51UmVmXCIpO1xuXG4gIHByaXZhdGUgdGlwcHlJbnN0YW5jZTogVGlwcHlJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGVkaXRvckNvbW1hbmRzID0gaW5qZWN0KEF0ZUVkaXRvckNvbW1hbmRzU2VydmljZSk7XG5cbiAgLy8gTG9jYWwgc3RhdGVcbiAgcHJpdmF0ZSBpc0FjdGl2ZSA9IGZhbHNlO1xuICBwcml2YXRlIGN1cnJlbnRRdWVyeSA9IHNpZ25hbChcIlwiKTtcbiAgcHJpdmF0ZSBzbGFzaFJhbmdlOiB7IGZyb206IG51bWJlcjsgdG86IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gU2lnbmFsIGZvciBzZWxlY3RlZCBpbmRleFxuICBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuXG4gIC8vIFRvb2xiYXIgaW50ZXJhY3Rpb24gc3RhdGUgKGZyb20gY2VudHJhbGl6ZWQgc2VydmljZSlcbiAgcHJpdmF0ZSByZWFkb25seSBpc1Rvb2xiYXJJbnRlcmFjdGluZyA9IHRoaXMuZWRpdG9yQ29tbWFuZHMuaXNUb29sYmFySW50ZXJhY3Rpbmc7XG5cbiAgY29tbWFuZHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb21tYW5kcykge1xuICAgICAgcmV0dXJuIGNvbmZpZy5jb21tYW5kcztcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBkZWZhdWx0IG5hdGl2ZSBjb21tYW5kc1xuICAgIHJldHVybiBjcmVhdGVEZWZhdWx0U2xhc2hDb21tYW5kcyh0aGlzLmkxOG5TZXJ2aWNlLCB0aGlzLmVkaXRvckNvbW1hbmRzKTtcbiAgfSk7XG5cbiAgZmlsdGVyZWRDb21tYW5kcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5KCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjb21tYW5kcyA9IHRoaXMuY29tbWFuZHMoKTtcblxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHJldHVybiBjb21tYW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbWFuZHMuZmlsdGVyKFxuICAgICAgY29tbWFuZCA9PlxuICAgICAgICBjb21tYW5kLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpIHx8XG4gICAgICAgIGNvbW1hbmQuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkgfHxcbiAgICAgICAgY29tbWFuZC5rZXl3b3Jkcy5zb21lKGtleXdvcmQgPT4ga2V5d29yZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSlcbiAgICApO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZWQgPSB0aGlzLmVkaXRvcigpO1xuICAgICAgaWYgKCFlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFuIHVwIG9sZCBsaXN0ZW5lcnNcbiAgICAgIGVkLm9mZihcInNlbGVjdGlvblVwZGF0ZVwiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgZWQub2ZmKFwidHJhbnNhY3Rpb25cIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgIGVkLm9mZihcImZvY3VzXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICBlZC5vZmYoXCJibHVyXCIsIHRoaXMuaGFuZGxlQmx1cik7XG5cbiAgICAgIC8vIEFkZCBuZXcgbGlzdGVuZXJzXG4gICAgICBlZC5vbihcInNlbGVjdGlvblVwZGF0ZVwiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgZWQub24oXCJ0cmFuc2FjdGlvblwiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgZWQub24oXCJmb2N1c1wiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgZWQub24oXCJibHVyXCIsIHRoaXMuaGFuZGxlQmx1cik7XG5cbiAgICAgIC8vIFVzZSBQcm9zZU1pcnJvciBwbHVnaW4gc3lzdGVtIHRvIGludGVyY2VwdCBrZXlzXG4gICAgICB0aGlzLmFkZEtleWJvYXJkUGx1Z2luKGVkKTtcblxuICAgICAgLy8gdXBkYXRlTWVudSgpIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBlZGl0b3IgaXMgcmVhZHlcbiAgICB9LCB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdFRpcHB5KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjb25zdCBlZCA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKGVkKSB7XG4gICAgICBlZC5vZmYoXCJzZWxlY3Rpb25VcGRhdGVcIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgIGVkLm9mZihcInRyYW5zYWN0aW9uXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICBlZC5vZmYoXCJmb2N1c1wiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgZWQub2ZmKFwiYmx1clwiLCB0aGlzLmhhbmRsZUJsdXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRpcHB5SW5zdGFuY2UpIHtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdFRpcHB5KCkge1xuICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLm1lbnVSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghbmF0aXZlRWxlbWVudCkge3JldHVybjt9XG5cbiAgICBpZiAodGhpcy50aXBweUluc3RhbmNlKSB7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2UuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMudGlwcHlJbnN0YW5jZSA9IHRpcHB5KGRvY3VtZW50LmJvZHksIHtcbiAgICAgIGNvbnRlbnQ6IG5hdGl2ZUVsZW1lbnQsXG4gICAgICB0cmlnZ2VyOiBcIm1hbnVhbFwiLFxuICAgICAgcGxhY2VtZW50OiBcImJvdHRvbS1zdGFydFwiLFxuICAgICAgdGhlbWU6IFwic2xhc2gtbWVudVwiLFxuICAgICAgYXBwZW5kVG86IF9yZWYgPT4ge1xuICAgICAgICAvLyBBbHdheXMgdHJ5IHRvIGNsaW1iIHVwIHRvIGVkaXRvciBob3N0IHRvIGluaGVyaXQgQ1NTIHZhcmlhYmxlc1xuICAgICAgICBjb25zdCBob3N0ID0gKHRoaXMuZWRpdG9yKCkub3B0aW9ucy5lbGVtZW50IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFxuICAgICAgICAgIFwiYW5ndWxhci10aXB0YXAtZWRpdG9yXCJcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGhvc3QgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIH0sXG4gICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgIGFycm93OiBmYWxzZSxcbiAgICAgIG9mZnNldDogWzAsIDhdLFxuICAgICAgaGlkZU9uQ2xpY2s6IHRydWUsXG4gICAgICBwbHVnaW5zOiBbc3RpY2t5XSxcbiAgICAgIHN0aWNreTogZmFsc2UsXG4gICAgICBnZXRSZWZlcmVuY2VDbGllbnRSZWN0OiAoKSA9PiB0aGlzLmdldFNsYXNoUmVjdCgpLFxuICAgICAgLy8gSW1wcm92ZSBwb3NpdGlvbmluZyB3aXRoIHNjcm9sbFxuICAgICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInByZXZlbnRPdmVyZmxvd1wiLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBib3VuZGFyeTogKHRoaXMuZWRpdG9yKCkub3B0aW9ucy5lbGVtZW50IGFzIEhUTUxFbGVtZW50KSB8fCBkb2N1bWVudC5ib2R5LFxuICAgICAgICAgICAgICBwYWRkaW5nOiA4LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiZmxpcFwiLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IFtcInRvcC1zdGFydFwiLCBcImJvdHRvbS1lbmRcIiwgXCJ0b3AtZW5kXCJdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiaGlkZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbCBjaGVjayBhZnRlciBUaXBweSBpcyBpbml0aWFsaXplZFxuICAgIHRoaXMudXBkYXRlTWVudSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTbGFzaFJlY3QoKTogRE9NUmVjdCB7XG4gICAgY29uc3QgZWQgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmICghZWQgfHwgIXRoaXMuc2xhc2hSYW5nZSkge1xuICAgICAgcmV0dXJuIG5ldyBET01SZWN0KC05OTk5LCAtOTk5OSwgMCwgMCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBQcm9zZU1pcnJvciBjb29yZGluYXRlcyBmb3IgYmV0dGVyIHByZWNpc2lvblxuICAgICAgY29uc3QgY29vcmRzID0gZWQudmlldy5jb29yZHNBdFBvcyh0aGlzLnNsYXNoUmFuZ2UuZnJvbSk7XG4gICAgICByZXR1cm4gbmV3IERPTVJlY3QoY29vcmRzLmxlZnQsIGNvb3Jkcy50b3AsIDAsIGNvb3Jkcy5ib3R0b20gLSBjb29yZHMudG9wKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKFwiRXJyb3IgY2FsY3VsYXRpbmcgY29vcmRpbmF0ZXM6XCIsIGVycm9yKTtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIHdpbmRvdy5nZXRTZWxlY3Rpb25cbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgRE9NUmVjdCgtOTk5OSwgLTk5OTksIDAsIDApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgIHJldHVybiByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVNZW51ID0gKCkgPT4ge1xuICAgIGNvbnN0IGVkID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoIWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBmcm9tIH0gPSBlZC5zdGF0ZS5zZWxlY3Rpb247XG5cbiAgICAvLyBDaGVjayBpZiAnLycgd2FzIHR5cGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIG9yIGFmdGVyIGEgc3BhY2VcbiAgICBjb25zdCB0ZXh0QmVmb3JlID0gZWQuc3RhdGUuZG9jLnRleHRCZXR3ZWVuKE1hdGgubWF4KDAsIGZyb20gLSAyMCksIGZyb20sIFwiXFxuXCIpO1xuICAgIGNvbnN0IHNsYXNoTWF0Y2ggPSB0ZXh0QmVmb3JlLm1hdGNoKC8oPzpefFxccylcXC8oW14vXFxzXSopJC8pO1xuXG4gICAgaWYgKHNsYXNoTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gc2xhc2hNYXRjaFsxXSB8fCBcIlwiO1xuICAgICAgY29uc3Qgd2FzQWN0aXZlID0gdGhpcy5pc0FjdGl2ZTtcblxuICAgICAgdGhpcy5jdXJyZW50UXVlcnkuc2V0KHF1ZXJ5KTtcbiAgICAgIHRoaXMuc2xhc2hSYW5nZSA9IHtcbiAgICAgICAgZnJvbTogZnJvbSAtIHNsYXNoTWF0Y2hbMF0ubGVuZ3RoICsgc2xhc2hNYXRjaFswXS5pbmRleE9mKFwiL1wiKSxcbiAgICAgICAgdG86IGZyb20sXG4gICAgICB9O1xuXG4gICAgICAvLyBSZXNldCBpbmRleCBpZiBtZW51IGp1c3QgYmVjYW1lIGFjdGl2ZVxuICAgICAgaWYgKCF3YXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LnNldCgwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG5cbiAgICAgIGlmICh0aGlzLmlzVG9vbGJhckludGVyYWN0aW5nKCkpIHtcbiAgICAgICAgdGhpcy5oaWRlVGlwcHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd1RpcHB5KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuaGlkZVRpcHB5KCk7XG4gICAgfVxuICB9O1xuXG4gIGhhbmRsZUJsdXIgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmhpZGVUaXBweSgpLCAxMDApO1xuICB9O1xuXG4gIHByaXZhdGUgc2Nyb2xsVG9TZWxlY3RlZCgpIHtcbiAgICAvLyBTY3JvbGwgdG8gdGhlIHNlbGVjdGVkIGVsZW1lbnRcbiAgICBjb25zdCBtZW51RWwgPSB0aGlzLm1lbnVSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAobWVudUVsKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBtZW51RWwucXVlcnlTZWxlY3RvcihcIi5zbGFzaC1jb21tYW5kLWl0ZW0uc2VsZWN0ZWRcIikgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgIHNlbGVjdGVkSXRlbS5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiBcIm5lYXJlc3RcIiwgYmVoYXZpb3I6IFwic21vb3RoXCIgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93VGlwcHkoKSB7XG4gICAgaWYgKHRoaXMudGlwcHlJbnN0YW5jZSAmJiB0aGlzLmZpbHRlcmVkQ29tbWFuZHMoKS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2Uuc2V0UHJvcHMoeyBzdGlja3k6IFwicmVmZXJlbmNlXCIgfSk7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2Uuc2hvdygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGlkZVRpcHB5KCkge1xuICAgIGlmICh0aGlzLnRpcHB5SW5zdGFuY2UpIHtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5zZXRQcm9wcyh7IHN0aWNreTogZmFsc2UgfSk7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2UuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGVDb21tYW5kKGNvbW1hbmQ6IEF0ZVNsYXNoQ29tbWFuZEl0ZW0pIHtcbiAgICBjb25zdCBlZCA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKCFlZCB8fCAhdGhpcy5zbGFzaFJhbmdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIHNsYXNoIHRleHQgKFwiL1wiKVxuICAgIGNvbnN0IHsgdHIgfSA9IGVkLnN0YXRlO1xuICAgIHRyLmRlbGV0ZSh0aGlzLnNsYXNoUmFuZ2UuZnJvbSwgdGhpcy5zbGFzaFJhbmdlLnRvKTtcbiAgICBlZC52aWV3LmRpc3BhdGNoKHRyKTtcblxuICAgIC8vIEhpZGUgbWVudSBpbW1lZGlhdGVseVxuICAgIHRoaXMuaGlkZVRpcHB5KCk7XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLy8gR2l2ZSBmb2N1cyBiYWNrIHRvIGVkaXRvciBhbmQgZXhlY3V0ZSBjb21tYW5kXG4gICAgLy8gVXNlIGEgbWljcm8tZGVsYXkgdG8gZW5zdXJlIFByb3NlTWlycm9yIERPTSBpcyBzdGFibGUgYWZ0ZXIgcmVtb3ZpbmcgXCIvXCJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGVkLmNvbW1hbmRzLmZvY3VzKCk7XG4gICAgICBjb21tYW5kLmNvbW1hbmQoZWQpO1xuICAgIH0sIDEwKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkS2V5Ym9hcmRQbHVnaW4oZWQ6IEVkaXRvcikge1xuICAgIC8vIEFkZCBhIFByb3NlTWlycm9yIHBsdWdpbiB0byBpbnRlcmNlcHQga2V5Ym9hcmQgZXZlbnRzXG4gICAgY29uc3Qga2V5Ym9hcmRQbHVnaW4gPSBuZXcgUGx1Z2luKHtcbiAgICAgIGtleTogbmV3IFBsdWdpbktleShcInNsYXNoLWNvbW1hbmRzLWtleWJvYXJkXCIpLFxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgaGFuZGxlS2V5RG93bjogKHZpZXc6IEVkaXRvclZpZXcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gT25seSBoYW5kbGUgaWYgbWVudSBpcyBhY3RpdmVcbiAgICAgICAgICBpZiAoIXRoaXMuaXNBY3RpdmUgfHwgdGhpcy5maWx0ZXJlZENvbW1hbmRzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjoge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAodGhpcy5zZWxlY3RlZEluZGV4KCkgKyAxKSAlIHRoaXMuZmlsdGVyZWRDb21tYW5kcygpLmxlbmd0aDtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LnNldChuZXh0SW5kZXgpO1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiQXJyb3dVcFwiOiB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IHByZXZJbmRleCA9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4KCkgPT09IDBcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5maWx0ZXJlZENvbW1hbmRzKCkubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSW5kZXgoKSAtIDE7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5zZXQocHJldkluZGV4KTtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1NlbGVjdGVkKCk7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIkVudGVyXCI6IHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb21tYW5kID0gdGhpcy5maWx0ZXJlZENvbW1hbmRzKClbdGhpcy5zZWxlY3RlZEluZGV4KCldO1xuICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlQ29tbWFuZChzZWxlY3RlZENvbW1hbmQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcIkVzY2FwZVwiOiB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5oaWRlVGlwcHkoKTtcbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIHR5cGVkIFwiL1wiXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNsYXNoUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRyIH0gPSB2aWV3LnN0YXRlO1xuICAgICAgICAgICAgICAgIHRyLmRlbGV0ZSh0aGlzLnNsYXNoUmFuZ2UuZnJvbSwgdGhpcy5zbGFzaFJhbmdlLnRvKTtcbiAgICAgICAgICAgICAgICB2aWV3LmRpc3BhdGNoKHRyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIHBsdWdpbiB0byBlZGl0b3JcbiAgICBlZC52aWV3LnVwZGF0ZVN0YXRlKFxuICAgICAgZWQudmlldy5zdGF0ZS5yZWNvbmZpZ3VyZSh7XG4gICAgICAgIHBsdWdpbnM6IFtrZXlib2FyZFBsdWdpbiwgLi4uZWQudmlldy5zdGF0ZS5wbHVnaW5zXSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
328
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLXNsYXNoLWNvbW1hbmRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdGlwdGFwLWVkaXRvci9zcmMvbGliL2NvbXBvbmVudHMvc2xhc2gtY29tbWFuZHMvYXRlLXNsYXNoLWNvbW1hbmRzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxTQUFTLEVBR1QsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLHVCQUF1QixHQUV4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssRUFBRSxFQUE2QixNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXBGLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBR3JELDZGQUE2RjtBQWtKN0YsTUFBTSxPQUFPLHlCQUF5QjtJQStDcEM7UUE5Q1MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQztRQUNsQyxXQUFNLEdBQUcsS0FBSyxDQUFxQyxTQUFTLENBQUMsQ0FBQztRQUU5RCxZQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNkIsU0FBUyxDQUFDLENBQUM7UUFFNUQsa0JBQWEsR0FBeUIsSUFBSSxDQUFDO1FBQzNDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFMUQsY0FBYztRQUNOLGFBQVEsR0FBRyxLQUFLLENB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LENBQUMsQ0FBQyxDQUFDOzRCQUNkLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0QkFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7NEJBQ3RCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzs0QkFDakIsbUJBQW1COzRCQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQ0FDcEIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQzFCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQ0FDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDcEIsQ0FBQzs0QkFDRCxPQUFPLElBQUksQ0FBQzt3QkFDZCxDQUFDO29CQUNILENBQUM7b0JBRUQsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQzthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsdUJBQXVCO1FBQ3ZCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUNqQixFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDeEIsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1NBQ3BELENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0F2VVUseUJBQXlCO21HQUF6Qix5QkFBeUIsbWNBNUkxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JUOzs0RkEwSFUseUJBQXlCO2tCQWhKckMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGlucHV0LFxuICB2aWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgZWZmZWN0LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBBZnRlclZpZXdJbml0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHRpcHB5LCB7IEluc3RhbmNlIGFzIFRpcHB5SW5zdGFuY2UsIHN0aWNreSB9IGZyb20gXCJ0aXBweS5qc1wiO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgQXRlSTE4blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvYXRlLWkxOG4uc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yQ29tbWFuZHNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2F0ZS1lZGl0b3ItY29tbWFuZHMuc2VydmljZVwiO1xuaW1wb3J0IHsgY3JlYXRlRGVmYXVsdFNsYXNoQ29tbWFuZHMgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F0ZS1zbGFzaC1jb21tYW5kcy5jb25maWdcIjtcbmltcG9ydCB7IEF0ZVNsYXNoQ29tbWFuZEl0ZW0sIEF0ZUN1c3RvbVNsYXNoQ29tbWFuZHMgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2F0ZS1zbGFzaC1jb21tYW5kLm1vZGVsXCI7XG5pbXBvcnQgeyBQbHVnaW4sIFBsdWdpbktleSB9IGZyb20gXCJAdGlwdGFwL3BtL3N0YXRlXCI7XG5pbXBvcnQgeyBFZGl0b3JWaWV3IH0gZnJvbSBcIkB0aXB0YXAvcG0vdmlld1wiO1xuXG4vLyBEZWZhdWx0IGNvbW1hbmQgZGVmaW5pdGlvbnMgYXJlIG5vdyBjZW50cmFsaXplZCBpbiBzcmMvbGliL2NvbmZpZy9zbGFzaC1jb21tYW5kcy5jb25maWcudHNcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImF0ZS1zbGFzaC1jb21tYW5kc1wiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICNtZW51UmVmIGNsYXNzPVwic2xhc2gtY29tbWFuZHMtbWVudVwiPlxuICAgICAgQGZvciAoY29tbWFuZCBvZiBmaWx0ZXJlZENvbW1hbmRzKCk7IHRyYWNrIGNvbW1hbmQudGl0bGUpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2xhc2gtY29tbWFuZC1pdGVtXCJcbiAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiJGluZGV4ID09PSBzZWxlY3RlZEluZGV4KClcIlxuICAgICAgICAgIChtb3VzZWRvd24pPVwiZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgIChtb3VzZWVudGVyKT1cInNlbGVjdGVkSW5kZXguc2V0KCRpbmRleClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xhc2gtY29tbWFuZC1pY29uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj57eyBjb21tYW5kLmljb24gfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNsYXNoLWNvbW1hbmQtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNsYXNoLWNvbW1hbmQtdGl0bGVcIj57eyBjb21tYW5kLnRpdGxlIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2xhc2gtY29tbWFuZC1kZXNjcmlwdGlvblwiPnt7IGNvbW1hbmQuZGVzY3JpcHRpb24gfX08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5zbGFzaC1jb21tYW5kcy1tZW51IHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLW1lbnUtYmcpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hdGUtbWVudS1ib3JkZXIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtbWVudS1ib3JkZXItcmFkaXVzLCAxMnB4KTtcbiAgICAgICAgYm94LXNoYWRvdzogdmFyKC0tYXRlLW1lbnUtc2hhZG93KTtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tYXRlLW1lbnUtcGFkZGluZyk7XG4gICAgICAgIG1heC1oZWlnaHQ6IDMyMHB4O1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICBtaW4td2lkdGg6IDI4MHB4O1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgICBhbmltYXRpb246IHNsYXNoTWVudUZhZGVJbiAwLjJzIGN1YmljLWJlemllcigwLCAwLCAwLjIsIDEpO1xuICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgICAgIHNjcm9sbGJhci1jb2xvcjogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYikgdmFyKC0tYXRlLXNjcm9sbGJhci10cmFjayk7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kcy1tZW51Ojotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgIHdpZHRoOiB2YXIoLS1hdGUtc2Nyb2xsYmFyLXdpZHRoKTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmRzLW1lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXNjcm9sbGJhci10cmFjayk7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kcy1tZW51Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1zY3JvbGxiYXItdGh1bWIpO1xuICAgICAgICBib3JkZXI6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYmFja2dyb3VuZC1jbGlwOiBjb250ZW50LWJveDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmRzLW1lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXNjcm9sbGJhci10aHVtYi1ob3Zlcik7XG4gICAgICAgIGJhY2tncm91bmQtY2xpcDogY29udGVudC1ib3g7XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgc2xhc2hNZW51RmFkZUluIHtcbiAgICAgICAgZnJvbSB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTtcbiAgICAgICAgfVxuICAgICAgICB0byB7XG4gICAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtaXRlbSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tYXRlLW1lbnUtcGFkZGluZyk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWF0ZS1tZW51LWJvcmRlci1yYWRpdXMsIDhweCk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7XG4gICAgICAgIGJvcmRlcjogdmFyKC0tYXRlLWJvcmRlci13aWR0aCwgMXB4KSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgb3V0bGluZTogbm9uZTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pdGVtOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pdGVtOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2Utc2Vjb25kYXJ5KTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtaXRlbS5zZWxlY3RlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWF0ZS1wcmltYXJ5LWxpZ2h0KTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeS1saWdodC1hbHBoYSk7XG4gICAgICB9XG5cbiAgICAgIC5zbGFzaC1jb21tYW5kLWljb24ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXN1cmZhY2UtdGVydGlhcnkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1hdGUtc3ViLWJvcmRlci1yYWRpdXMsIDhweCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtcHJpbWFyeSk7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtaXRlbS5zZWxlY3RlZCAuc2xhc2gtY29tbWFuZC1pY29uIHtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXRlLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXByaW1hcnktY29udHJhc3QsICNmZmZmZmYpO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1pY29uIC5tYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC1jb250ZW50IHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuc2xhc2gtY29tbWFuZC10aXRsZSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1hdGUtdGV4dCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMXB4O1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgLnNsYXNoLWNvbW1hbmQtZGVzY3JpcHRpb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0tYXRlLXRleHQtc2Vjb25kYXJ5KTtcbiAgICAgICAgZm9udC1zaXplOiAxMXB4O1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBdGVTbGFzaENvbW1hbmRzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgaTE4blNlcnZpY2UgPSBpbmplY3QoQXRlSTE4blNlcnZpY2UpO1xuICBlZGl0b3IgPSBpbnB1dC5yZXF1aXJlZDxFZGl0b3I+KCk7XG4gIGNvbmZpZyA9IGlucHV0PEF0ZUN1c3RvbVNsYXNoQ29tbWFuZHMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgbWVudVJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oXCJtZW51UmVmXCIpO1xuXG4gIHByaXZhdGUgdGlwcHlJbnN0YW5jZTogVGlwcHlJbnN0YW5jZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGVkaXRvckNvbW1hbmRzID0gaW5qZWN0KEF0ZUVkaXRvckNvbW1hbmRzU2VydmljZSk7XG5cbiAgLy8gTG9jYWwgc3RhdGVcbiAgcHJpdmF0ZSBpc0FjdGl2ZSA9IGZhbHNlO1xuICBwcml2YXRlIGN1cnJlbnRRdWVyeSA9IHNpZ25hbChcIlwiKTtcbiAgcHJpdmF0ZSBzbGFzaFJhbmdlOiB7IGZyb206IG51bWJlcjsgdG86IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gU2lnbmFsIGZvciBzZWxlY3RlZCBpbmRleFxuICBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuXG4gIC8vIFRvb2xiYXIgaW50ZXJhY3Rpb24gc3RhdGUgKGZyb20gY2VudHJhbGl6ZWQgc2VydmljZSlcbiAgcHJpdmF0ZSByZWFkb25seSBpc1Rvb2xiYXJJbnRlcmFjdGluZyA9IHRoaXMuZWRpdG9yQ29tbWFuZHMuaXNUb29sYmFySW50ZXJhY3Rpbmc7XG5cbiAgY29tbWFuZHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBpZiAoY29uZmlnICYmIGNvbmZpZy5jb21tYW5kcykge1xuICAgICAgcmV0dXJuIGNvbmZpZy5jb21tYW5kcztcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBkZWZhdWx0IG5hdGl2ZSBjb21tYW5kc1xuICAgIHJldHVybiBjcmVhdGVEZWZhdWx0U2xhc2hDb21tYW5kcyh0aGlzLmkxOG5TZXJ2aWNlLCB0aGlzLmVkaXRvckNvbW1hbmRzKTtcbiAgfSk7XG5cbiAgZmlsdGVyZWRDb21tYW5kcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuY3VycmVudFF1ZXJ5KCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjb21tYW5kcyA9IHRoaXMuY29tbWFuZHMoKTtcblxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHJldHVybiBjb21tYW5kcztcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbWFuZHMuZmlsdGVyKFxuICAgICAgY29tbWFuZCA9PlxuICAgICAgICBjb21tYW5kLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpIHx8XG4gICAgICAgIGNvbW1hbmQuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkgfHxcbiAgICAgICAgY29tbWFuZC5rZXl3b3Jkcy5zb21lKGtleXdvcmQgPT4ga2V5d29yZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSlcbiAgICApO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkID0gdGhpcy5lZGl0b3IoKTtcbiAgICAgICAgaWYgKCFlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFuIHVwIG9sZCBsaXN0ZW5lcnNcbiAgICAgICAgZWQub2ZmKFwic2VsZWN0aW9uVXBkYXRlXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICAgIGVkLm9mZihcInRyYW5zYWN0aW9uXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICAgIGVkLm9mZihcImZvY3VzXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICAgIGVkLm9mZihcImJsdXJcIiwgdGhpcy5oYW5kbGVCbHVyKTtcblxuICAgICAgICAvLyBBZGQgbmV3IGxpc3RlbmVyc1xuICAgICAgICBlZC5vbihcInNlbGVjdGlvblVwZGF0ZVwiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgICBlZC5vbihcInRyYW5zYWN0aW9uXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICAgIGVkLm9uKFwiZm9jdXNcIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgICAgZWQub24oXCJibHVyXCIsIHRoaXMuaGFuZGxlQmx1cik7XG5cbiAgICAgICAgLy8gVXNlIFByb3NlTWlycm9yIHBsdWdpbiBzeXN0ZW0gdG8gaW50ZXJjZXB0IGtleXNcbiAgICAgICAgdGhpcy5hZGRLZXlib2FyZFBsdWdpbihlZCk7XG5cbiAgICAgICAgLy8gdXBkYXRlTWVudSgpIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBlZGl0b3IgaXMgcmVhZHlcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdFRpcHB5KCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjb25zdCBlZCA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKGVkKSB7XG4gICAgICBlZC5vZmYoXCJzZWxlY3Rpb25VcGRhdGVcIiwgdGhpcy51cGRhdGVNZW51KTtcbiAgICAgIGVkLm9mZihcInRyYW5zYWN0aW9uXCIsIHRoaXMudXBkYXRlTWVudSk7XG4gICAgICBlZC5vZmYoXCJmb2N1c1wiLCB0aGlzLnVwZGF0ZU1lbnUpO1xuICAgICAgZWQub2ZmKFwiYmx1clwiLCB0aGlzLmhhbmRsZUJsdXIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRpcHB5SW5zdGFuY2UpIHtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLnRpcHB5SW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdFRpcHB5KCkge1xuICAgIGNvbnN0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLm1lbnVSZWYoKS5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghbmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRpcHB5SW5zdGFuY2UpIHtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy50aXBweUluc3RhbmNlID0gdGlwcHkoZG9jdW1lbnQuYm9keSwge1xuICAgICAgY29udGVudDogbmF0aXZlRWxlbWVudCxcbiAgICAgIHRyaWdnZXI6IFwibWFudWFsXCIsXG4gICAgICBwbGFjZW1lbnQ6IFwiYm90dG9tLXN0YXJ0XCIsXG4gICAgICB0aGVtZTogXCJzbGFzaC1tZW51XCIsXG4gICAgICBhcHBlbmRUbzogX3JlZiA9PiB7XG4gICAgICAgIC8vIEFsd2F5cyB0cnkgdG8gY2xpbWIgdXAgdG8gZWRpdG9yIGhvc3QgdG8gaW5oZXJpdCBDU1MgdmFyaWFibGVzXG4gICAgICAgIGNvbnN0IGhvc3QgPSAodGhpcy5lZGl0b3IoKS5vcHRpb25zLmVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoXG4gICAgICAgICAgXCJhbmd1bGFyLXRpcHRhcC1lZGl0b3JcIlxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gaG9zdCB8fCBkb2N1bWVudC5ib2R5O1xuICAgICAgfSxcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgYXJyb3c6IGZhbHNlLFxuICAgICAgb2Zmc2V0OiBbMCwgOF0sXG4gICAgICBoaWRlT25DbGljazogdHJ1ZSxcbiAgICAgIHBsdWdpbnM6IFtzdGlja3ldLFxuICAgICAgc3RpY2t5OiBmYWxzZSxcbiAgICAgIGdldFJlZmVyZW5jZUNsaWVudFJlY3Q6ICgpID0+IHRoaXMuZ2V0U2xhc2hSZWN0KCksXG4gICAgICAvLyBJbXByb3ZlIHBvc2l0aW9uaW5nIHdpdGggc2Nyb2xsXG4gICAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwicHJldmVudE92ZXJmbG93XCIsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIGJvdW5kYXJ5OiAodGhpcy5lZGl0b3IoKS5vcHRpb25zLmVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpIHx8IGRvY3VtZW50LmJvZHksXG4gICAgICAgICAgICAgIHBhZGRpbmc6IDgsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJmbGlwXCIsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogW1widG9wLXN0YXJ0XCIsIFwiYm90dG9tLWVuZFwiLCBcInRvcC1lbmRcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJoaWRlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsIGNoZWNrIGFmdGVyIFRpcHB5IGlzIGluaXRpYWxpemVkXG4gICAgdGhpcy51cGRhdGVNZW51KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFNsYXNoUmVjdCgpOiBET01SZWN0IHtcbiAgICBjb25zdCBlZCA9IHRoaXMuZWRpdG9yKCk7XG4gICAgaWYgKCFlZCB8fCAhdGhpcy5zbGFzaFJhbmdlKSB7XG4gICAgICByZXR1cm4gbmV3IERPTVJlY3QoLTk5OTksIC05OTk5LCAwLCAwKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVXNlIFByb3NlTWlycm9yIGNvb3JkaW5hdGVzIGZvciBiZXR0ZXIgcHJlY2lzaW9uXG4gICAgICBjb25zdCBjb29yZHMgPSBlZC52aWV3LmNvb3Jkc0F0UG9zKHRoaXMuc2xhc2hSYW5nZS5mcm9tKTtcbiAgICAgIHJldHVybiBuZXcgRE9NUmVjdChjb29yZHMubGVmdCwgY29vcmRzLnRvcCwgMCwgY29vcmRzLmJvdHRvbSAtIGNvb3Jkcy50b3ApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJFcnJvciBjYWxjdWxhdGluZyBjb29yZGluYXRlczpcIiwgZXJyb3IpO1xuICAgICAgLy8gRmFsbGJhY2sgdG8gd2luZG93LmdldFNlbGVjdGlvblxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBET01SZWN0KC05OTk5LCAtOTk5OSwgMCwgMCk7XG4gICAgICB9XG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgICAgcmV0dXJuIHJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU1lbnUgPSAoKSA9PiB7XG4gICAgY29uc3QgZWQgPSB0aGlzLmVkaXRvcigpO1xuICAgIGlmICghZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGZyb20gfSA9IGVkLnN0YXRlLnNlbGVjdGlvbjtcblxuICAgIC8vIENoZWNrIGlmICcvJyB3YXMgdHlwZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgb3IgYWZ0ZXIgYSBzcGFjZVxuICAgIGNvbnN0IHRleHRCZWZvcmUgPSBlZC5zdGF0ZS5kb2MudGV4dEJldHdlZW4oTWF0aC5tYXgoMCwgZnJvbSAtIDIwKSwgZnJvbSwgXCJcXG5cIik7XG4gICAgY29uc3Qgc2xhc2hNYXRjaCA9IHRleHRCZWZvcmUubWF0Y2goLyg/Ol58XFxzKVxcLyhbXi9cXHNdKikkLyk7XG5cbiAgICBpZiAoc2xhc2hNYXRjaCkge1xuICAgICAgY29uc3QgcXVlcnkgPSBzbGFzaE1hdGNoWzFdIHx8IFwiXCI7XG4gICAgICBjb25zdCB3YXNBY3RpdmUgPSB0aGlzLmlzQWN0aXZlO1xuXG4gICAgICB0aGlzLmN1cnJlbnRRdWVyeS5zZXQocXVlcnkpO1xuICAgICAgdGhpcy5zbGFzaFJhbmdlID0ge1xuICAgICAgICBmcm9tOiBmcm9tIC0gc2xhc2hNYXRjaFswXS5sZW5ndGggKyBzbGFzaE1hdGNoWzBdLmluZGV4T2YoXCIvXCIpLFxuICAgICAgICB0bzogZnJvbSxcbiAgICAgIH07XG5cbiAgICAgIC8vIFJlc2V0IGluZGV4IGlmIG1lbnUganVzdCBiZWNhbWUgYWN0aXZlXG4gICAgICBpZiAoIXdhc0FjdGl2ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KDApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuaXNUb29sYmFySW50ZXJhY3RpbmcoKSkge1xuICAgICAgICB0aGlzLmhpZGVUaXBweSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93VGlwcHkoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5oaWRlVGlwcHkoKTtcbiAgICB9XG4gIH07XG5cbiAgaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaGlkZVRpcHB5KCksIDEwMCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb1NlbGVjdGVkKCkge1xuICAgIC8vIFNjcm9sbCB0byB0aGUgc2VsZWN0ZWQgZWxlbWVudFxuICAgIGNvbnN0IG1lbnVFbCA9IHRoaXMubWVudVJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmIChtZW51RWwpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IG1lbnVFbC5xdWVyeVNlbGVjdG9yKFwiLnNsYXNoLWNvbW1hbmQtaXRlbS5zZWxlY3RlZFwiKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6IFwibmVhcmVzdFwiLCBiZWhhdmlvcjogXCJzbW9vdGhcIiB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dUaXBweSgpIHtcbiAgICBpZiAodGhpcy50aXBweUluc3RhbmNlICYmIHRoaXMuZmlsdGVyZWRDb21tYW5kcygpLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5zZXRQcm9wcyh7IHN0aWNreTogXCJyZWZlcmVuY2VcIiB9KTtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5zaG93KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoaWRlVGlwcHkoKSB7XG4gICAgaWYgKHRoaXMudGlwcHlJbnN0YW5jZSkge1xuICAgICAgdGhpcy50aXBweUluc3RhbmNlLnNldFByb3BzKHsgc3RpY2t5OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMudGlwcHlJbnN0YW5jZS5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgZXhlY3V0ZUNvbW1hbmQoY29tbWFuZDogQXRlU2xhc2hDb21tYW5kSXRlbSkge1xuICAgIGNvbnN0IGVkID0gdGhpcy5lZGl0b3IoKTtcbiAgICBpZiAoIWVkIHx8ICF0aGlzLnNsYXNoUmFuZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgc2xhc2ggdGV4dCAoXCIvXCIpXG4gICAgY29uc3QgeyB0ciB9ID0gZWQuc3RhdGU7XG4gICAgdHIuZGVsZXRlKHRoaXMuc2xhc2hSYW5nZS5mcm9tLCB0aGlzLnNsYXNoUmFuZ2UudG8pO1xuICAgIGVkLnZpZXcuZGlzcGF0Y2godHIpO1xuXG4gICAgLy8gSGlkZSBtZW51IGltbWVkaWF0ZWx5XG4gICAgdGhpcy5oaWRlVGlwcHkoKTtcbiAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG5cbiAgICAvLyBHaXZlIGZvY3VzIGJhY2sgdG8gZWRpdG9yIGFuZCBleGVjdXRlIGNvbW1hbmRcbiAgICAvLyBVc2UgYSBtaWNyby1kZWxheSB0byBlbnN1cmUgUHJvc2VNaXJyb3IgRE9NIGlzIHN0YWJsZSBhZnRlciByZW1vdmluZyBcIi9cIlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZWQuY29tbWFuZHMuZm9jdXMoKTtcbiAgICAgIGNvbW1hbmQuY29tbWFuZChlZCk7XG4gICAgfSwgMTApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRLZXlib2FyZFBsdWdpbihlZDogRWRpdG9yKSB7XG4gICAgLy8gQWRkIGEgUHJvc2VNaXJyb3IgcGx1Z2luIHRvIGludGVyY2VwdCBrZXlib2FyZCBldmVudHNcbiAgICBjb25zdCBrZXlib2FyZFBsdWdpbiA9IG5ldyBQbHVnaW4oe1xuICAgICAga2V5OiBuZXcgUGx1Z2luS2V5KFwic2xhc2gtY29tbWFuZHMta2V5Ym9hcmRcIiksXG4gICAgICBwcm9wczoge1xuICAgICAgICBoYW5kbGVLZXlEb3duOiAodmlldzogRWRpdG9yVmlldywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAvLyBPbmx5IGhhbmRsZSBpZiBtZW51IGlzIGFjdGl2ZVxuICAgICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSB8fCB0aGlzLmZpbHRlcmVkQ29tbWFuZHMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSBcIkFycm93RG93blwiOiB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXgoKSArIDEpICUgdGhpcy5maWx0ZXJlZENvbW1hbmRzKCkubGVuZ3RoO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXguc2V0KG5leHRJbmRleCk7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3RlZCgpO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJBcnJvd1VwXCI6IHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgY29uc3QgcHJldkluZGV4ID1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXgoKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmZpbHRlcmVkQ29tbWFuZHMoKS5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJbmRleCgpIC0gMTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4LnNldChwcmV2SW5kZXgpO1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiRW50ZXJcIjoge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvbW1hbmQgPSB0aGlzLmZpbHRlcmVkQ29tbWFuZHMoKVt0aGlzLnNlbGVjdGVkSW5kZXgoKV07XG4gICAgICAgICAgICAgIGlmIChzZWxlY3RlZENvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVDb21tYW5kKHNlbGVjdGVkQ29tbWFuZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwiRXNjYXBlXCI6IHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLmhpZGVUaXBweSgpO1xuICAgICAgICAgICAgICAvLyBSZW1vdmUgdHlwZWQgXCIvXCJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2xhc2hSYW5nZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdHIgfSA9IHZpZXcuc3RhdGU7XG4gICAgICAgICAgICAgICAgdHIuZGVsZXRlKHRoaXMuc2xhc2hSYW5nZS5mcm9tLCB0aGlzLnNsYXNoUmFuZ2UudG8pO1xuICAgICAgICAgICAgICAgIHZpZXcuZGlzcGF0Y2godHIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgcGx1Z2luIHRvIGVkaXRvclxuICAgIGVkLnZpZXcudXBkYXRlU3RhdGUoXG4gICAgICBlZC52aWV3LnN0YXRlLnJlY29uZmlndXJlKHtcbiAgICAgICAgcGx1Z2luczogW2tleWJvYXJkUGx1Z2luLCAuLi5lZC52aWV3LnN0YXRlLnBsdWdpbnNdLFxuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A wrapper class that holds a reference to a registered editor component.
|
|
3
|
+
* It provides direct, type-safe facade methods to interact with the editor
|
|
4
|
+
* and execute formatting/utility commands without needing to manage the raw
|
|
5
|
+
* TipTap editor instance directly.
|
|
6
|
+
*/
|
|
7
|
+
export class AteEditorRef {
|
|
8
|
+
constructor(id, getEditorInstance, commandsService) {
|
|
9
|
+
this.id = id;
|
|
10
|
+
this.getEditorInstance = getEditorInstance;
|
|
11
|
+
this.commandsService = commandsService;
|
|
12
|
+
}
|
|
13
|
+
/** Get the raw TipTap Editor instance. */
|
|
14
|
+
get editor() {
|
|
15
|
+
return this.getEditorInstance();
|
|
16
|
+
}
|
|
17
|
+
/** Get the current editor state snapshot. */
|
|
18
|
+
get state() {
|
|
19
|
+
return this.commandsService.editorState();
|
|
20
|
+
}
|
|
21
|
+
/** Get the reactive editor state as a Signal. */
|
|
22
|
+
get stateSignal() {
|
|
23
|
+
return this.commandsService.editorState;
|
|
24
|
+
}
|
|
25
|
+
/** Execute a generic command by name. */
|
|
26
|
+
execute(command, ...args) {
|
|
27
|
+
const editor = this.editor;
|
|
28
|
+
if (editor) {
|
|
29
|
+
this.commandsService.execute(editor, command, ...args);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// ============================================
|
|
33
|
+
// Facade Formatting Commands
|
|
34
|
+
// ============================================
|
|
35
|
+
toggleBold() {
|
|
36
|
+
const editor = this.editor;
|
|
37
|
+
if (editor) {
|
|
38
|
+
this.commandsService.toggleBold(editor);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
toggleItalic() {
|
|
42
|
+
const editor = this.editor;
|
|
43
|
+
if (editor) {
|
|
44
|
+
this.commandsService.toggleItalic(editor);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
toggleStrike() {
|
|
48
|
+
const editor = this.editor;
|
|
49
|
+
if (editor) {
|
|
50
|
+
this.commandsService.toggleStrike(editor);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
toggleCode() {
|
|
54
|
+
const editor = this.editor;
|
|
55
|
+
if (editor) {
|
|
56
|
+
this.commandsService.toggleCode(editor);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
toggleCodeBlock() {
|
|
60
|
+
const editor = this.editor;
|
|
61
|
+
if (editor) {
|
|
62
|
+
this.commandsService.toggleCodeBlock(editor);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
toggleUnderline() {
|
|
66
|
+
const editor = this.editor;
|
|
67
|
+
if (editor) {
|
|
68
|
+
this.commandsService.toggleUnderline(editor);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
toggleSuperscript() {
|
|
72
|
+
const editor = this.editor;
|
|
73
|
+
if (editor) {
|
|
74
|
+
this.commandsService.toggleSuperscript(editor);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
toggleSubscript() {
|
|
78
|
+
const editor = this.editor;
|
|
79
|
+
if (editor) {
|
|
80
|
+
this.commandsService.toggleSubscript(editor);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
toggleHeading(level) {
|
|
84
|
+
const editor = this.editor;
|
|
85
|
+
if (editor) {
|
|
86
|
+
this.commandsService.toggleHeading(editor, level);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
toggleBulletList() {
|
|
90
|
+
const editor = this.editor;
|
|
91
|
+
if (editor) {
|
|
92
|
+
this.commandsService.toggleBulletList(editor);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
toggleOrderedList() {
|
|
96
|
+
const editor = this.editor;
|
|
97
|
+
if (editor) {
|
|
98
|
+
this.commandsService.toggleOrderedList(editor);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
toggleBlockquote() {
|
|
102
|
+
const editor = this.editor;
|
|
103
|
+
if (editor) {
|
|
104
|
+
this.commandsService.toggleBlockquote(editor);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
setTextAlign(alignment) {
|
|
108
|
+
const editor = this.editor;
|
|
109
|
+
if (editor) {
|
|
110
|
+
this.commandsService.setTextAlign(editor, alignment);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
insertHorizontalRule() {
|
|
114
|
+
const editor = this.editor;
|
|
115
|
+
if (editor) {
|
|
116
|
+
this.commandsService.insertHorizontalRule(editor);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
insertImage(options) {
|
|
120
|
+
const editor = this.editor;
|
|
121
|
+
if (editor) {
|
|
122
|
+
this.commandsService.insertImage(editor, options);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
uploadImage(file, options) {
|
|
126
|
+
const editor = this.editor;
|
|
127
|
+
if (editor) {
|
|
128
|
+
this.commandsService.uploadImage(editor, file, options);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
toggleHighlight(color) {
|
|
132
|
+
const editor = this.editor;
|
|
133
|
+
if (editor) {
|
|
134
|
+
this.commandsService.toggleHighlight(editor, color);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
undo() {
|
|
138
|
+
const editor = this.editor;
|
|
139
|
+
if (editor) {
|
|
140
|
+
this.commandsService.undo(editor);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
redo() {
|
|
144
|
+
const editor = this.editor;
|
|
145
|
+
if (editor) {
|
|
146
|
+
this.commandsService.redo(editor);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// ============================================
|
|
150
|
+
// Table Commands
|
|
151
|
+
// ============================================
|
|
152
|
+
insertTable(rows, cols) {
|
|
153
|
+
const editor = this.editor;
|
|
154
|
+
if (editor) {
|
|
155
|
+
this.commandsService.insertTable(editor, rows, cols);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
addColumnBefore() {
|
|
159
|
+
const editor = this.editor;
|
|
160
|
+
if (editor) {
|
|
161
|
+
this.commandsService.addColumnBefore(editor);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
addColumnAfter() {
|
|
165
|
+
const editor = this.editor;
|
|
166
|
+
if (editor) {
|
|
167
|
+
this.commandsService.addColumnAfter(editor);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
deleteColumn() {
|
|
171
|
+
const editor = this.editor;
|
|
172
|
+
if (editor) {
|
|
173
|
+
this.commandsService.deleteColumn(editor);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
addRowBefore() {
|
|
177
|
+
const editor = this.editor;
|
|
178
|
+
if (editor) {
|
|
179
|
+
this.commandsService.addRowBefore(editor);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
addRowAfter() {
|
|
183
|
+
const editor = this.editor;
|
|
184
|
+
if (editor) {
|
|
185
|
+
this.commandsService.addRowAfter(editor);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
deleteRow() {
|
|
189
|
+
const editor = this.editor;
|
|
190
|
+
if (editor) {
|
|
191
|
+
this.commandsService.deleteRow(editor);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
deleteTable() {
|
|
195
|
+
const editor = this.editor;
|
|
196
|
+
if (editor) {
|
|
197
|
+
this.commandsService.deleteTable(editor);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
mergeCells() {
|
|
201
|
+
const editor = this.editor;
|
|
202
|
+
if (editor) {
|
|
203
|
+
this.commandsService.mergeCells(editor);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
splitCell() {
|
|
207
|
+
const editor = this.editor;
|
|
208
|
+
if (editor) {
|
|
209
|
+
this.commandsService.splitCell(editor);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
toggleHeaderColumn() {
|
|
213
|
+
const editor = this.editor;
|
|
214
|
+
if (editor) {
|
|
215
|
+
this.commandsService.toggleHeaderColumn(editor);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
toggleHeaderRow() {
|
|
219
|
+
const editor = this.editor;
|
|
220
|
+
if (editor) {
|
|
221
|
+
this.commandsService.toggleHeaderRow(editor);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// ============================================
|
|
225
|
+
// Color Picker & Link Commands
|
|
226
|
+
// ============================================
|
|
227
|
+
applyColor(color, selectionOnly, closeMenu) {
|
|
228
|
+
const editor = this.editor;
|
|
229
|
+
if (editor) {
|
|
230
|
+
this.commandsService.execute(editor, "applyColor", color, selectionOnly, closeMenu);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
applyHighlight(color, selectionOnly, closeMenu) {
|
|
234
|
+
const editor = this.editor;
|
|
235
|
+
if (editor) {
|
|
236
|
+
this.commandsService.execute(editor, "applyHighlight", color, selectionOnly, closeMenu);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
unsetColor(selectionOnly) {
|
|
240
|
+
const editor = this.editor;
|
|
241
|
+
if (editor) {
|
|
242
|
+
this.commandsService.execute(editor, "unsetColor", selectionOnly);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
unsetHighlight(selectionOnly) {
|
|
246
|
+
const editor = this.editor;
|
|
247
|
+
if (editor) {
|
|
248
|
+
this.commandsService.execute(editor, "unsetHighlight", selectionOnly);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
toggleLink(event) {
|
|
252
|
+
const editor = this.editor;
|
|
253
|
+
if (editor) {
|
|
254
|
+
this.commandsService.execute(editor, "toggleLink", event);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
unsetLink() {
|
|
258
|
+
const editor = this.editor;
|
|
259
|
+
if (editor) {
|
|
260
|
+
this.commandsService.execute(editor, "unsetLink");
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
toggleColorPicker(mode, event) {
|
|
264
|
+
const editor = this.editor;
|
|
265
|
+
if (editor) {
|
|
266
|
+
this.commandsService.execute(editor, "toggleColorPicker", mode, event);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
// ============================================
|
|
270
|
+
// General Controls & Content
|
|
271
|
+
// ============================================
|
|
272
|
+
clearContent() {
|
|
273
|
+
const editor = this.editor;
|
|
274
|
+
if (editor) {
|
|
275
|
+
this.commandsService.clearContent(editor);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
setContent(content, emitUpdate = true) {
|
|
279
|
+
const editor = this.editor;
|
|
280
|
+
if (editor) {
|
|
281
|
+
this.commandsService.setContent(editor, content, emitUpdate);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
getContent(format) {
|
|
285
|
+
const editor = this.editor;
|
|
286
|
+
return editor ? this.commandsService.getContent(editor, format) : "";
|
|
287
|
+
}
|
|
288
|
+
getHTML() {
|
|
289
|
+
const editor = this.editor;
|
|
290
|
+
return editor ? editor.getHTML() : "";
|
|
291
|
+
}
|
|
292
|
+
getJSON() {
|
|
293
|
+
const editor = this.editor;
|
|
294
|
+
return editor ? editor.getJSON() : undefined;
|
|
295
|
+
}
|
|
296
|
+
getText() {
|
|
297
|
+
const editor = this.editor;
|
|
298
|
+
return editor ? editor.getText() : "";
|
|
299
|
+
}
|
|
300
|
+
async exportAs(format, method, options) {
|
|
301
|
+
const editor = this.editor;
|
|
302
|
+
if (editor) {
|
|
303
|
+
await this.commandsService.exportAs(editor, format, method, options);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
focus() {
|
|
307
|
+
const editor = this.editor;
|
|
308
|
+
if (editor) {
|
|
309
|
+
this.commandsService.focus(editor);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
blur() {
|
|
313
|
+
const editor = this.editor;
|
|
314
|
+
if (editor) {
|
|
315
|
+
this.commandsService.blur(editor);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRlLWVkaXRvci1yZWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXRpcHRhcC1lZGl0b3Ivc3JjL2xpYi9tb2RlbHMvYXRlLWVkaXRvci1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0E7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUN2QixZQUNrQixFQUFVLEVBQ1QsaUJBQXNDLEVBQ3ZDLGVBQXlDO1FBRnpDLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBQ3ZDLG9CQUFlLEdBQWYsZUFBZSxDQUEwQjtJQUN4RCxDQUFDO0lBRUosMENBQTBDO0lBQzFDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELDZDQUE2QztJQUM3QyxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELGlEQUFpRDtJQUNqRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO0lBQzFDLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsT0FBTyxDQUFDLE9BQWUsRUFBRSxHQUFHLElBQWU7UUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLDZCQUE2QjtJQUM3QiwrQ0FBK0M7SUFFL0MsVUFBVTtRQUNSLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFB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QUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sRUFBRSxD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QUNYLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBFZGl0b3IsIEpTT05Db250ZW50IH0gZnJvbSBcIkB0aXB0YXAvY29yZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yQ29tbWFuZHNTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2F0ZS1lZGl0b3ItY29tbWFuZHMuc2VydmljZVwiO1xuaW1wb3J0IHsgQXRlRWRpdG9yU3RhdGVTbmFwc2hvdCB9IGZyb20gXCIuL2F0ZS1lZGl0b3Itc3RhdGUubW9kZWxcIjtcbmltcG9ydCB7IEF0ZUltYWdlVXBsb2FkT3B0aW9ucyB9IGZyb20gXCIuL2F0ZS1pbWFnZS5tb2RlbFwiO1xuaW1wb3J0IHsgQXRlRXhwb3J0Rm9ybWF0LCBBdGVFeHBvcnRPcHRpb25zIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2F0ZS1leHBvcnQuc2VydmljZVwiO1xuXG4vKipcbiAqIEEgd3JhcHBlciBjbGFzcyB0aGF0IGhvbGRzIGEgcmVmZXJlbmNlIHRvIGEgcmVnaXN0ZXJlZCBlZGl0b3IgY29tcG9uZW50LlxuICogSXQgcHJvdmlkZXMgZGlyZWN0LCB0eXBlLXNhZmUgZmFjYWRlIG1ldGhvZHMgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZWRpdG9yXG4gKiBhbmQgZXhlY3V0ZSBmb3JtYXR0aW5nL3V0aWxpdHkgY29tbWFuZHMgd2l0aG91dCBuZWVkaW5nIHRvIG1hbmFnZSB0aGUgcmF3XG4gKiBUaXBUYXAgZWRpdG9yIGluc3RhbmNlIGRpcmVjdGx5LlxuICovXG5leHBvcnQgY2xhc3MgQXRlRWRpdG9yUmVmIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRFZGl0b3JJbnN0YW5jZTogKCkgPT4gRWRpdG9yIHwgbnVsbCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29tbWFuZHNTZXJ2aWNlOiBBdGVFZGl0b3JDb21tYW5kc1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKiBHZXQgdGhlIHJhdyBUaXBUYXAgRWRpdG9yIGluc3RhbmNlLiAqL1xuICBnZXQgZWRpdG9yKCk6IEVkaXRvciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldEVkaXRvckluc3RhbmNlKCk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBjdXJyZW50IGVkaXRvciBzdGF0ZSBzbmFwc2hvdC4gKi9cbiAgZ2V0IHN0YXRlKCk6IEF0ZUVkaXRvclN0YXRlU25hcHNob3Qge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmRzU2VydmljZS5lZGl0b3JTdGF0ZSgpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgcmVhY3RpdmUgZWRpdG9yIHN0YXRlIGFzIGEgU2lnbmFsLiAqL1xuICBnZXQgc3RhdGVTaWduYWwoKTogU2lnbmFsPEF0ZUVkaXRvclN0YXRlU25hcHNob3Q+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kc1NlcnZpY2UuZWRpdG9yU3RhdGU7XG4gIH1cblxuICAvKiogRXhlY3V0ZSBhIGdlbmVyaWMgY29tbWFuZCBieSBuYW1lLiAqL1xuICBleGVjdXRlKGNvbW1hbmQ6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuZXhlY3V0ZShlZGl0b3IsIGNvbW1hbmQsIC4uLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZhY2FkZSBGb3JtYXR0aW5nIENvbW1hbmRzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgdG9nZ2xlQm9sZCgpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS50b2dnbGVCb2xkKGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlSXRhbGljKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLnRvZ2dsZUl0YWxpYyhlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVN0cmlrZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS50b2dnbGVTdHJpa2UoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLnRvZ2dsZUNvZGUoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb2RlQmxvY2soKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UudG9nZ2xlQ29kZUJsb2NrKGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlVW5kZXJsaW5lKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLnRvZ2dsZVVuZGVybGluZShlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVN1cGVyc2NyaXB0KCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLnRvZ2dsZVN1cGVyc2NyaXB0KGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlU3Vic2NyaXB0KCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLnRvZ2dsZVN1YnNjcmlwdChlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUhlYWRpbmcobGV2ZWw6IDEgfCAyIHwgMyk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLnRvZ2dsZUhlYWRpbmcoZWRpdG9yLCBsZXZlbCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQnVsbGV0TGlzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS50b2dnbGVCdWxsZXRMaXN0KGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlT3JkZXJlZExpc3QoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UudG9nZ2xlT3JkZXJlZExpc3QoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVCbG9ja3F1b3RlKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLnRvZ2dsZUJsb2NrcXVvdGUoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBzZXRUZXh0QWxpZ24oYWxpZ25tZW50OiBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCIgfCBcImp1c3RpZnlcIik6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLnNldFRleHRBbGlnbihlZGl0b3IsIGFsaWdubWVudCk7XG4gICAgfVxuICB9XG5cbiAgaW5zZXJ0SG9yaXpvbnRhbFJ1bGUoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuaW5zZXJ0SG9yaXpvbnRhbFJ1bGUoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBpbnNlcnRJbWFnZShvcHRpb25zOiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5pbnNlcnRJbWFnZShlZGl0b3IsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHVwbG9hZEltYWdlKGZpbGU6IEZpbGUsIG9wdGlvbnM/OiBBdGVJbWFnZVVwbG9hZE9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS51cGxvYWRJbWFnZShlZGl0b3IsIGZpbGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUhpZ2hsaWdodChjb2xvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UudG9nZ2xlSGlnaGxpZ2h0KGVkaXRvciwgY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIHVuZG8oKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UudW5kbyhlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJlZG8oKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UucmVkbyhlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFRhYmxlIENvbW1hbmRzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgaW5zZXJ0VGFibGUocm93cz86IG51bWJlciwgY29scz86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmluc2VydFRhYmxlKGVkaXRvciwgcm93cywgY29scyk7XG4gICAgfVxuICB9XG5cbiAgYWRkQ29sdW1uQmVmb3JlKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmFkZENvbHVtbkJlZm9yZShlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGFkZENvbHVtbkFmdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmFkZENvbHVtbkFmdGVyKGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlQ29sdW1uKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmRlbGV0ZUNvbHVtbihlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJvd0JlZm9yZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5hZGRSb3dCZWZvcmUoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBhZGRSb3dBZnRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5hZGRSb3dBZnRlcihlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZVJvdygpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5kZWxldGVSb3coZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGVUYWJsZSgpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5kZWxldGVUYWJsZShlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIG1lcmdlQ2VsbHMoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UubWVyZ2VDZWxscyhlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHNwbGl0Q2VsbCgpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5zcGxpdENlbGwoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVIZWFkZXJDb2x1bW4oKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UudG9nZ2xlSGVhZGVyQ29sdW1uKGVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlSGVhZGVyUm93KCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLnRvZ2dsZUhlYWRlclJvdyhlZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIENvbG9yIFBpY2tlciAmIExpbmsgQ29tbWFuZHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBhcHBseUNvbG9yKGNvbG9yOiBzdHJpbmcsIHNlbGVjdGlvbk9ubHk/OiBib29sZWFuLCBjbG9zZU1lbnU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuZXhlY3V0ZShlZGl0b3IsIFwiYXBwbHlDb2xvclwiLCBjb2xvciwgc2VsZWN0aW9uT25seSwgY2xvc2VNZW51KTtcbiAgICB9XG4gIH1cblxuICBhcHBseUhpZ2hsaWdodChjb2xvcjogc3RyaW5nLCBzZWxlY3Rpb25Pbmx5PzogYm9vbGVhbiwgY2xvc2VNZW51PzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmV4ZWN1dGUoZWRpdG9yLCBcImFwcGx5SGlnaGxpZ2h0XCIsIGNvbG9yLCBzZWxlY3Rpb25Pbmx5LCBjbG9zZU1lbnUpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2V0Q29sb3Ioc2VsZWN0aW9uT25seT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5leGVjdXRlKGVkaXRvciwgXCJ1bnNldENvbG9yXCIsIHNlbGVjdGlvbk9ubHkpO1xuICAgIH1cbiAgfVxuXG4gIHVuc2V0SGlnaGxpZ2h0KHNlbGVjdGlvbk9ubHk/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuZXhlY3V0ZShlZGl0b3IsIFwidW5zZXRIaWdobGlnaHRcIiwgc2VsZWN0aW9uT25seSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlTGluayhldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuZXhlY3V0ZShlZGl0b3IsIFwidG9nZ2xlTGlua1wiLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgdW5zZXRMaW5rKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmV4ZWN1dGUoZWRpdG9yLCBcInVuc2V0TGlua1wiKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVDb2xvclBpY2tlcihtb2RlOiBcInRleHRcIiB8IFwiaGlnaGxpZ2h0XCIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmV4ZWN1dGUoZWRpdG9yLCBcInRvZ2dsZUNvbG9yUGlja2VyXCIsIG1vZGUsIGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBHZW5lcmFsIENvbnRyb2xzICYgQ29udGVudFxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGNsZWFyQ29udGVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jbGVhckNvbnRlbnQoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZywgZW1pdFVwZGF0ZSA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICBpZiAoZWRpdG9yKSB7XG4gICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5zZXRDb250ZW50KGVkaXRvciwgY29udGVudCwgZW1pdFVwZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29udGVudChmb3JtYXQ6IEF0ZUV4cG9ydEZvcm1hdCk6IHN0cmluZyB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgcmV0dXJuIGVkaXRvciA/IHRoaXMuY29tbWFuZHNTZXJ2aWNlLmdldENvbnRlbnQoZWRpdG9yLCBmb3JtYXQpIDogXCJcIjtcbiAgfVxuXG4gIGdldEhUTUwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICByZXR1cm4gZWRpdG9yID8gZWRpdG9yLmdldEhUTUwoKSA6IFwiXCI7XG4gIH1cblxuICBnZXRKU09OKCk6IEpTT05Db250ZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICByZXR1cm4gZWRpdG9yID8gZWRpdG9yLmdldEpTT04oKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICByZXR1cm4gZWRpdG9yID8gZWRpdG9yLmdldFRleHQoKSA6IFwiXCI7XG4gIH1cblxuICBhc3luYyBleHBvcnRBcyhcbiAgICBmb3JtYXQ6IEF0ZUV4cG9ydEZvcm1hdCxcbiAgICBtZXRob2Q6IFwiY2xpcGJvYXJkXCIgfCBcImRvd25sb2FkXCIsXG4gICAgb3B0aW9ucz86IEF0ZUV4cG9ydE9wdGlvbnNcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgYXdhaXQgdGhpcy5jb21tYW5kc1NlcnZpY2UuZXhwb3J0QXMoZWRpdG9yLCBmb3JtYXQsIG1ldGhvZCwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgaWYgKGVkaXRvcikge1xuICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuZm9jdXMoZWRpdG9yKTtcbiAgICB9XG4gIH1cblxuICBibHVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgIGlmIChlZGl0b3IpIHtcbiAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmJsdXIoZWRpdG9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|