@duoduo-oba/ng-devui
Version:
DevUI components based on Angular
828 lines • 85.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: directives/draggable.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Subscription, fromEvent, Subject } from 'rxjs';
import { Directive, ElementRef, EventEmitter, HostBinding, Input, NgZone, Output, Renderer2, Self, Optional } from '@angular/core';
import { DragDropService } from '../services/drag-drop.service';
import { Utils } from '../shared/utils';
import { PreserveNextEventEmitter } from './../shared/preserve-next-event-emitter';
import { DragPreviewDirective } from './drag-preview.directive';
var DraggableDirective = /** @class */ (function () {
function DraggableDirective(el, renderer, dragDropService, ngZone, dragPreviewDirective) {
var _this = this;
this.el = el;
this.renderer = renderer;
this.dragDropService = dragDropService;
this.ngZone = ngZone;
this.dragPreviewDirective = dragPreviewDirective;
this.draggable = true;
/**
* Currently not used
*/
this.dragEffect = 'move';
/**
* Defines compatible drag drop pairs. Values must match both in draggable and droppable.dropScope.
*/
this.dragScope = 'default';
this.dragHandleClass = 'drag-handle';
/**
* Event fired when Drag is started
*/
this.dragStartEvent = new EventEmitter();
/**
* @deprecated
* Event fired while the element is being dragged
* 为了性能优化,该函数废弃,请用(drag)自行监听, 如果不需要angular脏检测则最好用runOutsideAngular的addEventListener监听以获得好的性能
*/
this.dragEvent = new PreserveNextEventEmitter();
/**
* Event fired when dragged ends
*/
this.dragEndEvent = new EventEmitter();
this.dropEndEvent = new PreserveNextEventEmitter();
this.enableDragFollow = false; // 默认false使用浏览器H5API拖拽, 否则使用原dom定位偏移
// 用于虚拟滚动的恢复
this.dragItemParentName = ''; // 当前拖拽元素的类名或元素名称(类名需要加.),主要用于子节点的截取操作
// 当前拖拽元素的类名或元素名称(类名需要加.),主要用于子节点的截取操作
this.dragItemChildrenName = ''; // 当前拖拽元素的子节点类名或元素名称(类名需要加.)
// 当前拖拽元素的子节点类名或元素名称(类名需要加.)
this.dragsSub = new Subscription();
this.destroyDragEndSub = new Subscription();
this.dragElShowHideEvent = new Subject();
this.beforeDragStartEvent = new Subject();
this.insertOriginPlaceholder = (/**
* @param {?=} directShow
* @param {?=} updateService
* @return {?}
*/
function (directShow, updateService) {
if (directShow === void 0) { directShow = true; }
if (updateService === void 0) { updateService = true; }
if (_this.delayRemoveOriginPlaceholderTimer) {
clearTimeout(_this.delayRemoveOriginPlaceholderTimer);
_this.delayRemoveOriginPlaceholderTimer = undefined;
}
/** @type {?} */
var node = document.createElement(_this.originPlaceholder.tag || 'div');
/** @type {?} */
var rect = _this.el.nativeElement.getBoundingClientRect();
if (directShow) {
node.style.display = 'block';
}
else {
node.style.display = 'none';
}
node.style.width = rect.width + 'px';
node.style.height = rect.height + 'px';
node.classList.add('drag-origin-placeholder');
if (_this.originPlaceholder.text) {
node.innerText = _this.originPlaceholder.text;
}
if (_this.originPlaceholder.style) {
Utils.addElStyles(node, _this.originPlaceholder.style);
}
if (updateService) {
_this.dragDropService.dragOriginPlaceholder = node;
_this.dragDropService.dragOriginPlaceholderNextSibling = _this.el.nativeElement.nextSibling;
}
else {
node.classList.add('side-drag-origin-placeholder');
/** @type {?} */
var originCloneNode = _this.el.nativeElement.cloneNode(true);
originCloneNode.style.margin = 0;
originCloneNode.style.pointerEvents = 'none';
originCloneNode.style.opacity = '0.3';
node.appendChild(originCloneNode);
}
_this.dragOriginPlaceholder = node;
_this.dragOriginPlaceholderNextSibling = _this.el.nativeElement.nextSibling;
_this.el.nativeElement.parentElement.insertBefore(node, _this.el.nativeElement.nextSibling);
});
this.removeOriginPlaceholder = (/**
* @param {?=} updateService
* @return {?}
*/
function (updateService) {
if (updateService === void 0) { updateService = true; }
if (_this.dragOriginPlaceholder) {
_this.dragOriginPlaceholder.parentElement.removeChild(_this.dragOriginPlaceholder);
}
if (updateService) {
_this.dragDropService.dragOriginPlaceholder = undefined;
_this.dragDropService.dragOriginPlaceholderNextSibling = undefined;
}
_this.dragOriginPlaceholder = undefined;
_this.dragOriginPlaceholderNextSibling = undefined;
});
this.delayRemoveOriginPlaceholder = (/**
* @param {?=} updateService
* @return {?}
*/
function (updateService) {
if (updateService === void 0) { updateService = true; }
/** @type {?} */
var timeout = _this.originPlaceholder.removeDelay;
/** @type {?} */
var delayOriginPlaceholder = _this.dragOriginPlaceholder;
/** @type {?} */
var dragOriginPlaceholderNextSibling = _this.findNextSibling(_this.dragOriginPlaceholderNextSibling);
// 需要临时移动位置,保证被ngFor刷新之后位置是正确的
// ngFor刷新的原理是有变化的部分都刷新,夹在变化部分中间的内容将被刷到变化部分之后的位置,所以需要恢复位置
// setTimeout是等ngFor的View刷新, 后续需要订阅sortContainer的view的更新才需要重新恢复位置
if (delayOriginPlaceholder.parentElement.contains(dragOriginPlaceholderNextSibling)) {
delayOriginPlaceholder.parentElement.insertBefore(delayOriginPlaceholder, dragOriginPlaceholderNextSibling);
}
setTimeout((/**
* @return {?}
*/
function () {
if (delayOriginPlaceholder.parentElement.contains(dragOriginPlaceholderNextSibling)) {
delayOriginPlaceholder.parentElement.insertBefore(delayOriginPlaceholder, dragOriginPlaceholderNextSibling);
}
delayOriginPlaceholder.classList.add('delay-deletion');
_this.delayRemoveOriginPlaceholderTimer = setTimeout((/**
* @return {?}
*/
function () {
delayOriginPlaceholder.parentElement.removeChild(delayOriginPlaceholder);
if (document.body.contains(_this.el.nativeElement)) {
_this.el.nativeElement.style.display = '';
_this.dragDropService.dragElShowHideEvent.next(false);
}
}), timeout);
if (updateService) {
_this.dragDropService.dragOriginPlaceholder = undefined;
_this.dragDropService.dragOriginPlaceholderNextSibling = undefined;
}
_this.dragOriginPlaceholder = undefined;
_this.dragOriginPlaceholderNextSibling = undefined;
}));
});
}
Object.defineProperty(DraggableDirective.prototype, "disabled", {
get: /**
* @return {?}
*/
function () {
return this._disabled;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._disabled = value;
this.draggable = !this._disabled;
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
DraggableDirective.prototype.ngOnInit = /**
* @return {?}
*/
function () {
var _this = this;
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
_this.dragsSub.add(fromEvent(_this.el.nativeElement, 'mouseover').subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) { return _this.mouseover(event); })));
_this.dragsSub.add(fromEvent(_this.el.nativeElement, 'dragstart').subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) { return _this.dragStart(event); })));
_this.dragsSub.add(fromEvent(_this.el.nativeElement, 'dragend').subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) { return _this.dragEnd(event); })));
}));
};
/**
* @return {?}
*/
DraggableDirective.prototype.dropSubscription = /**
* @return {?}
*/
function () {
var _this = this;
this.dragDropService.newSubscription().add(this.dragDropService.dropEvent.subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) {
_this.mouseOverElement = undefined;
_this.renderer.removeClass(_this.el.nativeElement, _this.dragOverClass);
_this.dropEndEvent.emit(event);
// 兼容虚拟滚动后被销毁
if (_this.isDestroyed) {
if (_this.dropEndEvent.schedulerFns && _this.dropEndEvent.schedulerFns.size > 0) {
_this.dropEndEvent.forceCallback(event, true);
}
}
if (_this.dragDropService.dragOriginPlaceholder) {
if (_this.originPlaceholder && _this.originPlaceholder.removeDelay > 0
&& !_this.dragDropService.dropOnOrigin) { // 非drop到自己的情况
_this.delayRemoveOriginPlaceholder();
}
else {
_this.removeOriginPlaceholder();
}
_this.dragDropService.draggedElIdentity = undefined;
}
_this.dragDropService.subscription.unsubscribe();
}))).add(this.dragDropService.dragElShowHideEvent.subscribe(this.dragElShowHideEvent));
};
/**
* @return {?}
*/
DraggableDirective.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
this.applyDragHandleClass();
if (this.dragIdentity) {
if (this.dragDropService.draggedEl && this.dragIdentity === this.dragDropService.draggedElIdentity) {
if (this.originPlaceholder && this.originPlaceholder.show !== false) {
this.insertOriginPlaceholder();
}
this.dragDropService.draggedEl = this.el.nativeElement;
this.el.nativeElement.style.display = 'none'; // recovery don't need to emit event
}
}
};
/**
* @return {?}
*/
DraggableDirective.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
var _this = this;
// 兼容虚拟滚动后被销毁
this.isDestroyed = true;
if (this.dragDropService.draggedEl === this.el.nativeElement) {
this.destroyDragEndSub = new Subscription();
this.destroyDragEndSub.add(fromEvent(this.el.nativeElement, 'dragend').subscribe((/**
* @param {?} event
* @return {?}
*/
function (event) {
_this.dragEnd(event);
if (_this.dropEndEvent.schedulerFns && _this.dropEndEvent.schedulerFns.size > 0) {
_this.dropEndEvent.forceCallback(event, true);
}
_this.destroyDragEndSub.unsubscribe();
_this.destroyDragEndSub = undefined;
})));
if (this.originPlaceholder && this.originPlaceholder.show !== false
&& this.dragDropService.dragOriginPlaceholder && this.dragDropService.draggedElIdentity) {
// 如果有originPlaceholder 则销毁
this.removeOriginPlaceholder();
}
}
this.dragsSub.unsubscribe();
};
/**
* @param {?} e
* @return {?}
*/
DraggableDirective.prototype.dragStart = /**
* @param {?} e
* @return {?}
*/
function (e) {
var _this = this;
if (this.allowDrag(e)) {
this.renderer.addClass(this.el.nativeElement, this.dragOverClass);
this.dragDropService.dragData = this.dragData;
this.dragDropService.scope = this.dragScope;
this.dragDropService.draggedEl = this.el.nativeElement;
this.dragDropService.draggedElIdentity = this.dragIdentity;
this.dragDropService.dragFollow = this.enableDragFollow;
this.dragDropService.dragFollowOptions = this.dragFollowOptions;
this.dragDropService.dragItemParentName = this.dragItemParentName;
this.dragDropService.dragItemChildrenName = this.dragItemChildrenName;
this.beforeDragStartEvent.next();
if (this.dragPreviewDirective && this.dragPreviewDirective.dragPreviewTemplate) {
this.dragDropService.dragFollow = true;
this.dragDropService.dragPreviewDirective = this.dragPreviewDirective;
}
if (this.batchDraggable) {
if (this.batchDraggable.dragData) {
// 有dragData证明被加入到了group里
if (this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 1) {
this.dragDropService.batchDragging = true;
this.dragDropService.batchDragStyle = this.batchDraggable.batchDragStyle;
}
}
else if (this.batchDraggable.batchDragLastOneAutoActiveEventKeys) {
/** @type {?} */
var batchActiveAble = this.batchDraggable.batchDragLastOneAutoActiveEventKeys
.map((/**
* @param {?} key
* @return {?}
*/
function (key) { return e[key]; }))
.some((/**
* @param {?} eventKey
* @return {?}
*/
function (eventKey) { return eventKey === true; }));
if (batchActiveAble) {
if (this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 0) {
this.batchDraggable.active();
if (!this.batchDraggable.dragData) {
// 如果用户没做任何处理把项目加到组里则加到组里
this.batchDraggable.addToBatchGroup();
}
if (this.dragDropService.batchDragData.some((/**
* @param {?} dragData
* @return {?}
*/
function (dragData) { return dragData.draggable === _this; }))) {
this.dragDropService.batchDragging = true;
this.dragDropService.batchDragStyle = this.batchDraggable.batchDragStyle;
}
}
}
}
}
/** @type {?} */
var targetOffset = this.el.nativeElement.getBoundingClientRect();
if (this.dragDropService.dragFollow) {
/** @type {?} */
var mousePositionXY = this.mousePosition(e);
// 用于出现transform的场景position:fixed相对位置变更
/** @type {?} */
var transformOffset = this.checkAndGetViewPointChange(this.el.nativeElement);
this.dragDropService.dragOffset = {
left: targetOffset.left,
top: targetOffset.top,
offsetLeft: mousePositionXY.x - targetOffset.left + transformOffset.offsetX,
offsetTop: mousePositionXY.y - targetOffset.top + transformOffset.offsetY,
width: targetOffset.width,
height: targetOffset.height
};
this.dragDropService.enableDraggedCloneNodeFollowMouse();
}
else {
this.dragDropService.dragOffset = {
left: targetOffset.left,
top: targetOffset.top,
offsetLeft: null,
offsetTop: null,
width: targetOffset.width,
height: targetOffset.height
};
}
if (this.originPlaceholder && this.originPlaceholder.show !== false) {
this.insertOriginPlaceholder(false);
}
if (this.dragDropService.batchDragging
&& this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 1) {
this.dragDropService.batchDragData.map((/**
* @param {?} dragData
* @return {?}
*/
function (dragData) { return dragData.draggable; }))
.filter((/**
* @param {?} draggable
* @return {?}
*/
function (draggable) { return draggable && draggable !== _this; }))
.forEach((/**
* @param {?} draggable
* @return {?}
*/
function (draggable) {
if (draggable.originPlaceholder && draggable.originPlaceholder.show !== false) {
draggable.insertOriginPlaceholder(true, false);
draggable.el.nativeElement.style.display = 'none';
}
else {
setTimeout((/**
* @return {?}
*/
function () { draggable.el.nativeElement.style.display = 'none'; }));
}
}));
}
// Firefox requires setData() to be called otherwise the drag does not work.
if (e.dataTransfer != null) {
e.dataTransfer.setData('text', '');
}
e.dataTransfer.effectAllowed = this.dragEffect;
this.dropSubscription();
if (this.dragDropService.dragFollow) {
if ('function' === typeof DataTransfer.prototype.setDragImage) {
e.dataTransfer.setDragImage(this.dragDropService.dragEmptyImage, 0, 0);
}
else {
e.srcElement.style.display = 'none';
this.dragDropService.dragElShowHideEvent.next(false);
}
}
e.stopPropagation();
this.dragStartEvent.emit(e);
this.dragDropService.dragStartEvent.next(e);
}
else {
e.preventDefault();
}
};
/**
* @param {?} e
* @return {?}
*/
DraggableDirective.prototype.dragEnd = /**
* @param {?} e
* @return {?}
*/
function (e) {
var _this = this;
this.renderer.removeClass(this.el.nativeElement, this.dragOverClass);
this.dragDropService.dragEndEvent.next(e);
this.mouseOverElement = undefined;
if (this.dragDropService.draggedEl) {
// 当dom被清除的的时候不会触发dragend,所以清理工作部分交给了drop,但是内部排序的时候dom不会被清理,dragend防止和drop重复操作清理动作
if (this.dragDropService.dragFollow) {
this.dragDropService.disableDraggedCloneNodeFollowMouse();
}
if (this.dragDropService.dragOriginPlaceholder) {
this.removeOriginPlaceholder();
}
if (this.dragDropService.batchDragging && this.dragDropService.batchDragData && this.dragDropService.batchDragData.length > 1) {
this.dragDropService.batchDragData.map((/**
* @param {?} dragData
* @return {?}
*/
function (dragData) { return dragData.draggable; }))
.filter((/**
* @param {?} draggable
* @return {?}
*/
function (draggable) { return draggable && draggable !== _this; }))
.forEach((/**
* @param {?} draggable
* @return {?}
*/
function (draggable) {
if (draggable.originPlaceholder && draggable.originPlaceholder.show !== false) {
draggable.el.nativeElement.style.display = '';
draggable.removeOriginPlaceholder();
}
else {
draggable.el.nativeElement.style.display = '';
}
}));
}
if (this.batchDraggable && !this.batchDraggable.batchDragActive) {
this.batchDraggable.removeFromBatchGroup();
this.dragDropService.batchDragging = false;
this.dragDropService.batchDragStyle = undefined;
}
if (this.dragDropService.subscription) {
this.dragDropService.subscription.unsubscribe();
}
this.dragDropService.dragData = undefined;
this.dragDropService.scope = undefined;
this.dragDropService.draggedEl = undefined;
this.dragDropService.dragFollow = undefined;
this.dragDropService.dragFollowOptions = undefined;
this.dragDropService.dragOffset = undefined;
this.dragDropService.draggedElIdentity = undefined;
this.dragDropService.dragPreviewDirective = undefined;
}
e.stopPropagation();
e.preventDefault();
this.dragEndEvent.emit(e);
};
/**
* @param {?} e
* @return {?}
*/
DraggableDirective.prototype.mouseover = /**
* @param {?} e
* @return {?}
*/
function (e) {
this.mouseOverElement = e.target;
};
/**
* @private
* @param {?} e
* @return {?}
*/
DraggableDirective.prototype.allowDrag = /**
* @private
* @param {?} e
* @return {?}
*/
function (e) {
if (!this.draggable) {
return false;
}
if (this.batchDraggable && !this.batchDraggable.allowAddToBatchGroup()) { // 批量拖拽判断group是否相同
return false;
}
if (this.dragHandle) {
if (e && e.fromTouch) {
return true;
} // from touchstart dispatch event
if (!this.mouseOverElement) {
return false;
}
return Utils.matches(this.mouseOverElement, this.dragHandle);
}
else {
return true;
}
};
/**
* @private
* @return {?}
*/
DraggableDirective.prototype.applyDragHandleClass = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var dragElement = this.getDragHandleElement();
if (!dragElement) {
return;
}
if (this.draggable) {
Utils.addClass(dragElement, this.dragHandleClass);
}
else {
Utils.removeClass(this.el, this.dragHandleClass);
}
};
/**
* @private
* @return {?}
*/
DraggableDirective.prototype.getDragHandleElement = /**
* @private
* @return {?}
*/
function () {
/** @type {?} */
var dragElement = this.el;
if (this.dragHandle) {
dragElement = this.el.nativeElement.querySelector(this.dragHandle);
}
return dragElement;
};
/**
* @private
* @param {?} event
* @return {?}
*/
DraggableDirective.prototype.mousePosition = /**
* @private
* @param {?} event
* @return {?}
*/
function (event) {
return {
x: event.clientX,
y: event.clientY
};
};
/**
* @param {?} currentNextSibling
* @return {?}
*/
DraggableDirective.prototype.findNextSibling = /**
* @param {?} currentNextSibling
* @return {?}
*/
function (currentNextSibling) {
if (!this.dragDropService.batchDragData) {
return currentNextSibling;
}
else {
if (this.dragDropService.batchDragData
.map((/**
* @param {?} dragData
* @return {?}
*/
function (dragData) { return dragData.draggable && dragData.draggable.el.nativeElement; }))
.indexOf(currentNextSibling) > -1) {
currentNextSibling = currentNextSibling.nextSibling;
}
return currentNextSibling;
}
};
/**
* @private
* @param {?} element
* @return {?}
*/
DraggableDirective.prototype.checkAndGetViewPointChange = /**
* @private
* @param {?} element
* @return {?}
*/
function (element) {
if (!element.parentNode) {
return null;
}
// 模拟一个元素测预测位置和最终位置是否符合,如果不符合则是有transform等造成的偏移
/** @type {?} */
var elementPosition = element.getBoundingClientRect();
/** @type {?} */
var testEl = document.createElement('div');
Utils.addElStyles(testEl, {
opacity: '0',
position: 'fixed',
top: elementPosition.top + 'px',
left: elementPosition.left + 'px',
width: '1px',
height: '1px',
zIndex: '-999999',
});
element.parentNode.appendChild(testEl);
/** @type {?} */
var testElPosition = testEl.getBoundingClientRect();
element.parentNode.removeChild(testEl);
return {
offsetX: testElPosition.left - elementPosition.left,
offsetY: testElPosition.top - elementPosition.top
};
};
DraggableDirective.decorators = [
{ type: Directive, args: [{
selector: '[dDraggable]'
},] }
];
/** @nocollapse */
DraggableDirective.ctorParameters = function () { return [
{ type: ElementRef },
{ type: Renderer2 },
{ type: DragDropService },
{ type: NgZone },
{ type: DragPreviewDirective, decorators: [{ type: Optional }, { type: Self }] }
]; };
DraggableDirective.propDecorators = {
draggable: [{ type: HostBinding, args: ['draggable',] }],
dragData: [{ type: Input }],
dragHandle: [{ type: HostBinding, args: ['attr.data-drag-handle-selector',] }, { type: Input }],
dragEffect: [{ type: Input }],
dragScope: [{ type: Input }],
dragHandleClass: [{ type: Input }],
dragOverClass: [{ type: Input }],
dragStartEvent: [{ type: Output }],
dragEvent: [{ type: Output }],
dragEndEvent: [{ type: Output }],
dropEndEvent: [{ type: Output }],
disabled: [{ type: Input }],
enableDragFollow: [{ type: Input }],
dragFollowOptions: [{ type: Input }],
originPlaceholder: [{ type: Input }],
dragIdentity: [{ type: Input }],
dragItemParentName: [{ type: Input }],
dragItemChildrenName: [{ type: Input }]
};
return DraggableDirective;
}());
export { DraggableDirective };
if (false) {
/** @type {?} */
DraggableDirective.prototype.draggable;
/**
* The data that will be available to the droppable directive on its `onDrop()` event.
* @type {?}
*/
DraggableDirective.prototype.dragData;
/**
* The selector that defines the drag Handle. If defined drag will only be allowed if dragged from the selector element.
* @type {?}
*/
DraggableDirective.prototype.dragHandle;
/**
* Currently not used
* @type {?}
*/
DraggableDirective.prototype.dragEffect;
/**
* Defines compatible drag drop pairs. Values must match both in draggable and droppable.dropScope.
* @type {?}
*/
DraggableDirective.prototype.dragScope;
/** @type {?} */
DraggableDirective.prototype.dragHandleClass;
/**
* CSS class applied on the draggable that is applied when the item is being dragged.
* @type {?}
*/
DraggableDirective.prototype.dragOverClass;
/**
* Event fired when Drag is started
* @type {?}
*/
DraggableDirective.prototype.dragStartEvent;
/**
* @deprecated
* Event fired while the element is being dragged
* 为了性能优化,该函数废弃,请用(drag)自行监听, 如果不需要angular脏检测则最好用runOutsideAngular的addEventListener监听以获得好的性能
* @type {?}
*/
DraggableDirective.prototype.dragEvent;
/**
* Event fired when dragged ends
* @type {?}
*/
DraggableDirective.prototype.dragEndEvent;
/**
* Keeps track of mouse over element that is used to determine drag handles
* @type {?}
* @private
*/
DraggableDirective.prototype.mouseOverElement;
/** @type {?} */
DraggableDirective.prototype.dropEndEvent;
/**
* @type {?}
* @private
*/
DraggableDirective.prototype._disabled;
/** @type {?} */
DraggableDirective.prototype.enableDragFollow;
/** @type {?} */
DraggableDirective.prototype.dragFollowOptions;
/** @type {?} */
DraggableDirective.prototype.originPlaceholder;
/** @type {?} */
DraggableDirective.prototype.dragIdentity;
/** @type {?} */
DraggableDirective.prototype.dragItemParentName;
/** @type {?} */
DraggableDirective.prototype.dragItemChildrenName;
/** @type {?} */
DraggableDirective.prototype.dragsSub;
/** @type {?} */
DraggableDirective.prototype.destroyDragEndSub;
/** @type {?} */
DraggableDirective.prototype.isDestroyed;
/**
* @type {?}
* @private
*/
DraggableDirective.prototype.delayRemoveOriginPlaceholderTimer;
/** @type {?} */
DraggableDirective.prototype.batchDraggable;
/**
* @type {?}
* @private
*/
DraggableDirective.prototype.dragOriginPlaceholder;
/**
* @type {?}
* @private
*/
DraggableDirective.prototype.dragOriginPlaceholderNextSibling;
/** @type {?} */
DraggableDirective.prototype.dragElShowHideEvent;
/** @type {?} */
DraggableDirective.prototype.beforeDragStartEvent;
/** @type {?} */
DraggableDirective.prototype.insertOriginPlaceholder;
/** @type {?} */
DraggableDirective.prototype.removeOriginPlaceholder;
/** @type {?} */
DraggableDirective.prototype.delayRemoveOriginPlaceholder;
/** @type {?} */
DraggableDirective.prototype.el;
/**
* @type {?}
* @private
*/
DraggableDirective.prototype.renderer;
/**
* @type {?}
* @private
*/
DraggableDirective.prototype.dragDropService;
/**
* @type {?}
* @private
*/
DraggableDirective.prototype.ngZone;
/** @type {?} */
DraggableDirective.prototype.dragPreviewDirective;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL2RyYWdkcm9wLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy9kcmFnZ2FibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBaUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUN0RSxLQUFLLEVBQUUsTUFBTSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFRLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRTtJQStGRSw0QkFBbUIsRUFBYyxFQUFVLFFBQW1CLEVBQVUsZUFBZ0MsRUFBVSxNQUFjLEVBQ25HLG9CQUEwQztRQUR2RSxpQkFHQztRQUhrQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDbkcseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQXpGN0MsY0FBUyxHQUFHLElBQUksQ0FBQzs7OztRQWVsQyxlQUFVLEdBQUcsTUFBTSxDQUFDOzs7O1FBS3BCLGNBQVMsR0FBMkIsU0FBUyxDQUFDO1FBRTlDLG9CQUFlLEdBQUcsYUFBYSxDQUFDOzs7O1FBUy9CLG1CQUFjLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7Ozs7OztRQU92RCxjQUFTLEdBQWtDLElBQUksd0JBQXdCLEVBQUUsQ0FBQzs7OztRQUsxRSxpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBTXJELGlCQUFZLEdBQWtDLElBQUksd0JBQXdCLEVBQUUsQ0FBQztRQWE5RSxxQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxvQ0FBb0M7O1FBYTlELHVCQUFrQixHQUFHLEVBQUUsQ0FBQyxDQUFDLHNDQUFzQzs7UUFDL0QseUJBQW9CLEdBQUcsRUFBRSxDQUFDLENBQUMsNEJBQTRCOztRQUVoRSxhQUFRLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDNUMsc0JBQWlCLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFNOUMsd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQUM3Qyx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBaVI5Qyw0QkFBdUI7Ozs7O1FBQUcsVUFBQyxVQUFpQixFQUFFLGFBQW9CO1lBQXZDLDJCQUFBLEVBQUEsaUJBQWlCO1lBQUUsOEJBQUEsRUFBQSxvQkFBb0I7WUFDdkUsSUFBSSxLQUFJLENBQUMsaUNBQWlDLEVBQUU7Z0JBQzFDLFlBQVksQ0FBQyxLQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztnQkFDckQsS0FBSSxDQUFDLGlDQUFpQyxHQUFHLFNBQVMsQ0FBQzthQUNwRDs7Z0JBRUssSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUM7O2dCQUNsRSxJQUFJLEdBQUksS0FBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUU7WUFDM0QsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzthQUM3QjtZQUVELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDOUMsSUFBSSxLQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFO2dCQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7YUFDOUM7WUFDRCxJQUFJLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2hDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN2RDtZQUNELElBQUksYUFBYSxFQUFFO2dCQUNqQixLQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztnQkFDbEQsS0FBSSxDQUFDLGVBQWUsQ0FBQyxnQ0FBZ0MsR0FBRyxLQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7YUFDM0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQzs7b0JBQzdDLGVBQWUsR0FBRyxLQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUM3RCxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLGVBQWUsQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztnQkFDN0MsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2FBQ25DO1lBQ0QsS0FBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUNsQyxLQUFJLENBQUMsZ0NBQWdDLEdBQUcsS0FBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1lBQzFFLEtBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVGLENBQUMsRUFBQTtRQUVNLDRCQUF1Qjs7OztRQUFHLFVBQUMsYUFBb0I7WUFBcEIsOEJBQUEsRUFBQSxvQkFBb0I7WUFDcEQsSUFBSSxLQUFJLENBQUMscUJBQXFCLEVBQUU7Z0JBQzlCLEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ2xGO1lBQ0QsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLEtBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO2dCQUN2RCxLQUFJLENBQUMsZUFBZSxDQUFDLGdDQUFnQyxHQUFHLFNBQVMsQ0FBQzthQUNuRTtZQUNELEtBQUksQ0FBQyxxQkFBcUIsR0FBRyxTQUFTLENBQUM7WUFDdkMsS0FBSSxDQUFDLGdDQUFnQyxHQUFHLFNBQVMsQ0FBQztRQUNwRCxDQUFDLEVBQUE7UUFDTSxpQ0FBNEI7Ozs7UUFBRyxVQUFDLGFBQW9CO1lBQXBCLDhCQUFBLEVBQUEsb0JBQW9COztnQkFDbkQsT0FBTyxHQUFHLEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXOztnQkFDNUMsc0JBQXNCLEdBQUcsS0FBSSxDQUFDLHFCQUFxQjs7Z0JBQ25ELGdDQUFnQyxHQUFHLEtBQUksQ0FBQyxlQUFlLENBQUMsS0FBSSxDQUFDLGdDQUFnQyxDQUFDO1lBRXBHLDhCQUE4QjtZQUM5Qix5REFBeUQ7WUFDekQsaUVBQWlFO1lBQ2pFLElBQUksc0JBQXNCLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFO2dCQUNuRixzQkFBc0IsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUMvQyxzQkFBc0IsRUFDdEIsZ0NBQWdDLENBQ2pDLENBQUM7YUFDSDtZQUNELFVBQVU7OztZQUFDO2dCQUNULElBQUksc0JBQXNCLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFO29CQUNuRixzQkFBc0IsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUMvQyxzQkFBc0IsRUFDdEIsZ0NBQWdDLENBQ2pDLENBQUM7aUJBQ0g7Z0JBQ0Qsc0JBQXNCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN2RCxLQUFJLENBQUMsaUNBQWlDLEdBQUcsVUFBVTs7O2dCQUFDO29CQUNsRCxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7b0JBQ3pFLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRTt3QkFDakQsS0FBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7d0JBQ3pDLEtBQUksQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUN0RDtnQkFDSCxDQUFDLEdBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ1osSUFBSSxhQUFhLEVBQUU7b0JBQ2pCLEtBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO29CQUN2RCxLQUFJLENBQUMsZUFBZSxDQUFDLGdDQUFnQyxHQUFHLFNBQVMsQ0FBQztpQkFDbkU7Z0JBQ0QsS0FBSSxDQUFDLHFCQUFxQixHQUFHLFNBQVMsQ0FBQztnQkFDdkMsS0FBSSxDQUFDLGdDQUFnQyxHQUFHLFNBQVMsQ0FBQztZQUNwRCxDQUFDLEVBQUMsQ0FBQztRQUNMLENBQUMsRUFBQTtJQWxXRCxDQUFDO0lBekNELHNCQUNXLHdDQUFROzs7O1FBRG5CO1lBRUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzFCLENBQUM7Ozs7O1FBRUQsVUFBb0IsS0FBYztZQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNyQyxDQUFDOzs7T0FMQTs7OztJQXdDRCxxQ0FBUTs7O0lBQVI7UUFBQSxpQkFNQztRQUxDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCOzs7UUFBQztZQUM1QixLQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUMsU0FBUzs7OztZQUFDLFVBQUEsS0FBSyxJQUFJLE9BQUEsS0FBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBckIsQ0FBcUIsRUFBQyxDQUFDLENBQUM7WUFDM0csS0FBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFNBQVM7Ozs7WUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLEtBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQXJCLENBQXFCLEVBQUMsQ0FBQyxDQUFDO1lBQzNHLEtBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxTQUFTOzs7O1lBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFuQixDQUFtQixFQUFDLENBQUMsQ0FBQztRQUN6RyxDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFFRCw2Q0FBZ0I7OztJQUFoQjtRQUFBLGlCQXlCQztRQXhCQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsU0FBUzs7OztRQUFDLFVBQUMsS0FBSztZQUM3QyxLQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1lBQ2xDLEtBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEtBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNyRSxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixhQUFhO1lBQ2IsSUFBSSxLQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNwQixJQUFJLEtBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxJQUFJLEtBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7b0JBQzdFLEtBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDOUM7YUFDRjtZQUNELElBQUksS0FBSSxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsRUFBRTtnQkFDOUMsSUFBSSxLQUFJLENBQUMsaUJBQWlCLElBQUksS0FBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxDQUFDO3VCQUMvRCxDQUFDLEtBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLEVBQUUsY0FBYztvQkFDdkQsS0FBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNMLEtBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2lCQUNoQztnQkFDRCxLQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQzthQUNwRDtZQUNELEtBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BELENBQUMsRUFBQyxDQUFDLENBQUMsR0FBRyxDQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUM3RSxDQUFDO0lBQ0osQ0FBQzs7OztJQUVELDRDQUFlOzs7SUFBZjtRQUNFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbEcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksS0FBSyxLQUFLLEVBQUU7b0JBQ2pFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2lCQUNsQztnQkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxvQ0FBb0M7YUFDbkY7U0FDRjtJQUNILENBQUM7Ozs7SUFFRCx3Q0FBVzs7O0lBQVg7UUFBQSxpQkFvQkM7UUFuQkMsYUFBYTtRQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUU7WUFDNUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUMsU0FBUzs7OztZQUFDLFVBQUEsS0FBSztnQkFDcEYsS0FBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxLQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxLQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFO29CQUM3RSxLQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzlDO2dCQUNELEtBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDckMsS0FBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztZQUNyQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1lBQ0osSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksS0FBSyxLQUFLO21CQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3pGLDJCQUEyQjtnQkFDM0IsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7YUFDaEM7U0FDRjtRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQzs7Ozs7SUFFRCxzQ0FBUzs7OztJQUFULFVBQVUsQ0FBQztRQUFYLGlCQXNHQztRQXJHQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDOUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM1QyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ2hFLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1lBQ2xFLElBQUksQ0FBQyxlQUFlLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ3RFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzlFLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7YUFDdkU7WUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7b0JBQ2hDLHlCQUF5QjtvQkFDekIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFHO3dCQUN4RixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO3FCQUMxRTtpQkFDRjtxQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsbUNBQW1DLEVBQUU7O3dCQUM1RCxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQ0FBbUM7eUJBQzVFLEdBQUc7Ozs7b0JBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQU4sQ0FBTSxFQUFDO3lCQUNsQixJQUFJOzs7O29CQUFDLFVBQUEsUUFBUSxJQUFJLE9BQUEsUUFBUSxLQUFLLElBQUksRUFBakIsQ0FBaUIsRUFBQztvQkFDdEMsSUFBSSxlQUFlLEVBQUU7d0JBQ25CLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRzs0QkFDeEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQzs0QkFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFO2dDQUNqQyx5QkFBeUI7Z0NBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUM7NkJBQ3ZDOzRCQUNELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSTs7Ozs0QkFBQyxVQUFBLFFBQVEsSUFBSSxPQUFBLFFBQVEsQ0FBQyxTQUFTLEtBQUssS0FBSSxFQUEzQixDQUEyQixFQUFDLEVBQUU7Z0NBQ3BGLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQ0FDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7NkJBQzFFO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0Y7O2dCQUNLLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRTtZQUNsRSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFOztvQkFDN0IsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDOzs7b0JBRXZDLGVBQWUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7Z0JBQzlFLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHO29CQUNoQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7b0JBQ3ZCLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRztvQkFDckIsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsT0FBTztvQkFDM0UsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLEdBQUcsR0FBRyxlQUFlLENBQUMsT0FBTztvQkFDekUsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO29CQUN6QixNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU07aUJBQzVCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO2FBQzFEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxHQUFHO29CQUNoQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7b0JBQ3ZCLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRztvQkFDckIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFNBQVMsRUFBRSxJQUFJO29CQUNmLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSztvQkFDekIsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO2lCQUM1QixDQUFDO2FBQ0g7WUFDRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtnQkFDbkUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3JDO1lBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWE7bUJBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUc7Z0JBQ3pGLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUc7Ozs7Z0JBQUMsVUFBQSxRQUFRLElBQUksT0FBQSxRQUFRLENBQUMsU0FBUyxFQUFsQixDQUFrQixFQUFDO3FCQUNuRSxNQUFNOzs7O2dCQUFDLFVBQUEsU0FBUyxJQUFJLE9BQUEsU0FBUyxJQUFJLFNBQVMsS0FBSyxLQUFJLEVBQS9CLENBQStCLEVBQUM7cUJBQ3BELE9BQU87Ozs7Z0JBQUMsVUFBQyxTQUFTO29CQUNqQixJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTt3QkFDN0UsU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDL0MsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7cUJBQ25EO3lCQUFNO3dCQUNMLFVBQVU7Ozt3QkFBQyxjQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFDLENBQUM7cUJBQ3pFO2dCQUNILENBQUMsRUFBQyxDQUFDO2FBQ047WUFDRCw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTtnQkFDeEIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3RDO1lBQ0QsQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFO2dCQUNuQyxJQUFJLFVBQVUsS0FBSyxPQUFPLFlBQVksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO29CQUM3RCxDQUFDLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3pFO3FCQUFNO29CQUNMLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7b0JBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN0RDthQUNGO1lBQ0QsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QzthQUFNO1lBQ0wsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3BCO0lBQ0gsQ0FBQzs7Ozs7SUFFRCxvQ0FBTzs7OztJQUFQLFVBQVEsQ0FBQztRQUFULGlCQTRDQztRQTNDQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTtZQUNsQyxrRkFBa0Y7WUFDbEYsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO2FBQzNEO1lBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixFQUFFO2dCQUM5QyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzthQUNoQztZQUNELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRztnQkFDOUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsR0FBRzs7OztnQkFBQyxVQUFBLFFBQVEsSUFBSSxPQUFBLFFBQVEsQ0FBQyxTQUFTLEVBQWxCLENBQWtCLEVBQUM7cUJBQ25FLE1BQU07Ozs7Z0JBQUMsVUFBQSxTQUFTLElBQUksT0FBQSxTQUFTLElBQUksU0FBUyxLQUFLLEtBQUksRUFBL0IsQ0FBK0IsRUFBQztxQkFDcEQsT0FBTzs7OztnQkFBQyxVQUFDLFNBQVM7b0JBQ2pCLElBQUksU0FBUyxDQUFDLGlCQUFpQixJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO3dCQUM3RSxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQzt3QkFDOUMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLENBQUM7cUJBQ3JDO3lCQUFNO3dCQUNMLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO3FCQUMvQztnQkFDSCxDQUFDLEVBQUUsQ0FBQzthQUNQO1lBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUU7Z0JBQy9ELElBQUksQ0FBQ