@acorex/components 20.2.47 → 20.2.49
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/calendar/index.d.ts +4 -0
- package/fesm2022/acorex-components-calendar.mjs +15 -0
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-data-pager.mjs +4 -1
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-tree-view.mjs +575 -8
- package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
- package/package.json +3 -3
- package/tree-view/index.d.ts +165 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-components-tree-view.mjs","sources":["../tmp-esm2022/tree-view/lib/tree-view.service.js","../tmp-esm2022/tree-view/lib/tree-view.component.js","../tmp-esm2022/tree-view/lib/tree-view.module.js","../tmp-esm2022/tree-view/acorex-components-tree-view.js"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Service for tree node operations\n * Handles all business logic for tree node manipulation\n */\nexport class AXTreeViewService {\n // ==================== Constants ====================\n static { this.ROOT_LIST_ID = 'ax-tree-view-root-list'; }\n static { this.NODE_DROP_PREFIX = 'ax-tree-view-node-drop-'; }\n static { this.LIST_PREFIX = 'ax-tree-view-list-'; }\n // ==================== Node Finding & Traversal ====================\n /**\n * Find a node by ID in the tree\n */\n findNodeById(nodes, id) {\n for (const node of nodes) {\n if (node.id === id)\n return node;\n if (node.children) {\n const found = this.findNodeById(node.children, id);\n if (found)\n return found;\n }\n }\n return null;\n }\n /**\n * Find parent node of a given node\n */\n findParentNode(nodes, targetNode) {\n for (const node of nodes) {\n if (node.children?.some((child) => child.id === targetNode.id)) {\n return node;\n }\n if (node.children) {\n const found = this.findParentNode(node.children, targetNode);\n if (found)\n return found;\n }\n }\n return undefined;\n }\n /**\n * Check if targetNode is a descendant of ancestorNode (or the same node)\n * Prevents circular references by checking if target exists in ancestor's children tree\n */\n isValidDropTarget(movedNode, targetNode) {\n if (movedNode.id === targetNode.id || this.isNodeDescendantOf(targetNode, movedNode)) {\n return false;\n }\n return true;\n }\n /**\n * Check if targetNode is a descendant of ancestorNode\n */\n isNodeDescendantOf(targetNode, ancestorNode) {\n if (targetNode.id === ancestorNode.id) {\n return true;\n }\n if (!ancestorNode.children || ancestorNode.children.length === 0) {\n return false;\n }\n for (const child of ancestorNode.children) {\n if (child.id === targetNode.id) {\n return true;\n }\n if (this.isNodeDescendantOf(targetNode, child)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Build a flat list of all visible focusable nodes\n */\n buildFlatNodeList(nodes) {\n const flatList = [];\n const traverse = (nodeList, level, parent) => {\n for (const node of nodeList) {\n if (node.visible !== false && !node.disabled) {\n flatList.push({ node, level, parent });\n if (node.expanded && node.children) {\n traverse(node.children, level + 1, node);\n }\n }\n }\n };\n traverse(nodes, 0);\n return flatList;\n }\n // ==================== Node State Checks ====================\n /**\n * Check if node has children\n */\n hasChildren(node) {\n return Boolean(node.children?.length);\n }\n /**\n * Check if node can be lazy loaded\n */\n canLazyLoad(node, isLazyDataSource) {\n return isLazyDataSource && Boolean(node.childrenCount && node.childrenCount > 0 && !this.hasChildren(node));\n }\n // ==================== Selection Management ====================\n /**\n * Recursively select/deselect all children\n */\n selectAllChildren(children, selected) {\n for (const child of children) {\n child.selected = selected;\n child.indeterminate = false;\n if (child.children) {\n this.selectAllChildren(child.children, selected);\n }\n }\n }\n /**\n * Get selection state of children\n */\n getChildrenSelectionState(children) {\n let selectedCount = 0;\n let indeterminateCount = 0;\n for (const child of children) {\n if (child.selected && !child.indeterminate) {\n selectedCount++;\n }\n if (child.indeterminate) {\n indeterminateCount++;\n }\n }\n return {\n allSelected: selectedCount === children.length,\n someSelected: selectedCount > 0 || indeterminateCount > 0,\n };\n }\n /**\n * Update parent node states based on children selection (with intermediate state support)\n */\n updateParentStates(nodes, changedNode, intermediateState) {\n const parent = this.findParentNode(nodes, changedNode);\n if (!parent || !parent.children)\n return;\n const { allSelected, someSelected } = this.getChildrenSelectionState(parent.children);\n if (allSelected) {\n parent.selected = true;\n parent.indeterminate = false;\n }\n else if (someSelected) {\n if (intermediateState) {\n parent.selected = true;\n parent.indeterminate = true;\n }\n else {\n parent.selected = false;\n parent.indeterminate = false;\n }\n }\n else {\n parent.selected = false;\n parent.indeterminate = false;\n }\n this.updateParentStates(nodes, parent, intermediateState);\n }\n /**\n * Recursively deselect all nodes\n */\n deselectAllNodes(nodes) {\n for (const node of nodes) {\n node.selected = false;\n node.indeterminate = false;\n if (node.children) {\n this.deselectAllNodes(node.children);\n }\n }\n }\n /**\n * Recursively set selection state for all nodes\n */\n setAllSelection(nodes, selected) {\n for (const node of nodes) {\n node.selected = selected;\n node.indeterminate = false;\n if (node.children) {\n this.setAllSelection(node.children, selected);\n }\n }\n }\n /**\n * Recursively count selected nodes\n */\n countSelected(nodes) {\n let count = 0;\n for (const node of nodes) {\n if (node.selected)\n count++;\n if (node.children) {\n count += this.countSelected(node.children);\n }\n }\n return count;\n }\n /**\n * Recursively collect selected nodes\n */\n collectSelected(nodes, result) {\n for (const node of nodes) {\n if (node.selected)\n result.push(node);\n if (node.children) {\n this.collectSelected(node.children, result);\n }\n }\n }\n /**\n * Recursively remove selected nodes\n */\n removeSelected(nodes) {\n for (let i = nodes.length - 1; i >= 0; i--) {\n if (nodes[i].selected && !nodes[i].indeterminate) {\n nodes.splice(i, 1);\n }\n else if (nodes[i].children) {\n this.removeSelected(nodes[i].children ?? []);\n }\n }\n }\n /**\n * Recursively update all parent states in the tree (used after deletion)\n */\n updateAllParentStates(nodes, intermediateState) {\n for (const node of nodes) {\n if (node.children && node.children.length > 0) {\n this.updateAllParentStates(node.children, intermediateState);\n const { allSelected, someSelected } = this.getChildrenSelectionState(node.children);\n if (allSelected) {\n node.selected = true;\n node.indeterminate = false;\n }\n else if (someSelected) {\n if (intermediateState) {\n node.selected = true;\n node.indeterminate = true;\n }\n else {\n node.selected = false;\n node.indeterminate = false;\n }\n }\n else {\n node.selected = false;\n node.indeterminate = false;\n }\n }\n }\n }\n // ==================== Expansion Management ====================\n /**\n * Recursively set expanded state (with lazy loading)\n */\n async setExpandedState(nodes, expanded, isLazyDataSource, loadNodeChildren) {\n for (const node of nodes) {\n const hasChildren = this.hasChildren(node);\n const canLazyLoad = this.canLazyLoad(node, isLazyDataSource);\n if (hasChildren || canLazyLoad) {\n if (expanded && canLazyLoad) {\n await loadNodeChildren(node);\n }\n node.expanded = expanded;\n if (node.children) {\n await this.setExpandedState(node.children, expanded, isLazyDataSource, loadNodeChildren);\n }\n }\n }\n }\n // ==================== Drag & Drop Helpers ====================\n /**\n * Get array reference by drop list ID\n */\n getArrayByListId(nodes, listId) {\n if (listId === AXTreeViewService.ROOT_LIST_ID) {\n return nodes;\n }\n if (listId.startsWith(AXTreeViewService.NODE_DROP_PREFIX)) {\n const nodeId = listId.replace(AXTreeViewService.NODE_DROP_PREFIX, '');\n const node = this.findNodeById(nodes, nodeId);\n return node ? [node] : null;\n }\n const nodeId = listId.replace(AXTreeViewService.LIST_PREFIX, '');\n const node = this.findNodeById(nodes, nodeId);\n return node?.children ?? null;\n }\n /**\n * Find parent node by list ID\n */\n findParentByListId(nodes, listId) {\n if (listId === AXTreeViewService.ROOT_LIST_ID) {\n return undefined;\n }\n const prefix = listId.startsWith(AXTreeViewService.NODE_DROP_PREFIX)\n ? AXTreeViewService.NODE_DROP_PREFIX\n : AXTreeViewService.LIST_PREFIX;\n const nodeId = listId.replace(prefix, '');\n return this.findNodeById(nodes, nodeId) ?? undefined;\n }\n /**\n * Generate unique list ID for each node\n */\n getListId(node) {\n return node ? `${AXTreeViewService.LIST_PREFIX}${node.id}` : AXTreeViewService.ROOT_LIST_ID;\n }\n /**\n * Get root list ID constant\n */\n getRootListId() {\n return AXTreeViewService.ROOT_LIST_ID;\n }\n /**\n * Get node drop prefix constant\n */\n getNodeDropPrefix() {\n return AXTreeViewService.NODE_DROP_PREFIX;\n }\n /**\n * Get list prefix constant\n */\n getListPrefix() {\n return AXTreeViewService.LIST_PREFIX;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3RyZWUtdmlldy9zcmMvbGliL3RyZWUtdmlldy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDOzs7R0FHRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsc0RBQXNEO2FBQzlCLGlCQUFZLEdBQUcsd0JBQXdCLEFBQTNCLENBQTRCO2FBQ3hDLHFCQUFnQixHQUFHLHlCQUF5QixBQUE1QixDQUE2QjthQUM3QyxnQkFBVyxHQUFHLG9CQUFvQixBQUF2QixDQUF3QjtJQUUzRCxxRUFBcUU7SUFDckU7O09BRUc7SUFDSCxZQUFZLENBQUMsS0FBdUIsRUFBRSxFQUFVO1FBQzlDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxLQUFLO29CQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsS0FBdUIsRUFBRSxVQUEwQjtRQUNoRSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssVUFB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QyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFDLElBQXFCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQztJQUM5RixDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsT0FBTyxpQkFBaUIsQ0FBQyxZQUFZLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsT0FBTyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsT0FBTyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7SUFDdkMsQ0FBQzs4R0EvVlUsaUJBQWlCO2tIQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFRyZWVWaWV3Q2hpbGRyZW5TZWxlY3Rpb25TdGF0ZSwgQVhUcmVlVmlld0ZsYXROb2RlLCBBWFRyZWVWaWV3Tm9kZSB9IGZyb20gJy4vdHJlZS12aWV3LnR5cGVzJztcblxuLyoqXG4gKiBTZXJ2aWNlIGZvciB0cmVlIG5vZGUgb3BlcmF0aW9uc1xuICogSGFuZGxlcyBhbGwgYnVzaW5lc3MgbG9naWMgZm9yIHRyZWUgbm9kZSBtYW5pcHVsYXRpb25cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYVHJlZVZpZXdTZXJ2aWNlIHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gQ29uc3RhbnRzID09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFJPT1RfTElTVF9JRCA9ICdheC10cmVlLXZpZXctcm9vdC1saXN0JztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTk9ERV9EUk9QX1BSRUZJWCA9ICdheC10cmVlLXZpZXctbm9kZS1kcm9wLSc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExJU1RfUFJFRklYID0gJ2F4LXRyZWUtdmlldy1saXN0LSc7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gTm9kZSBGaW5kaW5nICYgVHJhdmVyc2FsID09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBGaW5kIGEgbm9kZSBieSBJRCBpbiB0aGUgdHJlZVxuICAgKi9cbiAgZmluZE5vZGVCeUlkKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdLCBpZDogc3RyaW5nKTogQVhUcmVlVmlld05vZGUgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIGlmIChub2RlLmlkID09PSBpZCkgcmV0dXJuIG5vZGU7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZE5vZGVCeUlkKG5vZGUuY2hpbGRyZW4sIGlkKTtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgcGFyZW50IG5vZGUgb2YgYSBnaXZlbiBub2RlXG4gICAqL1xuICBmaW5kUGFyZW50Tm9kZShub2RlczogQVhUcmVlVmlld05vZGVbXSwgdGFyZ2V0Tm9kZTogQVhUcmVlVmlld05vZGUpOiBBWFRyZWVWaWV3Tm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8uc29tZSgoY2hpbGQpID0+IGNoaWxkLmlkID09PSB0YXJnZXROb2RlLmlkKSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kUGFyZW50Tm9kZShub2RlLmNoaWxkcmVuLCB0YXJnZXROb2RlKTtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGFyZ2V0Tm9kZSBpcyBhIGRlc2NlbmRhbnQgb2YgYW5jZXN0b3JOb2RlIChvciB0aGUgc2FtZSBub2RlKVxuICAgKiBQcmV2ZW50cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGNoZWNraW5nIGlmIHRhcmdldCBleGlzdHMgaW4gYW5jZXN0b3IncyBjaGlsZHJlbiB0cmVlXG4gICAqL1xuICBpc1ZhbGlkRHJvcFRhcmdldChtb3ZlZE5vZGU6IEFYVHJlZVZpZXdOb2RlLCB0YXJnZXROb2RlOiBBWFRyZWVWaWV3Tm9kZSk6IGJvb2xlYW4ge1xuICAgIGlmIChtb3ZlZE5vZGUuaWQgPT09IHRhcmdldE5vZGUuaWQgfHwgdGhpcy5pc05vZGVEZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSwgbW92ZWROb2RlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0YXJnZXROb2RlIGlzIGEgZGVzY2VuZGFudCBvZiBhbmNlc3Rvck5vZGVcbiAgICovXG4gIHByaXZhdGUgaXNOb2RlRGVzY2VuZGFudE9mKHRhcmdldE5vZGU6IEFYVHJlZVZpZXdOb2RlLCBhbmNlc3Rvck5vZGU6IEFYVHJlZVZpZXdOb2RlKTogYm9vbGVhbiB7XG4gICAgaWYgKHRhcmdldE5vZGUuaWQgPT09IGFuY2VzdG9yTm9kZS5pZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhbmNlc3Rvck5vZGUuY2hpbGRyZW4gfHwgYW5jZXN0b3JOb2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgYW5jZXN0b3JOb2RlLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoY2hpbGQuaWQgPT09IHRhcmdldE5vZGUuaWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc05vZGVEZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSwgY2hpbGQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIGZsYXQgbGlzdCBvZiBhbGwgdmlzaWJsZSBmb2N1c2FibGUgbm9kZXNcbiAgICovXG4gIGJ1aWxkRmxhdE5vZGVMaXN0KG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdKTogQVhUcmVlVmlld0ZsYXROb2RlW10ge1xuICAgIGNvbnN0IGZsYXRMaXN0OiBBWFRyZWVWaWV3RmxhdE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGVMaXN0OiBBWFRyZWVWaWV3Tm9kZVtdLCBsZXZlbDogbnVtYmVyLCBwYXJlbnQ/OiBBWFRyZWVWaWV3Tm9kZSk6IHZvaWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVMaXN0KSB7XG4gICAgICAgIGlmIChub2RlLnZpc2libGUgIT09IGZhbHNlICYmICFub2RlLmRpc2FibGVkKSB7XG4gICAgICAgICAgZmxhdExpc3QucHVzaCh7IG5vZGUsIGxldmVsLCBwYXJlbnQgfSk7XG4gICAgICAgICAgaWYgKG5vZGUuZXhwYW5kZWQgJiYgbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgdHJhdmVyc2Uobm9kZS5jaGlsZHJlbiwgbGV2ZWwgKyAxLCBub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRyYXZlcnNlKG5vZGVzLCAwKTtcbiAgICByZXR1cm4gZmxhdExpc3Q7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBOb2RlIFN0YXRlIENoZWNrcyA9PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogQ2hlY2sgaWYgbm9kZSBoYXMgY2hpbGRyZW5cbiAgICovXG4gIGhhc0NoaWxkcmVuKG5vZGU6IEFYVHJlZVZpZXdOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4obm9kZS5jaGlsZHJlbj8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBub2RlIGNhbiBiZSBsYXp5IGxvYWRlZFxuICAgKi9cbiAgY2FuTGF6eUxvYWQobm9kZTogQVhUcmVlVmlld05vZGUsIGlzTGF6eURhdGFTb3VyY2U6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNMYXp5RGF0YVNvdXJjZSAmJiBCb29sZWFuKG5vZGUuY2hpbGRyZW5Db3VudCAmJiBub2RlLmNoaWxkcmVuQ291bnQgPiAwICYmICF0aGlzLmhhc0NoaWxkcmVuKG5vZGUpKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFNlbGVjdGlvbiBNYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBzZWxlY3QvZGVzZWxlY3QgYWxsIGNoaWxkcmVuXG4gICAqL1xuICBzZWxlY3RBbGxDaGlsZHJlbihjaGlsZHJlbjogQVhUcmVlVmlld05vZGVbXSwgc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBjaGlsZC5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgY2hpbGQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4sIHNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlbGVjdGlvbiBzdGF0ZSBvZiBjaGlsZHJlblxuICAgKi9cbiAgZ2V0Q2hpbGRyZW5TZWxlY3Rpb25TdGF0ZShjaGlsZHJlbjogQVhUcmVlVmlld05vZGVbXSk6IEFYVHJlZVZpZXdDaGlsZHJlblNlbGVjdGlvblN0YXRlIHtcbiAgICBsZXQgc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgbGV0IGluZGV0ZXJtaW5hdGVDb3VudCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICBpZiAoY2hpbGQuc2VsZWN0ZWQgJiYgIWNoaWxkLmluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgc2VsZWN0ZWRDb3VudCsrO1xuICAgICAgfVxuICAgICAgaWYgKGNoaWxkLmluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgaW5kZXRlcm1pbmF0ZUNvdW50Kys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFsbFNlbGVjdGVkOiBzZWxlY3RlZENvdW50ID09PSBjaGlsZHJlbi5sZW5ndGgsXG4gICAgICBzb21lU2VsZWN0ZWQ6IHNlbGVjdGVkQ291bnQgPiAwIHx8IGluZGV0ZXJtaW5hdGVDb3VudCA+IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgcGFyZW50IG5vZGUgc3RhdGVzIGJhc2VkIG9uIGNoaWxkcmVuIHNlbGVjdGlvbiAod2l0aCBpbnRlcm1lZGlhdGUgc3RhdGUgc3VwcG9ydClcbiAgICovXG4gIHVwZGF0ZVBhcmVudFN0YXRlcyhub2RlczogQVhUcmVlVmlld05vZGVbXSwgY2hhbmdlZE5vZGU6IEFYVHJlZVZpZXdOb2RlLCBpbnRlcm1lZGlhdGVTdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudE5vZGUobm9kZXMsIGNoYW5nZWROb2RlKTtcbiAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LmNoaWxkcmVuKSByZXR1cm47XG5cbiAgICBjb25zdCB7IGFsbFNlbGVjdGVkLCBzb21lU2VsZWN0ZWQgfSA9IHRoaXMuZ2V0Q2hpbGRyZW5TZWxlY3Rpb25TdGF0ZShwYXJlbnQuY2hpbGRyZW4pO1xuXG4gICAgaWYgKGFsbFNlbGVjdGVkKSB7XG4gICAgICBwYXJlbnQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgcGFyZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHNvbWVTZWxlY3RlZCkge1xuICAgICAgaWYgKGludGVybWVkaWF0ZVN0YXRlKSB7XG4gICAgICAgIHBhcmVudC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIHBhcmVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmVudC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICBwYXJlbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHBhcmVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVQYXJlbnRTdGF0ZXMobm9kZXMsIHBhcmVudCwgaW50ZXJtZWRpYXRlU3RhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGRlc2VsZWN0IGFsbCBub2Rlc1xuICAgKi9cbiAgZGVzZWxlY3RBbGxOb2Rlcyhub2RlczogQVhUcmVlVmlld05vZGVbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgbm9kZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLmRlc2VsZWN0QWxsTm9kZXMobm9kZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHNldCBzZWxlY3Rpb24gc3RhdGUgZm9yIGFsbCBub2Rlc1xuICAgKi9cbiAgc2V0QWxsU2VsZWN0aW9uKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgbm9kZS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLnNldEFsbFNlbGVjdGlvbihub2RlLmNoaWxkcmVuLCBzZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNvdW50IHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBjb3VudFNlbGVjdGVkKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIGNvdW50Kys7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBjb3VudCArPSB0aGlzLmNvdW50U2VsZWN0ZWQobm9kZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjb2xsZWN0IHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBjb2xsZWN0U2VsZWN0ZWQobm9kZXM6IEFYVHJlZVZpZXdOb2RlW10sIHJlc3VsdDogQVhUcmVlVmlld05vZGVbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUuc2VsZWN0ZWQpIHJlc3VsdC5wdXNoKG5vZGUpO1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5jb2xsZWN0U2VsZWN0ZWQobm9kZS5jaGlsZHJlbiwgcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgcmVtb3ZlIHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICByZW1vdmVTZWxlY3RlZChub2RlczogQVhUcmVlVmlld05vZGVbXSk6IHZvaWQge1xuICAgIGZvciAobGV0IGkgPSBub2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKG5vZGVzW2ldLnNlbGVjdGVkICYmICFub2Rlc1tpXS5pbmRldGVybWluYXRlKSB7XG4gICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZXNbaV0uY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZChub2Rlc1tpXS5jaGlsZHJlbiA/PyBbXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHVwZGF0ZSBhbGwgcGFyZW50IHN0YXRlcyBpbiB0aGUgdHJlZSAodXNlZCBhZnRlciBkZWxldGlvbilcbiAgICovXG4gIHVwZGF0ZUFsbFBhcmVudFN0YXRlcyhub2RlczogQVhUcmVlVmlld05vZGVbXSwgaW50ZXJtZWRpYXRlU3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUFsbFBhcmVudFN0YXRlcyhub2RlLmNoaWxkcmVuLCBpbnRlcm1lZGlhdGVTdGF0ZSk7XG5cbiAgICAgICAgY29uc3QgeyBhbGxTZWxlY3RlZCwgc29tZVNlbGVjdGVkIH0gPSB0aGlzLmdldENoaWxkcmVuU2VsZWN0aW9uU3RhdGUobm9kZS5jaGlsZHJlbik7XG5cbiAgICAgICAgaWYgKGFsbFNlbGVjdGVkKSB7XG4gICAgICAgICAgbm9kZS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoc29tZVNlbGVjdGVkKSB7XG4gICAgICAgICAgaWYgKGludGVybWVkaWF0ZVN0YXRlKSB7XG4gICAgICAgICAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBFeHBhbnNpb24gTWFuYWdlbWVudCA9PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgc2V0IGV4cGFuZGVkIHN0YXRlICh3aXRoIGxhenkgbG9hZGluZylcbiAgICovXG4gIGFzeW5jIHNldEV4cGFuZGVkU3RhdGUoXG4gICAgbm9kZXM6IEFYVHJlZVZpZXdOb2RlW10sXG4gICAgZXhwYW5kZWQ6IGJvb2xlYW4sXG4gICAgaXNMYXp5RGF0YVNvdXJjZTogYm9vbGVhbixcbiAgICBsb2FkTm9kZUNoaWxkcmVuOiAobm9kZTogQVhUcmVlVmlld05vZGUpID0+IFByb21pc2U8dm9pZD4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgY29uc3QgaGFzQ2hpbGRyZW4gPSB0aGlzLmhhc0NoaWxkcmVuKG5vZGUpO1xuICAgICAgY29uc3QgY2FuTGF6eUxvYWQgPSB0aGlzLmNhbkxhenlMb2FkKG5vZGUsIGlzTGF6eURhdGFTb3VyY2UpO1xuXG4gICAgICBpZiAoaGFzQ2hpbGRyZW4gfHwgY2FuTGF6eUxvYWQpIHtcbiAgICAgICAgaWYgKGV4cGFuZGVkICYmIGNhbkxhenlMb2FkKSB7XG4gICAgICAgICAgYXdhaXQgbG9hZE5vZGVDaGlsZHJlbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRFeHBhbmRlZFN0YXRlKG5vZGUuY2hpbGRyZW4sIGV4cGFuZGVkLCBpc0xhenlEYXRhU291cmNlLCBsb2FkTm9kZUNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IERyYWcgJiBEcm9wIEhlbHBlcnMgPT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIEdldCBhcnJheSByZWZlcmVuY2UgYnkgZHJvcCBsaXN0IElEXG4gICAqL1xuICBnZXRBcnJheUJ5TGlzdElkKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdLCBsaXN0SWQ6IHN0cmluZyk6IEFYVHJlZVZpZXdOb2RlW10gfCBudWxsIHtcbiAgICBpZiAobGlzdElkID09PSBBWFRyZWVWaWV3U2VydmljZS5ST09UX0xJU1RfSUQpIHtcbiAgICAgIHJldHVybiBub2RlcztcbiAgICB9XG5cbiAgICBpZiAobGlzdElkLnN0YXJ0c1dpdGgoQVhUcmVlVmlld1NlcnZpY2UuTk9ERV9EUk9QX1BSRUZJWCkpIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGxpc3RJZC5yZXBsYWNlKEFYVHJlZVZpZXdTZXJ2aWNlLk5PREVfRFJPUF9QUkVGSVgsICcnKTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZChub2Rlcywgbm9kZUlkKTtcbiAgICAgIHJldHVybiBub2RlID8gW25vZGVdIDogbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlSWQgPSBsaXN0SWQucmVwbGFjZShBWFRyZWVWaWV3U2VydmljZS5MSVNUX1BSRUZJWCwgJycpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZChub2Rlcywgbm9kZUlkKTtcbiAgICByZXR1cm4gbm9kZT8uY2hpbGRyZW4gPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHBhcmVudCBub2RlIGJ5IGxpc3QgSURcbiAgICovXG4gIGZpbmRQYXJlbnRCeUxpc3RJZChub2RlczogQVhUcmVlVmlld05vZGVbXSwgbGlzdElkOiBzdHJpbmcpOiBBWFRyZWVWaWV3Tm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGxpc3RJZCA9PT0gQVhUcmVlVmlld1NlcnZpY2UuUk9PVF9MSVNUX0lEKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeCA9IGxpc3RJZC5zdGFydHNXaXRoKEFYVHJlZVZpZXdTZXJ2aWNlLk5PREVfRFJPUF9QUkVGSVgpXG4gICAgICA/IEFYVHJlZVZpZXdTZXJ2aWNlLk5PREVfRFJPUF9QUkVGSVhcbiAgICAgIDogQVhUcmVlVmlld1NlcnZpY2UuTElTVF9QUkVGSVg7XG4gICAgY29uc3Qgbm9kZUlkID0gbGlzdElkLnJlcGxhY2UocHJlZml4LCAnJyk7XG4gICAgcmV0dXJuIHRoaXMuZmluZE5vZGVCeUlkKG5vZGVzLCBub2RlSWQpID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB1bmlxdWUgbGlzdCBJRCBmb3IgZWFjaCBub2RlXG4gICAqL1xuICBnZXRMaXN0SWQobm9kZT86IEFYVHJlZVZpZXdOb2RlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbm9kZSA/IGAke0FYVHJlZVZpZXdTZXJ2aWNlLkxJU1RfUFJFRklYfSR7bm9kZS5pZH1gIDogQVhUcmVlVmlld1NlcnZpY2UuUk9PVF9MSVNUX0lEO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByb290IGxpc3QgSUQgY29uc3RhbnRcbiAgICovXG4gIGdldFJvb3RMaXN0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQVhUcmVlVmlld1NlcnZpY2UuUk9PVF9MSVNUX0lEO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBub2RlIGRyb3AgcHJlZml4IGNvbnN0YW50XG4gICAqL1xuICBnZXROb2RlRHJvcFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBBWFRyZWVWaWV3U2VydmljZS5OT0RFX0RST1BfUFJFRklYO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBsaXN0IHByZWZpeCBjb25zdGFudFxuICAgKi9cbiAgZ2V0TGlzdFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBBWFRyZWVWaWV3U2VydmljZS5MSVNUX1BSRUZJWDtcbiAgfVxufVxuIl19","import { AXDragDirective, AXDragHandleDirective, AXDropListDirective, moveItemInArray, transferArrayItem, } from '@acorex/cdk/drag-drop';\nimport { AXBadgeComponent } from '@acorex/components/badge';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCheckBoxComponent } from '@acorex/components/check-box';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { CommonModule, NgTemplateOutlet } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, inject, input, model, output, signal, ViewEncapsulation, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { map } from 'rxjs/operators';\nimport { AXTreeViewService } from './tree-view.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nexport class AXTreeViewComponent {\n constructor() {\n // ==================== Dependencies ====================\n this.treeService = inject(AXTreeViewService);\n this.platformService = inject(AXPlatform);\n this.destroyRef = inject(DestroyRef);\n // ==================== Inputs ====================\n /** Tree data source - can be static array or lazy loading function */\n this.datasource = model.required(...(ngDevMode ? [{ debugName: \"datasource\" }] : []));\n /** Selection mode: 'single' (click to select) or 'multiple' (checkbox selection) */\n this.selectMode = input('multiple', ...(ngDevMode ? [{ debugName: \"selectMode\" }] : []));\n /** Whether to show checkboxes for selection (only applies to multiple mode) */\n this.showCheckbox = input(true, ...(ngDevMode ? [{ debugName: \"showCheckbox\" }] : []));\n /** When true, selecting a parent also selects all loaded children (only for multiple mode) */\n this.checkChildrenOnSelect = input(true, ...(ngDevMode ? [{ debugName: \"checkChildrenOnSelect\" }] : []));\n /** When true, selecting a child makes parents indeterminate (only for multiple mode) */\n this.intermediateState = input(true, ...(ngDevMode ? [{ debugName: \"intermediateState\" }] : []));\n /** When true, clicking on a node toggles its selection (works for both single and multiple modes) */\n this.checkOnClick = input(false, ...(ngDevMode ? [{ debugName: \"checkOnClick\" }] : []));\n /** Drag and drop mode: 'none' (disabled), 'handler' (drag handle), 'item' (entire item) */\n this.dragMode = input('handler', ...(ngDevMode ? [{ debugName: \"dragMode\" }] : []));\n /** Drag operation type: 'order-only' (reorder only), 'move' (move between parents), 'both' (allow both) */\n this.dragOperationType = input('both', ...(ngDevMode ? [{ debugName: \"dragOperationType\" }] : []));\n /** Whether to show icons */\n this.showIcons = input(true, ...(ngDevMode ? [{ debugName: \"showIcons\" }] : []));\n /** Whether to show children count badge */\n this.showChildrenBadge = input(true, ...(ngDevMode ? [{ debugName: \"showChildrenBadge\" }] : []));\n /** Custom icon for expanded nodes */\n this.expandedIcon = input('fa-solid fa-chevron-down', ...(ngDevMode ? [{ debugName: \"expandedIcon\" }] : []));\n /** Custom icon for collapsed nodes */\n this.collapsedIcon = input('fa-solid fa-chevron-right', ...(ngDevMode ? [{ debugName: \"collapsedIcon\" }] : []));\n /** Indent size in pixels for each level */\n this.indentSize = input(12, ...(ngDevMode ? [{ debugName: \"indentSize\" }] : []));\n /** Node height in pixels */\n this.nodeHeight = input('normal', ...(ngDevMode ? [{ debugName: \"nodeHeight\" }] : []));\n /** Visual style variant */\n this.look = input('default', ...(ngDevMode ? [{ debugName: \"look\" }] : []));\n /** Custom template for tree items */\n this.itemTemplate = input(...(ngDevMode ? [undefined, { debugName: \"itemTemplate\" }] : []));\n // ==================== Outputs ====================\n /** Emitted before a drop operation - set canceled to true to prevent drop */\n this.onBeforeDrop = output();\n /** Emitted when a node is toggled (expanded/collapsed) */\n this.onNodeToggle = output();\n /** Emitted when a node is selected/deselected */\n this.onNodeSelect = output();\n /** Emitted when nodes are reordered within the same parent */\n this.onOrderChange = output();\n /** Emitted when a node is moved to a different parent */\n this.onMoveChange = output();\n /** Emitted for any item change (order or move) */\n this.onItemsChange = output();\n // ==================== Internal State ====================\n /** Internal signal for tree nodes */\n this.nodes = signal([], ...(ngDevMode ? [{ debugName: \"nodes\" }] : []));\n /** Internal signal for tracking loading state */\n this.loadingNodes = signal(new Set(), ...(ngDevMode ? [{ debugName: \"loadingNodes\" }] : []));\n /** Currently focused node ID for keyboard navigation */\n this.focusedNodeId = signal(null, ...(ngDevMode ? [{ debugName: \"focusedNodeId\" }] : []));\n /** RTL detection signal */\n this.isRtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: \"isRtl\" }] : []));\n /** Computed chevron icons that flip for RTL */\n this.directionExpandedIcon = computed(() => this.expandedIcon(), ...(ngDevMode ? [{ debugName: \"directionExpandedIcon\" }] : []));\n this.directionCollapsedIcon = computed(() => {\n const isRtlDirection = this.isRtl();\n const defaultIcon = this.collapsedIcon();\n if (isRtlDirection && defaultIcon === 'fa-solid fa-chevron-right') {\n return 'fa-solid fa-chevron-left';\n }\n if (!isRtlDirection && defaultIcon === 'fa-solid fa-chevron-left') {\n return 'fa-solid fa-chevron-right';\n }\n return defaultIcon;\n }, ...(ngDevMode ? [{ debugName: \"directionCollapsedIcon\" }] : []));\n /** Flag to prevent infinite loops when syncing datasource */\n this.isUpdatingFromDatasource = false;\n /** Computed to check if datasource is a function */\n this.isLazyDataSource = computed(() => typeof this.datasource() === 'function', ...(ngDevMode ? [{ debugName: \"isLazyDataSource\" }] : []));\n // ==================== Effects ====================\n /** Effect to handle datasource changes */\n this.#datasourceEffect = effect(() => {\n if (this.isUpdatingFromDatasource)\n return;\n const ds = this.datasource();\n if (Array.isArray(ds)) {\n this.nodes.set([...ds]);\n }\n else if (typeof ds === 'function') {\n this.loadRootItems(ds).catch((error) => {\n this.handleError('Failed to load root items', error);\n });\n }\n }, ...(ngDevMode ? [{ debugName: \"#datasourceEffect\" }] : []));\n /** Initialize direction change listener */\n this.#initDirectionListener = afterNextRender(() => {\n this.platformService.directionChange\n .pipe(map((event) => event.data === 'rtl'), takeUntilDestroyed(this.destroyRef))\n .subscribe((isRtl) => this.isRtl.set(isRtl));\n });\n }\n // ==================== Effects ====================\n /** Effect to handle datasource changes */\n #datasourceEffect;\n /** Initialize direction change listener */\n #initDirectionListener;\n // ==================== Public API ====================\n /**\n * Expand all nodes in the tree (with lazy loading support)\n */\n async expandAll() {\n await this.treeService.setExpandedState(this.nodes(), true, this.isLazyDataSource(), (node) => this.loadNodeChildren(node));\n this.refreshNodes();\n }\n /**\n * Collapse all nodes in the tree\n */\n collapseAll() {\n this.treeService.setExpandedState(this.nodes(), false, this.isLazyDataSource(), (node) => this.loadNodeChildren(node));\n this.refreshNodes();\n }\n /**\n * Get count of selected nodes\n */\n getSelectedCount() {\n return this.treeService.countSelected(this.nodes());\n }\n /**\n * Check if any nodes are selected\n */\n hasSelection() {\n return this.getSelectedCount() > 0;\n }\n /**\n * Get all selected nodes\n */\n getSelectedNodes() {\n const selected = [];\n this.treeService.collectSelected(this.nodes(), selected);\n return selected;\n }\n /**\n * Delete selected nodes from the tree\n */\n deleteSelected() {\n this.treeService.removeSelected(this.nodes());\n this.treeService.updateAllParentStates(this.nodes(), this.intermediateState());\n this.refreshNodes();\n }\n /**\n * Select all nodes in the tree\n */\n selectAll() {\n this.treeService.setAllSelection(this.nodes(), true);\n this.refreshNodes();\n }\n /**\n * Deselect all nodes in the tree\n */\n deselectAll() {\n this.treeService.setAllSelection(this.nodes(), false);\n this.refreshNodes();\n }\n /**\n * Find a node by ID in the tree\n */\n findNode(id) {\n return this.treeService.findNodeById(this.nodes(), id);\n }\n /**\n * Refresh the tree to trigger change detection\n */\n refresh() {\n this.refreshNodes();\n }\n /**\n * Check if a node is currently loading\n */\n isNodeLoading(nodeId) {\n return this.loadingNodes().has(nodeId);\n }\n /**\n * Get template context for a node\n */\n getTemplateContext(node, level = 0) {\n return {\n $implicit: node,\n node,\n level,\n expanded: node.expanded ?? false,\n childrenCount: node.childrenCount ?? node.children?.length ?? 0,\n loading: node.loading ?? false,\n };\n }\n /**\n * Calculate padding-inline for a node based on its level\n */\n getNodePaddingInline(level) {\n const indent = this.indentSize();\n const currentLook = this.look();\n const multiplier = currentLook === 'with-line' ? 1 / 3 : 1;\n return level * indent * multiplier;\n }\n /**\n * Check if node should show expand toggle\n */\n shouldShowExpandToggle(node) {\n return this.treeService.hasChildren(node) || this.treeService.canLazyLoad(node, this.isLazyDataSource());\n }\n /**\n * Check if checkboxes should be shown (only for multiple mode)\n */\n shouldShowCheckbox() {\n return this.selectMode() === 'multiple' && this.showCheckbox();\n }\n /**\n * Generate unique list ID for each node\n */\n getListId(node) {\n return this.treeService.getListId(node);\n }\n /**\n * Check if a node is currently focused\n */\n isNodeFocused(nodeId) {\n return this.focusedNodeId() === nodeId;\n }\n /**\n * Get ARIA level for a node\n */\n getNodeAriaLevel(level) {\n return level + 1;\n }\n /**\n * Get ARIA expanded state for a node\n */\n getNodeAriaExpanded(node) {\n if (!this.shouldShowExpandToggle(node)) {\n return null;\n }\n return node.expanded ? 'true' : 'false';\n }\n /**\n * Get ARIA selected state for a node\n */\n getNodeAriaSelected(node) {\n if (this.selectMode() === 'single') {\n return node.selected ? 'true' : 'false';\n }\n return null;\n }\n // ==================== Event Handlers ====================\n /**\n * Handle node click - for single selection mode or multiple mode with checkOnClick enabled\n */\n onNodeClick(node, event) {\n if (node.disabled)\n return;\n const mode = this.selectMode();\n const shouldCheckOnClick = this.checkOnClick();\n if (mode === 'single') {\n this.handleSingleSelection(node, event);\n }\n else if (mode === 'multiple' && shouldCheckOnClick) {\n this.handleMultipleSelection(node, event);\n }\n }\n /**\n * Toggle node expansion state with lazy loading support\n */\n async toggleNode(node, event) {\n if (node.disabled)\n return;\n if (this.isEvent(event) && typeof event.stopPropagation === 'function') {\n event.stopPropagation();\n }\n const hasChildren = this.treeService.hasChildren(node);\n const canLazyLoad = this.treeService.canLazyLoad(node, this.isLazyDataSource());\n if (hasChildren || canLazyLoad) {\n const willExpand = !node.expanded;\n if (willExpand && canLazyLoad) {\n await this.loadNodeChildren(node);\n }\n node.expanded = willExpand;\n this.refreshNodes();\n this.onNodeToggle.emit({ component: this, node, nativeEvent: event });\n }\n }\n /**\n * Toggle node selection state with indeterminate support (for multiple mode)\n */\n toggleSelection(node, event) {\n if (!event.isUserInteraction)\n return;\n const mode = this.selectMode();\n if (mode !== 'multiple')\n return;\n const newValue = event.value === null ? true : event.value;\n node.selected = newValue;\n node.indeterminate = false;\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, newValue);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n isUserInteraction: event.isUserInteraction,\n });\n }\n /**\n * Handle drop events for tree nodes\n */\n onDrop(event, parentNode) {\n const targetArray = parentNode?.children ?? this.nodes();\n const isReordering = event.previousContainer === event.container;\n if (isReordering) {\n this.handleReorder(event, targetArray, parentNode);\n }\n else {\n this.handleMove(event, targetArray, parentNode);\n }\n this.refreshNodes();\n }\n /**\n * Handle drop events when dropping directly onto a node (to make it a child)\n */\n onDropOntoNode(event, targetNode) {\n if (!this.canMoveToParent())\n return;\n const sourceListId = event.previousContainer.element.id;\n const sourceArray = this.getArrayByListId(sourceListId);\n if (!sourceArray)\n return;\n const movedNode = sourceArray[event.previousIndex];\n if (!this.treeService.isValidDropTarget(movedNode, targetNode))\n return;\n if (!this.emitBeforeDropEvent(movedNode, sourceListId, targetNode, event.previousIndex, 0))\n return;\n targetNode.children ??= [];\n sourceArray.splice(event.previousIndex, 1);\n targetNode.children.unshift(movedNode);\n targetNode.expanded = true;\n this.emitDropEvents(movedNode, this.findParentByListId(sourceListId), targetNode, event.previousIndex, 0, false);\n this.refreshNodes();\n }\n /**\n * Handle node focus event\n */\n onNodeFocus(nodeId) {\n this.focusedNodeId.set(nodeId);\n }\n /**\n * Handle tree container focus - focus first node if none is focused\n */\n onTreeFocus(event) {\n if (event.target === event.currentTarget) {\n afterNextRender(() => {\n const flatList = this.treeService.buildFlatNodeList(this.nodes());\n if (flatList.length > 0) {\n const focusedId = this.focusedNodeId();\n if (focusedId) {\n this.focusNodeById(focusedId);\n }\n else {\n this.focusNodeById(flatList[0].node.id);\n }\n }\n });\n }\n }\n /**\n * Handle tree container blur\n */\n onTreeBlur(event) {\n if (event.relatedTarget && !event.currentTarget.contains(event.relatedTarget)) {\n this.focusedNodeId.set(null);\n }\n }\n /**\n * Handle keyboard navigation\n */\n handleKeyDown(event) {\n const flatList = this.treeService.buildFlatNodeList(this.nodes());\n if (flatList.length === 0)\n return;\n const currentFocused = this.getFocusedNode();\n let currentIndex = currentFocused ? flatList.findIndex((item) => item.node.id === currentFocused.id) : -1;\n if (currentIndex === -1 && event.target === event.currentTarget) {\n currentIndex = 0;\n }\n const navigationResult = this.handleNavigationKey(event, flatList, currentIndex, currentFocused);\n if (navigationResult.handled) {\n if (navigationResult.shouldPreventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (navigationResult.targetIndex !== null &&\n navigationResult.targetIndex >= 0 &&\n navigationResult.targetIndex < flatList.length) {\n this.focusNodeById(flatList[navigationResult.targetIndex].node.id);\n }\n }\n }\n // ==================== Private Methods ====================\n /**\n * Load root items when datasource is a function\n */\n async loadRootItems(loadFn) {\n try {\n const result = loadFn();\n const rootNodes = result instanceof Promise ? await result : result;\n this.nodes.set(rootNodes);\n }\n catch (error) {\n this.handleError('Failed to load root items', error);\n this.nodes.set([]);\n }\n }\n /**\n * Load children for a node using lazy loading\n */\n async loadNodeChildren(node) {\n if (!this.isLazyDataSource() || node.loading)\n return;\n if (this.treeService.hasChildren(node) || !node.childrenCount || node.childrenCount === 0) {\n return;\n }\n const ds = this.datasource();\n if (typeof ds !== 'function')\n return;\n try {\n node.loading = true;\n this.loadingNodes.update((set) => new Set(set).add(node.id));\n this.refreshNodes();\n const result = ds(node.id);\n const children = result instanceof Promise ? await result : result;\n node.children = children;\n node.childrenCount = children.length;\n }\n catch (error) {\n this.handleError('Failed to load children', error);\n node.childrenCount = 0;\n }\n finally {\n node.loading = false;\n this.loadingNodes.update((set) => {\n const newSet = new Set(set);\n newSet.delete(node.id);\n return newSet;\n });\n this.refreshNodes();\n }\n }\n /**\n * Internal method to refresh nodes signal and sync back to datasource if it's an array\n */\n refreshNodes() {\n const currentNodes = this.nodes();\n this.nodes.set([...currentNodes]);\n if (!this.isLazyDataSource() && !this.isUpdatingFromDatasource) {\n this.isUpdatingFromDatasource = true;\n this.datasource.set([...currentNodes]);\n setTimeout(() => {\n this.isUpdatingFromDatasource = false;\n }, 0);\n }\n }\n /**\n * Handle single selection mode\n */\n handleSingleSelection(node, event) {\n this.treeService.deselectAllNodes(this.nodes());\n node.selected = true;\n node.indeterminate = false;\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n }\n /**\n * Handle multiple selection mode with checkOnClick\n */\n handleMultipleSelection(node, event) {\n const newValue = !node.selected;\n node.selected = newValue;\n node.indeterminate = false;\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, newValue);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n }\n /**\n * Get array reference by drop list ID\n */\n getArrayByListId(listId) {\n return this.treeService.getArrayByListId(this.nodes(), listId);\n }\n /**\n * Find parent node by list ID\n */\n findParentByListId(listId) {\n return this.treeService.findParentByListId(this.nodes(), listId);\n }\n /**\n * Check if move operation is allowed based on dragOperationType\n */\n canMoveToParent() {\n return this.dragOperationType() !== 'order-only';\n }\n /**\n * Check if reorder operation is allowed based on dragOperationType\n */\n canReorder() {\n return this.dragOperationType() !== 'move';\n }\n /**\n * Handle reordering within the same list */\n handleReorder(event, targetArray, parentNode) {\n if (!this.canReorder())\n return;\n const movedNode = targetArray[event.previousIndex];\n moveItemInArray(targetArray, event.previousIndex, event.currentIndex);\n this.emitDropEvents(movedNode, parentNode, parentNode, event.previousIndex, event.currentIndex, true);\n }\n /**\n * Handle moving between different lists\n */\n handleMove(event, targetArray, parentNode) {\n if (!this.canMoveToParent())\n return;\n const sourceListId = event.previousContainer.element.id;\n const sourceArray = this.getArrayByListId(sourceListId);\n if (!sourceArray)\n return;\n const movedNode = sourceArray[event.previousIndex];\n if (parentNode && !this.treeService.isValidDropTarget(movedNode, parentNode))\n return;\n if (!this.emitBeforeDropEvent(movedNode, sourceListId, parentNode, event.previousIndex, event.currentIndex)) {\n return;\n }\n transferArrayItem(sourceArray, targetArray, event.previousIndex, event.currentIndex);\n this.emitDropEvents(movedNode, this.findParentByListId(sourceListId), parentNode, event.previousIndex, event.currentIndex, false);\n }\n /**\n * Emit beforeDrop event and return whether to continue\n */\n emitBeforeDropEvent(movedNode, sourceListId, currentParent, previousIndex, currentIndex) {\n const beforeDropEvent = {\n component: this,\n movedNode,\n previousParent: this.findParentByListId(sourceListId),\n currentParent,\n previousIndex,\n currentIndex,\n canceled: false,\n };\n this.onBeforeDrop.emit(beforeDropEvent);\n return !beforeDropEvent.canceled;\n }\n /**\n * Emit drop events based on operation type\n */\n emitDropEvents(node, previousParent, currentParent, previousIndex, currentIndex, isReorder) {\n const dropEvent = {\n component: this,\n node,\n previousParent,\n currentParent,\n previousIndex,\n currentIndex,\n };\n if (isReorder) {\n this.onOrderChange.emit(dropEvent);\n }\n else {\n this.onMoveChange.emit(dropEvent);\n }\n this.onItemsChange.emit(dropEvent);\n }\n /**\n * Get the currently focused node\n */\n getFocusedNode() {\n const focusedId = this.focusedNodeId();\n if (!focusedId)\n return null;\n return this.treeService.findNodeById(this.nodes(), focusedId);\n }\n /**\n * Set focus to a node by ID\n */\n focusNodeById(nodeId) {\n this.focusedNodeId.set(nodeId);\n setTimeout(() => {\n const element = document.querySelector(`[data-tree-node-id=\"${nodeId}\"]`);\n if (element) {\n element.focus();\n element.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }, 0);\n }\n /**\n * Handle keyboard navigation keys\n */\n handleNavigationKey(event, flatList, currentIndex, currentFocused) {\n let targetIndex = currentIndex;\n let shouldPreventDefault = true;\n let handled = true;\n switch (event.key) {\n case 'ArrowUp':\n if (currentIndex > 0) {\n targetIndex = currentIndex - 1;\n }\n else {\n shouldPreventDefault = false;\n }\n break;\n case 'ArrowDown':\n if (currentIndex < flatList.length - 1) {\n targetIndex = currentIndex + 1;\n }\n else if (currentIndex === -1) {\n targetIndex = 0;\n }\n else {\n shouldPreventDefault = false;\n }\n break;\n case 'ArrowLeft':\n if (currentFocused) {\n if (currentFocused.expanded && this.shouldShowExpandToggle(currentFocused)) {\n this.toggleNode(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n else {\n const currentItem = flatList[currentIndex];\n if (currentItem?.parent) {\n targetIndex = flatList.findIndex((item) => item.node.id === currentItem.parent.id);\n }\n else {\n shouldPreventDefault = false;\n }\n }\n }\n else {\n shouldPreventDefault = false;\n }\n break;\n case 'ArrowRight':\n if (currentFocused) {\n if (!currentFocused.expanded && this.shouldShowExpandToggle(currentFocused)) {\n this.toggleNode(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n else if (currentFocused.expanded &&\n this.treeService.hasChildren(currentFocused) &&\n currentFocused.children) {\n const children = currentFocused.children;\n if (children.length > 0) {\n const firstChild = children[0];\n targetIndex = flatList.findIndex((item) => item.node.id === firstChild.id);\n if (targetIndex === -1) {\n const updatedFlatList = this.treeService.buildFlatNodeList(this.nodes());\n targetIndex = updatedFlatList.findIndex((item) => item.node.id === firstChild.id);\n if (targetIndex >= 0 && targetIndex < updatedFlatList.length) {\n this.focusNodeById(updatedFlatList[targetIndex].node.id);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n }\n }\n else {\n shouldPreventDefault = false;\n }\n }\n else {\n shouldPreventDefault = false;\n }\n }\n else {\n shouldPreventDefault = false;\n }\n break;\n case 'Home':\n targetIndex = 0;\n break;\n case 'End':\n targetIndex = flatList.length - 1;\n break;\n case ' ':\n case 'Space':\n if (currentFocused && this.selectMode() === 'multiple') {\n event.preventDefault();\n this.handleSpaceKeySelection(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n shouldPreventDefault = false;\n break;\n case 'Enter':\n if (currentFocused) {\n event.preventDefault();\n this.handleEnterKeySelection(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n shouldPreventDefault = false;\n break;\n default:\n if ((event.ctrlKey || event.metaKey) && event.key === 'Enter') {\n if (currentFocused && this.selectMode() === 'multiple') {\n event.preventDefault();\n this.handleCtrlEnterSelection(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n }\n handled = false;\n shouldPreventDefault = false;\n break;\n }\n return { handled, shouldPreventDefault, targetIndex };\n }\n /**\n * Handle Space key selection\n */\n handleSpaceKeySelection(node, event) {\n const newValue = !node.selected;\n node.selected = newValue;\n node.indeterminate = false;\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, newValue);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n }\n /**\n * Handle Enter key selection\n */\n handleEnterKeySelection(node, event) {\n const mode = this.selectMode();\n this.treeService.deselectAllNodes(this.nodes());\n node.selected = true;\n node.indeterminate = false;\n if (mode === 'multiple') {\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, true);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n }\n /**\n * Handle Ctrl/Cmd + Enter key selection\n */\n handleCtrlEnterSelection(node, event) {\n const newValue = !node.selected;\n node.selected = newValue;\n node.indeterminate = false;\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, newValue);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n }\n /**\n * Type guard to check if value is an Event\n */\n isEvent(value) {\n return value instanceof Event;\n }\n /**\n * Handle errors consistently\n */\n handleError(message, error) {\n if (error instanceof Error) {\n console.error(`${message}:`, error.message);\n }\n else {\n console.error(`${message}:`, error);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.9\", type: AXTreeViewComponent, isStandalone: true, selector: \"ax-tree-view\", inputs: { datasource: { classPropertyName: \"datasource\", publicName: \"datasource\", isSignal: true, isRequired: true, transformFunction: null }, selectMode: { classPropertyName: \"selectMode\", publicName: \"selectMode\", isSignal: true, isRequired: false, transformFunction: null }, showCheckbox: { classPropertyName: \"showCheckbox\", publicName: \"showCheckbox\", isSignal: true, isRequired: false, transformFunction: null }, checkChildrenOnSelect: { classPropertyName: \"checkChildrenOnSelect\", publicName: \"checkChildrenOnSelect\", isSignal: true, isRequired: false, transformFunction: null }, intermediateState: { classPropertyName: \"intermediateState\", publicName: \"intermediateState\", isSignal: true, isRequired: false, transformFunction: null }, checkOnClick: { classPropertyName: \"checkOnClick\", publicName: \"checkOnClick\", isSignal: true, isRequired: false, transformFunction: null }, dragMode: { classPropertyName: \"dragMode\", publicName: \"dragMode\", isSignal: true, isRequired: false, transformFunction: null }, dragOperationType: { classPropertyName: \"dragOperationType\", publicName: \"dragOperationType\", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: \"showIcons\", publicName: \"showIcons\", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: \"showChildrenBadge\", publicName: \"showChildrenBadge\", isSignal: true, isRequired: false, transformFunction: null }, expandedIcon: { classPropertyName: \"expandedIcon\", publicName: \"expandedIcon\", isSignal: true, isRequired: false, transformFunction: null }, collapsedIcon: { classPropertyName: \"collapsedIcon\", publicName: \"collapsedIcon\", isSignal: true, isRequired: false, transformFunction: null }, indentSize: { classPropertyName: \"indentSize\", publicName: \"indentSize\", isSignal: true, isRequired: false, transformFunction: null }, nodeHeight: { classPropertyName: \"nodeHeight\", publicName: \"nodeHeight\", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: \"look\", publicName: \"look\", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: \"itemTemplate\", publicName: \"itemTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { datasource: \"datasourceChange\", onBeforeDrop: \"onBeforeDrop\", onNodeToggle: \"onNodeToggle\", onNodeSelect: \"onNodeSelect\", onOrderChange: \"onOrderChange\", onMoveChange: \"onMoveChange\", onItemsChange: \"onItemsChange\" }, host: { attributes: { \"role\": \"tree\", \"tabindex\": \"0\" }, listeners: { \"keydown\": \"handleKeyDown($event)\", \"focus\": \"onTreeFocus($event)\", \"blur\": \"onTreeBlur($event)\" }, properties: { \"class.ax-tree-view-default\": \"look() === 'default'\", \"class.ax-tree-view-card\": \"look() === 'card'\", \"class.ax-tree-view-with-line\": \"look() === 'with-line'\", \"class.ax-tree-view-rtl\": \"isRtl\", \"style.--ax-tree-view-indent-size\": \"indentSize() + 'px'\", \"style.--ax-tree-view-line-offset\": \"(indentSize() / 2) + 'px'\", \"attr.aria-label\": \"\\\"Tree navigation\\\"\" }, classAttribute: \"ax-tree-view\" }, providers: [AXTreeViewService], ngImport: i0, template: \"<!-- Root drop list -->\\n<div\\n axFocusTrap\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [sortingDisabled]=\\\"false\\\"\\n [id]=\\\"getListId()\\\"\\n [attr.data-node-id]=\\\"null\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event)\\\"\\n class=\\\"ax-tree-view-drop-list\\\"\\n [class.ax-tree-view-card]=\\\"look() === 'card'\\\"\\n [class.ax-tree-view-with-lines]=\\\"look() === 'with-line'\\\"\\n [class.ax-tree-view-compact]=\\\"nodeHeight() === 'compact'\\\"\\n [class.ax-tree-view-comfortable]=\\\"nodeHeight() === 'comfortable'\\\"\\n role=\\\"group\\\"\\n>\\n @for (node of nodes(); track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree-view-node\\\"\\n [class.ax-tree-view-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree-view-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree-view-node-loading]=\\\"node.loading\\\"\\n role=\\\"treeitem\\\"\\n [attr.aria-level]=\\\"getNodeAriaLevel(0)\\\"\\n [attr.aria-expanded]=\\\"getNodeAriaExpanded(node)\\\"\\n [attr.aria-selected]=\\\"getNodeAriaSelected(node)\\\"\\n [attr.aria-disabled]=\\\"node.disabled ? 'true' : null\\\"\\n >\\n <div\\n class=\\\"ax-tree-view-node-content\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-view-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-tree-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n (click)=\\\"\\n (selectMode() === 'single' || (selectMode() === 'multiple' && checkOnClick())) && onNodeClick(node, $event)\\n \\\"\\n (focus)=\\\"onNodeFocus(node.id)\\\"\\n [tabindex]=\\\"isNodeFocused(node.id) ? 0 : -1\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree-view-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree-view-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree-view-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree-view-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree-view-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i\\n [class]=\\\"node.expanded ? directionExpandedIcon() : directionCollapsedIcon()\\\"\\n class=\\\"ax-tree-view-toggle-icon\\\"\\n ></i>\\n </ax-icon>\\n }\\n </ax-button>\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, 0)\\\"\\n ></ng-container>\\n } @else {\\n @if (shouldShowCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree-view-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree-view-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree-view-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree-view-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree-view-children\\\" role=\\\"group\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n</div>\\n\\n<!-- Recursive children template -->\\n<ng-template #childrenList let-children=\\\"children\\\" let-parent=\\\"parent\\\" let-level=\\\"level\\\">\\n <div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"getListId(parent)\\\"\\n [attr.data-node-id]=\\\"parent.id\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event, parent)\\\"\\n class=\\\"ax-tree-view-drop-list\\\"\\n role=\\\"group\\\"\\n >\\n @for (node of children; track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree-view-node\\\"\\n [class.ax-tree-view-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree-view-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree-view-node-loading]=\\\"node.loading\\\"\\n [class.ax-tree-view-node-focused]=\\\"isNodeFocused(node.id)\\\"\\n role=\\\"treeitem\\\"\\n [attr.aria-level]=\\\"getNodeAriaLevel(level)\\\"\\n [attr.aria-expanded]=\\\"getNodeAriaExpanded(node)\\\"\\n [attr.aria-selected]=\\\"getNodeAriaSelected(node)\\\"\\n [attr.aria-disabled]=\\\"node.disabled ? 'true' : null\\\"\\n >\\n <div\\n class=\\\"ax-tree-view-node-content\\\"\\n [style.padding-inline-start.px]=\\\"getNodePaddingInline(level)\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-view-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-tree-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n (click)=\\\"\\n (selectMode() === 'single' || (selectMode() === 'multiple' && checkOnClick())) &&\\n onNodeClick(node, $event)\\n \\\"\\n (focus)=\\\"onNodeFocus(node.id)\\\"\\n (blur)=\\\"focusedNodeId.set(null)\\\"\\n [tabindex]=\\\"isNodeFocused(node.id) ? 0 : -1\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree-view-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree-view-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree-view-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree-view-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree-view-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i\\n [class]=\\\"node.expanded ? directionExpandedIcon() : directionCollapsedIcon()\\\"\\n class=\\\"ax-tree-view-toggle-icon\\\"\\n ></i>\\n </ax-icon>\\n }\\n </ax-button>\\n\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, level)\\\"\\n ></ng-container>\\n } @else {\\n @if (shouldShowCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree-view-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree-view-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree-view-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree-view-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree-view-children\\\" role=\\\"group\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: level + 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".ax-tree-view{display:block;width:100%;--ax-comp-tree-view-indent-size: 12px;--ax-comp-tree-view-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree-view-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree-view-node-border-radius: 6px;--ax-comp-tree-view-node-margin: .25rem;--ax-comp-tree-view-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree-view-drag-preview-opacity: .9;--ax-comp-tree-view-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree-view-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree-view-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3)}.ax-tree-view-drop-list{min-height:2rem}.ax-tree-view-compact .ax-tree-view-node-content{padding:.25rem .5rem;gap:.375rem;font-size:.8125rem}.ax-tree-view-comfortable .ax-tree-view-node-content{padding:.75rem .625rem;gap:.625rem;font-size:.9375rem}.ax-tree-view-node{position:relative;margin:var(--ax-comp-tree-view-node-margin) 0;border-radius:var(--ax-comp-tree-view-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree-view-node:hover:not(.ax-dragging){background:var(--ax-comp-tree-view-node-hover-bg)}.ax-tree-view-node.ax-tree-view-node-selected{background:var(--ax-comp-tree-view-node-selected-bg);border-color:currentColor}.ax-tree-view-node.ax-dragging{opacity:var(--ax-comp-tree-view-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree-view-node.ax-drag-placeholder{background:var(--ax-comp-tree-view-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree-view-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree-view-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree-view-drop-active-bg);border-radius:var(--ax-comp-tree-view-node-border-radius);outline:2px dashed var(--ax-comp-tree-view-drop-active-outline);outline-offset:-2px}.ax-tree-view-node-content{display:flex;align-items:center;gap:.5rem;padding:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;border:1px solid transparent;border-radius:var(--ax-comp-tree-view-node-border-radius)}.ax-tree-view-node-content:focus{outline:none}.ax-tree-view-node-content:focus-visible{outline:2px solid rgba(var(--ax-sys-color-primary-500),.8);outline-offset:2px;border-radius:var(--ax-comp-tree-view-node-border-radius)}.ax-tree-view-drag-handle{cursor:grab;opacity:.6;padding:.25rem}.ax-tree-view-drag-handle:hover{opacity:1}.ax-tree-view-drag-handle:active{cursor:grabbing}.ax-tree-view-expand-toggle{background:none;border:none;cursor:pointer;padding:.25rem;min-width:1.5rem;height:1.5rem}.ax-tree-view-expand-toggle:not(.ax-tree-view-has-children){opacity:0;pointer-events:none}.ax-tree-view-toggle-icon{font-size:.75rem}.ax-tree-view-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree-view-node-label{flex:1;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree-view-children{padding-inline-start:var(--ax-tree-view-indent-size, var(--ax-comp-tree-view-indent-size))}.ax-tree-view-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree-view-node-loading{opacity:.7}.ax-tree-view-card .ax-tree-view-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:.5rem 0}.ax-tree-view-card .ax-tree-view-node-content{padding:1rem}.ax-tree-view-with-lines .ax-tree-view-children{position:relative;padding-inline-start:var(--ax-tree-view-indent-size, var(--ax-comp-tree-view-indent-size))}.ax-tree-view-with-lines .ax-tree-view-children:before{content:\\\"\\\";position:absolute;inset-inline-start:var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-view-line-color, var(--ax-comp-tree-view-line-color))}.ax-tree-view-with-lines .ax-tree-view-node{position:relative}.ax-tree-view-with-lines .ax-tree-view-node:before{content:\\\"\\\";position:absolute;inset-inline-start:calc(-1 * var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2)));top:60%;width:var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2));height:1px;background:var(--ax-tree-view-line-color, var(--ax-comp-tree-view-line-color))}.ax-tree-view-with-lines>.ax-tree-view-drop-list>.ax-tree-view-node:before,.ax-tree-view-with-lines>.ax-tree-view-node:before{display:none}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"axDrag\", \"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDragHandleDirective, selector: \"[axDragHandle]\" }, { kind: \"directive\", type: AXDropListDirective, selector: \"[axDropList]\", inputs: [\"axDropList\", \"sortingDisabled\", \"dropListGroup\", \"dropListOrientation\"], outputs: [\"dropListDropped\"], exportAs: [\"axDropList\"] }, { kind: \"component\", type: AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: AXCheckBoxComponent, selector: \"ax-check-box\", inputs: [\"disabled\", \"tabIndex\", \"readonly\", \"color\", \"value\", \"name\", \"id\", \"isLoading\", \"indeterminate\"], outputs: [\"onBlur\", \"onFocus\", \"valueChange\", \"onValueChanged\"] }, { kind: \"component\", type: AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-tree-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [AXTreeViewService], imports: [\n CommonModule,\n FormsModule,\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n NgTemplateOutlet,\n AXButtonComponent,\n AXCheckBoxComponent,\n AXBadgeComponent,\n AXDecoratorIconComponent,\n ], host: {\n class: 'ax-tree-view',\n '[class.ax-tree-view-default]': \"look() === 'default'\",\n '[class.ax-tree-view-card]': \"look() === 'card'\",\n '[class.ax-tree-view-with-line]': \"look() === 'with-line'\",\n '[class.ax-tree-view-rtl]': 'isRtl',\n '[style.--ax-tree-view-indent-size]': \"indentSize() + 'px'\",\n '[style.--ax-tree-view-line-offset]': \"(indentSize() / 2) + 'px'\",\n role: 'tree',\n '[attr.aria-label]': '\"Tree navigation\"',\n '(keydown)': 'handleKeyDown($event)',\n '(focus)': 'onTreeFocus($event)',\n '(blur)': 'onTreeBlur($event)',\n tabindex: '0',\n }, template: \"<!-- Root drop list -->\\n<div\\n axFocusTrap\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [sortingDisabled]=\\\"false\\\"\\n [id]=\\\"getListId()\\\"\\n [attr.data-node-id]=\\\"null\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event)\\\"\\n class=\\\"ax-tree-view-drop-list\\\"\\n [class.ax-tree-view-card]=\\\"look() === 'card'\\\"\\n [class.ax-tree-view-with-lines]=\\\"look() === 'with-line'\\\"\\n [class.ax-tree-view-compact]=\\\"nodeHeight() === 'compact'\\\"\\n [class.ax-tree-view-comfortable]=\\\"nodeHeight() === 'comfortable'\\\"\\n role=\\\"group\\\"\\n>\\n @for (node of nodes(); track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree-view-node\\\"\\n [class.ax-tree-view-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree-view-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree-view-node-loading]=\\\"node.loading\\\"\\n role=\\\"treeitem\\\"\\n [attr.aria-level]=\\\"getNodeAriaLevel(0)\\\"\\n [attr.aria-expanded]=\\\"getNodeAriaExpanded(node)\\\"\\n [attr.aria-selected]=\\\"getNodeAriaSelected(node)\\\"\\n [attr.aria-disabled]=\\\"node.disabled ? 'true' : null\\\"\\n >\\n <div\\n class=\\\"ax-tree-view-node-content\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-view-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-tree-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n (click)=\\\"\\n (selectMode() === 'single' || (selectMode() === 'multiple' && checkOnClick())) && onNodeClick(node, $event)\\n \\\"\\n (focus)=\\\"onNodeFocus(node.id)\\\"\\n [tabindex]=\\\"isNodeFocused(node.id) ? 0 : -1\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree-view-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree-view-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree-view-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree-view-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree-view-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i\\n [class]=\\\"node.expanded ? directionExpandedIcon() : directionCollapsedIcon()\\\"\\n class=\\\"ax-tree-view-toggle-icon\\\"\\n ></i>\\n </ax-icon>\\n }\\n </ax-button>\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, 0)\\\"\\n ></ng-container>\\n } @else {\\n @if (shouldShowCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree-view-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree-view-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree-view-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree-view-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree-view-children\\\" role=\\\"group\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n</div>\\n\\n<!-- Recursive children template -->\\n<ng-template #childrenList let-children=\\\"children\\\" let-parent=\\\"parent\\\" let-level=\\\"level\\\">\\n <div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"getListId(parent)\\\"\\n [attr.data-node-id]=\\\"parent.id\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event, parent)\\\"\\n class=\\\"ax-tree-view-drop-list\\\"\\n role=\\\"group\\\"\\n >\\n @for (node of children; track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree-view-node\\\"\\n [class.ax-tree-view-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree-view-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree-view-node-loading]=\\\"node.loading\\\"\\n [class.ax-tree-view-node-focused]=\\\"isNodeFocused(node.id)\\\"\\n role=\\\"treeitem\\\"\\n [attr.aria-level]=\\\"getNodeAriaLevel(level)\\\"\\n [attr.aria-expanded]=\\\"getNodeAriaExpanded(node)\\\"\\n [attr.aria-selected]=\\\"getNodeAriaSelected(node)\\\"\\n [attr.aria-disabled]=\\\"node.disabled ? 'true' : null\\\"\\n >\\n <div\\n class=\\\"ax-tree-view-node-content\\\"\\n [style.padding-inline-start.px]=\\\"getNodePaddingInline(level)\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-view-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-tree-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n (click)=\\\"\\n (selectMode() === 'single' || (selectMode() === 'multiple' && checkOnClick())) &&\\n onNodeClick(node, $event)\\n \\\"\\n (focus)=\\\"onNodeFocus(node.id)\\\"\\n (blur)=\\\"focusedNodeId.set(null)\\\"\\n [tabindex]=\\\"isNodeFocused(node.id) ? 0 : -1\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree-view-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree-view-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree-view-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree-view-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree-view-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i\\n [class]=\\\"node.expanded ? directionExpandedIcon() : directionCollapsedIcon()\\\"\\n class=\\\"ax-tree-view-toggle-icon\\\"\\n ></i>\\n </ax-icon>\\n }\\n </ax-button>\\n\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, level)\\\"\\n ></ng-container>\\n } @else {\\n @if (shouldShowCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree-view-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree-view-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree-view-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree-view-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree-view-children\\\" role=\\\"group\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: level + 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".ax-tree-view{display:block;width:100%;--ax-comp-tree-view-indent-size: 12px;--ax-comp-tree-view-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree-view-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree-view-node-border-radius: 6px;--ax-comp-tree-view-node-margin: .25rem;--ax-comp-tree-view-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree-view-drag-preview-opacity: .9;--ax-comp-tree-view-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree-view-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree-view-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3)}.ax-tree-view-drop-list{min-height:2rem}.ax-tree-view-compact .ax-tree-view-node-content{padding:.25rem .5rem;gap:.375rem;font-size:.8125rem}.ax-tree-view-comfortable .ax-tree-view-node-content{padding:.75rem .625rem;gap:.625rem;font-size:.9375rem}.ax-tree-view-node{position:relative;margin:var(--ax-comp-tree-view-node-margin) 0;border-radius:var(--ax-comp-tree-view-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree-view-node:hover:not(.ax-dragging){background:var(--ax-comp-tree-view-node-hover-bg)}.ax-tree-view-node.ax-tree-view-node-selected{background:var(--ax-comp-tree-view-node-selected-bg);border-color:currentColor}.ax-tree-view-node.ax-dragging{opacity:var(--ax-comp-tree-view-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree-view-node.ax-drag-placeholder{background:var(--ax-comp-tree-view-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree-view-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree-view-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree-view-drop-active-bg);border-radius:var(--ax-comp-tree-view-node-border-radius);outline:2px dashed var(--ax-comp-tree-view-drop-active-outline);outline-offset:-2px}.ax-tree-view-node-content{display:flex;align-items:center;gap:.5rem;padding:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;border:1px solid transparent;border-radius:var(--ax-comp-tree-view-node-border-radius)}.ax-tree-view-node-content:focus{outline:none}.ax-tree-view-node-content:focus-visible{outline:2px solid rgba(var(--ax-sys-color-primary-500),.8);outline-offset:2px;border-radius:var(--ax-comp-tree-view-node-border-radius)}.ax-tree-view-drag-handle{cursor:grab;opacity:.6;padding:.25rem}.ax-tree-view-drag-handle:hover{opacity:1}.ax-tree-view-drag-handle:active{cursor:grabbing}.ax-tree-view-expand-toggle{background:none;border:none;cursor:pointer;padding:.25rem;min-width:1.5rem;height:1.5rem}.ax-tree-view-expand-toggle:not(.ax-tree-view-has-children){opacity:0;pointer-events:none}.ax-tree-view-toggle-icon{font-size:.75rem}.ax-tree-view-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree-view-node-label{flex:1;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree-view-children{padding-inline-start:var(--ax-tree-view-indent-size, var(--ax-comp-tree-view-indent-size))}.ax-tree-view-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree-view-node-loading{opacity:.7}.ax-tree-view-card .ax-tree-view-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:.5rem 0}.ax-tree-view-card .ax-tree-view-node-content{padding:1rem}.ax-tree-view-with-lines .ax-tree-view-children{position:relative;padding-inline-start:var(--ax-tree-view-indent-size, var(--ax-comp-tree-view-indent-size))}.ax-tree-view-with-lines .ax-tree-view-children:before{content:\\\"\\\";position:absolute;inset-inline-start:var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-view-line-color, var(--ax-comp-tree-view-line-color))}.ax-tree-view-with-lines .ax-tree-view-node{position:relative}.ax-tree-view-with-lines .ax-tree-view-node:before{content:\\\"\\\";position:absolute;inset-inline-start:calc(-1 * var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2)));top:60%;width:var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2));height:1px;background:var(--ax-tree-view-line-color, var(--ax-comp-tree-view-line-color))}.ax-tree-view-with-lines>.ax-tree-view-drop-list>.ax-tree-view-node:before,.ax-tree-view-with-lines>.ax-tree-view-node:before{display:none}\\n\"] }]\n }], propDecorators: { datasource: [{ type: i0.Input, args: [{ isSignal: true, alias: \"datasource\", required: true }] }, { type: i0.Output, args: [\"datasourceChange\"] }], selectMode: [{ type: i0.Input, args: [{ isSignal: true, alias: \"selectMode\", required: false }] }], showCheckbox: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showCheckbox\", required: false }] }], checkChildrenOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: \"checkChildrenOnSelect\", required: false }] }], intermediateState: [{ type: i0.Input, args: [{ isSignal: true, alias: \"intermediateState\", required: false }] }], checkOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: \"checkOnClick\", required: false }] }], dragMode: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragMode\", required: false }] }], dragOperationType: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragOperationType\", required: false }] }], showIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showIcons\", required: false }] }], showChildrenBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showChildrenBadge\", required: false }] }], expandedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"expandedIcon\", required: false }] }], collapsedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"collapsedIcon\", required: false }] }], indentSize: [{ type: i0.Input, args: [{ isSignal: true, alias: \"indentSize\", required: false }] }], nodeHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: \"nodeHeight\", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: \"look\", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"itemTemplate\", required: false }] }], onBeforeDrop: [{ type: i0.Output, args: [\"onBeforeDrop\"] }], onNodeToggle: [{ type: i0.Output, args: [\"onNodeToggle\"] }], onNodeSelect: [{ type: i0.Output, args: [\"onNodeSelect\"] }], onOrderChange: [{ type: i0.Output, args: [\"onOrderChange\"] }], onMoveChange: [{ type: i0.Output, args: [\"onMoveChange\"] }], onItemsChange: [{ type: i0.Output, args: [\"onItemsChange\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZS12aWV3L3NyYy9saWIvdHJlZS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZS12aWV3L3NyYy9saWIvdHJlZS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUVuQixlQUFlLEVBQ2YsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQW9EeEQsTUFBTSxPQUFPLG1CQUFtQjtJQW5DaEM7UUFvQ0UseURBQXlEO1FBQ3hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVqRCxtREFBbUQ7UUFDbkQsc0VBQXNFO1FBQzdELGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxxREFBd0IsQ0FBQztRQUU3RCxvRkFBb0Y7UUFDM0UsZUFBVSxHQUFHLEtBQUssQ0FBdUIsVUFBVSxzREFBQyxDQUFDO1FBRTlELCtFQUErRTtRQUN0RSxpQkFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLHdEQUFDLENBQUM7UUFFcEMsOEZBQThGO1FBQ3JGLDBCQUFxQixHQUFHLEtBQUssQ0FBQyxJQUFJLGlFQUFDLENBQUM7UUFFN0Msd0ZBQXdGO1FBQy9FLHNCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLDZEQUFDLENBQUM7UUFFekMscUdBQXFHO1FBQzVGLGlCQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssd0RBQUMsQ0FBQztRQUVyQywyRkFBMkY7UUFDbEYsYUFBUSxHQUFHLEtBQUssQ0FBcUIsU0FBUyxvREFBQyxDQUFDO1FBRXpELDJHQUEyRztRQUNsRyxzQkFBaUIsR0FBRyxLQUFLLENBQThCLE1BQU0sNkRBQUMsQ0FBQztRQUV4RSw0QkFBNEI7UUFDbkIsY0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLHFEQUFDLENBQUM7UUFFakMsMkNBQTJDO1FBQ2xDLHNCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLDZEQUFDLENBQUM7UUFFekMscUNBQXFDO1FBQzVCLGlCQUFZLEdBQUcsS0FBSyxDQUFDLDBCQUEwQix3REFBQyxDQUFDO1FBRTFELHNDQUFzQztRQUM3QixrQkFBYSxHQUFHLEtBQUssQ0FBQywyQkFBMkIseURBQUMsQ0FBQztRQUU1RCwyQ0FBMkM7UUFDbEMsZUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLHNEQUFDLENBQUM7UUFFaEMsNEJBQTRCO1FBQ25CLGVBQVUsR0FBRyxLQUFLLENBQXVDLFFBQVEsc0RBQUMsQ0FBQztRQUU1RSwyQkFBMkI7UUFDbEIsU0FBSSxHQUFHLEtBQUssQ0FBcUIsU0FBUyxnREFBQyxDQUFDO1FBRXJELHFDQUFxQztRQUM1QixpQkFBWSxHQUFHLEtBQUssa0VBQThDLENBQUM7UUFFNUUsb0RBQW9EO1FBQ3BELDZFQUE2RTtRQUNwRSxpQkFBWSxHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUU1RCwwREFBMEQ7UUFDakQsaUJBQVksR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFFNUQsaURBQWlEO1FBQ3hDLGlCQUFZLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBRTVELDhEQUE4RDtRQUNyRCxrQkFBYSxHQUFHLE1BQU0sRUFBdUIsQ0FBQztRQUV2RCx5REFBeUQ7UUFDaEQsaUJBQVksR0FBRyxNQUFNLEVBQXVCLENBQUM7UUFFdEQsa0RBQWtEO1FBQ3pDLGtCQUFhLEdBQUcsTUFBTSxFQUF1QixDQUFDO1FBRXZELDJEQUEyRDtRQUMzRCxxQ0FBcUM7UUFDbEIsVUFBSyxHQUFHLE1BQU0sQ0FBbUIsRUFBRSxpREFBQyxDQUFDO1FBRXhELGlEQUFpRDtRQUM5QixpQkFBWSxHQUFHLE1BQU0sQ0FBYyxJQUFJLEdBQUcsRUFBRSx3REFBQyxDQUFDO1FBRWpFLHdEQUF3RDtRQUNyQyxrQkFBYSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSx5REFBQyxDQUFDO1FBRS9ELDJCQUEyQjtRQUNSLFVBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsaURBQUMsQ0FBQztRQUVoRSwrQ0FBK0M7UUFDNUIsMEJBQXFCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsaUVBQUMsQ0FBQztRQUU1RCwyQkFBc0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3hELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFekMsSUFBSSxjQUFjLElBQUksV0FBVyxLQUFLLDJCQUEyQixFQUFFLENBQUM7Z0JBQ2xFLE9BQU8sMEJBQTBCLENBQUM7WUFDcEMsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLElBQUksV0FBVyxLQUFLLDBCQUEwQixFQUFFLENBQUM7Z0JBQ2xFLE9BQU8sMkJBQTJCLENBQUM7WUFDckMsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUMsa0VBQUMsQ0FBQztRQUVILDZEQUE2RDtRQUNyRCw2QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFFekMsb0RBQW9EO1FBQ25DLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxVQUFVLDREQUFDLENBQUM7UUFFNUYsb0RBQW9EO1FBQ3BELDBDQUEwQztRQUNqQyxzQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLHdCQUF3QjtnQkFBRSxPQUFPO1lBRTFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO29CQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2RCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLDZEQUFDLENBQUM7UUFFSCwyQ0FBMkM7UUFDbEMsMkJBQXNCLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWU7aUJBQ2pDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQ3BDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDcEM7aUJBQ0EsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0tBNnpCSjtJQXAxQkMsb0RBQW9EO0lBQ3BELDBDQUEwQztJQUNqQyxpQkFBaUIsQ0FXdkI7SUFFSCwyQ0FBMkM7SUFDbEMsc0JBQXNCLENBTzVCO0lBRUgsdURBQXVEO0lBQ3ZEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQzVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FDNUIsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDdkYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUM1QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLE1BQU0sUUFBUSxHQUFxQixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLENBQUMsRUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxNQUFjO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FBQyxJQUFvQixFQUFFLEtBQUssR0FBRyxDQUFDO1FBQ2hELE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSTtZQUNmLElBQUk7WUFDSixLQUFLO1lBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSztZQUNoQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDO1lBQy9ELE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUs7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLEtBQWE7UUFDaEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFVBQVUsR0FBRyxXQUFXLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsT0FBTyxLQUFLLEdBQUcsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxzQkFBc0IsQ0FBQyxJQUFvQjtRQUN6QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQjtRQUNoQixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVMsQ0FBQyxJQUFxQjtRQUM3QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxNQUFjO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLE1BQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxJQUFvQjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxJQUFvQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCwyREFBMkQ7SUFDM0Q7O09BRUc7SUFDSCxXQUFXLENBQUMsSUFBb0IsRUFBRSxLQUFZO1FBQzVDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUvQyxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLElBQUksS0FBSyxVQUFVLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQW9CLEVBQUUsS0FBWTtRQUNqRCxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUUxQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsZUFBZSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3ZFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFFaEYsSUFBSSxXQUFXLElBQUksV0FBVyxFQUFFLENBQUM7WUFDL0IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBRWxDLElBQUksVUFBVSxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUM5QixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7WUFDM0IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGVBQWUsQ0FBQyxJQUFvQixFQUFFLEtBQTBCO1FBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCO1lBQUUsT0FBTztRQUVyQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsSUFBSSxJQUFJLEtBQUssVUFBVTtZQUFFLE9BQU87UUFFaEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ3JCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsSUFBSTtZQUNKLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7U0FDM0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEtBQTZCLEVBQUUsVUFBMkI7UUFDL0QsTUFBTSxXQUFXLEdBQUcsVUFBVSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFakUsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsS0FBNkIsRUFBRSxVQUEwQjtRQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUFFLE9BQU87UUFFcEMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUV6QixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7WUFBRSxPQUFPO1FBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFBRSxPQUFPO1FBRW5HLFVBQVUsQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDO1FBQzNCLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUUzQixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWpILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsTUFBYztRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsS0FBaUI7UUFDM0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QyxlQUFlLENBQUMsR0FBRyxFQUFFO2dCQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxTQUFTLEVBQUUsQ0FBQzt3QkFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNoQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMxQyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsS0FBaUI7UUFDMUIsSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLENBQUUsS0FBSyxDQUFDLGFBQTZCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFxQixDQUFDLEVBQUUsQ0FBQztZQUN2RyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLEtBQW9CO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRWxDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM3QyxJQUFJLFlBQVksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFMUcsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDaEUsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDakcsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLGdCQUFnQixDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUNFLGdCQUFnQixDQUFDLFdBQVcsS0FBSyxJQUFJO2dCQUNyQyxnQkFBZ0IsQ0FBQyxXQUFXLElBQUksQ0FBQztnQkFDakMsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQzlDLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDREQUE0RDtJQUM1RDs7T0FFRztJQUNLLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBMEI7UUFDcEQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDeEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3JELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBb0I7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUVyRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFGLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdCLElBQUksT0FBTyxFQUFFLEtBQUssVUFBVTtZQUFFLE9BQU87UUFFckMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFcEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQixNQUFNLFFBQVEsR0FBRyxNQUFNLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ25FLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxDQUFDO1FBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLFlBQVk7UUFDbEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7WUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1lBQ3hDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUIsQ0FBQyxJQUFvQixFQUFFLEtBQVk7UUFDOUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1lBQ0osV0FBVyxFQUFFLEtBQUs7WUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx1QkFBdUIsQ0FBQyxJQUFvQixFQUFFLEtBQVk7UUFDaEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1lBQ0osV0FBVyxFQUFFLEtBQUs7WUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxNQUFjO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsTUFBYztRQUN2QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDckIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxZQUFZLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVTtRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLE1BQU0sQ0FBQztJQUM3QyxDQUFDO0lBRUQ7a0RBQzhDO0lBQ3RDLGFBQWEsQ0FDbkIsS0FBNkIsRUFDN0IsV0FBNkIsRUFDN0IsVUFBMkI7UUFFM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBRS9CLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkQsZUFBZSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVLENBQ2hCLEtBQTZCLEVBQzdCLFdBQTZCLEVBQzdCLFVBQTJCO1FBRTNCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQUUsT0FBTztRQUVwQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBRXpCLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbkQsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7WUFBRSxPQUFPO1FBRXJGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM1RyxPQUFPO1FBQ1QsQ0FBQztRQUVELGlCQUFpQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckYsSUFBSSxDQUFDLGNBQWMsQ0FDakIsU0FBUyxFQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsRUFDckMsVUFBVSxFQUNWLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLEVBQ2xCLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CLENBQ3pCLFNBQXlCLEVBQ3pCLFlBQW9CLEVBQ3BCLGFBQXlDLEVBQ3pDLGFBQXFCLEVBQ3JCLFlBQW9CO1FBRXBCLE1BQU0sZUFBZSxHQUE4QjtZQUNqRCxTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVM7WUFDVCxjQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQztZQUNyRCxhQUFhO1lBQ2IsYUFBYTtZQUNiLFlBQVk7WUFDWixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFeEMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUNwQixJQUFvQixFQUNwQixjQUEwQyxFQUMxQyxhQUF5QyxFQUN6QyxhQUFxQixFQUNyQixZQUFvQixFQUNwQixTQUFrQjtRQUVsQixNQUFNLFNBQVMsR0FBd0I7WUFDckMsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1lBQ0osY0FBYztZQUNkLGFBQWE7WUFDYixhQUFhO1lBQ2IsWUFBWTtTQUNiLENBQUM7UUFFRixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhLENBQUMsTUFBYztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBYyx1QkFBdUIsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUN2RixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQixDQUN6QixLQUFvQixFQUNwQixRQUE4QixFQUM5QixZQUFvQixFQUNwQixjQUFxQztRQUVyQyxJQUFJLFdBQVcsR0FBa0IsWUFBWSxDQUFDO1FBQzlDLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUVuQixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLFdBQVcsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2dCQUMvQixDQUFDO2dCQUNELE1BQU07WUFFUixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdkMsV0FBVyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7cUJBQU0sSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLG9CQUFvQixHQUFHLEtBQUssQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxXQUFXO2dCQUNkLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ25CLElBQUksY0FBYyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQzt3QkFDM0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQzFFLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQzNDLElBQUksV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzRCQUN4QixXQUFXLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDckYsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLG9CQUFvQixHQUFHLEtBQUssQ0FBQzt3QkFDL0IsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssWUFBWTtnQkFDZixJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQzt3QkFDNUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQzFFLENBQUM7eUJBQU0sSUFDTCxjQUFjLENBQUMsUUFBUTt3QkFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO3dCQUM1QyxjQUFjLENBQUMsUUFBUSxFQUN2QixDQUFDO3dCQUNELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQ3pDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDeEIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUMvQixXQUFXLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUMzRSxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUN2QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dDQUN6RSxXQUFXLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dDQUNsRixJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksV0FBVyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQ0FDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29DQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO2dDQUMxRSxDQUFDOzRCQUNILENBQUM7d0JBQ0gsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLG9CQUFvQixHQUFHLEtBQUssQ0FBQzt3QkFDL0IsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO29CQUMvQixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxXQUFXLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixNQUFNO1lBRVIsS0FBSyxLQUFLO2dCQUNSLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUVSLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxPQUFPO2dCQUNWLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsdUJBQXVCLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMxRSxDQUFDO2dCQUNELG9CQUFvQixHQUFHLEtBQUssQ0FBQztnQkFDN0IsTUFBTTtZQUVSLEtBQUssT0FBTztnQkFDVixJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQzFFLENBQUM7Z0JBQ0Qsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2dCQUM3QixNQUFNO1lBRVI7Z0JBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQzlELElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxVQUFVLEVBQUUsQ0FBQzt3QkFDdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUMxRSxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDaEIsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2dCQUM3QixNQUFNO1FBQ1YsQ0FBQztRQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssdUJBQXVCLENBQUMsSUFBb0IsRUFBRSxLQUFvQjtRQUN4RSxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNyQixTQUFTLEVBQUUsSUFBSTtZQUNmLElBQUk7WUFDSixXQUFXLEVBQUUsS0FBSztZQUNsQixpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QixDQUFDLElBQW9CLEVBQUUsS0FBb0I7UUFDeEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFM0IsSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDeEIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUNwRixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNyQixTQUFTLEVBQUUsSUFBSTtZQUNmLElBQUk7WUFDSixXQUFXLEVBQUUsS0FBSztZQUNsQixpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QixDQUFDLElBQW9CLEVBQUUsS0FBb0I7UUFDekUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1lBQ0osV0FBVyxFQUFFLEtBQUs7WUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxPQUFPLENBQUMsS0FBYztRQUM1QixPQUFPLEtBQUssWUFBWSxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVyxDQUFDLE9BQWUsRUFBRSxLQUFjO1FBQ2pELElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7OEdBaDhCVSxtQkFBbUI7a0dBQW5CLG1CQUFtQixza0dBN0JuQixDQUFDLGlCQUFpQixDQUFDLDBCQ3hEaEMsNnpTQTROQSw4K0lEbEtJLFlBQVkscU1BQ1osV0FBVywrVkFDWCxlQUFlLHFVQUNmLHFCQUFxQiwyREFDckIsbUJBQW1CLG9NQUVuQixpQkFBaUIsMlVBQ2pCLG1CQUFtQixzT0FDbkIsZ0JBQWdCLHdGQUNoQix3QkFBd0I7OzJGQWtCZixtQkFBbUI7a0JBbkMvQixTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixDQUFDLGlCQUFpQixDQUFDLFdBQ3JCO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLHdCQUF3QjtxQkFDekIsUUFDSzt3QkFDSixLQUFLLEVBQUUsY0FBYzt3QkFDckIsOEJBQThCLEVBQUUsc0JBQXNCO3dCQUN0RCwyQkFBMkIsRUFBRSxtQkFBbUI7d0JBQ2hELGdDQUFnQyxFQUFFLHdCQUF3Qjt3QkFDMUQsMEJBQTBCLEVBQUUsT0FBTzt3QkFDbkMsb0NBQW9DLEVBQUUscUJBQXFCO3dCQUMzRCxvQ0FBb0MsRUFBRSwyQkFBMkI7d0JBQ2pFLElBQUksRUFBRSxNQUFNO3dCQUNaLG1CQUFtQixFQUFFLG1CQUFtQjt3QkFDeEMsV0FBVyxFQUFFLHVCQUF1Qjt3QkFDcEMsU0FBUyxFQUFFLHFCQUFxQjt3QkFDaEMsUUFBUSxFQUFFLG9CQUFvQjt3QkFDOUIsUUFBUSxFQUFFLEdBQUc7cUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7XG4gIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgQVhEcmFnSGFuZGxlRGlyZWN0aXZlLFxuICBBWERyb3BMaXN0RGlyZWN0aXZlLFxuICBBWERyb3BMaXN0RHJvcHBlZEV2ZW50LFxuICBtb3ZlSXRlbUluQXJyYXksXG4gIHRyYW5zZmVyQXJyYXlJdGVtLFxufSBmcm9tICdAYWNvcmV4L2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQVhCYWRnZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9iYWRnZSc7XG5pbXBvcnQgeyBBWEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhDaGVja0JveENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jaGVjay1ib3gnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQbGF0Zm9ybSB9IGZyb20gJ0BhY29yZXgvY29yZS9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgRGVzdHJveVJlZixcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBtb2RlbCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFYVHJlZVZpZXdTZXJ2aWNlIH0gZnJvbSAnLi90cmVlLXZpZXcuc2VydmljZSc7XG5pbXBvcnQge1xuICBBWFRyZWVWaWV3QmVmb3JlRHJvcEV2ZW50LFxuICBBWFRyZWVWaWV3Q2FsbGJhY2ssXG4gIEFYVHJlZVZpZXdEYXRhU291cmNlLFxuICBBWFRyZWVWaWV3RHJhZ01vZGUsXG4gIEFYVHJlZVZpZXdEcmFnT3BlcmF0aW9uVHlwZSxcbiAgQVhUcmVlVmlld0Ryb3BFdmVudCxcbiAgQVhUcmVlVmlld0ZsYXROb2RlLFxuICBBWFRyZWVWaWV3SXRlbVRlbXBsYXRlQ29udGV4dCxcbiAgQVhUcmVlVmlld05vZGUsXG4gIEFYVHJlZVZpZXdOb2RlU2VsZWN0RXZlbnQsXG4gIEFYVHJlZVZpZXdOb2RlVG9nZ2xlRXZlbnQsXG4gIEFYVHJlZVZpZXdTZWxlY3RNb2RlLFxuICBBWFRyZWVWaWV3Vmlld0xvb2ssXG59IGZyb20gJy4vdHJlZS12aWV3LnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtdHJlZS12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RyZWUtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RyZWUtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbQVhUcmVlVmlld1NlcnZpY2VdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyYWdIYW5kbGVEaXJlY3RpdmUsXG4gICAgQVhEcm9wTGlzdERpcmVjdGl2ZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEFYQnV0dG9uQ29tcG9uZW50LFxuICAgIEFYQ2hlY2tCb3hDb21wb25lbnQsXG4gICAgQVhCYWRnZUNvbXBvbmVudCxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gIF0sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2F4LXRyZWUtdmlldycsXG4gICAgJ1tjbGFzcy5heC10cmVlLXZpZXctZGVmYXVsdF0nOiBcImxvb2soKSA9PT0gJ2RlZmF1bHQnXCIsXG4gICAgJ1tjbGFzcy5heC10cmVlLXZpZXctY2FyZF0nOiBcImxvb2soKSA9PT0gJ2NhcmQnXCIsXG4gICAgJ1tjbGFzcy5heC10cmVlLXZpZXctd2l0aC1saW5lXSc6IFwibG9vaygpID09PSAnd2l0aC1saW5lJ1wiLFxuICAgICdbY2xhc3MuYXgtdHJlZS12aWV3LXJ0bF0nOiAnaXNSdGwnLFxuICAgICdbc3R5bGUuLS1heC10cmVlLXZpZXctaW5kZW50LXNpemVdJzogXCJpbmRlbnRTaXplKCkgKyAncHgnXCIsXG4gICAgJ1tzdHlsZS4tLWF4LXRyZWUtdmlldy1saW5lLW9mZnNldF0nOiBcIihpbmRlbnRTaXplKCkgLyAyKSArICdweCdcIixcbiAgICByb2xlOiAndHJlZScsXG4gICAgJ1thdHRyLmFyaWEtbGFiZWxdJzogJ1wiVHJlZSBuYXZpZ2F0aW9uXCInLFxuICAgICcoa2V5ZG93biknOiAnaGFuZGxlS2V5RG93bigkZXZlbnQpJyxcbiAgICAnKGZvY3VzKSc6ICdvblRyZWVGb2N1cygkZXZlbnQpJyxcbiAgICAnKGJsdXIpJzogJ29uVHJlZUJsdXIoJGV2ZW50KScsXG4gICAgdGFiaW5kZXg6ICcwJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld0NvbXBvbmVudCB7XG4gIC8vID09PT09PT09PT09PT09PT09PT09IERlcGVuZGVuY2llcyA9PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHJlYWRvbmx5IHRyZWVTZXJ2aWNlID0gaW5qZWN0KEFYVHJlZVZpZXdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybVNlcnZpY2UgPSBpbmplY3QoQVhQbGF0Zm9ybSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBJbnB1dHMgPT09PT09PT09PT09PT09PT09PT1cbiAgLyoqIFRyZWUgZGF0YSBzb3VyY2UgLSBjYW4gYmUgc3RhdGljIGFycmF5IG9yIGxhenkgbG9hZGluZyBmdW5jdGlvbiAqL1xuICByZWFkb25seSBkYXRhc291cmNlID0gbW9kZWwucmVxdWlyZWQ8QVhUcmVlVmlld0RhdGFTb3VyY2U+KCk7XG5cbiAgLyoqIFNlbGVjdGlvbiBtb2RlOiAnc2luZ2xlJyAoY2xpY2sgdG8gc2VsZWN0KSBvciAnbXVsdGlwbGUnIChjaGVja2JveCBzZWxlY3Rpb24pICovXG4gIHJlYWRvbmx5IHNlbGVjdE1vZGUgPSBpbnB1dDxBWFRyZWVWaWV3U2VsZWN0TW9kZT4oJ211bHRpcGxlJyk7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBjaGVja2JveGVzIGZvciBzZWxlY3Rpb24gKG9ubHkgYXBwbGllcyB0byBtdWx0aXBsZSBtb2RlKSAqL1xuICByZWFkb25seSBzaG93Q2hlY2tib3ggPSBpbnB1dCh0cnVlKTtcblxuICAvKiogV2hlbiB0cnVlLCBzZWxlY3RpbmcgYSBwYXJlbnQgYWxzbyBzZWxlY3RzIGFsbCBsb2FkZWQgY2hpbGRyZW4gKG9ubHkgZm9yIG11bHRpcGxlIG1vZGUpICovXG4gIHJlYWRvbmx5IGNoZWNrQ2hpbGRyZW5PblNlbGVjdCA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBXaGVuIHRydWUsIHNlbGVjdGluZyBhIGNoaWxkIG1ha2VzIHBhcmVudHMgaW5kZXRlcm1pbmF0ZSAob25seSBmb3IgbXVsdGlwbGUgbW9kZSkgKi9cbiAgcmVhZG9ubHkgaW50ZXJtZWRpYXRlU3RhdGUgPSBpbnB1dCh0cnVlKTtcblxuICAvKiogV2hlbiB0cnVlLCBjbGlja2luZyBvbiBhIG5vZGUgdG9nZ2xlcyBpdHMgc2VsZWN0aW9uICh3b3JrcyBmb3IgYm90aCBzaW5nbGUgYW5kIG11bHRpcGxlIG1vZGVzKSAqL1xuICByZWFkb25seSBjaGVja09uQ2xpY2sgPSBpbnB1dChmYWxzZSk7XG5cbiAgLyoqIERyYWcgYW5kIGRyb3AgbW9kZTogJ25vbmUnIChkaXNhYmxlZCksICdoYW5kbGVyJyAoZHJhZyBoYW5kbGUpLCAnaXRlbScgKGVudGlyZSBpdGVtKSAqL1xuICByZWFkb25seSBkcmFnTW9kZSA9IGlucHV0PEFYVHJlZVZpZXdEcmFnTW9kZT4oJ2hhbmRsZXInKTtcblxuICAvKiogRHJhZyBvcGVyYXRpb24gdHlwZTogJ29yZGVyLW9ubHknIChyZW9yZGVyIG9ubHkpLCAnbW92ZScgKG1vdmUgYmV0d2VlbiBwYXJlbnRzKSwgJ2JvdGgnIChhbGxvdyBib3RoKSAqL1xuICByZWFkb25seSBkcmFnT3BlcmF0aW9uVHlwZSA9IGlucHV0PEFYVHJlZVZpZXdEcmFnT3BlcmF0aW9uVHlwZT4oJ2JvdGgnKTtcblxuICAvKiogV2hldGhlciB0byBzaG93IGljb25zICovXG4gIHJlYWRvbmx5IHNob3dJY29ucyA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgY2hpbGRyZW4gY291bnQgYmFkZ2UgKi9cbiAgcmVhZG9ubHkgc2hvd0NoaWxkcmVuQmFkZ2UgPSBpbnB1dCh0cnVlKTtcblxuICAvKiogQ3VzdG9tIGljb24gZm9yIGV4cGFuZGVkIG5vZGVzICovXG4gIHJlYWRvbmx5IGV4cGFuZGVkSWNvbiA9IGlucHV0KCdmYS1zb2xpZCBmYS1jaGV2cm9uLWRvd24nKTtcblxuICAvKiogQ3VzdG9tIGljb24gZm9yIGNvbGxhcHNlZCBub2RlcyAqL1xuICByZWFkb25seSBjb2xsYXBzZWRJY29uID0gaW5wdXQoJ2ZhLXNvbGlkIGZhLWNoZXZyb24tcmlnaHQnKTtcblxuICAvKiogSW5kZW50IHNpemUgaW4gcGl4ZWxzIGZvciBlYWNoIGxldmVsICovXG4gIHJlYWRvbmx5IGluZGVudFNpemUgPSBpbnB1dCgxMik7XG5cbiAgLyoqIE5vZGUgaGVpZ2h0IGluIHBpeGVscyAqL1xuICByZWFkb25seSBub2RlSGVpZ2h0ID0gaW5wdXQ8J2NvbXBhY3QnIHwgJ25vcm1hbCcgfCAnY29tZm9ydGFibGUnPignbm9ybWFsJyk7XG5cbiAgLyoqIFZpc3VhbCBzdHlsZSB2YXJpYW50ICovXG4gIHJlYWRvbmx5IGxvb2sgPSBpbnB1dDxBWFRyZWVWaWV3Vmlld0xvb2s+KCdkZWZhdWx0Jyk7XG5cbiAgLyoqIEN1c3RvbSB0ZW1wbGF0ZSBmb3IgdHJlZSBpdGVtcyAqL1xuICByZWFkb25seSBpdGVtVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxBWFRyZWVWaWV3SXRlbVRlbXBsYXRlQ29udGV4dD4+KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gT3V0cHV0cyA9PT09PT09PT09PT09PT09PT09PVxuICAvKiogRW1pdHRlZCBiZWZvcmUgYSBkcm9wIG9wZXJhdGlvbiAtIHNldCBjYW5jZWxlZCB0byB0cnVlIHRvIHByZXZlbnQgZHJvcCAqL1xuICByZWFkb25seSBvbkJlZm9yZURyb3AgPSBvdXRwdXQ8QVhUcmVlVmlld0JlZm9yZURyb3BFdmVudD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgbm9kZSBpcyB0b2dnbGVkIChleHBhbmRlZC9jb2xsYXBzZWQpICovXG4gIHJlYWRvbmx5IG9uTm9kZVRvZ2dsZSA9IG91dHB1dDxBWFRyZWVWaWV3Tm9kZVRvZ2dsZUV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBub2RlIGlzIHNlbGVjdGVkL2Rlc2VsZWN0ZWQgKi9cbiAgcmVhZG9ubHkgb25Ob2RlU2VsZWN0ID0gb3V0cHV0PEFYVHJlZVZpZXdOb2RlU2VsZWN0RXZlbnQ+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBub2RlcyBhcmUgcmVvcmRlcmVkIHdpdGhpbiB0aGUgc2FtZSBwYXJlbnQgKi9cbiAgcmVhZG9ubHkgb25PcmRlckNoYW5nZSA9IG91dHB1dDxBWFRyZWVWaWV3RHJvcEV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBub2RlIGlzIG1vdmVkIHRvIGEgZGlmZmVyZW50IHBhcmVudCAqL1xuICByZWFkb25seSBvbk1vdmVDaGFuZ2UgPSBvdXRwdXQ8QVhUcmVlVmlld0Ryb3BFdmVudD4oKTtcblxuICAvKiogRW1pdHRlZCBmb3IgYW55IGl0ZW0gY2hhbmdlIChvcmRlciBvciBtb3ZlKSAqL1xuICByZWFkb25seSBvbkl0ZW1zQ2hhbmdlID0gb3V0cHV0PEFYVHJlZVZpZXdEcm9wRXZlbnQ+KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gSW50ZXJuYWwgU3RhdGUgPT09PT09PT09PT09PT09PT09PT1cbiAgLyoqIEludGVybmFsIHNpZ25hbCBmb3IgdHJlZSBub2RlcyAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm9kZXMgPSBzaWduYWw8QVhUcmVlVmlld05vZGVbXT4oW10pO1xuXG4gIC8qKiBJbnRlcm5hbCBzaWduYWwgZm9yIHRyYWNraW5nIGxvYWRpbmcgc3RhdGUgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvYWRpbmdOb2RlcyA9IHNpZ25hbDxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcblxuICAvKiogQ3VycmVudGx5IGZvY3VzZWQgbm9kZSBJRCBmb3Iga2V5Ym9hcmQgbmF2aWdhdGlvbiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZm9jdXNlZE5vZGVJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAvKiogUlRMIGRldGVjdGlvbiBzaWduYWwgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzUnRsID0gc2lnbmFsKHRoaXMucGxhdGZvcm1TZXJ2aWNlLmlzUnRsKCkpO1xuXG4gIC8qKiBDb21wdXRlZCBjaGV2cm9uIGljb25zIHRoYXQgZmxpcCBmb3IgUlRMICovXG4gIHByb3RlY3RlZCByZWFkb25seSBkaXJlY3Rpb25FeHBhbmRlZEljb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmV4cGFuZGVkSWNvbigpKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlyZWN0aW9uQ29sbGFwc2VkSWNvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpc1J0bERpcmVjdGlvbiA9IHRoaXMuaXNSdGwoKTtcbiAgICBjb25zdCBkZWZhdWx0SWNvbiA9IHRoaXMuY29sbGFwc2VkSWNvbigpO1xuXG4gICAgaWYgKGlzUnRsRGlyZWN0aW9uICYmIGRlZmF1bHRJY29uID09PSAnZmEtc29saWQgZmEtY2hldnJvbi1yaWdodCcpIHtcbiAgICAgIHJldHVybiAnZmEtc29saWQgZmEtY2hldnJvbi1sZWZ0JztcbiAgICB9XG4gICAgaWYgKCFpc1J0bERpcmVjdGlvbiAmJiBkZWZhdWx0SWNvbiA9PT0gJ2ZhLXNvbGlkIGZhLWNoZXZyb24tbGVmdCcpIHtcbiAgICAgIHJldHVybiAnZmEtc29saWQgZmEtY2hldnJvbi1yaWdodCc7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0SWNvbjtcbiAgfSk7XG5cbiAgLyoqIEZsYWcgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyB3aGVuIHN5bmNpbmcgZGF0YXNvdXJjZSAqL1xuICBwcml2YXRlIGlzVXBkYXRpbmdGcm9tRGF0YXNvdXJjZSA9IGZhbHNlO1xuXG4gIC8qKiBDb21wdXRlZCB0byBjaGVjayBpZiBkYXRhc291cmNlIGlzIGEgZnVuY3Rpb24gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpc0xhenlEYXRhU291cmNlID0gY29tcHV0ZWQoKCkgPT4gdHlwZW9mIHRoaXMuZGF0YXNvdXJjZSgpID09PSAnZnVuY3Rpb24nKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBFZmZlY3RzID09PT09PT09PT09PT09PT09PT09XG4gIC8qKiBFZmZlY3QgdG8gaGFuZGxlIGRhdGFzb3VyY2UgY2hhbmdlcyAqL1xuICByZWFkb25seSAjZGF0YXNvdXJjZUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNVcGRhdGluZ0Zyb21EYXRhc291cmNlKSByZXR1cm47XG5cbiAgICBjb25zdCBkcyA9IHRoaXMuZGF0YXNvdXJjZSgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRzKSkge1xuICAgICAgdGhpcy5ub2Rlcy5zZXQoWy4uLmRzXSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMubG9hZFJvb3RJdGVtcyhkcykuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJvb3QgaXRlbXMnLCBlcnJvcik7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKiBJbml0aWFsaXplIGRpcmVjdGlvbiBjaGFuZ2UgbGlzdGVuZXIgKi9cbiAgcmVhZG9ubHkgI2luaXREaXJlY3Rpb25MaXN0ZW5lciA9IGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgdGhpcy5wbGF0Zm9ybVNlcnZpY2UuZGlyZWN0aW9uQ2hhbmdlXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChldmVudCkgPT4gZXZlbnQuZGF0YSA9PT0gJ3J0bCcpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGlzUnRsKSA9PiB0aGlzLmlzUnRsLnNldChpc1J0bCkpO1xuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBQdWJsaWMgQVBJID09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBFeHBhbmQgYWxsIG5vZGVzIGluIHRoZSB0cmVlICh3aXRoIGxhenkgbG9hZGluZyBzdXBwb3J0KVxuICAgKi9cbiAgYXN5bmMgZXhwYW5kQWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMudHJlZVNlcnZpY2Uuc2V0RXhwYW5kZWRTdGF0ZSh0aGlzLm5vZGVzKCksIHRydWUsIHRoaXMuaXNMYXp5RGF0YVNvdXJjZSgpLCAobm9kZSkgPT5cbiAgICAgIHRoaXMubG9hZE5vZGVDaGlsZHJlbihub2RlKSxcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2UgYWxsIG5vZGVzIGluIHRoZSB0cmVlXG4gICAqL1xuICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLnNldEV4cGFuZGVkU3RhdGUodGhpcy5ub2RlcygpLCBmYWxzZSwgdGhpcy5pc0xhenlEYXRhU291cmNlKCksIChub2RlKSA9PlxuICAgICAgdGhpcy5sb2FkTm9kZUNoaWxkcmVuKG5vZGUpLFxuICAgICk7XG4gICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY291bnQgb2Ygc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIGdldFNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5jb3VudFNlbGVjdGVkKHRoaXMubm9kZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW55IG5vZGVzIGFyZSBzZWxlY3RlZFxuICAgKi9cbiAgaGFzU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkQ291bnQoKSA+IDA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBzZWxlY3RlZCBub2Rlc1xuICAgKi9cbiAgZ2V0U2VsZWN0ZWROb2RlcygpOiBBWFRyZWVWaWV3Tm9kZVtdIHtcbiAgICBjb25zdCBzZWxlY3RlZDogQVhUcmVlVmlld05vZGVbXSA9IFtdO1xuICAgIHRoaXMudHJlZVNlcnZpY2UuY29sbGVjdFNlbGVjdGVkKHRoaXMubm9kZXMoKSwgc2VsZWN0ZWQpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgc2VsZWN0ZWQgbm9kZXMgZnJvbSB0aGUgdHJlZVxuICAgKi9cbiAgZGVsZXRlU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgdGhpcy50cmVlU2VydmljZS5yZW1vdmVTZWxlY3RlZCh0aGlzLm5vZGVzKCkpO1xuICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlQWxsUGFyZW50U3RhdGVzKHRoaXMubm9kZXMoKSwgdGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKTtcbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBhbGwgbm9kZXMgaW4gdGhlIHRyZWVcbiAgICovXG4gIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLnNldEFsbFNlbGVjdGlvbih0aGlzLm5vZGVzKCksIHRydWUpO1xuICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzZWxlY3QgYWxsIG5vZGVzIGluIHRoZSB0cmVlXG4gICAqL1xuICBkZXNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLnNldEFsbFNlbGVjdGlvbih0aGlzLm5vZGVzKCksIGZhbHNlKTtcbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBub2RlIGJ5IElEIGluIHRoZSB0cmVlXG4gICAqL1xuICBmaW5kTm9kZShpZDogc3RyaW5nKTogQVhUcmVlVmlld05vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5maW5kTm9kZUJ5SWQodGhpcy5ub2RlcygpLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCB0aGUgdHJlZSB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICovXG4gIHJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG5vZGUgaXMgY3VycmVudGx5IGxvYWRpbmdcbiAgICovXG4gIGlzTm9kZUxvYWRpbmcobm9kZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nTm9kZXMoKS5oYXMobm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGVtcGxhdGUgY29udGV4dCBmb3IgYSBub2RlXG4gICAqL1xuICBnZXRUZW1wbGF0ZUNvbnRleHQobm9kZTogQVhUcmVlVmlld05vZGUsIGxldmVsID0gMCk6IEFYVHJlZVZpZXdJdGVtVGVtcGxhdGVDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiBub2RlLFxuICAgICAgbm9kZSxcbiAgICAgIGxldmVsLFxuICAgICAgZXhwYW5kZWQ6IG5vZGUuZXhwYW5kZWQgPz8gZmFsc2UsXG4gICAgICBjaGlsZHJlbkNvdW50OiBub2RlLmNoaWxkcmVuQ291bnQgPz8gbm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDAsXG4gICAgICBsb2FkaW5nOiBub2RlLmxvYWRpbmcgPz8gZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgcGFkZGluZy1pbmxpbmUgZm9yIGEgbm9kZSBiYXNlZCBvbiBpdHMgbGV2ZWxcbiAgICovXG4gIGdldE5vZGVQYWRkaW5nSW5saW5lKGxldmVsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGluZGVudCA9IHRoaXMuaW5kZW50U2l6ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRMb29rID0gdGhpcy5sb29rKCk7XG4gICAgY29uc3QgbXVsdGlwbGllciA9IGN1cnJlbnRMb29rID09PSAnd2l0aC1saW5lJyA/IDEgLyAzIDogMTtcbiAgICByZXR1cm4gbGV2ZWwgKiBpbmRlbnQgKiBtdWx0aXBsaWVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIG5vZGUgc2hvdWxkIHNob3cgZXhwYW5kIHRvZ2dsZVxuICAgKi9cbiAgc2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShub2RlOiBBWFRyZWVWaWV3Tm9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmhhc0NoaWxkcmVuKG5vZGUpIHx8IHRoaXMudHJlZVNlcnZpY2UuY2FuTGF6eUxvYWQobm9kZSwgdGhpcy5pc0xhenlEYXRhU291cmNlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGNoZWNrYm94ZXMgc2hvdWxkIGJlIHNob3duIChvbmx5IGZvciBtdWx0aXBsZSBtb2RlKVxuICAgKi9cbiAgc2hvdWxkU2hvd0NoZWNrYm94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGUoKSA9PT0gJ211bHRpcGxlJyAmJiB0aGlzLnNob3dDaGVja2JveCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHVuaXF1ZSBsaXN0IElEIGZvciBlYWNoIG5vZGVcbiAgICovXG4gIGdldExpc3RJZChub2RlPzogQVhUcmVlVmlld05vZGUpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmdldExpc3RJZChub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG5vZGUgaXMgY3VycmVudGx5IGZvY3VzZWRcbiAgICovXG4gIGlzTm9kZUZvY3VzZWQobm9kZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkTm9kZUlkKCkgPT09IG5vZGVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgQVJJQSBsZXZlbCBmb3IgYSBub2RlXG4gICAqL1xuICBnZXROb2RlQXJpYUxldmVsKGxldmVsOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBsZXZlbCArIDE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEFSSUEgZXhwYW5kZWQgc3RhdGUgZm9yIGEgbm9kZVxuICAgKi9cbiAgZ2V0Tm9kZUFyaWFFeHBhbmRlZChub2RlOiBBWFRyZWVWaWV3Tm9kZSk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghdGhpcy5zaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGUuZXhwYW5kZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBBUklBIHNlbGVjdGVkIHN0YXRlIGZvciBhIG5vZGVcbiAgICovXG4gIGdldE5vZGVBcmlhU2VsZWN0ZWQobm9kZTogQVhUcmVlVmlld05vZGUpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5zZWxlY3RNb2RlKCkgPT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gbm9kZS5zZWxlY3RlZCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gRXZlbnQgSGFuZGxlcnMgPT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIEhhbmRsZSBub2RlIGNsaWNrIC0gZm9yIHNpbmdsZSBzZWxlY3Rpb24gbW9kZSBvciBtdWx0aXBsZSBtb2RlIHdpdGggY2hlY2tPbkNsaWNrIGVuYWJsZWRcbiAgICovXG4gIG9uTm9kZUNsaWNrKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAobm9kZS5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgbW9kZSA9IHRoaXMuc2VsZWN0TW9kZSgpO1xuICAgIGNvbnN0IHNob3VsZENoZWNrT25DbGljayA9IHRoaXMuY2hlY2tPbkNsaWNrKCk7XG5cbiAgICBpZiAobW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2luZ2xlU2VsZWN0aW9uKG5vZGUsIGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKG1vZGUgPT09ICdtdWx0aXBsZScgJiYgc2hvdWxkQ2hlY2tPbkNsaWNrKSB7XG4gICAgICB0aGlzLmhhbmRsZU11bHRpcGxlU2VsZWN0aW9uKG5vZGUsIGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIG5vZGUgZXhwYW5zaW9uIHN0YXRlIHdpdGggbGF6eSBsb2FkaW5nIHN1cHBvcnRcbiAgICovXG4gIGFzeW5jIHRvZ2dsZU5vZGUobm9kZTogQVhUcmVlVmlld05vZGUsIGV2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChub2RlLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5pc0V2ZW50KGV2ZW50KSAmJiB0eXBlb2YgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNDaGlsZHJlbiA9IHRoaXMudHJlZVNlcnZpY2UuaGFzQ2hpbGRyZW4obm9kZSk7XG4gICAgY29uc3QgY2FuTGF6eUxvYWQgPSB0aGlzLnRyZWVTZXJ2aWNlLmNhbkxhenlMb2FkKG5vZGUsIHRoaXMuaXNMYXp5RGF0YVNvdXJjZSgpKTtcblxuICAgIGlmIChoYXNDaGlsZHJlbiB8fCBjYW5MYXp5TG9hZCkge1xuICAgICAgY29uc3Qgd2lsbEV4cGFuZCA9ICFub2RlLmV4cGFuZGVkO1xuXG4gICAgICBpZiAod2lsbEV4cGFuZCAmJiBjYW5MYXp5TG9hZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWROb2RlQ2hpbGRyZW4obm9kZSk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUuZXhwYW5kZWQgPSB3aWxsRXhwYW5kO1xuICAgICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcbiAgICAgIHRoaXMub25Ob2RlVG9nZ2xlLmVtaXQoeyBjb21wb25lbnQ6IHRoaXMsIG5vZGUsIG5hdGl2ZUV2ZW50OiBldmVudCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIG5vZGUgc2VsZWN0aW9uIHN0YXRlIHdpdGggaW5kZXRlcm1pbmF0ZSBzdXBwb3J0IChmb3IgbXVsdGlwbGUgbW9kZSlcbiAgICovXG4gIHRvZ2dsZVNlbGVjdGlvbihub2RlOiBBWFRyZWVWaWV3Tm9kZSwgZXZlbnQ6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWV2ZW50LmlzVXNlckludGVyYWN0aW9uKSByZXR1cm47XG5cbiAgICBjb25zdCBtb2RlID0gdGhpcy5zZWxlY3RNb2RlKCk7XG4gICAgaWYgKG1vZGUgIT09ICdtdWx0aXBsZScpIHJldHVybjtcblxuICAgIGNvbnN0IG5ld1ZhbHVlID0gZXZlbnQudmFsdWUgPT09IG51bGwgPyB0cnVlIDogZXZlbnQudmFsdWU7XG4gICAgbm9kZS5zZWxlY3RlZCA9IG5ld1ZhbHVlO1xuICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuY2hlY2tDaGlsZHJlbk9uU2VsZWN0KCkgJiYgbm9kZS5jaGlsZHJlbikge1xuICAgICAgdGhpcy50cmVlU2VydmljZS5zZWxlY3RBbGxDaGlsZHJlbihub2RlLmNoaWxkcmVuLCBuZXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW50ZXJtZWRpYXRlU3RhdGUoKSkge1xuICAgICAgdGhpcy50cmVlU2VydmljZS51cGRhdGVQYXJlbnRTdGF0ZXModGhpcy5ub2RlcygpLCBub2RlLCB0aGlzLmludGVybWVkaWF0ZVN0YXRlKCkpO1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gICAgdGhpcy5vbk5vZGVTZWxlY3QuZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBub2RlLFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IGV2ZW50LmlzVXNlckludGVyYWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBkcm9wIGV2ZW50cyBmb3IgdHJlZSBub2Rlc1xuICAgKi9cbiAgb25Ecm9wKGV2ZW50OiBBWERyb3BMaXN0RHJvcHBlZEV2ZW50LCBwYXJlbnROb2RlPzogQVhUcmVlVmlld05vZGUpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXRBcnJheSA9IHBhcmVudE5vZGU/LmNoaWxkcmVuID8/IHRoaXMubm9kZXMoKTtcbiAgICBjb25zdCBpc1Jlb3JkZXJpbmcgPSBldmVudC5wcmV2aW91c0NvbnRhaW5lciA9PT0gZXZlbnQuY29udGFpbmVyO1xuXG4gICAgaWYgKGlzUmVvcmRlcmluZykge1xuICAgICAgdGhpcy5oYW5kbGVSZW9yZGVyKGV2ZW50LCB0YXJnZXRBcnJheSwgcGFyZW50Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlTW92ZShldmVudCwgdGFyZ2V0QXJyYXksIHBhcmVudE5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGRyb3AgZXZlbnRzIHdoZW4gZHJvcHBpbmcgZGlyZWN0bHkgb250byBhIG5vZGUgKHRvIG1ha2UgaXQgYSBjaGlsZClcbiAgICovXG4gIG9uRHJvcE9udG9Ob2RlKGV2ZW50OiBBWERyb3BMaXN0RHJvcHBlZEV2ZW50LCB0YXJnZXROb2RlOiBBWFRyZWVWaWV3Tm9kZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5Nb3ZlVG9QYXJlbnQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc291cmNlTGlzdElkID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuZWxlbWVudC5pZDtcbiAgICBjb25zdCBzb3VyY2VBcnJheSA9IHRoaXMuZ2V0QXJyYXlCeUxpc3RJZChzb3VyY2VMaXN0SWQpO1xuICAgIGlmICghc291cmNlQXJyYXkpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmVkTm9kZSA9IHNvdXJjZUFycmF5W2V2ZW50LnByZXZpb3VzSW5kZXhdO1xuXG4gICAgaWYgKCF0aGlzLnRyZWVTZXJ2aWNlLmlzVmFsaWREcm9wVGFyZ2V0KG1vdmVkTm9kZSwgdGFyZ2V0Tm9kZSkpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZW1pdEJlZm9yZURyb3BFdmVudChtb3ZlZE5vZGUsIHNvdXJjZUxpc3RJZCwgdGFyZ2V0Tm9kZSwgZXZlbnQucHJldmlvdXNJbmRleCwgMCkpIHJldHVybjtcblxuICAgIHRhcmdldE5vZGUuY2hpbGRyZW4gPz89IFtdO1xuICAgIHNvdXJjZUFycmF5LnNwbGljZShldmVudC5wcmV2aW91c0luZGV4LCAxKTtcbiAgICB0YXJnZXROb2RlLmNoaWxkcmVuLnVuc2hpZnQobW92ZWROb2RlKTtcbiAgICB0YXJnZXROb2RlLmV4cGFuZGVkID0gdHJ1ZTtcblxuICAgIHRoaXMuZW1pdERyb3BFdmVudHMobW92ZWROb2RlLCB0aGlzLmZpbmRQYXJlbnRCeUxpc3RJZChzb3VyY2VMaXN0SWQpLCB0YXJnZXROb2RlLCBldmVudC5wcmV2aW91c0luZGV4LCAwLCBmYWxzZSk7XG5cbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBub2RlIGZvY3VzIGV2ZW50XG4gICAqL1xuICBvbk5vZGVGb2N1cyhub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNlZE5vZGVJZC5zZXQobm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdHJlZSBjb250YWluZXIgZm9jdXMgLSBmb2N1cyBmaXJzdCBub2RlIGlmIG5vbmUgaXMgZm9jdXNlZFxuICAgKi9cbiAgb25UcmVlRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgICBjb25zdCBmbGF0TGlzdCA9IHRoaXMudHJlZVNlcnZpY2UuYnVpbGRGbGF0Tm9kZUxpc3QodGhpcy5ub2RlcygpKTtcbiAgICAgICAgaWYgKGZsYXRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBmb2N1c2VkSWQgPSB0aGlzLmZvY3VzZWROb2RlSWQoKTtcbiAgICAgICAgICBpZiAoZm9jdXNlZElkKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzTm9kZUJ5SWQoZm9jdXNlZElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb2N1c05vZGVCeUlkKGZsYXRMaXN0WzBdLm5vZGUuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0cmVlIGNvbnRhaW5lciBibHVyXG4gICAqL1xuICBvblRyZWVCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgIShldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICB0aGlzLmZvY3VzZWROb2RlSWQuc2V0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgKi9cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGZsYXRMaXN0ID0gdGhpcy50cmVlU2VydmljZS5idWlsZEZsYXROb2RlTGlzdCh0aGlzLm5vZGVzKCkpO1xuICAgIGlmIChmbGF0TGlzdC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRGb2N1c2VkID0gdGhpcy5nZXRGb2N1c2VkTm9kZSgpO1xuICAgIGxldCBjdXJyZW50SW5kZXggPSBjdXJyZW50Rm9jdXNlZCA/IGZsYXRMaXN0LmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5ub2RlLmlkID09PSBjdXJyZW50Rm9jdXNlZC5pZCkgOiAtMTtcblxuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xICYmIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgY3VycmVudEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCBuYXZpZ2F0aW9uUmVzdWx0ID0gdGhpcy5oYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50LCBmbGF0TGlzdCwgY3VycmVudEluZGV4LCBjdXJyZW50Rm9jdXNlZCk7XG4gICAgaWYgKG5hdmlnYXRpb25SZXN1bHQuaGFuZGxlZCkge1xuICAgICAgaWYgKG5hdmlnYXRpb25SZXN1bHQuc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG5hdmlnYXRpb25SZXN1bHQudGFyZ2V0SW5kZXggIT09IG51bGwgJiZcbiAgICAgICAgbmF2aWdhdGlvblJlc3VsdC50YXJnZXRJbmRleCA+PSAwICYmXG4gICAgICAgIG5hdmlnYXRpb25SZXN1bHQudGFyZ2V0SW5kZXggPCBmbGF0TGlzdC5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvY3VzTm9kZUJ5SWQoZmxhdExpc3RbbmF2aWdhdGlvblJlc3VsdC50YXJnZXRJbmRleF0ubm9kZS5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gUHJpdmF0ZSBNZXRob2RzID09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBMb2FkIHJvb3QgaXRlbXMgd2hlbiBkYXRhc291cmNlIGlzIGEgZnVuY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJvb3RJdGVtcyhsb2FkRm46IEFYVHJlZVZpZXdDYWxsYmFjayk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBsb2FkRm4oKTtcbiAgICAgIGNvbnN0IHJvb3ROb2RlcyA9IHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UgPyBhd2FpdCByZXN1bHQgOiByZXN1bHQ7XG4gICAgICB0aGlzLm5vZGVzLnNldChyb290Tm9kZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKCdGYWlsZWQgdG8gbG9hZCByb290IGl0ZW1zJywgZXJyb3IpO1xuICAgICAgdGhpcy5ub2Rlcy5zZXQoW10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNoaWxkcmVuIGZvciBhIG5vZGUgdXNpbmcgbGF6eSBsb2FkaW5nXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWROb2RlQ2hpbGRyZW4obm9kZTogQVhUcmVlVmlld05vZGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNMYXp5RGF0YVNvdXJjZSgpIHx8IG5vZGUubG9hZGluZykgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMudHJlZVNlcnZpY2UuaGFzQ2hpbGRyZW4obm9kZSkgfHwgIW5vZGUuY2hpbGRyZW5Db3VudCB8fCBub2RlLmNoaWxkcmVuQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkcyA9IHRoaXMuZGF0YXNvdXJjZSgpO1xuICAgIGlmICh0eXBlb2YgZHMgIT09ICdmdW5jdGlvbicpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBub2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkaW5nTm9kZXMudXBkYXRlKChzZXQpID0+IG5ldyBTZXQoc2V0KS5hZGQobm9kZS5pZCkpO1xuICAgICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZHMobm9kZS5pZCk7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UgPyBhd2FpdCByZXN1bHQgOiByZXN1bHQ7XG4gICAgICBub2RlLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICBub2RlLmNoaWxkcmVuQ291bnQgPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNoaWxkcmVuJywgZXJyb3IpO1xuICAgICAgbm9kZS5jaGlsZHJlbkNvdW50ID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbm9kZS5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmxvYWRpbmdOb2Rlcy51cGRhdGUoKHNldCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHNldCk7XG4gICAgICAgIG5ld1NldC5kZWxldGUobm9kZS5pZCk7XG4gICAgICAgIHJldHVybiBuZXdTZXQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byByZWZyZXNoIG5vZGVzIHNpZ25hbCBhbmQgc3luYyBiYWNrIHRvIGRhdGFzb3VyY2UgaWYgaXQncyBhbiBhcnJheVxuICAgKi9cbiAgcHJpdmF0ZSByZWZyZXNoTm9kZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudE5vZGVzID0gdGhpcy5ub2RlcygpO1xuICAgIHRoaXMubm9kZXMuc2V0KFsuLi5jdXJyZW50Tm9kZXNdKTtcblxuICAgIGlmICghdGhpcy5pc0xhenlEYXRhU291cmNlKCkgJiYgIXRoaXMuaXNVcGRhdGluZ0Zyb21EYXRhc291cmNlKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICB0aGlzLmRhdGFzb3VyY2Uuc2V0KFsuLi5jdXJyZW50Tm9kZXNdKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRGF0YXNvdXJjZSA9IGZhbHNlO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzaW5nbGUgc2VsZWN0aW9uIG1vZGVcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlU2luZ2xlU2VsZWN0aW9uKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLmRlc2VsZWN0QWxsTm9kZXModGhpcy5ub2RlcygpKTtcbiAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbm9kZSxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBtdWx0aXBsZSBzZWxlY3Rpb24gbW9kZSB3aXRoIGNoZWNrT25DbGlja1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVNdWx0aXBsZVNlbGVjdGlvbihub2RlOiBBWFRyZWVWaWV3Tm9kZSwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSAhbm9kZS5zZWxlY3RlZDtcbiAgICBub2RlLnNlbGVjdGVkID0gbmV3VmFsdWU7XG4gICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5jaGVja0NoaWxkcmVuT25TZWxlY3QoKSAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLnNlbGVjdEFsbENoaWxkcmVuKG5vZGUuY2hpbGRyZW4sIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKSB7XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLnVwZGF0ZVBhcmVudFN0YXRlcyh0aGlzLm5vZGVzKCksIG5vZGUsIHRoaXMuaW50ZXJtZWRpYXRlU3RhdGUoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcbiAgICB0aGlzLm9uTm9kZVNlbGVjdC5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIG5vZGUsXG4gICAgICBuYXRpdmVFdmVudDogZXZlbnQsXG4gICAgICBpc1VzZXJJbnRlcmFjdGlvbjogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYXJyYXkgcmVmZXJlbmNlIGJ5IGRyb3AgbGlzdCBJRFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBcnJheUJ5TGlzdElkKGxpc3RJZDogc3RyaW5nKTogQVhUcmVlVmlld05vZGVbXSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmdldEFycmF5QnlMaXN0SWQodGhpcy5ub2RlcygpLCBsaXN0SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgcGFyZW50IG5vZGUgYnkgbGlzdCBJRFxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kUGFyZW50QnlMaXN0SWQobGlzdElkOiBzdHJpbmcpOiBBWFRyZWVWaWV3Tm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJlZVNlcnZpY2UuZmluZFBhcmVudEJ5TGlzdElkKHRoaXMubm9kZXMoKSwgbGlzdElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBtb3ZlIG9wZXJhdGlvbiBpcyBhbGxvd2VkIGJhc2VkIG9uIGRyYWdPcGVyYXRpb25UeXBlXG4gICAqL1xuICBwcml2YXRlIGNhbk1vdmVUb1BhcmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnT3BlcmF0aW9uVHlwZSgpICE9PSAnb3JkZXItb25seSc7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgcmVvcmRlciBvcGVyYXRpb24gaXMgYWxsb3dlZCBiYXNlZCBvbiBkcmFnT3BlcmF0aW9uVHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBjYW5SZW9yZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRyYWdPcGVyYXRpb25UeXBlKCkgIT09ICdtb3ZlJztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVvcmRlcmluZyB3aXRoaW4gdGhlIHNhbWUgbGlzdCAgICovXG4gIHByaXZhdGUgaGFuZGxlUmVvcmRlcihcbiAgICBldmVudDogQVhEcm9wTGlzdERyb3BwZWRFdmVudCxcbiAgICB0YXJnZXRBcnJheTogQVhUcmVlVmlld05vZGVbXSxcbiAgICBwYXJlbnROb2RlPzogQVhUcmVlVmlld05vZGUsXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZW9yZGVyKCkpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmVkTm9kZSA9IHRhcmdldEFycmF5W2V2ZW50LnByZXZpb3VzSW5kZXhdO1xuICAgIG1vdmVJdGVtSW5BcnJheSh0YXJnZXRBcnJheSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcblxuICAgIHRoaXMuZW1pdERyb3BFdmVudHMobW92ZWROb2RlLCBwYXJlbnROb2RlLCBwYXJlbnROb2RlLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBtb3ZpbmcgYmV0d2VlbiBkaWZmZXJlbnQgbGlzdHNcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlTW92ZShcbiAgICBldmVudDogQVhEcm9wTGlzdERyb3BwZWRFdmVudCxcbiAgICB0YXJnZXRBcnJheTogQVhUcmVlVmlld05vZGVbXSxcbiAgICBwYXJlbnROb2RlPzogQVhUcmVlVmlld05vZGUsXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5Nb3ZlVG9QYXJlbnQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc291cmNlTGlzdElkID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuZWxlbWVudC5pZDtcbiAgICBjb25zdCBzb3VyY2VBcnJheSA9IHRoaXMuZ2V0QXJyYXlCeUxpc3RJZChzb3VyY2VMaXN0SWQpO1xuICAgIGlmICghc291cmNlQXJyYXkpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmVkTm9kZSA9IHNvdXJjZUFycmF5W2V2ZW50LnByZXZpb3VzSW5kZXhdO1xuXG4gICAgaWYgKHBhcmVudE5vZGUgJiYgIXRoaXMudHJlZVNlcnZpY2UuaXNWYWxpZERyb3BUYXJnZXQobW92ZWROb2RlLCBwYXJlbnROb2RlKSkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLmVtaXRCZWZvcmVEcm9wRXZlbnQobW92ZWROb2RlLCBzb3VyY2VMaXN0SWQsIHBhcmVudE5vZGUsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cmFuc2ZlckFycmF5SXRlbShzb3VyY2VBcnJheSwgdGFyZ2V0QXJyYXksIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG5cbiAgICB0aGlzLmVtaXREcm9wRXZlbnRzKFxuICAgICAgbW92ZWROb2RlLFxuICAgICAgdGhpcy5maW5kUGFyZW50QnlMaXN0SWQoc291cmNlTGlzdElkKSxcbiAgICAgIHBhcmVudE5vZGUsXG4gICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgZXZlbnQuY3VycmVudEluZGV4LFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGJlZm9yZURyb3AgZXZlbnQgYW5kIHJldHVybiB3aGV0aGVyIHRvIGNvbnRpbnVlXG4gICAqL1xuICBwcml2YXRlIGVtaXRCZWZvcmVEcm9wRXZlbnQoXG4gICAgbW92ZWROb2RlOiBBWFRyZWVWaWV3Tm9kZSxcbiAgICBzb3VyY2VMaXN0SWQ6IHN0cmluZyxcbiAgICBjdXJyZW50UGFyZW50OiBBWFRyZWVWaWV3Tm9kZSB8IHVuZGVmaW5lZCxcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXIsXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJlZm9yZURyb3BFdmVudDogQVhUcmVlVmlld0JlZm9yZURyb3BFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIG1vdmVkTm9kZSxcbiAgICAgIHByZXZpb3VzUGFyZW50OiB0aGlzLmZpbmRQYXJlbnRCeUxpc3RJZChzb3VyY2VMaXN0SWQpLFxuICAgICAgY3VycmVudFBhcmVudCxcbiAgICAgIHByZXZpb3VzSW5kZXgsXG4gICAgICBjdXJyZW50SW5kZXgsXG4gICAgICBjYW5jZWxlZDogZmFsc2UsXG4gICAgfTtcbiAgICB0aGlzLm9uQmVmb3JlRHJvcC5lbWl0KGJlZm9yZURyb3BFdmVudCk7XG5cbiAgICByZXR1cm4gIWJlZm9yZURyb3BFdmVudC5jYW5jZWxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGRyb3AgZXZlbnRzIGJhc2VkIG9uIG9wZXJhdGlvbiB0eXBlXG4gICAqL1xuICBwcml2YXRlIGVtaXREcm9wRXZlbnRzKFxuICAgIG5vZGU6IEFYVHJlZVZpZXdOb2RlLFxuICAgIHByZXZpb3VzUGFyZW50OiBBWFRyZWVWaWV3Tm9kZSB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50UGFyZW50OiBBWFRyZWVWaWV3Tm9kZSB8IHVuZGVmaW5lZCxcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXIsXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gICAgaXNSZW9yZGVyOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBkcm9wRXZlbnQ6IEFYVHJlZVZpZXdEcm9wRXZlbnQgPSB7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBub2RlLFxuICAgICAgcHJldmlvdXNQYXJlbnQsXG4gICAgICBjdXJyZW50UGFyZW50LFxuICAgICAgcHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRJbmRleCxcbiAgICB9O1xuXG4gICAgaWYgKGlzUmVvcmRlcikge1xuICAgICAgdGhpcy5vbk9yZGVyQ2hhbmdlLmVtaXQoZHJvcEV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbk1vdmVDaGFuZ2UuZW1pdChkcm9wRXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLm9uSXRlbXNDaGFuZ2UuZW1pdChkcm9wRXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudGx5IGZvY3VzZWQgbm9kZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGb2N1c2VkTm9kZSgpOiBBWFRyZWVWaWV3Tm9kZSB8IG51bGwge1xuICAgIGNvbnN0IGZvY3VzZWRJZCA9IHRoaXMuZm9jdXNlZE5vZGVJZCgpO1xuICAgIGlmICghZm9jdXNlZElkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5maW5kTm9kZUJ5SWQodGhpcy5ub2RlcygpLCBmb2N1c2VkSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBmb2N1cyB0byBhIG5vZGUgYnkgSURcbiAgICovXG4gIHByaXZhdGUgZm9jdXNOb2RlQnlJZChub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNlZE5vZGVJZC5zZXQobm9kZUlkKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgW2RhdGEtdHJlZS1ub2RlLWlkPVwiJHtub2RlSWR9XCJdYCk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGtleWJvYXJkIG5hdmlnYXRpb24ga2V5c1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uS2V5KFxuICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuICAgIGZsYXRMaXN0OiBBWFRyZWVWaWV3RmxhdE5vZGVbXSxcbiAgICBjdXJyZW50SW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50Rm9jdXNlZDogQVhUcmVlVmlld05vZGUgfCBudWxsLFxuICApOiB7IGhhbmRsZWQ6IGJvb2xlYW47IHNob3VsZFByZXZlbnREZWZhdWx0OiBib29sZWFuOyB0YXJnZXRJbmRleDogbnVtYmVyIHwgbnVsbCB9IHtcbiAgICBsZXQgdGFyZ2V0SW5kZXg6IG51bWJlciB8IG51bGwgPSBjdXJyZW50SW5kZXg7XG4gICAgbGV0IHNob3VsZFByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICBsZXQgaGFuZGxlZCA9IHRydWU7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSB7XG4gICAgICAgICAgdGFyZ2V0SW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNob3VsZFByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPCBmbGF0TGlzdC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGFyZ2V0SW5kZXggPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICB0YXJnZXRJbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKGN1cnJlbnRGb2N1c2VkKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRGb2N1c2VkLmV4cGFuZGVkICYmIHRoaXMuc2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShjdXJyZW50Rm9jdXNlZCkpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlTm9kZShjdXJyZW50Rm9jdXNlZCwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHsgaGFuZGxlZDogdHJ1ZSwgc2hvdWxkUHJldmVudERlZmF1bHQ6IHRydWUsIHRhcmdldEluZGV4OiBudWxsIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gZmxhdExpc3RbY3VycmVudEluZGV4XTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbT8ucGFyZW50KSB7XG4gICAgICAgICAgICAgIHRhcmdldEluZGV4ID0gZmxhdExpc3QuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLm5vZGUuaWQgPT09IGN1cnJlbnRJdGVtLnBhcmVudC5pZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKGN1cnJlbnRGb2N1c2VkKSB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50Rm9jdXNlZC5leHBhbmRlZCAmJiB0aGlzLnNob3VsZFNob3dFeHBhbmRUb2dnbGUoY3VycmVudEZvY3VzZWQpKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZU5vZGUoY3VycmVudEZvY3VzZWQsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiB7IGhhbmRsZWQ6IHRydWUsIHNob3VsZFByZXZlbnREZWZhdWx0OiB0cnVlLCB0YXJnZXRJbmRleDogbnVsbCB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjdXJyZW50Rm9jdXNlZC5leHBhbmRlZCAmJlxuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5oYXNDaGlsZHJlbihjdXJyZW50Rm9jdXNlZCkgJiZcbiAgICAgICAgICAgIGN1cnJlbnRGb2N1c2VkLmNoaWxkcmVuXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGN1cnJlbnRGb2N1c2VkLmNoaWxkcmVuO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXRMaXN0LmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5ub2RlLmlkID09PSBmaXJzdENoaWxkLmlkKTtcbiAgICAgICAgICAgICAgaWYgKHRhcmdldEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGbGF0TGlzdCA9IHRoaXMudHJlZVNlcnZpY2UuYnVpbGRGbGF0Tm9kZUxpc3QodGhpcy5ub2RlcygpKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRJbmRleCA9IHVwZGF0ZWRGbGF0TGlzdC5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubm9kZS5pZCA9PT0gZmlyc3RDaGlsZC5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEluZGV4ID49IDAgJiYgdGFyZ2V0SW5kZXggPCB1cGRhdGVkRmxhdExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTm9kZUJ5SWQodXBkYXRlZEZsYXRMaXN0W3RhcmdldEluZGV4XS5ub2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7IGhhbmRsZWQ6IHRydWUsIHNob3VsZFByZXZlbnREZWZhdWx0OiB0cnVlLCB0YXJnZXRJbmRleDogbnVsbCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIHRhcmdldEluZGV4ID0gMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdExpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJyAnOlxuICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgICBpZiAoY3VycmVudEZvY3VzZWQgJiYgdGhpcy5zZWxlY3RNb2RlKCkgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3BhY2VLZXlTZWxlY3Rpb24oY3VycmVudEZvY3VzZWQsIGV2ZW50KTtcbiAgICAgICAgICByZXR1cm4geyBoYW5kbGVkOiB0cnVlLCBzaG91bGRQcmV2ZW50RGVmYXVsdDogdHJ1ZSwgdGFyZ2V0SW5kZXg6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoY3VycmVudEZvY3VzZWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRW50ZXJLZXlTZWxlY3Rpb24oY3VycmVudEZvY3VzZWQsIGV2ZW50KTtcbiAgICAgICAgICByZXR1cm4geyBoYW5kbGVkOiB0cnVlLCBzaG91bGRQcmV2ZW50RGVmYXVsdDogdHJ1ZSwgdGFyZ2V0SW5kZXg6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIGlmIChjdXJyZW50Rm9jdXNlZCAmJiB0aGlzLnNlbGVjdE1vZGUoKSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ3RybEVudGVyU2VsZWN0aW9uKGN1cnJlbnRGb2N1c2VkLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm4geyBoYW5kbGVkOiB0cnVlLCBzaG91bGRQcmV2ZW50RGVmYXVsdDogdHJ1ZSwgdGFyZ2V0SW5kZXg6IG51bGwgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4geyBoYW5kbGVkLCBzaG91bGRQcmV2ZW50RGVmYXVsdCwgdGFyZ2V0SW5kZXggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgU3BhY2Uga2V5IHNlbGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVTcGFjZUtleVNlbGVjdGlvbihub2RlOiBBWFRyZWVWaWV3Tm9kZSwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICFub2RlLnNlbGVjdGVkO1xuICAgIG5vZGUuc2VsZWN0ZWQgPSBuZXdWYWx1ZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmNoZWNrQ2hpbGRyZW5PblNlbGVjdCgpICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMudHJlZVNlcnZpY2Uuc2VsZWN0QWxsQ2hpbGRyZW4obm9kZS5jaGlsZHJlbiwgbmV3VmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmludGVybWVkaWF0ZVN0YXRlKCkpIHtcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlUGFyZW50U3RhdGVzKHRoaXMubm9kZXMoKSwgbm9kZSwgdGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbm9kZSxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBFbnRlciBrZXkgc2VsZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUVudGVyS2V5U2VsZWN0aW9uKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGUgPSB0aGlzLnNlbGVjdE1vZGUoKTtcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLmRlc2VsZWN0QWxsTm9kZXModGhpcy5ub2RlcygpKTtcbiAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgIGlmIChtb2RlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICBpZiAodGhpcy5jaGVja0NoaWxkcmVuT25TZWxlY3QoKSAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2Uuc2VsZWN0QWxsQ2hpbGRyZW4obm9kZS5jaGlsZHJlbiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKSB7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlUGFyZW50U3RhdGVzKHRoaXMubm9kZXMoKSwgbm9kZSwgdGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbm9kZSxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBDdHJsL0NtZCArIEVudGVyIGtleSBzZWxlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlQ3RybEVudGVyU2VsZWN0aW9uKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gIW5vZGUuc2VsZWN0ZWQ7XG4gICAgbm9kZS5zZWxlY3RlZCA9IG5ld1ZhbHVlO1xuICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuY2hlY2tDaGlsZHJlbk9uU2VsZWN0KCkgJiYgbm9kZS5jaGlsZHJlbikge1xuICAgICAgdGhpcy50cmVlU2VydmljZS5zZWxlY3RBbGxDaGlsZHJlbihub2RlLmNoaWxkcmVuLCBuZXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW50ZXJtZWRpYXRlU3RhdGUoKSkge1xuICAgICAgdGhpcy50cmVlU2VydmljZS51cGRhdGVQYXJlbnRTdGF0ZXModGhpcy5ub2RlcygpLCBub2RlLCB0aGlzLmludGVybWVkaWF0ZVN0YXRlKCkpO1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gICAgdGhpcy5vbk5vZGVTZWxlY3QuZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBub2RlLFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHlwZSBndWFyZCB0byBjaGVjayBpZiB2YWx1ZSBpcyBhbiBFdmVudFxuICAgKi9cbiAgcHJpdmF0ZSBpc0V2ZW50KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRXZlbnQge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEV2ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBlcnJvcnMgY29uc2lzdGVudGx5XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUVycm9yKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgJHttZXNzYWdlfTpgLCBlcnJvci5tZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgJHttZXNzYWdlfTpgLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tIFJvb3QgZHJvcCBsaXN0IC0tPlxuPGRpdlxuICBheEZvY3VzVHJhcFxuICBbYXhEcm9wTGlzdF09XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICBbc29ydGluZ0Rpc2FibGVkXT1cImZhbHNlXCJcbiAgW2lkXT1cImdldExpc3RJZCgpXCJcbiAgW2F0dHIuZGF0YS1ub2RlLWlkXT1cIm51bGxcIlxuICBkcm9wTGlzdEdyb3VwPVwiYXgtdHJlZS12aWV3LW5vZGVzXCJcbiAgKGRyb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gIGNsYXNzPVwiYXgtdHJlZS12aWV3LWRyb3AtbGlzdFwiXG4gIFtjbGFzcy5heC10cmVlLXZpZXctY2FyZF09XCJsb29rKCkgPT09ICdjYXJkJ1wiXG4gIFtjbGFzcy5heC10cmVlLXZpZXctd2l0aC1saW5lc109XCJsb29rKCkgPT09ICd3aXRoLWxpbmUnXCJcbiAgW2NsYXNzLmF4LXRyZWUtdmlldy1jb21wYWN0XT1cIm5vZGVIZWlnaHQoKSA9PT0gJ2NvbXBhY3QnXCJcbiAgW2NsYXNzLmF4LXRyZWUtdmlldy1jb21mb3J0YWJsZV09XCJub2RlSGVpZ2h0KCkgPT09ICdjb21mb3J0YWJsZSdcIlxuICByb2xlPVwiZ3JvdXBcIlxuPlxuICBAZm9yIChub2RlIG9mIG5vZGVzKCk7IHRyYWNrIG5vZGUuaWQpIHtcbiAgICBAaWYgKG5vZGUudmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgW2F4RHJhZ109XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICBbZHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LW5vZGVcIlxuICAgICAgICBbY2xhc3MuYXgtdHJlZS12aWV3LW5vZGUtc2VsZWN0ZWRdPVwibm9kZS5zZWxlY3RlZFwiXG4gICAgICAgIFtjbGFzcy5heC10cmVlLXZpZXctbm9kZS1kaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzLmF4LXRyZWUtdmlldy1ub2RlLWxvYWRpbmddPVwibm9kZS5sb2FkaW5nXCJcbiAgICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sZXZlbF09XCJnZXROb2RlQXJpYUxldmVsKDApXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJnZXROb2RlQXJpYUV4cGFuZGVkKG5vZGUpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJnZXROb2RlQXJpYVNlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJub2RlLmRpc2FibGVkID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy1ub2RlLWNvbnRlbnRcIlxuICAgICAgICAgIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgICAgICAgW2lkXT1cIidheC10cmVlLXZpZXctbm9kZS1kcm9wLScgKyBub2RlLmlkXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLW5vZGUtaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgW2F0dHIuZGF0YS10cmVlLW5vZGUtaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgW2F0dHIuZGF0YS1kcm9wLXR5cGVdPVwiJ29udG8tbm9kZSdcIlxuICAgICAgICAgIGRyb3BMaXN0R3JvdXA9XCJheC10cmVlLXZpZXctbm9kZXNcIlxuICAgICAgICAgIChkcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wT250b05vZGUoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgKHNlbGVjdE1vZGUoKSA9PT0gJ3NpbmdsZScgfHwgKHNlbGVjdE1vZGUoKSA9PT0gJ211bHRpcGxlJyAmJiBjaGVja09uQ2xpY2soKSkpICYmIG9uTm9kZUNsaWNrKG5vZGUsICRldmVudClcbiAgICAgICAgICBcIlxuICAgICAgICAgIChmb2N1cyk9XCJvbk5vZGVGb2N1cyhub2RlLmlkKVwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cImlzTm9kZUZvY3VzZWQobm9kZS5pZCkgPyAwIDogLTFcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmIChkcmFnTW9kZSgpID09PSAnaGFuZGxlcicpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJlZS12aWV3LWRyYWctaGFuZGxlXCIgYXhEcmFnSGFuZGxlIHRpdGxlPVwiRHJhZyB0byByZW9yZGVyXCI+IOKLruKLriA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LWV4cGFuZC10b2dnbGUgYXgtc21cIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlTm9kZShub2RlLCAkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5heC10cmVlLXZpZXctaGFzLWNoaWxkcmVuXT1cInNob3VsZFNob3dFeHBhbmRUb2dnbGUobm9kZSlcIlxuICAgICAgICAgICAgW2NsYXNzLmF4LXRyZWUtdmlldy1leHBhbmRlZF09XCJub2RlLmV4cGFuZGVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJub2RlLmRpc2FibGVkIHx8IG5vZGUubG9hZGluZ1wiXG4gICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAobm9kZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtc3Bpbm5lciBmYS1zcGluIGF4LXRyZWUtdmlldy1sb2FkaW5nLXNwaW5uZXJcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIm5vZGUuZXhwYW5kZWQgPyBkaXJlY3Rpb25FeHBhbmRlZEljb24oKSA6IGRpcmVjdGlvbkNvbGxhcHNlZEljb24oKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy10b2dnbGUtaWNvblwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIEBpZiAoaXRlbVRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlKCkhXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFRlbXBsYXRlQ29udGV4dChub2RlLCAwKVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYgKHNob3VsZFNob3dDaGVja2JveCgpKSB7XG4gICAgICAgICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibm9kZS5pbmRldGVybWluYXRlID8gbnVsbCA6IG5vZGUuc2VsZWN0ZWQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cInRvZ2dsZVNlbGVjdGlvbihub2RlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvYXgtY2hlY2stYm94PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChzaG93SWNvbnMoKSAmJiBub2RlLmljb24pIHtcbiAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIm5vZGUuaWNvblwiIGNsYXNzPVwiYXgtdHJlZS12aWV3LW5vZGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJlZS12aWV3LW5vZGUtbGFiZWxcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChzaG93Q2hpbGRyZW5CYWRnZSgpICYmIChub2RlLmNoaWxkcmVuQ291bnQgfHwgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSkpIHtcbiAgICAgICAgICAgICAgPGF4LWJhZGdlXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC10cmVlLXZpZXctY2hpbGRyZW4tYmFkZ2VcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIihub2RlLmNoaWxkcmVuQ291bnQgPz8gbm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApLnRvU3RyaW5nKClcIlxuICAgICAgICAgICAgICA+PC9heC1iYWRnZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKG5vZGUuZXhwYW5kZWQgJiYgbm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXRyZWUtdmlldy1jaGlsZHJlblwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaWxkcmVuTGlzdFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbiwgcGFyZW50OiBub2RlLCBsZXZlbDogMSB9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgfVxuPC9kaXY+XG5cbjwhLS0gUmVjdXJzaXZlIGNoaWxkcmVuIHRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNjaGlsZHJlbkxpc3QgbGV0LWNoaWxkcmVuPVwiY2hpbGRyZW5cIiBsZXQtcGFyZW50PVwicGFyZW50XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgPGRpdlxuICAgIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgW2lkXT1cImdldExpc3RJZChwYXJlbnQpXCJcbiAgICBbYXR0ci5kYXRhLW5vZGUtaWRdPVwicGFyZW50LmlkXCJcbiAgICBkcm9wTGlzdEdyb3VwPVwiYXgtdHJlZS12aWV3LW5vZGVzXCJcbiAgICAoZHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcCgkZXZlbnQsIHBhcmVudClcIlxuICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LWRyb3AtbGlzdFwiXG4gICAgcm9sZT1cImdyb3VwXCJcbiAgPlxuICAgIEBmb3IgKG5vZGUgb2YgY2hpbGRyZW47IHRyYWNrIG5vZGUuaWQpIHtcbiAgICAgIEBpZiAobm9kZS52aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2F4RHJhZ109XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgW2RyYWdEYXRhXT1cIm5vZGVcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LW5vZGVcIlxuICAgICAgICAgIFtjbGFzcy5heC10cmVlLXZpZXctbm9kZS1zZWxlY3RlZF09XCJub2RlLnNlbGVjdGVkXCJcbiAgICAgICAgICBbY2xhc3MuYXgtdHJlZS12aWV3LW5vZGUtZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgW2NsYXNzLmF4LXRyZWUtdmlldy1ub2RlLWxvYWRpbmddPVwibm9kZS5sb2FkaW5nXCJcbiAgICAgICAgICBbY2xhc3MuYXgtdHJlZS12aWV3LW5vZGUtZm9jdXNlZF09XCJpc05vZGVGb2N1c2VkKG5vZGUuaWQpXCJcbiAgICAgICAgICByb2xlPVwidHJlZWl0ZW1cIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGV2ZWxdPVwiZ2V0Tm9kZUFyaWFMZXZlbChsZXZlbClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZ2V0Tm9kZUFyaWFFeHBhbmRlZChub2RlKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJnZXROb2RlQXJpYVNlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWQgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LW5vZGUtY29udGVudFwiXG4gICAgICAgICAgICBbc3R5bGUucGFkZGluZy1pbmxpbmUtc3RhcnQucHhdPVwiZ2V0Tm9kZVBhZGRpbmdJbmxpbmUobGV2ZWwpXCJcbiAgICAgICAgICAgIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgICAgICAgICBbaWRdPVwiJ2F4LXRyZWUtdmlldy1ub2RlLWRyb3AtJyArIG5vZGUuaWRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1ub2RlLWlkXT1cIm5vZGUuaWRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10cmVlLW5vZGUtaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRyb3AtdHlwZV09XCInb250by1ub2RlJ1wiXG4gICAgICAgICAgICBkcm9wTGlzdEdyb3VwPVwiYXgtdHJlZS12aWV3LW5vZGVzXCJcbiAgICAgICAgICAgIChkcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wT250b05vZGUoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIChzZWxlY3RNb2RlKCkgPT09ICdzaW5nbGUnIHx8IChzZWxlY3RNb2RlKCkgPT09ICdtdWx0aXBsZScgJiYgY2hlY2tPbkNsaWNrKCkpKSAmJlxuICAgICAgICAgICAgICAgIG9uTm9kZUNsaWNrKG5vZGUsICRldmVudClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25Ob2RlRm9jdXMobm9kZS5pZClcIlxuICAgICAgICAgICAgKGJsdXIpPVwiZm9jdXNlZE5vZGVJZC5zZXQobnVsbClcIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cImlzTm9kZUZvY3VzZWQobm9kZS5pZCkgPyAwIDogLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoZHJhZ01vZGUoKSA9PT0gJ2hhbmRsZXInKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJlZS12aWV3LWRyYWctaGFuZGxlXCIgYXhEcmFnSGFuZGxlIHRpdGxlPVwiRHJhZyB0byByZW9yZGVyXCI+IOKLruKLriA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LWV4cGFuZC10b2dnbGUgYXgtc21cIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVOb2RlKG5vZGUsICRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICBbY2xhc3MuYXgtdHJlZS12aWV3LWhhcy1jaGlsZHJlbl09XCJzaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmF4LXRyZWUtdmlldy1leHBhbmRlZF09XCJub2RlLmV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWQgfHwgbm9kZS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShub2RlKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChub2RlLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtc3Bpbm5lciBmYS1zcGluIGF4LXRyZWUtdmlldy1sb2FkaW5nLXNwaW5uZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJub2RlLmV4cGFuZGVkID8gZGlyZWN0aW9uRXhwYW5kZWRJY29uKCkgOiBkaXJlY3Rpb25Db2xsYXBzZWRJY29uKClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy10b2dnbGUtaWNvblwiXG4gICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9heC1idXR0b24+XG5cbiAgICAgICAgICAgIEBpZiAoaXRlbVRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZSgpIVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFRlbXBsYXRlQ29udGV4dChub2RlLCBsZXZlbClcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQGlmIChzaG91bGRTaG93Q2hlY2tib3goKSkge1xuICAgICAgICAgICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSA/IG51bGwgOiBub2RlLnNlbGVjdGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwidG9nZ2xlU2VsZWN0aW9uKG5vZGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2F4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNob3dJY29ucygpICYmIG5vZGUuaWNvbikge1xuICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJub2RlLmljb25cIiBjbGFzcz1cImF4LXRyZWUtdmlldy1ub2RlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cmVlLXZpZXctbm9kZS1sYWJlbFwiPnt7IG5vZGUubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0NoaWxkcmVuQmFkZ2UoKSAmJiAobm9kZS5jaGlsZHJlbkNvdW50IHx8IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkpKSB7XG4gICAgICAgICAgICAgICAgPGF4LWJhZGdlXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy1jaGlsZHJlbi1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICBbdGV4dF09XCIobm9kZS5jaGlsZHJlbkNvdW50ID8/IG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKS50b1N0cmluZygpXCJcbiAgICAgICAgICAgICAgICA+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChub2RlLmV4cGFuZGVkICYmIG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXRyZWUtdmlldy1jaGlsZHJlblwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZHJlbkxpc3RcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbiwgcGFyZW50OiBub2RlLCBsZXZlbDogbGV2ZWwgKyAxIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { NgModule } from '@angular/core';\nimport { AXTreeViewComponent } from './tree-view.component';\nimport * as i0 from \"@angular/core\";\nexport class AXTreeViewModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewModule, imports: [AXTreeViewComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewModule, imports: [AXTreeViewComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [AXTreeViewComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZS12aWV3L3NyYy9saWIvdHJlZS12aWV3Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUs1RCxNQUFNLE9BQU8sZ0JBQWdCOzhHQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQixZQUZqQixtQkFBbUI7K0dBRWxCLGdCQUFnQixZQUZqQixtQkFBbUI7OzJGQUVsQixnQkFBZ0I7a0JBSDVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYVHJlZVZpZXdDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtdmlldy5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQVhUcmVlVmlld0NvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYVHJlZVZpZXdNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtdHJlZS12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90cmVlLXZpZXcvc3JjL2Fjb3JleC1jb21wb25lbnRzLXRyZWUtdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-components-tree-view.mjs","sources":["../tmp-esm2022/tree-view/lib/tree-view.service.js","../tmp-esm2022/tree-view/lib/tree-view.component.js","../tmp-esm2022/tree-view/lib/tree-view.module.js","../tmp-esm2022/tree-view/acorex-components-tree-view.js"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Service for tree node operations\n * Handles all business logic for tree node manipulation\n */\nexport class AXTreeViewService {\n // ==================== Constants ====================\n static { this.ROOT_LIST_ID = 'ax-tree-view-root-list'; }\n static { this.NODE_DROP_PREFIX = 'ax-tree-view-node-drop-'; }\n static { this.LIST_PREFIX = 'ax-tree-view-list-'; }\n // ==================== Node Finding & Traversal ====================\n /**\n * Find a node by ID in the tree\n */\n findNodeById(nodes, id) {\n for (const node of nodes) {\n if (node.id === id)\n return node;\n if (node.children) {\n const found = this.findNodeById(node.children, id);\n if (found)\n return found;\n }\n }\n return null;\n }\n /**\n * Find parent node of a given node\n */\n findParentNode(nodes, targetNode) {\n for (const node of nodes) {\n if (node.children?.some((child) => child.id === targetNode.id)) {\n return node;\n }\n if (node.children) {\n const found = this.findParentNode(node.children, targetNode);\n if (found)\n return found;\n }\n }\n return undefined;\n }\n /**\n * Check if targetNode is a descendant of ancestorNode (or the same node)\n * Prevents circular references by checking if target exists in ancestor's children tree\n */\n isValidDropTarget(movedNode, targetNode) {\n if (movedNode.id === targetNode.id || this.isNodeDescendantOf(targetNode, movedNode)) {\n return false;\n }\n return true;\n }\n /**\n * Check if targetNode is a descendant of ancestorNode\n */\n isNodeDescendantOf(targetNode, ancestorNode) {\n if (targetNode.id === ancestorNode.id) {\n return true;\n }\n if (!ancestorNode.children || ancestorNode.children.length === 0) {\n return false;\n }\n for (const child of ancestorNode.children) {\n if (child.id === targetNode.id) {\n return true;\n }\n if (this.isNodeDescendantOf(targetNode, child)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Build a flat list of all visible focusable nodes\n */\n buildFlatNodeList(nodes) {\n const flatList = [];\n const traverse = (nodeList, level, parent) => {\n for (const node of nodeList) {\n if (node.visible !== false && !node.disabled) {\n flatList.push({ node, level, parent });\n if (node.expanded && node.children) {\n traverse(node.children, level + 1, node);\n }\n }\n }\n };\n traverse(nodes, 0);\n return flatList;\n }\n // ==================== Node State Checks ====================\n /**\n * Check if node has children\n */\n hasChildren(node) {\n return Boolean(node.children?.length);\n }\n /**\n * Check if node can be lazy loaded\n */\n canLazyLoad(node, isLazyDataSource) {\n return isLazyDataSource && Boolean(node.childrenCount && node.childrenCount > 0 && !this.hasChildren(node));\n }\n // ==================== Selection Management ====================\n /**\n * Recursively select/deselect all children\n */\n selectAllChildren(children, selected) {\n for (const child of children) {\n child.selected = selected;\n child.indeterminate = false;\n if (child.children) {\n this.selectAllChildren(child.children, selected);\n }\n }\n }\n /**\n * Get selection state of children\n */\n getChildrenSelectionState(children) {\n let selectedCount = 0;\n let indeterminateCount = 0;\n for (const child of children) {\n if (child.selected && !child.indeterminate) {\n selectedCount++;\n }\n if (child.indeterminate) {\n indeterminateCount++;\n }\n }\n return {\n allSelected: selectedCount === children.length,\n someSelected: selectedCount > 0 || indeterminateCount > 0,\n };\n }\n /**\n * Update parent node states based on children selection (with intermediate state support)\n */\n updateParentStates(nodes, changedNode, intermediateState) {\n const parent = this.findParentNode(nodes, changedNode);\n if (!parent || !parent.children)\n return;\n const { allSelected, someSelected } = this.getChildrenSelectionState(parent.children);\n if (allSelected) {\n parent.selected = true;\n parent.indeterminate = false;\n }\n else if (someSelected) {\n if (intermediateState) {\n parent.selected = true;\n parent.indeterminate = true;\n }\n else {\n parent.selected = false;\n parent.indeterminate = false;\n }\n }\n else {\n parent.selected = false;\n parent.indeterminate = false;\n }\n this.updateParentStates(nodes, parent, intermediateState);\n }\n /**\n * Recursively deselect all nodes\n */\n deselectAllNodes(nodes) {\n for (const node of nodes) {\n node.selected = false;\n node.indeterminate = false;\n if (node.children) {\n this.deselectAllNodes(node.children);\n }\n }\n }\n /**\n * Recursively set selection state for all nodes\n */\n setAllSelection(nodes, selected) {\n for (const node of nodes) {\n node.selected = selected;\n node.indeterminate = false;\n if (node.children) {\n this.setAllSelection(node.children, selected);\n }\n }\n }\n /**\n * Recursively count selected nodes\n */\n countSelected(nodes) {\n let count = 0;\n for (const node of nodes) {\n if (node.selected)\n count++;\n if (node.children) {\n count += this.countSelected(node.children);\n }\n }\n return count;\n }\n /**\n * Recursively collect selected nodes\n */\n collectSelected(nodes, result) {\n for (const node of nodes) {\n if (node.selected)\n result.push(node);\n if (node.children) {\n this.collectSelected(node.children, result);\n }\n }\n }\n /**\n * Recursively remove selected nodes\n */\n removeSelected(nodes) {\n for (let i = nodes.length - 1; i >= 0; i--) {\n if (nodes[i].selected && !nodes[i].indeterminate) {\n nodes.splice(i, 1);\n }\n else if (nodes[i].children) {\n this.removeSelected(nodes[i].children ?? []);\n }\n }\n }\n /**\n * Recursively update all parent states in the tree (used after deletion)\n */\n updateAllParentStates(nodes, intermediateState) {\n for (const node of nodes) {\n if (node.children && node.children.length > 0) {\n this.updateAllParentStates(node.children, intermediateState);\n const { allSelected, someSelected } = this.getChildrenSelectionState(node.children);\n if (allSelected) {\n node.selected = true;\n node.indeterminate = false;\n }\n else if (someSelected) {\n if (intermediateState) {\n node.selected = true;\n node.indeterminate = true;\n }\n else {\n node.selected = false;\n node.indeterminate = false;\n }\n }\n else {\n node.selected = false;\n node.indeterminate = false;\n }\n }\n }\n }\n // ==================== Expansion Management ====================\n /**\n * Recursively set expanded state (with lazy loading)\n */\n async setExpandedState(nodes, expanded, isLazyDataSource, loadNodeChildren) {\n for (const node of nodes) {\n const hasChildren = this.hasChildren(node);\n const canLazyLoad = this.canLazyLoad(node, isLazyDataSource);\n if (hasChildren || canLazyLoad) {\n if (expanded && canLazyLoad) {\n await loadNodeChildren(node);\n }\n node.expanded = expanded;\n if (node.children) {\n await this.setExpandedState(node.children, expanded, isLazyDataSource, loadNodeChildren);\n }\n }\n }\n }\n // ==================== Drag & Drop Helpers ====================\n /**\n * Get array reference by drop list ID\n */\n getArrayByListId(nodes, listId) {\n if (listId === AXTreeViewService.ROOT_LIST_ID) {\n return nodes;\n }\n if (listId.startsWith(AXTreeViewService.NODE_DROP_PREFIX)) {\n const nodeId = listId.replace(AXTreeViewService.NODE_DROP_PREFIX, '');\n const node = this.findNodeById(nodes, nodeId);\n return node ? [node] : null;\n }\n const nodeId = listId.replace(AXTreeViewService.LIST_PREFIX, '');\n const node = this.findNodeById(nodes, nodeId);\n return node?.children ?? null;\n }\n /**\n * Find parent node by list ID\n */\n findParentByListId(nodes, listId) {\n if (listId === AXTreeViewService.ROOT_LIST_ID) {\n return undefined;\n }\n const prefix = listId.startsWith(AXTreeViewService.NODE_DROP_PREFIX)\n ? AXTreeViewService.NODE_DROP_PREFIX\n : AXTreeViewService.LIST_PREFIX;\n const nodeId = listId.replace(prefix, '');\n return this.findNodeById(nodes, nodeId) ?? undefined;\n }\n /**\n * Generate unique list ID for each node\n */\n getListId(node) {\n return node ? `${AXTreeViewService.LIST_PREFIX}${node.id}` : AXTreeViewService.ROOT_LIST_ID;\n }\n /**\n * Get root list ID constant\n */\n getRootListId() {\n return AXTreeViewService.ROOT_LIST_ID;\n }\n /**\n * Get node drop prefix constant\n */\n getNodeDropPrefix() {\n return AXTreeViewService.NODE_DROP_PREFIX;\n }\n /**\n * Get list prefix constant\n */\n getListPrefix() {\n return AXTreeViewService.LIST_PREFIX;\n }\n // ==================== Node Utilities ====================\n /**\n * Get all nodes in a flat array\n */\n getAllNodes(nodes) {\n const allNodes = [];\n const traverse = (nodeList) => {\n for (const node of nodeList) {\n allNodes.push(node);\n if (node.children) {\n traverse(node.children);\n }\n }\n };\n traverse(nodes);\n return allNodes;\n }\n /**\n * Get the path to a node (array of parent nodes from root to node)\n */\n getNodePath(nodes, nodeId) {\n const path = [];\n const node = this.findNodeById(nodes, nodeId);\n if (!node) {\n return path;\n }\n let current = node;\n while (current) {\n path.unshift(current);\n const parent = this.findParentNode(nodes, current);\n current = parent ?? null;\n }\n return path;\n }\n /**\n * Get the level/depth of a node (0 = root level)\n */\n getNodeLevel(nodes, nodeId) {\n const path = this.getNodePath(nodes, nodeId);\n return path.length > 0 ? path.length - 1 : -1;\n }\n /**\n * Get sibling nodes of a given node\n */\n getSiblings(nodes, nodeId) {\n const node = this.findNodeById(nodes, nodeId);\n if (!node) {\n return [];\n }\n const parent = this.findParentNode(nodes, node);\n const siblingsArray = parent?.children ?? nodes;\n return siblingsArray.filter((n) => n.id !== nodeId);\n }\n /**\n * Clone a node (creates a deep copy)\n */\n cloneNode(node) {\n const cloned = {\n id: `${node.id}-clone-${Date.now()}`,\n label: node.label,\n icon: node.icon,\n expanded: node.expanded,\n selected: false, // Cloned nodes are not selected by default\n indeterminate: false,\n disabled: node.disabled,\n visible: node.visible,\n childrenCount: node.childrenCount,\n loading: false, // Cloned nodes are not loading\n data: node.data ? JSON.parse(JSON.stringify(node.data)) : undefined,\n };\n if (node.children && node.children.length > 0) {\n cloned.children = node.children.map((child) => this.cloneNode(child));\n cloned.childrenCount = cloned.children.length;\n }\n return cloned;\n }\n /**\n * Validate node structure (check for required fields and circular references)\n */\n validateNode(node, visitedIds = new Set()) {\n const errors = [];\n if (!node.id) {\n errors.push('Node must have an id');\n }\n if (!node.label) {\n errors.push('Node must have a label');\n }\n if (visitedIds.has(node.id)) {\n errors.push(`Circular reference detected: node ${node.id} appears multiple times in the tree`);\n }\n if (node.children) {\n const newVisited = new Set(visitedIds);\n newVisited.add(node.id);\n for (const child of node.children) {\n const childValidation = this.validateNode(child, newVisited);\n if (!childValidation.valid) {\n errors.push(...childValidation.errors.map((e) => `Child of ${node.id}: ${e}`));\n }\n }\n if (node.childrenCount !== undefined && node.childrenCount !== node.children.length) {\n errors.push(`Node ${node.id}: childrenCount (${node.childrenCount}) does not match children array length (${node.children.length})`);\n }\n }\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3RyZWUtdmlldy9zcmMvbGliL3RyZWUtdmlldy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDOzs7R0FHRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsc0RBQXNEO2FBQzlCLGlCQUFZLEdBQUcsd0JBQXdCLEFBQTNCLENBQTRCO2FBQ3hDLHFCQUFnQixHQUFHLHlCQUF5QixBQUE1QixDQUE2QjthQUM3QyxnQkFBVyxHQUFHLG9CQUFvQixBQUF2QixDQUF3QjtJQUUzRCxxRUFBcUU7SUFDckU7O09BRUc7SUFDSCxZQUFZLENBQUMsS0FBdUIsRUFBRSxFQUFVO1FBQzlDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxLQUFLO29CQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjLENBQUMsS0FBdUIsRUFBRSxVQUEwQjtRQUNoRSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssVUFB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QUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDakYsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEYsTUFBTSxDQUFDLElBQUksQ0FDVCxRQUFRLElBQUksQ0FBQyxFQUFFLG9CQUFvQixJQUFJLENBQUMsYUFBYSwyQ0FBMkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FDeEgsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDMUIsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDOzhHQWhlVSxpQkFBaUI7a0hBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYVHJlZVZpZXdDaGlsZHJlblNlbGVjdGlvblN0YXRlLCBBWFRyZWVWaWV3RmxhdE5vZGUsIEFYVHJlZVZpZXdOb2RlIH0gZnJvbSAnLi90cmVlLXZpZXcudHlwZXMnO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIHRyZWUgbm9kZSBvcGVyYXRpb25zXG4gKiBIYW5kbGVzIGFsbCBidXNpbmVzcyBsb2dpYyBmb3IgdHJlZSBub2RlIG1hbmlwdWxhdGlvblxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhUcmVlVmlld1NlcnZpY2Uge1xuICAvLyA9PT09PT09PT09PT09PT09PT09PSBDb25zdGFudHMgPT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgUk9PVF9MSVNUX0lEID0gJ2F4LXRyZWUtdmlldy1yb290LWxpc3QnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBOT0RFX0RST1BfUFJFRklYID0gJ2F4LXRyZWUtdmlldy1ub2RlLWRyb3AtJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTElTVF9QUkVGSVggPSAnYXgtdHJlZS12aWV3LWxpc3QtJztcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBOb2RlIEZpbmRpbmcgJiBUcmF2ZXJzYWwgPT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIEZpbmQgYSBub2RlIGJ5IElEIGluIHRoZSB0cmVlXG4gICAqL1xuICBmaW5kTm9kZUJ5SWQobm9kZXM6IEFYVHJlZVZpZXdOb2RlW10sIGlkOiBzdHJpbmcpOiBBWFRyZWVWaWV3Tm9kZSB8IG51bGwge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUuaWQgPT09IGlkKSByZXR1cm4gbm9kZTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kTm9kZUJ5SWQobm9kZS5jaGlsZHJlbiwgaWQpO1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBwYXJlbnQgbm9kZSBvZiBhIGdpdmVuIG5vZGVcbiAgICovXG4gIGZpbmRQYXJlbnROb2RlKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdLCB0YXJnZXROb2RlOiBBWFRyZWVWaWV3Tm9kZSk6IEFYVHJlZVZpZXdOb2RlIHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuPy5zb21lKChjaGlsZCkgPT4gY2hpbGQuaWQgPT09IHRhcmdldE5vZGUuaWQpKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLmZpbmRQYXJlbnROb2RlKG5vZGUuY2hpbGRyZW4sIHRhcmdldE5vZGUpO1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0YXJnZXROb2RlIGlzIGEgZGVzY2VuZGFudCBvZiBhbmNlc3Rvck5vZGUgKG9yIHRoZSBzYW1lIG5vZGUpXG4gICAqIFByZXZlbnRzIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnkgY2hlY2tpbmcgaWYgdGFyZ2V0IGV4aXN0cyBpbiBhbmNlc3RvcidzIGNoaWxkcmVuIHRyZWVcbiAgICovXG4gIGlzVmFsaWREcm9wVGFyZ2V0KG1vdmVkTm9kZTogQVhUcmVlVmlld05vZGUsIHRhcmdldE5vZGU6IEFYVHJlZVZpZXdOb2RlKTogYm9vbGVhbiB7XG4gICAgaWYgKG1vdmVkTm9kZS5pZCA9PT0gdGFyZ2V0Tm9kZS5pZCB8fCB0aGlzLmlzTm9kZURlc2NlbmRhbnRPZih0YXJnZXROb2RlLCBtb3ZlZE5vZGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRhcmdldE5vZGUgaXMgYSBkZXNjZW5kYW50IG9mIGFuY2VzdG9yTm9kZVxuICAgKi9cbiAgcHJpdmF0ZSBpc05vZGVEZXNjZW5kYW50T2YodGFyZ2V0Tm9kZTogQVhUcmVlVmlld05vZGUsIGFuY2VzdG9yTm9kZTogQVhUcmVlVmlld05vZGUpOiBib29sZWFuIHtcbiAgICBpZiAodGFyZ2V0Tm9kZS5pZCA9PT0gYW5jZXN0b3JOb2RlLmlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFuY2VzdG9yTm9kZS5jaGlsZHJlbiB8fCBhbmNlc3Rvck5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBhbmNlc3Rvck5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC5pZCA9PT0gdGFyZ2V0Tm9kZS5pZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzTm9kZURlc2NlbmRhbnRPZih0YXJnZXROb2RlLCBjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgZmxhdCBsaXN0IG9mIGFsbCB2aXNpYmxlIGZvY3VzYWJsZSBub2Rlc1xuICAgKi9cbiAgYnVpbGRGbGF0Tm9kZUxpc3Qobm9kZXM6IEFYVHJlZVZpZXdOb2RlW10pOiBBWFRyZWVWaWV3RmxhdE5vZGVbXSB7XG4gICAgY29uc3QgZmxhdExpc3Q6IEFYVHJlZVZpZXdGbGF0Tm9kZVtdID0gW107XG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZUxpc3Q6IEFYVHJlZVZpZXdOb2RlW10sIGxldmVsOiBudW1iZXIsIHBhcmVudD86IEFYVHJlZVZpZXdOb2RlKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZUxpc3QpIHtcbiAgICAgICAgaWYgKG5vZGUudmlzaWJsZSAhPT0gZmFsc2UgJiYgIW5vZGUuZGlzYWJsZWQpIHtcbiAgICAgICAgICBmbGF0TGlzdC5wdXNoKHsgbm9kZSwgbGV2ZWwsIHBhcmVudCB9KTtcbiAgICAgICAgICBpZiAobm9kZS5leHBhbmRlZCAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICB0cmF2ZXJzZShub2RlLmNoaWxkcmVuLCBsZXZlbCArIDEsIG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdHJhdmVyc2Uobm9kZXMsIDApO1xuICAgIHJldHVybiBmbGF0TGlzdDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IE5vZGUgU3RhdGUgQ2hlY2tzID09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBDaGVjayBpZiBub2RlIGhhcyBjaGlsZHJlblxuICAgKi9cbiAgaGFzQ2hpbGRyZW4obm9kZTogQVhUcmVlVmlld05vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihub2RlLmNoaWxkcmVuPy5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIG5vZGUgY2FuIGJlIGxhenkgbG9hZGVkXG4gICAqL1xuICBjYW5MYXp5TG9hZChub2RlOiBBWFRyZWVWaWV3Tm9kZSwgaXNMYXp5RGF0YVNvdXJjZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0xhenlEYXRhU291cmNlICYmIEJvb2xlYW4obm9kZS5jaGlsZHJlbkNvdW50ICYmIG5vZGUuY2hpbGRyZW5Db3VudCA+IDAgJiYgIXRoaXMuaGFzQ2hpbGRyZW4obm9kZSkpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gU2VsZWN0aW9uIE1hbmFnZW1lbnQgPT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHNlbGVjdC9kZXNlbGVjdCBhbGwgY2hpbGRyZW5cbiAgICovXG4gIHNlbGVjdEFsbENoaWxkcmVuKGNoaWxkcmVuOiBBWFRyZWVWaWV3Tm9kZVtdLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGNoaWxkLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICBjaGlsZC5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgc2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2VsZWN0aW9uIHN0YXRlIG9mIGNoaWxkcmVuXG4gICAqL1xuICBnZXRDaGlsZHJlblNlbGVjdGlvblN0YXRlKGNoaWxkcmVuOiBBWFRyZWVWaWV3Tm9kZVtdKTogQVhUcmVlVmlld0NoaWxkcmVuU2VsZWN0aW9uU3RhdGUge1xuICAgIGxldCBzZWxlY3RlZENvdW50ID0gMDtcbiAgICBsZXQgaW5kZXRlcm1pbmF0ZUNvdW50ID0gMDtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjaGlsZC5zZWxlY3RlZCAmJiAhY2hpbGQuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICBzZWxlY3RlZENvdW50Kys7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICBpbmRldGVybWluYXRlQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWxsU2VsZWN0ZWQ6IHNlbGVjdGVkQ291bnQgPT09IGNoaWxkcmVuLmxlbmd0aCxcbiAgICAgIHNvbWVTZWxlY3RlZDogc2VsZWN0ZWRDb3VudCA+IDAgfHwgaW5kZXRlcm1pbmF0ZUNvdW50ID4gMCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBwYXJlbnQgbm9kZSBzdGF0ZXMgYmFzZWQgb24gY2hpbGRyZW4gc2VsZWN0aW9uICh3aXRoIGludGVybWVkaWF0ZSBzdGF0ZSBzdXBwb3J0KVxuICAgKi9cbiAgdXBkYXRlUGFyZW50U3RhdGVzKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdLCBjaGFuZ2VkTm9kZTogQVhUcmVlVmlld05vZGUsIGludGVybWVkaWF0ZVN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50Tm9kZShub2RlcywgY2hhbmdlZE5vZGUpO1xuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuY2hpbGRyZW4pIHJldHVybjtcblxuICAgIGNvbnN0IHsgYWxsU2VsZWN0ZWQsIHNvbWVTZWxlY3RlZCB9ID0gdGhpcy5nZXRDaGlsZHJlblNlbGVjdGlvblN0YXRlKHBhcmVudC5jaGlsZHJlbik7XG5cbiAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgIHBhcmVudC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICBwYXJlbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoc29tZVNlbGVjdGVkKSB7XG4gICAgICBpZiAoaW50ZXJtZWRpYXRlU3RhdGUpIHtcbiAgICAgICAgcGFyZW50LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgcGFyZW50LmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyZW50LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIHBhcmVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudC5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgcGFyZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVBhcmVudFN0YXRlcyhub2RlcywgcGFyZW50LCBpbnRlcm1lZGlhdGVTdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZGVzZWxlY3QgYWxsIG5vZGVzXG4gICAqL1xuICBkZXNlbGVjdEFsbE5vZGVzKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBub2RlLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuZGVzZWxlY3RBbGxOb2Rlcyhub2RlLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgc2V0IHNlbGVjdGlvbiBzdGF0ZSBmb3IgYWxsIG5vZGVzXG4gICAqL1xuICBzZXRBbGxTZWxlY3Rpb24obm9kZXM6IEFYVHJlZVZpZXdOb2RlW10sIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBub2RlLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuc2V0QWxsU2VsZWN0aW9uKG5vZGUuY2hpbGRyZW4sIHNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY291bnQgc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIGNvdW50U2VsZWN0ZWQobm9kZXM6IEFYVHJlZVZpZXdOb2RlW10pOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkgY291bnQrKztcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvdW50ICs9IHRoaXMuY291bnRTZWxlY3RlZChub2RlLmNoaWxkcmVuKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNvbGxlY3Qgc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIGNvbGxlY3RTZWxlY3RlZChub2RlczogQVhUcmVlVmlld05vZGVbXSwgcmVzdWx0OiBBWFRyZWVWaWV3Tm9kZVtdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLmNvbGxlY3RTZWxlY3RlZChub2RlLmNoaWxkcmVuLCByZXN1bHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSByZW1vdmUgc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIHJlbW92ZVNlbGVjdGVkKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdKTogdm9pZCB7XG4gICAgZm9yIChsZXQgaSA9IG5vZGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAobm9kZXNbaV0uc2VsZWN0ZWQgJiYgIW5vZGVzW2ldLmluZGV0ZXJtaW5hdGUpIHtcbiAgICAgICAgbm9kZXMuc3BsaWNlKGksIDEpO1xuICAgICAgfSBlbHNlIGlmIChub2Rlc1tpXS5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKG5vZGVzW2ldLmNoaWxkcmVuID8/IFtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgdXBkYXRlIGFsbCBwYXJlbnQgc3RhdGVzIGluIHRoZSB0cmVlICh1c2VkIGFmdGVyIGRlbGV0aW9uKVxuICAgKi9cbiAgdXBkYXRlQWxsUGFyZW50U3RhdGVzKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdLCBpbnRlcm1lZGlhdGVTdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQWxsUGFyZW50U3RhdGVzKG5vZGUuY2hpbGRyZW4sIGludGVybWVkaWF0ZVN0YXRlKTtcblxuICAgICAgICBjb25zdCB7IGFsbFNlbGVjdGVkLCBzb21lU2VsZWN0ZWQgfSA9IHRoaXMuZ2V0Q2hpbGRyZW5TZWxlY3Rpb25TdGF0ZShub2RlLmNoaWxkcmVuKTtcblxuICAgICAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb21lU2VsZWN0ZWQpIHtcbiAgICAgICAgICBpZiAoaW50ZXJtZWRpYXRlU3RhdGUpIHtcbiAgICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgbm9kZS5pbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IEV4cGFuc2lvbiBNYW5hZ2VtZW50ID09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBzZXQgZXhwYW5kZWQgc3RhdGUgKHdpdGggbGF6eSBsb2FkaW5nKVxuICAgKi9cbiAgYXN5bmMgc2V0RXhwYW5kZWRTdGF0ZShcbiAgICBub2RlczogQVhUcmVlVmlld05vZGVbXSxcbiAgICBleHBhbmRlZDogYm9vbGVhbixcbiAgICBpc0xhenlEYXRhU291cmNlOiBib29sZWFuLFxuICAgIGxvYWROb2RlQ2hpbGRyZW46IChub2RlOiBBWFRyZWVWaWV3Tm9kZSkgPT4gUHJvbWlzZTx2b2lkPixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBjb25zdCBoYXNDaGlsZHJlbiA9IHRoaXMuaGFzQ2hpbGRyZW4obm9kZSk7XG4gICAgICBjb25zdCBjYW5MYXp5TG9hZCA9IHRoaXMuY2FuTGF6eUxvYWQobm9kZSwgaXNMYXp5RGF0YVNvdXJjZSk7XG5cbiAgICAgIGlmIChoYXNDaGlsZHJlbiB8fCBjYW5MYXp5TG9hZCkge1xuICAgICAgICBpZiAoZXhwYW5kZWQgJiYgY2FuTGF6eUxvYWQpIHtcbiAgICAgICAgICBhd2FpdCBsb2FkTm9kZUNoaWxkcmVuKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuZXhwYW5kZWQgPSBleHBhbmRlZDtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldEV4cGFuZGVkU3RhdGUobm9kZS5jaGlsZHJlbiwgZXhwYW5kZWQsIGlzTGF6eURhdGFTb3VyY2UsIGxvYWROb2RlQ2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gRHJhZyAmIERyb3AgSGVscGVycyA9PT09PT09PT09PT09PT09PT09PVxuICAvKipcbiAgICogR2V0IGFycmF5IHJlZmVyZW5jZSBieSBkcm9wIGxpc3QgSURcbiAgICovXG4gIGdldEFycmF5QnlMaXN0SWQobm9kZXM6IEFYVHJlZVZpZXdOb2RlW10sIGxpc3RJZDogc3RyaW5nKTogQVhUcmVlVmlld05vZGVbXSB8IG51bGwge1xuICAgIGlmIChsaXN0SWQgPT09IEFYVHJlZVZpZXdTZXJ2aWNlLlJPT1RfTElTVF9JRCkge1xuICAgICAgcmV0dXJuIG5vZGVzO1xuICAgIH1cblxuICAgIGlmIChsaXN0SWQuc3RhcnRzV2l0aChBWFRyZWVWaWV3U2VydmljZS5OT0RFX0RST1BfUFJFRklYKSkge1xuICAgICAgY29uc3Qgbm9kZUlkID0gbGlzdElkLnJlcGxhY2UoQVhUcmVlVmlld1NlcnZpY2UuTk9ERV9EUk9QX1BSRUZJWCwgJycpO1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKG5vZGVzLCBub2RlSWQpO1xuICAgICAgcmV0dXJuIG5vZGUgPyBbbm9kZV0gOiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVJZCA9IGxpc3RJZC5yZXBsYWNlKEFYVHJlZVZpZXdTZXJ2aWNlLkxJU1RfUFJFRklYLCAnJyk7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKG5vZGVzLCBub2RlSWQpO1xuICAgIHJldHVybiBub2RlPy5jaGlsZHJlbiA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgcGFyZW50IG5vZGUgYnkgbGlzdCBJRFxuICAgKi9cbiAgZmluZFBhcmVudEJ5TGlzdElkKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdLCBsaXN0SWQ6IHN0cmluZyk6IEFYVHJlZVZpZXdOb2RlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobGlzdElkID09PSBBWFRyZWVWaWV3U2VydmljZS5ST09UX0xJU1RfSUQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZml4ID0gbGlzdElkLnN0YXJ0c1dpdGgoQVhUcmVlVmlld1NlcnZpY2UuTk9ERV9EUk9QX1BSRUZJWClcbiAgICAgID8gQVhUcmVlVmlld1NlcnZpY2UuTk9ERV9EUk9QX1BSRUZJWFxuICAgICAgOiBBWFRyZWVWaWV3U2VydmljZS5MSVNUX1BSRUZJWDtcbiAgICBjb25zdCBub2RlSWQgPSBsaXN0SWQucmVwbGFjZShwcmVmaXgsICcnKTtcbiAgICByZXR1cm4gdGhpcy5maW5kTm9kZUJ5SWQobm9kZXMsIG5vZGVJZCkgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHVuaXF1ZSBsaXN0IElEIGZvciBlYWNoIG5vZGVcbiAgICovXG4gIGdldExpc3RJZChub2RlPzogQVhUcmVlVmlld05vZGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBub2RlID8gYCR7QVhUcmVlVmlld1NlcnZpY2UuTElTVF9QUkVGSVh9JHtub2RlLmlkfWAgOiBBWFRyZWVWaWV3U2VydmljZS5ST09UX0xJU1RfSUQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJvb3QgbGlzdCBJRCBjb25zdGFudFxuICAgKi9cbiAgZ2V0Um9vdExpc3RJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBBWFRyZWVWaWV3U2VydmljZS5ST09UX0xJU1RfSUQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG5vZGUgZHJvcCBwcmVmaXggY29uc3RhbnRcbiAgICovXG4gIGdldE5vZGVEcm9wUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFYVHJlZVZpZXdTZXJ2aWNlLk5PREVfRFJPUF9QUkVGSVg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGxpc3QgcHJlZml4IGNvbnN0YW50XG4gICAqL1xuICBnZXRMaXN0UHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEFYVHJlZVZpZXdTZXJ2aWNlLkxJU1RfUFJFRklYO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gTm9kZSBVdGlsaXRpZXMgPT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIEdldCBhbGwgbm9kZXMgaW4gYSBmbGF0IGFycmF5XG4gICAqL1xuICBnZXRBbGxOb2Rlcyhub2RlczogQVhUcmVlVmlld05vZGVbXSk6IEFYVHJlZVZpZXdOb2RlW10ge1xuICAgIGNvbnN0IGFsbE5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdID0gW107XG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZUxpc3Q6IEFYVHJlZVZpZXdOb2RlW10pOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2RlTGlzdCkge1xuICAgICAgICBhbGxOb2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgIHRyYXZlcnNlKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0cmF2ZXJzZShub2Rlcyk7XG4gICAgcmV0dXJuIGFsbE5vZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcGF0aCB0byBhIG5vZGUgKGFycmF5IG9mIHBhcmVudCBub2RlcyBmcm9tIHJvb3QgdG8gbm9kZSlcbiAgICovXG4gIGdldE5vZGVQYXRoKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdLCBub2RlSWQ6IHN0cmluZyk6IEFYVHJlZVZpZXdOb2RlW10ge1xuICAgIGNvbnN0IHBhdGg6IEFYVHJlZVZpZXdOb2RlW10gPSBbXTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZUJ5SWQobm9kZXMsIG5vZGVJZCk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG5cbiAgICBsZXQgY3VycmVudDogQVhUcmVlVmlld05vZGUgfCBudWxsID0gbm9kZTtcbiAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgcGF0aC51bnNoaWZ0KGN1cnJlbnQpO1xuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50Tm9kZShub2RlcywgY3VycmVudCk7XG4gICAgICBjdXJyZW50ID0gcGFyZW50ID8/IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsZXZlbC9kZXB0aCBvZiBhIG5vZGUgKDAgPSByb290IGxldmVsKVxuICAgKi9cbiAgZ2V0Tm9kZUxldmVsKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdLCBub2RlSWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0Tm9kZVBhdGgobm9kZXMsIG5vZGVJZCk7XG4gICAgcmV0dXJuIHBhdGgubGVuZ3RoID4gMCA/IHBhdGgubGVuZ3RoIC0gMSA6IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzaWJsaW5nIG5vZGVzIG9mIGEgZ2l2ZW4gbm9kZVxuICAgKi9cbiAgZ2V0U2libGluZ3Mobm9kZXM6IEFYVHJlZVZpZXdOb2RlW10sIG5vZGVJZDogc3RyaW5nKTogQVhUcmVlVmlld05vZGVbXSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZE5vZGVCeUlkKG5vZGVzLCBub2RlSWQpO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZFBhcmVudE5vZGUobm9kZXMsIG5vZGUpO1xuICAgIGNvbnN0IHNpYmxpbmdzQXJyYXkgPSBwYXJlbnQ/LmNoaWxkcmVuID8/IG5vZGVzO1xuXG4gICAgcmV0dXJuIHNpYmxpbmdzQXJyYXkuZmlsdGVyKChuKSA9PiBuLmlkICE9PSBub2RlSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb25lIGEgbm9kZSAoY3JlYXRlcyBhIGRlZXAgY29weSlcbiAgICovXG4gIGNsb25lTm9kZShub2RlOiBBWFRyZWVWaWV3Tm9kZSk6IEFYVHJlZVZpZXdOb2RlIHtcbiAgICBjb25zdCBjbG9uZWQ6IEFYVHJlZVZpZXdOb2RlID0ge1xuICAgICAgaWQ6IGAke25vZGUuaWR9LWNsb25lLSR7RGF0ZS5ub3coKX1gLFxuICAgICAgbGFiZWw6IG5vZGUubGFiZWwsXG4gICAgICBpY29uOiBub2RlLmljb24sXG4gICAgICBleHBhbmRlZDogbm9kZS5leHBhbmRlZCxcbiAgICAgIHNlbGVjdGVkOiBmYWxzZSwgLy8gQ2xvbmVkIG5vZGVzIGFyZSBub3Qgc2VsZWN0ZWQgYnkgZGVmYXVsdFxuICAgICAgaW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICBkaXNhYmxlZDogbm9kZS5kaXNhYmxlZCxcbiAgICAgIHZpc2libGU6IG5vZGUudmlzaWJsZSxcbiAgICAgIGNoaWxkcmVuQ291bnQ6IG5vZGUuY2hpbGRyZW5Db3VudCxcbiAgICAgIGxvYWRpbmc6IGZhbHNlLCAvLyBDbG9uZWQgbm9kZXMgYXJlIG5vdCBsb2FkaW5nXG4gICAgICBkYXRhOiBub2RlLmRhdGEgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5vZGUuZGF0YSkpIDogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGNsb25lZC5jaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4gdGhpcy5jbG9uZU5vZGUoY2hpbGQpKTtcbiAgICAgIGNsb25lZC5jaGlsZHJlbkNvdW50ID0gY2xvbmVkLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIG5vZGUgc3RydWN0dXJlIChjaGVjayBmb3IgcmVxdWlyZWQgZmllbGRzIGFuZCBjaXJjdWxhciByZWZlcmVuY2VzKVxuICAgKi9cbiAgdmFsaWRhdGVOb2RlKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCB2aXNpdGVkSWRzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKSk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yczogc3RyaW5nW10gfSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKCFub2RlLmlkKSB7XG4gICAgICBlcnJvcnMucHVzaCgnTm9kZSBtdXN0IGhhdmUgYW4gaWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIW5vZGUubGFiZWwpIHtcbiAgICAgIGVycm9ycy5wdXNoKCdOb2RlIG11c3QgaGF2ZSBhIGxhYmVsJyk7XG4gICAgfVxuXG4gICAgaWYgKHZpc2l0ZWRJZHMuaGFzKG5vZGUuaWQpKSB7XG4gICAgICBlcnJvcnMucHVzaChgQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkOiBub2RlICR7bm9kZS5pZH0gYXBwZWFycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgdHJlZWApO1xuICAgIH1cblxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBuZXdWaXNpdGVkID0gbmV3IFNldCh2aXNpdGVkSWRzKTtcbiAgICAgIG5ld1Zpc2l0ZWQuYWRkKG5vZGUuaWQpO1xuXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgY2hpbGRWYWxpZGF0aW9uID0gdGhpcy52YWxpZGF0ZU5vZGUoY2hpbGQsIG5ld1Zpc2l0ZWQpO1xuICAgICAgICBpZiAoIWNoaWxkVmFsaWRhdGlvbi52YWxpZCkge1xuICAgICAgICAgIGVycm9ycy5wdXNoKC4uLmNoaWxkVmFsaWRhdGlvbi5lcnJvcnMubWFwKChlKSA9PiBgQ2hpbGQgb2YgJHtub2RlLmlkfTogJHtlfWApKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5jaGlsZHJlbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgbm9kZS5jaGlsZHJlbkNvdW50ICE9PSBub2RlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBlcnJvcnMucHVzaChcbiAgICAgICAgICBgTm9kZSAke25vZGUuaWR9OiBjaGlsZHJlbkNvdW50ICgke25vZGUuY2hpbGRyZW5Db3VudH0pIGRvZXMgbm90IG1hdGNoIGNoaWxkcmVuIGFycmF5IGxlbmd0aCAoJHtub2RlLmNoaWxkcmVuLmxlbmd0aH0pYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IGVycm9ycy5sZW5ndGggPT09IDAsXG4gICAgICBlcnJvcnMsXG4gICAgfTtcbiAgfVxufVxuIl19","import { AXDragDirective, AXDragHandleDirective, AXDropListDirective, moveItemInArray, transferArrayItem, } from '@acorex/cdk/drag-drop';\nimport { AXFocusTrapDirective } from '@acorex/cdk/focus-trap';\nimport { AXBadgeComponent } from '@acorex/components/badge';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCheckBoxComponent } from '@acorex/components/check-box';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { CommonModule, NgTemplateOutlet } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, computed, DestroyRef, effect, inject, input, model, output, signal, ViewEncapsulation, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { map } from 'rxjs/operators';\nimport { AXTreeViewService } from './tree-view.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nexport class AXTreeViewComponent {\n constructor() {\n // ==================== Dependencies ====================\n this.treeService = inject(AXTreeViewService);\n this.platformService = inject(AXPlatform);\n this.destroyRef = inject(DestroyRef);\n // ==================== Inputs ====================\n /** Tree data source - can be static array or lazy loading function */\n this.datasource = model.required(...(ngDevMode ? [{ debugName: \"datasource\" }] : []));\n /** Selection mode: 'single' (click to select) or 'multiple' (checkbox selection) */\n this.selectMode = input('multiple', ...(ngDevMode ? [{ debugName: \"selectMode\" }] : []));\n /** Whether to show checkboxes for selection (only applies to multiple mode) */\n this.showCheckbox = input(true, ...(ngDevMode ? [{ debugName: \"showCheckbox\" }] : []));\n /** When true, selecting a parent also selects all loaded children (only for multiple mode) */\n this.checkChildrenOnSelect = input(true, ...(ngDevMode ? [{ debugName: \"checkChildrenOnSelect\" }] : []));\n /** When true, selecting a child makes parents indeterminate (only for multiple mode) */\n this.intermediateState = input(true, ...(ngDevMode ? [{ debugName: \"intermediateState\" }] : []));\n /** When true, clicking on a node toggles its selection (works for both single and multiple modes) */\n this.checkOnClick = input(false, ...(ngDevMode ? [{ debugName: \"checkOnClick\" }] : []));\n /** Drag and drop mode: 'none' (disabled), 'handler' (drag handle), 'item' (entire item) */\n this.dragMode = input('handler', ...(ngDevMode ? [{ debugName: \"dragMode\" }] : []));\n /** Drag operation type: 'order-only' (reorder only), 'move' (move between parents), 'both' (allow both) */\n this.dragOperationType = input('both', ...(ngDevMode ? [{ debugName: \"dragOperationType\" }] : []));\n /** Whether to show icons */\n this.showIcons = input(true, ...(ngDevMode ? [{ debugName: \"showIcons\" }] : []));\n /** Whether to show children count badge */\n this.showChildrenBadge = input(true, ...(ngDevMode ? [{ debugName: \"showChildrenBadge\" }] : []));\n /** Custom icon for expanded nodes */\n this.expandedIcon = input('fa-solid fa-chevron-down', ...(ngDevMode ? [{ debugName: \"expandedIcon\" }] : []));\n /** Custom icon for collapsed nodes */\n this.collapsedIcon = input('fa-solid fa-chevron-right', ...(ngDevMode ? [{ debugName: \"collapsedIcon\" }] : []));\n /** Indent size in pixels for each level */\n this.indentSize = input(12, ...(ngDevMode ? [{ debugName: \"indentSize\" }] : []));\n /** Node height in pixels */\n this.nodeHeight = input('normal', ...(ngDevMode ? [{ debugName: \"nodeHeight\" }] : []));\n /** Visual style variant */\n this.look = input('default', ...(ngDevMode ? [{ debugName: \"look\" }] : []));\n /** Custom template for tree items */\n this.itemTemplate = input(...(ngDevMode ? [undefined, { debugName: \"itemTemplate\" }] : []));\n // ==================== Outputs ====================\n /** Emitted before a drop operation - set canceled to true to prevent drop */\n this.onBeforeDrop = output();\n /** Emitted when a node is toggled (expanded/collapsed) */\n this.onNodeToggle = output();\n /** Emitted when a node is selected/deselected */\n this.onNodeSelect = output();\n /** Emitted when nodes are reordered within the same parent */\n this.onOrderChange = output();\n /** Emitted when a node is moved to a different parent */\n this.onMoveChange = output();\n /** Emitted for any item change (order or move) */\n this.onItemsChange = output();\n // ==================== Internal State ====================\n /** Internal signal for tree nodes */\n this.nodes = signal([], ...(ngDevMode ? [{ debugName: \"nodes\" }] : []));\n /** Internal signal for tracking loading state */\n this.loadingNodes = signal(new Set(), ...(ngDevMode ? [{ debugName: \"loadingNodes\" }] : []));\n /** Currently focused node ID for keyboard navigation */\n this.focusedNodeId = signal(null, ...(ngDevMode ? [{ debugName: \"focusedNodeId\" }] : []));\n /** RTL detection signal */\n this.isRtl = signal(this.platformService.isRtl(), ...(ngDevMode ? [{ debugName: \"isRtl\" }] : []));\n /** Computed chevron icons that flip for RTL */\n this.directionExpandedIcon = computed(() => this.expandedIcon(), ...(ngDevMode ? [{ debugName: \"directionExpandedIcon\" }] : []));\n this.directionCollapsedIcon = computed(() => {\n const isRtlDirection = this.isRtl();\n const defaultIcon = this.collapsedIcon();\n if (isRtlDirection && defaultIcon === 'fa-solid fa-chevron-right') {\n return 'fa-solid fa-chevron-left';\n }\n if (!isRtlDirection && defaultIcon === 'fa-solid fa-chevron-left') {\n return 'fa-solid fa-chevron-right';\n }\n return defaultIcon;\n }, ...(ngDevMode ? [{ debugName: \"directionCollapsedIcon\" }] : []));\n /** Flag to prevent infinite loops when syncing datasource */\n this.isUpdatingFromDatasource = false;\n /** Computed to check if datasource is a function */\n this.isLazyDataSource = computed(() => typeof this.datasource() === 'function', ...(ngDevMode ? [{ debugName: \"isLazyDataSource\" }] : []));\n // ==================== Effects ====================\n /** Effect to handle datasource changes */\n this.#datasourceEffect = effect(() => {\n if (this.isUpdatingFromDatasource)\n return;\n const ds = this.datasource();\n if (Array.isArray(ds)) {\n this.nodes.set([...ds]);\n }\n else if (typeof ds === 'function') {\n this.loadRootItems(ds).catch((error) => {\n this.handleError('Failed to load root items', error);\n });\n }\n }, ...(ngDevMode ? [{ debugName: \"#datasourceEffect\" }] : []));\n /** Initialize direction change listener */\n this.#initDirectionListener = afterNextRender(() => {\n this.platformService.directionChange\n .pipe(map((event) => event.data === 'rtl'), takeUntilDestroyed(this.destroyRef))\n .subscribe((isRtl) => this.isRtl.set(isRtl));\n });\n }\n // ==================== Effects ====================\n /** Effect to handle datasource changes */\n #datasourceEffect;\n /** Initialize direction change listener */\n #initDirectionListener;\n // ==================== Public API ====================\n /**\n * Expand all nodes in the tree (with lazy loading support)\n */\n async expandAll() {\n await this.treeService.setExpandedState(this.nodes(), true, this.isLazyDataSource(), (node) => this.loadNodeChildren(node));\n this.refreshNodes();\n }\n /**\n * Collapse all nodes in the tree\n */\n collapseAll() {\n this.treeService.setExpandedState(this.nodes(), false, this.isLazyDataSource(), (node) => this.loadNodeChildren(node));\n this.refreshNodes();\n }\n /**\n * Get count of selected nodes\n */\n getSelectedCount() {\n return this.treeService.countSelected(this.nodes());\n }\n /**\n * Check if any nodes are selected\n */\n hasSelection() {\n return this.getSelectedCount() > 0;\n }\n /**\n * Get all selected nodes\n */\n getSelectedNodes() {\n const selected = [];\n this.treeService.collectSelected(this.nodes(), selected);\n return selected;\n }\n /**\n * Delete selected nodes from the tree\n */\n deleteSelected() {\n this.treeService.removeSelected(this.nodes());\n this.treeService.updateAllParentStates(this.nodes(), this.intermediateState());\n this.refreshNodes();\n }\n /**\n * Select all nodes in the tree\n */\n selectAll() {\n this.treeService.setAllSelection(this.nodes(), true);\n this.refreshNodes();\n }\n /**\n * Deselect all nodes in the tree\n */\n deselectAll() {\n this.treeService.setAllSelection(this.nodes(), false);\n this.refreshNodes();\n }\n /**\n * Find a node by ID in the tree\n */\n findNode(id) {\n return this.treeService.findNodeById(this.nodes(), id);\n }\n /**\n * Refresh the tree to trigger change detection\n */\n refresh() {\n this.refreshNodes();\n }\n /**\n * Check if a node is currently loading\n */\n isNodeLoading(nodeId) {\n return this.loadingNodes().has(nodeId);\n }\n /**\n * Edit/update a node's properties\n * @param nodeId - The ID of the node to edit\n * @param updates - Partial node object with properties to update\n * @returns true if node was found and updated, false otherwise\n */\n editNode(nodeId, updates) {\n const node = this.findNode(nodeId);\n if (!node) {\n return false;\n }\n // Update node properties\n Object.assign(node, updates);\n // If children array is provided, ensure it exists\n if (updates.children !== undefined) {\n node.children = updates.children;\n }\n // Update childrenCount if children array is provided\n if (updates.children !== undefined) {\n node.childrenCount = updates.children.length;\n }\n this.refreshNodes();\n return true;\n }\n /**\n * Add a child node to a parent node\n * @param parentId - The ID of the parent node\n * @param childNode - The child node to add\n * @param index - Optional index to insert at (default: append to end)\n * @returns true if parent was found and child was added, false otherwise\n */\n addChild(parentId, childNode, index) {\n const parent = this.findNode(parentId);\n if (!parent) {\n return false;\n }\n // Ensure children array exists\n if (!parent.children) {\n parent.children = [];\n }\n // Insert or append child\n if (index !== undefined && index >= 0 && index <= parent.children.length) {\n parent.children.splice(index, 0, childNode);\n }\n else {\n parent.children.push(childNode);\n }\n // Update childrenCount\n parent.childrenCount = parent.children.length;\n // Auto-expand parent if it was collapsed\n if (!parent.expanded) {\n parent.expanded = true;\n }\n this.refreshNodes();\n return true;\n }\n /**\n * Remove a node from the tree\n * @param nodeId - The ID of the node to remove\n * @returns The removed node if found, null otherwise\n */\n removeNode(nodeId) {\n const node = this.findNode(nodeId);\n if (!node) {\n return null;\n }\n // Find parent to remove from its children array\n const parent = this.treeService.findParentNode(this.nodes(), node);\n const targetArray = parent?.children ?? this.nodes();\n // Find and remove the node\n const index = targetArray.findIndex((n) => n.id === nodeId);\n if (index !== -1) {\n const removed = targetArray.splice(index, 1)[0];\n // Update parent's childrenCount if it exists\n if (parent) {\n parent.childrenCount = parent.children?.length ?? 0;\n }\n // Update parent states if needed\n if (this.intermediateState()) {\n this.treeService.updateAllParentStates(this.nodes(), this.intermediateState());\n }\n this.refreshNodes();\n return removed;\n }\n return null;\n }\n /**\n * Expand a specific node\n * @param nodeId - The ID of the node to expand\n * @returns Promise that resolves when expansion is complete (if lazy loading)\n */\n async expandNode(nodeId) {\n const node = this.findNode(nodeId);\n if (!node) {\n return;\n }\n const hasChildren = this.treeService.hasChildren(node);\n const canLazyLoad = this.treeService.canLazyLoad(node, this.isLazyDataSource());\n if (hasChildren || canLazyLoad) {\n if (canLazyLoad) {\n await this.loadNodeChildren(node);\n }\n node.expanded = true;\n this.refreshNodes();\n this.onNodeToggle.emit({ component: this, node, nativeEvent: new Event('expand') });\n }\n }\n /**\n * Collapse a specific node\n * @param nodeId - The ID of the node to collapse\n */\n collapseNode(nodeId) {\n const node = this.findNode(nodeId);\n if (!node) {\n return;\n }\n if (node.expanded) {\n node.expanded = false;\n this.refreshNodes();\n this.onNodeToggle.emit({ component: this, node, nativeEvent: new Event('collapse') });\n }\n }\n /**\n * Toggle expansion state of a specific node\n * @param nodeId - The ID of the node to toggle\n * @returns Promise that resolves when toggle is complete (if lazy loading)\n */\n async toggleNodeExpansion(nodeId) {\n const node = this.findNode(nodeId);\n if (!node) {\n return;\n }\n if (node.expanded) {\n this.collapseNode(nodeId);\n }\n else {\n await this.expandNode(nodeId);\n }\n }\n /**\n * Programmatically select a node\n * @param nodeId - The ID of the node to select\n * @returns true if node was found and selected, false otherwise\n */\n selectNode(nodeId) {\n const node = this.findNode(nodeId);\n if (!node || node.disabled) {\n return false;\n }\n const mode = this.selectMode();\n if (mode === 'single') {\n this.treeService.deselectAllNodes(this.nodes());\n node.selected = true;\n node.indeterminate = false;\n }\n else {\n node.selected = true;\n node.indeterminate = false;\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, true);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n isUserInteraction: false,\n });\n return true;\n }\n /**\n * Programmatically deselect a node\n * @param nodeId - The ID of the node to deselect\n * @returns true if node was found and deselected, false otherwise\n */\n deselectNode(nodeId) {\n const node = this.findNode(nodeId);\n if (!node) {\n return false;\n }\n node.selected = false;\n node.indeterminate = false;\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, false);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n isUserInteraction: false,\n });\n return true;\n }\n /**\n * Get parent node of a given node\n * @param nodeId - The ID of the node\n * @returns The parent node if found, null otherwise\n */\n getParent(nodeId) {\n const node = this.findNode(nodeId);\n if (!node) {\n return null;\n }\n return this.treeService.findParentNode(this.nodes(), node) ?? null;\n }\n /**\n * Get children of a node\n * @param nodeId - The ID of the parent node\n * @returns Array of child nodes, or null if node not found\n */\n getChildren(nodeId) {\n const node = this.findNode(nodeId);\n if (!node) {\n return null;\n }\n return node.children ?? [];\n }\n /**\n * Get all root nodes\n * @returns Array of root nodes\n */\n getRootNodes() {\n return [...this.nodes()];\n }\n /**\n * Get all nodes in a flat array\n * @returns Array of all nodes in the tree\n */\n getAllNodes() {\n const allNodes = [];\n const traverse = (nodes) => {\n for (const node of nodes) {\n allNodes.push(node);\n if (node.children) {\n traverse(node.children);\n }\n }\n };\n traverse(this.nodes());\n return allNodes;\n }\n /**\n * Get the path to a node (array of parent IDs from root to node)\n * @param nodeId - The ID of the node\n * @returns Array of node IDs representing the path, or empty array if node not found\n */\n getNodePath(nodeId) {\n const path = [];\n const node = this.findNode(nodeId);\n if (!node) {\n return path;\n }\n let current = node;\n while (current) {\n path.unshift(current.id);\n const parent = this.treeService.findParentNode(this.nodes(), current);\n current = parent ?? null;\n }\n return path;\n }\n /**\n * Get the level/depth of a node (0 = root level)\n * @param nodeId - The ID of the node\n * @returns The level of the node, or -1 if node not found\n */\n getNodeLevel(nodeId) {\n const path = this.getNodePath(nodeId);\n return path.length > 0 ? path.length - 1 : -1;\n }\n /**\n * Programmatically move a node to a new parent\n * @param nodeId - The ID of the node to move\n * @param newParentId - The ID of the new parent (undefined for root level)\n * @param index - Optional index to insert at (default: append to end)\n * @returns true if move was successful, false otherwise\n */\n moveNode(nodeId, newParentId, index) {\n const node = this.findNode(nodeId);\n if (!node) {\n return false;\n }\n // Find current parent\n const currentParent = this.treeService.findParentNode(this.nodes(), node);\n const currentArray = currentParent?.children ?? this.nodes();\n // Find and remove from current location\n const currentIndex = currentArray.findIndex((n) => n.id === nodeId);\n if (currentIndex === -1) {\n return false;\n }\n const movedNode = currentArray.splice(currentIndex, 1)[0];\n // Find new parent\n let targetArray;\n let newParent;\n if (newParentId) {\n newParent = this.findNode(newParentId);\n if (!newParent) {\n // Restore node if new parent not found\n currentArray.splice(currentIndex, 0, movedNode);\n return false;\n }\n // Validate drop target\n if (!this.treeService.isValidDropTarget(movedNode, newParent)) {\n // Restore node if invalid drop target\n currentArray.splice(currentIndex, 0, movedNode);\n return false;\n }\n if (!newParent.children) {\n newParent.children = [];\n }\n targetArray = newParent.children;\n }\n else {\n targetArray = this.nodes();\n }\n // Calculate new index before inserting\n const newIndex = index !== undefined && index >= 0 && index <= targetArray.length ? index : targetArray.length;\n // Insert at new location\n if (index !== undefined && index >= 0 && index <= targetArray.length) {\n targetArray.splice(index, 0, movedNode);\n }\n else {\n targetArray.push(movedNode);\n }\n // Update childrenCount\n if (currentParent) {\n currentParent.childrenCount = currentParent.children?.length ?? 0;\n }\n if (newParent) {\n newParent.childrenCount = newParent.children?.length ?? 0;\n newParent.expanded = true; // Auto-expand new parent\n }\n // Emit drop events\n this.emitDropEvents(movedNode, currentParent, newParent, currentIndex, newIndex, false);\n this.refreshNodes();\n return true;\n }\n /**\n * Clone a node (creates a deep copy)\n * @param nodeId - The ID of the node to clone\n * @returns The cloned node, or null if node not found\n */\n cloneNode(nodeId) {\n const node = this.findNode(nodeId);\n if (!node) {\n return null;\n }\n return this.treeService.cloneNode(node);\n }\n /**\n * Focus a specific node by ID\n * @param nodeId - The ID of the node to focus\n * @returns true if node was found and focused, false otherwise\n */\n focusNode(nodeId) {\n const node = this.findNode(nodeId);\n if (!node || node.visible === false || node.disabled) {\n return false;\n }\n this.focusNodeById(nodeId);\n return true;\n }\n /**\n * Get all expanded nodes\n * @returns Array of expanded nodes\n */\n getExpandedNodes() {\n const expanded = [];\n const traverse = (nodes) => {\n for (const node of nodes) {\n if (node.expanded) {\n expanded.push(node);\n }\n if (node.children) {\n traverse(node.children);\n }\n }\n };\n traverse(this.nodes());\n return expanded;\n }\n /**\n * Get all collapsed nodes that have children\n * @returns Array of collapsed nodes with children\n */\n getCollapsedNodes() {\n const collapsed = [];\n const traverse = (nodes) => {\n for (const node of nodes) {\n if (!node.expanded && (node.children?.length || node.childrenCount)) {\n collapsed.push(node);\n }\n if (node.children) {\n traverse(node.children);\n }\n }\n };\n traverse(this.nodes());\n return collapsed;\n }\n /**\n * Check if a node is expanded\n * @param nodeId - The ID of the node\n * @returns true if node is expanded, false otherwise\n */\n isNodeExpanded(nodeId) {\n const node = this.findNode(nodeId);\n return node?.expanded ?? false;\n }\n /**\n * Check if a node is selected\n * @param nodeId - The ID of the node\n * @returns true if node is selected, false otherwise\n */\n isNodeSelected(nodeId) {\n const node = this.findNode(nodeId);\n return node?.selected ?? false;\n }\n /**\n * Check if a node has children\n * @param nodeId - The ID of the node\n * @returns true if node has children, false otherwise\n */\n hasChildren(nodeId) {\n const node = this.findNode(nodeId);\n return this.treeService.hasChildren(node ?? { id: '', label: '' });\n }\n /**\n * Get template context for a node\n */\n getTemplateContext(node, level = 0) {\n return {\n $implicit: node,\n node,\n level,\n expanded: node.expanded ?? false,\n childrenCount: node.childrenCount ?? node.children?.length ?? 0,\n loading: node.loading ?? false,\n };\n }\n /**\n * Calculate padding-inline for a node based on its level\n */\n getNodePaddingInline(level) {\n const indent = this.indentSize();\n const currentLook = this.look();\n const multiplier = currentLook === 'with-line' ? 1 / 3 : 1;\n return level * indent * multiplier;\n }\n /**\n * Check if node should show expand toggle\n */\n shouldShowExpandToggle(node) {\n return this.treeService.hasChildren(node) || this.treeService.canLazyLoad(node, this.isLazyDataSource());\n }\n /**\n * Check if checkboxes should be shown (only for multiple mode)\n */\n shouldShowCheckbox() {\n return this.selectMode() === 'multiple' && this.showCheckbox();\n }\n /**\n * Generate unique list ID for each node\n */\n getListId(node) {\n return this.treeService.getListId(node);\n }\n /**\n * Check if a node is currently focused\n */\n isNodeFocused(nodeId) {\n return this.focusedNodeId() === nodeId;\n }\n /**\n * Get ARIA level for a node\n */\n getNodeAriaLevel(level) {\n return level + 1;\n }\n /**\n * Get ARIA expanded state for a node\n */\n getNodeAriaExpanded(node) {\n if (!this.shouldShowExpandToggle(node)) {\n return null;\n }\n return node.expanded ? 'true' : 'false';\n }\n /**\n * Get ARIA selected state for a node\n */\n getNodeAriaSelected(node) {\n if (this.selectMode() === 'single') {\n return node.selected ? 'true' : 'false';\n }\n return null;\n }\n // ==================== Event Handlers ====================\n /**\n * Handle node click - for single selection mode or multiple mode with checkOnClick enabled\n */\n onNodeClick(node, event) {\n if (node.disabled)\n return;\n const mode = this.selectMode();\n const shouldCheckOnClick = this.checkOnClick();\n if (mode === 'single') {\n this.handleSingleSelection(node, event);\n }\n else if (mode === 'multiple' && shouldCheckOnClick) {\n this.handleMultipleSelection(node, event);\n }\n }\n /**\n * Toggle node expansion state with lazy loading support\n */\n async toggleNode(node, event) {\n if (node.disabled)\n return;\n if (this.isEvent(event) && typeof event.stopPropagation === 'function') {\n event.stopPropagation();\n }\n const hasChildren = this.treeService.hasChildren(node);\n const canLazyLoad = this.treeService.canLazyLoad(node, this.isLazyDataSource());\n if (hasChildren || canLazyLoad) {\n const willExpand = !node.expanded;\n if (willExpand && canLazyLoad) {\n await this.loadNodeChildren(node);\n }\n node.expanded = willExpand;\n this.refreshNodes();\n this.onNodeToggle.emit({ component: this, node, nativeEvent: event });\n }\n }\n /**\n * Toggle node selection state with indeterminate support (for multiple mode)\n */\n toggleSelection(node, event) {\n if (!event.isUserInteraction)\n return;\n const mode = this.selectMode();\n if (mode !== 'multiple')\n return;\n const newValue = event.value === null ? true : event.value;\n node.selected = newValue;\n node.indeterminate = false;\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, newValue);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n isUserInteraction: event.isUserInteraction,\n });\n }\n /**\n * Handle drop events for tree nodes\n */\n onDrop(event, parentNode) {\n const targetArray = parentNode?.children ?? this.nodes();\n const isReordering = event.previousContainer === event.container;\n if (isReordering) {\n this.handleReorder(event, targetArray, parentNode);\n }\n else {\n this.handleMove(event, targetArray, parentNode);\n }\n this.refreshNodes();\n }\n /**\n * Handle drop events when dropping directly onto a node (to make it a child)\n */\n onDropOntoNode(event, targetNode) {\n if (!this.canMoveToParent())\n return;\n const sourceListId = event.previousContainer.element.id;\n const sourceArray = this.getArrayByListId(sourceListId);\n if (!sourceArray)\n return;\n const movedNode = sourceArray[event.previousIndex];\n if (!this.treeService.isValidDropTarget(movedNode, targetNode))\n return;\n if (!this.emitBeforeDropEvent(movedNode, sourceListId, targetNode, event.previousIndex, 0))\n return;\n targetNode.children ??= [];\n sourceArray.splice(event.previousIndex, 1);\n targetNode.children.unshift(movedNode);\n targetNode.expanded = true;\n this.emitDropEvents(movedNode, this.findParentByListId(sourceListId), targetNode, event.previousIndex, 0, false);\n this.refreshNodes();\n }\n /**\n * Handle node focus event\n */\n onNodeFocus(nodeId) {\n this.focusedNodeId.set(nodeId);\n }\n /**\n * Handle tree container focus - focus first node if none is focused\n */\n onTreeFocus(event) {\n if (event.target === event.currentTarget) {\n const flatList = this.treeService.buildFlatNodeList(this.nodes());\n if (flatList.length > 0) {\n const focusedId = this.focusedNodeId();\n if (focusedId) {\n // Check if the focused node still exists and is visible\n const focusedNode = this.treeService.findNodeById(this.nodes(), focusedId);\n if (focusedNode && focusedNode.visible !== false) {\n this.focusNodeById(focusedId);\n }\n else {\n // Focused node no longer exists, focus first node\n this.focusNodeById(flatList[0].node.id);\n }\n }\n else {\n // No node is focused, focus first node\n this.focusNodeById(flatList[0].node.id);\n }\n }\n }\n }\n /**\n * Handle tree container blur\n */\n onTreeBlur(event) {\n if (event.relatedTarget && !event.currentTarget.contains(event.relatedTarget)) {\n this.focusedNodeId.set(null);\n }\n }\n /**\n * Handle keyboard navigation\n */\n handleKeyDown(event) {\n const flatList = this.treeService.buildFlatNodeList(this.nodes());\n if (flatList.length === 0)\n return;\n const currentFocused = this.getFocusedNode();\n let currentIndex = currentFocused ? flatList.findIndex((item) => item.node.id === currentFocused.id) : -1;\n if (currentIndex === -1 && event.target === event.currentTarget) {\n currentIndex = 0;\n }\n const navigationResult = this.handleNavigationKey(event, flatList, currentIndex, currentFocused);\n if (navigationResult.handled) {\n if (navigationResult.shouldPreventDefault) {\n event.preventDefault();\n event.stopPropagation();\n }\n if (navigationResult.targetIndex !== null &&\n navigationResult.targetIndex >= 0 &&\n navigationResult.targetIndex < flatList.length) {\n this.focusNodeById(flatList[navigationResult.targetIndex].node.id);\n }\n }\n }\n // ==================== Private Methods ====================\n /**\n * Load root items when datasource is a function\n */\n async loadRootItems(loadFn) {\n try {\n const result = loadFn();\n const rootNodes = result instanceof Promise ? await result : result;\n this.nodes.set(rootNodes);\n }\n catch (error) {\n this.handleError('Failed to load root items', error);\n this.nodes.set([]);\n }\n }\n /**\n * Load children for a node using lazy loading\n */\n async loadNodeChildren(node) {\n if (!this.isLazyDataSource() || node.loading)\n return;\n if (this.treeService.hasChildren(node) || !node.childrenCount || node.childrenCount === 0) {\n return;\n }\n const ds = this.datasource();\n if (typeof ds !== 'function')\n return;\n try {\n node.loading = true;\n this.loadingNodes.update((set) => new Set(set).add(node.id));\n this.refreshNodes();\n const result = ds(node.id);\n const children = result instanceof Promise ? await result : result;\n node.children = children;\n node.childrenCount = children.length;\n }\n catch (error) {\n this.handleError('Failed to load children', error);\n node.childrenCount = 0;\n }\n finally {\n node.loading = false;\n this.loadingNodes.update((set) => {\n const newSet = new Set(set);\n newSet.delete(node.id);\n return newSet;\n });\n this.refreshNodes();\n }\n }\n /**\n * Internal method to refresh nodes signal and sync back to datasource if it's an array\n * Creates new array references for all nested children to ensure reactivity\n */\n refreshNodes() {\n const currentNodes = this.nodes();\n // Create new array references for all nested children to ensure reactivity\n // This ensures Angular's change detection picks up changes even with callback datasource\n this.ensureNewArrayReferences(currentNodes);\n this.nodes.set([...currentNodes]);\n if (!this.isLazyDataSource() && !this.isUpdatingFromDatasource) {\n this.isUpdatingFromDatasource = true;\n this.datasource.set([...currentNodes]);\n setTimeout(() => {\n this.isUpdatingFromDatasource = false;\n }, 0);\n }\n }\n /**\n * Recursively ensure all children arrays have new references to trigger change detection\n * Mutates the tree structure by replacing children arrays with new array references\n */\n ensureNewArrayReferences(nodes) {\n for (const node of nodes) {\n if (node.children && node.children.length > 0) {\n // Create new array reference for children\n node.children = [...node.children];\n // Recursively process nested children\n this.ensureNewArrayReferences(node.children);\n }\n }\n }\n /**\n * Handle single selection mode\n */\n handleSingleSelection(node, event) {\n this.treeService.deselectAllNodes(this.nodes());\n node.selected = true;\n node.indeterminate = false;\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n }\n /**\n * Handle multiple selection mode with checkOnClick\n */\n handleMultipleSelection(node, event) {\n const newValue = !node.selected;\n node.selected = newValue;\n node.indeterminate = false;\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, newValue);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n }\n /**\n * Get array reference by drop list ID\n */\n getArrayByListId(listId) {\n return this.treeService.getArrayByListId(this.nodes(), listId);\n }\n /**\n * Find parent node by list ID\n */\n findParentByListId(listId) {\n return this.treeService.findParentByListId(this.nodes(), listId);\n }\n /**\n * Check if move operation is allowed based on dragOperationType\n */\n canMoveToParent() {\n return this.dragOperationType() !== 'order-only';\n }\n /**\n * Check if reorder operation is allowed based on dragOperationType\n */\n canReorder() {\n return this.dragOperationType() !== 'move';\n }\n /**\n * Handle reordering within the same list */\n handleReorder(event, targetArray, parentNode) {\n if (!this.canReorder())\n return;\n const movedNode = targetArray[event.previousIndex];\n moveItemInArray(targetArray, event.previousIndex, event.currentIndex);\n this.emitDropEvents(movedNode, parentNode, parentNode, event.previousIndex, event.currentIndex, true);\n }\n /**\n * Handle moving between different lists\n */\n handleMove(event, targetArray, parentNode) {\n if (!this.canMoveToParent())\n return;\n const sourceListId = event.previousContainer.element.id;\n const sourceArray = this.getArrayByListId(sourceListId);\n if (!sourceArray)\n return;\n const movedNode = sourceArray[event.previousIndex];\n if (parentNode && !this.treeService.isValidDropTarget(movedNode, parentNode))\n return;\n if (!this.emitBeforeDropEvent(movedNode, sourceListId, parentNode, event.previousIndex, event.currentIndex)) {\n return;\n }\n transferArrayItem(sourceArray, targetArray, event.previousIndex, event.currentIndex);\n this.emitDropEvents(movedNode, this.findParentByListId(sourceListId), parentNode, event.previousIndex, event.currentIndex, false);\n }\n /**\n * Emit beforeDrop event and return whether to continue\n */\n emitBeforeDropEvent(movedNode, sourceListId, currentParent, previousIndex, currentIndex) {\n const beforeDropEvent = {\n component: this,\n movedNode,\n previousParent: this.findParentByListId(sourceListId),\n currentParent,\n previousIndex,\n currentIndex,\n canceled: false,\n };\n this.onBeforeDrop.emit(beforeDropEvent);\n return !beforeDropEvent.canceled;\n }\n /**\n * Emit drop events based on operation type\n */\n emitDropEvents(node, previousParent, currentParent, previousIndex, currentIndex, isReorder) {\n const dropEvent = {\n component: this,\n node,\n previousParent,\n currentParent,\n previousIndex,\n currentIndex,\n };\n if (isReorder) {\n this.onOrderChange.emit(dropEvent);\n }\n else {\n this.onMoveChange.emit(dropEvent);\n }\n this.onItemsChange.emit(dropEvent);\n }\n /**\n * Get the currently focused node\n */\n getFocusedNode() {\n const focusedId = this.focusedNodeId();\n if (!focusedId)\n return null;\n return this.treeService.findNodeById(this.nodes(), focusedId);\n }\n /**\n * Set focus to a node by ID\n */\n focusNodeById(nodeId) {\n this.focusedNodeId.set(nodeId);\n setTimeout(() => {\n const element = document.querySelector(`[data-tree-node-id=\"${nodeId}\"]`);\n if (element) {\n element.focus();\n element.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n }\n }, 0);\n }\n /**\n * Handle keyboard navigation keys\n */\n handleNavigationKey(event, flatList, currentIndex, currentFocused) {\n let targetIndex = currentIndex;\n let shouldPreventDefault = true;\n let handled = true;\n switch (event.key) {\n case 'ArrowUp':\n if (currentIndex > 0) {\n targetIndex = currentIndex - 1;\n }\n else {\n shouldPreventDefault = false;\n }\n break;\n case 'ArrowDown':\n if (currentIndex < flatList.length - 1) {\n targetIndex = currentIndex + 1;\n }\n else if (currentIndex === -1) {\n targetIndex = 0;\n }\n else {\n shouldPreventDefault = false;\n }\n break;\n case 'ArrowLeft':\n if (currentFocused) {\n if (currentFocused.expanded && this.shouldShowExpandToggle(currentFocused)) {\n this.toggleNode(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n else {\n const currentItem = flatList[currentIndex];\n if (currentItem?.parent) {\n targetIndex = flatList.findIndex((item) => item.node.id === currentItem.parent.id);\n }\n else {\n shouldPreventDefault = false;\n }\n }\n }\n else {\n shouldPreventDefault = false;\n }\n break;\n case 'ArrowRight':\n if (currentFocused) {\n if (!currentFocused.expanded && this.shouldShowExpandToggle(currentFocused)) {\n this.toggleNode(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n else if (currentFocused.expanded &&\n this.treeService.hasChildren(currentFocused) &&\n currentFocused.children) {\n const children = currentFocused.children;\n if (children.length > 0) {\n const firstChild = children[0];\n targetIndex = flatList.findIndex((item) => item.node.id === firstChild.id);\n if (targetIndex === -1) {\n const updatedFlatList = this.treeService.buildFlatNodeList(this.nodes());\n targetIndex = updatedFlatList.findIndex((item) => item.node.id === firstChild.id);\n if (targetIndex >= 0 && targetIndex < updatedFlatList.length) {\n this.focusNodeById(updatedFlatList[targetIndex].node.id);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n }\n }\n else {\n shouldPreventDefault = false;\n }\n }\n else {\n shouldPreventDefault = false;\n }\n }\n else {\n shouldPreventDefault = false;\n }\n break;\n case 'Home':\n targetIndex = 0;\n break;\n case 'End':\n targetIndex = flatList.length - 1;\n break;\n case ' ':\n case 'Space':\n if (currentFocused && this.selectMode() === 'multiple') {\n event.preventDefault();\n this.handleSpaceKeySelection(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n shouldPreventDefault = false;\n break;\n case 'Enter':\n if (currentFocused) {\n event.preventDefault();\n this.handleEnterKeySelection(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n shouldPreventDefault = false;\n break;\n default:\n if ((event.ctrlKey || event.metaKey) && event.key === 'Enter') {\n if (currentFocused && this.selectMode() === 'multiple') {\n event.preventDefault();\n this.handleCtrlEnterSelection(currentFocused, event);\n return { handled: true, shouldPreventDefault: true, targetIndex: null };\n }\n }\n handled = false;\n shouldPreventDefault = false;\n break;\n }\n return { handled, shouldPreventDefault, targetIndex };\n }\n /**\n * Handle Space key selection\n */\n handleSpaceKeySelection(node, event) {\n const newValue = !node.selected;\n node.selected = newValue;\n node.indeterminate = false;\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, newValue);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n }\n /**\n * Handle Enter key selection\n */\n handleEnterKeySelection(node, event) {\n const mode = this.selectMode();\n this.treeService.deselectAllNodes(this.nodes());\n node.selected = true;\n node.indeterminate = false;\n if (mode === 'multiple') {\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, true);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n }\n /**\n * Handle Ctrl/Cmd + Enter key selection\n */\n handleCtrlEnterSelection(node, event) {\n const newValue = !node.selected;\n node.selected = newValue;\n node.indeterminate = false;\n if (this.checkChildrenOnSelect() && node.children) {\n this.treeService.selectAllChildren(node.children, newValue);\n }\n if (this.intermediateState()) {\n this.treeService.updateParentStates(this.nodes(), node, this.intermediateState());\n }\n this.refreshNodes();\n this.onNodeSelect.emit({\n component: this,\n node,\n nativeEvent: event,\n isUserInteraction: true,\n });\n }\n /**\n * Type guard to check if value is an Event\n */\n isEvent(value) {\n return value instanceof Event;\n }\n /**\n * Handle errors consistently\n */\n handleError(message, error) {\n if (error instanceof Error) {\n console.error(`${message}:`, error.message);\n }\n else {\n console.error(`${message}:`, error);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.9\", type: AXTreeViewComponent, isStandalone: true, selector: \"ax-tree-view\", inputs: { datasource: { classPropertyName: \"datasource\", publicName: \"datasource\", isSignal: true, isRequired: true, transformFunction: null }, selectMode: { classPropertyName: \"selectMode\", publicName: \"selectMode\", isSignal: true, isRequired: false, transformFunction: null }, showCheckbox: { classPropertyName: \"showCheckbox\", publicName: \"showCheckbox\", isSignal: true, isRequired: false, transformFunction: null }, checkChildrenOnSelect: { classPropertyName: \"checkChildrenOnSelect\", publicName: \"checkChildrenOnSelect\", isSignal: true, isRequired: false, transformFunction: null }, intermediateState: { classPropertyName: \"intermediateState\", publicName: \"intermediateState\", isSignal: true, isRequired: false, transformFunction: null }, checkOnClick: { classPropertyName: \"checkOnClick\", publicName: \"checkOnClick\", isSignal: true, isRequired: false, transformFunction: null }, dragMode: { classPropertyName: \"dragMode\", publicName: \"dragMode\", isSignal: true, isRequired: false, transformFunction: null }, dragOperationType: { classPropertyName: \"dragOperationType\", publicName: \"dragOperationType\", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: \"showIcons\", publicName: \"showIcons\", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: \"showChildrenBadge\", publicName: \"showChildrenBadge\", isSignal: true, isRequired: false, transformFunction: null }, expandedIcon: { classPropertyName: \"expandedIcon\", publicName: \"expandedIcon\", isSignal: true, isRequired: false, transformFunction: null }, collapsedIcon: { classPropertyName: \"collapsedIcon\", publicName: \"collapsedIcon\", isSignal: true, isRequired: false, transformFunction: null }, indentSize: { classPropertyName: \"indentSize\", publicName: \"indentSize\", isSignal: true, isRequired: false, transformFunction: null }, nodeHeight: { classPropertyName: \"nodeHeight\", publicName: \"nodeHeight\", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: \"look\", publicName: \"look\", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: \"itemTemplate\", publicName: \"itemTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { datasource: \"datasourceChange\", onBeforeDrop: \"onBeforeDrop\", onNodeToggle: \"onNodeToggle\", onNodeSelect: \"onNodeSelect\", onOrderChange: \"onOrderChange\", onMoveChange: \"onMoveChange\", onItemsChange: \"onItemsChange\" }, host: { attributes: { \"role\": \"tree\", \"tabindex\": \"0\" }, listeners: { \"keydown\": \"handleKeyDown($event)\", \"focus\": \"onTreeFocus($event)\", \"blur\": \"onTreeBlur($event)\" }, properties: { \"class.ax-tree-view-default\": \"look() === 'default'\", \"class.ax-tree-view-card\": \"look() === 'card'\", \"class.ax-tree-view-with-line\": \"look() === 'with-line'\", \"class.ax-tree-view-rtl\": \"isRtl\", \"style.--ax-tree-view-indent-size\": \"indentSize() + 'px'\", \"style.--ax-tree-view-line-offset\": \"(indentSize() / 2) + 'px'\", \"attr.aria-label\": \"\\\"Tree navigation\\\"\" }, classAttribute: \"ax-tree-view\" }, providers: [AXTreeViewService], ngImport: i0, template: \"<!-- Root drop list -->\\n<div\\n axFocusTrap\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [sortingDisabled]=\\\"false\\\"\\n [id]=\\\"getListId()\\\"\\n [attr.data-node-id]=\\\"null\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event)\\\"\\n class=\\\"ax-tree-view-drop-list\\\"\\n [class.ax-tree-view-card]=\\\"look() === 'card'\\\"\\n [class.ax-tree-view-with-lines]=\\\"look() === 'with-line'\\\"\\n [class.ax-tree-view-compact]=\\\"nodeHeight() === 'compact'\\\"\\n [class.ax-tree-view-comfortable]=\\\"nodeHeight() === 'comfortable'\\\"\\n role=\\\"group\\\"\\n>\\n @for (node of nodes(); track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree-view-node\\\"\\n [class.ax-tree-view-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree-view-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree-view-node-loading]=\\\"node.loading\\\"\\n role=\\\"treeitem\\\"\\n [attr.aria-level]=\\\"getNodeAriaLevel(0)\\\"\\n [attr.aria-expanded]=\\\"getNodeAriaExpanded(node)\\\"\\n [attr.aria-selected]=\\\"getNodeAriaSelected(node)\\\"\\n [attr.aria-disabled]=\\\"node.disabled ? 'true' : null\\\"\\n >\\n <div\\n class=\\\"ax-tree-view-node-content\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-view-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-tree-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n (click)=\\\"\\n (selectMode() === 'single' || (selectMode() === 'multiple' && checkOnClick())) && onNodeClick(node, $event)\\n \\\"\\n (focus)=\\\"onNodeFocus(node.id)\\\"\\n [tabindex]=\\\"isNodeFocused(node.id) ? 0 : -1\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree-view-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree-view-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree-view-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree-view-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree-view-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i\\n [class]=\\\"node.expanded ? directionExpandedIcon() : directionCollapsedIcon()\\\"\\n class=\\\"ax-tree-view-toggle-icon\\\"\\n ></i>\\n </ax-icon>\\n }\\n </ax-button>\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, 0)\\\"\\n ></ng-container>\\n } @else {\\n @if (shouldShowCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree-view-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree-view-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree-view-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree-view-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree-view-children\\\" role=\\\"group\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n</div>\\n\\n<!-- Recursive children template -->\\n<ng-template #childrenList let-children=\\\"children\\\" let-parent=\\\"parent\\\" let-level=\\\"level\\\">\\n <div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"getListId(parent)\\\"\\n [attr.data-node-id]=\\\"parent.id\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event, parent)\\\"\\n class=\\\"ax-tree-view-drop-list\\\"\\n role=\\\"group\\\"\\n >\\n @for (node of children; track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree-view-node\\\"\\n [class.ax-tree-view-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree-view-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree-view-node-loading]=\\\"node.loading\\\"\\n [class.ax-tree-view-node-focused]=\\\"isNodeFocused(node.id)\\\"\\n role=\\\"treeitem\\\"\\n [attr.aria-level]=\\\"getNodeAriaLevel(level)\\\"\\n [attr.aria-expanded]=\\\"getNodeAriaExpanded(node)\\\"\\n [attr.aria-selected]=\\\"getNodeAriaSelected(node)\\\"\\n [attr.aria-disabled]=\\\"node.disabled ? 'true' : null\\\"\\n >\\n <div\\n class=\\\"ax-tree-view-node-content\\\"\\n [style.padding-inline-start.px]=\\\"getNodePaddingInline(level)\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-view-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-tree-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n (click)=\\\"\\n (selectMode() === 'single' || (selectMode() === 'multiple' && checkOnClick())) &&\\n onNodeClick(node, $event)\\n \\\"\\n (focus)=\\\"onNodeFocus(node.id)\\\"\\n (blur)=\\\"focusedNodeId.set(null)\\\"\\n [tabindex]=\\\"isNodeFocused(node.id) ? 0 : -1\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree-view-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree-view-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree-view-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree-view-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree-view-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i\\n [class]=\\\"node.expanded ? directionExpandedIcon() : directionCollapsedIcon()\\\"\\n class=\\\"ax-tree-view-toggle-icon\\\"\\n ></i>\\n </ax-icon>\\n }\\n </ax-button>\\n\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, level)\\\"\\n ></ng-container>\\n } @else {\\n @if (shouldShowCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree-view-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree-view-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree-view-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree-view-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree-view-children\\\" role=\\\"group\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: level + 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".ax-tree-view{display:block;width:100%;--ax-comp-tree-view-indent-size: 12px;--ax-comp-tree-view-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree-view-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree-view-node-border-radius: 6px;--ax-comp-tree-view-node-margin: .25rem;--ax-comp-tree-view-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree-view-drag-preview-opacity: .9;--ax-comp-tree-view-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree-view-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree-view-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3);--ax-comp-tree-view-content-padding: 0;--ax-comp-tree-view-content-gap: .5rem;--ax-comp-tree-view-drop-list-min-height: 2rem;--ax-comp-tree-view-drag-handle-padding: .25rem;--ax-comp-tree-view-expand-toggle-padding: .25rem;--ax-comp-tree-view-card-node-margin: .5rem;--ax-comp-tree-view-card-content-padding: 1rem;--ax-comp-tree-view-outline-offset: 2px;--ax-comp-tree-view-outline-offset-negative: -2px}.ax-tree-view-drop-list{min-height:var(--ax-comp-tree-view-drop-list-min-height)}.ax-tree-view-compact .ax-tree-view-node-content{padding:var(--ax-comp-tree-view-content-padding, .25rem .5rem);gap:var(--ax-comp-tree-view-content-gap, .375rem);font-size:.8125rem}.ax-tree-view-comfortable .ax-tree-view-node-content{padding:var(--ax-comp-tree-view-content-padding, .75rem .625rem);gap:var(--ax-comp-tree-view-content-gap, .625rem);font-size:.9375rem}.ax-tree-view-node{position:relative;margin:var(--ax-comp-tree-view-node-margin) 0;border-radius:var(--ax-comp-tree-view-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree-view-node:hover:not(.ax-dragging){background:var(--ax-comp-tree-view-node-hover-bg)}.ax-tree-view-node.ax-tree-view-node-selected{background:var(--ax-comp-tree-view-node-selected-bg);border-color:currentColor}.ax-tree-view-node.ax-dragging{opacity:var(--ax-comp-tree-view-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree-view-node.ax-drag-placeholder{background:var(--ax-comp-tree-view-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree-view-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree-view-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree-view-drop-active-bg);border-radius:var(--ax-comp-tree-view-node-border-radius);outline:2px dashed var(--ax-comp-tree-view-drop-active-outline);outline-offset:var(--ax-comp-tree-view-outline-offset-negative)}.ax-tree-view-node-content{display:flex;align-items:center;gap:var(--ax-comp-tree-view-content-gap);padding:var(--ax-comp-tree-view-content-padding);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;border:1px solid transparent;border-radius:var(--ax-comp-tree-view-node-border-radius)}.ax-tree-view-node-content:focus{outline:none}.ax-tree-view-node-content:focus-visible{outline:2px solid rgba(var(--ax-sys-color-primary-500),.8);outline-offset:var(--ax-comp-tree-view-outline-offset);border-radius:var(--ax-comp-tree-view-node-border-radius)}.ax-tree-view-drag-handle{cursor:grab;opacity:.6;padding:var(--ax-comp-tree-view-drag-handle-padding)}.ax-tree-view-drag-handle:hover{opacity:1}.ax-tree-view-drag-handle:active{cursor:grabbing}.ax-tree-view-expand-toggle{background:none;border:none;cursor:pointer;padding:var(--ax-comp-tree-view-expand-toggle-padding);min-width:1.5rem;height:1.5rem}.ax-tree-view-expand-toggle:not(.ax-tree-view-has-children){opacity:0;pointer-events:none}.ax-tree-view-toggle-icon{font-size:.75rem}.ax-tree-view-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree-view-node-label{flex:1;font-size:.875rem;line-height:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree-view-children{padding-inline-start:var(--ax-tree-view-indent-size, var(--ax-comp-tree-view-indent-size))}.ax-tree-view-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree-view-node-loading{opacity:.7}.ax-tree-view-card .ax-tree-view-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:var(--ax-comp-tree-view-card-node-margin) 0}.ax-tree-view-card .ax-tree-view-node-content{padding:var(--ax-comp-tree-view-card-content-padding)}.ax-tree-view-with-lines .ax-tree-view-children{position:relative;padding-inline-start:var(--ax-tree-view-indent-size, var(--ax-comp-tree-view-indent-size))}.ax-tree-view-with-lines .ax-tree-view-children:before{content:\\\"\\\";position:absolute;inset-inline-start:var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-view-line-color, var(--ax-comp-tree-view-line-color))}.ax-tree-view-with-lines .ax-tree-view-node{position:relative}.ax-tree-view-with-lines .ax-tree-view-node:before{content:\\\"\\\";position:absolute;inset-inline-start:calc(-1 * var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2)));top:60%;width:var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2));height:1px;background:var(--ax-tree-view-line-color, var(--ax-comp-tree-view-line-color))}.ax-tree-view-with-lines>.ax-tree-view-drop-list>.ax-tree-view-node:before,.ax-tree-view-with-lines>.ax-tree-view-node:before{display:none}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"axDrag\", \"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDragHandleDirective, selector: \"[axDragHandle]\" }, { kind: \"directive\", type: AXDropListDirective, selector: \"[axDropList]\", inputs: [\"axDropList\", \"sortingDisabled\", \"dropListGroup\", \"dropListOrientation\"], outputs: [\"dropListDropped\"], exportAs: [\"axDropList\"] }, { kind: \"directive\", type: AXFocusTrapDirective, selector: \"[axFocusTrap]\" }, { kind: \"component\", type: AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: AXCheckBoxComponent, selector: \"ax-check-box\", inputs: [\"disabled\", \"tabIndex\", \"readonly\", \"color\", \"value\", \"name\", \"id\", \"isLoading\", \"indeterminate\"], outputs: [\"onBlur\", \"onFocus\", \"valueChange\", \"onValueChanged\"] }, { kind: \"component\", type: AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-tree-view', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [AXTreeViewService], imports: [\n CommonModule,\n FormsModule,\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n AXFocusTrapDirective,\n NgTemplateOutlet,\n AXButtonComponent,\n AXCheckBoxComponent,\n AXBadgeComponent,\n AXDecoratorIconComponent,\n ], host: {\n class: 'ax-tree-view',\n '[class.ax-tree-view-default]': \"look() === 'default'\",\n '[class.ax-tree-view-card]': \"look() === 'card'\",\n '[class.ax-tree-view-with-line]': \"look() === 'with-line'\",\n '[class.ax-tree-view-rtl]': 'isRtl',\n '[style.--ax-tree-view-indent-size]': \"indentSize() + 'px'\",\n '[style.--ax-tree-view-line-offset]': \"(indentSize() / 2) + 'px'\",\n role: 'tree',\n '[attr.aria-label]': '\"Tree navigation\"',\n '(keydown)': 'handleKeyDown($event)',\n '(focus)': 'onTreeFocus($event)',\n '(blur)': 'onTreeBlur($event)',\n tabindex: '0',\n }, template: \"<!-- Root drop list -->\\n<div\\n axFocusTrap\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [sortingDisabled]=\\\"false\\\"\\n [id]=\\\"getListId()\\\"\\n [attr.data-node-id]=\\\"null\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event)\\\"\\n class=\\\"ax-tree-view-drop-list\\\"\\n [class.ax-tree-view-card]=\\\"look() === 'card'\\\"\\n [class.ax-tree-view-with-lines]=\\\"look() === 'with-line'\\\"\\n [class.ax-tree-view-compact]=\\\"nodeHeight() === 'compact'\\\"\\n [class.ax-tree-view-comfortable]=\\\"nodeHeight() === 'comfortable'\\\"\\n role=\\\"group\\\"\\n>\\n @for (node of nodes(); track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree-view-node\\\"\\n [class.ax-tree-view-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree-view-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree-view-node-loading]=\\\"node.loading\\\"\\n role=\\\"treeitem\\\"\\n [attr.aria-level]=\\\"getNodeAriaLevel(0)\\\"\\n [attr.aria-expanded]=\\\"getNodeAriaExpanded(node)\\\"\\n [attr.aria-selected]=\\\"getNodeAriaSelected(node)\\\"\\n [attr.aria-disabled]=\\\"node.disabled ? 'true' : null\\\"\\n >\\n <div\\n class=\\\"ax-tree-view-node-content\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-view-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-tree-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n (click)=\\\"\\n (selectMode() === 'single' || (selectMode() === 'multiple' && checkOnClick())) && onNodeClick(node, $event)\\n \\\"\\n (focus)=\\\"onNodeFocus(node.id)\\\"\\n [tabindex]=\\\"isNodeFocused(node.id) ? 0 : -1\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree-view-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree-view-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree-view-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree-view-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree-view-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i\\n [class]=\\\"node.expanded ? directionExpandedIcon() : directionCollapsedIcon()\\\"\\n class=\\\"ax-tree-view-toggle-icon\\\"\\n ></i>\\n </ax-icon>\\n }\\n </ax-button>\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, 0)\\\"\\n ></ng-container>\\n } @else {\\n @if (shouldShowCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree-view-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree-view-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree-view-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree-view-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree-view-children\\\" role=\\\"group\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n</div>\\n\\n<!-- Recursive children template -->\\n<ng-template #childrenList let-children=\\\"children\\\" let-parent=\\\"parent\\\" let-level=\\\"level\\\">\\n <div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"getListId(parent)\\\"\\n [attr.data-node-id]=\\\"parent.id\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event, parent)\\\"\\n class=\\\"ax-tree-view-drop-list\\\"\\n role=\\\"group\\\"\\n >\\n @for (node of children; track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree-view-node\\\"\\n [class.ax-tree-view-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree-view-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree-view-node-loading]=\\\"node.loading\\\"\\n [class.ax-tree-view-node-focused]=\\\"isNodeFocused(node.id)\\\"\\n role=\\\"treeitem\\\"\\n [attr.aria-level]=\\\"getNodeAriaLevel(level)\\\"\\n [attr.aria-expanded]=\\\"getNodeAriaExpanded(node)\\\"\\n [attr.aria-selected]=\\\"getNodeAriaSelected(node)\\\"\\n [attr.aria-disabled]=\\\"node.disabled ? 'true' : null\\\"\\n >\\n <div\\n class=\\\"ax-tree-view-node-content\\\"\\n [style.padding-inline-start.px]=\\\"getNodePaddingInline(level)\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-view-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-tree-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-view-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n (click)=\\\"\\n (selectMode() === 'single' || (selectMode() === 'multiple' && checkOnClick())) &&\\n onNodeClick(node, $event)\\n \\\"\\n (focus)=\\\"onNodeFocus(node.id)\\\"\\n (blur)=\\\"focusedNodeId.set(null)\\\"\\n [tabindex]=\\\"isNodeFocused(node.id) ? 0 : -1\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree-view-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree-view-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree-view-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree-view-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree-view-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i\\n [class]=\\\"node.expanded ? directionExpandedIcon() : directionCollapsedIcon()\\\"\\n class=\\\"ax-tree-view-toggle-icon\\\"\\n ></i>\\n </ax-icon>\\n }\\n </ax-button>\\n\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, level)\\\"\\n ></ng-container>\\n } @else {\\n @if (shouldShowCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree-view-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree-view-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree-view-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree-view-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree-view-children\\\" role=\\\"group\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: level + 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".ax-tree-view{display:block;width:100%;--ax-comp-tree-view-indent-size: 12px;--ax-comp-tree-view-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree-view-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree-view-node-border-radius: 6px;--ax-comp-tree-view-node-margin: .25rem;--ax-comp-tree-view-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree-view-drag-preview-opacity: .9;--ax-comp-tree-view-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree-view-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree-view-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3);--ax-comp-tree-view-content-padding: 0;--ax-comp-tree-view-content-gap: .5rem;--ax-comp-tree-view-drop-list-min-height: 2rem;--ax-comp-tree-view-drag-handle-padding: .25rem;--ax-comp-tree-view-expand-toggle-padding: .25rem;--ax-comp-tree-view-card-node-margin: .5rem;--ax-comp-tree-view-card-content-padding: 1rem;--ax-comp-tree-view-outline-offset: 2px;--ax-comp-tree-view-outline-offset-negative: -2px}.ax-tree-view-drop-list{min-height:var(--ax-comp-tree-view-drop-list-min-height)}.ax-tree-view-compact .ax-tree-view-node-content{padding:var(--ax-comp-tree-view-content-padding, .25rem .5rem);gap:var(--ax-comp-tree-view-content-gap, .375rem);font-size:.8125rem}.ax-tree-view-comfortable .ax-tree-view-node-content{padding:var(--ax-comp-tree-view-content-padding, .75rem .625rem);gap:var(--ax-comp-tree-view-content-gap, .625rem);font-size:.9375rem}.ax-tree-view-node{position:relative;margin:var(--ax-comp-tree-view-node-margin) 0;border-radius:var(--ax-comp-tree-view-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree-view-node:hover:not(.ax-dragging){background:var(--ax-comp-tree-view-node-hover-bg)}.ax-tree-view-node.ax-tree-view-node-selected{background:var(--ax-comp-tree-view-node-selected-bg);border-color:currentColor}.ax-tree-view-node.ax-dragging{opacity:var(--ax-comp-tree-view-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree-view-node.ax-drag-placeholder{background:var(--ax-comp-tree-view-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree-view-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree-view-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree-view-drop-active-bg);border-radius:var(--ax-comp-tree-view-node-border-radius);outline:2px dashed var(--ax-comp-tree-view-drop-active-outline);outline-offset:var(--ax-comp-tree-view-outline-offset-negative)}.ax-tree-view-node-content{display:flex;align-items:center;gap:var(--ax-comp-tree-view-content-gap);padding:var(--ax-comp-tree-view-content-padding);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;border:1px solid transparent;border-radius:var(--ax-comp-tree-view-node-border-radius)}.ax-tree-view-node-content:focus{outline:none}.ax-tree-view-node-content:focus-visible{outline:2px solid rgba(var(--ax-sys-color-primary-500),.8);outline-offset:var(--ax-comp-tree-view-outline-offset);border-radius:var(--ax-comp-tree-view-node-border-radius)}.ax-tree-view-drag-handle{cursor:grab;opacity:.6;padding:var(--ax-comp-tree-view-drag-handle-padding)}.ax-tree-view-drag-handle:hover{opacity:1}.ax-tree-view-drag-handle:active{cursor:grabbing}.ax-tree-view-expand-toggle{background:none;border:none;cursor:pointer;padding:var(--ax-comp-tree-view-expand-toggle-padding);min-width:1.5rem;height:1.5rem}.ax-tree-view-expand-toggle:not(.ax-tree-view-has-children){opacity:0;pointer-events:none}.ax-tree-view-toggle-icon{font-size:.75rem}.ax-tree-view-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree-view-node-label{flex:1;font-size:.875rem;line-height:1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree-view-children{padding-inline-start:var(--ax-tree-view-indent-size, var(--ax-comp-tree-view-indent-size))}.ax-tree-view-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree-view-node-loading{opacity:.7}.ax-tree-view-card .ax-tree-view-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:var(--ax-comp-tree-view-card-node-margin) 0}.ax-tree-view-card .ax-tree-view-node-content{padding:var(--ax-comp-tree-view-card-content-padding)}.ax-tree-view-with-lines .ax-tree-view-children{position:relative;padding-inline-start:var(--ax-tree-view-indent-size, var(--ax-comp-tree-view-indent-size))}.ax-tree-view-with-lines .ax-tree-view-children:before{content:\\\"\\\";position:absolute;inset-inline-start:var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-view-line-color, var(--ax-comp-tree-view-line-color))}.ax-tree-view-with-lines .ax-tree-view-node{position:relative}.ax-tree-view-with-lines .ax-tree-view-node:before{content:\\\"\\\";position:absolute;inset-inline-start:calc(-1 * var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2)));top:60%;width:var(--ax-tree-view-line-offset, calc(var(--ax-comp-tree-view-indent-size) / 2));height:1px;background:var(--ax-tree-view-line-color, var(--ax-comp-tree-view-line-color))}.ax-tree-view-with-lines>.ax-tree-view-drop-list>.ax-tree-view-node:before,.ax-tree-view-with-lines>.ax-tree-view-node:before{display:none}\\n\"] }]\n }], propDecorators: { datasource: [{ type: i0.Input, args: [{ isSignal: true, alias: \"datasource\", required: true }] }, { type: i0.Output, args: [\"datasourceChange\"] }], selectMode: [{ type: i0.Input, args: [{ isSignal: true, alias: \"selectMode\", required: false }] }], showCheckbox: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showCheckbox\", required: false }] }], checkChildrenOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: \"checkChildrenOnSelect\", required: false }] }], intermediateState: [{ type: i0.Input, args: [{ isSignal: true, alias: \"intermediateState\", required: false }] }], checkOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: \"checkOnClick\", required: false }] }], dragMode: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragMode\", required: false }] }], dragOperationType: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragOperationType\", required: false }] }], showIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showIcons\", required: false }] }], showChildrenBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showChildrenBadge\", required: false }] }], expandedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"expandedIcon\", required: false }] }], collapsedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"collapsedIcon\", required: false }] }], indentSize: [{ type: i0.Input, args: [{ isSignal: true, alias: \"indentSize\", required: false }] }], nodeHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: \"nodeHeight\", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: \"look\", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"itemTemplate\", required: false }] }], onBeforeDrop: [{ type: i0.Output, args: [\"onBeforeDrop\"] }], onNodeToggle: [{ type: i0.Output, args: [\"onNodeToggle\"] }], onNodeSelect: [{ type: i0.Output, args: [\"onNodeSelect\"] }], onOrderChange: [{ type: i0.Output, args: [\"onOrderChange\"] }], onMoveChange: [{ type: i0.Output, args: [\"onMoveChange\"] }], onItemsChange: [{ type: i0.Output, args: [\"onItemsChange\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZS12aWV3L3NyYy9saWIvdHJlZS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZS12aWV3L3NyYy9saWIvdHJlZS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUVuQixlQUFlLEVBQ2YsaUJBQWlCLEdBQ2xCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFFTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQXFEeEQsTUFBTSxPQUFPLG1CQUFtQjtJQXBDaEM7UUFxQ0UseURBQXlEO1FBQ3hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVqRCxtREFBbUQ7UUFDbkQsc0VBQXNFO1FBQzdELGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxxREFBd0IsQ0FBQztRQUU3RCxvRkFBb0Y7UUFDM0UsZUFBVSxHQUFHLEtBQUssQ0FBdUIsVUFBVSxzREFBQyxDQUFDO1FBRTlELCtFQUErRTtRQUN0RSxpQkFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLHdEQUFDLENBQUM7UUFFcEMsOEZBQThGO1FBQ3JGLDBCQUFxQixHQUFHLEtBQUssQ0FBQyxJQUFJLGlFQUFDLENBQUM7UUFFN0Msd0ZBQXdGO1FBQy9FLHNCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLDZEQUFDLENBQUM7UUFFekMscUdBQXFHO1FBQzVGLGlCQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssd0RBQUMsQ0FBQztRQUVyQywyRkFBMkY7UUFDbEYsYUFBUSxHQUFHLEtBQUssQ0FBcUIsU0FBUyxvREFBQyxDQUFDO1FBRXpELDJHQUEyRztRQUNsRyxzQkFBaUIsR0FBRyxLQUFLLENBQThCLE1BQU0sNkRBQUMsQ0FBQztRQUV4RSw0QkFBNEI7UUFDbkIsY0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLHFEQUFDLENBQUM7UUFFakMsMkNBQTJDO1FBQ2xDLHNCQUFpQixHQUFHLEtBQUssQ0FBQyxJQUFJLDZEQUFDLENBQUM7UUFFekMscUNBQXFDO1FBQzVCLGlCQUFZLEdBQUcsS0FBSyxDQUFDLDBCQUEwQix3REFBQyxDQUFDO1FBRTFELHNDQUFzQztRQUM3QixrQkFBYSxHQUFHLEtBQUssQ0FBQywyQkFBMkIseURBQUMsQ0FBQztRQUU1RCwyQ0FBMkM7UUFDbEMsZUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLHNEQUFDLENBQUM7UUFFaEMsNEJBQTRCO1FBQ25CLGVBQVUsR0FBRyxLQUFLLENBQXVDLFFBQVEsc0RBQUMsQ0FBQztRQUU1RSwyQkFBMkI7UUFDbEIsU0FBSSxHQUFHLEtBQUssQ0FBcUIsU0FBUyxnREFBQyxDQUFDO1FBRXJELHFDQUFxQztRQUM1QixpQkFBWSxHQUFHLEtBQUssa0VBQThDLENBQUM7UUFFNUUsb0RBQW9EO1FBQ3BELDZFQUE2RTtRQUNwRSxpQkFBWSxHQUFHLE1BQU0sRUFBNkIsQ0FBQztRQUU1RCwwREFBMEQ7UUFDakQsaUJBQVksR0FBRyxNQUFNLEVBQTZCLENBQUM7UUFFNUQsaURBQWlEO1FBQ3hDLGlCQUFZLEdBQUcsTUFBTSxFQUE2QixDQUFDO1FBRTVELDhEQUE4RDtRQUNyRCxrQkFBYSxHQUFHLE1BQU0sRUFBdUIsQ0FBQztRQUV2RCx5REFBeUQ7UUFDaEQsaUJBQVksR0FBRyxNQUFNLEVBQXVCLENBQUM7UUFFdEQsa0RBQWtEO1FBQ3pDLGtCQUFhLEdBQUcsTUFBTSxFQUF1QixDQUFDO1FBRXZELDJEQUEyRDtRQUMzRCxxQ0FBcUM7UUFDbEIsVUFBSyxHQUFHLE1BQU0sQ0FBbUIsRUFBRSxpREFBQyxDQUFDO1FBRXhELGlEQUFpRDtRQUM5QixpQkFBWSxHQUFHLE1BQU0sQ0FBYyxJQUFJLEdBQUcsRUFBRSx3REFBQyxDQUFDO1FBRWpFLHdEQUF3RDtRQUNyQyxrQkFBYSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSx5REFBQyxDQUFDO1FBRS9ELDJCQUEyQjtRQUNSLFVBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsaURBQUMsQ0FBQztRQUVoRSwrQ0FBK0M7UUFDNUIsMEJBQXFCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsaUVBQUMsQ0FBQztRQUU1RCwyQkFBc0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3hELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFekMsSUFBSSxjQUFjLElBQUksV0FBVyxLQUFLLDJCQUEyQixFQUFFLENBQUM7Z0JBQ2xFLE9BQU8sMEJBQTBCLENBQUM7WUFDcEMsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLElBQUksV0FBVyxLQUFLLDBCQUEwQixFQUFFLENBQUM7Z0JBQ2xFLE9BQU8sMkJBQTJCLENBQUM7WUFDckMsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUMsa0VBQUMsQ0FBQztRQUVILDZEQUE2RDtRQUNyRCw2QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFFekMsb0RBQW9EO1FBQ25DLHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxVQUFVLDREQUFDLENBQUM7UUFFNUYsb0RBQW9EO1FBQ3BELDBDQUEwQztRQUNqQyxzQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLHdCQUF3QjtnQkFBRSxPQUFPO1lBRTFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxJQUFJLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO29CQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLDJCQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2RCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLDZEQUFDLENBQUM7UUFFSCwyQ0FBMkM7UUFDbEMsMkJBQXNCLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWU7aUJBQ2pDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQ3BDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDcEM7aUJBQ0EsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0tBNnpDSjtJQXAxQ0Msb0RBQW9EO0lBQ3BELDBDQUEwQztJQUNqQyxpQkFBaUIsQ0FXdkI7SUFFSCwyQ0FBMkM7SUFDbEMsc0JBQXNCLENBTzVCO0lBRUgsdURBQXVEO0lBQ3ZEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQzVGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FDNUIsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDdkYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUM1QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQjtRQUNkLE1BQU0sUUFBUSxHQUFxQixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWM7UUFDWixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLENBQUMsRUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWEsQ0FBQyxNQUFjO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsTUFBYyxFQUFFLE9BQWdDO1FBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTdCLGtEQUFrRDtRQUNsRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBQ25DLENBQUM7UUFFRCxxREFBcUQ7UUFDckQsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDL0MsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQUMsUUFBZ0IsRUFBRSxTQUF5QixFQUFFLEtBQWM7UUFDbEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBRUQseUJBQXlCO1FBQ3pCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pFLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsdUJBQXVCO1FBQ3ZCLE1BQU0sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFFOUMseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE1BQWM7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25FLE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXJELDJCQUEyQjtRQUMzQixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQzVELElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEQsNkNBQTZDO1lBQzdDLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUVELGlDQUFpQztZQUNqQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7WUFDakYsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBYztRQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFFaEYsSUFBSSxXQUFXLElBQUksV0FBVyxFQUFFLENBQUM7WUFDL0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEYsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxZQUFZLENBQUMsTUFBYztRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBYztRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsTUFBYztRQUN2QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixJQUFJLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzdCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFFM0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUNwRixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNyQixTQUFTLEVBQUUsSUFBSTtZQUNmLElBQUk7WUFDSixpQkFBaUIsRUFBRSxLQUFLO1NBQ3pCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsTUFBYztRQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1lBQ0osaUJBQWlCLEVBQUUsS0FBSztTQUN6QixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLE1BQWM7UUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsTUFBYztRQUN4QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULE1BQU0sUUFBUSxHQUFxQixFQUFFLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUF1QixFQUFRLEVBQUU7WUFDakQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xCLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLE1BQWM7UUFDeEIsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQTBCLElBQUksQ0FBQztRQUMxQyxPQUFPLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sR0FBRyxNQUFNLElBQUksSUFBSSxDQUFDO1FBQzNCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWSxDQUFDLE1BQWM7UUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsQ0FBQyxNQUFjLEVBQUUsV0FBb0IsRUFBRSxLQUFjO1FBQzNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRSxNQUFNLFlBQVksR0FBRyxhQUFhLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU3RCx3Q0FBd0M7UUFDeEMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNwRSxJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFELGtCQUFrQjtRQUNsQixJQUFJLFdBQTZCLENBQUM7UUFDbEMsSUFBSSxTQUFxQyxDQUFDO1FBRTFDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNmLHVDQUF1QztnQkFDdkMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNoRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCx1QkFBdUI7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlELHNDQUFzQztnQkFDdEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNoRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixTQUFTLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUMxQixDQUFDO1lBQ0QsV0FBVyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDbkMsQ0FBQzthQUFNLENBQUM7WUFDTixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFFL0cseUJBQXlCO1FBQ3pCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxDQUFDO1lBQ04sV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsdUJBQXVCO1FBQ3ZCLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsYUFBYSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxTQUFTLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUMxRCxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLHlCQUF5QjtRQUN0RCxDQUFDO1FBRUQsbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4RixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCxnQkFBZ0I7UUFDZCxNQUFNLFFBQVEsR0FBcUIsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBdUIsRUFBUSxFQUFFO1lBQ2pELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QixDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2QixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCO1FBQ2YsTUFBTSxTQUFTLEdBQXFCLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQXVCLEVBQVEsRUFBRTtZQUNqRCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO29CQUNwRSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QixDQUFDO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxNQUFjO1FBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxNQUFjO1FBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFDLElBQW9CLEVBQUUsS0FBSyxHQUFHLENBQUM7UUFDaEQsT0FBTztZQUNMLFNBQVMsRUFBRSxJQUFJO1lBQ2YsSUFBSTtZQUNKLEtBQUs7WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLO1lBQ2hDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUM7WUFDL0QsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSztTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CLENBQUMsS0FBYTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLFdBQVcsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxPQUFPLEtBQUssR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQixDQUFDLElBQW9CO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDM0csQ0FBQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxDQUFDLElBQXFCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLE1BQWM7UUFDMUIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssTUFBTSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLEtBQWE7UUFDNUIsT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQixDQUFDLElBQW9CO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILG1CQUFtQixDQUFDLElBQW9CO1FBQ3RDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDMUMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDJEQUEyRDtJQUMzRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxJQUFvQixFQUFFLEtBQVk7UUFDNUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9CLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRS9DLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBb0IsRUFBRSxLQUFZO1FBQ2pELElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxlQUFlLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkUsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUVoRixJQUFJLFdBQVcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUMvQixNQUFNLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFbEMsSUFBSSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUM7WUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLElBQW9CLEVBQUUsS0FBMEI7UUFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7WUFBRSxPQUFPO1FBRXJDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUMvQixJQUFJLElBQUksS0FBSyxVQUFVO1lBQUUsT0FBTztRQUVoQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzNELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1lBQ0osaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtTQUMzQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsS0FBNkIsRUFBRSxVQUEyQjtRQUMvRCxNQUFNLFdBQVcsR0FBRyxVQUFVLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsaUJBQWlCLEtBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUVqRSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxLQUE2QixFQUFFLFVBQTBCO1FBQ3RFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQUUsT0FBTztRQUVwQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBRXpCLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztZQUFFLE9BQU87UUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUFFLE9BQU87UUFFbkcsVUFBVSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUM7UUFDM0IsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBRTNCLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFakgsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxLQUFpQjtRQUMzQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbEUsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2Qsd0RBQXdEO29CQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQzNFLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7d0JBQ2pELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ2hDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixrREFBa0Q7d0JBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDMUMsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sdUNBQXVDO29CQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUksQ0FBRSxLQUFLLENBQUMsYUFBNkIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGFBQXFCLENBQUMsRUFBRSxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdDLElBQUksWUFBWSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxRyxJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoRSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNqRyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksZ0JBQWdCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDMUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsQ0FBQztZQUNELElBQ0UsZ0JBQWdCLENBQUMsV0FBVyxLQUFLLElBQUk7Z0JBQ3JDLGdCQUFnQixDQUFDLFdBQVcsSUFBSSxDQUFDO2dCQUNqQyxnQkFBZ0IsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFDOUMsQ0FBQztnQkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckUsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsNERBQTREO0lBQzVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUEwQjtRQUNwRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUN4QixNQUFNLFNBQVMsR0FBRyxNQUFNLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFvQjtRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXJELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUYsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxPQUFPLEVBQUUsS0FBSyxVQUFVO1lBQUUsT0FBTztRQUVyQyxJQUFJLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUVwQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sUUFBUSxHQUFHLE1BQU0sWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDbkUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLENBQUM7UUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDekIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN2QixPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFlBQVk7UUFDbEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLDJFQUEyRTtRQUMzRSx5RkFBeUY7UUFDekYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7WUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdkMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1lBQ3hDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssd0JBQXdCLENBQUMsS0FBdUI7UUFDdEQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLDBDQUEwQztnQkFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNuQyxzQ0FBc0M7Z0JBQ3RDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0MsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUIsQ0FBQyxJQUFvQixFQUFFLEtBQVk7UUFDOUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1lBQ0osV0FBVyxFQUFFLEtBQUs7WUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx1QkFBdUIsQ0FBQyxJQUFvQixFQUFFLEtBQVk7UUFDaEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1lBQ0osV0FBVyxFQUFFLEtBQUs7WUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxNQUFjO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsTUFBYztRQUN2QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDckIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxZQUFZLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssVUFBVTtRQUNoQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLE1BQU0sQ0FBQztJQUM3QyxDQUFDO0lBRUQ7a0RBQzhDO0lBQ3RDLGFBQWEsQ0FDbkIsS0FBNkIsRUFDN0IsV0FBNkIsRUFDN0IsVUFBMkI7UUFFM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBRS9CLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkQsZUFBZSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV0RSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVLENBQUMsS0FBNkIsRUFBRSxXQUE2QixFQUFFLFVBQTJCO1FBQzFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQUUsT0FBTztRQUVwQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPO1FBRXpCLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbkQsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUM7WUFBRSxPQUFPO1FBRXJGLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM1RyxPQUFPO1FBQ1QsQ0FBQztRQUVELGlCQUFpQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckYsSUFBSSxDQUFDLGNBQWMsQ0FDakIsU0FBUyxFQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsRUFDckMsVUFBVSxFQUNWLEtBQUssQ0FBQyxhQUFhLEVBQ25CLEtBQUssQ0FBQyxZQUFZLEVBQ2xCLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CLENBQ3pCLFNBQXlCLEVBQ3pCLFlBQW9CLEVBQ3BCLGFBQXlDLEVBQ3pDLGFBQXFCLEVBQ3JCLFlBQW9CO1FBRXBCLE1BQU0sZUFBZSxHQUE4QjtZQUNqRCxTQUFTLEVBQUUsSUFBSTtZQUNmLFNBQVM7WUFDVCxjQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQztZQUNyRCxhQUFhO1lBQ2IsYUFBYTtZQUNiLFlBQVk7WUFDWixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFeEMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUNwQixJQUFvQixFQUNwQixjQUEwQyxFQUMxQyxhQUF5QyxFQUN6QyxhQUFxQixFQUNyQixZQUFvQixFQUNwQixTQUFrQjtRQUVsQixNQUFNLFNBQVMsR0FBd0I7WUFDckMsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1lBQ0osY0FBYztZQUNkLGFBQWE7WUFDYixhQUFhO1lBQ2IsWUFBWTtTQUNiLENBQUM7UUFFRixJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhLENBQUMsTUFBYztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBYyx1QkFBdUIsTUFBTSxJQUFJLENBQUMsQ0FBQztZQUN2RixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDbkUsQ0FBQztRQUNILENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQixDQUN6QixLQUFvQixFQUNwQixRQUE4QixFQUM5QixZQUFvQixFQUNwQixjQUFxQztRQUVyQyxJQUFJLFdBQVcsR0FBa0IsWUFBWSxDQUFDO1FBQzlDLElBQUksb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztRQUVuQixRQUFRLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsQixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLFdBQVcsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2dCQUMvQixDQUFDO2dCQUNELE1BQU07WUFFUixLQUFLLFdBQVc7Z0JBQ2QsSUFBSSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdkMsV0FBVyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7cUJBQU0sSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsV0FBVyxHQUFHLENBQUMsQ0FBQztnQkFDbEIsQ0FBQztxQkFBTSxDQUFDO29CQUNOLG9CQUFvQixHQUFHLEtBQUssQ0FBQztnQkFDL0IsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxXQUFXO2dCQUNkLElBQUksY0FBYyxFQUFFLENBQUM7b0JBQ25CLElBQUksY0FBYyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQzt3QkFDM0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQzFFLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQzNDLElBQUksV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzRCQUN4QixXQUFXLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDckYsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLG9CQUFvQixHQUFHLEtBQUssQ0FBQzt3QkFDL0IsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssWUFBWTtnQkFDZixJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQzt3QkFDNUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQ3ZDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7b0JBQzFFLENBQUM7eUJBQU0sSUFDTCxjQUFjLENBQUMsUUFBUTt3QkFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO3dCQUM1QyxjQUFjLENBQUMsUUFBUSxFQUN2QixDQUFDO3dCQUNELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUM7d0JBQ3pDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDeEIsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUMvQixXQUFXLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzRCQUMzRSxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dDQUN2QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dDQUN6RSxXQUFXLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dDQUNsRixJQUFJLFdBQVcsSUFBSSxDQUFDLElBQUksV0FBVyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQ0FDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29DQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO2dDQUMxRSxDQUFDOzRCQUNILENBQUM7d0JBQ0gsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLG9CQUFvQixHQUFHLEtBQUssQ0FBQzt3QkFDL0IsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sb0JBQW9CLEdBQUcsS0FBSyxDQUFDO29CQUMvQixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsTUFBTTtZQUVSLEtBQUssTUFBTTtnQkFDVCxXQUFXLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixNQUFNO1lBRVIsS0FBSyxLQUFLO2dCQUNSLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDbEMsTUFBTTtZQUVSLEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxPQUFPO2dCQUNWLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsdUJBQXVCLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNwRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMxRSxDQUFDO2dCQUNELG9CQUFvQixHQUFHLEtBQUssQ0FBQztnQkFDN0IsTUFBTTtZQUVSLEtBQUssT0FBTztnQkFDVixJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQzFFLENBQUM7Z0JBQ0Qsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2dCQUM3QixNQUFNO1lBRVI7Z0JBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQzlELElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxVQUFVLEVBQUUsQ0FBQzt3QkFDdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO3dCQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO29CQUMxRSxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDaEIsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2dCQUM3QixNQUFNO1FBQ1YsQ0FBQztRQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssdUJBQXVCLENBQUMsSUFBb0IsRUFBRSxLQUFvQjtRQUN4RSxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNyQixTQUFTLEVBQUUsSUFBSTtZQUNmLElBQUk7WUFDSixXQUFXLEVBQUUsS0FBSztZQUNsQixpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QixDQUFDLElBQW9CLEVBQUUsS0FBb0I7UUFDeEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFFM0IsSUFBSSxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDeEIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUNwRixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUNyQixTQUFTLEVBQUUsSUFBSTtZQUNmLElBQUk7WUFDSixXQUFXLEVBQUUsS0FBSztZQUNsQixpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QixDQUFDLElBQW9CLEVBQUUsS0FBb0I7UUFDekUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsU0FBUyxFQUFFLElBQUk7WUFDZixJQUFJO1lBQ0osV0FBVyxFQUFFLEtBQUs7WUFDbEIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxPQUFPLENBQUMsS0FBYztRQUM1QixPQUFPLEtBQUssWUFBWSxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssV0FBVyxDQUFDLE9BQWUsRUFBRSxLQUFjO1FBQ2pELElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7OEdBaDhDVSxtQkFBbUI7a0dBQW5CLG1CQUFtQixza0dBOUJuQixDQUFDLGlCQUFpQixDQUFDLDBCQ3pEaEMsNnpTQTROQSx5NEtEaktJLFlBQVkscU1BQ1osV0FBVywrVkFDWCxlQUFlLHFVQUNmLHFCQUFxQiwyREFDckIsbUJBQW1CLG9NQUNuQixvQkFBb0IsMERBRXBCLGlCQUFpQiwyVUFDakIsbUJBQW1CLHNPQUNuQixnQkFBZ0Isd0ZBQ2hCLHdCQUF3Qjs7MkZBa0JmLG1CQUFtQjtrQkFwQy9CLFNBQVM7K0JBQ0UsY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCLENBQUMsaUJBQWlCLENBQUMsV0FDckI7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGVBQWU7d0JBQ2YscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQix3QkFBd0I7cUJBQ3pCLFFBQ0s7d0JBQ0osS0FBSyxFQUFFLGNBQWM7d0JBQ3JCLDhCQUE4QixFQUFFLHNCQUFzQjt3QkFDdEQsMkJBQTJCLEVBQUUsbUJBQW1CO3dCQUNoRCxnQ0FBZ0MsRUFBRSx3QkFBd0I7d0JBQzFELDBCQUEwQixFQUFFLE9BQU87d0JBQ25DLG9DQUFvQyxFQUFFLHFCQUFxQjt3QkFDM0Qsb0NBQW9DLEVBQUUsMkJBQTJCO3dCQUNqRSxJQUFJLEVBQUUsTUFBTTt3QkFDWixtQkFBbUIsRUFBRSxtQkFBbUI7d0JBQ3hDLFdBQVcsRUFBRSx1QkFBdUI7d0JBQ3BDLFNBQVMsRUFBRSxxQkFBcUI7d0JBQ2hDLFFBQVEsRUFBRSxvQkFBb0I7d0JBQzlCLFFBQVEsRUFBRSxHQUFHO3FCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhWYWx1ZUNoYW5nZWRFdmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQge1xuICBBWERyYWdEaXJlY3RpdmUsXG4gIEFYRHJhZ0hhbmRsZURpcmVjdGl2ZSxcbiAgQVhEcm9wTGlzdERpcmVjdGl2ZSxcbiAgQVhEcm9wTGlzdERyb3BwZWRFdmVudCxcbiAgbW92ZUl0ZW1JbkFycmF5LFxuICB0cmFuc2ZlckFycmF5SXRlbSxcbn0gZnJvbSAnQGFjb3JleC9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEFYRm9jdXNUcmFwRGlyZWN0aXZlIH0gZnJvbSAnQGFjb3JleC9jZGsvZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyBBWEJhZGdlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7IEFYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWENoZWNrQm94Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NoZWNrLWJveCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBhZnRlck5leHRSZW5kZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBEZXN0cm95UmVmLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQVhUcmVlVmlld1NlcnZpY2UgfSBmcm9tICcuL3RyZWUtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFYVHJlZVZpZXdCZWZvcmVEcm9wRXZlbnQsXG4gIEFYVHJlZVZpZXdDYWxsYmFjayxcbiAgQVhUcmVlVmlld0RhdGFTb3VyY2UsXG4gIEFYVHJlZVZpZXdEcmFnTW9kZSxcbiAgQVhUcmVlVmlld0RyYWdPcGVyYXRpb25UeXBlLFxuICBBWFRyZWVWaWV3RHJvcEV2ZW50LFxuICBBWFRyZWVWaWV3RmxhdE5vZGUsXG4gIEFYVHJlZVZpZXdJdGVtVGVtcGxhdGVDb250ZXh0LFxuICBBWFRyZWVWaWV3Tm9kZSxcbiAgQVhUcmVlVmlld05vZGVTZWxlY3RFdmVudCxcbiAgQVhUcmVlVmlld05vZGVUb2dnbGVFdmVudCxcbiAgQVhUcmVlVmlld1NlbGVjdE1vZGUsXG4gIEFYVHJlZVZpZXdWaWV3TG9vayxcbn0gZnJvbSAnLi90cmVlLXZpZXcudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC10cmVlLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdHJlZS12aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtBWFRyZWVWaWV3U2VydmljZV0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQVhEcmFnRGlyZWN0aXZlLFxuICAgIEFYRHJhZ0hhbmRsZURpcmVjdGl2ZSxcbiAgICBBWERyb3BMaXN0RGlyZWN0aXZlLFxuICAgIEFYRm9jdXNUcmFwRGlyZWN0aXZlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgQVhCdXR0b25Db21wb25lbnQsXG4gICAgQVhDaGVja0JveENvbXBvbmVudCxcbiAgICBBWEJhZGdlQ29tcG9uZW50LFxuICAgIEFYRGVjb3JhdG9ySWNvbkNvbXBvbmVudCxcbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYXgtdHJlZS12aWV3JyxcbiAgICAnW2NsYXNzLmF4LXRyZWUtdmlldy1kZWZhdWx0XSc6IFwibG9vaygpID09PSAnZGVmYXVsdCdcIixcbiAgICAnW2NsYXNzLmF4LXRyZWUtdmlldy1jYXJkXSc6IFwibG9vaygpID09PSAnY2FyZCdcIixcbiAgICAnW2NsYXNzLmF4LXRyZWUtdmlldy13aXRoLWxpbmVdJzogXCJsb29rKCkgPT09ICd3aXRoLWxpbmUnXCIsXG4gICAgJ1tjbGFzcy5heC10cmVlLXZpZXctcnRsXSc6ICdpc1J0bCcsXG4gICAgJ1tzdHlsZS4tLWF4LXRyZWUtdmlldy1pbmRlbnQtc2l6ZV0nOiBcImluZGVudFNpemUoKSArICdweCdcIixcbiAgICAnW3N0eWxlLi0tYXgtdHJlZS12aWV3LWxpbmUtb2Zmc2V0XSc6IFwiKGluZGVudFNpemUoKSAvIDIpICsgJ3B4J1wiLFxuICAgIHJvbGU6ICd0cmVlJyxcbiAgICAnW2F0dHIuYXJpYS1sYWJlbF0nOiAnXCJUcmVlIG5hdmlnYXRpb25cIicsXG4gICAgJyhrZXlkb3duKSc6ICdoYW5kbGVLZXlEb3duKCRldmVudCknLFxuICAgICcoZm9jdXMpJzogJ29uVHJlZUZvY3VzKCRldmVudCknLFxuICAgICcoYmx1ciknOiAnb25UcmVlQmx1cigkZXZlbnQpJyxcbiAgICB0YWJpbmRleDogJzAnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBBWFRyZWVWaWV3Q29tcG9uZW50IHtcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gRGVwZW5kZW5jaWVzID09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2UgPSBpbmplY3QoQVhUcmVlVmlld1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtU2VydmljZSA9IGluamVjdChBWFBsYXRmb3JtKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IElucHV0cyA9PT09PT09PT09PT09PT09PT09PVxuICAvKiogVHJlZSBkYXRhIHNvdXJjZSAtIGNhbiBiZSBzdGF0aWMgYXJyYXkgb3IgbGF6eSBsb2FkaW5nIGZ1bmN0aW9uICovXG4gIHJlYWRvbmx5IGRhdGFzb3VyY2UgPSBtb2RlbC5yZXF1aXJlZDxBWFRyZWVWaWV3RGF0YVNvdXJjZT4oKTtcblxuICAvKiogU2VsZWN0aW9uIG1vZGU6ICdzaW5nbGUnIChjbGljayB0byBzZWxlY3QpIG9yICdtdWx0aXBsZScgKGNoZWNrYm94IHNlbGVjdGlvbikgKi9cbiAgcmVhZG9ubHkgc2VsZWN0TW9kZSA9IGlucHV0PEFYVHJlZVZpZXdTZWxlY3RNb2RlPignbXVsdGlwbGUnKTtcblxuICAvKiogV2hldGhlciB0byBzaG93IGNoZWNrYm94ZXMgZm9yIHNlbGVjdGlvbiAob25seSBhcHBsaWVzIHRvIG11bHRpcGxlIG1vZGUpICovXG4gIHJlYWRvbmx5IHNob3dDaGVja2JveCA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBXaGVuIHRydWUsIHNlbGVjdGluZyBhIHBhcmVudCBhbHNvIHNlbGVjdHMgYWxsIGxvYWRlZCBjaGlsZHJlbiAob25seSBmb3IgbXVsdGlwbGUgbW9kZSkgKi9cbiAgcmVhZG9ubHkgY2hlY2tDaGlsZHJlbk9uU2VsZWN0ID0gaW5wdXQodHJ1ZSk7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgc2VsZWN0aW5nIGEgY2hpbGQgbWFrZXMgcGFyZW50cyBpbmRldGVybWluYXRlIChvbmx5IGZvciBtdWx0aXBsZSBtb2RlKSAqL1xuICByZWFkb25seSBpbnRlcm1lZGlhdGVTdGF0ZSA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBXaGVuIHRydWUsIGNsaWNraW5nIG9uIGEgbm9kZSB0b2dnbGVzIGl0cyBzZWxlY3Rpb24gKHdvcmtzIGZvciBib3RoIHNpbmdsZSBhbmQgbXVsdGlwbGUgbW9kZXMpICovXG4gIHJlYWRvbmx5IGNoZWNrT25DbGljayA9IGlucHV0KGZhbHNlKTtcblxuICAvKiogRHJhZyBhbmQgZHJvcCBtb2RlOiAnbm9uZScgKGRpc2FibGVkKSwgJ2hhbmRsZXInIChkcmFnIGhhbmRsZSksICdpdGVtJyAoZW50aXJlIGl0ZW0pICovXG4gIHJlYWRvbmx5IGRyYWdNb2RlID0gaW5wdXQ8QVhUcmVlVmlld0RyYWdNb2RlPignaGFuZGxlcicpO1xuXG4gIC8qKiBEcmFnIG9wZXJhdGlvbiB0eXBlOiAnb3JkZXItb25seScgKHJlb3JkZXIgb25seSksICdtb3ZlJyAobW92ZSBiZXR3ZWVuIHBhcmVudHMpLCAnYm90aCcgKGFsbG93IGJvdGgpICovXG4gIHJlYWRvbmx5IGRyYWdPcGVyYXRpb25UeXBlID0gaW5wdXQ8QVhUcmVlVmlld0RyYWdPcGVyYXRpb25UeXBlPignYm90aCcpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgaWNvbnMgKi9cbiAgcmVhZG9ubHkgc2hvd0ljb25zID0gaW5wdXQodHJ1ZSk7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBjaGlsZHJlbiBjb3VudCBiYWRnZSAqL1xuICByZWFkb25seSBzaG93Q2hpbGRyZW5CYWRnZSA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBDdXN0b20gaWNvbiBmb3IgZXhwYW5kZWQgbm9kZXMgKi9cbiAgcmVhZG9ubHkgZXhwYW5kZWRJY29uID0gaW5wdXQoJ2ZhLXNvbGlkIGZhLWNoZXZyb24tZG93bicpO1xuXG4gIC8qKiBDdXN0b20gaWNvbiBmb3IgY29sbGFwc2VkIG5vZGVzICovXG4gIHJlYWRvbmx5IGNvbGxhcHNlZEljb24gPSBpbnB1dCgnZmEtc29saWQgZmEtY2hldnJvbi1yaWdodCcpO1xuXG4gIC8qKiBJbmRlbnQgc2l6ZSBpbiBwaXhlbHMgZm9yIGVhY2ggbGV2ZWwgKi9cbiAgcmVhZG9ubHkgaW5kZW50U2l6ZSA9IGlucHV0KDEyKTtcblxuICAvKiogTm9kZSBoZWlnaHQgaW4gcGl4ZWxzICovXG4gIHJlYWRvbmx5IG5vZGVIZWlnaHQgPSBpbnB1dDwnY29tcGFjdCcgfCAnbm9ybWFsJyB8ICdjb21mb3J0YWJsZSc+KCdub3JtYWwnKTtcblxuICAvKiogVmlzdWFsIHN0eWxlIHZhcmlhbnQgKi9cbiAgcmVhZG9ubHkgbG9vayA9IGlucHV0PEFYVHJlZVZpZXdWaWV3TG9vaz4oJ2RlZmF1bHQnKTtcblxuICAvKiogQ3VzdG9tIHRlbXBsYXRlIGZvciB0cmVlIGl0ZW1zICovXG4gIHJlYWRvbmx5IGl0ZW1UZW1wbGF0ZSA9IGlucHV0PFRlbXBsYXRlUmVmPEFYVHJlZVZpZXdJdGVtVGVtcGxhdGVDb250ZXh0Pj4oKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBPdXRwdXRzID09PT09PT09PT09PT09PT09PT09XG4gIC8qKiBFbWl0dGVkIGJlZm9yZSBhIGRyb3Agb3BlcmF0aW9uIC0gc2V0IGNhbmNlbGVkIHRvIHRydWUgdG8gcHJldmVudCBkcm9wICovXG4gIHJlYWRvbmx5IG9uQmVmb3JlRHJvcCA9IG91dHB1dDxBWFRyZWVWaWV3QmVmb3JlRHJvcEV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBub2RlIGlzIHRvZ2dsZWQgKGV4cGFuZGVkL2NvbGxhcHNlZCkgKi9cbiAgcmVhZG9ubHkgb25Ob2RlVG9nZ2xlID0gb3V0cHV0PEFYVHJlZVZpZXdOb2RlVG9nZ2xlRXZlbnQ+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIG5vZGUgaXMgc2VsZWN0ZWQvZGVzZWxlY3RlZCAqL1xuICByZWFkb25seSBvbk5vZGVTZWxlY3QgPSBvdXRwdXQ8QVhUcmVlVmlld05vZGVTZWxlY3RFdmVudD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIG5vZGVzIGFyZSByZW9yZGVyZWQgd2l0aGluIHRoZSBzYW1lIHBhcmVudCAqL1xuICByZWFkb25seSBvbk9yZGVyQ2hhbmdlID0gb3V0cHV0PEFYVHJlZVZpZXdEcm9wRXZlbnQ+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIG5vZGUgaXMgbW92ZWQgdG8gYSBkaWZmZXJlbnQgcGFyZW50ICovXG4gIHJlYWRvbmx5IG9uTW92ZUNoYW5nZSA9IG91dHB1dDxBWFRyZWVWaWV3RHJvcEV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIGZvciBhbnkgaXRlbSBjaGFuZ2UgKG9yZGVyIG9yIG1vdmUpICovXG4gIHJlYWRvbmx5IG9uSXRlbXNDaGFuZ2UgPSBvdXRwdXQ8QVhUcmVlVmlld0Ryb3BFdmVudD4oKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBJbnRlcm5hbCBTdGF0ZSA9PT09PT09PT09PT09PT09PT09PVxuICAvKiogSW50ZXJuYWwgc2lnbmFsIGZvciB0cmVlIG5vZGVzICovXG4gIHByb3RlY3RlZCByZWFkb25seSBub2RlcyA9IHNpZ25hbDxBWFRyZWVWaWV3Tm9kZVtdPihbXSk7XG5cbiAgLyoqIEludGVybmFsIHNpZ25hbCBmb3IgdHJhY2tpbmcgbG9hZGluZyBzdGF0ZSAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9hZGluZ05vZGVzID0gc2lnbmFsPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuXG4gIC8qKiBDdXJyZW50bHkgZm9jdXNlZCBub2RlIElEIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uICovXG4gIHByb3RlY3RlZCByZWFkb25seSBmb2N1c2VkTm9kZUlkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8qKiBSVEwgZGV0ZWN0aW9uIHNpZ25hbCAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNSdGwgPSBzaWduYWwodGhpcy5wbGF0Zm9ybVNlcnZpY2UuaXNSdGwoKSk7XG5cbiAgLyoqIENvbXB1dGVkIGNoZXZyb24gaWNvbnMgdGhhdCBmbGlwIGZvciBSVEwgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRpcmVjdGlvbkV4cGFuZGVkSWNvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZXhwYW5kZWRJY29uKCkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkaXJlY3Rpb25Db2xsYXBzZWRJY29uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGlzUnRsRGlyZWN0aW9uID0gdGhpcy5pc1J0bCgpO1xuICAgIGNvbnN0IGRlZmF1bHRJY29uID0gdGhpcy5jb2xsYXBzZWRJY29uKCk7XG5cbiAgICBpZiAoaXNSdGxEaXJlY3Rpb24gJiYgZGVmYXVsdEljb24gPT09ICdmYS1zb2xpZCBmYS1jaGV2cm9uLXJpZ2h0Jykge1xuICAgICAgcmV0dXJuICdmYS1zb2xpZCBmYS1jaGV2cm9uLWxlZnQnO1xuICAgIH1cbiAgICBpZiAoIWlzUnRsRGlyZWN0aW9uICYmIGRlZmF1bHRJY29uID09PSAnZmEtc29saWQgZmEtY2hldnJvbi1sZWZ0Jykge1xuICAgICAgcmV0dXJuICdmYS1zb2xpZCBmYS1jaGV2cm9uLXJpZ2h0JztcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRJY29uO1xuICB9KTtcblxuICAvKiogRmxhZyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIHdoZW4gc3luY2luZyBkYXRhc291cmNlICovXG4gIHByaXZhdGUgaXNVcGRhdGluZ0Zyb21EYXRhc291cmNlID0gZmFsc2U7XG5cbiAgLyoqIENvbXB1dGVkIHRvIGNoZWNrIGlmIGRhdGFzb3VyY2UgaXMgYSBmdW5jdGlvbiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGlzTGF6eURhdGFTb3VyY2UgPSBjb21wdXRlZCgoKSA9PiB0eXBlb2YgdGhpcy5kYXRhc291cmNlKCkgPT09ICdmdW5jdGlvbicpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IEVmZmVjdHMgPT09PT09PT09PT09PT09PT09PT1cbiAgLyoqIEVmZmVjdCB0byBoYW5kbGUgZGF0YXNvdXJjZSBjaGFuZ2VzICovXG4gIHJlYWRvbmx5ICNkYXRhc291cmNlRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGhpcy5pc1VwZGF0aW5nRnJvbURhdGFzb3VyY2UpIHJldHVybjtcblxuICAgIGNvbnN0IGRzID0gdGhpcy5kYXRhc291cmNlKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZHMpKSB7XG4gICAgICB0aGlzLm5vZGVzLnNldChbLi4uZHNdKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5sb2FkUm9vdEl0ZW1zKGRzKS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcignRmFpbGVkIHRvIGxvYWQgcm9vdCBpdGVtcycsIGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqIEluaXRpYWxpemUgZGlyZWN0aW9uIGNoYW5nZSBsaXN0ZW5lciAqL1xuICByZWFkb25seSAjaW5pdERpcmVjdGlvbkxpc3RlbmVyID0gYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICB0aGlzLnBsYXRmb3JtU2VydmljZS5kaXJlY3Rpb25DaGFuZ2VcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGV2ZW50KSA9PiBldmVudC5kYXRhID09PSAncnRsJyksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoaXNSdGwpID0+IHRoaXMuaXNSdGwuc2V0KGlzUnRsKSk7XG4gIH0pO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IFB1YmxpYyBBUEkgPT09PT09PT09PT09PT09PT09PT1cbiAgLyoqXG4gICAqIEV4cGFuZCBhbGwgbm9kZXMgaW4gdGhlIHRyZWUgKHdpdGggbGF6eSBsb2FkaW5nIHN1cHBvcnQpXG4gICAqL1xuICBhc3luYyBleHBhbmRBbGwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy50cmVlU2VydmljZS5zZXRFeHBhbmRlZFN0YXRlKHRoaXMubm9kZXMoKSwgdHJ1ZSwgdGhpcy5pc0xhenlEYXRhU291cmNlKCksIChub2RlKSA9PlxuICAgICAgdGhpcy5sb2FkTm9kZUNoaWxkcmVuKG5vZGUpLFxuICAgICk7XG4gICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsYXBzZSBhbGwgbm9kZXMgaW4gdGhlIHRyZWVcbiAgICovXG4gIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMudHJlZVNlcnZpY2Uuc2V0RXhwYW5kZWRTdGF0ZSh0aGlzLm5vZGVzKCksIGZhbHNlLCB0aGlzLmlzTGF6eURhdGFTb3VyY2UoKSwgKG5vZGUpID0+XG4gICAgICB0aGlzLmxvYWROb2RlQ2hpbGRyZW4obm9kZSksXG4gICAgKTtcbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb3VudCBvZiBzZWxlY3RlZCBub2Rlc1xuICAgKi9cbiAgZ2V0U2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmNvdW50U2VsZWN0ZWQodGhpcy5ub2RlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbnkgbm9kZXMgYXJlIHNlbGVjdGVkXG4gICAqL1xuICBoYXNTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWRDb3VudCgpID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBnZXRTZWxlY3RlZE5vZGVzKCk6IEFYVHJlZVZpZXdOb2RlW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkOiBBWFRyZWVWaWV3Tm9kZVtdID0gW107XG4gICAgdGhpcy50cmVlU2VydmljZS5jb2xsZWN0U2VsZWN0ZWQodGhpcy5ub2RlcygpLCBzZWxlY3RlZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBzZWxlY3RlZCBub2RlcyBmcm9tIHRoZSB0cmVlXG4gICAqL1xuICBkZWxldGVTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLnJlbW92ZVNlbGVjdGVkKHRoaXMubm9kZXMoKSk7XG4gICAgdGhpcy50cmVlU2VydmljZS51cGRhdGVBbGxQYXJlbnRTdGF0ZXModGhpcy5ub2RlcygpLCB0aGlzLmludGVybWVkaWF0ZVN0YXRlKCkpO1xuICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFsbCBub2RlcyBpbiB0aGUgdHJlZVxuICAgKi9cbiAgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMudHJlZVNlcnZpY2Uuc2V0QWxsU2VsZWN0aW9uKHRoaXMubm9kZXMoKSwgdHJ1ZSk7XG4gICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlbGVjdCBhbGwgbm9kZXMgaW4gdGhlIHRyZWVcbiAgICovXG4gIGRlc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMudHJlZVNlcnZpY2Uuc2V0QWxsU2VsZWN0aW9uKHRoaXMubm9kZXMoKSwgZmFsc2UpO1xuICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIG5vZGUgYnkgSUQgaW4gdGhlIHRyZWVcbiAgICovXG4gIGZpbmROb2RlKGlkOiBzdHJpbmcpOiBBWFRyZWVWaWV3Tm9kZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmZpbmROb2RlQnlJZCh0aGlzLm5vZGVzKCksIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoIHRoZSB0cmVlIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgKi9cbiAgcmVmcmVzaCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbm9kZSBpcyBjdXJyZW50bHkgbG9hZGluZ1xuICAgKi9cbiAgaXNOb2RlTG9hZGluZyhub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdOb2RlcygpLmhhcyhub2RlSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXQvdXBkYXRlIGEgbm9kZSdzIHByb3BlcnRpZXNcbiAgICogQHBhcmFtIG5vZGVJZCAtIFRoZSBJRCBvZiB0aGUgbm9kZSB0byBlZGl0XG4gICAqIEBwYXJhbSB1cGRhdGVzIC0gUGFydGlhbCBub2RlIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgdG8gdXBkYXRlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgbm9kZSB3YXMgZm91bmQgYW5kIHVwZGF0ZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgZWRpdE5vZGUobm9kZUlkOiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8QVhUcmVlVmlld05vZGU+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZE5vZGUobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbm9kZSBwcm9wZXJ0aWVzXG4gICAgT2JqZWN0LmFzc2lnbihub2RlLCB1cGRhdGVzKTtcblxuICAgIC8vIElmIGNoaWxkcmVuIGFycmF5IGlzIHByb3ZpZGVkLCBlbnN1cmUgaXQgZXhpc3RzXG4gICAgaWYgKHVwZGF0ZXMuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9kZS5jaGlsZHJlbiA9IHVwZGF0ZXMuY2hpbGRyZW47XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNoaWxkcmVuQ291bnQgaWYgY2hpbGRyZW4gYXJyYXkgaXMgcHJvdmlkZWRcbiAgICBpZiAodXBkYXRlcy5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBub2RlLmNoaWxkcmVuQ291bnQgPSB1cGRhdGVzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNoaWxkIG5vZGUgdG8gYSBwYXJlbnQgbm9kZVxuICAgKiBAcGFyYW0gcGFyZW50SWQgLSBUaGUgSUQgb2YgdGhlIHBhcmVudCBub2RlXG4gICAqIEBwYXJhbSBjaGlsZE5vZGUgLSBUaGUgY2hpbGQgbm9kZSB0byBhZGRcbiAgICogQHBhcmFtIGluZGV4IC0gT3B0aW9uYWwgaW5kZXggdG8gaW5zZXJ0IGF0IChkZWZhdWx0OiBhcHBlbmQgdG8gZW5kKVxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHBhcmVudCB3YXMgZm91bmQgYW5kIGNoaWxkIHdhcyBhZGRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhZGRDaGlsZChwYXJlbnRJZDogc3RyaW5nLCBjaGlsZE5vZGU6IEFYVHJlZVZpZXdOb2RlLCBpbmRleD86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZmluZE5vZGUocGFyZW50SWQpO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIGNoaWxkcmVuIGFycmF5IGV4aXN0c1xuICAgIGlmICghcGFyZW50LmNoaWxkcmVuKSB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG5cbiAgICAvLyBJbnNlcnQgb3IgYXBwZW5kIGNoaWxkXG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQgJiYgaW5kZXggPj0gMCAmJiBpbmRleCA8PSBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChjaGlsZE5vZGUpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjaGlsZHJlbkNvdW50XG4gICAgcGFyZW50LmNoaWxkcmVuQ291bnQgPSBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoO1xuXG4gICAgLy8gQXV0by1leHBhbmQgcGFyZW50IGlmIGl0IHdhcyBjb2xsYXBzZWRcbiAgICBpZiAoIXBhcmVudC5leHBhbmRlZCkge1xuICAgICAgcGFyZW50LmV4cGFuZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIG5vZGUgZnJvbSB0aGUgdHJlZVxuICAgKiBAcGFyYW0gbm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlIHRvIHJlbW92ZVxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBub2RlIGlmIGZvdW5kLCBudWxsIG90aGVyd2lzZVxuICAgKi9cbiAgcmVtb3ZlTm9kZShub2RlSWQ6IHN0cmluZyk6IEFYVHJlZVZpZXdOb2RlIHwgbnVsbCB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZE5vZGUobm9kZUlkKTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIEZpbmQgcGFyZW50IHRvIHJlbW92ZSBmcm9tIGl0cyBjaGlsZHJlbiBhcnJheVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMudHJlZVNlcnZpY2UuZmluZFBhcmVudE5vZGUodGhpcy5ub2RlcygpLCBub2RlKTtcbiAgICBjb25zdCB0YXJnZXRBcnJheSA9IHBhcmVudD8uY2hpbGRyZW4gPz8gdGhpcy5ub2RlcygpO1xuXG4gICAgLy8gRmluZCBhbmQgcmVtb3ZlIHRoZSBub2RlXG4gICAgY29uc3QgaW5kZXggPSB0YXJnZXRBcnJheS5maW5kSW5kZXgoKG4pID0+IG4uaWQgPT09IG5vZGVJZCk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgY29uc3QgcmVtb3ZlZCA9IHRhcmdldEFycmF5LnNwbGljZShpbmRleCwgMSlbMF07XG5cbiAgICAgIC8vIFVwZGF0ZSBwYXJlbnQncyBjaGlsZHJlbkNvdW50IGlmIGl0IGV4aXN0c1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBwYXJlbnQuY2hpbGRyZW5Db3VudCA9IHBhcmVudC5jaGlsZHJlbj8ubGVuZ3RoID8/IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBwYXJlbnQgc3RhdGVzIGlmIG5lZWRlZFxuICAgICAgaWYgKHRoaXMuaW50ZXJtZWRpYXRlU3RhdGUoKSkge1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLnVwZGF0ZUFsbFBhcmVudFN0YXRlcyh0aGlzLm5vZGVzKCksIHRoaXMuaW50ZXJtZWRpYXRlU3RhdGUoKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gICAgICByZXR1cm4gcmVtb3ZlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmQgYSBzcGVjaWZpYyBub2RlXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgdG8gZXhwYW5kXG4gICAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGV4cGFuc2lvbiBpcyBjb21wbGV0ZSAoaWYgbGF6eSBsb2FkaW5nKVxuICAgKi9cbiAgYXN5bmMgZXhwYW5kTm9kZShub2RlSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSB0aGlzLnRyZWVTZXJ2aWNlLmhhc0NoaWxkcmVuKG5vZGUpO1xuICAgIGNvbnN0IGNhbkxhenlMb2FkID0gdGhpcy50cmVlU2VydmljZS5jYW5MYXp5TG9hZChub2RlLCB0aGlzLmlzTGF6eURhdGFTb3VyY2UoKSk7XG5cbiAgICBpZiAoaGFzQ2hpbGRyZW4gfHwgY2FuTGF6eUxvYWQpIHtcbiAgICAgIGlmIChjYW5MYXp5TG9hZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWROb2RlQ2hpbGRyZW4obm9kZSk7XG4gICAgICB9XG4gICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gICAgICB0aGlzLm9uTm9kZVRvZ2dsZS5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBub2RlLCBuYXRpdmVFdmVudDogbmV3IEV2ZW50KCdleHBhbmQnKSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2UgYSBzcGVjaWZpYyBub2RlXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgdG8gY29sbGFwc2VcbiAgICovXG4gIGNvbGxhcHNlTm9kZShub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG5vZGUuZXhwYW5kZWQpIHtcbiAgICAgIG5vZGUuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gICAgICB0aGlzLm9uTm9kZVRvZ2dsZS5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBub2RlLCBuYXRpdmVFdmVudDogbmV3IEV2ZW50KCdjb2xsYXBzZScpIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgZXhwYW5zaW9uIHN0YXRlIG9mIGEgc3BlY2lmaWMgbm9kZVxuICAgKiBAcGFyYW0gbm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlIHRvIHRvZ2dsZVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0b2dnbGUgaXMgY29tcGxldGUgKGlmIGxhenkgbG9hZGluZylcbiAgICovXG4gIGFzeW5jIHRvZ2dsZU5vZGVFeHBhbnNpb24obm9kZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZShub2RlSWQpO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlLmV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmNvbGxhcHNlTm9kZShub2RlSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmV4cGFuZE5vZGUobm9kZUlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvZ3JhbW1hdGljYWxseSBzZWxlY3QgYSBub2RlXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgdG8gc2VsZWN0XG4gICAqIEByZXR1cm5zIHRydWUgaWYgbm9kZSB3YXMgZm91bmQgYW5kIHNlbGVjdGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHNlbGVjdE5vZGUobm9kZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZShub2RlSWQpO1xuICAgIGlmICghbm9kZSB8fCBub2RlLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kZSA9IHRoaXMuc2VsZWN0TW9kZSgpO1xuICAgIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgdGhpcy50cmVlU2VydmljZS5kZXNlbGVjdEFsbE5vZGVzKHRoaXMubm9kZXMoKSk7XG4gICAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy5jaGVja0NoaWxkcmVuT25TZWxlY3QoKSAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2Uuc2VsZWN0QWxsQ2hpbGRyZW4obm9kZS5jaGlsZHJlbiwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmludGVybWVkaWF0ZVN0YXRlKCkpIHtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZS51cGRhdGVQYXJlbnRTdGF0ZXModGhpcy5ub2RlcygpLCBub2RlLCB0aGlzLmludGVybWVkaWF0ZVN0YXRlKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gICAgdGhpcy5vbk5vZGVTZWxlY3QuZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBub2RlLFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IGZhbHNlLFxuICAgIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2dyYW1tYXRpY2FsbHkgZGVzZWxlY3QgYSBub2RlXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgdG8gZGVzZWxlY3RcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBub2RlIHdhcyBmb3VuZCBhbmQgZGVzZWxlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBkZXNlbGVjdE5vZGUobm9kZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZShub2RlSWQpO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG5vZGUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmNoZWNrQ2hpbGRyZW5PblNlbGVjdCgpICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMudHJlZVNlcnZpY2Uuc2VsZWN0QWxsQ2hpbGRyZW4obm9kZS5jaGlsZHJlbiwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmludGVybWVkaWF0ZVN0YXRlKCkpIHtcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlUGFyZW50U3RhdGVzKHRoaXMubm9kZXMoKSwgbm9kZSwgdGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbm9kZSxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiBmYWxzZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGFyZW50IG5vZGUgb2YgYSBnaXZlbiBub2RlXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMgVGhlIHBhcmVudCBub2RlIGlmIGZvdW5kLCBudWxsIG90aGVyd2lzZVxuICAgKi9cbiAgZ2V0UGFyZW50KG5vZGVJZDogc3RyaW5nKTogQVhUcmVlVmlld05vZGUgfCBudWxsIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZShub2RlSWQpO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmZpbmRQYXJlbnROb2RlKHRoaXMubm9kZXMoKSwgbm9kZSkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2hpbGRyZW4gb2YgYSBub2RlXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIHBhcmVudCBub2RlXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGNoaWxkIG5vZGVzLCBvciBudWxsIGlmIG5vZGUgbm90IGZvdW5kXG4gICAqL1xuICBnZXRDaGlsZHJlbihub2RlSWQ6IHN0cmluZyk6IEFYVHJlZVZpZXdOb2RlW10gfCBudWxsIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZShub2RlSWQpO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBub2RlLmNoaWxkcmVuID8/IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgcm9vdCBub2Rlc1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiByb290IG5vZGVzXG4gICAqL1xuICBnZXRSb290Tm9kZXMoKTogQVhUcmVlVmlld05vZGVbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLm5vZGVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgbm9kZXMgaW4gYSBmbGF0IGFycmF5XG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGFsbCBub2RlcyBpbiB0aGUgdHJlZVxuICAgKi9cbiAgZ2V0QWxsTm9kZXMoKTogQVhUcmVlVmlld05vZGVbXSB7XG4gICAgY29uc3QgYWxsTm9kZXM6IEFYVHJlZVZpZXdOb2RlW10gPSBbXTtcbiAgICBjb25zdCB0cmF2ZXJzZSA9IChub2RlczogQVhUcmVlVmlld05vZGVbXSk6IHZvaWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgdHJhdmVyc2Uobm9kZS5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRyYXZlcnNlKHRoaXMubm9kZXMoKSk7XG4gICAgcmV0dXJuIGFsbE5vZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcGF0aCB0byBhIG5vZGUgKGFycmF5IG9mIHBhcmVudCBJRHMgZnJvbSByb290IHRvIG5vZGUpXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMgQXJyYXkgb2Ygbm9kZSBJRHMgcmVwcmVzZW50aW5nIHRoZSBwYXRoLCBvciBlbXB0eSBhcnJheSBpZiBub2RlIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0Tm9kZVBhdGgobm9kZUlkOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcGF0aDogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZShub2RlSWQpO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnQ6IEFYVHJlZVZpZXdOb2RlIHwgbnVsbCA9IG5vZGU7XG4gICAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICAgIHBhdGgudW5zaGlmdChjdXJyZW50LmlkKTtcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMudHJlZVNlcnZpY2UuZmluZFBhcmVudE5vZGUodGhpcy5ub2RlcygpLCBjdXJyZW50KTtcbiAgICAgIGN1cnJlbnQgPSBwYXJlbnQgPz8gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxldmVsL2RlcHRoIG9mIGEgbm9kZSAoMCA9IHJvb3QgbGV2ZWwpXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMgVGhlIGxldmVsIG9mIHRoZSBub2RlLCBvciAtMSBpZiBub2RlIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0Tm9kZUxldmVsKG5vZGVJZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5nZXROb2RlUGF0aChub2RlSWQpO1xuICAgIHJldHVybiBwYXRoLmxlbmd0aCA+IDAgPyBwYXRoLmxlbmd0aCAtIDEgOiAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9ncmFtbWF0aWNhbGx5IG1vdmUgYSBub2RlIHRvIGEgbmV3IHBhcmVudFxuICAgKiBAcGFyYW0gbm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlIHRvIG1vdmVcbiAgICogQHBhcmFtIG5ld1BhcmVudElkIC0gVGhlIElEIG9mIHRoZSBuZXcgcGFyZW50ICh1bmRlZmluZWQgZm9yIHJvb3QgbGV2ZWwpXG4gICAqIEBwYXJhbSBpbmRleCAtIE9wdGlvbmFsIGluZGV4IHRvIGluc2VydCBhdCAoZGVmYXVsdDogYXBwZW5kIHRvIGVuZClcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBtb3ZlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIG1vdmVOb2RlKG5vZGVJZDogc3RyaW5nLCBuZXdQYXJlbnRJZD86IHN0cmluZywgaW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZShub2RlSWQpO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEZpbmQgY3VycmVudCBwYXJlbnRcbiAgICBjb25zdCBjdXJyZW50UGFyZW50ID0gdGhpcy50cmVlU2VydmljZS5maW5kUGFyZW50Tm9kZSh0aGlzLm5vZGVzKCksIG5vZGUpO1xuICAgIGNvbnN0IGN1cnJlbnRBcnJheSA9IGN1cnJlbnRQYXJlbnQ/LmNoaWxkcmVuID8/IHRoaXMubm9kZXMoKTtcblxuICAgIC8vIEZpbmQgYW5kIHJlbW92ZSBmcm9tIGN1cnJlbnQgbG9jYXRpb25cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBjdXJyZW50QXJyYXkuZmluZEluZGV4KChuKSA9PiBuLmlkID09PSBub2RlSWQpO1xuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbW92ZWROb2RlID0gY3VycmVudEFycmF5LnNwbGljZShjdXJyZW50SW5kZXgsIDEpWzBdO1xuXG4gICAgLy8gRmluZCBuZXcgcGFyZW50XG4gICAgbGV0IHRhcmdldEFycmF5OiBBWFRyZWVWaWV3Tm9kZVtdO1xuICAgIGxldCBuZXdQYXJlbnQ6IEFYVHJlZVZpZXdOb2RlIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKG5ld1BhcmVudElkKSB7XG4gICAgICBuZXdQYXJlbnQgPSB0aGlzLmZpbmROb2RlKG5ld1BhcmVudElkKTtcbiAgICAgIGlmICghbmV3UGFyZW50KSB7XG4gICAgICAgIC8vIFJlc3RvcmUgbm9kZSBpZiBuZXcgcGFyZW50IG5vdCBmb3VuZFxuICAgICAgICBjdXJyZW50QXJyYXkuc3BsaWNlKGN1cnJlbnRJbmRleCwgMCwgbW92ZWROb2RlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBWYWxpZGF0ZSBkcm9wIHRhcmdldFxuICAgICAgaWYgKCF0aGlzLnRyZWVTZXJ2aWNlLmlzVmFsaWREcm9wVGFyZ2V0KG1vdmVkTm9kZSwgbmV3UGFyZW50KSkge1xuICAgICAgICAvLyBSZXN0b3JlIG5vZGUgaWYgaW52YWxpZCBkcm9wIHRhcmdldFxuICAgICAgICBjdXJyZW50QXJyYXkuc3BsaWNlKGN1cnJlbnRJbmRleCwgMCwgbW92ZWROb2RlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5ld1BhcmVudC5jaGlsZHJlbikge1xuICAgICAgICBuZXdQYXJlbnQuY2hpbGRyZW4gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRhcmdldEFycmF5ID0gbmV3UGFyZW50LmNoaWxkcmVuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRBcnJheSA9IHRoaXMubm9kZXMoKTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgbmV3IGluZGV4IGJlZm9yZSBpbnNlcnRpbmdcbiAgICBjb25zdCBuZXdJbmRleCA9IGluZGV4ICE9PSB1bmRlZmluZWQgJiYgaW5kZXggPj0gMCAmJiBpbmRleCA8PSB0YXJnZXRBcnJheS5sZW5ndGggPyBpbmRleCA6IHRhcmdldEFycmF5Lmxlbmd0aDtcblxuICAgIC8vIEluc2VydCBhdCBuZXcgbG9jYXRpb25cbiAgICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCAmJiBpbmRleCA+PSAwICYmIGluZGV4IDw9IHRhcmdldEFycmF5Lmxlbmd0aCkge1xuICAgICAgdGFyZ2V0QXJyYXkuc3BsaWNlKGluZGV4LCAwLCBtb3ZlZE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRBcnJheS5wdXNoKG1vdmVkTm9kZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGNoaWxkcmVuQ291bnRcbiAgICBpZiAoY3VycmVudFBhcmVudCkge1xuICAgICAgY3VycmVudFBhcmVudC5jaGlsZHJlbkNvdW50ID0gY3VycmVudFBhcmVudC5jaGlsZHJlbj8ubGVuZ3RoID8/IDA7XG4gICAgfVxuICAgIGlmIChuZXdQYXJlbnQpIHtcbiAgICAgIG5ld1BhcmVudC5jaGlsZHJlbkNvdW50ID0gbmV3UGFyZW50LmNoaWxkcmVuPy5sZW5ndGggPz8gMDtcbiAgICAgIG5ld1BhcmVudC5leHBhbmRlZCA9IHRydWU7IC8vIEF1dG8tZXhwYW5kIG5ldyBwYXJlbnRcbiAgICB9XG5cbiAgICAvLyBFbWl0IGRyb3AgZXZlbnRzXG4gICAgdGhpcy5lbWl0RHJvcEV2ZW50cyhtb3ZlZE5vZGUsIGN1cnJlbnRQYXJlbnQsIG5ld1BhcmVudCwgY3VycmVudEluZGV4LCBuZXdJbmRleCwgZmFsc2UpO1xuXG4gICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9uZSBhIG5vZGUgKGNyZWF0ZXMgYSBkZWVwIGNvcHkpXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgdG8gY2xvbmVcbiAgICogQHJldHVybnMgVGhlIGNsb25lZCBub2RlLCBvciBudWxsIGlmIG5vZGUgbm90IGZvdW5kXG4gICAqL1xuICBjbG9uZU5vZGUobm9kZUlkOiBzdHJpbmcpOiBBWFRyZWVWaWV3Tm9kZSB8IG51bGwge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlKG5vZGVJZCk7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5jbG9uZU5vZGUobm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgYSBzcGVjaWZpYyBub2RlIGJ5IElEXG4gICAqIEBwYXJhbSBub2RlSWQgLSBUaGUgSUQgb2YgdGhlIG5vZGUgdG8gZm9jdXNcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBub2RlIHdhcyBmb3VuZCBhbmQgZm9jdXNlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBmb2N1c05vZGUobm9kZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZShub2RlSWQpO1xuICAgIGlmICghbm9kZSB8fCBub2RlLnZpc2libGUgPT09IGZhbHNlIHx8IG5vZGUuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5mb2N1c05vZGVCeUlkKG5vZGVJZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBleHBhbmRlZCBub2Rlc1xuICAgKiBAcmV0dXJucyBBcnJheSBvZiBleHBhbmRlZCBub2Rlc1xuICAgKi9cbiAgZ2V0RXhwYW5kZWROb2RlcygpOiBBWFRyZWVWaWV3Tm9kZVtdIHtcbiAgICBjb25zdCBleHBhbmRlZDogQVhUcmVlVmlld05vZGVbXSA9IFtdO1xuICAgIGNvbnN0IHRyYXZlcnNlID0gKG5vZGVzOiBBWFRyZWVWaWV3Tm9kZVtdKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgaWYgKG5vZGUuZXhwYW5kZWQpIHtcbiAgICAgICAgICBleHBhbmRlZC5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgdHJhdmVyc2Uobm9kZS5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRyYXZlcnNlKHRoaXMubm9kZXMoKSk7XG4gICAgcmV0dXJuIGV4cGFuZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgY29sbGFwc2VkIG5vZGVzIHRoYXQgaGF2ZSBjaGlsZHJlblxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBjb2xsYXBzZWQgbm9kZXMgd2l0aCBjaGlsZHJlblxuICAgKi9cbiAgZ2V0Q29sbGFwc2VkTm9kZXMoKTogQVhUcmVlVmlld05vZGVbXSB7XG4gICAgY29uc3QgY29sbGFwc2VkOiBBWFRyZWVWaWV3Tm9kZVtdID0gW107XG4gICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZXM6IEFYVHJlZVZpZXdOb2RlW10pOiB2b2lkID0+IHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBpZiAoIW5vZGUuZXhwYW5kZWQgJiYgKG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCB8fCBub2RlLmNoaWxkcmVuQ291bnQpKSB7XG4gICAgICAgICAgY29sbGFwc2VkLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICB0cmF2ZXJzZShub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdHJhdmVyc2UodGhpcy5ub2RlcygpKTtcbiAgICByZXR1cm4gY29sbGFwc2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbm9kZSBpcyBleHBhbmRlZFxuICAgKiBAcGFyYW0gbm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgbm9kZSBpcyBleHBhbmRlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpc05vZGVFeHBhbmRlZChub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlKG5vZGVJZCk7XG4gICAgcmV0dXJuIG5vZGU/LmV4cGFuZGVkID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbm9kZSBpcyBzZWxlY3RlZFxuICAgKiBAcGFyYW0gbm9kZUlkIC0gVGhlIElEIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgbm9kZSBpcyBzZWxlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBpc05vZGVTZWxlY3RlZChub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlKG5vZGVJZCk7XG4gICAgcmV0dXJuIG5vZGU/LnNlbGVjdGVkID8/IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbm9kZSBoYXMgY2hpbGRyZW5cbiAgICogQHBhcmFtIG5vZGVJZCAtIFRoZSBJRCBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB0cnVlIGlmIG5vZGUgaGFzIGNoaWxkcmVuLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGhhc0NoaWxkcmVuKG5vZGVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZE5vZGUobm9kZUlkKTtcbiAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5oYXNDaGlsZHJlbihub2RlID8/IHsgaWQ6ICcnLCBsYWJlbDogJycgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRlbXBsYXRlIGNvbnRleHQgZm9yIGEgbm9kZVxuICAgKi9cbiAgZ2V0VGVtcGxhdGVDb250ZXh0KG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBsZXZlbCA9IDApOiBBWFRyZWVWaWV3SXRlbVRlbXBsYXRlQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogbm9kZSxcbiAgICAgIG5vZGUsXG4gICAgICBsZXZlbCxcbiAgICAgIGV4cGFuZGVkOiBub2RlLmV4cGFuZGVkID8/IGZhbHNlLFxuICAgICAgY2hpbGRyZW5Db3VudDogbm9kZS5jaGlsZHJlbkNvdW50ID8/IG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwLFxuICAgICAgbG9hZGluZzogbm9kZS5sb2FkaW5nID8/IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHBhZGRpbmctaW5saW5lIGZvciBhIG5vZGUgYmFzZWQgb24gaXRzIGxldmVsXG4gICAqL1xuICBnZXROb2RlUGFkZGluZ0lubGluZShsZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBpbmRlbnQgPSB0aGlzLmluZGVudFNpemUoKTtcbiAgICBjb25zdCBjdXJyZW50TG9vayA9IHRoaXMubG9vaygpO1xuICAgIGNvbnN0IG11bHRpcGxpZXIgPSBjdXJyZW50TG9vayA9PT0gJ3dpdGgtbGluZScgPyAxIC8gMyA6IDE7XG4gICAgcmV0dXJuIGxldmVsICogaW5kZW50ICogbXVsdGlwbGllcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBub2RlIHNob3VsZCBzaG93IGV4cGFuZCB0b2dnbGVcbiAgICovXG4gIHNob3VsZFNob3dFeHBhbmRUb2dnbGUobm9kZTogQVhUcmVlVmlld05vZGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5oYXNDaGlsZHJlbihub2RlKSB8fCB0aGlzLnRyZWVTZXJ2aWNlLmNhbkxhenlMb2FkKG5vZGUsIHRoaXMuaXNMYXp5RGF0YVNvdXJjZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjaGVja2JveGVzIHNob3VsZCBiZSBzaG93biAob25seSBmb3IgbXVsdGlwbGUgbW9kZSlcbiAgICovXG4gIHNob3VsZFNob3dDaGVja2JveCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlKCkgPT09ICdtdWx0aXBsZScgJiYgdGhpcy5zaG93Q2hlY2tib3goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB1bmlxdWUgbGlzdCBJRCBmb3IgZWFjaCBub2RlXG4gICAqL1xuICBnZXRMaXN0SWQobm9kZT86IEFYVHJlZVZpZXdOb2RlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5nZXRMaXN0SWQobm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBub2RlIGlzIGN1cnJlbnRseSBmb2N1c2VkXG4gICAqL1xuICBpc05vZGVGb2N1c2VkKG5vZGVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZE5vZGVJZCgpID09PSBub2RlSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEFSSUEgbGV2ZWwgZm9yIGEgbm9kZVxuICAgKi9cbiAgZ2V0Tm9kZUFyaWFMZXZlbChsZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbGV2ZWwgKyAxO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBBUklBIGV4cGFuZGVkIHN0YXRlIGZvciBhIG5vZGVcbiAgICovXG4gIGdldE5vZGVBcmlhRXhwYW5kZWQobm9kZTogQVhUcmVlVmlld05vZGUpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuc2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShub2RlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBub2RlLmV4cGFuZGVkID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgQVJJQSBzZWxlY3RlZCBzdGF0ZSBmb3IgYSBub2RlXG4gICAqL1xuICBnZXROb2RlQXJpYVNlbGVjdGVkKG5vZGU6IEFYVHJlZVZpZXdOb2RlKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0TW9kZSgpID09PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIG5vZGUuc2VsZWN0ZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09IEV2ZW50IEhhbmRsZXJzID09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBIYW5kbGUgbm9kZSBjbGljayAtIGZvciBzaW5nbGUgc2VsZWN0aW9uIG1vZGUgb3IgbXVsdGlwbGUgbW9kZSB3aXRoIGNoZWNrT25DbGljayBlbmFibGVkXG4gICAqL1xuICBvbk5vZGVDbGljayhub2RlOiBBWFRyZWVWaWV3Tm9kZSwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKG5vZGUuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IG1vZGUgPSB0aGlzLnNlbGVjdE1vZGUoKTtcbiAgICBjb25zdCBzaG91bGRDaGVja09uQ2xpY2sgPSB0aGlzLmNoZWNrT25DbGljaygpO1xuXG4gICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNpbmdsZVNlbGVjdGlvbihub2RlLCBldmVudCk7XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSAnbXVsdGlwbGUnICYmIHNob3VsZENoZWNrT25DbGljaykge1xuICAgICAgdGhpcy5oYW5kbGVNdWx0aXBsZVNlbGVjdGlvbihub2RlLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBub2RlIGV4cGFuc2lvbiBzdGF0ZSB3aXRoIGxhenkgbG9hZGluZyBzdXBwb3J0XG4gICAqL1xuICBhc3luYyB0b2dnbGVOb2RlKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAobm9kZS5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuaXNFdmVudChldmVudCkgJiYgdHlwZW9mIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSB0aGlzLnRyZWVTZXJ2aWNlLmhhc0NoaWxkcmVuKG5vZGUpO1xuICAgIGNvbnN0IGNhbkxhenlMb2FkID0gdGhpcy50cmVlU2VydmljZS5jYW5MYXp5TG9hZChub2RlLCB0aGlzLmlzTGF6eURhdGFTb3VyY2UoKSk7XG5cbiAgICBpZiAoaGFzQ2hpbGRyZW4gfHwgY2FuTGF6eUxvYWQpIHtcbiAgICAgIGNvbnN0IHdpbGxFeHBhbmQgPSAhbm9kZS5leHBhbmRlZDtcblxuICAgICAgaWYgKHdpbGxFeHBhbmQgJiYgY2FuTGF6eUxvYWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTm9kZUNoaWxkcmVuKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBub2RlLmV4cGFuZGVkID0gd2lsbEV4cGFuZDtcbiAgICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gICAgICB0aGlzLm9uTm9kZVRvZ2dsZS5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBub2RlLCBuYXRpdmVFdmVudDogZXZlbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBub2RlIHNlbGVjdGlvbiBzdGF0ZSB3aXRoIGluZGV0ZXJtaW5hdGUgc3VwcG9ydCAoZm9yIG11bHRpcGxlIG1vZGUpXG4gICAqL1xuICB0b2dnbGVTZWxlY3Rpb24obm9kZTogQVhUcmVlVmlld05vZGUsIGV2ZW50OiBBWFZhbHVlQ2hhbmdlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCFldmVudC5pc1VzZXJJbnRlcmFjdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgbW9kZSA9IHRoaXMuc2VsZWN0TW9kZSgpO1xuICAgIGlmIChtb2RlICE9PSAnbXVsdGlwbGUnKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXdWYWx1ZSA9IGV2ZW50LnZhbHVlID09PSBudWxsID8gdHJ1ZSA6IGV2ZW50LnZhbHVlO1xuICAgIG5vZGUuc2VsZWN0ZWQgPSBuZXdWYWx1ZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmNoZWNrQ2hpbGRyZW5PblNlbGVjdCgpICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMudHJlZVNlcnZpY2Uuc2VsZWN0QWxsQ2hpbGRyZW4obm9kZS5jaGlsZHJlbiwgbmV3VmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmludGVybWVkaWF0ZVN0YXRlKCkpIHtcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlUGFyZW50U3RhdGVzKHRoaXMubm9kZXMoKSwgbm9kZSwgdGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbm9kZSxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiBldmVudC5pc1VzZXJJbnRlcmFjdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgZHJvcCBldmVudHMgZm9yIHRyZWUgbm9kZXNcbiAgICovXG4gIG9uRHJvcChldmVudDogQVhEcm9wTGlzdERyb3BwZWRFdmVudCwgcGFyZW50Tm9kZT86IEFYVHJlZVZpZXdOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0QXJyYXkgPSBwYXJlbnROb2RlPy5jaGlsZHJlbiA/PyB0aGlzLm5vZGVzKCk7XG4gICAgY29uc3QgaXNSZW9yZGVyaW5nID0gZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcjtcblxuICAgIGlmIChpc1Jlb3JkZXJpbmcpIHtcbiAgICAgIHRoaXMuaGFuZGxlUmVvcmRlcihldmVudCwgdGFyZ2V0QXJyYXksIHBhcmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZU1vdmUoZXZlbnQsIHRhcmdldEFycmF5LCBwYXJlbnROb2RlKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBkcm9wIGV2ZW50cyB3aGVuIGRyb3BwaW5nIGRpcmVjdGx5IG9udG8gYSBub2RlICh0byBtYWtlIGl0IGEgY2hpbGQpXG4gICAqL1xuICBvbkRyb3BPbnRvTm9kZShldmVudDogQVhEcm9wTGlzdERyb3BwZWRFdmVudCwgdGFyZ2V0Tm9kZTogQVhUcmVlVmlld05vZGUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuTW92ZVRvUGFyZW50KCkpIHJldHVybjtcblxuICAgIGNvbnN0IHNvdXJjZUxpc3RJZCA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmVsZW1lbnQuaWQ7XG4gICAgY29uc3Qgc291cmNlQXJyYXkgPSB0aGlzLmdldEFycmF5QnlMaXN0SWQoc291cmNlTGlzdElkKTtcbiAgICBpZiAoIXNvdXJjZUFycmF5KSByZXR1cm47XG5cbiAgICBjb25zdCBtb3ZlZE5vZGUgPSBzb3VyY2VBcnJheVtldmVudC5wcmV2aW91c0luZGV4XTtcblxuICAgIGlmICghdGhpcy50cmVlU2VydmljZS5pc1ZhbGlkRHJvcFRhcmdldChtb3ZlZE5vZGUsIHRhcmdldE5vZGUpKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmVtaXRCZWZvcmVEcm9wRXZlbnQobW92ZWROb2RlLCBzb3VyY2VMaXN0SWQsIHRhcmdldE5vZGUsIGV2ZW50LnByZXZpb3VzSW5kZXgsIDApKSByZXR1cm47XG5cbiAgICB0YXJnZXROb2RlLmNoaWxkcmVuID8/PSBbXTtcbiAgICBzb3VyY2VBcnJheS5zcGxpY2UoZXZlbnQucHJldmlvdXNJbmRleCwgMSk7XG4gICAgdGFyZ2V0Tm9kZS5jaGlsZHJlbi51bnNoaWZ0KG1vdmVkTm9kZSk7XG4gICAgdGFyZ2V0Tm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICB0aGlzLmVtaXREcm9wRXZlbnRzKG1vdmVkTm9kZSwgdGhpcy5maW5kUGFyZW50QnlMaXN0SWQoc291cmNlTGlzdElkKSwgdGFyZ2V0Tm9kZSwgZXZlbnQucHJldmlvdXNJbmRleCwgMCwgZmFsc2UpO1xuXG4gICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgbm9kZSBmb2N1cyBldmVudFxuICAgKi9cbiAgb25Ob2RlRm9jdXMobm9kZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzZWROb2RlSWQuc2V0KG5vZGVJZCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRyZWUgY29udGFpbmVyIGZvY3VzIC0gZm9jdXMgZmlyc3Qgbm9kZSBpZiBub25lIGlzIGZvY3VzZWRcbiAgICovXG4gIG9uVHJlZUZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgY29uc3QgZmxhdExpc3QgPSB0aGlzLnRyZWVTZXJ2aWNlLmJ1aWxkRmxhdE5vZGVMaXN0KHRoaXMubm9kZXMoKSk7XG4gICAgICBpZiAoZmxhdExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmb2N1c2VkSWQgPSB0aGlzLmZvY3VzZWROb2RlSWQoKTtcbiAgICAgICAgaWYgKGZvY3VzZWRJZCkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBmb2N1c2VkIG5vZGUgc3RpbGwgZXhpc3RzIGFuZCBpcyB2aXNpYmxlXG4gICAgICAgICAgY29uc3QgZm9jdXNlZE5vZGUgPSB0aGlzLnRyZWVTZXJ2aWNlLmZpbmROb2RlQnlJZCh0aGlzLm5vZGVzKCksIGZvY3VzZWRJZCk7XG4gICAgICAgICAgaWYgKGZvY3VzZWROb2RlICYmIGZvY3VzZWROb2RlLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzTm9kZUJ5SWQoZm9jdXNlZElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRm9jdXNlZCBub2RlIG5vIGxvbmdlciBleGlzdHMsIGZvY3VzIGZpcnN0IG5vZGVcbiAgICAgICAgICAgIHRoaXMuZm9jdXNOb2RlQnlJZChmbGF0TGlzdFswXS5ub2RlLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm8gbm9kZSBpcyBmb2N1c2VkLCBmb2N1cyBmaXJzdCBub2RlXG4gICAgICAgICAgdGhpcy5mb2N1c05vZGVCeUlkKGZsYXRMaXN0WzBdLm5vZGUuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0cmVlIGNvbnRhaW5lciBibHVyXG4gICAqL1xuICBvblRyZWVCbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgIShldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICB0aGlzLmZvY3VzZWROb2RlSWQuc2V0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgKi9cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGZsYXRMaXN0ID0gdGhpcy50cmVlU2VydmljZS5idWlsZEZsYXROb2RlTGlzdCh0aGlzLm5vZGVzKCkpO1xuICAgIGlmIChmbGF0TGlzdC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRGb2N1c2VkID0gdGhpcy5nZXRGb2N1c2VkTm9kZSgpO1xuICAgIGxldCBjdXJyZW50SW5kZXggPSBjdXJyZW50Rm9jdXNlZCA/IGZsYXRMaXN0LmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5ub2RlLmlkID09PSBjdXJyZW50Rm9jdXNlZC5pZCkgOiAtMTtcblxuICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xICYmIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgY3VycmVudEluZGV4ID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCBuYXZpZ2F0aW9uUmVzdWx0ID0gdGhpcy5oYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50LCBmbGF0TGlzdCwgY3VycmVudEluZGV4LCBjdXJyZW50Rm9jdXNlZCk7XG4gICAgaWYgKG5hdmlnYXRpb25SZXN1bHQuaGFuZGxlZCkge1xuICAgICAgaWYgKG5hdmlnYXRpb25SZXN1bHQuc2hvdWxkUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIG5hdmlnYXRpb25SZXN1bHQudGFyZ2V0SW5kZXggIT09IG51bGwgJiZcbiAgICAgICAgbmF2aWdhdGlvblJlc3VsdC50YXJnZXRJbmRleCA+PSAwICYmXG4gICAgICAgIG5hdmlnYXRpb25SZXN1bHQudGFyZ2V0SW5kZXggPCBmbGF0TGlzdC5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvY3VzTm9kZUJ5SWQoZmxhdExpc3RbbmF2aWdhdGlvblJlc3VsdC50YXJnZXRJbmRleF0ubm9kZS5pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gUHJpdmF0ZSBNZXRob2RzID09PT09PT09PT09PT09PT09PT09XG4gIC8qKlxuICAgKiBMb2FkIHJvb3QgaXRlbXMgd2hlbiBkYXRhc291cmNlIGlzIGEgZnVuY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJvb3RJdGVtcyhsb2FkRm46IEFYVHJlZVZpZXdDYWxsYmFjayk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBsb2FkRm4oKTtcbiAgICAgIGNvbnN0IHJvb3ROb2RlcyA9IHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UgPyBhd2FpdCByZXN1bHQgOiByZXN1bHQ7XG4gICAgICB0aGlzLm5vZGVzLnNldChyb290Tm9kZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKCdGYWlsZWQgdG8gbG9hZCByb290IGl0ZW1zJywgZXJyb3IpO1xuICAgICAgdGhpcy5ub2Rlcy5zZXQoW10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGNoaWxkcmVuIGZvciBhIG5vZGUgdXNpbmcgbGF6eSBsb2FkaW5nXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWROb2RlQ2hpbGRyZW4obm9kZTogQVhUcmVlVmlld05vZGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNMYXp5RGF0YVNvdXJjZSgpIHx8IG5vZGUubG9hZGluZykgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMudHJlZVNlcnZpY2UuaGFzQ2hpbGRyZW4obm9kZSkgfHwgIW5vZGUuY2hpbGRyZW5Db3VudCB8fCBub2RlLmNoaWxkcmVuQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkcyA9IHRoaXMuZGF0YXNvdXJjZSgpO1xuICAgIGlmICh0eXBlb2YgZHMgIT09ICdmdW5jdGlvbicpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBub2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkaW5nTm9kZXMudXBkYXRlKChzZXQpID0+IG5ldyBTZXQoc2V0KS5hZGQobm9kZS5pZCkpO1xuICAgICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gZHMobm9kZS5pZCk7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UgPyBhd2FpdCByZXN1bHQgOiByZXN1bHQ7XG4gICAgICBub2RlLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICBub2RlLmNoaWxkcmVuQ291bnQgPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNoaWxkcmVuJywgZXJyb3IpO1xuICAgICAgbm9kZS5jaGlsZHJlbkNvdW50ID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbm9kZS5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmxvYWRpbmdOb2Rlcy51cGRhdGUoKHNldCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHNldCk7XG4gICAgICAgIG5ld1NldC5kZWxldGUobm9kZS5pZCk7XG4gICAgICAgIHJldHVybiBuZXdTZXQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIG1ldGhvZCB0byByZWZyZXNoIG5vZGVzIHNpZ25hbCBhbmQgc3luYyBiYWNrIHRvIGRhdGFzb3VyY2UgaWYgaXQncyBhbiBhcnJheVxuICAgKiBDcmVhdGVzIG5ldyBhcnJheSByZWZlcmVuY2VzIGZvciBhbGwgbmVzdGVkIGNoaWxkcmVuIHRvIGVuc3VyZSByZWFjdGl2aXR5XG4gICAqL1xuICBwcml2YXRlIHJlZnJlc2hOb2RlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50Tm9kZXMgPSB0aGlzLm5vZGVzKCk7XG4gICAgLy8gQ3JlYXRlIG5ldyBhcnJheSByZWZlcmVuY2VzIGZvciBhbGwgbmVzdGVkIGNoaWxkcmVuIHRvIGVuc3VyZSByZWFjdGl2aXR5XG4gICAgLy8gVGhpcyBlbnN1cmVzIEFuZ3VsYXIncyBjaGFuZ2UgZGV0ZWN0aW9uIHBpY2tzIHVwIGNoYW5nZXMgZXZlbiB3aXRoIGNhbGxiYWNrIGRhdGFzb3VyY2VcbiAgICB0aGlzLmVuc3VyZU5ld0FycmF5UmVmZXJlbmNlcyhjdXJyZW50Tm9kZXMpO1xuICAgIHRoaXMubm9kZXMuc2V0KFsuLi5jdXJyZW50Tm9kZXNdKTtcblxuICAgIGlmICghdGhpcy5pc0xhenlEYXRhU291cmNlKCkgJiYgIXRoaXMuaXNVcGRhdGluZ0Zyb21EYXRhc291cmNlKSB7XG4gICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICB0aGlzLmRhdGFzb3VyY2Uuc2V0KFsuLi5jdXJyZW50Tm9kZXNdKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRGF0YXNvdXJjZSA9IGZhbHNlO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGVuc3VyZSBhbGwgY2hpbGRyZW4gYXJyYXlzIGhhdmUgbmV3IHJlZmVyZW5jZXMgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAqIE11dGF0ZXMgdGhlIHRyZWUgc3RydWN0dXJlIGJ5IHJlcGxhY2luZyBjaGlsZHJlbiBhcnJheXMgd2l0aCBuZXcgYXJyYXkgcmVmZXJlbmNlc1xuICAgKi9cbiAgcHJpdmF0ZSBlbnN1cmVOZXdBcnJheVJlZmVyZW5jZXMobm9kZXM6IEFYVHJlZVZpZXdOb2RlW10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBDcmVhdGUgbmV3IGFycmF5IHJlZmVyZW5jZSBmb3IgY2hpbGRyZW5cbiAgICAgICAgbm9kZS5jaGlsZHJlbiA9IFsuLi5ub2RlLmNoaWxkcmVuXTtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgdGhpcy5lbnN1cmVOZXdBcnJheVJlZmVyZW5jZXMobm9kZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzaW5nbGUgc2VsZWN0aW9uIG1vZGVcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlU2luZ2xlU2VsZWN0aW9uKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLmRlc2VsZWN0QWxsTm9kZXModGhpcy5ub2RlcygpKTtcbiAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbm9kZSxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBtdWx0aXBsZSBzZWxlY3Rpb24gbW9kZSB3aXRoIGNoZWNrT25DbGlja1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVNdWx0aXBsZVNlbGVjdGlvbihub2RlOiBBWFRyZWVWaWV3Tm9kZSwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSAhbm9kZS5zZWxlY3RlZDtcbiAgICBub2RlLnNlbGVjdGVkID0gbmV3VmFsdWU7XG4gICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5jaGVja0NoaWxkcmVuT25TZWxlY3QoKSAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLnNlbGVjdEFsbENoaWxkcmVuKG5vZGUuY2hpbGRyZW4sIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKSB7XG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLnVwZGF0ZVBhcmVudFN0YXRlcyh0aGlzLm5vZGVzKCksIG5vZGUsIHRoaXMuaW50ZXJtZWRpYXRlU3RhdGUoKSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZWZyZXNoTm9kZXMoKTtcbiAgICB0aGlzLm9uTm9kZVNlbGVjdC5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIG5vZGUsXG4gICAgICBuYXRpdmVFdmVudDogZXZlbnQsXG4gICAgICBpc1VzZXJJbnRlcmFjdGlvbjogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYXJyYXkgcmVmZXJlbmNlIGJ5IGRyb3AgbGlzdCBJRFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBcnJheUJ5TGlzdElkKGxpc3RJZDogc3RyaW5nKTogQVhUcmVlVmlld05vZGVbXSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRyZWVTZXJ2aWNlLmdldEFycmF5QnlMaXN0SWQodGhpcy5ub2RlcygpLCBsaXN0SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgcGFyZW50IG5vZGUgYnkgbGlzdCBJRFxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kUGFyZW50QnlMaXN0SWQobGlzdElkOiBzdHJpbmcpOiBBWFRyZWVWaWV3Tm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudHJlZVNlcnZpY2UuZmluZFBhcmVudEJ5TGlzdElkKHRoaXMubm9kZXMoKSwgbGlzdElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBtb3ZlIG9wZXJhdGlvbiBpcyBhbGxvd2VkIGJhc2VkIG9uIGRyYWdPcGVyYXRpb25UeXBlXG4gICAqL1xuICBwcml2YXRlIGNhbk1vdmVUb1BhcmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kcmFnT3BlcmF0aW9uVHlwZSgpICE9PSAnb3JkZXItb25seSc7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgcmVvcmRlciBvcGVyYXRpb24gaXMgYWxsb3dlZCBiYXNlZCBvbiBkcmFnT3BlcmF0aW9uVHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBjYW5SZW9yZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRyYWdPcGVyYXRpb25UeXBlKCkgIT09ICdtb3ZlJztcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVvcmRlcmluZyB3aXRoaW4gdGhlIHNhbWUgbGlzdCAgICovXG4gIHByaXZhdGUgaGFuZGxlUmVvcmRlcihcbiAgICBldmVudDogQVhEcm9wTGlzdERyb3BwZWRFdmVudCxcbiAgICB0YXJnZXRBcnJheTogQVhUcmVlVmlld05vZGVbXSxcbiAgICBwYXJlbnROb2RlPzogQVhUcmVlVmlld05vZGUsXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZW9yZGVyKCkpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmVkTm9kZSA9IHRhcmdldEFycmF5W2V2ZW50LnByZXZpb3VzSW5kZXhdO1xuICAgIG1vdmVJdGVtSW5BcnJheSh0YXJnZXRBcnJheSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcblxuICAgIHRoaXMuZW1pdERyb3BFdmVudHMobW92ZWROb2RlLCBwYXJlbnROb2RlLCBwYXJlbnROb2RlLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBtb3ZpbmcgYmV0d2VlbiBkaWZmZXJlbnQgbGlzdHNcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlTW92ZShldmVudDogQVhEcm9wTGlzdERyb3BwZWRFdmVudCwgdGFyZ2V0QXJyYXk6IEFYVHJlZVZpZXdOb2RlW10sIHBhcmVudE5vZGU/OiBBWFRyZWVWaWV3Tm9kZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5Nb3ZlVG9QYXJlbnQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc291cmNlTGlzdElkID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuZWxlbWVudC5pZDtcbiAgICBjb25zdCBzb3VyY2VBcnJheSA9IHRoaXMuZ2V0QXJyYXlCeUxpc3RJZChzb3VyY2VMaXN0SWQpO1xuICAgIGlmICghc291cmNlQXJyYXkpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmVkTm9kZSA9IHNvdXJjZUFycmF5W2V2ZW50LnByZXZpb3VzSW5kZXhdO1xuXG4gICAgaWYgKHBhcmVudE5vZGUgJiYgIXRoaXMudHJlZVNlcnZpY2UuaXNWYWxpZERyb3BUYXJnZXQobW92ZWROb2RlLCBwYXJlbnROb2RlKSkgcmV0dXJuO1xuXG4gICAgaWYgKCF0aGlzLmVtaXRCZWZvcmVEcm9wRXZlbnQobW92ZWROb2RlLCBzb3VyY2VMaXN0SWQsIHBhcmVudE5vZGUsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cmFuc2ZlckFycmF5SXRlbShzb3VyY2VBcnJheSwgdGFyZ2V0QXJyYXksIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG5cbiAgICB0aGlzLmVtaXREcm9wRXZlbnRzKFxuICAgICAgbW92ZWROb2RlLFxuICAgICAgdGhpcy5maW5kUGFyZW50QnlMaXN0SWQoc291cmNlTGlzdElkKSxcbiAgICAgIHBhcmVudE5vZGUsXG4gICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgZXZlbnQuY3VycmVudEluZGV4LFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGJlZm9yZURyb3AgZXZlbnQgYW5kIHJldHVybiB3aGV0aGVyIHRvIGNvbnRpbnVlXG4gICAqL1xuICBwcml2YXRlIGVtaXRCZWZvcmVEcm9wRXZlbnQoXG4gICAgbW92ZWROb2RlOiBBWFRyZWVWaWV3Tm9kZSxcbiAgICBzb3VyY2VMaXN0SWQ6IHN0cmluZyxcbiAgICBjdXJyZW50UGFyZW50OiBBWFRyZWVWaWV3Tm9kZSB8IHVuZGVmaW5lZCxcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXIsXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJlZm9yZURyb3BFdmVudDogQVhUcmVlVmlld0JlZm9yZURyb3BFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIG1vdmVkTm9kZSxcbiAgICAgIHByZXZpb3VzUGFyZW50OiB0aGlzLmZpbmRQYXJlbnRCeUxpc3RJZChzb3VyY2VMaXN0SWQpLFxuICAgICAgY3VycmVudFBhcmVudCxcbiAgICAgIHByZXZpb3VzSW5kZXgsXG4gICAgICBjdXJyZW50SW5kZXgsXG4gICAgICBjYW5jZWxlZDogZmFsc2UsXG4gICAgfTtcbiAgICB0aGlzLm9uQmVmb3JlRHJvcC5lbWl0KGJlZm9yZURyb3BFdmVudCk7XG5cbiAgICByZXR1cm4gIWJlZm9yZURyb3BFdmVudC5jYW5jZWxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGRyb3AgZXZlbnRzIGJhc2VkIG9uIG9wZXJhdGlvbiB0eXBlXG4gICAqL1xuICBwcml2YXRlIGVtaXREcm9wRXZlbnRzKFxuICAgIG5vZGU6IEFYVHJlZVZpZXdOb2RlLFxuICAgIHByZXZpb3VzUGFyZW50OiBBWFRyZWVWaWV3Tm9kZSB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50UGFyZW50OiBBWFRyZWVWaWV3Tm9kZSB8IHVuZGVmaW5lZCxcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXIsXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gICAgaXNSZW9yZGVyOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBkcm9wRXZlbnQ6IEFYVHJlZVZpZXdEcm9wRXZlbnQgPSB7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBub2RlLFxuICAgICAgcHJldmlvdXNQYXJlbnQsXG4gICAgICBjdXJyZW50UGFyZW50LFxuICAgICAgcHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRJbmRleCxcbiAgICB9O1xuXG4gICAgaWYgKGlzUmVvcmRlcikge1xuICAgICAgdGhpcy5vbk9yZGVyQ2hhbmdlLmVtaXQoZHJvcEV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbk1vdmVDaGFuZ2UuZW1pdChkcm9wRXZlbnQpO1xuICAgIH1cbiAgICB0aGlzLm9uSXRlbXNDaGFuZ2UuZW1pdChkcm9wRXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudGx5IGZvY3VzZWQgbm9kZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGb2N1c2VkTm9kZSgpOiBBWFRyZWVWaWV3Tm9kZSB8IG51bGwge1xuICAgIGNvbnN0IGZvY3VzZWRJZCA9IHRoaXMuZm9jdXNlZE5vZGVJZCgpO1xuICAgIGlmICghZm9jdXNlZElkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy50cmVlU2VydmljZS5maW5kTm9kZUJ5SWQodGhpcy5ub2RlcygpLCBmb2N1c2VkSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBmb2N1cyB0byBhIG5vZGUgYnkgSURcbiAgICovXG4gIHByaXZhdGUgZm9jdXNOb2RlQnlJZChub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNlZE5vZGVJZC5zZXQobm9kZUlkKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgW2RhdGEtdHJlZS1ub2RlLWlkPVwiJHtub2RlSWR9XCJdYCk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ25lYXJlc3QnLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGtleWJvYXJkIG5hdmlnYXRpb24ga2V5c1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uS2V5KFxuICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuICAgIGZsYXRMaXN0OiBBWFRyZWVWaWV3RmxhdE5vZGVbXSxcbiAgICBjdXJyZW50SW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50Rm9jdXNlZDogQVhUcmVlVmlld05vZGUgfCBudWxsLFxuICApOiB7IGhhbmRsZWQ6IGJvb2xlYW47IHNob3VsZFByZXZlbnREZWZhdWx0OiBib29sZWFuOyB0YXJnZXRJbmRleDogbnVtYmVyIHwgbnVsbCB9IHtcbiAgICBsZXQgdGFyZ2V0SW5kZXg6IG51bWJlciB8IG51bGwgPSBjdXJyZW50SW5kZXg7XG4gICAgbGV0IHNob3VsZFByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICBsZXQgaGFuZGxlZCA9IHRydWU7XG5cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSB7XG4gICAgICAgICAgdGFyZ2V0SW5kZXggPSBjdXJyZW50SW5kZXggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNob3VsZFByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPCBmbGF0TGlzdC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGFyZ2V0SW5kZXggPSBjdXJyZW50SW5kZXggKyAxO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICB0YXJnZXRJbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKGN1cnJlbnRGb2N1c2VkKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnRGb2N1c2VkLmV4cGFuZGVkICYmIHRoaXMuc2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShjdXJyZW50Rm9jdXNlZCkpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlTm9kZShjdXJyZW50Rm9jdXNlZCwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuIHsgaGFuZGxlZDogdHJ1ZSwgc2hvdWxkUHJldmVudERlZmF1bHQ6IHRydWUsIHRhcmdldEluZGV4OiBudWxsIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gZmxhdExpc3RbY3VycmVudEluZGV4XTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbT8ucGFyZW50KSB7XG4gICAgICAgICAgICAgIHRhcmdldEluZGV4ID0gZmxhdExpc3QuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLm5vZGUuaWQgPT09IGN1cnJlbnRJdGVtLnBhcmVudC5pZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKGN1cnJlbnRGb2N1c2VkKSB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50Rm9jdXNlZC5leHBhbmRlZCAmJiB0aGlzLnNob3VsZFNob3dFeHBhbmRUb2dnbGUoY3VycmVudEZvY3VzZWQpKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZU5vZGUoY3VycmVudEZvY3VzZWQsIGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybiB7IGhhbmRsZWQ6IHRydWUsIHNob3VsZFByZXZlbnREZWZhdWx0OiB0cnVlLCB0YXJnZXRJbmRleDogbnVsbCB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjdXJyZW50Rm9jdXNlZC5leHBhbmRlZCAmJlxuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5oYXNDaGlsZHJlbihjdXJyZW50Rm9jdXNlZCkgJiZcbiAgICAgICAgICAgIGN1cnJlbnRGb2N1c2VkLmNoaWxkcmVuXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGN1cnJlbnRGb2N1c2VkLmNoaWxkcmVuO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXRMaXN0LmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5ub2RlLmlkID09PSBmaXJzdENoaWxkLmlkKTtcbiAgICAgICAgICAgICAgaWYgKHRhcmdldEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGbGF0TGlzdCA9IHRoaXMudHJlZVNlcnZpY2UuYnVpbGRGbGF0Tm9kZUxpc3QodGhpcy5ub2RlcygpKTtcbiAgICAgICAgICAgICAgICB0YXJnZXRJbmRleCA9IHVwZGF0ZWRGbGF0TGlzdC5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubm9kZS5pZCA9PT0gZmlyc3RDaGlsZC5pZCk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEluZGV4ID49IDAgJiYgdGFyZ2V0SW5kZXggPCB1cGRhdGVkRmxhdExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzTm9kZUJ5SWQodXBkYXRlZEZsYXRMaXN0W3RhcmdldEluZGV4XS5ub2RlLmlkKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7IGhhbmRsZWQ6IHRydWUsIHNob3VsZFByZXZlbnREZWZhdWx0OiB0cnVlLCB0YXJnZXRJbmRleDogbnVsbCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2hvdWxkUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIHRhcmdldEluZGV4ID0gMDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdExpc3QubGVuZ3RoIC0gMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJyAnOlxuICAgICAgY2FzZSAnU3BhY2UnOlxuICAgICAgICBpZiAoY3VycmVudEZvY3VzZWQgJiYgdGhpcy5zZWxlY3RNb2RlKCkgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlU3BhY2VLZXlTZWxlY3Rpb24oY3VycmVudEZvY3VzZWQsIGV2ZW50KTtcbiAgICAgICAgICByZXR1cm4geyBoYW5kbGVkOiB0cnVlLCBzaG91bGRQcmV2ZW50RGVmYXVsdDogdHJ1ZSwgdGFyZ2V0SW5kZXg6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICBpZiAoY3VycmVudEZvY3VzZWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuaGFuZGxlRW50ZXJLZXlTZWxlY3Rpb24oY3VycmVudEZvY3VzZWQsIGV2ZW50KTtcbiAgICAgICAgICByZXR1cm4geyBoYW5kbGVkOiB0cnVlLCBzaG91bGRQcmV2ZW50RGVmYXVsdDogdHJ1ZSwgdGFyZ2V0SW5kZXg6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIGlmIChjdXJyZW50Rm9jdXNlZCAmJiB0aGlzLnNlbGVjdE1vZGUoKSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ3RybEVudGVyU2VsZWN0aW9uKGN1cnJlbnRGb2N1c2VkLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm4geyBoYW5kbGVkOiB0cnVlLCBzaG91bGRQcmV2ZW50RGVmYXVsdDogdHJ1ZSwgdGFyZ2V0SW5kZXg6IG51bGwgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICBzaG91bGRQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4geyBoYW5kbGVkLCBzaG91bGRQcmV2ZW50RGVmYXVsdCwgdGFyZ2V0SW5kZXggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgU3BhY2Uga2V5IHNlbGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVTcGFjZUtleVNlbGVjdGlvbihub2RlOiBBWFRyZWVWaWV3Tm9kZSwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICFub2RlLnNlbGVjdGVkO1xuICAgIG5vZGUuc2VsZWN0ZWQgPSBuZXdWYWx1ZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmNoZWNrQ2hpbGRyZW5PblNlbGVjdCgpICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMudHJlZVNlcnZpY2Uuc2VsZWN0QWxsQ2hpbGRyZW4obm9kZS5jaGlsZHJlbiwgbmV3VmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmludGVybWVkaWF0ZVN0YXRlKCkpIHtcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlUGFyZW50U3RhdGVzKHRoaXMubm9kZXMoKSwgbm9kZSwgdGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbm9kZSxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBFbnRlciBrZXkgc2VsZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUVudGVyS2V5U2VsZWN0aW9uKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG1vZGUgPSB0aGlzLnNlbGVjdE1vZGUoKTtcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLmRlc2VsZWN0QWxsTm9kZXModGhpcy5ub2RlcygpKTtcbiAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgIGlmIChtb2RlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICBpZiAodGhpcy5jaGVja0NoaWxkcmVuT25TZWxlY3QoKSAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2Uuc2VsZWN0QWxsQ2hpbGRyZW4obm9kZS5jaGlsZHJlbiwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKSB7XG4gICAgICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlUGFyZW50U3RhdGVzKHRoaXMubm9kZXMoKSwgbm9kZSwgdGhpcy5pbnRlcm1lZGlhdGVTdGF0ZSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hOb2RlcygpO1xuICAgIHRoaXMub25Ob2RlU2VsZWN0LmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbm9kZSxcbiAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgIGlzVXNlckludGVyYWN0aW9uOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBDdHJsL0NtZCArIEVudGVyIGtleSBzZWxlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlQ3RybEVudGVyU2VsZWN0aW9uKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gIW5vZGUuc2VsZWN0ZWQ7XG4gICAgbm9kZS5zZWxlY3RlZCA9IG5ld1ZhbHVlO1xuICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuY2hlY2tDaGlsZHJlbk9uU2VsZWN0KCkgJiYgbm9kZS5jaGlsZHJlbikge1xuICAgICAgdGhpcy50cmVlU2VydmljZS5zZWxlY3RBbGxDaGlsZHJlbihub2RlLmNoaWxkcmVuLCBuZXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW50ZXJtZWRpYXRlU3RhdGUoKSkge1xuICAgICAgdGhpcy50cmVlU2VydmljZS51cGRhdGVQYXJlbnRTdGF0ZXModGhpcy5ub2RlcygpLCBub2RlLCB0aGlzLmludGVybWVkaWF0ZVN0YXRlKCkpO1xuICAgIH1cblxuICAgIHRoaXMucmVmcmVzaE5vZGVzKCk7XG4gICAgdGhpcy5vbk5vZGVTZWxlY3QuZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBub2RlLFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50LFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHlwZSBndWFyZCB0byBjaGVjayBpZiB2YWx1ZSBpcyBhbiBFdmVudFxuICAgKi9cbiAgcHJpdmF0ZSBpc0V2ZW50KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgRXZlbnQge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEV2ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBlcnJvcnMgY29uc2lzdGVudGx5XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUVycm9yKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgJHttZXNzYWdlfTpgLCBlcnJvci5tZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgJHttZXNzYWdlfTpgLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tIFJvb3QgZHJvcCBsaXN0IC0tPlxuPGRpdlxuICBheEZvY3VzVHJhcFxuICBbYXhEcm9wTGlzdF09XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICBbc29ydGluZ0Rpc2FibGVkXT1cImZhbHNlXCJcbiAgW2lkXT1cImdldExpc3RJZCgpXCJcbiAgW2F0dHIuZGF0YS1ub2RlLWlkXT1cIm51bGxcIlxuICBkcm9wTGlzdEdyb3VwPVwiYXgtdHJlZS12aWV3LW5vZGVzXCJcbiAgKGRyb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gIGNsYXNzPVwiYXgtdHJlZS12aWV3LWRyb3AtbGlzdFwiXG4gIFtjbGFzcy5heC10cmVlLXZpZXctY2FyZF09XCJsb29rKCkgPT09ICdjYXJkJ1wiXG4gIFtjbGFzcy5heC10cmVlLXZpZXctd2l0aC1saW5lc109XCJsb29rKCkgPT09ICd3aXRoLWxpbmUnXCJcbiAgW2NsYXNzLmF4LXRyZWUtdmlldy1jb21wYWN0XT1cIm5vZGVIZWlnaHQoKSA9PT0gJ2NvbXBhY3QnXCJcbiAgW2NsYXNzLmF4LXRyZWUtdmlldy1jb21mb3J0YWJsZV09XCJub2RlSGVpZ2h0KCkgPT09ICdjb21mb3J0YWJsZSdcIlxuICByb2xlPVwiZ3JvdXBcIlxuPlxuICBAZm9yIChub2RlIG9mIG5vZGVzKCk7IHRyYWNrIG5vZGUuaWQpIHtcbiAgICBAaWYgKG5vZGUudmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgW2F4RHJhZ109XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICBbZHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LW5vZGVcIlxuICAgICAgICBbY2xhc3MuYXgtdHJlZS12aWV3LW5vZGUtc2VsZWN0ZWRdPVwibm9kZS5zZWxlY3RlZFwiXG4gICAgICAgIFtjbGFzcy5heC10cmVlLXZpZXctbm9kZS1kaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzLmF4LXRyZWUtdmlldy1ub2RlLWxvYWRpbmddPVwibm9kZS5sb2FkaW5nXCJcbiAgICAgICAgcm9sZT1cInRyZWVpdGVtXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sZXZlbF09XCJnZXROb2RlQXJpYUxldmVsKDApXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJnZXROb2RlQXJpYUV4cGFuZGVkKG5vZGUpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJnZXROb2RlQXJpYVNlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJub2RlLmRpc2FibGVkID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy1ub2RlLWNvbnRlbnRcIlxuICAgICAgICAgIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgICAgICAgW2lkXT1cIidheC10cmVlLXZpZXctbm9kZS1kcm9wLScgKyBub2RlLmlkXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLW5vZGUtaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgW2F0dHIuZGF0YS10cmVlLW5vZGUtaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgW2F0dHIuZGF0YS1kcm9wLXR5cGVdPVwiJ29udG8tbm9kZSdcIlxuICAgICAgICAgIGRyb3BMaXN0R3JvdXA9XCJheC10cmVlLXZpZXctbm9kZXNcIlxuICAgICAgICAgIChkcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wT250b05vZGUoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgKHNlbGVjdE1vZGUoKSA9PT0gJ3NpbmdsZScgfHwgKHNlbGVjdE1vZGUoKSA9PT0gJ211bHRpcGxlJyAmJiBjaGVja09uQ2xpY2soKSkpICYmIG9uTm9kZUNsaWNrKG5vZGUsICRldmVudClcbiAgICAgICAgICBcIlxuICAgICAgICAgIChmb2N1cyk9XCJvbk5vZGVGb2N1cyhub2RlLmlkKVwiXG4gICAgICAgICAgW3RhYmluZGV4XT1cImlzTm9kZUZvY3VzZWQobm9kZS5pZCkgPyAwIDogLTFcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmIChkcmFnTW9kZSgpID09PSAnaGFuZGxlcicpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJlZS12aWV3LWRyYWctaGFuZGxlXCIgYXhEcmFnSGFuZGxlIHRpdGxlPVwiRHJhZyB0byByZW9yZGVyXCI+IOKLruKLriA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LWV4cGFuZC10b2dnbGUgYXgtc21cIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlTm9kZShub2RlLCAkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5heC10cmVlLXZpZXctaGFzLWNoaWxkcmVuXT1cInNob3VsZFNob3dFeHBhbmRUb2dnbGUobm9kZSlcIlxuICAgICAgICAgICAgW2NsYXNzLmF4LXRyZWUtdmlldy1leHBhbmRlZF09XCJub2RlLmV4cGFuZGVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJub2RlLmRpc2FibGVkIHx8IG5vZGUubG9hZGluZ1wiXG4gICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAobm9kZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtc3Bpbm5lciBmYS1zcGluIGF4LXRyZWUtdmlldy1sb2FkaW5nLXNwaW5uZXJcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIm5vZGUuZXhwYW5kZWQgPyBkaXJlY3Rpb25FeHBhbmRlZEljb24oKSA6IGRpcmVjdGlvbkNvbGxhcHNlZEljb24oKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy10b2dnbGUtaWNvblwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIEBpZiAoaXRlbVRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlKCkhXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFRlbXBsYXRlQ29udGV4dChub2RlLCAwKVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYgKHNob3VsZFNob3dDaGVja2JveCgpKSB7XG4gICAgICAgICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibm9kZS5pbmRldGVybWluYXRlID8gbnVsbCA6IG5vZGUuc2VsZWN0ZWQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKG9uVmFsdWVDaGFuZ2VkKT1cInRvZ2dsZVNlbGVjdGlvbihub2RlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPjwvYXgtY2hlY2stYm94PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChzaG93SWNvbnMoKSAmJiBub2RlLmljb24pIHtcbiAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIm5vZGUuaWNvblwiIGNsYXNzPVwiYXgtdHJlZS12aWV3LW5vZGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJlZS12aWV3LW5vZGUtbGFiZWxcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChzaG93Q2hpbGRyZW5CYWRnZSgpICYmIChub2RlLmNoaWxkcmVuQ291bnQgfHwgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSkpIHtcbiAgICAgICAgICAgICAgPGF4LWJhZGdlXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC10cmVlLXZpZXctY2hpbGRyZW4tYmFkZ2VcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIihub2RlLmNoaWxkcmVuQ291bnQgPz8gbm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDApLnRvU3RyaW5nKClcIlxuICAgICAgICAgICAgICA+PC9heC1iYWRnZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKG5vZGUuZXhwYW5kZWQgJiYgbm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXRyZWUtdmlldy1jaGlsZHJlblwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaWxkcmVuTGlzdFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbiwgcGFyZW50OiBub2RlLCBsZXZlbDogMSB9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgfVxuPC9kaXY+XG5cbjwhLS0gUmVjdXJzaXZlIGNoaWxkcmVuIHRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNjaGlsZHJlbkxpc3QgbGV0LWNoaWxkcmVuPVwiY2hpbGRyZW5cIiBsZXQtcGFyZW50PVwicGFyZW50XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgPGRpdlxuICAgIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgW2lkXT1cImdldExpc3RJZChwYXJlbnQpXCJcbiAgICBbYXR0ci5kYXRhLW5vZGUtaWRdPVwicGFyZW50LmlkXCJcbiAgICBkcm9wTGlzdEdyb3VwPVwiYXgtdHJlZS12aWV3LW5vZGVzXCJcbiAgICAoZHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcCgkZXZlbnQsIHBhcmVudClcIlxuICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LWRyb3AtbGlzdFwiXG4gICAgcm9sZT1cImdyb3VwXCJcbiAgPlxuICAgIEBmb3IgKG5vZGUgb2YgY2hpbGRyZW47IHRyYWNrIG5vZGUuaWQpIHtcbiAgICAgIEBpZiAobm9kZS52aXNpYmxlICE9PSBmYWxzZSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2F4RHJhZ109XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgICAgICAgIFtkcmFnRGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgW2RyYWdEYXRhXT1cIm5vZGVcIlxuICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LW5vZGVcIlxuICAgICAgICAgIFtjbGFzcy5heC10cmVlLXZpZXctbm9kZS1zZWxlY3RlZF09XCJub2RlLnNlbGVjdGVkXCJcbiAgICAgICAgICBbY2xhc3MuYXgtdHJlZS12aWV3LW5vZGUtZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgW2NsYXNzLmF4LXRyZWUtdmlldy1ub2RlLWxvYWRpbmddPVwibm9kZS5sb2FkaW5nXCJcbiAgICAgICAgICBbY2xhc3MuYXgtdHJlZS12aWV3LW5vZGUtZm9jdXNlZF09XCJpc05vZGVGb2N1c2VkKG5vZGUuaWQpXCJcbiAgICAgICAgICByb2xlPVwidHJlZWl0ZW1cIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGV2ZWxdPVwiZ2V0Tm9kZUFyaWFMZXZlbChsZXZlbClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiZ2V0Tm9kZUFyaWFFeHBhbmRlZChub2RlKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJnZXROb2RlQXJpYVNlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWQgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LW5vZGUtY29udGVudFwiXG4gICAgICAgICAgICBbc3R5bGUucGFkZGluZy1pbmxpbmUtc3RhcnQucHhdPVwiZ2V0Tm9kZVBhZGRpbmdJbmxpbmUobGV2ZWwpXCJcbiAgICAgICAgICAgIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgICAgICAgICBbaWRdPVwiJ2F4LXRyZWUtdmlldy1ub2RlLWRyb3AtJyArIG5vZGUuaWRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1ub2RlLWlkXT1cIm5vZGUuaWRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10cmVlLW5vZGUtaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRyb3AtdHlwZV09XCInb250by1ub2RlJ1wiXG4gICAgICAgICAgICBkcm9wTGlzdEdyb3VwPVwiYXgtdHJlZS12aWV3LW5vZGVzXCJcbiAgICAgICAgICAgIChkcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wT250b05vZGUoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIChzZWxlY3RNb2RlKCkgPT09ICdzaW5nbGUnIHx8IChzZWxlY3RNb2RlKCkgPT09ICdtdWx0aXBsZScgJiYgY2hlY2tPbkNsaWNrKCkpKSAmJlxuICAgICAgICAgICAgICAgIG9uTm9kZUNsaWNrKG5vZGUsICRldmVudClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25Ob2RlRm9jdXMobm9kZS5pZClcIlxuICAgICAgICAgICAgKGJsdXIpPVwiZm9jdXNlZE5vZGVJZC5zZXQobnVsbClcIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cImlzTm9kZUZvY3VzZWQobm9kZS5pZCkgPyAwIDogLTFcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoZHJhZ01vZGUoKSA9PT0gJ2hhbmRsZXInKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJlZS12aWV3LWRyYWctaGFuZGxlXCIgYXhEcmFnSGFuZGxlIHRpdGxlPVwiRHJhZyB0byByZW9yZGVyXCI+IOKLruKLriA8L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LWV4cGFuZC10b2dnbGUgYXgtc21cIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVOb2RlKG5vZGUsICRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICBbY2xhc3MuYXgtdHJlZS12aWV3LWhhcy1jaGlsZHJlbl09XCJzaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmF4LXRyZWUtdmlldy1leHBhbmRlZF09XCJub2RlLmV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWQgfHwgbm9kZS5sb2FkaW5nXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShub2RlKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmIChub2RlLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtc3Bpbm5lciBmYS1zcGluIGF4LXRyZWUtdmlldy1sb2FkaW5nLXNwaW5uZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJub2RlLmV4cGFuZGVkID8gZGlyZWN0aW9uRXhwYW5kZWRJY29uKCkgOiBkaXJlY3Rpb25Db2xsYXBzZWRJY29uKClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy10b2dnbGUtaWNvblwiXG4gICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9heC1idXR0b24+XG5cbiAgICAgICAgICAgIEBpZiAoaXRlbVRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZSgpIVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFRlbXBsYXRlQ29udGV4dChub2RlLCBsZXZlbClcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQGlmIChzaG91bGRTaG93Q2hlY2tib3goKSkge1xuICAgICAgICAgICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZS12aWV3LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSA/IG51bGwgOiBub2RlLnNlbGVjdGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwidG9nZ2xlU2VsZWN0aW9uKG5vZGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgID48L2F4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNob3dJY29ucygpICYmIG5vZGUuaWNvbikge1xuICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJub2RlLmljb25cIiBjbGFzcz1cImF4LXRyZWUtdmlldy1ub2RlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cmVlLXZpZXctbm9kZS1sYWJlbFwiPnt7IG5vZGUubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0NoaWxkcmVuQmFkZ2UoKSAmJiAobm9kZS5jaGlsZHJlbkNvdW50IHx8IChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkpKSB7XG4gICAgICAgICAgICAgICAgPGF4LWJhZGdlXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUtdmlldy1jaGlsZHJlbi1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICBbdGV4dF09XCIobm9kZS5jaGlsZHJlbkNvdW50ID8/IG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKS50b1N0cmluZygpXCJcbiAgICAgICAgICAgICAgICA+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChub2RlLmV4cGFuZGVkICYmIG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXRyZWUtdmlldy1jaGlsZHJlblwiIHJvbGU9XCJncm91cFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZHJlbkxpc3RcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbiwgcGFyZW50OiBub2RlLCBsZXZlbDogbGV2ZWwgKyAxIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { NgModule } from '@angular/core';\nimport { AXTreeViewComponent } from './tree-view.component';\nimport * as i0 from \"@angular/core\";\nexport class AXTreeViewModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewModule, imports: [AXTreeViewComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewModule, imports: [AXTreeViewComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: AXTreeViewModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [AXTreeViewComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZS12aWV3L3NyYy9saWIvdHJlZS12aWV3Lm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUs1RCxNQUFNLE9BQU8sZ0JBQWdCOzhHQUFoQixnQkFBZ0I7K0dBQWhCLGdCQUFnQixZQUZqQixtQkFBbUI7K0dBRWxCLGdCQUFnQixZQUZqQixtQkFBbUI7OzJGQUVsQixnQkFBZ0I7a0JBSDVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYVHJlZVZpZXdDb21wb25lbnQgfSBmcm9tICcuL3RyZWUtdmlldy5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQVhUcmVlVmlld0NvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYVHJlZVZpZXdNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtdHJlZS12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90cmVlLXZpZXcvc3JjL2Fjb3JleC1jb21wb25lbnRzLXRyZWUtdmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|