primeng 18.0.0-beta.5 → 18.0.0-rc.2
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/accordion/accordion.d.ts +2 -4
- package/api/primeicons.d.ts +3 -3
- package/api/scrolleroptions.d.ts +10 -0
- package/api/selectitemgroup.d.ts +2 -2
- package/api/shared.d.ts +2 -2
- package/autocomplete/autocomplete.d.ts +11 -12
- package/badge/badge.d.ts +16 -2
- package/blockui/blockui.d.ts +2 -2
- package/breadcrumb/breadcrumb.d.ts +3 -4
- package/button/button.d.ts +3 -4
- package/calendar/calendar.d.ts +12 -12
- package/card/card.d.ts +2 -2
- package/carousel/carousel.d.ts +3 -3
- package/cascadeselect/cascadeselect.d.ts +31 -15
- package/cascadeselect/style/cascadeselectstyle.d.ts +8 -1
- package/checkbox/checkbox.d.ts +2 -2
- package/chip/chip.d.ts +2 -2
- package/confirmdialog/confirmdialog.d.ts +3 -3
- package/confirmpopup/confirmpopup.d.ts +3 -4
- package/contextmenu/contextmenu.d.ts +2 -2
- package/dataview/dataview.d.ts +9 -10
- package/datepicker/datepicker.d.ts +8 -8
- package/defer/defer.d.ts +2 -0
- package/dialog/dialog.d.ts +4 -4
- package/drawer/drawer.d.ts +2 -2
- package/dropdown/dropdown.d.ts +0 -23
- package/editor/editor.d.ts +2 -2
- package/esm2022/accordion/accordion.mjs +9 -35
- package/esm2022/accordion/style/accordionstyle.mjs +9 -7
- package/esm2022/api/primeicons.mjs +4 -4
- package/esm2022/api/scrolleroptions.mjs +1 -1
- package/esm2022/api/selectitemgroup.mjs +1 -1
- package/esm2022/api/shared.mjs +6 -6
- package/esm2022/autocomplete/autocomplete.mjs +277 -311
- package/esm2022/autocomplete/style/autocompletestyle.mjs +12 -12
- package/esm2022/avatar/avatar.mjs +3 -3
- package/esm2022/avatar/style/avatarstyle.mjs +3 -3
- package/esm2022/badge/badge.mjs +33 -3
- package/esm2022/badge/style/badgestyle.mjs +3 -3
- package/esm2022/base/style/basestyle.mjs +6 -4
- package/esm2022/basecomponent/basecomponent.mjs +8 -2
- package/esm2022/blockui/blockui.mjs +6 -6
- package/esm2022/breadcrumb/breadcrumb.mjs +94 -101
- package/esm2022/breadcrumb/style/breadcrumbstyle.mjs +5 -1
- package/esm2022/button/button.mjs +19 -37
- package/esm2022/button/style/buttonstyle.mjs +17 -7
- package/esm2022/buttongroup/style/buttongroupstyle.mjs +9 -9
- package/esm2022/calendar/calendar.mjs +114 -114
- package/esm2022/calendar/style/calendarstyle.mjs +5 -5
- package/esm2022/card/card.mjs +10 -9
- package/esm2022/carousel/carousel.mjs +20 -19
- package/esm2022/carousel/style/carouselstyle.mjs +10 -1
- package/esm2022/cascadeselect/cascadeselect.mjs +182 -107
- package/esm2022/cascadeselect/style/cascadeselectstyle.mjs +37 -22
- package/esm2022/checkbox/checkbox.mjs +8 -8
- package/esm2022/chip/chip.mjs +10 -10
- package/esm2022/chip/style/chipstyle.mjs +2 -2
- package/esm2022/colorpicker/style/colorpickerstyle.mjs +29 -1
- package/esm2022/confirmdialog/confirmdialog.mjs +17 -14
- package/esm2022/confirmpopup/confirmpopup.mjs +45 -36
- package/esm2022/contextmenu/contextmenu.mjs +12 -12
- package/esm2022/contextmenu/style/contextmenustyle.mjs +11 -1
- package/esm2022/dataview/dataview.mjs +39 -113
- package/esm2022/datepicker/datepicker.mjs +91 -91
- package/esm2022/datepicker/style/datepickerstyle.mjs +23 -16
- package/esm2022/defer/defer.mjs +7 -1
- package/esm2022/dialog/dialog.mjs +29 -28
- package/esm2022/dialog/style/dialogstyle.mjs +22 -1
- package/esm2022/divider/style/dividerstyle.mjs +18 -14
- package/esm2022/dock/style/dockstyle.mjs +11 -1
- package/esm2022/drawer/drawer.mjs +8 -8
- package/esm2022/drawer/style/drawerstyle.mjs +5 -1
- package/esm2022/dropdown/dropdown.mjs +4 -18
- package/esm2022/dropdown/style/dropdownstyle.mjs +4 -4
- package/esm2022/editor/editor.mjs +1 -1
- package/esm2022/editor/style/editorstyle.mjs +52 -158
- package/esm2022/fieldset/fieldset.mjs +20 -21
- package/esm2022/fileupload/fileupload.mjs +108 -68
- package/esm2022/floatlabel/style/floatlabelstyle.mjs +5 -5
- package/esm2022/galleria/galleria.mjs +6 -1
- package/esm2022/galleria/style/galleriastyle.mjs +18 -1
- package/esm2022/iconfield/style/iconfieldstyle.mjs +2 -2
- package/esm2022/iftalabel/iftalabel.mjs +6 -6
- package/esm2022/iftalabel/style/iftalabelstyle.mjs +5 -5
- package/esm2022/image/image.mjs +36 -69
- package/esm2022/image/style/imagestyle.mjs +7 -7
- package/esm2022/imagecompare/imagecompare.mjs +158 -0
- package/esm2022/imagecompare/primeng-imagecompare.mjs +5 -0
- package/esm2022/imagecompare/public_api.mjs +3 -0
- package/esm2022/imagecompare/style/imagecomparestyle.mjs +124 -0
- package/esm2022/inplace/inplace.mjs +8 -8
- package/esm2022/inputmask/inputmask.mjs +10 -10
- package/esm2022/inputmask/style/inputmaskstyle.mjs +14 -7
- package/esm2022/inputnumber/inputnumber.mjs +41 -43
- package/esm2022/inputnumber/style/inputnumberstyle.mjs +27 -19
- package/esm2022/inputotp/inputotp.mjs +1 -13
- package/esm2022/inputtext/style/inputtextstyle.mjs +15 -9
- package/esm2022/keyfilter/keyfilter.mjs +4 -3
- package/esm2022/listbox/listbox.mjs +8 -53
- package/esm2022/megamenu/megamenu.mjs +18 -18
- package/esm2022/megamenu/style/megamenustyle.mjs +17 -1
- package/esm2022/menu/menu.mjs +46 -28
- package/esm2022/menubar/menubar.mjs +25 -25
- package/esm2022/menubar/style/menubarstyle.mjs +22 -2
- package/esm2022/message/message.mjs +12 -12
- package/esm2022/messages/messages.mjs +2 -1
- package/esm2022/metergroup/style/metergroupstyle.mjs +9 -9
- package/esm2022/multiselect/multiselect.mjs +214 -202
- package/esm2022/multiselect/style/multiselectstyle.mjs +13 -15
- package/esm2022/orderlist/orderlist.mjs +38 -80
- package/esm2022/organizationchart/style/organizationchartstyle.mjs +11 -22
- package/esm2022/overlaypanel/overlaypanel.mjs +24 -24
- package/esm2022/paginator/paginator.mjs +48 -48
- package/esm2022/paginator/style/paginatorstyle.mjs +10 -3
- package/esm2022/panel/panel.mjs +17 -37
- package/esm2022/panelmenu/panelmenu.mjs +32 -43
- package/esm2022/panelmenu/style/panelmenustyle.mjs +13 -5
- package/esm2022/password/password.mjs +26 -26
- package/esm2022/password/style/passwordstyle.mjs +14 -6
- package/esm2022/picklist/picklist.mjs +5 -5
- package/esm2022/popover/popover.mjs +21 -25
- package/esm2022/progressbar/style/progressbarstyle.mjs +29 -29
- package/esm2022/radiobutton/style/radiobuttonstyle.mjs +2 -2
- package/esm2022/rating/rating.mjs +12 -12
- package/esm2022/scroller/scroller.mjs +9 -9
- package/esm2022/scrollpanel/scrollpanel.mjs +4 -4
- package/esm2022/scrollpanel/style/scrollpanelstyle.mjs +3 -2
- package/esm2022/scrolltop/style/scrolltopstyle.mjs +7 -2
- package/esm2022/select/select.mjs +66 -113
- package/esm2022/select/style/selectstyle.mjs +14 -20
- package/esm2022/selectbutton/style/selectbuttonstyle.mjs +5 -5
- package/esm2022/skeleton/style/skeletonstyle.mjs +15 -2
- package/esm2022/slider/slider.mjs +18 -11
- package/esm2022/slider/style/sliderstyle.mjs +6 -6
- package/esm2022/speeddial/speeddial.mjs +1 -16
- package/esm2022/speeddial/style/speeddialstyle.mjs +2 -2
- package/esm2022/splitbutton/splitbutton.mjs +8 -8
- package/esm2022/splitbutton/style/splitbuttonstyle.mjs +9 -9
- package/esm2022/splitter/splitter.mjs +58 -18
- package/esm2022/stepper/style/stepperstyle.mjs +6 -1
- package/esm2022/styleclass/styleclass.mjs +2 -2
- package/esm2022/table/style/tablestyle.mjs +14 -7
- package/esm2022/table/table.mjs +411 -278
- package/esm2022/tabmenu/tabmenu.mjs +15 -33
- package/esm2022/tabs/tab.mjs +4 -3
- package/esm2022/tabs/tablist.mjs +9 -6
- package/esm2022/tabview/tabview.mjs +72 -64
- package/esm2022/terminal/style/terminalstyle.mjs +2 -2
- package/esm2022/textarea/style/textareastyle.mjs +9 -7
- package/esm2022/tieredmenu/style/tieredmenustyle.mjs +6 -1
- package/esm2022/tieredmenu/tieredmenu.mjs +12 -12
- package/esm2022/timeline/style/timelinestyle.mjs +2 -1
- package/esm2022/timeline/timeline.mjs +1 -16
- package/esm2022/toast/style/toaststyle.mjs +7 -1
- package/esm2022/togglebutton/style/togglebuttonstyle.mjs +2 -2
- package/esm2022/toggleswitch/toggleswitch.mjs +1 -10
- package/esm2022/tooltip/tooltip.mjs +33 -25
- package/esm2022/tree/style/treestyle.mjs +8 -6
- package/esm2022/tree/tree.mjs +44 -44
- package/esm2022/treeselect/style/treeselectstyle.mjs +15 -12
- package/esm2022/treeselect/treeselect.mjs +49 -49
- package/esm2022/treetable/style/treetablestyle.mjs +4 -4
- package/esm2022/treetable/treetable.mjs +20 -4
- package/esm2022/usestyle/usestyle.mjs +3 -2
- package/fesm2022/primeng-accordion.mjs +16 -40
- package/fesm2022/primeng-accordion.mjs.map +1 -1
- package/fesm2022/primeng-api.mjs +8 -8
- package/fesm2022/primeng-api.mjs.map +1 -1
- package/fesm2022/primeng-autocomplete.mjs +287 -321
- package/fesm2022/primeng-autocomplete.mjs.map +1 -1
- package/fesm2022/primeng-avatar.mjs +4 -4
- package/fesm2022/primeng-avatar.mjs.map +1 -1
- package/fesm2022/primeng-badge.mjs +34 -4
- package/fesm2022/primeng-badge.mjs.map +1 -1
- package/fesm2022/primeng-base.mjs +5 -3
- package/fesm2022/primeng-base.mjs.map +1 -1
- package/fesm2022/primeng-basecomponent.mjs +7 -1
- package/fesm2022/primeng-basecomponent.mjs.map +1 -1
- package/fesm2022/primeng-blockui.mjs +5 -5
- package/fesm2022/primeng-blockui.mjs.map +1 -1
- package/fesm2022/primeng-breadcrumb.mjs +97 -100
- package/fesm2022/primeng-breadcrumb.mjs.map +1 -1
- package/fesm2022/primeng-button.mjs +34 -42
- package/fesm2022/primeng-button.mjs.map +1 -1
- package/fesm2022/primeng-buttongroup.mjs +8 -8
- package/fesm2022/primeng-buttongroup.mjs.map +1 -1
- package/fesm2022/primeng-calendar.mjs +117 -117
- package/fesm2022/primeng-calendar.mjs.map +1 -1
- package/fesm2022/primeng-card.mjs +9 -8
- package/fesm2022/primeng-card.mjs.map +1 -1
- package/fesm2022/primeng-carousel.mjs +28 -18
- package/fesm2022/primeng-carousel.mjs.map +1 -1
- package/fesm2022/primeng-cascadeselect.mjs +218 -128
- package/fesm2022/primeng-cascadeselect.mjs.map +1 -1
- package/fesm2022/primeng-checkbox.mjs +7 -7
- package/fesm2022/primeng-checkbox.mjs.map +1 -1
- package/fesm2022/primeng-chip.mjs +10 -10
- package/fesm2022/primeng-chip.mjs.map +1 -1
- package/fesm2022/primeng-colorpicker.mjs +28 -0
- package/fesm2022/primeng-colorpicker.mjs.map +1 -1
- package/fesm2022/primeng-confirmdialog.mjs +16 -13
- package/fesm2022/primeng-confirmdialog.mjs.map +1 -1
- package/fesm2022/primeng-confirmpopup.mjs +44 -35
- package/fesm2022/primeng-confirmpopup.mjs.map +1 -1
- package/fesm2022/primeng-contextmenu.mjs +21 -11
- package/fesm2022/primeng-contextmenu.mjs.map +1 -1
- package/fesm2022/primeng-dataview.mjs +38 -112
- package/fesm2022/primeng-dataview.mjs.map +1 -1
- package/fesm2022/primeng-datepicker.mjs +112 -105
- package/fesm2022/primeng-datepicker.mjs.map +1 -1
- package/fesm2022/primeng-defer.mjs +6 -0
- package/fesm2022/primeng-defer.mjs.map +1 -1
- package/fesm2022/primeng-dialog.mjs +49 -27
- package/fesm2022/primeng-dialog.mjs.map +1 -1
- package/fesm2022/primeng-divider.mjs +17 -13
- package/fesm2022/primeng-divider.mjs.map +1 -1
- package/fesm2022/primeng-dock.mjs +10 -0
- package/fesm2022/primeng-dock.mjs.map +1 -1
- package/fesm2022/primeng-drawer.mjs +11 -7
- package/fesm2022/primeng-drawer.mjs.map +1 -1
- package/fesm2022/primeng-dropdown.mjs +6 -20
- package/fesm2022/primeng-dropdown.mjs.map +1 -1
- package/fesm2022/primeng-editor.mjs +51 -157
- package/fesm2022/primeng-editor.mjs.map +1 -1
- package/fesm2022/primeng-fieldset.mjs +19 -20
- package/fesm2022/primeng-fieldset.mjs.map +1 -1
- package/fesm2022/primeng-fileupload.mjs +107 -67
- package/fesm2022/primeng-fileupload.mjs.map +1 -1
- package/fesm2022/primeng-floatlabel.mjs +4 -4
- package/fesm2022/primeng-floatlabel.mjs.map +1 -1
- package/fesm2022/primeng-galleria.mjs +22 -0
- package/fesm2022/primeng-galleria.mjs.map +1 -1
- package/fesm2022/primeng-iconfield.mjs +1 -1
- package/fesm2022/primeng-iconfield.mjs.map +1 -1
- package/fesm2022/primeng-iftalabel.mjs +9 -9
- package/fesm2022/primeng-iftalabel.mjs.map +1 -1
- package/fesm2022/primeng-image.mjs +41 -74
- package/fesm2022/primeng-image.mjs.map +1 -1
- package/fesm2022/primeng-imagecompare.mjs +286 -0
- package/fesm2022/primeng-imagecompare.mjs.map +1 -0
- package/fesm2022/primeng-inplace.mjs +7 -7
- package/fesm2022/primeng-inplace.mjs.map +1 -1
- package/fesm2022/primeng-inputmask.mjs +22 -15
- package/fesm2022/primeng-inputmask.mjs.map +1 -1
- package/fesm2022/primeng-inputnumber.mjs +66 -60
- package/fesm2022/primeng-inputnumber.mjs.map +1 -1
- package/fesm2022/primeng-inputotp.mjs +0 -12
- package/fesm2022/primeng-inputotp.mjs.map +1 -1
- package/fesm2022/primeng-inputtext.mjs +14 -8
- package/fesm2022/primeng-inputtext.mjs.map +1 -1
- package/fesm2022/primeng-keyfilter.mjs +3 -2
- package/fesm2022/primeng-keyfilter.mjs.map +1 -1
- package/fesm2022/primeng-listbox.mjs +7 -52
- package/fesm2022/primeng-listbox.mjs.map +1 -1
- package/fesm2022/primeng-megamenu.mjs +33 -17
- package/fesm2022/primeng-megamenu.mjs.map +1 -1
- package/fesm2022/primeng-menu.mjs +45 -27
- package/fesm2022/primeng-menu.mjs.map +1 -1
- package/fesm2022/primeng-menubar.mjs +45 -25
- package/fesm2022/primeng-menubar.mjs.map +1 -1
- package/fesm2022/primeng-message.mjs +11 -11
- package/fesm2022/primeng-message.mjs.map +1 -1
- package/fesm2022/primeng-messages.mjs +1 -0
- package/fesm2022/primeng-messages.mjs.map +1 -1
- package/fesm2022/primeng-metergroup.mjs +8 -8
- package/fesm2022/primeng-metergroup.mjs.map +1 -1
- package/fesm2022/primeng-multiselect.mjs +225 -215
- package/fesm2022/primeng-multiselect.mjs.map +1 -1
- package/fesm2022/primeng-orderlist.mjs +37 -79
- package/fesm2022/primeng-orderlist.mjs.map +1 -1
- package/fesm2022/primeng-organizationchart.mjs +10 -21
- package/fesm2022/primeng-organizationchart.mjs.map +1 -1
- package/fesm2022/primeng-overlaypanel.mjs +23 -23
- package/fesm2022/primeng-overlaypanel.mjs.map +1 -1
- package/fesm2022/primeng-paginator.mjs +56 -49
- package/fesm2022/primeng-paginator.mjs.map +1 -1
- package/fesm2022/primeng-panel.mjs +16 -36
- package/fesm2022/primeng-panel.mjs.map +1 -1
- package/fesm2022/primeng-panelmenu.mjs +43 -46
- package/fesm2022/primeng-panelmenu.mjs.map +1 -1
- package/fesm2022/primeng-password.mjs +38 -30
- package/fesm2022/primeng-password.mjs.map +1 -1
- package/fesm2022/primeng-picklist.mjs +4 -4
- package/fesm2022/primeng-picklist.mjs.map +1 -1
- package/fesm2022/primeng-popover.mjs +20 -24
- package/fesm2022/primeng-popover.mjs.map +1 -1
- package/fesm2022/primeng-progressbar.mjs +28 -28
- package/fesm2022/primeng-progressbar.mjs.map +1 -1
- package/fesm2022/primeng-radiobutton.mjs +1 -1
- package/fesm2022/primeng-radiobutton.mjs.map +1 -1
- package/fesm2022/primeng-rating.mjs +11 -11
- package/fesm2022/primeng-rating.mjs.map +1 -1
- package/fesm2022/primeng-scroller.mjs +8 -8
- package/fesm2022/primeng-scroller.mjs.map +1 -1
- package/fesm2022/primeng-scrollpanel.mjs +5 -4
- package/fesm2022/primeng-scrollpanel.mjs.map +1 -1
- package/fesm2022/primeng-scrolltop.mjs +6 -1
- package/fesm2022/primeng-scrolltop.mjs.map +1 -1
- package/fesm2022/primeng-select.mjs +78 -131
- package/fesm2022/primeng-select.mjs.map +1 -1
- package/fesm2022/primeng-selectbutton.mjs +4 -4
- package/fesm2022/primeng-selectbutton.mjs.map +1 -1
- package/fesm2022/primeng-skeleton.mjs +14 -1
- package/fesm2022/primeng-skeleton.mjs.map +1 -1
- package/fesm2022/primeng-slider.mjs +22 -15
- package/fesm2022/primeng-slider.mjs.map +1 -1
- package/fesm2022/primeng-speeddial.mjs +1 -16
- package/fesm2022/primeng-speeddial.mjs.map +1 -1
- package/fesm2022/primeng-splitbutton.mjs +15 -15
- package/fesm2022/primeng-splitbutton.mjs.map +1 -1
- package/fesm2022/primeng-splitter.mjs +59 -19
- package/fesm2022/primeng-splitter.mjs.map +1 -1
- package/fesm2022/primeng-stepper.mjs +5 -0
- package/fesm2022/primeng-stepper.mjs.map +1 -1
- package/fesm2022/primeng-styleclass.mjs +1 -1
- package/fesm2022/primeng-styleclass.mjs.map +1 -1
- package/fesm2022/primeng-table.mjs +424 -284
- package/fesm2022/primeng-table.mjs.map +1 -1
- package/fesm2022/primeng-tabmenu.mjs +14 -32
- package/fesm2022/primeng-tabmenu.mjs.map +1 -1
- package/fesm2022/primeng-tabs.mjs +11 -7
- package/fesm2022/primeng-tabs.mjs.map +1 -1
- package/fesm2022/primeng-tabview.mjs +71 -63
- package/fesm2022/primeng-tabview.mjs.map +1 -1
- package/fesm2022/primeng-terminal.mjs +1 -1
- package/fesm2022/primeng-terminal.mjs.map +1 -1
- package/fesm2022/primeng-textarea.mjs +8 -6
- package/fesm2022/primeng-textarea.mjs.map +1 -1
- package/fesm2022/primeng-tieredmenu.mjs +16 -11
- package/fesm2022/primeng-tieredmenu.mjs.map +1 -1
- package/fesm2022/primeng-timeline.mjs +1 -15
- package/fesm2022/primeng-timeline.mjs.map +1 -1
- package/fesm2022/primeng-toast.mjs +6 -0
- package/fesm2022/primeng-toast.mjs.map +1 -1
- package/fesm2022/primeng-togglebutton.mjs +1 -1
- package/fesm2022/primeng-togglebutton.mjs.map +1 -1
- package/fesm2022/primeng-toggleswitch.mjs +0 -9
- package/fesm2022/primeng-toggleswitch.mjs.map +1 -1
- package/fesm2022/primeng-tooltip.mjs +32 -24
- package/fesm2022/primeng-tooltip.mjs.map +1 -1
- package/fesm2022/primeng-tree.mjs +50 -48
- package/fesm2022/primeng-tree.mjs.map +1 -1
- package/fesm2022/primeng-treeselect.mjs +62 -59
- package/fesm2022/primeng-treeselect.mjs.map +1 -1
- package/fesm2022/primeng-treetable.mjs +22 -6
- package/fesm2022/primeng-treetable.mjs.map +1 -1
- package/fesm2022/primeng-usestyle.mjs +2 -1
- package/fesm2022/primeng-usestyle.mjs.map +1 -1
- package/fieldset/fieldset.d.ts +3 -3
- package/fileupload/fileupload.d.ts +21 -5
- package/iftalabel/iftalabel.d.ts +2 -2
- package/image/image.d.ts +6 -7
- package/imagecompare/imagecompare.d.ts +52 -0
- package/imagecompare/index.d.ts +5 -0
- package/imagecompare/public_api.d.ts +2 -0
- package/imagecompare/style/imagecomparestyle.d.ts +35 -0
- package/inplace/inplace.d.ts +2 -2
- package/inputmask/inputmask.d.ts +2 -2
- package/inputnumber/inputnumber.d.ts +4 -5
- package/inputotp/inputotp.d.ts +1 -2
- package/listbox/listbox.d.ts +2 -3
- package/megamenu/megamenu.d.ts +4 -4
- package/menu/menu.d.ts +10 -4
- package/menubar/menubar.d.ts +5 -5
- package/message/message.d.ts +2 -2
- package/multiselect/multiselect.d.ts +16 -16
- package/orderlist/orderlist.d.ts +10 -11
- package/overlaypanel/overlaypanel.d.ts +3 -4
- package/package.json +219 -213
- package/paginator/paginator.d.ts +6 -6
- package/panel/panel.d.ts +3 -4
- package/panelmenu/panelmenu.d.ts +2 -3
- package/password/password.d.ts +4 -4
- package/popover/popover.d.ts +7 -5
- package/rating/rating.d.ts +4 -4
- package/scroller/scroller.d.ts +2 -2
- package/select/select.d.ts +12 -13
- package/speeddial/speeddial.d.ts +2 -3
- package/splitbutton/splitbutton.d.ts +2 -2
- package/splitter/splitter.d.ts +9 -2
- package/table/table.d.ts +47 -6
- package/tabmenu/tabmenu.d.ts +5 -6
- package/tabview/tabview.d.ts +4 -5
- package/tieredmenu/tieredmenu.d.ts +2 -2
- package/timeline/timeline.d.ts +0 -1
- package/toggleswitch/toggleswitch.d.ts +0 -1
- package/tooltip/tooltip.d.ts +2 -1
- package/tree/tree.d.ts +6 -6
- package/treeselect/treeselect.d.ts +9 -9
@@ -52,14 +52,14 @@ function CascadeSelectSub_ng_template_1_span_5_Template(rf, ctx) { if (rf & 1) {
|
|
52
52
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
53
53
|
i0.ɵɵattribute("data-pc-section", "groupIcon");
|
54
54
|
i0.ɵɵadvance();
|
55
|
-
i0.ɵɵproperty("ngIf", !ctx_r2.
|
55
|
+
i0.ɵɵproperty("ngIf", !ctx_r2.groupicon);
|
56
56
|
i0.ɵɵadvance();
|
57
|
-
i0.ɵɵproperty("ngTemplateOutlet", ctx_r2.
|
57
|
+
i0.ɵɵproperty("ngTemplateOutlet", ctx_r2.groupicon);
|
58
58
|
} }
|
59
59
|
function CascadeSelectSub_ng_template_1_p_cascadeselect_sub_6_Template(rf, ctx) { if (rf & 1) {
|
60
60
|
const _r4 = i0.ɵɵgetCurrentView();
|
61
61
|
i0.ɵɵelementStart(0, "p-cascadeselect-sub", 13);
|
62
|
-
i0.ɵɵlistener("onChange", function CascadeSelectSub_ng_template_1_p_cascadeselect_sub_6_Template_p_cascadeselect_sub_onChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.
|
62
|
+
i0.ɵɵlistener("onChange", function CascadeSelectSub_ng_template_1_p_cascadeselect_sub_6_Template_p_cascadeselect_sub_onChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onChange.emit($event)); })("onFocusChange", function CascadeSelectSub_ng_template_1_p_cascadeselect_sub_6_Template_p_cascadeselect_sub_onFocusChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onFocusChange.emit($event)); })("onFocusEnterChange", function CascadeSelectSub_ng_template_1_p_cascadeselect_sub_6_Template_p_cascadeselect_sub_onFocusEnterChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onFocusEnterChange.emit($event)); });
|
63
63
|
i0.ɵɵelementEnd();
|
64
64
|
} if (rf & 2) {
|
65
65
|
const processedOption_r2 = i0.ɵɵnextContext().$implicit;
|
@@ -69,7 +69,7 @@ function CascadeSelectSub_ng_template_1_p_cascadeselect_sub_6_Template(rf, ctx)
|
|
69
69
|
function CascadeSelectSub_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
70
70
|
const _r1 = i0.ɵɵgetCurrentView();
|
71
71
|
i0.ɵɵelementStart(0, "li", 3)(1, "div", 4);
|
72
|
-
i0.ɵɵlistener("click", function CascadeSelectSub_ng_template_1_Template_div_click_1_listener($event) { const processedOption_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onOptionClick($event, processedOption_r2)); });
|
72
|
+
i0.ɵɵlistener("click", function CascadeSelectSub_ng_template_1_Template_div_click_1_listener($event) { const processedOption_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onOptionClick($event, processedOption_r2)); })("mouseenter", function CascadeSelectSub_ng_template_1_Template_div_mouseenter_1_listener($event) { const processedOption_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onOptionMouseEnter($event, processedOption_r2)); })("mousemove", function CascadeSelectSub_ng_template_1_Template_div_mousemove_1_listener($event) { const processedOption_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onOptionMouseMove($event, processedOption_r2)); });
|
73
73
|
i0.ɵɵtemplate(2, CascadeSelectSub_ng_template_1_ng_container_2_Template, 2, 4, "ng-container", 5)(3, CascadeSelectSub_ng_template_1_ng_template_3_Template, 2, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(5, CascadeSelectSub_ng_template_1_span_5_Template, 3, 3, "span", 6);
|
74
74
|
i0.ɵɵelementEnd();
|
75
75
|
i0.ɵɵtemplate(6, CascadeSelectSub_ng_template_1_p_cascadeselect_sub_6_Template, 1, 12, "p-cascadeselect-sub", 7);
|
@@ -82,7 +82,7 @@ function CascadeSelectSub_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
82
82
|
i0.ɵɵproperty("ngClass", ctx_r2.getItemClass(processedOption_r2))("id", ctx_r2.getOptionId(processedOption_r2));
|
83
83
|
i0.ɵɵattribute("aria-level", ctx_r2.level + 1)("aria-setsize", ctx_r2.options.length)("data-pc-section", "item")("aria-label", ctx_r2.getOptionLabelToRender(processedOption_r2))("aria-selected", ctx_r2.isOptionGroup(processedOption_r2) ? undefined : ctx_r2.isOptionSelected(processedOption_r2))("aria-posinset", i_r5 + 1);
|
84
84
|
i0.ɵɵadvance();
|
85
|
-
i0.ɵɵattribute("
|
85
|
+
i0.ɵɵattribute("data-pc-section", "content");
|
86
86
|
i0.ɵɵadvance();
|
87
87
|
i0.ɵɵproperty("ngIf", ctx_r2.optionTemplate)("ngIfElse", defaultOptionTemplate_r6);
|
88
88
|
i0.ɵɵadvance(3);
|
@@ -144,7 +144,7 @@ function CascadeSelect_ng_container_9_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
144
144
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
145
145
|
i0.ɵɵattribute("data-pc-section", "clearicon")("aria-hidden", true);
|
146
146
|
i0.ɵɵadvance();
|
147
|
-
i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.
|
147
|
+
i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.clearicon);
|
148
148
|
} }
|
149
149
|
function CascadeSelect_ng_container_9_Template(rf, ctx) { if (rf & 1) {
|
150
150
|
i0.ɵɵelementContainerStart(0);
|
@@ -153,9 +153,9 @@ function CascadeSelect_ng_container_9_Template(rf, ctx) { if (rf & 1) {
|
|
153
153
|
} if (rf & 2) {
|
154
154
|
const ctx_r1 = i0.ɵɵnextContext();
|
155
155
|
i0.ɵɵadvance();
|
156
|
-
i0.ɵɵproperty("ngIf", !ctx_r1.
|
156
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.clearicon);
|
157
157
|
i0.ɵɵadvance();
|
158
|
-
i0.ɵɵproperty("ngIf", ctx_r1.
|
158
|
+
i0.ɵɵproperty("ngIf", ctx_r1.clearicon);
|
159
159
|
} }
|
160
160
|
function CascadeSelect_ng_container_11_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
161
161
|
i0.ɵɵelementContainer(0);
|
@@ -167,7 +167,7 @@ function CascadeSelect_ng_container_11_ng_container_1_Template(rf, ctx) { if (rf
|
|
167
167
|
} if (rf & 2) {
|
168
168
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
169
169
|
i0.ɵɵadvance();
|
170
|
-
i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.
|
170
|
+
i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.loadingicon);
|
171
171
|
} }
|
172
172
|
function CascadeSelect_ng_container_11_ng_container_2_span_1_Template(rf, ctx) { if (rf & 1) {
|
173
173
|
i0.ɵɵelement(0, "span", 22);
|
@@ -198,9 +198,9 @@ function CascadeSelect_ng_container_11_Template(rf, ctx) { if (rf & 1) {
|
|
198
198
|
} if (rf & 2) {
|
199
199
|
const ctx_r1 = i0.ɵɵnextContext();
|
200
200
|
i0.ɵɵadvance();
|
201
|
-
i0.ɵɵproperty("ngIf", ctx_r1.
|
201
|
+
i0.ɵɵproperty("ngIf", ctx_r1.loadingicon);
|
202
202
|
i0.ɵɵadvance();
|
203
|
-
i0.ɵɵproperty("ngIf", !ctx_r1.
|
203
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.loadingicon);
|
204
204
|
} }
|
205
205
|
function CascadeSelect_ng_template_12_ChevronDownIcon_0_Template(rf, ctx) { if (rf & 1) {
|
206
206
|
i0.ɵɵelement(0, "ChevronDownIcon", 26);
|
@@ -218,15 +218,15 @@ function CascadeSelect_ng_template_12_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
218
218
|
} if (rf & 2) {
|
219
219
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
220
220
|
i0.ɵɵadvance();
|
221
|
-
i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.
|
221
|
+
i0.ɵɵproperty("ngTemplateOutlet", ctx_r1.triggericon);
|
222
222
|
} }
|
223
223
|
function CascadeSelect_ng_template_12_Template(rf, ctx) { if (rf & 1) {
|
224
224
|
i0.ɵɵtemplate(0, CascadeSelect_ng_template_12_ChevronDownIcon_0_Template, 1, 1, "ChevronDownIcon", 24)(1, CascadeSelect_ng_template_12_span_1_Template, 2, 1, "span", 25);
|
225
225
|
} if (rf & 2) {
|
226
226
|
const ctx_r1 = i0.ɵɵnextContext();
|
227
|
-
i0.ɵɵproperty("ngIf", !ctx_r1.
|
227
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.triggericon);
|
228
228
|
i0.ɵɵadvance();
|
229
|
-
i0.ɵɵproperty("ngIf", ctx_r1.
|
229
|
+
i0.ɵɵproperty("ngIf", ctx_r1.triggericon);
|
230
230
|
} }
|
231
231
|
function CascadeSelect_ng_template_18_2_ng_template_0_Template(rf, ctx) { }
|
232
232
|
function CascadeSelect_ng_template_18_2_Template(rf, ctx) { if (rf & 1) {
|
@@ -241,7 +241,7 @@ function CascadeSelect_ng_template_18_Template(rf, ctx) { if (rf & 1) {
|
|
241
241
|
i0.ɵɵelementStart(0, "div", 28, 6);
|
242
242
|
i0.ɵɵtemplate(2, CascadeSelect_ng_template_18_2_Template, 1, 0, null, 19);
|
243
243
|
i0.ɵɵelementStart(3, "div", 29)(4, "p-cascadeselect-sub", 30);
|
244
|
-
i0.ɵɵlistener("onChange", function CascadeSelect_ng_template_18_Template_p_cascadeselect_sub_onChange_4_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.
|
244
|
+
i0.ɵɵlistener("onChange", function CascadeSelect_ng_template_18_Template_p_cascadeselect_sub_onChange_4_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOptionClick($event)); })("onFocusChange", function CascadeSelect_ng_template_18_Template_p_cascadeselect_sub_onFocusChange_4_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOptionMouseMove($event)); })("onFocusEnterChange", function CascadeSelect_ng_template_18_Template_p_cascadeselect_sub_onFocusEnterChange_4_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOptionMouseEnter($event)); });
|
245
245
|
i0.ɵɵelementEnd()();
|
246
246
|
i0.ɵɵelementStart(5, "span", 14);
|
247
247
|
i0.ɵɵtext(6);
|
@@ -258,7 +258,7 @@ function CascadeSelect_ng_template_18_Template(rf, ctx) { if (rf & 1) {
|
|
258
258
|
i0.ɵɵadvance();
|
259
259
|
i0.ɵɵattribute("data-pc-section", "wrapper");
|
260
260
|
i0.ɵɵadvance();
|
261
|
-
i0.ɵɵproperty("options", ctx_r1.processedOptions)("selectId", ctx_r1.id)("focusedOptionId", ctx_r1.focused ? ctx_r1.focusedOptionId : undefined)("activeOptionPath", ctx_r1.activeOptionPath())("optionLabel", ctx_r1.optionLabel)("optionValue", ctx_r1.optionValue)("level", 0)("optionTemplate", ctx_r1.optionTemplate)("
|
261
|
+
i0.ɵɵproperty("options", ctx_r1.processedOptions)("selectId", ctx_r1.id)("focusedOptionId", ctx_r1.focused ? ctx_r1.focusedOptionId : undefined)("activeOptionPath", ctx_r1.activeOptionPath())("optionLabel", ctx_r1.optionLabel)("optionValue", ctx_r1.optionValue)("level", 0)("optionTemplate", ctx_r1.optionTemplate)("groupicon", ctx_r1.groupicon)("optionGroupLabel", ctx_r1.optionGroupLabel)("optionGroupChildren", ctx_r1.optionGroupChildren)("optionDisabled", ctx_r1.optionDisabled)("root", true)("dirty", ctx_r1.dirty)("role", "tree");
|
262
262
|
i0.ɵɵadvance(2);
|
263
263
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.selectedMessageText, " ");
|
264
264
|
i0.ɵɵadvance();
|
@@ -270,6 +270,7 @@ export const CASCADESELECT_VALUE_ACCESSOR = {
|
|
270
270
|
multi: true
|
271
271
|
};
|
272
272
|
export class CascadeSelectSub extends BaseComponent {
|
273
|
+
cascadeselect;
|
273
274
|
role;
|
274
275
|
selectId;
|
275
276
|
activeOptionPath;
|
@@ -278,7 +279,7 @@ export class CascadeSelectSub extends BaseComponent {
|
|
278
279
|
options;
|
279
280
|
optionGroupChildren;
|
280
281
|
optionTemplate;
|
281
|
-
|
282
|
+
groupicon;
|
282
283
|
level = 0;
|
283
284
|
optionLabel;
|
284
285
|
optionValue;
|
@@ -286,24 +287,33 @@ export class CascadeSelectSub extends BaseComponent {
|
|
286
287
|
dirty;
|
287
288
|
root;
|
288
289
|
onChange = new EventEmitter();
|
290
|
+
onFocusChange = new EventEmitter();
|
291
|
+
onFocusEnterChange = new EventEmitter();
|
289
292
|
get listLabel() {
|
290
293
|
return this.config.getTranslation(TranslationKeys.ARIA)['listLabel'];
|
291
294
|
}
|
295
|
+
constructor(cascadeselect) {
|
296
|
+
super();
|
297
|
+
this.cascadeselect = cascadeselect;
|
298
|
+
}
|
292
299
|
ngOnInit() {
|
293
300
|
super.ngOnInit();
|
294
301
|
if (!this.root) {
|
295
302
|
this.position();
|
296
303
|
}
|
297
304
|
}
|
298
|
-
onOptionClick(event,
|
305
|
+
onOptionClick(event, processedOption) {
|
299
306
|
this.onChange.emit({
|
300
307
|
originalEvent: event,
|
301
|
-
|
308
|
+
processedOption,
|
302
309
|
isFocus: true
|
303
310
|
});
|
304
311
|
}
|
305
|
-
|
306
|
-
this.
|
312
|
+
onOptionMouseEnter(event, processedOption) {
|
313
|
+
this.onFocusEnterChange.emit({ originalEvent: event, processedOption });
|
314
|
+
}
|
315
|
+
onOptionMouseMove(event, processedOption) {
|
316
|
+
this.onFocusChange.emit({ originalEvent: event, processedOption });
|
307
317
|
}
|
308
318
|
getOptionId(processedOption) {
|
309
319
|
return `${this.selectId}_${processedOption.key}`;
|
@@ -330,7 +340,7 @@ export class CascadeSelectSub extends BaseComponent {
|
|
330
340
|
return isNotEmpty(processedOption.children);
|
331
341
|
}
|
332
342
|
isOptionSelected(processedOption) {
|
333
|
-
return
|
343
|
+
return equals(this.cascadeselect?.modelValue(), processedOption?.option);
|
334
344
|
}
|
335
345
|
isOptionActive(processedOption) {
|
336
346
|
return this.activeOptionPath.some((path) => path.key === processedOption.key);
|
@@ -358,10 +368,10 @@ export class CascadeSelectSub extends BaseComponent {
|
|
358
368
|
this.el.nativeElement.children[0].style.left = '-200%';
|
359
369
|
}
|
360
370
|
}
|
361
|
-
static ɵfac =
|
362
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CascadeSelectSub, selectors: [["p-cascadeSelectSub"], ["p-cascadeselect-sub"]], inputs: { role: "role", selectId: "selectId", activeOptionPath: "activeOptionPath", optionDisabled: "optionDisabled", focusedOptionId: "focusedOptionId", options: "options", optionGroupChildren: "optionGroupChildren", optionTemplate: "optionTemplate",
|
371
|
+
static ɵfac = function CascadeSelectSub_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CascadeSelectSub)(i0.ɵɵdirectiveInject(CascadeSelect)); };
|
372
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CascadeSelectSub, selectors: [["p-cascadeSelectSub"], ["p-cascadeselect-sub"]], inputs: { role: "role", selectId: "selectId", activeOptionPath: "activeOptionPath", optionDisabled: "optionDisabled", focusedOptionId: "focusedOptionId", options: "options", optionGroupChildren: "optionGroupChildren", optionTemplate: "optionTemplate", groupicon: "groupicon", level: [2, "level", "level", numberAttribute], optionLabel: "optionLabel", optionValue: "optionValue", optionGroupLabel: "optionGroupLabel", dirty: [2, "dirty", "dirty", booleanAttribute], root: [2, "root", "root", booleanAttribute] }, outputs: { onChange: "onChange", onFocusChange: "onFocusChange", onFocusEnterChange: "onFocusEnterChange" }, standalone: true, features: [i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], decls: 2, vars: 4, consts: [["defaultOptionTemplate", ""], ["aria-orientation", "horizontal", 1, "p-cascadeselect-list"], ["ngFor", "", 3, "ngForOf"], ["role", "treeitem", 3, "ngClass", "id"], ["pRipple", "", 1, "p-cascadeselect-option-content", 3, "click", "mouseenter", "mousemove"], [4, "ngIf", "ngIfElse"], ["class", "p-cascadeselect-group-icon", 4, "ngIf"], ["class", "p-cascadeselect-list p-cascadeselect-overlay p-cascadeselect-option-list", 3, "role", "selectId", "focusedOptionId", "activeOptionPath", "options", "optionLabel", "optionValue", "level", "optionGroupLabel", "optionGroupChildren", "dirty", "optionTemplate", "onChange", "onFocusChange", "onFocusEnterChange", 4, "ngIf"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], [1, "p-cascadeselect-option-text"], [1, "p-cascadeselect-group-icon"], [4, "ngIf"], [4, "ngTemplateOutlet"], [1, "p-cascadeselect-list", "p-cascadeselect-overlay", "p-cascadeselect-option-list", 3, "onChange", "onFocusChange", "onFocusEnterChange", "role", "selectId", "focusedOptionId", "activeOptionPath", "options", "optionLabel", "optionValue", "level", "optionGroupLabel", "optionGroupChildren", "dirty", "optionTemplate"]], template: function CascadeSelectSub_Template(rf, ctx) { if (rf & 1) {
|
363
373
|
i0.ɵɵelementStart(0, "ul", 1);
|
364
|
-
i0.ɵɵtemplate(1, CascadeSelectSub_ng_template_1_Template, 7,
|
374
|
+
i0.ɵɵtemplate(1, CascadeSelectSub_ng_template_1_Template, 7, 13, "ng-template", 2);
|
365
375
|
i0.ɵɵelementEnd();
|
366
376
|
} if (rf & 2) {
|
367
377
|
i0.ɵɵattribute("role", ctx.role)("data-pc-section", ctx.level === 0 ? "list" : "sublist")("aria-label", ctx.listLabel);
|
@@ -389,7 +399,14 @@ export class CascadeSelectSub extends BaseComponent {
|
|
389
399
|
[attr.aria-selected]="isOptionGroup(processedOption) ? undefined : isOptionSelected(processedOption)"
|
390
400
|
[attr.aria-posinset]="i + 1"
|
391
401
|
>
|
392
|
-
<div
|
402
|
+
<div
|
403
|
+
class="p-cascadeselect-option-content"
|
404
|
+
(click)="onOptionClick($event, processedOption)"
|
405
|
+
(mouseenter)="onOptionMouseEnter($event, processedOption)"
|
406
|
+
(mousemove)="onOptionMouseMove($event, processedOption)"
|
407
|
+
pRipple
|
408
|
+
[attr.data-pc-section]="'content'"
|
409
|
+
>
|
393
410
|
<ng-container *ngIf="optionTemplate; else defaultOptionTemplate">
|
394
411
|
<ng-container *ngTemplateOutlet="optionTemplate; context: { $implicit: processedOption?.option }"></ng-container>
|
395
412
|
</ng-container>
|
@@ -397,14 +414,14 @@ export class CascadeSelectSub extends BaseComponent {
|
|
397
414
|
<span class="p-cascadeselect-option-text" [attr.data-pc-section]="'text'">{{ getOptionLabelToRender(processedOption) }}</span>
|
398
415
|
</ng-template>
|
399
416
|
<span class="p-cascadeselect-group-icon" *ngIf="isOptionGroup(processedOption)" [attr.data-pc-section]="'groupIcon'">
|
400
|
-
<AngleRightIcon *ngIf="!
|
401
|
-
<ng-template *ngTemplateOutlet="
|
417
|
+
<AngleRightIcon *ngIf="!groupicon" />
|
418
|
+
<ng-template *ngTemplateOutlet="groupicon"></ng-template>
|
402
419
|
</span>
|
403
420
|
</div>
|
404
421
|
<p-cascadeselect-sub
|
405
422
|
*ngIf="isOptionGroup(processedOption) && isOptionActive(processedOption)"
|
406
423
|
[role]="'group'"
|
407
|
-
class="p-cascadeselect-overlay p-cascadeselect-option-list"
|
424
|
+
class="p-cascadeselect-list p-cascadeselect-overlay p-cascadeselect-option-list"
|
408
425
|
[selectId]="selectId"
|
409
426
|
[focusedOptionId]="focusedOptionId"
|
410
427
|
[activeOptionPath]="activeOptionPath"
|
@@ -412,7 +429,9 @@ export class CascadeSelectSub extends BaseComponent {
|
|
412
429
|
[optionLabel]="optionLabel"
|
413
430
|
[optionValue]="optionValue"
|
414
431
|
[level]="level + 1"
|
415
|
-
(onChange)="
|
432
|
+
(onChange)="onChange.emit($event)"
|
433
|
+
(onFocusChange)="onFocusChange.emit($event)"
|
434
|
+
(onFocusEnterChange)="onFocusEnterChange.emit($event)"
|
416
435
|
[optionGroupLabel]="optionGroupLabel"
|
417
436
|
[optionGroupChildren]="optionGroupChildren"
|
418
437
|
[dirty]="dirty"
|
@@ -426,7 +445,7 @@ export class CascadeSelectSub extends BaseComponent {
|
|
426
445
|
encapsulation: ViewEncapsulation.None,
|
427
446
|
changeDetection: ChangeDetectionStrategy.OnPush
|
428
447
|
}]
|
429
|
-
}],
|
448
|
+
}], () => [{ type: CascadeSelect }], { role: [{
|
430
449
|
type: Input
|
431
450
|
}], selectId: [{
|
432
451
|
type: Input
|
@@ -442,7 +461,7 @@ export class CascadeSelectSub extends BaseComponent {
|
|
442
461
|
type: Input
|
443
462
|
}], optionTemplate: [{
|
444
463
|
type: Input
|
445
|
-
}],
|
464
|
+
}], groupicon: [{
|
446
465
|
type: Input
|
447
466
|
}], level: [{
|
448
467
|
type: Input,
|
@@ -461,6 +480,10 @@ export class CascadeSelectSub extends BaseComponent {
|
|
461
480
|
args: [{ transform: booleanAttribute }]
|
462
481
|
}], onChange: [{
|
463
482
|
type: Output
|
483
|
+
}], onFocusChange: [{
|
484
|
+
type: Output
|
485
|
+
}], onFocusEnterChange: [{
|
486
|
+
type: Output
|
464
487
|
}] }); })();
|
465
488
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CascadeSelectSub, { className: "CascadeSelectSub" }); })();
|
466
489
|
/**
|
@@ -474,11 +497,6 @@ export class CascadeSelect extends BaseComponent {
|
|
474
497
|
* @group Props
|
475
498
|
*/
|
476
499
|
id;
|
477
|
-
/**
|
478
|
-
* Determines if the option will be selected on focus.
|
479
|
-
* @group Props
|
480
|
-
*/
|
481
|
-
selectOnFocus = false;
|
482
500
|
/**
|
483
501
|
* Text to display when the search is active. Defaults to global value in i18n translation configuration.
|
484
502
|
* @group Props
|
@@ -518,11 +536,21 @@ export class CascadeSelect extends BaseComponent {
|
|
518
536
|
* @group Props
|
519
537
|
*/
|
520
538
|
optionDisabled;
|
539
|
+
/**
|
540
|
+
* Fields used when filtering the options, defaults to optionLabel.
|
541
|
+
* @group Props
|
542
|
+
*/
|
543
|
+
focusOnHover = true;
|
544
|
+
/**
|
545
|
+
* Determines if the option will be selected on focus.
|
546
|
+
* @group Props
|
547
|
+
*/
|
548
|
+
selectOnFocus = false;
|
521
549
|
/**
|
522
550
|
* Whether to focus on the first visible or selected element when the overlay panel is shown.
|
523
551
|
* @group Props
|
524
552
|
*/
|
525
|
-
autoOptionFocus =
|
553
|
+
autoOptionFocus = false;
|
526
554
|
/**
|
527
555
|
* Style class of the component.
|
528
556
|
* @group Props
|
@@ -768,28 +796,29 @@ export class CascadeSelect extends BaseComponent {
|
|
768
796
|
* Content template for customizing the trigger icon.
|
769
797
|
* @group Templates
|
770
798
|
*/
|
771
|
-
|
799
|
+
triggericon;
|
772
800
|
/**
|
773
801
|
* Content template for customizing the loading icon.
|
774
802
|
* @group Templates
|
775
803
|
*/
|
776
|
-
|
804
|
+
loadingicon;
|
777
805
|
/**
|
778
806
|
* Content template for customizing the group icon.
|
779
807
|
* @group Templates
|
780
808
|
*/
|
781
|
-
|
809
|
+
groupicon;
|
782
810
|
/**
|
783
811
|
* Content template for customizing the clear icon.
|
784
812
|
* @group Templates
|
785
813
|
*/
|
786
|
-
|
814
|
+
clearicon;
|
787
815
|
_showTransitionOptions = '';
|
788
816
|
_hideTransitionOptions = '';
|
789
817
|
selectionPath = null;
|
790
818
|
focused = false;
|
791
819
|
overlayVisible = false;
|
792
|
-
|
820
|
+
clicked = false;
|
821
|
+
dirty = false;
|
793
822
|
searchValue;
|
794
823
|
searchTimeout;
|
795
824
|
onModelChange = () => { };
|
@@ -803,6 +832,7 @@ export class CascadeSelect extends BaseComponent {
|
|
803
832
|
return {
|
804
833
|
'p-cascadeselect p-component p-inputwrapper': true,
|
805
834
|
'p-cascadeselect-clearable': this.showClear && !this.disabled,
|
835
|
+
'p-cascadeselect-mobile': this.queryMatches(),
|
806
836
|
'p-disabled': this.disabled,
|
807
837
|
'p-focus': this.focused,
|
808
838
|
'p-inputwrapper-filled': this.modelValue(),
|
@@ -974,11 +1004,16 @@ export class CascadeSelect extends BaseComponent {
|
|
974
1004
|
}
|
975
1005
|
break;
|
976
1006
|
}
|
1007
|
+
this.clicked = false;
|
977
1008
|
}
|
978
1009
|
onArrowDownKey(event) {
|
979
|
-
|
980
|
-
|
981
|
-
|
1010
|
+
if (!this.overlayVisible) {
|
1011
|
+
this.show();
|
1012
|
+
}
|
1013
|
+
else {
|
1014
|
+
const optionIndex = this.focusedOptionInfo().index !== -1 ? this.findNextOptionIndex(this.focusedOptionInfo().index) : this.clicked ? this.findFirstOptionIndex() : this.findFirstFocusedOptionIndex();
|
1015
|
+
this.changeFocusedOptionIndex(event, optionIndex, true);
|
1016
|
+
}
|
982
1017
|
event.preventDefault();
|
983
1018
|
}
|
984
1019
|
onArrowUpKey(event) {
|
@@ -986,14 +1021,14 @@ export class CascadeSelect extends BaseComponent {
|
|
986
1021
|
if (this.focusedOptionInfo().index !== -1) {
|
987
1022
|
const processedOption = this.visibleOptions[this.focusedOptionInfo().index];
|
988
1023
|
const grouped = this.isProccessedOptionGroup(processedOption);
|
989
|
-
!grouped && this.onOptionChange({ originalEvent: event,
|
1024
|
+
!grouped && this.onOptionChange({ originalEvent: event, processedOption });
|
990
1025
|
}
|
991
1026
|
this.overlayVisible && this.hide();
|
992
1027
|
event.preventDefault();
|
993
1028
|
}
|
994
1029
|
else {
|
995
|
-
const optionIndex = this.focusedOptionInfo().index !== -1 ? this.findPrevOptionIndex(this.focusedOptionInfo().index) : this.findLastFocusedOptionIndex();
|
996
|
-
this.changeFocusedOptionIndex(event, optionIndex);
|
1030
|
+
const optionIndex = this.focusedOptionInfo().index !== -1 ? this.findPrevOptionIndex(this.focusedOptionInfo().index) : this.clicked ? this.findLastOptionIndex() : this.findLastFocusedOptionIndex();
|
1031
|
+
this.changeFocusedOptionIndex(event, optionIndex, true);
|
997
1032
|
!this.overlayVisible && this.show();
|
998
1033
|
event.preventDefault();
|
999
1034
|
}
|
@@ -1028,7 +1063,7 @@ export class CascadeSelect extends BaseComponent {
|
|
1028
1063
|
this.onArrowDownKey(event);
|
1029
1064
|
}
|
1030
1065
|
else {
|
1031
|
-
this.onOptionChange({ originalEvent: event,
|
1066
|
+
this.onOptionChange({ originalEvent: event, processedOption });
|
1032
1067
|
}
|
1033
1068
|
}
|
1034
1069
|
event.preventDefault();
|
@@ -1046,13 +1081,14 @@ export class CascadeSelect extends BaseComponent {
|
|
1046
1081
|
}
|
1047
1082
|
onEnterKey(event) {
|
1048
1083
|
if (!this.overlayVisible) {
|
1084
|
+
this.focusedOptionInfo.set({ ...this.focusedOptionInfo(), index: -1 }); // reset
|
1049
1085
|
this.onArrowDownKey(event);
|
1050
1086
|
}
|
1051
1087
|
else {
|
1052
1088
|
if (this.focusedOptionInfo().index !== -1) {
|
1053
1089
|
const processedOption = this.visibleOptions()[this.focusedOptionInfo().index];
|
1054
1090
|
const grouped = this.isProccessedOptionGroup(processedOption);
|
1055
|
-
this.
|
1091
|
+
this.onOptionClick({ originalEvent: event, processedOption });
|
1056
1092
|
!grouped && this.hide();
|
1057
1093
|
}
|
1058
1094
|
}
|
@@ -1062,14 +1098,14 @@ export class CascadeSelect extends BaseComponent {
|
|
1062
1098
|
this.onEnterKey(event);
|
1063
1099
|
}
|
1064
1100
|
onEscapeKey(event) {
|
1065
|
-
this.overlayVisible && this.hide(true);
|
1101
|
+
this.overlayVisible && this.hide(event, true);
|
1066
1102
|
event.preventDefault();
|
1067
1103
|
}
|
1068
1104
|
onTabKey(event) {
|
1069
1105
|
if (this.focusedOptionInfo().index !== -1) {
|
1070
1106
|
const processedOption = this.visibleOptions()[this.focusedOptionInfo().index];
|
1071
1107
|
const grouped = this.isProccessedOptionGroup(processedOption);
|
1072
|
-
!grouped && this.onOptionChange({ originalEvent: event,
|
1108
|
+
!grouped && this.onOptionChange({ originalEvent: event, processedOption });
|
1073
1109
|
}
|
1074
1110
|
this.overlayVisible && this.hide();
|
1075
1111
|
}
|
@@ -1109,25 +1145,28 @@ export class CascadeSelect extends BaseComponent {
|
|
1109
1145
|
element.scrollIntoView && element.scrollIntoView({ block: 'nearest', inline: 'start' });
|
1110
1146
|
}
|
1111
1147
|
}
|
1112
|
-
changeFocusedOptionIndex(event, index) {
|
1113
|
-
|
1114
|
-
|
1148
|
+
changeFocusedOptionIndex(event, index, preventSelection) {
|
1149
|
+
const focusedOptionInfo = this.focusedOptionInfo();
|
1150
|
+
if (focusedOptionInfo.index !== index) {
|
1115
1151
|
this.focusedOptionInfo.set({ ...focusedOptionInfo, index });
|
1116
1152
|
this.scrollInView();
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1153
|
+
if (this.focusOnHover) {
|
1154
|
+
this.onOptionClick({ originalEvent: event, processedOption: this.visibleOptions()[index], isHide: false, preventSelection });
|
1155
|
+
}
|
1156
|
+
if (this.selectOnFocus) {
|
1157
|
+
this.onOptionChange({ originalEvent: event, processedOption: this.visibleOptions()[index], isHide: false });
|
1158
|
+
}
|
1120
1159
|
}
|
1121
1160
|
}
|
1122
1161
|
matchMediaListener;
|
1123
1162
|
onOptionSelect(event) {
|
1124
|
-
const { originalEvent, value,
|
1125
|
-
const newValue = this.getOptionValue(value
|
1163
|
+
const { originalEvent, value, isHide } = event;
|
1164
|
+
const newValue = this.getOptionValue(value);
|
1126
1165
|
const activeOptionPath = this.activeOptionPath();
|
1127
1166
|
activeOptionPath.forEach((p) => (p.selected = true));
|
1128
1167
|
this.activeOptionPath.set(activeOptionPath);
|
1129
1168
|
this.updateModel(newValue, originalEvent);
|
1130
|
-
|
1169
|
+
isHide && this.hide(event, true);
|
1131
1170
|
}
|
1132
1171
|
onOptionGroupSelect(event) {
|
1133
1172
|
this.dirty = true;
|
@@ -1146,6 +1185,7 @@ export class CascadeSelect extends BaseComponent {
|
|
1146
1185
|
}
|
1147
1186
|
this.focusInputViewChild?.nativeElement.focus();
|
1148
1187
|
}
|
1188
|
+
this.clicked = true;
|
1149
1189
|
}
|
1150
1190
|
isOptionMatched(processedOption) {
|
1151
1191
|
return this.isValidOption(processedOption) && this.getProccessedOptionLabel(processedOption).toLocaleLowerCase(this.searchLocale).startsWith(this.searchValue.toLocaleLowerCase(this.searchLocale));
|
@@ -1249,10 +1289,12 @@ export class CascadeSelect extends BaseComponent {
|
|
1249
1289
|
hide(event, isFocus = false) {
|
1250
1290
|
const _hide = () => {
|
1251
1291
|
this.overlayVisible = false;
|
1292
|
+
this.clicked = false;
|
1252
1293
|
this.activeOptionPath.set([]);
|
1253
1294
|
this.focusedOptionInfo.set({ index: -1, level: 0, parentKey: '' });
|
1254
1295
|
isFocus && focus(this.focusInputViewChild.nativeElement);
|
1255
1296
|
this.onHide.emit(event);
|
1297
|
+
this.cd.markForCheck();
|
1256
1298
|
};
|
1257
1299
|
setTimeout(() => {
|
1258
1300
|
_hide();
|
@@ -1267,13 +1309,13 @@ export class CascadeSelect extends BaseComponent {
|
|
1267
1309
|
if (this.hasSelectedOption() && isNotEmpty(this.activeOptionPath())) {
|
1268
1310
|
const processedOption = this.activeOptionPath()[this.activeOptionPath().length - 1];
|
1269
1311
|
focusedOptionInfo = {
|
1270
|
-
index:
|
1312
|
+
index: processedOption.index,
|
1271
1313
|
level: processedOption.level,
|
1272
1314
|
parentKey: processedOption.parentKey
|
1273
1315
|
};
|
1274
1316
|
}
|
1275
1317
|
else {
|
1276
|
-
focusedOptionInfo = { index: this.autoOptionFocus ? this.findFirstFocusedOptionIndex() :
|
1318
|
+
focusedOptionInfo = { index: this.autoOptionFocus ? this.findFirstFocusedOptionIndex() : this.findSelectedOptionIndex(), level: 0, parentKey: '' };
|
1277
1319
|
}
|
1278
1320
|
this.focusedOptionInfo.set(focusedOptionInfo);
|
1279
1321
|
isFocus && focus(this.focusInputViewChild.nativeElement);
|
@@ -1303,7 +1345,7 @@ export class CascadeSelect extends BaseComponent {
|
|
1303
1345
|
return Object.prototype.hasOwnProperty.call(option, this.optionGroupChildren[level]);
|
1304
1346
|
}
|
1305
1347
|
isProccessedOptionGroup(processedOption) {
|
1306
|
-
return isNotEmpty(processedOption
|
1348
|
+
return isNotEmpty(processedOption?.children);
|
1307
1349
|
}
|
1308
1350
|
getProccessedOptionLabel(processedOption) {
|
1309
1351
|
const grouped = this.isProccessedOptionGroup(processedOption);
|
@@ -1323,35 +1365,63 @@ export class CascadeSelect extends BaseComponent {
|
|
1323
1365
|
queryMatches = signal(false);
|
1324
1366
|
mobileActive = signal(false);
|
1325
1367
|
onOptionChange(event) {
|
1326
|
-
const {
|
1327
|
-
if (isEmpty(
|
1368
|
+
const { processedOption, type } = event;
|
1369
|
+
if (isEmpty(processedOption))
|
1328
1370
|
return;
|
1329
|
-
const { index, level, parentKey, children
|
1371
|
+
const { index, key, level, parentKey, children } = processedOption;
|
1330
1372
|
const grouped = isNotEmpty(children);
|
1331
|
-
const
|
1373
|
+
const activeOptionPath = this.activeOptionPath().filter((p) => p.parentKey !== parentKey && p.parentKey !== key);
|
1374
|
+
this.focusedOptionInfo.set({ index, level, parentKey });
|
1375
|
+
if (type == 'hover' && this.queryMatches()) {
|
1376
|
+
return;
|
1377
|
+
}
|
1378
|
+
if (grouped) {
|
1379
|
+
activeOptionPath.push(processedOption);
|
1380
|
+
}
|
1381
|
+
this.activeOptionPath.set([...activeOptionPath]);
|
1382
|
+
}
|
1383
|
+
onOptionClick(event) {
|
1384
|
+
const { originalEvent, processedOption, isFocus, isHide, preventSelection } = event;
|
1385
|
+
const { index, key, level, parentKey } = processedOption;
|
1386
|
+
const grouped = this.isProccessedOptionGroup(processedOption);
|
1387
|
+
const selected = this.isSelected(processedOption);
|
1332
1388
|
if (selected) {
|
1333
1389
|
const activeOptionPath = this.activeOptionPath().filter((p) => key !== p.key && key.startsWith(p.key));
|
1334
1390
|
this.activeOptionPath.set([...activeOptionPath]);
|
1335
1391
|
this.focusedOptionInfo.set({ index, level, parentKey });
|
1336
1392
|
}
|
1337
1393
|
else {
|
1338
|
-
|
1339
|
-
|
1340
|
-
|
1341
|
-
|
1342
|
-
|
1394
|
+
if (grouped) {
|
1395
|
+
this.onOptionChange(event);
|
1396
|
+
this.onOptionGroupSelect({ originalEvent, value: processedOption.option, isFocus: false });
|
1397
|
+
}
|
1398
|
+
else {
|
1399
|
+
const activeOptionPath = this.activeOptionPath().filter((p) => p.parentKey !== parentKey);
|
1400
|
+
activeOptionPath.push(processedOption);
|
1401
|
+
this.focusedOptionInfo.set({ index, level, parentKey });
|
1402
|
+
if (!preventSelection || processedOption?.children.length !== 0) {
|
1403
|
+
this.activeOptionPath.set([...activeOptionPath]);
|
1404
|
+
this.onOptionSelect({ originalEvent, value: processedOption.option, isHide: isFocus });
|
1405
|
+
}
|
1406
|
+
}
|
1343
1407
|
}
|
1344
|
-
// const activeOptionPath = this.activeOptionPath().filter((p) => p.parentKey !== parentKey);
|
1345
|
-
//
|
1346
|
-
// activeOptionPath.push(value);
|
1347
|
-
//
|
1348
|
-
// this.focusedOptionInfo.set({ index, level, parentKey });
|
1349
|
-
// this.activeOptionPath.set(activeOptionPath);
|
1350
|
-
// grouped
|
1351
|
-
// ? this.onOptionGroupSelect({ originalEvent, value, isFocus: false })
|
1352
|
-
// : this.onOptionSelect({ originalEvent, value, isFocus });
|
1353
1408
|
isFocus && focus(this.focusInputViewChild.nativeElement);
|
1354
1409
|
}
|
1410
|
+
onOptionMouseEnter(event) {
|
1411
|
+
if (this.focusOnHover) {
|
1412
|
+
if (this.dirty || (!this.dirty && isNotEmpty(this.modelValue()))) {
|
1413
|
+
this.onOptionChange({ ...event, type: 'hover' });
|
1414
|
+
}
|
1415
|
+
else if (!this.dirty && event.processedOption.level === 0) {
|
1416
|
+
this.onOptionClick({ ...event, type: 'hover' });
|
1417
|
+
}
|
1418
|
+
}
|
1419
|
+
}
|
1420
|
+
onOptionMouseMove(event) {
|
1421
|
+
if (this.focused && this.focusOnHover) {
|
1422
|
+
this.changeFocusedOptionIndex(event, event.processedOption.index);
|
1423
|
+
}
|
1424
|
+
}
|
1355
1425
|
ngOnInit() {
|
1356
1426
|
super.ngOnInit();
|
1357
1427
|
this.id = this.id || uuid('pn_id_');
|
@@ -1422,10 +1492,10 @@ export class CascadeSelect extends BaseComponent {
|
|
1422
1492
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.optionTemplate = _t.first);
|
1423
1493
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.headerTemplate = _t.first);
|
1424
1494
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);
|
1425
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.
|
1426
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.
|
1427
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.
|
1428
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.
|
1495
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.triggericon = _t.first);
|
1496
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.loadingicon = _t.first);
|
1497
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.groupicon = _t.first);
|
1498
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.clearicon = _t.first);
|
1429
1499
|
} }, viewQuery: function CascadeSelect_Query(rf, ctx) { if (rf & 1) {
|
1430
1500
|
i0.ɵɵviewQuery(_c9, 5);
|
1431
1501
|
i0.ɵɵviewQuery(_c10, 5);
|
@@ -1437,7 +1507,7 @@ export class CascadeSelect extends BaseComponent {
|
|
1437
1507
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.containerViewChild = _t.first);
|
1438
1508
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.panelViewChild = _t.first);
|
1439
1509
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.overlayViewChild = _t.first);
|
1440
|
-
} }, inputs: { id: "id",
|
1510
|
+
} }, inputs: { id: "id", searchMessage: "searchMessage", emptyMessage: "emptyMessage", selectionMessage: "selectionMessage", emptySearchMessage: "emptySearchMessage", emptySelectionMessage: "emptySelectionMessage", searchLocale: "searchLocale", optionDisabled: "optionDisabled", focusOnHover: [2, "focusOnHover", "focusOnHover", booleanAttribute], selectOnFocus: [2, "selectOnFocus", "selectOnFocus", booleanAttribute], autoOptionFocus: [2, "autoOptionFocus", "autoOptionFocus", booleanAttribute], styleClass: "styleClass", style: "style", options: "options", optionLabel: "optionLabel", optionValue: "optionValue", optionGroupLabel: "optionGroupLabel", optionGroupChildren: "optionGroupChildren", placeholder: "placeholder", value: "value", dataKey: "dataKey", inputId: "inputId", size: "size", tabindex: [2, "tabindex", "tabindex", numberAttribute], ariaLabelledBy: "ariaLabelledBy", inputLabel: "inputLabel", ariaLabel: "ariaLabel", appendTo: "appendTo", disabled: [2, "disabled", "disabled", booleanAttribute], showClear: [2, "showClear", "showClear", booleanAttribute], panelStyleClass: "panelStyleClass", panelStyle: "panelStyle", overlayOptions: "overlayOptions", autofocus: [2, "autofocus", "autofocus", booleanAttribute], showTransitionOptions: "showTransitionOptions", variant: "variant", loading: [2, "loading", "loading", booleanAttribute], loadingIcon: "loadingIcon", hideTransitionOptions: "hideTransitionOptions", fluid: [2, "fluid", "fluid", booleanAttribute], breakpoint: "breakpoint" }, outputs: { onChange: "onChange", onGroupChange: "onGroupChange", onShow: "onShow", onHide: "onHide", onClear: "onClear", onBeforeShow: "onBeforeShow", onBeforeHide: "onBeforeHide", onFocus: "onFocus", onBlur: "onBlur" }, standalone: true, features: [i0.ɵɵProvidersFeature([CASCADESELECT_VALUE_ACCESSOR, CascadeSelectStyle]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature], decls: 20, vars: 34, consts: [["container", ""], ["focusInput", ""], ["defaultValueTemplate", ""], ["elseBlock", ""], ["overlay", ""], ["content", ""], ["panel", ""], [3, "click", "ngClass", "ngStyle"], [1, "p-hidden-accessible"], ["readonly", "", "type", "text", "role", "combobox", "aria-haspopup", "tree", 3, "focus", "blur", "keydown", "disabled", "placeholder", "tabindex", "pAutoFocus"], [3, "ngClass"], [4, "ngIf", "ngIfElse"], [4, "ngIf"], ["role", "button", "aria-haspopup", "listbox", 1, "p-cascadeselect-dropdown"], ["role", "status", "aria-live", "polite", 1, "p-hidden-accessible"], [3, "visibleChange", "onAnimationDone", "onBeforeShow", "onShow", "onBeforeHide", "onHide", "visible", "options", "target", "appendTo", "showTransitionOptions", "hideTransitionOptions"], [4, "ngTemplateOutlet", "ngTemplateOutletContext"], ["class", "p-cascadeselect-clear-icon", 3, "click", 4, "ngIf"], [1, "p-cascadeselect-clear-icon", 3, "click"], [4, "ngTemplateOutlet"], ["aria-hidden", "true", 3, "ngClass", 4, "ngIf"], ["aria-hidden", "true", 3, "class", 4, "ngIf"], ["aria-hidden", "true", 3, "ngClass"], ["aria-hidden", "true"], [3, "styleClass", 4, "ngIf"], ["class", "p-cascadeselect-dropdown-icon", 4, "ngIf"], [3, "styleClass"], [1, "p-cascadeselect-dropdown-icon"], [3, "ngClass", "ngStyle"], [1, "p-cascadeselect-list-container"], [3, "onChange", "onFocusChange", "onFocusEnterChange", "options", "selectId", "focusedOptionId", "activeOptionPath", "optionLabel", "optionValue", "level", "optionTemplate", "groupicon", "optionGroupLabel", "optionGroupChildren", "optionDisabled", "root", "dirty", "role"]], template: function CascadeSelect_Template(rf, ctx) { if (rf & 1) {
|
1441
1511
|
const _r1 = i0.ɵɵgetCurrentView();
|
1442
1512
|
i0.ɵɵelementStart(0, "div", 7, 0);
|
1443
1513
|
i0.ɵɵlistener("click", function CascadeSelect_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onContainerClick($event)); });
|
@@ -1529,26 +1599,26 @@ export class CascadeSelect extends BaseComponent {
|
|
1529
1599
|
</span>
|
1530
1600
|
|
1531
1601
|
<ng-container *ngIf="filled && !disabled && showClear">
|
1532
|
-
<TimesIcon *ngIf="!
|
1533
|
-
<span *ngIf="
|
1534
|
-
<ng-template *ngTemplateOutlet="
|
1602
|
+
<TimesIcon *ngIf="!clearicon" class="p-cascadeselect-clear-icon" (click)="clear($event)" [attr.data-pc-section]="'clearicon'" [attr.aria-hidden]="true" />
|
1603
|
+
<span *ngIf="clearicon" class="p-cascadeselect-clear-icon" (click)="clear($event)" [attr.data-pc-section]="'clearicon'" [attr.aria-hidden]="true">
|
1604
|
+
<ng-template *ngTemplateOutlet="clearicon"></ng-template>
|
1535
1605
|
</span>
|
1536
1606
|
</ng-container>
|
1537
1607
|
|
1538
1608
|
<div class="p-cascadeselect-dropdown" role="button" aria-haspopup="listbox" [attr.aria-expanded]="overlayVisible ?? false" [attr.data-pc-section]="'dropdownIcon'" [attr.aria-hidden]="true">
|
1539
1609
|
<ng-container *ngIf="loading; else elseBlock">
|
1540
|
-
<ng-container *ngIf="
|
1541
|
-
<ng-container *ngTemplateOutlet="
|
1610
|
+
<ng-container *ngIf="loadingicon">
|
1611
|
+
<ng-container *ngTemplateOutlet="loadingicon"></ng-container>
|
1542
1612
|
</ng-container>
|
1543
|
-
<ng-container *ngIf="!
|
1613
|
+
<ng-container *ngIf="!loadingicon">
|
1544
1614
|
<span *ngIf="loadingIcon" [ngClass]="'p-cascadeselect-loading-icon pi-spin ' + loadingIcon" aria-hidden="true"></span>
|
1545
1615
|
<span *ngIf="!loadingIcon" [class]="'p-cascadeselect-loading-icon pi pi-spinner pi-spin'" aria-hidden="true"></span>
|
1546
1616
|
</ng-container>
|
1547
1617
|
</ng-container>
|
1548
1618
|
<ng-template #elseBlock>
|
1549
|
-
<ChevronDownIcon *ngIf="!
|
1550
|
-
<span *ngIf="
|
1551
|
-
<ng-template *ngTemplateOutlet="
|
1619
|
+
<ChevronDownIcon *ngIf="!triggericon" [styleClass]="'p-cascadeselect-dropdown-icon'" />
|
1620
|
+
<span *ngIf="triggericon" class="p-cascadeselect-dropdown-icon">
|
1621
|
+
<ng-template *ngTemplateOutlet="triggericon"></ng-template>
|
1552
1622
|
</span>
|
1553
1623
|
</ng-template>
|
1554
1624
|
</div>
|
@@ -1582,12 +1652,14 @@ export class CascadeSelect extends BaseComponent {
|
|
1582
1652
|
[optionValue]="optionValue"
|
1583
1653
|
[level]="0"
|
1584
1654
|
[optionTemplate]="optionTemplate"
|
1585
|
-
[
|
1655
|
+
[groupicon]="groupicon"
|
1586
1656
|
[optionGroupLabel]="optionGroupLabel"
|
1587
1657
|
[optionGroupChildren]="optionGroupChildren"
|
1588
1658
|
[optionDisabled]="optionDisabled"
|
1589
1659
|
[root]="true"
|
1590
|
-
(onChange)="
|
1660
|
+
(onChange)="onOptionClick($event)"
|
1661
|
+
(onFocusChange)="onOptionMouseMove($event)"
|
1662
|
+
(onFocusEnterChange)="onOptionMouseEnter($event)"
|
1591
1663
|
[dirty]="dirty"
|
1592
1664
|
[role]="'tree'"
|
1593
1665
|
>
|
@@ -1607,9 +1679,6 @@ export class CascadeSelect extends BaseComponent {
|
|
1607
1679
|
}]
|
1608
1680
|
}], () => [{ type: i2.OverlayService }], { id: [{
|
1609
1681
|
type: Input
|
1610
|
-
}], selectOnFocus: [{
|
1611
|
-
type: Input,
|
1612
|
-
args: [{ transform: booleanAttribute }]
|
1613
1682
|
}], searchMessage: [{
|
1614
1683
|
type: Input
|
1615
1684
|
}], emptyMessage: [{
|
@@ -1624,6 +1693,12 @@ export class CascadeSelect extends BaseComponent {
|
|
1624
1693
|
type: Input
|
1625
1694
|
}], optionDisabled: [{
|
1626
1695
|
type: Input
|
1696
|
+
}], focusOnHover: [{
|
1697
|
+
type: Input,
|
1698
|
+
args: [{ transform: booleanAttribute }]
|
1699
|
+
}], selectOnFocus: [{
|
1700
|
+
type: Input,
|
1701
|
+
args: [{ transform: booleanAttribute }]
|
1627
1702
|
}], autoOptionFocus: [{
|
1628
1703
|
type: Input,
|
1629
1704
|
args: [{ transform: booleanAttribute }]
|
@@ -1735,16 +1810,16 @@ export class CascadeSelect extends BaseComponent {
|
|
1735
1810
|
}], footerTemplate: [{
|
1736
1811
|
type: ContentChild,
|
1737
1812
|
args: ['footer']
|
1738
|
-
}],
|
1813
|
+
}], triggericon: [{
|
1739
1814
|
type: ContentChild,
|
1740
1815
|
args: ['triggericon']
|
1741
|
-
}],
|
1816
|
+
}], loadingicon: [{
|
1742
1817
|
type: ContentChild,
|
1743
1818
|
args: ['loadingicon']
|
1744
|
-
}],
|
1819
|
+
}], groupicon: [{
|
1745
1820
|
type: ContentChild,
|
1746
1821
|
args: ['optiongroupicon']
|
1747
|
-
}],
|
1822
|
+
}], clearicon: [{
|
1748
1823
|
type: ContentChild,
|
1749
1824
|
args: ['clearicon']
|
1750
1825
|
}] }); })();
|
@@ -1762,4 +1837,4 @@ export class CascadeSelectModule {
|
|
1762
1837
|
}]
|
1763
1838
|
}], null, null); })();
|
1764
1839
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(CascadeSelectModule, { imports: [CascadeSelect, SharedModule], exports: [CascadeSelect, SharedModule] }); })();
|
1765
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXNlbGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXNjYWRlc2VsZWN0L2Nhc2NhZGVzZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLE1BQU0sRUFFTixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLGVBQWUsRUFFZixNQUFNLEVBQ04sTUFBTSxFQUdOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFPLE9BQU8sRUFBa0MsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8s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QUMsT0FBTztZQU1HLGNBQWM7a0JBQXJDLFlBQVk7bUJBQUMsUUFBUTtZQU1FLGNBQWM7a0JBQXJDLFlBQVk7bUJBQUMsUUFBUTtZQU1FLGNBQWM7a0JBQXJDLFlBQVk7bUJBQUMsUUFBUTtZQU1PLG1CQUFtQjtrQkFBL0MsWUFBWTttQkFBQyxhQUFhO1lBTUUsbUJBQW1CO2tCQUEvQyxZQUFZO21CQUFDLGFBQWE7WUFNTSxpQkFBaUI7a0JBQWpELFlBQVk7bUJBQUMsaUJBQWlCO1lBTUosaUJBQWlCO2tCQUEzQyxZQUFZO21CQUFDLFdBQVc7O2tGQXRVaEIsYUFBYTtBQWttQzFCLE1BQU0sT0FBTyxtQkFBbUI7NkdBQW5CLG1CQUFtQjs0REFBbkIsbUJBQW1CO2dFQUhsQixhQUFhLEVBQUUsWUFBWSxFQUNaLFlBQVk7O2lGQUU1QixtQkFBbUI7Y0FKL0IsUUFBUTtlQUFDO2dCQUNOLE9BQU8sRUFBRSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUM7Z0JBQ3RDLE9BQU8sRUFBRSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUM7YUFDekM7O3dGQUNZLG1CQUFtQixjQWxtQ25CLGFBQWEsRUErbENHLFlBQVksYUEvbEM1QixhQUFhLEVBZ21DRyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ01vZHVsZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNhbGN1bGF0ZVNjcm9sbGJhcldpZHRoLCBlcXVhbHMsIGZpbmRMYXN0SW5kZXgsIGZpbmRTaW5nbGUsIGZvY3VzLCBnZXRIaWRkZW5FbGVtZW50T3V0ZXJXaWR0aCwgZ2V0T2Zmc2V0LCBnZXRPdXRlcldpZHRoLCBnZXRWaWV3cG9ydCwgaXNFbXB0eSwgaXNOb3RFbXB0eSwgaXNQcmludGFibGVDaGFyYWN0ZXIsIHJlc29sdmVGaWVsZERhdGEsIHV1aWQgfSBmcm9tICdAcHJpbWV1aXgvdXRpbHMnO1xuaW1wb3J0IHsgT3ZlcmxheU9wdGlvbnMsIE92ZXJsYXlTZXJ2aWNlLCBTaGFyZWRNb2R1bGUsIFRyYW5zbGF0aW9uS2V5cyB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IEF1dG9Gb2N1cyB9IGZyb20gJ3ByaW1lbmcvYXV0b2ZvY3VzJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2Jhc2Vjb21wb25lbnQnO1xuaW1wb3J0IHsgQW5nbGVSaWdodEljb24sIENoZXZyb25Eb3duSWNvbiwgVGltZXNJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucyc7XG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAncHJpbWVuZy9vdmVybGF5JztcbmltcG9ydCB7IFJpcHBsZSB9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7IE51bGxhYmxlLCBWb2lkTGlzdGVuZXIgfSBmcm9tICdwcmltZW5nL3RzLWhlbHBlcnMnO1xuaW1wb3J0IHsgQ2FzY2FkZVNlbGVjdEJlZm9yZUhpZGVFdmVudCwgQ2FzY2FkZVNlbGVjdEJlZm9yZVNob3dFdmVudCwgQ2FzY2FkZVNlbGVjdENoYW5nZUV2ZW50LCBDYXNjYWRlU2VsZWN0SGlkZUV2ZW50LCBDYXNjYWRlU2VsZWN0U2hvd0V2ZW50IH0gZnJvbSAnLi9jYXNjYWRlc2VsZWN0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBDYXNjYWRlU2VsZWN0U3R5bGUgfSBmcm9tICcuL3N0eWxlL2Nhc2NhZGVzZWxlY3RzdHlsZSc7XG5cbmV4cG9ydCBjb25zdCBDQVNDQURFU0VMRUNUX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2FzY2FkZVNlbGVjdCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1jYXNjYWRlU2VsZWN0U3ViLCBwLWNhc2NhZGVzZWxlY3Qtc3ViJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE92ZXJsYXksIFJpcHBsZSwgQXV0b0ZvY3VzLCBBbmdsZVJpZ2h0SWNvbiwgU2hhcmVkTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8dWwgY2xhc3M9XCJwLWNhc2NhZGVzZWxlY3QtbGlzdFwiIFthdHRyLnJvbGVdPVwicm9sZVwiIGFyaWEtb3JpZW50YXRpb249XCJob3Jpem9udGFsXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cImxldmVsID09PSAwID8gJ2xpc3QnIDogJ3N1Ymxpc3QnXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJsaXN0TGFiZWxcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtcHJvY2Vzc2VkT3B0aW9uIFtuZ0Zvck9mXT1cIm9wdGlvbnNcIiBsZXQtaT1cImluZGV4XCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEl0ZW1DbGFzcyhwcm9jZXNzZWRPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sZXZlbF09XCJsZXZlbCArIDFcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNldHNpemVdPVwib3B0aW9ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ2l0ZW0nXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImdldE9wdGlvbklkKHByb2Nlc3NlZE9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldE9wdGlvbkxhYmVsVG9SZW5kZXIocHJvY2Vzc2VkT3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNPcHRpb25Hcm91cChwcm9jZXNzZWRPcHRpb24pID8gdW5kZWZpbmVkIDogaXNPcHRpb25TZWxlY3RlZChwcm9jZXNzZWRPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1wb3NpbnNldF09XCJpICsgMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1jYXNjYWRlc2VsZWN0LW9wdGlvbi1jb250ZW50XCIgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2soJGV2ZW50LCBwcm9jZXNzZWRPcHRpb24pXCIgW2F0dHIudGFiaW5kZXhdPVwiMFwiIHBSaXBwbGUgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidjb250ZW50J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvblRlbXBsYXRlOyBlbHNlIGRlZmF1bHRPcHRpb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb25UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb2Nlc3NlZE9wdGlvbj8ub3B0aW9uIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0T3B0aW9uVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNhc2NhZGVzZWxlY3Qtb3B0aW9uLXRleHRcIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ3RleHQnXCI+e3sgZ2V0T3B0aW9uTGFiZWxUb1JlbmRlcihwcm9jZXNzZWRPcHRpb24pIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1jYXNjYWRlc2VsZWN0LWdyb3VwLWljb25cIiAqbmdJZj1cImlzT3B0aW9uR3JvdXAocHJvY2Vzc2VkT3B0aW9uKVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInZ3JvdXBJY29uJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBbmdsZVJpZ2h0SWNvbiAqbmdJZj1cIiFncm91cEljb25UZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHAtY2FzY2FkZXNlbGVjdC1zdWJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNPcHRpb25Hcm91cChwcm9jZXNzZWRPcHRpb24pICYmIGlzT3B0aW9uQWN0aXZlKHByb2Nlc3NlZE9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3JvbGVdPVwiJ2dyb3VwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtY2FzY2FkZXNlbGVjdC1vdmVybGF5IHAtY2FzY2FkZXNlbGVjdC1vcHRpb24tbGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0SWRdPVwic2VsZWN0SWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZvY3VzZWRPcHRpb25JZF09XCJmb2N1c2VkT3B0aW9uSWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZU9wdGlvblBhdGhdPVwiYWN0aXZlT3B0aW9uUGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJnZXRPcHRpb25Hcm91cENoaWxkcmVuKHByb2Nlc3NlZE9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cIm9wdGlvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJvcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGV2ZWxdPVwibGV2ZWwgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbk9wdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Hcm91cExhYmVsXT1cIm9wdGlvbkdyb3VwTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbkdyb3VwQ2hpbGRyZW5dPVwib3B0aW9uR3JvdXBDaGlsZHJlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlydHldPVwiZGlydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvblRlbXBsYXRlXT1cIm9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8L3AtY2FzY2FkZXNlbGVjdC1zdWI+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdWw+XG4gICAgYCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENhc2NhZGVTZWxlY3RTdWIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSByb2xlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBzZWxlY3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgYWN0aXZlT3B0aW9uUGF0aDogYW55W107XG5cbiAgICBASW5wdXQoKSBvcHRpb25EaXNhYmxlZDogYW55W107XG5cbiAgICBASW5wdXQoKSBmb2N1c2VkT3B0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdIHwgc3RyaW5nW10gfCBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgQElucHV0KCkgb3B0aW9uR3JvdXBDaGlsZHJlbjogc3RyaW5nW10gfCBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgQElucHV0KCkgb3B0aW9uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQElucHV0KCkgZ3JvdXBJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgbGV2ZWw6IG51bWJlciA9IDA7XG5cbiAgICBASW5wdXQoKSBvcHRpb25MYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgb3B0aW9uVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIG9wdGlvbkdyb3VwTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXJ0eTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByb290OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIGdldCBsaXN0TGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmdldFRyYW5zbGF0aW9uKFRyYW5zbGF0aW9uS2V5cy5BUklBKVsnbGlzdExhYmVsJ107XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk9wdGlvbkNsaWNrKGV2ZW50LCBvcHRpb246IGFueSkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICB2YWx1ZTogb3B0aW9uLFxuICAgICAgICAgICAgaXNGb2N1czogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbk9wdGlvbkNoYW5nZShldmVudCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIGdldE9wdGlvbklkKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3RJZH1fJHtwcm9jZXNzZWRPcHRpb24ua2V5fWA7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWwocHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkxhYmVsID8gcmVzb2x2ZUZpZWxkRGF0YShwcm9jZXNzZWRPcHRpb24ub3B0aW9uLCB0aGlzLm9wdGlvbkxhYmVsKSA6IHByb2Nlc3NlZE9wdGlvbi5vcHRpb247XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUocHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlID8gcmVzb2x2ZUZpZWxkRGF0YShwcm9jZXNzZWRPcHRpb24ub3B0aW9uLCB0aGlzLm9wdGlvblZhbHVlKSA6IHByb2Nlc3NlZE9wdGlvbi5vcHRpb247XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWxUb1JlbmRlcihwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25Hcm91cChwcm9jZXNzZWRPcHRpb24pID8gdGhpcy5nZXRPcHRpb25Hcm91cExhYmVsKHByb2Nlc3NlZE9wdGlvbikgOiB0aGlzLmdldE9wdGlvbkxhYmVsKHByb2Nlc3NlZE9wdGlvbik7XG4gICAgfVxuXG4gICAgaXNPcHRpb25EaXNhYmxlZChwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uRGlzYWJsZWQgPyByZXNvbHZlRmllbGREYXRhKHByb2Nlc3NlZE9wdGlvbi5vcHRpb24sIHRoaXMub3B0aW9uRGlzYWJsZWQpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uR3JvdXBMYWJlbChwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uR3JvdXBMYWJlbCA/IHJlc29sdmVGaWVsZERhdGEocHJvY2Vzc2VkT3B0aW9uLm9wdGlvbiwgdGhpcy5vcHRpb25Hcm91cExhYmVsKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uR3JvdXBDaGlsZHJlbihwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZE9wdGlvbi5jaGlsZHJlbjtcbiAgICB9XG5cbiAgICBpc09wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gaXNOb3RFbXB0eShwcm9jZXNzZWRPcHRpb24uY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIGlzT3B0aW9uU2VsZWN0ZWQocHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc09wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbikgJiYgdGhpcy5pc09wdGlvbkFjdGl2ZShwcm9jZXNzZWRPcHRpb24pO1xuICAgIH1cblxuICAgIGlzT3B0aW9uQWN0aXZlKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVPcHRpb25QYXRoLnNvbWUoKHBhdGgpID0+IHBhdGgua2V5ID09PSBwcm9jZXNzZWRPcHRpb24ua2V5KTtcbiAgICB9XG5cbiAgICBpc09wdGlvbkZvY3VzZWQocHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzZWRPcHRpb25JZCA9PT0gdGhpcy5nZXRPcHRpb25JZChwcm9jZXNzZWRPcHRpb24pO1xuICAgIH1cblxuICAgIGdldEl0ZW1DbGFzcyhvcHRpb246IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAncC1jYXNjYWRlc2VsZWN0LW9wdGlvbic6IHRydWUsXG4gICAgICAgICAgICAncC1jYXNjYWRlc2VsZWN0LW9wdGlvbi1ncm91cCc6IHRoaXMuaXNPcHRpb25Hcm91cChvcHRpb24pLFxuICAgICAgICAgICAgJ3AtY2FzY2FkZXNlbGVjdC1vcHRpb24tYWN0aXZlJzogdGhpcy5pc09wdGlvbkFjdGl2ZShvcHRpb24pLFxuICAgICAgICAgICAgJ3AtY2FzY2FkZXNlbGVjdC1vcHRpb24tc2VsZWN0ZWQnOiB0aGlzLmlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uKSxcbiAgICAgICAgICAgICdwLWZvY3VzJzogdGhpcy5pc09wdGlvbkZvY3VzZWQob3B0aW9uKSxcbiAgICAgICAgICAgICdwLWRpc2FibGVkJzogdGhpcy5pc09wdGlvbkRpc2FibGVkKG9wdGlvbilcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgcGFyZW50SXRlbSA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBjb250YWluZXJPZmZzZXQgPSA8YW55PmdldE9mZnNldChwYXJlbnRJdGVtKTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSA8YW55PmdldFZpZXdwb3J0KCk7XG4gICAgICAgIGNvbnN0IHN1Ymxpc3RXaWR0aCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5vZmZzZXRQYXJlbnQgPyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0ub2Zmc2V0V2lkdGggOiBnZXRIaWRkZW5FbGVtZW50T3V0ZXJXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0pO1xuICAgICAgICBjb25zdCBpdGVtT3V0ZXJXaWR0aCA9IDxhbnk+Z2V0T3V0ZXJXaWR0aChwYXJlbnRJdGVtLmNoaWxkcmVuWzBdKTtcbiAgICAgICAgaWYgKHBhcnNlSW50KGNvbnRhaW5lck9mZnNldC5sZWZ0LCAxMCkgKyBpdGVtT3V0ZXJXaWR0aCArIHN1Ymxpc3RXaWR0aCA+IHZpZXdwb3J0LndpZHRoIC0gY2FsY3VsYXRlU2Nyb2xsYmFyV2lkdGgoKSkge1xuICAgICAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLnN0eWxlLmxlZnQgPSAnLTIwMCUnO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBDYXNjYWRlU2VsZWN0IGlzIGEgZm9ybSBjb21wb25lbnQgdG8gc2VsZWN0IGEgdmFsdWUgZnJvbSBhIG5lc3RlZCBzdHJ1Y3R1cmUgb2Ygb3B0aW9ucy5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncC1jYXNjYWRlU2VsZWN0LCBwLWNhc2NhZGVzZWxlY3QsIHAtY2FzY2FkZS1zZWxlY3QnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgT3ZlcmxheSwgUmlwcGxlLCBBdXRvRm9jdXMsIENhc2NhZGVTZWxlY3RTdWIsIENoZXZyb25Eb3duSWNvbiwgQW5nbGVSaWdodEljb24sIFRpbWVzSWNvbiwgU2hhcmVkTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZTogYCA8ZGl2ICNjb250YWluZXIgW25nQ2xhc3NdPVwiY29udGFpbmVyQ2xhc3NcIiBbY2xhc3NdPVwic3R5bGVDbGFzc1wiIFtuZ1N0eWxlXT1cInN0eWxlXCIgKGNsaWNrKT1cIm9uQ29udGFpbmVyQ2xpY2soJGV2ZW50KVwiIFthdHRyLmRhdGEtcGMtbmFtZV09XCInY2FzY2FkZXNlbGVjdCdcIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ3Jvb3QnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWhpZGRlbi1hY2Nlc3NpYmxlXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidoaWRkZW5JbnB1dFdyYXBwZXInXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAjZm9jdXNJbnB1dFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIhZGlzYWJsZWQgPyB0YWJpbmRleCA6IC0xXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJpbnB1dElkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJlZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvdmVybGF5VmlzaWJsZSA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJvdmVybGF5VmlzaWJsZSA/IGlkICsgJ190cmVlJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJmb2N1c2VkID8gZm9jdXNlZE9wdGlvbklkIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uSW5wdXRCbHVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uSW5wdXRLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtwQXV0b0ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwibGFiZWxDbGFzc1wiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInbGFiZWwnXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0VmFsdWVUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2YWx1ZVRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogdmFsdWUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFZhbHVlVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAge3sgbGFiZWwoKSB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWxsZWQgJiYgIWRpc2FibGVkICYmIHNob3dDbGVhclwiPlxuICAgICAgICAgICAgPFRpbWVzSWNvbiAqbmdJZj1cIiFjbGVhckljb25UZW1wbGF0ZVwiIGNsYXNzPVwicC1jYXNjYWRlc2VsZWN0LWNsZWFyLWljb25cIiAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInY2xlYXJpY29uJ1wiIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIiAvPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjbGVhckljb25UZW1wbGF0ZVwiIGNsYXNzPVwicC1jYXNjYWRlc2VsZWN0LWNsZWFyLWljb25cIiAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInY2xlYXJpY29uJ1wiIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjbGVhckljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwLWNhc2NhZGVzZWxlY3QtZHJvcGRvd25cIiByb2xlPVwiYnV0dG9uXCIgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIiBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm92ZXJsYXlWaXNpYmxlID8/IGZhbHNlXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidkcm9wZG93bkljb24nXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmc7IGVsc2UgZWxzZUJsb2NrXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmdJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvYWRpbmdJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nSWNvblwiIFtuZ0NsYXNzXT1cIidwLWNhc2NhZGVzZWxlY3QtbG9hZGluZy1pY29uIHBpLXNwaW4gJyArIGxvYWRpbmdJY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFsb2FkaW5nSWNvblwiIFtjbGFzc109XCIncC1jYXNjYWRlc2VsZWN0LWxvYWRpbmctaWNvbiBwaSBwaS1zcGlubmVyIHBpLXNwaW4nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICAgICAgICAgICAgICA8Q2hldnJvbkRvd25JY29uICpuZ0lmPVwiIXRyaWdnZXJJY29uVGVtcGxhdGVcIiBbc3R5bGVDbGFzc109XCIncC1jYXNjYWRlc2VsZWN0LWRyb3Bkb3duLWljb24nXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRyaWdnZXJJY29uVGVtcGxhdGVcIiBjbGFzcz1cInAtY2FzY2FkZXNlbGVjdC1kcm9wZG93bi1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJJY29uVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCIgY2xhc3M9XCJwLWhpZGRlbi1hY2Nlc3NpYmxlXCI+XG4gICAgICAgICAgICB7eyBzZWFyY2hSZXN1bHRNZXNzYWdlVGV4dCB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxwLW92ZXJsYXlcbiAgICAgICAgICAgICNvdmVybGF5XG4gICAgICAgICAgICBbKHZpc2libGUpXT1cIm92ZXJsYXlWaXNpYmxlXCJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cIm92ZXJsYXlPcHRpb25zXCJcbiAgICAgICAgICAgIFt0YXJnZXRdPVwiJ0BwYXJlbnQnXCJcbiAgICAgICAgICAgIFthcHBlbmRUb109XCJhcHBlbmRUb1wiXG4gICAgICAgICAgICBbc2hvd1RyYW5zaXRpb25PcHRpb25zXT1cInNob3dUcmFuc2l0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cImhpZGVUcmFuc2l0aW9uT3B0aW9uc1wiXG4gICAgICAgICAgICAob25BbmltYXRpb25Eb25lKT1cIm9uT3ZlcmxheUFuaW1hdGlvbkRvbmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25CZWZvcmVTaG93KT1cIm9uQmVmb3JlU2hvdy5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgKG9uU2hvdyk9XCJzaG93KCRldmVudClcIlxuICAgICAgICAgICAgKG9uQmVmb3JlSGlkZSk9XCJvbkJlZm9yZUhpZGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbkhpZGUpPVwiaGlkZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgI3BhbmVsIFtuZ0NsYXNzXT1cInsgJ3AtY2FzY2FkZXNlbGVjdC1vdmVybGF5IHAtY29tcG9uZW50JzogdHJ1ZSwgJ3AtY2FzY2FkZXNlbGVjdC1tb2JpbGUtYWN0aXZlJzogcXVlcnlNYXRjaGVzKCkgfVwiIFtjbGFzc109XCJwYW5lbFN0eWxlQ2xhc3NcIiBbbmdTdHlsZV09XCJwYW5lbFN0eWxlXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidwYW5lbCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1jYXNjYWRlc2VsZWN0LWxpc3QtY29udGFpbmVyXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIid3cmFwcGVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2FzY2FkZXNlbGVjdC1zdWJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJwcm9jZXNzZWRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0SWRdPVwiaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb2N1c2VkT3B0aW9uSWRdPVwiZm9jdXNlZCA/IGZvY3VzZWRPcHRpb25JZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZU9wdGlvblBhdGhdPVwiYWN0aXZlT3B0aW9uUGF0aCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwib3B0aW9uTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJvcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xldmVsXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25UZW1wbGF0ZV09XCJvcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwSWNvblRlbXBsYXRlXT1cImdyb3VwSWNvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uR3JvdXBMYWJlbF09XCJvcHRpb25Hcm91cExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uR3JvdXBDaGlsZHJlbl09XCJvcHRpb25Hcm91cENoaWxkcmVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uRGlzYWJsZWRdPVwib3B0aW9uRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb290XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbk9wdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlydHldPVwiZGlydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb2xlXT1cIid0cmVlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3AtY2FzY2FkZXNlbGVjdC1zdWI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiByb2xlPVwic3RhdHVzXCIgYXJpYS1saXZlPVwicG9saXRlXCIgY2xhc3M9XCJwLWhpZGRlbi1hY2Nlc3NpYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZE1lc3NhZ2VUZXh0IH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9wLW92ZXJsYXk+XG4gICAgPC9kaXY+YCxcbiAgICBwcm92aWRlcnM6IFtDQVNDQURFU0VMRUNUX1ZBTFVFX0FDQ0VTU09SLCBDYXNjYWRlU2VsZWN0U3R5bGVdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgQ2FzY2FkZVNlbGVjdCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnRcbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIG9wdGlvbiB3aWxsIGJlIHNlbGVjdGVkIG9uIGZvY3VzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzZWxlY3RPbkZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlIHNlYXJjaCBpcyBhY3RpdmUuIERlZmF1bHRzIHRvIGdsb2JhbCB2YWx1ZSBpbiBpMThuIHRyYW5zbGF0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlZmF1bHRWYWx1ZSAnezB9IHJlc3VsdHMgYXJlIGF2YWlsYWJsZSdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWFyY2hNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlcmUgaXMgbm8gZGF0YS4gRGVmYXVsdHMgdG8gZ2xvYmFsIHZhbHVlIGluIGkxOG4gdHJhbnNsYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXB0eU1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBUZXh0IHRvIGJlIGRpc3BsYXllZCBpbiBoaWRkZW4gYWNjZXNzaWJsZSBmaWVsZCB3aGVuIG9wdGlvbnMgYXJlIHNlbGVjdGVkLiBEZWZhdWx0cyB0byBnbG9iYWwgdmFsdWUgaW4gaTE4biB0cmFuc2xhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZWZhdWx0VmFsdWUgJ3swfSBpdGVtcyBzZWxlY3RlZCdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWxlY3Rpb25NZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gZmlsdGVyaW5nIGRvZXMgbm90IHJldHVybiBhbnkgcmVzdWx0cy4gRGVmYXVsdHMgdG8gdmFsdWUgZnJvbSBQcmltZU5HIGxvY2FsZSBjb25maWd1cmF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZWZhdWx0VmFsdWUgJ05vIGF2YWlsYWJsZSBvcHRpb25zJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGVtcHR5U2VhcmNoTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRleHQgdG8gZGlzcGxheSB3aGVuIGZpbHRlcmluZyBkb2VzIG5vdCByZXR1cm4gYW55IHJlc3VsdHMuIERlZmF1bHRzIHRvIGdsb2JhbCB2YWx1ZSBpbiBpMThuIHRyYW5zbGF0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlZmF1bHRWYWx1ZSAnTm8gc2VsZWN0ZWQgaXRlbSdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXB0eVNlbGVjdGlvbk1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBMb2NhbGUgdG8gdXNlIGluIHNlYXJjaGluZy4gVGhlIGRlZmF1bHQgbG9jYWxlIGlzIHRoZSBob3N0IGVudmlyb25tZW50J3MgY3VycmVudCBsb2NhbGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2VhcmNoTG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZGlzYWJsZWQgZmllbGQgb2YgYW4gb3B0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvbkRpc2FibGVkOiBhbnk7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBmb2N1cyBvbiB0aGUgZmlyc3QgdmlzaWJsZSBvciBzZWxlY3RlZCBlbGVtZW50IHdoZW4gdGhlIG92ZXJsYXkgcGFuZWwgaXMgc2hvd24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9PcHRpb25Gb2N1czogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygc2VsZWN0aXRlbXMgdG8gZGlzcGxheSBhcyB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3B0aW9uczogc3RyaW5nW10gfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogUHJvcGVydHkgbmFtZSBvciBnZXR0ZXIgZnVuY3Rpb24gdG8gdXNlIGFzIHRoZSBsYWJlbCBvZiBhbiBvcHRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3B0aW9uTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSBuYW1lIG9yIGdldHRlciBmdW5jdGlvbiB0byB1c2UgYXMgdGhlIHZhbHVlIG9mIGFuIG9wdGlvbiwgZGVmYXVsdHMgdG8gdGhlIG9wdGlvbiBpdHNlbGYgd2hlbiBub3QgZGVmaW5lZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBvcHRpb25WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFByb3BlcnR5IG5hbWUgb3IgZ2V0dGVyIGZ1bmN0aW9uIHRvIHVzZSBhcyB0aGUgbGFiZWwgb2YgYW4gb3B0aW9uIGdyb3VwLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvbkdyb3VwTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSBuYW1lIG9yIGdldHRlciBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgaXRlbXMgb2YgYSBncm91cC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBvcHRpb25Hcm91cENoaWxkcmVuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmYXVsdCB0ZXh0IHRvIGRpc3BsYXkgd2hlbiBubyBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTZWxlY3RlZCB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIEEgcHJvcGVydHkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYW4gb3B0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGRhdGFLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJZGVudGlmaWVyIG9mIHRoZSB1bmRlcmx5aW5nIGlucHV0IGVsZW1lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgaW5wdXRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzaXplOiAnbGFyZ2UnIHwgJ3NtYWxsJztcbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiB0aGUgZWxlbWVudCBpbiB0YWJiaW5nIG9yZGVyLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIHRhYmluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQgPSAwO1xuICAgIC8qKlxuICAgICAqIEVzdGFibGlzaGVzIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgY29tcG9uZW50IGFuZCBsYWJlbChzKSB3aGVyZSBpdHMgdmFsdWUgc2hvdWxkIGJlIG9uZSBvciBtb3JlIGVsZW1lbnQgSURzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTGFiZWwgb2YgdGhlIGlucHV0IGZvciBhY2Nlc3NpYmlsaXR5LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGlucHV0TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgc3RyaW5nIHRoYXQgbGFiZWxzIHRoZSBpbnB1dCBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJZCBvZiB0aGUgZWxlbWVudCBvciBcImJvZHlcIiBmb3IgZG9jdW1lbnQgd2hlcmUgdGhlIG92ZXJsYXkgc2hvdWxkIGJlIGFwcGVuZGVkIHRvLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvOiBIVE1MRWxlbWVudCB8IEVsZW1lbnRSZWYgfCBUZW1wbGF0ZVJlZjxhbnk+IHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB8IGFueTtcbiAgICAvKipcbiAgICAgKiBXaGVuIHByZXNlbnQsIGl0IHNwZWNpZmllcyB0aGF0IHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIGRpc2FibGVkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIGVuYWJsZWQsIGEgY2xlYXIgaWNvbiBpcyBkaXNwbGF5ZWQgdG8gY2xlYXIgdGhlIHZhbHVlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93Q2xlYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBTdHlsZSBjbGFzcyBvZiB0aGUgb3ZlcmxheSBwYW5lbC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwYW5lbFN0eWxlQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBJbmxpbmUgc3R5bGUgb2YgdGhlIG92ZXJsYXkgcGFuZWwuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcGFuZWxTdHlsZTogeyBba2xhc3M6IHN0cmluZ106IGFueSB9IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHVzZSBvdmVybGF5IEFQSSBmZWF0dXJlLiBUaGUgcHJvcGVydGllcyBvZiBvdmVybGF5IEFQSSBjYW4gYmUgdXNlZCBsaWtlIGFuIG9iamVjdCBpbiBpdC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBvdmVybGF5T3B0aW9uczogT3ZlcmxheU9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcG9uZW50IHNob3VsZCBhdXRvbWF0aWNhbGx5IGdldCBmb2N1cyBvbiBsb2FkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhdXRvZm9jdXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVHJhbnNpdGlvbiBvcHRpb25zIG9mIHRoZSBzaG93IGFuaW1hdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKiBAZGVwcmVjYXRlZCBkZXByZWNhdGVkIHNpbmNlIHYxNC4yLjAsIHVzZSBvdmVybGF5T3B0aW9ucyBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBzaG93VHJhbnNpdGlvbk9wdGlvbnMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dUcmFuc2l0aW9uT3B0aW9ucztcbiAgICB9XG4gICAgc2V0IHNob3dUcmFuc2l0aW9uT3B0aW9ucyh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zaG93VHJhbnNpdGlvbk9wdGlvbnMgPSB2YWw7XG4gICAgICAgIGNvbnNvbGUubG9nKCdUaGUgc2hvd1RyYW5zaXRpb25PcHRpb25zIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgc2luY2UgdjE0LjIuMCwgdXNlIG92ZXJsYXlPcHRpb25zIHByb3BlcnR5IGluc3RlYWQuJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgaW5wdXQgdmFyaWFudCBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHZhcmlhbnQ6ICdmaWxsZWQnIHwgJ291dGxpbmVkJyA9ICdvdXRsaW5lZCc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgZHJvcGRvd24gaXMgaW4gbG9hZGluZyBzdGF0ZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbG9hZGluZzogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIEljb24gdG8gZGlzcGxheSBpbiBsb2FkaW5nIHN0YXRlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxvYWRpbmdJY29uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVHJhbnNpdGlvbiBvcHRpb25zIG9mIHRoZSBoaWRlIGFuaW1hdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKiBAZGVwcmVjYXRlZCBkZXByZWNhdGVkIHNpbmNlIHYxNC4yLjAsIHVzZSBvdmVybGF5T3B0aW9ucyBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBoaWRlVHJhbnNpdGlvbk9wdGlvbnMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVUcmFuc2l0aW9uT3B0aW9ucztcbiAgICB9XG4gICAgc2V0IGhpZGVUcmFuc2l0aW9uT3B0aW9ucyh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9oaWRlVHJhbnNpdGlvbk9wdGlvbnMgPSB2YWw7XG4gICAgICAgIGNvbnNvbGUubG9nKCdUaGUgaGlkZVRyYW5zaXRpb25PcHRpb25zIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgc2luY2UgdjE0LjIuMCwgdXNlIG92ZXJsYXlPcHRpb25zIHByb3BlcnR5IGluc3RlYWQuJyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwYW5zIDEwMCUgd2lkdGggb2YgdGhlIGNvbnRhaW5lciB3aGVuIGVuYWJsZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGZsdWlkOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogVGhlIGJyZWFrcG9pbnQgdG8gZGVmaW5lIHRoZSBtYXhpbXVtIHdpZHRoIGJvdW5kYXJ5LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGJyZWFrcG9pbnQ6IHN0cmluZyA9ICc5NjBweCc7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIG9uIHZhbHVlIGNoYW5nZS5cbiAgICAgKiBAcGFyYW0ge0Nhc2NhZGVTZWxlY3RDaGFuZ2VFdmVudH0gZXZlbnQgLSBDdXN0b20gY2hhbmdlIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPENhc2NhZGVTZWxlY3RDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENhc2NhZGVTZWxlY3RDaGFuZ2VFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIGdyb3VwIGNoYW5nZXMuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgLSBCcm93c2VyIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkdyb3VwQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgb3ZlcmxheSBpcyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge0Nhc2NhZGVTZWxlY3RTaG93RXZlbnR9IGV2ZW50IC0gQ3VzdG9tIG92ZXJsYXkgc2hvdyBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25TaG93OiBFdmVudEVtaXR0ZXI8Q2FzY2FkZVNlbGVjdFNob3dFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENhc2NhZGVTZWxlY3RTaG93RXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIG92ZXJsYXkgaXMgaGlkZGVuLlxuICAgICAqIEBwYXJhbSB7Q2FzY2FkZVNlbGVjdEhpZGVFdmVudH0gZXZlbnQgLSBDdXN0b20gb3ZlcmxheSBoaWRlIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkhpZGU6IEV2ZW50RW1pdHRlcjxDYXNjYWRlU2VsZWN0SGlkZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FzY2FkZVNlbGVjdEhpZGVFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgY2xlYXIgdG9rZW4gaXMgY2xpY2tlZC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DbGVhcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIGJlZm9yZSBvdmVybGF5IGlzIHNob3duLlxuICAgICAqIEBwYXJhbSB7Q2FzY2FkZVNlbGVjdEJlZm9yZVNob3dFdmVudH0gZXZlbnQgLSBDdXN0b20gb3ZlcmxheSBzaG93IGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZVNob3c6IEV2ZW50RW1pdHRlcjxDYXNjYWRlU2VsZWN0QmVmb3JlU2hvd0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FzY2FkZVNlbGVjdEJlZm9yZVNob3dFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2UgYmVmb3JlIG92ZXJsYXkgaXMgaGlkZGVuLlxuICAgICAqIEBwYXJhbSB7Q2FzY2FkZVNlbGVjdEJlZm9yZUhpZGVFdmVudH0gZXZlbnQgLSBDdXN0b20gb3ZlcmxheSBoaWRlIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJlZm9yZUhpZGU6IEV2ZW50RW1pdHRlcjxDYXNjYWRlU2VsZWN0QmVmb3JlSGlkZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FzY2FkZVNlbGVjdEJlZm9yZUhpZGVFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBpbnB1dCByZWNlaXZlcyBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0ZvY3VzRXZlbnR9IGV2ZW50IC0gRm9jdXMgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBpbnB1dCBsb3NlcyBmb2N1cy5cbiAgICAgKiBAcGFyYW0ge0ZvY3VzRXZlbnR9IGV2ZW50IC0gRm9jdXMgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQmx1cjogRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZm9jdXNJbnB1dCcpIGZvY3VzSW5wdXRWaWV3Q2hpbGQ6IE51bGxhYmxlPEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyVmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ3BhbmVsJykgcGFuZWxWaWV3Q2hpbGQ6IE51bGxhYmxlPEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZCgnb3ZlcmxheScpIG92ZXJsYXlWaWV3Q2hpbGQ6IE51bGxhYmxlPE92ZXJsYXk+O1xuICAgIC8qKlxuICAgICAqIENvbnRlbnQgdGVtcGxhdGUgZm9yIGRpc3BsYXlpbmcgdGhlIHNlbGVjdGVkIHZhbHVlLlxuICAgICAqIEBncm91cCBUZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCd2YWx1ZScpIHZhbHVlVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgLyoqXG4gICAgICogQ29udGVudCB0ZW1wbGF0ZSBmb3IgY3VzdG9taXppbmcgdGhlIG9wdGlvbiBkaXNwbGF5LlxuICAgICAqIEBncm91cCBUZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdvcHRpb24nKSBvcHRpb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiBDb250ZW50IHRlbXBsYXRlIGZvciBjdXN0b21pemluZyB0aGUgaGVhZGVyLlxuICAgICAqIEBncm91cCBUZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXInKSBoZWFkZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiBDb250ZW50IHRlbXBsYXRlIGZvciBjdXN0b21pemluZyB0aGUgZm9vdGVyLlxuICAgICAqIEBncm91cCBUZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdmb290ZXInKSBmb290ZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiBDb250ZW50IHRlbXBsYXRlIGZvciBjdXN0b21pemluZyB0aGUgdHJpZ2dlciBpY29uLlxuICAgICAqIEBncm91cCBUZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCd0cmlnZ2VyaWNvbicpIHRyaWdnZXJJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgLyoqXG4gICAgICogQ29udGVudCB0ZW1wbGF0ZSBmb3IgY3VzdG9taXppbmcgdGhlIGxvYWRpbmcgaWNvbi5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnbG9hZGluZ2ljb24nKSBsb2FkaW5nSWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIENvbnRlbnQgdGVtcGxhdGUgZm9yIGN1c3RvbWl6aW5nIHRoZSBncm91cCBpY29uLlxuICAgICAqIEBncm91cCBUZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdvcHRpb25ncm91cGljb24nKSBncm91cEljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiBDb250ZW50IHRlbXBsYXRlIGZvciBjdXN0b21pemluZyB0aGUgY2xlYXIgaWNvbi5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnY2xlYXJpY29uJykgY2xlYXJJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgX3Nob3dUcmFuc2l0aW9uT3B0aW9uczogc3RyaW5nID0gJyc7XG5cbiAgICBfaGlkZVRyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnJztcblxuICAgIHNlbGVjdGlvblBhdGg6IGFueSA9IG51bGw7XG5cbiAgICBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBvdmVybGF5VmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgZGlydHk6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgc2VhcmNoVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIHNlYXJjaFRpbWVvdXQ6IGFueTtcblxuICAgIG9uTW9kZWxDaGFuZ2U6IEZ1bmN0aW9uID0gKCkgPT4ge307XG5cbiAgICBvbk1vZGVsVG91Y2hlZDogRnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgIGZvY3VzZWRPcHRpb25JbmZvID0gc2lnbmFsPGFueT4oeyBpbmRleDogLTEsIGxldmVsOiAwLCBwYXJlbnRLZXk6ICcnIH0pO1xuXG4gICAgYWN0aXZlT3B0aW9uUGF0aCA9IHNpZ25hbDxhbnk+KFtdKTtcblxuICAgIG1vZGVsVmFsdWUgPSBzaWduYWw8YW55PihudWxsKTtcblxuICAgIHByb2Nlc3NlZE9wdGlvbnM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgdW5kZWZpbmVkID0gW107XG5cbiAgICBfY29tcG9uZW50U3R5bGUgPSBpbmplY3QoQ2FzY2FkZVNlbGVjdFN0eWxlKTtcblxuICAgIGdldCBjb250YWluZXJDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdwLWNhc2NhZGVzZWxlY3QgcC1jb21wb25lbnQgcC1pbnB1dHdyYXBwZXInOiB0cnVlLFxuICAgICAgICAgICAgJ3AtY2FzY2FkZXNlbGVjdC1jbGVhcmFibGUnOiB0aGlzLnNob3dDbGVhciAmJiAhdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgICdwLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgICdwLWZvY3VzJzogdGhpcy5mb2N1c2VkLFxuICAgICAgICAgICAgJ3AtaW5wdXR3cmFwcGVyLWZpbGxlZCc6IHRoaXMubW9kZWxWYWx1ZSgpLFxuICAgICAgICAgICAgJ3AtdmFyaWFudC1maWxsZWQnOiB0aGlzLnZhcmlhbnQgPT09ICdmaWxsZWQnIHx8IHRoaXMuY29uZmlnLmlucHV0U3R5bGUoKSA9PT0gJ2ZpbGxlZCcgfHwgdGhpcy5jb25maWcuaW5wdXRWYXJpYW50KCkgPT09ICdmaWxsZWQnLFxuICAgICAgICAgICAgJ3AtaW5wdXR3cmFwcGVyLWZvY3VzJzogdGhpcy5mb2N1c2VkIHx8IHRoaXMub3ZlcmxheVZpc2libGUsXG4gICAgICAgICAgICAncC1jYXNjYWRlc2VsZWN0LW9wZW4nOiB0aGlzLm92ZXJsYXlWaXNpYmxlLFxuICAgICAgICAgICAgJ3AtY2FzY2FkZXNlbGVjdC1mbHVpZCc6IHRoaXMuaGFzRmx1aWQsXG4gICAgICAgICAgICAncC1jYXNjYWRlc2VsZWN0LXNtIHAtaW5wdXRmaWVsZC1zbSc6IHRoaXMuc2l6ZSA9PT0gJ3NtYWxsJyxcbiAgICAgICAgICAgICdwLWNhc2NhZGVzZWxlY3QtbGcgcC1pbnB1dGZpZWxkLWxnJzogdGhpcy5zaXplID09PSAnbGFyZ2UnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGxhYmVsQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAncC1jYXNjYWRlc2VsZWN0LWxhYmVsJzogdHJ1ZSxcbiAgICAgICAgICAgICdwLXBsYWNlaG9sZGVyJzogdGhpcy5sYWJlbCgpID09PSB0aGlzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgJ3AtY2FzY2FkZXNlbGVjdC1sYWJlbC1lbXB0eSc6ICF0aGlzLnZhbHVlICYmICh0aGlzLmxhYmVsKCkgPT09ICdwLWVtcHR5bGFiZWwnIHx8IHRoaXMubGFiZWwoKS5sZW5ndGggPT09IDApXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGhhc0ZsdWlkKCkge1xuICAgICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBmbHVpZENvbXBvbmVudCA9IG5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgncC1mbHVpZCcpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbHVpZCB8fCAhIWZsdWlkQ29tcG9uZW50O1xuICAgIH1cblxuICAgIGdldCBmb2N1c2VkT3B0aW9uSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkuaW5kZXggIT09IC0xID8gYCR7dGhpcy5pZH0ke2lzTm90RW1wdHkodGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLnBhcmVudEtleSkgPyAnXycgKyB0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkucGFyZW50S2V5IDogJyd9XyR7dGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4fWAgOiBudWxsO1xuICAgIH1cblxuICAgIGdldCBmaWxsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tb2RlbFZhbHVlKCkgPT09ICdzdHJpbmcnKSByZXR1cm4gISF0aGlzLm1vZGVsVmFsdWUoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlKCkgfHwgdGhpcy5tb2RlbFZhbHVlKCkgIT0gbnVsbCB8fCB0aGlzLm1vZGVsVmFsdWUoKSAhPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZ2V0IHNlYXJjaFJlc3VsdE1lc3NhZ2VUZXh0KCkge1xuICAgICAgICByZXR1cm4gaXNOb3RFbXB0eSh0aGlzLnZpc2libGVPcHRpb25zKCkpID8gdGhpcy5zZWFyY2hNZXNzYWdlVGV4dC5yZXBsYWNlQWxsKCd7MH0nLCB0aGlzLnZpc2libGVPcHRpb25zKCkubGVuZ3RoKSA6IHRoaXMuZW1wdHlTZWFyY2hNZXNzYWdlVGV4dDtcbiAgICB9XG5cbiAgICBnZXQgc2VhcmNoTWVzc2FnZVRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaE1lc3NhZ2UgfHwgdGhpcy5jb25maWcudHJhbnNsYXRpb24uc2VhcmNoTWVzc2FnZSB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgZW1wdHlTZWFyY2hNZXNzYWdlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlTZWFyY2hNZXNzYWdlIHx8IHRoaXMuY29uZmlnLnRyYW5zbGF0aW9uLmVtcHR5U2VhcmNoTWVzc2FnZSB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgZW1wdHlNZXNzYWdlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlNZXNzYWdlIHx8IHRoaXMuY29uZmlnLnRyYW5zbGF0aW9uLmVtcHR5TWVzc2FnZSB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0aW9uTWVzc2FnZVRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1lc3NhZ2UgfHwgdGhpcy5jb25maWcudHJhbnNsYXRpb24uc2VsZWN0aW9uTWVzc2FnZSB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgZW1wdHlTZWxlY3Rpb25NZXNzYWdlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlTZWxlY3Rpb25NZXNzYWdlIHx8IHRoaXMuY29uZmlnLnRyYW5zbGF0aW9uLmVtcHR5U2VsZWN0aW9uTWVzc2FnZSB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRNZXNzYWdlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWRPcHRpb24gPyB0aGlzLnNlbGVjdGlvbk1lc3NhZ2VUZXh0LnJlcGxhY2VBbGwoJ3swfScsICcxJykgOiB0aGlzLmVtcHR5U2VsZWN0aW9uTWVzc2FnZVRleHQ7XG4gICAgfVxuXG4gICAgdmlzaWJsZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZE9wdGlvbiA9IHRoaXMuYWN0aXZlT3B0aW9uUGF0aCgpLmZpbmQoKHApID0+IHAua2V5ID09PSB0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkucGFyZW50S2V5KTtcblxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkT3B0aW9uID8gcHJvY2Vzc2VkT3B0aW9uLmNoaWxkcmVuIDogdGhpcy5wcm9jZXNzZWRPcHRpb25zO1xuICAgIH0pO1xuXG4gICAgbGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5wbGFjZWhvbGRlciB8fCAncC1lbXB0eWxhYmVsJztcblxuICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RlZE9wdGlvbigpKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25QYXRoID0gdGhpcy5maW5kT3B0aW9uUGF0aEJ5VmFsdWUodGhpcy5tb2RlbFZhbHVlKCksIG51bGwpO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkT3B0aW9uID0gaXNOb3RFbXB0eShhY3RpdmVPcHRpb25QYXRoKSA/IGFjdGl2ZU9wdGlvblBhdGhbYWN0aXZlT3B0aW9uUGF0aC5sZW5ndGggLSAxXSA6IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzZWRPcHRpb24gPyB0aGlzLmdldE9wdGlvbkxhYmVsKHByb2Nlc3NlZE9wdGlvbi5vcHRpb24pIDogbGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH0pO1xuXG4gICAgZ2V0IF9sYWJlbCgpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnBsYWNlaG9sZGVyIHx8ICdwLWVtcHR5bGFiZWwnO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdGVkT3B0aW9uKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvblBhdGggPSB0aGlzLmZpbmRPcHRpb25QYXRoQnlWYWx1ZSh0aGlzLm1vZGVsVmFsdWUoKSwgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRPcHRpb24gPSBpc05vdEVtcHR5KGFjdGl2ZU9wdGlvblBhdGgpID8gYWN0aXZlT3B0aW9uUGF0aFthY3RpdmVPcHRpb25QYXRoLmxlbmd0aCAtIDFdIDogbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NlZE9wdGlvbiA/IHRoaXMuZ2V0T3B0aW9uTGFiZWwocHJvY2Vzc2VkT3B0aW9uLm9wdGlvbikgOiBsYWJlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgaWYgKGNoYW5nZXMub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRPcHRpb25zID0gdGhpcy5jcmVhdGVQcm9jZXNzZWRPcHRpb25zKGNoYW5nZXMub3B0aW9ucy5jdXJyZW50VmFsdWUgfHwgW10pO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlbChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1NlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNOb3RFbXB0eSh0aGlzLm1vZGVsVmFsdWUoKSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUHJvY2Vzc2VkT3B0aW9ucyhvcHRpb25zLCBsZXZlbCA9IDAsIHBhcmVudCA9IHt9LCBwYXJlbnRLZXkgPSAnJykge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRPcHRpb25zID0gW107XG5cbiAgICAgICAgb3B0aW9ucyAmJlxuICAgICAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gKHBhcmVudEtleSAhPT0gJycgPyBwYXJlbnRLZXkgKyAnXycgOiAnJykgKyBpbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdPcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50S2V5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIG5ld09wdGlvblsnY2hpbGRyZW4nXSA9IHRoaXMuY3JlYXRlUHJvY2Vzc2VkT3B0aW9ucyh0aGlzLmdldE9wdGlvbkdyb3VwQ2hpbGRyZW4ob3B0aW9uLCBsZXZlbCksIGxldmVsICsgMSwgbmV3T3B0aW9uLCBrZXkpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZE9wdGlvbnMucHVzaChuZXdPcHRpb24pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZE9wdGlvbnM7XG4gICAgfVxuXG4gICAgb25JbnB1dEZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAvLyBGb3Igc2NyZWVucmVhZGVyc1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uSW5wdXRCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmZvLnNldCh7IGluZGVYOiAtMSwgbGV2ZWw6IDAsIHBhcmVudEtleTogJycgfSk7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbklucHV0S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGFLZXkgPSBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXk7XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd25LZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dVcEtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93TGVmdEtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd1JpZ2h0S2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhvbWVLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25FbmRLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdTcGFjZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vblNwYWNlS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgY2FzZSAnTnVtcGFkRW50ZXInOlxuICAgICAgICAgICAgICAgIHRoaXMub25FbnRlcktleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVzY2FwZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5vblRhYktleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgICAgICBjYXNlICdTaGlmdExlZnQnOlxuICAgICAgICAgICAgY2FzZSAnU2hpZnRSaWdodCc6XG4gICAgICAgICAgICAgICAgLy9OT09QXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhS2V5ICYmIGlzUHJpbnRhYmxlQ2hhcmFjdGVyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoT3B0aW9ucyhldmVudCwgZXZlbnQua2V5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQXJyb3dEb3duS2V5KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4ICE9PSAtMSA/IHRoaXMuZmluZE5leHRPcHRpb25JbmRleCh0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkuaW5kZXgpIDogdGhpcy5maW5kRmlyc3RGb2N1c2VkT3B0aW9uSW5kZXgoKTtcblxuICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgb3B0aW9uSW5kZXgpO1xuXG4gICAgICAgICF0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuc2hvdygpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uQXJyb3dVcEtleShldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZE9wdGlvbiA9IHRoaXMudmlzaWJsZU9wdGlvbnNbdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkID0gdGhpcy5pc1Byb2NjZXNzZWRPcHRpb25Hcm91cChwcm9jZXNzZWRPcHRpb24pO1xuXG4gICAgICAgICAgICAgICAgIWdyb3VwZWQgJiYgdGhpcy5vbk9wdGlvbkNoYW5nZSh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCB2YWx1ZTogcHJvY2Vzc2VkT3B0aW9uIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4ICE9PSAtMSA/IHRoaXMuZmluZFByZXZPcHRpb25JbmRleCh0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkuaW5kZXgpIDogdGhpcy5maW5kTGFzdEZvY3VzZWRPcHRpb25JbmRleCgpO1xuXG4gICAgICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgb3B0aW9uSW5kZXgpO1xuXG4gICAgICAgICAgICAhdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLnNob3coKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkFycm93TGVmdEtleShldmVudCkge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkT3B0aW9uID0gdGhpcy52aXNpYmxlT3B0aW9ucygpW3RoaXMuZm9jdXNlZE9wdGlvbkluZm8oKS5pbmRleF07XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRPcHRpb24gPSB0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKS5maW5kKChwKSA9PiBwLmtleSA9PT0gcHJvY2Vzc2VkT3B0aW9uLnBhcmVudEtleSk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLnBhcmVudEtleSA9PT0gJycgfHwgKHBhcmVudE9wdGlvbiAmJiBwYXJlbnRPcHRpb24ua2V5ID09PSB0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkucGFyZW50S2V5KTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBpc0VtcHR5KHByb2Nlc3NlZE9wdGlvbi5wYXJlbnQpO1xuXG4gICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvblBhdGggPSB0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKS5maWx0ZXIoKHApID0+IHAucGFyZW50S2V5ICE9PSB0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkucGFyZW50S2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblBhdGguc2V0KGFjdGl2ZU9wdGlvblBhdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmZvLnNldCh7IGluZGV4OiAtMSwgcGFyZW50S2V5OiBwYXJlbnRPcHRpb24gPyBwYXJlbnRPcHRpb24ucGFyZW50S2V5IDogJycgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd25LZXkoZXZlbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BcnJvd1JpZ2h0S2V5KGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlWaXNpYmxlKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRPcHRpb24gPSB0aGlzLnZpc2libGVPcHRpb25zKClbdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB0aGlzLmlzUHJvY2Nlc3NlZE9wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChncm91cGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMuYWN0aXZlT3B0aW9uUGF0aCgpLnNvbWUoKHApID0+IHByb2Nlc3NlZE9wdGlvbi5rZXkgPT09IHAua2V5KTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZm8uc2V0KHsgaW5kZXg6IC0xLCBwYXJlbnRLZXk6IHByb2Nlc3NlZE9wdGlvbi5rZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFycm93RG93bktleShldmVudCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvbkNoYW5nZSh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCB2YWx1ZTogcHJvY2Vzc2VkT3B0aW9uIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSG9tZUtleShldmVudCkge1xuICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgdGhpcy5maW5kRmlyc3RPcHRpb25JbmRleCgpKTtcblxuICAgICAgICAhdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLnNob3coKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkVuZEtleShldmVudCkge1xuICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgdGhpcy5maW5kTGFzdE9wdGlvbkluZGV4KCkpO1xuXG4gICAgICAgICF0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuc2hvdygpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uRW50ZXJLZXkoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm9uQXJyb3dEb3duS2V5KGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkuaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkT3B0aW9uID0gdGhpcy52aXNpYmxlT3B0aW9ucygpW3RoaXMuZm9jdXNlZE9wdGlvbkluZm8oKS5pbmRleF07XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHRoaXMuaXNQcm9jY2Vzc2VkT3B0aW9uR3JvdXAocHJvY2Vzc2VkT3B0aW9uKTtcblxuICAgICAgICAgICAgICAgIHRoaXMub25PcHRpb25DaGFuZ2UoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgdmFsdWU6IHByb2Nlc3NlZE9wdGlvbiB9KTtcbiAgICAgICAgICAgICAgICAhZ3JvdXBlZCAmJiB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25TcGFjZUtleShldmVudCkge1xuICAgICAgICB0aGlzLm9uRW50ZXJLZXkoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRXNjYXBlS2V5KGV2ZW50KSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5oaWRlKHRydWUpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uVGFiS2V5KGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkuaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRPcHRpb24gPSB0aGlzLnZpc2libGVPcHRpb25zKClbdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB0aGlzLmlzUHJvY2Nlc3NlZE9wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbik7XG5cbiAgICAgICAgICAgICFncm91cGVkICYmIHRoaXMub25PcHRpb25DaGFuZ2UoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgdmFsdWU6IHByb2Nlc3NlZE9wdGlvbiB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25CYWNrc3BhY2VLZXkoZXZlbnQpIHtcbiAgICAgICAgaWYgKGlzTm90RW1wdHkodGhpcy5tb2RlbFZhbHVlKCkpICYmIHRoaXMuc2hvd0NsZWFyKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBlcXVhbGl0eUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWUgPyBudWxsIDogdGhpcy5kYXRhS2V5O1xuICAgIH1cblxuICAgIHVwZGF0ZU1vZGVsKHZhbHVlLCBldmVudD8pIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodmFsdWUpO1xuICAgICAgICB0aGlzLm1vZGVsVmFsdWUuc2V0KHZhbHVlKTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXV0b1VwZGF0ZU1vZGVsKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RPbkZvY3VzICYmIHRoaXMuYXV0b09wdGlvbkZvY3VzICYmICF0aGlzLmhhc1NlbGVjdGVkT3B0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZm8oKS5pbmRleCA9IHRoaXMuZmluZEZpcnN0Rm9jdXNlZE9wdGlvbkluZGV4KCk7XG4gICAgICAgICAgICB0aGlzLm9uT3B0aW9uQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBudWxsLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZE9wdGlvbjogdGhpcy52aXNpYmxlT3B0aW9ucygpW3RoaXMuZm9jdXNlZE9wdGlvbkluZm8oKS5pbmRleF0sXG4gICAgICAgICAgICAgICAgaXNIaWRlOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICF0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuZm9jdXNlZE9wdGlvbkluZm8uc2V0KHsgaW5kZXg6IC0xLCBsZXZlbDogMCwgcGFyZW50S2V5OiAnJyB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNjcm9sbEluVmlldyhpbmRleCA9IC0xKSB7XG4gICAgICAgIGNvbnN0IGlkID0gaW5kZXggIT09IC0xID8gYCR7dGhpcy5pZH1fJHtpbmRleH1gIDogdGhpcy5mb2N1c2VkT3B0aW9uSWQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBmaW5kU2luZ2xlKHRoaXMucGFuZWxWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQsIGBsaVtpZD1cIiR7aWR9XCJdYCk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcgJiYgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcsIGlubGluZTogJ3N0YXJ0JyB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZE9wdGlvbkluZm8oKS5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRPcHRpb25JbmZvID0gdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5mby5zZXQoeyAuLi5mb2N1c2VkT3B0aW9uSW5mbywgaW5kZXggfSk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEluVmlldygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0T25Gb2N1cykge1xuICAgICAgICAgICAgdGhpcy5vbk9wdGlvbkNoYW5nZSh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBwcm9jZXNzZWRPcHRpb246IHRoaXMudmlzaWJsZU9wdGlvbnMoKVtpbmRleF0sIGlzSGlkZTogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWF0Y2hNZWRpYUxpc3RlbmVyOiBWb2lkTGlzdGVuZXI7XG5cbiAgICBvbk9wdGlvblNlbGVjdChldmVudCkge1xuICAgICAgICBjb25zdCB7IG9yaWdpbmFsRXZlbnQsIHZhbHVlLCBpc0ZvY3VzIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlKHZhbHVlLm9wdGlvbik7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9uUGF0aCA9IHRoaXMuYWN0aXZlT3B0aW9uUGF0aCgpO1xuICAgICAgICBhY3RpdmVPcHRpb25QYXRoLmZvckVhY2goKHApID0+IChwLnNlbGVjdGVkID0gdHJ1ZSkpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uUGF0aC5zZXQoYWN0aXZlT3B0aW9uUGF0aCk7XG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWwobmV3VmFsdWUsIG9yaWdpbmFsRXZlbnQpO1xuICAgICAgICBpc0ZvY3VzICYmIHRoaXMuaGlkZSh0cnVlKTtcbiAgICB9XG5cbiAgICBvbk9wdGlvbkdyb3VwU2VsZWN0KGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLm9uR3JvdXBDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgb25Db250YWluZXJDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5Vmlld0NoaWxkPy5lbD8ubmF0aXZlRWxlbWVudD8uY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZm9jdXNJbnB1dFZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNPcHRpb25NYXRjaGVkKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkT3B0aW9uKHByb2Nlc3NlZE9wdGlvbikgJiYgdGhpcy5nZXRQcm9jY2Vzc2VkT3B0aW9uTGFiZWwocHJvY2Vzc2VkT3B0aW9uKS50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLnNlYXJjaExvY2FsZSkuc3RhcnRzV2l0aCh0aGlzLnNlYXJjaFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuc2VhcmNoTG9jYWxlKSk7XG4gICAgfVxuXG4gICAgaXNPcHRpb25EaXNhYmxlZChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uRGlzYWJsZWQgPyByZXNvbHZlRmllbGREYXRhKG9wdGlvbiwgdGhpcy5vcHRpb25EaXNhYmxlZCkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkT3B0aW9uKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gISFwcm9jZXNzZWRPcHRpb24gJiYgIXRoaXMuaXNPcHRpb25EaXNhYmxlZChwcm9jZXNzZWRPcHRpb24ub3B0aW9uKTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkU2VsZWN0ZWRPcHRpb24ocHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWRPcHRpb24ocHJvY2Vzc2VkT3B0aW9uKSAmJiB0aGlzLmlzU2VsZWN0ZWQocHJvY2Vzc2VkT3B0aW9uKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVPcHRpb25QYXRoKCkuc29tZSgocCkgPT4gcC5rZXkgPT09IHByb2Nlc3NlZE9wdGlvbi5rZXkpO1xuICAgIH1cblxuICAgIGZpbmRPcHRpb25QYXRoQnlWYWx1ZSh2YWx1ZSwgcHJvY2Vzc2VkT3B0aW9ucz8sIGxldmVsID0gMCkge1xuICAgICAgICBwcm9jZXNzZWRPcHRpb25zID0gcHJvY2Vzc2VkT3B0aW9ucyB8fCAobGV2ZWwgPT09IDAgJiYgdGhpcy5wcm9jZXNzZWRPcHRpb25zKTtcblxuICAgICAgICBpZiAoIXByb2Nlc3NlZE9wdGlvbnMpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHJldHVybiBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2Nlc3NlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZE9wdGlvbiA9IHByb2Nlc3NlZE9wdGlvbnNbaV07XG5cbiAgICAgICAgICAgIGlmIChlcXVhbHModmFsdWUsIHRoaXMuZ2V0T3B0aW9uVmFsdWUocHJvY2Vzc2VkT3B0aW9uLm9wdGlvbiksIHRoaXMuZXF1YWxpdHlLZXkoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3Byb2Nlc3NlZE9wdGlvbl07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRPcHRpb25zID0gdGhpcy5maW5kT3B0aW9uUGF0aEJ5VmFsdWUodmFsdWUsIHByb2Nlc3NlZE9wdGlvbi5jaGlsZHJlbiwgbGV2ZWwgKyAxKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZWRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlZE9wdGlvbnMudW5zaGlmdChwcm9jZXNzZWRPcHRpb24pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRPcHRpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmluZEZpcnN0T3B0aW9uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVPcHRpb25zKCkuZmluZEluZGV4KChwcm9jZXNzZWRPcHRpb24pID0+IHRoaXMuaXNWYWxpZE9wdGlvbihwcm9jZXNzZWRPcHRpb24pKTtcbiAgICB9XG5cbiAgICBmaW5kTGFzdE9wdGlvbkluZGV4KCkge1xuICAgICAgICByZXR1cm4gZmluZExhc3RJbmRleCh0aGlzLnZpc2libGVPcHRpb25zKCksIChwcm9jZXNzZWRPcHRpb24pID0+IHRoaXMuaXNWYWxpZE9wdGlvbihwcm9jZXNzZWRPcHRpb24pKTtcbiAgICB9XG5cbiAgICBmaW5kTmV4dE9wdGlvbkluZGV4KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRPcHRpb25JbmRleCA9XG4gICAgICAgICAgICBpbmRleCA8IHRoaXMudmlzaWJsZU9wdGlvbnMoKS5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZpc2libGVPcHRpb25zKClcbiAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoaW5kZXggKyAxKVxuICAgICAgICAgICAgICAgICAgICAgIC5maW5kSW5kZXgoKHByb2Nlc3NlZE9wdGlvbikgPT4gdGhpcy5pc1ZhbGlkT3B0aW9uKHByb2Nlc3NlZE9wdGlvbikpXG4gICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICByZXR1cm4gbWF0Y2hlZE9wdGlvbkluZGV4ID4gLTEgPyBtYXRjaGVkT3B0aW9uSW5kZXggKyBpbmRleCArIDEgOiBpbmRleDtcbiAgICB9XG5cbiAgICBmaW5kUHJldk9wdGlvbkluZGV4KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRPcHRpb25JbmRleCA9IGluZGV4ID4gMCA/IGZpbmRMYXN0SW5kZXgodGhpcy52aXNpYmxlT3B0aW9ucygpLnNsaWNlKDAsIGluZGV4KSwgKHByb2Nlc3NlZE9wdGlvbikgPT4gdGhpcy5pc1ZhbGlkT3B0aW9uKHByb2Nlc3NlZE9wdGlvbikpIDogLTE7XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoZWRPcHRpb25JbmRleCA+IC0xID8gbWF0Y2hlZE9wdGlvbkluZGV4IDogaW5kZXg7XG4gICAgfVxuXG4gICAgZmluZFNlbGVjdGVkT3B0aW9uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVPcHRpb25zKCkuZmluZEluZGV4KChwcm9jZXNzZWRPcHRpb24pID0+IHRoaXMuaXNWYWxpZFNlbGVjdGVkT3B0aW9uKHByb2Nlc3NlZE9wdGlvbikpO1xuICAgIH1cblxuICAgIGZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuZmluZFNlbGVjdGVkT3B0aW9uSW5kZXgoKTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleCA8IDAgPyB0aGlzLmZpbmRGaXJzdE9wdGlvbkluZGV4KCkgOiBzZWxlY3RlZEluZGV4O1xuICAgIH1cblxuICAgIGZpbmRMYXN0Rm9jdXNlZE9wdGlvbkluZGV4KCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5maW5kU2VsZWN0ZWRPcHRpb25JbmRleCgpO1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4IDwgMCA/IHRoaXMuZmluZExhc3RPcHRpb25JbmRleCgpIDogc2VsZWN0ZWRJbmRleDtcbiAgICB9XG5cbiAgICBzZWFyY2hPcHRpb25zKGV2ZW50LCBjaGFyKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAodGhpcy5zZWFyY2hWYWx1ZSB8fCAnJykgKyBjaGFyO1xuXG4gICAgICAgIGxldCBvcHRpb25JbmRleCA9IC0xO1xuICAgICAgICBsZXQgbWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmb2N1c2VkT3B0aW9uSW5mbyA9IHRoaXMuZm9jdXNlZE9wdGlvbkluZm8oKTtcblxuICAgICAgICBpZiAoZm9jdXNlZE9wdGlvbkluZm8uaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBvcHRpb25JbmRleCA9IHRoaXMudmlzaWJsZU9wdGlvbnMoKVxuICAgICAgICAgICAgICAgIC5zbGljZShmb2N1c2VkT3B0aW9uSW5mby5pbmRleClcbiAgICAgICAgICAgICAgICAuZmluZEluZGV4KChwcm9jZXNzZWRPcHRpb24pID0+IHRoaXMuaXNPcHRpb25NYXRjaGVkKHByb2Nlc3NlZE9wdGlvbikpO1xuICAgICAgICAgICAgb3B0aW9uSW5kZXggPVxuICAgICAgICAgICAgICAgIG9wdGlvbkluZGV4ID09PSAtMVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMudmlzaWJsZU9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgZm9jdXNlZE9wdGlvbkluZm8uaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kSW5kZXgoKHByb2Nlc3NlZE9wdGlvbikgPT4gdGhpcy5pc09wdGlvbk1hdGNoZWQocHJvY2Vzc2VkT3B0aW9uKSlcbiAgICAgICAgICAgICAgICAgICAgOiBvcHRpb25JbmRleCArIGZvY3VzZWRPcHRpb25JbmZvLmluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9uSW5kZXggPSB0aGlzLnZpc2libGVPcHRpb25zKCkuZmluZEluZGV4KChwcm9jZXNzZWRPcHRpb24pID0+IHRoaXMuaXNPcHRpb25NYXRjaGVkKHByb2Nlc3NlZE9wdGlvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uSW5kZXggPT09IC0xICYmIGZvY3VzZWRPcHRpb25JbmZvLmluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgb3B0aW9uSW5kZXggPSB0aGlzLmZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkT3B0aW9uSW5kZXgoZXZlbnQsIG9wdGlvbkluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9LCA1MDApO1xuXG4gICAgICAgIHJldHVybiBtYXRjaGVkO1xuICAgIH1cblxuICAgIGhpZGUoZXZlbnQ/LCBpc0ZvY3VzID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgX2hpZGUgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblBhdGguc2V0KFtdKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZm8uc2V0KHsgaW5kZXg6IC0xLCBsZXZlbDogMCwgcGFyZW50S2V5OiAnJyB9KTtcblxuICAgICAgICAgICAgaXNGb2N1cyAmJiBmb2N1cyh0aGlzLmZvY3VzSW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLm9uSGlkZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIF9oaWRlKCk7XG4gICAgICAgIH0sIDApOyAvLyBGb3IgU2NyZWVuUmVhZGVyc1xuICAgIH1cblxuICAgIHNob3coZXZlbnQ/LCBpc0ZvY3VzID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSB0cnVlO1xuICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25QYXRoID0gdGhpcy5oYXNTZWxlY3RlZE9wdGlvbigpID8gdGhpcy5maW5kT3B0aW9uUGF0aEJ5VmFsdWUodGhpcy5tb2RlbFZhbHVlKCkpIDogdGhpcy5hY3RpdmVPcHRpb25QYXRoKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uUGF0aC5zZXQoYWN0aXZlT3B0aW9uUGF0aCk7XG4gICAgICAgIGxldCBmb2N1c2VkT3B0aW9uSW5mbztcblxuICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RlZE9wdGlvbigpICYmIGlzTm90RW1wdHkodGhpcy5hY3RpdmVPcHRpb25QYXRoKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRPcHRpb24gPSB0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKVt0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKS5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgZm9jdXNlZE9wdGlvbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuYXV0b09wdGlvbkZvY3VzID8gcHJvY2Vzc2VkT3B0aW9uLmluZGV4IDogLTEsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHByb2Nlc3NlZE9wdGlvbi5sZXZlbCxcbiAgICAgICAgICAgICAgICBwYXJlbnRLZXk6IHByb2Nlc3NlZE9wdGlvbi5wYXJlbnRLZXlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb2N1c2VkT3B0aW9uSW5mbyA9IHsgaW5kZXg6IHRoaXMuYXV0b09wdGlvbkZvY3VzID8gdGhpcy5maW5kRmlyc3RGb2N1c2VkT3B0aW9uSW5kZXgoKSA6IC0xLCBsZXZlbDogMCwgcGFyZW50S2V5OiAnJyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5mby5zZXQoZm9jdXNlZE9wdGlvbkluZm8pO1xuXG4gICAgICAgIGlzRm9jdXMgJiYgZm9jdXModGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNsZWFyKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoaXNOb3RFbXB0eSh0aGlzLm1vZGVsVmFsdWUoKSkgJiYgdGhpcy5zaG93Q2xlYXIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmZvLnNldCh7IGluZGV4OiAtMSwgbGV2ZWw6IDAsIHBhcmVudEtleTogJycgfSk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblBhdGguc2V0KFtdKTtcbiAgICAgICAgICAgIHRoaXMub25DbGVhci5lbWl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudCAmJiBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25MYWJlbChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uTGFiZWwgPyByZXNvbHZlRmllbGREYXRhKG9wdGlvbiwgdGhpcy5vcHRpb25MYWJlbCkgOiBvcHRpb247XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlID8gcmVzb2x2ZUZpZWxkRGF0YShvcHRpb24sIHRoaXMub3B0aW9uVmFsdWUpIDogb3B0aW9uO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkdyb3VwTGFiZWwob3B0aW9uR3JvdXApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uR3JvdXBMYWJlbCA/IHJlc29sdmVGaWVsZERhdGEob3B0aW9uR3JvdXAsIHRoaXMub3B0aW9uR3JvdXBMYWJlbCkgOiBudWxsO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkdyb3VwQ2hpbGRyZW4ob3B0aW9uR3JvdXAsIGxldmVsKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlRmllbGREYXRhKG9wdGlvbkdyb3VwLCB0aGlzLm9wdGlvbkdyb3VwQ2hpbGRyZW5bbGV2ZWxdKTtcbiAgICB9XG5cbiAgICBpc09wdGlvbkdyb3VwKG9wdGlvbiwgbGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb24sIHRoaXMub3B0aW9uR3JvdXBDaGlsZHJlbltsZXZlbF0pO1xuICAgIH1cblxuICAgIGlzUHJvY2Nlc3NlZE9wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gaXNOb3RFbXB0eShwcm9jZXNzZWRPcHRpb24uY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIGdldFByb2NjZXNzZWRPcHRpb25MYWJlbChwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHRoaXMuaXNQcm9jY2Vzc2VkT3B0aW9uR3JvdXAocHJvY2Vzc2VkT3B0aW9uKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBlZCA/IHRoaXMuZ2V0T3B0aW9uR3JvdXBMYWJlbChwcm9jZXNzZWRPcHRpb24ub3B0aW9uKSA6IHRoaXMuZ2V0T3B0aW9uTGFiZWwocHJvY2Vzc2VkT3B0aW9uLm9wdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHVibGljIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5U2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9uUGF0aCA9IHRoaXMuYWN0aXZlT3B0aW9uUGF0aCgpO1xuICAgICAgICAgICAgaWYgKGlzTm90RW1wdHkoYWN0aXZlT3B0aW9uUGF0aCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlWaWV3Q2hpbGQuYWxpZ25PdmVybGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBxdWVyeTogYW55O1xuICAgIHF1ZXJ5TWF0Y2hlcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gICAgbW9iaWxlQWN0aXZlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIG9uT3B0aW9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luYWxFdmVudCwgdmFsdWUsIGlzRm9jdXMsIGlzSGlkZSB9ID0gZXZlbnQ7XG4gICAgICAgIGlmIChpc0VtcHR5KHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHsgaW5kZXgsIGxldmVsLCBwYXJlbnRLZXksIGNoaWxkcmVuLCBrZXkgfSA9IHZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwZWQgPSBpc05vdEVtcHR5KGNoaWxkcmVuKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmlzU2VsZWN0ZWQodmFsdWUpO1xuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvblBhdGggPSB0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKS5maWx0ZXIoKHApID0+IGtleSAhPT0gcC5rZXkgJiYga2V5LnN0YXJ0c1dpdGgocC5rZXkpKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uUGF0aC5zZXQoWy4uLmFjdGl2ZU9wdGlvblBhdGhdKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZm8uc2V0KHsgaW5kZXgsIGxldmVsLCBwYXJlbnRLZXkgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25QYXRoID0gdGhpcy5hY3RpdmVPcHRpb25QYXRoKCkuZmlsdGVyKChwKSA9PiBwLnBhcmVudEtleSAhPT0gcGFyZW50S2V5KTtcblxuICAgICAgICAgICAgYWN0aXZlT3B0aW9uUGF0aC5wdXNoKHZhbHVlKTtcblxuICAgICAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5mby5zZXQoeyBpbmRleCwgbGV2ZWwsIHBhcmVudEtleSB9KTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uUGF0aC5zZXQoYWN0aXZlT3B0aW9uUGF0aCk7XG5cbiAgICAgICAgICAgIGdyb3VwZWQgPyB0aGlzLm9uT3B0aW9uR3JvdXBTZWxlY3QoeyBvcmlnaW5hbEV2ZW50LCB2YWx1ZSwgaXNGb2N1czogZmFsc2UgfSkgOiB0aGlzLm9uT3B0aW9uU2VsZWN0KHsgb3JpZ2luYWxFdmVudCwgdmFsdWUsIGlzRm9jdXMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25zdCBhY3RpdmVPcHRpb25QYXRoID0gdGhpcy5hY3RpdmVPcHRpb25QYXRoKCkuZmlsdGVyKChwKSA9PiBwLnBhcmVudEtleSAhPT0gcGFyZW50S2V5KTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gYWN0aXZlT3B0aW9uUGF0aC5wdXNoKHZhbHVlKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gdGhpcy5mb2N1c2VkT3B0aW9uSW5mby5zZXQoeyBpbmRleCwgbGV2ZWwsIHBhcmVudEtleSB9KTtcbiAgICAgICAgLy8gdGhpcy5hY3RpdmVPcHRpb25QYXRoLnNldChhY3RpdmVPcHRpb25QYXRoKTtcblxuICAgICAgICAvLyBncm91cGVkXG4gICAgICAgIC8vICAgICA/IHRoaXMub25PcHRpb25Hcm91cFNlbGVjdCh7IG9yaWdpbmFsRXZlbnQsIHZhbHVlLCBpc0ZvY3VzOiBmYWxzZSB9KVxuICAgICAgICAvLyAgICAgOiB0aGlzLm9uT3B0aW9uU2VsZWN0KHsgb3JpZ2luYWxFdmVudCwgdmFsdWUsIGlzRm9jdXMgfSk7XG4gICAgICAgIGlzRm9jdXMgJiYgZm9jdXModGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmlkID0gdGhpcy5pZCB8fCB1dWlkKCdwbl9pZF8nKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlTW9kZWwoKTtcbiAgICAgICAgdGhpcy5iaW5kTWF0Y2hNZWRpYUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgYmluZE1hdGNoTWVkaWFMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hdGNoTWVkaWFMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uc3Qgd2luZG93OiBXaW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgICAgICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubWF0Y2hNZWRpYSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEoYChtYXgtd2lkdGg6ICR7dGhpcy5icmVha3BvaW50fSlgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeU1hdGNoZXMuc2V0KHF1ZXJ5Py5tYXRjaGVzKTtcblxuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TWF0Y2hlcy5zZXQocXVlcnk/Lm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vYmlsZUFjdGl2ZS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuYmluZE1hdGNoTWVkaWFMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uT3ZlcmxheUFuaW1hdGlvbkRvbmUoZXZlbnQ6IGFueSkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LnRvU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3ZvaWQnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWwodmFsdWUpO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uTW9kZWxUb3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZSh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHZhbDtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZE1hdGNoTWVkaWFMaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDYXNjYWRlU2VsZWN0LCBTaGFyZWRNb2R1bGVdLFxuICAgIGV4cG9ydHM6IFtDYXNjYWRlU2VsZWN0LCBTaGFyZWRNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIENhc2NhZGVTZWxlY3RNb2R1bGUge31cbiJdfQ==
|
1840
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzY2FkZXNlbGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jYXNjYWRlc2VsZWN0L2Nhc2NhZGVzZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsWUFBWSxFQUNaLE1BQU0sRUFFTixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsUUFBUSxFQUNSLGVBQWUsRUFFZixNQUFNLEVBQ04sTUFBTSxFQUdOLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSwwQkFBMEIsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFPLE9BQU8sRUFBa0MsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8s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WUFNRSxjQUFjO2tCQUFyQyxZQUFZO21CQUFDLFFBQVE7WUFNRSxjQUFjO2tCQUFyQyxZQUFZO21CQUFDLFFBQVE7WUFNTyxXQUFXO2tCQUF2QyxZQUFZO21CQUFDLGFBQWE7WUFNRSxXQUFXO2tCQUF2QyxZQUFZO21CQUFDLGFBQWE7WUFNTSxTQUFTO2tCQUF6QyxZQUFZO21CQUFDLGlCQUFpQjtZQU1KLFNBQVM7a0JBQW5DLFlBQVk7bUJBQUMsV0FBVzs7a0ZBM1VoQixhQUFhO0FBMHBDMUIsTUFBTSxPQUFPLG1CQUFtQjs2R0FBbkIsbUJBQW1COzREQUFuQixtQkFBbUI7Z0VBSGxCLGFBQWEsRUFBRSxZQUFZLEVBQ1osWUFBWTs7aUZBRTVCLG1CQUFtQjtjQUovQixRQUFRO2VBQUM7Z0JBQ04sT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQztnQkFDdEMsT0FBTyxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQzthQUN6Qzs7d0ZBQ1ksbUJBQW1CLGNBMXBDbkIsYUFBYSxFQXVwQ0csWUFBWSxhQXZwQzVCLGFBQWEsRUF3cENHLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIHNpZ25hbCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgY2FsY3VsYXRlU2Nyb2xsYmFyV2lkdGgsIGVxdWFscywgZmluZExhc3RJbmRleCwgZmluZFNpbmdsZSwgZm9jdXMsIGdldEhpZGRlbkVsZW1lbnRPdXRlcldpZHRoLCBnZXRPZmZzZXQsIGdldE91dGVyV2lkdGgsIGdldFZpZXdwb3J0LCBpc0VtcHR5LCBpc05vdEVtcHR5LCBpc1ByaW50YWJsZUNoYXJhY3RlciwgcmVzb2x2ZUZpZWxkRGF0YSwgdXVpZCB9IGZyb20gJ0BwcmltZXVpeC91dGlscyc7XG5pbXBvcnQgeyBPdmVybGF5T3B0aW9ucywgT3ZlcmxheVNlcnZpY2UsIFNoYXJlZE1vZHVsZSwgVHJhbnNsYXRpb25LZXlzIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQXV0b0ZvY3VzIH0gZnJvbSAncHJpbWVuZy9hdXRvZm9jdXMnO1xuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJ3ByaW1lbmcvYmFzZWNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbmdsZVJpZ2h0SWNvbiwgQ2hldnJvbkRvd25JY29uLCBUaW1lc0ljb24gfSBmcm9tICdwcmltZW5nL2ljb25zJztcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICdwcmltZW5nL292ZXJsYXknO1xuaW1wb3J0IHsgUmlwcGxlIH0gZnJvbSAncHJpbWVuZy9yaXBwbGUnO1xuaW1wb3J0IHsgTnVsbGFibGUsIFZvaWRMaXN0ZW5lciB9IGZyb20gJ3ByaW1lbmcvdHMtaGVscGVycyc7XG5pbXBvcnQgeyBDYXNjYWRlU2VsZWN0QmVmb3JlSGlkZUV2ZW50LCBDYXNjYWRlU2VsZWN0QmVmb3JlU2hvd0V2ZW50LCBDYXNjYWRlU2VsZWN0Q2hhbmdlRXZlbnQsIENhc2NhZGVTZWxlY3RIaWRlRXZlbnQsIENhc2NhZGVTZWxlY3RTaG93RXZlbnQgfSBmcm9tICcuL2Nhc2NhZGVzZWxlY3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IENhc2NhZGVTZWxlY3RTdHlsZSB9IGZyb20gJy4vc3R5bGUvY2FzY2FkZXNlbGVjdHN0eWxlJztcblxuZXhwb3J0IGNvbnN0IENBU0NBREVTRUxFQ1RfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDYXNjYWRlU2VsZWN0KSxcbiAgICBtdWx0aTogdHJ1ZVxufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwLWNhc2NhZGVTZWxlY3RTdWIsIHAtY2FzY2FkZXNlbGVjdC1zdWInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgT3ZlcmxheSwgUmlwcGxlLCBBdXRvRm9jdXMsIEFuZ2xlUmlnaHRJY29uLCBTaGFyZWRNb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDx1bCBjbGFzcz1cInAtY2FzY2FkZXNlbGVjdC1saXN0XCIgW2F0dHIucm9sZV09XCJyb2xlXCIgYXJpYS1vcmllbnRhdGlvbj1cImhvcml6b250YWxcIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwibGV2ZWwgPT09IDAgPyAnbGlzdCcgOiAnc3VibGlzdCdcIiBbYXR0ci5hcmlhLWxhYmVsXT1cImxpc3RMYWJlbFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1wcm9jZXNzZWRPcHRpb24gW25nRm9yT2ZdPVwib3B0aW9uc1wiIGxldC1pPVwiaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SXRlbUNsYXNzKHByb2Nlc3NlZE9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwidHJlZWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxldmVsXT1cImxldmVsICsgMVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2V0c2l6ZV09XCJvcHRpb25zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInaXRlbSdcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiZ2V0T3B0aW9uSWQocHJvY2Vzc2VkT3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0T3B0aW9uTGFiZWxUb1JlbmRlcihwcm9jZXNzZWRPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc09wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbikgPyB1bmRlZmluZWQgOiBpc09wdGlvblNlbGVjdGVkKHByb2Nlc3NlZE9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXBvc2luc2V0XT1cImkgKyAxXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1jYXNjYWRlc2VsZWN0LW9wdGlvbi1jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk9wdGlvbkNsaWNrKCRldmVudCwgcHJvY2Vzc2VkT3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbk9wdGlvbk1vdXNlRW50ZXIoJGV2ZW50LCBwcm9jZXNzZWRPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZW1vdmUpPVwib25PcHRpb25Nb3VzZU1vdmUoJGV2ZW50LCBwcm9jZXNzZWRPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInY29udGVudCdcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uVGVtcGxhdGU7IGVsc2UgZGVmYXVsdE9wdGlvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm9wdGlvblRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcHJvY2Vzc2VkT3B0aW9uPy5vcHRpb24gfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPcHRpb25UZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtY2FzY2FkZXNlbGVjdC1vcHRpb24tdGV4dFwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIndGV4dCdcIj57eyBnZXRPcHRpb25MYWJlbFRvUmVuZGVyKHByb2Nlc3NlZE9wdGlvbikgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWNhc2NhZGVzZWxlY3QtZ3JvdXAtaWNvblwiICpuZ0lmPVwiaXNPcHRpb25Hcm91cChwcm9jZXNzZWRPcHRpb24pXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidncm91cEljb24nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPEFuZ2xlUmlnaHRJY29uICpuZ0lmPVwiIWdyb3VwaWNvblwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBpY29uXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwLWNhc2NhZGVzZWxlY3Qtc3ViXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzT3B0aW9uR3JvdXAocHJvY2Vzc2VkT3B0aW9uKSAmJiBpc09wdGlvbkFjdGl2ZShwcm9jZXNzZWRPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb2xlXT1cIidncm91cCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWNhc2NhZGVzZWxlY3QtbGlzdCBwLWNhc2NhZGVzZWxlY3Qtb3ZlcmxheSBwLWNhc2NhZGVzZWxlY3Qtb3B0aW9uLWxpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdElkXT1cInNlbGVjdElkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb2N1c2VkT3B0aW9uSWRdPVwiZm9jdXNlZE9wdGlvbklkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVPcHRpb25QYXRoXT1cImFjdGl2ZU9wdGlvblBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZ2V0T3B0aW9uR3JvdXBDaGlsZHJlbihwcm9jZXNzZWRPcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJvcHRpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwib3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xldmVsXT1cImxldmVsICsgMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkZvY3VzQ2hhbmdlKT1cIm9uRm9jdXNDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkZvY3VzRW50ZXJDaGFuZ2UpPVwib25Gb2N1c0VudGVyQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uR3JvdXBMYWJlbF09XCJvcHRpb25Hcm91cExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Hcm91cENoaWxkcmVuXT1cIm9wdGlvbkdyb3VwQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2RpcnR5XT1cImRpcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25UZW1wbGF0ZV09XCJvcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWNhc2NhZGVzZWxlY3Qtc3ViPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3VsPlxuICAgIGAsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDYXNjYWRlU2VsZWN0U3ViIGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgcm9sZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgc2VsZWN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpIGFjdGl2ZU9wdGlvblBhdGg6IGFueVtdO1xuXG4gICAgQElucHV0KCkgb3B0aW9uRGlzYWJsZWQ6IGFueVtdO1xuXG4gICAgQElucHV0KCkgZm9jdXNlZE9wdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBvcHRpb25zOiBhbnlbXSB8IHN0cmluZ1tdIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIEBJbnB1dCgpIG9wdGlvbkdyb3VwQ2hpbGRyZW46IHN0cmluZ1tdIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIEBJbnB1dCgpIG9wdGlvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIEBJbnB1dCgpIGdyb3VwaWNvbjogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBsZXZlbDogbnVtYmVyID0gMDtcblxuICAgIEBJbnB1dCgpIG9wdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBASW5wdXQoKSBvcHRpb25WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KCkgb3B0aW9uR3JvdXBMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpcnR5OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJvb3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIG9uRm9jdXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIG9uRm9jdXNFbnRlckNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBnZXQgbGlzdExhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuQVJJQSlbJ2xpc3RMYWJlbCddO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBjYXNjYWRlc2VsZWN0OiBDYXNjYWRlU2VsZWN0KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk9wdGlvbkNsaWNrKGV2ZW50LCBwcm9jZXNzZWRPcHRpb246IGFueSkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnQsXG4gICAgICAgICAgICBwcm9jZXNzZWRPcHRpb24sXG4gICAgICAgICAgICBpc0ZvY3VzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uT3B0aW9uTW91c2VFbnRlcihldmVudCwgcHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIHRoaXMub25Gb2N1c0VudGVyQ2hhbmdlLmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgcHJvY2Vzc2VkT3B0aW9uIH0pO1xuICAgIH1cblxuICAgIG9uT3B0aW9uTW91c2VNb3ZlKGV2ZW50LCBwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgdGhpcy5vbkZvY3VzQ2hhbmdlLmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgcHJvY2Vzc2VkT3B0aW9uIH0pO1xuICAgIH1cblxuICAgIGdldE9wdGlvbklkKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3RJZH1fJHtwcm9jZXNzZWRPcHRpb24ua2V5fWA7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWwocHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbkxhYmVsID8gcmVzb2x2ZUZpZWxkRGF0YShwcm9jZXNzZWRPcHRpb24ub3B0aW9uLCB0aGlzLm9wdGlvbkxhYmVsKSA6IHByb2Nlc3NlZE9wdGlvbi5vcHRpb247XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUocHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlID8gcmVzb2x2ZUZpZWxkRGF0YShwcm9jZXNzZWRPcHRpb24ub3B0aW9uLCB0aGlzLm9wdGlvblZhbHVlKSA6IHByb2Nlc3NlZE9wdGlvbi5vcHRpb247XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uTGFiZWxUb1JlbmRlcihwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPcHRpb25Hcm91cChwcm9jZXNzZWRPcHRpb24pID8gdGhpcy5nZXRPcHRpb25Hcm91cExhYmVsKHByb2Nlc3NlZE9wdGlvbikgOiB0aGlzLmdldE9wdGlvbkxhYmVsKHByb2Nlc3NlZE9wdGlvbik7XG4gICAgfVxuXG4gICAgaXNPcHRpb25EaXNhYmxlZChwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uRGlzYWJsZWQgPyByZXNvbHZlRmllbGREYXRhKHByb2Nlc3NlZE9wdGlvbi5vcHRpb24sIHRoaXMub3B0aW9uRGlzYWJsZWQpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uR3JvdXBMYWJlbChwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uR3JvdXBMYWJlbCA/IHJlc29sdmVGaWVsZERhdGEocHJvY2Vzc2VkT3B0aW9uLm9wdGlvbiwgdGhpcy5vcHRpb25Hcm91cExhYmVsKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uR3JvdXBDaGlsZHJlbihwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZE9wdGlvbi5jaGlsZHJlbjtcbiAgICB9XG5cbiAgICBpc09wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gaXNOb3RFbXB0eShwcm9jZXNzZWRPcHRpb24uY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIGlzT3B0aW9uU2VsZWN0ZWQocHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBlcXVhbHModGhpcy5jYXNjYWRlc2VsZWN0Py5tb2RlbFZhbHVlKCksIHByb2Nlc3NlZE9wdGlvbj8ub3B0aW9uKTtcbiAgICB9XG5cbiAgICBpc09wdGlvbkFjdGl2ZShwcm9jZXNzZWRPcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlT3B0aW9uUGF0aC5zb21lKChwYXRoKSA9PiBwYXRoLmtleSA9PT0gcHJvY2Vzc2VkT3B0aW9uLmtleSk7XG4gICAgfVxuXG4gICAgaXNPcHRpb25Gb2N1c2VkKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c2VkT3B0aW9uSWQgPT09IHRoaXMuZ2V0T3B0aW9uSWQocHJvY2Vzc2VkT3B0aW9uKTtcbiAgICB9XG5cbiAgICBnZXRJdGVtQ2xhc3Mob3B0aW9uOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3AtY2FzY2FkZXNlbGVjdC1vcHRpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ3AtY2FzY2FkZXNlbGVjdC1vcHRpb24tZ3JvdXAnOiB0aGlzLmlzT3B0aW9uR3JvdXAob3B0aW9uKSxcbiAgICAgICAgICAgICdwLWNhc2NhZGVzZWxlY3Qtb3B0aW9uLWFjdGl2ZSc6IHRoaXMuaXNPcHRpb25BY3RpdmUob3B0aW9uKSxcbiAgICAgICAgICAgICdwLWNhc2NhZGVzZWxlY3Qtb3B0aW9uLXNlbGVjdGVkJzogdGhpcy5pc09wdGlvblNlbGVjdGVkKG9wdGlvbiksXG4gICAgICAgICAgICAncC1mb2N1cyc6IHRoaXMuaXNPcHRpb25Gb2N1c2VkKG9wdGlvbiksXG4gICAgICAgICAgICAncC1kaXNhYmxlZCc6IHRoaXMuaXNPcHRpb25EaXNhYmxlZChvcHRpb24pXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgY29uc3QgY29udGFpbmVyT2Zmc2V0ID0gPGFueT5nZXRPZmZzZXQocGFyZW50SXRlbSk7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gPGFueT5nZXRWaWV3cG9ydCgpO1xuICAgICAgICBjb25zdCBzdWJsaXN0V2lkdGggPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0ub2Zmc2V0UGFyZW50ID8gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLm9mZnNldFdpZHRoIDogZ2V0SGlkZGVuRWxlbWVudE91dGVyV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgY29uc3QgaXRlbU91dGVyV2lkdGggPSA8YW55PmdldE91dGVyV2lkdGgocGFyZW50SXRlbS5jaGlsZHJlblswXSk7XG4gICAgICAgIGlmIChwYXJzZUludChjb250YWluZXJPZmZzZXQubGVmdCwgMTApICsgaXRlbU91dGVyV2lkdGggKyBzdWJsaXN0V2lkdGggPiB2aWV3cG9ydC53aWR0aCAtIGNhbGN1bGF0ZVNjcm9sbGJhcldpZHRoKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXS5zdHlsZS5sZWZ0ID0gJy0yMDAlJztcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQ2FzY2FkZVNlbGVjdCBpcyBhIGZvcm0gY29tcG9uZW50IHRvIHNlbGVjdCBhIHZhbHVlIGZyb20gYSBuZXN0ZWQgc3RydWN0dXJlIG9mIG9wdGlvbnMuXG4gKiBAZ3JvdXAgQ29tcG9uZW50c1xuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3AtY2FzY2FkZVNlbGVjdCwgcC1jYXNjYWRlc2VsZWN0LCBwLWNhc2NhZGUtc2VsZWN0JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE92ZXJsYXksIFJpcHBsZSwgQXV0b0ZvY3VzLCBDYXNjYWRlU2VsZWN0U3ViLCBDaGV2cm9uRG93bkljb24sIEFuZ2xlUmlnaHRJY29uLCBUaW1lc0ljb24sIFNoYXJlZE1vZHVsZV0sXG4gICAgdGVtcGxhdGU6IGAgPGRpdiAjY29udGFpbmVyIFtuZ0NsYXNzXT1cImNvbnRhaW5lckNsYXNzXCIgW2NsYXNzXT1cInN0eWxlQ2xhc3NcIiBbbmdTdHlsZV09XCJzdHlsZVwiIChjbGljayk9XCJvbkNvbnRhaW5lckNsaWNrKCRldmVudClcIiBbYXR0ci5kYXRhLXBjLW5hbWVdPVwiJ2Nhc2NhZGVzZWxlY3QnXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidyb290J1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1oaWRkZW4tYWNjZXNzaWJsZVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInaGlkZGVuSW5wdXRXcmFwcGVyJ1wiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI2ZvY3VzSW5wdXRcbiAgICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiIWRpc2FibGVkID8gdGFiaW5kZXggOiAtMVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRyZWVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwib3ZlcmxheVZpc2libGUgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwib3ZlcmxheVZpc2libGUgPyBpZCArICdfdHJlZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiZm9jdXNlZCA/IGZvY3VzZWRPcHRpb25JZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uSW5wdXRGb2N1cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvbklucHV0Qmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcEF1dG9Gb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImxhYmVsQ2xhc3NcIiBbYXR0ci5kYXRhLXBjLXNlY3Rpb25dPVwiJ2xhYmVsJ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZhbHVlVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFZhbHVlVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmFsdWVUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHZhbHVlLCBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRWYWx1ZVRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIHt7IGxhYmVsKCkgfX1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsbGVkICYmICFkaXNhYmxlZCAmJiBzaG93Q2xlYXJcIj5cbiAgICAgICAgICAgIDxUaW1lc0ljb24gKm5nSWY9XCIhY2xlYXJpY29uXCIgY2xhc3M9XCJwLWNhc2NhZGVzZWxlY3QtY2xlYXItaWNvblwiIChjbGljayk9XCJjbGVhcigkZXZlbnQpXCIgW2F0dHIuZGF0YS1wYy1zZWN0aW9uXT1cIidjbGVhcmljb24nXCIgW2F0dHIuYXJpYS1oaWRkZW5dPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNsZWFyaWNvblwiIGNsYXNzPVwicC1jYXNjYWRlc2VsZWN0LWNsZWFyLWljb25cIiAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInY2xlYXJpY29uJ1wiIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjbGVhcmljb25cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1jYXNjYWRlc2VsZWN0LWRyb3Bkb3duXCIgcm9sZT1cImJ1dHRvblwiIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCIgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJvdmVybGF5VmlzaWJsZSA/PyBmYWxzZVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInZHJvcGRvd25JY29uJ1wiIFthdHRyLmFyaWEtaGlkZGVuXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nOyBlbHNlIGVsc2VCbG9ja1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5naWNvblwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ2ljb25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdpY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibG9hZGluZ0ljb25cIiBbbmdDbGFzc109XCIncC1jYXNjYWRlc2VsZWN0LWxvYWRpbmctaWNvbiBwaS1zcGluICcgKyBsb2FkaW5nSWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbG9hZGluZ0ljb25cIiBbY2xhc3NdPVwiJ3AtY2FzY2FkZXNlbGVjdC1sb2FkaW5nLWljb24gcGkgcGktc3Bpbm5lciBwaS1zcGluJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlQmxvY2s+XG4gICAgICAgICAgICAgICAgPENoZXZyb25Eb3duSWNvbiAqbmdJZj1cIiF0cmlnZ2VyaWNvblwiIFtzdHlsZUNsYXNzXT1cIidwLWNhc2NhZGVzZWxlY3QtZHJvcGRvd24taWNvbidcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidHJpZ2dlcmljb25cIiBjbGFzcz1cInAtY2FzY2FkZXNlbGVjdC1kcm9wZG93bi1pY29uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRyaWdnZXJpY29uXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gcm9sZT1cInN0YXR1c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGNsYXNzPVwicC1oaWRkZW4tYWNjZXNzaWJsZVwiPlxuICAgICAgICAgICAge3sgc2VhcmNoUmVzdWx0TWVzc2FnZVRleHQgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8cC1vdmVybGF5XG4gICAgICAgICAgICAjb3ZlcmxheVxuICAgICAgICAgICAgWyh2aXNpYmxlKV09XCJvdmVybGF5VmlzaWJsZVwiXG4gICAgICAgICAgICBbb3B0aW9uc109XCJvdmVybGF5T3B0aW9uc1wiXG4gICAgICAgICAgICBbdGFyZ2V0XT1cIidAcGFyZW50J1wiXG4gICAgICAgICAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIlxuICAgICAgICAgICAgW3Nob3dUcmFuc2l0aW9uT3B0aW9uc109XCJzaG93VHJhbnNpdGlvbk9wdGlvbnNcIlxuICAgICAgICAgICAgW2hpZGVUcmFuc2l0aW9uT3B0aW9uc109XCJoaWRlVHJhbnNpdGlvbk9wdGlvbnNcIlxuICAgICAgICAgICAgKG9uQW5pbWF0aW9uRG9uZSk9XCJvbk92ZXJsYXlBbmltYXRpb25Eb25lKCRldmVudClcIlxuICAgICAgICAgICAgKG9uQmVmb3JlU2hvdyk9XCJvbkJlZm9yZVNob3cuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvblNob3cpPVwic2hvdygkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbkJlZm9yZUhpZGUpPVwib25CZWZvcmVIaWRlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25IaWRlKT1cImhpZGUoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2ICNwYW5lbCBbbmdDbGFzc109XCJ7ICdwLWNhc2NhZGVzZWxlY3Qtb3ZlcmxheSBwLWNvbXBvbmVudCc6IHRydWUsICdwLWNhc2NhZGVzZWxlY3QtbW9iaWxlLWFjdGl2ZSc6IHF1ZXJ5TWF0Y2hlcygpIH1cIiBbY2xhc3NdPVwicGFuZWxTdHlsZUNsYXNzXCIgW25nU3R5bGVdPVwicGFuZWxTdHlsZVwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCIncGFuZWwnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtY2FzY2FkZXNlbGVjdC1saXN0LWNvbnRhaW5lclwiIFthdHRyLmRhdGEtcGMtc2VjdGlvbl09XCInd3JhcHBlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNhc2NhZGVzZWxlY3Qtc3ViXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicHJvY2Vzc2VkT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdElkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9jdXNlZE9wdGlvbklkXT1cImZvY3VzZWQgPyBmb2N1c2VkT3B0aW9uSWQgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVPcHRpb25QYXRoXT1cImFjdGl2ZU9wdGlvblBhdGgoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXT1cIm9wdGlvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwib3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsZXZlbF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uVGVtcGxhdGVdPVwib3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cGljb25dPVwiZ3JvdXBpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uR3JvdXBMYWJlbF09XCJvcHRpb25Hcm91cExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uR3JvdXBDaGlsZHJlbl09XCJvcHRpb25Hcm91cENoaWxkcmVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uRGlzYWJsZWRdPVwib3B0aW9uRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb290XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbk9wdGlvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkZvY3VzQ2hhbmdlKT1cIm9uT3B0aW9uTW91c2VNb3ZlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbkZvY3VzRW50ZXJDaGFuZ2UpPVwib25PcHRpb25Nb3VzZUVudGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXJ0eV09XCJkaXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvbGVdPVwiJ3RyZWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcC1jYXNjYWRlc2VsZWN0LXN1Yj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHJvbGU9XCJzdGF0dXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBjbGFzcz1cInAtaGlkZGVuLWFjY2Vzc2libGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkTWVzc2FnZVRleHQgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3Atb3ZlcmxheT5cbiAgICA8L2Rpdj5gLFxuICAgIHByb3ZpZGVyczogW0NBU0NBREVTRUxFQ1RfVkFMVUVfQUNDRVNTT1IsIENhc2NhZGVTZWxlY3RTdHlsZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDYXNjYWRlU2VsZWN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqXG4gICAgICogVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbXBvbmVudFxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlIHNlYXJjaCBpcyBhY3RpdmUuIERlZmF1bHRzIHRvIGdsb2JhbCB2YWx1ZSBpbiBpMThuIHRyYW5zbGF0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlZmF1bHRWYWx1ZSAnezB9IHJlc3VsdHMgYXJlIGF2YWlsYWJsZSdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWFyY2hNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gdGhlcmUgaXMgbm8gZGF0YS4gRGVmYXVsdHMgdG8gZ2xvYmFsIHZhbHVlIGluIGkxOG4gdHJhbnNsYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXB0eU1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBUZXh0IHRvIGJlIGRpc3BsYXllZCBpbiBoaWRkZW4gYWNjZXNzaWJsZSBmaWVsZCB3aGVuIG9wdGlvbnMgYXJlIHNlbGVjdGVkLiBEZWZhdWx0cyB0byBnbG9iYWwgdmFsdWUgaW4gaTE4biB0cmFuc2xhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZWZhdWx0VmFsdWUgJ3swfSBpdGVtcyBzZWxlY3RlZCdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWxlY3Rpb25NZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVGV4dCB0byBkaXNwbGF5IHdoZW4gZmlsdGVyaW5nIGRvZXMgbm90IHJldHVybiBhbnkgcmVzdWx0cy4gRGVmYXVsdHMgdG8gdmFsdWUgZnJvbSBQcmltZU5HIGxvY2FsZSBjb25maWd1cmF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZWZhdWx0VmFsdWUgJ05vIGF2YWlsYWJsZSBvcHRpb25zJ1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGVtcHR5U2VhcmNoTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRleHQgdG8gZGlzcGxheSB3aGVuIGZpbHRlcmluZyBkb2VzIG5vdCByZXR1cm4gYW55IHJlc3VsdHMuIERlZmF1bHRzIHRvIGdsb2JhbCB2YWx1ZSBpbiBpMThuIHRyYW5zbGF0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlZmF1bHRWYWx1ZSAnTm8gc2VsZWN0ZWQgaXRlbSdcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlbXB0eVNlbGVjdGlvbk1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBMb2NhbGUgdG8gdXNlIGluIHNlYXJjaGluZy4gVGhlIGRlZmF1bHQgbG9jYWxlIGlzIHRoZSBob3N0IGVudmlyb25tZW50J3MgY3VycmVudCBsb2NhbGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2VhcmNoTG9jYWxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZGlzYWJsZWQgZmllbGQgb2YgYW4gb3B0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvbkRpc2FibGVkOiBhbnk7XG4gICAgLyoqXG4gICAgICogRmllbGRzIHVzZWQgd2hlbiBmaWx0ZXJpbmcgdGhlIG9wdGlvbnMsIGRlZmF1bHRzIHRvIG9wdGlvbkxhYmVsLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmb2N1c09uSG92ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIG9wdGlvbiB3aWxsIGJlIHNlbGVjdGVkIG9uIGZvY3VzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzZWxlY3RPbkZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBmb2N1cyBvbiB0aGUgZmlyc3QgdmlzaWJsZSBvciBzZWxlY3RlZCBlbGVtZW50IHdoZW4gdGhlIG92ZXJsYXkgcGFuZWwgaXMgc2hvd24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9PcHRpb25Gb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc3R5bGVDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIElubGluZSBzdHlsZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIHNlbGVjdGl0ZW1zIHRvIGRpc3BsYXkgYXMgdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvbnM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFByb3BlcnR5IG5hbWUgb3IgZ2V0dGVyIGZ1bmN0aW9uIHRvIHVzZSBhcyB0aGUgbGFiZWwgb2YgYW4gb3B0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvbkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogUHJvcGVydHkgbmFtZSBvciBnZXR0ZXIgZnVuY3Rpb24gdG8gdXNlIGFzIHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24sIGRlZmF1bHRzIHRvIHRoZSBvcHRpb24gaXRzZWxmIHdoZW4gbm90IGRlZmluZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3B0aW9uVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSBuYW1lIG9yIGdldHRlciBmdW5jdGlvbiB0byB1c2UgYXMgdGhlIGxhYmVsIG9mIGFuIG9wdGlvbiBncm91cC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBvcHRpb25Hcm91cExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogUHJvcGVydHkgbmFtZSBvciBnZXR0ZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGl0ZW1zIG9mIGEgZ3JvdXAuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3B0aW9uR3JvdXBDaGlsZHJlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERlZmF1bHQgdGV4dCB0byBkaXNwbGF5IHdoZW4gbm8gb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU2VsZWN0ZWQgdmFsdWUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBBIHByb3BlcnR5IHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGFuIG9wdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkYXRhS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSWRlbnRpZmllciBvZiB0aGUgdW5kZXJseWluZyBpbnB1dCBlbGVtZW50LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGlucHV0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc2l6ZTogJ2xhcmdlJyB8ICdzbWFsbCc7XG4gICAgLyoqXG4gICAgICogSW5kZXggb2YgdGhlIGVsZW1lbnQgaW4gdGFiYmluZyBvcmRlci5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB0YWJpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkID0gMDtcbiAgICAvKipcbiAgICAgKiBFc3RhYmxpc2hlcyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGNvbXBvbmVudCBhbmQgbGFiZWwocykgd2hlcmUgaXRzIHZhbHVlIHNob3VsZCBiZSBvbmUgb3IgbW9yZSBlbGVtZW50IElEcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhcmlhTGFiZWxsZWRCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIExhYmVsIG9mIHRoZSBpbnB1dCBmb3IgYWNjZXNzaWJpbGl0eS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpbnB1dExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIHN0cmluZyB0aGF0IGxhYmVscyB0aGUgaW5wdXQgZm9yIGFjY2Vzc2liaWxpdHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYXJpYUxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSWQgb2YgdGhlIGVsZW1lbnQgb3IgXCJib2R5XCIgZm9yIGRvY3VtZW50IHdoZXJlIHRoZSBvdmVybGF5IHNob3VsZCBiZSBhcHBlbmRlZCB0by5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBhcHBlbmRUbzogSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmIHwgVGVtcGxhdGVSZWY8YW55PiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgfCBhbnk7XG4gICAgLyoqXG4gICAgICogV2hlbiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hlbiBlbmFibGVkLCBhIGNsZWFyIGljb24gaXMgZGlzcGxheWVkIHRvIGNsZWFyIHRoZSB2YWx1ZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0NsZWFyOiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIG92ZXJsYXkgcGFuZWwuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcGFuZWxTdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBvdmVybGF5IHBhbmVsLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHBhbmVsU3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB1c2Ugb3ZlcmxheSBBUEkgZmVhdHVyZS4gVGhlIHByb3BlcnRpZXMgb2Ygb3ZlcmxheSBBUEkgY2FuIGJlIHVzZWQgbGlrZSBhbiBvYmplY3QgaW4gaXQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgb3ZlcmxheU9wdGlvbnM6IE92ZXJsYXlPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZW4gcHJlc2VudCwgaXQgc3BlY2lmaWVzIHRoYXQgdGhlIGNvbXBvbmVudCBzaG91bGQgYXV0b21hdGljYWxseSBnZXQgZm9jdXMgb24gbG9hZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b2ZvY3VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb24gb3B0aW9ucyBvZiB0aGUgc2hvdyBhbmltYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlcHJlY2F0ZWQgZGVwcmVjYXRlZCBzaW5jZSB2MTQuMi4wLCB1c2Ugb3ZlcmxheU9wdGlvbnMgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgc2hvd1RyYW5zaXRpb25PcHRpb25zKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93VHJhbnNpdGlvbk9wdGlvbnM7XG4gICAgfVxuICAgIHNldCBzaG93VHJhbnNpdGlvbk9wdGlvbnModmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc2hvd1RyYW5zaXRpb25PcHRpb25zID0gdmFsO1xuICAgICAgICBjb25zb2xlLmxvZygnVGhlIHNob3dUcmFuc2l0aW9uT3B0aW9ucyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIHNpbmNlIHYxNC4yLjAsIHVzZSBvdmVybGF5T3B0aW9ucyBwcm9wZXJ0eSBpbnN0ZWFkLicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGlucHV0IHZhcmlhbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB2YXJpYW50OiAnZmlsbGVkJyB8ICdvdXRsaW5lZCcgPSAnb3V0bGluZWQnO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGRyb3Bkb3duIGlzIGluIGxvYWRpbmcgc3RhdGUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGxvYWRpbmc6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBJY29uIHRvIGRpc3BsYXkgaW4gbG9hZGluZyBzdGF0ZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsb2FkaW5nSWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRyYW5zaXRpb24gb3B0aW9ucyBvZiB0aGUgaGlkZSBhbmltYXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlcHJlY2F0ZWQgZGVwcmVjYXRlZCBzaW5jZSB2MTQuMi4wLCB1c2Ugb3ZlcmxheU9wdGlvbnMgcHJvcGVydHkgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgaGlkZVRyYW5zaXRpb25PcHRpb25zKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlVHJhbnNpdGlvbk9wdGlvbnM7XG4gICAgfVxuICAgIHNldCBoaWRlVHJhbnNpdGlvbk9wdGlvbnModmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faGlkZVRyYW5zaXRpb25PcHRpb25zID0gdmFsO1xuICAgICAgICBjb25zb2xlLmxvZygnVGhlIGhpZGVUcmFuc2l0aW9uT3B0aW9ucyBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkIHNpbmNlIHYxNC4yLjAsIHVzZSBvdmVybGF5T3B0aW9ucyBwcm9wZXJ0eSBpbnN0ZWFkLicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGFucyAxMDAlIHdpZHRoIG9mIHRoZSBjb250YWluZXIgd2hlbiBlbmFibGVkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBmbHVpZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFRoZSBicmVha3BvaW50IHRvIGRlZmluZSB0aGUgbWF4aW11bSB3aWR0aCBib3VuZGFyeS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBicmVha3BvaW50OiBzdHJpbmcgPSAnOTYwcHgnO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiB2YWx1ZSBjaGFuZ2UuXG4gICAgICogQHBhcmFtIHtDYXNjYWRlU2VsZWN0Q2hhbmdlRXZlbnR9IGV2ZW50IC0gQ3VzdG9tIGNoYW5nZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxDYXNjYWRlU2VsZWN0Q2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXNjYWRlU2VsZWN0Q2hhbmdlRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSBncm91cCBjaGFuZ2VzLlxuICAgICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IC0gQnJvd3NlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Hcm91cENoYW5nZTogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIG92ZXJsYXkgaXMgc2hvd24uXG4gICAgICogQHBhcmFtIHtDYXNjYWRlU2VsZWN0U2hvd0V2ZW50fSBldmVudCAtIEN1c3RvbSBvdmVybGF5IHNob3cgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uU2hvdzogRXZlbnRFbWl0dGVyPENhc2NhZGVTZWxlY3RTaG93RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXNjYWRlU2VsZWN0U2hvd0V2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSBvdmVybGF5IGlzIGhpZGRlbi5cbiAgICAgKiBAcGFyYW0ge0Nhc2NhZGVTZWxlY3RIaWRlRXZlbnR9IGV2ZW50IC0gQ3VzdG9tIG92ZXJsYXkgaGlkZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25IaWRlOiBFdmVudEVtaXR0ZXI8Q2FzY2FkZVNlbGVjdEhpZGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENhc2NhZGVTZWxlY3RIaWRlRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIGNsZWFyIHRva2VuIGlzIGNsaWNrZWQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uQ2xlYXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBiZWZvcmUgb3ZlcmxheSBpcyBzaG93bi5cbiAgICAgKiBAcGFyYW0ge0Nhc2NhZGVTZWxlY3RCZWZvcmVTaG93RXZlbnR9IGV2ZW50IC0gQ3VzdG9tIG92ZXJsYXkgc2hvdyBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVTaG93OiBFdmVudEVtaXR0ZXI8Q2FzY2FkZVNlbGVjdEJlZm9yZVNob3dFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENhc2NhZGVTZWxlY3RCZWZvcmVTaG93RXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIGJlZm9yZSBvdmVybGF5IGlzIGhpZGRlbi5cbiAgICAgKiBAcGFyYW0ge0Nhc2NhZGVTZWxlY3RCZWZvcmVIaWRlRXZlbnR9IGV2ZW50IC0gQ3VzdG9tIG92ZXJsYXkgaGlkZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25CZWZvcmVIaWRlOiBFdmVudEVtaXR0ZXI8Q2FzY2FkZVNlbGVjdEJlZm9yZUhpZGVFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENhc2NhZGVTZWxlY3RCZWZvcmVIaWRlRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gaW5wdXQgcmVjZWl2ZXMgZm9jdXMuXG4gICAgICogQHBhcmFtIHtGb2N1c0V2ZW50fSBldmVudCAtIEZvY3VzIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gaW5wdXQgbG9zZXMgZm9jdXMuXG4gICAgICogQHBhcmFtIHtGb2N1c0V2ZW50fSBldmVudCAtIEZvY3VzIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2ZvY3VzSW5wdXQnKSBmb2N1c0lucHV0Vmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lclZpZXdDaGlsZDogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKCdwYW5lbCcpIHBhbmVsVmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ292ZXJsYXknKSBvdmVybGF5Vmlld0NoaWxkOiBOdWxsYWJsZTxPdmVybGF5PjtcbiAgICAvKipcbiAgICAgKiBDb250ZW50IHRlbXBsYXRlIGZvciBkaXNwbGF5aW5nIHRoZSBzZWxlY3RlZCB2YWx1ZS5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgndmFsdWUnKSB2YWx1ZVRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIENvbnRlbnQgdGVtcGxhdGUgZm9yIGN1c3RvbWl6aW5nIHRoZSBvcHRpb24gZGlzcGxheS5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnb3B0aW9uJykgb3B0aW9uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgLyoqXG4gICAgICogQ29udGVudCB0ZW1wbGF0ZSBmb3IgY3VzdG9taXppbmcgdGhlIGhlYWRlci5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyJykgaGVhZGVyVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgLyoqXG4gICAgICogQ29udGVudCB0ZW1wbGF0ZSBmb3IgY3VzdG9taXppbmcgdGhlIGZvb3Rlci5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgnZm9vdGVyJykgZm9vdGVyVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgLyoqXG4gICAgICogQ29udGVudCB0ZW1wbGF0ZSBmb3IgY3VzdG9taXppbmcgdGhlIHRyaWdnZXIgaWNvbi5cbiAgICAgKiBAZ3JvdXAgVGVtcGxhdGVzXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgndHJpZ2dlcmljb24nKSB0cmlnZ2VyaWNvbjogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKipcbiAgICAgKiBDb250ZW50IHRlbXBsYXRlIGZvciBjdXN0b21pemluZyB0aGUgbG9hZGluZyBpY29uLlxuICAgICAqIEBncm91cCBUZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdsb2FkaW5naWNvbicpIGxvYWRpbmdpY29uOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIC8qKlxuICAgICAqIENvbnRlbnQgdGVtcGxhdGUgZm9yIGN1c3RvbWl6aW5nIHRoZSBncm91cCBpY29uLlxuICAgICAqIEBncm91cCBUZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKCdvcHRpb25ncm91cGljb24nKSBncm91cGljb246IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgLyoqXG4gICAgICogQ29udGVudCB0ZW1wbGF0ZSBmb3IgY3VzdG9taXppbmcgdGhlIGNsZWFyIGljb24uXG4gICAgICogQGdyb3VwIFRlbXBsYXRlc1xuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ2NsZWFyaWNvbicpIGNsZWFyaWNvbjogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBfc2hvd1RyYW5zaXRpb25PcHRpb25zOiBzdHJpbmcgPSAnJztcblxuICAgIF9oaWRlVHJhbnNpdGlvbk9wdGlvbnM6IHN0cmluZyA9ICcnO1xuXG4gICAgc2VsZWN0aW9uUGF0aDogYW55ID0gbnVsbDtcblxuICAgIGZvY3VzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG92ZXJsYXlWaXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBjbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBkaXJ0eTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgc2VhcmNoVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIHNlYXJjaFRpbWVvdXQ6IGFueTtcblxuICAgIG9uTW9kZWxDaGFuZ2U6IEZ1bmN0aW9uID0gKCkgPT4ge307XG5cbiAgICBvbk1vZGVsVG91Y2hlZDogRnVuY3Rpb24gPSAoKSA9PiB7fTtcblxuICAgIGZvY3VzZWRPcHRpb25JbmZvID0gc2lnbmFsPGFueT4oeyBpbmRleDogLTEsIGxldmVsOiAwLCBwYXJlbnRLZXk6ICcnIH0pO1xuXG4gICAgYWN0aXZlT3B0aW9uUGF0aCA9IHNpZ25hbDxhbnk+KFtdKTtcblxuICAgIG1vZGVsVmFsdWUgPSBzaWduYWw8YW55PihudWxsKTtcblxuICAgIHByb2Nlc3NlZE9wdGlvbnM6IHN0cmluZ1tdIHwgc3RyaW5nIHwgdW5kZWZpbmVkID0gW107XG5cbiAgICBfY29tcG9uZW50U3R5bGUgPSBpbmplY3QoQ2FzY2FkZVNlbGVjdFN0eWxlKTtcblxuICAgIGdldCBjb250YWluZXJDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdwLWNhc2NhZGVzZWxlY3QgcC1jb21wb25lbnQgcC1pbnB1dHdyYXBwZXInOiB0cnVlLFxuICAgICAgICAgICAgJ3AtY2FzY2FkZXNlbGVjdC1jbGVhcmFibGUnOiB0aGlzLnNob3dDbGVhciAmJiAhdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgICdwLWNhc2NhZGVzZWxlY3QtbW9iaWxlJzogdGhpcy5xdWVyeU1hdGNoZXMoKSxcbiAgICAgICAgICAgICdwLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgICdwLWZvY3VzJzogdGhpcy5mb2N1c2VkLFxuICAgICAgICAgICAgJ3AtaW5wdXR3cmFwcGVyLWZpbGxlZCc6IHRoaXMubW9kZWxWYWx1ZSgpLFxuICAgICAgICAgICAgJ3AtdmFyaWFudC1maWxsZWQnOiB0aGlzLnZhcmlhbnQgPT09ICdmaWxsZWQnIHx8IHRoaXMuY29uZmlnLmlucHV0U3R5bGUoKSA9PT0gJ2ZpbGxlZCcgfHwgdGhpcy5jb25maWcuaW5wdXRWYXJpYW50KCkgPT09ICdmaWxsZWQnLFxuICAgICAgICAgICAgJ3AtaW5wdXR3cmFwcGVyLWZvY3VzJzogdGhpcy5mb2N1c2VkIHx8IHRoaXMub3ZlcmxheVZpc2libGUsXG4gICAgICAgICAgICAncC1jYXNjYWRlc2VsZWN0LW9wZW4nOiB0aGlzLm92ZXJsYXlWaXNpYmxlLFxuICAgICAgICAgICAgJ3AtY2FzY2FkZXNlbGVjdC1mbHVpZCc6IHRoaXMuaGFzRmx1aWQsXG4gICAgICAgICAgICAncC1jYXNjYWRlc2VsZWN0LXNtIHAtaW5wdXRmaWVsZC1zbSc6IHRoaXMuc2l6ZSA9PT0gJ3NtYWxsJyxcbiAgICAgICAgICAgICdwLWNhc2NhZGVzZWxlY3QtbGcgcC1pbnB1dGZpZWxkLWxnJzogdGhpcy5zaXplID09PSAnbGFyZ2UnXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGxhYmVsQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAncC1jYXNjYWRlc2VsZWN0LWxhYmVsJzogdHJ1ZSxcbiAgICAgICAgICAgICdwLXBsYWNlaG9sZGVyJzogdGhpcy5sYWJlbCgpID09PSB0aGlzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgJ3AtY2FzY2FkZXNlbGVjdC1sYWJlbC1lbXB0eSc6ICF0aGlzLnZhbHVlICYmICh0aGlzLmxhYmVsKCkgPT09ICdwLWVtcHR5bGFiZWwnIHx8IHRoaXMubGFiZWwoKS5sZW5ndGggPT09IDApXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0IGhhc0ZsdWlkKCkge1xuICAgICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBmbHVpZENvbXBvbmVudCA9IG5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgncC1mbHVpZCcpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbHVpZCB8fCAhIWZsdWlkQ29tcG9uZW50O1xuICAgIH1cblxuICAgIGdldCBmb2N1c2VkT3B0aW9uSWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkuaW5kZXggIT09IC0xID8gYCR7dGhpcy5pZH0ke2lzTm90RW1wdHkodGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLnBhcmVudEtleSkgPyAnXycgKyB0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkucGFyZW50S2V5IDogJyd9XyR7dGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4fWAgOiBudWxsO1xuICAgIH1cblxuICAgIGdldCBmaWxsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tb2RlbFZhbHVlKCkgPT09ICdzdHJpbmcnKSByZXR1cm4gISF0aGlzLm1vZGVsVmFsdWUoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbFZhbHVlKCkgfHwgdGhpcy5tb2RlbFZhbHVlKCkgIT0gbnVsbCB8fCB0aGlzLm1vZGVsVmFsdWUoKSAhPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZ2V0IHNlYXJjaFJlc3VsdE1lc3NhZ2VUZXh0KCkge1xuICAgICAgICByZXR1cm4gaXNOb3RFbXB0eSh0aGlzLnZpc2libGVPcHRpb25zKCkpID8gdGhpcy5zZWFyY2hNZXNzYWdlVGV4dC5yZXBsYWNlQWxsKCd7MH0nLCB0aGlzLnZpc2libGVPcHRpb25zKCkubGVuZ3RoKSA6IHRoaXMuZW1wdHlTZWFyY2hNZXNzYWdlVGV4dDtcbiAgICB9XG5cbiAgICBnZXQgc2VhcmNoTWVzc2FnZVRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaE1lc3NhZ2UgfHwgdGhpcy5jb25maWcudHJhbnNsYXRpb24uc2VhcmNoTWVzc2FnZSB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgZW1wdHlTZWFyY2hNZXNzYWdlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlTZWFyY2hNZXNzYWdlIHx8IHRoaXMuY29uZmlnLnRyYW5zbGF0aW9uLmVtcHR5U2VhcmNoTWVzc2FnZSB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgZW1wdHlNZXNzYWdlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlNZXNzYWdlIHx8IHRoaXMuY29uZmlnLnRyYW5zbGF0aW9uLmVtcHR5TWVzc2FnZSB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0aW9uTWVzc2FnZVRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1lc3NhZ2UgfHwgdGhpcy5jb25maWcudHJhbnNsYXRpb24uc2VsZWN0aW9uTWVzc2FnZSB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgZW1wdHlTZWxlY3Rpb25NZXNzYWdlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW1wdHlTZWxlY3Rpb25NZXNzYWdlIHx8IHRoaXMuY29uZmlnLnRyYW5zbGF0aW9uLmVtcHR5U2VsZWN0aW9uTWVzc2FnZSB8fCAnJztcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRNZXNzYWdlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWRPcHRpb24gPyB0aGlzLnNlbGVjdGlvbk1lc3NhZ2VUZXh0LnJlcGxhY2VBbGwoJ3swfScsICcxJykgOiB0aGlzLmVtcHR5U2VsZWN0aW9uTWVzc2FnZVRleHQ7XG4gICAgfVxuXG4gICAgdmlzaWJsZU9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NlZE9wdGlvbiA9IHRoaXMuYWN0aXZlT3B0aW9uUGF0aCgpLmZpbmQoKHApID0+IHAua2V5ID09PSB0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkucGFyZW50S2V5KTtcblxuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkT3B0aW9uID8gcHJvY2Vzc2VkT3B0aW9uLmNoaWxkcmVuIDogdGhpcy5wcm9jZXNzZWRPcHRpb25zO1xuICAgIH0pO1xuXG4gICAgbGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5wbGFjZWhvbGRlciB8fCAncC1lbXB0eWxhYmVsJztcblxuICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RlZE9wdGlvbigpKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25QYXRoID0gdGhpcy5maW5kT3B0aW9uUGF0aEJ5VmFsdWUodGhpcy5tb2RlbFZhbHVlKCksIG51bGwpO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkT3B0aW9uID0gaXNOb3RFbXB0eShhY3RpdmVPcHRpb25QYXRoKSA/IGFjdGl2ZU9wdGlvblBhdGhbYWN0aXZlT3B0aW9uUGF0aC5sZW5ndGggLSAxXSA6IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9jZXNzZWRPcHRpb24gPyB0aGlzLmdldE9wdGlvbkxhYmVsKHByb2Nlc3NlZE9wdGlvbi5vcHRpb24pIDogbGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgIH0pO1xuXG4gICAgZ2V0IF9sYWJlbCgpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnBsYWNlaG9sZGVyIHx8ICdwLWVtcHR5bGFiZWwnO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdGVkT3B0aW9uKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvblBhdGggPSB0aGlzLmZpbmRPcHRpb25QYXRoQnlWYWx1ZSh0aGlzLm1vZGVsVmFsdWUoKSwgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRPcHRpb24gPSBpc05vdEVtcHR5KGFjdGl2ZU9wdGlvblBhdGgpID8gYWN0aXZlT3B0aW9uUGF0aFthY3RpdmVPcHRpb25QYXRoLmxlbmd0aCAtIDFdIDogbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NlZE9wdGlvbiA/IHRoaXMuZ2V0T3B0aW9uTGFiZWwocHJvY2Vzc2VkT3B0aW9uLm9wdGlvbikgOiBsYWJlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGFiZWw7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgaWYgKGNoYW5nZXMub3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRPcHRpb25zID0gdGhpcy5jcmVhdGVQcm9jZXNzZWRPcHRpb25zKGNoYW5nZXMub3B0aW9ucy5jdXJyZW50VmFsdWUgfHwgW10pO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNb2RlbChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1NlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgICByZXR1cm4gaXNOb3RFbXB0eSh0aGlzLm1vZGVsVmFsdWUoKSk7XG4gICAgfVxuXG4gICAgY3JlYXRlUHJvY2Vzc2VkT3B0aW9ucyhvcHRpb25zLCBsZXZlbCA9IDAsIHBhcmVudCA9IHt9LCBwYXJlbnRLZXkgPSAnJykge1xuICAgICAgICBjb25zdCBwcm9jZXNzZWRPcHRpb25zID0gW107XG5cbiAgICAgICAgb3B0aW9ucyAmJlxuICAgICAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gKHBhcmVudEtleSAhPT0gJycgPyBwYXJlbnRLZXkgKyAnXycgOiAnJykgKyBpbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdPcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50S2V5XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIG5ld09wdGlvblsnY2hpbGRyZW4nXSA9IHRoaXMuY3JlYXRlUHJvY2Vzc2VkT3B0aW9ucyh0aGlzLmdldE9wdGlvbkdyb3VwQ2hpbGRyZW4ob3B0aW9uLCBsZXZlbCksIGxldmVsICsgMSwgbmV3T3B0aW9uLCBrZXkpO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZE9wdGlvbnMucHVzaChuZXdPcHRpb24pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHByb2Nlc3NlZE9wdGlvbnM7XG4gICAgfVxuXG4gICAgb25JbnB1dEZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAvLyBGb3Igc2NyZWVucmVhZGVyc1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uSW5wdXRCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmZvLnNldCh7IGluZGVYOiAtMSwgbGV2ZWw6IDAsIHBhcmVudEtleTogJycgfSk7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5vbk1vZGVsVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbklucHV0S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1ldGFLZXkgPSBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXk7XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd25LZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dVcEtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFycm93TGVmdEtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd1JpZ2h0S2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkhvbWVLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbmQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25FbmRLZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdTcGFjZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vblNwYWNlS2V5KGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgY2FzZSAnTnVtcGFkRW50ZXInOlxuICAgICAgICAgICAgICAgIHRoaXMub25FbnRlcktleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVzY2FwZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5vblRhYktleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5vbkJhY2tzcGFjZUtleShldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgICAgICBjYXNlICdTaGlmdExlZnQnOlxuICAgICAgICAgICAgY2FzZSAnU2hpZnRSaWdodCc6XG4gICAgICAgICAgICAgICAgLy9OT09QXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhS2V5ICYmIGlzUHJpbnRhYmxlQ2hhcmFjdGVyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoT3B0aW9ucyhldmVudCwgZXZlbnQua2V5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xpY2tlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9uQXJyb3dEb3duS2V5KGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25JbmRleCA9IHRoaXMuZm9jdXNlZE9wdGlvbkluZm8oKS5pbmRleCAhPT0gLTEgPyB0aGlzLmZpbmROZXh0T3B0aW9uSW5kZXgodGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4KSA6IHRoaXMuY2xpY2tlZCA/IHRoaXMuZmluZEZpcnN0T3B0aW9uSW5kZXgoKSA6IHRoaXMuZmluZEZpcnN0Rm9jdXNlZE9wdGlvbkluZGV4KCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRm9jdXNlZE9wdGlvbkluZGV4KGV2ZW50LCBvcHRpb25JbmRleCwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uQXJyb3dVcEtleShldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZE9wdGlvbiA9IHRoaXMudmlzaWJsZU9wdGlvbnNbdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkID0gdGhpcy5pc1Byb2NjZXNzZWRPcHRpb25Hcm91cChwcm9jZXNzZWRPcHRpb24pO1xuXG4gICAgICAgICAgICAgICAgIWdyb3VwZWQgJiYgdGhpcy5vbk9wdGlvbkNoYW5nZSh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBwcm9jZXNzZWRPcHRpb24gfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSW5kZXggPSB0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkuaW5kZXggIT09IC0xID8gdGhpcy5maW5kUHJldk9wdGlvbkluZGV4KHRoaXMuZm9jdXNlZE9wdGlvbkluZm8oKS5pbmRleCkgOiB0aGlzLmNsaWNrZWQgPyB0aGlzLmZpbmRMYXN0T3B0aW9uSW5kZXgoKSA6IHRoaXMuZmluZExhc3RGb2N1c2VkT3B0aW9uSW5kZXgoKTtcblxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkT3B0aW9uSW5kZXgoZXZlbnQsIG9wdGlvbkluZGV4LCB0cnVlKTtcblxuICAgICAgICAgICAgIXRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BcnJvd0xlZnRLZXkoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZE9wdGlvbiA9IHRoaXMudmlzaWJsZU9wdGlvbnMoKVt0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkuaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50T3B0aW9uID0gdGhpcy5hY3RpdmVPcHRpb25QYXRoKCkuZmluZCgocCkgPT4gcC5rZXkgPT09IHByb2Nlc3NlZE9wdGlvbi5wYXJlbnRLZXkpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMuZm9jdXNlZE9wdGlvbkluZm8oKS5wYXJlbnRLZXkgPT09ICcnIHx8IChwYXJlbnRPcHRpb24gJiYgcGFyZW50T3B0aW9uLmtleSA9PT0gdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLnBhcmVudEtleSk7XG4gICAgICAgICAgICBjb25zdCByb290ID0gaXNFbXB0eShwcm9jZXNzZWRPcHRpb24ucGFyZW50KTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25QYXRoID0gdGhpcy5hY3RpdmVPcHRpb25QYXRoKCkuZmlsdGVyKChwKSA9PiBwLnBhcmVudEtleSAhPT0gdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLnBhcmVudEtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVPcHRpb25QYXRoLnNldChhY3RpdmVPcHRpb25QYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFyb290KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5mby5zZXQoeyBpbmRleDogLTEsIHBhcmVudEtleTogcGFyZW50T3B0aW9uID8gcGFyZW50T3B0aW9uLnBhcmVudEtleSA6ICcnIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXJyb3dEb3duS2V5KGV2ZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQXJyb3dSaWdodEtleShldmVudCkge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkT3B0aW9uID0gdGhpcy52aXNpYmxlT3B0aW9ucygpW3RoaXMuZm9jdXNlZE9wdGlvbkluZm8oKS5pbmRleF07XG4gICAgICAgICAgICBjb25zdCBncm91cGVkID0gdGhpcy5pc1Byb2NjZXNzZWRPcHRpb25Hcm91cChwcm9jZXNzZWRPcHRpb24pO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdXBlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKS5zb21lKChwKSA9PiBwcm9jZXNzZWRPcHRpb24ua2V5ID09PSBwLmtleSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmZvLnNldCh7IGluZGV4OiAtMSwgcGFyZW50S2V5OiBwcm9jZXNzZWRPcHRpb24ua2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25BcnJvd0Rvd25LZXkoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25PcHRpb25DaGFuZ2UoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgcHJvY2Vzc2VkT3B0aW9uIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSG9tZUtleShldmVudCkge1xuICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgdGhpcy5maW5kRmlyc3RPcHRpb25JbmRleCgpKTtcblxuICAgICAgICAhdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLnNob3coKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbkVuZEtleShldmVudCkge1xuICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgdGhpcy5maW5kTGFzdE9wdGlvbkluZGV4KCkpO1xuXG4gICAgICAgICF0aGlzLm92ZXJsYXlWaXNpYmxlICYmIHRoaXMuc2hvdygpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uRW50ZXJLZXkoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmZvLnNldCh7IC4uLnRoaXMuZm9jdXNlZE9wdGlvbkluZm8oKSwgaW5kZXg6IC0xIH0pOyAvLyByZXNldFxuICAgICAgICAgICAgdGhpcy5vbkFycm93RG93bktleShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZE9wdGlvbiA9IHRoaXMudmlzaWJsZU9wdGlvbnMoKVt0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkuaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB0aGlzLmlzUHJvY2Nlc3NlZE9wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbik7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uQ2xpY2soeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgcHJvY2Vzc2VkT3B0aW9uIH0pO1xuICAgICAgICAgICAgICAgICFncm91cGVkICYmIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvblNwYWNlS2V5KGV2ZW50KSB7XG4gICAgICAgIHRoaXMub25FbnRlcktleShldmVudCk7XG4gICAgfVxuXG4gICAgb25Fc2NhcGVLZXkoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLmhpZGUoZXZlbnQsIHRydWUpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uVGFiS2V5KGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCkuaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRPcHRpb24gPSB0aGlzLnZpc2libGVPcHRpb25zKClbdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB0aGlzLmlzUHJvY2Nlc3NlZE9wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbik7XG5cbiAgICAgICAgICAgICFncm91cGVkICYmIHRoaXMub25PcHRpb25DaGFuZ2UoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgcHJvY2Vzc2VkT3B0aW9uIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLmhpZGUoKTtcbiAgICB9XG5cbiAgICBvbkJhY2tzcGFjZUtleShldmVudCkge1xuICAgICAgICBpZiAoaXNOb3RFbXB0eSh0aGlzLm1vZGVsVmFsdWUoKSkgJiYgdGhpcy5zaG93Q2xlYXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGVxdWFsaXR5S2V5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZSA/IG51bGwgOiB0aGlzLmRhdGFLZXk7XG4gICAgfVxuXG4gICAgdXBkYXRlTW9kZWwodmFsdWUsIGV2ZW50Pykge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZS5zZXQodmFsdWUpO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhdXRvVXBkYXRlTW9kZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdE9uRm9jdXMgJiYgdGhpcy5hdXRvT3B0aW9uRm9jdXMgJiYgIXRoaXMuaGFzU2VsZWN0ZWRPcHRpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4ID0gdGhpcy5maW5kRmlyc3RGb2N1c2VkT3B0aW9uSW5kZXgoKTtcbiAgICAgICAgICAgIHRoaXMub25PcHRpb25DaGFuZ2Uoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkT3B0aW9uOiB0aGlzLnZpc2libGVPcHRpb25zKClbdGhpcy5mb2N1c2VkT3B0aW9uSW5mbygpLmluZGV4XSxcbiAgICAgICAgICAgICAgICBpc0hpZGU6IGZhbHNlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgIXRoaXMub3ZlcmxheVZpc2libGUgJiYgdGhpcy5mb2N1c2VkT3B0aW9uSW5mby5zZXQoeyBpbmRleDogLTEsIGxldmVsOiAwLCBwYXJlbnRLZXk6ICcnIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsSW5WaWV3KGluZGV4ID0gLTEpIHtcbiAgICAgICAgY29uc3QgaWQgPSBpbmRleCAhPT0gLTEgPyBgJHt0aGlzLmlkfV8ke2luZGV4fWAgOiB0aGlzLmZvY3VzZWRPcHRpb25JZDtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGZpbmRTaW5nbGUodGhpcy5wYW5lbFZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudCwgYGxpW2lkPVwiJHtpZH1cIl1gKTtcblxuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyAmJiBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICduZWFyZXN0JywgaW5saW5lOiAnc3RhcnQnIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hhbmdlRm9jdXNlZE9wdGlvbkluZGV4KGV2ZW50LCBpbmRleCwgcHJldmVudFNlbGVjdGlvbj86IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgZm9jdXNlZE9wdGlvbkluZm8gPSB0aGlzLmZvY3VzZWRPcHRpb25JbmZvKCk7XG5cbiAgICAgICAgaWYgKGZvY3VzZWRPcHRpb25JbmZvLmluZGV4ICE9PSBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5mby5zZXQoeyAuLi5mb2N1c2VkT3B0aW9uSW5mbywgaW5kZXggfSk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEluVmlldygpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5mb2N1c09uSG92ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uQ2xpY2soeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgcHJvY2Vzc2VkT3B0aW9uOiB0aGlzLnZpc2libGVPcHRpb25zKClbaW5kZXhdLCBpc0hpZGU6IGZhbHNlLCBwcmV2ZW50U2VsZWN0aW9uIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RPbkZvY3VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvbkNoYW5nZSh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBwcm9jZXNzZWRPcHRpb246IHRoaXMudmlzaWJsZU9wdGlvbnMoKVtpbmRleF0sIGlzSGlkZTogZmFsc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWF0Y2hNZWRpYUxpc3RlbmVyOiBWb2lkTGlzdGVuZXI7XG5cbiAgICBvbk9wdGlvblNlbGVjdChldmVudCkge1xuICAgICAgICBjb25zdCB7IG9yaWdpbmFsRXZlbnQsIHZhbHVlLCBpc0hpZGUgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUodmFsdWUpO1xuXG4gICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvblBhdGggPSB0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKTtcbiAgICAgICAgYWN0aXZlT3B0aW9uUGF0aC5mb3JFYWNoKChwKSA9PiAocC5zZWxlY3RlZCA9IHRydWUpKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblBhdGguc2V0KGFjdGl2ZU9wdGlvblBhdGgpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsKG5ld1ZhbHVlLCBvcmlnaW5hbEV2ZW50KTtcbiAgICAgICAgaXNIaWRlICYmIHRoaXMuaGlkZShldmVudCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25PcHRpb25Hcm91cFNlbGVjdChldmVudCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vbkdyb3VwQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uQ29udGFpbmVyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub3ZlcmxheVZpZXdDaGlsZD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXlWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmZvY3VzSW5wdXRWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xpY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaXNPcHRpb25NYXRjaGVkKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkT3B0aW9uKHByb2Nlc3NlZE9wdGlvbikgJiYgdGhpcy5nZXRQcm9jY2Vzc2VkT3B0aW9uTGFiZWwocHJvY2Vzc2VkT3B0aW9uKS50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLnNlYXJjaExvY2FsZSkuc3RhcnRzV2l0aCh0aGlzLnNlYXJjaFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuc2VhcmNoTG9jYWxlKSk7XG4gICAgfVxuXG4gICAgaXNPcHRpb25EaXNhYmxlZChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uRGlzYWJsZWQgPyByZXNvbHZlRmllbGREYXRhKG9wdGlvbiwgdGhpcy5vcHRpb25EaXNhYmxlZCkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkT3B0aW9uKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gISFwcm9jZXNzZWRPcHRpb24gJiYgIXRoaXMuaXNPcHRpb25EaXNhYmxlZChwcm9jZXNzZWRPcHRpb24ub3B0aW9uKTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkU2VsZWN0ZWRPcHRpb24ocHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWRPcHRpb24ocHJvY2Vzc2VkT3B0aW9uKSAmJiB0aGlzLmlzU2VsZWN0ZWQocHJvY2Vzc2VkT3B0aW9uKTtcbiAgICB9XG5cbiAgICBpc1NlbGVjdGVkKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVPcHRpb25QYXRoKCkuc29tZSgocCkgPT4gcC5rZXkgPT09IHByb2Nlc3NlZE9wdGlvbi5rZXkpO1xuICAgIH1cblxuICAgIGZpbmRPcHRpb25QYXRoQnlWYWx1ZSh2YWx1ZSwgcHJvY2Vzc2VkT3B0aW9ucz8sIGxldmVsID0gMCkge1xuICAgICAgICBwcm9jZXNzZWRPcHRpb25zID0gcHJvY2Vzc2VkT3B0aW9ucyB8fCAobGV2ZWwgPT09IDAgJiYgdGhpcy5wcm9jZXNzZWRPcHRpb25zKTtcblxuICAgICAgICBpZiAoIXByb2Nlc3NlZE9wdGlvbnMpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAoaXNFbXB0eSh2YWx1ZSkpIHJldHVybiBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb2Nlc3NlZE9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZE9wdGlvbiA9IHByb2Nlc3NlZE9wdGlvbnNbaV07XG5cbiAgICAgICAgICAgIGlmIChlcXVhbHModmFsdWUsIHRoaXMuZ2V0T3B0aW9uVmFsdWUocHJvY2Vzc2VkT3B0aW9uLm9wdGlvbiksIHRoaXMuZXF1YWxpdHlLZXkoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3Byb2Nlc3NlZE9wdGlvbl07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRPcHRpb25zID0gdGhpcy5maW5kT3B0aW9uUGF0aEJ5VmFsdWUodmFsdWUsIHByb2Nlc3NlZE9wdGlvbi5jaGlsZHJlbiwgbGV2ZWwgKyAxKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZWRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlZE9wdGlvbnMudW5zaGlmdChwcm9jZXNzZWRPcHRpb24pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZWRPcHRpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZmluZEZpcnN0T3B0aW9uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVPcHRpb25zKCkuZmluZEluZGV4KChwcm9jZXNzZWRPcHRpb24pID0+IHRoaXMuaXNWYWxpZE9wdGlvbihwcm9jZXNzZWRPcHRpb24pKTtcbiAgICB9XG5cbiAgICBmaW5kTGFzdE9wdGlvbkluZGV4KCkge1xuICAgICAgICByZXR1cm4gZmluZExhc3RJbmRleCh0aGlzLnZpc2libGVPcHRpb25zKCksIChwcm9jZXNzZWRPcHRpb24pID0+IHRoaXMuaXNWYWxpZE9wdGlvbihwcm9jZXNzZWRPcHRpb24pKTtcbiAgICB9XG5cbiAgICBmaW5kTmV4dE9wdGlvbkluZGV4KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRPcHRpb25JbmRleCA9XG4gICAgICAgICAgICBpbmRleCA8IHRoaXMudmlzaWJsZU9wdGlvbnMoKS5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZpc2libGVPcHRpb25zKClcbiAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoaW5kZXggKyAxKVxuICAgICAgICAgICAgICAgICAgICAgIC5maW5kSW5kZXgoKHByb2Nlc3NlZE9wdGlvbikgPT4gdGhpcy5pc1ZhbGlkT3B0aW9uKHByb2Nlc3NlZE9wdGlvbikpXG4gICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICByZXR1cm4gbWF0Y2hlZE9wdGlvbkluZGV4ID4gLTEgPyBtYXRjaGVkT3B0aW9uSW5kZXggKyBpbmRleCArIDEgOiBpbmRleDtcbiAgICB9XG5cbiAgICBmaW5kUHJldk9wdGlvbkluZGV4KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRPcHRpb25JbmRleCA9IGluZGV4ID4gMCA/IGZpbmRMYXN0SW5kZXgodGhpcy52aXNpYmxlT3B0aW9ucygpLnNsaWNlKDAsIGluZGV4KSwgKHByb2Nlc3NlZE9wdGlvbikgPT4gdGhpcy5pc1ZhbGlkT3B0aW9uKHByb2Nlc3NlZE9wdGlvbikpIDogLTE7XG5cbiAgICAgICAgcmV0dXJuIG1hdGNoZWRPcHRpb25JbmRleCA+IC0xID8gbWF0Y2hlZE9wdGlvbkluZGV4IDogaW5kZXg7XG4gICAgfVxuXG4gICAgZmluZFNlbGVjdGVkT3B0aW9uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpc2libGVPcHRpb25zKCkuZmluZEluZGV4KChwcm9jZXNzZWRPcHRpb24pID0+IHRoaXMuaXNWYWxpZFNlbGVjdGVkT3B0aW9uKHByb2Nlc3NlZE9wdGlvbikpO1xuICAgIH1cblxuICAgIGZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMuZmluZFNlbGVjdGVkT3B0aW9uSW5kZXgoKTtcblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleCA8IDAgPyB0aGlzLmZpbmRGaXJzdE9wdGlvbkluZGV4KCkgOiBzZWxlY3RlZEluZGV4O1xuICAgIH1cblxuICAgIGZpbmRMYXN0Rm9jdXNlZE9wdGlvbkluZGV4KCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5maW5kU2VsZWN0ZWRPcHRpb25JbmRleCgpO1xuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZEluZGV4IDwgMCA/IHRoaXMuZmluZExhc3RPcHRpb25JbmRleCgpIDogc2VsZWN0ZWRJbmRleDtcbiAgICB9XG5cbiAgICBzZWFyY2hPcHRpb25zKGV2ZW50LCBjaGFyKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAodGhpcy5zZWFyY2hWYWx1ZSB8fCAnJykgKyBjaGFyO1xuXG4gICAgICAgIGxldCBvcHRpb25JbmRleCA9IC0xO1xuICAgICAgICBsZXQgbWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmb2N1c2VkT3B0aW9uSW5mbyA9IHRoaXMuZm9jdXNlZE9wdGlvbkluZm8oKTtcblxuICAgICAgICBpZiAoZm9jdXNlZE9wdGlvbkluZm8uaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBvcHRpb25JbmRleCA9IHRoaXMudmlzaWJsZU9wdGlvbnMoKVxuICAgICAgICAgICAgICAgIC5zbGljZShmb2N1c2VkT3B0aW9uSW5mby5pbmRleClcbiAgICAgICAgICAgICAgICAuZmluZEluZGV4KChwcm9jZXNzZWRPcHRpb24pID0+IHRoaXMuaXNPcHRpb25NYXRjaGVkKHByb2Nlc3NlZE9wdGlvbikpO1xuICAgICAgICAgICAgb3B0aW9uSW5kZXggPVxuICAgICAgICAgICAgICAgIG9wdGlvbkluZGV4ID09PSAtMVxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMudmlzaWJsZU9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgZm9jdXNlZE9wdGlvbkluZm8uaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kSW5kZXgoKHByb2Nlc3NlZE9wdGlvbikgPT4gdGhpcy5pc09wdGlvbk1hdGNoZWQocHJvY2Vzc2VkT3B0aW9uKSlcbiAgICAgICAgICAgICAgICAgICAgOiBvcHRpb25JbmRleCArIGZvY3VzZWRPcHRpb25JbmZvLmluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9uSW5kZXggPSB0aGlzLnZpc2libGVPcHRpb25zKCkuZmluZEluZGV4KChwcm9jZXNzZWRPcHRpb24pID0+IHRoaXMuaXNPcHRpb25NYXRjaGVkKHByb2Nlc3NlZE9wdGlvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgbWF0Y2hlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uSW5kZXggPT09IC0xICYmIGZvY3VzZWRPcHRpb25JbmZvLmluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgb3B0aW9uSW5kZXggPSB0aGlzLmZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VGb2N1c2VkT3B0aW9uSW5kZXgoZXZlbnQsIG9wdGlvbkluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9LCA1MDApO1xuXG4gICAgICAgIHJldHVybiBtYXRjaGVkO1xuICAgIH1cblxuICAgIGhpZGUoZXZlbnQ/LCBpc0ZvY3VzID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgX2hpZGUgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNsaWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uUGF0aC5zZXQoW10pO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5mby5zZXQoeyBpbmRleDogLTEsIGxldmVsOiAwLCBwYXJlbnRLZXk6ICcnIH0pO1xuXG4gICAgICAgICAgICBpc0ZvY3VzICYmIGZvY3VzKHRoaXMuZm9jdXNJbnB1dFZpZXdDaGlsZC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMub25IaWRlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIF9oaWRlKCk7XG4gICAgICAgIH0sIDApOyAvLyBGb3IgU2NyZWVuUmVhZGVyc1xuICAgIH1cblxuICAgIHNob3coZXZlbnQ/LCBpc0ZvY3VzID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUgPSB0cnVlO1xuICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25QYXRoID0gdGhpcy5oYXNTZWxlY3RlZE9wdGlvbigpID8gdGhpcy5maW5kT3B0aW9uUGF0aEJ5VmFsdWUodGhpcy5tb2RlbFZhbHVlKCkpIDogdGhpcy5hY3RpdmVPcHRpb25QYXRoKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uUGF0aC5zZXQoYWN0aXZlT3B0aW9uUGF0aCk7XG4gICAgICAgIGxldCBmb2N1c2VkT3B0aW9uSW5mbztcblxuICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RlZE9wdGlvbigpICYmIGlzTm90RW1wdHkodGhpcy5hY3RpdmVPcHRpb25QYXRoKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRPcHRpb24gPSB0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKVt0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKS5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgZm9jdXNlZE9wdGlvbkluZm8gPSB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IHByb2Nlc3NlZE9wdGlvbi5pbmRleCxcbiAgICAgICAgICAgICAgICBsZXZlbDogcHJvY2Vzc2VkT3B0aW9uLmxldmVsLFxuICAgICAgICAgICAgICAgIHBhcmVudEtleTogcHJvY2Vzc2VkT3B0aW9uLnBhcmVudEtleVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvY3VzZWRPcHRpb25JbmZvID0geyBpbmRleDogdGhpcy5hdXRvT3B0aW9uRm9jdXMgPyB0aGlzLmZpbmRGaXJzdEZvY3VzZWRPcHRpb25JbmRleCgpIDogdGhpcy5maW5kU2VsZWN0ZWRPcHRpb25JbmRleCgpLCBsZXZlbDogMCwgcGFyZW50S2V5OiAnJyB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c2VkT3B0aW9uSW5mby5zZXQoZm9jdXNlZE9wdGlvbkluZm8pO1xuXG4gICAgICAgIGlzRm9jdXMgJiYgZm9jdXModGhpcy5mb2N1c0lucHV0Vmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNsZWFyKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgICAgICBpZiAoaXNOb3RFbXB0eSh0aGlzLm1vZGVsVmFsdWUoKSkgJiYgdGhpcy5zaG93Q2xlYXIpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kZWwobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmZvLnNldCh7IGluZGV4OiAtMSwgbGV2ZWw6IDAsIHBhcmVudEtleTogJycgfSk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblBhdGguc2V0KFtdKTtcbiAgICAgICAgICAgIHRoaXMub25DbGVhci5lbWl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBldmVudCAmJiBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBnZXRPcHRpb25MYWJlbChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uTGFiZWwgPyByZXNvbHZlRmllbGREYXRhKG9wdGlvbiwgdGhpcy5vcHRpb25MYWJlbCkgOiBvcHRpb247XG4gICAgfVxuXG4gICAgZ2V0T3B0aW9uVmFsdWUob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlID8gcmVzb2x2ZUZpZWxkRGF0YShvcHRpb24sIHRoaXMub3B0aW9uVmFsdWUpIDogb3B0aW9uO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkdyb3VwTGFiZWwob3B0aW9uR3JvdXApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uR3JvdXBMYWJlbCA/IHJlc29sdmVGaWVsZERhdGEob3B0aW9uR3JvdXAsIHRoaXMub3B0aW9uR3JvdXBMYWJlbCkgOiBudWxsO1xuICAgIH1cblxuICAgIGdldE9wdGlvbkdyb3VwQ2hpbGRyZW4ob3B0aW9uR3JvdXAsIGxldmVsKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlRmllbGREYXRhKG9wdGlvbkdyb3VwLCB0aGlzLm9wdGlvbkdyb3VwQ2hpbGRyZW5bbGV2ZWxdKTtcbiAgICB9XG5cbiAgICBpc09wdGlvbkdyb3VwKG9wdGlvbiwgbGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb24sIHRoaXMub3B0aW9uR3JvdXBDaGlsZHJlbltsZXZlbF0pO1xuICAgIH1cblxuICAgIGlzUHJvY2Nlc3NlZE9wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbikge1xuICAgICAgICByZXR1cm4gaXNOb3RFbXB0eShwcm9jZXNzZWRPcHRpb24/LmNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBnZXRQcm9jY2Vzc2VkT3B0aW9uTGFiZWwocHJvY2Vzc2VkT3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwZWQgPSB0aGlzLmlzUHJvY2Nlc3NlZE9wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbik7XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwZWQgPyB0aGlzLmdldE9wdGlvbkdyb3VwTGFiZWwocHJvY2Vzc2VkT3B0aW9uLm9wdGlvbikgOiB0aGlzLmdldE9wdGlvbkxhYmVsKHByb2Nlc3NlZE9wdGlvbi5vcHRpb24pO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBvdmVybGF5U2VydmljZTogT3ZlcmxheVNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvblBhdGggPSB0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKTtcbiAgICAgICAgICAgIGlmIChpc05vdEVtcHR5KGFjdGl2ZU9wdGlvblBhdGgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5Vmlld0NoaWxkLmFsaWduT3ZlcmxheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcXVlcnk6IGFueTtcbiAgICBxdWVyeU1hdGNoZXMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIG1vYmlsZUFjdGl2ZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBvbk9wdGlvbkNoYW5nZShldmVudCkge1xuICAgICAgICBjb25zdCB7IHByb2Nlc3NlZE9wdGlvbiwgdHlwZSB9ID0gZXZlbnQ7XG5cbiAgICAgICAgaWYgKGlzRW1wdHkocHJvY2Vzc2VkT3B0aW9uKSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHsgaW5kZXgsIGtleSwgbGV2ZWwsIHBhcmVudEtleSwgY2hpbGRyZW4gfSA9IHByb2Nlc3NlZE9wdGlvbjtcbiAgICAgICAgY29uc3QgZ3JvdXBlZCA9IGlzTm90RW1wdHkoY2hpbGRyZW4pO1xuICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25QYXRoID0gdGhpcy5hY3RpdmVPcHRpb25QYXRoKCkuZmlsdGVyKChwKSA9PiBwLnBhcmVudEtleSAhPT0gcGFyZW50S2V5ICYmIHAucGFyZW50S2V5ICE9PSBrZXkpO1xuXG4gICAgICAgIHRoaXMuZm9jdXNlZE9wdGlvbkluZm8uc2V0KHsgaW5kZXgsIGxldmVsLCBwYXJlbnRLZXkgfSk7XG5cbiAgICAgICAgaWYgKHR5cGUgPT0gJ2hvdmVyJyAmJiB0aGlzLnF1ZXJ5TWF0Y2hlcygpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ3JvdXBlZCkge1xuICAgICAgICAgICAgYWN0aXZlT3B0aW9uUGF0aC5wdXNoKHByb2Nlc3NlZE9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblBhdGguc2V0KFsuLi5hY3RpdmVPcHRpb25QYXRoXSk7XG4gICAgfVxuXG4gICAgb25PcHRpb25DbGljayhldmVudCkge1xuICAgICAgICBjb25zdCB7IG9yaWdpbmFsRXZlbnQsIHByb2Nlc3NlZE9wdGlvbiwgaXNGb2N1cywgaXNIaWRlLCBwcmV2ZW50U2VsZWN0aW9uIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgeyBpbmRleCwga2V5LCBsZXZlbCwgcGFyZW50S2V5IH0gPSBwcm9jZXNzZWRPcHRpb247XG4gICAgICAgIGNvbnN0IGdyb3VwZWQgPSB0aGlzLmlzUHJvY2Nlc3NlZE9wdGlvbkdyb3VwKHByb2Nlc3NlZE9wdGlvbik7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkKHByb2Nlc3NlZE9wdGlvbik7XG5cbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb25QYXRoID0gdGhpcy5hY3RpdmVPcHRpb25QYXRoKCkuZmlsdGVyKChwKSA9PiBrZXkgIT09IHAua2V5ICYmIGtleS5zdGFydHNXaXRoKHAua2V5KSk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU9wdGlvblBhdGguc2V0KFsuLi5hY3RpdmVPcHRpb25QYXRoXSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmZvLnNldCh7IGluZGV4LCBsZXZlbCwgcGFyZW50S2V5IH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGdyb3VwZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uQ2hhbmdlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uR3JvdXBTZWxlY3QoeyBvcmlnaW5hbEV2ZW50LCB2YWx1ZTogcHJvY2Vzc2VkT3B0aW9uLm9wdGlvbiwgaXNGb2N1czogZmFsc2UgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvblBhdGggPSB0aGlzLmFjdGl2ZU9wdGlvblBhdGgoKS5maWx0ZXIoKHApID0+IHAucGFyZW50S2V5ICE9PSBwYXJlbnRLZXkpO1xuXG4gICAgICAgICAgICAgICAgYWN0aXZlT3B0aW9uUGF0aC5wdXNoKHByb2Nlc3NlZE9wdGlvbik7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRPcHRpb25JbmZvLnNldCh7IGluZGV4LCBsZXZlbCwgcGFyZW50S2V5IH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFwcmV2ZW50U2VsZWN0aW9uIHx8IHByb2Nlc3NlZE9wdGlvbj8uY2hpbGRyZW4ubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uUGF0aC5zZXQoWy4uLmFjdGl2ZU9wdGlvblBhdGhdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdCh7IG9yaWdpbmFsRXZlbnQsIHZhbHVlOiBwcm9jZXNzZWRPcHRpb24ub3B0aW9uLCBpc0hpZGU6IGlzRm9jdXMgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaXNGb2N1cyAmJiBmb2N1cyh0aGlzLmZvY3VzSW5wdXRWaWV3Q2hpbGQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgb25PcHRpb25Nb3VzZUVudGVyKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzT25Ib3Zlcikge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlydHkgfHwgKCF0aGlzLmRpcnR5ICYmIGlzTm90RW1wdHkodGhpcy5tb2RlbFZhbHVlKCkpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25PcHRpb25DaGFuZ2UoeyAuLi5ldmVudCwgdHlwZTogJ2hvdmVyJyB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZGlydHkgJiYgZXZlbnQucHJvY2Vzc2VkT3B0aW9uLmxldmVsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvbkNsaWNrKHsgLi4uZXZlbnQsIHR5cGU6ICdob3ZlcicgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbk9wdGlvbk1vdXNlTW92ZShldmVudCkge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkICYmIHRoaXMuZm9jdXNPbkhvdmVyKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZUZvY3VzZWRPcHRpb25JbmRleChldmVudCwgZXZlbnQucHJvY2Vzc2VkT3B0aW9uLmluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmlkID0gdGhpcy5pZCB8fCB1dWlkKCdwbl9pZF8nKTtcbiAgICAgICAgdGhpcy5hdXRvVXBkYXRlTW9kZWwoKTtcbiAgICAgICAgdGhpcy5iaW5kTWF0Y2hNZWRpYUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgYmluZE1hdGNoTWVkaWFMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hdGNoTWVkaWFMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uc3Qgd2luZG93OiBXaW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgICAgICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cubWF0Y2hNZWRpYSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gd2luZG93Lm1hdGNoTWVkaWEoYChtYXgtd2lkdGg6ICR7dGhpcy5icmVha3BvaW50fSlgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeU1hdGNoZXMuc2V0KHF1ZXJ5Py5tYXRjaGVzKTtcblxuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TWF0Y2hlcy5zZXQocXVlcnk/Lm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vYmlsZUFjdGl2ZS5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuYmluZE1hdGNoTWVkaWFMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uT3ZlcmxheUFuaW1hdGlvbkRvbmUoZXZlbnQ6IGFueSkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LnRvU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3ZvaWQnOlxuICAgICAgICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlTW9kZWwodmFsdWUpO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuICAgICAgICB0aGlzLm9uTW9kZWxUb3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgc2V0RGlzYWJsZWRTdGF0ZSh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHZhbDtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWF0Y2hNZWRpYUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnVuYmluZE1hdGNoTWVkaWFMaXN0ZW5lcigpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDYXNjYWRlU2VsZWN0LCBTaGFyZWRNb2R1bGVdLFxuICAgIGV4cG9ydHM6IFtDYXNjYWRlU2VsZWN0LCBTaGFyZWRNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIENhc2NhZGVTZWxlY3RNb2R1bGUge31cbiJdfQ==
|