Socket
Socket
Sign inDemoInstall

@limble/limble-tree

Package Overview
Dependencies
Maintainers
2
Versions
51
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@limble/limble-tree - npm Package Compare versions

Comparing version 0.11.0 to 0.11.1

2

bundles/limble-limble-tree.umd.min.js

@@ -15,3 +15,3 @@ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs"),require("rxjs/operators"),require("@angular/common")):"function"==typeof define&&define.amd?define("@limble/limble-tree",["exports","@angular/core","rxjs","rxjs/operators","@angular/common"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).limble=e.limble||{},e.limble["limble-tree"]={}),e.ng.core,e.rxjs,e.rxjs.operators,e.ng.common)}(this,(function(e,t,r,n,o){"use strict";

PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */Object.create;function i(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function a(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a}function s(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(a(arguments[t]));return e}Object.create;function l(e,t){var r,n;if(e.length!==t.length)return!1;try{for(var o=i(e.entries()),s=o.next();!s.done;s=o.next()){var d=a(s.value,2),c=d[0],p=d[1],h=t[c];if(p instanceof Array&&h instanceof Array){if(!l(p,h))return!1}else if(p!==h)return!1}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return!0}function d(e,t){return void 0!==e&&(!0===e.allowNesting||"function"==typeof e.allowNesting&&void 0!==t&&!0===e.allowNesting(t))}var c=function(){function e(e,t){this.parentCoordinates=e,this.insertIndex=t}return e.prototype.getFullInsertCoordinates=function(){return s(this.parentCoordinates,[this.insertIndex])},e.prototype.setParentCoordinates=function(e){this.parentCoordinates=e},e.prototype.setInsertIndex=function(e){this.insertIndex=e},e}(),p=function(){function e(e,t){this.location=new c(e,t),this.rendered=!1,this.visible=!1,this.active=!1,this.commChannel=new r.Subject}return e.dropZoneLocationsAreEqual=function(e,t){return l(e.getFullInsertCoordinates(),t.getFullInsertCoordinates())},e.prototype.isRendered=function(e){return void 0===e&&(e=void 0),void 0!==e&&(this.rendered=e,void 0!==this.commChannel&&this.commChannel.next("checkRendered"),!1===this.rendered&&this.isVisible(!1)),this.rendered},e.prototype.isVisible=function(e){return void 0===e&&(e=void 0),void 0!==e&&(this.visible=e,void 0!==this.commChannel&&this.commChannel.next("checkVisible"),!1===this.visible&&this.isActive(!1)),this.visible},e.prototype.isActive=function(e){return void 0===e&&(e=void 0),void 0!==e&&(this.active=e,void 0!==this.commChannel&&this.commChannel.next("checkActive")),this.active},e.prototype.getLocation=function(){return this.location},e.prototype.getFamily=function(){return this.family},e.prototype.setFamily=function(e){this.family=e},e.prototype.getCommChannel=function(){return this.commChannel},e.prototype.getFullInsertCoordinates=function(){return this.location.getFullInsertCoordinates()},e.prototype.setHost=function(e){return this.host=e,this.host},e.prototype.getHost=function(){return this.host},e}(),h=function(){function e(){this.state="idle",this.state$=new r.BehaviorSubject(this.state)}return e.prototype.dragging=function(e,t){this._tempData={branch:e,parentContainer:t},this.state="dragging",this.state$.next(this.state)},e.prototype.droppable=function(){if("dragging"!==this.state)throw new Error("Can only call `droppable` when state is `dragging`");this.state="droppable",this.state$.next(this.state)},e.prototype.notDroppable=function(){if("droppable"!==this.state)throw new Error("Can only call `notDroppable` when state is `droppable`");this.state="dragging",this.state$.next(this.state)},e.prototype.capture=function(){var e;if("droppable"!==this.state)throw new Error("Can only move to `captured` state from `droppable` state");return this.state="captured",this.state$.next(this.state),null===(e=this._tempData)||void 0===e?void 0:e.branch},e.prototype.release=function(){this._tempData=void 0,this.state="idle",this.state$.next(this.state)},e.prototype.getData=function(){return this._tempData},e.prototype.getState=function(){return this.state},e}();function u(e,t){var r=e.getFullInsertCoordinates(),n=t.getFullInsertCoordinates();return r.length>n.length?-1:r.length<n.length?1:0}h.ɵfac=function(e){return new(e||h)},h.ɵprov=t.ɵɵdefineInjectable({token:h,factory:h.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(h,[{type:t.Injectable}],(function(){return[]}),null);var v=function(){function e(e){this.dragStateService=e,this.dropZoneArchive=new Set,this.dropZoneInventory=[],this.dropZoneFamilies=[],this.visibleFamily=null,this.activeDropZone=null,this.tempFamilies=[],this.setActiveDropZone(null)}return e.prototype.addDropZone=function(e){this.dropZoneArchive.add(e)},e.prototype.clearVisibleZones=function(){var e,t;if(null!==this.visibleFamily){try{for(var r=i(this.visibleFamily.members),n=r.next();!n.done;n=r.next()){n.value.isVisible(!1)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.visibleFamily=null}this.restoreFamilies(),this.setActiveDropZone(null)},e.prototype.getActiveDropZone=function(){return this.activeDropZone},e.prototype.getDropZone=function(e){var t=s(e);t.pop();var r=e[e.length-1],n=new c(t,r);return this.dropZoneInventory.find((function(e){return p.dropZoneLocationsAreEqual(e,n)}))},e.prototype.init=function(e,t){this.tree=e,this.treeOptions=t,this.update()},e.prototype.removeDropZone=function(e){this.dropZoneArchive.delete(e)},e.prototype.reset=function(){this.clearVisibleZones(),this.dropZoneFamilies.length=0,this.dropZoneInventory.length=0},e.prototype.restart=function(){this.reset(),this.dropZoneArchive.clear()},e.prototype.restoreFamilies=function(){var e,t,r,n;if(2===this.tempFamilies.length){this.dropZoneFamilies.pop(),this.dropZoneFamilies.push(this.tempFamilies[0]);try{for(var o=i(this.tempFamilies[0].members),a=o.next();!a.done;a=o.next()){a.value.setFamily(this.tempFamilies[0])}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}if(null!==this.tempFamilies[1]){this.dropZoneFamilies.push(this.tempFamilies[1]);try{for(var s=i(this.tempFamilies[1].members),l=s.next();!l.done;l=s.next()){l.value.setFamily(this.tempFamilies[1])}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}}this.tempFamilies=[]}},e.prototype.showDropZoneFamily=function(e,t){var r,n,o,a,l,d;if(void 0===t&&(t={joinFamilies:!1,activateLowestInsteadOfFounder:!1}),null===this.activeDropZone||!p.dropZoneLocationsAreEqual(this.activeDropZone,e)){null===this.visibleFamily&&null===this.activeDropZone||this.clearVisibleZones();var h=this.dropZoneInventory.find((function(t){return p.dropZoneLocationsAreEqual(t,e)}));if(void 0===h)throw new Error("Could not find drop zone to show. location: "+JSON.stringify(e.getLocation()));var v=h.getFamily();if(!0===t.joinFamilies){var f=e.getLocation(),g=new c(s(f.parentCoordinates),f.insertIndex+1),y=this.dropZoneInventory.find((function(e){return p.dropZoneLocationsAreEqual(e,g)}));if(void 0===y)throw new Error("Could not find drop zone to show");var m=y.getFamily();if(void 0===v||void 0===m)throw new Error("No family");var b={founder:v.founder,members:s(v.members)};this.showDropZone(v.founder,!0);try{for(var w=i(v.members.sort(u)),Z=w.next();!Z.done;Z=w.next()){(F=Z.value).setFamily(b),F!==v.founder&&(null===this.activeDropZone?this.showDropZone(F,!0):this.showDropZone(F))}}catch(e){r={error:e}}finally{try{Z&&!Z.done&&(n=w.return)&&n.call(w)}finally{if(r)throw r.error}}try{for(var C=i(m.members),D=C.next();!D.done;D=C.next()){(F=D.value).setFamily(b),F.getLocation().parentCoordinates.length<y.getLocation().parentCoordinates.length&&(b.members.push(F),this.showDropZone(F))}}catch(e){o={error:e}}finally{try{D&&!D.done&&(a=C.return)&&a.call(C)}finally{if(o)throw o.error}}this.tempFamilies=[v,m];var S=this.dropZoneFamilies.indexOf(v);this.dropZoneFamilies.splice(S,1);var I=this.dropZoneFamilies.indexOf(m);this.dropZoneFamilies.splice(I,1),this.dropZoneFamilies.push(b),this.visibleFamily=b}else{if(void 0===v)throw new Error("No family");if(this.visibleFamily=v,this.showDropZone(v.founder,!0),v.members.length>1)try{for(var x=i(v.members.sort(u)),E=x.next();!E.done;E=x.next()){var F;(F=E.value)!==v.founder&&(null===this.activeDropZone?this.showDropZone(F,!0):this.showDropZone(F))}}catch(e){l={error:e}}finally{try{E&&!E.done&&(d=x.return)&&d.call(x)}finally{if(l)throw l.error}}}if(!0===t.activateLowestInsteadOfFounder&&this.visibleFamily.members.length>1){var M=s(this.visibleFamily.members).sort(u).pop();if(void 0===M)throw new Error("Could not get lowest member");this.swapActiveDropZone(M)}}},e.prototype.swapActiveDropZone=function(e){if(null===this.visibleFamily)throw new Error("No visible family available for swapping");if(-1===this.visibleFamily.members.findIndex((function(t){return t===e})))throw new Error("failed to swap active drop zone");this.setActiveDropZone(e)},e.prototype.update=function(){this.reset(),this.buildInventory(),this.assignFamilies()},e.prototype.assignFamilies=function(){var e,t,r,n,o,a,d=s(this.dropZoneInventory),c=d.filter((function(e){var t=e.getLocation();return 0===t.insertIndex&&t.parentCoordinates.length>0})).sort((function(e,t){for(var r,n,o,i,a=e.getFullInsertCoordinates(),s=t.getFullInsertCoordinates(),l=Math.max(a.length,s.length),d=0;d<l;d++){if((null!==(r=a[d])&&void 0!==r?r:-1)>(null!==(n=s[d])&&void 0!==n?n:-1))return-1;if((null!==(o=a[d])&&void 0!==o?o:-1)<(null!==(i=s[d])&&void 0!==i?i:-1))return 1}return 0})),p=function(e){if(!d.includes(e))return"continue";var t={founder:e,members:[]};e.setFamily(t);for(var r=s(e.getFullInsertCoordinates());r.length>0;){var n=d.findIndex((function(e){return l(e.getFullInsertCoordinates(),r)}));if(-1!==n){var o=d.splice(n,1)[0];t.members.push(o),o.setFamily(t)}r.pop(),r[r.length-1]++}h.dropZoneFamilies.push(t)},h=this;try{for(var u=i(c),v=u.next();!v.done;v=u.next()){p(y=v.value)}}catch(t){e={error:t}}finally{try{v&&!v.done&&(t=u.return)&&t.call(u)}finally{if(e)throw e.error}}try{for(var f=i(d.filter((function(e){return 1===e.getFullInsertCoordinates().length}))),g=f.next();!g.done;g=f.next()){var y,m={founder:y=g.value,members:[y]};y.setFamily(m),this.dropZoneFamilies.push(m),d.splice(d.indexOf(y),1)}}catch(e){r={error:e}}finally{try{g&&!g.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}if(0!==d.length){var b="";try{for(var w=i(d),Z=w.next();!Z.done;Z=w.next()){var C=Z.value;b+=JSON.stringify(C.getLocation())+", "}}catch(e){o={error:e}}finally{try{Z&&!Z.done&&(a=w.return)&&a.call(w)}finally{if(o)throw o.error}}throw b=b.slice(0,b.length-2),new Error("Some zones were not assigned to a family. The orphan zones have the following locations: "+b)}},e.prototype.buildInventory=function(){var e,t,r=[];try{for(var n=i(this.dropZoneArchive),o=n.next();!o.done;o=n.next()){var a=o.value,s=a.getFullInsertCoordinates().join(",");r.includes(s)?a.isRendered(!1):(this.dropZoneInventory.push(a),r.push(s),a.isRendered(!0))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},e.prototype.setActiveDropZone=function(e){null!==this.activeDropZone&&this.activeDropZone.isActive(!1),this.activeDropZone=e,null!==this.activeDropZone&&"droppable"!==this.dragStateService.getState()?this.dragStateService.droppable():null===this.activeDropZone&&"droppable"===this.dragStateService.getState()&&this.dragStateService.notDroppable(),null!==this.activeDropZone&&this.activeDropZone.isActive(!0)},e.prototype.showDropZone=function(e,t){if(void 0===t&&(t=!1),void 0===this.tree)throw new Error("DropZoneService not initialized");if(!this.zoneIsAllowed(e))return!1;if(void 0===this.tree.findByCoordinates(e.getLocation().parentCoordinates))throw new Error("Bad family member");return e.isVisible(!0),!0===t&&this.setActiveDropZone(e),!0},e.prototype.zoneIsAllowed=function(e){if(void 0===this.treeOptions||void 0===this.tree)throw new Error("dropZoneService not initialized");var t=this.dragStateService.getData();if(void 0===t)throw new Error("Can't get dragged node");var r=this.tree.findByCoordinates(e.getLocation().parentCoordinates);if(void 0===r)throw new Error("Could not get drop zone parent");var n=e.getLocation().insertIndex;if(void 0===n)throw new Error("Could not get drop zone index");var o=t.branch;return!!this.treeOptions.allowDrop(o.data,r.data,n)},e}();v.ɵfac=function(e){return new(e||v)(t.ɵɵinject(h))},v.ɵprov=t.ɵɵdefineInjectable({token:v,factory:v.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(v,[{type:t.Injectable}],(function(){return[{type:h}]}),null);var f=function(){function e(e){this.data=e,this.children=[],this.parent=null}return e.prototype.isRoot=function(){return null===this.parent},e.prototype.getParent=function(){return this.parent},e.prototype.setParent=function(e){this.parent=e},e.prototype.findByCoordinates=function(e){var t,r,n=this;try{for(var o=i(e.values()),a=o.next();!a.done;a=o.next()){var s=a.value;if(void 0===(n=n.getChild(s)))return}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.getCoordinates=function(){for(var e=[],t=this;null!==t.parent;){var r=t.getIndex();if(null==r)throw new Error("Could not get cursor index");e.unshift(r),t=t.parent}return e},e.prototype.getChild=function(e){return this.children[e]},e.prototype.getChildren=function(){return this.children},e.prototype.clearChildren=function(){var e,t;try{for(var r=i(this.children),n=r.next();!n.done;n=r.next()){n.value.setParent(null)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.children.length=0},e.prototype.getIndex=function(){var e=this;if(null===this.parent)return null;var t=this.parent.children.findIndex((function(t){return t===e}));return-1!==t?t:void 0},e.prototype.getDescendant=function(e){var t,r,n=this;try{for(var o=i(e),a=o.next();!a.done;a=o.next()){var s=a.value;if(void 0===(n=n.children[s]))return}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.findDescendant=function(e){var t,r;if(!0===e(this.data))return this;if(this.children.length>0)try{for(var n=i(this.children),o=n.next();!o.done;o=n.next()){var a=o.value.findDescendant(e);if(void 0!==a)return a}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},e.prototype.getAncestors=function(){for(var e=[],t=this;null!==t.parent;)e.push(t.parent),t=t.parent;return e},e.prototype.appendChild=function(e){return null!==e.getParent()&&e.remove(),e.setParent(this),this.children.push(e),e},e.prototype.insertChild=function(e,t){var r=this.children.indexOf(e);return-1===r?(null!==e.getParent()&&e.remove(),e.setParent(this),this.children.splice(t,0,e)):t>r?(this.children.splice(t,0,e),this.removeChild(r),e.setParent(this)):(e.remove(),this.children.splice(t,0,e),e.setParent(this)),e},e.prototype.removeChild=function(e){var t=this.children.splice(e,1)[0];return t.setParent(null),t},e.prototype.remove=function(){var e=this.getIndex();if(null===this.parent||null==e)throw new Error("can't remove root");return this.parent.removeChild(e)},e.prototype.copy=function(){var e=this.copyHelper();return e.setParent(null),e},e.prototype.copyHelper=function(){var t,r,n=new e(this.data);try{for(var o=i(this.children),a=o.next();!a.done;a=o.next()){var s=a.value;n.appendChild(s.copyHelper()).parent=n}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e}(),g=function(){function e(e){this.factoryResolver=e,this.factoryResolver=e}return e.prototype.appendComponent=function(e,t,r){void 0===r&&(r=void 0);var n=this.factoryResolver.resolveComponentFactory(e);return t.createComponent(n,r)},e}();function y(e){var t,r,n,o=/(auto|scroll)/,a=function(e,t){return null===e||null===e.parentNode?t:a(e.parentElement,t.concat([e]))},s=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},l=function(e){return o.test(function(e){return s(e,"overflow")+s(e,"overflow-y")+s(e,"overflow-x")}(e))},d=a(e.parentElement,[]);try{for(var c=i(d),p=c.next();!p.done;p=c.next()){var h=p.value;if(l(h))return h}}catch(e){t={error:e}}finally{try{p&&!p.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}return null!==(n=document.scrollingElement)&&void 0!==n?n:document.documentElement}g.ɵfac=function(e){return new(e||g)(t.ɵɵinject(t.ComponentFactoryResolver))},g.ɵprov=t.ɵɵdefineInjectable({token:g,factory:g.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(g,[{type:t.Injectable}],(function(){return[{type:t.ComponentFactoryResolver}]}),null);var m=function(){function e(e){var t=this;this.ngZone=e,this.ngZone.runOutsideAngular((function(){t.globalDrag$=r.fromEvent(document,"drag")})),this.scrolling=!1}return e.prototype.addScrolling=function(){var e=this;this.ngZone.runOutsideAngular((function(){if(void 0===e.globalDragSubscription){if(void 0===e.globalDrag$)throw new Error("Could not get observable");var t,r,o,i,a,s,l,d,c;e.globalDragSubscription=e.globalDrag$.pipe(n.throttleTime(25),n.filter((function(e){if(!e.target)return!1;d=y(e.target),t=d.clientHeight;var n,l=d.clientWidth;if("fixed"===window.getComputedStyle(d).getPropertyValue("position").toLowerCase())n=e.clientX,c=e.clientY;else{var p=d.getBoundingClientRect(),h=y(d);n=e.clientX-(p.left+h.scrollLeft),c=e.clientY-(p.top+h.scrollTop)}return!(n<0||n>l||c<0||c>t)&&(r=Math.max(.1*t,100),s=c>(i=t-r),(a=c<(o=r))||s)}))).subscribe((function(){if(null!==d){var n,p=d.scrollHeight-t,h=d.scrollTop;if(a&&h>0){n=h-75*((o-c)/r)}else{if(!s||!(h<p))return;n=h+75*((c-i)/r)}(n=Math.max(0,Math.min(p,n)))!==h&&(d.scrollTo({top:n}),e.scrolling=!0,clearTimeout(l),l=setTimeout((function(){e.scrolling=!1}),100))}}))}}))},e.prototype.removeScrolling=function(){void 0!==this.globalDragSubscription&&this.globalDragSubscription.unsubscribe()},e}();m.ɵfac=function(e){return new(e||m)(t.ɵɵinject(t.NgZone))},m.ɵprov=t.ɵɵdefineInjectable({token:m,factory:m.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(m,[{type:t.Injectable}],(function(){return[{type:t.NgZone}]}),null);var b=["nodeHost"],w=["draggableDiv"],Z=["nodeHostContainer"];function C(e,r){if(1&e&&t.ɵɵelement(0,"drop-zone",7),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("dropZone",n.dropZoneAbove)}}function D(e,t){}function S(e,r){if(1&e&&t.ɵɵelement(0,"limble-tree-branch",8),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("branch",n.branch)("dropZoneInside",n.dropZoneInside)("renderDropZoneInside",n.renderDropZoneInside)}}function I(e,r){if(1&e&&t.ɵɵelement(0,"drop-zone",7),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("dropZone",n.dropZoneBelow)}}var x=function(){function e(e,t,r,o,i,a,s){var l=this;this.componentCreatorService=e,this.changeDetectorRef=t,this.dragStateService=r,this.dropZoneService=o,this.treeService=i,this.globalEventsService=a,this.ngZone=s,void 0!==this.treeService.treeOptions&&!0!==this.treeService.treeOptions.listMode&&!0!==this.treeService.getPlaceholder()?this.renderInnerBranch=!0:this.renderInnerBranch=!1,this.renderDropZoneBelow=!1,this.renderDropZoneAbove=!1,this.renderDropZoneInside=!1,this.treeChangeSubscription=this.treeService.changes$.pipe(n.skip(1)).subscribe((function(){l.treeChangeHandler()}))}return e.prototype.treeChangeHandler=function(){void 0===this.branch||void 0===this.currentBranchCoordinates||l(this.branch.getCoordinates(),this.currentBranchCoordinates)||this.updateDropZones()},e.prototype.ngOnInit=function(){var e,t,o,i=this;if(!1!==(null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.allowDragging)){var a=null===(t=this.branch)||void 0===t?void 0:t.getParent();if(null!==(null==a?void 0:a.data)){var s=null==a?void 0:a.data;if(!d(this.treeService.treeOptions,s))return}this.registerDropZones(),this.currentBranchCoordinates=null===(o=this.branch)||void 0===o?void 0:o.getCoordinates(),this.ngZone.runOutsideAngular((function(){if(void 0===i.dropZoneAbove||void 0===i.dropZoneBelow||void 0===i.dropZoneInside)throw new Error("Zones not registered");r.merge(i.dropZoneAbove.getCommChannel(),i.dropZoneBelow.getCommChannel(),i.dropZoneInside.getCommChannel()).pipe(n.filter((function(e){return"checkRendered"===e}))).subscribe((function(){if(void 0===i.dropZoneAbove||void 0===i.dropZoneBelow||void 0===i.dropZoneInside||void 0===i.branch)throw new Error("Zones not registered");i.renderDropZoneAbove=i.dropZoneAbove.isRendered(),!0!==i.treeService.getPlaceholder()&&(i.renderDropZoneBelow=i.dropZoneBelow.isRendered(),d(i.treeService.treeOptions,i.branch.data)&&(i.renderDropZoneInside=i.dropZoneInside.isRendered()))}))}))}},e.prototype.ngAfterViewInit=function(){this.renderNode(),this.setDropZoneHosts(),this.checkForHandle(),this.changeDetectorRef.detectChanges()},e.prototype.ngOnDestroy=function(){this.treeChangeSubscription.unsubscribe(),void 0!==this.dropZoneAbove&&this.dropZoneService.removeDropZone(this.dropZoneAbove),void 0!==this.dropZoneBelow&&this.dropZoneService.removeDropZone(this.dropZoneBelow),void 0!==this.dropZoneInside&&this.dropZoneService.removeDropZone(this.dropZoneInside),this.treeService.cleanupSignal$.next(null)},e.prototype.dragstartHandler=function(e){var t,r=this;if(e.stopPropagation(),null===e.dataTransfer||void 0===this.branch||void 0===this.parentHost)throw new Error("failed to run dragstartHandler");var n=e.target;"LIMBLE-TREE-NODE"===(null===(t=n.parentElement)||void 0===t?void 0:t.tagName)?(e.dataTransfer.effectAllowed="move",this.dragStateService.dragging(this.branch,this.parentHost),setTimeout((function(){var e;if(n.classList.add("dragging"),void 0===r.branch)throw new Error("Could not show surrounding drop zones");var t,o=r.branch.getParent(),i=!0;null!==(null==o?void 0:o.data)&&(t=null==o?void 0:o.data,i=d(r.treeService.treeOptions,t)),void 0!==r.dropZoneAbove&&i&&(r.dropZoneService.showDropZoneFamily(r.dropZoneAbove,{joinFamilies:!0}),1===(null===(e=r.treeService.treeData)||void 0===e?void 0:e.length)&&1===r.branch.getCoordinates().length&&r.treeService.usePlaceholder())}))):e.preventDefault()},e.prototype.dragendHandler=function(e){if(null==e||e.stopPropagation(),void 0===this.draggableDiv)throw new Error("could not get draggable div");if(this.draggableDiv.nativeElement.classList.remove("dragging"),"captured"===this.dragStateService.getState()){if(!1===this.treeService.captured){if(void 0===this.branch)throw new Error("could not get branch in dragendHandler");this.treeService.cleanupSignal$.next(null),this.treeService.captured=!1}this.dragStateService.release()}else this.dragStateService.release(),this.dropZoneService.clearVisibleZones(),this.dropZoneService.restoreFamilies(),this.treeService.removePlaceholder()},e.prototype.dragoverHandler=function(e){if(!0!==this.globalEventsService.scrolling){if(void 0===this.branch)throw new Error("Can't get current branch during dragover event");var t=this.dragStateService.getData();if(void 0!==t){var r=t.branch;if(r!==this.branch&&!this.branch.getAncestors().includes(r))if(!0!==this.treeService.getPlaceholder()||void 0===this.dropZoneAbove){var n,o=e.currentTarget.offsetHeight/3,i=2*o,a=this.branch.getParent(),s=!0;null!==(null==a?void 0:a.data)&&(n=null==a?void 0:a.data,s=d(this.treeService.treeOptions,n));var l=this.dropZoneService.getActiveDropZone();if(e.offsetY<o&&void 0!==this.dropZoneAbove&&(null===l||!p.dropZoneLocationsAreEqual(l,this.dropZoneAbove))&&s){if(null==this.branch.getIndex())throw new Error("can't get branch index");this.dropZoneService.showDropZoneFamily(this.dropZoneAbove,{activateLowestInsteadOfFounder:!0})}else if(e.offsetY<i&&void 0!==this.dropZoneInside&&(null===l||!p.dropZoneLocationsAreEqual(l,this.dropZoneInside)))this.dropZoneService.showDropZoneFamily(this.dropZoneInside);else if(e.offsetY>=i&&void 0!==this.dropZoneBelow&&(null===l||!p.dropZoneLocationsAreEqual(l,this.dropZoneBelow))&&0===this.branch.getChildren().length&&s){if(null==this.branch.getIndex())throw new Error("can't get branch index");this.dropZoneService.showDropZoneFamily(this.dropZoneBelow)}}else this.dropZoneService.showDropZoneFamily(this.dropZoneAbove)}}},e.prototype.renderNode=function(){var e;if(void 0===this.nodeHost||void 0===this.branch)throw new Error("Failed to render tree node");var t=this.branch.data.component;if(void 0===t&&(t=null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.defaultComponent),void 0===t)throw new Error("limbleTree requires a component to render");var r=this.componentCreatorService.appendComponent(t.class,this.nodeHost);for(var n in r.instance.nodeData=this.branch.data,t.bindings)r.instance[n]=t.bindings[n]},e.prototype.registerDropZones=function(){this.addDropZoneAbove(),this.addDropZoneBelow(),this.addDropZoneInside()},e.prototype.addDropZoneAbove=function(){var e;if(void 0===this.branch)throw new Error("failed to register drop zone above");var t=this.branch.getParent(),r=this.branch.getCoordinates(),n=r[r.length-1];this.dropZoneAbove=new p(s(null!==(e=null==t?void 0:t.getCoordinates())&&void 0!==e?e:[]),n),this.dropZoneService.addDropZone(this.dropZoneAbove)},e.prototype.addDropZoneBelow=function(){var e;if(void 0===this.branch)throw new Error("failed to register drop zone below");var t=this.branch.getParent(),r=this.branch.getCoordinates(),n=r[r.length-1];this.dropZoneBelow=new p(s(null!==(e=null==t?void 0:t.getCoordinates())&&void 0!==e?e:[]),n+1),this.dropZoneService.addDropZone(this.dropZoneBelow)},e.prototype.addDropZoneInside=function(){if(void 0===this.branch)throw new Error("failed to register drop zone inside");this.dropZoneInside=new p(s(this.branch.getCoordinates()),0),this.dropZoneService.addDropZone(this.dropZoneInside)},e.prototype.updateDropZones=function(){var e;if(void 0===this.dropZoneAbove||void 0===this.dropZoneBelow||void 0===this.dropZoneInside)throw new Error("failed to update drop zones");this.currentBranchCoordinates=null===(e=this.branch)||void 0===e?void 0:e.getCoordinates(),this.updateDropZoneAbove(),this.updateDropZoneBelow(),this.updateDropZoneInside(),this.setDropZoneHosts()},e.prototype.updateDropZoneAbove=function(){var e;if(void 0===this.branch||void 0===this.dropZoneAbove)throw new Error("failed to update drop zone above");var t=this.branch.getParent(),r=this.branch.getCoordinates(),n=r[r.length-1],o=this.dropZoneAbove.getLocation();o.setParentCoordinates(s(null!==(e=null==t?void 0:t.getCoordinates())&&void 0!==e?e:[])),o.setInsertIndex(n)},e.prototype.updateDropZoneBelow=function(){var e;if(void 0===this.branch||void 0===this.dropZoneBelow)throw new Error("failed to update drop zone below");var t=this.branch.getParent(),r=this.branch.getCoordinates(),n=r[r.length-1],o=this.dropZoneBelow.getLocation();o.setParentCoordinates(s(null!==(e=null==t?void 0:t.getCoordinates())&&void 0!==e?e:[])),o.setInsertIndex(n+1)},e.prototype.updateDropZoneInside=function(){if(void 0===this.branch||void 0===this.dropZoneInside)throw new Error("failed to update drop zone inside");this.dropZoneInside.getLocation().setParentCoordinates(s(this.branch.getCoordinates()))},e.prototype.setDropZoneHosts=function(){if(void 0===this.dropZoneAbove||void 0===this.dropZoneBelow)throw new Error("could not set drop zone hosts");this.dropZoneAbove.setHost(this.parentHost),this.dropZoneBelow.setHost(this.parentHost)},e.prototype.checkForHandle=function(){var e,t=this;if(void 0!==this.nodeHostContainer&&void 0!==this.draggableDiv){var r,o,i=this.nodeHostContainer.nativeElement.querySelector(".limble-tree-handle"),a=this.draggableDiv.nativeElement;r=this.treeService.treeOptions,o=null===(e=this.branch)||void 0===e?void 0:e.data,void 0===r||!0!==r.allowDragging&&("function"!=typeof r.allowDragging||void 0===o||!0!==r.allowDragging(o))?a.setAttribute("draggable","false"):null===i?a.setAttribute("draggable","true"):i.addEventListener("mousedown",(function(){a.setAttribute("draggable","true");var e=t.dragStateService.state$.pipe(n.filter((function(e){return"dragging"===e})),n.first());t.dragStateService.state$.pipe(n.skipUntil(e),n.filter((function(e){return"idle"===e})),n.first()).subscribe((function(){a.setAttribute("draggable","false")}))}))}},e}();x.ɵfac=function(e){return new(e||x)(t.ɵɵdirectiveInject(g),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(h),t.ɵɵdirectiveInject(v),t.ɵɵdirectiveInject(F),t.ɵɵdirectiveInject(m),t.ɵɵdirectiveInject(t.NgZone))},x.ɵcmp=t.ɵɵdefineComponent({type:x,selectors:[["limble-tree-node"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(b,1,t.ViewContainerRef),t.ɵɵviewQuery(w,1,t.ElementRef),t.ɵɵviewQuery(Z,1,t.ElementRef)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.nodeHost=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.draggableDiv=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.nodeHostContainer=n.first)}},inputs:{branch:"branch",parentHost:"parentHost"},decls:9,vars:4,consts:[[3,"dropZone",4,"ngIf"],[1,"limble-parent-container",3,"dragstart","dragend"],["draggableDiv",""],[3,"dragoverEventThrottle","dragoverNoChangeDetect"],["nodeHostContainer",""],["nodeHost",""],[3,"branch","dropZoneInside","renderDropZoneInside",4,"ngIf"],[3,"dropZone"],[3,"branch","dropZoneInside","renderDropZoneInside"]],template:function(e,r){1&e&&(t.ɵɵtemplate(0,C,1,1,"drop-zone",0),t.ɵɵelementStart(1,"div",1,2),t.ɵɵlistener("dragstart",(function(e){return r.dragstartHandler(e)}))("dragend",(function(e){return r.dragendHandler(e)})),t.ɵɵelementStart(3,"div",3,4),t.ɵɵlistener("dragoverNoChangeDetect",(function(e){return r.dragoverHandler(e)})),t.ɵɵtemplate(5,D,0,0,"ng-template",null,5,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵtemplate(7,S,1,3,"limble-tree-branch",6),t.ɵɵelementEnd(),t.ɵɵtemplate(8,I,1,1,"drop-zone",0)),2&e&&(t.ɵɵproperty("ngIf",!0===r.renderDropZoneAbove),t.ɵɵadvance(3),t.ɵɵproperty("dragoverEventThrottle",10),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",void 0!==r.branch),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",!0===r.renderDropZoneBelow))},styles:[".dragging[_ngcontent-%COMP%]{position:absolute;transition:transform .01s;transform:translateX(-9999px)}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(x,[{type:t.Component,args:[{selector:"limble-tree-node",templateUrl:"./limble-tree-node.component.html",styleUrls:["./limble-tree-node.component.scss"]}]}],(function(){return[{type:g},{type:t.ChangeDetectorRef},{type:h},{type:v},{type:F},{type:m},{type:t.NgZone}]}),{branch:[{type:t.Input}],nodeHost:[{type:t.ViewChild,args:["nodeHost",{read:t.ViewContainerRef}]}],draggableDiv:[{type:t.ViewChild,args:["draggableDiv",{read:t.ElementRef}]}],nodeHostContainer:[{type:t.ViewChild,args:["nodeHostContainer",{read:t.ElementRef}]}],parentHost:[{type:t.Input}]});var E=function(){};E.ɵfac=function(e){return new(e||E)},E.ɵcmp=t.ɵɵdefineComponent({type:E,selectors:[["limble-tree-placeholder"]],decls:1,vars:0,consts:[[1,"placeholder"]],template:function(e,r){1&e&&t.ɵɵelement(0,"div",0)},styles:[".placeholder[_ngcontent-%COMP%]{width:100%;height:20px}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(E,[{type:t.Component,args:[{selector:"limble-tree-placeholder",templateUrl:"./limble-tree-placeholder.component.html",styleUrls:["./limble-tree-placeholder.component.scss"]}]}],null,null);var F=function(){function e(e,t,o){var i=this;this.componentCreatorService=e,this.dropZoneService=t,this.dragStateService=o,this.changes$=new r.Subject,this.drops$=new r.Subject,this.treeModel=new f(null),this.placeholder=!1,this.captured=!1,this.cleanupSignal$=new r.Subject,this.cleanupSignal$.pipe(n.debounceTime(5)).subscribe((function(){i.cleanup()}))}return e.prototype.drop=function(e,t){var r,n=e.getParent();if(null===n)throw new Error("can't drop root of tree");var o,i,a=e.getIndex();if(null==a)throw new Error("Cannot move the hidden root node");if(!0===this.placeholder?(o=[],i=0):i=(o=s(t)).pop(),void 0===i)throw new Error("target coordinates are empty");var d=this.treeModel.getDescendant(o);if(void 0===d)throw new Error("could not get to target");var c=this.dropZoneService.getDropZone(t),p=null==c?void 0:c.getLocation().insertIndex,h=null==c?void 0:c.getHost(),u=null===(r=this.dragStateService.getData())||void 0===r?void 0:r.parentContainer;if(this.removePlaceholder(),this.drops$.next({target:e.data,oldParent:n.data,oldIndex:a,newParent:d.data,newIndex:i}),d.insertChild(e,i),void 0===h||void 0===u||void 0===p)return console.warn("Could not perform a precise update. Re-rendering the entire tree instead"),this.render(),void this.changes$.next(null);var v=u.length,f=this.componentCreatorService.appendComponent(x,h,i);f.instance.branch=e,f.instance.parentHost=h,p<a&&u.length>v&&l(n.getCoordinates(),o)?u.remove(a+1):u.remove(a),this.cleanupSignal$.next(null)},e.prototype.getPlaceholder=function(){return this.placeholder},e.prototype.init=function(e,t,r,n,o){if(this.host=e,this.uncutData=t,this.treeOptions=this.processOptions(r,n,o),!0===this.treeOptions.listMode){var i=this.treeOptions.itemsPerPage*(this.treeOptions.page-1);isNaN(i)&&(i=0);var a=i+this.treeOptions.itemsPerPage;this.treeData=this.uncutData.slice(i,a)}else this.treeData=this.uncutData;this.render()},e.prototype.removePlaceholder=function(){var e;if(!1!==this.placeholder){var t=this.treeModel.getChildren().length-1;-1!==t&&(this.treeModel.removeChild(t),null===(e=this.host)||void 0===e||e.remove(t)),this.placeholder=!1}},e.prototype.cleanup=function(){this.rebuildTreeData(),this.changes$.next(null),this.dropZoneService.update()},e.prototype.render=function(){var e,t,r,n,o=this;if(void 0===this.host||void 0===this.treeData||void 0===this.treeOptions)throw new Error("TreeModel not initialized");if(this.host.clear(),this.dropZoneService.restart(),this.placeholder=!1,this.treeModel=new f(null),0===this.treeData.length)this.usePlaceholder();else{try{for(var a=i(this.treeData),s=a.next();!s.done;s=a.next()){var l=s.value,d=new f(l);this.treeModel.appendChild(d)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}try{for(var c=i(this.treeModel.getChildren()),p=c.next();!p.done;p=c.next()){d=p.value;var h=this.componentCreatorService.appendComponent(x,this.host);h.instance.branch=d,h.instance.parentHost=this.host}}catch(e){r={error:e}}finally{try{p&&!p.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}}var u=this.treeData;setTimeout((function(){if(void 0===o.treeOptions)throw new Error("TreeModel not initialized");o.changes$.next(null),o.treeData===u&&o.dropZoneService.init(o.treeModel,o.treeOptions)}))},e.prototype.renderBranch=function(e,t){var r,n,o,a;if(void 0===this.treeModel)throw new Error("TreeModel not initialized");e.clear(),t.clearChildren();try{for(var s=i(null!==(a=null===(o=t.data)||void 0===o?void 0:o.nodes)&&void 0!==a?a:[]),l=s.next();!l.done;l=s.next()){var d=l.value,c=new f(d);t.appendChild(c);var p=this.componentCreatorService.appendComponent(x,e);p.instance.branch=c,p.instance.parentHost=e}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}},e.prototype.usePlaceholder=function(){if(!0!==this.placeholder){if(void 0===this.host)throw new Error("TreeModel not initialized");this.placeholder=!0;var e=new f({component:{class:E}});this.treeModel.appendChild(e);var t=this.componentCreatorService.appendComponent(x,this.host);t.instance.branch=e,t.instance.parentHost=this.host}},e.prototype.processOptions=function(e,t,r){var n,o,i,a,s;return void 0===e&&(e={}),void 0===t&&(t=1/0),void 0===r&&(r=1),!0===e.listMode&&void 0!==e.allowNesting&&!1!==e.allowNesting&&console.warn("The value of `allowNesting` will be ignored; it must be false when `listMode` is true"),{defaultComponent:e.defaultComponent,indent:null!==(n=e.indent)&&void 0!==n?n:45,allowNesting:!0!==e.listMode&&(null===(o=e.allowNesting)||void 0===o||o),allowDragging:null===(i=e.allowDragging)||void 0===i||i,allowDrop:null!==(a=e.allowDrop)&&void 0!==a?a:function(){return!0},listMode:null!==(s=e.listMode)&&void 0!==s&&s,itemsPerPage:e.listMode?t:void 0,page:e.listMode?r:void 0}},e.prototype.rebuildTreeData=function(){var e,t,r;if(void 0===this.uncutData||void 0===this.treeData||void 0===this.treeOptions)throw new Error("Tree data not initialized");this.treeData.length=0;try{for(var n=i(this.treeModel.getChildren()),o=n.next();!o.done;o=n.next()){var a=o.value;this.treeData.push(this.rebuildBranch(a))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}if(!0===this.treeOptions.listMode){var l=this.treeOptions.itemsPerPage*(this.treeOptions.page-1);isNaN(l)&&(l=0);var d=l+this.treeOptions.itemsPerPage;(r=this.uncutData).splice.apply(r,s([l,this.treeOptions.itemsPerPage],this.treeData)),this.treeData=this.uncutData.slice(l,d)}else this.uncutData=this.treeData},e.prototype.rebuildBranch=function(e){var t,r,n=e.data;n.nodes=[];try{for(var o=i(e.getChildren()),a=o.next();!a.done;a=o.next()){var s=a.value;n.nodes.push(this.rebuildBranch(s))}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e}();F.ɵfac=function(e){return new(e||F)(t.ɵɵinject(g),t.ɵɵinject(v),t.ɵɵinject(h))},F.ɵprov=t.ɵɵdefineInjectable({token:F,factory:F.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(F,[{type:t.Injectable}],(function(){return[{type:g},{type:v},{type:h}]}),null);var M=function(){function e(e,r){this.ngZone=e,this.el=r,this.dragoverNoChangeDetect=new t.EventEmitter,this.dragoverEventThrottle=0}return e.prototype.ngOnInit=function(){var e=this;this.ngZone.runOutsideAngular((function(){e.eventSubscription=r.fromEvent(e.el.nativeElement,"dragover").pipe(n.throttleTime(e.dragoverEventThrottle)).subscribe((function(t){e.dragoverNoChangeDetect.emit(t)}))}))},e.prototype.ngOnDestroy=function(){void 0!==this.eventSubscription&&this.eventSubscription.unsubscribe()},e}();M.ɵfac=function(e){return new(e||M)(t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(t.ElementRef))},M.ɵdir=t.ɵɵdefineDirective({type:M,selectors:[["","dragoverNoChangeDetect",""]],inputs:{dragoverEventThrottle:"dragoverEventThrottle"},outputs:{dragoverNoChangeDetect:"dragoverNoChangeDetect"}}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(M,[{type:t.Directive,args:[{selector:"[dragoverNoChangeDetect]"}]}],(function(){return[{type:t.NgZone},{type:t.ElementRef}]}),{dragoverEventThrottle:[{type:t.Input}],dragoverNoChangeDetect:[{type:t.Output}]});var A=function(){function e(e,r){this.ngZone=e,this.el=r,this.dragleaveNoChangeDetect=new t.EventEmitter}return e.prototype.ngOnInit=function(){var e=this;this.ngZone.runOutsideAngular((function(){e.eventSubscription=r.fromEvent(e.el.nativeElement,"dragleave").subscribe((function(t){e.dragleaveNoChangeDetect.emit(t)}))}))},e.prototype.ngOnDestroy=function(){void 0!==this.eventSubscription&&this.eventSubscription.unsubscribe()},e}();A.ɵfac=function(e){return new(e||A)(t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(t.ElementRef))},A.ɵdir=t.ɵɵdefineDirective({type:A,selectors:[["","dragleaveNoChangeDetect",""]],outputs:{dragleaveNoChangeDetect:"dragleaveNoChangeDetect"}}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(A,[{type:t.Directive,args:[{selector:"[dragleaveNoChangeDetect]"}]}],(function(){return[{type:t.NgZone},{type:t.ElementRef}]}),{dragleaveNoChangeDetect:[{type:t.Output}]});var P=["host"],O=["dropZoneInside"];function R(e,t){}function H(e,t){}var N=function(){function e(e,n,o,i,a){var s=this;this.treeService=e,this.dropZoneService=n,this.dragStateService=o,this.globalEventsService=i,this.changeDetectorRef=a,this.treeChange=new t.EventEmitter,this.treeDrop=new t.EventEmitter,this.dropZoneInside$=new r.BehaviorSubject(this.dropZoneInside),this.changesSubscription=this.treeService.changes$.subscribe((function(){s.treeChange.emit()})),this.dropSubscription=this.treeService.drops$.subscribe((function(e){s.treeDrop.emit(e)}))}return e.prototype.ngAfterViewInit=function(){var e;this.dropZoneInside$.next(this.dropZoneInside),this.dropZoneInside$.complete(),!0===(null===(e=this.options)||void 0===e?void 0:e.listMode)||void 0===this.itemsPerPage&&void 0===this.page||console.warn("pagination is only allowed in listMode; `itemsPerPage` and `page` inputs will be ignored"),this.update(),this.changeDetectorRef.detectChanges()},e.prototype.ngOnChanges=function(){void 0!==this.host&&void 0!==this.data&&this.update()},e.prototype.update=function(){if(void 0===this.host)throw new Error("Failed to render limble tree. Failure occurred at root.");if(void 0===this.data)throw new Error("limbleTree requires a data object");this.treeService.init(this.host,this.data,this.options,this.itemsPerPage,this.page),this.globalEventsService.addScrolling()},e.prototype.dragoverHandler=function(e){null!==e.dataTransfer&&(e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="move")},e.prototype.dragleaveHandler=function(e){var t=e.currentTarget,r=e.relatedTarget;t instanceof Node&&r instanceof Node&&!1===function(e,t){if(e===t)return!0;for(var r=t.parentNode;r!==document;){if(null===r)return;if(r===e)return!0;r=r.parentNode}return!1}(t,r)&&(this.dropZoneService.clearVisibleZones(),this.changeDetectorRef.detectChanges())},e.prototype.dropHandler=function(e){var t=this;if(e.stopPropagation(),"droppable"===this.dragStateService.getState()){var r=this.dragStateService.capture();if(void 0===r)throw new Error("failed to get current branch in dragendHandler");var o=this.dropZoneService.getActiveDropZone();if(null===o)throw new Error("failed to get active drop zone at drop handler");this.treeService.captured=!0,this.dragStateService.state$.pipe(n.first((function(e){return"idle"===e}))).subscribe((function(){t.treeService.captured=!1})),this.dropZoneService.clearVisibleZones(),this.treeService.drop(r,o.getFullInsertCoordinates())}},e.prototype.ngOnDestroy=function(){this.changesSubscription.unsubscribe(),this.dropSubscription.unsubscribe()},e}();N.ɵfac=function(e){return new(e||N)(t.ɵɵdirectiveInject(F),t.ɵɵdirectiveInject(v),t.ɵɵdirectiveInject(h),t.ɵɵdirectiveInject(m),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},N.ɵcmp=t.ɵɵdefineComponent({type:N,selectors:[["limble-tree-root"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(P,1,t.ViewContainerRef),t.ɵɵviewQuery(O,1,t.ViewContainerRef)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.host=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.dropZoneInside=n.first)}},inputs:{data:"data",options:"options",itemsPerPage:"itemsPerPage",page:"page"},outputs:{dropZoneInside$:"dropZoneInside$",treeChange:"treeChange",treeDrop:"treeDrop"},features:[t.ɵɵProvidersFeature([F,v]),t.ɵɵNgOnChangesFeature],decls:5,vars:0,consts:[[3,"dragoverNoChangeDetect","dragleaveNoChangeDetect","drop"],["dropZoneInside",""],["host",""]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div",0),t.ɵɵlistener("dragoverNoChangeDetect",(function(e){return r.dragoverHandler(e)}))("dragleaveNoChangeDetect",(function(e){return r.dragleaveHandler(e)}))("drop",(function(e){return r.dropHandler(e)})),t.ɵɵtemplate(1,R,0,0,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵtemplate(3,H,0,0,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd())},directives:[M,A],styles:[""]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(N,[{type:t.Component,args:[{selector:"limble-tree-root",templateUrl:"./limble-tree-root.component.html",styleUrls:["./limble-tree-root.component.scss"],providers:[F,v]}]}],(function(){return[{type:F},{type:v},{type:h},{type:m},{type:t.ChangeDetectorRef}]}),{data:[{type:t.Input}],options:[{type:t.Input}],itemsPerPage:[{type:t.Input}],page:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.ViewChild,args:["dropZoneInside",{read:t.ViewContainerRef}]}],dropZoneInside$:[{type:t.Output}],treeChange:[{type:t.Output}],treeDrop:[{type:t.Output}]});var j=function(e,t){return{active:e,related:t}};function B(e,r){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",1),t.ɵɵlistener("dragenter",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext().dragenterHandler()})),t.ɵɵelement(1,"div",2),t.ɵɵelementEnd()}if(2&e){var o=t.ɵɵnextContext();t.ɵɵadvance(1),t.ɵɵproperty("ngClass",t.ɵɵpureFunction2(1,j,o.active,!o.active))}}var T=function(){function e(e,t){this.dropZoneService=e,this.changeDetectorRef=t,this.visible=!1,this.active=!1}return e.prototype.dragenterHandler=function(){void 0!==this.dropZone&&!0!==this.active&&this.dropZoneService.swapActiveDropZone(this.dropZone)},e.prototype.ngOnInit=function(){var e=this;if(void 0===this.dropZone)throw new Error("No drop zone object at component initialization");this.commSubscription=this.dropZone.getCommChannel().subscribe((function(t){var r,n,o,i;switch(t){case"checkVisible":e.visible=null!==(n=null===(r=e.dropZone)||void 0===r?void 0:r.isVisible())&&void 0!==n&&n;break;case"checkActive":e.active=null!==(i=null===(o=e.dropZone)||void 0===o?void 0:o.isActive())&&void 0!==i&&i;break;case"checkRendered":break;default:throw new Error("unhandled comm message")}e.changeDetectorRef.detectChanges()}))},e.prototype.ngOnDestroy=function(){void 0!==this.commSubscription&&this.commSubscription.unsubscribe()},e}();T.ɵfac=function(e){return new(e||T)(t.ɵɵdirectiveInject(v),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},T.ɵcmp=t.ɵɵdefineComponent({type:T,selectors:[["drop-zone"]],inputs:{dropZone:"dropZone"},decls:1,vars:1,consts:[["class","dropZoneContainer",3,"dragenter",4,"ngIf"],[1,"dropZoneContainer",3,"dragenter"],[3,"ngClass"]],template:function(e,r){1&e&&t.ɵɵtemplate(0,B,2,4,"div",0),2&e&&t.ɵɵproperty("ngIf",r.visible)},directives:[o.NgIf,o.NgClass],styles:[".active[_ngcontent-%COMP%]{height:105px;border-radius:5px;background:#f0f9ff;border:2px dashed #bed2db}.active[_ngcontent-%COMP%], .related[_ngcontent-%COMP%]{margin:10px 0;width:calc(100% - 20px);box-sizing:border-box}.related[_ngcontent-%COMP%]{height:30px;border-radius:5px;background:#fff6f0;border:1px dashed #dbccbe;opacity:.8}.dropZoneContainer[_ngcontent-%COMP%]{position:relative}"],changeDetection:0}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(T,[{type:t.Component,args:[{selector:"drop-zone",templateUrl:"./drop-zone.component.html",styleUrls:["./drop-zone.component.scss"],changeDetection:t.ChangeDetectionStrategy.OnPush}]}],(function(){return[{type:v},{type:t.ChangeDetectorRef}]}),{dropZone:[{type:t.Input}]});var z=["children"];function L(e,r){if(1&e&&t.ɵɵelement(0,"drop-zone",3),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("dropZone",n.dropZoneInside)}}function V(e,t){}var $=function(){function e(e,t){var r;this.treeService=e,this.changeDetectorRef=t,this.indent=null===(r=this.treeService.treeOptions)||void 0===r?void 0:r.indent,this.renderDropZoneInside=!1}return e.prototype.ngAfterViewInit=function(){this.reRender(),this.setDropZoneHost(),this.changeDetectorRef.detectChanges()},e.prototype.reRender=function(){if(void 0===this.children||void 0===this.branch)throw new Error("Failed to render limble tree branch");this.treeService.renderBranch(this.children,this.branch)},e.prototype.setDropZoneHost=function(){if(void 0===this.children||void 0===this.dropZoneInside)throw new Error("Failed to add drop zone host");this.dropZoneInside.setHost(this.children)},e}();$.ɵfac=function(e){return new(e||$)(t.ɵɵdirectiveInject(F),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},$.ɵcmp=t.ɵɵdefineComponent({type:$,selectors:[["limble-tree-branch"]],viewQuery:function(e,r){if(1&e&&t.ɵɵviewQuery(z,1,t.ViewContainerRef),2&e){var n;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.children=n.first)}},inputs:{branch:"branch",dropZoneInside:"dropZoneInside",renderDropZoneInside:"renderDropZoneInside"},decls:5,vars:4,consts:[[3,"dropZone",4,"ngIf"],[1,"limble-child-nodes",3,"hidden"],["children",""],[3,"dropZone"]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵtemplate(1,L,1,1,"drop-zone",0),t.ɵɵelementStart(2,"span",1),t.ɵɵtemplate(3,V,0,0,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e&&(t.ɵɵstyleProp("margin-left",r.indent,"px"),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",r.renderDropZoneInside),t.ɵɵadvance(1),t.ɵɵproperty("hidden",r.branch&&r.branch.data.collapsed))},directives:[o.NgIf,T],styles:["./limble-tree-branch.component.scss"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata($,[{type:t.Component,args:[{selector:"limble-tree-branch",templateUrl:"./limble-tree-branch.component.html",styles:["./limble-tree-branch.component.scss"]}]}],(function(){return[{type:F},{type:t.ChangeDetectorRef}]}),{branch:[{type:t.Input}],children:[{type:t.ViewChild,args:["children",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.Input}],renderDropZoneInside:[{type:t.Input}]});var k=function(){};k.ɵfac=function(e){return new(e||k)},k.ɵmod=t.ɵɵdefineNgModule({type:k}),k.ɵinj=t.ɵɵdefineInjector({providers:[g,h,m],imports:[[o.CommonModule]]}),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(k,{declarations:[$,T,x,N,E,M,A],imports:[o.CommonModule],exports:[N]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(k,[{type:t.NgModule,args:[{declarations:[$,T,x,N,E,M,A],imports:[o.CommonModule],exports:[N],providers:[g,h,m]}]}],null,null),t.ɵɵsetComponentScope(x,[o.NgIf,T,M,$],[]),e.LimbleTreeModule=k,e.LimbleTreeRootComponent=N,Object.defineProperty(e,"__esModule",{value:!0})}));
***************************************************************************** */Object.create;function i(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function a(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a}function s(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(a(arguments[t]));return e}Object.create;function l(e,t){var r,n;if(e.length!==t.length)return!1;try{for(var o=i(e.entries()),s=o.next();!s.done;s=o.next()){var d=a(s.value,2),c=d[0],h=d[1],p=t[c];if(h instanceof Array&&p instanceof Array){if(!l(h,p))return!1}else if(h!==p)return!1}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return!0}function d(e,t){return void 0!==e&&(!0===e.allowNesting||"function"==typeof e.allowNesting&&void 0!==t&&!0===e.allowNesting(t))}var c=function(){function e(e,t){this.parentCoordinates=e,this.insertIndex=t}return e.prototype.getFullInsertCoordinates=function(){return s(this.parentCoordinates,[this.insertIndex])},e.prototype.setParentCoordinates=function(e){this.parentCoordinates=e},e.prototype.setInsertIndex=function(e){this.insertIndex=e},e}(),h=function(){function e(e,t){this.location=new c(e,t),this.rendered=!1,this.visible=!1,this.active=!1,this.commChannel=new r.Subject}return e.dropZoneLocationsAreEqual=function(e,t){return l(e.getFullInsertCoordinates(),t.getFullInsertCoordinates())},e.prototype.isRendered=function(e){return void 0===e&&(e=void 0),void 0!==e&&(this.rendered=e,void 0!==this.commChannel&&this.commChannel.next("checkRendered"),!1===this.rendered&&this.isVisible(!1)),this.rendered},e.prototype.isVisible=function(e){return void 0===e&&(e=void 0),void 0!==e&&(this.visible=e,void 0!==this.commChannel&&this.commChannel.next("checkVisible"),!1===this.visible&&this.isActive(!1)),this.visible},e.prototype.isActive=function(e){return void 0===e&&(e=void 0),void 0!==e&&(this.active=e,void 0!==this.commChannel&&this.commChannel.next("checkActive")),this.active},e.prototype.getLocation=function(){return this.location},e.prototype.getFamily=function(){return this.family},e.prototype.setFamily=function(e){this.family=e},e.prototype.getCommChannel=function(){return this.commChannel},e.prototype.getFullInsertCoordinates=function(){return this.location.getFullInsertCoordinates()},e.prototype.setHost=function(e){return this.host=e,this.host},e.prototype.getHost=function(){return this.host},e}(),p=function(){function e(){this.state="idle",this.state$=new r.BehaviorSubject(this.state)}return e.prototype.dragging=function(e,t){this._tempData={branch:e,parentContainer:t},this.state="dragging",this.state$.next(this.state)},e.prototype.droppable=function(){if("dragging"!==this.state)throw new Error("Can only call `droppable` when state is `dragging`");this.state="droppable",this.state$.next(this.state)},e.prototype.notDroppable=function(){if("droppable"!==this.state)throw new Error("Can only call `notDroppable` when state is `droppable`");this.state="dragging",this.state$.next(this.state)},e.prototype.capture=function(){var e;if("droppable"!==this.state)throw new Error("Can only move to `captured` state from `droppable` state");return this.state="captured",this.state$.next(this.state),null===(e=this._tempData)||void 0===e?void 0:e.branch},e.prototype.release=function(){this._tempData=void 0,this.state="idle",this.state$.next(this.state)},e.prototype.getData=function(){return this._tempData},e.prototype.getState=function(){return this.state},e}();function u(e,t){var r=e.getFullInsertCoordinates(),n=t.getFullInsertCoordinates();return r.length>n.length?-1:r.length<n.length?1:0}p.ɵfac=function(e){return new(e||p)},p.ɵprov=t.ɵɵdefineInjectable({token:p,factory:p.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(p,[{type:t.Injectable}],(function(){return[]}),null);var v=function(){function e(e){this.dragStateService=e,this.dropZoneArchive=new Set,this.dropZoneInventory=[],this.dropZoneFamilies=[],this.visibleFamily=null,this.activeDropZone=null,this.tempFamilies=[],this.setActiveDropZone(null)}return e.prototype.addDropZone=function(e){this.dropZoneArchive.add(e)},e.prototype.clearVisibleZones=function(){var e,t;if(null!==this.visibleFamily){try{for(var r=i(this.visibleFamily.members),n=r.next();!n.done;n=r.next()){n.value.isVisible(!1)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.visibleFamily=null}this.setActiveDropZone(null)},e.prototype.getActiveDropZone=function(){return this.activeDropZone},e.prototype.getDropZone=function(e){var t=s(e);t.pop();var r=e[e.length-1],n=new c(t,r);return this.dropZoneInventory.find((function(e){return h.dropZoneLocationsAreEqual(e,n)}))},e.prototype.init=function(e,t){this.tree=e,this.treeOptions=t,this.update()},e.prototype.removeDropZone=function(e){this.dropZoneArchive.delete(e)},e.prototype.reset=function(){this.clearVisibleZones(),this.dropZoneFamilies.length=0,this.dropZoneInventory.length=0},e.prototype.restart=function(){this.reset(),this.dropZoneArchive.clear()},e.prototype.restoreFamilies=function(){var e,t,r,n;if(2===this.tempFamilies.length){this.dropZoneFamilies.pop(),this.dropZoneFamilies.push(this.tempFamilies[0]);try{for(var o=i(this.tempFamilies[0].members),a=o.next();!a.done;a=o.next()){a.value.setFamily(this.tempFamilies[0])}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}if(null!==this.tempFamilies[1]){this.dropZoneFamilies.push(this.tempFamilies[1]);try{for(var s=i(this.tempFamilies[1].members),l=s.next();!l.done;l=s.next()){l.value.setFamily(this.tempFamilies[1])}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}}this.tempFamilies=[]}},e.prototype.showDropZoneFamily=function(e,t){var r,n,o,a,l,d;if(void 0===t&&(t={joinFamilies:!1,activateLowestInsteadOfFounder:!1}),null===this.activeDropZone||!h.dropZoneLocationsAreEqual(this.activeDropZone,e)){null===this.visibleFamily&&null===this.activeDropZone||this.clearVisibleZones();var p=this.dropZoneInventory.find((function(t){return h.dropZoneLocationsAreEqual(t,e)}));if(void 0===p)throw new Error("Could not find drop zone to show. location: "+JSON.stringify(e.getLocation()));var v=p.getFamily();if(!0===t.joinFamilies){var f=e.getLocation(),g=new c(s(f.parentCoordinates),f.insertIndex+1),y=this.dropZoneInventory.find((function(e){return h.dropZoneLocationsAreEqual(e,g)}));if(void 0===y)throw new Error("Could not find drop zone to show");var m=y.getFamily();if(void 0===v||void 0===m)throw new Error("No family");var b={founder:v.founder,members:s(v.members)};this.showDropZone(v.founder,!0);try{for(var w=i(v.members.sort(u)),Z=w.next();!Z.done;Z=w.next()){(F=Z.value).setFamily(b),F!==v.founder&&(null===this.activeDropZone?this.showDropZone(F,!0):this.showDropZone(F))}}catch(e){r={error:e}}finally{try{Z&&!Z.done&&(n=w.return)&&n.call(w)}finally{if(r)throw r.error}}try{for(var C=i(m.members),D=C.next();!D.done;D=C.next()){(F=D.value).setFamily(b),F.getLocation().parentCoordinates.length<y.getLocation().parentCoordinates.length&&(b.members.push(F),this.showDropZone(F))}}catch(e){o={error:e}}finally{try{D&&!D.done&&(a=C.return)&&a.call(C)}finally{if(o)throw o.error}}this.tempFamilies=[v,m];var S=this.dropZoneFamilies.indexOf(v);this.dropZoneFamilies.splice(S,1);var I=this.dropZoneFamilies.indexOf(m);this.dropZoneFamilies.splice(I,1),this.dropZoneFamilies.push(b),this.visibleFamily=b}else{if(void 0===v)throw new Error("No family");if(this.visibleFamily=v,this.showDropZone(v.founder,!0),v.members.length>1)try{for(var x=i(v.members.sort(u)),E=x.next();!E.done;E=x.next()){var F;(F=E.value)!==v.founder&&(null===this.activeDropZone?this.showDropZone(F,!0):this.showDropZone(F))}}catch(e){l={error:e}}finally{try{E&&!E.done&&(d=x.return)&&d.call(x)}finally{if(l)throw l.error}}}if(!0===t.activateLowestInsteadOfFounder&&this.visibleFamily.members.length>1){var M=s(this.visibleFamily.members).sort(u).pop();if(void 0===M)throw new Error("Could not get lowest member");this.swapActiveDropZone(M)}}},e.prototype.swapActiveDropZone=function(e){if(null===this.visibleFamily)throw new Error("No visible family available for swapping");if(-1===this.visibleFamily.members.findIndex((function(t){return t===e})))throw new Error("failed to swap active drop zone");this.setActiveDropZone(e)},e.prototype.update=function(){this.reset(),this.buildInventory(),this.assignFamilies()},e.prototype.assignFamilies=function(){var e,t,r,n,o,a,d=s(this.dropZoneInventory),c=d.filter((function(e){var t=e.getLocation();return 0===t.insertIndex&&t.parentCoordinates.length>0})).sort((function(e,t){for(var r,n,o,i,a=e.getFullInsertCoordinates(),s=t.getFullInsertCoordinates(),l=Math.max(a.length,s.length),d=0;d<l;d++){if((null!==(r=a[d])&&void 0!==r?r:-1)>(null!==(n=s[d])&&void 0!==n?n:-1))return-1;if((null!==(o=a[d])&&void 0!==o?o:-1)<(null!==(i=s[d])&&void 0!==i?i:-1))return 1}return 0})),h=function(e){if(!d.includes(e))return"continue";var t={founder:e,members:[]};e.setFamily(t);for(var r=s(e.getFullInsertCoordinates());r.length>0;){var n=d.findIndex((function(e){return l(e.getFullInsertCoordinates(),r)}));if(-1!==n){var o=d.splice(n,1)[0];t.members.push(o),o.setFamily(t)}r.pop(),r[r.length-1]++}p.dropZoneFamilies.push(t)},p=this;try{for(var u=i(c),v=u.next();!v.done;v=u.next()){h(y=v.value)}}catch(t){e={error:t}}finally{try{v&&!v.done&&(t=u.return)&&t.call(u)}finally{if(e)throw e.error}}try{for(var f=i(d.filter((function(e){return 1===e.getFullInsertCoordinates().length}))),g=f.next();!g.done;g=f.next()){var y,m={founder:y=g.value,members:[y]};y.setFamily(m),this.dropZoneFamilies.push(m),d.splice(d.indexOf(y),1)}}catch(e){r={error:e}}finally{try{g&&!g.done&&(n=f.return)&&n.call(f)}finally{if(r)throw r.error}}if(0!==d.length){var b="";try{for(var w=i(d),Z=w.next();!Z.done;Z=w.next()){var C=Z.value;b+=JSON.stringify(C.getLocation())+", "}}catch(e){o={error:e}}finally{try{Z&&!Z.done&&(a=w.return)&&a.call(w)}finally{if(o)throw o.error}}throw b=b.slice(0,b.length-2),new Error("Some zones were not assigned to a family. The orphan zones have the following locations: "+b)}},e.prototype.buildInventory=function(){var e,t,r=[];try{for(var n=i(this.dropZoneArchive),o=n.next();!o.done;o=n.next()){var a=o.value,s=a.getFullInsertCoordinates().join(",");r.includes(s)?a.isRendered(!1):(this.dropZoneInventory.push(a),r.push(s),a.isRendered(!0))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}},e.prototype.setActiveDropZone=function(e){null!==this.activeDropZone&&this.activeDropZone.isActive(!1),this.activeDropZone=e,null!==this.activeDropZone&&"droppable"!==this.dragStateService.getState()?this.dragStateService.droppable():null===this.activeDropZone&&"droppable"===this.dragStateService.getState()&&this.dragStateService.notDroppable(),null!==this.activeDropZone&&this.activeDropZone.isActive(!0)},e.prototype.showDropZone=function(e,t){if(void 0===t&&(t=!1),void 0===this.tree)throw new Error("DropZoneService not initialized");if(!this.zoneIsAllowed(e))return!1;if(void 0===this.tree.findByCoordinates(e.getLocation().parentCoordinates))throw new Error("Bad family member");return e.isVisible(!0),!0===t&&this.setActiveDropZone(e),!0},e.prototype.zoneIsAllowed=function(e){if(void 0===this.treeOptions||void 0===this.tree)throw new Error("dropZoneService not initialized");var t=this.dragStateService.getData();if(void 0===t)throw new Error("Can't get dragged node");var r=this.tree.findByCoordinates(e.getLocation().parentCoordinates);if(void 0===r)throw new Error("Could not get drop zone parent");var n=e.getLocation().insertIndex;if(void 0===n)throw new Error("Could not get drop zone index");var o=t.branch;return!!this.treeOptions.allowDrop(o.data,r.data,n)},e}();v.ɵfac=function(e){return new(e||v)(t.ɵɵinject(p))},v.ɵprov=t.ɵɵdefineInjectable({token:v,factory:v.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(v,[{type:t.Injectable}],(function(){return[{type:p}]}),null);var f=function(){function e(e){this.data=e,this.children=[],this.parent=null}return e.prototype.isRoot=function(){return null===this.parent},e.prototype.getParent=function(){return this.parent},e.prototype.setParent=function(e){this.parent=e},e.prototype.findByCoordinates=function(e){var t,r,n=this;try{for(var o=i(e.values()),a=o.next();!a.done;a=o.next()){var s=a.value;if(void 0===(n=n.getChild(s)))return}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.getCoordinates=function(){for(var e=[],t=this;null!==t.parent;){var r=t.getIndex();if(null==r)throw new Error("Could not get cursor index");e.unshift(r),t=t.parent}return e},e.prototype.getChild=function(e){return this.children[e]},e.prototype.getChildren=function(){return this.children},e.prototype.clearChildren=function(){var e,t;try{for(var r=i(this.children),n=r.next();!n.done;n=r.next()){n.value.setParent(null)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}this.children.length=0},e.prototype.getIndex=function(){var e=this;if(null===this.parent)return null;var t=this.parent.children.findIndex((function(t){return t===e}));return-1!==t?t:void 0},e.prototype.getDescendant=function(e){var t,r,n=this;try{for(var o=i(e),a=o.next();!a.done;a=o.next()){var s=a.value;if(void 0===(n=n.children[s]))return}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e.prototype.findDescendant=function(e){var t,r;if(!0===e(this.data))return this;if(this.children.length>0)try{for(var n=i(this.children),o=n.next();!o.done;o=n.next()){var a=o.value.findDescendant(e);if(void 0!==a)return a}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},e.prototype.getAncestors=function(){for(var e=[],t=this;null!==t.parent;)e.push(t.parent),t=t.parent;return e},e.prototype.appendChild=function(e){return null!==e.getParent()&&e.remove(),e.setParent(this),this.children.push(e),e},e.prototype.insertChild=function(e,t){var r=this.children.indexOf(e);return-1===r?(null!==e.getParent()&&e.remove(),e.setParent(this),this.children.splice(t,0,e)):t>r?(this.children.splice(t,0,e),this.removeChild(r),e.setParent(this)):(e.remove(),this.children.splice(t,0,e),e.setParent(this)),e},e.prototype.removeChild=function(e){var t=this.children.splice(e,1)[0];return t.setParent(null),t},e.prototype.remove=function(){var e=this.getIndex();if(null===this.parent||null==e)throw new Error("can't remove root");return this.parent.removeChild(e)},e.prototype.copy=function(){var e=this.copyHelper();return e.setParent(null),e},e.prototype.copyHelper=function(){var t,r,n=new e(this.data);try{for(var o=i(this.children),a=o.next();!a.done;a=o.next()){var s=a.value;n.appendChild(s.copyHelper()).parent=n}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e}(),g=["children"];function y(e,r){if(1&e&&t.ɵɵelement(0,"drop-zone",3),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("dropZone",n.dropZoneInside)}}function m(e,t){}var b=function(){function e(e,t,r){var n;this.treeService=e,this.changeDetectorRef=t,this.dropZoneService=r,this.indent=null===(n=this.treeService.treeOptions)||void 0===n?void 0:n.indent,this.renderDropZoneInside=!1}return e.prototype.ngOnInit=function(){var e=this;if(this.addDropZoneInside(),void 0===this.dropZoneInside)throw new Error("drop zone inside is not defined");!0!==this.treeService.getPlaceholder()&&this.dropZoneInside.getCommChannel().pipe(n.filter((function(e){return"checkRendered"===e}))).subscribe((function(){if(void 0===e.dropZoneInside||void 0===e.branch)throw new Error("Zones not registered");d(e.treeService.treeOptions,e.branch.data)&&(e.renderDropZoneInside=e.dropZoneInside.isRendered())}))},e.prototype.ngAfterViewInit=function(){this.reRender(),this.setDropZoneHost(),this.changeDetectorRef.detectChanges()},e.prototype.ngOnDestroy=function(){void 0!==this.dropZoneInside&&this.dropZoneService.removeDropZone(this.dropZoneInside),this.treeService.cleanupSignal$.next(null)},e.prototype.addDropZoneInside=function(){if(void 0===this.branch)throw new Error("failed to register drop zone inside");this.dropZoneInside=new h(s(this.branch.getCoordinates()),0),this.dropZoneService.addDropZone(this.dropZoneInside)},e.prototype.reRender=function(){if(void 0===this.children||void 0===this.branch)throw new Error("Failed to render limble tree branch");this.treeService.renderBranch(this.children,this.branch)},e.prototype.setDropZoneHost=function(){if(void 0===this.children||void 0===this.dropZoneInside)throw new Error("Failed to add drop zone host");this.dropZoneInside.setHost(this.children)},e}();b.ɵfac=function(e){return new(e||b)(t.ɵɵdirectiveInject(R),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(v))},b.ɵcmp=t.ɵɵdefineComponent({type:b,selectors:[["limble-tree-branch"]],viewQuery:function(e,r){if(1&e&&t.ɵɵviewQuery(g,1,t.ViewContainerRef),2&e){var n;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.children=n.first)}},inputs:{branch:"branch"},decls:5,vars:4,consts:[[3,"dropZone",4,"ngIf"],[1,"limble-child-nodes",3,"hidden"],["children",""],[3,"dropZone"]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵtemplate(1,y,1,1,"drop-zone",0),t.ɵɵelementStart(2,"span",1),t.ɵɵtemplate(3,m,0,0,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵelementEnd()),2&e&&(t.ɵɵstyleProp("margin-left",r.indent,"px"),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",r.renderDropZoneInside),t.ɵɵadvance(1),t.ɵɵproperty("hidden",r.branch&&r.branch.data.collapsed))},styles:["./limble-tree-branch.component.scss"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(b,[{type:t.Component,args:[{selector:"limble-tree-branch",templateUrl:"./limble-tree-branch.component.html",styles:["./limble-tree-branch.component.scss"]}]}],(function(){return[{type:R},{type:t.ChangeDetectorRef},{type:v}]}),{branch:[{type:t.Input}],children:[{type:t.ViewChild,args:["children",{read:t.ViewContainerRef}]}]});var w=function(){function e(e){this.factoryResolver=e,this.factoryResolver=e}return e.prototype.appendComponent=function(e,t,r){void 0===r&&(r=void 0);var n=this.factoryResolver.resolveComponentFactory(e);return t.createComponent(n,r)},e}();function Z(e){var t,r,n,o=/(auto|scroll)/,a=function(e,t){return null===e||null===e.parentNode?t:a(e.parentElement,t.concat([e]))},s=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},l=function(e){return o.test(function(e){return s(e,"overflow")+s(e,"overflow-y")+s(e,"overflow-x")}(e))},d=a(e.parentElement,[]);try{for(var c=i(d),h=c.next();!h.done;h=c.next()){var p=h.value;if(l(p))return p}}catch(e){t={error:e}}finally{try{h&&!h.done&&(r=c.return)&&r.call(c)}finally{if(t)throw t.error}}return null!==(n=document.scrollingElement)&&void 0!==n?n:document.documentElement}w.ɵfac=function(e){return new(e||w)(t.ɵɵinject(t.ComponentFactoryResolver))},w.ɵprov=t.ɵɵdefineInjectable({token:w,factory:w.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(w,[{type:t.Injectable}],(function(){return[{type:t.ComponentFactoryResolver}]}),null);var C=function(){function e(e){var t=this;this.ngZone=e,this.ngZone.runOutsideAngular((function(){t.globalDrag$=r.fromEvent(document,"drag")})),this.scrolling=!1}return e.prototype.addScrolling=function(){var e=this;this.ngZone.runOutsideAngular((function(){if(void 0===e.globalDragSubscription){if(void 0===e.globalDrag$)throw new Error("Could not get observable");var t,r,o,i,a,s,l,d,c;e.globalDragSubscription=e.globalDrag$.pipe(n.throttleTime(25),n.filter((function(e){if(!e.target)return!1;d=Z(e.target),t=d.clientHeight;var n,l=d.clientWidth;if("fixed"===window.getComputedStyle(d).getPropertyValue("position").toLowerCase())n=e.clientX,c=e.clientY;else{var h=d.getBoundingClientRect(),p=Z(d);n=e.clientX-(h.left+p.scrollLeft),c=e.clientY-(h.top+p.scrollTop)}return!(n<0||n>l||c<0||c>t)&&(r=Math.max(.1*t,100),s=c>(i=t-r),(a=c<(o=r))||s)}))).subscribe((function(){if(null!==d){var n,h=d.scrollHeight-t,p=d.scrollTop;if(a&&p>0){n=p-75*((o-c)/r)}else{if(!s||!(p<h))return;n=p+75*((c-i)/r)}(n=Math.max(0,Math.min(h,n)))!==p&&(d.scrollTo({top:n}),e.scrolling=!0,clearTimeout(l),l=setTimeout((function(){e.scrolling=!1}),100))}}))}}))},e.prototype.removeScrolling=function(){void 0!==this.globalDragSubscription&&this.globalDragSubscription.unsubscribe()},e}();C.ɵfac=function(e){return new(e||C)(t.ɵɵinject(t.NgZone))},C.ɵprov=t.ɵɵdefineInjectable({token:C,factory:C.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(C,[{type:t.Injectable}],(function(){return[{type:t.NgZone}]}),null);var D=["nodeHost"],S=["draggableDiv"],I=["nodeHostContainer"],x=["innerBranch"];function E(e,r){if(1&e&&t.ɵɵelement(0,"drop-zone",7),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("dropZone",n.dropZoneAbove)}}function F(e,t){}function M(e,r){if(1&e&&t.ɵɵelement(0,"limble-tree-branch",8,9),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("branch",n.branch)}}function A(e,r){if(1&e&&t.ɵɵelement(0,"drop-zone",7),2&e){var n=t.ɵɵnextContext();t.ɵɵproperty("dropZone",n.dropZoneBelow)}}var P=function(){function e(e,t,r,o,i,a,s){var l=this;this.componentCreatorService=e,this.changeDetectorRef=t,this.dragStateService=r,this.dropZoneService=o,this.treeService=i,this.globalEventsService=a,this.ngZone=s,void 0!==this.treeService.treeOptions&&!0!==this.treeService.treeOptions.listMode&&!0!==this.treeService.getPlaceholder()?this.renderInnerBranch=!0:this.renderInnerBranch=!1,this.renderDropZoneBelow=!1,this.renderDropZoneAbove=!1,this.treeChangeSubscription=this.treeService.changes$.pipe(n.skip(1)).subscribe((function(){l.treeChangeHandler()}))}return e.prototype.treeChangeHandler=function(){void 0===this.branch||void 0===this.currentBranchCoordinates||l(this.branch.getCoordinates(),this.currentBranchCoordinates)||this.updateDropZones()},e.prototype.ngOnInit=function(){var e,t,o,i=this;if(!1!==(null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.allowDragging)){var a=null===(t=this.branch)||void 0===t?void 0:t.getParent();if(null!==(null==a?void 0:a.data)){var s=null==a?void 0:a.data;if(!d(this.treeService.treeOptions,s))return void(this.renderInnerBranch=!1)}this.registerDropZones(),this.currentBranchCoordinates=null===(o=this.branch)||void 0===o?void 0:o.getCoordinates(),this.ngZone.runOutsideAngular((function(){if(void 0===i.dropZoneAbove||void 0===i.dropZoneBelow)throw new Error("Zones not registered");r.merge(i.dropZoneAbove.getCommChannel(),i.dropZoneBelow.getCommChannel()).pipe(n.filter((function(e){return"checkRendered"===e}))).subscribe((function(){if(void 0===i.dropZoneAbove||void 0===i.dropZoneBelow||void 0===i.branch)throw new Error("Zones not registered");i.renderDropZoneAbove=i.dropZoneAbove.isRendered(),!0!==i.treeService.getPlaceholder()&&(i.renderDropZoneBelow=i.dropZoneBelow.isRendered())}))}))}},e.prototype.ngAfterViewInit=function(){this.renderNode(),this.setDropZoneHosts(),this.checkForHandle(),this.changeDetectorRef.detectChanges()},e.prototype.ngOnDestroy=function(){this.treeChangeSubscription.unsubscribe(),void 0!==this.dropZoneAbove&&this.dropZoneService.removeDropZone(this.dropZoneAbove),void 0!==this.dropZoneBelow&&this.dropZoneService.removeDropZone(this.dropZoneBelow),this.treeService.cleanupSignal$.next(null)},e.prototype.dragstartHandler=function(e){var t,o=this;if(e.stopPropagation(),null===e.dataTransfer||void 0===this.branch||void 0===this.parentHost)throw new Error("failed to run dragstartHandler");var i=e.target;if("LIMBLE-TREE-NODE"===(null===(t=i.parentElement)||void 0===t?void 0:t.tagName)){e.dataTransfer.effectAllowed="move",this.dragStateService.dragging(this.branch,this.parentHost);var a=i.closest("limble-tree-root");if(null===a)throw new Error("could not get root of tree");this.ngZone.runOutsideAngular((function(){setTimeout((function(){i.classList.add("dragging")}));var e=r.fromEvent(a,"dragover").pipe(n.first()).subscribe((function(e){var t;if(e.stopPropagation(),void 0===o.branch)throw new Error("Could not show surrounding drop zones");var r,n=o.branch.getParent(),i=!0;null!==(null==n?void 0:n.data)&&(r=null==n?void 0:n.data,i=d(o.treeService.treeOptions,r)),void 0!==o.dropZoneAbove&&i&&(o.dropZoneService.showDropZoneFamily(o.dropZoneAbove,{joinFamilies:!0}),1===(null===(t=o.treeService.treeData)||void 0===t?void 0:t.length)&&1===o.branch.getCoordinates().length&&o.treeService.usePlaceholder())}));setTimeout((function(){e.closed||e.unsubscribe()}),500)}))}else e.preventDefault()},e.prototype.dragendHandler=function(e){if(null==e||e.stopPropagation(),void 0===this.draggableDiv)throw new Error("could not get draggable div");if(this.draggableDiv.nativeElement.classList.remove("dragging"),"captured"===this.dragStateService.getState()){if(!1===this.treeService.captured){if(void 0===this.branch)throw new Error("could not get branch in dragendHandler");this.treeService.cleanupSignal$.next(null),this.treeService.captured=!1}this.dragStateService.release()}else this.dragStateService.release(),this.dropZoneService.clearVisibleZones(),this.dropZoneService.restoreFamilies(),this.treeService.removePlaceholder()},e.prototype.dragoverHandler=function(e){var t,r;if(!0!==this.globalEventsService.scrolling){if(void 0===this.branch)throw new Error("Can't get current branch during dragover event");var n=this.dragStateService.getData();if(void 0!==n){var o=n.branch;if(o!==this.branch&&!this.branch.getAncestors().includes(o))if(!0!==this.treeService.getPlaceholder()||void 0===this.dropZoneAbove){var i,a,s=e.currentTarget;a=void 0===(null===(t=this.innerBranch)||void 0===t?void 0:t.dropZoneInside)?i=s.offsetHeight/2-6:2*(i=s.offsetHeight/3-3);var l,c=this.branch.getParent(),p=!0;null!==(null==c?void 0:c.data)&&(l=null==c?void 0:c.data,p=d(this.treeService.treeOptions,l));var u=this.dropZoneService.getActiveDropZone();if(e.offsetY<i&&void 0!==this.dropZoneAbove&&(null===u||!h.dropZoneLocationsAreEqual(u,this.dropZoneAbove))&&p){if(null==this.branch.getIndex())throw new Error("can't get branch index");this.dropZoneService.showDropZoneFamily(this.dropZoneAbove,{activateLowestInsteadOfFounder:!0})}else if(e.offsetY<a&&void 0!==(null===(r=this.innerBranch)||void 0===r?void 0:r.dropZoneInside)&&(null===u||!h.dropZoneLocationsAreEqual(u,this.innerBranch.dropZoneInside)))this.dropZoneService.showDropZoneFamily(this.innerBranch.dropZoneInside);else if(e.offsetY>=a&&void 0!==this.dropZoneBelow&&(null===u||!h.dropZoneLocationsAreEqual(u,this.dropZoneBelow))&&0===this.branch.getChildren().length&&p){if(null==this.branch.getIndex())throw new Error("can't get branch index");this.dropZoneService.showDropZoneFamily(this.dropZoneBelow)}}else this.dropZoneService.showDropZoneFamily(this.dropZoneAbove)}}},e.prototype.renderNode=function(){var e;if(void 0===this.nodeHost||void 0===this.branch)throw new Error("Failed to render tree node");var t=this.branch.data.component;if(void 0===t&&(t=null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.defaultComponent),void 0===t)throw new Error("limbleTree requires a component to render");var r=this.componentCreatorService.appendComponent(t.class,this.nodeHost);for(var n in r.instance.nodeData=this.branch.data,t.bindings)r.instance[n]=t.bindings[n]},e.prototype.registerDropZones=function(){this.addDropZoneAbove(),this.addDropZoneBelow()},e.prototype.addDropZoneAbove=function(){var e;if(void 0===this.branch)throw new Error("failed to register drop zone above");var t=this.branch.getParent(),r=this.branch.getCoordinates(),n=r[r.length-1];this.dropZoneAbove=new h(s(null!==(e=null==t?void 0:t.getCoordinates())&&void 0!==e?e:[]),n),this.dropZoneService.addDropZone(this.dropZoneAbove)},e.prototype.addDropZoneBelow=function(){var e;if(void 0===this.branch)throw new Error("failed to register drop zone below");var t=this.branch.getParent(),r=this.branch.getCoordinates(),n=r[r.length-1];this.dropZoneBelow=new h(s(null!==(e=null==t?void 0:t.getCoordinates())&&void 0!==e?e:[]),n+1),this.dropZoneService.addDropZone(this.dropZoneBelow)},e.prototype.updateDropZones=function(){var e;this.currentBranchCoordinates=null===(e=this.branch)||void 0===e?void 0:e.getCoordinates(),this.updateDropZoneAbove(),this.updateDropZoneBelow(),this.updateDropZoneInside(),this.setDropZoneHosts()},e.prototype.updateDropZoneAbove=function(){var e;if(void 0===this.branch||void 0===this.dropZoneAbove)throw new Error("failed to update drop zone above");var t=this.branch.getParent(),r=this.branch.getCoordinates(),n=r[r.length-1],o=this.dropZoneAbove.getLocation();o.setParentCoordinates(s(null!==(e=null==t?void 0:t.getCoordinates())&&void 0!==e?e:[])),o.setInsertIndex(n)},e.prototype.updateDropZoneBelow=function(){var e;if(void 0===this.branch||void 0===this.dropZoneBelow)throw new Error("failed to update drop zone below");var t=this.branch.getParent(),r=this.branch.getCoordinates(),n=r[r.length-1],o=this.dropZoneBelow.getLocation();o.setParentCoordinates(s(null!==(e=null==t?void 0:t.getCoordinates())&&void 0!==e?e:[])),o.setInsertIndex(n+1)},e.prototype.updateDropZoneInside=function(){var e;if(void 0===this.branch||void 0===(null===(e=this.innerBranch)||void 0===e?void 0:e.dropZoneInside))throw new Error("failed to update drop zone inside");this.innerBranch.dropZoneInside.getLocation().setParentCoordinates(s(this.branch.getCoordinates()))},e.prototype.setDropZoneHosts=function(){if(void 0===this.dropZoneAbove||void 0===this.dropZoneBelow)throw new Error("could not set drop zone hosts");this.dropZoneAbove.setHost(this.parentHost),this.dropZoneBelow.setHost(this.parentHost)},e.prototype.checkForHandle=function(){var e,t=this;if(void 0!==this.nodeHostContainer&&void 0!==this.draggableDiv){var r,o,i=this.nodeHostContainer.nativeElement.querySelector(".limble-tree-handle"),a=this.draggableDiv.nativeElement;r=this.treeService.treeOptions,o=null===(e=this.branch)||void 0===e?void 0:e.data,void 0===r||!0!==r.allowDragging&&("function"!=typeof r.allowDragging||void 0===o||!0!==r.allowDragging(o))?a.setAttribute("draggable","false"):null===i?a.setAttribute("draggable","true"):i.addEventListener("mousedown",(function(){a.setAttribute("draggable","true");var e=t.dragStateService.state$.pipe(n.filter((function(e){return"dragging"===e})),n.first());t.dragStateService.state$.pipe(n.skipUntil(e),n.filter((function(e){return"idle"===e})),n.first()).subscribe((function(){a.setAttribute("draggable","false")}))}))}},e}();P.ɵfac=function(e){return new(e||P)(t.ɵɵdirectiveInject(w),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(p),t.ɵɵdirectiveInject(v),t.ɵɵdirectiveInject(R),t.ɵɵdirectiveInject(C),t.ɵɵdirectiveInject(t.NgZone))},P.ɵcmp=t.ɵɵdefineComponent({type:P,selectors:[["limble-tree-node"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(D,1,t.ViewContainerRef),t.ɵɵviewQuery(S,1,t.ElementRef),t.ɵɵviewQuery(I,1,t.ElementRef),t.ɵɵviewQuery(x,1,b)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.nodeHost=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.draggableDiv=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.nodeHostContainer=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.innerBranch=n.first)}},inputs:{branch:"branch",parentHost:"parentHost"},decls:9,vars:4,consts:[[3,"dropZone",4,"ngIf"],[1,"limble-parent-container",3,"dragstart","dragend"],["draggableDiv",""],[3,"dragoverEventThrottle","dragoverNoChangeDetect"],["nodeHostContainer",""],["nodeHost",""],[3,"branch",4,"ngIf"],[3,"dropZone"],[3,"branch"],["innerBranch",""]],template:function(e,r){1&e&&(t.ɵɵtemplate(0,E,1,1,"drop-zone",0),t.ɵɵelementStart(1,"div",1,2),t.ɵɵlistener("dragstart",(function(e){return r.dragstartHandler(e)}))("dragend",(function(e){return r.dragendHandler(e)})),t.ɵɵelementStart(3,"div",3,4),t.ɵɵlistener("dragoverNoChangeDetect",(function(e){return r.dragoverHandler(e)})),t.ɵɵtemplate(5,F,0,0,"ng-template",null,5,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵtemplate(7,M,2,1,"limble-tree-branch",6),t.ɵɵelementEnd(),t.ɵɵtemplate(8,A,1,1,"drop-zone",0)),2&e&&(t.ɵɵproperty("ngIf",!0===r.renderDropZoneAbove),t.ɵɵadvance(3),t.ɵɵproperty("dragoverEventThrottle",10),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",void 0!==r.branch&&!0===r.renderInnerBranch),t.ɵɵadvance(1),t.ɵɵproperty("ngIf",!0===r.renderDropZoneBelow))},styles:[".dragging[_ngcontent-%COMP%]{position:absolute;transition:transform .01s;transform:translateX(-9999px)}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(P,[{type:t.Component,args:[{selector:"limble-tree-node",templateUrl:"./limble-tree-node.component.html",styleUrls:["./limble-tree-node.component.scss"]}]}],(function(){return[{type:w},{type:t.ChangeDetectorRef},{type:p},{type:v},{type:R},{type:C},{type:t.NgZone}]}),{branch:[{type:t.Input}],nodeHost:[{type:t.ViewChild,args:["nodeHost",{read:t.ViewContainerRef}]}],draggableDiv:[{type:t.ViewChild,args:["draggableDiv",{read:t.ElementRef}]}],nodeHostContainer:[{type:t.ViewChild,args:["nodeHostContainer",{read:t.ElementRef}]}],parentHost:[{type:t.Input}],innerBranch:[{type:t.ViewChild,args:["innerBranch",{read:b}]}]});var O=function(){};O.ɵfac=function(e){return new(e||O)},O.ɵcmp=t.ɵɵdefineComponent({type:O,selectors:[["limble-tree-placeholder"]],decls:1,vars:0,consts:[[1,"placeholder"]],template:function(e,r){1&e&&t.ɵɵelement(0,"div",0)},styles:[".placeholder[_ngcontent-%COMP%]{width:100%;height:20px}"]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(O,[{type:t.Component,args:[{selector:"limble-tree-placeholder",templateUrl:"./limble-tree-placeholder.component.html",styleUrls:["./limble-tree-placeholder.component.scss"]}]}],null,null);var R=function(){function e(e,t,o){var i=this;this.componentCreatorService=e,this.dropZoneService=t,this.dragStateService=o,this.changes$=new r.Subject,this.drops$=new r.Subject,this.treeModel=new f(null),this.placeholder=!1,this.captured=!1,this.cleanupSignal$=new r.Subject,this.cleanupSignal$.pipe(n.debounceTime(5)).subscribe((function(){i.cleanup()})),this.synchronizer=!1}return e.prototype.drop=function(e,t){var r,n=e.getParent();if(null===n)throw new Error("can't drop root of tree");var o,i,a=e.getIndex();if(null==a)throw new Error("Cannot move the hidden root node");if(!0===this.placeholder?(o=[],i=0):i=(o=s(t)).pop(),void 0===i)throw new Error("target coordinates are empty");var d=this.treeModel.getDescendant(o);if(void 0===d)throw new Error("could not get to target");var c=this.dropZoneService.getDropZone(t),h=null==c?void 0:c.getLocation().insertIndex,p=null==c?void 0:c.getHost(),u=null===(r=this.dragStateService.getData())||void 0===r?void 0:r.parentContainer;if(this.removePlaceholder(),this.drops$.next({target:e.data,oldParent:n.data,oldIndex:a,newParent:d.data,newIndex:i}),d.insertChild(e,i),void 0===p||void 0===u||void 0===h)return console.warn("Could not perform a precise update. Re-rendering the entire tree instead"),this.render(),void this.changes$.next(null);var v=u.length,f=this.componentCreatorService.appendComponent(P,p,i);f.instance.branch=e,f.instance.parentHost=p,h<a&&u.length>v&&l(n.getCoordinates(),o)?u.remove(a+1):u.remove(a),this.cleanupSignal$.next(null)},e.prototype.getPlaceholder=function(){return this.placeholder},e.prototype.init=function(e,t,r,n,o){if(this.host=e,this.uncutData=t,this.treeOptions=this.processOptions(r,n,o),!0===this.treeOptions.listMode){var i=this.treeOptions.itemsPerPage*(this.treeOptions.page-1);isNaN(i)&&(i=0);var a=i+this.treeOptions.itemsPerPage;this.treeData=this.uncutData.slice(i,a)}else this.treeData=s(this.uncutData);this.synchronizer=!1,this.render()},e.prototype.removePlaceholder=function(){var e;if(!1!==this.placeholder){var t=this.treeModel.getChildren().length-1;-1!==t&&(this.treeModel.removeChild(t),null===(e=this.host)||void 0===e||e.remove(t)),this.placeholder=!1}},e.prototype.cleanup=function(){this.rebuildTreeData(),this.changes$.next(null),this.dropZoneService.update()},e.prototype.render=function(){var e,t,r,n,o=this;if(void 0===this.host||void 0===this.treeData||void 0===this.treeOptions)throw new Error("TreeModel not initialized");if(this.host.clear(),this.dropZoneService.restart(),this.placeholder=!1,this.treeModel=new f(null),0===this.treeData.length)this.usePlaceholder();else{try{for(var a=i(this.treeData),s=a.next();!s.done;s=a.next()){var l=s.value,d=new f(l);this.treeModel.appendChild(d)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}try{for(var c=i(this.treeModel.getChildren()),h=c.next();!h.done;h=c.next()){d=h.value;var p=this.componentCreatorService.appendComponent(P,this.host);p.instance.branch=d,p.instance.parentHost=this.host}}catch(e){r={error:e}}finally{try{h&&!h.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}}this.synchronizer=!0,setTimeout((function(){if(void 0===o.treeOptions)throw new Error("TreeModel not initialized");o.changes$.next(null),!1!==o.synchronizer&&o.dropZoneService.init(o.treeModel,o.treeOptions)}))},e.prototype.renderBranch=function(e,t){var r,n,o,a;if(void 0===this.treeModel)throw new Error("TreeModel not initialized");e.clear(),t.clearChildren();try{for(var s=i(null!==(a=null===(o=t.data)||void 0===o?void 0:o.nodes)&&void 0!==a?a:[]),l=s.next();!l.done;l=s.next()){var d=l.value,c=new f(d);t.appendChild(c);var h=this.componentCreatorService.appendComponent(P,e);h.instance.branch=c,h.instance.parentHost=e}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}},e.prototype.usePlaceholder=function(){if(!0!==this.placeholder){if(void 0===this.host)throw new Error("TreeModel not initialized");this.placeholder=!0;var e=new f({component:{class:O}});this.treeModel.appendChild(e);var t=this.componentCreatorService.appendComponent(P,this.host);t.instance.branch=e,t.instance.parentHost=this.host}},e.prototype.processOptions=function(e,t,r){var n,o,i,a,s;return void 0===e&&(e={}),void 0===t&&(t=1/0),void 0===r&&(r=1),!0===e.listMode&&void 0!==e.allowNesting&&!1!==e.allowNesting&&console.warn("The value of `allowNesting` will be ignored; it must be false when `listMode` is true"),{defaultComponent:e.defaultComponent,indent:null!==(n=e.indent)&&void 0!==n?n:45,allowNesting:!0!==e.listMode&&(null===(o=e.allowNesting)||void 0===o||o),allowDragging:null===(i=e.allowDragging)||void 0===i||i,allowDrop:null!==(a=e.allowDrop)&&void 0!==a?a:function(){return!0},listMode:null!==(s=e.listMode)&&void 0!==s&&s,itemsPerPage:e.listMode?t:void 0,page:e.listMode?r:void 0}},e.prototype.rebuildTreeData=function(){var e,t;if(void 0===this.uncutData||void 0===this.treeData||void 0===this.treeOptions)throw new Error("Tree data not initialized");this.uncutData.length=0;try{for(var r=i(this.treeModel.getChildren()),n=r.next();!n.done;n=r.next()){var o=n.value;this.uncutData.push(this.rebuildBranch(o))}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}if(!0===this.treeOptions.listMode){var a=this.treeOptions.itemsPerPage*(this.treeOptions.page-1);isNaN(a)&&(a=0);var l=a+this.treeOptions.itemsPerPage;this.treeData=this.uncutData.slice(a,l)}else this.treeData=s(this.uncutData)},e.prototype.rebuildBranch=function(e){var t,r,n=e.data;n.nodes=[];try{for(var o=i(e.getChildren()),a=o.next();!a.done;a=o.next()){var s=a.value;n.nodes.push(this.rebuildBranch(s))}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return n},e}();R.ɵfac=function(e){return new(e||R)(t.ɵɵinject(w),t.ɵɵinject(v),t.ɵɵinject(p))},R.ɵprov=t.ɵɵdefineInjectable({token:R,factory:R.ɵfac}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(R,[{type:t.Injectable}],(function(){return[{type:w},{type:v},{type:p}]}),null);var H=function(){function e(e,r){this.ngZone=e,this.el=r,this.dragoverNoChangeDetect=new t.EventEmitter,this.dragoverEventThrottle=0}return e.prototype.ngOnInit=function(){var e=this;this.ngZone.runOutsideAngular((function(){e.eventSubscription=r.fromEvent(e.el.nativeElement,"dragover").pipe(n.throttleTime(e.dragoverEventThrottle)).subscribe((function(t){e.dragoverNoChangeDetect.emit(t)}))}))},e.prototype.ngOnDestroy=function(){void 0!==this.eventSubscription&&this.eventSubscription.unsubscribe()},e}();H.ɵfac=function(e){return new(e||H)(t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(t.ElementRef))},H.ɵdir=t.ɵɵdefineDirective({type:H,selectors:[["","dragoverNoChangeDetect",""]],inputs:{dragoverEventThrottle:"dragoverEventThrottle"},outputs:{dragoverNoChangeDetect:"dragoverNoChangeDetect"}}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(H,[{type:t.Directive,args:[{selector:"[dragoverNoChangeDetect]"}]}],(function(){return[{type:t.NgZone},{type:t.ElementRef}]}),{dragoverEventThrottle:[{type:t.Input}],dragoverNoChangeDetect:[{type:t.Output}]});var N=function(){function e(e,r){this.ngZone=e,this.el=r,this.dragleaveNoChangeDetect=new t.EventEmitter}return e.prototype.ngOnInit=function(){var e=this;this.ngZone.runOutsideAngular((function(){e.eventSubscription=r.fromEvent(e.el.nativeElement,"dragleave").subscribe((function(t){e.dragleaveNoChangeDetect.emit(t)}))}))},e.prototype.ngOnDestroy=function(){void 0!==this.eventSubscription&&this.eventSubscription.unsubscribe()},e}();N.ɵfac=function(e){return new(e||N)(t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(t.ElementRef))},N.ɵdir=t.ɵɵdefineDirective({type:N,selectors:[["","dragleaveNoChangeDetect",""]],outputs:{dragleaveNoChangeDetect:"dragleaveNoChangeDetect"}}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(N,[{type:t.Directive,args:[{selector:"[dragleaveNoChangeDetect]"}]}],(function(){return[{type:t.NgZone},{type:t.ElementRef}]}),{dragleaveNoChangeDetect:[{type:t.Output}]});var j=["host"],B=["dropZoneInside"];function z(e,t){}function T(e,t){}var V=function(){function e(e,n,o,i,a){var s=this;this.treeService=e,this.dropZoneService=n,this.dragStateService=o,this.globalEventsService=i,this.changeDetectorRef=a,this.treeChange=new t.EventEmitter,this.treeDrop=new t.EventEmitter,this.dropZoneInside$=new r.BehaviorSubject(this.dropZoneInside),this.changesSubscription=this.treeService.changes$.subscribe((function(){s.treeChange.emit()})),this.dropSubscription=this.treeService.drops$.subscribe((function(e){s.treeDrop.emit(e)}))}return e.prototype.ngAfterViewInit=function(){var e;this.dropZoneInside$.next(this.dropZoneInside),this.dropZoneInside$.complete(),!0===(null===(e=this.options)||void 0===e?void 0:e.listMode)||void 0===this.itemsPerPage&&void 0===this.page||console.warn("pagination is only allowed in listMode; `itemsPerPage` and `page` inputs will be ignored"),this.update(),this.changeDetectorRef.detectChanges()},e.prototype.ngOnChanges=function(){void 0!==this.host&&void 0!==this.data&&this.update()},e.prototype.update=function(){if(void 0===this.host)throw new Error("Failed to render limble tree. Failure occurred at root.");if(void 0===this.data)throw new Error("limbleTree requires a data object");this.treeService.init(this.host,this.data,this.options,this.itemsPerPage,this.page),this.globalEventsService.addScrolling()},e.prototype.dragoverHandler=function(e){null!==e.dataTransfer&&(e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="move")},e.prototype.dragleaveHandler=function(e){var t=e.currentTarget,r=e.relatedTarget;t instanceof Node&&r instanceof Node&&!1===function(e,t){if(e===t)return!0;for(var r=t.parentNode;r!==document;){if(null===r)return;if(r===e)return!0;r=r.parentNode}return!1}(t,r)&&(this.dropZoneService.clearVisibleZones(),this.changeDetectorRef.detectChanges())},e.prototype.dropHandler=function(e){var t=this;if(e.stopPropagation(),"droppable"===this.dragStateService.getState()){var r=this.dragStateService.capture();if(void 0===r)throw new Error("failed to get current branch in dragendHandler");var o=this.dropZoneService.getActiveDropZone();if(null===o)throw new Error("failed to get active drop zone at drop handler");this.treeService.captured=!0,this.dragStateService.state$.pipe(n.first((function(e){return"idle"===e}))).subscribe((function(){t.treeService.captured=!1})),this.dropZoneService.clearVisibleZones(),this.treeService.drop(r,o.getFullInsertCoordinates())}},e.prototype.ngOnDestroy=function(){this.changesSubscription.unsubscribe(),this.dropSubscription.unsubscribe()},e}();V.ɵfac=function(e){return new(e||V)(t.ɵɵdirectiveInject(R),t.ɵɵdirectiveInject(v),t.ɵɵdirectiveInject(p),t.ɵɵdirectiveInject(C),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},V.ɵcmp=t.ɵɵdefineComponent({type:V,selectors:[["limble-tree-root"]],viewQuery:function(e,r){if(1&e&&(t.ɵɵviewQuery(j,1,t.ViewContainerRef),t.ɵɵviewQuery(B,1,t.ViewContainerRef)),2&e){var n=void 0;t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.host=n.first),t.ɵɵqueryRefresh(n=t.ɵɵloadQuery())&&(r.dropZoneInside=n.first)}},inputs:{data:"data",options:"options",itemsPerPage:"itemsPerPage",page:"page"},outputs:{dropZoneInside$:"dropZoneInside$",treeChange:"treeChange",treeDrop:"treeDrop"},features:[t.ɵɵProvidersFeature([R,v]),t.ɵɵNgOnChangesFeature],decls:5,vars:0,consts:[[3,"dragoverNoChangeDetect","dragleaveNoChangeDetect","drop"],["dropZoneInside",""],["host",""]],template:function(e,r){1&e&&(t.ɵɵelementStart(0,"div",0),t.ɵɵlistener("dragoverNoChangeDetect",(function(e){return r.dragoverHandler(e)}))("dragleaveNoChangeDetect",(function(e){return r.dragleaveHandler(e)}))("drop",(function(e){return r.dropHandler(e)})),t.ɵɵtemplate(1,z,0,0,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵtemplate(3,T,0,0,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd())},directives:[H,N],styles:[""]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(V,[{type:t.Component,args:[{selector:"limble-tree-root",templateUrl:"./limble-tree-root.component.html",styleUrls:["./limble-tree-root.component.scss"],providers:[R,v]}]}],(function(){return[{type:R},{type:v},{type:p},{type:C},{type:t.ChangeDetectorRef}]}),{data:[{type:t.Input}],options:[{type:t.Input}],itemsPerPage:[{type:t.Input}],page:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.ViewChild,args:["dropZoneInside",{read:t.ViewContainerRef}]}],dropZoneInside$:[{type:t.Output}],treeChange:[{type:t.Output}],treeDrop:[{type:t.Output}]});var L=function(e,t){return{active:e,related:t}};function $(e,r){if(1&e){var n=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",1),t.ɵɵlistener("dragenter",(function(){return t.ɵɵrestoreView(n),t.ɵɵnextContext().dragenterHandler()})),t.ɵɵelement(1,"div",2),t.ɵɵelementEnd()}if(2&e){var o=t.ɵɵnextContext();t.ɵɵadvance(1),t.ɵɵproperty("ngClass",t.ɵɵpureFunction2(1,L,o.active,!o.active))}}var k=function(){function e(e,t){this.dropZoneService=e,this.changeDetectorRef=t,this.visible=!1,this.active=!1}return e.prototype.dragenterHandler=function(){void 0!==this.dropZone&&!0!==this.active&&this.dropZoneService.swapActiveDropZone(this.dropZone)},e.prototype.ngOnInit=function(){var e=this;if(void 0===this.dropZone)throw new Error("No drop zone object at component initialization");this.commSubscription=this.dropZone.getCommChannel().subscribe((function(t){var r,n,o,i;switch(t){case"checkVisible":e.visible=null!==(n=null===(r=e.dropZone)||void 0===r?void 0:r.isVisible())&&void 0!==n&&n;break;case"checkActive":e.active=null!==(i=null===(o=e.dropZone)||void 0===o?void 0:o.isActive())&&void 0!==i&&i;break;case"checkRendered":break;default:throw new Error("unhandled comm message")}e.changeDetectorRef.detectChanges()}))},e.prototype.ngOnDestroy=function(){void 0!==this.commSubscription&&this.commSubscription.unsubscribe()},e}();k.ɵfac=function(e){return new(e||k)(t.ɵɵdirectiveInject(v),t.ɵɵdirectiveInject(t.ChangeDetectorRef))},k.ɵcmp=t.ɵɵdefineComponent({type:k,selectors:[["drop-zone"]],inputs:{dropZone:"dropZone"},decls:1,vars:1,consts:[["class","dropZoneContainer",3,"dragenter",4,"ngIf"],[1,"dropZoneContainer",3,"dragenter"],[3,"ngClass"]],template:function(e,r){1&e&&t.ɵɵtemplate(0,$,2,4,"div",0),2&e&&t.ɵɵproperty("ngIf",r.visible)},directives:[o.NgIf,o.NgClass],styles:[".active[_ngcontent-%COMP%]{height:105px;border-radius:5px;background:#f0f9ff;border:2px dashed #bed2db}.active[_ngcontent-%COMP%], .related[_ngcontent-%COMP%]{margin:10px 0;width:calc(100% - 20px);box-sizing:border-box}.related[_ngcontent-%COMP%]{height:30px;border-radius:5px;background:#fff6f0;border:1px dashed #dbccbe;opacity:.8}.dropZoneContainer[_ngcontent-%COMP%]{position:relative}"],changeDetection:0}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(k,[{type:t.Component,args:[{selector:"drop-zone",templateUrl:"./drop-zone.component.html",styleUrls:["./drop-zone.component.scss"],changeDetection:t.ChangeDetectionStrategy.OnPush}]}],(function(){return[{type:v},{type:t.ChangeDetectorRef}]}),{dropZone:[{type:t.Input}]});var q=function(){};q.ɵfac=function(e){return new(e||q)},q.ɵmod=t.ɵɵdefineNgModule({type:q}),q.ɵinj=t.ɵɵdefineInjector({providers:[w,p,C],imports:[[o.CommonModule]]}),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(q,{declarations:[b,k,P,V,O,H,N],imports:[o.CommonModule],exports:[V]}),("undefined"==typeof ngDevMode||ngDevMode)&&t.ɵsetClassMetadata(q,[{type:t.NgModule,args:[{declarations:[b,k,P,V,O,H,N],imports:[o.CommonModule],exports:[V],providers:[w,p,C]}]}],null,null),t.ɵɵsetComponentScope(b,[o.NgIf,k],[]),t.ɵɵsetComponentScope(P,[o.NgIf,k,H,b],[]),e.LimbleTreeModule=q,e.LimbleTreeRootComponent=V,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=limble-limble-tree.umd.min.js.map
import { Component, Input, ViewChild, ViewContainerRef } from "@angular/core";
import { DropZone } from "../classes/DropZone";
import { filter } from "rxjs/operators";
import { isNestingAllowed } from "../util";
import * as i0 from "@angular/core";
import * as i1 from "../limble-tree-root/tree.service";
import * as i2 from "@angular/common";
import * as i3 from "../drop-zone/drop-zone.component";
import * as i2 from "../limble-tree-root/drop-zone.service";
const _c0 = ["children"];

@@ -15,9 +17,31 @@ function LimbleTreeBranchComponent_drop_zone_1_Template(rf, ctx) { if (rf & 1) {

export class LimbleTreeBranchComponent {
constructor(treeService, changeDetectorRef) {
constructor(treeService, changeDetectorRef, dropZoneService) {
var _a;
this.treeService = treeService;
this.changeDetectorRef = changeDetectorRef;
this.dropZoneService = dropZoneService;
this.indent = (_a = this.treeService.treeOptions) === null || _a === void 0 ? void 0 : _a.indent;
this.renderDropZoneInside = false;
}
ngOnInit() {
this.addDropZoneInside();
if (this.dropZoneInside === undefined) {
throw new Error("drop zone inside is not defined");
}
if (this.treeService.getPlaceholder() === true) {
return;
}
this.dropZoneInside
.getCommChannel()
.pipe(filter((message) => message === "checkRendered"))
.subscribe(() => {
if (this.dropZoneInside === undefined ||
this.branch === undefined) {
throw new Error("Zones not registered");
}
if (isNestingAllowed(this.treeService.treeOptions, this.branch.data)) {
this.renderDropZoneInside = this.dropZoneInside.isRendered();
}
});
}
ngAfterViewInit() {

@@ -28,2 +52,15 @@ this.reRender();

}
ngOnDestroy() {
if (this.dropZoneInside !== undefined) {
this.dropZoneService.removeDropZone(this.dropZoneInside);
}
this.treeService.cleanupSignal$.next(null);
}
addDropZoneInside() {
if (this.branch === undefined) {
throw new Error("failed to register drop zone inside");
}
this.dropZoneInside = new DropZone([...this.branch.getCoordinates()], 0);
this.dropZoneService.addDropZone(this.dropZoneInside);
}
reRender() {

@@ -42,3 +79,3 @@ if (this.children === undefined || this.branch === undefined) {

}
LimbleTreeBranchComponent.ɵfac = function LimbleTreeBranchComponent_Factory(t) { return new (t || LimbleTreeBranchComponent)(i0.ɵɵdirectiveInject(i1.TreeService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
LimbleTreeBranchComponent.ɵfac = function LimbleTreeBranchComponent_Factory(t) { return new (t || LimbleTreeBranchComponent)(i0.ɵɵdirectiveInject(i1.TreeService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i2.DropZoneService)); };
LimbleTreeBranchComponent.ɵcmp = i0.ɵɵdefineComponent({ type: LimbleTreeBranchComponent, selectors: [["limble-tree-branch"]], viewQuery: function LimbleTreeBranchComponent_Query(rf, ctx) { if (rf & 1) {

@@ -49,3 +86,3 @@ i0.ɵɵviewQuery(_c0, 1, ViewContainerRef);

i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.children = _t.first);
} }, inputs: { branch: "branch", dropZoneInside: "dropZoneInside", renderDropZoneInside: "renderDropZoneInside" }, decls: 5, vars: 4, consts: [[3, "dropZone", 4, "ngIf"], [1, "limble-child-nodes", 3, "hidden"], ["children", ""], [3, "dropZone"]], template: function LimbleTreeBranchComponent_Template(rf, ctx) { if (rf & 1) {
} }, inputs: { branch: "branch" }, decls: 5, vars: 4, consts: [[3, "dropZone", 4, "ngIf"], [1, "limble-child-nodes", 3, "hidden"], ["children", ""], [3, "dropZone"]], template: function LimbleTreeBranchComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div");

@@ -63,3 +100,3 @@ i0.ɵɵtemplate(1, LimbleTreeBranchComponent_drop_zone_1_Template, 1, 1, "drop-zone", 0);

i0.ɵɵproperty("hidden", ctx.branch && ctx.branch.data.collapsed);
} }, directives: [i2.NgIf, i3.DropZoneComponent], styles: ["./limble-tree-branch.component.scss"] });
} }, styles: ["./limble-tree-branch.component.scss"] });
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(LimbleTreeBranchComponent, [{

@@ -72,3 +109,3 @@ type: Component,

}]
}], function () { return [{ type: i1.TreeService }, { type: i0.ChangeDetectorRef }]; }, { branch: [{
}], function () { return [{ type: i1.TreeService }, { type: i0.ChangeDetectorRef }, { type: i2.DropZoneService }]; }, { branch: [{
type: Input

@@ -78,7 +115,3 @@ }], children: [{

args: ["children", { read: ViewContainerRef }]
}], dropZoneInside: [{
type: Input
}], renderDropZoneInside: [{
type: Input
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvbGltYmxlLXRyZWUtYnJhbmNoL2xpbWJsZS10cmVlLWJyYW5jaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdKLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7Ozs7OztJQ05wQiwrQkFHYTs7O0lBRFYsZ0RBQTJCOzs7QURjakMsTUFBTSxPQUFPLHlCQUF5QjtJQVluQyxZQUNXLFdBQXdCLEVBQ2YsaUJBQW9DOztRQUQ3QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNmLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFFckQsSUFBSSxDQUFDLE1BQU0sU0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsMENBQUUsTUFBTSxDQUFDO1FBQ25ELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVNLGVBQWU7UUFDbkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVNLFFBQVE7UUFDWixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzNELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztTQUN6RDtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTyxlQUFlO1FBQ3BCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7WUFDbkUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1NBQ2xEO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O2tHQXRDUyx5QkFBeUI7OERBQXpCLHlCQUF5QjsrQkFHSixnQkFBZ0I7Ozs7O1FDcEJsRCwyQkFBb0M7UUFDakMsc0ZBR2E7UUFDYiwrQkFBNEU7UUFDekUsMkhBQXFDO1FBQ3hDLGlCQUFPO1FBQ1YsaUJBQU07O1FBUkQsK0NBQThCO1FBRTVCLGVBQTBCO1FBQTFCLCtDQUEwQjtRQUd4QixlQUEwQztRQUExQyxnRUFBMEM7O3VGRFl0Qyx5QkFBeUI7Y0FMckMsU0FBUztlQUFDO2dCQUNSLFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLFdBQVcsRUFBRSxxQ0FBcUM7Z0JBQ2xELE1BQU0sRUFBRSxDQUFDLHFDQUFxQyxDQUFDO2FBQ2pEOzhGQUVXLE1BQU07a0JBQWQsS0FBSztZQUU2QyxRQUFRO2tCQUExRCxTQUFTO21CQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtZQUl4QyxjQUFjO2tCQUF0QixLQUFLO1lBQ0csb0JBQW9CO2tCQUE1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgIENvbXBvbmVudCxcclxuICAgSW5wdXQsXHJcbiAgIFZpZXdDaGlsZCxcclxuICAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB0eXBlIHsgQnJhbmNoIH0gZnJvbSBcIi4uL2NsYXNzZXMvQnJhbmNoXCI7XHJcbmltcG9ydCB7IERyb3Bab25lIH0gZnJvbSBcIi4uL2NsYXNzZXMvRHJvcFpvbmVcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICBzZWxlY3RvcjogXCJsaW1ibGUtdHJlZS1icmFuY2hcIixcclxuICAgdGVtcGxhdGVVcmw6IFwiLi9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50Lmh0bWxcIixcclxuICAgc3R5bGVzOiBbXCIuL2xpbWJsZS10cmVlLWJyYW5jaC5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gICBASW5wdXQoKSBicmFuY2g6IEJyYW5jaDxhbnk+IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgQFZpZXdDaGlsZChcImNoaWxkcmVuXCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBjaGlsZHJlbjpcclxuICAgICAgfCBWaWV3Q29udGFpbmVyUmVmXHJcbiAgICAgIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgQElucHV0KCkgZHJvcFpvbmVJbnNpZGU6IERyb3Bab25lIHwgdW5kZWZpbmVkO1xyXG4gICBASW5wdXQoKSByZW5kZXJEcm9wWm9uZUluc2lkZTogYm9vbGVhbjtcclxuXHJcbiAgIHB1YmxpYyByZWFkb25seSBpbmRlbnQ7XHJcblxyXG4gICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogVHJlZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgICkge1xyXG4gICAgICB0aGlzLmluZGVudCA9IHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/LmluZGVudDtcclxuICAgICAgdGhpcy5yZW5kZXJEcm9wWm9uZUluc2lkZSA9IGZhbHNlO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICB0aGlzLnJlUmVuZGVyKCk7XHJcbiAgICAgIHRoaXMuc2V0RHJvcFpvbmVIb3N0KCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgcmVSZW5kZXIoKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuID09PSB1bmRlZmluZWQgfHwgdGhpcy5icmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVuZGVyIGxpbWJsZSB0cmVlIGJyYW5jaFwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLnJlbmRlckJyYW5jaCh0aGlzLmNoaWxkcmVuLCB0aGlzLmJyYW5jaCk7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgc2V0RHJvcFpvbmVIb3N0KCkge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZHJvcFpvbmVJbnNpZGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gYWRkIGRyb3Agem9uZSBob3N0XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUuc2V0SG9zdCh0aGlzLmNoaWxkcmVuKTtcclxuICAgfVxyXG59XHJcbiIsIjxkaXYgW3N0eWxlLm1hcmdpbkxlZnQucHhdPVwiaW5kZW50XCI+XHJcbiAgIDxkcm9wLXpvbmVcclxuICAgICAgKm5nSWY9XCJyZW5kZXJEcm9wWm9uZUluc2lkZVwiXHJcbiAgICAgIFtkcm9wWm9uZV09XCJkcm9wWm9uZUluc2lkZVwiXHJcbiAgID48L2Ryb3Atem9uZT5cclxuICAgPHNwYW4gW2hpZGRlbl09XCJicmFuY2ggJiYgYnJhbmNoLmRhdGEuY29sbGFwc2VkXCIgY2xhc3M9XCJsaW1ibGUtY2hpbGQtbm9kZXNcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlICNjaGlsZHJlbj48L25nLXRlbXBsYXRlPlxyXG4gICA8L3NwYW4+XHJcbjwvZGl2PlxyXG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy9saWIvbGltYmxlLXRyZWUtYnJhbmNoL2xpbWJsZS10cmVlLWJyYW5jaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdKLFNBQVMsRUFDVCxLQUFLLEVBR0wsU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7O0lDYnhDLCtCQUdhOzs7SUFEVixnREFBMkI7OztBRG1CakMsTUFBTSxPQUFPLHlCQUF5QjtJQWFuQyxZQUNXLFdBQXdCLEVBQ2YsaUJBQW9DLEVBQ3BDLGVBQWdDOztRQUZ6QyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNmLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBRWpELElBQUksQ0FBQyxNQUFNLFNBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLDBDQUFFLE1BQU0sQ0FBQztRQUNuRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFFTSxRQUFRO1FBQ1osSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUNwQyxNQUFNLElB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QUFvQjtnQkFDOUIsV0FBVyxFQUFFLHFDQUFxQztnQkFDbEQsTUFBTSxFQUFFLENBQUMscUNBQXFDLENBQUM7YUFDakQ7NEhBR1csTUFBTTtrQkFBZCxLQUFLO1lBRTZDLFFBQVE7a0JBQTFELFNBQVM7bUJBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgIENvbXBvbmVudCxcclxuICAgSW5wdXQsXHJcbiAgIE9uRGVzdHJveSxcclxuICAgT25Jbml0LFxyXG4gICBWaWV3Q2hpbGQsXHJcbiAgIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgdHlwZSB7IEJyYW5jaCB9IGZyb20gXCIuLi9jbGFzc2VzL0JyYW5jaFwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZSB9IGZyb20gXCIuLi9jbGFzc2VzL0Ryb3Bab25lXCI7XHJcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBpc05lc3RpbmdBbGxvd2VkIH0gZnJvbSBcIi4uL3V0aWxcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICBzZWxlY3RvcjogXCJsaW1ibGUtdHJlZS1icmFuY2hcIixcclxuICAgdGVtcGxhdGVVcmw6IFwiLi9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50Lmh0bWxcIixcclxuICAgc3R5bGVzOiBbXCIuL2xpbWJsZS10cmVlLWJyYW5jaC5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudFxyXG4gICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgQElucHV0KCkgYnJhbmNoOiBCcmFuY2g8YW55PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIEBWaWV3Q2hpbGQoXCJjaGlsZHJlblwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgY2hpbGRyZW46XHJcbiAgICAgIHwgVmlld0NvbnRhaW5lclJlZlxyXG4gICAgICB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIHB1YmxpYyBkcm9wWm9uZUluc2lkZTogRHJvcFpvbmUgfCB1bmRlZmluZWQ7XHJcbiAgIHB1YmxpYyByZW5kZXJEcm9wWm9uZUluc2lkZTogYm9vbGVhbjtcclxuXHJcbiAgIHB1YmxpYyByZWFkb25seSBpbmRlbnQ7XHJcblxyXG4gICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogVHJlZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU2VydmljZTogRHJvcFpvbmVTZXJ2aWNlXHJcbiAgICkge1xyXG4gICAgICB0aGlzLmluZGVudCA9IHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/LmluZGVudDtcclxuICAgICAgdGhpcy5yZW5kZXJEcm9wWm9uZUluc2lkZSA9IGZhbHNlO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICAgIHRoaXMuYWRkRHJvcFpvbmVJbnNpZGUoKTtcclxuICAgICAgaWYgKHRoaXMuZHJvcFpvbmVJbnNpZGUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkcm9wIHpvbmUgaW5zaWRlIGlzIG5vdCBkZWZpbmVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRyZWVTZXJ2aWNlLmdldFBsYWNlaG9sZGVyKCkgPT09IHRydWUpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGVcclxuICAgICAgICAgLmdldENvbW1DaGFubmVsKClcclxuICAgICAgICAgLnBpcGUoZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlID09PSBcImNoZWNrUmVuZGVyZWRcIikpXHJcbiAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICAgICB0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJab25lcyBub3QgcmVnaXN0ZXJlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgIGlzTmVzdGluZ0FsbG93ZWQodGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucywgdGhpcy5icmFuY2guZGF0YSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgIHRoaXMucmVuZGVyRHJvcFpvbmVJbnNpZGUgPSB0aGlzLmRyb3Bab25lSW5zaWRlLmlzUmVuZGVyZWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9KTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgdGhpcy5yZVJlbmRlcigpO1xyXG4gICAgICB0aGlzLnNldERyb3Bab25lSG9zdCgpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgICBpZiAodGhpcy5kcm9wWm9uZUluc2lkZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnJlbW92ZURyb3Bab25lKHRoaXMuZHJvcFpvbmVJbnNpZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UuY2xlYW51cFNpZ25hbCQubmV4dChudWxsKTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBhZGREcm9wWm9uZUluc2lkZSgpIHtcclxuICAgICAgaWYgKHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGRyb3Agem9uZSBpbnNpZGVcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSA9IG5ldyBEcm9wWm9uZShbLi4udGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKV0sIDApO1xyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5hZGREcm9wWm9uZSh0aGlzLmRyb3Bab25lSW5zaWRlKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlUmVuZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZHJlbiA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlbmRlciBsaW1ibGUgdHJlZSBicmFuY2hcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmVlU2VydmljZS5yZW5kZXJCcmFuY2godGhpcy5jaGlsZHJlbiwgdGhpcy5icmFuY2gpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHNldERyb3Bab25lSG9zdCgpIHtcclxuICAgICAgaWYgKHRoaXMuY2hpbGRyZW4gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmRyb3Bab25lSW5zaWRlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGFkZCBkcm9wIHpvbmUgaG9zdFwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRyb3Bab25lSW5zaWRlLnNldEhvc3QodGhpcy5jaGlsZHJlbik7XHJcbiAgIH1cclxufVxyXG4iLCI8ZGl2IFtzdHlsZS5tYXJnaW5MZWZ0LnB4XT1cImluZGVudFwiPlxyXG4gICA8ZHJvcC16b25lXHJcbiAgICAgICpuZ0lmPVwicmVuZGVyRHJvcFpvbmVJbnNpZGVcIlxyXG4gICAgICBbZHJvcFpvbmVdPVwiZHJvcFpvbmVJbnNpZGVcIlxyXG4gICA+PC9kcm9wLXpvbmU+XHJcbiAgIDxzcGFuIFtoaWRkZW5dPVwiYnJhbmNoICYmIGJyYW5jaC5kYXRhLmNvbGxhcHNlZFwiIGNsYXNzPVwibGltYmxlLWNoaWxkLW5vZGVzXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjY2hpbGRyZW4+PC9uZy10ZW1wbGF0ZT5cclxuICAgPC9zcGFuPlxyXG48L2Rpdj5cclxuIl19

@@ -40,3 +40,2 @@ import { Injectable } from "@angular/core";

}
this.restoreFamilies();
this.setActiveDropZone(null);

@@ -349,2 +348,2 @@ }

}], function () { return [{ type: i1.DragStateService }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7O0FBUy9ELFNBQVMsVUFBVSxDQUFDLE9BQWlCLEVBQUUsT0FBaUI7SUFDckQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDeEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDeEQsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDNUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNaO0lBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDNUMsT0FBTyxDQUFDLENBQUM7S0FDWDtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUdELE1BQU0sT0FBTyxlQUFlO0lBWXpCLFlBQTZCLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQzVELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7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UUFBa0I7UUFDckMsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUM1RCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0MsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUM1QztRQUNELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQy9DLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxpQkFBaUIsQ0FDMUMsQ0FBQztRQUNGLElBQUksY0FBYyxLQUFLLFNBQVMsRUFBRTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDO1FBQ3pELElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7U0FDbkQ7UUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2hDLElBQ0csSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ3ZCLFdBQVcsQ0FBQyxJQUFJLEVBQ2hCLGNBQWMsQ0FBQyxJQUFzQixFQUNyQyxhQUFhLENBQ2YsRUFDRjtZQUNDLE9BQU8sSUFBSSxDQUFDO1NBQ2Q7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNoQixDQUFDOzs4RUF6WVMsZUFBZTt1REFBZixlQUFlLFdBQWYsZUFBZTt1RkFBZixlQUFlO2NBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQnJhbmNoLCBCcmFuY2hDb29yZGluYXRlcyB9IGZyb20gXCIuLi9jbGFzc2VzL0JyYW5jaFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvZHJhZy1zdGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB0eXBlIHsgTGltYmxlVHJlZU5vZGUsIFByb2Nlc3NlZE9wdGlvbnMgfSBmcm9tIFwiLi90cmVlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgYXJyYXlzQXJlRXF1YWwgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZSB9IGZyb20gXCIuLi9jbGFzc2VzL0Ryb3Bab25lXCI7XHJcbmltcG9ydCB7IERyb3Bab25lTG9jYXRpb24gfSBmcm9tIFwiLi4vY2xhc3Nlcy9Ecm9wWm9uZUxvY2F0aW9uXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERyb3Bab25lRmFtaWx5IHtcclxuICAgLyoqIFRoZSBkZWVwZXN0IG1lbWJlciBvZiB0aGUgZmFtaWx5ICovXHJcbiAgIGZvdW5kZXI6IERyb3Bab25lO1xyXG4gICAvKiogQWxsIHRoZSBkcm9wIHpvbmVzIHRoYXQgYmVsb25nIHRvIHRoaXMgZmFtaWx5ICovXHJcbiAgIG1lbWJlcnM6IEFycmF5PERyb3Bab25lPjtcclxufVxyXG5cclxuZnVuY3Rpb24gc29ydEZhbWlseShtZW1iZXJBOiBEcm9wWm9uZSwgbWVtYmVyQjogRHJvcFpvbmUpIHtcclxuICAgY29uc3QgYUNvb3JkaW5hdGVzID0gbWVtYmVyQS5nZXRGdWxsSW5zZXJ0Q29vcmRpbmF0ZXMoKTtcclxuICAgY29uc3QgYkNvb3JkaW5hdGVzID0gbWVtYmVyQi5nZXRGdWxsSW5zZXJ0Q29vcmRpbmF0ZXMoKTtcclxuICAgaWYgKGFDb29yZGluYXRlcy5sZW5ndGggPiBiQ29vcmRpbmF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiAtMTtcclxuICAgfVxyXG4gICBpZiAoYUNvb3JkaW5hdGVzLmxlbmd0aCA8IGJDb29yZGluYXRlcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIDE7XHJcbiAgIH1cclxuICAgcmV0dXJuIDA7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERyb3Bab25lU2VydmljZSB7XHJcbiAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVBcmNoaXZlOiBTZXQ8RHJvcFpvbmU+O1xyXG4gICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lSW52ZW50b3J5OiBBcnJheTxEcm9wWm9uZT47XHJcbiAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVGYW1pbGllczogQXJyYXk8RHJvcFpvbmVGYW1pbHk+O1xyXG4gICBwcml2YXRlIHZpc2libGVGYW1pbHk6IERyb3Bab25lRmFtaWx5IHwgbnVsbDtcclxuICAgcHJpdmF0ZSBhY3RpdmVEcm9wWm9uZTogRHJvcFpvbmUgfCBudWxsO1xyXG4gICBwcml2YXRlIHRyZWU6IEJyYW5jaDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICBwcml2YXRlIHRyZWVPcHRpb25zOiBQcm9jZXNzZWRPcHRpb25zIHwgdW5kZWZpbmVkO1xyXG4gICBwcml2YXRlIHRlbXBGYW1pbGllczpcclxuICAgICAgfCByZWFkb25seSBbRHJvcFpvbmVGYW1pbHksIERyb3Bab25lRmFtaWx5IHwgbnVsbF1cclxuICAgICAgfCByZWFkb25seSBbXTtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZHJhZ1N0YXRlU2VydmljZTogRHJhZ1N0YXRlU2VydmljZSkge1xyXG4gICAgICB0aGlzLmRyb3Bab25lQXJjaGl2ZSA9IG5ldyBTZXQoKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUludmVudG9yeSA9IFtdO1xyXG4gICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMgPSBbXTtcclxuICAgICAgdGhpcy52aXNpYmxlRmFtaWx5ID0gbnVsbDtcclxuICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZSA9IG51bGw7XHJcbiAgICAgIHRoaXMudGVtcEZhbWlsaWVzID0gW107XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlRHJvcFpvbmUobnVsbCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBhZGREcm9wWm9uZShuZXdEcm9wWm9uZTogRHJvcFpvbmUpOiB2b2lkIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZUFyY2hpdmUuYWRkKG5ld0Ryb3Bab25lKTtcclxuICAgfVxyXG5cclxuICAgLyoqIGhpZGVzIGFsbCBkcm9wIHpvbmVzICovXHJcbiAgIHB1YmxpYyBjbGVhclZpc2libGVab25lcygpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMudmlzaWJsZUZhbWlseSAhPT0gbnVsbCkge1xyXG4gICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiB0aGlzLnZpc2libGVGYW1pbHkubWVtYmVycykge1xyXG4gICAgICAgICAgICBtZW1iZXIuaXNWaXNpYmxlKGZhbHNlKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLnZpc2libGVGYW1pbHkgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzdG9yZUZhbWlsaWVzKCk7XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlRHJvcFpvbmUobnVsbCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBnZXRBY3RpdmVEcm9wWm9uZSgpOiBEcm9wWm9uZVNlcnZpY2VbXCJhY3RpdmVEcm9wWm9uZVwiXSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZURyb3Bab25lO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZ2V0RHJvcFpvbmUoY29vcmRpbmF0ZXM6IEJyYW5jaENvb3JkaW5hdGVzKTogRHJvcFpvbmUgfCB1bmRlZmluZWQge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSBbLi4uY29vcmRpbmF0ZXNdO1xyXG4gICAgICBwYXJlbnQucG9wKCk7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY29vcmRpbmF0ZXNbY29vcmRpbmF0ZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgIGNvbnN0IGxvY2F0aW9uID0gbmV3IERyb3Bab25lTG9jYXRpb24ocGFyZW50LCBpbmRleCk7XHJcbiAgICAgIHJldHVybiB0aGlzLmRyb3Bab25lSW52ZW50b3J5LmZpbmQoKGRyb3Bab25lKSA9PlxyXG4gICAgICAgICBEcm9wWm9uZS5kcm9wWm9uZUxvY2F0aW9uc0FyZUVxdWFsKGRyb3Bab25lLCBsb2NhdGlvbilcclxuICAgICAgKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGluaXQodHJlZTogQnJhbmNoPGFueT4sIHRyZWVPcHRpb25zOiBQcm9jZXNzZWRPcHRpb25zKTogdm9pZCB7XHJcbiAgICAgIHRoaXMudHJlZSA9IHRyZWU7XHJcbiAgICAgIHRoaXMudHJlZU9wdGlvbnMgPSB0cmVlT3B0aW9ucztcclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlbW92ZURyb3Bab25lKGRyb3Bab25lOiBEcm9wWm9uZSkge1xyXG4gICAgICB0aGlzLmRyb3Bab25lQXJjaGl2ZS5kZWxldGUoZHJvcFpvbmUpO1xyXG4gICB9XHJcblxyXG4gICAvKiogaGlkZXMgYWxsIGRyb3Agem9uZXMsIGRlbGV0ZXMgYWxsIHRoZSBmYW1pbHkgYXNzaWdubWVudHMsXHJcbiAgICAqIGFuZCBlbXB0aWVzIHRoZSBkcm9wWm9uZUludmVudG9yeVxyXG4gICAgKi9cclxuICAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgICB0aGlzLmNsZWFyVmlzaWJsZVpvbmVzKCk7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5sZW5ndGggPSAwO1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW52ZW50b3J5Lmxlbmd0aCA9IDA7XHJcbiAgIH1cclxuXHJcbiAgIC8qKlxyXG4gICAgKiBSZXN0b3JlcyB0aGUgc2VydmljZSB0byBpdHMgaW5pdGlhbCBzdGF0ZTogaGlkZXMgYWxsIGRyb3Agem9uZXMsXHJcbiAgICAqIGRlbGV0ZXMgYWxsIHRoZSBmYW1pbHkgYXNzaWdubWVudHMsIGFuZCBlbXB0aWVzIHRoZSBkcm9wWm9uZUludmVudG9yeVxyXG4gICAgKiBhbmQgZHJvcFpvbmVBcmNoaXZlLlxyXG4gICAgKi9cclxuICAgcHVibGljIHJlc3RhcnQoKTogdm9pZCB7XHJcbiAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUFyY2hpdmUuY2xlYXIoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlc3RvcmVGYW1pbGllcygpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMudGVtcEZhbWlsaWVzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMucG9wKCk7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wdXNoKHRoaXMudGVtcEZhbWlsaWVzWzBdKTtcclxuICAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2YgdGhpcy50ZW1wRmFtaWxpZXNbMF0ubWVtYmVycykge1xyXG4gICAgICAgICAgICBtZW1iZXIuc2V0RmFtaWx5KHRoaXMudGVtcEZhbWlsaWVzWzBdKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBpZiAodGhpcy50ZW1wRmFtaWxpZXNbMV0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2godGhpcy50ZW1wRmFtaWxpZXNbMV0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiB0aGlzLnRlbXBGYW1pbGllc1sxXS5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgICAgIG1lbWJlci5zZXRGYW1pbHkodGhpcy50ZW1wRmFtaWxpZXNbMV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy50ZW1wRmFtaWxpZXMgPSBbXTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICAvKipcclxuICAgICogU2hvd3MgdGhlIGRyb3Agem9uZSBmYW1pbHkgb2YgdGhlIGRyb3Agem9uZSBpbmRpY2F0ZWQgYnkgYGNvb3JkaW5hdGVzYC5cclxuICAgICovXHJcbiAgIHB1YmxpYyBzaG93RHJvcFpvbmVGYW1pbHkoXHJcbiAgICAgIC8qKiBOb3RlOiB0aGlzIGRyb3Agem9uZSBtYXkgbm90IGV4aXN0IGluIHRoZSBkcm9wWm9uZUludmVudG9yeTsgd2UgaGF2ZSB0byBzZWFyY2ggdGhlIGludmVudG9yeSBiYXNlZCBvbiBpdHMgbG9jYXRpb24gKi9cclxuICAgICAgZHJvcFpvbmU6IERyb3Bab25lLFxyXG4gICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgIGpvaW5GYW1pbGllcz86IGJvb2xlYW47XHJcbiAgICAgICAgIGFjdGl2YXRlTG93ZXN0SW5zdGVhZE9mRm91bmRlcj86IGJvb2xlYW47XHJcbiAgICAgIH0gPSB7IGpvaW5GYW1pbGllczogZmFsc2UsIGFjdGl2YXRlTG93ZXN0SW5zdGVhZE9mRm91bmRlcjogZmFsc2UgfVxyXG4gICApOiB2b2lkIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsICYmXHJcbiAgICAgICAgIERyb3Bab25lLmRyb3Bab25lTG9jYXRpb25zQXJlRXF1YWwodGhpcy5hY3RpdmVEcm9wWm9uZSwgZHJvcFpvbmUpXHJcbiAgICAgICkge1xyXG4gICAgICAgICAvL0FscmVhZHkgc2hvd2luZyB0aGUgZmFtaWx5IHdpdGggdGhlIGFwcHJvcHJpYXRlIGFjdGl2ZSBkcm9wIHpvbmVcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnZpc2libGVGYW1pbHkgIT09IG51bGwgfHwgdGhpcy5hY3RpdmVEcm9wWm9uZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICB0aGlzLmNsZWFyVmlzaWJsZVpvbmVzKCk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5kcm9wWm9uZUludmVudG9yeS5maW5kKCh6b25lKSA9PlxyXG4gICAgICAgICBEcm9wWm9uZS5kcm9wWm9uZUxvY2F0aW9uc0FyZUVxdWFsKHpvbmUsIGRyb3Bab25lKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgZHJvcCB6b25lIHRvIHNob3cuIGxvY2F0aW9uOiAke0pTT04uc3RyaW5naWZ5KFxyXG4gICAgICAgICAgICAgICBkcm9wWm9uZS5nZXRMb2NhdGlvbigpXHJcbiAgICAgICAgICAgICl9YFxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGZhbWlseSA9IHRhcmdldC5nZXRGYW1pbHkoKTtcclxuICAgICAgaWYgKG9wdGlvbnMuam9pbkZhbWlsaWVzID09PSB0cnVlKSB7XHJcbiAgICAgICAgIGNvbnN0IGxvY2F0aW9uMSA9IGRyb3Bab25lLmdldExvY2F0aW9uKCk7XHJcbiAgICAgICAgIGNvbnN0IGxvY2F0aW9uMiA9IG5ldyBEcm9wWm9uZUxvY2F0aW9uKFxyXG4gICAgICAgICAgICBbLi4ubG9jYXRpb24xLnBhcmVudENvb3JkaW5hdGVzXSxcclxuICAgICAgICAgICAgbG9jYXRpb24xLmluc2VydEluZGV4ICsgMVxyXG4gICAgICAgICApO1xyXG4gICAgICAgICBjb25zdCB0YXJnZXQyID0gdGhpcy5kcm9wWm9uZUludmVudG9yeS5maW5kKCh6b25lKSA9PlxyXG4gICAgICAgICAgICBEcm9wWm9uZS5kcm9wWm9uZUxvY2F0aW9uc0FyZUVxdWFsKHpvbmUsIGxvY2F0aW9uMilcclxuICAgICAgICAgKTtcclxuICAgICAgICAgaWYgKHRhcmdldDIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZmluZCBkcm9wIHpvbmUgdG8gc2hvd1wiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBmYW1pbHkyID0gdGFyZ2V0Mi5nZXRGYW1pbHkoKTtcclxuICAgICAgICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkIHx8IGZhbWlseTIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBmYW1pbHlcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgbmV3RmFtaWx5ID0ge1xyXG4gICAgICAgICAgICBmb3VuZGVyOiBmYW1pbHkuZm91bmRlcixcclxuICAgICAgICAgICAgbWVtYmVyczogWy4uLmZhbWlseS5tZW1iZXJzXVxyXG4gICAgICAgICB9O1xyXG4gICAgICAgICB0aGlzLnNob3dEcm9wWm9uZShmYW1pbHkuZm91bmRlciwgdHJ1ZSk7XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGZhbWlseS5tZW1iZXJzLnNvcnQoc29ydEZhbWlseSkpIHtcclxuICAgICAgICAgICAgbWVtYmVyLnNldEZhbWlseShuZXdGYW1pbHkpO1xyXG4gICAgICAgICAgICBpZiAobWVtYmVyICE9PSBmYW1pbHkuZm91bmRlcikge1xyXG4gICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVEcm9wWm9uZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAvL0ZhaWxlZCB0byBhY3RpdmF0ZSBhIHpvbmUgc28gZmFyLCBzbyBhY3RpdmF0ZSB0aGlzIG9uZSBpbnN0ZWFkXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlciwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlcik7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGZhbWlseTIubWVtYmVycykge1xyXG4gICAgICAgICAgICBtZW1iZXIuc2V0RmFtaWx5KG5ld0ZhbWlseSk7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgbWVtYmVyLmdldExvY2F0aW9uKCkucGFyZW50Q29vcmRpbmF0ZXMubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgdGFyZ2V0Mi5nZXRMb2NhdGlvbigpLnBhcmVudENvb3JkaW5hdGVzLmxlbmd0aFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgbmV3RmFtaWx5Lm1lbWJlcnMucHVzaChtZW1iZXIpO1xyXG4gICAgICAgICAgICAgICB0aGlzLnNob3dEcm9wWm9uZShtZW1iZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgLy9UZW1wb3JhcmlseSBzdG9yZSB0aGUgb2xkIGZhbWlsaWVzXHJcbiAgICAgICAgIHRoaXMudGVtcEZhbWlsaWVzID0gW2ZhbWlseSwgZmFtaWx5Ml07XHJcbiAgICAgICAgIC8vUmVtb3ZlIHRoZSBvbGQgZmFtaWxpZXNcclxuICAgICAgICAgY29uc3QgZmFtaWx5SW5kZXggPSB0aGlzLmRyb3Bab25lRmFtaWxpZXMuaW5kZXhPZihmYW1pbHkpO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMuc3BsaWNlKGZhbWlseUluZGV4LCAxKTtcclxuICAgICAgICAgY29uc3QgZmFtaWx5MkluZGV4ID0gdGhpcy5kcm9wWm9uZUZhbWlsaWVzLmluZGV4T2YoZmFtaWx5Mik7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5zcGxpY2UoZmFtaWx5MkluZGV4LCAxKTtcclxuICAgICAgICAgLy9BZGQgdGhlIG5ldyBmYW1pbHlcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2gobmV3RmFtaWx5KTtcclxuICAgICAgICAgdGhpcy52aXNpYmxlRmFtaWx5ID0gbmV3RmFtaWx5O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZmFtaWx5XCIpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMudmlzaWJsZUZhbWlseSA9IGZhbWlseTtcclxuICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUoZmFtaWx5LmZvdW5kZXIsIHRydWUpO1xyXG4gICAgICAgICBpZiAoZmFtaWx5Lm1lbWJlcnMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBmYW1pbHkubWVtYmVycy5zb3J0KHNvcnRGYW1pbHkpKSB7XHJcbiAgICAgICAgICAgICAgIGlmIChtZW1iZXIgIT09IGZhbWlseS5mb3VuZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bab25lID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIC8vRmFpbGVkIHRvIGFjdGl2YXRlIGEgem9uZSBzbyBmYXIsIHNvIGFjdGl2YXRlIHRoaXMgb25lIGluc3RlYWRcclxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgb3B0aW9ucy5hY3RpdmF0ZUxvd2VzdEluc3RlYWRPZkZvdW5kZXIgPT09IHRydWUgJiZcclxuICAgICAgICAgdGhpcy52aXNpYmxlRmFtaWx5Lm1lbWJlcnMubGVuZ3RoID4gMVxyXG4gICAgICApIHtcclxuICAgICAgICAgY29uc3QgbG93ZXN0TWVtYmVyID0gWy4uLnRoaXMudmlzaWJsZUZhbWlseS5tZW1iZXJzXVxyXG4gICAgICAgICAgICAuc29ydChzb3J0RmFtaWx5KVxyXG4gICAgICAgICAgICAucG9wKCk7XHJcbiAgICAgICAgIGlmIChsb3dlc3RNZW1iZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGxvd2VzdCBtZW1iZXJcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5zd2FwQWN0aXZlRHJvcFpvbmUobG93ZXN0TWVtYmVyKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgc3dhcEFjdGl2ZURyb3Bab25lKG5ld0FjdGl2ZURyb3Bab25lOiBEcm9wWm9uZSk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy52aXNpYmxlRmFtaWx5ID09PSBudWxsKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZpc2libGUgZmFtaWx5IGF2YWlsYWJsZSBmb3Igc3dhcHBpbmdcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZpc2libGVGYW1pbHkubWVtYmVycy5maW5kSW5kZXgoXHJcbiAgICAgICAgIChkcm9wWm9uZSkgPT4gZHJvcFpvbmUgPT09IG5ld0FjdGl2ZURyb3Bab25lXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIHN3YXAgYWN0aXZlIGRyb3Agem9uZVwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNldEFjdGl2ZURyb3Bab25lKG5ld0FjdGl2ZURyb3Bab25lKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICB0aGlzLmJ1aWxkSW52ZW50b3J5KCk7XHJcbiAgICAgIHRoaXMuYXNzaWduRmFtaWxpZXMoKTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBhc3NpZ25GYW1pbGllcygpOiB2b2lkIHtcclxuICAgICAgY29uc3Qgb3JwaGFuWm9uZXMgPSBbLi4udGhpcy5kcm9wWm9uZUludmVudG9yeV07XHJcbiAgICAgIGNvbnN0IGRlZXBlc3RNZW1iZXJzID0gb3JwaGFuWm9uZXNcclxuICAgICAgICAgLmZpbHRlcigoem9uZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHpvbmUuZ2V0TG9jYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgbG9jYXRpb24uaW5zZXJ0SW5kZXggPT09IDAgJiZcclxuICAgICAgICAgICAgICAgbG9jYXRpb24ucGFyZW50Q29vcmRpbmF0ZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICB9KVxyXG4gICAgICAgICAuc29ydCgodmFsdWVBLCB2YWx1ZUIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYUNvb3JkaW5hdGVzID0gdmFsdWVBLmdldEZ1bGxJbnNlcnRDb29yZGluYXRlcygpO1xyXG4gICAgICAgICAgICBjb25zdCBiQ29vcmRpbmF0ZXMgPSB2YWx1ZUIuZ2V0RnVsbEluc2VydENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KGFDb29yZGluYXRlcy5sZW5ndGgsIGJDb29yZGluYXRlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgICAgIGlmICgoYUNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSkgPiAoYkNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSkpIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAoYUNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSkgPCAoYkNvb3JkaW5hdGVzW2luZGV4XSA/PyAtMSlcclxuICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgIH0pO1xyXG4gICAgICBmb3IgKGNvbnN0IGRyb3Bab25lIG9mIGRlZXBlc3RNZW1iZXJzKSB7XHJcbiAgICAgICAgIGlmICghb3JwaGFuWm9uZXMuaW5jbHVkZXMoZHJvcFpvbmUpKSB7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGNvbnN0IGZhbWlseTogRHJvcFpvbmVGYW1pbHkgPSB7XHJcbiAgICAgICAgICAgIGZvdW5kZXI6IGRyb3Bab25lLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBbXVxyXG4gICAgICAgICB9O1xyXG4gICAgICAgICBkcm9wWm9uZS5zZXRGYW1pbHkoZmFtaWx5KTtcclxuICAgICAgICAgLy9TZWUgaWYgdGhlcmUgYXJlIGFueSBvcnBoYW5zIHRoYXQgYmVsb25nIHRvIHRoaXMgZmFtaWx5IGFuZCBjbGFpbSB0aGVtLlxyXG4gICAgICAgICBjb25zdCBjdXJzb3IgPSBbLi4uZHJvcFpvbmUuZ2V0RnVsbEluc2VydENvb3JkaW5hdGVzKCldO1xyXG4gICAgICAgICB3aGlsZSAoY3Vyc29yLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmFtaWx5TWVtYmVySW5kZXggPSBvcnBoYW5ab25lcy5maW5kSW5kZXgoKHpvbmUpID0+XHJcbiAgICAgICAgICAgICAgIGFycmF5c0FyZUVxdWFsKHpvbmUuZ2V0RnVsbEluc2VydENvb3JkaW5hdGVzKCksIGN1cnNvcilcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGZhbWlseU1lbWJlckluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICBjb25zdCBmYW1pbHlNZW1iZXIgPSBvcnBoYW5ab25lcy5zcGxpY2UoZmFtaWx5TWVtYmVySW5kZXgsIDEpWzBdO1xyXG4gICAgICAgICAgICAgICBmYW1pbHkubWVtYmVycy5wdXNoKGZhbWlseU1lbWJlcik7XHJcbiAgICAgICAgICAgICAgIGZhbWlseU1lbWJlci5zZXRGYW1pbHkoZmFtaWx5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjdXJzb3IucG9wKCk7XHJcbiAgICAgICAgICAgIGN1cnNvcltjdXJzb3IubGVuZ3RoIC0gMV0rKztcclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMucHVzaChmYW1pbHkpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAoY29uc3QgZHJvcFpvbmUgb2Ygb3JwaGFuWm9uZXMuZmlsdGVyKFxyXG4gICAgICAgICAoem9uZSkgPT4gem9uZS5nZXRGdWxsSW5zZXJ0Q29vcmRpbmF0ZXMoKS5sZW5ndGggPT09IDFcclxuICAgICAgKSkge1xyXG4gICAgICAgICBjb25zdCBmYW1pbHk6IERyb3Bab25lRmFtaWx5ID0ge1xyXG4gICAgICAgICAgICBmb3VuZGVyOiBkcm9wWm9uZSxcclxuICAgICAgICAgICAgbWVtYmVyczogW2Ryb3Bab25lXVxyXG4gICAgICAgICB9O1xyXG4gICAgICAgICBkcm9wWm9uZS5zZXRGYW1pbHkoZmFtaWx5KTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2goZmFtaWx5KTtcclxuICAgICAgICAgb3JwaGFuWm9uZXMuc3BsaWNlKG9ycGhhblpvbmVzLmluZGV4T2YoZHJvcFpvbmUpLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob3JwaGFuWm9uZXMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgIGxldCBvcnBoYW5zID0gXCJcIjtcclxuICAgICAgICAgZm9yIChjb25zdCB6b25lIG9mIG9ycGhhblpvbmVzKSB7XHJcbiAgICAgICAgICAgIG9ycGhhbnMgKz0gYCR7SlNPTi5zdHJpbmdpZnkoem9uZS5nZXRMb2NhdGlvbigpKX0sIGA7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgb3JwaGFucyA9IG9ycGhhbnMuc2xpY2UoMCwgb3JwaGFucy5sZW5ndGggLSAyKTtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgU29tZSB6b25lcyB3ZXJlIG5vdCBhc3NpZ25lZCB0byBhIGZhbWlseS4gVGhlIG9ycGhhbiB6b25lcyBoYXZlIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOiAke29ycGhhbnN9YFxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgYnVpbGRJbnZlbnRvcnkoKSB7XHJcbiAgICAgIC8vV2UgZG8gdGhpcyBmdW5reSBzdHJpbmcgYXJyYXkgYmVjYXVzZSBpdCBpcyBmYXN0ZXIgdGhhbiBkb2luZyBkaXJlY3QgYXJyYXkgY29tcGFyaXNvbnNcclxuICAgICAgY29uc3QgaW52ZW50b3J5Q29vcmRpbmF0ZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgICAgZm9yIChjb25zdCBkcm9wWm9uZSBvZiB0aGlzLmRyb3Bab25lQXJjaGl2ZSkge1xyXG4gICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IGRyb3Bab25lLmdldEZ1bGxJbnNlcnRDb29yZGluYXRlcygpLmpvaW4oXCIsXCIpO1xyXG4gICAgICAgICBpZiAoaW52ZW50b3J5Q29vcmRpbmF0ZXMuaW5jbHVkZXMoY29vcmRpbmF0ZXMpKSB7XHJcbiAgICAgICAgICAgIGRyb3Bab25lLmlzUmVuZGVyZWQoZmFsc2UpO1xyXG4gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bab25lSW52ZW50b3J5LnB1c2goZHJvcFpvbmUpO1xyXG4gICAgICAgICAgICBpbnZlbnRvcnlDb29yZGluYXRlcy5wdXNoKGNvb3JkaW5hdGVzKTtcclxuICAgICAgICAgICAgZHJvcFpvbmUuaXNSZW5kZXJlZCh0cnVlKTtcclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgc2V0QWN0aXZlRHJvcFpvbmUoZHJvcFpvbmU6IERyb3Bab25lIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmVEcm9wWm9uZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lLmlzQWN0aXZlKGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFjdGl2ZURyb3Bab25lID0gZHJvcFpvbmU7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0U3RhdGUoKSAhPT0gXCJkcm9wcGFibGVcIlxyXG4gICAgICApIHtcclxuICAgICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmRyb3BwYWJsZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lID09PSBudWxsICYmXHJcbiAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpID09PSBcImRyb3BwYWJsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2Uubm90RHJvcHBhYmxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuYWN0aXZlRHJvcFpvbmUgIT09IG51bGwpIHtcclxuICAgICAgICAgdGhpcy5hY3RpdmVEcm9wWm9uZS5pc0FjdGl2ZSh0cnVlKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHNob3dEcm9wWm9uZShkcm9wWm9uZTogRHJvcFpvbmUsIGFjdGl2ZSA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICAgIGlmICh0aGlzLnRyZWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEcm9wWm9uZVNlcnZpY2Ugbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy56b25lSXNBbGxvd2VkKGRyb3Bab25lKSkge1xyXG4gICAgICAgICAvL1VzZXIgc2V0dGluZ3MgaW5kaWNhdGUgdG8gc2tpcCB0aGlzIGRyb3Agem9uZVxyXG4gICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy50cmVlLmZpbmRCeUNvb3JkaW5hdGVzKFxyXG4gICAgICAgICBkcm9wWm9uZS5nZXRMb2NhdGlvbigpLnBhcmVudENvb3JkaW5hdGVzXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChwYXJlbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgZmFtaWx5IG1lbWJlclwiKTtcclxuICAgICAgfVxyXG4gICAgICBkcm9wWm9uZS5pc1Zpc2libGUodHJ1ZSk7XHJcbiAgICAgIGlmIChhY3RpdmUgPT09IHRydWUpIHtcclxuICAgICAgICAgdGhpcy5zZXRBY3RpdmVEcm9wWm9uZShkcm9wWm9uZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgem9uZUlzQWxsb3dlZChkcm9wWm9uZTogRHJvcFpvbmUpOiBib29sZWFuIHtcclxuICAgICAgaWYgKHRoaXMudHJlZU9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnRyZWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkcm9wWm9uZVNlcnZpY2Ugbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0RGF0YSgpO1xyXG4gICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGdldCBkcmFnZ2VkIG5vZGVcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJvcFpvbmVQYXJlbnQgPSB0aGlzLnRyZWUuZmluZEJ5Q29vcmRpbmF0ZXMoXHJcbiAgICAgICAgIGRyb3Bab25lLmdldExvY2F0aW9uKCkucGFyZW50Q29vcmRpbmF0ZXNcclxuICAgICAgKTtcclxuICAgICAgaWYgKGRyb3Bab25lUGFyZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGdldCBkcm9wIHpvbmUgcGFyZW50XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRyb3Bab25lSW5kZXggPSBkcm9wWm9uZS5nZXRMb2NhdGlvbigpLmluc2VydEluZGV4O1xyXG4gICAgICBpZiAoZHJvcFpvbmVJbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgZHJvcCB6b25lIGluZGV4XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRyYWdnZWROb2RlID0gZGF0YS5icmFuY2g7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgdGhpcy50cmVlT3B0aW9ucy5hbGxvd0Ryb3AoXHJcbiAgICAgICAgICAgIGRyYWdnZWROb2RlLmRhdGEsXHJcbiAgICAgICAgICAgIGRyb3Bab25lUGFyZW50LmRhdGEgYXMgTGltYmxlVHJlZU5vZGUsXHJcbiAgICAgICAgICAgIGRyb3Bab25lSW5kZXhcclxuICAgICAgICAgKVxyXG4gICAgICApIHtcclxuICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICB9XHJcbn1cclxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvbGliL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7O0FBUy9ELFNBQVMsVUFBVSxDQUFDLE9BQWlCLEVBQUUsT0FBaUI7SUFDckQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDeEQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDeEQsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDNUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNaO0lBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDNUMsT0FBTyxDQUFDLENBQUM7S0FDWDtJQUNELE9BQU8sQ0FBQyxDQUFDO0FBQ1osQ0FBQztBQUdELE1BQU0sT0FBTyxlQUFlO0lBWXpCLFlBQTZCLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQzVELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7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LEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQzVELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztTQUNyRDtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FDL0MsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLGlCQUFpQixDQUMxQyxDQUFDO1FBQ0YsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNwRDtRQUNELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUM7UUFDekQsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUNuRDtRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEMsSUFDRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDdkIsV0FBVyxDQUFDLElBQUksRUFDaEIsY0FBYyxDQUFDLElBQXNCLEVBQ3JDLGFBQWEsQ0FDZixFQUNGO1lBQ0MsT0FBTyxJQUFJLENBQUM7U0FDZDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2hCLENBQUM7OzhFQXhZUyxlQUFlO3VEQUFmLGVBQWUsV0FBZixlQUFlO3VGQUFmLGVBQWU7Y0FEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCcmFuY2gsIEJyYW5jaENvb3JkaW5hdGVzIH0gZnJvbSBcIi4uL2NsYXNzZXMvQnJhbmNoXCI7XHJcbmltcG9ydCB7IERyYWdTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHR5cGUgeyBMaW1ibGVUcmVlTm9kZSwgUHJvY2Vzc2VkT3B0aW9ucyB9IGZyb20gXCIuL3RyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBhcnJheXNBcmVFcXVhbCB9IGZyb20gXCIuLi91dGlsXCI7XHJcbmltcG9ydCB7IERyb3Bab25lIH0gZnJvbSBcIi4uL2NsYXNzZXMvRHJvcFpvbmVcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmVMb2NhdGlvbiB9IGZyb20gXCIuLi9jbGFzc2VzL0Ryb3Bab25lTG9jYXRpb25cIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRHJvcFpvbmVGYW1pbHkge1xyXG4gICAvKiogVGhlIGRlZXBlc3QgbWVtYmVyIG9mIHRoZSBmYW1pbHkgKi9cclxuICAgZm91bmRlcjogRHJvcFpvbmU7XHJcbiAgIC8qKiBBbGwgdGhlIGRyb3Agem9uZXMgdGhhdCBiZWxvbmcgdG8gdGhpcyBmYW1pbHkgKi9cclxuICAgbWVtYmVyczogQXJyYXk8RHJvcFpvbmU+O1xyXG59XHJcblxyXG5mdW5jdGlvbiBzb3J0RmFtaWx5KG1lbWJlckE6IERyb3Bab25lLCBtZW1iZXJCOiBEcm9wWm9uZSkge1xyXG4gICBjb25zdCBhQ29vcmRpbmF0ZXMgPSBtZW1iZXJBLmdldEZ1bGxJbnNlcnRDb29yZGluYXRlcygpO1xyXG4gICBjb25zdCBiQ29vcmRpbmF0ZXMgPSBtZW1iZXJCLmdldEZ1bGxJbnNlcnRDb29yZGluYXRlcygpO1xyXG4gICBpZiAoYUNvb3JkaW5hdGVzLmxlbmd0aCA+IGJDb29yZGluYXRlcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICB9XHJcbiAgIGlmIChhQ29vcmRpbmF0ZXMubGVuZ3RoIDwgYkNvb3JkaW5hdGVzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gMTtcclxuICAgfVxyXG4gICByZXR1cm4gMDtcclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRHJvcFpvbmVTZXJ2aWNlIHtcclxuICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZUFyY2hpdmU6IFNldDxEcm9wWm9uZT47XHJcbiAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVJbnZlbnRvcnk6IEFycmF5PERyb3Bab25lPjtcclxuICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZUZhbWlsaWVzOiBBcnJheTxEcm9wWm9uZUZhbWlseT47XHJcbiAgIHByaXZhdGUgdmlzaWJsZUZhbWlseTogRHJvcFpvbmVGYW1pbHkgfCBudWxsO1xyXG4gICBwcml2YXRlIGFjdGl2ZURyb3Bab25lOiBEcm9wWm9uZSB8IG51bGw7XHJcbiAgIHByaXZhdGUgdHJlZTogQnJhbmNoPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgIHByaXZhdGUgdHJlZU9wdGlvbnM6IFByb2Nlc3NlZE9wdGlvbnMgfCB1bmRlZmluZWQ7XHJcbiAgIHByaXZhdGUgdGVtcEZhbWlsaWVzOlxyXG4gICAgICB8IHJlYWRvbmx5IFtEcm9wWm9uZUZhbWlseSwgRHJvcFpvbmVGYW1pbHkgfCBudWxsXVxyXG4gICAgICB8IHJlYWRvbmx5IFtdO1xyXG5cclxuICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkcmFnU3RhdGVTZXJ2aWNlOiBEcmFnU3RhdGVTZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVBcmNoaXZlID0gbmV3IFNldCgpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW52ZW50b3J5ID0gW107XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcyA9IFtdO1xyXG4gICAgICB0aGlzLnZpc2libGVGYW1pbHkgPSBudWxsO1xyXG4gICAgICB0aGlzLmFjdGl2ZURyb3Bab25lID0gbnVsbDtcclxuICAgICAgdGhpcy50ZW1wRmFtaWxpZXMgPSBbXTtcclxuICAgICAgdGhpcy5zZXRBY3RpdmVEcm9wWm9uZShudWxsKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGFkZERyb3Bab25lKG5ld0Ryb3Bab25lOiBEcm9wWm9uZSk6IHZvaWQge1xyXG4gICAgICB0aGlzLmRyb3Bab25lQXJjaGl2ZS5hZGQobmV3RHJvcFpvbmUpO1xyXG4gICB9XHJcblxyXG4gICAvKiogaGlkZXMgYWxsIGRyb3Agem9uZXMgKi9cclxuICAgcHVibGljIGNsZWFyVmlzaWJsZVpvbmVzKCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy52aXNpYmxlRmFtaWx5ICE9PSBudWxsKSB7XHJcbiAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHRoaXMudmlzaWJsZUZhbWlseS5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgIG1lbWJlci5pc1Zpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMudmlzaWJsZUZhbWlseSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXRBY3RpdmVEcm9wWm9uZShudWxsKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldEFjdGl2ZURyb3Bab25lKCk6IERyb3Bab25lU2VydmljZVtcImFjdGl2ZURyb3Bab25lXCJdIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlRHJvcFpvbmU7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBnZXREcm9wWm9uZShjb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXMpOiBEcm9wWm9uZSB8IHVuZGVmaW5lZCB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IFsuLi5jb29yZGluYXRlc107XHJcbiAgICAgIHBhcmVudC5wb3AoKTtcclxuICAgICAgY29uc3QgaW5kZXggPSBjb29yZGluYXRlc1tjb29yZGluYXRlcy5sZW5ndGggLSAxXTtcclxuICAgICAgY29uc3QgbG9jYXRpb24gPSBuZXcgRHJvcFpvbmVMb2NhdGlvbihwYXJlbnQsIGluZGV4KTtcclxuICAgICAgcmV0dXJuIHRoaXMuZHJvcFpvbmVJbnZlbnRvcnkuZmluZCgoZHJvcFpvbmUpID0+XHJcbiAgICAgICAgIERyb3Bab25lLmRyb3Bab25lTG9jYXRpb25zQXJlRXF1YWwoZHJvcFpvbmUsIGxvY2F0aW9uKVxyXG4gICAgICApO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgaW5pdCh0cmVlOiBCcmFuY2g8YW55PiwgdHJlZU9wdGlvbnM6IFByb2Nlc3NlZE9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgdGhpcy50cmVlID0gdHJlZTtcclxuICAgICAgdGhpcy50cmVlT3B0aW9ucyA9IHRyZWVPcHRpb25zO1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgcmVtb3ZlRHJvcFpvbmUoZHJvcFpvbmU6IERyb3Bab25lKSB7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVBcmNoaXZlLmRlbGV0ZShkcm9wWm9uZSk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBoaWRlcyBhbGwgZHJvcCB6b25lcywgZGVsZXRlcyBhbGwgdGhlIGZhbWlseSBhc3NpZ25tZW50cyxcclxuICAgICogYW5kIGVtcHRpZXMgdGhlIGRyb3Bab25lSW52ZW50b3J5XHJcbiAgICAqL1xyXG4gICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuY2xlYXJWaXNpYmxlWm9uZXMoKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLmxlbmd0aCA9IDA7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVJbnZlbnRvcnkubGVuZ3RoID0gMDtcclxuICAgfVxyXG5cclxuICAgLyoqXHJcbiAgICAqIFJlc3RvcmVzIHRoZSBzZXJ2aWNlIHRvIGl0cyBpbml0aWFsIHN0YXRlOiBoaWRlcyBhbGwgZHJvcCB6b25lcyxcclxuICAgICogZGVsZXRlcyBhbGwgdGhlIGZhbWlseSBhc3NpZ25tZW50cywgYW5kIGVtcHRpZXMgdGhlIGRyb3Bab25lSW52ZW50b3J5XHJcbiAgICAqIGFuZCBkcm9wWm9uZUFyY2hpdmUuXHJcbiAgICAqL1xyXG4gICBwdWJsaWMgcmVzdGFydCgpOiB2b2lkIHtcclxuICAgICAgdGhpcy5yZXNldCgpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lQXJjaGl2ZS5jbGVhcigpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgcmVzdG9yZUZhbWlsaWVzKCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy50ZW1wRmFtaWxpZXMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wb3AoKTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnB1c2godGhpcy50ZW1wRmFtaWxpZXNbMF0pO1xyXG4gICAgICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiB0aGlzLnRlbXBGYW1pbGllc1swXS5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgIG1lbWJlci5zZXRGYW1pbHkodGhpcy50ZW1wRmFtaWxpZXNbMF0pO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGlmICh0aGlzLnRlbXBGYW1pbGllc1sxXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMucHVzaCh0aGlzLnRlbXBGYW1pbGllc1sxXSk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIHRoaXMudGVtcEZhbWlsaWVzWzFdLm1lbWJlcnMpIHtcclxuICAgICAgICAgICAgICAgbWVtYmVyLnNldEZhbWlseSh0aGlzLnRlbXBGYW1pbGllc1sxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLnRlbXBGYW1pbGllcyA9IFtdO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIC8qKlxyXG4gICAgKiBTaG93cyB0aGUgZHJvcCB6b25lIGZhbWlseSBvZiB0aGUgZHJvcCB6b25lIGluZGljYXRlZCBieSBgY29vcmRpbmF0ZXNgLlxyXG4gICAgKi9cclxuICAgcHVibGljIHNob3dEcm9wWm9uZUZhbWlseShcclxuICAgICAgLyoqIE5vdGU6IHRoaXMgZHJvcCB6b25lIG1heSBub3QgZXhpc3QgaW4gdGhlIGRyb3Bab25lSW52ZW50b3J5OyB3ZSBoYXZlIHRvIHNlYXJjaCB0aGUgaW52ZW50b3J5IGJhc2VkIG9uIGl0cyBsb2NhdGlvbiAqL1xyXG4gICAgICBkcm9wWm9uZTogRHJvcFpvbmUsXHJcbiAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgam9pbkZhbWlsaWVzPzogYm9vbGVhbjtcclxuICAgICAgICAgYWN0aXZhdGVMb3dlc3RJbnN0ZWFkT2ZGb3VuZGVyPzogYm9vbGVhbjtcclxuICAgICAgfSA9IHsgam9pbkZhbWlsaWVzOiBmYWxzZSwgYWN0aXZhdGVMb3dlc3RJbnN0ZWFkT2ZGb3VuZGVyOiBmYWxzZSB9XHJcbiAgICk6IHZvaWQge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgIT09IG51bGwgJiZcclxuICAgICAgICAgRHJvcFpvbmUuZHJvcFpvbmVMb2NhdGlvbnNBcmVFcXVhbCh0aGlzLmFjdGl2ZURyb3Bab25lLCBkcm9wWm9uZSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgIC8vQWxyZWFkeSBzaG93aW5nIHRoZSBmYW1pbHkgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYWN0aXZlIGRyb3Agem9uZVxyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudmlzaWJsZUZhbWlseSAhPT0gbnVsbCB8fCB0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsKSB7XHJcbiAgICAgICAgIHRoaXMuY2xlYXJWaXNpYmxlWm9uZXMoKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRyb3Bab25lSW52ZW50b3J5LmZpbmQoKHpvbmUpID0+XHJcbiAgICAgICAgIERyb3Bab25lLmRyb3Bab25lTG9jYXRpb25zQXJlRXF1YWwoem9uZSwgZHJvcFpvbmUpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBkcm9wIHpvbmUgdG8gc2hvdy4gbG9jYXRpb246ICR7SlNPTi5zdHJpbmdpZnkoXHJcbiAgICAgICAgICAgICAgIGRyb3Bab25lLmdldExvY2F0aW9uKClcclxuICAgICAgICAgICAgKX1gXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZmFtaWx5ID0gdGFyZ2V0LmdldEZhbWlseSgpO1xyXG4gICAgICBpZiAob3B0aW9ucy5qb2luRmFtaWxpZXMgPT09IHRydWUpIHtcclxuICAgICAgICAgY29uc3QgbG9jYXRpb24xID0gZHJvcFpvbmUuZ2V0TG9jYXRpb24oKTtcclxuICAgICAgICAgY29uc3QgbG9jYXRpb24yID0gbmV3IERyb3Bab25lTG9jYXRpb24oXHJcbiAgICAgICAgICAgIFsuLi5sb2NhdGlvbjEucGFyZW50Q29vcmRpbmF0ZXNdLFxyXG4gICAgICAgICAgICBsb2NhdGlvbjEuaW5zZXJ0SW5kZXggKyAxXHJcbiAgICAgICAgICk7XHJcbiAgICAgICAgIGNvbnN0IHRhcmdldDIgPSB0aGlzLmRyb3Bab25lSW52ZW50b3J5LmZpbmQoKHpvbmUpID0+XHJcbiAgICAgICAgICAgIERyb3Bab25lLmRyb3Bab25lTG9jYXRpb25zQXJlRXF1YWwoem9uZSwgbG9jYXRpb24yKVxyXG4gICAgICAgICApO1xyXG4gICAgICAgICBpZiAodGFyZ2V0MiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBmaW5kIGRyb3Agem9uZSB0byBzaG93XCIpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGNvbnN0IGZhbWlseTIgPSB0YXJnZXQyLmdldEZhbWlseSgpO1xyXG4gICAgICAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQgfHwgZmFtaWx5MiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGZhbWlseVwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBuZXdGYW1pbHkgPSB7XHJcbiAgICAgICAgICAgIGZvdW5kZXI6IGZhbWlseS5mb3VuZGVyLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBbLi4uZmFtaWx5Lm1lbWJlcnNdXHJcbiAgICAgICAgIH07XHJcbiAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKGZhbWlseS5mb3VuZGVyLCB0cnVlKTtcclxuICAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2YgZmFtaWx5Lm1lbWJlcnMuc29ydChzb3J0RmFtaWx5KSkge1xyXG4gICAgICAgICAgICBtZW1iZXIuc2V0RmFtaWx5KG5ld0ZhbWlseSk7XHJcbiAgICAgICAgICAgIGlmIChtZW1iZXIgIT09IGZhbWlseS5mb3VuZGVyKSB7XHJcbiAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bab25lID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vRmFpbGVkIHRvIGFjdGl2YXRlIGEgem9uZSBzbyBmYXIsIHNvIGFjdGl2YXRlIHRoaXMgb25lIGluc3RlYWRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RHJvcFpvbmUobWVtYmVyKTtcclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2YgZmFtaWx5Mi5tZW1iZXJzKSB7XHJcbiAgICAgICAgICAgIG1lbWJlci5zZXRGYW1pbHkobmV3RmFtaWx5KTtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICBtZW1iZXIuZ2V0TG9jYXRpb24oKS5wYXJlbnRDb29yZGluYXRlcy5sZW5ndGggPFxyXG4gICAgICAgICAgICAgICB0YXJnZXQyLmdldExvY2F0aW9uKCkucGFyZW50Q29vcmRpbmF0ZXMubGVuZ3RoXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICBuZXdGYW1pbHkubWVtYmVycy5wdXNoKG1lbWJlcik7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bab25lKG1lbWJlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICAgICAvL1RlbXBvcmFyaWx5IHN0b3JlIHRoZSBvbGQgZmFtaWxpZXNcclxuICAgICAgICAgdGhpcy50ZW1wRmFtaWxpZXMgPSBbZmFtaWx5LCBmYW1pbHkyXTtcclxuICAgICAgICAgLy9SZW1vdmUgdGhlIG9sZCBmYW1pbGllc1xyXG4gICAgICAgICBjb25zdCBmYW1pbHlJbmRleCA9IHRoaXMuZHJvcFpvbmVGYW1pbGllcy5pbmRleE9mKGZhbWlseSk7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5zcGxpY2UoZmFtaWx5SW5kZXgsIDEpO1xyXG4gICAgICAgICBjb25zdCBmYW1pbHkySW5kZXggPSB0aGlzLmRyb3Bab25lRmFtaWxpZXMuaW5kZXhPZihmYW1pbHkyKTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUZhbWlsaWVzLnNwbGljZShmYW1pbHkySW5kZXgsIDEpO1xyXG4gICAgICAgICAvL0FkZCB0aGUgbmV3IGZhbWlseVxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMucHVzaChuZXdGYW1pbHkpO1xyXG4gICAgICAgICB0aGlzLnZpc2libGVGYW1pbHkgPSBuZXdGYW1pbHk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBmYW1pbHlcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy52aXNpYmxlRmFtaWx5ID0gZmFtaWx5O1xyXG4gICAgICAgICB0aGlzLnNob3dEcm9wWm9uZShmYW1pbHkuZm91bmRlciwgdHJ1ZSk7XHJcbiAgICAgICAgIGlmIChmYW1pbHkubWVtYmVycy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIGZhbWlseS5tZW1iZXJzLnNvcnQoc29ydEZhbWlseSkpIHtcclxuICAgICAgICAgICAgICAgaWYgKG1lbWJlciAhPT0gZmFtaWx5LmZvdW5kZXIpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlRHJvcFpvbmUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgLy9GYWlsZWQgdG8gYWN0aXZhdGUgYSB6b25lIHNvIGZhciwgc28gYWN0aXZhdGUgdGhpcyBvbmUgaW5zdGVhZFxyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEcm9wWm9uZShtZW1iZXIsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEcm9wWm9uZShtZW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICBvcHRpb25zLmFjdGl2YXRlTG93ZXN0SW5zdGVhZE9mRm91bmRlciA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICB0aGlzLnZpc2libGVGYW1pbHkubWVtYmVycy5sZW5ndGggPiAxXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zdCBsb3dlc3RNZW1iZXIgPSBbLi4udGhpcy52aXNpYmxlRmFtaWx5Lm1lbWJlcnNdXHJcbiAgICAgICAgICAgIC5zb3J0KHNvcnRGYW1pbHkpXHJcbiAgICAgICAgICAgIC5wb3AoKTtcclxuICAgICAgICAgaWYgKGxvd2VzdE1lbWJlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBnZXQgbG93ZXN0IG1lbWJlclwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLnN3YXBBY3RpdmVEcm9wWm9uZShsb3dlc3RNZW1iZXIpO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBzd2FwQWN0aXZlRHJvcFpvbmUobmV3QWN0aXZlRHJvcFpvbmU6IERyb3Bab25lKTogdm9pZCB7XHJcbiAgICAgIGlmICh0aGlzLnZpc2libGVGYW1pbHkgPT09IG51bGwpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdmlzaWJsZSBmYW1pbHkgYXZhaWxhYmxlIGZvciBzd2FwcGluZ1wiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMudmlzaWJsZUZhbWlseS5tZW1iZXJzLmZpbmRJbmRleChcclxuICAgICAgICAgKGRyb3Bab25lKSA9PiBkcm9wWm9uZSA9PT0gbmV3QWN0aXZlRHJvcFpvbmVcclxuICAgICAgKTtcclxuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gc3dhcCBhY3RpdmUgZHJvcCB6b25lXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0QWN0aXZlRHJvcFpvbmUobmV3QWN0aXZlRHJvcFpvbmUpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgdXBkYXRlKCk6IHZvaWQge1xyXG4gICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuYnVpbGRJbnZlbnRvcnkoKTtcclxuICAgICAgdGhpcy5hc3NpZ25GYW1pbGllcygpO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIGFzc2lnbkZhbWlsaWVzKCk6IHZvaWQge1xyXG4gICAgICBjb25zdCBvcnBoYW5ab25lcyA9IFsuLi50aGlzLmRyb3Bab25lSW52ZW50b3J5XTtcclxuICAgICAgY29uc3QgZGVlcGVzdE1lbWJlcnMgPSBvcnBoYW5ab25lc1xyXG4gICAgICAgICAuZmlsdGVyKCh6b25lKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gem9uZS5nZXRMb2NhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICBsb2NhdGlvbi5pbnNlcnRJbmRleCA9PT0gMCAmJlxyXG4gICAgICAgICAgICAgICBsb2NhdGlvbi5wYXJlbnRDb29yZGluYXRlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgIH0pXHJcbiAgICAgICAgIC5zb3J0KCh2YWx1ZUEsIHZhbHVlQikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhQ29vcmRpbmF0ZXMgPSB2YWx1ZUEuZ2V0RnVsbEluc2VydENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJDb29yZGluYXRlcyA9IHZhbHVlQi5nZXRGdWxsSW5zZXJ0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgoYUNvb3JkaW5hdGVzLmxlbmd0aCwgYkNvb3JkaW5hdGVzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgaWYgKChhQ29vcmRpbmF0ZXNbaW5kZXhdID8/IC0xKSA+IChiQ29vcmRpbmF0ZXNbaW5kZXhdID8/IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIChhQ29vcmRpbmF0ZXNbaW5kZXhdID8/IC0xKSA8IChiQ29vcmRpbmF0ZXNbaW5kZXhdID8/IC0xKVxyXG4gICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgfSk7XHJcbiAgICAgIGZvciAoY29uc3QgZHJvcFpvbmUgb2YgZGVlcGVzdE1lbWJlcnMpIHtcclxuICAgICAgICAgaWYgKCFvcnBoYW5ab25lcy5pbmNsdWRlcyhkcm9wWm9uZSkpIHtcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgZmFtaWx5OiBEcm9wWm9uZUZhbWlseSA9IHtcclxuICAgICAgICAgICAgZm91bmRlcjogZHJvcFpvbmUsXHJcbiAgICAgICAgICAgIG1lbWJlcnM6IFtdXHJcbiAgICAgICAgIH07XHJcbiAgICAgICAgIGRyb3Bab25lLnNldEZhbWlseShmYW1pbHkpO1xyXG4gICAgICAgICAvL1NlZSBpZiB0aGVyZSBhcmUgYW55IG9ycGhhbnMgdGhhdCBiZWxvbmcgdG8gdGhpcyBmYW1pbHkgYW5kIGNsYWltIHRoZW0uXHJcbiAgICAgICAgIGNvbnN0IGN1cnNvciA9IFsuLi5kcm9wWm9uZS5nZXRGdWxsSW5zZXJ0Q29vcmRpbmF0ZXMoKV07XHJcbiAgICAgICAgIHdoaWxlIChjdXJzb3IubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmYW1pbHlNZW1iZXJJbmRleCA9IG9ycGhhblpvbmVzLmZpbmRJbmRleCgoem9uZSkgPT5cclxuICAgICAgICAgICAgICAgYXJyYXlzQXJlRXF1YWwoem9uZS5nZXRGdWxsSW5zZXJ0Q29vcmRpbmF0ZXMoKSwgY3Vyc29yKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoZmFtaWx5TWVtYmVySW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGZhbWlseU1lbWJlciA9IG9ycGhhblpvbmVzLnNwbGljZShmYW1pbHlNZW1iZXJJbmRleCwgMSlbMF07XHJcbiAgICAgICAgICAgICAgIGZhbWlseS5tZW1iZXJzLnB1c2goZmFtaWx5TWVtYmVyKTtcclxuICAgICAgICAgICAgICAgZmFtaWx5TWVtYmVyLnNldEZhbWlseShmYW1pbHkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnNvci5wb3AoKTtcclxuICAgICAgICAgICAgY3Vyc29yW2N1cnNvci5sZW5ndGggLSAxXSsrO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVGYW1pbGllcy5wdXNoKGZhbWlseSk7XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChjb25zdCBkcm9wWm9uZSBvZiBvcnBoYW5ab25lcy5maWx0ZXIoXHJcbiAgICAgICAgICh6b25lKSA9PiB6b25lLmdldEZ1bGxJbnNlcnRDb29yZGluYXRlcygpLmxlbmd0aCA9PT0gMVxyXG4gICAgICApKSB7XHJcbiAgICAgICAgIGNvbnN0IGZhbWlseTogRHJvcFpvbmVGYW1pbHkgPSB7XHJcbiAgICAgICAgICAgIGZvdW5kZXI6IGRyb3Bab25lLFxyXG4gICAgICAgICAgICBtZW1iZXJzOiBbZHJvcFpvbmVdXHJcbiAgICAgICAgIH07XHJcbiAgICAgICAgIGRyb3Bab25lLnNldEZhbWlseShmYW1pbHkpO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lRmFtaWxpZXMucHVzaChmYW1pbHkpO1xyXG4gICAgICAgICBvcnBoYW5ab25lcy5zcGxpY2Uob3JwaGFuWm9uZXMuaW5kZXhPZihkcm9wWm9uZSksIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcnBoYW5ab25lcy5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgbGV0IG9ycGhhbnMgPSBcIlwiO1xyXG4gICAgICAgICBmb3IgKGNvbnN0IHpvbmUgb2Ygb3JwaGFuWm9uZXMpIHtcclxuICAgICAgICAgICAgb3JwaGFucyArPSBgJHtKU09OLnN0cmluZ2lmeSh6b25lLmdldExvY2F0aW9uKCkpfSwgYDtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBvcnBoYW5zID0gb3JwaGFucy5zbGljZSgwLCBvcnBoYW5zLmxlbmd0aCAtIDIpO1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGBTb21lIHpvbmVzIHdlcmUgbm90IGFzc2lnbmVkIHRvIGEgZmFtaWx5LiBUaGUgb3JwaGFuIHpvbmVzIGhhdmUgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6ICR7b3JwaGFuc31gXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBidWlsZEludmVudG9yeSgpIHtcclxuICAgICAgLy9XZSBkbyB0aGlzIGZ1bmt5IHN0cmluZyBhcnJheSBiZWNhdXNlIGl0IGlzIGZhc3RlciB0aGFuIGRvaW5nIGRpcmVjdCBhcnJheSBjb21wYXJpc29uc1xyXG4gICAgICBjb25zdCBpbnZlbnRvcnlDb29yZGluYXRlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGRyb3Bab25lIG9mIHRoaXMuZHJvcFpvbmVBcmNoaXZlKSB7XHJcbiAgICAgICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gZHJvcFpvbmUuZ2V0RnVsbEluc2VydENvb3JkaW5hdGVzKCkuam9pbihcIixcIik7XHJcbiAgICAgICAgIGlmIChpbnZlbnRvcnlDb29yZGluYXRlcy5pbmNsdWRlcyhjb29yZGluYXRlcykpIHtcclxuICAgICAgICAgICAgZHJvcFpvbmUuaXNSZW5kZXJlZChmYWxzZSk7XHJcbiAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVJbnZlbnRvcnkucHVzaChkcm9wWm9uZSk7XHJcbiAgICAgICAgICAgIGludmVudG9yeUNvb3JkaW5hdGVzLnB1c2goY29vcmRpbmF0ZXMpO1xyXG4gICAgICAgICAgICBkcm9wWm9uZS5pc1JlbmRlcmVkKHRydWUpO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBzZXRBY3RpdmVEcm9wWm9uZShkcm9wWm9uZTogRHJvcFpvbmUgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgIGlmICh0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsKSB7XHJcbiAgICAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUuaXNBY3RpdmUoZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgPSBkcm9wWm9uZTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lICE9PSBudWxsICYmXHJcbiAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpICE9PSBcImRyb3BwYWJsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZHJvcHBhYmxlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgIHRoaXMuYWN0aXZlRHJvcFpvbmUgPT09IG51bGwgJiZcclxuICAgICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCkgPT09IFwiZHJvcHBhYmxlXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5ub3REcm9wcGFibGUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5hY3RpdmVEcm9wWm9uZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICB0aGlzLmFjdGl2ZURyb3Bab25lLmlzQWN0aXZlKHRydWUpO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgc2hvd0Ryb3Bab25lKGRyb3Bab25lOiBEcm9wWm9uZSwgYWN0aXZlID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgICAgaWYgKHRoaXMudHJlZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRyb3Bab25lU2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnpvbmVJc0FsbG93ZWQoZHJvcFpvbmUpKSB7XHJcbiAgICAgICAgIC8vVXNlciBzZXR0aW5ncyBpbmRpY2F0ZSB0byBza2lwIHRoaXMgZHJvcCB6b25lXHJcbiAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnRyZWUuZmluZEJ5Q29vcmRpbmF0ZXMoXHJcbiAgICAgICAgIGRyb3Bab25lLmdldExvY2F0aW9uKCkucGFyZW50Q29vcmRpbmF0ZXNcclxuICAgICAgKTtcclxuICAgICAgaWYgKHBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBmYW1pbHkgbWVtYmVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGRyb3Bab25lLmlzVmlzaWJsZSh0cnVlKTtcclxuICAgICAgaWYgKGFjdGl2ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICB0aGlzLnNldEFjdGl2ZURyb3Bab25lKGRyb3Bab25lKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSB6b25lSXNBbGxvd2VkKGRyb3Bab25lOiBEcm9wWm9uZSk6IGJvb2xlYW4ge1xyXG4gICAgICBpZiAodGhpcy50cmVlT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudHJlZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImRyb3Bab25lU2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXREYXRhKCk7XHJcbiAgICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZ2V0IGRyYWdnZWQgbm9kZVwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkcm9wWm9uZVBhcmVudCA9IHRoaXMudHJlZS5maW5kQnlDb29yZGluYXRlcyhcclxuICAgICAgICAgZHJvcFpvbmUuZ2V0TG9jYXRpb24oKS5wYXJlbnRDb29yZGluYXRlc1xyXG4gICAgICApO1xyXG4gICAgICBpZiAoZHJvcFpvbmVQYXJlbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZ2V0IGRyb3Agem9uZSBwYXJlbnRcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJvcFpvbmVJbmRleCA9IGRyb3Bab25lLmdldExvY2F0aW9uKCkuaW5zZXJ0SW5kZXg7XHJcbiAgICAgIGlmIChkcm9wWm9uZUluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGdldCBkcm9wIHpvbmUgaW5kZXhcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHJhZ2dlZE5vZGUgPSBkYXRhLmJyYW5jaDtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLnRyZWVPcHRpb25zLmFsbG93RHJvcChcclxuICAgICAgICAgICAgZHJhZ2dlZE5vZGUuZGF0YSxcclxuICAgICAgICAgICAgZHJvcFpvbmVQYXJlbnQuZGF0YSBhcyBMaW1ibGVUcmVlTm9kZSxcclxuICAgICAgICAgICAgZHJvcFpvbmVJbmRleFxyXG4gICAgICAgICApXHJcbiAgICAgICkge1xyXG4gICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgIH1cclxufVxyXG4iXX0=

@@ -28,2 +28,3 @@ import { Injectable } from "@angular/core";

});
this.synchronizer = false;
}

@@ -123,4 +124,5 @@ drop(source, targetCoordinates) {

else {
this.treeData = this.uncutData;
this.treeData = [...this.uncutData];
}
this.synchronizer = false;
this.render();

@@ -174,3 +176,3 @@ }

}
const treeData = this.treeData;
this.synchronizer = true;
setTimeout(() => {

@@ -181,3 +183,3 @@ if (this.treeOptions === undefined) {

this.changes$.next(null);
if (this.treeData !== treeData) {
if (this.synchronizer === false) {
//The tree service has been reinitialized since this timeout was called.

@@ -252,5 +254,5 @@ //The new tree data will just overwrite the drop zone data anyway, so

}
this.treeData.length = 0;
this.uncutData.length = 0;
for (const branch of this.treeModel.getChildren()) {
this.treeData.push(this.rebuildBranch(branch));
this.uncutData.push(this.rebuildBranch(branch));
}

@@ -265,7 +267,6 @@ if (this.treeOptions.listMode === true) {

const end = start + this.treeOptions.itemsPerPage;
this.uncutData.splice(start, this.treeOptions.itemsPerPage, ...this.treeData);
this.treeData = this.uncutData.slice(start, end);
}
else {
this.uncutData = this.treeData;
this.treeData = [...this.uncutData];
}

@@ -287,2 +288,2 @@ }

}], function () { return [{ type: i1.ComponentCreatorService }, { type: i2.DropZoneService }, { type: i3.DragStateService }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUduRSxPQUFPLEVBQUUsTUFBTSxFQUFxQixNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBRTlHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBOEQ5QyxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQWtEekIsTUFBTSxPQUFPLFdBQVc7SUFZckIsWUFDb0IsdUJBQWdELEVBQ2hELGVBQWdDLEVBQ2hDLGdCQUFrQztRQUZsQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBRW5ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUss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cGUsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2NvbXBvbmVudC1jcmVhdG9yLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4vZHJvcC16b25lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQnJhbmNoLCBCcmFuY2hDb29yZGluYXRlcyB9IGZyb20gXCIuLi9jbGFzc2VzL0JyYW5jaFwiO1xyXG5pbXBvcnQgeyBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1ub2RlL2xpbWJsZS10cmVlLW5vZGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVQbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1wbGFjZWhvbGRlci9saW1ibGUtdHJlZS1wbGFjZWhvbGRlci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRHJhZ1N0YXRlU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgYXJyYXlzQXJlRXF1YWwgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8qKiBBbiBvYmplY3QgZGVzY3JpYmluZyBhIG5vZGUgb2YgdGhlIHRyZWUgKi9cclxuZXhwb3J0IGludGVyZmFjZSBMaW1ibGVUcmVlTm9kZSB7XHJcbiAgIC8qKiBBIGxpc3Qgb2Ygbm9kZXMgdG8gYmUgcmVuZGVyZWQgXCJ1bmRlclwiIHRoaXMgb25lLCBvbmUgbGV2ZWwgZGVlcGVyIGluIHRoZSB0cmVlLiAqL1xyXG4gICBub2Rlcz86IExpbWJsZVRyZWVEYXRhO1xyXG4gICAvLyAvKiogQSBjdXN0b20gZGF0YSBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZSBjb21wb25lbnQgYXMgYW4gYElucHV0KClgIGJpbmRpbmcgY2FsbGVkIGBub2RlRGF0YWAgKi9cclxuICAgLy8gZGF0YTogdW5rbm93bjtcclxuICAgLyoqIEFuIG9iamVjdCB0aGF0IGRlc2NyaWJlcyB0aGUgY29tcG9uZW50IHdoaWNoIHdpbGwgcmVwcmVzZW50IHRoaXMgbm9kZSBpbiB0aGUgdmlzdWFsIHRyZWUgKi9cclxuICAgY29tcG9uZW50PzogQ29tcG9uZW50T2JqO1xyXG4gICBjb2xsYXBzZWQ/OiBib29sZWFuO1xyXG4gICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XHJcbn1cclxuXHJcbi8qKiBBbiBvYmplY3QgdGhhdCB0aGUgbGltYmxlLXRyZWUtcm9vdCBjb21wb25lbnQgdXNlcyB0byBidWlsZCB0aGUgdHJlZSAqL1xyXG5leHBvcnQgdHlwZSBMaW1ibGVUcmVlRGF0YSA9IEFycmF5PExpbWJsZVRyZWVOb2RlPjtcclxuXHJcbi8qKiBBIGdyb3VwIG9mIHNldHRpbmdzIGZvciBjaGFuZ2luZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdHJlZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExpbWJsZVRyZWVPcHRpb25zIHtcclxuICAgLyoqIFRoZSBjb21wb25lbnQgb2JqZWN0IHRvIHVzZSBpZiBvbmUgaXMgbm90IHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIG5vZGUgKi9cclxuICAgZGVmYXVsdENvbXBvbmVudD86IENvbXBvbmVudE9iajtcclxuICAgLyoqIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHRvIGluZGVudCBlYWNoIGxldmVsIG9mIHRoZSB0cmVlLiBEZWZhdWx0cyB0byA0NSAqL1xyXG4gICBpbmRlbnQ/OiBudW1iZXI7XHJcbiAgIC8qKlxyXG4gICAgKiBXaGV0aGVyIHRvIGFsbG93IFwibmVzdGluZ1wiIChwbGFjaW5nIGEgbm9kZSBvbmUgbGV2ZWwgZGVlcGVyIHRoYW4gY3VycmVudGx5IGV4aXN0cyBvbiB0aGUgYnJhbmNoKS5cclxuICAgICogV2hlbiB0aGlzIGlzIGEgYm9vbGVhbiwgaXQgYXBwbGllcyB0byBhbGwgbm9kZXMuIFdoZW4gdGhpcyBpcyBhIGZ1bmN0aW9uLCB0aGUgbm9kZSBpbiBxdWVzdGlvblxyXG4gICAgKiBpcyBwYXNzZWQgaW4uIERlZmF1bHRzIHRvIHRydWUuXHJcbiAgICAqL1xyXG4gICBhbGxvd05lc3Rpbmc/OiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG4gICAvKipcclxuICAgICogV2hldGhlciB0byBhbGxvdyBhIG5vZGUgdG8gYmUgZHJhZ2dlZC4gV2hlbiB0aGlzIGlzIGEgYm9vbGVhbiwgaXQgYXBwbGllcyB0byBhbGwgbm9kZXMuIFdoZW4gdGhpc1xyXG4gICAgKiBpcyBhIGZ1bmN0aW9uLCB0aGUgbm9kZSBpbiBxdWVzdGlvbiBpcyBwYXNzZWQgaW4uIERlZmF1bHRzIHRvIHRydWUuXHJcbiAgICAqL1xyXG4gICBhbGxvd0RyYWdnaW5nPzogYm9vbGVhbiB8ICgobm9kZURhdGE6IExpbWJsZVRyZWVOb2RlKSA9PiBib29sZWFuKTtcclxuICAgLyoqIEEgY2FsbGJhY2sgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzb3VyY2VOb2RlIGNhbiBiZSBkcm9wcGVkIGF0IGEgcGFydGljdWxhciBsb2NhdGlvbi4gKi9cclxuICAgYWxsb3dEcm9wPzogKFxyXG4gICAgICBzb3VyY2VOb2RlOiBMaW1ibGVUcmVlTm9kZSxcclxuICAgICAgcHJvcG9zZWRQYXJlbnQ6IExpbWJsZVRyZWVOb2RlIHwgbnVsbCxcclxuICAgICAgcHJvcG9zZWRJbmRleDogbnVtYmVyXHJcbiAgICkgPT4gYm9vbGVhbjtcclxuICAgLyoqIFdoZW4gc2V0IHRvIHRydWUsIGxpc3QgbW9kZSB3aWxsIGVuZm9yY2UgYSBmbGF0IHRyZWUgc3RydWN0dXJlLCBtZWFuaW5nIHRoZXJlXHJcbiAgICAqIGNhbiBvbmx5IGJlIG9uZSBsZXZlbCBvZiB0aGUgdHJlZS4gYGFsbG93TmVzdGluZ2AgaXMgYXV0b21hdGljYWxseSBzZXQgdG8gYGZhbHNlYFxyXG4gICAgKiBhbmQgYW55IGNoaWxkcmVuIHdpbGwgYmUgZGVsZXRlZC5cclxuICAgICpcclxuICAgICogVGhpcyBtb2RlIGNhbiBiZSB1c2VkIHdoZW4gdGhlIHNhbWUgZHluYW1pYyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkgb2ZcclxuICAgICogdGhlIHRyZWUgaXMgZGVzaXJlZCwgYnV0IHRoZSB0cmVlIHN0cnVjdHVyZSBpdHNlbGYgaXMgbm90IG5lY2Vzc2FyeS4gVGhpc1xyXG4gICAgKiBhbHNvIG9wZW5zIHVwIHRoZSBwYWdpbmF0aW9uIEFQSSBvbiB0aGUgbGltYmxlLXRyZWUtcm9vdCBjb21wb25lbnQuIFNlZSB0aGVcclxuICAgICogUkVBRE1FIGZvciBkZXRhaWxzIG9uIHBhZ2luYXRpb24uXHJcbiAgICAqL1xyXG4gICBsaXN0TW9kZT86IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKiBBbiBvYmplY3QgdGhhdCByZWZlcmVuY2VzIHRoZSBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWQgYW5kIGl0cyBiaW5kaW5ncyAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudE9iaiB7XHJcbiAgIC8qKiBUaGUgY29tcG9uZW50IGNsYXNzICovXHJcbiAgIGNsYXNzOiBUeXBlPHVua25vd24+O1xyXG4gICAvKiogVGhlIGJpbmRpbmdzIChpbnB1dHMgYW5kIG91dHB1dHMpIG9mIHRoZSBjbGFzcyAqL1xyXG4gICBiaW5kaW5ncz86IHtcclxuICAgICAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xyXG4gICB9O1xyXG59XHJcblxyXG4vKiogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBgaW5kZW50YCBvcHRpb24gKi9cclxuZXhwb3J0IGNvbnN0IElOREVOVCA9IDQ1O1xyXG5cclxuLyoqIEFuIG9wdGlvbnMgb2JqZWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMgbG9hZGVkIHdoZXJlIGFwcGxpY2FibGUgKi9cclxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRPcHRpb25zQmFzZSBleHRlbmRzIExpbWJsZVRyZWVPcHRpb25zIHtcclxuICAgZGVmYXVsdENvbXBvbmVudD86IENvbXBvbmVudE9iajtcclxuICAgaW5kZW50OiBudW1iZXI7XHJcbiAgIGFsbG93TmVzdGluZzogYm9vbGVhbiB8ICgobm9kZURhdGE6IExpbWJsZVRyZWVOb2RlKSA9PiBib29sZWFuKTtcclxuICAgYWxsb3dEcmFnZ2luZzogYm9vbGVhbiB8ICgobm9kZURhdGE6IExpbWJsZVRyZWVOb2RlKSA9PiBib29sZWFuKTtcclxuICAgYWxsb3dEcm9wOiAoXHJcbiAgICAgIHNvdXJjZU5vZGU6IExpbWJsZVRyZWVOb2RlLFxyXG4gICAgICBwcm9wb3NlZFBhcmVudDogTGltYmxlVHJlZU5vZGUgfCBudWxsLFxyXG4gICAgICBwcm9wb3NlZEluZGV4OiBudW1iZXJcclxuICAgKSA9PiBib29sZWFuO1xyXG4gICBsaXN0TW9kZTogYm9vbGVhbjtcclxuICAgaXRlbXNQZXJQYWdlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgIHBhZ2U6IG51bWJlciB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRPcHRpb25zV2l0aFBhZ2luYXRpb24gZXh0ZW5kcyBQcm9jZXNzZWRPcHRpb25zQmFzZSB7XHJcbiAgIGxpc3RNb2RlOiB0cnVlO1xyXG4gICBpdGVtc1BlclBhZ2U6IG51bWJlcjtcclxuICAgcGFnZTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFByb2Nlc3NlZE9wdGlvbnNXaXRob3V0UGFnaW5hdGlvblxyXG4gICBleHRlbmRzIFByb2Nlc3NlZE9wdGlvbnNCYXNlIHtcclxuICAgbGlzdE1vZGU6IGZhbHNlO1xyXG4gICBpdGVtc1BlclBhZ2U6IHVuZGVmaW5lZDtcclxuICAgcGFnZTogdW5kZWZpbmVkO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQcm9jZXNzZWRPcHRpb25zID1cclxuICAgfCBQcm9jZXNzZWRPcHRpb25zV2l0aFBhZ2luYXRpb25cclxuICAgfCBQcm9jZXNzZWRPcHRpb25zV2l0aG91dFBhZ2luYXRpb247XHJcblxyXG4vKiogdGhlIHZhbHVlIGVtaXR0ZWQgZnJvbSB0aGUgcm9vdCBjb21wb25lbnQgYWZ0ZXIgYSBub2RlIGlzIGRyb3BwZWQgKi9cclxuZXhwb3J0IGludGVyZmFjZSBUcmVlRHJvcCB7XHJcbiAgIC8qKiBUaGUgbm9kZSB0aGF0IHdhcyBkcm9wcGVkICovXHJcbiAgIHRhcmdldDogTGltYmxlVHJlZU5vZGU7XHJcbiAgIC8qKiB0aGUgdGFyZ2V0J3MgcGFyZW50IGJlZm9yZSB0aGUgZHJhZyBhbmQgZHJvcCwgb3IgbnVsbCBpZiBpdCB3YXMgYSB0b3AtbGV2ZWwgbm9kZSAqL1xyXG4gICBvbGRQYXJlbnQ6IExpbWJsZVRyZWVOb2RlIHwgbnVsbDtcclxuICAgLyoqIHRoZSBpbmRleCBvZiB0aGUgbm9kZSBiZWZvcmUgdGhlIGRyYWcgYW5kIGRyb3AgcmVsYXRpdmUgdG8gaXRzIG9sZCBzaWJsaW5ncyAqL1xyXG4gICBvbGRJbmRleDogbnVtYmVyO1xyXG4gICAvKiogdGhlIHRhcmdldCdzIHBhcmVudCBhZnRlciB0aGUgZHJhZyBhbmQgZHJvcCwgb3IgbnVsbCBpZiBpdCBpcyBub3cgYSB0b3AtbGV2ZWwgbm9kZSAqL1xyXG4gICBuZXdQYXJlbnQ6IExpbWJsZVRyZWVOb2RlIHwgbnVsbDtcclxuICAgLyoqIHRoZSBpbmRleCBvZiB0aGUgbm9kZSBhZnRlciB0aGUgZHJhZyBhbmQgZHJvcCByZWxhdGl2ZSB0byBpdHMgbmV3IHNpYmxpbmdzICovXHJcbiAgIG5ld0luZGV4OiBudW1iZXI7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRyZWVTZXJ2aWNlIHtcclxuICAgcHVibGljIHJlYWRvbmx5IGNoYW5nZXMkOiBTdWJqZWN0PG51bGw+O1xyXG4gICBwdWJsaWMgcmVhZG9ubHkgZHJvcHMkOiBTdWJqZWN0PFRyZWVEcm9wPjtcclxuICAgcHJpdmF0ZSBob3N0OiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG4gICBwdWJsaWMgdHJlZURhdGE6IExpbWJsZVRyZWVEYXRhIHwgdW5kZWZpbmVkO1xyXG4gICBwcml2YXRlIHVuY3V0RGF0YTogTGltYmxlVHJlZURhdGEgfCB1bmRlZmluZWQ7XHJcbiAgIHB1YmxpYyB0cmVlT3B0aW9uczogUHJvY2Vzc2VkT3B0aW9ucyB8IHVuZGVmaW5lZDtcclxuICAgcHVibGljIHRyZWVNb2RlbDogQnJhbmNoPGFueT47XHJcbiAgIHByaXZhdGUgcGxhY2Vob2xkZXI6IGJvb2xlYW47XHJcbiAgIHB1YmxpYyBjYXB0dXJlZDogYm9vbGVhbjtcclxuICAgcHVibGljIHJlYWRvbmx5IGNsZWFudXBTaWduYWwkOiBTdWJqZWN0PG51bGw+O1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50Q3JlYXRvclNlcnZpY2U6IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU2VydmljZTogRHJvcFpvbmVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWdTdGF0ZVNlcnZpY2U6IERyYWdTdGF0ZVNlcnZpY2VcclxuICAgKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlcyQgPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgICB0aGlzLmRyb3BzJCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgIHRoaXMudHJlZU1vZGVsID0gbmV3IEJyYW5jaChudWxsKTtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhcHR1cmVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2xlYW51cFNpZ25hbCQgPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgICB0aGlzLmNsZWFudXBTaWduYWwkLnBpcGUoZGVib3VuY2VUaW1lKDUpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICB0aGlzLmNsZWFudXAoKTtcclxuICAgICAgfSk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcm9wKHNvdXJjZTogQnJhbmNoPGFueT4sIHRhcmdldENvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcykge1xyXG4gICAgICAvL3ByZXBcclxuICAgICAgY29uc3Qgc291cmNlUGFyZW50ID0gc291cmNlLmdldFBhcmVudCgpO1xyXG4gICAgICBpZiAoc291cmNlUGFyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbid0IGRyb3Agcm9vdCBvZiB0cmVlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNvdXJjZUluZGV4ID0gc291cmNlLmdldEluZGV4KCk7XHJcbiAgICAgIGlmIChzb3VyY2VJbmRleCA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZUluZGV4ID09PSBudWxsKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBtb3ZlIHRoZSBoaWRkZW4gcm9vdCBub2RlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB0YXJnZXRQYXJlbnRDb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXM7XHJcbiAgICAgIGxldCBuZXdJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICB0YXJnZXRQYXJlbnRDb29yZGluYXRlcyA9IFtdO1xyXG4gICAgICAgICBuZXdJbmRleCA9IDA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIHRhcmdldFBhcmVudENvb3JkaW5hdGVzID0gWy4uLnRhcmdldENvb3JkaW5hdGVzXTtcclxuICAgICAgICAgbmV3SW5kZXggPSB0YXJnZXRQYXJlbnRDb29yZGluYXRlcy5wb3AoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobmV3SW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgY29vcmRpbmF0ZXMgYXJlIGVtcHR5XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHRoaXMudHJlZU1vZGVsLmdldERlc2NlbmRhbnQoXHJcbiAgICAgICAgIHRhcmdldFBhcmVudENvb3JkaW5hdGVzXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0YXJnZXRQYXJlbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZ2V0IHRvIHRhcmdldFwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRyb3Bab25lU2VydmljZS5nZXREcm9wWm9uZSh0YXJnZXRDb29yZGluYXRlcyk7XHJcbiAgICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGFyZ2V0Py5nZXRMb2NhdGlvbigpLmluc2VydEluZGV4O1xyXG4gICAgICBjb25zdCB0YXJnZXRIb3N0ID0gdGFyZ2V0Py5nZXRIb3N0KCk7XHJcbiAgICAgIGNvbnN0IHNvdXJjZUhvc3QgPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0RGF0YSgpPy5wYXJlbnRDb250YWluZXI7XHJcbiAgICAgIHRoaXMucmVtb3ZlUGxhY2Vob2xkZXIoKTtcclxuICAgICAgLy9QdWJsaXNoIGRyb3AgZGF0YVxyXG4gICAgICB0aGlzLmRyb3BzJC5uZXh0KHtcclxuICAgICAgICAgdGFyZ2V0OiBzb3VyY2UuZGF0YSxcclxuICAgICAgICAgb2xkUGFyZW50OiBzb3VyY2VQYXJlbnQuZGF0YSBhcyBMaW1ibGVUcmVlTm9kZSxcclxuICAgICAgICAgb2xkSW5kZXg6IHNvdXJjZUluZGV4LFxyXG4gICAgICAgICBuZXdQYXJlbnQ6IHRhcmdldFBhcmVudC5kYXRhLFxyXG4gICAgICAgICBuZXdJbmRleDogbmV3SW5kZXhcclxuICAgICAgfSk7XHJcbiAgICAgIC8vQ2hhbmdlIHRoZSB0cmVlTW9kZWxcclxuICAgICAgdGFyZ2V0UGFyZW50Lmluc2VydENoaWxkKHNvdXJjZSwgbmV3SW5kZXgpO1xyXG4gICAgICAvL1ByZXBhcmUgdG8gdXBkYXRlIHRoZSB2aWV3XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgdGFyZ2V0SG9zdCA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHNvdXJjZUhvc3QgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICB0YXJnZXRJbmRleCA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgICAvL0hpdHRpbmcgdGhpcyBtZWFucyB0aGVyZSBpcyBhIGJ1ZywgYnV0IG5vdCBhIGZhdGFsIG9uZS5cclxuICAgICAgICAgLy9KdXN0IHJlbmRlciB0aGUgd2hvbGUgdHJlZSBhZ2Fpbi5cclxuICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBcIkNvdWxkIG5vdCBwZXJmb3JtIGEgcHJlY2lzZSB1cGRhdGUuIFJlLXJlbmRlcmluZyB0aGUgZW50aXJlIHRyZWUgaW5zdGVhZFwiXHJcbiAgICAgICAgICk7XHJcbiAgICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgICAgIHRoaXMuY2hhbmdlcyQubmV4dChudWxsKTtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIC8vVXBkYXRlIHRoZSB2aWV3XHJcbiAgICAgIGNvbnN0IG5vZGVzSW5Tb3VyY2UgPSBzb3VyY2VIb3N0Lmxlbmd0aDtcclxuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRDcmVhdG9yU2VydmljZS5hcHBlbmRDb21wb25lbnQoXHJcbiAgICAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICAgICB0YXJnZXRIb3N0LFxyXG4gICAgICAgICBuZXdJbmRleFxyXG4gICAgICApO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYnJhbmNoID0gc291cmNlO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFyZW50SG9zdCA9IHRhcmdldEhvc3Q7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgdGFyZ2V0SW5kZXggPCBzb3VyY2VJbmRleCAmJlxyXG4gICAgICAgICBzb3VyY2VIb3N0Lmxlbmd0aCA+IG5vZGVzSW5Tb3VyY2UgJiZcclxuICAgICAgICAgYXJyYXlzQXJlRXF1YWwoc291cmNlUGFyZW50LmdldENvb3JkaW5hdGVzKCksIHRhcmdldFBhcmVudENvb3JkaW5hdGVzKVxyXG4gICAgICApIHtcclxuICAgICAgICAgc291cmNlSG9zdC5yZW1vdmUoc291cmNlSW5kZXggKyAxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgc291cmNlSG9zdC5yZW1vdmUoc291cmNlSW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2xlYW51cFNpZ25hbCQubmV4dChudWxsKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldFBsYWNlaG9sZGVyKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcclxuICAgfVxyXG5cclxuICAgLyoqIEluaXRpYWxpemVzIHRoZSBzZXJ2aWNlIGFuZCByZW5kZXJzIHRoZSB0cmVlLlxyXG4gICAgKiBAcGFyYW0gaG9zdCAtIFRoZSBWaWV3Q29udGFpbmVyUmVmIGludG8gd2hpY2ggdGhlIHRyZWUgd2lsbCBiZSByZW5kZXJlZC5cclxuICAgICogQHBhcmFtIGRhdGEgLSBUaGUgZGF0YSBhcnJheSB0aGF0IHdhcyBwYXNzZWQgaW4gdG8gTGltYmxlVHJlZVJvb3QsIHdoaWNoIGlzXHJcbiAgICAqIHRoZSB1c2VycycgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyZWVcclxuICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIGluIHRvIExpbWJsZVRyZWVSb290XHJcbiAgICAqL1xyXG4gICBwdWJsaWMgaW5pdChcclxuICAgICAgaG9zdDogVmlld0NvbnRhaW5lclJlZixcclxuICAgICAgZGF0YTogTGltYmxlVHJlZURhdGEsXHJcbiAgICAgIG9wdGlvbnM/OiBMaW1ibGVUcmVlT3B0aW9ucyxcclxuICAgICAgaXRlbXNQZXJQYWdlPzogbnVtYmVyLFxyXG4gICAgICBwYWdlPzogbnVtYmVyXHJcbiAgICk6IHZvaWQge1xyXG4gICAgICB0aGlzLmhvc3QgPSBob3N0O1xyXG4gICAgICB0aGlzLnVuY3V0RGF0YSA9IGRhdGE7XHJcbiAgICAgIHRoaXMudHJlZU9wdGlvbnMgPSB0aGlzLnByb2Nlc3NPcHRpb25zKG9wdGlvbnMsIGl0ZW1zUGVyUGFnZSwgcGFnZSk7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVPcHRpb25zLmxpc3RNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgIGxldCBzdGFydCA9XHJcbiAgICAgICAgICAgIHRoaXMudHJlZU9wdGlvbnMuaXRlbXNQZXJQYWdlICogKHRoaXMudHJlZU9wdGlvbnMucGFnZSAtIDEpO1xyXG4gICAgICAgICBpZiAoaXNOYU4oc3RhcnQpKSB7XHJcbiAgICAgICAgICAgIC8vVGhpcyBjYXRjaGVzIHRoZSBjYXNlIHdoZXJlIGl0ZW1zUGVyUGFnZSB3YXMgbm90IHBhc3NlZCBieSB0aGUgdXNlcixcclxuICAgICAgICAgICAgLy9jYXVzaW5nIGBzdGFydGAgdG8gZXF1YWwgaW5maW5pdHkqMCwgd2hpY2ggaXMgTmFOLlxyXG4gICAgICAgICAgICBzdGFydCA9IDA7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnRyZWVPcHRpb25zLml0ZW1zUGVyUGFnZTtcclxuICAgICAgICAgdGhpcy50cmVlRGF0YSA9IHRoaXMudW5jdXREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID0gdGhpcy51bmN1dERhdGE7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlbW92ZVBsYWNlaG9sZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVySW5kZXggPSB0aGlzLnRyZWVNb2RlbC5nZXRDaGlsZHJlbigpLmxlbmd0aCAtIDE7XHJcbiAgICAgIGlmIChwbGFjZWhvbGRlckluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICB0aGlzLnRyZWVNb2RlbC5yZW1vdmVDaGlsZChwbGFjZWhvbGRlckluZGV4KTsgLy9yZW1vdmUgdGhlIHBsYWNlaG9sZGVyXHJcbiAgICAgICAgIHRoaXMuaG9zdD8ucmVtb3ZlKHBsYWNlaG9sZGVySW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBjbGVhbnVwKCk6IHZvaWQge1xyXG4gICAgICB0aGlzLnJlYnVpbGRUcmVlRGF0YSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZXMkLm5leHQobnVsbCk7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnVwZGF0ZSgpO1xyXG4gICB9XHJcblxyXG4gICAvKiogUmVuZGVycyB0aGUgZW50aXJlIHRyZWUgZnJvbSByb290IHRvIGxlYXZlcyAqL1xyXG4gICBwcml2YXRlIHJlbmRlcigpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmhvc3QgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgdGhpcy50cmVlT3B0aW9ucyA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmVlTW9kZWwgbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaG9zdC5jbGVhcigpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5yZXN0YXJ0KCk7XHJcbiAgICAgIC8vV2UgZG9uJ3QgbmVlZCB0byBjYWxsIHJlbW92ZVBsYWNlaG9sZGVyIGhlcmUgYmVjYXVzZSB3ZSBhbHJlYWR5IGNsZWFyZWQgaXQgYXdheSBpbiB0aGUgcHJlY2VkaW5nIGxpbmVzLiBXZSBqdXN0IGhhdmUgdG8gdGVsbCB0aGUgc2VydmljZSB0aGF0IGl0IGlzIGRvbmUuXHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcclxuICAgICAgdGhpcy50cmVlTW9kZWwgPSBuZXcgQnJhbmNoKG51bGwpO1xyXG4gICAgICBpZiAodGhpcy50cmVlRGF0YS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgLy9UcmVlIGlzIGVtcHR5LCBidXQgd2UgaGF2ZSB0byB0byBoYXZlIHNvbWV0aGluZyB0aGVyZSBzbyBvdGhlciB0cmVlcycgaXRlbXMgY2FuIGJlIGRyb3BwZWQgaW50byBpdFxyXG4gICAgICAgICB0aGlzLnVzZVBsYWNlaG9sZGVyKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLnRyZWVEYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJyYW5jaCA9IG5ldyBCcmFuY2gobm9kZSk7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZU1vZGVsLmFwcGVuZENoaWxkKGJyYW5jaCk7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgdGhpcy50cmVlTW9kZWwuZ2V0Q2hpbGRyZW4oKSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlTm9kZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICB0aGlzLmhvc3RcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IGJyYW5jaDtcclxuICAgICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBhcmVudEhvc3QgPSB0aGlzLmhvc3Q7XHJcbiAgICAgICAgICAgIC8vVGhlIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IHdpbGwgKGluZGlyZWN0bHkpIGNhbGwgdGhlIGByZW5kZXJCcmFuY2hgIG1ldGhvZCBvZiB0aGlzIHNlcnZpY2UgdG8gcmVuZGVyXHJcbiAgICAgICAgICAgIC8vaXRzIG93biBjaGlsZHJlblxyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdHJlZURhdGEgPSB0aGlzLnRyZWVEYXRhO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgaWYgKHRoaXMudHJlZU9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUcmVlTW9kZWwgbm90IGluaXRpYWxpemVkXCIpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMuY2hhbmdlcyQubmV4dChudWxsKTtcclxuICAgICAgICAgaWYgKHRoaXMudHJlZURhdGEgIT09IHRyZWVEYXRhKSB7XHJcbiAgICAgICAgICAgIC8vVGhlIHRyZWUgc2VydmljZSBoYXMgYmVlbiByZWluaXRpYWxpemVkIHNpbmNlIHRoaXMgdGltZW91dCB3YXMgY2FsbGVkLlxyXG4gICAgICAgICAgICAvL1RoZSBuZXcgdHJlZSBkYXRhIHdpbGwganVzdCBvdmVyd3JpdGUgdGhlIGRyb3Agem9uZSBkYXRhIGFueXdheSwgc29cclxuICAgICAgICAgICAgLy93ZSBjYW4gc2tpcCB0aGUgZHJvcCB6b25lIGluaXRpYWxpemF0aW9uIG9uIHRoaXMgcm91bmQgZm9yIGVmZmljaWVuY3lcclxuICAgICAgICAgICAgLy9hbmQgYWxzbyB0byBhdm9pZCBzb21lIHBvc3NpYmxlICg/KSByYWNlIGNvbmRpdGlvbnNcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmluaXQodGhpcy50cmVlTW9kZWwsIHRoaXMudHJlZU9wdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICAgfVxyXG5cclxuICAgLyoqIFJlbmRlcnMgYSBicmFuY2ggb2YgdGhlIHRyZWUgYW5kIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMgKi9cclxuICAgcHVibGljIHJlbmRlckJyYW5jaChob3N0OiBWaWV3Q29udGFpbmVyUmVmLCBicmFuY2g6IEJyYW5jaDxhbnk+KSB7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVNb2RlbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgaG9zdC5jbGVhcigpO1xyXG4gICAgICBicmFuY2guY2xlYXJDaGlsZHJlbigpO1xyXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYnJhbmNoLmRhdGE/Lm5vZGVzID8/IFtdKSB7XHJcbiAgICAgICAgIGNvbnN0IG5ld0JyYW5jaCA9IG5ldyBCcmFuY2gobm9kZSk7XHJcbiAgICAgICAgIGJyYW5jaC5hcHBlbmRDaGlsZChuZXdCcmFuY2gpO1xyXG4gICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlTm9kZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBob3N0XHJcbiAgICAgICAgICk7XHJcbiAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5icmFuY2ggPSBuZXdCcmFuY2g7XHJcbiAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5wYXJlbnRIb3N0ID0gaG9zdDtcclxuICAgICAgICAgLy9UaGUgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgd2lsbCAoaW5kaXJlY3RseSkgY2FsbCB0aGUgYHJlbmRlckJyYW5jaGAgbWV0aG9kIG9mIHRoaXMgc2VydmljZSB0byByZW5kZXJcclxuICAgICAgICAgLy9pdHMgb3duIGNoaWxkcmVuXHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHVibGljIHVzZVBsYWNlaG9sZGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5wbGFjZWhvbGRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaG9zdCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XHJcbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyTm9kZTogTGltYmxlVHJlZU5vZGUgPSB7XHJcbiAgICAgICAgIGNvbXBvbmVudDogeyBjbGFzczogTGltYmxlVHJlZVBsYWNlaG9sZGVyQ29tcG9uZW50IH1cclxuICAgICAgfTtcclxuICAgICAgY29uc3QgYnJhbmNoID0gbmV3IEJyYW5jaChwbGFjZWhvbGRlck5vZGUpO1xyXG4gICAgICB0aGlzLnRyZWVNb2RlbC5hcHBlbmRDaGlsZChicmFuY2gpO1xyXG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlTm9kZUNvbXBvbmVudD4oXHJcbiAgICAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICAgICB0aGlzLmhvc3RcclxuICAgICAgKTtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IGJyYW5jaDtcclxuICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBhcmVudEhvc3QgPSB0aGlzLmhvc3Q7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgcHJvY2Vzc09wdGlvbnMoXHJcbiAgICAgIG9wdGlvbnM6IExpbWJsZVRyZWVPcHRpb25zID0ge30sXHJcbiAgICAgIGl0ZW1zUGVyUGFnZTogbnVtYmVyID0gSW5maW5pdHksXHJcbiAgICAgIHBhZ2U6IG51bWJlciA9IDFcclxuICAgKTogUHJvY2Vzc2VkT3B0aW9ucyB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgb3B0aW9ucy5saXN0TW9kZSA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICBvcHRpb25zLmFsbG93TmVzdGluZyAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgIG9wdGlvbnMuYWxsb3dOZXN0aW5nICE9PSBmYWxzZVxyXG4gICAgICApIHtcclxuICAgICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICAgICBcIlRoZSB2YWx1ZSBvZiBgYWxsb3dOZXN0aW5nYCB3aWxsIGJlIGlnbm9yZWQ7IGl0IG11c3QgYmUgZmFsc2Ugd2hlbiBgbGlzdE1vZGVgIGlzIHRydWVcIlxyXG4gICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogUHJvY2Vzc2VkT3B0aW9uc0Jhc2UgPSB7XHJcbiAgICAgICAgIGRlZmF1bHRDb21wb25lbnQ6IG9wdGlvbnMuZGVmYXVsdENvbXBvbmVudCxcclxuICAgICAgICAgaW5kZW50OiBvcHRpb25zLmluZGVudCA/PyBJTkRFTlQsXHJcbiAgICAgICAgIGFsbG93TmVzdGluZzpcclxuICAgICAgICAgICAgb3B0aW9ucy5saXN0TW9kZSAhPT0gdHJ1ZSAmJiAob3B0aW9ucy5hbGxvd05lc3RpbmcgPz8gdHJ1ZSksXHJcbiAgICAgICAgIGFsbG93RHJhZ2dpbmc6IG9wdGlvbnMuYWxsb3dEcmFnZ2luZyA/PyB0cnVlLFxyXG4gICAgICAgICBhbGxvd0Ryb3A6IG9wdGlvbnMuYWxsb3dEcm9wID8/ICgoKSA9PiB0cnVlKSxcclxuICAgICAgICAgbGlzdE1vZGU6IG9wdGlvbnMubGlzdE1vZGUgPz8gZmFsc2UsXHJcbiAgICAgICAgIGl0ZW1zUGVyUGFnZTogb3B0aW9ucy5saXN0TW9kZSA/IGl0ZW1zUGVyUGFnZSA6IHVuZGVmaW5lZCxcclxuICAgICAgICAgcGFnZTogb3B0aW9ucy5saXN0TW9kZSA/IHBhZ2UgOiB1bmRlZmluZWRcclxuICAgICAgfTtcclxuICAgICAgcmV0dXJuIHJlc3VsdCBhcyBQcm9jZXNzZWRPcHRpb25zO1xyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlYnVpbGRUcmVlRGF0YSgpOiB2b2lkIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLnVuY3V0RGF0YSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMudHJlZURhdGEgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICB0aGlzLnRyZWVPcHRpb25zID09PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWUgZGF0YSBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmVlRGF0YS5sZW5ndGggPSAwO1xyXG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiB0aGlzLnRyZWVNb2RlbC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgIHRoaXMudHJlZURhdGEucHVzaCh0aGlzLnJlYnVpbGRCcmFuY2goYnJhbmNoKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudHJlZU9wdGlvbnMubGlzdE1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgbGV0IHN0YXJ0ID1cclxuICAgICAgICAgICAgdGhpcy50cmVlT3B0aW9ucy5pdGVtc1BlclBhZ2UgKiAodGhpcy50cmVlT3B0aW9ucy5wYWdlIC0gMSk7XHJcbiAgICAgICAgIGlmIChpc05hTihzdGFydCkpIHtcclxuICAgICAgICAgICAgLy9UaGlzIGNhdGNoZXMgdGhlIGNhc2Ugd2hlcmUgaXRlbXNQZXJQYWdlIHdhcyBub3QgcGFzc2VkIGJ5IHRoZSB1c2VyLFxyXG4gICAgICAgICAgICAvL2NhdXNpbmcgYHN0YXJ0YCB0byBlcXVhbCBpbmZpbml0eSowLCB3aGljaCBpcyBOYU4uXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gMDtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMudHJlZU9wdGlvbnMuaXRlbXNQZXJQYWdlO1xyXG4gICAgICAgICB0aGlzLnVuY3V0RGF0YS5zcGxpY2UoXHJcbiAgICAgICAgICAgIHN0YXJ0LFxyXG4gICAgICAgICAgICB0aGlzLnRyZWVPcHRpb25zLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgLi4udGhpcy50cmVlRGF0YVxyXG4gICAgICAgICApO1xyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID0gdGhpcy51bmN1dERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIHRoaXMudW5jdXREYXRhID0gdGhpcy50cmVlRGF0YTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlYnVpbGRCcmFuY2goYnJhbmNoOiBCcmFuY2g8YW55Pik6IExpbWJsZVRyZWVOb2RlIHtcclxuICAgICAgY29uc3QgdGVtcDogTGltYmxlVHJlZU5vZGUgPSBicmFuY2guZGF0YTtcclxuICAgICAgdGVtcC5ub2RlcyA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJyYW5jaC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgIHRlbXAubm9kZXMucHVzaCh0aGlzLnJlYnVpbGRCcmFuY2goY2hpbGQpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGVtcDtcclxuICAgfVxyXG59XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUduRSxPQUFPLEVBQUUsTUFBTSxFQUFxQixNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBRTlHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBOEQ5QyxnREFBZ0Q7QUFDaEQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQWtEekIsTUFBTSxPQUFPLFdBQVc7SUFhckIsWUFDb0IsdUJBQWdELEVBQ2hELGVBQWdDLEVBQ2hDLGdCQUFrQztRQUZsQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBRW5ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUss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dGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50Q3JlYXRvclNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9jb21wb25lbnQtY3JlYXRvci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERyb3Bab25lU2VydmljZSB9IGZyb20gXCIuL2Ryb3Atem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJyYW5jaCwgQnJhbmNoQ29vcmRpbmF0ZXMgfSBmcm9tIFwiLi4vY2xhc3Nlcy9CcmFuY2hcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtbm9kZS9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtcGxhY2Vob2xkZXIvbGltYmxlLXRyZWUtcGxhY2Vob2xkZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERyYWdTdGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGFycmF5c0FyZUVxdWFsIH0gZnJvbSBcIi4uL3V0aWxcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vKiogQW4gb2JqZWN0IGRlc2NyaWJpbmcgYSBub2RlIG9mIHRoZSB0cmVlICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGltYmxlVHJlZU5vZGUge1xyXG4gICAvKiogQSBsaXN0IG9mIG5vZGVzIHRvIGJlIHJlbmRlcmVkIFwidW5kZXJcIiB0aGlzIG9uZSwgb25lIGxldmVsIGRlZXBlciBpbiB0aGUgdHJlZS4gKi9cclxuICAgbm9kZXM/OiBMaW1ibGVUcmVlRGF0YTtcclxuICAgLy8gLyoqIEEgY3VzdG9tIGRhdGEgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgaW50byB0aGUgY29tcG9uZW50IGFzIGFuIGBJbnB1dCgpYCBiaW5kaW5nIGNhbGxlZCBgbm9kZURhdGFgICovXHJcbiAgIC8vIGRhdGE6IHVua25vd247XHJcbiAgIC8qKiBBbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhlIGNvbXBvbmVudCB3aGljaCB3aWxsIHJlcHJlc2VudCB0aGlzIG5vZGUgaW4gdGhlIHZpc3VhbCB0cmVlICovXHJcbiAgIGNvbXBvbmVudD86IENvbXBvbmVudE9iajtcclxuICAgY29sbGFwc2VkPzogYm9vbGVhbjtcclxuICAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xyXG59XHJcblxyXG4vKiogQW4gb2JqZWN0IHRoYXQgdGhlIGxpbWJsZS10cmVlLXJvb3QgY29tcG9uZW50IHVzZXMgdG8gYnVpbGQgdGhlIHRyZWUgKi9cclxuZXhwb3J0IHR5cGUgTGltYmxlVHJlZURhdGEgPSBBcnJheTxMaW1ibGVUcmVlTm9kZT47XHJcblxyXG4vKiogQSBncm91cCBvZiBzZXR0aW5ncyBmb3IgY2hhbmdpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRyZWUgKi9cclxuZXhwb3J0IGludGVyZmFjZSBMaW1ibGVUcmVlT3B0aW9ucyB7XHJcbiAgIC8qKiBUaGUgY29tcG9uZW50IG9iamVjdCB0byB1c2UgaWYgb25lIGlzIG5vdCBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBub2RlICovXHJcbiAgIGRlZmF1bHRDb21wb25lbnQ/OiBDb21wb25lbnRPYmo7XHJcbiAgIC8qKiBUaGUgbnVtYmVyIG9mIHBpeGVscyB0byBpbmRlbnQgZWFjaCBsZXZlbCBvZiB0aGUgdHJlZS4gRGVmYXVsdHMgdG8gNDUgKi9cclxuICAgaW5kZW50PzogbnVtYmVyO1xyXG4gICAvKipcclxuICAgICogV2hldGhlciB0byBhbGxvdyBcIm5lc3RpbmdcIiAocGxhY2luZyBhIG5vZGUgb25lIGxldmVsIGRlZXBlciB0aGFuIGN1cnJlbnRseSBleGlzdHMgb24gdGhlIGJyYW5jaCkuXHJcbiAgICAqIFdoZW4gdGhpcyBpcyBhIGJvb2xlYW4sIGl0IGFwcGxpZXMgdG8gYWxsIG5vZGVzLiBXaGVuIHRoaXMgaXMgYSBmdW5jdGlvbiwgdGhlIG5vZGUgaW4gcXVlc3Rpb25cclxuICAgICogaXMgcGFzc2VkIGluLiBEZWZhdWx0cyB0byB0cnVlLlxyXG4gICAgKi9cclxuICAgYWxsb3dOZXN0aW5nPzogYm9vbGVhbiB8ICgobm9kZURhdGE6IExpbWJsZVRyZWVOb2RlKSA9PiBib29sZWFuKTtcclxuICAgLyoqXHJcbiAgICAqIFdoZXRoZXIgdG8gYWxsb3cgYSBub2RlIHRvIGJlIGRyYWdnZWQuIFdoZW4gdGhpcyBpcyBhIGJvb2xlYW4sIGl0IGFwcGxpZXMgdG8gYWxsIG5vZGVzLiBXaGVuIHRoaXNcclxuICAgICogaXMgYSBmdW5jdGlvbiwgdGhlIG5vZGUgaW4gcXVlc3Rpb24gaXMgcGFzc2VkIGluLiBEZWZhdWx0cyB0byB0cnVlLlxyXG4gICAgKi9cclxuICAgYWxsb3dEcmFnZ2luZz86IGJvb2xlYW4gfCAoKG5vZGVEYXRhOiBMaW1ibGVUcmVlTm9kZSkgPT4gYm9vbGVhbik7XHJcbiAgIC8qKiBBIGNhbGxiYWNrIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc291cmNlTm9kZSBjYW4gYmUgZHJvcHBlZCBhdCBhIHBhcnRpY3VsYXIgbG9jYXRpb24uICovXHJcbiAgIGFsbG93RHJvcD86IChcclxuICAgICAgc291cmNlTm9kZTogTGltYmxlVHJlZU5vZGUsXHJcbiAgICAgIHByb3Bvc2VkUGFyZW50OiBMaW1ibGVUcmVlTm9kZSB8IG51bGwsXHJcbiAgICAgIHByb3Bvc2VkSW5kZXg6IG51bWJlclxyXG4gICApID0+IGJvb2xlYW47XHJcbiAgIC8qKiBXaGVuIHNldCB0byB0cnVlLCBsaXN0IG1vZGUgd2lsbCBlbmZvcmNlIGEgZmxhdCB0cmVlIHN0cnVjdHVyZSwgbWVhbmluZyB0aGVyZVxyXG4gICAgKiBjYW4gb25seSBiZSBvbmUgbGV2ZWwgb2YgdGhlIHRyZWUuIGBhbGxvd05lc3RpbmdgIGlzIGF1dG9tYXRpY2FsbHkgc2V0IHRvIGBmYWxzZWBcclxuICAgICogYW5kIGFueSBjaGlsZHJlbiB3aWxsIGJlIGRlbGV0ZWQuXHJcbiAgICAqXHJcbiAgICAqIFRoaXMgbW9kZSBjYW4gYmUgdXNlZCB3aGVuIHRoZSBzYW1lIGR5bmFtaWMgZHJhZyBhbmQgZHJvcCBmdW5jdGlvbmFsaXR5IG9mXHJcbiAgICAqIHRoZSB0cmVlIGlzIGRlc2lyZWQsIGJ1dCB0aGUgdHJlZSBzdHJ1Y3R1cmUgaXRzZWxmIGlzIG5vdCBuZWNlc3NhcnkuIFRoaXNcclxuICAgICogYWxzbyBvcGVucyB1cCB0aGUgcGFnaW5hdGlvbiBBUEkgb24gdGhlIGxpbWJsZS10cmVlLXJvb3QgY29tcG9uZW50LiBTZWUgdGhlXHJcbiAgICAqIFJFQURNRSBmb3IgZGV0YWlscyBvbiBwYWdpbmF0aW9uLlxyXG4gICAgKi9cclxuICAgbGlzdE1vZGU/OiBib29sZWFuO1xyXG59XHJcblxyXG4vKiogQW4gb2JqZWN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkIGFuZCBpdHMgYmluZGluZ3MgKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRPYmoge1xyXG4gICAvKiogVGhlIGNvbXBvbmVudCBjbGFzcyAqL1xyXG4gICBjbGFzczogVHlwZTx1bmtub3duPjtcclxuICAgLyoqIFRoZSBiaW5kaW5ncyAoaW5wdXRzIGFuZCBvdXRwdXRzKSBvZiB0aGUgY2xhc3MgKi9cclxuICAgYmluZGluZ3M/OiB7XHJcbiAgICAgIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcclxuICAgfTtcclxufVxyXG5cclxuLyoqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYGluZGVudGAgb3B0aW9uICovXHJcbmV4cG9ydCBjb25zdCBJTkRFTlQgPSA0NTtcclxuXHJcbi8qKiBBbiBvcHRpb25zIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzIGxvYWRlZCB3aGVyZSBhcHBsaWNhYmxlICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc2VkT3B0aW9uc0Jhc2UgZXh0ZW5kcyBMaW1ibGVUcmVlT3B0aW9ucyB7XHJcbiAgIGRlZmF1bHRDb21wb25lbnQ/OiBDb21wb25lbnRPYmo7XHJcbiAgIGluZGVudDogbnVtYmVyO1xyXG4gICBhbGxvd05lc3Rpbmc6IGJvb2xlYW4gfCAoKG5vZGVEYXRhOiBMaW1ibGVUcmVlTm9kZSkgPT4gYm9vbGVhbik7XHJcbiAgIGFsbG93RHJhZ2dpbmc6IGJvb2xlYW4gfCAoKG5vZGVEYXRhOiBMaW1ibGVUcmVlTm9kZSkgPT4gYm9vbGVhbik7XHJcbiAgIGFsbG93RHJvcDogKFxyXG4gICAgICBzb3VyY2VOb2RlOiBMaW1ibGVUcmVlTm9kZSxcclxuICAgICAgcHJvcG9zZWRQYXJlbnQ6IExpbWJsZVRyZWVOb2RlIHwgbnVsbCxcclxuICAgICAgcHJvcG9zZWRJbmRleDogbnVtYmVyXHJcbiAgICkgPT4gYm9vbGVhbjtcclxuICAgbGlzdE1vZGU6IGJvb2xlYW47XHJcbiAgIGl0ZW1zUGVyUGFnZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xyXG4gICBwYWdlOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc2VkT3B0aW9uc1dpdGhQYWdpbmF0aW9uIGV4dGVuZHMgUHJvY2Vzc2VkT3B0aW9uc0Jhc2Uge1xyXG4gICBsaXN0TW9kZTogdHJ1ZTtcclxuICAgaXRlbXNQZXJQYWdlOiBudW1iZXI7XHJcbiAgIHBhZ2U6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRPcHRpb25zV2l0aG91dFBhZ2luYXRpb25cclxuICAgZXh0ZW5kcyBQcm9jZXNzZWRPcHRpb25zQmFzZSB7XHJcbiAgIGxpc3RNb2RlOiBmYWxzZTtcclxuICAgaXRlbXNQZXJQYWdlOiB1bmRlZmluZWQ7XHJcbiAgIHBhZ2U6IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUHJvY2Vzc2VkT3B0aW9ucyA9XHJcbiAgIHwgUHJvY2Vzc2VkT3B0aW9uc1dpdGhQYWdpbmF0aW9uXHJcbiAgIHwgUHJvY2Vzc2VkT3B0aW9uc1dpdGhvdXRQYWdpbmF0aW9uO1xyXG5cclxuLyoqIHRoZSB2YWx1ZSBlbWl0dGVkIGZyb20gdGhlIHJvb3QgY29tcG9uZW50IGFmdGVyIGEgbm9kZSBpcyBkcm9wcGVkICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHJlZURyb3Age1xyXG4gICAvKiogVGhlIG5vZGUgdGhhdCB3YXMgZHJvcHBlZCAqL1xyXG4gICB0YXJnZXQ6IExpbWJsZVRyZWVOb2RlO1xyXG4gICAvKiogdGhlIHRhcmdldCdzIHBhcmVudCBiZWZvcmUgdGhlIGRyYWcgYW5kIGRyb3AsIG9yIG51bGwgaWYgaXQgd2FzIGEgdG9wLWxldmVsIG5vZGUgKi9cclxuICAgb2xkUGFyZW50OiBMaW1ibGVUcmVlTm9kZSB8IG51bGw7XHJcbiAgIC8qKiB0aGUgaW5kZXggb2YgdGhlIG5vZGUgYmVmb3JlIHRoZSBkcmFnIGFuZCBkcm9wIHJlbGF0aXZlIHRvIGl0cyBvbGQgc2libGluZ3MgKi9cclxuICAgb2xkSW5kZXg6IG51bWJlcjtcclxuICAgLyoqIHRoZSB0YXJnZXQncyBwYXJlbnQgYWZ0ZXIgdGhlIGRyYWcgYW5kIGRyb3AsIG9yIG51bGwgaWYgaXQgaXMgbm93IGEgdG9wLWxldmVsIG5vZGUgKi9cclxuICAgbmV3UGFyZW50OiBMaW1ibGVUcmVlTm9kZSB8IG51bGw7XHJcbiAgIC8qKiB0aGUgaW5kZXggb2YgdGhlIG5vZGUgYWZ0ZXIgdGhlIGRyYWcgYW5kIGRyb3AgcmVsYXRpdmUgdG8gaXRzIG5ldyBzaWJsaW5ncyAqL1xyXG4gICBuZXdJbmRleDogbnVtYmVyO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUcmVlU2VydmljZSB7XHJcbiAgIHB1YmxpYyByZWFkb25seSBjaGFuZ2VzJDogU3ViamVjdDxudWxsPjtcclxuICAgcHVibGljIHJlYWRvbmx5IGRyb3BzJDogU3ViamVjdDxUcmVlRHJvcD47XHJcbiAgIHByaXZhdGUgaG9zdDogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgcHVibGljIHRyZWVEYXRhOiBMaW1ibGVUcmVlRGF0YSB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSB1bmN1dERhdGE6IExpbWJsZVRyZWVEYXRhIHwgdW5kZWZpbmVkO1xyXG4gICBwdWJsaWMgdHJlZU9wdGlvbnM6IFByb2Nlc3NlZE9wdGlvbnMgfCB1bmRlZmluZWQ7XHJcbiAgIHB1YmxpYyB0cmVlTW9kZWw6IEJyYW5jaDxhbnk+O1xyXG4gICBwcml2YXRlIHBsYWNlaG9sZGVyOiBib29sZWFuO1xyXG4gICBwdWJsaWMgY2FwdHVyZWQ6IGJvb2xlYW47XHJcbiAgIHB1YmxpYyByZWFkb25seSBjbGVhbnVwU2lnbmFsJDogU3ViamVjdDxudWxsPjtcclxuICAgcHJpdmF0ZSBzeW5jaHJvbml6ZXI6IGJvb2xlYW47XHJcblxyXG4gICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjb21wb25lbnRDcmVhdG9yU2VydmljZTogQ29tcG9uZW50Q3JlYXRvclNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVTZXJ2aWNlOiBEcm9wWm9uZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZ1N0YXRlU2VydmljZTogRHJhZ1N0YXRlU2VydmljZVxyXG4gICApIHtcclxuICAgICAgdGhpcy5jaGFuZ2VzJCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgIHRoaXMuZHJvcHMkID0gbmV3IFN1YmplY3QoKTtcclxuICAgICAgdGhpcy50cmVlTW9kZWwgPSBuZXcgQnJhbmNoKG51bGwpO1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FwdHVyZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jbGVhbnVwU2lnbmFsJCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgIHRoaXMuY2xlYW51cFNpZ25hbCQucGlwZShkZWJvdW5jZVRpbWUoNSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgIHRoaXMuY2xlYW51cCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zeW5jaHJvbml6ZXIgPSBmYWxzZTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGRyb3Aoc291cmNlOiBCcmFuY2g8YW55PiwgdGFyZ2V0Q29vcmRpbmF0ZXM6IEJyYW5jaENvb3JkaW5hdGVzKSB7XHJcbiAgICAgIC8vcHJlcFxyXG4gICAgICBjb25zdCBzb3VyY2VQYXJlbnQgPSBzb3VyY2UuZ2V0UGFyZW50KCk7XHJcbiAgICAgIGlmIChzb3VyY2VQYXJlbnQgPT09IG51bGwpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3QgZHJvcCByb290IG9mIHRyZWVcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc291cmNlSW5kZXggPSBzb3VyY2UuZ2V0SW5kZXgoKTtcclxuICAgICAgaWYgKHNvdXJjZUluZGV4ID09PSB1bmRlZmluZWQgfHwgc291cmNlSW5kZXggPT09IG51bGwpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IG1vdmUgdGhlIGhpZGRlbiByb290IG5vZGVcIik7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHRhcmdldFBhcmVudENvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcztcclxuICAgICAgbGV0IG5ld0luZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgIHRhcmdldFBhcmVudENvb3JkaW5hdGVzID0gW107XHJcbiAgICAgICAgIG5ld0luZGV4ID0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgdGFyZ2V0UGFyZW50Q29vcmRpbmF0ZXMgPSBbLi4udGFyZ2V0Q29vcmRpbmF0ZXNdO1xyXG4gICAgICAgICBuZXdJbmRleCA9IHRhcmdldFBhcmVudENvb3JkaW5hdGVzLnBvcCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdJbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRhcmdldCBjb29yZGluYXRlcyBhcmUgZW1wdHlcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdGFyZ2V0UGFyZW50ID0gdGhpcy50cmVlTW9kZWwuZ2V0RGVzY2VuZGFudChcclxuICAgICAgICAgdGFyZ2V0UGFyZW50Q29vcmRpbmF0ZXNcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRhcmdldFBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCBnZXQgdG8gdGFyZ2V0XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmdldERyb3Bab25lKHRhcmdldENvb3JkaW5hdGVzKTtcclxuICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0YXJnZXQ/LmdldExvY2F0aW9uKCkuaW5zZXJ0SW5kZXg7XHJcbiAgICAgIGNvbnN0IHRhcmdldEhvc3QgPSB0YXJnZXQ/LmdldEhvc3QoKTtcclxuICAgICAgY29uc3Qgc291cmNlSG9zdCA9IHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXREYXRhKCk/LnBhcmVudENvbnRhaW5lcjtcclxuICAgICAgdGhpcy5yZW1vdmVQbGFjZWhvbGRlcigpO1xyXG4gICAgICAvL1B1Ymxpc2ggZHJvcCBkYXRhXHJcbiAgICAgIHRoaXMuZHJvcHMkLm5leHQoe1xyXG4gICAgICAgICB0YXJnZXQ6IHNvdXJjZS5kYXRhLFxyXG4gICAgICAgICBvbGRQYXJlbnQ6IHNvdXJjZVBhcmVudC5kYXRhIGFzIExpbWJsZVRyZWVOb2RlLFxyXG4gICAgICAgICBvbGRJbmRleDogc291cmNlSW5kZXgsXHJcbiAgICAgICAgIG5ld1BhcmVudDogdGFyZ2V0UGFyZW50LmRhdGEsXHJcbiAgICAgICAgIG5ld0luZGV4OiBuZXdJbmRleFxyXG4gICAgICB9KTtcclxuICAgICAgLy9DaGFuZ2UgdGhlIHRyZWVNb2RlbFxyXG4gICAgICB0YXJnZXRQYXJlbnQuaW5zZXJ0Q2hpbGQoc291cmNlLCBuZXdJbmRleCk7XHJcbiAgICAgIC8vUHJlcGFyZSB0byB1cGRhdGUgdGhlIHZpZXdcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0YXJnZXRIb3N0ID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgc291cmNlSG9zdCA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRhcmdldEluZGV4ID09PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIC8vSGl0dGluZyB0aGlzIG1lYW5zIHRoZXJlIGlzIGEgYnVnLCBidXQgbm90IGEgZmF0YWwgb25lLlxyXG4gICAgICAgICAvL0p1c3QgcmVuZGVyIHRoZSB3aG9sZSB0cmVlIGFnYWluLlxyXG4gICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIFwiQ291bGQgbm90IHBlcmZvcm0gYSBwcmVjaXNlIHVwZGF0ZS4gUmUtcmVuZGVyaW5nIHRoZSBlbnRpcmUgdHJlZSBpbnN0ZWFkXCJcclxuICAgICAgICAgKTtcclxuICAgICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgICAgICAgdGhpcy5jaGFuZ2VzJC5uZXh0KG51bGwpO1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy9VcGRhdGUgdGhlIHZpZXdcclxuICAgICAgY29uc3Qgbm9kZXNJblNvdXJjZSA9IHNvdXJjZUhvc3QubGVuZ3RoO1xyXG4gICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudChcclxuICAgICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgICAgIHRhcmdldEhvc3QsXHJcbiAgICAgICAgIG5ld0luZGV4XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5icmFuY2ggPSBzb3VyY2U7XHJcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5wYXJlbnRIb3N0ID0gdGFyZ2V0SG9zdDtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0YXJnZXRJbmRleCA8IHNvdXJjZUluZGV4ICYmXHJcbiAgICAgICAgIHNvdXJjZUhvc3QubGVuZ3RoID4gbm9kZXNJblNvdXJjZSAmJlxyXG4gICAgICAgICBhcnJheXNBcmVFcXVhbChzb3VyY2VQYXJlbnQuZ2V0Q29vcmRpbmF0ZXMoKSwgdGFyZ2V0UGFyZW50Q29vcmRpbmF0ZXMpXHJcbiAgICAgICkge1xyXG4gICAgICAgICBzb3VyY2VIb3N0LnJlbW92ZShzb3VyY2VJbmRleCArIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICBzb3VyY2VIb3N0LnJlbW92ZShzb3VyY2VJbmRleCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jbGVhbnVwU2lnbmFsJC5uZXh0KG51bGwpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZ2V0UGxhY2Vob2xkZXIoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gICB9XHJcblxyXG4gICAvKiogSW5pdGlhbGl6ZXMgdGhlIHNlcnZpY2UgYW5kIHJlbmRlcnMgdGhlIHRyZWUuXHJcbiAgICAqIEBwYXJhbSBob3N0IC0gVGhlIFZpZXdDb250YWluZXJSZWYgaW50byB3aGljaCB0aGUgdHJlZSB3aWxsIGJlIHJlbmRlcmVkLlxyXG4gICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIGFycmF5IHRoYXQgd2FzIHBhc3NlZCBpbiB0byBMaW1ibGVUcmVlUm9vdCwgd2hpY2ggaXNcclxuICAgICogdGhlIHVzZXJzJyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZVxyXG4gICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgaW4gdG8gTGltYmxlVHJlZVJvb3RcclxuICAgICovXHJcbiAgIHB1YmxpYyBpbml0KFxyXG4gICAgICBob3N0OiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICBkYXRhOiBMaW1ibGVUcmVlRGF0YSxcclxuICAgICAgb3B0aW9ucz86IExpbWJsZVRyZWVPcHRpb25zLFxyXG4gICAgICBpdGVtc1BlclBhZ2U/OiBudW1iZXIsXHJcbiAgICAgIHBhZ2U/OiBudW1iZXJcclxuICAgKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7XHJcbiAgICAgIHRoaXMudW5jdXREYXRhID0gZGF0YTtcclxuICAgICAgdGhpcy50cmVlT3B0aW9ucyA9IHRoaXMucHJvY2Vzc09wdGlvbnMob3B0aW9ucywgaXRlbXNQZXJQYWdlLCBwYWdlKTtcclxuICAgICAgaWYgKHRoaXMudHJlZU9wdGlvbnMubGlzdE1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgbGV0IHN0YXJ0ID1cclxuICAgICAgICAgICAgdGhpcy50cmVlT3B0aW9ucy5pdGVtc1BlclBhZ2UgKiAodGhpcy50cmVlT3B0aW9ucy5wYWdlIC0gMSk7XHJcbiAgICAgICAgIGlmIChpc05hTihzdGFydCkpIHtcclxuICAgICAgICAgICAgLy9UaGlzIGNhdGNoZXMgdGhlIGNhc2Ugd2hlcmUgaXRlbXNQZXJQYWdlIHdhcyBub3QgcGFzc2VkIGJ5IHRoZSB1c2VyLFxyXG4gICAgICAgICAgICAvL2NhdXNpbmcgYHN0YXJ0YCB0byBlcXVhbCBpbmZpbml0eSowLCB3aGljaCBpcyBOYU4uXHJcbiAgICAgICAgICAgIHN0YXJ0ID0gMDtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMudHJlZU9wdGlvbnMuaXRlbXNQZXJQYWdlO1xyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID0gdGhpcy51bmN1dERhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIHRoaXMudHJlZURhdGEgPSBbLi4udGhpcy51bmN1dERhdGFdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3luY2hyb25pemVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyByZW1vdmVQbGFjZWhvbGRlcigpIHtcclxuICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwbGFjZWhvbGRlckluZGV4ID0gdGhpcy50cmVlTW9kZWwuZ2V0Q2hpbGRyZW4oKS5sZW5ndGggLSAxO1xyXG4gICAgICBpZiAocGxhY2Vob2xkZXJJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgdGhpcy50cmVlTW9kZWwucmVtb3ZlQ2hpbGQocGxhY2Vob2xkZXJJbmRleCk7IC8vcmVtb3ZlIHRoZSBwbGFjZWhvbGRlclxyXG4gICAgICAgICB0aGlzLmhvc3Q/LnJlbW92ZShwbGFjZWhvbGRlckluZGV4KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgY2xlYW51cCgpOiB2b2lkIHtcclxuICAgICAgdGhpcy5yZWJ1aWxkVHJlZURhdGEoKTtcclxuICAgICAgdGhpcy5jaGFuZ2VzJC5uZXh0KG51bGwpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS51cGRhdGUoKTtcclxuICAgfVxyXG5cclxuICAgLyoqIFJlbmRlcnMgdGhlIGVudGlyZSB0cmVlIGZyb20gcm9vdCB0byBsZWF2ZXMgKi9cclxuICAgcHJpdmF0ZSByZW5kZXIoKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgdGhpcy5ob3N0ID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgdGhpcy50cmVlRGF0YSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMudHJlZU9wdGlvbnMgPT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJlZU1vZGVsIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhvc3QuY2xlYXIoKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UucmVzdGFydCgpO1xyXG4gICAgICAvL1dlIGRvbid0IG5lZWQgdG8gY2FsbCByZW1vdmVQbGFjZWhvbGRlciBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBjbGVhcmVkIGl0IGF3YXkgaW4gdGhlIHByZWNlZGluZyBsaW5lcy4gV2UganVzdCBoYXZlIHRvIHRlbGwgdGhlIHNlcnZpY2UgdGhhdCBpdCBpcyBkb25lLlxyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudHJlZU1vZGVsID0gbmV3IEJyYW5jaChudWxsKTtcclxuICAgICAgaWYgKHRoaXMudHJlZURhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgIC8vVHJlZSBpcyBlbXB0eSwgYnV0IHdlIGhhdmUgdG8gdG8gaGF2ZSBzb21ldGhpbmcgdGhlcmUgc28gb3RoZXIgdHJlZXMnIGl0ZW1zIGNhbiBiZSBkcm9wcGVkIGludG8gaXRcclxuICAgICAgICAgdGhpcy51c2VQbGFjZWhvbGRlcigpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy50cmVlRGF0YSkge1xyXG4gICAgICAgICAgICBjb25zdCBicmFuY2ggPSBuZXcgQnJhbmNoKG5vZGUpO1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVNb2RlbC5hcHBlbmRDaGlsZChicmFuY2gpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIHRoaXMudHJlZU1vZGVsLmdldENoaWxkcmVuKCkpIHtcclxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRDcmVhdG9yU2VydmljZS5hcHBlbmRDb21wb25lbnQ8TGltYmxlVHJlZU5vZGVDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICAgICBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgdGhpcy5ob3N0XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5icmFuY2ggPSBicmFuY2g7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5wYXJlbnRIb3N0ID0gdGhpcy5ob3N0O1xyXG4gICAgICAgICAgICAvL1RoZSBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCB3aWxsIChpbmRpcmVjdGx5KSBjYWxsIHRoZSBgcmVuZGVyQnJhbmNoYCBtZXRob2Qgb2YgdGhpcyBzZXJ2aWNlIHRvIHJlbmRlclxyXG4gICAgICAgICAgICAvL2l0cyBvd24gY2hpbGRyZW5cclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3luY2hyb25pemVyID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgIGlmICh0aGlzLnRyZWVPcHRpb25zID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJlZU1vZGVsIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICB0aGlzLmNoYW5nZXMkLm5leHQobnVsbCk7XHJcbiAgICAgICAgIGlmICh0aGlzLnN5bmNocm9uaXplciA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgLy9UaGUgdHJlZSBzZXJ2aWNlIGhhcyBiZWVuIHJlaW5pdGlhbGl6ZWQgc2luY2UgdGhpcyB0aW1lb3V0IHdhcyBjYWxsZWQuXHJcbiAgICAgICAgICAgIC8vVGhlIG5ldyB0cmVlIGRhdGEgd2lsbCBqdXN0IG92ZXJ3cml0ZSB0aGUgZHJvcCB6b25lIGRhdGEgYW55d2F5LCBzb1xyXG4gICAgICAgICAgICAvL3dlIGNhbiBza2lwIHRoZSBkcm9wIHpvbmUgaW5pdGlhbGl6YXRpb24gb24gdGhpcyByb3VuZCBmb3IgZWZmaWNpZW5jeVxyXG4gICAgICAgICAgICAvL2FuZCBhbHNvIHRvIGF2b2lkIHNvbWUgcG9zc2libGUgKD8pIHJhY2UgY29uZGl0aW9uc1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuaW5pdCh0aGlzLnRyZWVNb2RlbCwgdGhpcy50cmVlT3B0aW9ucyk7XHJcbiAgICAgIH0pO1xyXG4gICB9XHJcblxyXG4gICAvKiogUmVuZGVycyBhIGJyYW5jaCBvZiB0aGUgdHJlZSBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cyAqL1xyXG4gICBwdWJsaWMgcmVuZGVyQnJhbmNoKGhvc3Q6IFZpZXdDb250YWluZXJSZWYsIGJyYW5jaDogQnJhbmNoPGFueT4pIHtcclxuICAgICAgaWYgKHRoaXMudHJlZU1vZGVsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJlZU1vZGVsIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgfVxyXG4gICAgICBob3N0LmNsZWFyKCk7XHJcbiAgICAgIGJyYW5jaC5jbGVhckNoaWxkcmVuKCk7XHJcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBicmFuY2guZGF0YT8ubm9kZXMgPz8gW10pIHtcclxuICAgICAgICAgY29uc3QgbmV3QnJhbmNoID0gbmV3IEJyYW5jaChub2RlKTtcclxuICAgICAgICAgYnJhbmNoLmFwcGVuZENoaWxkKG5ld0JyYW5jaCk7XHJcbiAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50Q3JlYXRvclNlcnZpY2UuYXBwZW5kQ29tcG9uZW50PExpbWJsZVRyZWVOb2RlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIGhvc3RcclxuICAgICAgICAgKTtcclxuICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IG5ld0JyYW5jaDtcclxuICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnBhcmVudEhvc3QgPSBob3N0O1xyXG4gICAgICAgICAvL1RoZSBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCB3aWxsIChpbmRpcmVjdGx5KSBjYWxsIHRoZSBgcmVuZGVyQnJhbmNoYCBtZXRob2Qgb2YgdGhpcyBzZXJ2aWNlIHRvIHJlbmRlclxyXG4gICAgICAgICAvL2l0cyBvd24gY2hpbGRyZW5cclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgdXNlUGxhY2Vob2xkZXIoKSB7XHJcbiAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5ob3N0ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJlZU1vZGVsIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcclxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJOb2RlOiBMaW1ibGVUcmVlTm9kZSA9IHtcclxuICAgICAgICAgY29tcG9uZW50OiB7IGNsYXNzOiBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQgfVxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBicmFuY2ggPSBuZXcgQnJhbmNoKHBsYWNlaG9sZGVyTm9kZSk7XHJcbiAgICAgIHRoaXMudHJlZU1vZGVsLmFwcGVuZENoaWxkKGJyYW5jaCk7XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50Q3JlYXRvclNlcnZpY2UuYXBwZW5kQ29tcG9uZW50PExpbWJsZVRyZWVOb2RlQ29tcG9uZW50PihcclxuICAgICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgICAgIHRoaXMuaG9zdFxyXG4gICAgICApO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYnJhbmNoID0gYnJhbmNoO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFyZW50SG9zdCA9IHRoaXMuaG9zdDtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBwcm9jZXNzT3B0aW9ucyhcclxuICAgICAgb3B0aW9uczogTGltYmxlVHJlZU9wdGlvbnMgPSB7fSxcclxuICAgICAgaXRlbXNQZXJQYWdlOiBudW1iZXIgPSBJbmZpbml0eSxcclxuICAgICAgcGFnZTogbnVtYmVyID0gMVxyXG4gICApOiBQcm9jZXNzZWRPcHRpb25zIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICBvcHRpb25zLmxpc3RNb2RlID09PSB0cnVlICYmXHJcbiAgICAgICAgIG9wdGlvbnMuYWxsb3dOZXN0aW5nICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgb3B0aW9ucy5hbGxvd05lc3RpbmcgIT09IGZhbHNlXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIFwiVGhlIHZhbHVlIG9mIGBhbGxvd05lc3RpbmdgIHdpbGwgYmUgaWdub3JlZDsgaXQgbXVzdCBiZSBmYWxzZSB3aGVuIGBsaXN0TW9kZWAgaXMgdHJ1ZVwiXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVzdWx0OiBQcm9jZXNzZWRPcHRpb25zQmFzZSA9IHtcclxuICAgICAgICAgZGVmYXVsdENvbXBvbmVudDogb3B0aW9ucy5kZWZhdWx0Q29tcG9uZW50LFxyXG4gICAgICAgICBpbmRlbnQ6IG9wdGlvbnMuaW5kZW50ID8/IElOREVOVCxcclxuICAgICAgICAgYWxsb3dOZXN0aW5nOlxyXG4gICAgICAgICAgICBvcHRpb25zLmxpc3RNb2RlICE9PSB0cnVlICYmIChvcHRpb25zLmFsbG93TmVzdGluZyA/PyB0cnVlKSxcclxuICAgICAgICAgYWxsb3dEcmFnZ2luZzogb3B0aW9ucy5hbGxvd0RyYWdnaW5nID8/IHRydWUsXHJcbiAgICAgICAgIGFsbG93RHJvcDogb3B0aW9ucy5hbGxvd0Ryb3AgPz8gKCgpID0+IHRydWUpLFxyXG4gICAgICAgICBsaXN0TW9kZTogb3B0aW9ucy5saXN0TW9kZSA/PyBmYWxzZSxcclxuICAgICAgICAgaXRlbXNQZXJQYWdlOiBvcHRpb25zLmxpc3RNb2RlID8gaXRlbXNQZXJQYWdlIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICBwYWdlOiBvcHRpb25zLmxpc3RNb2RlID8gcGFnZSA6IHVuZGVmaW5lZFxyXG4gICAgICB9O1xyXG4gICAgICByZXR1cm4gcmVzdWx0IGFzIFByb2Nlc3NlZE9wdGlvbnM7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgcmVidWlsZFRyZWVEYXRhKCk6IHZvaWQge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMudW5jdXREYXRhID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgdGhpcy50cmVlRGF0YSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMudHJlZU9wdGlvbnMgPT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJlZSBkYXRhIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVuY3V0RGF0YS5sZW5ndGggPSAwO1xyXG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiB0aGlzLnRyZWVNb2RlbC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgIHRoaXMudW5jdXREYXRhLnB1c2godGhpcy5yZWJ1aWxkQnJhbmNoKGJyYW5jaCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRyZWVPcHRpb25zLmxpc3RNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgIGxldCBzdGFydCA9XHJcbiAgICAgICAgICAgIHRoaXMudHJlZU9wdGlvbnMuaXRlbXNQZXJQYWdlICogKHRoaXMudHJlZU9wdGlvbnMucGFnZSAtIDEpO1xyXG4gICAgICAgICBpZiAoaXNOYU4oc3RhcnQpKSB7XHJcbiAgICAgICAgICAgIC8vVGhpcyBjYXRjaGVzIHRoZSBjYXNlIHdoZXJlIGl0ZW1zUGVyUGFnZSB3YXMgbm90IHBhc3NlZCBieSB0aGUgdXNlcixcclxuICAgICAgICAgICAgLy9jYXVzaW5nIGBzdGFydGAgdG8gZXF1YWwgaW5maW5pdHkqMCwgd2hpY2ggaXMgTmFOLlxyXG4gICAgICAgICAgICBzdGFydCA9IDA7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnRyZWVPcHRpb25zLml0ZW1zUGVyUGFnZTtcclxuICAgICAgICAgdGhpcy50cmVlRGF0YSA9IHRoaXMudW5jdXREYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB0aGlzLnRyZWVEYXRhID0gWy4uLnRoaXMudW5jdXREYXRhXTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlYnVpbGRCcmFuY2goYnJhbmNoOiBCcmFuY2g8YW55Pik6IExpbWJsZVRyZWVOb2RlIHtcclxuICAgICAgY29uc3QgdGVtcDogTGltYmxlVHJlZU5vZGUgPSBicmFuY2guZGF0YTtcclxuICAgICAgdGVtcC5ub2RlcyA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJyYW5jaC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgIHRlbXAubm9kZXMucHVzaCh0aGlzLnJlYnVpbGRCcmFuY2goY2hpbGQpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGVtcDtcclxuICAgfVxyXG59XHJcbiJdfQ==

@@ -44,5 +44,6 @@ import { NgModule } from "@angular/core";

}], null, null); })();
i0.ɵɵsetComponentScope(LimbleTreeBranchComponent, [i1.NgIf, DropZoneComponent], []);
i0.ɵɵsetComponentScope(LimbleTreeNodeComponent, [i1.NgIf, DropZoneComponent,
DragoverNoChangeDetectDirective,
LimbleTreeBranchComponent], []);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOERBQThELENBQUM7OztBQWdCaEgsTUFBTSxPQUFPLGdCQUFnQjs7Z0ZBQWhCLGdCQUFnQjtvREFBaEIsZ0JBQWdCO3lEQUZmLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsWUFGbEUsQ0FBQyxZQUFZLENBQUM7d0ZBSWIsZ0JBQWdCLG1CQVp2Qix5QkFBeUI7UUFDekIsaUJBQWlCO1FBQ2pCLHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsOEJBQThCO1FBQzlCLCtCQUErQjtRQUMvQixnQ0FBZ0MsYUFFekIsWUFBWSxhQUNaLHVCQUF1Qjt1RkFHdkIsZ0JBQWdCO2NBZDVCLFFBQVE7ZUFBQztnQkFDUCxZQUFZLEVBQUU7b0JBQ1gseUJBQXlCO29CQUN6QixpQkFBaUI7b0JBQ2pCLHVCQUF1QjtvQkFDdkIsdUJBQXVCO29CQUN2Qiw4QkFBOEI7b0JBQzlCLCtCQUErQjtvQkFDL0IsZ0NBQWdDO2lCQUNsQztnQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUNsQyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQzthQUM3RTs7dUJBVEssdUJBQXVCLFlBRHZCLGlCQUFpQjtJQUlqQiwrQkFBK0I7SUFML0IseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZUNvbXBvbmVudCB9IGZyb20gXCIuL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1icmFuY2gvbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4vbGltYmxlLXRyZWUtbm9kZS9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZVJvb3RDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1yb290L2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVQbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9nbG9iYWwtZXZlbnRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJhZ292ZXJOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnb3Zlci1uby1jaGFuZ2UtZGV0ZWN0LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBEcmFnbGVhdmVOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnbGVhdmUtbm8tY2hhbmdlLWRldGVjdC5kaXJlY3RpdmVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBMaW1ibGVUcmVlQnJhbmNoQ29tcG9uZW50LFxyXG4gICAgICBEcm9wWm9uZUNvbXBvbmVudCxcclxuICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgIExpbWJsZVRyZWVSb290Q29tcG9uZW50LFxyXG4gICAgICBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQsXHJcbiAgICAgIERyYWdvdmVyTm9DaGFuZ2VEZXRlY3REaXJlY3RpdmUsXHJcbiAgICAgIERyYWdsZWF2ZU5vQ2hhbmdlRGV0ZWN0RGlyZWN0aXZlXHJcbiAgIF0sXHJcbiAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gICBleHBvcnRzOiBbTGltYmxlVHJlZVJvb3RDb21wb25lbnRdLFxyXG4gICBwcm92aWRlcnM6IFtDb21wb25lbnRDcmVhdG9yU2VydmljZSwgRHJhZ1N0YXRlU2VydmljZSwgR2xvYmFsRXZlbnRzU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVNb2R1bGUge31cclxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjL2xpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDN0csT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUcsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOERBQThELENBQUM7OztBQWdCaEgsTUFBTSxPQUFPLGdCQUFnQjs7Z0ZBQWhCLGdCQUFnQjtvREFBaEIsZ0JBQWdCO3lEQUZmLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsWUFGbEUsQ0FBQyxZQUFZLENBQUM7d0ZBSWIsZ0JBQWdCLG1CQVp2Qix5QkFBeUI7UUFDekIsaUJBQWlCO1FBQ2pCLHVCQUF1QjtRQUN2Qix1QkFBdUI7UUFDdkIsOEJBQThCO1FBQzlCLCtCQUErQjtRQUMvQixnQ0FBZ0MsYUFFekIsWUFBWSxhQUNaLHVCQUF1Qjt1RkFHdkIsZ0JBQWdCO2NBZDVCLFFBQVE7ZUFBQztnQkFDUCxZQUFZLEVBQUU7b0JBQ1gseUJBQXlCO29CQUN6QixpQkFBaUI7b0JBQ2pCLHVCQUF1QjtvQkFDdkIsdUJBQXVCO29CQUN2Qiw4QkFBOEI7b0JBQzlCLCtCQUErQjtvQkFDL0IsZ0NBQWdDO2lCQUNsQztnQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUNsQyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQzthQUM3RTs7dUJBWEsseUJBQXlCLFlBQ3pCLGlCQUFpQjt1QkFDakIsdUJBQXVCLFlBRHZCLGlCQUFpQjtJQUlqQiwrQkFBK0I7SUFML0IseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZUNvbXBvbmVudCB9IGZyb20gXCIuL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1icmFuY2gvbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4vbGltYmxlLXRyZWUtbm9kZS9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZVJvb3RDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1yb290L2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVQbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxFdmVudHNTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9nbG9iYWwtZXZlbnRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJhZ292ZXJOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnb3Zlci1uby1jaGFuZ2UtZGV0ZWN0LmRpcmVjdGl2ZVwiO1xyXG5pbXBvcnQgeyBEcmFnbGVhdmVOb0NoYW5nZURldGVjdERpcmVjdGl2ZSB9IGZyb20gXCIuL2N1c3RvbS1ldmVudC1iaW5kaW5ncy9kcmFnbGVhdmUtbm8tY2hhbmdlLWRldGVjdC5kaXJlY3RpdmVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBMaW1ibGVUcmVlQnJhbmNoQ29tcG9uZW50LFxyXG4gICAgICBEcm9wWm9uZUNvbXBvbmVudCxcclxuICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgIExpbWJsZVRyZWVSb290Q29tcG9uZW50LFxyXG4gICAgICBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQsXHJcbiAgICAgIERyYWdvdmVyTm9DaGFuZ2VEZXRlY3REaXJlY3RpdmUsXHJcbiAgICAgIERyYWdsZWF2ZU5vQ2hhbmdlRGV0ZWN0RGlyZWN0aXZlXHJcbiAgIF0sXHJcbiAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gICBleHBvcnRzOiBbTGltYmxlVHJlZVJvb3RDb21wb25lbnRdLFxyXG4gICBwcm92aWRlcnM6IFtDb21wb25lbnRDcmVhdG9yU2VydmljZSwgRHJhZ1N0YXRlU2VydmljZSwgR2xvYmFsRXZlbnRzU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVNb2R1bGUge31cclxuIl19

@@ -1,9 +0,11 @@

import { AfterViewInit, ChangeDetectorRef, ViewContainerRef } from "@angular/core";
import { AfterViewInit, ChangeDetectorRef, OnDestroy, OnInit, ViewContainerRef } from "@angular/core";
import { TreeService } from "../limble-tree-root/tree.service";
import type { Branch } from "../classes/Branch";
import { DropZone } from "../classes/DropZone";
import { DropZoneService } from "../limble-tree-root/drop-zone.service";
import * as i0 from "@angular/core";
export declare class LimbleTreeBranchComponent implements AfterViewInit {
export declare class LimbleTreeBranchComponent implements AfterViewInit, OnInit, OnDestroy {
private treeService;
private readonly changeDetectorRef;
private readonly dropZoneService;
branch: Branch<any> | undefined;

@@ -14,8 +16,11 @@ children: ViewContainerRef | undefined;

readonly indent: number | undefined;
constructor(treeService: TreeService, changeDetectorRef: ChangeDetectorRef);
constructor(treeService: TreeService, changeDetectorRef: ChangeDetectorRef, dropZoneService: DropZoneService);
ngOnInit(): void;
ngAfterViewInit(): void;
ngOnDestroy(): void;
private addDropZoneInside;
reRender(): void;
private setDropZoneHost;
static ɵfac: i0.ɵɵFactoryDef<LimbleTreeBranchComponent, never>;
static ɵcmp: i0.ɵɵComponentDefWithMeta<LimbleTreeBranchComponent, "limble-tree-branch", never, { "branch": "branch"; "dropZoneInside": "dropZoneInside"; "renderDropZoneInside": "renderDropZoneInside"; }, {}, never, never>;
static ɵcmp: i0.ɵɵComponentDefWithMeta<LimbleTreeBranchComponent, "limble-tree-branch", never, { "branch": "branch"; }, {}, never, never>;
}

@@ -24,5 +24,3 @@ import { AfterViewInit, ChangeDetectorRef, NgZone, OnDestroy, OnInit, ViewContainerRef } from "@angular/core";

renderDropZoneBelow: boolean;
dropZoneInside: DropZone | undefined;
renderDropZoneInside: boolean;
readonly renderInnerBranch: Boolean;
renderInnerBranch: Boolean;
private draggableDiv;

@@ -33,2 +31,3 @@ private nodeHostContainer;

parentHost: ViewContainerRef | undefined;
private innerBranch;
constructor(componentCreatorService: ComponentCreatorService, changeDetectorRef: ChangeDetectorRef, dragStateService: DragStateService, dropZoneService: DropZoneService, treeService: TreeService, globalEventsService: GlobalEventsService, ngZone: NgZone);

@@ -46,3 +45,2 @@ private treeChangeHandler;

private addDropZoneBelow;
private addDropZoneInside;
private updateDropZones;

@@ -49,0 +47,0 @@ private updateDropZoneAbove;

@@ -109,2 +109,3 @@ import { Type, ViewContainerRef } from "@angular/core";

readonly cleanupSignal$: Subject<null>;
private synchronizer;
constructor(componentCreatorService: ComponentCreatorService, dropZoneService: DropZoneService, dragStateService: DragStateService);

@@ -111,0 +112,0 @@ drop(source: Branch<any>, targetCoordinates: BranchCoordinates): void;

{
"name": "@limble/limble-tree",
"version": "0.11.0",
"version": "0.11.1",
"peerDependencies": {

@@ -5,0 +5,0 @@ "@angular/common": "^11.2.5",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc