@colijnit/configurator 12.0.4 → 12.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"Builder":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":21,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"init":[{"__symbolic":"method"}],"buildModel":[{"__symbolic":"method"}],"buildModelFromData":[{"__symbolic":"method"}],"initNodeInstance":[{"__symbolic":"method"}],"destroy":[{"__symbolic":"method"}],"selectSelection":[{"__symbolic":"method"}],"getQuestionAndAnswers":[{"__symbolic":"method"}],"selectAnswer":[{"__symbolic":"method"}],"getImageForSelectionOrAnswer":[{"__symbolic":"method"}],"_cleanUp":[{"__symbolic":"method"}],"_handleResponseData":[{"__symbolic":"method"}],"_setInstanceId":[{"__symbolic":"method"}],"_prepareConfiguration":[{"__symbolic":"method"}],"_downloadAsset":[{"__symbolic":"method"}],"_build":[{"__symbolic":"method"}],"_prepareTheSelections":[{"__symbolic":"method"}],"_createAdjustable":[{"__symbolic":"method"}],"_createAddable":[{"__symbolic":"method"}],"_placeAddables":[{"__symbolic":"method"}],"_createUniqueName":[{"__symbolic":"method"}],"_getGoodIdFromSku":[{"__symbolic":"method"}],"_getArticle":[{"__symbolic":"method"}],"_getSelections":[{"__symbolic":"method"}],"_getDecos":[{"__symbolic":"method"}],"_linkSelectionsAndDecos":[{"__symbolic":"method"}],"_getVariations":[{"__symbolic":"method"}],"_loadVariations":[{"__symbolic":"method"}],"_getAdjustables":[{"__symbolic":"method"}],"_updatePivot":[{"__symbolic":"method"}],"_reset":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ConfiguratorService":{"__symbolic":"class","members":{"initApi":[{"__symbolic":"method"}],"initNodeInstance":[{"__symbolic":"method"}],"setInstanceToConfigure":[{"__symbolic":"method"}],"getGoodIdFromSku":[{"__symbolic":"method"}],"getArticleQuickSel":[{"__symbolic":"method"}],"getSelections":[{"__symbolic":"method"}],"getDecos":[{"__symbolic":"method"}],"getQuestionAndAnswers":[{"__symbolic":"method"}],"getSingleImage":[{"__symbolic":"method"}],"selectSelection":[{"__symbolic":"method"}],"selectAnswer":[{"__symbolic":"method"}]}},"AnswersModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":10,"character":8},{"__symbolic":"reference","name":"ɵa"}],"declarations":[{"__symbolic":"reference","name":"AnswersComponent"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"ɵe"}],"exports":[{"__symbolic":"reference","name":"AnswersComponent"}]}]}],"members":{}},"AnswersComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"answers","template":"\n <div class=\"ione-configurator\">\n <div class=\"rp-answers-slideout\">\n <h2 class=\"answers-title\" [textContent]=\"selectionTitle\"></h2>\n <div class=\"answers-container\" visibilityObserverMaster>\n <answer *ngFor=\"let answer of answers\"\n (click)=\"answerClick.emit(answer)\"\n [answer]=\"answer\"\n visibilityObserver\n #intersection=\"intersection\"\n [observerEnabled]=\"true\"\n [showing]=\"intersection.isIntersecting\"\n ></answer>\n </div>\n \n </div>\n </div>\n ","styles":[".ione-configurator .rp-answers-slideout{position:absolute;top:0;right:0;width:400px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.ione-configurator .answers-title{margin-left:10px;color:#1a1a1a}.ione-configurator .answers-container{height:100vh;overflow-y:scroll}.ione-configurator .answer-content{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .img-size{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-wrapper{display:block}.ione-configurator .answer-title{font-size:12px;position:relative;overflow:hidden;cursor:pointer}.ione-configurator .question{font-weight:bold;color:#1a1a1a}.ione-configurator .answer{font-size:12px;font-style:italic;margin-top:3px}.ione-configurator .collapse-wrapper{display:block}.ione-configurator .collapse-content{display:block}.ione-configurator .collapse-handle{position:absolute;top:10px;right:12px;border:solid black;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}.ione-configurator .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.ione-configurator .child-selection{margin-left:10px;display:flex;flex-direction:column;margin-top:5px}.ione-configurator .mat-title{margin-left:10px;color:#1a1a1a}.ione-configurator .drawer__header{height:48px}.ione-configurator .rp-selections-summary{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;background:transparent;overflow:auto;position:absolute;top:0;right:0;width:400px}.ione-configurator .selections-content{overflow-y:auto}.ione-configurator .co-summary-line{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .selection-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .selection-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .answer-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .unloaded{background-color:#d3d3d3}.ione-configurator .titles{margin-left:14px;align-self:center}.ione-configurator .title-wrapper{display:flex;flex-direction:column}.ione-configurator .answer-title-wrapper{text-align:center;align-self:center;margin-left:14px}\n"]}]}],"members":{"answers":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":5}}]}],"selectionTitle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":5}}]}],"answerClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":35,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor"}]}},"SelectionsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":7,"character":8},{"__symbolic":"reference","name":"ɵa"}],"declarations":[{"__symbolic":"reference","name":"SelectionsComponent"}],"exports":[{"__symbolic":"reference","name":"SelectionsComponent"}]}]}],"members":{}},"SelectionsComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":13,"character":1},"arguments":[{"selector":"selections","template":"\n <div class=\"ione-configurator\">\n <div class=\"rp-selections-summary\">\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\" [textContent]=\"'Configuratie'\"></h2>\n <!--<button>-->\n <!---->\n <!--</button>-->\n </header>\n <div class=\"selections-content\">\n <ng-container *ngFor=\"let selectionViewModel of selectionViewModels\">\n\n <div class=\"co-summary-line\" (click)=\"selectSelection(selectionViewModel.selection, $event)\">\n <div class=\"selection-thumbnail\">\n <rp-loader *ngIf=\"selectionViewModel.thumbnail === ''\"></rp-loader>\n <img visibilityObserver *ngIf=\"selectionViewModel.thumbnail !== '' && selectionViewModel.thumbnail !== null\" class=\"selection-img\" [src]=\"selectionViewModel.thumbnail\">\n </div>\n <div class=\"titles\">\n <div class=\"title-wrapper\">\n <label class=\"question\" [textContent]=\"selectionViewModel.selection.question\"></label>\n <span class=\"answer\" [textContent]=\"selectionViewModel.selection.answer\"></span>\n <div *ngIf=\"selectionViewModel.children.length > 0 && selectionViewModel.expanded\" @showHideChildren>\n <div class=\"child-selection\" *ngFor=\"let selection of selectionViewModel.children\"\n (click)=\"selectSelection(selection, $event)\"\n >\n <label class=\"question\" [textContent]=\"selection.commercialQuestion\"></label>\n <span class=\"answer\" [textContent]=\"selection.answer\"></span>\n </div>\n </div>\n </div>\n </div>\n \n <div class=\"price-wrapper\">\n <span class=\"price-value\"></span>\n </div>\n\n <div class=\"collapse-wrapper\">\n <div class=\"collapse-content\">\n <div class=\"collapse-handle\" [class.expanded]=\"selectionViewModel.expanded\"\n *ngIf=\"selectionViewModel.children.length > 0\" (click)=\"expandClicked(selectionViewModel, $event)\"></div>\n </div>\n </div>\n </div>\n\n </ng-container>\n </div>\n </div>\n </div>\n ","animations":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":68,"character":8},"arguments":["showHideChildren",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":69,"character":12},"arguments":["void",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":69,"character":26},"arguments":[{"height":"0","$quoted$":["height"]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":70,"character":12},"arguments":["*",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":70,"character":23},"arguments":[{"height":"*","$quoted$":["height"]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":71,"character":12},"arguments":["void <=> *",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":71,"character":37},"arguments":[200]}]}]]}],"styles":[".ione-configurator .rp-answers-slideout{position:absolute;top:0;right:0;width:400px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.ione-configurator .answers-title{margin-left:10px;color:#1a1a1a}.ione-configurator .answers-container{height:100vh;overflow-y:scroll}.ione-configurator .answer-content{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .img-size{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-wrapper{display:block}.ione-configurator .answer-title{font-size:12px;position:relative;overflow:hidden;cursor:pointer}.ione-configurator .question{font-weight:bold;color:#1a1a1a}.ione-configurator .answer{font-size:12px;font-style:italic;margin-top:3px}.ione-configurator .collapse-wrapper{display:block}.ione-configurator .collapse-content{display:block}.ione-configurator .collapse-handle{position:absolute;top:10px;right:12px;border:solid black;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}.ione-configurator .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.ione-configurator .child-selection{margin-left:10px;display:flex;flex-direction:column;margin-top:5px}.ione-configurator .mat-title{margin-left:10px;color:#1a1a1a}.ione-configurator .drawer__header{height:48px}.ione-configurator .rp-selections-summary{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;background:transparent;overflow:auto;position:absolute;top:0;right:0;width:400px}.ione-configurator .selections-content{overflow-y:auto}.ione-configurator .co-summary-line{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .selection-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .selection-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .answer-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .unloaded{background-color:#d3d3d3}.ione-configurator .titles{margin-left:14px;align-self:center}.ione-configurator .title-wrapper{display:flex;flex-direction:column}.ione-configurator .answer-title-wrapper{text-align:center;align-self:center;margin-left:14px}\n"]}]}],"members":{"selections":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":5}}]}],"selectionClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":85,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Builder"}]}],"expandClicked":[{"__symbolic":"method"}],"selectSelection":[{"__symbolic":"method"}],"_loadThumbnails":[{"__symbolic":"method"}],"_prepareSelections":[{"__symbolic":"method"}]}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":6,"character":4}],"declarations":[{"__symbolic":"reference","name":"ɵb"}],"exports":[{"__symbolic":"reference","name":"ɵb"}]}]}],"members":{}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"rp-loader","template":"\n <div class=\"loader-wrapper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" stroke=\"#3760a1\">\n <g fill=\"none\" fill-rule=\"evenodd\" stroke-width=\"3\">\n <circle class=\"ripple1\" cx=\"22\" cy=\"22\" r=\"19\">\n </circle>\n <circle class=\"ripple2\" cx=\"22\" cy=\"22\" r=\"19\">\n </circle>\n </g>\n </svg>\n </div>\n ","styles":[":host{-webkit-user-select:none;user-select:none;pointer-events:none}:host .loader-wrapper{z-index:1100;position:absolute;width:54px;height:54px}:host .loader-wrapper svg{width:100%;height:100%}:host .loader-wrapper svg .ripple1{transform-origin:center;animation:ripple 1.5s infinite}:host .loader-wrapper svg .ripple2{transform-origin:center;animation:ripple 1.5s infinite .4s}@keyframes ripple{0%{transform:scale(0);opacity:1}to{transform:scale(1);opacity:0}}\n"]}]}],"members":{}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"answer","template":"\n <div class=\"ione-configurator\">\n <div class=\"answer-wrapper\">\n <div class=\"answer-content\" @answerAppear>\n <div class=\"answer-thumbnail\">\n <rp-loader *ngIf=\"answer.imageData === ''\"></rp-loader>\n <img *ngIf=\"answer.imageData !== '' && answer.imageData !== null\" class=\"answer-img\" [src]=\"answer.imageData\">\n </div>\n <div class=\"answer-title-wrapper\">\n <span class=\"answer-title\" [textContent]=\"answer.commercialAnswer\"></span>\n </div>\n <div class=\"price\">\n <span class=\"price-value\"></span>\n </div>\n </div>\n </div>\n </div>\n ","animations":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":30,"character":4},"arguments":["answerAppear",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":31,"character":6},"arguments":["void",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":31,"character":20},"arguments":[{"background":"#dbdbdb","$quoted$":["background"]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":32,"character":6},"arguments":["white",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":32,"character":21},"arguments":[{"background":"white","$quoted$":["background"]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":33,"character":6},"arguments":["void <=> *",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":33,"character":31},"arguments":[500]}]}]]}],"styles":[".ione-configurator .rp-answers-slideout{position:absolute;top:0;right:0;width:400px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.ione-configurator .answers-title{margin-left:10px;color:#1a1a1a}.ione-configurator .answers-container{height:100vh;overflow-y:scroll}.ione-configurator .answer-content{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .img-size{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-wrapper{display:block}.ione-configurator .answer-title{font-size:12px;position:relative;overflow:hidden;cursor:pointer}.ione-configurator .question{font-weight:bold;color:#1a1a1a}.ione-configurator .answer{font-size:12px;font-style:italic;margin-top:3px}.ione-configurator .collapse-wrapper{display:block}.ione-configurator .collapse-content{display:block}.ione-configurator .collapse-handle{position:absolute;top:10px;right:12px;border:solid black;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}.ione-configurator .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.ione-configurator .child-selection{margin-left:10px;display:flex;flex-direction:column;margin-top:5px}.ione-configurator .mat-title{margin-left:10px;color:#1a1a1a}.ione-configurator .drawer__header{height:48px}.ione-configurator .rp-selections-summary{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;background:transparent;overflow:auto;position:absolute;top:0;right:0;width:400px}.ione-configurator .selections-content{overflow-y:auto}.ione-configurator .co-summary-line{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .selection-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .selection-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .answer-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .unloaded{background-color:#d3d3d3}.ione-configurator .titles{margin-left:14px;align-self:center}.ione-configurator .title-wrapper{display:flex;flex-direction:column}.ione-configurator .answer-title-wrapper{text-align:center;align-self:center;margin-left:14px}\n"]}]}],"members":{"answer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":3}}]}],"showing":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Builder"}]}],"ngOnInit":[{"__symbolic":"method"}],"_loadThumbnail":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":3,"character":1},"arguments":[{"selector":"[visibilityObserver]","exportAs":"intersection"}]}],"members":{"observerEnabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":9,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":24,"character":18}]}],"ngOnDestroy":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}]}},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":3,"character":1},"arguments":[{"selector":"[visibilityObserverMaster]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnDestroy":[{"__symbolic":"method"}],"add":[{"__symbolic":"method"}],"remove":[{"__symbolic":"method"}]}}},"origins":{"Builder":"./app/builder","ConfiguratorService":"./app/services/configurator.service","AnswersModule":"./app/components/answers/answers.module","AnswersComponent":"./app/components/answers/answers.component","SelectionsModule":"./app/components/selections/selections.module","SelectionsComponent":"./app/components/selections/selections.component","ɵa":"./app/components/shared/shared.module","ɵb":"./app/components/shared/loader/loader.component","ɵc":"./app/components/answers/answer/answer.component","ɵd":"./app/directives/visibility-observer.directive","ɵe":"./app/directives/visibility-observer-master.directive"},"importAs":"@colijnit/configurator"}
1
+ {"__symbolic":"module","version":4,"metadata":{"Builder":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":21,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"init":[{"__symbolic":"method"}],"buildModel":[{"__symbolic":"method"}],"buildModelFromData":[{"__symbolic":"method"}],"initNodeInstance":[{"__symbolic":"method"}],"destroy":[{"__symbolic":"method"}],"selectSelection":[{"__symbolic":"method"}],"getQuestionAndAnswers":[{"__symbolic":"method"}],"selectAnswer":[{"__symbolic":"method"}],"getImageForSelectionOrAnswer":[{"__symbolic":"method"}],"_cleanUp":[{"__symbolic":"method"}],"_handleResponseData":[{"__symbolic":"method"}],"_preloadMaterials":[{"__symbolic":"method"}],"_setInstanceId":[{"__symbolic":"method"}],"_prepareConfiguration":[{"__symbolic":"method"}],"_downloadAsset":[{"__symbolic":"method"}],"_build":[{"__symbolic":"method"}],"_prepareTheSelections":[{"__symbolic":"method"}],"_createAdjustable":[{"__symbolic":"method"}],"_createAddable":[{"__symbolic":"method"}],"_placeAddables":[{"__symbolic":"method"}],"_createUniqueName":[{"__symbolic":"method"}],"_getGoodIdFromSku":[{"__symbolic":"method"}],"_getArticle":[{"__symbolic":"method"}],"_getSelections":[{"__symbolic":"method"}],"_getDecos":[{"__symbolic":"method"}],"_linkSelectionsAndDecos":[{"__symbolic":"method"}],"_getVariations":[{"__symbolic":"method"}],"_loadVariations":[{"__symbolic":"method"}],"_getAdjustables":[{"__symbolic":"method"}],"_updatePivot":[{"__symbolic":"method"}],"_reset":[{"__symbolic":"method"}],"_log":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ConfiguratorService":{"__symbolic":"class","members":{"initApi":[{"__symbolic":"method"}],"initNodeInstance":[{"__symbolic":"method"}],"setInstanceToConfigure":[{"__symbolic":"method"}],"getGoodIdFromSku":[{"__symbolic":"method"}],"getArticleQuickSel":[{"__symbolic":"method"}],"getSelections":[{"__symbolic":"method"}],"getDecos":[{"__symbolic":"method"}],"getQuestionAndAnswers":[{"__symbolic":"method"}],"getSingleImage":[{"__symbolic":"method"}],"selectSelection":[{"__symbolic":"method"}],"selectAnswer":[{"__symbolic":"method"}]}},"AnswersModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":10,"character":8},{"__symbolic":"reference","name":"ɵa"}],"declarations":[{"__symbolic":"reference","name":"AnswersComponent"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"ɵe"}],"exports":[{"__symbolic":"reference","name":"AnswersComponent"}]}]}],"members":{}},"AnswersComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":3,"character":1},"arguments":[{"selector":"answers","template":"\n <div class=\"ione-configurator\">\n <div class=\"rp-answers-slideout\">\n <h2 class=\"answers-title\" [textContent]=\"selectionTitle\"></h2>\n <div class=\"answers-container\" visibilityObserverMaster>\n <answer *ngFor=\"let answer of answers\"\n (click)=\"answerClick.emit(answer)\"\n [answer]=\"answer\"\n visibilityObserver\n #intersection=\"intersection\"\n [observerEnabled]=\"true\"\n [showing]=\"intersection.isIntersecting\"\n ></answer>\n </div>\n \n </div>\n </div>\n ","styles":[".ione-configurator .rp-answers-slideout{position:absolute;top:0;right:0;width:400px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.ione-configurator .answers-title{margin-left:10px;color:#1a1a1a}.ione-configurator .answers-container{height:100vh;overflow-y:scroll}.ione-configurator .answer-content{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .img-size{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-wrapper{display:block}.ione-configurator .answer-title{font-size:12px;position:relative;overflow:hidden;cursor:pointer}.ione-configurator .question{font-weight:bold;color:#1a1a1a}.ione-configurator .answer{font-size:12px;font-style:italic;margin-top:3px}.ione-configurator .collapse-wrapper{display:block}.ione-configurator .collapse-content{display:block}.ione-configurator .collapse-handle{position:absolute;top:10px;right:12px;border:solid black;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}.ione-configurator .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.ione-configurator .child-selection{margin-left:10px;display:flex;flex-direction:column;margin-top:5px}.ione-configurator .mat-title{margin-left:10px;color:#1a1a1a}.ione-configurator .drawer__header{height:48px}.ione-configurator .rp-selections-summary{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;background:transparent;overflow:auto;position:absolute;top:0;right:0;width:400px}.ione-configurator .selections-content{overflow-y:auto}.ione-configurator .co-summary-line{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .selection-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .selection-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .answer-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .unloaded{background-color:#d3d3d3}.ione-configurator .titles{margin-left:14px;align-self:center}.ione-configurator .title-wrapper{display:flex;flex-direction:column}.ione-configurator .answer-title-wrapper{text-align:center;align-self:center;margin-left:14px}\n"]}]}],"members":{"answers":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":5}}]}],"selectionTitle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":5}}]}],"answerClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":35,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor"}]}},"SelectionsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":7,"character":8},{"__symbolic":"reference","name":"ɵa"}],"declarations":[{"__symbolic":"reference","name":"SelectionsComponent"}],"exports":[{"__symbolic":"reference","name":"SelectionsComponent"}]}]}],"members":{}},"SelectionsComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":13,"character":1},"arguments":[{"selector":"selections","template":"\n <div class=\"ione-configurator\">\n <div class=\"rp-selections-summary\">\n <header class=\"drawer__header\">\n <h2 class=\"mat-title\" [textContent]=\"'Configuratie'\"></h2>\n <!--<button>-->\n <!---->\n <!--</button>-->\n </header>\n <div class=\"selections-content\">\n <ng-container *ngFor=\"let selectionViewModel of selectionViewModels\">\n\n <div class=\"co-summary-line\" (click)=\"selectSelection(selectionViewModel.selection, $event)\">\n <div class=\"selection-thumbnail\">\n <rp-loader *ngIf=\"selectionViewModel.thumbnail === ''\"></rp-loader>\n <img visibilityObserver *ngIf=\"selectionViewModel.thumbnail !== '' && selectionViewModel.thumbnail !== null\" class=\"selection-img\" [src]=\"selectionViewModel.thumbnail\">\n </div>\n <div class=\"titles\">\n <div class=\"title-wrapper\">\n <label class=\"question\" [textContent]=\"selectionViewModel.selection.question\"></label>\n <span class=\"answer\" [textContent]=\"selectionViewModel.selection.answer\"></span>\n <div *ngIf=\"selectionViewModel.children.length > 0 && selectionViewModel.expanded\" @showHideChildren>\n <div class=\"child-selection\" *ngFor=\"let selection of selectionViewModel.children\"\n (click)=\"selectSelection(selection, $event)\"\n >\n <label class=\"question\" [textContent]=\"selection.commercialQuestion\"></label>\n <span class=\"answer\" [textContent]=\"selection.answer\"></span>\n </div>\n </div>\n </div>\n </div>\n \n <div class=\"price-wrapper\">\n <span class=\"price-value\"></span>\n </div>\n\n <div class=\"collapse-wrapper\">\n <div class=\"collapse-content\">\n <div class=\"collapse-handle\" [class.expanded]=\"selectionViewModel.expanded\"\n *ngIf=\"selectionViewModel.children.length > 0\" (click)=\"expandClicked(selectionViewModel, $event)\"></div>\n </div>\n </div>\n </div>\n\n </ng-container>\n </div>\n </div>\n </div>\n ","animations":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":68,"character":8},"arguments":["showHideChildren",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":69,"character":12},"arguments":["void",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":69,"character":26},"arguments":[{"height":"0","$quoted$":["height"]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":70,"character":12},"arguments":["*",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":70,"character":23},"arguments":[{"height":"*","$quoted$":["height"]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":71,"character":12},"arguments":["void <=> *",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":71,"character":37},"arguments":[200]}]}]]}],"styles":[".ione-configurator .rp-answers-slideout{position:absolute;top:0;right:0;width:400px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.ione-configurator .answers-title{margin-left:10px;color:#1a1a1a}.ione-configurator .answers-container{height:100vh;overflow-y:scroll}.ione-configurator .answer-content{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .img-size{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-wrapper{display:block}.ione-configurator .answer-title{font-size:12px;position:relative;overflow:hidden;cursor:pointer}.ione-configurator .question{font-weight:bold;color:#1a1a1a}.ione-configurator .answer{font-size:12px;font-style:italic;margin-top:3px}.ione-configurator .collapse-wrapper{display:block}.ione-configurator .collapse-content{display:block}.ione-configurator .collapse-handle{position:absolute;top:10px;right:12px;border:solid black;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}.ione-configurator .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.ione-configurator .child-selection{margin-left:10px;display:flex;flex-direction:column;margin-top:5px}.ione-configurator .mat-title{margin-left:10px;color:#1a1a1a}.ione-configurator .drawer__header{height:48px}.ione-configurator .rp-selections-summary{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;background:transparent;overflow:auto;position:absolute;top:0;right:0;width:400px}.ione-configurator .selections-content{overflow-y:auto}.ione-configurator .co-summary-line{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .selection-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .selection-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .answer-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .unloaded{background-color:#d3d3d3}.ione-configurator .titles{margin-left:14px;align-self:center}.ione-configurator .title-wrapper{display:flex;flex-direction:column}.ione-configurator .answer-title-wrapper{text-align:center;align-self:center;margin-left:14px}\n"]}]}],"members":{"selections":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":5}}]}],"selectionClick":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":85,"character":5}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Builder"}]}],"expandClicked":[{"__symbolic":"method"}],"selectSelection":[{"__symbolic":"method"}],"_loadThumbnails":[{"__symbolic":"method"}],"_prepareSelections":[{"__symbolic":"method"}]}},"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":6,"character":4}],"declarations":[{"__symbolic":"reference","name":"ɵb"}],"exports":[{"__symbolic":"reference","name":"ɵb"}]}]}],"members":{}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"rp-loader","template":"\n <div class=\"loader-wrapper\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" stroke=\"#3760a1\">\n <g fill=\"none\" fill-rule=\"evenodd\" stroke-width=\"3\">\n <circle class=\"ripple1\" cx=\"22\" cy=\"22\" r=\"19\">\n </circle>\n <circle class=\"ripple2\" cx=\"22\" cy=\"22\" r=\"19\">\n </circle>\n </g>\n </svg>\n </div>\n ","styles":[":host{-webkit-user-select:none;user-select:none;pointer-events:none}:host .loader-wrapper{z-index:1100;position:absolute;width:54px;height:54px}:host .loader-wrapper svg{width:100%;height:100%}:host .loader-wrapper svg .ripple1{transform-origin:center;animation:ripple 1.5s infinite}:host .loader-wrapper svg .ripple2{transform-origin:center;animation:ripple 1.5s infinite .4s}@keyframes ripple{0%{transform:scale(0);opacity:1}to{transform:scale(1);opacity:0}}\n"]}]}],"members":{}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"answer","template":"\n <div class=\"ione-configurator\">\n <div class=\"answer-wrapper\">\n <div class=\"answer-content\" @answerAppear>\n <div class=\"answer-thumbnail\">\n <rp-loader *ngIf=\"answer.imageData === ''\"></rp-loader>\n <img *ngIf=\"answer.imageData !== '' && answer.imageData !== null\" class=\"answer-img\" [src]=\"answer.imageData\">\n </div>\n <div class=\"answer-title-wrapper\">\n <span class=\"answer-title\" [textContent]=\"answer.commercialAnswer\"></span>\n </div>\n <div class=\"price\">\n <span class=\"price-value\"></span>\n </div>\n </div>\n </div>\n </div>\n ","animations":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"trigger","line":30,"character":4},"arguments":["answerAppear",[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":31,"character":6},"arguments":["void",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":31,"character":20},"arguments":[{"background":"#dbdbdb","$quoted$":["background"]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"state","line":32,"character":6},"arguments":["white",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"style","line":32,"character":21},"arguments":[{"background":"white","$quoted$":["background"]}]}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"transition","line":33,"character":6},"arguments":["void <=> *",{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/animations","name":"animate","line":33,"character":31},"arguments":[500]}]}]]}],"styles":[".ione-configurator .rp-answers-slideout{position:absolute;top:0;right:0;width:400px;height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.ione-configurator .answers-title{margin-left:10px;color:#1a1a1a}.ione-configurator .answers-container{height:100vh;overflow-y:scroll}.ione-configurator .answer-content{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .img-size{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-wrapper{display:block}.ione-configurator .answer-title{font-size:12px;position:relative;overflow:hidden;cursor:pointer}.ione-configurator .question{font-weight:bold;color:#1a1a1a}.ione-configurator .answer{font-size:12px;font-style:italic;margin-top:3px}.ione-configurator .collapse-wrapper{display:block}.ione-configurator .collapse-content{display:block}.ione-configurator .collapse-handle{position:absolute;top:10px;right:12px;border:solid black;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}.ione-configurator .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}.ione-configurator .child-selection{margin-left:10px;display:flex;flex-direction:column;margin-top:5px}.ione-configurator .mat-title{margin-left:10px;color:#1a1a1a}.ione-configurator .drawer__header{height:48px}.ione-configurator .rp-selections-summary{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;background:transparent;overflow:auto;position:absolute;top:0;right:0;width:400px}.ione-configurator .selections-content{overflow-y:auto}.ione-configurator .co-summary-line{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid lightgray;padding:10px;display:flex;flex-direction:row;border-radius:3px;margin-bottom:3px;box-shadow:2px 1px #d3d3d380;background:white}.ione-configurator .selection-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .selection-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .answer-thumbnail{width:54px;min-width:54px;height:54px;min-height:54px;border:1px solid #d3d3d3;border-radius:5px}.ione-configurator .answer-img{width:54px;min-width:54px;height:54px;min-height:54px;border-radius:5px}.ione-configurator .unloaded{background-color:#d3d3d3}.ione-configurator .titles{margin-left:14px;align-self:center}.ione-configurator .title-wrapper{display:flex;flex-direction:column}.ione-configurator .answer-title-wrapper{text-align:center;align-self:center;margin-left:14px}\n"]}]}],"members":{"answer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":3}}]}],"showing":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Builder"}]}],"ngOnInit":[{"__symbolic":"method"}],"_loadThumbnail":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":3,"character":1},"arguments":[{"selector":"[visibilityObserver]","exportAs":"intersection"}]}],"members":{"observerEnabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":9,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":24,"character":18}]}],"ngOnDestroy":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}]}},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":3,"character":1},"arguments":[{"selector":"[visibilityObserverMaster]"}]}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"ngOnDestroy":[{"__symbolic":"method"}],"add":[{"__symbolic":"method"}],"remove":[{"__symbolic":"method"}]}}},"origins":{"Builder":"./app/builder","ConfiguratorService":"./app/services/configurator.service","AnswersModule":"./app/components/answers/answers.module","AnswersComponent":"./app/components/answers/answers.component","SelectionsModule":"./app/components/selections/selections.module","SelectionsComponent":"./app/components/selections/selections.component","ɵa":"./app/components/shared/shared.module","ɵb":"./app/components/shared/loader/loader.component","ɵc":"./app/components/answers/answer/answer.component","ɵd":"./app/directives/visibility-observer.directive","ɵe":"./app/directives/visibility-observer-master.directive"},"importAs":"@colijnit/configurator"}
@@ -84,13 +84,16 @@ export class Builder {
84
84
  return;
85
85
  }
86
86
  try {
87
+ this._log('start build');
87
88
  yield this._downloadAsset(assetUrl, cdnUrl, schema);
88
89
  if (selections && selections.length > 1 && decos && decos.length > 0 && this._source) {
89
90
  this._selections = selections;
90
91
  this._decos = decos;
91
92
  this._linkSelectionsAndDecos();
93
+ this._preloadMaterials(schema);
92
94
  const build = yield this._build();
93
95
  this._cleanUp();
96
+ this._log('finish build');
94
97
  return build;
95
98
  }
96
99
  else {
@@ -175,6 +178,9 @@ export class Builder {
175
178
  return '';
176
179
  }
177
180
  }
181
+ _preloadMaterials(schema) {
182
+ this._variationHelper.preloadVariations(schema, this._decos.map(d => d.gameObjectName));
183
+ }
178
184
  _setInstanceId(sku, instanceId, goodId) {
179
185
  return __awaiter(this, void 0, void 0, function* () {
180
186
  if (!instanceId && !this._instanceId) {
@@ -229,6 +235,7 @@ export class Builder {
229
235
  obj.visible = false; // no need to render visualy
230
236
  this._scene.add(obj);
231
237
  let connected = false;
238
+ this._log('build main model');
232
239
  for (let i = 0, len = adjustables.length; i < len; i++) {
233
240
  const adjustable = this._createAdjustable(obj, adjustables[i]);
234
241
  if (adjustable) {
@@ -246,12 +253,17 @@ export class Builder {
246
253
  console.warn('No connection found for: ', adjustable.name);
247
254
  }
248
255
  }
256
+ this._log('place addables');
249
257
  this._placeAddables(obj);
258
+ this._log('update pivot');
250
259
  this._updatePivot(obj);
260
+ this._log('load variations');
251
261
  yield this._loadVariations(obj);
252
262
  // this._variationHelper.clearCache();
263
+ this._log('remove from scene');
253
264
  this._scene.remove(obj);
254
265
  ObjectUtils.DisposeObject(this._source);
266
+ this._log('ready!');
255
267
  return obj;
256
268
  }
257
269
  else {
@@ -519,10 +531,15 @@ export class Builder {
519
531
  }
520
532
  _loadVariations(obj) {
521
533
  return __awaiter(this, void 0, void 0, function* () {
534
+ this._log('load variation for parts');
522
535
  yield this._variationHelper.loadPart(obj, this._adjustables, true);
536
+ this._log('load variation for adjustables');
523
537
  yield this._variationHelper.loadVariation(obj, this._adjustables, true);
538
+ this._log('load variation for addables');
524
539
  yield this._variationHelper.loadVariation(obj, this._addables, true);
540
+ this._log('load variation clear cache');
525
541
  this._variationHelper.clearCache();
542
+ this._log('load variations done');
526
543
  });
527
544
  }
528
545
  _getAdjustables() {
@@ -548,6 +565,12 @@ export class Builder {
548
565
  this._addables.length = 0;
549
566
  this._prepareTheSelections();
550
567
  }
568
+ _log(message) {
569
+ if (this.debug) {
570
+ this.debug(message);
571
+ console.log(new Date(), message);
572
+ }
573
+ }
551
574
  }
552
575
  Builder.ɵprov = i0.ɵɵdefineInjectable({ factory: function Builder_Factory() { return new Builder(); }, token: Builder, providedIn: "root" });
553
576
  Builder.decorators = [
@@ -556,4 +579,4 @@ Builder.decorators = [
556
579
  },] }
557
580
  ];
558
581
  Builder.ctorParameters = () => [];
559
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFJL0IsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBQ3RHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMxRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDdEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN0RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsVUFBVSxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLE9BQU87SUE2QmhCO1FBM0JPLHVCQUFrQixHQUFpQyxJQUFJLGVBQWUsQ0FBYyxFQUFFLENBQUMsQ0FBQztRQUN4RixrQkFBYSxHQUE2QixJQUFJLGVBQWUsQ0FBVSxTQUFTLENBQUMsQ0FBQztRQUNsRixrQkFBYSxHQUFnQyxJQUFJ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QU0sR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7Ozs7WUE5aEJKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gXCJ0aHJlZVwiO1xyXG5pbXBvcnQge1NjZW5lfSBmcm9tIFwidGhyZWVcIjtcclxuaW1wb3J0IHtPcHRpb25zfSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9vcHRpb25zXCI7XHJcbmltcG9ydCB7RGF0YVNlcnZpY2VSZXNwb25zZURhdGF9IGZyb20gXCJAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2RhdGEtc2VydmljZS1yZXNwb25zZS1kYXRhXCI7XHJcbmltcG9ydCB7RGVjb05vZGV9IGZyb20gXCJAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2RlY28tbm9kZVwiO1xyXG5pbXBvcnQge0J1c2luZXNzT2JqZWN0RmFjdG9yeX0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvc2VydmljZS9idXNpbmVzcy1vYmplY3QtZmFjdG9yeVwiO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0aW9uXCI7XHJcbmltcG9ydCB7RGVjb05vZGVUeXBlfSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL2RlY28tbm9kZS10eXBlLmVudW1cIjtcclxuaW1wb3J0IHtUaHJlZWRVdGlsc30gZnJvbSBcIi4uL3V0aWxzL3RocmVlZC51dGlsc1wiO1xyXG5pbXBvcnQge0RlY29Ob2RlS2luZH0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUta2luZC5lbnVtXCI7XHJcbmltcG9ydCB7U2NlbmVVdGlsc30gZnJvbSBcIi4uL3V0aWxzL3NjZW5lLXV0aWxzXCI7XHJcbmltcG9ydCB7VmFyaWF0aW9uSGVscGVyfSBmcm9tIFwiLi4vaGVscGVyL3ZhcmlhdGlvbi1oZWxwZXJcIjtcclxuaW1wb3J0IHtBcnRpY2xlfSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdG9yU2VydmljZX0gZnJvbSBcIi4vc2VydmljZXMvY29uZmlndXJhdG9yLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtBbnN3ZXJ9IGZyb20gXCJAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlclwiO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtRdWVzdGlvbkFuZEFuc3dlcnN9IGZyb20gXCJAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3F1ZXN0aW9uLWFuZC1hbnN3ZXJzXCI7XHJcbmltcG9ydCB7SW1hZ2VVdGlsc30gZnJvbSBcIi4uL3V0aWxzL2ltYWdlLnV0aWxzXCI7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCIuL3V0aWxzL29iamVjdC51dGlsc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEJ1aWxkZXIge1xyXG5cclxuICAgIHB1YmxpYyBzZWxlY3Rpb25zUmVjZWl2ZWQ6IEJlaGF2aW9yU3ViamVjdDxTZWxlY3Rpb25bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdGlvbltdPihbXSk7XHJcbiAgICBwdWJsaWMgYXJ0aWNsZUxvYWRlZDogQmVoYXZpb3JTdWJqZWN0PEFydGljbGU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnRpY2xlPih1bmRlZmluZWQpO1xyXG4gICAgcHVibGljIGRlY29zUmVjZWl2ZWQ6IEJlaGF2aW9yU3ViamVjdDxEZWNvTm9kZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGVjb05vZGVbXT4oW10pO1xyXG4gICAgcHVibGljIGFuc3dlcnNSZWNlaXZlZDogQmVoYXZpb3JTdWJqZWN0PEFuc3dlcltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QW5zd2VyW10+KFtdKTtcclxuICAgIHB1YmxpYyBtb2RlbExvYWRlZDogQmVoYXZpb3JTdWJqZWN0PFRIUkVFLk9iamVjdDNEPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VEhSRUUuT2JqZWN0M0Q+KG51bGwpO1xyXG5cclxuICAgIHByaXZhdGUgX3NjZW5lOiBUSFJFRS5TY2VuZTtcclxuICAgIHByaXZhdGUgX2luc3RhbmNlSWQ6IHN0cmluZztcclxuICAgIHByaXZhdGUgX3NrdTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfZ29vZElkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfYW5zd2VyczogQW5zd2VyW10gPSBbXTtcclxuICAgIHByaXZhdGUgX2RlY29zOiBEZWNvTm9kZVtdID0gW107XHJcbiAgICBwcml2YXRlIF9wbGFjZWRBZGp1c3RhYmxlczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX3BsYWNlZEFkZGFibGVzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfYWRqdXN0YWJsZXM6IGFueVtdID0gW107XHJcbiAgICBwcml2YXRlIF9hZGRhYmxlczogYW55W10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF9pbWFnZUNhY2hlOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIHByaXZhdGUgX2JvRmFjdG9yeTogQnVzaW5lc3NPYmplY3RGYWN0b3J5O1xyXG4gICAgcHJpdmF0ZSBfc291cmNlOiBUSFJFRS5PYmplY3QzRDtcclxuICAgIHByaXZhdGUgX3RocmVlZFV0aWxzOiBUaHJlZWRVdGlscztcclxuICAgIHByaXZhdGUgX3ZhcmlhdGlvbkhlbHBlcjogVmFyaWF0aW9uSGVscGVyO1xyXG4gICAgcHJpdmF0ZSBfYXJ0aWNsZUNhY2hlOiBNYXA8c3RyaW5nLCBBcnRpY2xlPiA9IG5ldyBNYXAoKTtcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRvclNlcnZpY2U6IENvbmZpZ3VyYXRvclNlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoc2NlbmU6IFNjZW5lLCBvcHRpb25zPzogT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuX2JvRmFjdG9yeSA9IG5ldyBCdXNpbmVzc09iamVjdEZhY3RvcnkoKTtcclxuICAgICAgICB0aGlzLl90aHJlZWRVdGlscyA9IG5ldyBUaHJlZWRVdGlscygpO1xyXG4gICAgICAgIHRoaXMuX3ZhcmlhdGlvbkhlbHBlciA9IG5ldyBWYXJpYXRpb25IZWxwZXIoKTtcclxuXHJcbiAgICAgICAgaWYgKCFzY2VuZSkge1xyXG4gICAgICAgICAgICB0aHJvdyAnTm8gc2NlbmUgb2JqZWN0IHByb3ZpZGVkISc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UgPSBuZXcgQ29uZmlndXJhdG9yU2VydmljZSgpO1xyXG4gICAgICAgIC8vIHRoaXMuX2ltYWdlQ2FjaGVTZXJ2aWNlID0gbmV3IEltYWdlQ2FjaGVTZXJ2aWNlKCk7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5pbml0QXBpKG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zY2VuZSA9IHNjZW5lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBidWlsZE1vZGVsKHNrdT86IHN0cmluZywgaW5zdGFuY2VJZD86IHN0cmluZywgZ29vZElkPzogbnVtYmVyKTogUHJvbWlzZTxUSFJFRS5PYmplY3QzRD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fc2NlbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zZXRJbnN0YW5jZUlkKHNrdSwgaW5zdGFuY2VJZCwgZ29vZElkKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcHJlcGFyZUNvbmZpZ3VyYXRpb24odGhpcy5fc2t1LCB0aGlzLl9nb29kSWQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLnNldEluc3RhbmNlVG9Db25maWd1cmUodGhpcy5faW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZTxhbnk+W10gPSBbXTtcclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5nZXRRdWVzdGlvbkFuZEFuc3dlcnMoKSk7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX2dldFNlbGVjdGlvbnModGhpcy5faW5zdGFuY2VJZCkpO1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLl9nZXREZWNvcygpKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hbnN3ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9saW5rU2VsZWN0aW9uc0FuZERlY29zKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBidWlsZCA9IGF3YWl0IHRoaXMuX2J1aWxkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhblVwKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyAnR0xCIHNvdXJjZSBub3QgZm91bmQhJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkTW9kZWxGcm9tRGF0YShzZWxlY3Rpb25zOiBTZWxlY3Rpb25bXSwgZGVjb3M6IERlY29Ob2RlW10sIGFzc2V0VXJsOiBzdHJpbmcsIGNkblVybDogc3RyaW5nLCBzY2hlbWE6IHN0cmluZyk6IFByb21pc2U8VEhSRUUuT2JqZWN0M0Q+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3NjZW5lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZG93bmxvYWRBc3NldChhc3NldFVybCwgY2RuVXJsLCBzY2hlbWEpO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9ucyAmJiBzZWxlY3Rpb25zLmxlbmd0aCA+IDEgJiYgZGVjb3MgJiYgZGVjb3MubGVuZ3RoID4gMCAmJiB0aGlzLl9zb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbnMgPSBzZWxlY3Rpb25zO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVjb3MgPSBkZWNvcztcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xpbmtTZWxlY3Rpb25zQW5kRGVjb3MoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkID0gYXdhaXQgdGhpcy5fYnVpbGQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFuVXAoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBidWlsZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93ICdVbnN1ZmZpY2llbnQgZGF0YSBwcm92aWRlZCEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdE5vZGVJbnN0YW5jZShnb29kSWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UuaW5pdE5vZGVJbnN0YW5jZShnb29kSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RocmVlZFV0aWxzLmNsZWFyQ2FjaGUoKTtcclxuICAgICAgICB0aGlzLl92YXJpYXRpb25IZWxwZXIuY2xlYXJDYWNoZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLnNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb24sIGZhbHNlKTtcclxuICAgICAgICB0aGlzLmdldFF1ZXN0aW9uQW5kQW5zd2VycygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRRdWVzdGlvbkFuZEFuc3dlcnMocHVibGljYXRpb25Db2RlPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb25zQW5kQW5zd2VyczogUXVlc3Rpb25BbmRBbnN3ZXJzID0gYXdhaXQgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5nZXRRdWVzdGlvbkFuZEFuc3dlcnMoZmFsc2UsIHB1YmxpY2F0aW9uQ29kZSk7XHJcbiAgICAgICAgdGhpcy5fYW5zd2VycyA9IHF1ZXN0aW9uc0FuZEFuc3dlcnMuYW5zd2VycztcclxuICAgICAgICB0aGlzLmFuc3dlcnNSZWNlaXZlZC5uZXh0KHF1ZXN0aW9uc0FuZEFuc3dlcnMuYW5zd2Vycyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlbGVjdEFuc3dlcihhbnN3ZXI6IEFuc3dlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2Uuc2VsZWN0QW5zd2VyKGFuc3dlciwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMubW9kZWxMb2FkZWQubmV4dChhd2FpdCB0aGlzLmJ1aWxkTW9kZWwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEltYWdlRm9yU2VsZWN0aW9uT3JBbnN3ZXIob2JqZWN0OiBTZWxlY3Rpb24gfCBBbnN3ZXIpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGNvbnN0IGluY2x1ZGVNaW1lVHlwZTogYm9vbGVhbiA9IHRydWUsIHRodW1iOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvYmplY3QgJiYgb2JqZWN0Lm5vZGVJZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pbWFnZUNhY2hlLmhhcyhvYmplY3Qubm9kZUlkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLmdldFNpbmdsZUltYWdlKG9iamVjdC5ub2RlSWQsIDQsIGluY2x1ZGVNaW1lVHlwZSwgdGh1bWIsIHRydWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZURhdGE6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlNjQ6IHN0cmluZyA9IHRoaXMuX2hhbmRsZVJlc3BvbnNlRGF0YShpbmNsdWRlTWltZVR5cGUsIHRodW1iLCByZXNwb25zZURhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW1hZ2VDYWNoZS5zZXQob2JqZWN0Lm5vZGVJZCwgYmFzZTY0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYmFzZTY0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KG9iamVjdC5ub2RlSWQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIF9jbGVhblVwKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NrdSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9nb29kSWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5faW5zdGFuY2VJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl92YXJpYXRpb25IZWxwZXIuY2xlYXJDYWNoZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2hhbmRsZVJlc3BvbnNlRGF0YShpbmNsdWRlTWltZXR5cGU6IGJvb2xlYW4sIHRodW1iOiBib29sZWFuLCByZXNwb25zZURhdGE6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAocmVzcG9uc2VEYXRhICYmIHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QuZmlsZVBhdGggIT09IG51bGwgJiYgcmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEltYWdlVXRpbHMuZ2V0Rml4ZWRJbWFnZUZpbGVwYXRoVXJsKHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QuZmlsZVBhdGgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluY2x1ZGVNaW1ldHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJbWFnZVV0aWxzLmdldERvY0JvZHlXaXRoTWltZVR5cGVEZWZpbml0aW9uKHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QuZmlsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRodW1iID8gcmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdC50aHVtYm5haWxCb2R5IDogcmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdC5kb2N1bWVudEJvZHkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGh1bWIgPyByZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LnRodW1ibmFpbEJvZHkgOiByZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LmRvY3VtZW50Qm9keTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0SW5zdGFuY2VJZChza3U6IHN0cmluZywgaW5zdGFuY2VJZD86IHN0cmluZywgZ29vZElkPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKCFpbnN0YW5jZUlkICYmICF0aGlzLl9pbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgICAgIGlmICghZ29vZElkKSB7XHJcbiAgICAgICAgICAgICAgICBnb29kSWQgPSBhd2FpdCB0aGlzLl9nZXRHb29kSWRGcm9tU2t1KHNrdSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fZ29vZElkID0gZ29vZElkO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5pbml0Tm9kZUluc3RhbmNlKHRoaXMuX2dvb2RJZCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5zdGFuY2VJZCA9IHJlc3VsdC5yZXN1bHRPYmplY3Q7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyAnRmFpbGVkIHRvIGluaXRpYWxpemUgbm9kZSBpbnN0YW5jZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9pbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlSWQgPSBpbnN0YW5jZUlkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuX3NrdSkge1xyXG4gICAgICAgICAgICB0aGlzLl9za3UgPSBza3U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX3ByZXBhcmVDb25maWd1cmF0aW9uKHNrdTogc3RyaW5nLCBnb29kSWQ/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBhcnRpY2xlOiBBcnRpY2xlID0gYXdhaXQgdGhpcy5fZ2V0QXJ0aWNsZShza3UsIGdvb2RJZCk7XHJcbiAgICAgICAgaWYgKGFydGljbGUgJiYgYXJ0aWNsZS5hc3NldFVybCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9kb3dubG9hZEFzc2V0KGFydGljbGUuYXNzZXRVcmwsIGFydGljbGUuY29udGVudERlbGl2ZXJ5VXJsLCBhcnRpY2xlLmRpc3RTY2hlbWEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9kb3dubG9hZEFzc2V0KGFzc2V0VXJsOiBzdHJpbmcsIGNkblVybDogc3RyaW5nLCBzY2hlbWE6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IGF3YWl0IHRoaXMuX3RocmVlZFV0aWxzLmRvd25sb2FkM0RTb3VyY2UoYXNzZXRVcmwsIGNkblVybClcclxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjZG5VcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmFzc2V0UGF0aCA9XHJcbiAgICAgICAgICAgICAgICBjZG5VcmwgK1xyXG4gICAgICAgICAgICAgICAgKGNkblVybC5lbmRzV2l0aCgnLycpID8gJycgOiAnLycpICtcclxuICAgICAgICAgICAgICAgIChzY2hlbWEgPyBzY2hlbWEgOiAnVVBfREJBJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2J1aWxkKCk6IFByb21pc2U8VEhSRUUuT2JqZWN0M0Q+IHtcclxuICAgICAgICB0aGlzLl9yZXNldCgpO1xyXG4gICAgICAgIGNvbnN0IGFkanVzdGFibGVzOiBTZWxlY3Rpb25bXSA9IHRoaXMuX2dldEFkanVzdGFibGVzKCk7XHJcbiAgICAgICAgaWYgKGFkanVzdGFibGVzICYmIGFkanVzdGFibGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgb2JqOiBUSFJFRS5PYmplY3QzRCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgICAgICAgICBvYmoudmlzaWJsZSA9IGZhbHNlOyAvLyBubyBuZWVkIHRvIHJlbmRlciB2aXN1YWx5XHJcbiAgICAgICAgICAgIHRoaXMuX3NjZW5lLmFkZChvYmopO1xyXG4gICAgICAgICAgICBsZXQgY29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW46IG51bWJlciA9IGFkanVzdGFibGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RhYmxlOiBUSFJFRS5PYmplY3QzRCA9IHRoaXMuX2NyZWF0ZUFkanVzdGFibGUob2JqLCBhZGp1c3RhYmxlc1tpXSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWRqdXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGlpID0gMCwgbGVuaWk6IG51bWJlciA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aDsgaWkgPCBsZW5paTsgaWkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2NlbmVVdGlscy5UcnlTZWxlY3RvckNvbm5lY3Rpb24odGhpcy5fc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmosIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2lpXSwgYWRqdXN0YWJsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2lpXS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdGFibGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFjb25uZWN0ZWQgJiYgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm8gY29ubmVjdGlvbiBmb3VuZCBmb3I6ICcsIGFkanVzdGFibGUubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcGxhY2VBZGRhYmxlcyhvYmopO1xyXG4gICAgICAgICAgICB0aGlzLl91cGRhdGVQaXZvdChvYmopO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9sb2FkVmFyaWF0aW9ucyhvYmopO1xyXG4gICAgICAgICAgICAvLyB0aGlzLl92YXJpYXRpb25IZWxwZXIuY2xlYXJDYWNoZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9zY2VuZS5yZW1vdmUob2JqKTtcclxuICAgICAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLl9zb3VyY2UpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93ICdObyBhZGp1c3RhYmxlcyBmb3VuZCEnO1xyXG4gICAgICAgICAgICAvLyB0aGlzLl9idWlsZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuX2Vycm9yU2VydmljZS5hZGRFcnJvcih0aGlzLmFjdGl2ZUluc3RhbmNlLCB7bWVzc2FnZTogJ05PX1NFTEVDVElPTlNfT1JfREVDT1MnLCBkZXNjcmlwdGlvbjogJ05PX1NFTEVDVElPTlNfT1JfREVDT1NfSU5GTyd9KTtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuYnVpbGRGaW5pc2hlZC5uZXh0KHtpbnN0YW5jZUlkOiB0aGlzLmFjdGl2ZUluc3RhbmNlLCByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLk5vU2VsZWN0aW9uc30pO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHRoaXMuZGVjb3Muc2l6ZSA9PT0gMCkge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLmFkZEVycm9yKHRoaXMuYWN0aXZlSW5zdGFuY2UsIHttZXNzYWdlOiAnTk9fU0VMRUNUSU9OU19PUl9ERUNPUycsIGRlc2NyaXB0aW9uOiAnTk9fU0VMRUNUSU9OU19PUl9ERUNPU19JTkZPJ30pO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQoe2luc3RhbmNlSWQ6IHRoaXMuYWN0aXZlSW5zdGFuY2UsIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUuTm9EZWNvTm9kZXN9KTtcclxuICAgICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuX2Vycm9yU2VydmljZS5hZGRFcnJvcih0aGlzLmFjdGl2ZUluc3RhbmNlLCB7bWVzc2FnZTogJ05PX0FESlVTVEFCTEVTJywgZGVzY3JpcHRpb246ICdOT19BREpVU1RBQkxFU19JTkZPJ30pO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQoe2luc3RhbmNlSWQ6IHRoaXMuYWN0aXZlSW5zdGFuY2UsIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUuTm9BZGp1c3RhYmxlc30pO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZXBhcmVUaGVTZWxlY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGdldCBnZW5lcmljIHZhcmlhdGlvbnNcclxuICAgICAgICBjb25zdCBnbG9iYWxWYXJpYXRpb25zOiBEZWNvTm9kZVtdID0gdGhpcy5fc2VsZWN0aW9uc1xyXG4gICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5nZW5lcmljICYmIChzLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uICYmICFzLmRlY29Ob2RlLnR5cGUpXHJcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlOiBTZWxlY3Rpb24sIGluZGV4OiBudW1iZXIsIGFycmF5OiBTZWxlY3Rpb25bXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gZmluZCBzZWxlY3Rpb24gb2YgdmFyaWF0aW9uXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWw6IFNlbGVjdGlvbiA9IHRoaXMuX3NlbGVjdGlvbnMuZmluZChzID0+IHMuYXJ0Tm9kZUlkRGVjbyA9PT0gKHZhbHVlLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLmlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24uc3VwcGxpZXJBcnRpY2xlTnIgPSBzZWwuc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24ubWF0ZXJpYWxJZCA9IHZhbHVlLmhkZWNvR2FtZU9iamVjdDtcclxuICAgICAgICAgICAgICAgIHJldHVybiAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb247XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBjb25zdCB1c2VkVmFyaWF0aW9uczogRnVybml0dXJlUGFydFZhcmlhdGlvbltdID0gW107XHJcbiAgICAgICAgbGV0IGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLl9zZWxlY3Rpb25zLmxlbmd0aDtcclxuICAgICAgICBsZXQgbGFzdEFkZGVkOiBTZWxlY3Rpb247XHJcbiAgICAgICAgbGV0IGxhc3RBZGp1c3RhYmxlOiBTZWxlY3Rpb247XHJcbiAgICAgICAgbGV0IG5ld1BhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJldmlvdXNQcmVzTGV2ZWw6IG51bWJlciA9IC0xO1xyXG4gICAgICAgIGxldCBwb3NpdGlvbmluZzogYW55O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9zZWxlY3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmluZyA9IHNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWwgPiBwcmV2aW91c1ByZXNMZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmcgPSBzZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZyB8fCBwb3NpdGlvbmluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdQYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRkZWQudmFyaWF0aW9ucyA9IFtzZWxlY3Rpb24uZGVjb05vZGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMucHVzaChzZWxlY3Rpb24uZGVjb05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsVmFyaWF0aW9uc1Jld3JpdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9ucy5wdXNoKHNlbGVjdGlvbi5kZWNvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IHZhcmlhdGlvbjogRnVybml0dXJlUGFydFZhcmlhdGlvbiA9IG5ldyBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWF0aW9uLkJyYW5kSWQgPSBzZWxlY3Rpb24uZGVjb05vZGUuYnJhbmRJZDtcclxuICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYXRpb24uRGVzY3JpcHRpb24gPSBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWF0aW9uLk1hdGVyaWFsSWQgPSAoc2VsZWN0aW9uLmRlY29Ob2RlIGFzIGFueSkubWF0ZXJpYWxJZDtcclxuICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYXRpb24uU3VwcGxpZXJBcnRpY2xlTnIgPSAoc2VsZWN0aW9uLmRlY29Ob2RlIGFzIGFueSkuc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdXNlZFZhcmlhdGlvbnMucHVzaCh2YXJpYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZSh0aGlzLmFjdGl2ZUluc3RhbmNlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIFZhcmlhdGlvbjogc2VsZWN0aW9uLmRlY29Ob2RlLmJyYW5kSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIFZhcmlhdGlvbkRlc2NyaXB0aW9uOiBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIFN1cHBsaWVyQXJ0aWNsZU5yOiAoc2VsZWN0aW9uLmRlY29Ob2RlIGFzIGFueSkuc3VwcGxpZXJBcnRpY2xlTnJcclxuICAgICAgICAgICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLnR5cGUgPT09IERlY29Ob2RlVHlwZS5QYXJ0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRqdXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IGdsb2JhbFZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkanVzdGFibGVzLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0QWRkZWQgfHwgbGFzdEFkZGVkLm5vZGVJZCAhPT0gc2VsZWN0aW9uLm5vZGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFydCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkZGVkID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRqdXN0YWJsZSA9IHNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRkYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IGxhc3RBZGp1c3RhYmxlID8gbGFzdEFkanVzdGFibGUudmFyaWF0aW9ucyA6IGdsb2JhbFZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0QWRqdXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkanVzdGFibGUuYWRkYWJsZXMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZGFibGVzLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0QWRkZWQgfHwgbGFzdEFkZGVkLm5vZGVJZCAhPT0gc2VsZWN0aW9uLm5vZGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFydCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkZGVkID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2aW91c1ByZXNMZXZlbCA9IHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5fdXBzZXJ0RnVybml0dXJlKHRoaXMuYWN0aXZlSW5zdGFuY2UsXHJcbiAgICAgICAgLy8gICB7VmFyaWF0aW9uczogdXNlZFZhcmlhdGlvbnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jcmVhdGVBZGp1c3RhYmxlKHBhcmVudDogVEhSRUUuT2JqZWN0M0QsIGFkajogU2VsZWN0aW9uKTogVEhSRUUuT2JqZWN0M0Qge1xyXG4gICAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuX3NvdXJjZSA/IHRoaXMuX3NvdXJjZS5nZXRPYmplY3RCeU5hbWUoYWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFvYmopIHtcclxuICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBnbGIgZmlsZXMsIHRoZSBpbXBvcnRlciByZW1vdmVzIGRvdHMgZnJvbSBuYW1lc1xyXG4gICAgICAgICAgICBjb25zdCBuYW1lID0gYWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnJlcGxhY2UoL1suXS9nLCAnJyk7XHJcbiAgICAgICAgICAgIG9iaiA9IHRoaXMuX3NvdXJjZSA/IHRoaXMuX3NvdXJjZS5nZXRPYmplY3RCeU5hbWUobmFtZSkgOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKGBObyBvYmplY3Qgd2l0aCBuYW1lICR7YWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lfSBmb3VuZCFgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhZGp1c3RhYmxlOiBhbnkgPSBvYmouY2xvbmUoKTtcclxuICAgICAgICBhZGp1c3RhYmxlLm5hbWUgPSB0aGlzLl9jcmVhdGVVbmlxdWVOYW1lKHBhcmVudCwgb2JqKTtcclxuICAgICAgICBhZGp1c3RhYmxlLnVzZXJEYXRhLnNlbGVjdGlvbiA9IGFkajtcclxuICAgICAgICBhZGp1c3RhYmxlLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgICAgICBhZGp1c3RhYmxlLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIHBhcmVudC5hZGQoYWRqdXN0YWJsZSk7XHJcbiAgICAgICAgLy8gdGhlIG9iamVjdCBiZWluZyBhZGRlZCB0byB0aGUgY3VzdG9tRmxvb3JHcm91cCBpcyBiZWluZyByZWNyZWF0ZWQgc28gd2UgbG9vc2UgdGhlIHJlZmVyZW5jZVxyXG4gICAgICAgIC8vIHRoZXJlZm9yIHdlIG5lZWQgdG8gcmV0cmlldmUgdGhlIGNyZWF0ZWQgb2JqZWN0IGFnYWluXHJcbiAgICAgICAgLy8gYWRqdXN0YWJsZSA9IHBhcmVudC5nZXRPYmplY3RCeU5hbWUoYWRqdXN0YWJsZS5uYW1lKTtcclxuICAgICAgICB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5wdXNoKGFkanVzdGFibGUpO1xyXG4gICAgICAgIHJldHVybiBhZGp1c3RhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZUFkZGFibGUocGFyZW50OiBUSFJFRS5PYmplY3QzRCwgYWRkOiBTZWxlY3Rpb24sIHBhcnQyPzogYW55LCBwYXJ0MT86IGFueSk6IFRIUkVFLk9iamVjdDNEIHtcclxuICAgICAgICBjb25zdCBvYmo6IGFueSA9IHRoaXMuX3NvdXJjZS5nZXRPYmplY3RCeU5hbWUoYWRkLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lKTtcclxuICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb25Gcm9tSWQoYWRqLmFydE5vZGVJZERlY28pO1xyXG4gICAgICAgIGNvbnN0IGFkZGFibGU6IGFueSA9IG9iai5jbG9uZSgpO1xyXG4gICAgICAgIGFkZGFibGUubmFtZSA9IHRoaXMuX2NyZWF0ZVVuaXF1ZU5hbWUocGFyZW50LCBvYmopO1xyXG4gICAgICAgIGFkZGFibGUudXNlckRhdGEuc2VsZWN0aW9uID0gYWRkO1xyXG4gICAgICAgIGFkZGFibGUucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIGFkZGFibGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKHBhcnQxICYmIHBhcnQyKSB7XHJcbiAgICAgICAgICAgIHBhcmVudC5hZGQoYWRkYWJsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLnB1c2goYWRkYWJsZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhZGRhYmxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWRkYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wbGFjZUFkZGFibGVzKHBhcmVudDogVEhSRUUuT2JqZWN0M0QpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0aW9uJykgJiYgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0udXNlckRhdGEuc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RhYmxlU2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5zZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoYWRqdXN0YWJsZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmE6IG51bWJlciA9IGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25BZGRhYmxlOiBhbnk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaWEgPSAwOyBpYSA8IGxlbmE7IGlhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2NlbmVVdGlscy5UcnlTZWxlY3RvckNvbm5lY3Rpb24odGhpcy5fc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQsIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLCBhZGp1c3RhYmxlU2VsZWN0aW9uLmFkZGFibGVzW2lhXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGQsIHBhcnQyPywgcGFydDE/KSA9PiB0aGlzLl9jcmVhdGVBZGRhYmxlKHBhcmVudCwgYWRkLCBwYXJ0MiwgcGFydDEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbkFkZGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjZW5lVXRpbHMuVHJ5U2VsZWN0b3JDb25uZWN0aW9uKHRoaXMuX3NjZW5lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCwgY29uQWRkYWJsZSwgYWRqdXN0YWJsZVNlbGVjdGlvbi5hZGRhYmxlc1tpYV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZCwgcGFydDI/LCBwYXJ0MT8pID0+IHRoaXMuX2NyZWF0ZUFkZGFibGUocGFyZW50LCBhZGQsIHBhcnQyLCBwYXJ0MSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbkFkZGFibGUgPSB0aGlzLl9wbGFjZWRBZGRhYmxlc1t0aGlzLl9wbGFjZWRBZGRhYmxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlVW5pcXVlTmFtZShwYXJlbnQ6IFRIUkVFLk9iamVjdDNELCBvYmo6IFRIUkVFLk9iamVjdDNEKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgaXRlcmF0aW9uID0gMDtcclxuICAgICAgICBsZXQgbmFtZSA9IG9iai5uYW1lO1xyXG4gICAgICAgIGxldCBleGlzdGluZ09iaiA9IHBhcmVudC5nZXRPYmplY3RCeU5hbWUobmFtZSk7XHJcbiAgICAgICAgd2hpbGUgKGV4aXN0aW5nT2JqKSB7XHJcbiAgICAgICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgICAgICAgICBuYW1lID0gb2JqLm5hbWUgKyAoaXRlcmF0aW9uICE9PSAwID8gKCdfJyArIGl0ZXJhdGlvbikgOiAnJyk7XHJcbiAgICAgICAgICAgIGV4aXN0aW5nT2JqID0gcGFyZW50LmdldE9iamVjdEJ5TmFtZShuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0R29vZElkRnJvbVNrdShza3U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5nZXRHb29kSWRGcm9tU2t1KHNrdSwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MgJiYgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldEFydGljbGUoc2t1OiBzdHJpbmcsIGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2FydGljbGVDYWNoZS5oYXMoc2t1KSkge1xyXG4gICAgICAgICAgICB0aGlzLmFydGljbGVMb2FkZWQubmV4dCh0aGlzLl9hcnRpY2xlQ2FjaGUuZ2V0KHNrdSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXJ0aWNsZUNhY2hlLmdldChza3UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWdvb2RJZCkge1xyXG4gICAgICAgICAgICBnb29kSWQgPSBhd2FpdCB0aGlzLl9nZXRHb29kSWRGcm9tU2t1KHNrdSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBgQXJ0aWNsZSB3aXRoIHNrdSAke3NrdX0gbm90IGZvdW5kIWA7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFydGljbGU6IEFydGljbGU7XHJcbiAgICAgICAgY29uc3QgYXJ0aWNsZVJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UuZ2V0QXJ0aWNsZVF1aWNrU2VsKGdvb2RJZCwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChhcnRpY2xlUmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzICYmIGFydGljbGVSZXNwb25zZS5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFydGljbGVSZXNwb25zZS5yZXN1bHRPYmplY3QuaGFzT3duUHJvcGVydHkoJ29BcnRpY2xlJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IEFycmF5LmlzQXJyYXkoYXJ0aWNsZVJlc3BvbnNlLnJlc3VsdE9iamVjdFsnb0FydGljbGUnXSkgPyBhcnRpY2xlUmVzcG9uc2UucmVzdWx0T2JqZWN0WydvQXJ0aWNsZSddWzBdIDogYXJ0aWNsZVJlc3BvbnNlLnJlc3VsdE9iamVjdFsnb0FydGljbGUnXTtcclxuICAgICAgICAgICAgICAgIGFydGljbGUgPSA8QXJ0aWNsZT50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBcnRpY2xlLCBvYmopO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXJ0aWNsZSA9IDxBcnRpY2xlPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGUsIGFydGljbGVSZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2FydGljbGVDYWNoZS5zZXQoc2t1LCBhcnRpY2xlKTtcclxuICAgICAgICB0aGlzLmFydGljbGVMb2FkZWQubmV4dChhcnRpY2xlKTtcclxuICAgICAgICByZXR1cm4gYXJ0aWNsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXRTZWxlY3Rpb25zKGluc3RhbmNlSWQ6IHN0cmluZywgcHVibGljYXRpb25Db2RlPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9ucyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UuZ2V0U2VsZWN0aW9ucyhmYWxzZSwgcHVibGljYXRpb25Db2RlKTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uUmVzcG9uc2UucmVzdWx0T2JqZWN0cyAmJiBzZWxlY3Rpb25SZXNwb25zZS5yZXN1bHRPYmplY3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9ucyA9IDxTZWxlY3Rpb25bXT50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShTZWxlY3Rpb24sIHNlbGVjdGlvblJlc3BvbnNlLnJlc3VsdE9iamVjdHMpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25zLmZvckVhY2gocyA9PiBzLmluc3RhbmNlSWQgPSBpbnN0YW5jZUlkKTtcclxuICAgICAgICAgICAgLy8gY29uc3QgZmlsdGVyZWQ6IFNlbGVjdGlvbltdID0gdGhpcy5fc2VsZWN0aW9ucy5maWx0ZXIocyA9PiBzLm5vZGVUeXBlICE9PSBOb2RlVHlwZS5BcnRpY2xlICYmIHMucHJlc2VudGF0aW9uTGV2ZWwgPT09IDEpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbnNSZWNlaXZlZC5uZXh0KHRoaXMuX3NlbGVjdGlvbnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93ICdObyBzZWxlY3Rpb25zIGZvdW5kISc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldERlY29zKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuX2RlY29zID0gW107XHJcbiAgICAgICAgY29uc3QgZGVjb3NSZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLmdldERlY29zKGZhbHNlKTtcclxuICAgICAgICBpZiAoZGVjb3NSZXNwb25zZS5yZXN1bHRPYmplY3RzICYmIGRlY29zUmVzcG9uc2UucmVzdWx0T2JqZWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlY29zID0gPERlY29Ob2RlW10+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoRGVjb05vZGUsIGRlY29zUmVzcG9uc2UucmVzdWx0T2JqZWN0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjb3NSZWNlaXZlZC5uZXh0KHRoaXMuX2RlY29zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyAnTm8gZGVjb25vZGVzIGZvdW5kISc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2xpbmtTZWxlY3Rpb25zQW5kRGVjb3MoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLl9zZWxlY3Rpb25zLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpZDogc3RyaW5nID0gdGhpcy5fc2VsZWN0aW9uc1tpXS5hcnROb2RlSWREZWNvO1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5fdXNlTm9kZUlkVG9MaW5rKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBpZCA9IGAke3RoaXMuX3NlbGVjdGlvbnNbaV0ubm9kZX1fJHt0aGlzLl9zZWxlY3Rpb25zW2ldLmFydE5vZGVJZERlY299YDtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBsZXQgZGVjbzogYW55ID0gdGhpcy5fZGVjb3MuZmluZChkID0+IGQuaWQgPT09IGlkKTtcclxuICAgICAgICAgICAgaWYgKCFkZWNvKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNvID0gbmV3IERlY29Ob2RlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uOiBhbnkgPSB0aGlzLl9nZXRWYXJpYXRpb25zKCkuZmluZCh2ID0+IHYucGFyZW50SWQgPT09IHRoaXMuX3NlbGVjdGlvbnNbaV0uYXJ0Tm9kZUlkRGVjbyk7XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGRlY28udmFyaWF0aW9uID0gdmFyaWF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbnNbaV0uZGVjb05vZGUgPSBkZWNvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRWYXJpYXRpb25zKCk6IERlY29Ob2RlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvcy5maWx0ZXIoKGRlY286IERlY29Ob2RlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZWNvLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfbG9hZFZhcmlhdGlvbnMob2JqOiBUSFJFRS5PYmplY3QzRCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5sb2FkUGFydChvYmosIHRoaXMuX2FkanVzdGFibGVzLCB0cnVlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl92YXJpYXRpb25IZWxwZXIubG9hZFZhcmlhdGlvbihvYmosIHRoaXMuX2FkanVzdGFibGVzLCB0cnVlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl92YXJpYXRpb25IZWxwZXIubG9hZFZhcmlhdGlvbihvYmosIHRoaXMuX2FkZGFibGVzLCB0cnVlKTtcclxuICAgICAgICB0aGlzLl92YXJpYXRpb25IZWxwZXIuY2xlYXJDYWNoZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2dldEFkanVzdGFibGVzKCk6IFNlbGVjdGlvbltdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9ucy5maWx0ZXIocyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGU6IERlY29Ob2RlID0gcy5kZWNvTm9kZTtcclxuICAgICAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS5nYW1lT2JqZWN0TmFtZSAmJiBub2RlLnR5cGUgPT09IERlY29Ob2RlVHlwZS5QYXJ0ICYmIG5vZGUua2luZCA9PT0gRGVjb05vZGVLaW5kLkFkanVzdGFibGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfdXBkYXRlUGl2b3Qob2JqOiBUSFJFRS5PYmplY3QzRCkge1xyXG4gICAgICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IFRIUkVFLkJveDMoKS5zZXRGcm9tT2JqZWN0KG9iaik7XHJcbiAgICAgICAgY29uc3QgYmJDZW50ZXJQaXZvdCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgICAgICAgYm91bmRpbmdCb3guZ2V0Q2VudGVyKGJiQ2VudGVyUGl2b3QpO1xyXG4gICAgICAgIGNvbnN0IGRlbHRhOiBUSFJFRS5WZWN0b3IzID0gbmV3IFRIUkVFLlZlY3RvcjMoKS5zdWIoYmJDZW50ZXJQaXZvdCkuc2V0WShNYXRoLmFicyhNYXRoLm1pbihib3VuZGluZ0JveC5taW4ueSwgMCkpKTtcclxuXHJcbiAgICAgICAgb2JqLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY2hpbGQucG9zaXRpb24uYWRkKGRlbHRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBvYmoudXBkYXRlV29ybGRNYXRyaXgoZmFsc2UsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3Jlc2V0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9hZGp1c3RhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2FkZGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZVRoZVNlbGVjdGlvbnMoKTtcclxuICAgIH1cclxufVxyXG4iXX0=
582
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFJL0IsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlFQUFpRSxDQUFDO0FBQ3RHLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMxRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDdEYsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2xELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUN0RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUN0RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsVUFBVSxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLE9BQU87SUE4QmhCO1FBNUJPLHVCQUFrQixHQUFpQyxJQUFJLGVBQWUsQ0FBYyxFQUFFLENBQUMsQ0FBQztRQUN4RixrQkFBYSxHQUE2QixJQUFJLGVBQWUsQ0FBVSxTQUFTLENBQUMsQ0FBQztRQUNsRixrQkFBYSxHQUFnQyxJQUFJ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SUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDcEM7SUFDTCxDQUFDOzs7O1lBeGpCSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tIFwidGhyZWVcIjtcclxuaW1wb3J0IHtTY2VuZX0gZnJvbSBcInRocmVlXCI7XHJcbmltcG9ydCB7T3B0aW9uc30gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvb3B0aW9uc1wiO1xyXG5pbXBvcnQge0RhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhfSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9kYXRhLXNlcnZpY2UtcmVzcG9uc2UtZGF0YVwiO1xyXG5pbXBvcnQge0RlY29Ob2RlfSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9kZWNvLW5vZGVcIjtcclxuaW1wb3J0IHtCdXNpbmVzc09iamVjdEZhY3Rvcnl9IGZyb20gXCJAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL3NlcnZpY2UvYnVzaW5lc3Mtb2JqZWN0LWZhY3RvcnlcIjtcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCJAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3NlbGVjdGlvblwiO1xyXG5pbXBvcnQge0RlY29Ob2RlVHlwZX0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvZW51bS9kZWNvLW5vZGUtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7VGhyZWVkVXRpbHN9IGZyb20gXCIuLi91dGlscy90aHJlZWQudXRpbHNcIjtcclxuaW1wb3J0IHtEZWNvTm9kZUtpbmR9IGZyb20gXCJAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL2VudW0vZGVjby1ub2RlLWtpbmQuZW51bVwiO1xyXG5pbXBvcnQge1NjZW5lVXRpbHN9IGZyb20gXCIuLi91dGlscy9zY2VuZS11dGlsc1wiO1xyXG5pbXBvcnQge1ZhcmlhdGlvbkhlbHBlcn0gZnJvbSBcIi4uL2hlbHBlci92YXJpYXRpb24taGVscGVyXCI7XHJcbmltcG9ydCB7QXJ0aWNsZX0gZnJvbSBcIkBjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvYXJ0aWNsZVwiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRvclNlcnZpY2V9IGZyb20gXCIuL3NlcnZpY2VzL2NvbmZpZ3VyYXRvci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7SW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9hbnN3ZXJcIjtcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3R9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7UXVlc3Rpb25BbmRBbnN3ZXJzfSBmcm9tIFwiQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9xdWVzdGlvbi1hbmQtYW5zd2Vyc1wiO1xyXG5pbXBvcnQge0ltYWdlVXRpbHN9IGZyb20gXCIuLi91dGlscy9pbWFnZS51dGlsc1wiO1xyXG5pbXBvcnQge09iamVjdFV0aWxzfSBmcm9tIFwiLi91dGlscy9vYmplY3QudXRpbHNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCdWlsZGVyIHtcclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uc1JlY2VpdmVkOiBCZWhhdmlvclN1YmplY3Q8U2VsZWN0aW9uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWxlY3Rpb25bXT4oW10pO1xyXG4gICAgcHVibGljIGFydGljbGVMb2FkZWQ6IEJlaGF2aW9yU3ViamVjdDxBcnRpY2xlPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJ0aWNsZT4odW5kZWZpbmVkKTtcclxuICAgIHB1YmxpYyBkZWNvc1JlY2VpdmVkOiBCZWhhdmlvclN1YmplY3Q8RGVjb05vZGVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERlY29Ob2RlW10+KFtdKTtcclxuICAgIHB1YmxpYyBhbnN3ZXJzUmVjZWl2ZWQ6IEJlaGF2aW9yU3ViamVjdDxBbnN3ZXJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFuc3dlcltdPihbXSk7XHJcbiAgICBwdWJsaWMgbW9kZWxMb2FkZWQ6IEJlaGF2aW9yU3ViamVjdDxUSFJFRS5PYmplY3QzRD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRIUkVFLk9iamVjdDNEPihudWxsKTtcclxuICAgIHB1YmxpYyBkZWJ1ZzogRnVuY3Rpb247XHJcblxyXG4gICAgcHJpdmF0ZSBfc2NlbmU6IFRIUkVFLlNjZW5lO1xyXG4gICAgcHJpdmF0ZSBfaW5zdGFuY2VJZDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBfc2t1OiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIF9nb29kSWQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgX3NlbGVjdGlvbnM6IFNlbGVjdGlvbltdID0gW107XHJcbiAgICBwcml2YXRlIF9hbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfZGVjb3M6IERlY29Ob2RlW10gPSBbXTtcclxuICAgIHByaXZhdGUgX3BsYWNlZEFkanVzdGFibGVzOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfcGxhY2VkQWRkYWJsZXM6IGFueVtdID0gW107XHJcbiAgICBwcml2YXRlIF9hZGp1c3RhYmxlczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX2FkZGFibGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgX2ltYWdlQ2FjaGU6IE1hcDxudW1iZXIsIHN0cmluZz4gPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfYm9GYWN0b3J5OiBCdXNpbmVzc09iamVjdEZhY3Rvcnk7XHJcbiAgICBwcml2YXRlIF9zb3VyY2U6IFRIUkVFLk9iamVjdDNEO1xyXG4gICAgcHJpdmF0ZSBfdGhyZWVkVXRpbHM6IFRocmVlZFV0aWxzO1xyXG4gICAgcHJpdmF0ZSBfdmFyaWF0aW9uSGVscGVyOiBWYXJpYXRpb25IZWxwZXI7XHJcbiAgICBwcml2YXRlIF9hcnRpY2xlQ2FjaGU6IE1hcDxzdHJpbmcsIEFydGljbGU+ID0gbmV3IE1hcCgpO1xyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdG9yU2VydmljZTogQ29uZmlndXJhdG9yU2VydmljZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdChzY2VuZTogU2NlbmUsIG9wdGlvbnM/OiBPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5fYm9GYWN0b3J5ID0gbmV3IEJ1c2luZXNzT2JqZWN0RmFjdG9yeSgpO1xyXG4gICAgICAgIHRoaXMuX3RocmVlZFV0aWxzID0gbmV3IFRocmVlZFV0aWxzKCk7XHJcbiAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyID0gbmV3IFZhcmlhdGlvbkhlbHBlcigpO1xyXG5cclxuICAgICAgICBpZiAoIXNjZW5lKSB7XHJcbiAgICAgICAgICAgIHRocm93ICdObyBzY2VuZSBvYmplY3QgcHJvdmlkZWQhJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZSA9IG5ldyBDb25maWd1cmF0b3JTZXJ2aWNlKCk7XHJcbiAgICAgICAgLy8gdGhpcy5faW1hZ2VDYWNoZVNlcnZpY2UgPSBuZXcgSW1hZ2VDYWNoZVNlcnZpY2UoKTtcclxuICAgICAgICBpZiAob3B0aW9ucykge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLmluaXRBcGkob3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3NjZW5lID0gc2NlbmU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGJ1aWxkTW9kZWwoc2t1Pzogc3RyaW5nLCBpbnN0YW5jZUlkPzogc3RyaW5nLCBnb29kSWQ/OiBudW1iZXIpOiBQcm9taXNlPFRIUkVFLk9iamVjdDNEPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9zY2VuZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldEluc3RhbmNlSWQoc2t1LCBpbnN0YW5jZUlkLCBnb29kSWQpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9wcmVwYXJlQ29uZmlndXJhdGlvbih0aGlzLl9za3UsIHRoaXMuX2dvb2RJZCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2Uuc2V0SW5zdGFuY2VUb0NvbmZpZ3VyZSh0aGlzLl9pbnN0YW5jZUlkKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPGFueT5bXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0aGlzLmdldFF1ZXN0aW9uQW5kQW5zd2VycygpKTtcclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2godGhpcy5fZ2V0U2VsZWN0aW9ucyh0aGlzLl9pbnN0YW5jZUlkKSk7XHJcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMuX2dldERlY29zKCkpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Fuc3dlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX2xpbmtTZWxlY3Rpb25zQW5kRGVjb3MoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1aWxkID0gYXdhaXQgdGhpcy5fYnVpbGQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFuVXAoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBidWlsZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93ICdHTEIgc291cmNlIG5vdCBmb3VuZCEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgYnVpbGRNb2RlbEZyb21EYXRhKHNlbGVjdGlvbnM6IFNlbGVjdGlvbltdLCBkZWNvczogRGVjb05vZGVbXSwgYXNzZXRVcmw6IHN0cmluZywgY2RuVXJsOiBzdHJpbmcsIHNjaGVtYTogc3RyaW5nKTogUHJvbWlzZTxUSFJFRS5PYmplY3QzRD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fc2NlbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2coJ3N0YXJ0IGJ1aWxkJyk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2Rvd25sb2FkQXNzZXQoYXNzZXRVcmwsIGNkblVybCwgc2NoZW1hKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbnMgJiYgc2VsZWN0aW9ucy5sZW5ndGggPiAxICYmIGRlY29zICYmIGRlY29zLmxlbmd0aCA+IDAgJiYgdGhpcy5fc291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25zID0gc2VsZWN0aW9ucztcclxuICAgICAgICAgICAgICAgIHRoaXMuX2RlY29zID0gZGVjb3M7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9saW5rU2VsZWN0aW9uc0FuZERlY29zKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wcmVsb2FkTWF0ZXJpYWxzKHNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBidWlsZCA9IGF3YWl0IHRoaXMuX2J1aWxkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhblVwKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2coJ2ZpbmlzaCBidWlsZCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgJ1Vuc3VmZmljaWVudCBkYXRhIHByb3ZpZGVkISc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0Tm9kZUluc3RhbmNlKGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5pbml0Tm9kZUluc3RhbmNlKGdvb2RJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGhyZWVkVXRpbHMuY2xlYXJDYWNoZSgpO1xyXG4gICAgICAgIHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5jbGVhckNhY2hlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb246IFNlbGVjdGlvbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2Uuc2VsZWN0U2VsZWN0aW9uKHNlbGVjdGlvbiwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZ2V0UXVlc3Rpb25BbmRBbnN3ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldFF1ZXN0aW9uQW5kQW5zd2VycyhwdWJsaWNhdGlvbkNvZGU/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBxdWVzdGlvbnNBbmRBbnN3ZXJzOiBRdWVzdGlvbkFuZEFuc3dlcnMgPSBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLmdldFF1ZXN0aW9uQW5kQW5zd2VycyhmYWxzZSwgcHVibGljYXRpb25Db2RlKTtcclxuICAgICAgICB0aGlzLl9hbnN3ZXJzID0gcXVlc3Rpb25zQW5kQW5zd2Vycy5hbnN3ZXJzO1xyXG4gICAgICAgIHRoaXMuYW5zd2Vyc1JlY2VpdmVkLm5leHQocXVlc3Rpb25zQW5kQW5zd2Vycy5hbnN3ZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc2VsZWN0QW5zd2VyKGFuc3dlcjogQW5zd2VyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5zZWxlY3RBbnN3ZXIoYW5zd2VyLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5tb2RlbExvYWRlZC5uZXh0KGF3YWl0IHRoaXMuYnVpbGRNb2RlbCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SW1hZ2VGb3JTZWxlY3Rpb25PckFuc3dlcihvYmplY3Q6IFNlbGVjdGlvbiB8IEFuc3dlcik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgaW5jbHVkZU1pbWVUeXBlOiBib29sZWFuID0gdHJ1ZSwgdGh1bWI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgaWYgKG9iamVjdCAmJiBvYmplY3Qubm9kZUlkKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ltYWdlQ2FjaGUuaGFzKG9iamVjdC5ub2RlSWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UuZ2V0U2luZ2xlSW1hZ2Uob2JqZWN0Lm5vZGVJZCwgNCwgaW5jbHVkZU1pbWVUeXBlLCB0aHVtYiwgdHJ1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlRGF0YTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NDogc3RyaW5nID0gdGhpcy5faGFuZGxlUmVzcG9uc2VEYXRhKGluY2x1ZGVNaW1lVHlwZSwgdGh1bWIsIHJlc3BvbnNlRGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbWFnZUNhY2hlLnNldChvYmplY3Qubm9kZUlkLCBiYXNlNjQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShiYXNlNjQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5faW1hZ2VDYWNoZS5nZXQob2JqZWN0Lm5vZGVJZCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgX2NsZWFuVXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2t1ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX2dvb2RJZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLl9pbnN0YW5jZUlkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5jbGVhckNhY2hlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaGFuZGxlUmVzcG9uc2VEYXRhKGluY2x1ZGVNaW1ldHlwZTogYm9vbGVhbiwgdGh1bWI6IGJvb2xlYW4sIHJlc3BvbnNlRGF0YTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChyZXNwb25zZURhdGEgJiYgcmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdC5maWxlUGF0aCAhPT0gbnVsbCAmJiByZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LmZpbGVQYXRoICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSW1hZ2VVdGlscy5nZXRGaXhlZEltYWdlRmlsZXBhdGhVcmwocmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdC5maWxlUGF0aCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZU1pbWV0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEltYWdlVXRpbHMuZ2V0RG9jQm9keVdpdGhNaW1lVHlwZURlZmluaXRpb24ocmVzcG9uc2VEYXRhLnJlc3VsdE9iamVjdC5maWxlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGh1bWIgPyByZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LnRodW1ibmFpbEJvZHkgOiByZXNwb25zZURhdGEucmVzdWx0T2JqZWN0LmRvY3VtZW50Qm9keSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHVtYiA/IHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QudGh1bWJuYWlsQm9keSA6IHJlc3BvbnNlRGF0YS5yZXN1bHRPYmplY3QuZG9jdW1lbnRCb2R5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wcmVsb2FkTWF0ZXJpYWxzKHNjaGVtYTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLnByZWxvYWRWYXJpYXRpb25zKHNjaGVtYSwgdGhpcy5fZGVjb3MubWFwKGQgPT4gZC5nYW1lT2JqZWN0TmFtZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX3NldEluc3RhbmNlSWQoc2t1OiBzdHJpbmcsIGluc3RhbmNlSWQ/OiBzdHJpbmcsIGdvb2RJZD86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGlmICghaW5zdGFuY2VJZCAmJiAhdGhpcy5faW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgICBpZiAoIWdvb2RJZCkge1xyXG4gICAgICAgICAgICAgICAgZ29vZElkID0gYXdhaXQgdGhpcy5fZ2V0R29vZElkRnJvbVNrdShza3UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2dvb2RJZCA9IGdvb2RJZDtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuaW5pdE5vZGVJbnN0YW5jZSh0aGlzLl9nb29kSWQpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlSWQgPSByZXN1bHQucmVzdWx0T2JqZWN0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgJ0ZhaWxlZCB0byBpbml0aWFsaXplIG5vZGUgaW5zdGFuY2UnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5faW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLl9za3UpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2t1ID0gc2t1O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9wcmVwYXJlQ29uZmlndXJhdGlvbihza3U6IHN0cmluZywgZ29vZElkPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgYXJ0aWNsZTogQXJ0aWNsZSA9IGF3YWl0IHRoaXMuX2dldEFydGljbGUoc2t1LCBnb29kSWQpO1xyXG4gICAgICAgIGlmIChhcnRpY2xlICYmIGFydGljbGUuYXNzZXRVcmwpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fZG93bmxvYWRBc3NldChhcnRpY2xlLmFzc2V0VXJsLCBhcnRpY2xlLmNvbnRlbnREZWxpdmVyeVVybCwgYXJ0aWNsZS5kaXN0U2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZG93bmxvYWRBc3NldChhc3NldFVybDogc3RyaW5nLCBjZG5Vcmw6IHN0cmluZywgc2NoZW1hOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSBhd2FpdCB0aGlzLl90aHJlZWRVdGlscy5kb3dubG9hZDNEU291cmNlKGFzc2V0VXJsLCBjZG5VcmwpXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBpZiAoY2RuVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhcmlhdGlvbkhlbHBlci5hc3NldFBhdGggPVxyXG4gICAgICAgICAgICAgICAgY2RuVXJsICtcclxuICAgICAgICAgICAgICAgIChjZG5VcmwuZW5kc1dpdGgoJy8nKSA/ICcnIDogJy8nKSArXHJcbiAgICAgICAgICAgICAgICAoc2NoZW1hID8gc2NoZW1hIDogJ1VQX0RCQScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9idWlsZCgpOiBQcm9taXNlPFRIUkVFLk9iamVjdDNEPiB7XHJcbiAgICAgICAgdGhpcy5fcmVzZXQoKTtcclxuICAgICAgICBjb25zdCBhZGp1c3RhYmxlczogU2VsZWN0aW9uW10gPSB0aGlzLl9nZXRBZGp1c3RhYmxlcygpO1xyXG4gICAgICAgIGlmIChhZGp1c3RhYmxlcyAmJiBhZGp1c3RhYmxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9iajogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgICAgICAgICAgb2JqLnZpc2libGUgPSBmYWxzZTsgLy8gbm8gbmVlZCB0byByZW5kZXIgdmlzdWFseVxyXG4gICAgICAgICAgICB0aGlzLl9zY2VuZS5hZGQob2JqKTtcclxuICAgICAgICAgICAgbGV0IGNvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2coJ2J1aWxkIG1haW4gbW9kZWwnKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbjogbnVtYmVyID0gYWRqdXN0YWJsZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFkanVzdGFibGU6IFRIUkVFLk9iamVjdDNEID0gdGhpcy5fY3JlYXRlQWRqdXN0YWJsZShvYmosIGFkanVzdGFibGVzW2ldKTtcclxuICAgICAgICAgICAgICAgIGlmIChhZGp1c3RhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaWkgPSAwLCBsZW5paTogbnVtYmVyID0gdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXMubGVuZ3RoOyBpaSA8IGxlbmlpOyBpaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTY2VuZVV0aWxzLlRyeVNlbGVjdG9yQ29ubmVjdGlvbih0aGlzLl9zY2VuZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaWldLCBhZGp1c3RhYmxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaWldLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0YWJsZS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbm5lY3RlZCAmJiB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBjb25uZWN0aW9uIGZvdW5kIGZvcjogJywgYWRqdXN0YWJsZS5uYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9sb2coJ3BsYWNlIGFkZGFibGVzJyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BsYWNlQWRkYWJsZXMob2JqKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9nKCd1cGRhdGUgcGl2b3QnKTtcclxuICAgICAgICAgICAgdGhpcy5fdXBkYXRlUGl2b3Qob2JqKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9nKCdsb2FkIHZhcmlhdGlvbnMnKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fbG9hZFZhcmlhdGlvbnMob2JqKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5fdmFyaWF0aW9uSGVscGVyLmNsZWFyQ2FjaGUoKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9nKCdyZW1vdmUgZnJvbSBzY2VuZScpO1xyXG4gICAgICAgICAgICB0aGlzLl9zY2VuZS5yZW1vdmUob2JqKTtcclxuICAgICAgICAgICAgT2JqZWN0VXRpbHMuRGlzcG9zZU9iamVjdCh0aGlzLl9zb3VyY2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2coJ3JlYWR5IScpO1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93ICdObyBhZGp1c3RhYmxlcyBmb3VuZCEnO1xyXG4gICAgICAgICAgICAvLyB0aGlzLl9idWlsZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5zZWxlY3Rpb25zLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuX2Vycm9yU2VydmljZS5hZGRFcnJvcih0aGlzLmFjdGl2ZUluc3RhbmNlLCB7bWVzc2FnZTogJ05PX1NFTEVDVElPTlNfT1JfREVDT1MnLCBkZXNjcmlwdGlvbjogJ05PX1NFTEVDVElPTlNfT1JfREVDT1NfSU5GTyd9KTtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuYnVpbGRGaW5pc2hlZC5uZXh0KHtpbnN0YW5jZUlkOiB0aGlzLmFjdGl2ZUluc3RhbmNlLCByZXN1bHRUeXBlOiBSZXN1bHRUeXBlLk5vU2VsZWN0aW9uc30pO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2UgaWYgKHRoaXMuZGVjb3Muc2l6ZSA9PT0gMCkge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLmFkZEVycm9yKHRoaXMuYWN0aXZlSW5zdGFuY2UsIHttZXNzYWdlOiAnTk9fU0VMRUNUSU9OU19PUl9ERUNPUycsIGRlc2NyaXB0aW9uOiAnTk9fU0VMRUNUSU9OU19PUl9ERUNPU19JTkZPJ30pO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQoe2luc3RhbmNlSWQ6IHRoaXMuYWN0aXZlSW5zdGFuY2UsIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUuTm9EZWNvTm9kZXN9KTtcclxuICAgICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuX2Vycm9yU2VydmljZS5hZGRFcnJvcih0aGlzLmFjdGl2ZUluc3RhbmNlLCB7bWVzc2FnZTogJ05PX0FESlVTVEFCTEVTJywgZGVzY3JpcHRpb246ICdOT19BREpVU1RBQkxFU19JTkZPJ30pO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5idWlsZEZpbmlzaGVkLm5leHQoe2luc3RhbmNlSWQ6IHRoaXMuYWN0aXZlSW5zdGFuY2UsIHJlc3VsdFR5cGU6IFJlc3VsdFR5cGUuTm9BZGp1c3RhYmxlc30pO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZXBhcmVUaGVTZWxlY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIGdldCBnZW5lcmljIHZhcmlhdGlvbnNcclxuICAgICAgICBjb25zdCBnbG9iYWxWYXJpYXRpb25zOiBEZWNvTm9kZVtdID0gdGhpcy5fc2VsZWN0aW9uc1xyXG4gICAgICAgICAgICAuZmlsdGVyKHMgPT4gcy5nZW5lcmljICYmIChzLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uICYmICFzLmRlY29Ob2RlLnR5cGUpXHJcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlOiBTZWxlY3Rpb24sIGluZGV4OiBudW1iZXIsIGFycmF5OiBTZWxlY3Rpb25bXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gZmluZCBzZWxlY3Rpb24gb2YgdmFyaWF0aW9uXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWw6IFNlbGVjdGlvbiA9IHRoaXMuX3NlbGVjdGlvbnMuZmluZChzID0+IHMuYXJ0Tm9kZUlkRGVjbyA9PT0gKHZhbHVlLmRlY29Ob2RlIGFzIGFueSkudmFyaWF0aW9uLmlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24uc3VwcGxpZXJBcnRpY2xlTnIgPSBzZWwuc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb24ubWF0ZXJpYWxJZCA9IHZhbHVlLmhkZWNvR2FtZU9iamVjdDtcclxuICAgICAgICAgICAgICAgIHJldHVybiAodmFsdWUuZGVjb05vZGUgYXMgYW55KS52YXJpYXRpb247XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBjb25zdCB1c2VkVmFyaWF0aW9uczogRnVybml0dXJlUGFydFZhcmlhdGlvbltdID0gW107XHJcbiAgICAgICAgbGV0IGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLl9zZWxlY3Rpb25zLmxlbmd0aDtcclxuICAgICAgICBsZXQgbGFzdEFkZGVkOiBTZWxlY3Rpb247XHJcbiAgICAgICAgbGV0IGxhc3RBZGp1c3RhYmxlOiBTZWxlY3Rpb247XHJcbiAgICAgICAgbGV0IG5ld1BhcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBsZXQgcHJldmlvdXNQcmVzTGV2ZWw6IG51bWJlciA9IC0xO1xyXG4gICAgICAgIGxldCBwb3NpdGlvbmluZzogYW55O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9zZWxlY3Rpb25zW2ldO1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLnByZXNlbnRhdGlvbkxldmVsID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmluZyA9IHNlbGVjdGlvbi5oZGVjb1Bvc2l0aW9uaW5nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24ucHJlc2VudGF0aW9uTGV2ZWwgPiBwcmV2aW91c1ByZXNMZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmhkZWNvUG9zaXRpb25pbmcgPSBzZWxlY3Rpb24uaGRlY29Qb3NpdGlvbmluZyB8fCBwb3NpdGlvbmluZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdQYXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRkZWQudmFyaWF0aW9ucyA9IFtzZWxlY3Rpb24uZGVjb05vZGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkZGVkLnZhcmlhdGlvbnMucHVzaChzZWxlY3Rpb24uZGVjb05vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhcnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsVmFyaWF0aW9uc1Jld3JpdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhdGlvbnNSZXdyaXRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWF0aW9ucy5wdXNoKHNlbGVjdGlvbi5kZWNvTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IHZhcmlhdGlvbjogRnVybml0dXJlUGFydFZhcmlhdGlvbiA9IG5ldyBGdXJuaXR1cmVQYXJ0VmFyaWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWF0aW9uLkJyYW5kSWQgPSBzZWxlY3Rpb24uZGVjb05vZGUuYnJhbmRJZDtcclxuICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYXRpb24uRGVzY3JpcHRpb24gPSBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWF0aW9uLk1hdGVyaWFsSWQgPSAoc2VsZWN0aW9uLmRlY29Ob2RlIGFzIGFueSkubWF0ZXJpYWxJZDtcclxuICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYXRpb24uU3VwcGxpZXJBcnRpY2xlTnIgPSAoc2VsZWN0aW9uLmRlY29Ob2RlIGFzIGFueSkuc3VwcGxpZXJBcnRpY2xlTnI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdXNlZFZhcmlhdGlvbnMucHVzaCh2YXJpYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuX3Vwc2VydEZ1cm5pdHVyZSh0aGlzLmFjdGl2ZUluc3RhbmNlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIFZhcmlhdGlvbjogc2VsZWN0aW9uLmRlY29Ob2RlLmJyYW5kSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIFZhcmlhdGlvbkRlc2NyaXB0aW9uOiBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIFN1cHBsaWVyQXJ0aWNsZU5yOiAoc2VsZWN0aW9uLmRlY29Ob2RlIGFzIGFueSkuc3VwcGxpZXJBcnRpY2xlTnJcclxuICAgICAgICAgICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmRlY29Ob2RlLnR5cGUgPT09IERlY29Ob2RlVHlwZS5QYXJ0ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHNlbGVjdGlvbi5kZWNvTm9kZS5nYW1lT2JqZWN0TmFtZSA9PT0gJ3N0cmluZycgJiZcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZGVjb05vZGUuZ2FtZU9iamVjdE5hbWUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRqdXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IGdsb2JhbFZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkanVzdGFibGVzLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0QWRkZWQgfHwgbGFzdEFkZGVkLm5vZGVJZCAhPT0gc2VsZWN0aW9uLm5vZGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFydCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkZGVkID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWRqdXN0YWJsZSA9IHNlbGVjdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5kZWNvTm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRkYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24udmFyaWF0aW9ucyA9IGxhc3RBZGp1c3RhYmxlID8gbGFzdEFkanVzdGFibGUudmFyaWF0aW9ucyA6IGdsb2JhbFZhcmlhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0QWRqdXN0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkanVzdGFibGUuYWRkYWJsZXMucHVzaChzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZGFibGVzLnB1c2goc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsYXN0QWRkZWQgfHwgbGFzdEFkZGVkLm5vZGVJZCAhPT0gc2VsZWN0aW9uLm5vZGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFydCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEFkZGVkID0gc2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcmV2aW91c1ByZXNMZXZlbCA9IHNlbGVjdGlvbi5wcmVzZW50YXRpb25MZXZlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5fdXBzZXJ0RnVybml0dXJlKHRoaXMuYWN0aXZlSW5zdGFuY2UsXHJcbiAgICAgICAgLy8gICB7VmFyaWF0aW9uczogdXNlZFZhcmlhdGlvbnN9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jcmVhdGVBZGp1c3RhYmxlKHBhcmVudDogVEhSRUUuT2JqZWN0M0QsIGFkajogU2VsZWN0aW9uKTogVEhSRUUuT2JqZWN0M0Qge1xyXG4gICAgICAgIGxldCBvYmo6IGFueSA9IHRoaXMuX3NvdXJjZSA/IHRoaXMuX3NvdXJjZS5nZXRPYmplY3RCeU5hbWUoYWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lKSA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFvYmopIHtcclxuICAgICAgICAgICAgLy8gaW4gY2FzZSBvZiBnbGIgZmlsZXMsIHRoZSBpbXBvcnRlciByZW1vdmVzIGRvdHMgZnJvbSBuYW1lc1xyXG4gICAgICAgICAgICBjb25zdCBuYW1lID0gYWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lLnJlcGxhY2UoL1suXS9nLCAnJyk7XHJcbiAgICAgICAgICAgIG9iaiA9IHRoaXMuX3NvdXJjZSA/IHRoaXMuX3NvdXJjZS5nZXRPYmplY3RCeU5hbWUobmFtZSkgOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKGBObyBvYmplY3Qgd2l0aCBuYW1lICR7YWRqLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lfSBmb3VuZCFgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBhZGp1c3RhYmxlOiBhbnkgPSBvYmouY2xvbmUoKTtcclxuICAgICAgICBhZGp1c3RhYmxlLm5hbWUgPSB0aGlzLl9jcmVhdGVVbmlxdWVOYW1lKHBhcmVudCwgb2JqKTtcclxuICAgICAgICBhZGp1c3RhYmxlLnVzZXJEYXRhLnNlbGVjdGlvbiA9IGFkajtcclxuICAgICAgICBhZGp1c3RhYmxlLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcclxuICAgICAgICBhZGp1c3RhYmxlLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIHBhcmVudC5hZGQoYWRqdXN0YWJsZSk7XHJcbiAgICAgICAgLy8gdGhlIG9iamVjdCBiZWluZyBhZGRlZCB0byB0aGUgY3VzdG9tRmxvb3JHcm91cCBpcyBiZWluZyByZWNyZWF0ZWQgc28gd2UgbG9vc2UgdGhlIHJlZmVyZW5jZVxyXG4gICAgICAgIC8vIHRoZXJlZm9yIHdlIG5lZWQgdG8gcmV0cmlldmUgdGhlIGNyZWF0ZWQgb2JqZWN0IGFnYWluXHJcbiAgICAgICAgLy8gYWRqdXN0YWJsZSA9IHBhcmVudC5nZXRPYmplY3RCeU5hbWUoYWRqdXN0YWJsZS5uYW1lKTtcclxuICAgICAgICB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5wdXNoKGFkanVzdGFibGUpO1xyXG4gICAgICAgIHJldHVybiBhZGp1c3RhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2NyZWF0ZUFkZGFibGUocGFyZW50OiBUSFJFRS5PYmplY3QzRCwgYWRkOiBTZWxlY3Rpb24sIHBhcnQyPzogYW55LCBwYXJ0MT86IGFueSk6IFRIUkVFLk9iamVjdDNEIHtcclxuICAgICAgICBjb25zdCBvYmo6IGFueSA9IHRoaXMuX3NvdXJjZS5nZXRPYmplY3RCeU5hbWUoYWRkLmRlY29Ob2RlLmdhbWVPYmplY3ROYW1lKTtcclxuICAgICAgICBpZiAoIW9iaikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWxlY3Rpb25Gcm9tSWQoYWRqLmFydE5vZGVJZERlY28pO1xyXG4gICAgICAgIGNvbnN0IGFkZGFibGU6IGFueSA9IG9iai5jbG9uZSgpO1xyXG4gICAgICAgIGFkZGFibGUubmFtZSA9IHRoaXMuX2NyZWF0ZVVuaXF1ZU5hbWUocGFyZW50LCBvYmopO1xyXG4gICAgICAgIGFkZGFibGUudXNlckRhdGEuc2VsZWN0aW9uID0gYWRkO1xyXG4gICAgICAgIGFkZGFibGUucG9zaXRpb24uc2V0KDAsIDAsIDApO1xyXG4gICAgICAgIGFkZGFibGUudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgaWYgKHBhcnQxICYmIHBhcnQyKSB7XHJcbiAgICAgICAgICAgIHBhcmVudC5hZGQoYWRkYWJsZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BsYWNlZEFkZGFibGVzLnB1c2goYWRkYWJsZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBhZGRhYmxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWRkYWJsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wbGFjZUFkZGFibGVzKHBhcmVudDogVEhSRUUuT2JqZWN0M0QpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuX3BsYWNlZEFkanVzdGFibGVzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5oYXNPd25Qcm9wZXJ0eSgnc2VsZWN0aW9uJykgJiYgdGhpcy5fcGxhY2VkQWRqdXN0YWJsZXNbaV0udXNlckRhdGEuc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RhYmxlU2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlc1tpXS51c2VyRGF0YS5zZWxlY3Rpb247XHJcbiAgICAgICAgICAgICAgICBpZiAoYWRqdXN0YWJsZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmE6IG51bWJlciA9IGFkanVzdGFibGVTZWxlY3Rpb24uYWRkYWJsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25BZGRhYmxlOiBhbnk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaWEgPSAwOyBpYSA8IGxlbmE7IGlhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgU2NlbmVVdGlscy5UcnlTZWxlY3RvckNvbm5lY3Rpb24odGhpcy5fc2NlbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQsIHRoaXMuX3BsYWNlZEFkanVzdGFibGVzW2ldLCBhZGp1c3RhYmxlU2VsZWN0aW9uLmFkZGFibGVzW2lhXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGQsIHBhcnQyPywgcGFydDE/KSA9PiB0aGlzLl9jcmVhdGVBZGRhYmxlKHBhcmVudCwgYWRkLCBwYXJ0MiwgcGFydDEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbkFkZGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjZW5lVXRpbHMuVHJ5U2VsZWN0b3JDb25uZWN0aW9uKHRoaXMuX3NjZW5lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCwgY29uQWRkYWJsZSwgYWRqdXN0YWJsZVNlbGVjdGlvbi5hZGRhYmxlc1tpYV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFkZCwgcGFydDI/LCBwYXJ0MT8pID0+IHRoaXMuX2NyZWF0ZUFkZGFibGUocGFyZW50LCBhZGQsIHBhcnQyLCBwYXJ0MSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbkFkZGFibGUgPSB0aGlzLl9wbGFjZWRBZGRhYmxlc1t0aGlzLl9wbGFjZWRBZGRhYmxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY3JlYXRlVW5pcXVlTmFtZShwYXJlbnQ6IFRIUkVFLk9iamVjdDNELCBvYmo6IFRIUkVFLk9iamVjdDNEKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgaXRlcmF0aW9uID0gMDtcclxuICAgICAgICBsZXQgbmFtZSA9IG9iai5uYW1lO1xyXG4gICAgICAgIGxldCBleGlzdGluZ09iaiA9IHBhcmVudC5nZXRPYmplY3RCeU5hbWUobmFtZSk7XHJcbiAgICAgICAgd2hpbGUgKGV4aXN0aW5nT2JqKSB7XHJcbiAgICAgICAgICAgIGl0ZXJhdGlvbisrO1xyXG4gICAgICAgICAgICBuYW1lID0gb2JqLm5hbWUgKyAoaXRlcmF0aW9uICE9PSAwID8gKCdfJyArIGl0ZXJhdGlvbikgOiAnJyk7XHJcbiAgICAgICAgICAgIGV4aXN0aW5nT2JqID0gcGFyZW50LmdldE9iamVjdEJ5TmFtZShuYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0R29vZElkRnJvbVNrdShza3U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IERhdGFTZXJ2aWNlUmVzcG9uc2VEYXRhID0gYXdhaXQgdGhpcy5fY29uZmlndXJhdG9yU2VydmljZS5nZXRHb29kSWRGcm9tU2t1KHNrdSwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZS52YWxpZGF0aW9uUmVzdWx0LnN1Y2Nlc3MgJiYgcmVzcG9uc2UucmVzdWx0T2JqZWN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5yZXN1bHRPYmplY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldEFydGljbGUoc2t1OiBzdHJpbmcsIGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2FydGljbGVDYWNoZS5oYXMoc2t1KSkge1xyXG4gICAgICAgICAgICB0aGlzLmFydGljbGVMb2FkZWQubmV4dCh0aGlzLl9hcnRpY2xlQ2FjaGUuZ2V0KHNrdSkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXJ0aWNsZUNhY2hlLmdldChza3UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWdvb2RJZCkge1xyXG4gICAgICAgICAgICBnb29kSWQgPSBhd2FpdCB0aGlzLl9nZXRHb29kSWRGcm9tU2t1KHNrdSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBgQXJ0aWNsZSB3aXRoIHNrdSAke3NrdX0gbm90IGZvdW5kIWA7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFydGljbGU6IEFydGljbGU7XHJcbiAgICAgICAgY29uc3QgYXJ0aWNsZVJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UuZ2V0QXJ0aWNsZVF1aWNrU2VsKGdvb2RJZCwgZmFsc2UpO1xyXG4gICAgICAgIGlmIChhcnRpY2xlUmVzcG9uc2UudmFsaWRhdGlvblJlc3VsdC5zdWNjZXNzICYmIGFydGljbGVSZXNwb25zZS5yZXN1bHRPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGFydGljbGVSZXNwb25zZS5yZXN1bHRPYmplY3QuaGFzT3duUHJvcGVydHkoJ29BcnRpY2xlJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IEFycmF5LmlzQXJyYXkoYXJ0aWNsZVJlc3BvbnNlLnJlc3VsdE9iamVjdFsnb0FydGljbGUnXSkgPyBhcnRpY2xlUmVzcG9uc2UucmVzdWx0T2JqZWN0WydvQXJ0aWNsZSddWzBdIDogYXJ0aWNsZVJlc3BvbnNlLnJlc3VsdE9iamVjdFsnb0FydGljbGUnXTtcclxuICAgICAgICAgICAgICAgIGFydGljbGUgPSA8QXJ0aWNsZT50aGlzLl9ib0ZhY3RvcnkubWFrZVdpdGhSYXdCYWNrZW5kRGF0YShBcnRpY2xlLCBvYmopO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXJ0aWNsZSA9IDxBcnRpY2xlPnRoaXMuX2JvRmFjdG9yeS5tYWtlV2l0aFJhd0JhY2tlbmREYXRhKEFydGljbGUsIGFydGljbGVSZXNwb25zZS5yZXN1bHRPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2FydGljbGVDYWNoZS5zZXQoc2t1LCBhcnRpY2xlKTtcclxuICAgICAgICB0aGlzLmFydGljbGVMb2FkZWQubmV4dChhcnRpY2xlKTtcclxuICAgICAgICByZXR1cm4gYXJ0aWNsZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9nZXRTZWxlY3Rpb25zKGluc3RhbmNlSWQ6IHN0cmluZywgcHVibGljYXRpb25Db2RlPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9ucyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvblJlc3BvbnNlOiBEYXRhU2VydmljZVJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuX2NvbmZpZ3VyYXRvclNlcnZpY2UuZ2V0U2VsZWN0aW9ucyhmYWxzZSwgcHVibGljYXRpb25Db2RlKTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uUmVzcG9uc2UucmVzdWx0T2JqZWN0cyAmJiBzZWxlY3Rpb25SZXNwb25zZS5yZXN1bHRPYmplY3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9ucyA9IDxTZWxlY3Rpb25bXT50aGlzLl9ib0ZhY3RvcnkubWFrZUJPQXJyYXlGcm9tUmF3QmFja2VuZERhdGFBcnJheShTZWxlY3Rpb24sIHNlbGVjdGlvblJlc3BvbnNlLnJlc3VsdE9iamVjdHMpO1xyXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25zLmZvckVhY2gocyA9PiBzLmluc3RhbmNlSWQgPSBpbnN0YW5jZUlkKTtcclxuICAgICAgICAgICAgLy8gY29uc3QgZmlsdGVyZWQ6IFNlbGVjdGlvbltdID0gdGhpcy5fc2VsZWN0aW9ucy5maWx0ZXIocyA9PiBzLm5vZGVUeXBlICE9PSBOb2RlVHlwZS5BcnRpY2xlICYmIHMucHJlc2VudGF0aW9uTGV2ZWwgPT09IDEpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbnNSZWNlaXZlZC5uZXh0KHRoaXMuX3NlbGVjdGlvbnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93ICdObyBzZWxlY3Rpb25zIGZvdW5kISc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldERlY29zKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuX2RlY29zID0gW107XHJcbiAgICAgICAgY29uc3QgZGVjb3NSZXNwb25zZTogRGF0YVNlcnZpY2VSZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLl9jb25maWd1cmF0b3JTZXJ2aWNlLmdldERlY29zKGZhbHNlKTtcclxuICAgICAgICBpZiAoZGVjb3NSZXNwb25zZS5yZXN1bHRPYmplY3RzICYmIGRlY29zUmVzcG9uc2UucmVzdWx0T2JqZWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RlY29zID0gPERlY29Ob2RlW10+dGhpcy5fYm9GYWN0b3J5Lm1ha2VCT0FycmF5RnJvbVJhd0JhY2tlbmREYXRhQXJyYXkoRGVjb05vZGUsIGRlY29zUmVzcG9uc2UucmVzdWx0T2JqZWN0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjb3NSZWNlaXZlZC5uZXh0KHRoaXMuX2RlY29zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyAnTm8gZGVjb25vZGVzIGZvdW5kISc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2xpbmtTZWxlY3Rpb25zQW5kRGVjb3MoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSB0aGlzLl9zZWxlY3Rpb25zLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpZDogc3RyaW5nID0gdGhpcy5fc2VsZWN0aW9uc1tpXS5hcnROb2RlSWREZWNvO1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5fdXNlTm9kZUlkVG9MaW5rKSB7XHJcbiAgICAgICAgICAgIC8vICAgICBpZCA9IGAke3RoaXMuX3NlbGVjdGlvbnNbaV0ubm9kZX1fJHt0aGlzLl9zZWxlY3Rpb25zW2ldLmFydE5vZGVJZERlY299YDtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBsZXQgZGVjbzogYW55ID0gdGhpcy5fZGVjb3MuZmluZChkID0+IGQuaWQgPT09IGlkKTtcclxuICAgICAgICAgICAgaWYgKCFkZWNvKSB7XHJcbiAgICAgICAgICAgICAgICBkZWNvID0gbmV3IERlY29Ob2RlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdmFyaWF0aW9uOiBhbnkgPSB0aGlzLl9nZXRWYXJpYXRpb25zKCkuZmluZCh2ID0+IHYucGFyZW50SWQgPT09IHRoaXMuX3NlbGVjdGlvbnNbaV0uYXJ0Tm9kZUlkRGVjbyk7XHJcbiAgICAgICAgICAgIGlmICh2YXJpYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGRlY28udmFyaWF0aW9uID0gdmFyaWF0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbnNbaV0uZGVjb05vZGUgPSBkZWNvO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9nZXRWYXJpYXRpb25zKCk6IERlY29Ob2RlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kZWNvcy5maWx0ZXIoKGRlY286IERlY29Ob2RlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkZWNvLnR5cGUgPT09IERlY29Ob2RlVHlwZS5WYXJpYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfbG9hZFZhcmlhdGlvbnMob2JqOiBUSFJFRS5PYmplY3QzRCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuX2xvZygnbG9hZCB2YXJpYXRpb24gZm9yIHBhcnRzJyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmxvYWRQYXJ0KG9iaiwgdGhpcy5fYWRqdXN0YWJsZXMsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuX2xvZygnbG9hZCB2YXJpYXRpb24gZm9yIGFkanVzdGFibGVzJyk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmxvYWRWYXJpYXRpb24ob2JqLCB0aGlzLl9hZGp1c3RhYmxlcywgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5fbG9nKCdsb2FkIHZhcmlhdGlvbiBmb3IgYWRkYWJsZXMnKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl92YXJpYXRpb25IZWxwZXIubG9hZFZhcmlhdGlvbihvYmosIHRoaXMuX2FkZGFibGVzLCB0cnVlKTtcclxuICAgICAgICB0aGlzLl9sb2coJ2xvYWQgdmFyaWF0aW9uIGNsZWFyIGNhY2hlJyk7XHJcbiAgICAgICAgdGhpcy5fdmFyaWF0aW9uSGVscGVyLmNsZWFyQ2FjaGUoKTtcclxuICAgICAgICB0aGlzLl9sb2coJ2xvYWQgdmFyaWF0aW9ucyBkb25lJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZ2V0QWRqdXN0YWJsZXMoKTogU2VsZWN0aW9uW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25zLmZpbHRlcihzID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZTogRGVjb05vZGUgPSBzLmRlY29Ob2RlO1xyXG4gICAgICAgICAgICByZXR1cm4gbm9kZSAmJiBub2RlLmdhbWVPYmplY3ROYW1lICYmIG5vZGUudHlwZSA9PT0gRGVjb05vZGVUeXBlLlBhcnQgJiYgbm9kZS5raW5kID09PSBEZWNvTm9kZUtpbmQuQWRqdXN0YWJsZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF91cGRhdGVQaXZvdChvYmo6IFRIUkVFLk9iamVjdDNEKSB7XHJcbiAgICAgICAgY29uc3QgYm91bmRpbmdCb3ggPSBuZXcgVEhSRUUuQm94MygpLnNldEZyb21PYmplY3Qob2JqKTtcclxuICAgICAgICBjb25zdCBiYkNlbnRlclBpdm90ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgICAgICBib3VuZGluZ0JveC5nZXRDZW50ZXIoYmJDZW50ZXJQaXZvdCk7XHJcbiAgICAgICAgY29uc3QgZGVsdGE6IFRIUkVFLlZlY3RvcjMgPSBuZXcgVEhSRUUuVmVjdG9yMygpLnN1YihiYkNlbnRlclBpdm90KS5zZXRZKE1hdGguYWJzKE1hdGgubWluKGJvdW5kaW5nQm94Lm1pbi55LCAwKSkpO1xyXG5cclxuICAgICAgICBvYmouY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjaGlsZC5wb3NpdGlvbi5hZGQoZGVsdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9iai51cGRhdGVXb3JsZE1hdHJpeChmYWxzZSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcmVzZXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcGxhY2VkQWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9wbGFjZWRBZGp1c3RhYmxlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2FkanVzdGFibGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5fYWRkYWJsZXMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlVGhlU2VsZWN0aW9ucygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2xvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xyXG4gICAgICAgICAgICB0aGlzLmRlYnVnKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhuZXcgRGF0ZSgpLCBtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19