diff --git a/bower.json b/bower.json index cc48d474..612d80e8 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "orgchart", - "version": "2.1.0", + "version": "2.1.1", "homepage": "https://github.com/dabeng/OrgChart", "authors": [ "dabeng " diff --git a/dist/css/jquery.orgchart.min.css b/dist/css/jquery.orgchart.min.css index f7bd3632..3b39c8a3 100644 --- a/dist/css/jquery.orgchart.min.css +++ b/dist/css/jquery.orgchart.min.css @@ -1,2 +1 @@ -.orgchart{box-sizing:border-box;display:inline-block;min-height:202px;min-width:202px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:linear-gradient(90deg,rgba(200,0,0,.15) 10%,rgba(0,0,0,0) 10%),linear-gradient(rgba(200,0,0,.15) 10%,rgba(0,0,0,0) 10%);background-size:10px 10px;border:1px dashed transparent;padding:20px}.orgchart .hidden,.orgchart~.hidden{display:none}.orgchart.b2t{transform:rotate(180deg)}.orgchart.l2r{position:absolute;transform:rotate(-90deg) rotateY(180deg);transform-origin:left top}.orgchart .verticalNodes ul{list-style:none;margin:0;padding-left:18px;text-align:left}.orgchart .verticalNodes ul:first-child{margin-top:2px}.orgchart .verticalNodes>td::before{content:'';border:1px solid rgba(217,83,79,.8)}.orgchart .verticalNodes>td>ul>li:first-child::before{box-sizing:border-box;top:-4px;height:30px;width:calc(50% - 2px);border-width:2px 0 0 2px}.orgchart .verticalNodes ul>li{position:relative}.orgchart .verticalNodes ul>li::after,.orgchart .verticalNodes ul>li::before{box-sizing:border-box;content:'';position:absolute;left:-6px;border-color:rgba(217,83,79,.8);border-style:solid;border-width:0 0 2px 2px}.orgchart .verticalNodes ul>li::before{top:-4px;height:30px;width:11px}.orgchart .verticalNodes ul>li::after{top:1px;height:100%}.orgchart .verticalNodes ul>li:first-child::after{box-sizing:border-box;top:24px;width:11px;border-width:2px 0 0 2px}.orgchart .verticalNodes ul>li:last-child::after{box-sizing:border-box;border-width:2px 0 0}.orgchart.r2l{position:absolute;transform:rotate(90deg);transform-origin:left top}.orgchart>.spinner{font-size:100px;margin-top:30px;color:rgba(68,157,68,.8)}.orgchart table{border-spacing:0;border-collapse:separate}.orgchart>table:first-child{margin:20px auto}.orgchart td{text-align:center;vertical-align:top;padding:0}.orgchart .lines:nth-child(3) td{box-sizing:border-box;height:20px}.orgchart .lines .topLine{border-top:2px solid rgba(217,83,79,.8)}.orgchart .lines .rightLine{border-right:1px solid rgba(217,83,79,.8);float:none;border-radius:0}.orgchart .lines .leftLine{border-left:1px solid rgba(217,83,79,.8);float:none;border-radius:0}.orgchart .lines .downLine{background-color:rgba(217,83,79,.8);margin:0 auto;height:20px;width:2px;float:none}.orgchart .node{box-sizing:border-box;display:inline-block;position:relative;margin:0;padding:3px;border:2px dashed transparent;text-align:center;width:130px}.orgchart.l2r .node,.orgchart.r2l .node{width:50px;height:130px}.orgchart .node>.spinner{position:absolute;top:calc(50% - 15px);left:calc(50% - 15px);vertical-align:middle;font-size:30px;color:rgba(68,157,68,.8)}.orgchart .node:hover{background-color:rgba(238,217,54,.5);transition:.5s;cursor:default;z-index:20}.orgchart .node.focused{background-color:rgba(238,217,54,.5)}.orgchart .ghost-node{position:fixed;left:-10000px;top:-10000px}.orgchart .ghost-node rect{fill:#fff;stroke:#bf0000}.orgchart .node.allowedDrop{border-color:rgba(68,157,68,.9)}.orgchart .node .title{text-align:center;font-size:12px;font-weight:700;height:20px;line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(217,83,79,.8);color:#fff;border-radius:4px 4px 0 0}.orgchart.b2t .node .title{transform:rotate(-180deg);transform-origin:center bottom}.orgchart.l2r .node .title{transform:rotate(-90deg) translate(-40px,-40px) rotateY(180deg);transform-origin:bottom center;width:120px}.orgchart.r2l .node .title{transform:rotate(-90deg) translate(-40px,-40px);transform-origin:bottom center;width:120px}.orgchart .node .title .symbol{float:left;margin-top:4px;margin-left:2px}.orgchart .node .content{box-sizing:border-box;width:100%;height:20px;font-size:11px;line-height:18px;border:1px solid rgba(217,83,79,.8);border-radius:0 0 4px 4px;text-align:center;background-color:#fff;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.orgchart.b2t .node .content{transform:rotate(180deg);transform-origin:center top}.orgchart.l2r .node .content{transform:rotate(-90deg) translate(-40px,-40px) rotateY(180deg);transform-origin:top center;width:120px}.orgchart.r2l .node .content{transform:rotate(-90deg) translate(-40px,-40px);transform-origin:top center;width:120px}.orgchart .node .edge{font-size:15px;position:absolute;color:rgba(68,157,68,.5);cursor:default;transition:.2s}.orgchart.noncollapsable .node .edge{display:none}.orgchart .edge:hover{color:#449d44;cursor:pointer}.orgchart .node .verticalEdge{width:calc(100% - 10px);width:-webkit-calc(100% - 10px);width:-moz-calc(100% - 10px);left:5px}.orgchart .node .topEdge{top:-4px}.orgchart .node .bottomEdge{bottom:-4px}.orgchart .node .horizontalEdge{width:15px;height:calc(100% - 10px);height:-webkit-calc(100% - 10px);height:-moz-calc(100% - 10px);top:5px}.orgchart .node .rightEdge{right:-4px}.orgchart .node .leftEdge{left:-4px}.orgchart .node .horizontalEdge::before{position:absolute;top:calc(50% - 7px)}.orgchart .node .rightEdge::before{right:3px}.orgchart .node .leftEdge::before{left:3px}.orgchart .node .toggleBtn{position:absolute;left:5px;bottom:-2px;color:rgba(68,157,68,.6)}.orgchart .node .toggleBtn:hover{color:rgba(68,157,68,.8)}.oc-export-btn{display:inline-block;position:absolute;right:5px;top:5px;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;touch-action:manipulation;cursor:pointer;user-select:none;color:#fff;background-color:#5cb85c;border:1px solid transparent;border-color:#4cae4c;border-radius:4px}.oc-export-btn[disabled]{cursor:not-allowed;box-shadow:none;opacity:.3}.oc-export-btn:active,.oc-export-btn:focus,.oc-export-btn:hover{background-color:#449d44;border-color:#347a34}.orgchart~.mask{position:absolute;top:0;right:0;bottom:0;left:0;z-index:999;text-align:center;background-color:rgba(0,0,0,.3)}.orgchart~.mask .spinner{position:absolute;top:calc(50% - 54px);left:calc(50% - 54px);color:rgba(255,255,255,.8);font-size:108px}.orgchart .node{transition:transform .3s,opacity .3s}.orgchart .slide-down{opacity:0;transform:translateY(40px)}.orgchart.l2r .node.slide-down,.orgchart.r2l .node.slide-down{transform:translateY(130px)}.orgchart .slide-up{opacity:0;transform:translateY(-40px)}.orgchart.l2r .node.slide-up,.orgchart.r2l .node.slide-up{transform:translateY(-130px)}.orgchart .slide-right{opacity:0;transform:translateX(130px)}.orgchart.l2r .node.slide-right,.orgchart.r2l .node.slide-right{transform:translateX(40px)}.orgchart .slide-left{opacity:0;transform:translateX(-130px)}.orgchart.l2r .node.slide-left,.orgchart.r2l .node.slide-left{transform:translateX(-40px)} -/*# sourceMappingURL=data:application/json;charset=utf8;base64,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QWMsYUFDZCxPQUFRLFFBQ1IsWUFBYSxLQUNiLE1BQU8sS0FDUCxpQkFBa0IsUUFDbEIsT0FBUSxJQUFJLE1BQU0sWUFDbEIsYUFBYyxRQUNkLGNBQWUsSUFHakIseUJBQ0UsT0FBUSxZQUNSLFdBQVksS0FDWixRQUFTLEdBRytCLHNCQUFyQixxQkFBckIscUJBQ0UsaUJBQWtCLFFBQ2xCLGFBQWMsUUFHaEIsZ0JBQ0UsU0FBVSxTQUNWLElBQUssRUFDTCxNQUFPLEVBQ1AsT0FBUSxFQUNSLEtBQU0sRUFDTixRQUFTLElBQ1QsV0FBWSxPQUNaLGlCQUFrQixlQUdwQix5QkFDRSxTQUFVLFNBQ1YsSUFBSyxpQkFDTCxLQUFNLGlCQUNOLE1BQU8scUJBQ1AsVUFBVyxNQUdiLGdCQUNFLFdBQVksVUFBVSxHQUFJLENBQUUsUUFBUSxJQUd0QyxzQkFDRSxRQUFTLEVBQ1QsVUFBVyxpQkFHYiwrQkFBZ0MsK0JBQzlCLFVBQVcsa0JBR2Isb0JBQ0UsUUFBUyxFQUNULFVBQVcsa0JBR2IsNkJBQThCLDZCQUM1QixVQUFXLG1CQUdiLHVCQUNFLFFBQVMsRUFDVCxVQUFXLGtCQUdiLGdDQUFpQyxnQ0FDL0IsVUFBVyxpQkFHYixzQkFDRSxRQUFTLEVBQ1QsVUFBVyxtQkFHYiwrQkFBZ0MsK0JBQzlCLFVBQVciLCJmaWxlIjoianF1ZXJ5Lm9yZ2NoYXJ0Lm1pbi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogalF1ZXJ5IE9yZ0NoYXJ0IFBsdWdpblxuICogaHR0cHM6Ly9naXRodWIuY29tL2RhYmVuZy9PcmdDaGFydFxuICpcbiAqIENvcHlyaWdodCAyMDE2LCBkYWJlbmdcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9kYWJlbmdcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6XG4gKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVFxuICovXG5cbi5vcmdjaGFydCB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWluLWhlaWdodDogMjAycHg7XG4gIG1pbi13aWR0aDogMjAycHg7XG4gIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLWtodG1sLXVzZXItc2VsZWN0OiBub25lO1xuICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoMjAwLCAwLCAwLCAwLjE1KSAxMCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAlKSwgbGluZWFyLWdyYWRpZW50KHJnYmEoMjAwLCAwLCAwLCAwLjE1KSAxMCUsIHJnYmEoMCwgMCwgMCwgMCkgMTAlKTtcbiAgYmFja2dyb3VuZC1zaXplOiAxMHB4IDEwcHg7XG4gIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDAsMCwwLDApO1xuICBwYWRkaW5nOiAyMHB4O1xufVxuXG4ub3JnY2hhcnQgLmhpZGRlbiwgLm9yZ2NoYXJ0fi5oaWRkZW4ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ub3JnY2hhcnQuYjJ0IHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcbn1cblxuLm9yZ2NoYXJ0LmwyciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKSByb3RhdGVZKDE4MGRlZyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgdG9wO1xufVxuXG4ub3JnY2hhcnQgLnZlcnRpY2FsTm9kZXMgdWwge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmctbGVmdDogMThweDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cbi5vcmdjaGFydCAudmVydGljYWxOb2RlcyB1bDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDJweDtcbn1cbi5vcmdjaGFydCAudmVydGljYWxOb2Rlcz50ZDo6YmVmb3JlIHtcbiAgY29udGVudDogJyc7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjE3LCA4MywgNzksIDAuOCk7XG59XG4ub3JnY2hhcnQgLnZlcnRpY2FsTm9kZXM+dGQ+dWw+bGk6Zmlyc3QtY2hpbGQ6OmJlZm9yZSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHRvcDogLTRweDtcbiAgaGVpZ2h0OiAzMHB4O1xuICB3aWR0aDogY2FsYyg1MCUgLSAycHgpO1xuICBib3JkZXItd2lkdGg6IDJweCAwIDAgMnB4O1xufVxuLm9yZ2NoYXJ0IC52ZXJ0aWNhbE5vZGVzIHVsPmxpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLm9yZ2NoYXJ0IC52ZXJ0aWNhbE5vZGVzIHVsPmxpOjpiZWZvcmUsXG4ub3JnY2hhcnQgLnZlcnRpY2FsTm9kZXMgdWw+bGk6OmFmdGVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29udGVudDogJyc7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogLTZweDtcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNywgODMsIDc5LCAwLjgpO1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICBib3JkZXItd2lkdGg6IDAgMCAycHggMnB4O1xufVxuLm9yZ2NoYXJ0IC52ZXJ0aWNhbE5vZGVzIHVsPmxpOjpiZWZvcmUge1xuICB0b3A6IC00cHg7XG4gIGhlaWdodDogMzBweDtcbiAgd2lkdGg6IDExcHg7XG59XG4ub3JnY2hhcnQgLnZlcnRpY2FsTm9kZXMgdWw+bGk6OmFmdGVyIHtcbiAgdG9wOiAxcHg7XG4gIGhlaWdodDogMTAwJTtcbn1cbi5vcmdjaGFydCAudmVydGljYWxOb2RlcyB1bD5saTpmaXJzdC1jaGlsZDo6YWZ0ZXIge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB0b3A6IDI0cHg7XG4gIHdpZHRoOiAxMXB4O1xuICBib3JkZXItd2lkdGg6IDJweCAwIDAgMnB4O1xufVxuLm9yZ2NoYXJ0IC52ZXJ0aWNhbE5vZGVzIHVsPmxpOmxhc3QtY2hpbGQ6OmFmdGVyIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgYm9yZGVyLXdpZHRoOiAycHggMCAwO1xufVxuXG4ub3JnY2hhcnQucjJsIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGxlZnQgdG9wO1xufVxuXG4ub3JnY2hhcnQ+LnNwaW5uZXIge1xuICBmb250LXNpemU6IDEwMHB4O1xuICBtYXJnaW4tdG9wOiAzMHB4O1xuICBjb2xvcjogcmdiYSg2OCwgMTU3LCA2OCwgMC44KTtcbn1cblxuLm9yZ2NoYXJ0IHRhYmxlIHtcbiAgYm9yZGVyLXNwYWNpbmc6IDA7XG4gIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7XG59XG5cbi5vcmdjaGFydD50YWJsZTpmaXJzdC1jaGlsZHtcbiAgbWFyZ2luOiAyMHB4IGF1dG87XG59XG5cbi5vcmdjaGFydCB0ZCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgcGFkZGluZzogMDtcbn1cblxuLm9yZ2NoYXJ0IC5saW5lczpudGgtY2hpbGQoMykgdGQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBoZWlnaHQ6IDIwcHg7XG59XG5cbi5vcmdjaGFydCAubGluZXMgLnRvcExpbmUge1xuICBib3JkZXItdG9wOiAycHggc29saWQgcmdiYSgyMTcsIDgzLCA3OSwgMC44KTtcbn1cblxuLm9yZ2NoYXJ0IC5saW5lcyAucmlnaHRMaW5lIHtcbiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgcmdiYSgyMTcsIDgzLCA3OSwgMC44KTtcbiAgZmxvYXQ6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5vcmdjaGFydCAubGluZXMgLmxlZnRMaW5lIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDIxNywgODMsIDc5LCAwLjgpO1xuICBmbG9hdDogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbn1cblxuLm9yZ2NoYXJ0IC5saW5lcyAuZG93bkxpbmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIxNywgODMsIDc5LCAwLjgpO1xuICBtYXJnaW46IDAgYXV0bztcbiAgaGVpZ2h0OiAyMHB4O1xuICB3aWR0aDogMnB4O1xuICBmbG9hdDogbm9uZTtcbn1cblxuLyogbm9kZSBzdHlsaW5nICovXG4ub3JnY2hhcnQgLm5vZGUge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAzcHg7XG4gIGJvcmRlcjogMnB4IGRhc2hlZCB0cmFuc3BhcmVudDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB3aWR0aDogMTMwcHg7XG59XG5cbi5vcmdjaGFydC5sMnIgLm5vZGUsIC5vcmdjaGFydC5yMmwgLm5vZGUge1xuICB3aWR0aDogNTBweDtcbiAgaGVpZ2h0OiAxMzBweDtcbn1cblxuLm9yZ2NoYXJ0IC5ub2RlPi5zcGlubmVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IGNhbGMoNTAlIC0gMTVweCk7XG4gIGxlZnQ6IGNhbGMoNTAlIC0gMTVweCk7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGZvbnQtc2l6ZTogMzBweDtcbiAgY29sb3I6IHJnYmEoNjgsIDE1NywgNjgsIDAuOCk7XG59XG5cbi5vcmdjaGFydCAubm9kZTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjM4LCAyMTcsIDU0LCAwLjUpO1xuICB0cmFuc2l0aW9uOiAuNXM7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgei1pbmRleDogMjA7XG59XG5cbi5vcmdjaGFydCAubm9kZS5mb2N1c2VkIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzgsIDIxNywgNTQsIDAuNSk7XG59XG5cbi5vcmdjaGFydCAuZ2hvc3Qtbm9kZSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogLTEwMDAwcHg7XG4gIHRvcDogLTEwMDAwcHg7XG59XG5cbi5vcmdjaGFydCAuZ2hvc3Qtbm9kZSByZWN0IHtcbiAgZmlsbDogI2ZmZmZmZjtcbiAgc3Ryb2tlOiAjYmYwMDAwO1xufVxuXG4ub3JnY2hhcnQgLm5vZGUuYWxsb3dlZERyb3Age1xuICBib3JkZXItY29sb3I6IHJnYmEoNjgsIDE1NywgNjgsIDAuOSk7XG59XG5cbi5vcmdjaGFydCAubm9kZSAudGl0bGUge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGhlaWdodDogMjBweDtcbiAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIxNywgODMsIDc5LCAwLjgpO1xuICBjb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7IFxufVxuXG4ub3JnY2hhcnQuYjJ0IC5ub2RlIC50aXRsZSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKC0xODBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgYm90dG9tO1xufVxuXG4ub3JnY2hhcnQubDJyIC5ub2RlIC50aXRsZSB7XG4gIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZykgdHJhbnNsYXRlKC00MHB4LCAtNDBweCkgcm90YXRlWSgxODBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gY2VudGVyO1xuICB3aWR0aDogMTIwcHg7XG59XG5cbi5vcmdjaGFydC5yMmwgLm5vZGUgLnRpdGxlIHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKSB0cmFuc2xhdGUoLTQwcHgsIC00MHB4KTtcbiAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tIGNlbnRlcjtcbiAgd2lkdGg6IDEyMHB4O1xufVxuXG4ub3JnY2hhcnQgLm5vZGUgLnRpdGxlIC5zeW1ib2wge1xuICBmbG9hdDogbGVmdDtcbiAgbWFyZ2luLXRvcDogNHB4O1xuICBtYXJnaW4tbGVmdDogMnB4O1xufVxuXG4ub3JnY2hhcnQgLm5vZGUgLmNvbnRlbnQge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAyMHB4O1xuICBmb250LXNpemU6IDExcHg7XG4gIGxpbmUtaGVpZ2h0OiAxOHB4O1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIxNywgODMsIDc5LCAwLjgpO1xuICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogIzMzMztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5vcmdjaGFydC5iMnQgLm5vZGUgLmNvbnRlbnQge1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgdG9wO1xufVxuXG4ub3JnY2hhcnQubDJyIC5ub2RlIC5jb250ZW50IHtcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKSB0cmFuc2xhdGUoLTQwcHgsIC00MHB4KSByb3RhdGVZKDE4MGRlZyk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBjZW50ZXI7XG4gIHdpZHRoOiAxMjBweDtcbn1cblxuLm9yZ2NoYXJ0LnIybCAubm9kZSAuY29udGVudCB7XG4gIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZykgdHJhbnNsYXRlKC00MHB4LCAtNDBweCk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBjZW50ZXI7XG4gIHdpZHRoOiAxMjBweDtcbn1cblxuLm9yZ2NoYXJ0IC5ub2RlIC5lZGdlIHtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGNvbG9yOiByZ2JhKDY4LCAxNTcsIDY4LCAwLjUpO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHRyYW5zaXRpb246IC4ycztcbn1cblxuLm9yZ2NoYXJ0Lm5vbmNvbGxhcHNhYmxlIC5ub2RlIC5lZGdlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLm9yZ2NoYXJ0IC5lZGdlOmhvdmVyIHtcbiAgY29sb3I6ICM0NDlkNDQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLm9yZ2NoYXJ0IC5ub2RlIC52ZXJ0aWNhbEVkZ2Uge1xuICB3aWR0aDogY2FsYygxMDAlIC0gMTBweCk7XG4gIHdpZHRoOiAtd2Via2l0LWNhbGMoMTAwJSAtIDEwcHgpO1xuICB3aWR0aDogLW1vei1jYWxjKDEwMCUgLSAxMHB4KTtcbiAgbGVmdDogNXB4O1xufVxuXG4ub3JnY2hhcnQgLm5vZGUgLnRvcEVkZ2Uge1xuICB0b3A6IC00cHg7XG59XG5cbi5vcmdjaGFydCAubm9kZSAuYm90dG9tRWRnZSB7XG4gIGJvdHRvbTogLTRweDtcbn1cblxuLm9yZ2NoYXJ0IC5ub2RlIC5ob3Jpem9udGFsRWRnZSB7XG4gIHdpZHRoOiAxNXB4O1xuICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDEwcHgpO1xuICBoZWlnaHQ6IC13ZWJraXQtY2FsYygxMDAlIC0gMTBweCk7XG4gIGhlaWdodDogLW1vei1jYWxjKDEwMCUgLSAxMHB4KTtcbiAgdG9wOiA1cHg7XG59XG5cbi5vcmdjaGFydCAubm9kZSAucmlnaHRFZGdlIHtcbiAgcmlnaHQ6IC00cHg7XG59XG5cbi5vcmdjaGFydCAubm9kZSAubGVmdEVkZ2Uge1xuICBsZWZ0OiAtNHB4O1xufVxuXG4ub3JnY2hhcnQgLm5vZGUgLmhvcml6b250YWxFZGdlOjpiZWZvcmUge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYyg1MCUgLSA3cHgpO1xufVxuXG4ub3JnY2hhcnQgLm5vZGUgLnJpZ2h0RWRnZTo6YmVmb3JlIHtcbiAgcmlnaHQ6IDNweDtcbn1cblxuLm9yZ2NoYXJ0IC5ub2RlIC5sZWZ0RWRnZTo6YmVmb3JlIHtcbiAgbGVmdDogM3B4O1xufVxuXG4ub3JnY2hhcnQgLm5vZGUgLnRvZ2dsZUJ0biB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogNXB4O1xuICBib3R0b206IC0ycHg7XG4gIGNvbG9yOiByZ2JhKDY4LCAxNTcsIDY4LCAwLjYpO1xufVxuXG4ub3JnY2hhcnQgLm5vZGUgLnRvZ2dsZUJ0bjpob3ZlciB7XG4gIGNvbG9yOiByZ2JhKDY4LCAxNTcsIDY4LCAwLjgpO1xufVxuXG4ub2MtZXhwb3J0LWJ0biB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogNXB4O1xuICB0b3A6IDVweDtcbiAgcGFkZGluZzogNnB4IDEycHg7XG4gIG1hcmdpbi1ib3R0b206IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNDI4NTcxNDM7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNWNiODVjO1xuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWNvbG9yOiAjNGNhZTRjO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG59XG5cbi5vYy1leHBvcnQtYnRuW2Rpc2FibGVkXSB7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIG9wYWNpdHk6IDAuMztcbn1cblxuLm9jLWV4cG9ydC1idG46aG92ZXIsLm9jLWV4cG9ydC1idG46Zm9jdXMsLm9jLWV4cG9ydC1idG46YWN0aXZlICB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0NDlkNDQ7XG4gIGJvcmRlci1jb2xvcjogIzM0N2EzNDtcbn1cblxuLm9yZ2NoYXJ0fi5tYXNrIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIHJpZ2h0OiAwO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDk5OTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDAuMyk7XG59XG5cbi5vcmdjaGFydH4ubWFzayAuc3Bpbm5lciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiBjYWxjKDUwJSAtIDU0cHgpO1xuICBsZWZ0OiBjYWxjKDUwJSAtIDU0cHgpO1xuICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjgpO1xuICBmb250LXNpemU6IDEwOHB4O1xufVxuXG4ub3JnY2hhcnQgLm5vZGUge1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4zcywgb3BhY2l0eSAwLjNzO1xufVxuXG4ub3JnY2hhcnQgLnNsaWRlLWRvd24ge1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNDBweCk7XG59XG5cbi5vcmdjaGFydC5sMnIgLm5vZGUuc2xpZGUtZG93biwgLm9yZ2NoYXJ0LnIybCAubm9kZS5zbGlkZS1kb3duIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEzMHB4KTtcbn1cblxuLm9yZ2NoYXJ0IC5zbGlkZS11cCB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNDBweCk7XG59XG5cbi5vcmdjaGFydC5sMnIgLm5vZGUuc2xpZGUtdXAsIC5vcmdjaGFydC5yMmwgLm5vZGUuc2xpZGUtdXAge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEzMHB4KTtcbn1cblxuLm9yZ2NoYXJ0IC5zbGlkZS1yaWdodCB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMzBweCk7XG59XG5cbi5vcmdjaGFydC5sMnIgLm5vZGUuc2xpZGUtcmlnaHQsIC5vcmdjaGFydC5yMmwgLm5vZGUuc2xpZGUtcmlnaHQge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNDBweCk7XG59XG5cbi5vcmdjaGFydCAuc2xpZGUtbGVmdCB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTMwcHgpO1xufVxuXG4ub3JnY2hhcnQubDJyIC5ub2RlLnNsaWRlLWxlZnQsIC5vcmdjaGFydC5yMmwgLm5vZGUuc2xpZGUtbGVmdCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNDBweCk7XG59Il19 */ +.orgchart{box-sizing:border-box;display:inline-block;min-height:202px;min-width:202px;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:linear-gradient(90deg,rgba(200,0,0,.15) 10%,rgba(0,0,0,0) 10%),linear-gradient(rgba(200,0,0,.15) 10%,rgba(0,0,0,0) 10%);background-size:10px 10px;border:1px dashed transparent;padding:20px}.orgchart .hidden,.orgchart~.hidden{display:none}.orgchart.b2t{transform:rotate(180deg)}.orgchart.l2r{position:absolute;transform:rotate(-90deg) rotateY(180deg);transform-origin:left top}.orgchart .verticalNodes ul{list-style:none;margin:0;padding-left:18px;text-align:left}.orgchart .verticalNodes ul:first-child{margin-top:2px}.orgchart .verticalNodes>td::before{content:'';border:1px solid rgba(217,83,79,.8)}.orgchart .verticalNodes>td>ul>li:first-child::before{box-sizing:border-box;top:-4px;height:30px;width:calc(50% - 2px);border-width:2px 0 0 2px}.orgchart .verticalNodes ul>li{position:relative}.orgchart .verticalNodes ul>li::after,.orgchart .verticalNodes ul>li::before{box-sizing:border-box;content:'';position:absolute;left:-6px;border-color:rgba(217,83,79,.8);border-style:solid;border-width:0 0 2px 2px}.orgchart .verticalNodes ul>li::before{top:-4px;height:30px;width:11px}.orgchart .verticalNodes ul>li::after{top:1px;height:100%}.orgchart .verticalNodes ul>li:first-child::after{box-sizing:border-box;top:24px;width:11px;border-width:2px 0 0 2px}.orgchart .verticalNodes ul>li:last-child::after{box-sizing:border-box;border-width:2px 0 0}.orgchart.r2l{position:absolute;transform:rotate(90deg);transform-origin:left top}.orgchart>.spinner{font-size:100px;margin-top:30px;color:rgba(68,157,68,.8)}.orgchart table{border-spacing:0;border-collapse:separate}.orgchart>table:first-child{margin:20px auto}.orgchart td{text-align:center;vertical-align:top;padding:0}.orgchart .lines:nth-child(3) td{box-sizing:border-box;height:20px}.orgchart .lines .topLine{border-top:2px solid rgba(217,83,79,.8)}.orgchart .lines .rightLine{border-right:1px solid rgba(217,83,79,.8);float:none;border-radius:0}.orgchart .lines .leftLine{border-left:1px solid rgba(217,83,79,.8);float:none;border-radius:0}.orgchart .lines .downLine{background-color:rgba(217,83,79,.8);margin:0 auto;height:20px;width:2px;float:none}.orgchart .node{box-sizing:border-box;display:inline-block;position:relative;margin:0;padding:3px;border:2px dashed transparent;text-align:center;width:130px}.orgchart.l2r .node,.orgchart.r2l .node{width:50px;height:130px}.orgchart .node>.spinner{position:absolute;top:calc(50% - 15px);left:calc(50% - 15px);vertical-align:middle;font-size:30px;color:rgba(68,157,68,.8)}.orgchart .node:hover{background-color:rgba(238,217,54,.5);transition:.5s;cursor:default;z-index:20}.orgchart .node.focused{background-color:rgba(238,217,54,.5)}.orgchart .ghost-node{position:fixed;left:-10000px;top:-10000px}.orgchart .ghost-node rect{fill:#fff;stroke:#bf0000}.orgchart .node.allowedDrop{border-color:rgba(68,157,68,.9)}.orgchart .node .title{text-align:center;font-size:12px;font-weight:700;height:20px;line-height:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(217,83,79,.8);color:#fff;border-radius:4px 4px 0 0}.orgchart.b2t .node .title{transform:rotate(-180deg);transform-origin:center bottom}.orgchart.l2r .node .title{transform:rotate(-90deg) translate(-40px,-40px) rotateY(180deg);transform-origin:bottom center;width:120px}.orgchart.r2l .node .title{transform:rotate(-90deg) translate(-40px,-40px);transform-origin:bottom center;width:120px}.orgchart .node .title .symbol{float:left;margin-top:4px;margin-left:2px}.orgchart .node .content{box-sizing:border-box;width:100%;height:20px;font-size:11px;line-height:18px;border:1px solid rgba(217,83,79,.8);border-radius:0 0 4px 4px;text-align:center;background-color:#fff;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.orgchart.b2t .node .content{transform:rotate(180deg);transform-origin:center top}.orgchart.l2r .node .content{transform:rotate(-90deg) translate(-40px,-40px) rotateY(180deg);transform-origin:top center;width:120px}.orgchart.r2l .node .content{transform:rotate(-90deg) translate(-40px,-40px);transform-origin:top center;width:120px}.orgchart .node .edge{font-size:15px;position:absolute;color:rgba(68,157,68,.5);cursor:default;transition:.2s}.orgchart.noncollapsable .node .edge{display:none}.orgchart .edge:hover{color:#449d44;cursor:pointer}.orgchart .node .verticalEdge{width:calc(100% - 10px);width:-webkit-calc(100% - 10px);width:-moz-calc(100% - 10px);left:5px}.orgchart .node .topEdge{top:-4px}.orgchart .node .bottomEdge{bottom:-4px}.orgchart .node .horizontalEdge{width:15px;height:calc(100% - 10px);height:-webkit-calc(100% - 10px);height:-moz-calc(100% - 10px);top:5px}.orgchart .node .rightEdge{right:-4px}.orgchart .node .leftEdge{left:-4px}.orgchart .node .horizontalEdge::before{position:absolute;top:calc(50% - 7px)}.orgchart .node .rightEdge::before{right:3px}.orgchart .node .leftEdge::before{left:3px}.orgchart .node .toggleBtn{position:absolute;left:5px;bottom:-2px;color:rgba(68,157,68,.6)}.orgchart .node .toggleBtn:hover{color:rgba(68,157,68,.8)}.oc-export-btn{display:inline-block;position:absolute;right:5px;top:5px;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;touch-action:manipulation;cursor:pointer;user-select:none;color:#fff;background-color:#5cb85c;border:1px solid transparent;border-color:#4cae4c;border-radius:4px}.oc-export-btn[disabled]{cursor:not-allowed;box-shadow:none;opacity:.3}.oc-export-btn:active,.oc-export-btn:focus,.oc-export-btn:hover{background-color:#449d44;border-color:#347a34}.orgchart~.mask{position:absolute;top:0;right:0;bottom:0;left:0;z-index:999;text-align:center;background-color:rgba(0,0,0,.3)}.orgchart~.mask .spinner{position:absolute;top:calc(50% - 54px);left:calc(50% - 54px);color:rgba(255,255,255,.8);font-size:108px}.orgchart .node{transition:transform .3s,opacity .3s}.orgchart .slide-down{opacity:0;transform:translateY(40px)}.orgchart.l2r .node.slide-down,.orgchart.r2l .node.slide-down{transform:translateY(130px)}.orgchart .slide-up{opacity:0;transform:translateY(-40px)}.orgchart.l2r .node.slide-up,.orgchart.r2l .node.slide-up{transform:translateY(-130px)}.orgchart .slide-right{opacity:0;transform:translateX(130px)}.orgchart.l2r .node.slide-right,.orgchart.r2l .node.slide-right{transform:translateX(40px)}.orgchart .slide-left{opacity:0;transform:translateX(-130px)}.orgchart.l2r .node.slide-left,.orgchart.r2l .node.slide-left{transform:translateX(-40px)} \ No newline at end of file diff --git a/dist/js/jquery.orgchart.min.js b/dist/js/jquery.orgchart.min.js index d30eb36d..177b20d2 100644 --- a/dist/js/jquery.orgchart.min.js +++ b/dist/js/jquery.orgchart.min.js @@ -1,2 +1,2 @@ "use strict";!function(e){"object"==typeof module&&"object"==typeof module.exports?e(require("jquery"),window,document):e(jQuery,window,document)}(function(e,t,i,n){var s=function(t,i){this.$chartContainer=e(t),this.opts=i,this.defaultOptions={nodeTitle:"name",nodeId:"id",toggleSiblingsResp:!1,visibleLevel:999,chartClass:"",exportButton:!1,exportFilename:"OrgChart",exportFileextension:"png",parentNodeSymbol:"fa-users",draggable:!1,direction:"t2b",pan:!1,zoom:!1,zoominLimit:7,zoomoutLimit:.5}};s.prototype={init:function(t){var i=this;this.options=e.extend({},this.defaultOptions,this.opts,t);var n=this.$chartContainer;this.$chart&&this.$chart.remove();var s=this.options.data,a=this.$chart=e("
",{data:{options:this.options},class:"orgchart"+(""!==this.options.chartClass?" "+this.options.chartClass:"")+("t2b"!==this.options.direction?" "+this.options.direction:""),click:function(t){e(t.target).closest(".node").length||a.find(".node.focused").removeClass("focused")}});return"undefined"!=typeof MutationObserver&&this.triggerInitEvent(),"object"===e.type(s)?s instanceof e?this.buildHierarchy(a,this.buildJsonDS(s.children()),0,this.options):this.buildHierarchy(a,this.options.ajaxURL?s:this.attachRel(s,"00")):(a.append(''),e.ajax({url:s,dataType:"json"}).done(function(e,t,n){i.buildHierarchy(a,i.options.ajaxURL?e:i.attachRel(e,"00"),0,i.options)}).fail(function(e,t,i){console.log(i)}).always(function(){a.children(".spinner").remove()})),n.append(a),this.options.exportButton&&!n.find(".oc-export-btn").length&&this.attachExportButton(),this.options.pan&&this.bindPan(),this.options.zoom&&this.bindZoom(),this},triggerInitEvent:function(){var t=this,i=new MutationObserver(function(n){i.disconnect();e:for(var s=0;s",{class:"oc-export-btn"+(""!==this.options.chartClass?" "+this.options.chartClass:""),text:"Export",click:function(e){e.preventDefault(),t.export()}});this.$chartContainer.append(i)},setOptions:function(e,t){return"string"==typeof e&&("pan"===e&&(t?this.bindPan():this.unbindPan()),"zoom"===e&&(t?this.bindZoom():this.unbindZoom())),"object"==typeof e&&(e.data?this.init(e):(void 0!==e.pan&&(e.pan?this.bindPan():this.unbindPan()),void 0!==e.zoom&&(e.zoom?this.bindZoom():this.unbindZoom()))),this},panStartHandler:function(t){var i=e(t.delegateTarget);if(e(t.target).closest(".node").length||t.touches&&t.touches.length>1)i.data("panning",!1);else{i.css("cursor","move").data("panning",!0);var n=0,s=0,a=i.css("transform");if("none"!==a){var o=a.split(",");-1===a.indexOf("3d")?(n=parseInt(o[4]),s=parseInt(o[5])):(n=parseInt(o[12]),s=parseInt(o[13]))}var d=0,r=0;if(t.targetTouches){if(1===t.targetTouches.length)d=t.targetTouches[0].pageX-n,r=t.targetTouches[0].pageY-s;else if(t.targetTouches.length>1)return}else d=t.pageX-n,r=t.pageY-s;i.on("mousemove touchmove",function(e){if(i.data("panning")){var t=0,n=0;if(e.targetTouches){if(1===e.targetTouches.length)t=e.targetTouches[0].pageX-d,n=e.targetTouches[0].pageY-r;else if(e.targetTouches.length>1)return}else t=e.pageX-d,n=e.pageY-r;var s=i.css("transform");if("none"===s)-1===s.indexOf("3d")?i.css("transform","matrix(1, 0, 0, 1, "+t+", "+n+")"):i.css("transform","matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, "+t+", "+n+", 0, 1)");else{var a=s.split(",");-1===s.indexOf("3d")?(a[4]=" "+t,a[5]=" "+n+")"):(a[12]=" "+t,a[13]=" "+n),i.css("transform",a.join(","))}}})}},panEndHandler:function(e){e.data.chart.data("panning")&&e.data.chart.data("panning",!1).css("cursor","default").off("mousemove")},bindPan:function(){this.$chartContainer.css("overflow","hidden"),this.$chart.on("mousedown touchstart",this.panStartHandler),e(i).on("mouseup touchend",{chart:this.$chart},this.panEndHandler)},unbindPan:function(){this.$chartContainer.css("overflow","auto"),this.$chart.off("mousedown touchstart",this.panStartHandler),e(i).off("mouseup touchend",this.panEndHandler)},zoomWheelHandler:function(e){var t=e.data.oc;e.preventDefault();var i=1+(e.originalEvent.deltaY>0?-.2:.2);t.setChartScale(t.$chart,i)},zoomStartHandler:function(e){if(e.touches&&2===e.touches.length){var t=e.data.oc;t.$chart.data("pinching",!0);var i=t.getPinchDist(e);t.$chart.data("pinchDistStart",i)}},zoomingHandler:function(e){var t=e.data.oc;if(t.$chart.data("pinching")){var i=t.getPinchDist(e);t.$chart.data("pinchDistEnd",i)}},zoomEndHandler:function(e){var t=e.data.oc;if(t.$chart.data("pinching")){t.$chart.data("pinching",!1);var i=t.$chart.data("pinchDistEnd")-t.$chart.data("pinchDistStart");i>0?t.setChartScale(t.$chart,1.2):i<0&&t.setChartScale(t.$chart,.8)}},bindZoom:function(){this.$chartContainer.on("wheel",{oc:this},this.zoomWheelHandler),this.$chartContainer.on("touchstart",{oc:this},this.zoomStartHandler),e(i).on("touchmove",{oc:this},this.zoomingHandler),e(i).on("touchend",{oc:this},this.zoomEndHandler)},unbindZoom:function(){this.$chartContainer.off("wheel",this.zoomWheelHandler),this.$chartContainer.off("touchstart",this.zoomStartHandler),e(i).off("touchmove",this.zoomingHandler),e(i).off("touchend",this.zoomEndHandler)},getPinchDist:function(e){return Math.sqrt((e.touches[0].clientX-e.touches[1].clientX)*(e.touches[0].clientX-e.touches[1].clientX)+(e.touches[0].clientY-e.touches[1].clientY)*(e.touches[0].clientY-e.touches[1].clientY))},setChartScale:function(e,i){var n=e.data("options"),s=e.css("transform"),a="",o=1;"none"===s?e.css("transform","scale("+i+","+i+")"):(a=s.split(","),-1===s.indexOf("3d")?(o=Math.abs(t.parseFloat(a[3])*i))>n.zoomoutLimit&&on.zoomoutLimit&&o0?1:0),e.children&&e.children.forEach(function(t){i.attachRel(t,"1"+(e.children.length>1?1:0))}),e},loopChart:function(t){var i=this,n=t.find("tr:first"),s={id:n.find(".node")[0].id};return n.siblings(":last").children().each(function(){s.children||(s.children=[]),s.children.push(i.loopChart(e(this)))}),s},getHierarchy:function(){if(void 0===this.$chart)return"Error: orgchart does not exist";if(!this.$chart.find(".node").length)return"Error: nodes do not exist";var e=!0;return this.$chart.find(".node").each(function(){if(!this.id)return e=!1,!1}),e?this.loopChart(this.$chart):"Error: All nodes of orghcart to be exported must have data-id attribute!"},getNodeState:function(e,t){var i={};if("parent"===(t=t||"self")){if((i=e.closest(".nodes").siblings(":first")).length)return i.is(".hidden")||!i.is(".hidden")&&i.closest(".nodes").is(".hidden")?{exist:!0,visible:!1}:{exist:!0,visible:!0}}else if("children"===t){if((i=e.closest("tr").siblings(":last")).length)return i.is(".hidden")?{exist:!0,visible:!1}:{exist:!0,visible:!0}}else if("siblings"===t){if((i=e.closest("table").parent().siblings()).length)return i.is(".hidden")||i.parent().is(".hidden")?{exist:!0,visible:!1}:{exist:!0,visible:!0}}else if((i=e).length)return i.closest(".nodes").length&&i.closest(".nodes").is(".hidden")||i.closest("table").parent().length&&i.closest("table").parent().is(".hidden")||i.parent().is("li")&&(i.closest("ul").is(".hidden")||i.closest("verticalNodes").is(".hidden"))?{exist:!0,visible:!1}:{exist:!0,visible:!0};return{exist:!1,visible:!1}},getRelatedNodes:function(t,i){return t&&t instanceof e&&t.is(".node")?"parent"===i?t.closest(".nodes").parent().children(":first").find(".node"):"children"===i?t.closest("tr").siblings(".nodes").children().find(".node:first"):"siblings"===i?t.closest("table").parent().siblings().find(".node:first"):e():e()},hideParentEnd:function(t){e(t.target).removeClass("sliding"),t.data.upperLevel.addClass("hidden").slice(1).removeAttr("style")},hideParent:function(e){var t=e.closest(".nodes").siblings();t.eq(0).find(".spinner").length&&e.closest(".orgchart").data("inAjax",!1),this.getNodeState(e,"siblings").visible&&this.hideSiblings(e),t.slice(1).css("visibility","hidden");var i=t.eq(0).find(".node");this.getNodeState(i).visible&&i.addClass("sliding slide-down").one("transitionend",{upperLevel:t},this.hideParentEnd),this.getNodeState(i,"parent").visible&&this.hideParent(i)},showParentEnd:function(t){var i=t.data.node;e(t.target).removeClass("sliding"),this.isInAction(i)&&this.switchVerticalArrow(i.children(".topEdge"))},showParent:function(e){var t=e.closest(".nodes").siblings().removeClass("hidden");t.eq(2).children().slice(1,-1).addClass("hidden");var i=t.eq(0).find(".node");this.repaint(i[0]),i.addClass("sliding").removeClass("slide-down").one("transitionend",{node:e},this.showParentEnd.bind(this))},stopAjax:function(e){e.find(".spinner").length&&e.closest(".orgchart").data("inAjax",!1)},isVisibleNode:function(t,i){return this.getNodeState(e(i)).visible},hideChildrenEnd:function(e){var t=e.data.node;e.data.animatedNodes.removeClass("sliding"),e.data.isVerticalDesc?e.data.lowerLevel.addClass("hidden"):(e.data.animatedNodes.closest(".nodes").prevAll(".lines").removeAttr("style").addBack().addClass("hidden"),e.data.lowerLevel.last().find(".verticalNodes").addClass("hidden")),this.isInAction(t)&&this.switchVerticalArrow(t.children(".bottomEdge"))},hideChildren:function(e){var t=e.closest("tr").siblings();this.stopAjax(t.last());var i=t.last().find(".node").filter(this.isVisibleNode.bind(this)),n=!!t.last().is(".verticalNodes");n||i.closest("table").closest("tr").prevAll(".lines").css("visibility","hidden"),this.repaint(i.get(0)),i.addClass("sliding slide-up").eq(0).one("transitionend",{animatedNodes:i,lowerLevel:t,isVerticalDesc:n,node:e},this.hideChildrenEnd.bind(this))},showChildrenEnd:function(e){var t=e.data.node;e.data.animatedNodes.removeClass("sliding"),this.isInAction(t)&&this.switchVerticalArrow(t.children(".bottomEdge"))},showChildren:function(e){var t=e.closest("tr").siblings(),i=!!t.is(".verticalNodes")?t.removeClass("hidden").find(".node").filter(this.isVisibleNode.bind(this)):t.removeClass("hidden").eq(2).children().find(".node:first").filter(this.isVisibleNode.bind(this));this.repaint(i.get(0)),i.addClass("sliding").removeClass("slide-up").eq(0).one("transitionend",{node:e,animatedNodes:i},this.showChildrenEnd.bind(this))},hideSiblingsEnd:function(e){var t=e.data.node,i=e.data.nodeContainer,n=e.data.direction;e.data.lines.removeAttr("style");var s=n?"left"===n?i.prevAll(":not(.hidden)"):i.nextAll(":not(.hidden)"):i.siblings();i.closest(".nodes").prev().children(":not(.hidden)").slice(1,n?2*s.length+1:-1).addClass("hidden"),e.data.animatedNodes.removeClass("sliding"),s.find(".node:gt(0)").filter(this.isVisibleNode.bind(this)).removeClass("slide-left slide-right").addClass("slide-up"),s.find(".lines, .nodes, .verticalNodes").addClass("hidden").end().addClass("hidden"),this.isInAction(t)&&this.switchHorizontalArrow(t)},hideSiblings:function(e,t){var i=e.closest("table").parent();i.siblings().find(".spinner").length&&e.closest(".orgchart").data("inAjax",!1),t?"left"===t?i.prevAll().find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-right"):i.nextAll().find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-left"):(i.prevAll().find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-right"),i.nextAll().find(".node").filter(this.isVisibleNode.bind(this)).addClass("sliding slide-left"));var n=i.siblings().find(".sliding"),s=n.closest(".nodes").prevAll(".lines").css("visibility","hidden");n.eq(0).one("transitionend",{node:e,nodeContainer:i,direction:t,animatedNodes:n,lines:s},this.hideSiblingsEnd.bind(this))},showSiblingsEnd:function(e){var t=e.data.node;e.data.visibleNodes.removeClass("sliding"),this.isInAction(t)&&(this.switchHorizontalArrow(t),t.children(".topEdge").removeClass("fa-chevron-up").addClass("fa-chevron-down"))},showRelatedParentEnd:function(t){e(t.target).removeClass("sliding")},showSiblings:function(t,i){var n=e();n=i?"left"===i?t.closest("table").parent().prevAll().removeClass("hidden"):t.closest("table").parent().nextAll().removeClass("hidden"):t.closest("table").parent().siblings().removeClass("hidden");var s=t.closest("table").closest("tr").siblings();if(i?s.eq(2).children(".hidden").slice(0,2*n.length).removeClass("hidden"):s.eq(2).children(".hidden").removeClass("hidden"),!this.getNodeState(t,"parent").visible){s.removeClass("hidden");var a=s.find(".node")[0];this.repaint(a),e(a).addClass("sliding").removeClass("slide-down").one("transitionend",this.showRelatedParentEnd)}var o=n.find(".node").filter(this.isVisibleNode.bind(this));this.repaint(o.get(0)),o.addClass("sliding").removeClass("slide-left slide-right"),o.eq(0).one("transitionend",{node:t,visibleNodes:o},this.showSiblingsEnd.bind(this))},startLoading:function(t){var i=this.$chart;return(void 0===i.data("inAjax")||!0!==i.data("inAjax"))&&(t.addClass("hidden"),t.parent().append('').children().not(".spinner").css("opacity",.2),i.data("inAjax",!0),e(".oc-export-btn"+(""!==this.options.chartClass?"."+this.options.chartClass:"")).prop("disabled",!0),!0)},endLoading:function(t){var i=t.parent();t.removeClass("hidden"),i.find(".spinner").remove(),i.children().removeAttr("style"),this.$chart.data("inAjax",!1),e(".oc-export-btn"+(""!==this.options.chartClass?"."+this.options.chartClass:"")).prop("disabled",!1)},isInAction:function(e){return e.children(".edge").attr("class").indexOf("fa-")>-1},switchVerticalArrow:function(e){e.toggleClass("fa-chevron-up").toggleClass("fa-chevron-down")},switchHorizontalArrow:function(e){var t=this.options;if(t.toggleSiblingsResp&&(void 0===t.ajaxURL||e.closest(".nodes").data("siblingsLoaded"))){var i=e.closest("table").parent().prev();i.length&&(i.is(".hidden")?e.children(".leftEdge").addClass("fa-chevron-left").removeClass("fa-chevron-right"):e.children(".leftEdge").addClass("fa-chevron-right").removeClass("fa-chevron-left"));var n=e.closest("table").parent().next();n.length&&(n.is(".hidden")?e.children(".rightEdge").addClass("fa-chevron-right").removeClass("fa-chevron-left"):e.children(".rightEdge").addClass("fa-chevron-left").removeClass("fa-chevron-right"))}else{var s=e.closest("table").parent().siblings(),a=!!s.length&&!s.is(".hidden");e.children(".leftEdge").toggleClass("fa-chevron-right",a).toggleClass("fa-chevron-left",!a),e.children(".rightEdge").toggleClass("fa-chevron-left",a).toggleClass("fa-chevron-right",!a)}},repaint:function(e){e&&(e.style.offsetWidth=e.offsetWidth)},nodeEnterLeaveHandler:function(t){var i=e(t.delegateTarget),n=!1,s=i.children(".topEdge"),a=(i.children(".rightEdge"),i.children(".bottomEdge")),o=i.children(".leftEdge");"mouseenter"===t.type?(s.length&&(n=this.getNodeState(i,"parent").visible,s.toggleClass("fa-chevron-up",!n).toggleClass("fa-chevron-down",n)),a.length&&(n=this.getNodeState(i,"children").visible,a.toggleClass("fa-chevron-down",!n).toggleClass("fa-chevron-up",n)),o.length&&this.switchHorizontalArrow(i)):i.children(".edge").removeClass("fa-chevron-up fa-chevron-down fa-chevron-right fa-chevron-left")},nodeClickHandler:function(t){this.$chart.find(".focused").removeClass("focused"),e(t.delegateTarget).addClass("focused")},loadNodes:function(t,i,n){var s=this;this.options;e.ajax({url:i,dataType:"json"}).done(function(i){s.$chart.data("inAjax")&&("parent"===t?e.isEmptyObject(i)||s.addParent(n.parent(),i):"children"===t?i.children.length&&s.addChildren(n.parent(),i[t]):s.addSiblings(n.parent(),i.siblings?i.siblings:i))}).fail(function(){console.log("Failed to get "+t+" data")}).always(function(){s.endLoading(n)})},HideFirstParentEnd:function(e){var t=e.data.topEdge,i=t.parent();this.isInAction(i)&&(this.switchVerticalArrow(t),this.switchHorizontalArrow(i))},topEdgeClickHandler:function(t){t.stopPropagation();var i=e(t.target),n=e(t.delegateTarget),s=this.getNodeState(n,"parent");if(s.exist){var a=n.closest("table").closest("tr").siblings(":first").find(".node");if(a.is(".sliding"))return;s.visible?(this.hideParent(n),a.one("transitionend",{topEdge:i},this.HideFirstParentEnd.bind(this))):this.showParent(n)}else if(this.startLoading(i)){var o=this.options,d=e.isFunction(o.ajaxURL.parent)?o.ajaxURL.parent(t.data.nodeData):o.ajaxURL.parent+n[0].id;this.loadNodes("parent",d,i)}},bottomEdgeClickHandler:function(t){t.stopPropagation();var i=e(t.target),n=e(t.delegateTarget),s=this.getNodeState(n,"children");if(s.exist){if(n.closest("tr").siblings(":last").find(".sliding").length)return;s.visible?this.hideChildren(n):this.showChildren(n)}else if(this.startLoading(i)){var a=this.options,o=e.isFunction(a.ajaxURL.children)?a.ajaxURL.children(t.data.nodeData):a.ajaxURL.children+n[0].id;this.loadNodes("children",o,i)}},hEdgeClickHandler:function(t){t.stopPropagation();var i=e(t.target),n=e(t.delegateTarget),s=this.options,a=this.getNodeState(n,"siblings");if(a.exist){if(n.closest("table").parent().siblings().find(".sliding").length)return;if(s.toggleSiblingsResp){var o=n.closest("table").parent().prev(),d=n.closest("table").parent().next();i.is(".leftEdge")?o.is(".hidden")?this.showSiblings(n,"left"):this.hideSiblings(n,"left"):d.is(".hidden")?this.showSiblings(n,"right"):this.hideSiblings(n,"right")}else a.visible?this.hideSiblings(n):this.showSiblings(n)}else if(this.startLoading(i)){var r=n[0].id,l=this.getNodeState(n,"parent").exist?e.isFunction(s.ajaxURL.siblings)?s.ajaxURL.siblings(t.data.nodeData):s.ajaxURL.siblings+r:e.isFunction(s.ajaxURL.families)?s.ajaxURL.families(t.data.nodeData):s.ajaxURL.families+r;this.loadNodes("siblings",l,i)}},expandVNodesEnd:function(e){e.data.vNodes.removeClass("sliding")},collapseVNodesEnd:function(e){e.data.vNodes.removeClass("sliding").closest("ul").addClass("hidden")},toggleVNodes:function(t){var i=e(t.target),n=i.parent().next(),s=n.find(".node"),a=n.children().children(".node");a.is(".sliding")||(i.toggleClass("fa-plus-square fa-minus-square"),s.eq(0).is(".slide-up")?(n.removeClass("hidden"),this.repaint(a.get(0)),a.addClass("sliding").removeClass("slide-up").eq(0).one("transitionend",{vNodes:a},this.expandVNodesEnd)):(s.addClass("sliding slide-up").eq(0).one("transitionend",{vNodes:s},this.collapseVNodesEnd),s.find(".toggleBtn").removeClass("fa-minus-square").addClass("fa-plus-square")))},createGhostNode:function(n){var s=e(n.target),a=this.options,o=n.originalEvent,d=/firefox/.test(t.navigator.userAgent.toLowerCase());d&&o.dataTransfer.setData("text/html","hack for firefox");var r,l;i.querySelector(".ghost-node")?(r=s.closest(".orgchart").children(".ghost-node").get(0),l=e(r).children().get(0)):((r=i.createElementNS("http://www.w3.org/2000/svg","svg")).classList.add("ghost-node"),l=i.createElementNS("http://www.w3.org/2000/svg","rect"),r.appendChild(l),s.closest(".orgchart").append(r));var h=s.closest(".orgchart").css("transform").split(","),c=Math.abs(t.parseFloat("t2b"===a.direction||"b2t"===a.direction?h[0].slice(h[0].indexOf("(")+1):h[1]));r.setAttribute("width",s.outerWidth(!1)),r.setAttribute("height",s.outerHeight(!1)),l.setAttribute("x",5*c),l.setAttribute("y",5*c),l.setAttribute("width",120*c),l.setAttribute("height",40*c),l.setAttribute("rx",4*c),l.setAttribute("ry",4*c),l.setAttribute("stroke-width",1*c);var g=o.offsetX*c,p=o.offsetY*c;if("l2r"===a.direction?(g=o.offsetY*c,p=o.offsetX*c):"r2l"===a.direction?(g=s.outerWidth(!1)-o.offsetY*c,p=o.offsetX*c):"b2t"===a.direction&&(g=s.outerWidth(!1)-o.offsetX*c,p=s.outerHeight(!1)-o.offsetY*c),d){l.setAttribute("fill","rgb(255, 255, 255)"),l.setAttribute("stroke","rgb(191, 0, 0)");var f=i.createElement("img");f.src="data:image/svg+xml;utf8,"+(new XMLSerializer).serializeToString(r),o.dataTransfer.setDragImage(f,g,p)}else o.dataTransfer.setDragImage(r,g,p)},filterAllowedDropNodes:function(t){var i=this.options,n=t.closest(".nodes").siblings().eq(0).find(".node:first"),s=t.closest("table").find(".node");this.$chart.data("dragged",t).find(".node").each(function(a,o){-1===s.index(o)&&(i.dropCriteria?i.dropCriteria(t,n,e(o))&&e(o).addClass("allowedDrop"):e(o).addClass("allowedDrop"))})},dragstartHandler:function(t){"none"!==this.$chart.css("transform")&&this.createGhostNode(t),this.filterAllowedDropNodes(e(t.target))},dragoverHandler:function(t){t.preventDefault(),e(t.delegateTarget).is(".allowedDrop")||(t.originalEvent.dataTransfer.dropEffect="none")},dragendHandler:function(e){this.$chart.find(".allowedDrop").removeClass("allowedDrop")},dropHandler:function(t){var i=e(t.delegateTarget),n=this.$chart.data("dragged"),s=n.closest(".nodes").siblings().eq(0).children(),a=e.Event("nodedrop.orgchart");if(this.$chart.trigger(a,{draggedNode:n,dragZone:s.children(),dropZone:i}),!a.isDefaultPrevented()){if(i.closest("tr").siblings().length){var o=parseInt(i.parent().attr("colspan"))+2,d='';i.closest("tr").next().addBack().children().attr("colspan",o),n.find(".horizontalEdge").length||n.append(d),i.closest("tr").siblings().eq(1).children(":last").before('').end().next().append(n.closest("table").parent());var r=n.closest("table").parent().siblings().find(".node:first");1===r.length&&r.append(d)}else i.append('').parent().attr("colspan",2).parent().after('
').siblings(":last").append(n.find(".horizontalEdge").remove().end().closest("table").parent());var l=parseInt(s.attr("colspan"));if(l>2){s.attr("colspan",l-2).parent().next().children().attr("colspan",l-2).end().next().children().slice(1,3).remove();var h=s.parent().siblings(".nodes").children().find(".node:first");1===h.length&&h.find(".horizontalEdge").remove()}else s.removeAttr("colspan").find(".bottomEdge").remove().end().end().siblings().remove()}},touchstartHandler:function(e){console.log("orgChart: touchstart 1: touchHandled="+this.touchHandled+", touchMoved="+this.touchMoved+", target="+e.target.innerText),this.touchHandled||(this.touchHandled=!0,this.touchMoved=!1,e.preventDefault())},touchmoveHandler:function(t){if(this.touchHandled){if(t.preventDefault(),!this.touchMoved){e(this).hasClass("focused");console.log("orgChart: touchmove 1: "+t.touches.length+" touches, we have not moved, so simulate a drag start",t.touches),this.simulateMouseEvent(t,"dragstart")}this.touchMoved=!0;var n=e(i.elementFromPoint(t.touches[0].clientX,t.touches[0].clientY)).closest("div.node");if(n.length>0){var s=n[0];n.is(".allowedDrop")?(console.log("orgChart: touchmove 2: this node ("+s.id+") is allowed to be a drop target"),this.touchTargetNode=s):(console.log("orgChart: touchmove 3: this node ("+s.id+") is NOT allowed to be a drop target"),this.touchTargetNode=null)}else console.log("orgchart: touchmove 4: not touching a node"),this.touchTargetNode=null}},touchendHandler:function(e){if(console.log("orgChart: touchend 1: touchHandled="+this.touchHandled+", touchMoved="+this.touchMoved+", "+e.target.innerText+" "),this.touchHandled){if(this.touchMoved){if(this.touchTargetNode){console.log("orgChart: touchend 3: moved to a node, so simulating drop");var t={delegateTarget:this.touchTargetNode};this.dropHandler(t),this.touchTargetNode=null}console.log("orgChart: touchend 4: simulating dragend"),this.simulateMouseEvent(e,"dragend")}else console.log("orgChart: touchend 5: moved, so simulating click"),this.simulateMouseEvent(e,"click");this.touchHandled=!1}else console.log("orgChart: touchend 2: not handled by us, so aborting")},simulateMouseEvent:function(e,n){if(!(e.originalEvent.touches.length>1)){var s=e.originalEvent.changedTouches[0],a=i.createEvent("MouseEvents");a.initMouseEvent(n,!0,!0,t,1,s.screenX,s.screenY,s.clientX,s.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(a)}},bindDragDrop:function(e){e.on("dragstart",this.dragstartHandler.bind(this)).on("dragover",this.dragoverHandler.bind(this)).on("dragend",this.dragendHandler.bind(this)).on("drop",this.dropHandler.bind(this)).on("touchstart",this.touchstartHandler.bind(this)).on("touchmove",this.touchmoveHandler.bind(this)).on("touchend",this.touchendHandler.bind(this))},createNode:function(t){var i=this.options,n=t.level;t.children&&e.each(t.children,function(e,i){i.parentId=t.id});var s=e("").addClass("node "+(t.className||"")+(n>i.visibleLevel?" slide-up":""));i.nodeTemplate?s.append(i.nodeTemplate(t)):s.append('
'+t[i.nodeTitle]+"
").append(void 0!==i.nodeContent?'
'+(t[i.nodeContent]||"")+"
":"");var a=t.relationship||"";if(i.verticalLevel&&n>=i.verticalLevel){if(n+1>i.verticalLevel&&Number(a.substr(2,1))){var o=n+1>i.visibleLevel?"plus":"minus";s.append('')}}else Number(a.substr(0,1))&&s.append(''),Number(a.substr(1,1))&&s.append(''),Number(a.substr(2,1))&&s.append('').children(".title").prepend('');return s.on("mouseenter mouseleave",this.nodeEnterLeaveHandler.bind(this)),s.on("click",this.nodeClickHandler.bind(this)),s.on("click",".topEdge",{nodeData:t},this.topEdgeClickHandler.bind(this)),s.on("click",".bottomEdge",{nodeData:t},this.bottomEdgeClickHandler.bind(this)),s.on("click",".leftEdge, .rightEdge",{nodeData:t},this.hEdgeClickHandler.bind(this)),s.on("click",".toggleBtn",this.toggleVNodes.bind(this)),i.draggable&&(this.bindDragDrop(s),this.touchHandled=!1,this.touchMoved=!1,this.touchTargetNode=null),i.createNode&&i.createNode(s,t),s},buildHierarchy:function(t,i){var n=this,s=this.options,a=0;a=i.level?i.level:i.level=t.parentsUntil(".orgchart",".nodes").length+1;var o,d=i.children,r=!!d&&d.length;if(Object.keys(i).length>2){var l=this.createNode(i);s.verticalLevel&&a>=s.verticalLevel?t.append(l):(o=e(""),t.append(o.append(e("").append(e("").append(l)))))}if(r){var h,c=a+1>s.visibleLevel||i.collapsed?" hidden":"",g=!!(s.verticalLevel&&a+1>=s.verticalLevel);if(g)h=e("
    "),c&&a+1>s.verticalLevel&&h.addClass(c),a+1===s.verticalLevel?t.children("table").append('
').find(".verticalNodes").children().append(h):t.append(h);else{for(var p=e(''),f='',v=1;v';f+='',h=e(''),2===Object.keys(i).length?t.append(p).append(f).append(h):o.append(p).append(f).append(h)}e.each(d,function(){var t=e(g?"
  • ":'
  • ');h.append(t),this.level=a+1,n.buildHierarchy(t,this)})}},buildChildNode:function(e,t){e.find("td:first").attr("colspan",2*t.length),this.buildHierarchy(e,{children:t})},addChildren:function(e,t){this.buildChildNode(e.closest("table"),t),e.children(".bottomEdge").length||e.append(''),e.find(".symbol").length||e.children(".title").prepend(''),this.isInAction(e)&&this.switchVerticalArrow(e.children(".bottomEdge"))},buildParentNode:function(t,i){i.relationship=i.relationship||"001";var n=e("").append(e("").append(e('').append('');this.$chart.prepend(n).children("table:first").append('').children("tr:last").children().append(this.$chart.children("table").last())},addParent:function(e,t){this.buildParentNode(e,t),e.children(".topEdge").length||e.children(".title").after(''),this.isInAction(e)&&this.switchVerticalArrow(e.children(".topEdge"))},complementLine:function(e,t,i){for(var n="",s=0;s';e.parent().prevAll("tr:gt(0)").children().attr("colspan",2*t).end().next().children(":first").after(n)},buildSiblingNode:function(t,i){var n=e.isArray(i)?i.length:i.children.length,s=t.parent().is("td")?t.closest("tr").children().length:1,a=s+n,o=a>1?Math.floor(a/2-1):0;if(t.parent().is("td")){t.closest("tr").prevAll("tr:last");t.closest("tr").prevAll("tr:lt(2)").remove(),this.buildChildNode(t.parent().closest("table"),i);var d=t.parent().closest("table").children("tr:last").children("td");s>1?this.complementLine(d.eq(0).before(t.closest("td").siblings().addBack().unwrap()),a,s):this.complementLine(d.eq(o).after(t.closest("td").unwrap()),a,1)}else this.buildHierarchy(t.closest(".orgchart"),i),this.complementLine(t.next().children("tr:last").children().eq(o).after(e(''\n + ''\n + '')\n .siblings(':last').append($dragged.find('.horizontalEdge').remove().end().closest('table').parent());\n } else {\n var dropColspan = parseInt($dropZone.parent().attr('colspan')) + 2;\n var horizontalEdges = '';\n $dropZone.closest('tr').next().addBack().children().attr('colspan', dropColspan);\n if (!$dragged.find('.horizontalEdge').length) {\n $dragged.append(horizontalEdges);\n }\n $dropZone.closest('tr').siblings().eq(1).children(':last').before('')\n .end().next().append($dragged.closest('table').parent());\n var $dropSibs = $dragged.closest('table').parent().siblings().find('.node:first');\n if ($dropSibs.length === 1) {\n $dropSibs.append(horizontalEdges);\n }\n }\n // secondly, deal with the hierarchy of dragged node\n var dragColspan = parseInt($dragZone.attr('colspan'));\n if (dragColspan > 2) {\n $dragZone.attr('colspan', dragColspan - 2)\n .parent().next().children().attr('colspan', dragColspan - 2)\n .end().next().children().slice(1, 3).remove();\n var $dragSibs = $dragZone.parent().siblings('.nodes').children().find('.node:first');\n if ($dragSibs.length ===1) {\n $dragSibs.find('.horizontalEdge').remove();\n }\n } else {\n $dragZone.removeAttr('colspan')\n .find('.bottomEdge').remove()\n .end().end().siblings().remove();\n }\n },\n //\n touchstartHandler: function (event) {\n console.log(\"orgChart: touchstart 1: touchHandled=\" + this.touchHandled + \", touchMoved=\" + this.touchMoved + \", target=\" + event.target.innerText);\n if (this.touchHandled)\n return;\n this.touchHandled = true;\n this.touchMoved = false; // this is so we can work out later if this was a 'press' or a 'drag' touch\n event.preventDefault();\n },\n //\n touchmoveHandler: function (event) {\n if (!this.touchHandled)\n return;\n event.preventDefault();\n if (!this.touchMoved) {\n var nodeIsSelected = $(this).hasClass('focused');\n console.log(\"orgChart: touchmove 1: \" + event.touches.length + \" touches, we have not moved, so simulate a drag start\", event.touches);\n // TODO: visualise the start of the drag (as would happen on desktop)\n this.simulateMouseEvent(event, 'dragstart');\n }\n this.touchMoved = true;\n var $touching = $(document.elementFromPoint(event.touches[0].clientX, event.touches[0].clientY));\n var $touchingNode = $touching.closest('div.node');\n \n if ($touchingNode.length > 0) {\n var touchingNodeElement = $touchingNode[0];\n // TODO: simulate the dragover visualisation\n if ($touchingNode.is('.allowedDrop')) {\n console.log(\"orgChart: touchmove 2: this node (\" + touchingNodeElement.id + \") is allowed to be a drop target\");\n this.touchTargetNode = touchingNodeElement;\n } else {\n console.log(\"orgChart: touchmove 3: this node (\" + touchingNodeElement.id + \") is NOT allowed to be a drop target\");\n this.touchTargetNode = null;\n }\n } else {\n console.log(\"orgchart: touchmove 4: not touching a node\");\n this.touchTargetNode = null;\n }\n },\n //\n touchendHandler: function (event) {\n console.log(\"orgChart: touchend 1: touchHandled=\" + this.touchHandled + \", touchMoved=\" + this.touchMoved + \", \" + event.target.innerText + \" \");\n if (!this.touchHandled) {\n console.log(\"orgChart: touchend 2: not handled by us, so aborting\");\n return;\n }\n if (this.touchMoved) {\n // we've had movement, so this was a 'drag' touch\n if (this.touchTargetNode) {\n console.log(\"orgChart: touchend 3: moved to a node, so simulating drop\");\n var fakeEventForDropHandler = { delegateTarget: this.touchTargetNode };\n this.dropHandler(fakeEventForDropHandler);\n this.touchTargetNode = null;\n }\n console.log(\"orgChart: touchend 4: simulating dragend\");\n this.simulateMouseEvent(event, 'dragend');\n }\n else {\n // we did not move, so assume this was a 'press' touch\n console.log(\"orgChart: touchend 5: moved, so simulating click\");\n this.simulateMouseEvent(event, 'click');\n }\n this.touchHandled = false;\n },\n // simulate a mouse event (so we can fake them on a touch device)\n simulateMouseEvent: function (event, simulatedType) {\n // Ignore multi-touch events\n if (event.originalEvent.touches.length > 1) {\n return;\n }\n var touch = event.originalEvent.changedTouches[0];\n var simulatedEvent = document.createEvent('MouseEvents');\n simulatedEvent.initMouseEvent(\n simulatedType, // type\n true, // bubbles \n true, // cancelable \n window, // view \n 1, // detail \n touch.screenX, // screenX \n touch.screenY, // screenY \n touch.clientX, // clientX \n touch.clientY, // clientY \n false, // ctrlKey \n false, // altKey \n false, // shiftKey \n false, // metaKey \n 0, // button \n null // relatedTarget \n );\n // Dispatch the simulated event to the target element\n event.target.dispatchEvent(simulatedEvent);\n },\n //\n bindDragDrop: function ($node) {\n $node.on('dragstart', this.dragstartHandler.bind(this))\n .on('dragover', this.dragoverHandler.bind(this))\n .on('dragend', this.dragendHandler.bind(this))\n .on('drop', this.dropHandler.bind(this))\n .on('touchstart', this.touchstartHandler.bind(this))\n .on('touchmove', this.touchmoveHandler.bind(this))\n .on('touchend', this.touchendHandler.bind(this));\n },\n // create node\n createNode: function (data) {\n var that = this;\n var opts = this.options;\n var level = data.level;\n if (data.children) {\n $.each(data.children, function (index, child) {\n child.parentId = data.id;\n });\n }\n // construct the content of node\n var $nodeDiv = $('')\n .addClass('node ' + (data.className || '') + (level > opts.visibleLevel ? ' slide-up' : ''));\n if (opts.nodeTemplate) {\n $nodeDiv.append(opts.nodeTemplate(data));\n } else {\n $nodeDiv.append('
    ' + data[opts.nodeTitle] + '
    ')\n .append(typeof opts.nodeContent !== 'undefined' ? '
    ' + (data[opts.nodeContent] || '') + '
    ' : '');\n }\n // append 4 direction arrows or expand/collapse buttons\n var flags = data.relationship || '';\n if (opts.verticalLevel && level >= opts.verticalLevel) {\n if ((level + 1) > opts.verticalLevel && Number(flags.substr(2,1))) {\n var icon = level + 1 > opts.visibleLevel ? 'plus' : 'minus';\n $nodeDiv.append('');\n }\n } else {\n if (Number(flags.substr(0,1))) {\n $nodeDiv.append('');\n }\n if(Number(flags.substr(1,1))) {\n $nodeDiv.append('' +\n '');\n }\n if(Number(flags.substr(2,1))) {\n $nodeDiv.append('')\n .children('.title').prepend('');\n }\n }\n\n $nodeDiv.on('mouseenter mouseleave', this.nodeEnterLeaveHandler.bind(this));\n $nodeDiv.on('click', this.nodeClickHandler.bind(this));\n $nodeDiv.on('click', '.topEdge', { 'nodeData': data }, this.topEdgeClickHandler.bind(this));\n $nodeDiv.on('click', '.bottomEdge', { 'nodeData': data }, this.bottomEdgeClickHandler.bind(this));\n $nodeDiv.on('click', '.leftEdge, .rightEdge', { 'nodeData': data }, this.hEdgeClickHandler.bind(this));\n $nodeDiv.on('click', '.toggleBtn', this.toggleVNodes.bind(this));\n\n if (opts.draggable) {\n this.bindDragDrop($nodeDiv);\n this.touchHandled = false;\n this.touchMoved = false;\n this.touchTargetNode = null;\n }\n // allow user to append dom modification after finishing node create of orgchart\n if (opts.createNode) {\n opts.createNode($nodeDiv, data);\n }\n\n return $nodeDiv;\n },\n // recursively build the tree\n buildHierarchy: function ($appendTo, data) {\n var that = this;\n var opts = this.options;\n var level = 0;\n if (data.level) {\n level = data.level;\n } else {\n level = data.level = $appendTo.parentsUntil('.orgchart', '.nodes').length + 1;\n }\n // Construct the node\n var childrenData = data.children;\n var hasChildren = childrenData ? childrenData.length : false;\n var $nodeWrapper;\n if (Object.keys(data).length > 2) {\n var $nodeDiv = this.createNode(data);\n if (opts.verticalLevel && level >= opts.verticalLevel) {\n $appendTo.append($nodeDiv);\n }else {\n $nodeWrapper = $('
    ').append(this.createNode(i)))).append('
    ').append(t)),a,1)},addSiblings:function(e,t){this.buildSiblingNode(e.closest("table"),t),e.closest(".nodes").data("siblingsLoaded",!0),e.children(".leftEdge").length||e.children(".topEdge").after(''),this.isInAction(e)&&(this.switchHorizontalArrow(e),e.children(".topEdge").removeClass("fa-chevron-up").addClass("fa-chevron-down"))},removeNodes:function(e){var t=e.closest("table").parent(),i=t.parent().siblings();t.is("td")?this.getNodeState(e,"siblings").exist?(i.eq(2).children(".topLine:lt(2)").remove(),i.slice(0,2).children().attr("colspan",i.eq(2).children().length),t.remove()):i.eq(0).children().removeAttr("colspan").find(".bottomEdge").remove().end().end().siblings().remove():t.add(t.siblings()).remove()},export:function(n,s){var a=this;if(n=void 0!==n?n:this.options.exportFilename,s=void 0!==s?s:this.options.exportFileextension,e(this).children(".spinner").length)return!1;var o=this.$chartContainer,d=o.find(".mask");d.length?d.removeClass("hidden"):o.append('
    ');var r=o.addClass("canvasContainer").find('.orgchart:not(".hidden")').get(0),l="l2r"===a.options.direction||"r2l"===a.options.direction;html2canvas(r,{width:l?r.clientHeight:r.clientWidth,height:l?r.clientWidth:r.clientHeight,onclone:function(t){e(t).find(".canvasContainer").css("overflow","visible").find('.orgchart:not(".hidden"):first').css("transform","")},onrendered:function(e){if(o.find(".mask").addClass("hidden"),"pdf"===s.toLowerCase()){var d={},r=Math.floor(.2646*e.width),l=Math.floor(.2646*e.height);(d=r>l?new jsPDF("l","mm",[r,l]):new jsPDF("p","mm",[l,r])).addImage(e.toDataURL(),"png",0,0),d.save(n+".pdf")}else{var h="WebkitAppearance"in i.documentElement.style,c=!!t.sidebar,g="Microsoft Internet Explorer"===navigator.appName||"Netscape"===navigator.appName&&navigator.appVersion.indexOf("Edge")>-1;if(!h&&!c||g)t.navigator.msSaveBlob(e.msToBlob(),n+".png");else{var p=".oc-download-btn"+(""!==a.options.chartClass?"."+a.options.chartClass:"");o.find(p).length||o.append(''),o.find(p).attr("href",e.toDataURL())[0].click()}}}}).then(function(){o.removeClass("canvasContainer")},function(){o.removeClass("canvasContainer")})}},e.fn.orgchart=function(e){return new s(this,e).init()}}); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5vcmdjaGFydC5qcyJdLCJuYW1lcyI6WyJmYWN0b3J5IiwibW9kdWxlIiwiZXhwb3J0cyIsInJlcXVpcmUiLCJ3aW5kb3ciLCJkb2N1bWVudCIsImpRdWVyeSIsIiQiLCJ1bmRlZmluZWQiLCJPcmdDaGFydCIsImVsZW0iLCJvcHRzIiwidGhpcyIsIiRjaGFydENvbnRhaW5lciIsImRlZmF1bHRPcHRpb25zIiwibm9kZVRpdGxlIiwibm9kZUlkIiwidG9nZ2xlU2libGluZ3NSZXNwIiwidmlzaWJsZUxldmVsIiwiY2hhcnRDbGFzcyIsImV4cG9ydEJ1dHRvbiIsImV4cG9ydEZpbGVuYW1lIiwiZXhwb3J0RmlsZWV4dGVuc2lvbiIsInBhcmVudE5vZGVTeW1ib2wiLCJkcmFnZ2FibGUiLCJkaXJlY3Rpb24iLCJwYW4iLCJ6b29tIiwiem9vbWluTGltaXQiLCJ6b29tb3V0TGltaXQiLCJwcm90b3R5cGUiLCJpbml0IiwidGhhdCIsIm9wdGlvbnMiLCJleHRlbmQiLCIkY2hhcnQiLCJyZW1vdmUiLCJkYXRhIiwiY2xhc3MiLCJjbGljayIsImV2ZW50IiwidGFyZ2V0IiwiY2xvc2VzdCIsImxlbmd0aCIsImZpbmQiLCJyZW1vdmVDbGFzcyIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJ0cmlnZ2VySW5pdEV2ZW50IiwidHlwZSIsImJ1aWxkSGllcmFyY2h5IiwiYnVpbGRKc29uRFMiLCJjaGlsZHJlbiIsImFqYXhVUkwiLCJhdHRhY2hSZWwiLCJhcHBlbmQiLCJhamF4IiwidXJsIiwiZGF0YVR5cGUiLCJkb25lIiwidGV4dFN0YXR1cyIsImpxWEhSIiwiZmFpbCIsImVycm9yVGhyb3duIiwiY29uc29sZSIsImxvZyIsImFsd2F5cyIsImF0dGFjaEV4cG9ydEJ1dHRvbiIsImJpbmRQYW4iLCJiaW5kWm9vbSIsIm1vIiwibXV0YXRpb25zIiwiZGlzY29ubmVjdCIsImluaXRUaW1lIiwiaSIsImoiLCJhZGRlZE5vZGVzIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJpbml0Q29tcGxldGVkIiwiaW5pdEV2ZW50IiwiRXZlbnQiLCJ0cmlnZ2VyIiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsIiRleHBvcnRCdG4iLCJ0ZXh0IiwiZSIsInByZXZlbnREZWZhdWx0IiwiZXhwb3J0Iiwic2V0T3B0aW9ucyIsInZhbCIsInVuYmluZFBhbiIsInVuYmluZFpvb20iLCJwYW5TdGFydEhhbmRsZXIiLCJkZWxlZ2F0ZVRhcmdldCIsInRvdWNoZXMiLCJjc3MiLCJsYXN0WCIsImxhc3RZIiwibGFzdFRmIiwidGVtcCIsInNwbGl0IiwiaW5kZXhPZiIsInBhcnNlSW50Iiwic3RhcnRYIiwic3RhcnRZIiwidGFyZ2V0VG91Y2hlcyIsInBhZ2VYIiwicGFnZVkiLCJvbiIsIm5ld1giLCJuZXdZIiwibWF0cml4Iiwiam9pbiIsInBhbkVuZEhhbmRsZXIiLCJjaGFydCIsIm9mZiIsInpvb21XaGVlbEhhbmRsZXIiLCJvYyIsIm5ld1NjYWxlIiwib3JpZ2luYWxFdmVudCIsImRlbHRhWSIsInNldENoYXJ0U2NhbGUiLCJ6b29tU3RhcnRIYW5kbGVyIiwiZGlzdCIsImdldFBpbmNoRGlzdCIsInpvb21pbmdIYW5kbGVyIiwiem9vbUVuZEhhbmRsZXIiLCJkaWZmIiwiTWF0aCIsInNxcnQiLCJjbGllbnRYIiwiY2xpZW50WSIsInRhcmdldFNjYWxlIiwiYWJzIiwicGFyc2VGbG9hdCIsIiRsaSIsInN1Yk9iaiIsIm5hbWUiLCJjb250ZW50cyIsImVxIiwidHJpbSIsInJlbGF0aW9uc2hpcCIsInBhcmVudCIsImlzIiwic2libGluZ3MiLCJhdHRyIiwiaWQiLCJlYWNoIiwicHVzaCIsImZsYWdzIiwiZm9yRWFjaCIsIml0ZW0iLCJsb29wQ2hhcnQiLCIkdHIiLCJnZXRIaWVyYXJjaHkiLCJ2YWxpZCIsImdldE5vZGVTdGF0ZSIsIiRub2RlIiwicmVsYXRpb24iLCIkdGFyZ2V0IiwiZXhpc3QiLCJ2aXNpYmxlIiwiZ2V0UmVsYXRlZE5vZGVzIiwiaGlkZVBhcmVudEVuZCIsInVwcGVyTGV2ZWwiLCJhZGRDbGFzcyIsInNsaWNlIiwicmVtb3ZlQXR0ciIsImhpZGVQYXJlbnQiLCIkdXBwZXJMZXZlbCIsImhpZGVTaWJsaW5ncyIsIiRwYXJlbnQiLCJvbmUiLCJzaG93UGFyZW50RW5kIiwibm9kZSIsImlzSW5BY3Rpb24iLCJzd2l0Y2hWZXJ0aWNhbEFycm93Iiwic2hvd1BhcmVudCIsInJlcGFpbnQiLCJiaW5kIiwic3RvcEFqYXgiLCIkbm9kZUxldmVsIiwiaXNWaXNpYmxlTm9kZSIsImluZGV4IiwiaGlkZUNoaWxkcmVuRW5kIiwiYW5pbWF0ZWROb2RlcyIsImlzVmVydGljYWxEZXNjIiwibG93ZXJMZXZlbCIsInByZXZBbGwiLCJhZGRCYWNrIiwibGFzdCIsImhpZGVDaGlsZHJlbiIsIiRsb3dlckxldmVsIiwiJGFuaW1hdGVkTm9kZXMiLCJmaWx0ZXIiLCJnZXQiLCJzaG93Q2hpbGRyZW5FbmQiLCJzaG93Q2hpbGRyZW4iLCIkbGV2ZWxzIiwiaGlkZVNpYmxpbmdzRW5kIiwiJG5vZGVDb250YWluZXIiLCJub2RlQ29udGFpbmVyIiwibGluZXMiLCIkc2libGluZ3MiLCJuZXh0QWxsIiwicHJldiIsImVuZCIsInN3aXRjaEhvcml6b250YWxBcnJvdyIsIiRsaW5lcyIsInNob3dTaWJsaW5nc0VuZCIsInZpc2libGVOb2RlcyIsInNob3dSZWxhdGVkUGFyZW50RW5kIiwic2hvd1NpYmxpbmdzIiwiJHZpc2libGVOb2RlcyIsInN0YXJ0TG9hZGluZyIsIiRlZGdlIiwibm90IiwicHJvcCIsImVuZExvYWRpbmciLCIkYXJyb3ciLCJ0b2dnbGVDbGFzcyIsIiRwcmV2U2liIiwiJG5leHRTaWIiLCJuZXh0IiwiJHNpYnMiLCJzaWJzVmlzaWJsZSIsInN0eWxlIiwib2Zmc2V0V2lkdGgiLCJub2RlRW50ZXJMZWF2ZUhhbmRsZXIiLCJmbGFnIiwiJHRvcEVkZ2UiLCIkYm90dG9tRWRnZSIsIiRsZWZ0RWRnZSIsIm5vZGVDbGlja0hhbmRsZXIiLCJsb2FkTm9kZXMiLCJyZWwiLCJpc0VtcHR5T2JqZWN0IiwiYWRkUGFyZW50IiwiYWRkQ2hpbGRyZW4iLCJhZGRTaWJsaW5ncyIsIkhpZGVGaXJzdFBhcmVudEVuZCIsInRvcEVkZ2UiLCJ0b3BFZGdlQ2xpY2tIYW5kbGVyIiwic3RvcFByb3BhZ2F0aW9uIiwicGFyZW50U3RhdGUiLCJpc0Z1bmN0aW9uIiwibm9kZURhdGEiLCJib3R0b21FZGdlQ2xpY2tIYW5kbGVyIiwiY2hpbGRyZW5TdGF0ZSIsImhFZGdlQ2xpY2tIYW5kbGVyIiwiJGhFZGdlIiwic2libGluZ3NTdGF0ZSIsImZhbWlsaWVzIiwiZXhwYW5kVk5vZGVzRW5kIiwidk5vZGVzIiwiY29sbGFwc2VWTm9kZXNFbmQiLCJ0b2dnbGVWTm9kZXMiLCIkdG9nZ2xlQnRuIiwiJGRlc2NXcmFwcGVyIiwiJGRlc2NlbmRhbnRzIiwiJGNoaWxkcmVuIiwiY3JlYXRlR2hvc3ROb2RlIiwiJG5vZGVEaXYiLCJvcmlnRXZlbnQiLCJpc0ZpcmVmb3giLCJ0ZXN0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJkYXRhVHJhbnNmZXIiLCJzZXREYXRhIiwiZ2hvc3ROb2RlIiwibm9kZUNvdmVyIiwicXVlcnlTZWxlY3RvciIsImNyZWF0ZUVsZW1lbnROUyIsImFkZCIsImFwcGVuZENoaWxkIiwidHJhbnNWYWx1ZXMiLCJzY2FsZSIsInNldEF0dHJpYnV0ZSIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsInhPZmZzZXQiLCJvZmZzZXRYIiwieU9mZnNldCIsIm9mZnNldFkiLCJnaG9zdE5vZGVXcmFwcGVyIiwiY3JlYXRlRWxlbWVudCIsInNyYyIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsInNldERyYWdJbWFnZSIsImZpbHRlckFsbG93ZWREcm9wTm9kZXMiLCIkZHJhZ2dlZCIsIiRkcmFnWm9uZSIsIiRkcmFnSGllciIsImRyb3BDcml0ZXJpYSIsImRyYWdzdGFydEhhbmRsZXIiLCJkcmFnb3ZlckhhbmRsZXIiLCJkcm9wRWZmZWN0IiwiZHJhZ2VuZEhhbmRsZXIiLCJkcm9wSGFuZGxlciIsIiRkcm9wWm9uZSIsImRyb3BFdmVudCIsImRyYWdnZWROb2RlIiwiZHJhZ1pvbmUiLCJkcm9wWm9uZSIsImlzRGVmYXVsdFByZXZlbnRlZCIsImRyb3BDb2xzcGFuIiwiaG9yaXpvbnRhbEVkZ2VzIiwiYmVmb3JlIiwiJGRyb3BTaWJzIiwiYWZ0ZXIiLCJkcmFnQ29sc3BhbiIsIiRkcmFnU2licyIsInRvdWNoc3RhcnRIYW5kbGVyIiwidG91Y2hIYW5kbGVkIiwidG91Y2hNb3ZlZCIsImlubmVyVGV4dCIsInRvdWNobW92ZUhhbmRsZXIiLCJoYXNDbGFzcyIsInNpbXVsYXRlTW91c2VFdmVudCIsIiR0b3VjaGluZ05vZGUiLCJlbGVtZW50RnJvbVBvaW50IiwidG91Y2hpbmdOb2RlRWxlbWVudCIsInRvdWNoVGFyZ2V0Tm9kZSIsInRvdWNoZW5kSGFuZGxlciIsImZha2VFdmVudEZvckRyb3BIYW5kbGVyIiwic2ltdWxhdGVkVHlwZSIsInRvdWNoIiwiY2hhbmdlZFRvdWNoZXMiLCJzaW11bGF0ZWRFdmVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdE1vdXNlRXZlbnQiLCJzY3JlZW5YIiwic2NyZWVuWSIsImRpc3BhdGNoRXZlbnQiLCJiaW5kRHJhZ0Ryb3AiLCJjcmVhdGVOb2RlIiwibGV2ZWwiLCJjaGlsZCIsInBhcmVudElkIiwiY2xhc3NOYW1lIiwibm9kZVRlbXBsYXRlIiwibm9kZUNvbnRlbnQiLCJ2ZXJ0aWNhbExldmVsIiwiTnVtYmVyIiwic3Vic3RyIiwiaWNvbiIsInByZXBlbmQiLCIkYXBwZW5kVG8iLCJwYXJlbnRzVW50aWwiLCIkbm9kZVdyYXBwZXIiLCJjaGlsZHJlbkRhdGEiLCJoYXNDaGlsZHJlbiIsIk9iamVjdCIsImtleXMiLCIkbm9kZXNMYXllciIsImlzSGlkZGVuIiwiY29sbGFwc2VkIiwiaXNWZXJ0aWNhbExheWVyIiwiJHVwcGVyTGluZXMiLCJsb3dlckxpbmVzIiwiJG5vZGVDZWxsIiwiYnVpbGRDaGlsZE5vZGUiLCJidWlsZFBhcmVudE5vZGUiLCIkY3VycmVudFJvb3QiLCIkdGFibGUiLCJjb21wbGVtZW50TGluZSIsIiRvbmVTaWJsaW5nIiwic2libGluZ0NvdW50IiwiZXhpc3RpbmdTaWJsaWdDb3VudCIsImJ1aWxkU2libGluZ05vZGUiLCIkbm9kZUNoYXJ0IiwibmV3U2libGluZ0NvdW50IiwiaXNBcnJheSIsImluc2VydFBvc3Rpb24iLCJmbG9vciIsIiRzaWJsaW5nVGRzIiwidW53cmFwIiwicmVtb3ZlTm9kZXMiLCIkbWFzayIsInNvdXJjZUNoYXJ0IiwiaHRtbDJjYW52YXMiLCJ3aWR0aCIsImNsaWVudEhlaWdodCIsImNsaWVudFdpZHRoIiwiaGVpZ2h0Iiwib25jbG9uZSIsImNsb25lRG9jIiwib25yZW5kZXJlZCIsImNhbnZhcyIsImRvYyIsImRvY1dpZHRoIiwiZG9jSGVpZ2h0IiwianNQREYiLCJhZGRJbWFnZSIsInRvRGF0YVVSTCIsInNhdmUiLCJpc1dlYmtpdCIsImRvY3VtZW50RWxlbWVudCIsImlzRmYiLCJzaWRlYmFyIiwiaXNFZGdlIiwiYXBwTmFtZSIsImFwcFZlcnNpb24iLCJtc1NhdmVCbG9iIiwibXNUb0Jsb2IiLCJzZWxlY3RvciIsInRoZW4iLCJmbiIsIm9yZ2NoYXJ0Il0sIm1hcHBpbmdzIjoiQUFVQSxjQUVDLFNBQVVBLEdBQ2EsaUJBQVhDLFFBQWlELGlCQUFuQkEsT0FBT0MsUUFDOUNGLEVBQVFHLFFBQVEsVUFBV0MsT0FBUUMsVUFFbkNMLEVBQVFNLE9BQVFGLE9BQVFDLFVBSjVCLENBTUUsU0FBVUUsRUFBR0gsRUFBUUMsRUFBVUcsR0FDL0IsSUFBSUMsRUFBVyxTQUFVQyxFQUFNQyxHQUM3QkMsS0FBS0MsZ0JBQWtCTixFQUFFRyxHQUN6QkUsS0FBS0QsS0FBT0EsRUFDWkMsS0FBS0UsZ0JBQ0hDLFVBQWEsT0FDYkMsT0FBVSxLQUNWQyxvQkFBc0IsRUFDdEJDLGFBQWdCLElBQ2hCQyxXQUFjLEdBQ2RDLGNBQWdCLEVBQ2hCQyxlQUFrQixXQUNsQkMsb0JBQXVCLE1BQ3ZCQyxpQkFBb0IsV0FD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SixTQUVoQ0ssRUFERUMsRUFBV0MsRUFDUCxJQUFJQyxNQUFNLElBQUssTUFBT0YsRUFBVUMsSUFFaEMsSUFBSUMsTUFBTSxJQUFLLE1BQU9ELEVBQVdELEtBRXJDRyxTQUFTTCxFQUFPTSxZQUFhLE1BQU8sRUFBRyxHQUMzQ0wsRUFBSU0sS0FBSzFYLEVBQWlCLFlBQ3JCLENBQ0wsSUFBSTJYLEVBQVcscUJBQXNCM1ksRUFBUzRZLGdCQUFnQjlLLE1BQzFEK0ssSUFBUzlZLEVBQU8rWSxRQUNoQkMsRUFBK0IsZ0NBQXRCekksVUFBVTBJLFNBQW9FLGFBQXRCMUksVUFBVTBJLFNBQTBCMUksVUFBVTJJLFdBQVdoVCxRQUFRLFNBQVcsRUFFakosSUFBTTBTLElBQWFFLEdBQVNFLEVBQzFCaFosRUFBT3VRLFVBQVU0SSxXQUFXZixFQUFPZ0IsV0FBWW5ZLEVBQWlCLFlBQzNELENBQ0wsSUFBSW9ZLEVBQVcsb0JBQWtELEtBQTVCelgsRUFBS0MsUUFBUWQsV0FBb0IsSUFBTWEsRUFBS0MsUUFBUWQsV0FBYSxJQUNqR04sRUFBZ0IrQixLQUFLNlcsR0FBVTlXLFFBQ2xDOUIsRUFBZ0J5QyxPQUFPLDZCQUEyRCxLQUE1QnRCLEVBQUtDLFFBQVFkLFdBQW9CLElBQU1hLEVBQUtDLFFBQVFkLFdBQWEsSUFBTSxlQUN6R0UsRUFBaUIsY0FFdkNSLEVBQWdCK0IsS0FBSzZXLEdBQVV2USxLQUFLLE9BQVFzUCxFQUFPTSxhQUFhLEdBQUd2VyxhQUsxRW1YLEtBQUssV0FDSjdZLEVBQWdCZ0MsWUFBWSxvQkFDM0IsV0FDRGhDLEVBQWdCZ0MsWUFBWSx1QkFLbEN0QyxFQUFFb1osR0FBR0MsU0FBVyxTQUFValosR0FDeEIsT0FBTyxJQUFJRixFQUFTRyxLQUFNRCxHQUFNb0IiLCJmaWxlIjoianF1ZXJ5Lm9yZ2NoYXJ0Lm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBqUXVlcnkgT3JnQ2hhcnQgUGx1Z2luXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZGFiZW5nL09yZ0NoYXJ0XG4gKlxuICogQ29weXJpZ2h0IDIwMTYsIGRhYmVuZ1xuICogaHR0cHM6Ly9naXRodWIuY29tL2RhYmVuZ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcbiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSwgd2luZG93LCBkb2N1bWVudCk7XG4gIH0gZWxzZSB7XG4gICAgZmFjdG9yeShqUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpO1xuICB9XG59KGZ1bmN0aW9uICgkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHtcbiAgdmFyIE9yZ0NoYXJ0ID0gZnVuY3Rpb24gKGVsZW0sIG9wdHMpIHtcbiAgICB0aGlzLiRjaGFydENvbnRhaW5lciA9ICQoZWxlbSk7XG4gICAgdGhpcy5vcHRzID0gb3B0cztcbiAgICB0aGlzLmRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgJ25vZGVUaXRsZSc6ICduYW1lJyxcbiAgICAgICdub2RlSWQnOiAnaWQnLFxuICAgICAgJ3RvZ2dsZVNpYmxpbmdzUmVzcCc6IGZhbHNlLFxuICAgICAgJ3Zpc2libGVMZXZlbCc6IDk5OSxcbiAgICAgICdjaGFydENsYXNzJzogJycsXG4gICAgICAnZXhwb3J0QnV0dG9uJzogZmFsc2UsXG4gICAgICAnZXhwb3J0RmlsZW5hbWUnOiAnT3JnQ2hhcnQnLFxuICAgICAgJ2V4cG9ydEZpbGVleHRlbnNpb24nOiAncG5nJyxcbiAgICAgICdwYXJlbnROb2RlU3ltYm9sJzogJ2ZhLXVzZXJzJyxcbiAgICAgICdkcmFnZ2FibGUnOiBmYWxzZSxcbiAgICAgICdkaXJlY3Rpb24nOiAndDJiJyxcbiAgICAgICdwYW4nOiBmYWxzZSxcbiAgICAgICd6b29tJzogZmFsc2UsXG4gICAgICAnem9vbWluTGltaXQnOiA3LFxuICAgICAgJ3pvb21vdXRMaW1pdCc6IDAuNVxuICAgIH07XG4gIH07XG4gIC8vXG4gIE9yZ0NoYXJ0LnByb3RvdHlwZSA9IHtcbiAgICAvL1xuICAgIGluaXQ6IGZ1bmN0aW9uIChvcHRzKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgdGhpcy5vcHRzLCBvcHRzKTtcbiAgICAgIC8vIGJ1aWxkIHRoZSBvcmctY2hhcnRcbiAgICAgIHZhciAkY2hhcnRDb250YWluZXIgPSB0aGlzLiRjaGFydENvbnRhaW5lcjtcbiAgICAgIGlmICh0aGlzLiRjaGFydCkge1xuICAgICAgICB0aGlzLiRjaGFydC5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICAgIHZhciBkYXRhID0gdGhpcy5vcHRpb25zLmRhdGE7XG4gICAgICB2YXIgJGNoYXJ0ID0gdGhpcy4kY2hhcnQgPSAkKCc8ZGl2PicsIHtcbiAgICAgICAgJ2RhdGEnOiB7ICdvcHRpb25zJzogdGhpcy5vcHRpb25zIH0sXG4gICAgICAgICdjbGFzcyc6ICdvcmdjaGFydCcgKyAodGhpcy5vcHRpb25zLmNoYXJ0Q2xhc3MgIT09ICcnID8gJyAnICsgdGhpcy5vcHRpb25zLmNoYXJ0Q2xhc3MgOiAnJykgKyAodGhpcy5vcHRpb25zLmRpcmVjdGlvbiAhPT0gJ3QyYicgPyAnICcgKyB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uIDogJycpLFxuICAgICAgICAnY2xpY2snOiBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgIGlmICghJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5ub2RlJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAkY2hhcnQuZmluZCgnLm5vZGUuZm9jdXNlZCcpLnJlbW92ZUNsYXNzKCdmb2N1c2VkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhpcy50cmlnZ2VySW5pdEV2ZW50KCk7XG4gICAgICB9XG4gICAgICBpZiAoJC50eXBlKGRhdGEpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICQpIHsgLy8gdWwgZGF0YXNvdXJjZVxuICAgICAgICAgIHRoaXMuYnVpbGRIaWVyYXJjaHkoJGNoYXJ0LCB0aGlzLmJ1aWxkSnNvbkRTKGRhdGEuY2hpbGRyZW4oKSksIDAsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7IC8vIGxvY2FsIGpzb24gZGF0YXNvdXJjZVxuICAgICAgICAgIHRoaXMuYnVpbGRIaWVyYXJjaHkoJGNoYXJ0LCB0aGlzLm9wdGlvbnMuYWpheFVSTCA/IGRhdGEgOiB0aGlzLmF0dGFjaFJlbChkYXRhLCAnMDAnKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRjaGFydC5hcHBlbmQoJzxpIGNsYXNzPVwiZmEgZmEtY2lyY2xlLW8tbm90Y2ggZmEtc3BpbiBzcGlubmVyXCI+PC9pPicpO1xuICAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICd1cmwnOiBkYXRhLFxuICAgICAgICAgICdkYXRhVHlwZSc6ICdqc29uJ1xuICAgICAgICB9KVxuICAgICAgICAuZG9uZShmdW5jdGlvbihkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgIHRoYXQuYnVpbGRIaWVyYXJjaHkoJGNoYXJ0LCB0aGF0Lm9wdGlvbnMuYWpheFVSTCA/IGRhdGEgOiB0aGF0LmF0dGFjaFJlbChkYXRhLCAnMDAnKSwgMCwgdGhhdC5vcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZhaWwoZnVuY3Rpb24oanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3JUaHJvd24pO1xuICAgICAgICB9KVxuICAgICAgICAuYWx3YXlzKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICRjaGFydC5jaGlsZHJlbignLnNwaW5uZXInKS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAkY2hhcnRDb250YWluZXIuYXBwZW5kKCRjaGFydCk7XG5cbiAgICAgIC8vIGFwcGVuZCB0aGUgZXhwb3J0IGJ1dHRvblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBvcnRCdXR0b24gJiYgISRjaGFydENvbnRhaW5lci5maW5kKCcub2MtZXhwb3J0LWJ0bicpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmF0dGFjaEV4cG9ydEJ1dHRvbigpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnBhbikge1xuICAgICAgICB0aGlzLmJpbmRQYW4oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy56b29tKSB7XG4gICAgICAgIHRoaXMuYmluZFpvb20oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvL1xuICAgIHRyaWdnZXJJbml0RXZlbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBtbyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgbW8uZGlzY29ubmVjdCgpO1xuICAgICAgICBpbml0VGltZTpcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG11dGF0aW9uc1tpXS5hZGRlZE5vZGVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAobXV0YXRpb25zW2ldLmFkZGVkTm9kZXNbal0uY2xhc3NMaXN0LmNvbnRhaW5zKCdvcmdjaGFydCcpKSB7XG4gICAgICAgICAgICAgIGlmICh0aGF0Lm9wdGlvbnMuaW5pdENvbXBsZXRlZCAmJiB0eXBlb2YgdGhhdC5vcHRpb25zLmluaXRDb21wbGV0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGF0Lm9wdGlvbnMuaW5pdENvbXBsZXRlZCh0aGF0LiRjaGFydCk7XG4gICAgICAgICAgICAgICAgdmFyIGluaXRFdmVudCA9ICQuRXZlbnQoJ2luaXQub3JnY2hhcnQnKTtcbiAgICAgICAgICAgICAgICB0aGF0LiRjaGFydC50cmlnZ2VyKGluaXRFdmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWsgaW5pdFRpbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbW8ub2JzZXJ2ZSh0aGlzLiRjaGFydENvbnRhaW5lclswXSwgeyBjaGlsZExpc3Q6IHRydWUgfSk7XG4gICAgfSxcbiAgICAvL1xuICAgIGF0dGFjaEV4cG9ydEJ1dHRvbjogZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyICRleHBvcnRCdG4gPSAkKCc8YnV0dG9uPicsIHtcbiAgICAgICAgJ2NsYXNzJzogJ29jLWV4cG9ydC1idG4nICsgKHRoaXMub3B0aW9ucy5jaGFydENsYXNzICE9PSAnJyA/ICcgJyArIHRoaXMub3B0aW9ucy5jaGFydENsYXNzIDogJycpLFxuICAgICAgICAndGV4dCc6ICdFeHBvcnQnLFxuICAgICAgICAnY2xpY2snOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoYXQuZXhwb3J0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy4kY2hhcnRDb250YWluZXIuYXBwZW5kKCRleHBvcnRCdG4pO1xuICAgIH0sXG4gICAgc2V0T3B0aW9uczogZnVuY3Rpb24gKG9wdHMsIHZhbCkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAob3B0cyA9PT0gJ3BhbicpIHtcbiAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICB0aGlzLmJpbmRQYW4oKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRQYW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMgPT09ICd6b29tJykge1xuICAgICAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZFpvb20oKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bmJpbmRab29tKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChvcHRzLmRhdGEpIHtcbiAgICAgICAgICB0aGlzLmluaXQob3B0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBvcHRzLnBhbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLnBhbikge1xuICAgICAgICAgICAgICB0aGlzLmJpbmRQYW4oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudW5iaW5kUGFuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygb3B0cy56b29tICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKG9wdHMuem9vbSkge1xuICAgICAgICAgICAgICB0aGlzLmJpbmRab29tKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnVuYmluZFpvb20oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICAvL1xuICAgIHBhblN0YXJ0SGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciAkY2hhcnQgPSAkKGUuZGVsZWdhdGVUYXJnZXQpO1xuICAgICAgaWYgKCQoZS50YXJnZXQpLmNsb3Nlc3QoJy5ub2RlJykubGVuZ3RoIHx8IChlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxlbmd0aCA+IDEpKSB7XG4gICAgICAgICRjaGFydC5kYXRhKCdwYW5uaW5nJywgZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkY2hhcnQuY3NzKCdjdXJzb3InLCAnbW92ZScpLmRhdGEoJ3Bhbm5pbmcnLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIHZhciBsYXN0WCA9IDA7XG4gICAgICB2YXIgbGFzdFkgPSAwO1xuICAgICAgdmFyIGxhc3RUZiA9ICRjaGFydC5jc3MoJ3RyYW5zZm9ybScpO1xuICAgICAgaWYgKGxhc3RUZiAhPT0gJ25vbmUnKSB7XG4gICAgICAgIHZhciB0ZW1wID0gbGFzdFRmLnNwbGl0KCcsJyk7XG4gICAgICAgIGlmIChsYXN0VGYuaW5kZXhPZignM2QnKSA9PT0gLTEpIHtcbiAgICAgICAgICBsYXN0WCA9IHBhcnNlSW50KHRlbXBbNF0pO1xuICAgICAgICAgIGxhc3RZID0gcGFyc2VJbnQodGVtcFs1XSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGFzdFggPSBwYXJzZUludCh0ZW1wWzEyXSk7XG4gICAgICAgICAgbGFzdFkgPSBwYXJzZUludCh0ZW1wWzEzXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBzdGFydFggPSAwO1xuICAgICAgdmFyIHN0YXJ0WSA9IDA7XG4gICAgICBpZiAoIWUudGFyZ2V0VG91Y2hlcykgeyAvLyBwYW5kIG9uIGRlc2t0b3BcbiAgICAgICAgc3RhcnRYID0gZS5wYWdlWCAtIGxhc3RYO1xuICAgICAgICBzdGFydFkgPSBlLnBhZ2VZIC0gbGFzdFk7XG4gICAgICB9IGVsc2UgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPT09IDEpIHsgLy8gcGFuIG9uIG1vYmlsZSBkZXZpY2VcbiAgICAgICAgc3RhcnRYID0gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIC0gbGFzdFg7XG4gICAgICAgIHN0YXJ0WSA9IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWSAtIGxhc3RZO1xuICAgICAgfSBlbHNlIGlmIChlLnRhcmdldFRvdWNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAkY2hhcnQub24oJ21vdXNlbW92ZSB0b3VjaG1vdmUnLGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgaWYgKCEkY2hhcnQuZGF0YSgncGFubmluZycpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBuZXdYID0gMDtcbiAgICAgICAgdmFyIG5ld1kgPSAwO1xuICAgICAgICBpZiAoIWUudGFyZ2V0VG91Y2hlcykgeyAvLyBwYW5kIG9uIGRlc2t0b3BcbiAgICAgICAgICBuZXdYID0gZS5wYWdlWCAtIHN0YXJ0WDtcbiAgICAgICAgICBuZXdZID0gZS5wYWdlWSAtIHN0YXJ0WTtcbiAgICAgICAgfSBlbHNlIGlmIChlLnRhcmdldFRvdWNoZXMubGVuZ3RoID09PSAxKSB7IC8vIHBhbiBvbiBtb2JpbGUgZGV2aWNlXG4gICAgICAgICAgbmV3WCA9IGUudGFyZ2V0VG91Y2hlc1swXS5wYWdlWCAtIHN0YXJ0WDtcbiAgICAgICAgICBuZXdZID0gZS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VZIC0gc3RhcnRZO1xuICAgICAgICB9IGVsc2UgaWYgKGUudGFyZ2V0VG91Y2hlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsYXN0VGYgPSAkY2hhcnQuY3NzKCd0cmFuc2Zvcm0nKTtcbiAgICAgICAgaWYgKGxhc3RUZiA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgaWYgKGxhc3RUZi5pbmRleE9mKCczZCcpID09PSAtMSkge1xuICAgICAgICAgICAgJGNoYXJ0LmNzcygndHJhbnNmb3JtJywgJ21hdHJpeCgxLCAwLCAwLCAxLCAnICsgbmV3WCArICcsICcgKyBuZXdZICsgJyknKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGNoYXJ0LmNzcygndHJhbnNmb3JtJywgJ21hdHJpeDNkKDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsICcgKyBuZXdYICsgJywgJyArIG5ld1kgKyAnLCAwLCAxKScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgbWF0cml4ID0gbGFzdFRmLnNwbGl0KCcsJyk7XG4gICAgICAgICAgaWYgKGxhc3RUZi5pbmRleE9mKCczZCcpID09PSAtMSkge1xuICAgICAgICAgICAgbWF0cml4WzRdID0gJyAnICsgbmV3WDtcbiAgICAgICAgICAgIG1hdHJpeFs1XSA9ICcgJyArIG5ld1kgKyAnKSc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1hdHJpeFsxMl0gPSAnICcgKyBuZXdYO1xuICAgICAgICAgICAgbWF0cml4WzEzXSA9ICcgJyArIG5ld1k7XG4gICAgICAgICAgfVxuICAgICAgICAgICRjaGFydC5jc3MoJ3RyYW5zZm9ybScsIG1hdHJpeC5qb2luKCcsJykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIC8vXG4gICAgcGFuRW5kSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChlLmRhdGEuY2hhcnQuZGF0YSgncGFubmluZycpKSB7XG4gICAgICAgIGUuZGF0YS5jaGFydC5kYXRhKCdwYW5uaW5nJywgZmFsc2UpLmNzcygnY3Vyc29yJywgJ2RlZmF1bHQnKS5vZmYoJ21vdXNlbW92ZScpO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy9cbiAgICBiaW5kUGFuOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLiRjaGFydENvbnRhaW5lci5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuICAgICAgdGhpcy4kY2hhcnQub24oJ21vdXNlZG93biB0b3VjaHN0YXJ0JywgdGhpcy5wYW5TdGFydEhhbmRsZXIpO1xuICAgICAgJChkb2N1bWVudCkub24oJ21vdXNldXAgdG91Y2hlbmQnLCB7ICdjaGFydCc6IHRoaXMuJGNoYXJ0IH0sIHRoaXMucGFuRW5kSGFuZGxlcik7XG4gICAgfSxcbiAgICAvL1xuICAgIHVuYmluZFBhbjogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy4kY2hhcnRDb250YWluZXIuY3NzKCdvdmVyZmxvdycsICdhdXRvJyk7XG4gICAgICB0aGlzLiRjaGFydC5vZmYoJ21vdXNlZG93biB0b3VjaHN0YXJ0JywgdGhpcy5wYW5TdGFydEhhbmRsZXIpO1xuICAgICAgJChkb2N1bWVudCkub2ZmKCdtb3VzZXVwIHRvdWNoZW5kJywgdGhpcy5wYW5FbmRIYW5kbGVyKTtcbiAgICB9LFxuICAgIC8vXG4gICAgem9vbVdoZWVsSGFuZGxlcjogZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciBvYyA9IGUuZGF0YS5vYztcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHZhciBuZXdTY2FsZSAgPSAxICsgKGUub3JpZ2luYWxFdmVudC5kZWx0YVkgPiAwID8gLTAuMiA6IDAuMik7XG4gICAgICBvYy5zZXRDaGFydFNjYWxlKG9jLiRjaGFydCwgbmV3U2NhbGUpO1xuICAgIH0sXG4gICAgLy9cbiAgICB6b29tU3RhcnRIYW5kbGVyOiBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYoZS50b3VjaGVzICYmIGUudG91Y2hlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgdmFyIG9jID0gZS5kYXRhLm9jO1xuICAgICAgICBvYy4kY2hhcnQuZGF0YSgncGluY2hpbmcnLCB0cnVlKTtcbiAgICAgICAgdmFyIGRpc3QgPSBvYy5nZXRQaW5jaERpc3QoZSk7XG4gICAgICAgIG9jLiRjaGFydC5kYXRhKCdwaW5jaERpc3RTdGFydCcsIGRpc3QpO1xuICAgICAgfVxuICAgIH0sXG4gICAgem9vbWluZ0hhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgb2MgPSBlLmRhdGEub2M7XG4gICAgICBpZihvYy4kY2hhcnQuZGF0YSgncGluY2hpbmcnKSkge1xuICAgICAgICB2YXIgZGlzdCA9IG9jLmdldFBpbmNoRGlzdChlKTtcbiAgICAgICAgb2MuJGNoYXJ0LmRhdGEoJ3BpbmNoRGlzdEVuZCcsIGRpc3QpO1xuICAgICAgfVxuICAgIH0sXG4gICAgem9vbUVuZEhhbmRsZXI6IGZ1bmN0aW9uIChlKSB7XG4gICAgICB2YXIgb2MgPSBlLmRhdGEub2M7XG4gICAgICBpZihvYy4kY2hhcnQuZGF0YSgncGluY2hpbmcnKSkge1xuICAgICAgICBvYy4kY2hhcnQuZGF0YSgncGluY2hpbmcnLCBmYWxzZSk7XG4gICAgICAgIHZhciBkaWZmID0gb2MuJGNoYXJ0LmRhdGEoJ3BpbmNoRGlzdEVuZCcpIC0gb2MuJGNoYXJ0LmRhdGEoJ3BpbmNoRGlzdFN0YXJ0Jyk7XG4gICAgICAgIGlmIChkaWZmID4gMCkge1xuICAgICAgICAgIG9jLnNldENoYXJ0U2NhbGUob2MuJGNoYXJ0LCAxLjIpO1xuICAgICAgICB9IGVsc2UgaWYgKGRpZmYgPCAwKSB7XG4gICAgICAgICAgb2Muc2V0Q2hhcnRTY2FsZShvYy4kY2hhcnQsIDAuOCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgYmluZFpvb206IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuJGNoYXJ0Q29udGFpbmVyLm9uKCd3aGVlbCcsIHsgJ29jJzogdGhpcyB9LCB0aGlzLnpvb21XaGVlbEhhbmRsZXIpO1xuICAgICAgdGhpcy4kY2hhcnRDb250YWluZXIub24oJ3RvdWNoc3RhcnQnLCB7ICdvYyc6IHRoaXMgfSwgdGhpcy56b29tU3RhcnRIYW5kbGVyKTtcbiAgICAgICQoZG9jdW1lbnQpLm9uKCd0b3VjaG1vdmUnLCB7ICdvYyc6IHRoaXMgfSwgdGhpcy56b29taW5nSGFuZGxlcik7XG4gICAgICAkKGRvY3VtZW50KS5vbigndG91Y2hlbmQnLCB7ICdvYyc6IHRoaXMgfSwgdGhpcy56b29tRW5kSGFuZGxlcik7XG4gICAgfSxcbiAgICB1bmJpbmRab29tOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLiRjaGFydENvbnRhaW5lci5vZmYoJ3doZWVsJywgdGhpcy56b29tV2hlZWxIYW5kbGVyKTtcbiAgICAgIHRoaXMuJGNoYXJ0Q29udGFpbmVyLm9mZigndG91Y2hzdGFydCcsIHRoaXMuem9vbVN0YXJ0SGFuZGxlcik7XG4gICAgICAkKGRvY3VtZW50KS5vZmYoJ3RvdWNobW92ZScsIHRoaXMuem9vbWluZ0hhbmRsZXIpO1xuICAgICAgJChkb2N1bWVudCkub2ZmKCd0b3VjaGVuZCcsIHRoaXMuem9vbUVuZEhhbmRsZXIpO1xuICAgIH0sXG4gICAgLy9cbiAgICBnZXRQaW5jaERpc3Q6IGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KChlLnRvdWNoZXNbMF0uY2xpZW50WCAtIGUudG91Y2hlc1sxXS5jbGllbnRYKSAqIChlLnRvdWNoZXNbMF0uY2xpZW50WCAtIGUudG91Y2hlc1sxXS5jbGllbnRYKSArXG4gICAgICAoZS50b3VjaGVzWzBdLmNsaWVudFkgLSBlLnRvdWNoZXNbMV0uY2xpZW50WSkgKiAoZS50b3VjaGVzWzBdLmNsaWVudFkgLSBlLnRvdWNoZXNbMV0uY2xpZW50WSkpO1xuICAgIH0sXG4gICAgLy9cbiAgICBzZXRDaGFydFNjYWxlOiBmdW5jdGlvbiAoJGNoYXJ0LCBuZXdTY2FsZSkge1xuICAgICAgdmFyIG9wdHMgPSAkY2hhcnQuZGF0YSgnb3B0aW9ucycpO1xuICAgICAgdmFyIGxhc3RUZiA9ICRjaGFydC5jc3MoJ3RyYW5zZm9ybScpO1xuICAgICAgdmFyIG1hdHJpeCA9ICcnO1xuICAgICAgdmFyIHRhcmdldFNjYWxlID0gMTtcbiAgICAgIGlmIChsYXN0VGYgPT09ICdub25lJykge1xuICAgICAgICAkY2hhcnQuY3NzKCd0cmFuc2Zvcm0nLCAnc2NhbGUoJyArIG5ld1NjYWxlICsgJywnICsgbmV3U2NhbGUgKyAnKScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF0cml4ID0gbGFzdFRmLnNwbGl0KCcsJyk7XG4gICAgICAgIGlmIChsYXN0VGYuaW5kZXhPZignM2QnKSA9PT0gLTEpIHtcbiAgICAgICAgICB0YXJnZXRTY2FsZSA9IE1hdGguYWJzKHdpbmRvdy5wYXJzZUZsb2F0KG1hdHJpeFszXSkgKiBuZXdTY2FsZSk7XG4gICAgICAgICAgaWYgKHRhcmdldFNjYWxlID4gb3B0cy56b29tb3V0TGltaXQgJiYgdGFyZ2V0U2NhbGUgPCBvcHRzLnpvb21pbkxpbWl0KSB7XG4gICAgICAgICAgICAkY2hhcnQuY3NzKCd0cmFuc2Zvcm0nLCBsYXN0VGYgKyAnIHNjYWxlKCcgKyBuZXdTY2FsZSArICcsJyArIG5ld1NjYWxlICsgJyknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0U2NhbGUgPSBNYXRoLmFicyh3aW5kb3cucGFyc2VGbG9hdChtYXRyaXhbMV0pICogbmV3U2NhbGUpO1xuICAgICAgICAgIGlmICh0YXJnZXRTY2FsZSA+IG9wdHMuem9vbW91dExpbWl0ICYmIHRhcmdldFNjYWxlIDwgb3B0cy56b29taW5MaW1pdCkge1xuICAgICAgICAgICAgJGNoYXJ0LmNzcygndHJhbnNmb3JtJywgbGFzdFRmICsgJyBzY2FsZTNkKCcgKyBuZXdTY2FsZSArICcsJyArIG5ld1NjYWxlICsgJywgMSknKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgYnVpbGRKc29uRFM6IGZ1bmN0aW9uICgkbGkpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBzdWJPYmogPSB7XG4gICAgICAgICduYW1lJzogJGxpLmNvbnRlbnRzKCkuZXEoMCkudGV4dCgpLnRyaW0oKSxcbiAgICAgICAgJ3JlbGF0aW9uc2hpcCc6ICgkbGkucGFyZW50KCkucGFyZW50KCkuaXMoJ2xpJykgPyAnMSc6ICcwJykgKyAoJGxpLnNpYmxpbmdzKCdsaScpLmxlbmd0aCA/IDE6IDApICsgKCRsaS5jaGlsZHJlbigndWwnKS5sZW5ndGggPyAxIDogMClcbiAgICAgIH07XG4gICAgICBpZiAoJGxpLmF0dHIoJ2RhdGEtaWQnKSkge1xuICAgICAgICBzdWJPYmouaWQgPSAkbGkuYXR0cignZGF0YS1pZCcpO1xuICAgICAgfVxuICAgICAgJGxpLmNoaWxkcmVuKCd1bCcpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCFzdWJPYmouY2hpbGRyZW4pIHsgc3ViT2JqLmNoaWxkcmVuID0gW107IH1cbiAgICAgICAgc3ViT2JqLmNoaWxkcmVuLnB1c2godGhhdC5idWlsZEpzb25EUygkKHRoaXMpKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBzdWJPYmo7XG4gICAgfSxcbiAgICAvL1xuICAgIGF0dGFjaFJlbDogZnVuY3Rpb24gKGRhdGEsIGZsYWdzKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICBkYXRhLnJlbGF0aW9uc2hpcCA9IGZsYWdzICsgKGRhdGEuY2hpbGRyZW4gJiYgZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAwID8gMSA6IDApO1xuICAgICAgaWYgKGRhdGEuY2hpbGRyZW4pIHtcbiAgICAgICAgZGF0YS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICB0aGF0LmF0dGFjaFJlbChpdGVtLCAnMScgKyAoZGF0YS5jaGlsZHJlbi5sZW5ndGggPiAxID8gMSA6IDApKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIC8vXG4gICAgbG9vcENoYXJ0OiBmdW5jdGlvbiAoJGNoYXJ0KSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgJHRyID0gJGNoYXJ0LmZpbmQoJ3RyOmZpcnN0Jyk7XG4gICAgICB2YXIgc3ViT2JqID0geyAnaWQnOiAkdHIuZmluZCgnLm5vZGUnKVswXS5pZCB9O1xuICAgICAgJHRyLnNpYmxpbmdzKCc6bGFzdCcpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCFzdWJPYmouY2hpbGRyZW4pIHsgc3ViT2JqLmNoaWxkcmVuID0gW107IH1cbiAgICAgICAgc3ViT2JqLmNoaWxkcmVuLnB1c2godGhhdC5sb29wQ2hhcnQoJCh0aGlzKSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3ViT2JqO1xuICAgIH0sXG4gICAgLy9cbiAgICBnZXRIaWVyYXJjaHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy4kY2hhcnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAnRXJyb3I6IG9yZ2NoYXJ0IGRvZXMgbm90IGV4aXN0J1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLiRjaGFydC5maW5kKCcubm9kZScpLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiAnRXJyb3I6IG5vZGVzIGRvIG5vdCBleGlzdCdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgdmFsaWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuJGNoYXJ0LmZpbmQoJy5ub2RlJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiAnRXJyb3I6IEFsbCBub2RlcyBvZiBvcmdoY2FydCB0byBiZSBleHBvcnRlZCBtdXN0IGhhdmUgZGF0YS1pZCBhdHRyaWJ1dGUhJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmxvb3BDaGFydCh0aGlzLiRjaGFydCk7XG4gICAgfSxcbiAgICAvLyBkZXRlY3QgdGhlIGV4aXN0L2Rpc3BsYXkgc3RhdGUgb2YgcmVsYXRlZCBub2RlXG4gICAgZ2V0Tm9kZVN0YXRlOiBmdW5jdGlvbiAoJG5vZGUsIHJlbGF0aW9uKSB7XG4gICAgICB2YXIgJHRhcmdldCA9IHt9O1xuICAgICAgdmFyIHJlbGF0aW9uID0gcmVsYXRpb24gfHwgJ3NlbGYnO1xuICAgICAgaWYgKHJlbGF0aW9uID09PSAncGFyZW50Jykge1xuICAgICAgICAkdGFyZ2V0ID0gJG5vZGUuY2xvc2VzdCgnLm5vZGVzJykuc2libGluZ3MoJzpmaXJzdCcpO1xuICAgICAgICBpZiAoJHRhcmdldC5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoJHRhcmdldC5pcygnLmhpZGRlbicpIHx8ICghJHRhcmdldC5pcygnLmhpZGRlbicpICYmICR0YXJnZXQuY2xvc2VzdCgnLm5vZGVzJykuaXMoJy5oaWRkZW4nKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7ICdleGlzdCc6IHRydWUsICd2aXNpYmxlJzogZmFsc2UgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgJ2V4aXN0JzogdHJ1ZSwgJ3Zpc2libGUnOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocmVsYXRpb24gPT09ICdjaGlsZHJlbicpIHtcbiAgICAgICAgJHRhcmdldCA9ICRub2RlLmNsb3Nlc3QoJ3RyJykuc2libGluZ3MoJzpsYXN0Jyk7XG4gICAgICAgIGlmICgkdGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICAgIGlmICghJHRhcmdldC5pcygnLmhpZGRlbicpKSB7XG4gICAgICAgICAgICByZXR1cm4geyAnZXhpc3QnOiB0cnVlLCAndmlzaWJsZSc6IHRydWUgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgJ2V4aXN0JzogdHJ1ZSwgJ3Zpc2libGUnOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uID09PSAnc2libGluZ3MnKSB7XG4gICAgICAgICR0YXJnZXQgPSAkbm9kZS5jbG9zZXN0KCd0YWJsZScpLnBhcmVudCgpLnNpYmxpbmdzKCk7XG4gICAgICAgIGlmICgkdGFyZ2V0Lmxlbmd0aCkge1xuICAgICAgICAgIGlmICghJHRhcmdldC5pcygnLmhpZGRlbicpICYmICEkdGFyZ2V0LnBhcmVudCgpLmlzKCcuaGlkZGVuJykpIHtcbiAgICAgICAgICAgIHJldHVybiB7ICdleGlzdCc6IHRydWUsICd2aXNpYmxlJzogdHJ1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAnZXhpc3QnOiB0cnVlLCAndmlzaWJsZSc6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICR0YXJnZXQgPSAkbm9kZTtcbiAgICAgICAgaWYgKCR0YXJnZXQubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKCEoKCR0YXJnZXQuY2xvc2VzdCgnLm5vZGVzJykubGVuZ3RoICYmICR0YXJnZXQuY2xvc2VzdCgnLm5vZGVzJykuaXMoJy5oaWRkZW4nKSkgfHxcbiAgICAgICAgICAgICgkdGFyZ2V0LmNsb3Nlc3QoJ3RhYmxlJykucGFyZW50KCkubGVuZ3RoICYmICR0YXJnZXQuY2xvc2VzdCgndGFibGUnKS5wYXJlbnQoKS5pcygnLmhpZGRlbicpKSB8fFxuICAgICAgICAgICAgKCR0YXJnZXQucGFyZW50KCkuaXMoJ2xpJykgJiYgKCR0YXJnZXQuY2xvc2VzdCgndWwnKS5pcygnLmhpZGRlbicpIHx8ICR0YXJnZXQuY2xvc2VzdCgndmVydGljYWxOb2RlcycpLmlzKCcuaGlkZGVuJykpKVxuICAgICAgICAgICkpIHtcbiAgICAgICAgICAgIHJldHVybiB7ICdleGlzdCc6IHRydWUsICd2aXNpYmxlJzogdHJ1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAnZXhpc3QnOiB0cnVlLCAndmlzaWJsZSc6IGZhbHNlIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7ICdleGlzdCc6IGZhbHNlLCAndmlzaWJsZSc6IGZhbHNlIH07XG4gICAgfSxcbiAgICAvLyBmaW5kIHRoZSByZWxhdGVkIG5vZGVzXG4gICAgZ2V0UmVsYXRlZE5vZGVzOiBmdW5jdGlvbiAoJG5vZGUsIHJlbGF0aW9uKSB7XG4gICAgICBpZiAoISRub2RlIHx8ICEoJG5vZGUgaW5zdGFuY2VvZiAkKSB8fCAhJG5vZGUuaXMoJy5ub2RlJykpIHtcbiAgICAgICAgcmV0dXJuICQoKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWxhdGlvbiA9PT0gJ3BhcmVudCcpIHtcbiAgICAgICAgcmV0dXJuICRub2RlLmNsb3Nlc3QoJy5ub2RlcycpLnBhcmVudCgpLmNoaWxkcmVuKCc6Zmlyc3QnKS5maW5kKCcubm9kZScpO1xuICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbiA9PT0gJ2NoaWxkcmVuJykge1xuICAgICAgICByZXR1cm4gJG5vZGUuY2xvc2VzdCgndHInKS5zaWJsaW5ncygnLm5vZGVzJykuY2hpbGRyZW4oKS5maW5kKCcubm9kZTpmaXJzdCcpO1xuICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbiA9PT0gJ3NpYmxpbmdzJykge1xuICAgICAgICByZXR1cm4gJG5vZGUuY2xvc2VzdCgndGFibGUnKS5wYXJlbnQoKS5zaWJsaW5ncygpLmZpbmQoJy5ub2RlOmZpcnN0Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGlkZVBhcmVudEVuZDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAkKGV2ZW50LnRhcmdldCkucmVtb3ZlQ2xhc3MoJ3NsaWRpbmcnKTtcbiAgICAgIGV2ZW50LmRhdGEudXBwZXJMZXZlbC5hZGRDbGFzcygnaGlkZGVuJykuc2xpY2UoMSkucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICB9LFxuICAgIC8vIHJlY3Vyc2l2ZWx5IGhpZGUgdGhlIGFuY2VzdG9yIG5vZGUgYW5kIHNpYmxpbmcgbm9kZXMgb2YgdGhlIHNwZWNpZmllZCBub2RlXG4gICAgaGlkZVBhcmVudDogZnVuY3Rpb24gKCRub2RlKSB7XG4gICAgICB2YXIgJHVwcGVyTGV2ZWwgPSAkbm9kZS5jbG9zZXN0KCcubm9kZXMnKS5zaWJsaW5ncygpO1xuICAgICAgaWYgKCR1cHBlckxldmVsLmVxKDApLmZpbmQoJy5zcGlubmVyJykubGVuZ3RoKSB7XG4gICAgICAgICRub2RlLmNsb3Nlc3QoJy5vcmdjaGFydCcpLmRhdGEoJ2luQWpheCcsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIC8vIGhpZGUgdGhlIHNpYmxpbmcgbm9kZXNcbiAgICAgIGlmICh0aGlzLmdldE5vZGVTdGF0ZSgkbm9kZSwgJ3NpYmxpbmdzJykudmlzaWJsZSkge1xuICAgICAgICB0aGlzLmhpZGVTaWJsaW5ncygkbm9kZSk7XG4gICAgICB9XG4gICAgICAvLyBoaWRlIHRoZSBsaW5lc1xuICAgICAgdmFyICRsaW5lcyA9ICR1cHBlckxldmVsLnNsaWNlKDEpO1xuICAgICAgJGxpbmVzLmNzcygndmlzaWJpbGl0eScsICdoaWRkZW4nKTtcbiAgICAgIC8vIGhpZGUgdGhlIHN1cGVyaW9yIG5vZGVzIHdpdGggdHJhbnNpdGlvblxuICAgICAgdmFyICRwYXJlbnQgPSAkdXBwZXJMZXZlbC5lcSgwKS5maW5kKCcubm9kZScpO1xuICAgICAgaWYgKHRoaXMuZ2V0Tm9kZVN0YXRlKCRwYXJlbnQpLnZpc2libGUpIHtcbiAgICAgICAgJHBhcmVudC5hZGRDbGFzcygnc2xpZGluZyBzbGlkZS1kb3duJykub25lKCd0cmFuc2l0aW9uZW5kJywgeyAndXBwZXJMZXZlbCc6ICR1cHBlckxldmVsIH0sIHRoaXMuaGlkZVBhcmVudEVuZCk7XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgY3VycmVudCBub2RlIGhhcyB0aGUgcGFyZW50IG5vZGUsIGhpZGUgaXQgcmVjdXJzaXZlbHlcbiAgICAgIGlmICh0aGlzLmdldE5vZGVTdGF0ZSgkcGFyZW50LCAncGFyZW50JykudmlzaWJsZSkge1xuICAgICAgICB0aGlzLmhpZGVQYXJlbnQoJHBhcmVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzaG93UGFyZW50RW5kOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciAkbm9kZSA9IGV2ZW50LmRhdGEubm9kZTtcbiAgICAgICQoZXZlbnQudGFyZ2V0KS5yZW1vdmVDbGFzcygnc2xpZGluZycpO1xuICAgICAgaWYgKHRoaXMuaXNJbkFjdGlvbigkbm9kZSkpIHtcbiAgICAgICAgdGhpcy5zd2l0Y2hWZXJ0aWNhbEFycm93KCRub2RlLmNoaWxkcmVuKCcudG9wRWRnZScpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIHNob3cgdGhlIHBhcmVudCBub2RlIG9mIHRoZSBzcGVjaWZpZWQgbm9kZVxuICAgIHNob3dQYXJlbnQ6IGZ1bmN0aW9uICgkbm9kZSkge1xuICAgICAgLy8ganVzdCBzaG93IG9ubHkgb25lIHN1cGVyaW9yIGxldmVsXG4gICAgICB2YXIgJHVwcGVyTGV2ZWwgPSAkbm9kZS5jbG9zZXN0KCcubm9kZXMnKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgIC8vIGp1c3Qgc2hvdyBvbmx5IG9uZSBsaW5lXG4gICAgICAkdXBwZXJMZXZlbC5lcSgyKS5jaGlsZHJlbigpLnNsaWNlKDEsIC0xKS5hZGRDbGFzcygnaGlkZGVuJyk7XG4gICAgICAvLyBzaG93IHBhcmVudCBub2RlIHdpdGggYW5pbWF0aW9uXG4gICAgICB2YXIgJHBhcmVudCA9ICR1cHBlckxldmVsLmVxKDApLmZpbmQoJy5ub2RlJyk7XG4gICAgICB0aGlzLnJlcGFpbnQoJHBhcmVudFswXSk7XG4gICAgICAkcGFyZW50LmFkZENsYXNzKCdzbGlkaW5nJykucmVtb3ZlQ2xhc3MoJ3NsaWRlLWRvd24nKS5vbmUoJ3RyYW5zaXRpb25lbmQnLCB7ICdub2RlJzogJG5vZGUgfSwgdGhpcy5zaG93UGFyZW50RW5kLmJpbmQodGhpcykpO1xuICAgIH0sXG4gICAgc3RvcEFqYXg6IGZ1bmN0aW9uICgkbm9kZUxldmVsKSB7XG4gICAgICBpZiAoJG5vZGVMZXZlbC5maW5kKCcuc3Bpbm5lcicpLmxlbmd0aCkge1xuICAgICAgICAkbm9kZUxldmVsLmNsb3Nlc3QoJy5vcmdjaGFydCcpLmRhdGEoJ2luQWpheCcsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGlzVmlzaWJsZU5vZGU6IGZ1bmN0aW9uIChpbmRleCwgZWxlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Tm9kZVN0YXRlKCQoZWxlbSkpLnZpc2libGU7XG4gICAgfSxcbiAgICAvL1xuICAgIGhpZGVDaGlsZHJlbkVuZDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgJG5vZGUgPSBldmVudC5kYXRhLm5vZGU7XG4gICAgICBldmVudC5kYXRhLmFuaW1hdGVkTm9kZXMucmVtb3ZlQ2xhc3MoJ3NsaWRpbmcnKTtcbiAgICAgIGlmIChldmVudC5kYXRhLmlzVmVydGljYWxEZXNjKSB7XG4gICAgICAgIGV2ZW50LmRhdGEubG93ZXJMZXZlbC5hZGRDbGFzcygnaGlkZGVuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudC5kYXRhLmFuaW1hdGVkTm9kZXMuY2xvc2VzdCgnLm5vZGVzJykucHJldkFsbCgnLmxpbmVzJykucmVtb3ZlQXR0cignc3R5bGUnKS5hZGRCYWNrKCkuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICBldmVudC5kYXRhLmxvd2VyTGV2ZWwubGFzdCgpLmZpbmQoJy52ZXJ0aWNhbE5vZGVzJykuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbkFjdGlvbigkbm9kZSkpIHtcbiAgICAgICAgdGhpcy5zd2l0Y2hWZXJ0aWNhbEFycm93KCRub2RlLmNoaWxkcmVuKCcuYm90dG9tRWRnZScpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIHJlY3Vyc2l2ZWx5IGhpZGUgdGhlIGRlc2NlbmRhbnQgbm9kZXMgb2YgdGhlIHNwZWNpZmllZCBub2RlXG4gICAgaGlkZUNoaWxkcmVuOiBmdW5jdGlvbiAoJG5vZGUpIHtcbiAgICAgIHZhciAkbG93ZXJMZXZlbCA9ICRub2RlLmNsb3Nlc3QoJ3RyJykuc2libGluZ3MoKTtcbiAgICAgIHRoaXMuc3RvcEFqYXgoJGxvd2VyTGV2ZWwubGFzdCgpKTtcbiAgICAgIHZhciAkYW5pbWF0ZWROb2RlcyA9ICRsb3dlckxldmVsLmxhc3QoKS5maW5kKCcubm9kZScpLmZpbHRlcih0aGlzLmlzVmlzaWJsZU5vZGUuYmluZCh0aGlzKSk7XG4gICAgICB2YXIgaXNWZXJ0aWNhbERlc2MgPSAkbG93ZXJMZXZlbC5sYXN0KCkuaXMoJy52ZXJ0aWNhbE5vZGVzJykgPyB0cnVlIDogZmFsc2U7XG4gICAgICBpZiAoIWlzVmVydGljYWxEZXNjKSB7XG4gICAgICAgICRhbmltYXRlZE5vZGVzLmNsb3Nlc3QoJ3RhYmxlJykuY2xvc2VzdCgndHInKS5wcmV2QWxsKCcubGluZXMnKS5jc3MoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlcGFpbnQoJGFuaW1hdGVkTm9kZXMuZ2V0KDApKTtcbiAgICAgICRhbmltYXRlZE5vZGVzLmFkZENsYXNzKCdzbGlkaW5nIHNsaWRlLXVwJykuZXEoMCkub25lKCd0cmFuc2l0aW9uZW5kJywgeyAnYW5pbWF0ZWROb2Rlcyc6ICRhbmltYXRlZE5vZGVzLCAnbG93ZXJMZXZlbCc6ICRsb3dlckxldmVsLCAnaXNWZXJ0aWNhbERlc2MnOiBpc1ZlcnRpY2FsRGVzYywgJ25vZGUnOiAkbm9kZSB9LCB0aGlzLmhpZGVDaGlsZHJlbkVuZC5iaW5kKHRoaXMpKTtcbiAgICB9LFxuICAgIC8vXG4gICAgc2hvd0NoaWxkcmVuRW5kOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciAkbm9kZSA9IGV2ZW50LmRhdGEubm9kZTtcbiAgICAgIGV2ZW50LmRhdGEuYW5pbWF0ZWROb2Rlcy5yZW1vdmVDbGFzcygnc2xpZGluZycpO1xuICAgICAgaWYgKHRoaXMuaXNJbkFjdGlvbigkbm9kZSkpIHtcbiAgICAgICAgdGhpcy5zd2l0Y2hWZXJ0aWNhbEFycm93KCRub2RlLmNoaWxkcmVuKCcuYm90dG9tRWRnZScpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIHNob3cgdGhlIGNoaWxkcmVuIG5vZGVzIG9mIHRoZSBzcGVjaWZpZWQgbm9kZVxuICAgIHNob3dDaGlsZHJlbjogZnVuY3Rpb24gKCRub2RlKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgJGxldmVscyA9ICRub2RlLmNsb3Nlc3QoJ3RyJykuc2libGluZ3MoKTtcbiAgICAgIHZhciBpc1ZlcnRpY2FsRGVzYyA9ICRsZXZlbHMuaXMoJy52ZXJ0aWNhbE5vZGVzJykgPyB0cnVlIDogZmFsc2U7XG4gICAgICB2YXIgJGFuaW1hdGVkTm9kZXMgPSBpc1ZlcnRpY2FsRGVzY1xuICAgICAgICA/ICRsZXZlbHMucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpLmZpbmQoJy5ub2RlJykuZmlsdGVyKHRoaXMuaXNWaXNpYmxlTm9kZS5iaW5kKHRoaXMpKVxuICAgICAgICA6ICRsZXZlbHMucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpLmVxKDIpLmNoaWxkcmVuKCkuZmluZCgnLm5vZGU6Zmlyc3QnKS5maWx0ZXIodGhpcy5pc1Zpc2libGVOb2RlLmJpbmQodGhpcykpO1xuICAgICAgLy8gdGhlIHR3byBmb2xsb3dpbmcgc3RhdGVtZW50cyBhcmUgdXNlZCB0byBlbmZvcmNlIGJyb3dzZXIgdG8gcmVwYWludFxuICAgICAgdGhpcy5yZXBhaW50KCRhbmltYXRlZE5vZGVzLmdldCgwKSk7XG4gICAgICAkYW5pbWF0ZWROb2Rlcy5hZGRDbGFzcygnc2xpZGluZycpLnJlbW92ZUNsYXNzKCdzbGlkZS11cCcpLmVxKDApLm9uZSgndHJhbnNpdGlvbmVuZCcsIHsgJ25vZGUnOiAkbm9kZSwgJ2FuaW1hdGVkTm9kZXMnOiAkYW5pbWF0ZWROb2RlcyB9LCB0aGlzLnNob3dDaGlsZHJlbkVuZC5iaW5kKHRoaXMpKTtcbiAgICB9LFxuICAgIC8vXG4gICAgaGlkZVNpYmxpbmdzRW5kOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciAkbm9kZSA9IGV2ZW50LmRhdGEubm9kZTtcbiAgICAgIHZhciAkbm9kZUNvbnRhaW5lciA9IGV2ZW50LmRhdGEubm9kZUNvbnRhaW5lcjtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSBldmVudC5kYXRhLmRpcmVjdGlvbjtcbiAgICAgIGV2ZW50LmRhdGEubGluZXMucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICAgIHZhciAkc2libGluZ3MgPSBkaXJlY3Rpb24gPyAoZGlyZWN0aW9uID09PSAnbGVmdCcgPyAkbm9kZUNvbnRhaW5lci5wcmV2QWxsKCc6bm90KC5oaWRkZW4pJykgOiAkbm9kZUNvbnRhaW5lci5uZXh0QWxsKCc6bm90KC5oaWRkZW4pJykpIDogJG5vZGVDb250YWluZXIuc2libGluZ3MoKTtcbiAgICAgICRub2RlQ29udGFpbmVyLmNsb3Nlc3QoJy5ub2RlcycpLnByZXYoKS5jaGlsZHJlbignOm5vdCguaGlkZGVuKScpXG4gICAgICAgIC5zbGljZSgxLCBkaXJlY3Rpb24gPyAkc2libGluZ3MubGVuZ3RoICogMiArIDEgOiAtMSkuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgZXZlbnQuZGF0YS5hbmltYXRlZE5vZGVzLnJlbW92ZUNsYXNzKCdzbGlkaW5nJyk7XG4gICAgICAkc2libGluZ3MuZmluZCgnLm5vZGU6Z3QoMCknKS5maWx0ZXIodGhpcy5pc1Zpc2libGVOb2RlLmJpbmQodGhpcykpXG4gICAgICAgIC5yZW1vdmVDbGFzcygnc2xpZGUtbGVmdCBzbGlkZS1yaWdodCcpLmFkZENsYXNzKCdzbGlkZS11cCcpO1xuICAgICAgJHNpYmxpbmdzLmZpbmQoJy5saW5lcywgLm5vZGVzLCAudmVydGljYWxOb2RlcycpLmFkZENsYXNzKCdoaWRkZW4nKVxuICAgICAgICAuZW5kKCkuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuXG4gICAgICBpZiAodGhpcy5pc0luQWN0aW9uKCRub2RlKSkge1xuICAgICAgICB0aGlzLnN3aXRjaEhvcml6b250YWxBcnJvdygkbm9kZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBoaWRlIHRoZSBzaWJsaW5nIG5vZGVzIG9mIHRoZSBzcGVjaWZpZWQgbm9kZVxuICAgIGhpZGVTaWJsaW5nczogZnVuY3Rpb24gKCRub2RlLCBkaXJlY3Rpb24pIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciAkbm9kZUNvbnRhaW5lciA9ICRub2RlLmNsb3Nlc3QoJ3RhYmxlJykucGFyZW50KCk7XG4gICAgICBpZiAoJG5vZGVDb250YWluZXIuc2libGluZ3MoKS5maW5kKCcuc3Bpbm5lcicpLmxlbmd0aCkge1xuICAgICAgICAkbm9kZS5jbG9zZXN0KCcub3JnY2hhcnQnKS5kYXRhKCdpbkFqYXgnLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICRub2RlQ29udGFpbmVyLnByZXZBbGwoKS5maW5kKCcubm9kZScpLmZpbHRlcih0aGlzLmlzVmlzaWJsZU5vZGUuYmluZCh0aGlzKSkuYWRkQ2xhc3MoJ3NsaWRpbmcgc2xpZGUtcmlnaHQnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkbm9kZUNvbnRhaW5lci5uZXh0QWxsKCkuZmluZCgnLm5vZGUnKS5maWx0ZXIodGhpcy5pc1Zpc2libGVOb2RlLmJpbmQodGhpcykpLmFkZENsYXNzKCdzbGlkaW5nIHNsaWRlLWxlZnQnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJG5vZGVDb250YWluZXIucHJldkFsbCgpLmZpbmQoJy5ub2RlJykuZmlsdGVyKHRoaXMuaXNWaXNpYmxlTm9kZS5iaW5kKHRoaXMpKS5hZGRDbGFzcygnc2xpZGluZyBzbGlkZS1yaWdodCcpO1xuICAgICAgICAkbm9kZUNvbnRhaW5lci5uZXh0QWxsKCkuZmluZCgnLm5vZGUnKS5maWx0ZXIodGhpcy5pc1Zpc2libGVOb2RlLmJpbmQodGhpcykpLmFkZENsYXNzKCdzbGlkaW5nIHNsaWRlLWxlZnQnKTtcbiAgICAgIH1cbiAgICAgIHZhciAkYW5pbWF0ZWROb2RlcyA9ICRub2RlQ29udGFpbmVyLnNpYmxpbmdzKCkuZmluZCgnLnNsaWRpbmcnKTtcbiAgICAgIHZhciAkbGluZXMgPSAkYW5pbWF0ZWROb2Rlcy5jbG9zZXN0KCcubm9kZXMnKS5wcmV2QWxsKCcubGluZXMnKS5jc3MoJ3Zpc2liaWxpdHknLCAnaGlkZGVuJyk7XG4gICAgICAkYW5pbWF0ZWROb2Rlcy5lcSgwKS5vbmUoJ3RyYW5zaXRpb25lbmQnLCB7ICdub2RlJzogJG5vZGUsICdub2RlQ29udGFpbmVyJzogJG5vZGVDb250YWluZXIsICdkaXJlY3Rpb24nOiBkaXJlY3Rpb24sICdhbmltYXRlZE5vZGVzJzogJGFuaW1hdGVkTm9kZXMsICdsaW5lcyc6ICRsaW5lcyB9LCB0aGlzLmhpZGVTaWJsaW5nc0VuZC5iaW5kKHRoaXMpKTtcbiAgICB9LFxuICAgIC8vXG4gICAgc2hvd1NpYmxpbmdzRW5kOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciAkbm9kZSA9IGV2ZW50LmRhdGEubm9kZTtcbiAgICAgIGV2ZW50LmRhdGEudmlzaWJsZU5vZGVzLnJlbW92ZUNsYXNzKCdzbGlkaW5nJyk7XG4gICAgICBpZiAodGhpcy5pc0luQWN0aW9uKCRub2RlKSkge1xuICAgICAgICB0aGlzLnN3aXRjaEhvcml6b250YWxBcnJvdygkbm9kZSk7XG4gICAgICAgICRub2RlLmNoaWxkcmVuKCcudG9wRWRnZScpLnJlbW92ZUNsYXNzKCdmYS1jaGV2cm9uLXVwJykuYWRkQ2xhc3MoJ2ZhLWNoZXZyb24tZG93bicpO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy9cbiAgICBzaG93UmVsYXRlZFBhcmVudEVuZDogZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICQoZXZlbnQudGFyZ2V0KS5yZW1vdmVDbGFzcygnc2xpZGluZycpO1xuICAgIH0sXG4gICAgLy8gc2hvdyB0aGUgc2libGluZyBub2RlcyBvZiB0aGUgc3BlY2lmaWVkIG5vZGVcbiAgICBzaG93U2libGluZ3M6IGZ1bmN0aW9uICgkbm9kZSwgZGlyZWN0aW9uKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAvLyBmaXJzdGx5LCBzaG93IHRoZSBzaWJsaW5nIHRkIHRhZ3NcbiAgICAgIHZhciAkc2libGluZ3MgPSAkKCk7XG4gICAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICRzaWJsaW5ncyA9ICRub2RlLmNsb3Nlc3QoJ3RhYmxlJykucGFyZW50KCkucHJldkFsbCgpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkc2libGluZ3MgPSAkbm9kZS5jbG9zZXN0KCd0YWJsZScpLnBhcmVudCgpLm5leHRBbGwoKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRzaWJsaW5ncyA9ICRub2RlLmNsb3Nlc3QoJ3RhYmxlJykucGFyZW50KCkuc2libGluZ3MoKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgICB9XG4gICAgICAvLyBzZWNvbmRseSwgc2hvdyB0aGUgbGluZXNcbiAgICAgIHZhciAkdXBwZXJMZXZlbCA9ICRub2RlLmNsb3Nlc3QoJ3RhYmxlJykuY2xvc2VzdCgndHInKS5zaWJsaW5ncygpO1xuICAgICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgICAkdXBwZXJMZXZlbC5lcSgyKS5jaGlsZHJlbignLmhpZGRlbicpLnNsaWNlKDAsICRzaWJsaW5ncy5sZW5ndGggKiAyKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkdXBwZXJMZXZlbC5lcSgyKS5jaGlsZHJlbignLmhpZGRlbicpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgIH1cbiAgICAgIC8vIHRoaXJkbHksIGRvIHNvbWUgY2xlYW5pbmcgc3R1ZmZcbiAgICAgIGlmICghdGhpcy5nZXROb2RlU3RhdGUoJG5vZGUsICdwYXJlbnQnKS52aXNpYmxlKSB7XG4gICAgICAgICR1cHBlckxldmVsLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgdmFyIHBhcmVudCA9ICR1cHBlckxldmVsLmZpbmQoJy5ub2RlJylbMF07XG4gICAgICAgIHRoaXMucmVwYWludChwYXJlbnQpO1xuICAgICAgICAkKHBhcmVudCkuYWRkQ2xhc3MoJ3NsaWRpbmcnKS5yZW1vdmVDbGFzcygnc2xpZGUtZG93bicpLm9uZSgndHJhbnNpdGlvbmVuZCcsIHRoaXMuc2hvd1JlbGF0ZWRQYXJlbnRFbmQpO1xuICAgICAgfVxuICAgICAgLy8gbGFzdGx5LCBzaG93IHRoZSBzaWJsaW5nIG5vZGVzIHdpdGggYW5pbWF0aW9uXG4gICAgICB2YXIgJHZpc2libGVOb2RlcyA9ICRzaWJsaW5ncy5maW5kKCcubm9kZScpLmZpbHRlcih0aGlzLmlzVmlzaWJsZU5vZGUuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLnJlcGFpbnQoJHZpc2libGVOb2Rlcy5nZXQoMCkpO1xuICAgICAgJHZpc2libGVOb2Rlcy5hZGRDbGFzcygnc2xpZGluZycpLnJlbW92ZUNsYXNzKCdzbGlkZS1sZWZ0IHNsaWRlLXJpZ2h0Jyk7XG4gICAgICAkdmlzaWJsZU5vZGVzLmVxKDApLm9uZSgndHJhbnNpdGlvbmVuZCcsIHsgJ25vZGUnOiAkbm9kZSwgJ3Zpc2libGVOb2Rlcyc6ICR2aXNpYmxlTm9kZXMgfSwgdGhpcy5zaG93U2libGluZ3NFbmQuYmluZCh0aGlzKSk7XG4gICAgfSxcbiAgICAvLyBzdGFydCB1cCBsb2FkaW5nIHN0YXR1cyBmb3IgcmVxdWVzdGluZyBuZXcgbm9kZXNcbiAgICBzdGFydExvYWRpbmc6IGZ1bmN0aW9uICgkZWRnZSkge1xuICAgICAgdmFyICRjaGFydCA9IHRoaXMuJGNoYXJ0O1xuICAgICAgaWYgKHR5cGVvZiAkY2hhcnQuZGF0YSgnaW5BamF4JykgIT09ICd1bmRlZmluZWQnICYmICRjaGFydC5kYXRhKCdpbkFqYXgnKSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgICRlZGdlLmFkZENsYXNzKCdoaWRkZW4nKTtcbiAgICAgICRlZGdlLnBhcmVudCgpLmFwcGVuZCgnPGkgY2xhc3M9XCJmYSBmYS1jaXJjbGUtby1ub3RjaCBmYS1zcGluIHNwaW5uZXJcIj48L2k+JylcbiAgICAgICAgLmNoaWxkcmVuKCkubm90KCcuc3Bpbm5lcicpLmNzcygnb3BhY2l0eScsIDAuMik7XG4gICAgICAkY2hhcnQuZGF0YSgnaW5BamF4JywgdHJ1ZSk7XG4gICAgICAkKCcub2MtZXhwb3J0LWJ0bicgKyAodGhpcy5vcHRpb25zLmNoYXJ0Q2xhc3MgIT09ICcnID8gJy4nICsgdGhpcy5vcHRpb25zLmNoYXJ0Q2xhc3MgOiAnJykpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIC8vIHRlcm1pbmF0ZSBsb2FkaW5nIHN0YXR1cyBmb3IgcmVxdWVzdGluZyBuZXcgbm9kZXNcbiAgICBlbmRMb2FkaW5nOiBmdW5jdGlvbiAoJGVkZ2UpIHtcbiAgICAgIHZhciAkbm9kZSA9ICRlZGdlLnBhcmVudCgpO1xuICAgICAgJGVkZ2UucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgJG5vZGUuZmluZCgnLnNwaW5uZXInKS5yZW1vdmUoKTtcbiAgICAgICRub2RlLmNoaWxkcmVuKCkucmVtb3ZlQXR0cignc3R5bGUnKTtcbiAgICAgIHRoaXMuJGNoYXJ0LmRhdGEoJ2luQWpheCcsIGZhbHNlKTtcbiAgICAgICQoJy5vYy1leHBvcnQtYnRuJyArICh0aGlzLm9wdGlvbnMuY2hhcnRDbGFzcyAhPT0gJycgPyAnLicgKyB0aGlzLm9wdGlvbnMuY2hhcnRDbGFzcyA6ICcnKSkucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7XG4gICAgfSxcbiAgICAvLyB3aGV0aGVyIHRoZSBjdXJzb3IgaXMgaG92ZXJpbmcgb3ZlciB0aGUgbm9kZVxuICAgIGlzSW5BY3Rpb246IGZ1bmN0aW9uICgkbm9kZSkge1xuICAgICAgcmV0dXJuICRub2RlLmNoaWxkcmVuKCcuZWRnZScpLmF0dHIoJ2NsYXNzJykuaW5kZXhPZignZmEtJykgPiAtMSA/IHRydWUgOiBmYWxzZTtcbiAgICB9LFxuICAgIC8vXG4gICAgc3dpdGNoVmVydGljYWxBcnJvdzogZnVuY3Rpb24gKCRhcnJvdykge1xuICAgICAgJGFycm93LnRvZ2dsZUNsYXNzKCdmYS1jaGV2cm9uLXVwJykudG9nZ2xlQ2xhc3MoJ2ZhLWNoZXZyb24tZG93bicpO1xuICAgIH0sXG4gICAgLy9cbiAgICBzd2l0Y2hIb3Jpem9udGFsQXJyb3c6IGZ1bmN0aW9uICgkbm9kZSkge1xuICAgICAgdmFyIG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICBpZiAob3B0cy50b2dnbGVTaWJsaW5nc1Jlc3AgJiYgKHR5cGVvZiBvcHRzLmFqYXhVUkwgPT09ICd1bmRlZmluZWQnIHx8ICRub2RlLmNsb3Nlc3QoJy5ub2RlcycpLmRhdGEoJ3NpYmxpbmdzTG9hZGVkJykpKSB7XG4gICAgICAgIHZhciAkcHJldlNpYiA9ICRub2RlLmNsb3Nlc3QoJ3RhYmxlJykucGFyZW50KCkucHJldigpO1xuICAgICAgICBpZiAoJHByZXZTaWIubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKCRwcmV2U2liLmlzKCcuaGlkZGVuJykpIHtcbiAgICAgICAgICAgICRub2RlLmNoaWxkcmVuKCcubGVmdEVkZ2UnKS5hZGRDbGFzcygnZmEtY2hldnJvbi1sZWZ0JykucmVtb3ZlQ2xhc3MoJ2ZhLWNoZXZyb24tcmlnaHQnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJG5vZGUuY2hpbGRyZW4oJy5sZWZ0RWRnZScpLmFkZENsYXNzKCdmYS1jaGV2cm9uLXJpZ2h0JykucmVtb3ZlQ2xhc3MoJ2ZhLWNoZXZyb24tbGVmdCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgJG5leHRTaWIgPSAkbm9kZS5jbG9zZXN0KCd0YWJsZScpLnBhcmVudCgpLm5leHQoKTtcbiAgICAgICAgaWYgKCRuZXh0U2liLmxlbmd0aCkge1xuICAgICAgICAgIGlmICgkbmV4dFNpYi5pcygnLmhpZGRlbicpKSB7XG4gICAgICAgICAgICAkbm9kZS5jaGlsZHJlbignLnJpZ2h0RWRnZScpLmFkZENsYXNzKCdmYS1jaGV2cm9uLXJpZ2h0JykucmVtb3ZlQ2xhc3MoJ2ZhLWNoZXZyb24tbGVmdCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkbm9kZS5jaGlsZHJlbignLnJpZ2h0RWRnZScpLmFkZENsYXNzKCdmYS1jaGV2cm9uLWxlZnQnKS5yZW1vdmVDbGFzcygnZmEtY2hldnJvbi1yaWdodCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyICRzaWJzID0gJG5vZGUuY2xvc2VzdCgndGFibGUnKS5wYXJlbnQoKS5zaWJsaW5ncygpO1xuICAgICAgICB2YXIgc2lic1Zpc2libGUgPSAkc2licy5sZW5ndGggPyAhJHNpYnMuaXMoJy5oaWRkZW4nKSA6IGZhbHNlO1xuICAgICAgICAkbm9kZS5jaGlsZHJlbignLmxlZnRFZGdlJykudG9nZ2xlQ2xhc3MoJ2ZhLWNoZXZyb24tcmlnaHQnLCBzaWJzVmlzaWJsZSkudG9nZ2xlQ2xhc3MoJ2ZhLWNoZXZyb24tbGVmdCcsICFzaWJzVmlzaWJsZSk7XG4gICAgICAgICRub2RlLmNoaWxkcmVuKCcucmlnaHRFZGdlJykudG9nZ2xlQ2xhc3MoJ2ZhLWNoZXZyb24tbGVmdCcsIHNpYnNWaXNpYmxlKS50b2dnbGVDbGFzcygnZmEtY2hldnJvbi1yaWdodCcsICFzaWJzVmlzaWJsZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvL1xuICAgIHJlcGFpbnQ6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBub2RlLnN0eWxlLm9mZnNldFdpZHRoID0gbm9kZS5vZmZzZXRXaWR0aDtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgbm9kZUVudGVyTGVhdmVIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciAkbm9kZSA9ICQoZXZlbnQuZGVsZWdhdGVUYXJnZXQpLCBmbGFnID0gZmFsc2U7XG4gICAgICB2YXIgJHRvcEVkZ2UgPSAkbm9kZS5jaGlsZHJlbignLnRvcEVkZ2UnKTtcbiAgICAgIHZhciAkcmlnaHRFZGdlID0gJG5vZGUuY2hpbGRyZW4oJy5yaWdodEVkZ2UnKTtcbiAgICAgIHZhciAkYm90dG9tRWRnZSA9ICRub2RlLmNoaWxkcmVuKCcuYm90dG9tRWRnZScpO1xuICAgICAgdmFyICRsZWZ0RWRnZSA9ICRub2RlLmNoaWxkcmVuKCcubGVmdEVkZ2UnKTtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2VlbnRlcicpIHtcbiAgICAgICAgaWYgKCR0b3BFZGdlLmxlbmd0aCkge1xuICAgICAgICAgIGZsYWcgPSB0aGlzLmdldE5vZGVTdGF0ZSgkbm9kZSwgJ3BhcmVudCcpLnZpc2libGU7XG4gICAgICAgICAgJHRvcEVkZ2UudG9nZ2xlQ2xhc3MoJ2ZhLWNoZXZyb24tdXAnLCAhZmxhZykudG9nZ2xlQ2xhc3MoJ2ZhLWNoZXZyb24tZG93bicsIGZsYWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkYm90dG9tRWRnZS5sZW5ndGgpIHtcbiAgICAgICAgICBmbGFnID0gdGhpcy5nZXROb2RlU3RhdGUoJG5vZGUsICdjaGlsZHJlbicpLnZpc2libGU7XG4gICAgICAgICAgJGJvdHRvbUVkZ2UudG9nZ2xlQ2xhc3MoJ2ZhLWNoZXZyb24tZG93bicsICFmbGFnKS50b2dnbGVDbGFzcygnZmEtY2hldnJvbi11cCcsIGZsYWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkbGVmdEVkZ2UubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5zd2l0Y2hIb3Jpem9udGFsQXJyb3coJG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkbm9kZS5jaGlsZHJlbignLmVkZ2UnKS5yZW1vdmVDbGFzcygnZmEtY2hldnJvbi11cCBmYS1jaGV2cm9uLWRvd24gZmEtY2hldnJvbi1yaWdodCBmYS1jaGV2cm9uLWxlZnQnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgbm9kZUNsaWNrSGFuZGxlcjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB0aGlzLiRjaGFydC5maW5kKCcuZm9jdXNlZCcpLnJlbW92ZUNsYXNzKCdmb2N1c2VkJyk7XG4gICAgICAkKGV2ZW50LmRlbGVnYXRlVGFyZ2V0KS5hZGRDbGFzcygnZm9jdXNlZCcpO1xuICAgIH0sXG4gICAgLy8gbG9hZCBuZXcgbm9kZXMgYnkgYWpheFxuICAgIGxvYWROb2RlczogZnVuY3Rpb24gKHJlbCwgdXJsLCAkZWRnZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAkLmFqYXgoeyAndXJsJzogdXJsLCAnZGF0YVR5cGUnOiAnanNvbicgfSlcbiAgICAgIC5kb25lKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICh0aGF0LiRjaGFydC5kYXRhKCdpbkFqYXgnKSkge1xuICAgICAgICAgIGlmIChyZWwgPT09ICdwYXJlbnQnKSB7XG4gICAgICAgICAgICBpZiAoISQuaXNFbXB0eU9iamVjdChkYXRhKSkge1xuICAgICAgICAgICAgICB0aGF0LmFkZFBhcmVudCgkZWRnZS5wYXJlbnQoKSwgZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChyZWwgPT09ICdjaGlsZHJlbicpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGF0LmFkZENoaWxkcmVuKCRlZGdlLnBhcmVudCgpLCBkYXRhW3JlbF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGF0LmFkZFNpYmxpbmdzKCRlZGdlLnBhcmVudCgpLCBkYXRhLnNpYmxpbmdzID8gZGF0YS5zaWJsaW5ncyA6IGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5mYWlsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBnZXQgJyArIHJlbCArICcgZGF0YScpO1xuICAgICAgfSlcbiAgICAgIC5hbHdheXMoZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGF0LmVuZExvYWRpbmcoJGVkZ2UpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICAvL1xuICAgIEhpZGVGaXJzdFBhcmVudEVuZDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgJHRvcEVkZ2UgPSBldmVudC5kYXRhLnRvcEVkZ2U7XG4gICAgICB2YXIgJG5vZGUgPSAkdG9wRWRnZS5wYXJlbnQoKTtcbiAgICAgIGlmICh0aGlzLmlzSW5BY3Rpb24oJG5vZGUpKSB7XG4gICAgICAgIHRoaXMuc3dpdGNoVmVydGljYWxBcnJvdygkdG9wRWRnZSk7XG4gICAgICAgIHRoaXMuc3dpdGNoSG9yaXpvbnRhbEFycm93KCRub2RlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgdG9wRWRnZUNsaWNrSGFuZGxlcjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciAkdG9wRWRnZSA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICAgIHZhciAkbm9kZSA9ICQoZXZlbnQuZGVsZWdhdGVUYXJnZXQpO1xuICAgICAgdmFyIHBhcmVudFN0YXRlID0gdGhpcy5nZXROb2RlU3RhdGUoJG5vZGUsICdwYXJlbnQnKTtcbiAgICAgIGlmIChwYXJlbnRTdGF0ZS5leGlzdCkge1xuICAgICAgICB2YXIgJHBhcmVudCA9ICRub2RlLmNsb3Nlc3QoJ3RhYmxlJykuY2xvc2VzdCgndHInKS5zaWJsaW5ncygnOmZpcnN0JykuZmluZCgnLm5vZGUnKTtcbiAgICAgICAgaWYgKCRwYXJlbnQuaXMoJy5zbGlkaW5nJykpIHsgcmV0dXJuOyB9XG4gICAgICAgIC8vIGhpZGUgdGhlIGFuY2VzdG9yIG5vZGVzIGFuZCBzaWJsaW5nIG5vZGVzIG9mIHRoZSBzcGVjaWZpZWQgbm9kZVxuICAgICAgICBpZiAocGFyZW50U3RhdGUudmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaGlkZVBhcmVudCgkbm9kZSk7XG4gICAgICAgICAgJHBhcmVudC5vbmUoJ3RyYW5zaXRpb25lbmQnLCB7ICd0b3BFZGdlJzogJHRvcEVkZ2UgfSwgdGhpcy5IaWRlRmlyc3RQYXJlbnRFbmQuYmluZCh0aGlzKSk7XG4gICAgICAgIH0gZWxzZSB7IC8vIHNob3cgdGhlIGFuY2VzdG9ycyBhbmQgc2libGluZ3NcbiAgICAgICAgICB0aGlzLnNob3dQYXJlbnQoJG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgeyAvLyBsb2FkIHRoZSBuZXcgcGFyZW50IG5vZGUgb2YgdGhlIHNwZWNpZmllZCBub2RlIGJ5IGFqYXggcmVxdWVzdFxuICAgICAgICAvLyBzdGFydCB1cCBsb2FkaW5nIHN0YXR1c1xuICAgICAgICBpZiAodGhpcy5zdGFydExvYWRpbmcoJHRvcEVkZ2UpKSB7XG4gICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgICAgdmFyIHVybCA9ICQuaXNGdW5jdGlvbihvcHRzLmFqYXhVUkwucGFyZW50KSA/IG9wdHMuYWpheFVSTC5wYXJlbnQoZXZlbnQuZGF0YS5ub2RlRGF0YSkgOiBvcHRzLmFqYXhVUkwucGFyZW50ICsgJG5vZGVbMF0uaWQ7XG4gICAgICAgICAgdGhpcy5sb2FkTm9kZXMoJ3BhcmVudCcsIHVybCwgJHRvcEVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICAvL1xuICAgIGJvdHRvbUVkZ2VDbGlja0hhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB2YXIgJGJvdHRvbUVkZ2UgPSAkKGV2ZW50LnRhcmdldCk7XG4gICAgICB2YXIgJG5vZGUgPSAkKGV2ZW50LmRlbGVnYXRlVGFyZ2V0KTtcbiAgICAgIHZhciBjaGlsZHJlblN0YXRlID0gdGhpcy5nZXROb2RlU3RhdGUoJG5vZGUsICdjaGlsZHJlbicpO1xuICAgICAgaWYgKGNoaWxkcmVuU3RhdGUuZXhpc3QpIHtcbiAgICAgICAgdmFyICRjaGlsZHJlbiA9ICRub2RlLmNsb3Nlc3QoJ3RyJykuc2libGluZ3MoJzpsYXN0Jyk7XG4gICAgICAgIGlmICgkY2hpbGRyZW4uZmluZCgnLnNsaWRpbmcnKS5sZW5ndGgpIHsgcmV0dXJuOyB9XG4gICAgICAgIC8vIGhpZGUgdGhlIGRlc2NlbmRhbnQgbm9kZXMgb2YgdGhlIHNwZWNpZmllZCBub2RlXG4gICAgICAgIGlmIChjaGlsZHJlblN0YXRlLnZpc2libGUpIHtcbiAgICAgICAgICB0aGlzLmhpZGVDaGlsZHJlbigkbm9kZSk7XG4gICAgICAgIH0gZWxzZSB7IC8vIHNob3cgdGhlIGRlc2NlbmRhbnRzXG4gICAgICAgICAgdGhpcy5zaG93Q2hpbGRyZW4oJG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgeyAvLyBsb2FkIHRoZSBuZXcgY2hpbGRyZW4gbm9kZXMgb2YgdGhlIHNwZWNpZmllZCBub2RlIGJ5IGFqYXggcmVxdWVzdFxuICAgICAgICBpZiAodGhpcy5zdGFydExvYWRpbmcoJGJvdHRvbUVkZ2UpKSB7XG4gICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgICAgdmFyIHVybCA9ICQuaXNGdW5jdGlvbihvcHRzLmFqYXhVUkwuY2hpbGRyZW4pID8gb3B0cy5hamF4VVJMLmNoaWxkcmVuKGV2ZW50LmRhdGEubm9kZURhdGEpIDogb3B0cy5hamF4VVJMLmNoaWxkcmVuICsgJG5vZGVbMF0uaWQ7XG4gICAgICAgICAgdGhpcy5sb2FkTm9kZXMoJ2NoaWxkcmVuJywgdXJsLCAkYm90dG9tRWRnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgaEVkZ2VDbGlja0hhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB2YXIgJGhFZGdlID0gJChldmVudC50YXJnZXQpO1xuICAgICAgdmFyICRub2RlID0gJChldmVudC5kZWxlZ2F0ZVRhcmdldCk7XG4gICAgICB2YXIgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICAgIHZhciBzaWJsaW5nc1N0YXRlID0gdGhpcy5nZXROb2RlU3RhdGUoJG5vZGUsICdzaWJsaW5ncycpO1xuICAgICAgaWYgKHNpYmxpbmdzU3RhdGUuZXhpc3QpIHtcbiAgICAgICAgdmFyICRzaWJsaW5ncyA9ICRub2RlLmNsb3Nlc3QoJ3RhYmxlJykucGFyZW50KCkuc2libGluZ3MoKTtcbiAgICAgICAgaWYgKCRzaWJsaW5ncy5maW5kKCcuc2xpZGluZycpLmxlbmd0aCkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgKG9wdHMudG9nZ2xlU2libGluZ3NSZXNwKSB7XG4gICAgICAgICAgdmFyICRwcmV2U2liID0gJG5vZGUuY2xvc2VzdCgndGFibGUnKS5wYXJlbnQoKS5wcmV2KCk7XG4gICAgICAgICAgdmFyICRuZXh0U2liID0gJG5vZGUuY2xvc2VzdCgndGFibGUnKS5wYXJlbnQoKS5uZXh0KCk7XG4gICAgICAgICAgaWYgKCRoRWRnZS5pcygnLmxlZnRFZGdlJykpIHtcbiAgICAgICAgICAgIGlmICgkcHJldlNpYi5pcygnLmhpZGRlbicpKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1NpYmxpbmdzKCRub2RlLCAnbGVmdCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5oaWRlU2libGluZ3MoJG5vZGUsICdsZWZ0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgkbmV4dFNpYi5pcygnLmhpZGRlbicpKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1NpYmxpbmdzKCRub2RlLCAncmlnaHQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuaGlkZVNpYmxpbmdzKCRub2RlLCAncmlnaHQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHNpYmxpbmdzU3RhdGUudmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlU2libGluZ3MoJG5vZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dTaWJsaW5ncygkbm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBsb2FkIHRoZSBuZXcgc2libGluZyBub2RlcyBvZiB0aGUgc3BlY2lmaWVkIG5vZGUgYnkgYWpheCByZXF1ZXN0XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0TG9hZGluZygkaEVkZ2UpKSB7XG4gICAgICAgICAgdmFyIG5vZGVJZCA9ICRub2RlWzBdLmlkO1xuICAgICAgICAgIHZhciB1cmwgPSAodGhpcy5nZXROb2RlU3RhdGUoJG5vZGUsICdwYXJlbnQnKS5leGlzdCkgP1xuICAgICAgICAgICAgKCQuaXNGdW5jdGlvbihvcHRzLmFqYXhVUkwuc2libGluZ3MpID8gb3B0cy5hamF4VVJMLnNpYmxpbmdzKGV2ZW50LmRhdGEubm9kZURhdGEpIDogb3B0cy5hamF4VVJMLnNpYmxpbmdzICsgbm9kZUlkKSA6XG4gICAgICAgICAgICAoJC5pc0Z1bmN0aW9uKG9wdHMuYWpheFVSTC5mYW1pbGllcykgPyBvcHRzLmFqYXhVUkwuZmFtaWxpZXMoZXZlbnQuZGF0YS5ub2RlRGF0YSkgOiBvcHRzLmFqYXhVUkwuZmFtaWxpZXMgKyBub2RlSWQpO1xuICAgICAgICAgIHRoaXMubG9hZE5vZGVzKCdzaWJsaW5ncycsIHVybCwgJGhFZGdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgLy9cbiAgICBleHBhbmRWTm9kZXNFbmQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgZXZlbnQuZGF0YS52Tm9kZXMucmVtb3ZlQ2xhc3MoJ3NsaWRpbmcnKTtcbiAgICB9LFxuICAgIC8vXG4gICAgY29sbGFwc2VWTm9kZXNFbmQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgZXZlbnQuZGF0YS52Tm9kZXMucmVtb3ZlQ2xhc3MoJ3NsaWRpbmcnKS5jbG9zZXN0KCd1bCcpLmFkZENsYXNzKCdoaWRkZW4nKTtcbiAgICB9LFxuICAgIC8vIGV2ZW50IGhhbmRsZXIgZm9yIHRvZ2dsZSBidXR0b25zIGluIEh5YnJpZChob3Jpem9udGFsICsgdmVydGljYWwpIE9yZ0NoYXJ0XG4gICAgdG9nZ2xlVk5vZGVzOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciAkdG9nZ2xlQnRuID0gJChldmVudC50YXJnZXQpO1xuICAgICAgdmFyICRkZXNjV3JhcHBlciA9ICR0b2dnbGVCdG4ucGFyZW50KCkubmV4dCgpO1xuICAgICAgdmFyICRkZXNjZW5kYW50cyA9ICRkZXNjV3JhcHBlci5maW5kKCcubm9kZScpO1xuICAgICAgdmFyICRjaGlsZHJlbiA9ICRkZXNjV3JhcHBlci5jaGlsZHJlbigpLmNoaWxkcmVuKCcubm9kZScpO1xuICAgICAgaWYgKCRjaGlsZHJlbi5pcygnLnNsaWRpbmcnKSkgeyByZXR1cm47IH1cbiAgICAgICR0b2dnbGVCdG4udG9nZ2xlQ2xhc3MoJ2ZhLXBsdXMtc3F1YXJlIGZhLW1pbnVzLXNxdWFyZScpO1xuICAgICAgaWYgKCRkZXNjZW5kYW50cy5lcSgwKS5pcygnLnNsaWRlLXVwJykpIHtcbiAgICAgICAgJGRlc2NXcmFwcGVyLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgdGhpcy5yZXBhaW50KCRjaGlsZHJlbi5nZXQoMCkpO1xuICAgICAgICAkY2hpbGRyZW4uYWRkQ2xhc3MoJ3NsaWRpbmcnKS5yZW1vdmVDbGFzcygnc2xpZGUtdXAnKS5lcSgwKS5vbmUoJ3RyYW5zaXRpb25lbmQnLCB7ICd2Tm9kZXMnOiAkY2hpbGRyZW4gfSwgdGhpcy5leHBhbmRWTm9kZXNFbmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGRlc2NlbmRhbnRzLmFkZENsYXNzKCdzbGlkaW5nIHNsaWRlLXVwJykuZXEoMCkub25lKCd0cmFuc2l0aW9uZW5kJywgeyAndk5vZGVzJzogJGRlc2NlbmRhbnRzIH0sIHRoaXMuY29sbGFwc2VWTm9kZXNFbmQpO1xuICAgICAgICAkZGVzY2VuZGFudHMuZmluZCgnLnRvZ2dsZUJ0bicpLnJlbW92ZUNsYXNzKCdmYS1taW51cy1zcXVhcmUnKS5hZGRDbGFzcygnZmEtcGx1cy1zcXVhcmUnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgY3JlYXRlR2hvc3ROb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciAkbm9kZURpdiA9ICQoZXZlbnQudGFyZ2V0KTtcbiAgICAgIHZhciBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgdmFyIG9yaWdFdmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQ7XG4gICAgICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSk7XG4gICAgICBpZiAoaXNGaXJlZm94KSB7XG4gICAgICAgIG9yaWdFdmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC9odG1sJywgJ2hhY2sgZm9yIGZpcmVmb3gnKTtcbiAgICAgIH1cbiAgICAgIHZhciBnaG9zdE5vZGUsIG5vZGVDb3ZlcjtcbiAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmdob3N0LW5vZGUnKSkge1xuICAgICAgICBnaG9zdE5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInN2Z1wiKTtcbiAgICAgICAgZ2hvc3ROb2RlLmNsYXNzTGlzdC5hZGQoJ2dob3N0LW5vZGUnKTtcbiAgICAgICAgbm9kZUNvdmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ3JlY3QnKTtcbiAgICAgICAgZ2hvc3ROb2RlLmFwcGVuZENoaWxkKG5vZGVDb3Zlcik7XG4gICAgICAgICRub2RlRGl2LmNsb3Nlc3QoJy5vcmdjaGFydCcpLmFwcGVuZChnaG9zdE5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2hvc3ROb2RlID0gJG5vZGVEaXYuY2xvc2VzdCgnLm9yZ2NoYXJ0JykuY2hpbGRyZW4oJy5naG9zdC1ub2RlJykuZ2V0KDApO1xuICAgICAgICBub2RlQ292ZXIgPSAkKGdob3N0Tm9kZSkuY2hpbGRyZW4oKS5nZXQoMCk7XG4gICAgICB9XG4gICAgICB2YXIgdHJhbnNWYWx1ZXMgPSAkbm9kZURpdi5jbG9zZXN0KCcub3JnY2hhcnQnKS5jc3MoJ3RyYW5zZm9ybScpLnNwbGl0KCcsJyk7XG4gICAgICB2YXIgc2NhbGUgPSBNYXRoLmFicyh3aW5kb3cucGFyc2VGbG9hdCgob3B0cy5kaXJlY3Rpb24gPT09ICd0MmInIHx8IG9wdHMuZGlyZWN0aW9uID09PSAnYjJ0JykgPyB0cmFuc1ZhbHVlc1swXS5zbGljZSh0cmFuc1ZhbHVlc1swXS5pbmRleE9mKCcoJykgKyAxKSA6IHRyYW5zVmFsdWVzWzFdKSk7XG4gICAgICBnaG9zdE5vZGUuc2V0QXR0cmlidXRlKCd3aWR0aCcsICRub2RlRGl2Lm91dGVyV2lkdGgoZmFsc2UpKTtcbiAgICAgIGdob3N0Tm9kZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICRub2RlRGl2Lm91dGVySGVpZ2h0KGZhbHNlKSk7XG4gICAgICBub2RlQ292ZXIuc2V0QXR0cmlidXRlKCd4Jyw1ICogc2NhbGUpO1xuICAgICAgbm9kZUNvdmVyLnNldEF0dHJpYnV0ZSgneScsNSAqIHNjYWxlKTtcbiAgICAgIG5vZGVDb3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgMTIwICogc2NhbGUpO1xuICAgICAgbm9kZUNvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgNDAgKiBzY2FsZSk7XG4gICAgICBub2RlQ292ZXIuc2V0QXR0cmlidXRlKCdyeCcsIDQgKiBzY2FsZSk7XG4gICAgICBub2RlQ292ZXIuc2V0QXR0cmlidXRlKCdyeScsIDQgKiBzY2FsZSk7XG4gICAgICBub2RlQ292ZXIuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCAxICogc2NhbGUpO1xuICAgICAgdmFyIHhPZmZzZXQgPSBvcmlnRXZlbnQub2Zmc2V0WCAqIHNjYWxlO1xuICAgICAgdmFyIHlPZmZzZXQgPSBvcmlnRXZlbnQub2Zmc2V0WSAqIHNjYWxlO1xuICAgICAgaWYgKG9wdHMuZGlyZWN0aW9uID09PSAnbDJyJykge1xuICAgICAgICB4T2Zmc2V0ID0gb3JpZ0V2ZW50Lm9mZnNldFkgKiBzY2FsZTtcbiAgICAgICAgeU9mZnNldCA9IG9yaWdFdmVudC5vZmZzZXRYICogc2NhbGU7XG4gICAgICB9IGVsc2UgaWYgKG9wdHMuZGlyZWN0aW9uID09PSAncjJsJykge1xuICAgICAgICB4T2Zmc2V0ID0gJG5vZGVEaXYub3V0ZXJXaWR0aChmYWxzZSkgLSBvcmlnRXZlbnQub2Zmc2V0WSAqIHNjYWxlO1xuICAgICAgICB5T2Zmc2V0ID0gb3JpZ0V2ZW50Lm9mZnNldFggKiBzY2FsZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0cy5kaXJlY3Rpb24gPT09ICdiMnQnKSB7XG4gICAgICAgIHhPZmZzZXQgPSAkbm9kZURpdi5vdXRlcldpZHRoKGZhbHNlKSAtIG9yaWdFdmVudC5vZmZzZXRYICogc2NhbGU7XG4gICAgICAgIHlPZmZzZXQgPSAkbm9kZURpdi5vdXRlckhlaWdodChmYWxzZSkgLSBvcmlnRXZlbnQub2Zmc2V0WSAqIHNjYWxlO1xuICAgICAgfVxuICAgICAgaWYgKGlzRmlyZWZveCkgeyAvLyBoYWNrIGZvciBvbGQgdmVyc2lvbiBvZiBGaXJlZm94KDwgNDguMClcbiAgICAgICAgbm9kZUNvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdyZ2IoMjU1LCAyNTUsIDI1NSknKTtcbiAgICAgICAgbm9kZUNvdmVyLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgJ3JnYigxOTEsIDAsIDApJyk7XG4gICAgICAgIHZhciBnaG9zdE5vZGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgIGdob3N0Tm9kZVdyYXBwZXIuc3JjID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCcgKyAobmV3IFhNTFNlcmlhbGl6ZXIoKSkuc2VyaWFsaXplVG9TdHJpbmcoZ2hvc3ROb2RlKTtcbiAgICAgICAgb3JpZ0V2ZW50LmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZ2hvc3ROb2RlV3JhcHBlciwgeE9mZnNldCwgeU9mZnNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmlnRXZlbnQuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShnaG9zdE5vZGUsIHhPZmZzZXQsIHlPZmZzZXQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgLy9cbiAgICBmaWx0ZXJBbGxvd2VkRHJvcE5vZGVzOiBmdW5jdGlvbiAoJGRyYWdnZWQpIHtcbiAgICAgIHZhciBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgdmFyICRkcmFnWm9uZSA9ICRkcmFnZ2VkLmNsb3Nlc3QoJy5ub2RlcycpLnNpYmxpbmdzKCkuZXEoMCkuZmluZCgnLm5vZGU6Zmlyc3QnKTtcbiAgICAgIHZhciAkZHJhZ0hpZXIgPSAkZHJhZ2dlZC5jbG9zZXN0KCd0YWJsZScpLmZpbmQoJy5ub2RlJyk7XG4gICAgICB0aGlzLiRjaGFydC5kYXRhKCdkcmFnZ2VkJywgJGRyYWdnZWQpXG4gICAgICAgIC5maW5kKCcubm9kZScpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBub2RlKSB7XG4gICAgICAgICAgaWYgKCRkcmFnSGllci5pbmRleChub2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChvcHRzLmRyb3BDcml0ZXJpYSkge1xuICAgICAgICAgICAgICBpZiAob3B0cy5kcm9wQ3JpdGVyaWEoJGRyYWdnZWQsICRkcmFnWm9uZSwgJChub2RlKSkpIHtcbiAgICAgICAgICAgICAgICAkKG5vZGUpLmFkZENsYXNzKCdhbGxvd2VkRHJvcCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAkKG5vZGUpLmFkZENsYXNzKCdhbGxvd2VkRHJvcCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICAvL1xuICAgIGRyYWdzdGFydEhhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgLy8gaWYgdXNlcnMgZW5hYmxlIHpvb20gb3IgZGlyZWN0aW9uIG9wdGlvbnNcbiAgICAgIGlmICh0aGlzLiRjaGFydC5jc3MoJ3RyYW5zZm9ybScpICE9PSAnbm9uZScpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVHaG9zdE5vZGUoZXZlbnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJBbGxvd2VkRHJvcE5vZGVzKCQoZXZlbnQudGFyZ2V0KSk7XG4gICAgfSxcbiAgICAvL1xuICAgIGRyYWdvdmVySGFuZGxlcjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKCEkKGV2ZW50LmRlbGVnYXRlVGFyZ2V0KS5pcygnLmFsbG93ZWREcm9wJykpIHtcbiAgICAgICAgZXZlbnQub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJztcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgZHJhZ2VuZEhhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdGhpcy4kY2hhcnQuZmluZCgnLmFsbG93ZWREcm9wJykucmVtb3ZlQ2xhc3MoJ2FsbG93ZWREcm9wJyk7XG4gICAgfSxcbiAgICAvL1xuICAgIGRyb3BIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciAkZHJvcFpvbmUgPSAkKGV2ZW50LmRlbGVnYXRlVGFyZ2V0KTtcbiAgICAgIHZhciAkZHJhZ2dlZCA9IHRoaXMuJGNoYXJ0LmRhdGEoJ2RyYWdnZWQnKTtcbiAgICAgIHZhciAkZHJhZ1pvbmUgPSAkZHJhZ2dlZC5jbG9zZXN0KCcubm9kZXMnKS5zaWJsaW5ncygpLmVxKDApLmNoaWxkcmVuKCk7XG4gICAgICB2YXIgZHJvcEV2ZW50ID0gJC5FdmVudCgnbm9kZWRyb3Aub3JnY2hhcnQnKTtcbiAgICAgIHRoaXMuJGNoYXJ0LnRyaWdnZXIoZHJvcEV2ZW50LCB7ICdkcmFnZ2VkTm9kZSc6ICRkcmFnZ2VkLCAnZHJhZ1pvbmUnOiAkZHJhZ1pvbmUuY2hpbGRyZW4oKSwgJ2Ryb3Bab25lJzogJGRyb3Bab25lIH0pO1xuICAgICAgaWYgKGRyb3BFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBmaXJzdGx5LCBkZWFsIHdpdGggdGhlIGhpZXJhcmNoeSBvZiBkcm9wIHpvbmVcbiAgICAgIGlmICghJGRyb3Bab25lLmNsb3Nlc3QoJ3RyJykuc2libGluZ3MoKS5sZW5ndGgpIHsgLy8gaWYgdGhlIGRyb3Agem9uZSBpcyBhIGxlYWYgbm9kZVxuICAgICAgICAkZHJvcFpvbmUuYXBwZW5kKCc8aSBjbGFzcz1cImVkZ2UgdmVydGljYWxFZGdlIGJvdHRvbUVkZ2UgZmFcIj48L2k+JylcbiAgICAgICAgICAucGFyZW50KCkuYXR0cignY29sc3BhbicsIDIpXG4gICAgICAgICAgLnBhcmVudCgpLmFmdGVyKCc8dHIgY2xhc3M9XCJsaW5lc1wiPjx0ZCBjb2xzcGFuPVwiMlwiPjxkaXYgY2xhc3M9XCJkb3duTGluZVwiPjwvZGl2PjwvdGQ+PC90cj4nXG4gICAgICAgICAgKyAnPHRyIGNsYXNzPVwibGluZXNcIj48dGQgY2xhc3M9XCJyaWdodExpbmVcIj48L3RkPjx0ZCBjbGFzcz1cImxlZnRMaW5lXCI+PC90ZD48L3RyPidcbiAgICAgICAgICArICc8dHIgY2xhc3M9XCJub2Rlc1wiPjwvdHI+JylcbiAgICAgICAgICAuc2libGluZ3MoJzpsYXN0JykuYXBwZW5kKCRkcmFnZ2VkLmZpbmQoJy5ob3Jpem9udGFsRWRnZScpLnJlbW92ZSgpLmVuZCgpLmNsb3Nlc3QoJ3RhYmxlJykucGFyZW50KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGRyb3BDb2xzcGFuID0gcGFyc2VJbnQoJGRyb3Bab25lLnBhcmVudCgpLmF0dHIoJ2NvbHNwYW4nKSkgKyAyO1xuICAgICAgICB2YXIgaG9yaXpvbnRhbEVkZ2VzID0gJzxpIGNsYXNzPVwiZWRnZSBob3Jpem9udGFsRWRnZSByaWdodEVkZ2UgZmFcIj48L2k+PGkgY2xhc3M9XCJlZGdlIGhvcml6b250YWxFZGdlIGxlZnRFZGdlIGZhXCI+PC9pPic7XG4gICAgICAgICRkcm9wWm9uZS5jbG9zZXN0KCd0cicpLm5leHQoKS5hZGRCYWNrKCkuY2hpbGRyZW4oKS5hdHRyKCdjb2xzcGFuJywgZHJvcENvbHNwYW4pO1xuICAgICAgICBpZiAoISRkcmFnZ2VkLmZpbmQoJy5ob3Jpem9udGFsRWRnZScpLmxlbmd0aCkge1xuICAgICAgICAgICRkcmFnZ2VkLmFwcGVuZChob3Jpem9udGFsRWRnZXMpO1xuICAgICAgICB9XG4gICAgICAgICRkcm9wWm9uZS5jbG9zZXN0KCd0cicpLnNpYmxpbmdzKCkuZXEoMSkuY2hpbGRyZW4oJzpsYXN0JykuYmVmb3JlKCc8dGQgY2xhc3M9XCJsZWZ0TGluZSB0b3BMaW5lXCI+PC90ZD48dGQgY2xhc3M9XCJyaWdodExpbmUgdG9wTGluZVwiPjwvdGQ+JylcbiAgICAgICAgICAuZW5kKCkubmV4dCgpLmFwcGVuZCgkZHJhZ2dlZC5jbG9zZXN0KCd0YWJsZScpLnBhcmVudCgpKTtcbiAgICAgICAgdmFyICRkcm9wU2licyA9ICRkcmFnZ2VkLmNsb3Nlc3QoJ3RhYmxlJykucGFyZW50KCkuc2libGluZ3MoKS5maW5kKCcubm9kZTpmaXJzdCcpO1xuICAgICAgICBpZiAoJGRyb3BTaWJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICRkcm9wU2licy5hcHBlbmQoaG9yaXpvbnRhbEVkZ2VzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc2Vjb25kbHksIGRlYWwgd2l0aCB0aGUgaGllcmFyY2h5IG9mIGRyYWdnZWQgbm9kZVxuICAgICAgdmFyIGRyYWdDb2xzcGFuID0gcGFyc2VJbnQoJGRyYWdab25lLmF0dHIoJ2NvbHNwYW4nKSk7XG4gICAgICBpZiAoZHJhZ0NvbHNwYW4gPiAyKSB7XG4gICAgICAgICRkcmFnWm9uZS5hdHRyKCdjb2xzcGFuJywgZHJhZ0NvbHNwYW4gLSAyKVxuICAgICAgICAgIC5wYXJlbnQoKS5uZXh0KCkuY2hpbGRyZW4oKS5hdHRyKCdjb2xzcGFuJywgZHJhZ0NvbHNwYW4gLSAyKVxuICAgICAgICAgIC5lbmQoKS5uZXh0KCkuY2hpbGRyZW4oKS5zbGljZSgxLCAzKS5yZW1vdmUoKTtcbiAgICAgICAgdmFyICRkcmFnU2licyA9ICRkcmFnWm9uZS5wYXJlbnQoKS5zaWJsaW5ncygnLm5vZGVzJykuY2hpbGRyZW4oKS5maW5kKCcubm9kZTpmaXJzdCcpO1xuICAgICAgICBpZiAoJGRyYWdTaWJzLmxlbmd0aCA9PT0xKSB7XG4gICAgICAgICAgJGRyYWdTaWJzLmZpbmQoJy5ob3Jpem9udGFsRWRnZScpLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkZHJhZ1pvbmUucmVtb3ZlQXR0cignY29sc3BhbicpXG4gICAgICAgICAgLmZpbmQoJy5ib3R0b21FZGdlJykucmVtb3ZlKClcbiAgICAgICAgICAuZW5kKCkuZW5kKCkuc2libGluZ3MoKS5yZW1vdmUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgdG91Y2hzdGFydEhhbmRsZXI6IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIm9yZ0NoYXJ0OiB0b3VjaHN0YXJ0IDE6IHRvdWNoSGFuZGxlZD1cIiArIHRoaXMudG91Y2hIYW5kbGVkICsgXCIsIHRvdWNoTW92ZWQ9XCIgKyB0aGlzLnRvdWNoTW92ZWQgKyBcIiwgdGFyZ2V0PVwiICsgZXZlbnQudGFyZ2V0LmlubmVyVGV4dCk7XG4gICAgICAgIGlmICh0aGlzLnRvdWNoSGFuZGxlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy50b3VjaEhhbmRsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRvdWNoTW92ZWQgPSBmYWxzZTsgICAgIC8vIHRoaXMgaXMgc28gd2UgY2FuIHdvcmsgb3V0IGxhdGVyIGlmIHRoaXMgd2FzIGEgJ3ByZXNzJyBvciBhICdkcmFnJyB0b3VjaFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0sXG4gICAgLy9cbiAgICB0b3VjaG1vdmVIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy50b3VjaEhhbmRsZWQpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoIXRoaXMudG91Y2hNb3ZlZCkge1xuICAgICAgICB2YXIgbm9kZUlzU2VsZWN0ZWQgPSAkKHRoaXMpLmhhc0NsYXNzKCdmb2N1c2VkJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwib3JnQ2hhcnQ6IHRvdWNobW92ZSAxOiBcIiArIGV2ZW50LnRvdWNoZXMubGVuZ3RoICsgXCIgdG91Y2hlcywgd2UgaGF2ZSBub3QgbW92ZWQsIHNvIHNpbXVsYXRlIGEgZHJhZyBzdGFydFwiLCBldmVudC50b3VjaGVzKTtcbiAgICAgICAgLy8gVE9ETzogdmlzdWFsaXNlIHRoZSBzdGFydCBvZiB0aGUgZHJhZyAoYXMgd291bGQgaGFwcGVuIG9uIGRlc2t0b3ApXG4gICAgICAgIHRoaXMuc2ltdWxhdGVNb3VzZUV2ZW50KGV2ZW50LCAnZHJhZ3N0YXJ0Jyk7XG4gICAgICB9XG4gICAgICB0aGlzLnRvdWNoTW92ZWQgPSB0cnVlO1xuICAgICAgdmFyICR0b3VjaGluZyA9ICQoZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChldmVudC50b3VjaGVzWzBdLmNsaWVudFgsIGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WSkpO1xuICAgICAgdmFyICR0b3VjaGluZ05vZGUgPSAkdG91Y2hpbmcuY2xvc2VzdCgnZGl2Lm5vZGUnKTtcbiBcbiAgICAgIGlmICgkdG91Y2hpbmdOb2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHRvdWNoaW5nTm9kZUVsZW1lbnQgPSAkdG91Y2hpbmdOb2RlWzBdO1xuICAgICAgICAvLyBUT0RPOiBzaW11bGF0ZSB0aGUgZHJhZ292ZXIgdmlzdWFsaXNhdGlvblxuICAgICAgICBpZiAoJHRvdWNoaW5nTm9kZS5pcygnLmFsbG93ZWREcm9wJykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwib3JnQ2hhcnQ6IHRvdWNobW92ZSAyOiB0aGlzIG5vZGUgKFwiICsgdG91Y2hpbmdOb2RlRWxlbWVudC5pZCArIFwiKSBpcyBhbGxvd2VkIHRvIGJlIGEgZHJvcCB0YXJnZXRcIik7XG4gICAgICAgICAgICB0aGlzLnRvdWNoVGFyZ2V0Tm9kZSA9IHRvdWNoaW5nTm9kZUVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIm9yZ0NoYXJ0OiB0b3VjaG1vdmUgMzogdGhpcyBub2RlIChcIiArIHRvdWNoaW5nTm9kZUVsZW1lbnQuaWQgKyBcIikgaXMgTk9UIGFsbG93ZWQgdG8gYmUgYSBkcm9wIHRhcmdldFwiKTtcbiAgICAgICAgICAgIHRoaXMudG91Y2hUYXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJvcmdjaGFydDogdG91Y2htb3ZlIDQ6IG5vdCB0b3VjaGluZyBhIG5vZGVcIik7XG4gICAgICAgIHRoaXMudG91Y2hUYXJnZXROb2RlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgdG91Y2hlbmRIYW5kbGVyOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwib3JnQ2hhcnQ6IHRvdWNoZW5kIDE6IHRvdWNoSGFuZGxlZD1cIiArIHRoaXMudG91Y2hIYW5kbGVkICsgXCIsIHRvdWNoTW92ZWQ9XCIgKyB0aGlzLnRvdWNoTW92ZWQgKyBcIiwgXCIgKyBldmVudC50YXJnZXQuaW5uZXJUZXh0ICsgXCIgXCIpO1xuICAgICAgaWYgKCF0aGlzLnRvdWNoSGFuZGxlZCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwib3JnQ2hhcnQ6IHRvdWNoZW5kIDI6IG5vdCBoYW5kbGVkIGJ5IHVzLCBzbyBhYm9ydGluZ1wiKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50b3VjaE1vdmVkKSB7XG4gICAgICAgICAgLy8gd2UndmUgaGFkIG1vdmVtZW50LCBzbyB0aGlzIHdhcyBhICdkcmFnJyB0b3VjaFxuICAgICAgICAgIGlmICh0aGlzLnRvdWNoVGFyZ2V0Tm9kZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm9yZ0NoYXJ0OiB0b3VjaGVuZCAzOiBtb3ZlZCB0byBhIG5vZGUsIHNvIHNpbXVsYXRpbmcgZHJvcFwiKTtcbiAgICAgICAgICAgICAgdmFyIGZha2VFdmVudEZvckRyb3BIYW5kbGVyID0geyBkZWxlZ2F0ZVRhcmdldDogdGhpcy50b3VjaFRhcmdldE5vZGUgfTtcbiAgICAgICAgICAgICAgdGhpcy5kcm9wSGFuZGxlcihmYWtlRXZlbnRGb3JEcm9wSGFuZGxlcik7XG4gICAgICAgICAgICAgIHRoaXMudG91Y2hUYXJnZXROb2RlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5sb2coXCJvcmdDaGFydDogdG91Y2hlbmQgNDogc2ltdWxhdGluZyBkcmFnZW5kXCIpO1xuICAgICAgICAgIHRoaXMuc2ltdWxhdGVNb3VzZUV2ZW50KGV2ZW50LCAnZHJhZ2VuZCcpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gd2UgZGlkIG5vdCBtb3ZlLCBzbyBhc3N1bWUgdGhpcyB3YXMgYSAncHJlc3MnIHRvdWNoXG4gICAgICAgICAgY29uc29sZS5sb2coXCJvcmdDaGFydDogdG91Y2hlbmQgNTogbW92ZWQsIHNvIHNpbXVsYXRpbmcgY2xpY2tcIik7XG4gICAgICAgICAgdGhpcy5zaW11bGF0ZU1vdXNlRXZlbnQoZXZlbnQsICdjbGljaycpO1xuICAgICAgfVxuICAgICAgdGhpcy50b3VjaEhhbmRsZWQgPSBmYWxzZTtcbiAgICB9LFxuICAgIC8vIHNpbXVsYXRlIGEgbW91c2UgZXZlbnQgKHNvIHdlIGNhbiBmYWtlIHRoZW0gb24gYSB0b3VjaCBkZXZpY2UpXG4gICAgc2ltdWxhdGVNb3VzZUV2ZW50OiBmdW5jdGlvbiAoZXZlbnQsIHNpbXVsYXRlZFR5cGUpIHtcbiAgICAgIC8vIElnbm9yZSBtdWx0aS10b3VjaCBldmVudHNcbiAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgdG91Y2ggPSBldmVudC5vcmlnaW5hbEV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgICAgdmFyIHNpbXVsYXRlZEV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7XG4gICAgICBzaW11bGF0ZWRFdmVudC5pbml0TW91c2VFdmVudChcbiAgICAgICAgc2ltdWxhdGVkVHlwZSwgICAgLy8gdHlwZVxuICAgICAgICB0cnVlLCAgICAgICAgICAgICAvLyBidWJibGVzICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgdHJ1ZSwgICAgICAgICAgICAgLy8gY2FuY2VsYWJsZSAgICAgICAgICAgICAgICAgXG4gICAgICAgIHdpbmRvdywgICAgICAgICAgIC8vIHZpZXcgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAxLCAgICAgICAgICAgICAgICAvLyBkZXRhaWwgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgdG91Y2guc2NyZWVuWCwgICAgLy8gc2NyZWVuWCAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIHRvdWNoLnNjcmVlblksICAgIC8vIHNjcmVlblkgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICB0b3VjaC5jbGllbnRYLCAgICAvLyBjbGllbnRYICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgdG91Y2guY2xpZW50WSwgICAgLy8gY2xpZW50WSAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIGZhbHNlLCAgICAgICAgICAgIC8vIGN0cmxLZXkgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICBmYWxzZSwgICAgICAgICAgICAvLyBhbHRLZXkgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgZmFsc2UsICAgICAgICAgICAgLy8gc2hpZnRLZXkgICAgICAgICAgICAgICAgICAgXG4gICAgICAgIGZhbHNlLCAgICAgICAgICAgIC8vIG1ldGFLZXkgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAwLCAgICAgICAgICAgICAgICAvLyBidXR0b24gICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgbnVsbCAgICAgICAgICAgICAgLy8gcmVsYXRlZFRhcmdldCAgICAgICAgICAgICAgXG4gICAgICApO1xuICAgICAgLy8gRGlzcGF0Y2ggdGhlIHNpbXVsYXRlZCBldmVudCB0byB0aGUgdGFyZ2V0IGVsZW1lbnRcbiAgICAgIGV2ZW50LnRhcmdldC5kaXNwYXRjaEV2ZW50KHNpbXVsYXRlZEV2ZW50KTtcbiAgICB9LFxuICAgIC8vXG4gICAgYmluZERyYWdEcm9wOiBmdW5jdGlvbiAoJG5vZGUpIHtcbiAgICAgICRub2RlLm9uKCdkcmFnc3RhcnQnLCB0aGlzLmRyYWdzdGFydEhhbmRsZXIuYmluZCh0aGlzKSlcbiAgICAgICAgLm9uKCdkcmFnb3ZlcicsIHRoaXMuZHJhZ292ZXJIYW5kbGVyLmJpbmQodGhpcykpXG4gICAgICAgIC5vbignZHJhZ2VuZCcsIHRoaXMuZHJhZ2VuZEhhbmRsZXIuYmluZCh0aGlzKSlcbiAgICAgICAgLm9uKCdkcm9wJywgdGhpcy5kcm9wSGFuZGxlci5iaW5kKHRoaXMpKVxuICAgICAgICAub24oJ3RvdWNoc3RhcnQnLCB0aGlzLnRvdWNoc3RhcnRIYW5kbGVyLmJpbmQodGhpcykpXG4gICAgICAgIC5vbigndG91Y2htb3ZlJywgdGhpcy50b3VjaG1vdmVIYW5kbGVyLmJpbmQodGhpcykpXG4gICAgICAgIC5vbigndG91Y2hlbmQnLCB0aGlzLnRvdWNoZW5kSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICB9LFxuICAgIC8vIGNyZWF0ZSBub2RlXG4gICAgY3JlYXRlTm9kZTogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgdmFyIGxldmVsID0gZGF0YS5sZXZlbDtcbiAgICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7XG4gICAgICAgICQuZWFjaChkYXRhLmNoaWxkcmVuLCBmdW5jdGlvbiAoaW5kZXgsIGNoaWxkKSB7XG4gICAgICAgICAgY2hpbGQucGFyZW50SWQgPSBkYXRhLmlkO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbnN0cnVjdCB0aGUgY29udGVudCBvZiBub2RlXG4gICAgICB2YXIgJG5vZGVEaXYgPSAkKCc8ZGl2JyArIChvcHRzLmRyYWdnYWJsZSA/ICcgZHJhZ2dhYmxlPVwidHJ1ZVwiJyA6ICcnKSArIChkYXRhW29wdHMubm9kZUlkXSA/ICcgaWQ9XCInICsgZGF0YVtvcHRzLm5vZGVJZF0gKyAnXCInIDogJycpICsgKGRhdGEucGFyZW50SWQgPyAnIGRhdGEtcGFyZW50PVwiJyArIGRhdGEucGFyZW50SWQgKyAnXCInIDogJycpICsgJz4nKVxuICAgICAgICAuYWRkQ2xhc3MoJ25vZGUgJyArIChkYXRhLmNsYXNzTmFtZSB8fCAnJykgKyAgKGxldmVsID4gb3B0cy52aXNpYmxlTGV2ZWwgPyAnIHNsaWRlLXVwJyA6ICcnKSk7XG4gICAgICBpZiAob3B0cy5ub2RlVGVtcGxhdGUpIHtcbiAgICAgICAgJG5vZGVEaXYuYXBwZW5kKG9wdHMubm9kZVRlbXBsYXRlKGRhdGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRub2RlRGl2LmFwcGVuZCgnPGRpdiBjbGFzcz1cInRpdGxlXCI+JyArIGRhdGFbb3B0cy5ub2RlVGl0bGVdICsgJzwvZGl2PicpXG4gICAgICAgICAgLmFwcGVuZCh0eXBlb2Ygb3B0cy5ub2RlQ29udGVudCAhPT0gJ3VuZGVmaW5lZCcgPyAnPGRpdiBjbGFzcz1cImNvbnRlbnRcIj4nICsgKGRhdGFbb3B0cy5ub2RlQ29udGVudF0gfHwgJycpICsgJzwvZGl2PicgOiAnJyk7XG4gICAgICB9XG4gICAgICAvLyBhcHBlbmQgNCBkaXJlY3Rpb24gYXJyb3dzIG9yIGV4cGFuZC9jb2xsYXBzZSBidXR0b25zXG4gICAgICB2YXIgZmxhZ3MgPSBkYXRhLnJlbGF0aW9uc2hpcCB8fCAnJztcbiAgICAgIGlmIChvcHRzLnZlcnRpY2FsTGV2ZWwgJiYgbGV2ZWwgPj0gb3B0cy52ZXJ0aWNhbExldmVsKSB7XG4gICAgICAgIGlmICgobGV2ZWwgKyAxKSA+IG9wdHMudmVydGljYWxMZXZlbCAmJiBOdW1iZXIoZmxhZ3Muc3Vic3RyKDIsMSkpKSB7XG4gICAgICAgICAgdmFyIGljb24gPSBsZXZlbCArIDEgPiBvcHRzLnZpc2libGVMZXZlbCA/ICdwbHVzJyA6ICdtaW51cyc7XG4gICAgICAgICAgJG5vZGVEaXYuYXBwZW5kKCc8aSBjbGFzcz1cInRvZ2dsZUJ0biBmYSBmYS0nICsgaWNvbiArICctc3F1YXJlXCI+PC9pPicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoTnVtYmVyKGZsYWdzLnN1YnN0cigwLDEpKSkge1xuICAgICAgICAgICRub2RlRGl2LmFwcGVuZCgnPGkgY2xhc3M9XCJlZGdlIHZlcnRpY2FsRWRnZSB0b3BFZGdlIGZhXCI+PC9pPicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKE51bWJlcihmbGFncy5zdWJzdHIoMSwxKSkpIHtcbiAgICAgICAgICAkbm9kZURpdi5hcHBlbmQoJzxpIGNsYXNzPVwiZWRnZSBob3Jpem9udGFsRWRnZSByaWdodEVkZ2UgZmFcIj48L2k+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJlZGdlIGhvcml6b250YWxFZGdlIGxlZnRFZGdlIGZhXCI+PC9pPicpO1xuICAgICAgICB9XG4gICAgICAgIGlmKE51bWJlcihmbGFncy5zdWJzdHIoMiwxKSkpIHtcbiAgICAgICAgICAkbm9kZURpdi5hcHBlbmQoJzxpIGNsYXNzPVwiZWRnZSB2ZXJ0aWNhbEVkZ2UgYm90dG9tRWRnZSBmYVwiPjwvaT4nKVxuICAgICAgICAgICAgLmNoaWxkcmVuKCcudGl0bGUnKS5wcmVwZW5kKCc8aSBjbGFzcz1cImZhICcrIG9wdHMucGFyZW50Tm9kZVN5bWJvbCArICcgc3ltYm9sXCI+PC9pPicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICRub2RlRGl2Lm9uKCdtb3VzZWVudGVyIG1vdXNlbGVhdmUnLCB0aGlzLm5vZGVFbnRlckxlYXZlSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICRub2RlRGl2Lm9uKCdjbGljaycsIHRoaXMubm9kZUNsaWNrSGFuZGxlci5iaW5kKHRoaXMpKTtcbiAgICAgICRub2RlRGl2Lm9uKCdjbGljaycsICcudG9wRWRnZScsIHsgJ25vZGVEYXRhJzogZGF0YSB9LCB0aGlzLnRvcEVkZ2VDbGlja0hhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAkbm9kZURpdi5vbignY2xpY2snLCAnLmJvdHRvbUVkZ2UnLCB7ICdub2RlRGF0YSc6IGRhdGEgfSwgdGhpcy5ib3R0b21FZGdlQ2xpY2tIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgJG5vZGVEaXYub24oJ2NsaWNrJywgJy5sZWZ0RWRnZSwgLnJpZ2h0RWRnZScsIHsgJ25vZGVEYXRhJzogZGF0YSB9LCB0aGlzLmhFZGdlQ2xpY2tIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgJG5vZGVEaXYub24oJ2NsaWNrJywgJy50b2dnbGVCdG4nLCB0aGlzLnRvZ2dsZVZOb2Rlcy5iaW5kKHRoaXMpKTtcblxuICAgICAgaWYgKG9wdHMuZHJhZ2dhYmxlKSB7XG4gICAgICAgIHRoaXMuYmluZERyYWdEcm9wKCRub2RlRGl2KTtcbiAgICAgICAgdGhpcy50b3VjaEhhbmRsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b3VjaE1vdmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG91Y2hUYXJnZXROb2RlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIGFsbG93IHVzZXIgdG8gYXBwZW5kIGRvbSBtb2RpZmljYXRpb24gYWZ0ZXIgZmluaXNoaW5nIG5vZGUgY3JlYXRlIG9mIG9yZ2NoYXJ0XG4gICAgICBpZiAob3B0cy5jcmVhdGVOb2RlKSB7XG4gICAgICAgIG9wdHMuY3JlYXRlTm9kZSgkbm9kZURpdiwgZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAkbm9kZURpdjtcbiAgICB9LFxuICAgIC8vIHJlY3Vyc2l2ZWx5IGJ1aWxkIHRoZSB0cmVlXG4gICAgYnVpbGRIaWVyYXJjaHk6IGZ1bmN0aW9uICgkYXBwZW5kVG8sIGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgdmFyIGxldmVsID0gMDtcbiAgICAgIGlmIChkYXRhLmxldmVsKSB7XG4gICAgICAgIGxldmVsID0gZGF0YS5sZXZlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gZGF0YS5sZXZlbCA9ICRhcHBlbmRUby5wYXJlbnRzVW50aWwoJy5vcmdjaGFydCcsICcubm9kZXMnKS5sZW5ndGggKyAxO1xuICAgICAgfVxuICAgICAgLy8gQ29uc3RydWN0IHRoZSBub2RlXG4gICAgICB2YXIgY2hpbGRyZW5EYXRhID0gZGF0YS5jaGlsZHJlbjtcbiAgICAgIHZhciBoYXNDaGlsZHJlbiA9IGNoaWxkcmVuRGF0YSA/IGNoaWxkcmVuRGF0YS5sZW5ndGggOiBmYWxzZTtcbiAgICAgIHZhciAkbm9kZVdyYXBwZXI7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID4gMikge1xuICAgICAgICB2YXIgJG5vZGVEaXYgPSB0aGlzLmNyZWF0ZU5vZGUoZGF0YSk7XG4gICAgICAgIGlmIChvcHRzLnZlcnRpY2FsTGV2ZWwgJiYgbGV2ZWwgPj0gb3B0cy52ZXJ0aWNhbExldmVsKSB7XG4gICAgICAgICAgJGFwcGVuZFRvLmFwcGVuZCgkbm9kZURpdik7XG4gICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAkbm9kZVdyYXBwZXIgPSAkKCc8dGFibGU+Jyk7XG4gICAgICAgICAgJGFwcGVuZFRvLmFwcGVuZCgkbm9kZVdyYXBwZXIuYXBwZW5kKCQoJzx0ci8+JykuYXBwZW5kKCQoJzx0ZCcgKyAoaGFzQ2hpbGRyZW4gPyAnIGNvbHNwYW49XCInICsgY2hpbGRyZW5EYXRhLmxlbmd0aCAqIDIgKyAnXCInIDogJycpICsgJz48L3RkPicpLmFwcGVuZCgkbm9kZURpdikpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIENvbnN0cnVjdCB0aGUgbG93ZXIgbGV2ZWwodHdvIFwiY29ubmVjdGlvbmcgbGluZXNcIiByb3dzIGFuZCBcImluZmVyaW9yIG5vZGVzXCIgcm93KVxuICAgICAgaWYgKGhhc0NoaWxkcmVuKSB7XG4gICAgICAgIHZhciBpc0hpZGRlbiA9IChsZXZlbCArIDEgPiBvcHRzLnZpc2libGVMZXZlbCB8fCBkYXRhLmNvbGxhcHNlZCkgPyAnIGhpZGRlbicgOiAnJztcbiAgICAgICAgdmFyIGlzVmVydGljYWxMYXllciA9IChvcHRzLnZlcnRpY2FsTGV2ZWwgJiYgKGxldmVsICsgMSkgPj0gb3B0cy52ZXJ0aWNhbExldmVsKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgdmFyICRub2Rlc0xheWVyO1xuICAgICAgICBpZiAoaXNWZXJ0aWNhbExheWVyKSB7XG4gICAgICAgICAgJG5vZGVzTGF5ZXIgPSAkKCc8dWw+Jyk7XG4gICAgICAgICAgaWYgKGlzSGlkZGVuICYmIGxldmVsICsgMSA+IG9wdHMudmVydGljYWxMZXZlbCkge1xuICAgICAgICAgICAgJG5vZGVzTGF5ZXIuYWRkQ2xhc3MoaXNIaWRkZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV2ZWwgKyAxID09PSBvcHRzLnZlcnRpY2FsTGV2ZWwpIHtcbiAgICAgICAgICAgICRhcHBlbmRUby5jaGlsZHJlbigndGFibGUnKS5hcHBlbmQoJzx0ciBjbGFzcz1cInZlcnRpY2FsTm9kZXMnICsgaXNIaWRkZW4gKyAnXCI+PHRkPjwvdGQ+PC90cj4nKVxuICAgICAgICAgICAgICAuZmluZCgnLnZlcnRpY2FsTm9kZXMnKS5jaGlsZHJlbigpLmFwcGVuZCgkbm9kZXNMYXllcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRhcHBlbmRUby5hcHBlbmQoJG5vZGVzTGF5ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgJHVwcGVyTGluZXMgPSAkKCc8dHIgY2xhc3M9XCJsaW5lcycgKyBpc0hpZGRlbiArICdcIj48dGQgY29sc3Bhbj1cIicgKyBjaGlsZHJlbkRhdGEubGVuZ3RoICogMiArICdcIj48ZGl2IGNsYXNzPVwiZG93bkxpbmVcIj48L2Rpdj48L3RkPjwvdHI+Jyk7XG4gICAgICAgICAgdmFyIGxvd2VyTGluZXMgPSAnPHRyIGNsYXNzPVwibGluZXMnICsgaXNIaWRkZW4gKyAnXCI+PHRkIGNsYXNzPVwicmlnaHRMaW5lXCI+PC90ZD4nO1xuICAgICAgICAgIGZvciAodmFyIGk9MTsgaTxjaGlsZHJlbkRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxvd2VyTGluZXMgKz0gJzx0ZCBjbGFzcz1cImxlZnRMaW5lIHRvcExpbmVcIj48L3RkPjx0ZCBjbGFzcz1cInJpZ2h0TGluZSB0b3BMaW5lXCI+PC90ZD4nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsb3dlckxpbmVzICs9ICc8dGQgY2xhc3M9XCJsZWZ0TGluZVwiPjwvdGQ+PC90cj4nO1xuICAgICAgICAgICRub2Rlc0xheWVyID0gJCgnPHRyIGNsYXNzPVwibm9kZXMnICsgaXNIaWRkZW4gKyAnXCI+Jyk7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgJGFwcGVuZFRvLmFwcGVuZCgkdXBwZXJMaW5lcykuYXBwZW5kKGxvd2VyTGluZXMpLmFwcGVuZCgkbm9kZXNMYXllcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRub2RlV3JhcHBlci5hcHBlbmQoJHVwcGVyTGluZXMpLmFwcGVuZChsb3dlckxpbmVzKS5hcHBlbmQoJG5vZGVzTGF5ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZWN1cnNlIHRocm91Z2ggY2hpbGRyZW4gbm9kZXNcbiAgICAgICAgJC5lYWNoKGNoaWxkcmVuRGF0YSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciAkbm9kZUNlbGwgPSBpc1ZlcnRpY2FsTGF5ZXIgPyAkKCc8bGk+JykgOiAkKCc8dGQgY29sc3Bhbj1cIjJcIj4nKTtcbiAgICAgICAgICAkbm9kZXNMYXllci5hcHBlbmQoJG5vZGVDZWxsKTtcbiAgICAgICAgICB0aGlzLmxldmVsID0gbGV2ZWwgKyAxO1xuICAgICAgICAgIHRoYXQuYnVpbGRIaWVyYXJjaHkoJG5vZGVDZWxsLCB0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvLyBidWlsZCB0aGUgY2hpbGQgbm9kZXMgb2Ygc3BlY2lmaWMgbm9kZVxuICAgIGJ1aWxkQ2hpbGROb2RlOiBmdW5jdGlvbiAoJGFwcGVuZFRvLCBkYXRhKSB7XG4gICAgICAkYXBwZW5kVG8uZmluZCgndGQ6Zmlyc3QnKS5hdHRyKCdjb2xzcGFuJywgZGF0YS5sZW5ndGggKiAyKTtcbiAgICAgIHRoaXMuYnVpbGRIaWVyYXJjaHkoJGFwcGVuZFRvLCB7ICdjaGlsZHJlbic6IGRhdGEgfSk7XG4gICAgfSxcbiAgICAvLyBleHBvc2VkIG1ldGhvZFxuICAgIGFkZENoaWxkcmVuOiBmdW5jdGlvbiAoJG5vZGUsIGRhdGEpIHtcbiAgICAgIHRoaXMuYnVpbGRDaGlsZE5vZGUoJG5vZGUuY2xvc2VzdCgndGFibGUnKSwgZGF0YSk7XG4gICAgICBpZiAoISRub2RlLmNoaWxkcmVuKCcuYm90dG9tRWRnZScpLmxlbmd0aCkge1xuICAgICAgICAkbm9kZS5hcHBlbmQoJzxpIGNsYXNzPVwiZWRnZSB2ZXJ0aWNhbEVkZ2UgYm90dG9tRWRnZSBmYVwiPjwvaT4nKTtcbiAgICAgIH1cbiAgICAgIGlmICghJG5vZGUuZmluZCgnLnN5bWJvbCcpLmxlbmd0aCkge1xuICAgICAgICAkbm9kZS5jaGlsZHJlbignLnRpdGxlJykucHJlcGVuZCgnPGkgY2xhc3M9XCJmYSAnKyB0aGlzLm9wdGlvbnMucGFyZW50Tm9kZVN5bWJvbCArICcgc3ltYm9sXCI+PC9pPicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbkFjdGlvbigkbm9kZSkpIHtcbiAgICAgICAgdGhpcy5zd2l0Y2hWZXJ0aWNhbEFycm93KCRub2RlLmNoaWxkcmVuKCcuYm90dG9tRWRnZScpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIGJ1aWxkIHRoZSBwYXJlbnQgbm9kZSBvZiBzcGVjaWZpYyBub2RlXG4gICAgYnVpbGRQYXJlbnROb2RlOiBmdW5jdGlvbiAoJGN1cnJlbnRSb290LCBkYXRhKSB7XG4gICAgICBkYXRhLnJlbGF0aW9uc2hpcCA9IGRhdGEucmVsYXRpb25zaGlwIHx8ICcwMDEnO1xuICAgICAgdmFyICR0YWJsZSA9ICQoJzx0YWJsZT4nKVxuICAgICAgICAuYXBwZW5kKCQoJzx0cj4nKS5hcHBlbmQoJCgnPHRkIGNvbHNwYW49XCIyXCI+JykuYXBwZW5kKHRoaXMuY3JlYXRlTm9kZShkYXRhKSkpKVxuICAgICAgICAuYXBwZW5kKCc8dHIgY2xhc3M9XCJsaW5lc1wiPjx0ZCBjb2xzcGFuPVwiMlwiPjxkaXYgY2xhc3M9XCJkb3duTGluZVwiPjwvZGl2PjwvdGQ+PC90cj4nKVxuICAgICAgICAuYXBwZW5kKCc8dHIgY2xhc3M9XCJsaW5lc1wiPjx0ZCBjbGFzcz1cInJpZ2h0TGluZVwiPjwvdGQ+PHRkIGNsYXNzPVwibGVmdExpbmVcIj48L3RkPjwvdHI+Jyk7XG4gICAgICB0aGlzLiRjaGFydC5wcmVwZW5kKCR0YWJsZSlcbiAgICAgICAgLmNoaWxkcmVuKCd0YWJsZTpmaXJzdCcpLmFwcGVuZCgnPHRyIGNsYXNzPVwibm9kZXNcIj48dGQgY29sc3Bhbj1cIjJcIj48L3RkPjwvdHI+JylcbiAgICAgICAgLmNoaWxkcmVuKCd0cjpsYXN0JykuY2hpbGRyZW4oKS5hcHBlbmQodGhpcy4kY2hhcnQuY2hpbGRyZW4oJ3RhYmxlJykubGFzdCgpKTtcbiAgICB9LFxuICAgIC8vIGV4cG9zZWQgbWV0aG9kXG4gICAgYWRkUGFyZW50OiBmdW5jdGlvbiAoJGN1cnJlbnRSb290LCBkYXRhKSB7XG4gICAgICB0aGlzLmJ1aWxkUGFyZW50Tm9kZSgkY3VycmVudFJvb3QsIGRhdGEpO1xuICAgICAgaWYgKCEkY3VycmVudFJvb3QuY2hpbGRyZW4oJy50b3BFZGdlJykubGVuZ3RoKSB7XG4gICAgICAgICRjdXJyZW50Um9vdC5jaGlsZHJlbignLnRpdGxlJykuYWZ0ZXIoJzxpIGNsYXNzPVwiZWRnZSB2ZXJ0aWNhbEVkZ2UgdG9wRWRnZSBmYVwiPjwvaT4nKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW5BY3Rpb24oJGN1cnJlbnRSb290KSkge1xuICAgICAgICB0aGlzLnN3aXRjaFZlcnRpY2FsQXJyb3coJGN1cnJlbnRSb290LmNoaWxkcmVuKCcudG9wRWRnZScpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vIHN1YnNlcXVlbnQgcHJvY2Vzc2luZyBvZiBidWlsZCBzaWJsaW5nIG5vZGVzXG4gICAgY29tcGxlbWVudExpbmU6IGZ1bmN0aW9uICgkb25lU2libGluZywgc2libGluZ0NvdW50LCBleGlzdGluZ1NpYmxpZ0NvdW50KSB7XG4gICAgICB2YXIgbGluZXMgPSAnJztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhpc3RpbmdTaWJsaWdDb3VudDsgaSsrKSB7XG4gICAgICAgIGxpbmVzICs9ICc8dGQgY2xhc3M9XCJsZWZ0TGluZSB0b3BMaW5lXCI+PC90ZD48dGQgY2xhc3M9XCJyaWdodExpbmUgdG9wTGluZVwiPjwvdGQ+JztcbiAgICAgIH1cbiAgICAgICRvbmVTaWJsaW5nLnBhcmVudCgpLnByZXZBbGwoJ3RyOmd0KDApJykuY2hpbGRyZW4oKS5hdHRyKCdjb2xzcGFuJywgc2libGluZ0NvdW50ICogMilcbiAgICAgICAgLmVuZCgpLm5leHQoKS5jaGlsZHJlbignOmZpcnN0JykuYWZ0ZXIobGluZXMpO1xuICAgIH0sXG4gICAgLy8gYnVpbGQgdGhlIHNpYmxpbmcgbm9kZXMgb2Ygc3BlY2lmaWMgbm9kZVxuICAgIGJ1aWxkU2libGluZ05vZGU6IGZ1bmN0aW9uICgkbm9kZUNoYXJ0LCBkYXRhKSB7XG4gICAgICB2YXIgbmV3U2libGluZ0NvdW50ID0gJC5pc0FycmF5KGRhdGEpID8gZGF0YS5sZW5ndGggOiBkYXRhLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIHZhciBleGlzdGluZ1NpYmxpZ0NvdW50ID0gJG5vZGVDaGFydC5wYXJlbnQoKS5pcygndGQnKSA/ICRub2RlQ2hhcnQuY2xvc2VzdCgndHInKS5jaGlsZHJlbigpLmxlbmd0aCA6IDE7XG4gICAgICB2YXIgc2libGluZ0NvdW50ID0gZXhpc3RpbmdTaWJsaWdDb3VudCArIG5ld1NpYmxpbmdDb3VudDtcbiAgICAgIHZhciBpbnNlcnRQb3N0aW9uID0gKHNpYmxpbmdDb3VudCA+IDEpID8gTWF0aC5mbG9vcihzaWJsaW5nQ291bnQvMiAtIDEpIDogMDtcbiAgICAgIC8vIGp1c3QgYnVpbGQgdGhlIHNpYmxpbmcgbm9kZXMgZm9yIHRoZSBzcGVjaWZpYyBub2RlXG4gICAgICBpZiAoJG5vZGVDaGFydC5wYXJlbnQoKS5pcygndGQnKSkge1xuICAgICAgICB2YXIgJHBhcmVudCA9ICRub2RlQ2hhcnQuY2xvc2VzdCgndHInKS5wcmV2QWxsKCd0cjpsYXN0Jyk7XG4gICAgICAgICRub2RlQ2hhcnQuY2xvc2VzdCgndHInKS5wcmV2QWxsKCd0cjpsdCgyKScpLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmJ1aWxkQ2hpbGROb2RlKCRub2RlQ2hhcnQucGFyZW50KCkuY2xvc2VzdCgndGFibGUnKSwgZGF0YSk7XG4gICAgICAgIHZhciAkc2libGluZ1RkcyA9ICRub2RlQ2hhcnQucGFyZW50KCkuY2xvc2VzdCgndGFibGUnKS5jaGlsZHJlbigndHI6bGFzdCcpLmNoaWxkcmVuKCd0ZCcpO1xuICAgICAgICBpZiAoZXhpc3RpbmdTaWJsaWdDb3VudCA+IDEpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZW1lbnRMaW5lKCRzaWJsaW5nVGRzLmVxKDApLmJlZm9yZSgkbm9kZUNoYXJ0LmNsb3Nlc3QoJ3RkJykuc2libGluZ3MoKS5hZGRCYWNrKCkudW53cmFwKCkpLCBzaWJsaW5nQ291bnQsIGV4aXN0aW5nU2libGlnQ291bnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29tcGxlbWVudExpbmUoJHNpYmxpbmdUZHMuZXEoaW5zZXJ0UG9zdGlvbikuYWZ0ZXIoJG5vZGVDaGFydC5jbG9zZXN0KCd0ZCcpLnVud3JhcCgpKSwgc2libGluZ0NvdW50LCAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHsgLy8gYnVpbGQgdGhlIHNpYmxpbmcgbm9kZXMgYW5kIHBhcmVudCBub2RlIGZvciB0aGUgc3BlY2lmaWMgbmRvZVxuICAgICAgICB0aGlzLmJ1aWxkSGllcmFyY2h5KCRub2RlQ2hhcnQuY2xvc2VzdCgnLm9yZ2NoYXJ0JyksIGRhdGEpO1xuICAgICAgICB0aGlzLmNvbXBsZW1lbnRMaW5lKCRub2RlQ2hhcnQubmV4dCgpLmNoaWxkcmVuKCd0cjpsYXN0JykuY2hpbGRyZW4oKS5lcShpbnNlcnRQb3N0aW9uKS5hZnRlcigkKCc8dGQgY29sc3Bhbj1cIjJcIj4nKS5hcHBlbmQoJG5vZGVDaGFydCkpLFxuICAgICAgICAgIHNpYmxpbmdDb3VudCwgMSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvL1xuICAgIGFkZFNpYmxpbmdzOiBmdW5jdGlvbiAoJG5vZGUsIGRhdGEpIHtcbiAgICAgIHRoaXMuYnVpbGRTaWJsaW5nTm9kZSgkbm9kZS5jbG9zZXN0KCd0YWJsZScpLCBkYXRhKTtcbiAgICAgICRub2RlLmNsb3Nlc3QoJy5ub2RlcycpLmRhdGEoJ3NpYmxpbmdzTG9hZGVkJywgdHJ1ZSk7XG4gICAgICBpZiAoISRub2RlLmNoaWxkcmVuKCcubGVmdEVkZ2UnKS5sZW5ndGgpIHtcbiAgICAgICAgJG5vZGUuY2hpbGRyZW4oJy50b3BFZGdlJykuYWZ0ZXIoJzxpIGNsYXNzPVwiZWRnZSBob3Jpem9udGFsRWRnZSByaWdodEVkZ2UgZmFcIj48L2k+PGkgY2xhc3M9XCJlZGdlIGhvcml6b250YWxFZGdlIGxlZnRFZGdlIGZhXCI+PC9pPicpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbkFjdGlvbigkbm9kZSkpIHtcbiAgICAgICAgdGhpcy5zd2l0Y2hIb3Jpem9udGFsQXJyb3coJG5vZGUpO1xuICAgICAgICAkbm9kZS5jaGlsZHJlbignLnRvcEVkZ2UnKS5yZW1vdmVDbGFzcygnZmEtY2hldnJvbi11cCcpLmFkZENsYXNzKCdmYS1jaGV2cm9uLWRvd24nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIC8vXG4gICAgcmVtb3ZlTm9kZXM6IGZ1bmN0aW9uICgkbm9kZSkge1xuICAgICAgdmFyICRwYXJlbnQgPSAkbm9kZS5jbG9zZXN0KCd0YWJsZScpLnBhcmVudCgpO1xuICAgICAgdmFyICRzaWJzID0gJHBhcmVudC5wYXJlbnQoKS5zaWJsaW5ncygpO1xuICAgICAgaWYgKCRwYXJlbnQuaXMoJ3RkJykpIHtcbiAgICAgICAgaWYgKHRoaXMuZ2V0Tm9kZVN0YXRlKCRub2RlLCAnc2libGluZ3MnKS5leGlzdCkge1xuICAgICAgICAgICRzaWJzLmVxKDIpLmNoaWxkcmVuKCcudG9wTGluZTpsdCgyKScpLnJlbW92ZSgpO1xuICAgICAgICAgICRzaWJzLnNsaWNlKDAsIDIpLmNoaWxkcmVuKCkuYXR0cignY29sc3BhbicsICRzaWJzLmVxKDIpLmNoaWxkcmVuKCkubGVuZ3RoKTtcbiAgICAgICAgICAkcGFyZW50LnJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRzaWJzLmVxKDApLmNoaWxkcmVuKCkucmVtb3ZlQXR0cignY29sc3BhbicpXG4gICAgICAgICAgICAuZmluZCgnLmJvdHRvbUVkZ2UnKS5yZW1vdmUoKVxuICAgICAgICAgICAgLmVuZCgpLmVuZCgpLnNpYmxpbmdzKCkucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRwYXJlbnQuYWRkKCRwYXJlbnQuc2libGluZ3MoKSkucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAvL1xuICAgIGV4cG9ydDogZnVuY3Rpb24gKGV4cG9ydEZpbGVuYW1lLCBleHBvcnRGaWxlZXh0ZW5zaW9uKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICBleHBvcnRGaWxlbmFtZSA9ICh0eXBlb2YgZXhwb3J0RmlsZW5hbWUgIT09ICd1bmRlZmluZWQnKSA/ICBleHBvcnRGaWxlbmFtZSA6IHRoaXMub3B0aW9ucy5leHBvcnRGaWxlbmFtZTtcbiAgICAgIGV4cG9ydEZpbGVleHRlbnNpb24gPSAodHlwZW9mIGV4cG9ydEZpbGVleHRlbnNpb24gIT09ICd1bmRlZmluZWQnKSA/ICBleHBvcnRGaWxlZXh0ZW5zaW9uIDogdGhpcy5vcHRpb25zLmV4cG9ydEZpbGVleHRlbnNpb247XG4gICAgICBpZiAoJCh0aGlzKS5jaGlsZHJlbignLnNwaW5uZXInKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdmFyICRjaGFydENvbnRhaW5lciA9IHRoaXMuJGNoYXJ0Q29udGFpbmVyO1xuICAgICAgdmFyICRtYXNrID0gJGNoYXJ0Q29udGFpbmVyLmZpbmQoJy5tYXNrJyk7XG4gICAgICBpZiAoISRtYXNrLmxlbmd0aCkge1xuICAgICAgICAkY2hhcnRDb250YWluZXIuYXBwZW5kKCc8ZGl2IGNsYXNzPVwibWFza1wiPjxpIGNsYXNzPVwiZmEgZmEtY2lyY2xlLW8tbm90Y2ggZmEtc3BpbiBzcGlubmVyXCI+PC9pPjwvZGl2PicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJG1hc2sucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgfVxuICAgICAgdmFyIHNvdXJjZUNoYXJ0ID0gJGNoYXJ0Q29udGFpbmVyLmFkZENsYXNzKCdjYW52YXNDb250YWluZXInKS5maW5kKCcub3JnY2hhcnQ6bm90KFwiLmhpZGRlblwiKScpLmdldCgwKTtcbiAgICAgIHZhciBmbGFnID0gdGhhdC5vcHRpb25zLmRpcmVjdGlvbiA9PT0gJ2wycicgfHwgdGhhdC5vcHRpb25zLmRpcmVjdGlvbiA9PT0gJ3IybCc7XG4gICAgICBodG1sMmNhbnZhcyhzb3VyY2VDaGFydCwge1xuICAgICAgICAnd2lkdGgnOiBmbGFnID8gc291cmNlQ2hhcnQuY2xpZW50SGVpZ2h0IDogc291cmNlQ2hhcnQuY2xpZW50V2lkdGgsXG4gICAgICAgICdoZWlnaHQnOiBmbGFnID8gc291cmNlQ2hhcnQuY2xpZW50V2lkdGggOiBzb3VyY2VDaGFydC5jbGllbnRIZWlnaHQsXG4gICAgICAgICdvbmNsb25lJzogZnVuY3Rpb24gKGNsb25lRG9jKSB7XG4gICAgICAgICAgJChjbG9uZURvYykuZmluZCgnLmNhbnZhc0NvbnRhaW5lcicpLmNzcygnb3ZlcmZsb3cnLCAndmlzaWJsZScpXG4gICAgICAgICAgICAuZmluZCgnLm9yZ2NoYXJ0Om5vdChcIi5oaWRkZW5cIik6Zmlyc3QnKS5jc3MoJ3RyYW5zZm9ybScsICcnKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ29ucmVuZGVyZWQnOiBmdW5jdGlvbiAoY2FudmFzKSB7XG4gICAgICAgICAgJGNoYXJ0Q29udGFpbmVyLmZpbmQoJy5tYXNrJykuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgIGlmIChleHBvcnRGaWxlZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkgPT09ICdwZGYnKSB7XG4gICAgICAgICAgICB2YXIgZG9jID0ge307XG4gICAgICAgICAgICB2YXIgZG9jV2lkdGggPSBNYXRoLmZsb29yKGNhbnZhcy53aWR0aCAqIDAuMjY0Nik7XG4gICAgICAgICAgICB2YXIgZG9jSGVpZ2h0ID0gTWF0aC5mbG9vcihjYW52YXMuaGVpZ2h0ICogMC4yNjQ2KTtcbiAgICAgICAgICAgIGlmIChkb2NXaWR0aCA+IGRvY0hlaWdodCkge1xuICAgICAgICAgICAgICBkb2MgPSBuZXcganNQREYoJ2wnLCAnbW0nLCBbZG9jV2lkdGgsIGRvY0hlaWdodF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZG9jID0gbmV3IGpzUERGKCdwJywgJ21tJywgW2RvY0hlaWdodCwgZG9jV2lkdGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvYy5hZGRJbWFnZShjYW52YXMudG9EYXRhVVJMKCksICdwbmcnLCAwLCAwKTtcbiAgICAgICAgICAgIGRvYy5zYXZlKGV4cG9ydEZpbGVuYW1lICsgJy5wZGYnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGlzV2Via2l0ID0gJ1dlYmtpdEFwcGVhcmFuY2UnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZTtcbiAgICAgICAgICAgIHZhciBpc0ZmID0gISF3aW5kb3cuc2lkZWJhcjtcbiAgICAgICAgICAgIHZhciBpc0VkZ2UgPSBuYXZpZ2F0b3IuYXBwTmFtZSA9PT0gJ01pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlcicgfHwgKG5hdmlnYXRvci5hcHBOYW1lID09PSBcIk5ldHNjYXBlXCIgJiYgbmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignRWRnZScpID4gLTEpO1xuXG4gICAgICAgICAgICBpZiAoKCFpc1dlYmtpdCAmJiAhaXNGZikgfHwgaXNFZGdlKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihjYW52YXMubXNUb0Jsb2IoKSwgZXhwb3J0RmlsZW5hbWUgKyAnLnBuZycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gJy5vYy1kb3dubG9hZC1idG4nICsgKHRoYXQub3B0aW9ucy5jaGFydENsYXNzICE9PSAnJyA/ICcuJyArIHRoYXQub3B0aW9ucy5jaGFydENsYXNzIDogJycpO1xuICAgICAgICAgICAgICBpZiAoISRjaGFydENvbnRhaW5lci5maW5kKHNlbGVjdG9yKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAkY2hhcnRDb250YWluZXIuYXBwZW5kKCc8YSBjbGFzcz1cIm9jLWRvd25sb2FkLWJ0bicgKyAodGhhdC5vcHRpb25zLmNoYXJ0Q2xhc3MgIT09ICcnID8gJyAnICsgdGhhdC5vcHRpb25zLmNoYXJ0Q2xhc3MgOiAnJykgKyAnXCInXG4gICAgICAgICAgICAgICAgICArICcgZG93bmxvYWQ9XCInICsgZXhwb3J0RmlsZW5hbWUgKyAnLnBuZ1wiPjwvYT4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkY2hhcnRDb250YWluZXIuZmluZChzZWxlY3RvcikuYXR0cignaHJlZicsIGNhbnZhcy50b0RhdGFVUkwoKSlbMF0uY2xpY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICRjaGFydENvbnRhaW5lci5yZW1vdmVDbGFzcygnY2FudmFzQ29udGFpbmVyJyk7XG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICRjaGFydENvbnRhaW5lci5yZW1vdmVDbGFzcygnY2FudmFzQ29udGFpbmVyJyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgJC5mbi5vcmdjaGFydCA9IGZ1bmN0aW9uIChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBPcmdDaGFydCh0aGlzLCBvcHRzKS5pbml0KCk7XG4gIH07XG5cbn0pKTtcbiJdfQ== +//# sourceMappingURL=jquery.orgchart.min.js.map diff --git a/dist/js/jquery.orgchart.min.js.map b/dist/js/jquery.orgchart.min.js.map new file mode 100644 index 00000000..2d5b242f --- /dev/null +++ b/dist/js/jquery.orgchart.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["jquery.orgchart.js"],"names":["factory","module","exports","require","window","document","jQuery","$","undefined","OrgChart","elem","opts","this","$chartContainer","defaultOptions","nodeTitle","nodeId","toggleSiblingsResp","visibleLevel","chartClass","exportButton","exportFilename","exportFileextension","parentNodeSymbol","draggable","direction","pan","zoom","zoominLimit","zoomoutLimit","prototype","init","that","options","extend","$chart","remove","data","class","click","event","target","closest","length","find","removeClass","MutationObserver","triggerInitEvent","type","buildHierarchy","buildJsonDS","children","ajaxURL","attachRel","append","ajax","url","dataType","done","textStatus","jqXHR","fail","errorThrown","console","log","always","attachExportButton","bindPan","bindZoom","mo","mutations","disconnect","initTime","i","j","addedNodes","classList","contains","initCompleted","initEvent","Event","trigger","observe","childList","$exportBtn","text","e","preventDefault","export","setOptions","val","unbindPan","unbindZoom","panStartHandler","delegateTarget","touches","css","lastX","lastY","lastTf","temp","split","indexOf","parseInt","startX","startY","targetTouches","pageX","pageY","on","newX","newY","matrix","join","panEndHandler","chart","off","zoomWheelHandler","oc","newScale","originalEvent","deltaY","setChartScale","zoomStartHandler","dist","getPinchDist","zoomingHandler","zoomEndHandler","diff","Math","sqrt","clientX","clientY","targetScale","abs","parseFloat","$li","subObj","name","contents","eq","trim","relationship","parent","is","siblings","attr","id","each","push","flags","forEach","item","loopChart","$tr","getHierarchy","valid","getNodeState","$node","relation","$target","exist","visible","getRelatedNodes","hideParentEnd","upperLevel","addClass","slice","removeAttr","hideParent","$upperLevel","hideSiblings","$parent","one","showParentEnd","node","isInAction","switchVerticalArrow","showParent","repaint","bind","stopAjax","$nodeLevel","isVisibleNode","index","hideChildrenEnd","animatedNodes","isVerticalDesc","lowerLevel","prevAll","addBack","last","hideChildren","$lowerLevel","$animatedNodes","filter","get","showChildrenEnd","showChildren","$levels","hideSiblingsEnd","$nodeContainer","nodeContainer","lines","$siblings","nextAll","prev","end","switchHorizontalArrow","$lines","showSiblingsEnd","visibleNodes","showRelatedParentEnd","showSiblings","$visibleNodes","startLoading","$edge","not","prop","endLoading","$arrow","toggleClass","$prevSib","$nextSib","next","$sibs","sibsVisible","style","offsetWidth","nodeEnterLeaveHandler","flag","$topEdge","$bottomEdge","$leftEdge","nodeClickHandler","loadNodes","rel","isEmptyObject","addParent","addChildren","addSiblings","HideFirstParentEnd","topEdge","topEdgeClickHandler","stopPropagation","parentState","isFunction","nodeData","bottomEdgeClickHandler","childrenState","hEdgeClickHandler","$hEdge","siblingsState","families","expandVNodesEnd","vNodes","collapseVNodesEnd","toggleVNodes","$toggleBtn","$descWrapper","$descendants","$children","createGhostNode","$nodeDiv","origEvent","isFirefox","test","navigator","userAgent","toLowerCase","dataTransfer","setData","ghostNode","nodeCover","querySelector","createElementNS","add","appendChild","transValues","scale","setAttribute","outerWidth","outerHeight","xOffset","offsetX","yOffset","offsetY","ghostNodeWrapper","createElement","src","XMLSerializer","serializeToString","setDragImage","filterAllowedDropNodes","$dragged","$dragZone","$dragHier","dropCriteria","dragstartHandler","dragoverHandler","dropEffect","dragendHandler","dropHandler","$dropZone","dropEvent","draggedNode","dragZone","dropZone","isDefaultPrevented","dropColspan","horizontalEdges","before","$dropSibs","after","dragColspan","$dragSibs","touchstartHandler","touchHandled","touchMoved","innerText","touchmoveHandler","hasClass","simulateMouseEvent","$touchingNode","elementFromPoint","touchingNodeElement","touchTargetNode","touchendHandler","fakeEventForDropHandler","simulatedType","touch","changedTouches","simulatedEvent","createEvent","initMouseEvent","screenX","screenY","dispatchEvent","bindDragDrop","createNode","level","child","parentId","className","nodeTemplate","nodeContent","verticalLevel","Number","substr","icon","prepend","$appendTo","parentsUntil","$nodeWrapper","childrenData","hasChildren","Object","keys","$nodesLayer","isHidden","collapsed","isVerticalLayer","$upperLines","lowerLines","$nodeCell","buildChildNode","buildParentNode","$currentRoot","$table","complementLine","$oneSibling","siblingCount","existingSibligCount","buildSiblingNode","$nodeChart","newSiblingCount","isArray","insertPostion","floor","$siblingTds","unwrap","removeNodes","$mask","sourceChart","html2canvas","width","clientHeight","clientWidth","height","onclone","cloneDoc","onrendered","canvas","doc","docWidth","docHeight","jsPDF","addImage","toDataURL","save","isWebkit","documentElement","isFf","sidebar","isEdge","appName","appVersion","msSaveBlob","msToBlob","selector","then","fn","orgchart"],"mappings":"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","file":"jquery.orgchart.min.js","sourcesContent":["/*\n * jQuery OrgChart Plugin\n * https://github.com/dabeng/OrgChart\n *\n * Copyright 2016, dabeng\n * https://github.com/dabeng\n *\n * Licensed under the MIT license:\n * http://www.opensource.org/licenses/MIT\n */\n'use strict';\n\n(function (factory) {\n if (typeof module === 'object' && typeof module.exports === 'object') {\n factory(require('jquery'), window, document);\n } else {\n factory(jQuery, window, document);\n }\n}(function ($, window, document, undefined) {\n var OrgChart = function (elem, opts) {\n this.$chartContainer = $(elem);\n this.opts = opts;\n this.defaultOptions = {\n 'nodeTitle': 'name',\n 'nodeId': 'id',\n 'toggleSiblingsResp': false,\n 'visibleLevel': 999,\n 'chartClass': '',\n 'exportButton': false,\n 'exportFilename': 'OrgChart',\n 'exportFileextension': 'png',\n 'parentNodeSymbol': 'fa-users',\n 'draggable': false,\n 'direction': 't2b',\n 'pan': false,\n 'zoom': false,\n 'zoominLimit': 7,\n 'zoomoutLimit': 0.5\n };\n };\n //\n OrgChart.prototype = {\n //\n init: function (opts) {\n var that = this;\n this.options = $.extend({}, this.defaultOptions, this.opts, opts);\n // build the org-chart\n var $chartContainer = this.$chartContainer;\n if (this.$chart) {\n this.$chart.remove();\n }\n var data = this.options.data;\n var $chart = this.$chart = $('
    ', {\n 'data': { 'options': this.options },\n 'class': 'orgchart' + (this.options.chartClass !== '' ? ' ' + this.options.chartClass : '') + (this.options.direction !== 't2b' ? ' ' + this.options.direction : ''),\n 'click': function(event) {\n if (!$(event.target).closest('.node').length) {\n $chart.find('.node.focused').removeClass('focused');\n }\n }\n });\n if (typeof MutationObserver !== 'undefined') {\n this.triggerInitEvent();\n }\n if ($.type(data) === 'object') {\n if (data instanceof $) { // ul datasource\n this.buildHierarchy($chart, this.buildJsonDS(data.children()), 0, this.options);\n } else { // local json datasource\n this.buildHierarchy($chart, this.options.ajaxURL ? data : this.attachRel(data, '00'));\n }\n } else {\n $chart.append('');\n $.ajax({\n 'url': data,\n 'dataType': 'json'\n })\n .done(function(data, textStatus, jqXHR) {\n that.buildHierarchy($chart, that.options.ajaxURL ? data : that.attachRel(data, '00'), 0, that.options);\n })\n .fail(function(jqXHR, textStatus, errorThrown) {\n console.log(errorThrown);\n })\n .always(function() {\n $chart.children('.spinner').remove();\n });\n }\n $chartContainer.append($chart);\n\n // append the export button\n if (this.options.exportButton && !$chartContainer.find('.oc-export-btn').length) {\n this.attachExportButton();\n }\n\n if (this.options.pan) {\n this.bindPan();\n }\n\n if (this.options.zoom) {\n this.bindZoom();\n }\n\n return this;\n },\n //\n triggerInitEvent: function () {\n var that = this;\n var mo = new MutationObserver(function (mutations) {\n mo.disconnect();\n initTime:\n for (var i = 0; i < mutations.length; i++) {\n for (var j = 0; j < mutations[i].addedNodes.length; j++) {\n if (mutations[i].addedNodes[j].classList.contains('orgchart')) {\n if (that.options.initCompleted && typeof that.options.initCompleted === 'function') {\n that.options.initCompleted(that.$chart);\n var initEvent = $.Event('init.orgchart');\n that.$chart.trigger(initEvent);\n break initTime;\n }\n }\n }\n }\n });\n mo.observe(this.$chartContainer[0], { childList: true });\n },\n //\n attachExportButton: function () {\n var that = this;\n var $exportBtn = $('
    ');\n $appendTo.append($nodeWrapper.append($('').append($('').append($nodeDiv))));\n }\n }\n // Construct the lower level(two \"connectiong lines\" rows and \"inferior nodes\" row)\n if (hasChildren) {\n var isHidden = (level + 1 > opts.visibleLevel || data.collapsed) ? ' hidden' : '';\n var isVerticalLayer = (opts.verticalLevel && (level + 1) >= opts.verticalLevel) ? true : false;\n var $nodesLayer;\n if (isVerticalLayer) {\n $nodesLayer = $('
      ');\n if (isHidden && level + 1 > opts.verticalLevel) {\n $nodesLayer.addClass(isHidden);\n }\n if (level + 1 === opts.verticalLevel) {\n $appendTo.children('table').append('
    ')\n .find('.verticalNodes').children().append($nodesLayer);\n } else {\n $appendTo.append($nodesLayer);\n }\n } else {\n var $upperLines = $('');\n var lowerLines = '';\n for (var i=1; i');\n if (Object.keys(data).length === 2) {\n $appendTo.append($upperLines).append(lowerLines).append($nodesLayer);\n } else {\n $nodeWrapper.append($upperLines).append(lowerLines).append($nodesLayer);\n }\n }\n // recurse through children nodes\n $.each(childrenData, function () {\n var $nodeCell = isVerticalLayer ? $('
  • ') : $('
  • ');\n $nodesLayer.append($nodeCell);\n this.level = level + 1;\n that.buildHierarchy($nodeCell, this);\n });\n }\n },\n // build the child nodes of specific node\n buildChildNode: function ($appendTo, data) {\n $appendTo.find('td:first').attr('colspan', data.length * 2);\n this.buildHierarchy($appendTo, { 'children': data });\n },\n // exposed method\n addChildren: function ($node, data) {\n this.buildChildNode($node.closest('table'), data);\n if (!$node.children('.bottomEdge').length) {\n $node.append('');\n }\n if (!$node.find('.symbol').length) {\n $node.children('.title').prepend('');\n }\n if (this.isInAction($node)) {\n this.switchVerticalArrow($node.children('.bottomEdge'));\n }\n },\n // build the parent node of specific node\n buildParentNode: function ($currentRoot, data) {\n data.relationship = data.relationship || '001';\n var $table = $('')\n .append($('').append($('')\n .append('');\n this.$chart.prepend($table)\n .children('table:first').append('')\n .children('tr:last').children().append(this.$chart.children('table').last());\n },\n // exposed method\n addParent: function ($currentRoot, data) {\n this.buildParentNode($currentRoot, data);\n if (!$currentRoot.children('.topEdge').length) {\n $currentRoot.children('.title').after('');\n }\n if (this.isInAction($currentRoot)) {\n this.switchVerticalArrow($currentRoot.children('.topEdge'));\n }\n },\n // subsequent processing of build sibling nodes\n complementLine: function ($oneSibling, siblingCount, existingSibligCount) {\n var lines = '';\n for (var i = 0; i < existingSibligCount; i++) {\n lines += '';\n }\n $oneSibling.parent().prevAll('tr:gt(0)').children().attr('colspan', siblingCount * 2)\n .end().next().children(':first').after(lines);\n },\n // build the sibling nodes of specific node\n buildSiblingNode: function ($nodeChart, data) {\n var newSiblingCount = $.isArray(data) ? data.length : data.children.length;\n var existingSibligCount = $nodeChart.parent().is('td') ? $nodeChart.closest('tr').children().length : 1;\n var siblingCount = existingSibligCount + newSiblingCount;\n var insertPostion = (siblingCount > 1) ? Math.floor(siblingCount/2 - 1) : 0;\n // just build the sibling nodes for the specific node\n if ($nodeChart.parent().is('td')) {\n var $parent = $nodeChart.closest('tr').prevAll('tr:last');\n $nodeChart.closest('tr').prevAll('tr:lt(2)').remove();\n this.buildChildNode($nodeChart.parent().closest('table'), data);\n var $siblingTds = $nodeChart.parent().closest('table').children('tr:last').children('td');\n if (existingSibligCount > 1) {\n this.complementLine($siblingTds.eq(0).before($nodeChart.closest('td').siblings().addBack().unwrap()), siblingCount, existingSibligCount);\n } else {\n this.complementLine($siblingTds.eq(insertPostion).after($nodeChart.closest('td').unwrap()), siblingCount, 1);\n }\n } else { // build the sibling nodes and parent node for the specific ndoe\n this.buildHierarchy($nodeChart.closest('.orgchart'), data);\n this.complementLine($nodeChart.next().children('tr:last').children().eq(insertPostion).after($('
    ').append(this.createNode(data))))\n .append('
    ').append($nodeChart)),\n siblingCount, 1);\n }\n },\n //\n addSiblings: function ($node, data) {\n this.buildSiblingNode($node.closest('table'), data);\n $node.closest('.nodes').data('siblingsLoaded', true);\n if (!$node.children('.leftEdge').length) {\n $node.children('.topEdge').after('');\n }\n if (this.isInAction($node)) {\n this.switchHorizontalArrow($node);\n $node.children('.topEdge').removeClass('fa-chevron-up').addClass('fa-chevron-down');\n }\n },\n //\n removeNodes: function ($node) {\n var $parent = $node.closest('table').parent();\n var $sibs = $parent.parent().siblings();\n if ($parent.is('td')) {\n if (this.getNodeState($node, 'siblings').exist) {\n $sibs.eq(2).children('.topLine:lt(2)').remove();\n $sibs.slice(0, 2).children().attr('colspan', $sibs.eq(2).children().length);\n $parent.remove();\n } else {\n $sibs.eq(0).children().removeAttr('colspan')\n .find('.bottomEdge').remove()\n .end().end().siblings().remove();\n }\n } else {\n $parent.add($parent.siblings()).remove();\n }\n },\n //\n export: function (exportFilename, exportFileextension) {\n var that = this;\n exportFilename = (typeof exportFilename !== 'undefined') ? exportFilename : this.options.exportFilename;\n exportFileextension = (typeof exportFileextension !== 'undefined') ? exportFileextension : this.options.exportFileextension;\n if ($(this).children('.spinner').length) {\n return false;\n }\n var $chartContainer = this.$chartContainer;\n var $mask = $chartContainer.find('.mask');\n if (!$mask.length) {\n $chartContainer.append('
    ');\n } else {\n $mask.removeClass('hidden');\n }\n var sourceChart = $chartContainer.addClass('canvasContainer').find('.orgchart:not(\".hidden\")').get(0);\n var flag = that.options.direction === 'l2r' || that.options.direction === 'r2l';\n html2canvas(sourceChart, {\n 'width': flag ? sourceChart.clientHeight : sourceChart.clientWidth,\n 'height': flag ? sourceChart.clientWidth : sourceChart.clientHeight,\n 'onclone': function (cloneDoc) {\n $(cloneDoc).find('.canvasContainer').css('overflow', 'visible')\n .find('.orgchart:not(\".hidden\"):first').css('transform', '');\n },\n 'onrendered': function (canvas) {\n $chartContainer.find('.mask').addClass('hidden');\n if (exportFileextension.toLowerCase() === 'pdf') {\n var doc = {};\n var docWidth = Math.floor(canvas.width * 0.2646);\n var docHeight = Math.floor(canvas.height * 0.2646);\n if (docWidth > docHeight) {\n doc = new jsPDF('l', 'mm', [docWidth, docHeight]);\n } else {\n doc = new jsPDF('p', 'mm', [docHeight, docWidth]);\n }\n doc.addImage(canvas.toDataURL(), 'png', 0, 0);\n doc.save(exportFilename + '.pdf');\n } else {\n var isWebkit = 'WebkitAppearance' in document.documentElement.style;\n var isFf = !!window.sidebar;\n var isEdge = navigator.appName === 'Microsoft Internet Explorer' || (navigator.appName === \"Netscape\" && navigator.appVersion.indexOf('Edge') > -1);\n\n if ((!isWebkit && !isFf) || isEdge) {\n window.navigator.msSaveBlob(canvas.msToBlob(), exportFilename + '.png');\n } else {\n var selector = '.oc-download-btn' + (that.options.chartClass !== '' ? '.' + that.options.chartClass : '');\n if (!$chartContainer.find(selector).length) {\n $chartContainer.append('');\n }\n $chartContainer.find(selector).attr('href', canvas.toDataURL())[0].click();\n }\n }\n }\n })\n .then(function () {\n $chartContainer.removeClass('canvasContainer');\n }, function () {\n $chartContainer.removeClass('canvasContainer');\n });\n }\n };\n\n $.fn.orgchart = function (opts) {\n return new OrgChart(this, opts).init();\n };\n\n}));\n"]} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index ccb439da..6960953e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -84,7 +84,7 @@ gulp.task('js', ['cleanupJS', 'eslint', 'e2e-tests'], function () { .pipe(sourcemaps.init()) .pipe(uglify()) .pipe(rename('jquery.orgchart.min.js')) - .pipe(sourcemaps.write()) + .pipe(sourcemaps.write('./')) .pipe(gulp.dest(paths.distJSFolder)); }); @@ -107,10 +107,8 @@ gulp.task('csslint', function() { gulp.task('css', ['cleanupCSS', 'csslint'], function () { return gulp.src(paths.srcCSS) .pipe(gulp.dest(paths.distCSSFolder)) - .pipe(sourcemaps.init()) .pipe(cleanCSS()) .pipe(rename('jquery.orgchart.min.css')) - .pipe(sourcemaps.write()) .pipe(gulp.dest(paths.distCSSFolder)); }); diff --git a/package.json b/package.json index b4ca984e..7a7ee74d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "orgchart", - "version": "2.1.0", + "version": "2.1.1", "description": "Simple and direct organization chart(tree-like hierarchy) plugin based on pure DOM and jQuery.", "main": "./dist/js/jquery.orgchart.min.js", "style": [ @@ -34,7 +34,7 @@ "dependencies": { "font-awesome": "^4.6.3", "html2canvas": "^0.5.0-beta4", - "jquery": "~3.2.1", + "jquery": "^3.2.1", "jquery-mockjax": "^2.2.0", "jspdf": "^1.3.5" },