diff options
Diffstat (limited to 'afm-client')
-rw-r--r-- | afm-client/dist.prod/opa/AFBclient.min.css | 4 | ||||
-rw-r--r-- | afm-client/dist.prod/opa/AFBclient.min.js | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/afm-client/dist.prod/opa/AFBclient.min.css b/afm-client/dist.prod/opa/AFBclient.min.css index 7c6022d..0249f68 100644 --- a/afm-client/dist.prod/opa/AFBclient.min.css +++ b/afm-client/dist.prod/opa/AFBclient.min.css @@ -1,8 +1,8 @@ submit-button{float:right;display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem;background:#d1d1e0}submit-button i{padding-right:.3rem;font-size:2rem}submit-button span{font-size:1rem}submit-button:hover{background:#f3f3f3;border:2px solid #4d4d4d}zf-modal{background-color:rgba(180,180,180,.5)}.box-content{border:2px solid #dcdcdc!important;border-radius:5px;min-width:98%!important;margin:.5rem;background:rgba(200,205,200,.3)}.box-content .box-title{display:block;font-size:1.3rem}.ui-notification{width:auto;border-radius:5px}.ibz-right{float:right!important}.ibz-left{float:left!important} token-refresh{display:block;float:right;margin:.5rem 1rem 0 0}.button-box{height:4.5rem}.button-box .session-button{float:left;width:5rem}.button-box .response>span{display:block;margin:.3rem .5rem}.button-box .fail{color:red;border:1px solid #c00}.button-box .success{color:green;border:1px solid #004d00}.message-box{height:auto;width:100%;font-size:.75rem}.message-box .response .err-no{color:grey}.message-box .response .res.err-ok{color:#00f}.message-box .response .req.err-ok{color:#8a2be2}.message-box .response .status.err-ok{color:green}.message-box .response .status.err-fx{color:red} appli-button i,appli-button span{font-size:1rem}appli-button{display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem;background:#d1d1e0}appli-button i{padding-right:.3rem}appli-button:hover{background:#f3f3f3;border:2px solid #4d4d4d}appli-button img{height:3rem}appli-button .disable>i{text-decoration:none;cursor:auto;color:grey!important}.appli-menu-start .start-start i,.appli-menu-start .stop-stop i{color:grey} -.upload-file{display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;background:#d1d1e0;float:right;height:3rem;margin:.5rem}.upload-file span{font-size:1rem}.upload-file:hover{background:#f3f3f3;border:2px solid #4d4d4d}.upload-file i{padding-right:.3rem;font-size:2rem}.upload-file .ibz-range-slider{height:10%!important;border-radius:5px;background-color:#d3d3d3!important}.upload-file .ibz-range-slider .range-slider-handle{width:10%!important;height:100%!important;margin-top:.2rem;background-color:purple!important}.upload-file .ibz-range-slider .range-slider-active-segment{height:80%!important;background-color:#90ee90}input-text alert{position:fixed;margin:-2.2rem 0 0 15rem;border-radius:5px;font-style:italic;border-color:rgba(175,175,175,.6);color:#00008b;background-color:rgba(200,200,200,.6)!important;padding:.2rem!important}input-text input{margin-bottom:.5rem!important}input-text label{margin-top:1rem!important}input-text .required{float:right;color:#87cefa}input-text .required.valid{color:green}input-text .required.invalid{color:plum}input-text .status-untouch{border-color:rgba(200,200,200,.6)!important;box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(200,200,200,.6)!important;color:#696969!important}input-text input:focus{border-color:rgba(82,168,236,.8);box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(82,168,236,.8)!important;transition:border .2s linear 0s,box-shadow .2s linear 0s;color:#483d8b!important}input-text .status-valid{border-color:rgba(154,205,50,.6)!important;box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(154,205,50,.6)!important}input-text .status-invalid{border-color:rgba(154,17,69,.6);box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(154,17,69,.6)!important;color:#9a1145} link-button,link-button.secondary{display:inline-block;font-style:italic;margin:.5rem}link-button i,link-button span,link-button.secondary span{font-size:1rem}link-button{border:1px solid #0040ff;box-shadow:2px 2px 1px #43f;color:#36f;border-radius:5px;padding:0 .5rem;background:#d1d1e0}link-button i{padding-right:.3rem}link-button:hover{background:#fff;border:2px solid #03c}link-button.secondary{border:1px solid #668dff;box-shadow:2px 2px 1px #a199ff;color:#99b3ff;border-radius:5px;padding:0 .5rem;background:#d1d1e0}link-button.secondary i{padding-right:.3rem;font-size:1rem}link-button.secondary:hover{background:#fff;border:2px solid #3367ff} +.upload-file{display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;background:#d1d1e0;float:right;height:3rem;margin:.5rem}.upload-file span{font-size:1rem}.upload-file:hover{background:#f3f3f3;border:2px solid #4d4d4d}.upload-file i{padding-right:.3rem;font-size:2rem}.upload-file .ibz-range-slider{height:10%!important;border-radius:5px;background-color:#d3d3d3!important}.upload-file .ibz-range-slider .range-slider-handle{width:10%!important;height:100%!important;margin-top:.2rem;background-color:purple!important}.upload-file .ibz-range-slider .range-slider-active-segment{height:80%!important;background-color:#90ee90}input-text alert{position:fixed;margin:-2.2rem 0 0 15rem;border-radius:5px;font-style:italic;border-color:rgba(175,175,175,.6);color:#00008b;background-color:rgba(200,200,200,.6)!important;padding:.2rem!important}input-text input{margin-bottom:.5rem!important}input-text label{margin-top:1rem!important}input-text .required{float:right;color:#87cefa}input-text .required.valid{color:green}input-text .required.invalid{color:plum}input-text .status-untouch{border-color:rgba(200,200,200,.6)!important;box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(200,200,200,.6)!important;color:#696969!important}input-text input:focus{border-color:rgba(82,168,236,.8);box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(82,168,236,.8)!important;transition:border .2s linear 0s,box-shadow .2s linear 0s;color:#483d8b!important}input-text .status-valid{border-color:rgba(154,205,50,.6)!important;box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(154,205,50,.6)!important}input-text .status-invalid{border-color:rgba(154,17,69,.6);box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(154,17,69,.6)!important;color:#9a1145} link-button i,link-button span,token-refresh span{font-size:1rem}link-button{display:inline-block;border:1px solid #0040ff;box-shadow:2px 2px 1px #43f;color:#36f;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem;background:#d1d1e0}link-button i{padding-right:.3rem}link-button:hover{background:#fff;border:2px solid #03c}tip-modal{position:relative}.tip-modal-popup{width:20rem;position:absolute;top:1em;padding:.2em .6em;border:1px solid #963;background-color:#e5ffff;color:#000;opacity:0;transition:visibility .5s linear 1s,opacity 1s linear;border-radius:5px}.tip-modal-popup i{margin:0 .3rem 0 0;display:inline}token-refresh{display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem 1rem .5rem .5rem;background:#d1d1e0}token-refresh i{padding-right:.3rem;font-size:1rem;margin-left:.5rem}token-refresh:hover{background:#f3f3f3;border:2px solid #4d4d4d}token-refresh.online{color:#06c}token-refresh.online i{color:#0f0}token-refresh.offline{color:#f0f}token-refresh.offline i{color:red} .range-slider-handle{display:inline-block;position:absolute;z-index:1;top:-.2rem;width:2rem;height:1.375rem;border:1px solid;cursor:pointer;background:#008cba}.range-slider-handle,.range-slider.radius{background:#008cba;-webkit-border-radius:3px;border-radius:3px}.range-slider-active-segment{display:inline-block;top:.07rem;position:absolute;height:.8rem;background:#e5e5e5}.ibz-range-slider{background-color:rgba(154,205,50,.6)!important;height:1rem;position:relative}.ibz-range-slider .range-slider-active-segment{background-color:rgba(82,168,200,.6)}.ibz-range-slider-display{background-color:rgba(82,168,200,.6)!important;width:4rem!important;padding:.25rem;text-align:center}.ibz-range-slider-start,.ibz-range-slider-stop{display:inline-block;position:absolute;padding-top:2px;height:95%;background:repeating-linear-gradient(45deg,#606dbc,#606dbc 10px,#465298 10px,#465298 20px)} -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy9hcHAvaWJ6LWdsb2JhbC5zY3NzIiwic3R5bGVzL2FwcC9faWJ6LW1peGlucy5zY3NzIiwicGFnZXMvRGFzaGJvYXJkL0Rhc2hib2FyZE1vZHVsZS5zY3NzIiwid2lkZ2V0cy9BY3Rpb25CdXR0b25zL0FjdGlvbkJ1dHRvbnMuc2NzcyIsIndpZGdldHMvRm9ybUlucHV0L0Zvcm1JbnB1dC5zY3NzIiwid2lkZ2V0cy9OYXZpZ2F0aW9uL05hdmlnYXRpb24uc2NzcyIsIndpZGdldHMvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zLnNjc3MiLCJ3aWRnZXRzL1JhbmdlU2xpZGVycy9SYW5nZXNsaWRlci5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9CYSxjQUNULE1BQU8sTUNEUCxRQUFTLGFBQ1QsT0FBVyxJQUFNLE1BQUMsUUFDbEIsV0FBZSxJQUFJLElBQUksSUFBQyxLQUN4QixNRERvQixLQ0VwQixjQUFlLElBQ2YsV0FBWSxPQUNaLFFBQVMsRUFBQSxNQUNULE9BQU8sTUFDUCxXQUFZLFFBQ1gsZ0JBQ0csY0FBZSxNQUNmLFVBWnlCLEtBY3pCLG1CQUFFLFVBQVcsS0FFVixvQkFDTCxXQUFZLFFBQ1osT0FBVyxJQUFNLE1BQUMsUURaaEIsU0FDTixpQkFBa0IscUJBR1IsYUNwQlIsT0FBUSxJQUFBLE1BQUEsa0JBQ1IsY0FBZSxJQUlmLFVBQVcsY0FDWCxPQUFRLE1BQ1IsV0FBWSxxQkRnQkYsd0JBQ04sUUFBUyxNQUNULFVBQVcsT0FLSCxpQkFDWixNQUFPLEtBQ1AsY0FBZSxJQUdULFdBQ04sTUFBTyxnQkFHRixVQUNMLE1BQU87QUUxQkUsY0FDVCxRQUFTLE1BQ1QsTUFBTyxNQUNQLE9BQVEsTUFBQSxLQUFBLEVBQUEsRUFHRCxZQUNQLE9BQVUsT0FFSyw0QkFDYixNQUFPLEtBQ1AsTUFBTyxLQUdPLDJCQUNaLFFBQVMsTUFDVCxPQUFRLE1BQUEsTUFHUCxrQkFDRCxNQXRCSyxJQXVCTCxPQUFXLElBQU0sTUFBQyxLQUVk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LGlCQUFrQixvQkFOTCwwQkFVYixpQkFBc0IsOEJBQ3RCLE1BQVEsZUFDUixRQUFTLE9BQ1QsV0FBVyxPQWJiLHdCQUFlLHVCQWlCZCxRQUFTLGFBQ1QsU0FBVSxTQUNWLFlBQWEsSUFDYixPQUFRLElBQ1IsV0FBWSIsImZpbGUiOiJBRkJjbGllbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG5cblRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG5pdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxudGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cblRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG5hbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG5zdWJtaXQtYnV0dG9uIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgQGluY2x1ZGUgaWJ6LWJ1dHRvbihncmV5KTtcbn1cblxuemYtbW9kYWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE4MCwxODAsMTgwLC41KTtcbn1cblxuLmJveC1jb250ZW50IHtcbiAgICAgQGluY2x1ZGUgaWJ6LWJveC1jb250ZW50O1xuXG4gICAgLmJveC10aXRsZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcbiAgICB9XG59XG5cbi8vIENoYW5nZSBOb3RpZmljYXRpb25zIGRlZmF1bHQgc2l6ZVxuLnVpLW5vdGlmaWNhdGlvbiB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG4uaWJ6LXJpZ2h0IHtcbiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbn1cblxuLmliei1sZWZ0IHtcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xufSIsIi8qXG4gICAgRXZlcnkgU0NTUyBmaWxlcyB3aWxsIGJlIGluamVjdGVkIGludG8gbWFpbiBIVE1MIHBhZ2VcbiovXG4lc2hhZG93LXRyYW5zaXRpb24ge1xuICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzIGxpbmVhciAwcywgYm94LXNoYWRvdyAwLjJzIGxpbmVhciAwcztcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG5cbkBtaXhpbiBpYnotYm94LWNvbnRlbnQge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIGdhaW5zYm9ybyAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgbWluLXdpZHRoOiA5OCUgIWltcG9ydGFudDsgXG4gICAgbWFyZ2luOiAuNXJlbSAuNXJlbSAuNXJlbSAuNXJlbTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwMCwyMDUsMjAwLC4zKTtcbn1cblxuQG1peGluIGliei1idXR0b24gKCRjb2xvciwgJHNpemU6MnJlbSkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZW4oJGNvbG9yLDEwJSk7XG4gICAgYm94LXNoYWRvdzogMnB4IDJweCAxcHggYWRqdXN0LWh1ZSgkY29sb3IsMjBkZWcpO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBwYWRkaW5nOiAwcmVtIC41cmVtIDByZW0gLjVyZW07XG4gICAgbWFyZ2luOi41cmVtO1xuICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oIzk0OTRiNywgMjAlKTtcbiAgICBpIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMC4zcmVtO1xuICAgICAgICBmb250LXNpemU6ICRzaXplO1xuICAgIH1cbiAgICBzcGFuIHtmb250LXNpemU6IDFyZW19XG4gICAgXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRjb2xvciwgNDUlKTtcbiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIGRhcmtlbigkY29sb3IsMjAlKTtcbiAgICAgIFxuICAgIH1cbn1cblxuQG1peGluIGliei1pbnB1dC1hbGVydCAoJGNvbG9yLCAkYmFja2dyb3VuZCkge1xuICAgIHBvc2l0aW9uICA6Zml4ZWQ7XG4gICAgbWFyZ2luOiAtMi4ycmVtIDAgMCAxNXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRiYWNrZ3JvdW5kLDEwJSk7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IDAuMnJlbSAhaW1wb3J0YW50O1xufVxuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuQGltcG9ydCBcImFwcC9pYnotbWl4aW5zXCI7XG5cbiRDT0xPUl9TVUNDRVNTOiBncmVlbjtcbiRDT0xPUl9GQUlMOiByZWQ7XG5cbnRva2VuLXJlZnJlc2gge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBtYXJnaW46IC41cmVtIDFyZW0gMCAwO1xufVxuXG4uYnV0dG9uLWJveCB7XG4gICAgaGVpZ2h0ICA6IDQuNXJlbTtcbiAgICBcbiAgICAuc2Vzc2lvbi1idXR0b24ge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICB3aWR0aDogNXJlbTtcbiAgICB9O1xuICAgIFxuICAgIC5yZXNwb25zZSA+IHNwYW57XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IC4zcmVtIC41cmVtIC4zcmVtIC41cmVtOyAgICAgICAgXG4gICAgfSAgXG4gICAgXG4gICAgLmZhaWwgeyBcbiAgICAgICAgY29sb3I6JENPTE9SX0ZBSUw7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkQ09MT1JfRkFJTCwxMCUpO1xuICAgIH1cbiAgICAuc3VjY2VzcyB7IFxuICAgICAgICBjb2xvcjokQ09MT1JfU1VDQ0VTUzsgXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkQ09MT1JfU1VDQ0VTUywxMCUpO1xuICAgIH1cblxufTtcblxuLm1lc3NhZ2UtYm94IHtcbiAgICBoZWlnaHQgIDogYXV0bztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmb250LXNpemU6IC43NXJlbTtcbiAgXG4gICAgLnJlc3BvbnNlIHtcbiAgICAgICAgLmVyci1ubyB7IGNvbG9yOmdyZXk7IH1cbiAgICAgICAgLnJlcy5lcnItb2sgeyBjb2xvcjogYmx1ZTsgfVxuICAgICAgICAucmVxLmVyci1vayB7IGNvbG9yOmJsdWV2aW9sZXQ7IH1cbiAgICAgICAgLnN0YXR1cy5lcnItb2sgeyBjb2xvcjpncmVlbjsgfVxuICAgICAgICAuc3RhdHVzLmVyci1meCB7IGNvbG9yOnJlZDsgfSAgICAgICBcbiAgICB9IFxuICAgIFxuXG59O1xuXG5cblxuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuQGltcG9ydCBcImFwcC9pYnotbWl4aW5zXCI7XG5cbi8vIHBsYWNlIGhlcmUgeW91ciBzdWJtaXQgYnV0dG9ucyBjdXN0b21pemF0aW9uXG5hcHBsaS1idXR0b24ge1xuICAgIEBpbmNsdWRlIGliei1idXR0b24oZ3JleSwxcmVtKVxuICAgIGltZyB7XG4gICAgICAgIGhlaWdodDogM3JlbTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgLmRpc2FibGU+aSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246bm9uZTsgLy8gcmVhbGx5IG5vdCBuZWVkZWQgZm9yIHRoZSBUb3AgQmFyLCBqdXN0IGZvciBnZW5lcmFsIHRlY2huaXF1ZVxuICAgICAgY3Vyc29yOiBhdXRvO1xuICAgICAgY29sb3I6IGdyZXkgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5hcHBsaS1tZW51LXN0YXJ0IHsgICAgXG4gICAgLnN0YXJ0LXN0YXJ0LCAuc3RvcC1zdG9wIHtcbiAgICAgICAgaSB7Y29sb3I6IGdyZXk7fVxuICAgIH1cbn1cbiIsIi8qXG4gICAgU2FtcGxlIG9mIHN0eWxlIG92ZXJsb2FkIGZvciBhIHNwZWNpZmljIHdpZGdldFxuXG4gICAgTm90ZTogdGhpcyBTQ1NTIGlzIGluamVjdGVkIHdpdGggbWFpbiBIVE1MIHBhZ2UsIGl0IHNjb3BlIHNob3VsZCBiZSByZWR1Y2VcbiAgICB0byBhIHNwZWNpZmljIHdpZGdldCBvciBpdCB2YWx1ZSB3aWxsIGJlIHByb3BhZ2F0ZWQgYXQgYSBnbG9iYWwgbGV2ZWwuXG4qL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuLnVwbG9hZC1maWxlIHtcbiAgICBAaW5jbHVkZSBpYnotYnV0dG9uKGdyZXksMXJlbSlcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgaGVpZ2h0ICA6IDNyZW07XG4gICAgbWFyZ2luOiAwLjVyZW07XG5cbiAgICBpIHsgZm9udC1zaXplOiAycmVtfVxuICAgIFxuICAgIC5pYnotcmFuZ2Utc2xpZGVyIHtcbiAgICAgICAgaGVpZ2h0OiAxMCUgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZXkgIWltcG9ydGFudDtcbiAgICBcbiAgICAgICAgLnJhbmdlLXNsaWRlci1oYW5kbGUge1xuICAgICAgICAgICAgd2lkdGg6IDEwJSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAuMnJlbTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHB1cnBsZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLnJhbmdlLXNsaWRlci1hY3RpdmUtc2VnbWVudCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDgwJSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmVlbjtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5pbnB1dC10ZXh0IHtcbiAgXG4gICAgYWxlcnQge0BpbmNsdWRlIGliei1pbnB1dC1hbGVydChkYXJrYmx1ZSwgcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjYpKX07XG5cbiAgICBpbnB1dCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IC41cmVtICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgbGFiZWwge1xuICAgICAgICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIFxuICAgIC5yZXF1aXJlZCB7XG4gICAgICAgIGNvbG9yOiBibHVlO1xuICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgIGNvbG9yOiBsaWdodHNreWJsdWU7XG4gICAgfVxuICAgIC5yZXF1aXJlZC52YWxpZCB7XG4gICAgICAgIGNvbG9yOiBncmVlbjtcbiAgICB9XG4gICAgXG4gICAgLnJlcXVpcmVkLmludmFsaWQge1xuICAgICAgICBjb2xvcjogcGx1bTtcbiAgICB9ICBcblxuICAgIC5zdGF0dXMtdW50b3VjaCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjYpICFpbXBvcnRhbnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSBpbnNldCwgMCAwIDhweCByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNikgIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6ICM2OTY5NjkgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBpbnB1dDpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSg4MiwxNjgsMjM2LDAuOCkgO1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSkgaW5zZXQsIDAgMCA4cHggcmdiYSg4MiwxNjgsMjM2LDAuOCkgIWltcG9ydGFudDtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyIDAuMnMgbGluZWFyIDBzLCBib3gtc2hhZG93IDAuMnMgbGluZWFyIDBzO1xuICAgICAgICBjb2xvcjogZGFya3NsYXRlYmx1ZSAhaW1wb3J0YW50O1xuICAgICAgICBAZXh0ZW5kIHNoYWRvdy10cmFuc2l0aW9uO1xuICAgIH1cblxuICAgIC5zdGF0dXMtdmFsaWQge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTU0LCAyMDUsIDUwLCAwLjYpIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpIGluc2V0LCAwIDAgOHB4IHJnYmEoMTU0LCAyMDUsIDUwLCAwLjYpIWltcG9ydGFudDtcbiAgICAgICAgQGV4dGVuZCBzaGFkb3ctdHJhbnNpdGlvbjtcbiAgICB9XG5cbiAgICAuc3RhdHVzLWludmFsaWQge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTU0LCAxNywgNjksIDAuNik7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSBpbnNldCwgMCAwIDhweCByZ2JhKDE1NCwgMTcsIDY5LCAwLjYpIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6IHJnYigxNTQsIDE3LCA2OSk7XG4gICAgICAgIEBleHRlbmQgc2hhZG93LXRyYW5zaXRpb247XG4gICAgfVxuXG59XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuXG5saW5rLWJ1dHRvbiB7QGluY2x1ZGUgaWJ6LWJ1dHRvbigjMzM2NmZmLDFyZW0pfTtcblxuLy9wYWxlIGJsdWUgZm9yIHNlY29uZGF0eSBsaW5rXG5saW5rLWJ1dHRvbi5zZWNvbmRhcnkge0BpbmNsdWRlIGliei1idXR0b24oIzk5YjNmZiwxcmVtKX07XG5cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICogXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly93d3cuZ3JleXd5dmVybi5jb20vP3Bvc3Q9MzM3XG4gKi9cblxuQGltcG9ydCBcImFwcC9pYnotbWl4aW5zXCI7XG5cblxubGluay1idXR0b24ge0BpbmNsdWRlIGliei1idXR0b24oIzMzNjZmZiwxcmVtKX07XG5cbi8vIE1vZGFsIHNob3VsZCBiZSByZWxhdGl2ZSBhbmQgdGlwLW1vZGFsLXBvcHVwIGFic29sdXRlXG50aXAtbW9kYWwge1xuICAgIHBvc2l0aW9uOnJlbGF0aXZlO1xufVxuXG4udGlwLW1vZGFsLXBvcHVwIHtcbiAgICAvL3Zpc2liaWxpdHk6IGhpZGRlbjtcbiAgICB3aWR0aDogMjByZW07XG4gICAgcG9zaXRpb246YWJzb2x1dGU7XG4gICAgdG9wOjFlbTtcbiAgICBwYWRkaW5nOiAwLjJlbSAwLjZlbTtcbiAgICBib3JkZXI6MXB4IHNvbGlkICM5OTY2MzM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjojZTVmZmZmO1xuICAgIGNvbG9yOiMwMDA7XG4gICAgb3BhY2l0eTowO1xuICAgIHRyYW5zaXRpb246dmlzaWJpbGl0eSAuNXMgbGluZWFyIDFzLG9wYWNpdHkgMXMgbGluZWFyO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBpIHtcbiAgICAgICAgbWFyZ2luOiAwIC4zcmVtIDAgMDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgIH1cbn1cblxudG9rZW4tcmVmcmVzaCB7XG4gICAgQGluY2x1ZGUgaWJ6LWJ1dHRvbihncmV5LDFyZW0pXG4gICAgaSB7bWFyZ2luLWxlZnQ6IC41cmVtO31cbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG59XG5cbnRva2VuLXJlZnJlc2gub25saW5lIHtcbiAgICBjb2xvcjogIzAwNjZjYztcbiAgICBpIHtjb2xvcjogbGltZTt9ICAgIFxufVxuXG50b2tlbi1yZWZyZXNoLm9mZmxpbmUge1xuICAgIGNvbG9yOiAjZmYwMGZmO1xuICAgIGkge2NvbG9yOiByZWQ7fSAgICBcbn1cbiIsIi8qXG4gKiBpYnotRGF0ZXBpY2tlciBmb3IgRm91bmRhdGlvblxuICpcbiAqIEF1dGhvcjogRnVsdXAgQXIgRm9sbFxuICogRGF0ZSAgOiBNYXJjaC0yMDE1XG4gKiBPYmplY3Q6IFNBU1Mgc3R5bGVzaGVldCwgY3VzdG9taXplZCB0byBGb3VuZGF0aW9uXG4gKiBSZWZlcmVuY2VzOiBodHRwczovL2Nzcy10cmlja3MuY29tL3N0cmlwZXMtY3NzL1xuICpcbiAqL1xuQGltcG9ydCBcImFwcC9pYnotbWl4aW5zXCI7XG5cbi5yYW5nZS1zbGlkZXItaGFuZGxlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogLTAuMnJlbTtcbiAgd2lkdGg6IDJyZW07XG4gIGhlaWdodDogMS4zNzVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkIG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogIzAwOGNiYTtcbn1cblxuLnJhbmdlLXNsaWRlci5yYWRpdXMsIC5yYW5nZS1zbGlkZXItaGFuZGxlIHtcbiAgYmFja2dyb3VuZDogIzAwOGNiYTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLnJhbmdlLXNsaWRlci1hY3RpdmUtc2VnbWVudCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdG9wOiAwLjA3cmVtO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogMC44MHJlbTtcbiAgYmFja2dyb3VuZDogI2U1ZTVlNTtcbn1cblxuLmliei1yYW5nZS1zbGlkZXIge1xuICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxNTQsIDIwNSwgNTAsIDAuNikgIWltcG9ydGFudDtcbiAgIGhlaWdodDogMXJlbTtcbiAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgIFxuICAucmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDgyLCAxNjgsIDIwMCwgMC42KTtcbiAgfVxuICBcbiAgJi1kaXNwbGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDgyLCAxNjgsIDIwMCwgMC42KSAhaW1wb3J0YW50O1xuICAgIHdpZHRoIDogNHJlbSAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IC4yNXJlbTtcbiAgICB0ZXh0LWFsaWduOmNlbnRlclxuICAgfVxuXG4gICAmLXN0YXJ0LCYtc3RvcCB7XG4gICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICBwYWRkaW5nLXRvcDogMnB4O1xuICAgaGVpZ2h0OiA5NSU7XG4gICBiYWNrZ3JvdW5kOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KFxuICAgIDQ1ZGVnLFxuICAgICM2MDZkYmMsXG4gICAgIzYwNmRiYyAxMHB4LFxuICAgICM0NjUyOTggMTBweCxcbiAgICAjNDY1Mjk4IDIwcHhcbiAgKTt9XG5cbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy9hcHAvaWJ6LWdsb2JhbC5zY3NzIiwic3R5bGVzL2FwcC9faWJ6LW1peGlucy5zY3NzIiwicGFnZXMvRGFzaGJvYXJkL0Rhc2hib2FyZE1vZHVsZS5zY3NzIiwid2lkZ2V0cy9BY3Rpb25CdXR0b25zL0FjdGlvbkJ1dHRvbnMuc2NzcyIsIndpZGdldHMvTmF2aWdhdGlvbi9OYXZpZ2F0aW9uLnNjc3MiLCJ3aWRnZXRzL0Zvcm1JbnB1dC9Gb3JtSW5wdXQuc2NzcyIsIndpZGdldHMvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zLnNjc3MiLCJ3aWRnZXRzL1JhbmdlU2xpZGVycy9SYW5nZXNsaWRlci5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9CYSxjQUNULE1BQU8sTUNEUCxRQUFTLGFBQ1QsT0FBVyxJQUFNLE1BQUMsUUFDbEIsV0FBZSxJQUFJLElBQUksSUFBQyxLQUN4QixNRERvQixLQ0VwQixjQUFlLElBQ2YsV0FBWSxPQUNaLFFBQVMsRUFBQSxNQUNULE9BQU8sTUFDUCxXQUFZLFFBQ1gsZ0JBQ0csY0FBZSxNQUNmLFVBWnlCLEtBY3pCLG1CQUFFLFVBQVcsS0FFVixvQkFDTCxXQUFZLFFBQ1osT0FBVyxJQUFNLE1BQUMsUURaaEIsU0FDTixpQkFBa0IscUJBR1IsYUNwQlIsT0FBUSxJQUFBLE1BQUEsa0JBQ1IsY0FBZSxJQUlmLFVBQVcsY0FDWCxPQUFRLE1BQ1IsV0FBWSxxQkRnQkYsd0JBQ04sUUFBUyxNQUNULFVBQVcsT0FLSCxpQkFDWixNQUFPLEtBQ1AsY0FBZSxJQUdULFdBQ04sTUFBTyxnQkFHRixVQUNMLE1BQU87QUUxQkUsY0FDVCxRQUFTLE1BQ1QsTUFBTyxNQUNQLE9BQVEsTUFBQSxLQUFBLEVBQUEsRUFHRCxZQUNQLE9BQVUsT0FFSyw0QkFDYixNQUFPLEtBQ1AsTUFBTyxLQUdPLDJCQUNaLFFBQVMsTUFDVCxPQUFRLE1BQUEsTUFHUCxrQkFDRCxNQXRCSyxJQXVCTCxPQUFXLElBQU0sTUFBQyxLQUVk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LGlCQUFrQixvQkFOTCwwQkFVYixpQkFBc0IsOEJBQ3RCLE1BQVEsZUFDUixRQUFTLE9BQ1QsV0FBVyxPQWJiLHdCQUFlLHVCQWlCZCxRQUFTLGFBQ1QsU0FBVSxTQUNWLFlBQWEsSUFDYixPQUFRLElBQ1IsV0FBWSIsImZpbGUiOiJBRkJjbGllbnQuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG5cblRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG5pdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxudGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbihhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cblRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG5hbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG5zdWJtaXQtYnV0dG9uIHtcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgQGluY2x1ZGUgaWJ6LWJ1dHRvbihncmV5KTtcbn1cblxuemYtbW9kYWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE4MCwxODAsMTgwLC41KTtcbn1cblxuLmJveC1jb250ZW50IHtcbiAgICAgQGluY2x1ZGUgaWJ6LWJveC1jb250ZW50O1xuXG4gICAgLmJveC10aXRsZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBmb250LXNpemU6IDEuM3JlbTtcbiAgICB9XG59XG5cbi8vIENoYW5nZSBOb3RpZmljYXRpb25zIGRlZmF1bHQgc2l6ZVxuLnVpLW5vdGlmaWNhdGlvbiB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG4uaWJ6LXJpZ2h0IHtcbiAgICBmbG9hdDogcmlnaHQgIWltcG9ydGFudDtcbn1cblxuLmliei1sZWZ0IHtcbiAgICBmbG9hdDogbGVmdCAhaW1wb3J0YW50O1xufSIsIi8qXG4gICAgRXZlcnkgU0NTUyBmaWxlcyB3aWxsIGJlIGluamVjdGVkIGludG8gbWFpbiBIVE1MIHBhZ2VcbiovXG4lc2hhZG93LXRyYW5zaXRpb24ge1xuICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzIGxpbmVhciAwcywgYm94LXNoYWRvdyAwLjJzIGxpbmVhciAwcztcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG59XG5cbkBtaXhpbiBpYnotYm94LWNvbnRlbnQge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIGdhaW5zYm9ybyAhaW1wb3J0YW50O1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgbWluLXdpZHRoOiA5OCUgIWltcG9ydGFudDsgXG4gICAgbWFyZ2luOiAuNXJlbSAuNXJlbSAuNXJlbSAuNXJlbTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDIwMCwyMDUsMjAwLC4zKTtcbn1cblxuQG1peGluIGliei1idXR0b24gKCRjb2xvciwgJHNpemU6MnJlbSkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZW4oJGNvbG9yLDEwJSk7XG4gICAgYm94LXNoYWRvdzogMnB4IDJweCAxcHggYWRqdXN0LWh1ZSgkY29sb3IsMjBkZWcpO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBwYWRkaW5nOiAwcmVtIC41cmVtIDByZW0gLjVyZW07XG4gICAgbWFyZ2luOi41cmVtO1xuICAgIGJhY2tncm91bmQ6IGxpZ2h0ZW4oIzk0OTRiNywgMjAlKTtcbiAgICBpIHtcbiAgICAgICAgcGFkZGluZy1yaWdodDogMC4zcmVtO1xuICAgICAgICBmb250LXNpemU6ICRzaXplO1xuICAgIH1cbiAgICBzcGFuIHtmb250LXNpemU6IDFyZW19XG4gICAgXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCRjb2xvciwgNDUlKTtcbiAgICAgIGJvcmRlcjogMnB4IHNvbGlkIGRhcmtlbigkY29sb3IsMjAlKTtcbiAgICAgIFxuICAgIH1cbn1cblxuQG1peGluIGliei1pbnB1dC1hbGVydCAoJGNvbG9yLCAkYmFja2dyb3VuZCkge1xuICAgIHBvc2l0aW9uICA6Zml4ZWQ7XG4gICAgbWFyZ2luOiAtMi4ycmVtIDAgMCAxNXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGJvcmRlci1jb2xvcjogZGFya2VuKCRiYWNrZ3JvdW5kLDEwJSk7XG4gICAgY29sb3I6ICRjb2xvcjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IDAuMnJlbSAhaW1wb3J0YW50O1xufVxuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuQGltcG9ydCBcImFwcC9pYnotbWl4aW5zXCI7XG5cbiRDT0xPUl9TVUNDRVNTOiBncmVlbjtcbiRDT0xPUl9GQUlMOiByZWQ7XG5cbnRva2VuLXJlZnJlc2gge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBtYXJnaW46IC41cmVtIDFyZW0gMCAwO1xufVxuXG4uYnV0dG9uLWJveCB7XG4gICAgaGVpZ2h0ICA6IDQuNXJlbTtcbiAgICBcbiAgICAuc2Vzc2lvbi1idXR0b24ge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICB3aWR0aDogNXJlbTtcbiAgICB9O1xuICAgIFxuICAgIC5yZXNwb25zZSA+IHNwYW57XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IC4zcmVtIC41cmVtIC4zcmVtIC41cmVtOyAgICAgICAgXG4gICAgfSAgXG4gICAgXG4gICAgLmZhaWwgeyBcbiAgICAgICAgY29sb3I6JENPTE9SX0ZBSUw7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkQ09MT1JfRkFJTCwxMCUpO1xuICAgIH1cbiAgICAuc3VjY2VzcyB7IFxuICAgICAgICBjb2xvcjokQ09MT1JfU1VDQ0VTUzsgXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGRhcmtlbigkQ09MT1JfU1VDQ0VTUywxMCUpO1xuICAgIH1cblxufTtcblxuLm1lc3NhZ2UtYm94IHtcbiAgICBoZWlnaHQgIDogYXV0bztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmb250LXNpemU6IC43NXJlbTtcbiAgXG4gICAgLnJlc3BvbnNlIHtcbiAgICAgICAgLmVyci1ubyB7IGNvbG9yOmdyZXk7IH1cbiAgICAgICAgLnJlcy5lcnItb2sgeyBjb2xvcjogYmx1ZTsgfVxuICAgICAgICAucmVxLmVyci1vayB7IGNvbG9yOmJsdWV2aW9sZXQ7IH1cbiAgICAgICAgLnN0YXR1cy5lcnItb2sgeyBjb2xvcjpncmVlbjsgfVxuICAgICAgICAuc3RhdHVzLmVyci1meCB7IGNvbG9yOnJlZDsgfSAgICAgICBcbiAgICB9IFxuICAgIFxuXG59O1xuXG5cblxuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuQGltcG9ydCBcImFwcC9pYnotbWl4aW5zXCI7XG5cbi8vIHBsYWNlIGhlcmUgeW91ciBzdWJtaXQgYnV0dG9ucyBjdXN0b21pemF0aW9uXG5hcHBsaS1idXR0b24ge1xuICAgIEBpbmNsdWRlIGliei1idXR0b24oZ3JleSwxcmVtKVxuICAgIGltZyB7XG4gICAgICAgIGhlaWdodDogM3JlbTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgLmRpc2FibGU+aSB7XG4gICAgICB0ZXh0LWRlY29yYXRpb246bm9uZTsgLy8gcmVhbGx5IG5vdCBuZWVkZWQgZm9yIHRoZSBUb3AgQmFyLCBqdXN0IGZvciBnZW5lcmFsIHRlY2huaXF1ZVxuICAgICAgY3Vyc29yOiBhdXRvO1xuICAgICAgY29sb3I6IGdyZXkgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi5hcHBsaS1tZW51LXN0YXJ0IHsgICAgXG4gICAgLnN0YXJ0LXN0YXJ0LCAuc3RvcC1zdG9wIHtcbiAgICAgICAgaSB7Y29sb3I6IGdyZXk7fVxuICAgIH1cbn1cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG5cbmxpbmstYnV0dG9uIHtAaW5jbHVkZSBpYnotYnV0dG9uKCMzMzY2ZmYsMXJlbSl9O1xuXG4vL3BhbGUgYmx1ZSBmb3Igc2Vjb25kYXR5IGxpbmtcbmxpbmstYnV0dG9uLnNlY29uZGFyeSB7QGluY2x1ZGUgaWJ6LWJ1dHRvbigjOTliM2ZmLDFyZW0pfTtcblxuIiwiLypcbiAgICBTYW1wbGUgb2Ygc3R5bGUgb3ZlcmxvYWQgZm9yIGEgc3BlY2lmaWMgd2lkZ2V0XG5cbiAgICBOb3RlOiB0aGlzIFNDU1MgaXMgaW5qZWN0ZWQgd2l0aCBtYWluIEhUTUwgcGFnZSwgaXQgc2NvcGUgc2hvdWxkIGJlIHJlZHVjZVxuICAgIHRvIGEgc3BlY2lmaWMgd2lkZ2V0IG9yIGl0IHZhbHVlIHdpbGwgYmUgcHJvcGFnYXRlZCBhdCBhIGdsb2JhbCBsZXZlbC5cbiovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG4udXBsb2FkLWZpbGUge1xuICAgIEBpbmNsdWRlIGliei1idXR0b24oZ3JleSwxcmVtKVxuICAgIGZsb2F0OiByaWdodDtcbiAgICBoZWlnaHQgIDogM3JlbTtcbiAgICBtYXJnaW46IDAuNXJlbTtcblxuICAgIGkgeyBmb250LXNpemU6IDJyZW19XG4gICAgXG4gICAgLmliei1yYW5nZS1zbGlkZXIge1xuICAgICAgICBoZWlnaHQ6IDEwJSAhaW1wb3J0YW50O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JleSAhaW1wb3J0YW50O1xuICAgIFxuICAgICAgICAucmFuZ2Utc2xpZGVyLWhhbmRsZSB7XG4gICAgICAgICAgICB3aWR0aDogMTAlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IC4ycmVtO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcHVycGxlICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAucmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50IHtcbiAgICAgICAgICAgIGhlaWdodDogODAlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZWVuO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmlucHV0LXRleHQge1xuICBcbiAgICBhbGVydCB7QGluY2x1ZGUgaWJ6LWlucHV0LWFsZXJ0KGRhcmtibHVlLCByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNikpfTtcblxuICAgIGlucHV0IHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogLjVyZW0gIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBsYWJlbCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcbiAgICB9XG4gICAgXG4gICAgLnJlcXVpcmVkIHtcbiAgICAgICAgY29sb3I6IGJsdWU7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgY29sb3I6IGxpZ2h0c2t5Ymx1ZTtcbiAgICB9XG4gICAgLnJlcXVpcmVkLnZhbGlkIHtcbiAgICAgICAgY29sb3I6IGdyZWVuO1xuICAgIH1cbiAgICBcbiAgICAucmVxdWlyZWQuaW52YWxpZCB7XG4gICAgICAgIGNvbG9yOiBwbHVtO1xuICAgIH0gIFxuXG4gICAgLnN0YXR1cy11bnRvdWNoIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNikgIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpIGluc2V0LCAwIDAgOHB4IHJnYmEoMjAwLCAyMDAsIDIwMCwgMC42KSAhaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogIzY5Njk2OSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGlucHV0OmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDgyLDE2OCwyMzYsMC44KSA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSBpbnNldCwgMCAwIDhweCByZ2JhKDgyLDE2OCwyMzYsMC44KSAhaW1wb3J0YW50O1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBsaW5lYXIgMHMsIGJveC1zaGFkb3cgMC4ycyBsaW5lYXIgMHM7XG4gICAgICAgIGNvbG9yOiBkYXJrc2xhdGVibHVlICFpbXBvcnRhbnQ7XG4gICAgICAgIEBleHRlbmQgc2hhZG93LXRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgLnN0YXR1cy12YWxpZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNTQsIDIwNSwgNTAsIDAuNikhaW1wb3J0YW50O1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSkgaW5zZXQsIDAgMCA4cHggcmdiYSgxNTQsIDIwNSwgNTAsIDAuNikhaW1wb3J0YW50O1xuICAgICAgICBAZXh0ZW5kIHNoYWRvdy10cmFuc2l0aW9uO1xuICAgIH1cblxuICAgIC5zdGF0dXMtaW52YWxpZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNTQsIDE3LCA2OSwgMC42KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpIGluc2V0LCAwIDAgOHB4IHJnYmEoMTU0LCAxNywgNjksIDAuNikhaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogcmdiKDE1NCwgMTcsIDY5KTtcbiAgICAgICAgQGV4dGVuZCBzaGFkb3ctdHJhbnNpdGlvbjtcbiAgICB9XG5cbn1cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICogXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly93d3cuZ3JleXd5dmVybi5jb20vP3Bvc3Q9MzM3XG4gKi9cblxuQGltcG9ydCBcImFwcC9pYnotbWl4aW5zXCI7XG5cblxubGluay1idXR0b24ge0BpbmNsdWRlIGliei1idXR0b24oIzMzNjZmZiwxcmVtKX07XG5cbi8vIE1vZGFsIHNob3VsZCBiZSByZWxhdGl2ZSBhbmQgdGlwLW1vZGFsLXBvcHVwIGFic29sdXRlXG50aXAtbW9kYWwge1xuICAgIHBvc2l0aW9uOnJlbGF0aXZlO1xufVxuXG4udGlwLW1vZGFsLXBvcHVwIHtcbiAgICAvL3Zpc2liaWxpdHk6IGhpZGRlbjtcbiAgICB3aWR0aDogMjByZW07XG4gICAgcG9zaXRpb246YWJzb2x1dGU7XG4gICAgdG9wOjFlbTtcbiAgICBwYWRkaW5nOiAwLjJlbSAwLjZlbTtcbiAgICBib3JkZXI6MXB4IHNvbGlkICM5OTY2MzM7XG4gICAgYmFja2dyb3VuZC1jb2xvcjojZTVmZmZmO1xuICAgIGNvbG9yOiMwMDA7XG4gICAgb3BhY2l0eTowO1xuICAgIHRyYW5zaXRpb246dmlzaWJpbGl0eSAuNXMgbGluZWFyIDFzLG9wYWNpdHkgMXMgbGluZWFyO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBpIHtcbiAgICAgICAgbWFyZ2luOiAwIC4zcmVtIDAgMDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgIH1cbn1cblxudG9rZW4tcmVmcmVzaCB7XG4gICAgQGluY2x1ZGUgaWJ6LWJ1dHRvbihncmV5LDFyZW0pXG4gICAgaSB7bWFyZ2luLWxlZnQ6IC41cmVtO31cbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG59XG5cbnRva2VuLXJlZnJlc2gub25saW5lIHtcbiAgICBjb2xvcjogIzAwNjZjYztcbiAgICBpIHtjb2xvcjogbGltZTt9ICAgIFxufVxuXG50b2tlbi1yZWZyZXNoLm9mZmxpbmUge1xuICAgIGNvbG9yOiAjZmYwMGZmO1xuICAgIGkge2NvbG9yOiByZWQ7fSAgICBcbn1cbiIsIi8qXG4gKiBpYnotRGF0ZXBpY2tlciBmb3IgRm91bmRhdGlvblxuICpcbiAqIEF1dGhvcjogRnVsdXAgQXIgRm9sbFxuICogRGF0ZSAgOiBNYXJjaC0yMDE1XG4gKiBPYmplY3Q6IFNBU1Mgc3R5bGVzaGVldCwgY3VzdG9taXplZCB0byBGb3VuZGF0aW9uXG4gKiBSZWZlcmVuY2VzOiBodHRwczovL2Nzcy10cmlja3MuY29tL3N0cmlwZXMtY3NzL1xuICpcbiAqL1xuQGltcG9ydCBcImFwcC9pYnotbWl4aW5zXCI7XG5cbi5yYW5nZS1zbGlkZXItaGFuZGxlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDE7XG4gIHRvcDogLTAuMnJlbTtcbiAgd2lkdGg6IDJyZW07XG4gIGhlaWdodDogMS4zNzVyZW07XG4gIGJvcmRlcjogMXB4IHNvbGlkIG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYmFja2dyb3VuZDogIzAwOGNiYTtcbn1cblxuLnJhbmdlLXNsaWRlci5yYWRpdXMsIC5yYW5nZS1zbGlkZXItaGFuZGxlIHtcbiAgYmFja2dyb3VuZDogIzAwOGNiYTtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbn1cblxuLnJhbmdlLXNsaWRlci1hY3RpdmUtc2VnbWVudCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgdG9wOiAwLjA3cmVtO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGhlaWdodDogMC44MHJlbTtcbiAgYmFja2dyb3VuZDogI2U1ZTVlNTtcbn1cblxuLmliei1yYW5nZS1zbGlkZXIge1xuICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxNTQsIDIwNSwgNTAsIDAuNikgIWltcG9ydGFudDtcbiAgIGhlaWdodDogMXJlbTtcbiAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgIFxuICAucmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDgyLCAxNjgsIDIwMCwgMC42KTtcbiAgfVxuICBcbiAgJi1kaXNwbGF5IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDgyLCAxNjgsIDIwMCwgMC42KSAhaW1wb3J0YW50O1xuICAgIHdpZHRoIDogNHJlbSAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmc6IC4yNXJlbTtcbiAgICB0ZXh0LWFsaWduOmNlbnRlclxuICAgfVxuXG4gICAmLXN0YXJ0LCYtc3RvcCB7XG4gICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICBwYWRkaW5nLXRvcDogMnB4O1xuICAgaGVpZ2h0OiA5NSU7XG4gICBiYWNrZ3JvdW5kOiByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KFxuICAgIDQ1ZGVnLFxuICAgICM2MDZkYmMsXG4gICAgIzYwNmRiYyAxMHB4LFxuICAgICM0NjUyOTggMTBweCxcbiAgICAjNDY1Mjk4IDIwcHhcbiAgKTt9XG5cbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== */ diff --git a/afm-client/dist.prod/opa/AFBclient.min.js b/afm-client/dist.prod/opa/AFBclient.min.js index 3de8576..8622c39 100644 --- a/afm-client/dist.prod/opa/AFBclient.min.js +++ b/afm-client/dist.prod/opa/AFBclient.min.js @@ -1,2 +1,2 @@ -!function(){"use strict";function e(e){var t=[],a=[];this.getId=function(){return e.sliderid},this.getCbHandle=function(){return e.cbhandle},this.getView=function(n){return n||(n=0),e.value[n]===t[n]?a[n]:(t[n]=e.value[n],e.formatter?a[n]=e.formatter(e.value[n],e.ctrlhandle):a[n]=e.value[n],a[n])},this.updateClass=function(t,a){e.updateClass(t,a)},this.forceRefresh=function(t){e.forceRefresh(t)},this.getValue=function(t){return t||(t=0),e.value[t]},this.getRelative=function(t){return t||(t=0),e.relative[t]},this.setValue=function(t,a){a||(a=0),e.setValue(t,a)},this.setDisable=function(t){e.setDisable(t)}}var t=angular.module("RangeSlider",[]);t.directive("rangeSlider",["$log","$document","$timeout",function(t,a,n){function i(t,i,s,l){t.initWidget=function(e){e.byStep&&(t.byStep=parseInt(e.byStep)),e.notMore&&(t.notMore=parseInt(e.notMore)),e.notLess&&(t.notLess=parseInt(e.notLess)),e.id&&(t.sliderid=e.id),void 0!==e.value&&(t.value=e.value,t.forceRefresh(50))},t.forceRefresh=function(e){var a=t.value;t.value=[void 0,void 0],n(function(){t.setValue(a[0],0),t.dual&&t.setValue(a[1],1)},e)},t.updateClass=function(e,t){t?i.addClass(e):i.removeClass(e)},t.setDisable=function(e){e?(i.addClass("disable"),t.handles[0].css("visibility","hidden"),t.dual&&t.handles[1].css("visibility","hidden")):(i.removeClass("disable"),t.handles[0].css("visibility","visible"),t.dual&&t.handles[1].css("visibility","visible"))},t.normalize=function(e){var a,n=t.notMore-t.notLess,i=e*n;if(t.byStep>0){var s=(i-i%t.byStep)/t.byStep,l=i%t.byStep,o=l>=.5*t.byStep?t.byStep:0;return a=s*t.byStep+o+t.notLess}if(t.byStep<0){var r=Math.pow(10,-1*t.byStep);return a=t.notLess+parseInt(i*r)/r}return i},t.getValue=function(e,a){t.vertical?t.relative[a]=(e-t.bounds.handles[a].getBoundingClientRect().height)/(t.bounds.bar.getBoundingClientRect().height-t.bounds.handles[a].getBoundingClientRect().height):t.relative[a]=e/(t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[a].getBoundingClientRect().width);var n=t.normalize(t.relative[a]);n!==t.value[a]&&(n<t.startValue&&(n=t.startValue),n>t.stopValue&&(n=t.stopValue),t.formatter?t.viewValue=t.formatter(n,t.ctrlhandle):t.viewValue=n,t.displays[a]&&t.displays[a].html(t.viewValue),t.value[a]=n,l&&l.$setViewValue(t.viewValue),t.$apply(),n>t.startValue&&n<t.stopValue&&t.translate(e,a))},t.setStart=function(e){var a;e>t.value[0]&&(t.dual?t.setValue(e,1):t.setValue(e,0)),t.vertical?(a=t.bounds.bar.getBoundingClientRect().height*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("height",a+"px")):(a=t.bounds.bar.getBoundingClientRect().width*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("width",a+"px")),t.startValue=e},t.setStop=function(e){var a;e<t.value[0]&&(t.dual?t.setValue(e,1):t.setValue(e,0)),t.vertical?(a=t.bounds.bar.getBoundingClientRect().height*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("height",a+"px")):(a=t.bounds.bar.getBoundingClientRect().width*(e-t.notLess)/(t.notMore-t.notLess),t.stop.css({right:0,width:t.bounds.bar.getBoundingClientRect().width-a+"px"})),t.stopValue=e},t.translate=function(e,a){var n;if(t.vertical){var i=t.bounds.bar.getBoundingClientRect().height-e;if(t.handles[a].css({"-webkit-transform":"translateY("+i+"px)","-moz-transform":"translateY("+i+"px)","-ms-transform":"translateY("+i+"px)","-o-transform":"translateY("+i+"px)",transform:"translateY("+i+"px)"}),t.dual){if(t.relative[1]&&t.relative[0]){var s=(t.relative[1]-t.relative[0])*t.bounds.bar.getBoundingClientRect().height;n=t.relative[0]*t.bounds.bar.getBoundingClientRect().height,t.slider.css({bottom:n+"px",height:s+"px"})}}else t.slider.css("height",e+"px")}else if(t.handles[a].css({"-webkit-transform":"translateX("+e+"px)","-moz-transform":"translateX("+e+"px)","-ms-transform":"translateX("+e+"px)","-o-transform":"translateX("+e+"px)",transform:"translateX("+e+"px)"}),t.dual){if(t.relative[1]&&t.relative[0]){var l=(t.relative[1]-t.relative[0])*t.bounds.bar.getBoundingClientRect().width;n=t.relative[0]*t.bounds.bar.getBoundingClientRect().width,t.slider.css({left:n+"px",width:l+"px"})}}else t.slider.css("width",e+"px")},t.setValue=function(e,a){var n;e!==t.value[a]&&(void 0===e&&(e=0),e>t.notMore&&(e=t.notMore),e<t.notLess&&(e=t.notLess),t.vertical?(t.relative[a]=(e-t.notLess)/(t.notMore-t.notLess),0===a&&(n=t.relative[a]*t.bounds.bar.getBoundingClientRect().height+t.bounds.handles[a].getBoundingClientRect().height/2),1===a&&(n=t.relative[a]*t.bounds.bar.getBoundingClientRect().height)):(t.relative[a]=(e-t.notLess)/(t.notMore-t.notLess),n=t.relative[a]*(t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[a].getBoundingClientRect().width)),t.translate(n,a),t.value[a]=e,t.formatter?t.viewValue=t.formatter(e,void 0):t.viewValue=e,l&&l.$setViewValue(t.viewValue),t.displays[a]&&t.displays[a].html(t.viewValue))},t.keydown=function(e){switch(e.keyCode){case 39:case 38:t.byStep>0&&t.$apply(t.setValue(t.value[t.actif]+t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]+1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 37:case 40:t.byStep>0&&t.$apply(t.setValue(t.value[t.actif]-t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]-1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 27:t.handles[t.actif][0].blur()}},t.moveHandle=function(e,a,n){var i;t.vertical?(i=t.bounds.bar.getBoundingClientRect().bottom-n,i>t.bounds.bar.getBoundingClientRect().height&&(i=t.bounds.bar.getBoundingClientRect().height),i<t.bounds.handles[e].getBoundingClientRect().height&&(i=t.bounds.handles[e].getBoundingClientRect().height)):(i=a-t.bounds.bar.getBoundingClientRect().left,0>i&&(i=0),a+t.bounds.handles[e].getBoundingClientRect().width>t.bounds.bar.getBoundingClientRect().right&&(i=t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[e].getBoundingClientRect().width)),t.getValue(i,e),t.dual&&t.value[0]>t.value[1]&&(0===e?t.setValue(t.value[0],1):t.setValue(t.value[1],0))},t.focusCB=function(e){e?a.on("keydown",t.keydown):a.unbind("keydown",t.keydown)},t.touchBarCB=function(e){var a,n=0,i=e.changedTouches,s=t.value[n];if(e.preventDefault(),t.dual){a=t.vertical?(i[0].pageY-t.bounds.bar.getBoundingClientRect().bottom)/t.bounds.bar.getBoundingClientRect().height:(i[0].pageX-t.bounds.bar.getBoundingClientRect().left)/t.bounds.bar.getBoundingClientRect().width;var l=Math.abs(a-t.relative[0]),o=Math.abs(a-t.relative[1]);l>o&&(n=1)}t.moveHandle(n,i[0].pageX,i[0].pageY),t.callback&&s!==t.value[n]&&t.callback(t.value[n],t.ctrlhandle)},t.touchHandleCB=function(e,n){function s(e){e.preventDefault();for(var a=e.changedTouches,i=0;i<a.length;i++)t.moveHandle(n,a[i].pageX,a[i].pageY)}function l(e){a.unbind("touchmove",s),a.unbind("touchend",l),i.on("touchstart",t.touchBarCB),t.callback&&o!==t.value[n]&&t.callback(t.value[n],t.ctrlhandle)}var o=t.value[n];e.preventDefault(),a.on("touchmove",s),a.on("touchend",l),i.unbind("touchstart",t.touchBarCB)},t.handleCB=function(e,n){function i(e){t.moveHandle(n,e.clientX,e.clientY)}function l(){a.unbind("mousemove",i),a.unbind("mouseup",l),t.callback&&o!==t.value[n]&&t.callback(t.value[n],t.ctrlhandle)}if(!s.automatic){var o=t.value[n];e.preventDefault(),a.on("mousemove",i),a.on("mouseup",l),t.handles[n][0].focus(),t.actif=n}},t.find=function(e,t){var a;a=t?t[0].querySelector(e):i[0].querySelector(e);var n=angular.element(a);return n},t.initialSettings=function(e){var a;t.value=[],t.relative=[],null===t.precision&&(a=(""+t.byStep).match(/\.([\d]*)/),t.precision=a&&a[1]?a[1].length:0),i.on("touchstart",t.touchBarCB),t.handles[0].on("touchstart",function(e){t.touchHandleCB(e,0)}),t.dual&&(t.handles[1].addClass("range-slider-handle"),t.handles[1].on("touchstart",function(e){t.touchHandleCB(e,1)}),t.initvalues||t.setValue(e[1],1)),t.initvalues?t.initWidget(t.initvalues):t.setValue(e[0],0)},t.init=function(){if(t.sliderid=s.id||"slider-"+parseInt(1e3*Math.random()),t.startValue=-(1/0),t.stopValue=1/0,t.byStep=parseInt(s.byStep)||1,t.vertical=s.vertical||!1,t.dual=s.dualHandles||!1,t.trigger_input_change=!1,t.notMore=parseInt(s.notMore)||100,t.notLess=parseInt(s.notLess)||0,t.vertical&&i.addClass("vertical-range"),t.handles=[t.find(".handle-min"),t.find(".handle-max")],t.bar=i,t.slider=t.find(".range-slider-active-segment"),t.start=t.find(".ibz-range-slider-start"),t.stop=t.find(".ibz-range-slider-stop"),t.disable=s.disable||!1,t.ctrlhandle=new e(t),t.bounds={bar:i[0],handles:[t.handles[0][0],t.handles[1][0]]},"true"===s.disable&&t.setDisable(!0),s.displayTarget)switch(s.displayTarget){case!0:case"handle":t.displays=t.handles,t.handles[0].addClass("ibz-range-slider-display"),t.dual&&t.handles[1].addClass("ibz-range-slider-display");break;default:t.displays=[a.getElementById(s.displayTarget)]}else t.displays=[];if(s.initial){var n=s.initial.split(",");t.initial=[void 0!==n[0]?parseInt(n[0]):t.notLess,void 0!==n[1]?parseInt(n[1]):t.notMore]}else t.initial=[t.ngModel,t.ngModel];t.$watch("startAt",function(){t.value<t.startAt,t.startAt&&t.setStart(t.startAt)}),t.$watch("stopAt",function(){t.value>t.stopAt,t.stopAt&&t.setStop(t.stopAt)}),t.initialSettings(t.initial)},t.init(),t.$watch("inithook",function(){t.inithook&&t.inithook(t.ctrlhandle)}),t.$watch("initvalues",function(){t.initvalues&&t.initWidget(t.initvalues)}),t.$watch("ngModel",function(e){t.setValue(e,0)})}var s='<div class="ibz-range-slider range-slider" title="{{title}}"data-slider><span class="range-slider-handle handle-min" ng-mousedown="handleCB($event,0)" ng-focus="focusCB(true)" ng-blur="focusCB(false)" role="slider" tabindex="0"></span><span class="handle-max" ng-mousedown="handleCB($event,1)" ng-focus="focusCB(true)" ng-blur="focusCB(false)" role="slider" tabindex="0"></span><span class="range-slider-active-segment"></span><span class="ibz-range-slider-start" ></span> <span class="ibz-range-slider-stop"></span> <input id={{sliderid}} type="hidden"></div>';return{restrict:"E",scope:{startAt:"=",stopAt:"=",callback:"=",formatter:"=",inithook:"=",cbhandle:"=",initvalues:"=",ngModel:"="},require:"?ngModel",template:s,replace:!0,link:i}}])}(),function(){"use strict";var e='<div class="afb-monitor" ng-click="getping()"><span class="afb-refresh-token" >afb://{{hostname}}:{{httpdport}}</span><i class="{{icon}}"></i></div>';angular.module("TokenRefresh",["AppConfig","ModalNotification"]).directive("tokenRefresh",["$log","$window","$timeout","$location","Notification","AppConfig","AppCall",function(t,a,n,i,s,l,o){function r(e,r,u){e.logged=void 0,a.onbeforeunload=function(){o.get(e.plugin,"logout",{},function(){t.log("OPA exit")})},e.online=function(){r.addClass("online"),r.removeClass("offline"),e.logged=!0},e.offline=function(){r.addClass("offline"),r.removeClass("online"),e.logged=!1},e.onerror=function(){e.logged!==!1&&(s.warning({message:"AppFramework Binder Lost",delay:5e3}),e.offline()),e.status=0},e.onsuccess=function(t,a){return 200!==a||"success"!==t.request.status?(s.warning({message:"auto-connect :"+t.request.info,delay:1e4}),e.offline(),!1):(e.logged!==!0&&(s.success({message:"AppFramework Binder Connected",delay:3e3}),e.online(),e.callback&&e.callback(t)),e.status=1,!0)},e.getping=function(){o.get(e.plugin,"ping",{},function(t,a){return 200!==a||"success"!==t.request.status?(s.warning({message:t.request.info,delay:5e3}),void e.offline()):void n(e.getping,1e3*l.session.pingrate)},e.onerror)},e.refresh=function(){o.get(e.plugin,"refresh",{},function(t,a){e.onsuccess(t,a),n(e.refresh,250*l.session.timeout)},e.onerror)},e.loggin=function(){o.get(e.plugin,"connect",{token:l.session.initial},function(t,a){e.onsuccess(t,a)&&(n(e.getping,1e3*l.session.pingrate),n(e.refresh,250*l.session.timeout))},e.onerror)},e.plugin=u.plugin||"auth",e.icon=u.icon||"fi-lightbulb",e.hostname=i.host(),e.httpdport=i.port(),e.autolog=JSON.parse(u.autolog||!1),e.autolog&&e.loggin()}return{template:e,scope:{callback:"="},restrict:"E",link:r}}])}(),function(){"use strict";var e='<div class="tip-modal-popup"><i class="{{icon}}"></i><span>{{tip}}</span></span></div>';angular.module("ModalNotification",[]).directive("tipModal",["$timeout",function(t){function a(e,a,n){function i(){function a(){e.show&&e.modal.css({opacity:1,visibility:"visible"})}e.show=!0,e.timeout=t(a,e.delay)}function s(){e.show=!1,e.modal.css({opacity:0,visibility:"hidden"})}e.parent=a.parent(),e.modal=a.find("div"),e.icon=n.icon||"fi-lightbulb",e.parent.addClass("as-modal-tip"),e.parent.bind("click",s),e.parent.bind("focus",i),e.parent.bind("mouseover",i),e.parent.bind("mouseleave",s),e.parent.bind("blur",s),e.delay=n.delay||1e3}return{restrict:"E",template:e,link:a,scope:{tip:"="}}}])}(),function(){"use strict";var e='<span title="Goto: {{href}}" ng-click="clicked()"><i class="{{icon}}"></i><span>{{label}}</span></span>';angular.module("LinkButton",[]).directive("linkButton",["$location",function(t){function a(e,a,n){e.clicked=function(){n.query?t.path(n.href).search(n.query):t.path(n.href)},e.icon=n.icon||"fi-link",e.label=n.label||"Jump",e.href=n.href||"/home",a.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:a,scope:{}}}])}(),function(){"use strict";function e(e,t,a){var n=new XMLHttpRequest,i=new FormData;n.upload.onprogress=function(t){var a=Math.round(t.lengthComputable?100*t.loaded/t.total:0);e.slider&&e.slider.setValue(a)},n.onload=function(){e.divElem.addClass("success"),e.divElem.removeClass("error");var t={status:n.status,headers:n.getAllResponseHeaders()};e.callback(t)},n.onerror=function(){e.divElem.addClass("error"),e.divElem.removeClass("success")},n.onabort=function(){e.divElem.addClass("error"),e.divElem.removeClass("success");var t={status:n.status,headers:n.getAllResponseHeaders()};e.callback(t)},this.postfile=function(e){n.open("POST",e,!0),n.send(i)};for(var s=0;s<t.length;s++)if(this.file=t[s],this.basename=this.file.name.split("/").reverse()[0],isNaN(this.file.size)||this.file.size>1024*e.maxsize)setTimeout(a,100);else{var l=new FileReader;l.readAsArrayBuffer(this.file),l.onload=a,i.append(e.name,this.file,this.file.name)}}var t='<input type="file" name="{{name}}-input" onchange="angular.element(this).scope().UpLoadFile(this.files)" accept="{{mimetype}}" style="display:none"><div class="upload-file" ng-click="imgClicked()"><i class="{{icon}}"></i> <span>{{label}}</span><range-slider ng-show="!noslider" id="{{name}}-slider" automatic=true inithook="SliderInitCB"></range-slider></div>',a='<span class="modal-text">Upload Application <b>{{appname}}</b> ?</span><div><img ng-src="{{icon}}"><submit-button icon="fi-x" label="Cancel" clicked="abandon"></submit-button><submit-button icon="fi-like" label="Install" clicked="success"></submit-button> </div>',n='<span class="modal-text">Invalid Application <b>{{appname}}</b> ?</span><div><img ng-src="{{icon}}"><submit-button icon="fi-x" label="Close" clicked="abandon"></submit-button></div>';angular.module("UploadFiles",["AppConfig","ModalNotification","RangeSlider"]).directive("uploadAppli",["AppConfig","JQemu","Notification","ModalFactory","$timeout",function(i,s,l,o,r){function u(t,s,l){if(t.inputElem=s.find("input"),t.divElem=s.find("div"),t.imgClicked=function(){t.inputElem[0].click()},t.SliderInitCB=function(e){t.slider=e},t.UpLoadFile=function(s){var u,c,d,p=function(){u.postfile(l.posturl+"?token="+i.session.token),t.modal.deactivate(),r(function(){t.modal.destroy()},1e3)},f=function(){t.modal.deactivate(),r(function(){t.modal.destroy()},1e3)},g=function(e){if(e){var i=new JSZip(e.target.result),s=i.file("icon_128.png");s?(c=window.URL.createObjectURL(new Blob([s.asArrayBuffer()],{type:"image"})),d=a):(c=t.isnotvalid,d=n)}else u.file.size>1024*t.maxsize&&(c=t.istoobig,d=n),isNaN(u.file.size)&&(c=t.isnotvalid,d=n);var l={animationIn:"slideInFromTop",contentScope:{success:p,abandon:f,icon:c,appname:u.basename},template:d};t.modal=new o(l),t.modal.activate()};u=new e(t,s,g)},t.name=l.name||"appli",t.category=l.category||"appli",t.mimetype=l.accept||".wgt",t.maxsize=l.maxsize||1e5,t.regexp=new RegExp(l.accept+".*","i"),t.icon=l.icon||"fi-upload",t.label=l.label||"Upload",l.thumbnail?t.isnotvalid=i.paths[t.category]+l.isnotvalid:t.isnotvalid=i.paths[t.category]+"w3c-widget.png",l.istoobig?t.istoobig=i.paths[t.category]+l.istoobig:t.istoobig=i.paths[t.category]+"istoobig.png",t.noslider=l.noslider||!1,!l.posturl)throw new TypeError("file-upload %s posturl=/api/xxxx/xxxx required",t.attrs)}return{restrict:"E",template:t,link:u,scope:{callback:"="}}}])}(),function(){"use strict";var e='<tip-modal tip="tip"></tip-modal><label for="{{name}}-intext">{{label}} <i ng-show="required" ng-click="ToBeDefined" class="required {{status}} fi-checkbox" title="Free Value But Mandatory Argument" alt="?"> </i></label><input type="{{type}}" id="{{name}}-intext" placeholder="{{placeholder}}" class="status-{{status}}" ng-model="value" ng-blur="validate()" ng-focus="selected()" ng-model-options="{ updateOn: \'default blur\', debounce: {default: 500, blur: 0} }"><alert data-ng-show="!valid&&errmsg">{{errmsg}}</alert>',t=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;angular.module("InputText",["JQueryEmu"]).directive("inputText",["JQemu",function(a){function n(e,n,i){e.error=!1,e.valid=!1,e.status="untouch",e.input=n.find("input"),e.required=0,"required"in i&&(e.required=1,n.addClass("required")),e.selected=function(){e.error=!1,e.errmsg=!1,e.status="touch"},e.validate=function(){e.parent.removeClass("ng-pristine"),e.value?(e.error=!1,e.value=e.value.trim(),"nospace"in i&&(e.value=e.value.replace(/\s/g,"")),"lowercase"in i&&(e.value=e.value.toLowerCase()),"minlen"in i&&e.value.length<i.minlen&&(e.status="invalid",e.errmsg=e.name+": Mininum Lengh= "+i.minlen+" Characters",e.error=!0),"email"in i&&(t.test(e.value)||(e.status="invalid",e.errmsg="invalid email address",e.error=!0))):e.required&&(e.status="invalid",e.errmsg=e.name+": Required Attribute",e.error=!0),e.error?(e.required&&e.valid&&(e.valid=!1,e.l4acounter.validated>0&&e.l4acounter.validated--),e.callback(i.name,null,e.done)):(e.required&&!e.valid&&e.l4acounter.validated++,e.status="valid",e.valid=!0,e.callback(i.name,e.value,e.done))},e.done=function(t){for(var a in t)e[a]=t[a]},e.label=i.label,e.name=i.name,e.placeholder=i.placeholder,e.type=i.type||"text",e.tip=i.tip,e.parent=a.parent(n,"FORM"),"email"in i&&(i.lowercase=!0,i.nospace=!0,i.minlen=6),e.required&&(e.l4acounter=e.parent.data("l4acounter"),e.l4acounter?e.l4acounter.required++:(e.l4acounter={required:1,validated:0},e.parent.data("l4acounter",e.l4acounter))),e.$watch("value",function(){e.value&&e.validate()})}return{restrict:"E",template:e,link:n,scope:{callback:"=",value:"="}}}])}(),function(){"use strict";var e='<input-text class="password" tip="{{tip1}}" placeholder="{{place1}}"label="{{label1}}" callback="valid1" name="{{name}}-1" value="pass1" required minlen="{{minlen}}" type="password" ></input-text><input-text class="password" tip="tip2" placeholder="{{place2}}"label="{{label2}}" callback="valid2" name="{{name}}-2" value="pass2" required minlen="{{minlen}}" type="password" > </input-text>';angular.module("InputPassword",[]).directive("inputPassword",function(){function t(e,t,a){e.valid1=function(t,a){e.firstpwd=a},e.valid2=function(t,n,i){e.firstpwd!==n?i({valid:!1,status:"invalid",errmsg:"both password should match"}):e.callback(a.name,n)},e.done=function(t){for(var a in t)e[a]=t[a]},e.name=a.name,e.label1=a.label||"Password",e.label2=a.label||"Password Verification",e.place1=a.placeholder1||"User Password",e.tip1=a.tip||"Choose a Password",e.place2=a.placeholder1||"Password Verification",e.tip2=a.tip||"Confirme your Password",e.minlen=a.minlen||10,"required"in a&&(e.required="required")}return{restrict:"E",template:e,link:t,scope:{callback:"="}}})}(),function(){"use strict";var e='<div ng-click="clicked()"><i class="{{icon}}"></i><span>{{label}}</span></div>';angular.module("SubmitButton",[]).directive("submitButton",function(){function t(e,t,a){e.icon=a.icon||"fi-foot",e.label=a.label||"Next",t.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:t,scope:{clicked:"="}}})}(),function(){"use strict";var e='<div ng-click="clicked()"><img ng-src="{{icon}}"><span>{{label}}</span></div>',t='<b class="close-button" ng-click="close()">×</b><img ng-src="{{icon}}"><span class="modal-text">Application <b>{{label}}</b></span><ul class="vertical icon-left primary menu-bar appli-menu-start"><li class=start-{{runstatus}}><a ng-click=action("start")><i class="fi-check"> Start</i></a></li><li class=stop-{{runstatus}}><a ng-click=action("stop")><i class="fi-x"> Stop</i></a></li><li><a ng-click=action("info")><i class="fi-info"> Info</i></a></li><li class=start-{{runstatus}}><a ng-click=action("uninstall")><i class="fi-x"> Uninstall</i></a></li></ul>',a='<b class="close-button" ng-click="close()">×</b><img ng-src="{{icon}}"><span class="modal-text">Application <b>{{label}}</b></span><ul class="vertical icon-left appli-menu-info"><li><i class="fi-paperclip"> Name : {{detail.name}} </i></li><li><i class="fi-info"> Description {{detail.description}}</i></li><li><i class="fi-torso"> Author : {{detail.author}}</i></li></ul>';angular.module("AppliButton",[]).directive("appliButton",["AppConfig","AppCall","ModalFactory","Notification","$timeout","$window","$location","urlquery",function(n,i,s,l,o,r,u,c){function d(e,d,p){e.runstatus="stop",e.runmode=c.runmode||"auto",e.clicked=function(){var n=function(t,a){l.error({message:"Fail /api/afm-main"+t+"="+e.label+" RunID="+e.appID,delay:5e3}),d.addClass("fail"),d.removeClass("success"),e.callback(e.appID,t,a)},c=function(t,a){d.removeClass("fail"),e.runID=a.response.runid,e.callback(e.appID,t,a)},p=function(){e.modApp.deactivate(),o(function(){e.modApp.destroy()},1e3)},f=function(){e.modInfo.deactivate(),o(function(){e.modInfo.destroy()},1e3)},g=function(t){switch(t){case"start":if("stop"!==e.runstatus)return;i.get("afm-main","start",{id:e.appID,mode:e.runmode},function(a,i){return 200!==i||"afb-reply"!==a.jtype?void n("start",a):(e.runstatus="start",c(t,a),void(a.response.uri&&(e.winapp=r.open(a.response.uri.replace("%h",u.host())))))});break;case"stop":if("start"!==e.runstatus)return;i.get("afm-main","terminate",{runid:e.runID},function(a,i){return 200!==i||"afb-reply"!==a.jtype?void n("stop",a):(e.runstatus="stop",e.winapp&&(e.winapp.close(),e.winapp=!1),void c(t,a))});break;case"info":i.get("afm-main","detail",{id:e.appID},function(t,i){if(200!==i||"afb-reply"!==t.jtype)return void n("detail",t);var l={animationIn:"slideInFromTop",contentScope:{close:f,icon:e.icon,label:e.appID,detail:t.response},template:a};e.modInfo=new s(l),e.modInfo.activate()});break;case"uninstall":if("stop"!==e.runstatus)return;i.get("afm-main","uninstall",{id:e.appID},function(e,a){return 200!==a||"afb-reply"!==e.jtype?void n("uninstall",e):void c(t,e)})}p()},m={animationIn:"slideInFromTop",contentScope:{action:g,runstatus:e.runstatus,close:p,icon:e.icon,label:e.label},template:t};e.modApp=new s(m),e.modApp.activate()},p.handle&&e.store[p.handle].name?(e.icon=n.paths.icons+p.handle,e.label=e.store[p.handle].name,e.appID=p.handle):(e.icon=n.paths.icons+"w3c-ico.png",e.label=p.handle),d.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:d,scope:{callback:"=",store:"="}}}])}(),function(){"use strict";angular.module("DashboardModule",["SubmitButton","TokenRefresh","AppliButton"]).controller("DashboardController",["AppCall","Notification",function(e,t){var a=this;a.uuid="none",a.token="none",a.session="none",a.status="err-no",a.appliIDs=[],a.appliStore={},a.AppliCB=function(e,t,n){a.request=t,a.errcode=n.status,n.data&&(a.response=n.data),"uninstall"===t&&a.GetRunnables()},a.GetRunnables=function(){e.get("afm-main","runnables",{},function(e,n){if(a.request="/api/afm-main/runnable",a.response=e.response,a.errcode=e.request.status,"afb-reply"!==e.jtype)return void t.error({message:"Invalid Respond to /opa/afm-main/runnable response.data="+response.data,delay:5e3});if("success"!==e.request.status)return void t.error({message:"afm-main/runnable"+e.request.info,delay:5e3});for(var i=[],s=e.response.runnables,l=0;l<s.length;l++)i[l]=s[l].id,a.appliStore[s[l].id]=s[l];a.appliIDs=i})},a.FileUploaded=function(e){a.request="/api/afm-main/install",a.response=e.headers,a.errcode=e.status,a.GetRunnables()},a.AutoStart=function(){a.GetRunnables()}}])}(),function(){"use strict";angular.module("JQueryEmu",[]).factory("JQemu",function(){var e=function(e,t){for(var a=e,n=t.toUpperCase();a[0];){if(n===a[0].tagName)return a;a=a.parent()}},t=function(e,t,a){for(var n=a.toLowerCase(),i=t.toLowerCase()+"Name",s=e.children();s[0];){if(n===s[0][i])return s;s=s.next()}},a=function(e,t){for(var a=t.toLowerCase(),n=e.children();n[0];){if(n.hasClass(a))return n;n=n.next()}},n={FindInParent:e,FindByTag:t,FindByClass:a};return n})}();var foundationRoutes=[{name:"Dashboard",url:"/dashboard",controller:"DashboardController as ctrl",animationIn:"slideInRight",path:"pages/Dashboard/Dashboard.html"}];!function(){"use strict";angular.module("AppConfig",[]).factory("AppConfig",["urlquery",function(e){var t={paths:{image:"images/",icons:"/icons/",avatar:"images/avatars/",audio:"images/audio/",appli:"images/appli/"},session:{initial:e.token||"123456789",timeout:3600,pingrate:15,uuid:"",token:""}};return t}]).factory("AppCall",["$http","AppConfig","$log",function(e,t,a){var n={get:function(a,n,i,s,l){var o=function(e){l?l(e.data,e.status,e.config):s(e.data,e.status,e.config)},r=function(e){if(!e.data||!e.data.request)return void o(e);var a=e.data.request;a.token&&(t.session.token=a.token),a.uuid&&(t.session.uuid=a.uuid),a.timeout&&(t.session.timeout=a.timeout),s(e.data,e.status,e.config)};i.token||(i.token=t.session.token),i.reqid||(i.reqid=n);e.get("/api/"+a+"/"+n,{params:i}).then(r,o)}};return n}])}(),function(){"use strict";function e(){var e={};return location.search.substr(1).split("&").forEach(function(t){var a=t.split("=")[0],n=decodeURIComponent(t.split("=")[1]);a in e?e[a].push(n):e[a]=[n]}),e}function t(e,t,a){e.otherwise("/dashboard"),t.html5Mode(!0).hashPrefix("!")}function a(){FastClick.attach(document.body)}angular.module("AFBclient",["ui.router","ngAnimate","foundation","foundation.dynamicRouting","foundation.dynamicRouting.animations","ui-notification","AppConfig","JQueryEmu","DashboardModule","UploadFiles","LinkButton","TokenRefresh","RangeSlider","ModalNotification"]).value("urlquery",e()).config(t).run(a),t.$inject=["$urlRouterProvider","$locationProvider"],angular.module("foundation").run(["$templateCache",function(e){e.put("components/modal/modal.html",'<div\n class="modal-overlay"\n ng-click="hideOverlay()">\n <aside\n class="modal"\n ng-click="$event.stopPropagation();"\n ng-transclude>\n </aside>\n</div>\n')}])}(),function(){angular.module("AFBclient").run(["$templateCache",function(e){e.put("pages/Dashboard/Dashboard.html",'<h3><img class="logo" src="images/logo/triskel_iot_bzhx250.png" alt="IoT.bzh Logo" style="height:150px"> Application Framework Manager Simple Client</h3><div class="button-box box-content"><appli-button ng-repeat="appliID in ctrl.appliIDs" store="ctrl.appliStore" handle="{{appliID}}" callback="ctrl.AppliCB"></appli-button><upload-appli class="ibz-right" label="Upload" name="widget" icon="fi-upload" posturl="/api/afm-main/install" callback="ctrl.FileUploaded" title="Upload AGL App"></upload-appli></div><div class="message-box box-content vertical grid-frame"><div class="response"><span class="grid-content noscroll req {{ctrl.status}}">req= {{ctrl.request}}</span> <span class="grid-content noscroll res {{ctrl.status}}">res= {{ctrl.response}}</span> <span class="grid-content noscroll status {{ctrl.status}}">status= {{ctrl.errcode}}</span></div></div><token-refresh autolog="true" callback="ctrl.AutoStart"></token-refresh>')}])}(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndpZGdldHMvUmFuZ2VTbGlkZXJzL1JhbmdlU2xpZGVyTW9kLmpzIiwid2lkZ2V0cy9Ob3RpZmljYXRpb25zL1Rva2VuUmVmcmVzaFN2Yy5qcyIsIndpZGdldHMvTm90aWZpY2F0aW9ucy9Nb2RhbE5vdGlmaWNhdGlvbi5qcyIsIndpZGdldHMvTmF2aWdhdGlvbi9MaW5rQnV0dG9uLmpzIiwid2lkZ2V0cy9Gb3JtSW5wdXQvVXBsb2FkQXBwbGkuanMiLCJ3aWRnZXRzL0Zvcm1JbnB1dC9JbnB1dFRleHQuanMiLCJ3aWRnZXRzL0Zvcm1JbnB1dC9JbnB1dFBhc3N3b3JkLmpzIiwid2lkZ2V0cy9BY3Rpb25CdXR0b25zL1N1Ym1pdEJ1dHRvbi5qcyIsIndpZGdldHMvQWN0aW9uQnV0dG9ucy9BcHBsaUJ1dHRvbi5qcyIsInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmRNb2R1bGUuanMiLCJzZXJ2aWNlcy9KUXVlcnlFbXUuanMiLCJldGMvcm91dGVzLmpzIiwiZXRjL0FwcENvbmZpZy5qcyIsImFwcC5qcyIsInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuanMiXSwibmFtZXMiOlsiUmFuZ2VTbGlkZXJIYW5kbGUiLCJzY29wZSIsImludGVybmFscyIsImV4dGVybmFscyIsInRoaXMiLCJnZXRJZCIsInNsaWRlcmlkIiwiZ2V0Q2JIYW5kbGUiLCJjYmhhbmRsZSIsImdldFZpZXciLCJoYW5kbGUiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImN0cmxoYW5kbGUiLCJ1cGRhdGVDbGFzcyIsImNsYXNzZSIsInN0YXR1cyIsImZvcmNlUmVmcmVzaCIsInRpbWVyIiwiZ2V0VmFsdWUiLCJnZXRSZWxhdGl2ZSIsInJlbGF0aXZlIiwic2V0VmFsdWUiLCJzZXREaXNhYmxlIiwiZmxhZyIsIlJhbmdlU2xpZGVyIiwiYW5ndWxhciIsIm1vZHVsZSIsImRpcmVjdGl2ZSIsIiRsb2ciLCIkZG9jdW1lbnQiLCIkdGltZW91dCIsImxpbmsiLCJlbGVtZW50IiwiYXR0cnMiLCJtb2RlbCIsImluaXRXaWRnZXQiLCJpbml0dmFsdWVzIiwiYnlTdGVwIiwicGFyc2VJbnQiLCJub3RNb3JlIiwibm90TGVzcyIsImlkIiwidW5kZWZpbmVkIiwiZHVhbCIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJkaXNhYmxlZCIsImhhbmRsZXMiLCJjc3MiLCJub3JtYWxpemUiLCJyZXN1bHQiLCJyYW5nZSIsInBvaW50IiwibW9kIiwicmVtIiwicm91bmQiLCJwb3dlciIsIk1hdGgiLCJwb3ciLCJvZmZzZXQiLCJ2ZXJ0aWNhbCIsImJvdW5kcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsImJhciIsIndpZHRoIiwibmV3dmFsdWUiLCJzdGFydFZhbHVlIiwic3RvcFZhbHVlIiwidmlld1ZhbHVlIiwiZGlzcGxheXMiLCJodG1sIiwiJHNldFZpZXdWYWx1ZSIsIiRhcHBseSIsInRyYW5zbGF0ZSIsInNldFN0YXJ0Iiwic3RhcnQiLCJzZXRTdG9wIiwic3RvcCIsInJpZ2h0Iiwidm9mZnNldCIsIi13ZWJraXQtdHJhbnNmb3JtIiwiLW1vei10cmFuc2Zvcm0iLCItbXMtdHJhbnNmb3JtIiwiLW8tdHJhbnNmb3JtIiwidHJhbnNmb3JtIiwic2xpZGVyIiwiYm90dG9tIiwibGVmdCIsImtleWRvd24iLCJlIiwia2V5Q29kZSIsImFjdGlmIiwiY2FsbGJhY2siLCJibHVyIiwibW92ZUhhbmRsZSIsImNsaWVudFgiLCJjbGllbnRZIiwiZm9jdXNDQiIsImluc2lkZSIsIm9uIiwidW5iaW5kIiwidG91Y2hCYXJDQiIsImV2ZW50IiwidG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwib2xkdmFsdWUiLCJwcmV2ZW50RGVmYXVsdCIsInBhZ2VZIiwicGFnZVgiLCJkaXN0YW5jZTAiLCJhYnMiLCJkaXN0YW5jZTEiLCJ0b3VjaEhhbmRsZUNCIiwidG91Y2hldnQiLCJ0b3VjaG1vdmUiLCJpZHgiLCJsZW5ndGgiLCJ0b3VjaGVuZCIsImhhbmRsZUNCIiwiY2xpY2tldmVudCIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJhdXRvbWF0aWMiLCJmb2N1cyIsImZpbmQiLCJzZWxlY3QiLCJlbGVtIiwiZG9tZWxlbSIsInF1ZXJ5U2VsZWN0b3IiLCJhbmdlbGVtIiwiaW5pdGlhbFNldHRpbmdzIiwiaW5pdGlhbCIsImRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdCIsInByZWNpc2lvbiIsIm1hdGNoIiwiZXZ0IiwiaW5pdCIsInJhbmRvbSIsIkluZmluaXR5IiwiZHVhbEhhbmRsZXMiLCJ0cmlnZ2VyX2lucHV0X2NoYW5nZSIsImRpc2FibGUiLCJkaXNwbGF5VGFyZ2V0IiwiZ2V0RWxlbWVudEJ5SWQiLCJzcGxpdCIsIm5nTW9kZWwiLCIkd2F0Y2giLCJzdGFydEF0Iiwic3RvcEF0IiwiaW5pdGhvb2siLCJuZXdWYWx1ZSIsInRlbXBsYXRlIiwicmVzdHJpY3QiLCJyZXF1aXJlIiwicmVwbGFjZSIsIiR3aW5kb3ciLCIkbG9jYXRpb24iLCJOb3RpZmljYXRpb24iLCJBcHBDb25maWciLCJBcHBDYWxsIiwibXltZXRob2RzIiwibG9nZ2VkIiwib25iZWZvcmV1bmxvYWQiLCJnZXQiLCJwbHVnaW4iLCJsb2ciLCJvbmxpbmUiLCJvZmZsaW5lIiwib25lcnJvciIsIndhcm5pbmciLCJtZXNzYWdlIiwiZGVsYXkiLCJvbnN1Y2Nlc3MiLCJqcmVzcCIsImVycmNvZGUiLCJyZXF1ZXN0IiwiaW5mbyIsInN1Y2Nlc3MiLCJnZXRwaW5nIiwic2Vzc2lvbiIsInBpbmdyYXRlIiwicmVmcmVzaCIsInRpbWVvdXQiLCJsb2dnaW4iLCJ0b2tlbiIsImljb24iLCJob3N0bmFtZSIsImhvc3QiLCJodHRwZHBvcnQiLCJwb3J0IiwiYXV0b2xvZyIsIkpTT04iLCJwYXJzZSIsInRtcGwiLCJkaXNwbGF5IiwiYWN0aW9uIiwic2hvdyIsIm1vZGFsIiwib3BhY2l0eSIsInZpc2liaWxpdHkiLCJjbG9zZSIsInBhcmVudCIsImJpbmQiLCJ0aXAiLCJjbGlja2VkIiwicXVlcnkiLCJwYXRoIiwiaHJlZiIsInNlYXJjaCIsImxhYmVsIiwidG9Mb3dlckNhc2UiLCJMb2FkRmlsZVN2YyIsImZpbGVzIiwiZmlsZUNCIiwieG1sUmVxIiwiWE1MSHR0cFJlcXVlc3QiLCJ4Zm9ybSIsIkZvcm1EYXRhIiwidXBsb2FkIiwib25wcm9ncmVzcyIsInByb2dyZXNzIiwibGVuZ3RoQ29tcHV0YWJsZSIsImxvYWRlZCIsInRvdGFsIiwib25sb2FkIiwiZGl2RWxlbSIsInJlc3BvbnNlIiwiaGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsIm9uYWJvcnQiLCJwb3N0ZmlsZSIsInBvc3R1cmwiLCJvcGVuIiwic2VuZCIsImkiLCJmaWxlIiwiYmFzZW5hbWUiLCJuYW1lIiwicmV2ZXJzZSIsImlzTmFOIiwic2l6ZSIsIm1heHNpemUiLCJzZXRUaW1lb3V0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwiYXBwZW5kIiwidG1wbEFwcGxpIiwidG1wbE1vZGFsIiwidG1wbEVycm9yIiwiSlFlbXUiLCJNb2RhbEZhY3RvcnkiLCJpbnB1dEVsZW0iLCJpbWdDbGlja2VkIiwiY2xpY2siLCJTbGlkZXJJbml0Q0IiLCJVcExvYWRGaWxlIiwiYXBwaWNvbiIsImRlYWN0aXZhdGUiLCJkZXN0cm95IiwiYWJhbmRvbiIsInJlYWRlckNCIiwiemlwYXBwIiwiSlNaaXAiLCJ0YXJnZXQiLCJ0aHVtYm5haWwiLCJ3aW5kb3ciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJCbG9iIiwiYXNBcnJheUJ1ZmZlciIsInR5cGUiLCJpc25vdHZhbGlkIiwiaXN0b29iaWciLCJjb25maWciLCJhbmltYXRpb25JbiIsImNvbnRlbnRTY29wZSIsImFwcG5hbWUiLCJhY3RpdmF0ZSIsImNhdGVnb3J5IiwibWltZXR5cGUiLCJhY2NlcHQiLCJyZWdleHAiLCJSZWdFeHAiLCJwYXRocyIsIm5vc2xpZGVyIiwiVHlwZUVycm9yIiwiZW1haWxwYXRlcm4iLCJlcnJvciIsInZhbGlkIiwiaW5wdXQiLCJyZXF1aXJlZCIsInNlbGVjdGVkIiwiZXJybXNnIiwidmFsaWRhdGUiLCJ0cmltIiwibWlubGVuIiwidGVzdCIsImw0YWNvdW50ZXIiLCJ2YWxpZGF0ZWQiLCJkb25lIiwiZGF0YSIsInBsYWNlaG9sZGVyIiwibG93ZXJjYXNlIiwibm9zcGFjZSIsInZhbGlkMSIsImZpcnN0cHdkIiwidmFsaWQyIiwibGFiZWwxIiwibGFiZWwyIiwicGxhY2UxIiwicGxhY2Vob2xkZXIxIiwidGlwMSIsInBsYWNlMiIsInRpcDIiLCJ0bXBsRGV0YWlsIiwidXJscXVlcnkiLCJydW5zdGF0dXMiLCJydW5tb2RlIiwibm90aWZ5RXJyb3IiLCJhcHBJRCIsIm5vdGlmeVN1Y2Nlc3MiLCJydW5JRCIsInJ1bmlkIiwiY2xvc2VNb2RBcHAiLCJtb2RBcHAiLCJjbG9zZU1vZEluZm8iLCJtb2RJbmZvIiwiYWN0aW9uTW9kYWwiLCJtb2RlIiwianR5cGUiLCJ1cmkiLCJ3aW5hcHAiLCJkZXRhaWwiLCJzdG9yZSIsImljb25zIiwiY29udHJvbGxlciIsInV1aWQiLCJhcHBsaUlEcyIsImFwcGxpU3RvcmUiLCJBcHBsaUNCIiwiYXBwbGlJRCIsIkdldFJ1bm5hYmxlcyIsInJ1bm5hYmxlcyIsIkZpbGVVcGxvYWRlZCIsIkF1dG9TdGFydCIsImZhY3RvcnkiLCJGaW5kSW5QYXJlbnQiLCJzZWxlY3RvciIsInRvVXBwZXJDYXNlIiwidGFnTmFtZSIsIkZpbmRCeVRhZyIsInRhZyIsImNoaWxkcmVuIiwibmV4dCIsIkZpbmRCeUNsYXNzIiwiaGFzQ2xhc3MiLCJteU1ldGhvZHMiLCJmb3VuZGF0aW9uUm91dGVzIiwidXJsIiwibXlDb25maWciLCJpbWFnZSIsImF2YXRhciIsImF1ZGlvIiwiYXBwbGkiLCIkaHR0cCIsIm15Q2FsbHMiLCJjYnJlc3BvbnNlIiwiY2JlcnJvciIsInJlcWlkIiwicGFyYW1zIiwidGhlbiIsIlBhcnNlUXVlcnlTdHJpbmciLCJxZCIsImxvY2F0aW9uIiwic3Vic3RyIiwiZm9yRWFjaCIsIml0ZW0iLCJrIiwidiIsImRlY29kZVVSSUNvbXBvbmVudCIsInB1c2giLCIkdXJsUHJvdmlkZXIiLCIkbG9jYXRpb25Qcm92aWRlciIsIm90aGVyd2lzZSIsImh0bWw1TW9kZSIsImhhc2hQcmVmaXgiLCJydW4iLCJGYXN0Q2xpY2siLCJhdHRhY2giLCJkb2N1bWVudCIsImJvZHkiLCIkaW5qZWN0IiwiJHRlbXBsYXRlQ2FjaGUiLCJwdXQiXSwibWFwcGluZ3MiOiJDQWtEQSxXQUNBLFlBSUEsU0FBQUEsR0FBQUMsR0FDQSxHQUFBQyxNQUNBQyxJQUVBQyxNQUFBQyxNQUFBLFdBQ0EsTUFBQUosR0FBQUssVUFHQUYsS0FBQUcsWUFBQSxXQUNBLE1BQUFOLEdBQUFPLFVBR0FKLEtBQUFLLFFBQUEsU0FBQUMsR0FJQSxNQUhBQSxLQUFBQSxFQUFBLEdBR0FULEVBQUFVLE1BQUFELEtBQUFSLEVBQUFRLEdBQUFQLEVBQUFPLElBR0FSLEVBQUFRLEdBQUFULEVBQUFVLE1BQUFELEdBQ0FULEVBQUFXLFVBQUFULEVBQUFPLEdBQUFULEVBQUFXLFVBQUFYLEVBQUFVLE1BQUFELEdBQUFULEVBQUFZLFlBQ0FWLEVBQUFPLEdBQUFULEVBQUFVLE1BQUFELEdBRUFQLEVBQUFPLEtBR0FOLEtBQUFVLFlBQUEsU0FBQUMsRUFBQUMsR0FDQWYsRUFBQWEsWUFBQUMsRUFBQUMsSUFHQVosS0FBQWEsYUFBQSxTQUFBQyxHQUNBakIsRUFBQWdCLGFBQUFDLElBR0FkLEtBQUFlLFNBQUEsU0FBQVQsR0FFQSxNQURBQSxLQUFBQSxFQUFBLEdBQ0FULEVBQUFVLE1BQUFELElBR0FOLEtBQUFnQixZQUFBLFNBQUFWLEdBRUEsTUFEQUEsS0FBQUEsRUFBQSxHQUNBVCxFQUFBb0IsU0FBQVgsSUFHQU4sS0FBQWtCLFNBQUEsU0FBQVgsRUFBQUQsR0FDQUEsSUFBQUEsRUFBQSxHQUNBVCxFQUFBcUIsU0FBQVgsRUFBQUQsSUFHQU4sS0FBQW1CLFdBQUEsU0FBQUMsR0FDQXZCLEVBQUFzQixXQUFBQyxJQXBEQSxHQUFBQyxHQUFBQyxRQUFBQyxPQUFBLGlCQXdEQUYsR0FBQUcsVUFBQSxlQUFB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S0FDQSxHQUFBQyxLQU1BLE9BTEFDLFVBQUF0SyxPQUFBdUssT0FBQSxHQUFBdk8sTUFBQSxLQUFBd08sUUFBQSxTQUFBQyxHQUNBLEdBQUFDLEdBQUFELEVBQUF6TyxNQUFBLEtBQUEsR0FDQTJPLEVBQUFDLG1CQUFBSCxFQUFBek8sTUFBQSxLQUFBLEdBQ0EwTyxLQUFBTCxHQUFBQSxFQUFBSyxHQUFBRyxLQUFBRixHQUFBTixFQUFBSyxJQUFBQyxLQUVBTixFQWdDQSxRQUFBbkcsR0FBQTRHLEVBQUFDLEVBQUFqTyxHQUNBZ08sRUFBQUUsVUFBQSxjQUdBRCxFQUFBRSxXQUFBLEdBQUFDLFdBQUEsS0FJQSxRQUFBQyxLQUNBQyxVQUFBQyxPQUFBQyxTQUFBQyxNQXRDQS9XLFFBQUFDLE9BQUEsYUFDQSxZQUNBLFlBR0EsYUFDQSw0QkFDQSx1Q0FHQSxrQkFHQSxZQUNBLFlBQ0Esa0JBQ0EsY0FDQSxhQUNBLGVBQ0EsY0FDQSxzQkFFQWhCLE1BQUEsV0FBQTJXLEtBQ0FsRyxPQUFBQSxHQUNBaUgsSUFBQUEsR0FHQWpILEVBQUFzSCxTQUFBLHFCQUFBLHFCQWdCQWhYLFFBQUFDLE9BQUEsY0FBQTBXLEtBQUEsaUJBQUEsU0FBQU0sR0FDQUEsRUFBQUMsSUFBQSw4QkFDQSxxTEMxREEsV0FBQWxYLFFBQUFDLE9BQUEsYUFBQTBXLEtBQUEsaUJBQUEsU0FBQU0sR0FBQUEsRUFBQUMsSUFBQSxpQ0FDQSIsImZpbGUiOiJBRkJjbGllbnQubWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKiBcbiAqIHJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL21vdXNlb3ZlclxuICogXG4gKiB1c2FnZTogXG5Vc2FnZSAgPHJhbmdlLXNsaWRlcj5cbi0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgPHJhbmdlLXNsaWRlclxuICAgICAgaWQ9XCJteS1zbGlkZXItbmFtZVwiICAgICAgICAgICAgICAgICAgICAgLy8gb25seSB1c2UgYXMgYW4gYXJndW1lbnQgdG8gY2FsbGJhY2tcbiAgICAgIGNsYXNzPVwibXktY3VzdG9tLWNsYXNzXCIgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgY2xhc3MgaXMgaWJ6LXJhbmdlLXNsaWRlclxuICAgICAgcGxhY2Vob2xkZXI9XCJUcmFjayBEYXRlIFNlbGVjdGlvblwiICAgICAgLy8gcGxhY2UgaG9sZGVyIGZvciBkYXRlIHJlYWRvbmx5IGlucHV0IHpvbmVcblxuICAgICAgPCEtLSBGb3VuZGF0aW9uIGNsYXNzZXMgLS0+XG4gICAgICBjbGFzcz1cInJhZGl1c1wiICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBadXJiIGZvdW5kYXRpb24gZG9jIGZvciBmdXJ0aGVyIGluZm8uXG4gICAgICBjbGFzcz1cImliei1oYW5kbGUtZGlzcGxheVwiICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBoYW5kbGUgd2lkdGggdG8gaG9sZCBzbGlkZXIgY3VycmVudCB2YWx1ZVxuXG4gICAgICA8IS0tIEFuZ3VsYXIgU2NvcGUgVmFyaWFibGVzIC0tPlxuICAgICAgY2FsbGJhY2s9XCJteUNhbGxCYWNrXCIgICAgICAgICAgICAgICAgICAgIC8vICRzY29wZS5teUNhbGxCYWNrKHNsaWRlcmhhbmRsZSkgaXMgY2FsbGVkIHdoZW4gZXZlciBzbGlkZXIgaGFuZGxlIGJsdXJcbiAgICAgIGZvcm1hdHRlcj1cIlNsaWRlckZvcm1hdENCXCIgICAgICAgICAgICAgICAvLyAkc2NvcGUubXlGb3JtYXR0ZXIodmFsdWUsIHNsaWRlcmlkKSB3aGVuIGV4aXN0IGlzIGNhbGwgd2hlbiBldmVyIHNsaWRlciBoYW5kbGUgbW92ZXMuIFNob3VsZCByZXR1cm4gZXh0ZXJuYWwgZm9ybSBvZiBzbGlkZXIgdmFsdWUuXG4gICAgICBuZy1tb2RlbD1cInh4eHh4eFwiICAgICAgICAgICAgICAgICAgICAgICAgLy8geHh4IE11c3QgYmUgZGVmaW5lZCwgc2NyaXB0IHdpbGwgc3RvcmUgYSBuZXcgUmFuZ2VyT2JqZWN0IHdpdGhpbiBwcm92aWRlZCBuZy1tb2RlbCB2YXJpYWJsZS5cbiAgICAgIHN0YXJ0LWF0PVwiU2NvcGVWYXJcIiAgICAgICAgICAgICAgICAgICAgICAvLyBEeW5hbWljIGxpbWl0YXRpb24gd2hlbiBzbGlkZXIgaXMgY29uc3RyYWlucyBieSBhbiBleHRlcm5hbCBjb21wb25hbnQgW2V4OiBjaGVjayBpbi9vdXRdXG4gICAgICBzdG9wLWF0PVwiU2NvcGVWYXJcIiAgICAgICAgICAgICAgICAgICAgICAgLy8gSWRlbSBidXQgZm9yIGVuZC5cblxuICAgICAgPCEtLSBBbmd1bGFyIERpcmVjdGl2ZSBBdHRyaWJ1dGVzIC0tPlxuICAgICAgbm90LWxlc3M9XCJpbnRlZ2VyXCIgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVkIHN0YXJ0aW5nIHZhbHVlIGZvciBzbGlkZXIgW2RlZmF1bHQgMF1cbiAgICAgIG5vdC1tb3JlPVwiaW50ZWdlclwiICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZCBlbmQgdmFsdWUgZm9yIHNsaWRlcnMgW2RlZmF1bHQgMTAwXVxuICAgICAgYnktc3RlcD1cIistaW50ZWdlclwiICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGJ5LXN0ZXAgaXMgPjAgdGhlbiBzbGlkZXIgdXNlIGl0IGFzIHN0ZXAtdmFsdWUsIHdoZW4gbmVnYXRpdmUgdXNlIGl0IGZvciBkZWNpbWFsIHByZWNpc2lvblxuICAgICAgZGlzcGxheS10YXJnZXQ9XCJoYW5kbGVcIiAgICAgICAgICAgICAgICAgIC8vIGRpc3BsYXkgc2xpZGVyIGV4dGVybmFsIGZvcm1hdGVkIHZhbHVlIGluIHRoZSBoYW5kbGUgW3JlcXVpcmVyIGNhbHNzPVwiaWJ6LWhhbmRsZS1kaXNwbGF5XCJdXG4gICAgICBkdWFsLWhhbmRsZXM9J3RydWUnICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBhIHNlY29uZCBoYW5kbGUgdG8gc2xpZGVyIGZvciBtaW4vbWF4IHJhbmdlXG4gICAgICBpbml0aWFsPSd2YWx1ZXxbc3RhcnQvc3RvcF0nICAgICAgICAgICAgIC8vIHNsaWRlciBpbml0aWFsIHZhbHVlIFtkdWFsLWhhbmRsZXNdIG1heSBoYXZlIGluaXRpYWwgdmFsdWVzXG4gICAvPjwvcmFuZ2Utc2xpZGVyPlxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmFuZ2VTbGlkZXIgPSBhbmd1bGFyLm1vZHVsZSgnUmFuZ2VTbGlkZXInLFtdKTtcblxuZnVuY3Rpb24gUmFuZ2VTbGlkZXJIYW5kbGUgKHNjb3BlKSB7XG4gICAgdmFyIGludGVybmFscyA9IFtdO1xuICAgIHZhciBleHRlcm5hbHMgPSBbXTtcblxuICAgIHRoaXMuZ2V0SWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlLnNsaWRlcmlkO1xuICAgIH07XG5cbiAgICB0aGlzLmdldENiSGFuZGxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzY29wZS5jYmhhbmRsZTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRWaWV3PSBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIGlmICghaGFuZGxlKSBoYW5kbGUgPSAwO1xuXG4gICAgICAgIC8vIGlmIHZhbHVlIGRpZCBub3QgY2hhbmdlIHJldHVybiBjdXJyZW50IGV4dGVybmFsIHJlcHJlc2VudGF0aW9uXG4gICAgICAgIGlmIChzY29wZS52YWx1ZVtoYW5kbGVdID09PSBpbnRlcm5hbHNbaGFuZGxlXSkgcmV0dXJuIGV4dGVybmFsc1toYW5kbGVdO1xuXG4gICAgICAgIC8vIGJ1aWxkIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIGFuZCBzYXZlIGl0IGZvciBmdXJ0aGVyIHJlcXVlc3RzXG4gICAgICAgIGludGVybmFsc1toYW5kbGVdID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcbiAgICAgICAgaWYgKHNjb3BlLmZvcm1hdHRlcikgZXh0ZXJuYWxzW2hhbmRsZV0gPSBzY29wZS5mb3JtYXR0ZXIoc2NvcGUudmFsdWVbaGFuZGxlXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgIGVsc2UgIGV4dGVybmFsc1toYW5kbGVdID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcblxuICAgICAgICByZXR1cm4gZXh0ZXJuYWxzW2hhbmRsZV07XG4gICAgfTtcblxuICAgIHRoaXMudXBkYXRlQ2xhc3MgPSBmdW5jdGlvbiAoY2xhc3NlLCBzdGF0dXMpIHtcbiAgICAgICBzY29wZS51cGRhdGVDbGFzcyAoY2xhc3NlLCBzdGF0dXMpO1xuICAgIH07XG5cbiAgICB0aGlzLmZvcmNlUmVmcmVzaCA9IGZ1bmN0aW9uICh0aW1lcikge1xuICAgICAgIHNjb3BlLmZvcmNlUmVmcmVzaCh0aW1lcik7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0VmFsdWU9IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgaWYgKCFoYW5kbGUpIGhhbmRsZSA9IDA7XG4gICAgICAgIHJldHVybiBzY29wZS52YWx1ZVtoYW5kbGVdO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFJlbGF0aXZlPSBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIGlmICghaGFuZGxlKSBoYW5kbGUgPSAwO1xuICAgICAgICByZXR1cm4gc2NvcGUucmVsYXRpdmVbaGFuZGxlXTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXRWYWx1ZT0gZnVuY3Rpb24gKHZhbHVlLCBoYW5kbGUpIHtcbiAgICAgICAgaWYgKCFoYW5kbGUpIGhhbmRsZSA9IDA7XG4gICAgICAgIHNjb3BlLnNldFZhbHVlICh2YWx1ZSwgaGFuZGxlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zZXREaXNhYmxlPSBmdW5jdGlvbiAoZmxhZykge1xuICAgICAgICBzY29wZS5zZXREaXNhYmxlKGZsYWcpO1xuICAgIH07XG59XG5cblJhbmdlU2xpZGVyLmRpcmVjdGl2ZSgncmFuZ2VTbGlkZXInLCBbXCIkbG9nXCIsIFwiJGRvY3VtZW50XCIsIFwiJHRpbWVvdXRcIiwgZnVuY3Rpb24gKCRsb2csICRkb2N1bWVudCwgJHRpbWVvdXQpIHtcblxuICAgIHZhciB0ZW1wbGF0ZT0gJzxkaXYgY2xhc3M9XCJpYnotcmFuZ2Utc2xpZGVyIHJhbmdlLXNsaWRlclwiIHRpdGxlPVwie3t0aXRsZX19XCJkYXRhLXNsaWRlcj4nK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwicmFuZ2Utc2xpZGVyLWhhbmRsZSBoYW5kbGUtbWluXCIgbmctbW91c2Vkb3duPVwiaGFuZGxlQ0IoJGV2ZW50LDApXCIgbmctZm9jdXM9XCJmb2N1c0NCKHRydWUpXCIgbmctYmx1cj1cImZvY3VzQ0IoZmFsc2UpXCIgcm9sZT1cInNsaWRlclwiIHRhYmluZGV4PVwiMFwiPjwvc3Bhbj4nK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiaGFuZGxlLW1heFwiIG5nLW1vdXNlZG93bj1cImhhbmRsZUNCKCRldmVudCwxKVwiIG5nLWZvY3VzPVwiZm9jdXNDQih0cnVlKVwiIG5nLWJsdXI9XCJmb2N1c0NCKGZhbHNlKVwiIHJvbGU9XCJzbGlkZXJcIiB0YWJpbmRleD1cIjBcIj48L3NwYW4+JytcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInJhbmdlLXNsaWRlci1hY3RpdmUtc2VnbWVudFwiPjwvc3Bhbj4nK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiaWJ6LXJhbmdlLXNsaWRlci1zdGFydFwiID48L3NwYW4+ICcrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJpYnotcmFuZ2Utc2xpZGVyLXN0b3BcIj48L3NwYW4+ICcrXG4gICAgICAgICAgICAgICAgICAnPGlucHV0IGlkPXt7c2xpZGVyaWR9fSB0eXBlPVwiaGlkZGVuXCI+JytcbiAgICAgICAgICAgICAgICAgICc8L2Rpdj4nO1xuXG5cbiAgICBmdW5jdGlvbiBsaW5rIChzY29wZSwgZWxlbWVudCwgYXR0cnMsIG1vZGVsKSB7XG4gICAgICAgIC8vIGZ1bGwgaW5pdGlhbGlzYXRpb24gb2Ygc2xpZGVyIGZyb20gYSBzaW5nbGUgb2JqZWN0XG4gICAgICAgIHNjb3BlLmluaXRXaWRnZXQgPSBmdW5jdGlvbiAoaW5pdHZhbHVlcykge1xuXG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy5ieVN0ZXApICBzY29wZS5ieVN0ZXAgID0gcGFyc2VJbnQoaW5pdHZhbHVlcy5ieVN0ZXApO1xuICAgICAgICAgICAgaWYgKGluaXR2YWx1ZXMubm90TW9yZSkgc2NvcGUubm90TW9yZSA9IHBhcnNlSW50KGluaXR2YWx1ZXMubm90TW9yZSk7XG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy5ub3RMZXNzKSBzY29wZS5ub3RMZXNzID0gcGFyc2VJbnQoaW5pdHZhbHVlcy5ub3RMZXNzKTtcbiAgICAgICAgICAgIGlmIChpbml0dmFsdWVzLmlkKSAgICAgIHNjb3BlLnNsaWRlcmlkPSBpbml0dmFsdWVzLmlkO1xuXG4gICAgICAgICAgICAvLyBodWdlbHkgYnV0IGluIHNvbWUgY2FzZSBET00gaXMgbm90IGZpbmlzaCB3aGVuIHdlIHRyeSB0byBzZXQgdmFsdWVzICEhIVxuICAgICAgICAgICAgaWYgKGluaXR2YWx1ZXMudmFsdWUgIT09IHVuZGVmaW5lZCkgICB7XG4gICAgICAgICAgICAgICAgc2NvcGUudmFsdWUgPSBpbml0dmFsdWVzLnZhbHVlO1xuICAgICAgICAgICAgICAgIHNjb3BlLmZvcmNlUmVmcmVzaCAoNTApOyAvLyB3YWl0IDUwbXMgZm9yIERPTSB0byBiZSByZWFkeVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gcmVjb21wdXRlIHNsaWRlIHBvc2l0aW9uaW5nXG4gICAgICAgIHNjb3BlLmZvcmNlUmVmcmVzaCA9IGZ1bmN0aW9uICh0aW1lcikge1xuICAgICAgICAgICB2YXIgdmFsdWUgPSBzY29wZS52YWx1ZTtcbiAgICAgICAgICAgc2NvcGUudmFsdWUgPSBbdW5kZWZpbmVkLHVuZGVmaW5lZF07XG4gICAgICAgICAgICR0aW1lb3V0IChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgIHNjb3BlLnNldFZhbHVlKHZhbHVlWzBdLDApO1xuICAgICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpICBzY29wZS5zZXRWYWx1ZSh2YWx1ZVsxXSwxKTtcbiAgICAgICAgICAgfSwgdGltZXIpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGhhbmRsZXIgdG8gY2hhbmdlIGNsYXNzIGZyb20gc2xpZGVyIGhhbmRsZVxuICAgICAgICBzY29wZS51cGRhdGVDbGFzcyA9IGZ1bmN0aW9uIChjbGFzc2UsIHN0YXR1cykge1xuXG4gICAgICAgICAgICBpZiAoc3RhdHVzKSBlbGVtZW50LmFkZENsYXNzIChjbGFzc2UpO1xuICAgICAgICAgICAgZWxzZSAgZWxlbWVudC5yZW1vdmVDbGFzcyAoY2xhc3NlKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5zZXREaXNhYmxlID0gZnVuY3Rpb24gKGRpc2FibGVkKSB7XG5cbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MgKFwiZGlzYWJsZVwiKTtcbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzBdLmNzcyAoJ3Zpc2liaWxpdHknLCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzFdLmNzcyAoJ3Zpc2liaWxpdHknLCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MgKFwiZGlzYWJsZVwiKTtcbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzBdLmNzcyAoJ3Zpc2liaWxpdHknLCd2aXNpYmxlJyk7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHNjb3BlLmhhbmRsZXNbMV0uY3NzICgndmlzaWJpbGl0eScsJ3Zpc2libGUnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgICAgIHZhciByYW5nZSA9IHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzO1xuICAgICAgICAgICAgdmFyIHBvaW50ID0gdmFsdWUgKiByYW5nZTtcblxuICAgICAgICAgICAgLy8gaWYgc3RlcCBpcyBwb3NpdGl2ZSBsZXQncyByb3VuZCBzdGVwIGJ5IHN0ZXBcbiAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPiAgMCkge1xuICAgICAgICAgICAgICAgIHZhciBtb2QgPSAocG9pbnQgLSAocG9pbnQgJSBzY29wZS5ieVN0ZXApKSAvIHNjb3BlLmJ5U3RlcDtcbiAgICAgICAgICAgICAgICB2YXIgcmVtID0gcG9pbnQgJSBzY29wZS5ieVN0ZXA7XG5cbiAgICAgICAgICAgICAgICB2YXIgcm91bmQgPSAocmVtID49IHNjb3BlLmJ5U3RlcCAqIDAuNSA/IHNjb3BlLmJ5U3RlcCA6IDApO1xuICAgICAgICAgICAgICAgIHJlc3VsdD0gKG1vZCAqIHNjb3BlLmJ5U3RlcCArIHJvdW5kKSArIHNjb3BlLm5vdExlc3M7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyAoXCJyYW5nZT0lZCB2YWx1ZT0lZCBwb2ludD0lZCBtb2Q9JWQgcmVtPSVkIHJvdW5kPSVkIHJlc3VsdD0lZFwiLCByYW5nZSwgdmFsdWUsIHBvaW50LCBtb2QsIHJlbSwgcm91bmQsIHJlc3VsdClcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBzdGVwIGlzIG5lZ2F0aXZlIHJldHVybiByb3VuZCB0byBhc2tlZCBkZWNpbWFsXG4gICAgICAgICAgICBpZiAoc2NvcGUuYnlTdGVwIDwgIDApIHtcbiAgICAgICAgICAgICAgICB2YXIgcG93ZXIgID0gIE1hdGgucG93ICgxMCwoc2NvcGUuYnlTdGVwICogLTEpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBzY29wZS5ub3RMZXNzICsgcGFyc2VJbnQgKHBvaW50ICogcG93ZXIpIC8gcG93ZXI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiBzdGVwIGlzIG51bGwgcmV0dXJuIGZ1bGwgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBwb2ludDtcbiAgICAgICB9O1xuXG4gICAgICAgIC8vIHJldHVybiBjdXJyZW50IHZhbHVlXG4gICAgICAgIHNjb3BlLmdldFZhbHVlID0gZnVuY3Rpb24gKG9mZnNldCwgaGFuZGxlKSB7XG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdID0gKG9mZnNldCAtIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSAvIChzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAtIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2NvcGUucmVsYXRpdmVbaGFuZGxlXSA9IG9mZnNldCAvICAoc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgbmV3dmFsdWUgPSBzY29wZS5ub3JtYWxpemUgKHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0pO1xuXG5cbiAgICAgICAgICAgIC8vIGlmIGludGVybmFsIHZhbHVlIGNoYW5nZSB1cGRhdGUgb3IgbW9kZWxcbiAgICAgICAgICAgIGlmIChuZXd2YWx1ZSAhPT0gc2NvcGUudmFsdWVbaGFuZGxlXSkge1xuICAgICAgICAgICAgICAgIGlmIChuZXd2YWx1ZSA8IHNjb3BlLnN0YXJ0VmFsdWUpIG5ld3ZhbHVlPXNjb3BlLnN0YXJ0VmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKG5ld3ZhbHVlID4gc2NvcGUuc3RvcFZhbHVlKSAgbmV3dmFsdWU9c2NvcGUuc3RvcFZhbHVlO1xuXG5cbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnZpZXdWYWx1ZSA9IHNjb3BlLmZvcm1hdHRlciAobmV3dmFsdWUsIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnZpZXdWYWx1ZSA9IG5ld3ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZGlzcGxheXNbaGFuZGxlXSkge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5kaXNwbGF5c1toYW5kbGVdLmh0bWwgKHNjb3BlLnZpZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtb2RlbFxuICAgICAgICAgICAgICAgIHNjb3BlLnZhbHVlW2hhbmRsZV0gPSBuZXd2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobW9kZWwpIG1vZGVsLiRzZXRWaWV3VmFsdWUgKHNjb3BlLnZpZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgc2NvcGUuJGFwcGx5KCk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld3ZhbHVlID4gc2NvcGUuc3RhcnRWYWx1ZSAmJiBuZXd2YWx1ZSA8IHNjb3BlLnN0b3BWYWx1ZSkgc2NvcGUudHJhbnNsYXRlKG9mZnNldCwgaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgICAgIHNjb3BlLnNldFN0YXJ0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAodmFsdWUgPiBzY29wZS52YWx1ZVswXSkge1xuICAgICAgICAgICAgICAgIGlmICghc2NvcGUuZHVhbCkgc2NvcGUuc2V0VmFsdWUgKHZhbHVlLDApO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2NvcGUuc2V0VmFsdWUgKHZhbHVlLDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAqICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBzY29wZS5zdGFydC5jc3MoJ2hlaWdodCcsb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKiAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuc3RhcnQuY3NzKCd3aWR0aCcsb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLnN0YXJ0VmFsdWU9IHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLnNldFN0b3AgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IHNjb3BlLnZhbHVlWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5kdWFsKSBzY29wZS5zZXRWYWx1ZSAodmFsdWUsMCk7XG4gICAgICAgICAgICAgICAgZWxzZSBzY29wZS5zZXRWYWx1ZSAodmFsdWUsMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICogKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIHNjb3BlLnN0YXJ0LmNzcygnaGVpZ2h0JyxvZmZzZXQgKyAncHgnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAqICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBzY29wZS5zdG9wLmNzcyh7J3JpZ2h0JzogMCwgJ3dpZHRoJzogKHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggIC0gb2Zmc2V0KSArICdweCd9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuc3RvcFZhbHVlPSB2YWx1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS50cmFuc2xhdGUgPSBmdW5jdGlvbiAob2Zmc2V0LCBoYW5kbGUpIHtcbiAgICAgICAgICAgIHZhciBzdGFydDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgLy8gdGFrZSBoYW5kbGUgc2l6ZSBpbiBhY2NvdW50IHRvIGNvbXB1dGUgbWlkZGxlXG4gICAgICAgICAgICAgICAgdmFyIHZvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAtIG9mZnNldDtcblxuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbaGFuZGxlXS5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgnICsgdm9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW1vei10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgnICsgdm9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW1zLXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctby10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgnICsgdm9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAndHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVkoJyArIHZvZmZzZXQgKyAncHgpJ1xuICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICBpZiAoIXNjb3BlLmR1YWwpIHNjb3BlLnNsaWRlci5jc3MoJ2hlaWdodCcsIG9mZnNldCArICdweCcpO1xuICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcGUucmVsYXRpdmVbMV0gJiYgc2NvcGUucmVsYXRpdmVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gKHNjb3BlLnJlbGF0aXZlWzFdIC0gc2NvcGUucmVsYXRpdmVbMF0pICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgIHN0YXJ0ICA9IChzY29wZS5yZWxhdGl2ZVswXSAqICBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgc2NvcGUuc2xpZGVyLmNzcyAoeydib3R0b20nOiBzdGFydCsncHgnLCdoZWlnaHQnOiBoZWlnaHQgKyAncHgnfSk7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1toYW5kbGVdLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICctd2Via2l0LXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVYKCcgKyBvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJy1tb3otdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW1zLXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVYKCcgKyBvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJy1vLXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVYKCcgKyBvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJ3RyYW5zZm9ybSc6ICd0cmFuc2xhdGVYKCcgKyBvZmZzZXQgKyAncHgpJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghc2NvcGUuZHVhbCkgc2NvcGUuc2xpZGVyLmNzcygnd2lkdGgnLG9mZnNldCArICdweCcpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjb3BlLnJlbGF0aXZlWzFdICYmIHNjb3BlLnJlbGF0aXZlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IChzY29wZS5yZWxhdGl2ZVsxXSAtIHNjb3BlLnJlbGF0aXZlWzBdKSAqICBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IChzY29wZS5yZWxhdGl2ZVswXSAqICBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuc2xpZGVyLmNzcyAoeydsZWZ0Jzogc3RhcnQrJ3B4Jywnd2lkdGgnOiB3aWR0aCArICdweCd9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcG9zaXRpb24gaGFuZGxlIG9uIHRoZSBiYXIgZGVwZW5kaW5nIGEgZ2l2ZW4gdmFsdWVcbiAgICAgICAgc2NvcGUuc2V0VmFsdWUgPSBmdW5jdGlvbiAodmFsdWUgLCBoYW5kbGUpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQ7XG5cbiAgICAgICAgICAgIC8vIGlmIHZhbHVlIGRpZCBub3QgY2hhbmdlIGlnbm9yZVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBzY29wZS52YWx1ZVtoYW5kbGVdKSByZXR1cm47XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgICB2YWx1ZT0wO1xuICAgICAgICAgICAgaWYgKHZhbHVlID4gc2NvcGUubm90TW9yZSkgdmFsdWU9c2NvcGUubm90TW9yZTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IHNjb3BlLm5vdExlc3MpIHZhbHVlPXNjb3BlLm5vdExlc3M7XG5cbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gPSAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gMCkgb2Zmc2V0ID0gKHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gKiBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgKyBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodC8yO1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUgPT09IDEpIG9mZnNldCA9IHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gKiBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdID0gKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gKiAgKHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUudHJhbnNsYXRlIChvZmZzZXQsaGFuZGxlKTtcbiAgICAgICAgICAgIHNjb3BlLnZhbHVlW2hhbmRsZV0gPSB2YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHNjb3BlLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgICAgIC8vIHdoZW4gY2FsbCB0aHJvdWdoIHNldFZhbHVlIHdlIGRvIG5vdCBwYXNzIGNiSGFuZGxlXG4gICAgICAgICAgICAgICAgc2NvcGUudmlld1ZhbHVlID0gc2NvcGUuZm9ybWF0dGVyICh2YWx1ZSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2NvcGUudmlld1ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtb2RlbCkgbW9kZWwuJHNldFZpZXdWYWx1ZSggc2NvcGUudmlld1ZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKHNjb3BlLmRpc3BsYXlzW2hhbmRsZV0pIHtcbiAgICAgICAgICAgICAgICBzY29wZS5kaXNwbGF5c1toYW5kbGVdLmh0bWwgKHNjb3BlLnZpZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cblxuICAgICAgICAvLyBNaW5pbWFsIGtleXN0cm9rZSBoYW5kbGluZyB0byBjbG9zZSBwaWNrZXIgd2l0aCBFU0MgW3Njb3BlLmFjdGlmIGlzIGN1cnJlbnQgaGFuZGxlIGluZGV4XVxuICAgICAgICBzY29wZS5rZXlkb3duPSAgZnVuY3Rpb24oZSl7XG5cbiAgICAgICAgICAgIHN3aXRjaChlLmtleUNvZGUpe1xuICAgICAgICAgICAgICAgIGNhc2UgMzk6IC8vIFJpZ2h0XG4gICAgICAgICAgICAgICAgY2FzZSAzODogLy8gdXBcbiAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPiAwKSBzY29wZS4kYXBwbHkoc2NvcGUuc2V0VmFsdWUgKChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0rc2NvcGUuYnlTdGVwKSwgc2NvcGUuYWN0aWYpKTtcbiAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPCAwKSBzY29wZS4kYXBwbHkoc2NvcGUuc2V0VmFsdWUgKChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0rKDEgLyBNYXRoLnBvdygxMCwgc2NvcGUuYnlTdGVwKi0xKSkpLHNjb3BlLmFjdGlmKSk7XG4gICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2spICBzY29wZS5jYWxsYmFjayAoc2NvcGUudmFsdWVbc2NvcGUuYWN0aWZdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMzc6IC8vIGxlZnRcbiAgICAgICAgICAgICAgICBjYXNlIDQwOiAvLyBkb3duXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPiAwKSBzY29wZS4kYXBwbHkoc2NvcGUuc2V0VmFsdWUgKChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0gLSBzY29wZS5ieVN0ZXApLCBzY29wZS5hY3RpZikpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuYnlTdGVwIDwgMCkgc2NvcGUuJGFwcGx5KHNjb3BlLnNldFZhbHVlICgoc2NvcGUudmFsdWVbc2NvcGUuYWN0aWZdIC0gKDEgLyBNYXRoLnBvdygxMCwgc2NvcGUuYnlTdGVwKi0xKSkpLHNjb3BlLmFjdGlmKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjaykgIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0sIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI3OiAvLyBlc2NcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1tzY29wZS5hY3RpZl1bMF0uYmx1cigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLm1vdmVIYW5kbGUgPSBmdW5jdGlvbiAoaGFuZGxlLCBjbGllbnRYLCBjbGllbnRZKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLSBjbGllbnRZO1xuICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPiBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSBvZmZzZXQgPSBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gY2xpZW50WCAtIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblxuICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIGlmICgoY2xpZW50WCArIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpID4gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLmdldFZhbHVlICAob2Zmc2V0LCBoYW5kbGUpO1xuXG4gICAgICAgICAgICAvLyBwcmV2ZW50IGR1YWwgaGFuZGxlIHRvIGNyb3NzXG4gICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCAmJiBzY29wZS52YWx1ZSBbMF0gPiBzY29wZS52YWx1ZVsxXSkge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUgPT09IDApIHNjb3BlLnNldFZhbHVlIChzY29wZS52YWx1ZVswXSAsIDEpO1xuICAgICAgICAgICAgICAgIGVsc2Ugc2NvcGUuc2V0VmFsdWUoc2NvcGUudmFsdWVbMV0sMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cblxuICAgICAgICBzY29wZS5mb2N1c0NCID0gZnVuY3Rpb24gKGluc2lkZSkge1xuICAgICAgICAgICAgaWYgKGluc2lkZSkge1xuICAgICAgICAgICAgICAgICRkb2N1bWVudC5vbigna2V5ZG93bicsc2NvcGUua2V5ZG93bik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICRkb2N1bWVudC51bmJpbmQoJ2tleWRvd24nLHNjb3BlLmtleWRvd24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIGJhciB3YXMgdG91Y2ggbGV0IG1vdmUgaGFuZGxlIHRvIHRoaXMgcG9pbnRcbiAgICAgICAgc2NvcGUudG91Y2hCYXJDQiA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZT0wO1xuICAgICAgICAgICAgdmFyIHJlbGF0aXZlO1xuICAgICAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICAgICAgICAgIHZhciBvbGR2YWx1ZSA9IHNjb3BlLnZhbHVlW2hhbmRsZV07XG5cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgdHdvIGhhbmRsZXMgc2VsZWN0IGNsb3Nlc3Qgb25lIGZyb20gdG91Y2ggcG9pbnRcbiAgICAgICAgICAgIGlmIChzY29wZS5kdWFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSByZWxhdGl2ZSA9ICh0b3VjaGVzWzBdLnBhZ2VZIC0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20pIC8gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgZWxzZSByZWxhdGl2ZT0gKHRvdWNoZXNbMF0ucGFnZVggLSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpIC8gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZTAgPSBNYXRoLmFicyhyZWxhdGl2ZSAtIHNjb3BlLnJlbGF0aXZlWzBdKTtcbiAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UxID0gTWF0aC5hYnMocmVsYXRpdmUgLSBzY29wZS5yZWxhdGl2ZVsxXSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlMSA8IGRpc3RhbmNlMCkgaGFuZGxlPTE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1vdmUgaGFuZGxlIHRvIG5ldyBwbGFjZVxuICAgICAgICAgICAgc2NvcGUubW92ZUhhbmRsZSAoaGFuZGxlLHRvdWNoZXNbMF0ucGFnZVgsIHRvdWNoZXNbMF0ucGFnZVkpO1xuICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrICYmIG9sZHZhbHVlICE9PSBzY29wZS52YWx1ZVtoYW5kbGVdKSBzY29wZS5jYWxsYmFjayAoc2NvcGUudmFsdWVbaGFuZGxlXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gaGFuZGxlIHdhcyB0b3VjaCBhbmQgZHJhZ1xuICAgICAgICBzY29wZS50b3VjaEhhbmRsZUNCID0gZnVuY3Rpb24gKHRvdWNoZXZ0LCBoYW5kbGUpIHtcbiAgICAgICAgICAgIHZhciBvbGR2YWx1ZSA9IHNjb3BlLnZhbHVlW2hhbmRsZV07XG5cbiAgICAgICAgICAgIHRvdWNoZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAkZG9jdW1lbnQub24oJ3RvdWNobW92ZScsdG91Y2htb3ZlKTtcbiAgICAgICAgICAgICRkb2N1bWVudC5vbigndG91Y2hlbmQnICx0b3VjaGVuZCk7XG4gICAgICAgICAgICBlbGVtZW50LnVuYmluZCgndG91Y2hzdGFydCcsIHNjb3BlLnRvdWNoQmFyQ0IpO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB0b3VjaG1vdmUoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHZhciB0b3VjaGVzID0gZXZlbnQuY2hhbmdlZFRvdWNoZXM7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgdG91Y2hlcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vdmVIYW5kbGUgKGhhbmRsZSx0b3VjaGVzW2lkeF0ucGFnZVgsIHRvdWNoZXNbaWR4XS5wYWdlWSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiB0b3VjaGVuZChldmVudCkge1xuICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgndG91Y2htb3ZlJyx0b3VjaG1vdmUpO1xuICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgndG91Y2hlbmQnICx0b3VjaGVuZCk7XG4gICAgICAgICAgICAgICBlbGVtZW50Lm9uKCd0b3VjaHN0YXJ0Jywgc2NvcGUudG91Y2hCYXJDQik7XG5cbiAgICAgICAgICAgICAgICAvLyBpZiB2YWx1ZSBjaGFuZ2Ugbm90aWZ5IGFwcGxpY2F0aW9uIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrICYmIG9sZHZhbHVlICE9PSBzY29wZS52YWx1ZVtoYW5kbGVdKSBzY29wZS5jYWxsYmFjayAoc2NvcGUudmFsdWVbaGFuZGxlXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuaGFuZGxlQ0IgPSBmdW5jdGlvbiAoY2xpY2tldmVudCwgaGFuZGxlKSB7XG5cbiAgICAgICAgICAgIGlmIChhdHRycy5hdXRvbWF0aWMpIHJldHVybjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIG9sZHZhbHVlID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcbiAgICAgICAgICAgIC8vIHJlZ2lzdGVyIG1vdXNlIGV2ZW50IHRvIHRyYWNrIGhhbmRsZVxuICAgICAgICAgICAgY2xpY2tldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAkZG9jdW1lbnQub24oJ21vdXNlbW92ZScsbW91c2Vtb3ZlKTtcbiAgICAgICAgICAgICRkb2N1bWVudC5vbignbW91c2V1cCcsIG1vdXNldXApO1xuICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1toYW5kbGVdWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICBzY29wZS5hY3RpZj1oYW5kbGU7XG5cbiAgICAgICAgICAgIC8vIHNsaWRlciBoYW5kbGUgaXMgbW92aW5nXG4gICAgICAgICAgICBmdW5jdGlvbiBtb3VzZW1vdmUoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5tb3ZlSGFuZGxlIChoYW5kbGUsIGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBtb3VzZSBpcyB1cCBkYW5zIGxlYXZlIHNsaWRlciBzZW5kIHJlc2l6ZSBldmVudHNcbiAgICAgICAgICAgIGZ1bmN0aW9uIG1vdXNldXAoKSB7XG4gICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgnbW91c2Vtb3ZlJywgbW91c2Vtb3ZlKTtcbiAgICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCdtb3VzZXVwJywgbW91c2V1cCk7XG5cbiAgICAgICAgICAgICAgICAvLyBpZiB2YWx1ZSBjaGFuZ2Ugbm90aWZ5IGFwcGxpY2F0aW9uIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrICYmIG9sZHZhbHVlICE9PSBzY29wZS52YWx1ZVtoYW5kbGVdKSBzY29wZS5jYWxsYmFjayAoc2NvcGUudmFsdWVbaGFuZGxlXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gc2ltdWxhdGUganF1ZXJ5IGZpbmQgYnkgY2xhc3NlcyBjYXBhYmlsaXRpZXMgW3dhcm5pbmcgb25seSByZXR1cm4gMXN0IGVsZW1lbnRzXVxuICAgICAgICBzY29wZS5maW5kID0gZnVuY3Rpb24gKHNlbGVjdCwgZWxlbSkge1xuICAgICAgICAgICAgdmFyIGRvbWVsZW07XG5cbiAgICAgICAgICAgIGlmIChlbGVtKSBkb21lbGVtID0gZWxlbVswXS5xdWVyeVNlbGVjdG9yKHNlbGVjdCk7XG4gICAgICAgICAgICBlbHNlIGRvbWVsZW0gPSBlbGVtZW50WzBdLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0KTtcblxuICAgICAgICAgICAgdmFyIGFuZ2VsZW0gPSBhbmd1bGFyLmVsZW1lbnQoZG9tZWxlbSk7XG4gICAgICAgICAgICByZXR1cm4gKGFuZ2VsZW0pO1xuICAgICAgICB9O1xuXG5cblxuICAgICAgICBzY29wZS5pbml0aWFsU2V0dGluZ3MgPSBmdW5jdGlvbiAoaW5pdGlhbCkge1xuICAgICAgICAgICAgdmFyIGRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdDtcbiAgICAgICAgICAgIHNjb3BlLnZhbHVlPVtdOyAgLy8gc3RvcmUgbG93L2hlaWdodCB2YWx1ZSB3aGVuIHR3byBoYW5kbGVzXG4gICAgICAgICAgICBzY29wZS5yZWxhdGl2ZT1bXTtcblxuICAgICAgICAgICAgaWYgKHNjb3BlLnByZWNpc2lvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdCA9ICgnJyArIHNjb3BlLmJ5U3RlcCkubWF0Y2goL1xcLihbXFxkXSopLyk7XG4gICAgICAgICAgICAgICAgc2NvcGUucHJlY2lzaW9uID0gZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0ICYmIGRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdFsxXSA/IGRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdFsxXS5sZW5ndGggOiAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBwb3NpdGlvbiBoYW5kbGUgdG8gaW5pdGlhbCB2YWx1ZShzKVxuICAgICAgICAgICAgZWxlbWVudC5vbigndG91Y2hzdGFydCcsIHNjb3BlLnRvdWNoQmFyQ0IpO1xuICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1swXS5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGV2dCl7c2NvcGUudG91Y2hIYW5kbGVDQihldnQsMCk7fSk7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgc2xpZGVyIGhhcyB0d28gaGFuZGxlcyBsb3cvaGlnaHRcbiAgICAgICAgICAgIGlmIChzY29wZS5kdWFsKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1sxXS5hZGRDbGFzcygncmFuZ2Utc2xpZGVyLWhhbmRsZScpO1xuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMV0ub24oJ3RvdWNoc3RhcnQnLCBmdW5jdGlvbihldnQpe3Njb3BlLnRvdWNoSGFuZGxlQ0IoZXZ0LDEpO30pO1xuICAgICAgICAgICAgICAgIGlmICghc2NvcGUuaW5pdHZhbHVlcykgc2NvcGUuc2V0VmFsdWUgKGluaXRpYWxbMV0sMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYW4gaW5pdHN0YXRlIG9iamVjdCBhcHBseSBpdFxuICAgICAgICAgICAgaWYgKHNjb3BlLmluaXR2YWx1ZXMpIHNjb3BlLmluaXRXaWRnZXQgKHNjb3BlLmluaXR2YWx1ZXMpO1xuICAgICAgICAgICAgZWxzZSAgIHNjb3BlLnNldFZhbHVlIChpbml0aWFsWzBdLDApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzY29wZS5zbGlkZXJpZCAgID0gYXR0cnMuaWQgfHwgXCJzbGlkZXItXCIgKyBwYXJzZUludCAoTWF0aC5yYW5kb20oKSAqIDEwMDApO1xuICAgICAgICAgICAgc2NvcGUuc3RhcnRWYWx1ZSA9IC1JbmZpbml0eTtcbiAgICAgICAgICAgIHNjb3BlLnN0b3BWYWx1ZSAgPSBJbmZpbml0eTtcbiAgICAgICAgICAgIHNjb3BlLmJ5U3RlcCAgID0gcGFyc2VJbnQoYXR0cnMuYnlTdGVwKSB8fCAxO1xuICAgICAgICAgICAgc2NvcGUudmVydGljYWwgPSBhdHRycy52ZXJ0aWNhbCAgIHx8IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUuZHVhbCAgICAgPSBhdHRycy5kdWFsSGFuZGxlc3x8IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUudHJpZ2dlcl9pbnB1dF9jaGFuZ2U9IGZhbHNlO1xuICAgICAgICAgICAgc2NvcGUubm90TW9yZSAgPSBwYXJzZUludChhdHRycy5ub3RNb3JlKSAgIHx8IDEwMDtcbiAgICAgICAgICAgIHNjb3BlLm5vdExlc3MgID0gcGFyc2VJbnQoYXR0cnMubm90TGVzcykgICB8fCAwO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIGVsZW1lbnQuYWRkQ2xhc3MoXCJ2ZXJ0aWNhbC1yYW5nZVwiKTtcblxuICAgICAgICAgICAgc2NvcGUuaGFuZGxlcz0gW3Njb3BlLmZpbmQoJy5oYW5kbGUtbWluJyksIHNjb3BlLmZpbmQoJy5oYW5kbGUtbWF4JyldO1xuICAgICAgICAgICAgc2NvcGUuYmFyICAgID0gZWxlbWVudDtcbiAgICAgICAgICAgIHNjb3BlLnNsaWRlciA9IHNjb3BlLmZpbmQoJy5yYW5nZS1zbGlkZXItYWN0aXZlLXNlZ21lbnQnKTtcbiAgICAgICAgICAgIHNjb3BlLnN0YXJ0ICA9IHNjb3BlLmZpbmQoJy5pYnotcmFuZ2Utc2xpZGVyLXN0YXJ0Jyk7XG4gICAgICAgICAgICBzY29wZS5zdG9wICAgPSBzY29wZS5maW5kKCcuaWJ6LXJhbmdlLXNsaWRlci1zdG9wJyk7XG4gICAgICAgICAgICBzY29wZS5kaXNhYmxlPSBhdHRycy5kaXNhYmxlIHx8IGZhbHNlO1xuXG4gICAgICAgICAgICBzY29wZS5jdHJsaGFuZGxlID0gbmV3IFJhbmdlU2xpZGVySGFuZGxlIChzY29wZSk7XG5cbiAgICAgICAgICAgIC8vIHByZXBhcmUgRE9NIG9iamVjdCBwb2ludGVyIHRvIGNvbXB1dGUgc2l6ZSBkeW5hbWljYWxseVxuICAgICAgICAgICAgc2NvcGUuYm91bmRzID0ge1xuICAgICAgICAgICAgICAgIGJhciAgICA6IGVsZW1lbnRbMF0sXG4gICAgICAgICAgICAgICAgaGFuZGxlczogW3Njb3BlLmhhbmRsZXNbMF1bMF0sIHNjb3BlLmhhbmRsZXNbMV1bMF1dXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoYXR0cnMuZGlzYWJsZSA9PT0gJ3RydWUnKSBzY29wZS5zZXREaXNhYmxlKHRydWUpO1xuXG4gICAgICAgICAgICBpZiAoYXR0cnMuZGlzcGxheVRhcmdldCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYXR0cnMuZGlzcGxheVRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIHRydWUgOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdoYW5kbGUnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzID0gc2NvcGUuaGFuZGxlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMF0uYWRkQ2xhc3MoJ2liei1yYW5nZS1zbGlkZXItZGlzcGxheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHNjb3BlLmhhbmRsZXNbMV0uYWRkQ2xhc3MoJ2liei1yYW5nZS1zbGlkZXItZGlzcGxheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5kaXNwbGF5cyA9ICBbJGRvY3VtZW50LmdldEVsZW1lbnRCeUlkIChhdHRycy5kaXNwbGF5VGFyZ2V0KV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHNjb3BlLmRpc3BsYXlzPVtdO1xuXG4gICAgICAgICAgICAvLyBleHRyYWN0IGluaXRpYWwgdmFsdWVzIGZyb20gYXR0cnMgYW5kIHBhcnNlIGludG8gaW50XG4gICAgICAgICAgICBpZiAoIWF0dHJzLmluaXRpYWwpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5pbml0aWFsICA9IFtzY29wZS5uZ01vZGVsLCBzY29wZS5uZ01vZGVsXTsgLy8gaW5pdGlhbGl6ZSB0byBtb2RlbCB2YWx1ZXNcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIGluaXRpYWwgID0gYXR0cnMuaW5pdGlhbC5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgICAgIHNjb3BlLmluaXRpYWwgPSBbXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxbMF0gIT09IHVuZGVmaW5lZCA/IHBhcnNlSW50IChpbml0aWFsWzBdKSA6IHNjb3BlLm5vdExlc3MsXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxbMV0gIT09IHVuZGVmaW5lZCA/IHBhcnNlSW50IChpbml0aWFsWzFdKSA6IHNjb3BlLm5vdE1vcmVcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNb25pdG9yIGFueSBjaGFuZ2VzIG9uIHN0YXJ0L3N0b3AgZGF0ZXMuXG4gICAgICAgICAgICBzY29wZS4kd2F0Y2goJ3N0YXJ0QXQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUudmFsdWUgPCBzY29wZS5zdGFydEF0ICkge1xuICAgICAgICAgICAgICAgICAgICAvL3Njb3BlLnNldFZhbHVlIChzY29wZS5zdGFydEF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLnN0YXJ0QXQpIHNjb3BlLnNldFN0YXJ0IChzY29wZS5zdGFydEF0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzY29wZS4kd2F0Y2goJ3N0b3BBdCcgLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUudmFsdWUgPiBzY29wZS5zdG9wQXQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9zY29wZS5zZXRWYWx1ZSAoc2NvcGUuc3RvcEF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLnN0b3BBdCkgc2NvcGUuc2V0U3RvcCAoc2NvcGUuc3RvcEF0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBmaW5pc2ggd2lkZ2V0IGluaXRpYWxpc2F0aW9uXG4gICAgICAgICAgICBzY29wZS5pbml0aWFsU2V0dGluZ3MgKHNjb3BlLmluaXRpYWwpO1xuXG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuaW5pdCgpO1xuICAgICAgICBcbiAgICAgICAgIC8vIHNsaWRlciBpcyByZWFkeSBwcm92aWRlIGNvbnRyb2wgaGFuZGxlIHRvIGFwcGxpY2F0aW9uIGNvbnRyb2xsZXJcbiAgICAgICAgc2NvcGUuJHdhdGNoICgnaW5pdGhvb2snLCBmdW5jdGlvbiAoKSB7ICAgICAgICAgLy8gaW5pdCBWYWx1ZXMgbWF5IGFycml2ZSBsYXRlXG4gICAgICAgICAgICBpZiAoc2NvcGUuaW5pdGhvb2spIHNjb3BlLmluaXRob29rIChzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc2NvcGUuJHdhdGNoICgnaW5pdHZhbHVlcycsIGZ1bmN0aW9uICgpIHsgXHQvLyBpbml0IFZhbHVlcyBtYXkgYXJyaXZlIGxhdGVcbiAgICAgICAgICAgIGlmIChzY29wZS5pbml0dmFsdWVzKSBzY29wZS5pbml0V2lkZ2V0KHNjb3BlLmluaXR2YWx1ZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0d28td2F5IGJpbmRpbmcgaWYgbW9kZWwgdmFsdWUgY2hhbmdlc1xuICAgICAgICBzY29wZS4kd2F0Y2ggKCduZ01vZGVsJywgZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgICAgc2NvcGUuc2V0VmFsdWUobmV3VmFsdWUsIDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbnJldHVybiB7XG4gICAgcmVzdHJpY3Q6IFwiRVwiLCAgICAvLyByZXN0cmljdCB0byA8cmFuZ2Utc2xpZGVyPiBIVE1MIGVsZW1lbnQgbmFtZVxuICAgIHNjb3BlOiB7XG4gICAgICAgIHN0YXJ0QXQgIDonPScsICAvLyBGaXJzdCBhY2NlcHRhYmxlIGRhdGVcbiAgICAgICAgc3RvcEF0ICAgOic9JywgIC8vIExhc3QgYWNjZXB0YWJsZSBkYXRlXG4gICAgICAgIGNhbGxiYWNrIDonPScsICAvLyBDYWxsYmFjayB0byBhY3RpZiB3aGVuIGEgZGF0ZSBpcyBzZWxlY3RlZFxuICAgICAgICBmb3JtYXR0ZXI6Jz0nLCAgLy8gQ2FsbGJhY2sgZm9yIGRyYWcgZXZlbnQgY2FsbCBlYWNoIHRpbWUgaW50ZXJuYWwgdmFsdWUgY2hhbmdlc1xuICAgICAgICBpbml0aG9vayA6Jz0nLCAgLy8gSG9vayBwb2ludCB0byBjb250cm9sIHNsaWRlciBmcm9tIEFQSVxuICAgICAgICBjYmhhbmRsZSA6Jz0nLCAgLy8gQXJndW1lbnQgYWRkZWQgdG8gZXZlcnkgY2FsbGJhY2tcbiAgICAgICAgaW5pdHZhbHVlczonPScsICAgLy8gSW5pdGlhbCB2YWx1ZXMgYXMgYSBzaW5nbGUgb2JqZWN0XG4gICAgICAgIG5nTW9kZWw6ICc9JyAgICAvLyB0aGUgbW9kZWwgdmFsdWVcbiAgICB9LFxuICAgIHJlcXVpcmU6ICc/bmdNb2RlbCcsXG4gICAgdGVtcGxhdGU6IHRlbXBsYXRlLCAvLyBodG1sIHRlbXBsYXRlIGlzIGJ1aWxkIGZyb20gSlNcbiAgICByZXBsYWNlOiB0cnVlLCAgICAgIC8vIHJlcGxhY2UgY3VycmVudCBkaXJlY3RpdmUgd2l0aCB0ZW1wbGF0ZSB3aGlsZSBpbmhlcml0aW5nIG9mIGNsYXNzXG4gICAgbGluazogbGluayAgICAgICAgICAvLyBwaWNrYWRhdGUgb2JqZWN0J3MgbWV0aG9kc1xufTtcbn1dKTtcblxuY29uc29sZS5sb2cgKFwiUmFuZ2VTbGlkZXIgTG9hZGVkXCIpO1xuXG59KSgpOyIsIi8qXG4gYWxzYS1nYXRld2F5IC0tIHByb3ZpZGUgYSBSRVNUL0hUVFAgaW50ZXJmYWNlIHRvIEFMU0EtTWl4ZXJcblxuIENvcHlyaWdodCAoQykgMjAxNSwgRnVsdXAgQXIgRm9sbFxuXG4gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cblxuIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG5cbiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuIGFsb25nIHdpdGggc2NvcGUgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLlxuXG4gUmVmZXJlbmNlczpcblxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRlbXBsYXRlID1cbiAgICAgICAgICAnPGRpdiBjbGFzcz1cImFmYi1tb25pdG9yXCIgbmctY2xpY2s9XCJnZXRwaW5nKClcIj4nICtcbiAgICAgICAgICc8c3BhbiBjbGFzcz1cImFmYi1yZWZyZXNoLXRva2VuXCIgID5hZmI6Ly97e2hvc3RuYW1lfX06e3todHRwZHBvcnR9fTwvc3Bhbj4nICtcbiAgICAgICAgICc8aSBjbGFzcz1cInt7aWNvbn19XCI+PC9pPicgK1xuICAgICAgICAgJzwvZGl2Pic7XG5cblxuLy8gc2NvcGUgbW9kdWxlIGlzIGxvYWQgc3RhdGljYWxseSBiZWZvcmUgYW55IHJvdXRlIGlzIGNhdGl2YXRlZFxuYW5ndWxhci5tb2R1bGUoJ1Rva2VuUmVmcmVzaCcsIFsnQXBwQ29uZmlnJywgJ01vZGFsTm90aWZpY2F0aW9uJ10pXG5cbiAgICAuZGlyZWN0aXZlICgndG9rZW5SZWZyZXNoJywgW1wiJGxvZ1wiLCBcIiR3aW5kb3dcIiwgXCIkdGltZW91dFwiLCBcIiRsb2NhdGlvblwiLCBcIk5vdGlmaWNhdGlvblwiLCBcIkFwcENvbmZpZ1wiLCBcIkFwcENhbGxcIiwgZnVuY3Rpb24oJGxvZywgJHdpbmRvdywgJHRpbWVvdXQsICRsb2NhdGlvbiwgTm90aWZpY2F0aW9uLCBBcHBDb25maWcsIEFwcENhbGwpIHtcblxuICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgc2NvcGUubG9nZ2VkPXVuZGVmaW5lZDsgLy8gbmVpdGhlciB0aHUgbmVpdGhlciBmYWxzZVxuICAgICAgICBcbiAgICAgICAgJHdpbmRvdy5vbmJlZm9yZXVubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIEFwcENhbGwuZ2V0IChzY29wZS5wbHVnaW4sIFwibG9nb3V0XCIsIHsvKnF1ZXJ5Ki99LCBmdW5jdGlvbiAoKSB7ICAgIFxuICAgICAgICAgICAgJGxvZy5sb2coXCJPUEEgZXhpdFwiKTsgICAgICAgICAgICBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAgICAgICAgICBcbiAgICAgICAgc2NvcGUub25saW5lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyAgICAoXCJvbmxpbmVcIik7XG4gICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzIChcIm9mZmxpbmVcIik7XG4gICAgICAgICAgICBzY29wZS5sb2dnZWQ9dHJ1ZTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5vZmZsaW5lID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgICAgKFwib2ZmbGluZVwiKTtcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwib25saW5lXCIpO1xuICAgICAgICAgICAgc2NvcGUubG9nZ2VkPWZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2NvcGUub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKHNjb3BlLmxvZ2dlZCAhPT0gZmFsc2UpICB7XG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLndhcm5pbmcgKHttZXNzYWdlOiBcIkFwcEZyYW1ld29yayBCaW5kZXIgTG9zdFwiLCBkZWxheTogNTAwMH0pO1xuICAgICAgICAgICAgICAgIHNjb3BlLm9mZmxpbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLnN0YXR1cyA9IDA7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzY29wZS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihqcmVzcCwgZXJyY29kZSkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoZXJyY29kZSAhPT0gMjAwIHx8IGpyZXNwLnJlcXVlc3Quc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi53YXJuaW5nICh7bWVzc2FnZTogXCJhdXRvLWNvbm5lY3QgOlwiICsganJlc3AucmVxdWVzdC5pbmZvLCBkZWxheTogMTAwMDB9KTtcbiAgICAgICAgICAgICAgICBzY29wZS5vZmZsaW5lKCk7IFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHNjb3BlLmxvZ2dlZCAhPT0gdHJ1ZSkgIHtcbiAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uc3VjY2VzcyAoe21lc3NhZ2U6IFwiQXBwRnJhbWV3b3JrIEJpbmRlciBDb25uZWN0ZWRcIiwgZGVsYXk6IDMwMDB9KTtcbiAgICAgICAgICAgICAgICBzY29wZS5vbmxpbmUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2spIHNjb3BlLmNhbGxiYWNrKGpyZXNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgc2NvcGUuc3RhdHVzID0gMTsgICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIENoZWNrIEJpbmRlciBzdGF0dXNcbiAgICAgICAgc2NvcGUuZ2V0cGluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBBcHBDYWxsLmdldCAoc2NvcGUucGx1Z2luLCBcInBpbmdcIiwgey8qcXVlcnkqL30sZnVuY3Rpb24oanJlc3AsIGVycmNvZGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyY29kZSAhPT0gMjAwIHx8IGpyZXNwLnJlcXVlc3Quc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24ud2FybmluZyAoe21lc3NhZ2U6IGpyZXNwLnJlcXVlc3QuaW5mbywgZGVsYXk6IDUwMDB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUub2ZmbGluZSgpOyBcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyByZXN0YXJ0IGEgbmV3IHRpbWVyIGZvciBuZXh0IHBpbmdcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoc2NvcGUuZ2V0cGluZywgQXBwQ29uZmlnLnNlc3Npb24ucGluZ3JhdGUqMTAwMCk7XG4gICAgICAgICAgICB9LCBzY29wZS5vbmVycm9yKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIEJpbmRlciBzdGF0dXNcbiAgICAgICAgc2NvcGUucmVmcmVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBBcHBDYWxsLmdldCAoc2NvcGUucGx1Z2luLCBcInJlZnJlc2hcIiwgey8qcXVlcnkqL30sIGZ1bmN0aW9uKGpyZXNwLCBlcnJjb2RlKSB7XG5cbiAgICAgICAgICAgICAgICBzY29wZS5vbnN1Y2Nlc3MgKGpyZXNwLCBlcnJjb2RlKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyByZXN0YXJ0IGEgbmV3IHRpbWVyIGZvciBuZXh0IHJlZnJlc2hcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoc2NvcGUucmVmcmVzaCwgQXBwQ29uZmlnLnNlc3Npb24udGltZW91dCAqMjUwKTtcbiAgICAgICAgICAgIH0sIHNjb3BlLm9uZXJyb3IpOyAgICAgICAgICAgIFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgLy8gSW5pdGlhbCBjb25uZWN0aW9uXG4gICAgICAgIHNjb3BlLmxvZ2dpbiA9IGZ1bmN0aW9uKCkgeyAgICAgICAgICAgIFxuICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKHNjb3BlLnBsdWdpbiwgXCJjb25uZWN0XCIsIHt0b2tlbjogQXBwQ29uZmlnLnNlc3Npb24uaW5pdGlhbH0sIGZ1bmN0aW9uKGpyZXNwLCBlcnJjb2RlKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5vbnN1Y2Nlc3MgKGpyZXNwLCBlcnJjb2RlKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEludGlhbCB0b2tlbiB3YXMgYWNjZXB0ZWQgbGV0J3Mgc3RhcnQgcGluZyAmIHJlZnJlc2hcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoc2NvcGUuZ2V0cGluZywgQXBwQ29uZmlnLnNlc3Npb24ucGluZ3JhdGUqMTAwMCk7XG4gICAgICAgICAgICAgICAgJHRpbWVvdXQgKHNjb3BlLnJlZnJlc2gsIEFwcENvbmZpZy5zZXNzaW9uLnRpbWVvdXQgKjI1MCk7XG4gXG4gICAgICAgICAgICB9LCBzY29wZS5vbmVycm9yKTtcbiAgICAgICAgfTtcblxuXG4gICAgICAgIC8vIFBhcnNlIFdpZGdldCBQYXJhbWV0ZXJzXG4gICAgICAgIHNjb3BlLnBsdWdpbiAgICA9IGF0dHJzLnBsdWdpbiB8fCBcImF1dGhcIjtcbiAgICAgICAgc2NvcGUuaWNvbiAgICAgID0gYXR0cnMuaWNvbiAgIHx8IFwiZmktbGlnaHRidWxiXCI7XG4gICAgICAgIHNjb3BlLmhvc3RuYW1lICA9ICRsb2NhdGlvbi5ob3N0KCk7XG4gICAgICAgIHNjb3BlLmh0dHBkcG9ydCA9ICRsb2NhdGlvbi5wb3J0KCk7XG4gICAgICAgIHNjb3BlLmF1dG9sb2cgICA9IEpTT04ucGFyc2UoYXR0cnMuYXV0b2xvZyB8fCBmYWxzZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBhdXRvc3RhcnQgbG9nIGlmIHJlcXVlc3RlZFxuICAgICAgICBpZiAoc2NvcGUuYXV0b2xvZykgc2NvcGUubG9nZ2luKCk7XG4gICAgICAgIFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAgIGNhbGxiYWNrIDogXCI9XCJcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgbGluazogbXltZXRob2RzXG4gICAgfTtcbn1dKTtcblxufSkoKTtcbmNvbnNvbGUubG9nIChcIlRva2VuIFJlZnJlc2ggTG9hZGVkXCIpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKiBcbiAqIHJlZjogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL21vdXNlb3ZlclxuICogXG4gKiB1c2FnZTogXG4gKiBcbiAqIHRpcE1vZGFsOiBsaXN0ZW4gZXZlbnQgZnJvbSBlbGVtLnBhcmVudCgpIHRvIGRpc3BsYXkgdGlwLW1vZGFsXG4gKiAgICAgIDxkaXYgY2xhc3M9XCJ4eHh4XCI+XG4gKiAgICAgICAgICA8dGlwLW1vZGFsIHRpcD14eHh4PjwvdGlwLW1vZGFsPlxuICogICAgICAgICAgPGlucHV0LXRleHQgLi4uLj48L2lucHV0LXRleHQ+XG4gKiAgICAgIDwvZGl2PlxuICogICAgICBcbiAqIE5vdGU6IHVzZSBDU1MudmlzaWJpbGl0eSB0byBhdm9pZCBkaXNwbGF5IGZsaWNrZXJpbmcgYXQgaW5pdGlhbCBkaXNwbGF5LlxuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRtcGwgPSAnPGRpdiBjbGFzcz1cInRpcC1tb2RhbC1wb3B1cFwiPicgK1xuICAgICAgICAgICAgJzxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+JyArXG4gICAgICAgICAgICAnPHNwYW4+e3t0aXB9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L3NwYW4+PC9kaXY+JyA7XG5cbiAgICBhbmd1bGFyLm1vZHVsZSgnTW9kYWxOb3RpZmljYXRpb24nLCBbXSlcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3RpcE1vZGFsJywgW1wiJHRpbWVvdXRcIiwgZnVuY3Rpb24gKCR0aW1lb3V0KSB7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudCA9IGVsZW0ucGFyZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsICAgID0gZWxlbS5maW5kKFwiZGl2XCIpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVsYXkgdGlwIGRpc3BsYXkgdG8gYXZvaWQgYmxpbmtpbmcgd2hlbiBtb3ZpbmcgbW91c2UgZmFzdFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkaXNwbGF5ICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFjdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLnNob3cpIHNjb3BlLm1vZGFsLmNzcyh7b3BhY2l0eTogMSwgdmlzaWJpbGl0eTondmlzaWJsZSd9KTsgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuc2hvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS50aW1lb3V0ID0gJHRpbWVvdXQoYWN0aW9uLCBzY29wZS5kZWxheSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNsb3NlICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzY29wZS5zaG93ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kYWwuY3NzKHtvcGFjaXR5OiAwLCB2aXNpYmlsaXR5OidoaWRkZW4nfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWp1c3QgaWNvbiBvciB1c2UgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uICA9IGF0dHJzLmljb24gfHwgJ2ZpLWxpZ2h0YnVsYic7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgUGFyZW50IGVsZW1lbnQgdG8gZ2V0IG1vdXNlIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5hZGRDbGFzcyAoJ2FzLW1vZGFsLXRpcCcpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5wYXJlbnQuYmluZCgnY2xpY2snLCBjbG9zZSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdmb2N1cycsIGRpc3BsYXkpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5wYXJlbnQuYmluZCgnbW91c2VvdmVyJywgZGlzcGxheSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdtb3VzZWxlYXZlJywgY2xvc2UpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5wYXJlbnQuYmluZCgnYmx1cicsIGNsb3NlKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmRlbGF5ID0gYXR0cnMuZGVsYXkgfHwgMTAwMDsgLy8gd2FpdCAxcyBiZWZvcmUgZGlzcGxheWluZyB0aXBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdG1wbCxcbiAgICAgICAgICAgICAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBzY29wZToge3RpcDogXCI9XCJ9IC8vIHRpcCBtYXkgbm90IGJlIGRlZmluZWQgd2hlbiB3aWRnZXQgaXMgZGlzcGxheVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XSk7XG59KSgpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG1wbCA9ICc8c3BhbiB0aXRsZT1cIkdvdG86IHt7aHJlZn19XCIgbmctY2xpY2s9XCJjbGlja2VkKClcIj4nICtcbiAgICAgICAgICAgICc8aSBjbGFzcz1cInt7aWNvbn19XCI+PC9pPicgK1xuICAgICAgICAgICAgJzxzcGFuPnt7bGFiZWx9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L3NwYW4+JztcblxuXG4gICAgYW5ndWxhci5tb2R1bGUoJ0xpbmtCdXR0b24nLCBbXSlcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ2xpbmtCdXR0b24nLCBbXCIkbG9jYXRpb25cIiwgZnVuY3Rpb24gKCRsb2NhdGlvbikge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcblxuICAgICAgICAgICAgICAgICAgICBzY29wZS5jbGlja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dHJzLnF1ZXJ5KSAkbG9jYXRpb24ucGF0aChhdHRycy5ocmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgJGxvY2F0aW9uLnBhdGgoYXR0cnMuaHJlZikuc2VhcmNoKGF0dHJzLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBhanVzdCBpY29uIG9yIHVzZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gPSBhdHRycy5pY29uICAgfHwgJ2ZpLWxpbmsnO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5sYWJlbCA9IGF0dHJzLmxhYmVsIHx8ICdKdW1wJztcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaHJlZiAgPSBhdHRycy5ocmVmICB8fCAnL2hvbWUnO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGxhYmVsIGFzIGNsYXNzXG4gICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgKHNjb3BlLmxhYmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7fVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XSk7XG59KSgpO1xuIiwiXG4vKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLi5cbiAqIFxuICogUmVmZXJlbmNlOlxuICogICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9BUEkvRmlsZVJlYWRlciBcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Vc2luZ19maWxlc19mcm9tX3dlYl9hcHBsaWNhdGlvbnMjVXNpbmdfaGlkZGVuX2ZpbGVfaW5wdXRfZWxlbWVudHNfdXNpbmdfdGhlX2NsaWNrJTI4JTI5X21ldGhvZFxuICogICBodHRwczovL3VuY29ya2Vkc3R1ZGlvcy5jb20vYmxvZy9tdWx0aXBhcnRmb3JtZGF0YS1maWxlLXVwbG9hZC13aXRoLWFuZ3VsYXJqc1xuICogICBodHRwczovL3d3dy50ZXJsaWNpLmNvbS8yMDE1LzA1LzE2L3VwbG9hZGluZy1maWxlcy1sb2NhbGx5Lmh0bWxcbiAqICAgaHR0cHM6Ly9naXRodWIuY29tL25lcnZnaC9hbmd1bGFyLWZpbGUtdXBsb2FkL2Jsb2IvbWFzdGVyL3NyYy9zZXJ2aWNlcy9GaWxlVXBsb2FkZXIuanNcbiAqICAgaHR0cHM6Ly9zdHVrLmdpdGh1Yi5pby9qc3ppcC9kb2N1bWVudGF0aW9uL2hvd3RvL3JlYWRfemlwLmh0bWxcbiAqICAgaHR0cDovL29uZWh1bmdyeW1pbmQuY29tL3ppcC1wYXJzaW5nLWpzemlwLWFuZ3VsYXIvXG4gKiAgIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTUzNDE5MTIvaG93LXRvLWdvLWZyb20tYmxvYi10by1hcnJheWJ1ZmZlclxuICogICBcbiAqICAgQnVnczogemlwIGZpbGUgc2VudCBldmVuIHdoZW4gZmxhZyBhcyBpbnZhbGlkIFxuICovXG5cbiBcblxuKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG1wbEFwcGxpID0gJzxpbnB1dCB0eXBlPVwiZmlsZVwiIG5hbWU9XCJ7e25hbWV9fS1pbnB1dFwiIG9uY2hhbmdlPVwiYW5ndWxhci5lbGVtZW50KHRoaXMpLnNjb3BlKCkuVXBMb2FkRmlsZSh0aGlzLmZpbGVzKVwiIGFjY2VwdD1cInt7bWltZXR5cGV9fVwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+JytcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwidXBsb2FkLWZpbGVcIiBuZy1jbGljaz1cImltZ0NsaWNrZWQoKVwiPicgK1xuICAgICAgICAgICAgJzxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+IDxzcGFuPnt7bGFiZWx9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8cmFuZ2Utc2xpZGVyIG5nLXNob3c9XCIhbm9zbGlkZXJcIiBpZD1cInt7bmFtZX19LXNsaWRlclwiIGF1dG9tYXRpYz10cnVlIGluaXRob29rPVwiU2xpZGVySW5pdENCXCI+PC9yYW5nZS1zbGlkZXI+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcbiAgICBcbnZhciB0bXBsTW9kYWwgPSAnPHNwYW4gY2xhc3M9XCJtb2RhbC10ZXh0XCI+VXBsb2FkIEFwcGxpY2F0aW9uIDxiPnt7YXBwbmFtZX19PC9iPiA/PC9zcGFuPicgK1xuICAgICAgICAgICAgJzxkaXY+JytcbiAgICAgICAgICAgICc8aW1nIG5nLXNyYz1cInt7aWNvbn19XCI+JyArXG4gICAgICAgICAgICAnPHN1Ym1pdC1idXR0b24gaWNvbj1cImZpLXhcIiBsYWJlbD1cIkNhbmNlbFwiIGNsaWNrZWQ9XCJhYmFuZG9uXCI+PC9zdWJtaXQtYnV0dG9uPicrXG4gICAgICAgICAgICAnPHN1Ym1pdC1idXR0b24gaWNvbj1cImZpLWxpa2VcIiBsYWJlbD1cIkluc3RhbGxcIiBjbGlja2VkPVwic3VjY2Vzc1wiPjwvc3VibWl0LWJ1dHRvbj4gJyArXG4gICAgICAgICAgICAnPC9kaXY+JztcbiAgICBcbnZhciB0bXBsRXJyb3IgPSAnPHNwYW4gY2xhc3M9XCJtb2RhbC10ZXh0XCI+SW52YWxpZCBBcHBsaWNhdGlvbiA8Yj57e2FwcG5hbWV9fTwvYj4gPzwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8ZGl2PicrXG4gICAgICAgICAgICAnPGltZyBuZy1zcmM9XCJ7e2ljb259fVwiPicgK1xuICAgICAgICAgICAgJzxzdWJtaXQtYnV0dG9uIGljb249XCJmaS14XCIgbGFiZWw9XCJDbG9zZVwiIGNsaWNrZWQ9XCJhYmFuZG9uXCI+PC9zdWJtaXQtYnV0dG9uPicrXG4gICAgICAgICAgICAnPC9kaXY+JztcbiAgICBcblxuLy8gU2VydmljZSBDcmVhdGUgeGZvcm0gaW5zZXJ0IGZpbGVzIGluIGFuZCBQb3N0IGl0IHRvIHVybFxuZnVuY3Rpb24gTG9hZEZpbGVTdmMgKHNjb3BlLCBmaWxlcywgZmlsZUNCKSB7XG4gICAgdmFyIHhtbFJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHZhciB4Zm9ybSAgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBcbiAgICAvLyBVcGRhdGUgc2xpZGVyIGR1cmluZyBVcGxvYWRcbiAgICB4bWxSZXEudXBsb2FkLm9ucHJvZ3Jlc3MgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIHByb2dyZXNzID0gTWF0aC5yb3VuZChldmVudC5sZW5ndGhDb21wdXRhYmxlID8gZXZlbnQubG9hZGVkICogMTAwIC8gZXZlbnQudG90YWwgOiAwKTtcbiAgICAgICAgaWYgKHNjb3BlLnNsaWRlcikgc2NvcGUuc2xpZGVyLnNldFZhbHVlIChwcm9ncmVzcyk7XG4gICAgfTtcblxuICAgIC8vIFVwbG9hZCBpcyBmaW5pc2ggbGV0J3Mgbm90aWZ5IGNvbnRyb2xlciBjYWxsYmFja1xuICAgIHhtbFJlcS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0uYWRkQ2xhc3MgKFwic3VjY2Vzc1wiKTtcbiAgICAgICAgc2NvcGUuZGl2RWxlbS5yZW1vdmVDbGFzcyAoXCJlcnJvclwiKTtcbiAgICAgICAgdmFyIHJlc3BvbnNlID17XG4gICAgICAgICAgICBzdGF0dXMgOiB4bWxSZXEuc3RhdHVzLFxuICAgICAgICAgICAgaGVhZGVyczogeG1sUmVxLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIFxuICAgICAgICB9O1xuICAgICAgICBzY29wZS5jYWxsYmFjayAocmVzcG9uc2UpO1xuICAgIH07XG5cbiAgICB4bWxSZXEub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NvcGUuZGl2RWxlbS5hZGRDbGFzcyAoXCJlcnJvclwiKTtcbiAgICAgICAgc2NvcGUuZGl2RWxlbS5yZW1vdmVDbGFzcyAoXCJzdWNjZXNzXCIpO1xuICAgIH07XG5cbiAgICB4bWxSZXEub25hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NvcGUuZGl2RWxlbS5hZGRDbGFzcyAoXCJlcnJvclwiKTtcbiAgICAgICAgc2NvcGUuZGl2RWxlbS5yZW1vdmVDbGFzcyAoXCJzdWNjZXNzXCIpO1xuICAgICAgICB2YXIgcmVzcG9uc2UgPXtcbiAgICAgICAgICAgIHN0YXR1cyA6IHhtbFJlcS5zdGF0dXMsXG4gICAgICAgICAgICBoZWFkZXJzOiB4bWxSZXEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgXG4gICAgICAgIH07XG4gICAgICAgIHNjb3BlLmNhbGxiYWNrIChyZXNwb25zZSk7XG4gICAgfTtcbiAgICBcbiAgICB0aGlzLnBvc3RmaWxlID0gZnVuY3Rpb24ocG9zdHVybCkgeyBcbiAgICAgICAgLy8gZXZlcnl0aGluZyBsb29rcyBPSyBsZXQncyBQb3N0IGl0XG4gICAgICAgIHhtbFJlcS5vcGVuKFwiUE9TVFwiLCBwb3N0dXJsICwgdHJ1ZSk7XG4gICAgICAgIHhtbFJlcS5zZW5kKHhmb3JtKTtcbiAgICB9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmZpbGUgPSBmaWxlc1tpXTtcbiAgICAgICAgLy8gVW5rbm93IFR5cGUgISEhIGlmICghdGhpcy5maWxlLnR5cGUubWF0Y2goc2NvcGUubWltZXR5cGUpKSBjb250aW51ZTtcblxuICAgICAgICBjb25zb2xlLmxvZyAoXCJTZWxlY3RlZCBmaWxlPVwiICsgdGhpcy5maWxlLm5hbWUgKyBcIiBzaXplPVwiKyB0aGlzLmZpbGUuc2l6ZS8xMDI0ICsgXCIgVHlwZT1cIisgdGhpcy5maWxlLnR5cGUpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5iYXNlbmFtZT0gdGhpcy5maWxlLm5hbWUuc3BsaXQoJy8nKS5yZXZlcnNlKClbMF07XG5cbiAgICAgICAgLy8gRmlsZSB0byB1cGxvYWQgaXMgdG9vIGJpZ1xuICAgICAgICBpZiAoaXNOYU4odGhpcy5maWxlLnNpemUpIHx8IHRoaXMuZmlsZS5zaXplID4gc2NvcGUubWF4c2l6ZSoxMDI0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0IChmaWxlQ0IsMTAwKTsgIC8vIE9uIGVycm9yIGFzeW5jaHJvbm91cyBjYWxsYmFjayB3aXRob3V0IGFyZ3VtZW50XG4gICAgICAgICAgICBcbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgLy8gSWYgRmlsZSBpcyByZWFkYWJsZSBsZXQncyByZWFkIGl0XG4gICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih0aGlzLmZpbGUpO1xuICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZpbGVDQjtcblxuICAgICAgICAgICAgLy8gaWYgZXZlcnl0aGluZyBpcyBPSyBsZXQncyBhZGQgZmlsZSB0byB4Zm9ybVxuICAgICAgICAgICAgeGZvcm0uYXBwZW5kKHNjb3BlLm5hbWUsIHRoaXMuZmlsZSwgdGhpcy5maWxlLm5hbWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5hbmd1bGFyLm1vZHVsZSgnVXBsb2FkRmlsZXMnLFsnQXBwQ29uZmlnJywgJ01vZGFsTm90aWZpY2F0aW9uJywgJ1JhbmdlU2xpZGVyJ10pXG5cbi5kaXJlY3RpdmUoJ3VwbG9hZEFwcGxpJywgW1wiQXBwQ29uZmlnXCIsIFwiSlFlbXVcIiwgXCJOb3RpZmljYXRpb25cIiwgXCJNb2RhbEZhY3RvcnlcIiwgXCIkdGltZW91dFwiLCBmdW5jdGlvbihBcHBDb25maWcsICBKUWVtdSwgTm90aWZpY2F0aW9uLCBNb2RhbEZhY3RvcnksICR0aW1lb3V0KSB7XG4gICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgICAgICBcbiAgICAgICAgLy8gZ2V0IHdpZGdldCBpbWFnZSBoYW5kbGUgZnJvbSB0ZW1wbGF0ZVxuICAgICAgICBzY29wZS5pbnB1dEVsZW0gID0gZWxlbS5maW5kKCdpbnB1dCcpO1xuICAgICAgICBzY29wZS5kaXZFbGVtICAgID0gZWxlbS5maW5kKCdkaXYnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEltYWdlIHdhcyBja2ljayBsZXQncyBzaW11bGF0ZSBhbiBpbnB1dCAoZmlsZSkgY2xpY2tcbiAgICAgICAgc2NvcGUuaW1nQ2xpY2tlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNjb3BlLmlucHV0RWxlbVswXS5jbGljaygpOyAvLyBXYXJuaW5nIEFuZ3VsYXIgVHJpZ2dlckV2ZW50IGRvZXMgbm90IHdvcmshISFcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIFNsaWRlciBjb250cm9sIGhhbmRsZSByZWdpc3RyYXRpb24gYWZ0ZXIgY3JlYXRpb25cbiAgICAgICAgc2NvcGUuU2xpZGVySW5pdENCPWZ1bmN0aW9uIChzbGlkZXIpIHtcbiAgICAgICAgICAgc2NvcGUuc2xpZGVyPSBzbGlkZXI7IFxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgLy8gVXBsb2FkIGlzIGRlbGVnYXRlZCB0byBhIHNoYXJlZCBmdW5jdGlvblxuICAgICAgICBzY29wZS5VcExvYWRGaWxlPWZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgICAgdmFyIGhhbmRsZTsgXG4gICAgICAgICAgICB2YXIgYXBwaWNvbjtcbiAgICAgICAgICAgIHZhciB0ZW1wbGF0ZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHN1Y2Nlc3MgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIExvb2tzIE9LIGxldCdzIFBvc3QgWGZvcm0vRmlsZVxuICAgICAgICAgICAgICAgIGhhbmRsZS5wb3N0ZmlsZShhdHRycy5wb3N0dXJsICsgXCI/dG9rZW49XCIgKyBBcHBDb25maWcuc2Vzc2lvbi50b2tlbik7XG5cbiAgICAgICAgICAgICAgICBzY29wZS5tb2RhbC5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgICAgJHRpbWVvdXQgKGZ1bmN0aW9uKCkge3Njb3BlLm1vZGFsLmRlc3Ryb3koKTt9LCAxMDAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBhYmFuZG9uID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUubW9kYWwuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgICR0aW1lb3V0IChmdW5jdGlvbigpIHtzY29wZS5tb2RhbC5kZXN0cm95KCk7fSwgMTAwMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciByZWFkZXJDQiA9IGZ1bmN0aW9uICh1cGxvYWQpIHtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEZpbGUgdXBsb2FkIGZhaWwgaGFuZGxlIGVycm9yXG4gICAgICAgICAgICAgICAgaWYgKCEgdXBsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuZmlsZS5zaXplID4gc2NvcGUubWF4c2l6ZSoxMDI0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBpY29uID0gc2NvcGUuaXN0b29iaWc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZT0gdG1wbEVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oaGFuZGxlLmZpbGUuc2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGljb24gPSBzY29wZS5pc25vdHZhbGlkOyBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlPSB0bXBsRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB6aXBhcHAgPSBuZXcgSlNaaXAgKHVwbG9hZC50YXJnZXQucmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRodW1ibmFpbCA9IHppcGFwcC5maWxlKFwiaWNvbl8xMjgucG5nXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlzIHdlIGhhdmUgYSB0aHVtYm5haWwgd2l0aGluIGxvYWRlZCBaaXBmaWxlXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGh1bWJuYWlsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyAoXCJUaGlzIGlzIG5vdCBhIHZhbGlkIEFwcGxpY2F0aW9uIEZyYW1ld29yayBBUFBcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBpY29uID0gc2NvcGUuaXNub3R2YWxpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlPSB0bXBsRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vc2NvcGUuaW1nRWxlbVswXS5zcmMgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdGh1bWJuYWlsLmFzQXJyYXlCdWZmZXIoKV0sIHt0eXBlOiBcImltYWdlXCJ9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBpY29uID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3RodW1ibmFpbC5hc0FycmF5QnVmZmVyKCldLCB7dHlwZTogXCJpbWFnZVwifSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0bXBsTW9kYWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGh0dHA6Ly9mb3VuZGF0aW9uLnp1cmIuY29tL2FwcHMvZG9jcy8jIS9hbmd1bGFyLW1vZHVsZXNcbiAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25JbjogJ3NsaWRlSW5Gcm9tVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudFNjb3BlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzIDogc3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFiYW5kb24gOiBhYmFuZG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbiAgICA6IGFwcGljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBuYW1lIDogaGFuZGxlLmJhc2VuYW1lXG4gICAgICAgICAgICAgICAgICAgIH0sIHRlbXBsYXRlIDogdGVtcGxhdGVcbiAgICAgICAgICAgICAgICB9OyBcbiAgICAgICAgICAgICAgICAvLyBQb3B1cCBNb2RhbCB0byByZW5kZXIgYXBwbGljYXRpb24gZGF0YVxuICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsID0gbmV3IE1vZGFsRmFjdG9yeShjb25maWcpO1xuICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsLmFjdGl2YXRlICgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gTG9hZCBmaWxlIHdpdGhpbiBicm93c2VyIGFuZCBpZiBPSyBjYWxsIHJlYWRlckNCXG4gICAgICAgICAgICBoYW5kbGUgPSBuZXcgTG9hZEZpbGVTdmMgKHNjb3BlLCBmaWxlcywgcmVhZGVyQ0IpO1xuICAgICAgICAgICAgY29uc29sZS5sb2cgKGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSW5pdGlhbGxpemUgZGVmYXVsdCB2YWx1ZXMgZnJvbSBhdHRyaWJ1dGVzIHZhbHVlc1xuICAgICAgICBzY29wZS5uYW1lPSBhdHRycy5uYW1lIHx8ICdhcHBsaSc7XG4gICAgICAgIHNjb3BlLmNhdGVnb3J5PSBhdHRycy5jYXRlZ29yeSAgfHwgJ2FwcGxpJztcbiAgICAgICAgc2NvcGUubWltZXR5cGU9IChhdHRycy5hY2NlcHQgfHwgJy53Z3QnKTtcbiAgICAgICAgc2NvcGUubWF4c2l6ZSA9IGF0dHJzLm1heHNpemUgfHwgMTAwMDAwOyAvLyBkZWZhdWx0IG1heCBzaXplIDEwME1CXG4gICAgICAgIHNjb3BlLnJlZ2V4cCAgPSBuZXcgUmVnRXhwIChhdHRycy5hY2NlcHQrICcuKicsJ2knKTtcbiAgICAgICAgc2NvcGUuaWNvbiAgICA9IGF0dHJzLmljb24gfHwgJ2ZpLXVwbG9hZCc7XG4gICAgICAgIHNjb3BlLmxhYmVsICAgPSBhdHRycy5sYWJlbCB8fCAnVXBsb2FkJztcbiAgICAgICAgXG4gICAgICAgIGlmIChhdHRycy50aHVtYm5haWwpIHNjb3BlLmlzbm90dmFsaWQ9IEFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAgYXR0cnMuaXNub3R2YWxpZDtcbiAgICAgICAgZWxzZSAgc2NvcGUuaXNub3R2YWxpZD1BcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgJ3czYy13aWRnZXQucG5nJztcblxuICAgICAgICBpZiAoYXR0cnMuaXN0b29iaWcpIHNjb3BlLmlzdG9vYmlnPSBBcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgIGF0dHJzLmlzdG9vYmlnO1xuICAgICAgICBlbHNlICBzY29wZS5pc3Rvb2JpZz1BcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgJ2lzdG9vYmlnLnBuZyc7XG4gICAgICAgIHNjb3BlLm5vc2xpZGVyID0gYXR0cnMubm9zbGlkZXIgfHwgZmFsc2U7XG5cbiAgICAgICAgaWYgKCFhdHRycy5wb3N0dXJsKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdmaWxlLXVwbG9hZCAlcyBwb3N0dXJsPS9hcGkveHh4eC94eHh4IHJlcXVpcmVkJywgc2NvcGUuYXR0cnMpOyAgICAgICAgICAgIFxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICB0ZW1wbGF0ZTogdG1wbEFwcGxpLFxuICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgICBjYWxsYmFjayA6ICc9J1xuICAgICAgICB9XG4gICAgfTtcbiAgICBcbn1dKTtcblxuY29uc29sZS5sb2cgKFwiVXBsb2FkRmlsZSBMb2FkZWRcIik7XG59KSgpO1xuIiwiXG4vKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLi5cbiAqL1xuXG5cblxuKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG1wbCA9ICc8dGlwLW1vZGFsIHRpcD1cInRpcFwiPjwvdGlwLW1vZGFsPicgK1xuICAgICAgICAgICAnPGxhYmVsIGZvcj1cInt7bmFtZX19LWludGV4dFwiPnt7bGFiZWx9fSA8aSBuZy1zaG93PVwicmVxdWlyZWRcIiBuZy1jbGljaz1cIlRvQmVEZWZpbmVkXCIgJyArXG4gICAgICAgICAgICdjbGFzcz1cInJlcXVpcmVkIHt7c3RhdHVzfX0gZmktY2hlY2tib3hcIiB0aXRsZT1cIkZyZWUgVmFsdWUgQnV0IE1hbmRhdG9yeSBBcmd1bWVudFwiIGFsdD1cIj9cIj4gJm5ic3A7IDwvaT48L2xhYmVsPicrICAgICAgICAgIFxuICAgICAgICAgICAnPGlucHV0ICcrXG4gICAgICAgICAgICcgdHlwZT1cInt7dHlwZX19XCIgaWQ9XCJ7e25hbWV9fS1pbnRleHRcIiBwbGFjZWhvbGRlcj1cInt7cGxhY2Vob2xkZXJ9fVwiICBjbGFzcz1cInN0YXR1cy17e3N0YXR1c319XCInK1xuICAgICAgICAgICAnIG5nLW1vZGVsPVwidmFsdWVcIiBuZy1ibHVyPVwidmFsaWRhdGUoKVwiIG5nLWZvY3VzPVwic2VsZWN0ZWQoKVwiICcrXG4gICAgICAgICAgICcgbmctbW9kZWwtb3B0aW9ucz1cInsgdXBkYXRlT246IFxcJ2RlZmF1bHQgYmx1clxcJywgZGVib3VuY2U6IHtkZWZhdWx0OiA1MDAsIGJsdXI6IDB9IH1cIicgK1xuICAgICAgICAgICAnPjxhbGVydCBkYXRhLW5nLXNob3c9XCIhdmFsaWQmJmVycm1zZ1wiPnt7ZXJybXNnfX08L2FsZXJ0Pic7XG5cbnZhciBlbWFpbHBhdGVybiA9IC9eKChbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdKykqKXwoXFxcIi4rXFxcIikpQCgoW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXStcXC4pK1tePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl17Mix9KSQvaTtcblxuYW5ndWxhci5tb2R1bGUoJ0lucHV0VGV4dCcsWydKUXVlcnlFbXUnXSlcblxuLmRpcmVjdGl2ZSgnaW5wdXRUZXh0JywgW1wiSlFlbXVcIiwgZnVuY3Rpb24oSlFlbXUpIHtcbiAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgXG4gICAgLy8gZGVmYXVsdCB2YWx1ZSBhdCAxc3QgcmVuZGVyaW5nXG4gICAgc2NvcGUuZXJyb3IgID0gZmFsc2U7XG4gICAgc2NvcGUudmFsaWQgID0gZmFsc2U7XG4gICAgc2NvcGUuc3RhdHVzID0gJ3VudG91Y2gnO1xuICAgXG4gICAgc2NvcGUuaW5wdXQgPSBlbGVtLmZpbmQgKFwiaW5wdXRcIik7XG4gICAgc2NvcGUucmVxdWlyZWQgPSAwO1xuICAgIFxuICAgIC8vIHJlcXVpcmVyIGlzIHVzZSB0byBpbmNyZW1lbnQgcmVxdWVzdGVkIGNvdW50ZXJcbiAgICBpZiAoXCJyZXF1aXJlZFwiIGluIGF0dHJzKSB7XG4gICAgICAgIHNjb3BlLnJlcXVpcmVkID0gMTtcbiAgICAgICAgZWxlbS5hZGRDbGFzcyAoXCJyZXF1aXJlZFwiKTtcbiAgICB9XG4gICAgICAgXG4gICAgIC8vIHVzZXIgZW50ZXIgaW5wdXQgcmVzZXQgZXJyb3Igc3RhdHVzXG4gICAgIHNjb3BlLnNlbGVjdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzY29wZS5lcnJvcj1mYWxzZTsgXG4gICAgICAgIHNjb3BlLmVycm1zZz1mYWxzZTsgXG4gICAgICAgIHNjb3BlLnN0YXR1cyA9ICd0b3VjaCc7XG4gICAgIH07ICAgXG4gICAgICAgICAgICBcbiAgICAgc2NvcGUudmFsaWRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICBcbiAgICAgICAgIC8vIGdldCB2YWx1ZSBmcm9tIGlucHV0IGZpZWxkIGJ5cGFzc2luZyBBbmd1bGFyIG5nLW1vZGVsXG4gICAgICAgICBjb25zb2xlLmxvZyAoXCJDbGlja2VkIElucHV0VGV4dCBuYW1lPSVzIHZhbHVlPSVzIHZhbGlkPSVzXCIsIHNjb3BlLm5hbWUsIHNjb3BlLnZhbHVlLCBzY29wZS52YWxpZCk7ICAgICAgICBcblxuICAgICAgICAgLy8gZm9ybSBpcyBub3QgdW50b3VjaGVkIGFueW1vcmVcbiAgICAgICAgIHNjb3BlLnBhcmVudC5yZW1vdmVDbGFzcyAoXCJuZy1wcmlzdGluZVwiKTtcblxuICAgICAgICAgLy8gaWYgdmFsdWUgbm90IG51bGwgY2xlYW4gdXAgc3RyaW5nXG4gICAgICAgICBpZiAoc2NvcGUudmFsdWUpIHtcbiAgICAgICAgICAgICBzY29wZS5lcnJvcj1mYWxzZTsgXG4gICAgICAgICAgICAvLyByZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxsaW5nIHNwYWNlXG4gICAgICAgICAgICBzY29wZS52YWx1ZSA9IHNjb3BlLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgIFxuICAgICAgICAgICAgLy8gcmVtb3ZlIGFueSBzcGFjZSBpcyBub3QgYWxsb3dlZFxuICAgICAgICAgICAgaWYgKCdub3NwYWNlJyBpbiBhdHRycykge1xuICAgICAgICAgICAgICAgc2NvcGUudmFsdWU9c2NvcGUudmFsdWUucmVwbGFjZSgvXFxzL2csICcnKTsgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgICBcbiAgICAgICAgICAgIGlmICgnbG93ZXJjYXNlJyBpbiBhdHRycykge1xuICAgICAgICAgICAgICAgc2NvcGUudmFsdWUgPSBzY29wZS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgXG4gICAgICAgICAgICAvLyBjaGVjayBtaW5pbXVtIGxlbmdodFxuICAgICAgICAgICAgaWYgKFwibWlubGVuXCIgaW4gYXR0cnMpIHtcbiAgICAgICAgICAgICAgaWYgKHNjb3BlLnZhbHVlLmxlbmd0aCA8IGF0dHJzLm1pbmxlbikge1xuICAgICAgICAgICAgICAgICBzY29wZS5zdGF0dXM9J2ludmFsaWQnO1xuICAgICAgICAgICAgICAgICBzY29wZS5lcnJtc2c9c2NvcGUubmFtZSArICc6IE1pbmludW0gTGVuZ2g9ICcgKyBhdHRycy5taW5sZW4gKyAnIENoYXJhY3RlcnMnO1xuICAgICAgICAgICAgICAgICBzY29wZS5lcnJvcj10cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICgnZW1haWwnIGluIGF0dHJzKSB7XG4gICAgICAgICAgICBpZiAoIWVtYWlscGF0ZXJuLnRlc3QgKHNjb3BlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHNjb3BlLnN0YXR1cz0naW52YWxpZCc7XG4gICAgICAgICAgICAgICAgc2NvcGUuZXJybXNnPSdpbnZhbGlkIGVtYWlsIGFkZHJlc3MnO1xuICAgICAgICAgICAgICAgIHNjb3BlLmVycm9yPXRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICAgICBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzY29wZS5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgICBzY29wZS5zdGF0dXM9J2ludmFsaWQnO1xuICAgICAgICAgICAgICAgICBzY29wZS5lcnJtc2c9c2NvcGUubmFtZSArICc6IFJlcXVpcmVkIEF0dHJpYnV0ZSc7XG4gICAgICAgICAgICAgICAgIHNjb3BlLmVycm9yPXRydWU7IFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgIC8vIElmIGxvY2FsIGNvbnRyb2wgZmFpbCBsZXQncyByZWZ1c2UgaW5wdXRcbiAgICAgICAgIGlmIChzY29wZS5lcnJvcikge1xuICAgICAgICAgICAgIGlmIChzY29wZS5yZXF1aXJlZCAmJiBzY29wZS52YWxpZCkge1xuICAgICAgICAgICAgICAgICBzY29wZS52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICBpZiAoc2NvcGUubDRhY291bnRlci52YWxpZGF0ZWQgPiAwKSBzY29wZS5sNGFjb3VudGVyLnZhbGlkYXRlZCAtLTtcbiAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgIC8vIHVzZSBjYWxsIHRvIHVwZGF0ZSBmb3JtIHNjb3BlIG9uIGZvcm0gY29tcGxldGVuZXNzXG4gICAgICAgICAgICAgc2NvcGUuY2FsbGJhY2sgKGF0dHJzLm5hbWUsIG51bGwsIHNjb3BlLmRvbmUpO1xuICAgICAgICAgfSBlbHNlIHsgXG4gICAgICAgICAgICAgLy8gbG9jYWxjaGVjayBpcyBPSyBiYWNrdXAgbWF5IG5ldmVydGhlbGVzcyBjaGFuZ2Ugc3RhdHVzIHRvIGZhbHNlXG4gICAgICAgICAgICBpZiAoc2NvcGUucmVxdWlyZWQgICYmICFzY29wZS52YWxpZCkgc2NvcGUubDRhY291bnRlci52YWxpZGF0ZWQgKys7XG4gICAgICAgICAgICBzY29wZS5zdGF0dXM9J3ZhbGlkJztcbiAgICAgICAgICAgIHNjb3BlLnZhbGlkPXRydWU7XG4gICAgICAgICAgICBzY29wZS5jYWxsYmFjayAoYXR0cnMubmFtZSwgc2NvcGUudmFsdWUsIHNjb3BlLmRvbmUpO1xuICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICB9O1xuICAgICBcbiAgICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBmcm9tIGNvbnRyb2xsZXIgdG8gdXBkYXRlIHdpZGdldCBzdGF0dXNcbiAgICAgc2NvcGUuZG9uZT1mdW5jdGlvbiAoZGF0YSkge1xuICAgICAgIGNvbnNvbGUubG9nIChcIlRleHQtSW5wdXQgQ2FsbGJhY2sgSUQ9XCIrIGF0dHJzLm5hbWUgKyBcIiBkYXRhPVwiLCBkYXRhKTtcbiAgICAgICBmb3IgKHZhciBpIGluIGRhdGEpIHNjb3BlW2ldID0gZGF0YVtpXTsgICAgICAgICBcbiAgICAgfTtcbiAgICAgXG4gICAgIC8vIEV4cG9ydCBzb21lIGF0dHJpYnV0ZXMgd2l0aGluIGRpcmVjdGl2ZSBzY29wZSBmb3IgdGVtcGxhdGVcbiAgICAgc2NvcGUubGFiZWwgICAgICAgPSBhdHRycy5sYWJlbDtcbiAgICAgc2NvcGUubmFtZSAgICAgICAgPSBhdHRycy5uYW1lO1xuICAgICBzY29wZS5wbGFjZWhvbGRlciA9IGF0dHJzLnBsYWNlaG9sZGVyO1xuICAgICBzY29wZS50eXBlICAgICAgICA9IGF0dHJzLnR5cGUgfHwgXCJ0ZXh0XCI7XG4gICAgIHNjb3BlLnRpcCAgICAgICAgID0gYXR0cnMudGlwO1xuXG4gICAgIC8vIHNlYXJjaCBmb3IgZm9ybSB3aXRoaW4gcGFyZW50IGVsZW1udHNcbiAgICAgc2NvcGUucGFyZW50ID0gSlFlbXUucGFyZW50IChlbGVtLCBcIkZPUk1cIik7XG5cbiAgICAgLy8gZW1haWwgZW5mb3JjZSBsb3dlcmNhc2UgYW5kIG5vc3BhY2UgICBcbiAgICAgaWYgKFwiZW1haWxcIiBpbiBhdHRycykge1xuICAgICAgICBhdHRycy5sb3dlcmNhc2U9dHJ1ZTsgXG4gICAgICAgIGF0dHJzLm5vc3BhY2U9dHJ1ZTsgXG4gICAgICAgIGF0dHJzLm1pbmxlbj02OyBcbiAgICAgfVxuXG4gICAgIGlmIChzY29wZS5yZXF1aXJlZCkge1xuICAgICAgICAgc2NvcGUubDRhY291bnRlciA9IHNjb3BlLnBhcmVudC5kYXRhIChcImw0YWNvdW50ZXJcIik7XG4gICAgICAgICBpZiAoIXNjb3BlLmw0YWNvdW50ZXIpIHsgXG4gICAgICAgICAgICBzY29wZS5sNGFjb3VudGVyID0gIHtyZXF1aXJlZDoxLCB2YWxpZGF0ZWQ6MH07XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZpZWxkIFwiK3Njb3BlLm5hbWUrXCIgaXMgcmVxdWlyZWQgKDFzdClcIik7XG4gICAgICAgICAgICBzY29wZS5wYXJlbnQuZGF0YSAoXCJsNGFjb3VudGVyXCIsIHNjb3BlLmw0YWNvdW50ZXIpOyBcbiAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgY29uc29sZS5sb2coXCJGaWVsZCBcIitzY29wZS5uYW1lK1wiIGlzIHJlcXVpcmVkXCIpO1xuICAgICAgICAgICAgIHNjb3BlLmw0YWNvdW50ZXIucmVxdWlyZWQgKys7XG4gICAgICAgICB9XG4gICAgIH1cbiAgICAgICAgIFxuICAgICAvLyByZWZyZXNoIHZhbGlkYXRpb24gZWFjaCB0aW1lIGNvbnRyb2xlciB1cGRhdGUgdmFsdWVcbiAgICAgc2NvcGUuJHdhdGNoICgndmFsdWUnLCBmdW5jdGlvbigpe1xuICAgICAgICAgaWYoc2NvcGUudmFsdWUpIHNjb3BlLnZhbGlkYXRlKCk7IH1cbiAgICAgKTtcbiAgICBcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgdGVtcGxhdGU6IHRtcGwsXG4gICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAgIGNhbGxiYWNrIDogJz0nLFxuICAgICAgICAgICAgdmFsdWU6ICc9J1xuICAgICAgICB9XG4gICAgfTtcbn1dKTtcblxuY29uc29sZS5sb2cgKFwiSW5wdXRUZXh0IExvYWRlZFwiKTtcbn0pKCk7XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICovXG5cbihmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIHRtcGwgPSAnPGlucHV0LXRleHQgIGNsYXNzPVwicGFzc3dvcmRcIiB0aXA9XCJ7e3RpcDF9fVwiICBwbGFjZWhvbGRlcj1cInt7cGxhY2UxfX1cIicgK1xuICAgICAgICAgICAnbGFiZWw9XCJ7e2xhYmVsMX19XCIgY2FsbGJhY2s9XCJ2YWxpZDFcIiBuYW1lPVwie3tuYW1lfX0tMVwiIHZhbHVlPVwicGFzczFcIiByZXF1aXJlZCBtaW5sZW49XCJ7e21pbmxlbn19XCIgdHlwZT1cInBhc3N3b3JkXCIgPicgK1xuICAgICAgICAgICAnPC9pbnB1dC10ZXh0PicgKyBcbiAgICAgICAgICAgJzxpbnB1dC10ZXh0ICBjbGFzcz1cInBhc3N3b3JkXCIgdGlwPVwidGlwMlwiICBwbGFjZWhvbGRlcj1cInt7cGxhY2UyfX1cIicgK1xuICAgICAgICAgICAnbGFiZWw9XCJ7e2xhYmVsMn19XCIgY2FsbGJhY2s9XCJ2YWxpZDJcIiBuYW1lPVwie3tuYW1lfX0tMlwiIHZhbHVlPVwicGFzczJcIiByZXF1aXJlZCBtaW5sZW49XCJ7e21pbmxlbn19XCIgdHlwZT1cInBhc3N3b3JkXCIgPiAnK1xuICAgICAgICAgICAnPC9pbnB1dC10ZXh0Pic7XG5cbmFuZ3VsYXIubW9kdWxlKCdJbnB1dFBhc3N3b3JkJyxbXSlcblxuLmRpcmVjdGl2ZSgnaW5wdXRQYXNzd29yZCcsIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICBcbiAgICBzY29wZS52YWxpZDEgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgY29uc29sZS5sb2cgKFwiQ2xpY2tlZCBJbnB1dFBhc3N3b3JkMSBuYW1lPSVzIHZhbHVlPSVzXCIsIG5hbWUsIHZhbHVlKTsgICAgICAgIFxuICAgICAgICBzY29wZS5maXJzdHB3ZCA9IHZhbHVlO1xuICAgIH07XG4gICAgXG4gICAgc2NvcGUudmFsaWQyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBkb25lKSB7ICAgICAgICBcbiAgICAgICAgY29uc29sZS5sb2cgKFwiQ2xpY2tlZCBJbnB1dFBhc3N3b3JkMiBuYW1lPSVzIHZhbHVlPSVzXCIsIG5hbWUsIHZhbHVlKTsgICAgICAgIFxuICAgICAgICBcbiAgICAgICAgLy8gaWYgYm90aCBwYXNzd2QgZXF1YWwgdGhlbiBjYWxsIGZvcm0gQ0JcbiAgICAgICAgaWYgKHNjb3BlLmZpcnN0cHdkICE9PSB2YWx1ZSkge1xuICAgICAgICAgIGRvbmUoe3ZhbGlkOiBmYWxzZSwgc3RhdHVzOiAnaW52YWxpZCcsIGVycm1zZzogXCJib3RoIHBhc3N3b3JkIHNob3VsZCBtYXRjaFwifSk7ICBcbiAgICAgICAgfSBlbHNlIHsgIFxuICAgICAgICAgIHNjb3BlLmNhbGxiYWNrIChhdHRycy5uYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFxuICAgICB9O1xuICAgICBcbiAgICAgLy8gdGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBmcm9tIGNvbnRyb2xsZXIgdG8gdXBkYXRlIHdpZGdldCBzdGF0dXNcbiAgICAgc2NvcGUuZG9uZT1mdW5jdGlvbiAoZGF0YSkge1xuICAgICAgIGNvbnNvbGUubG9nIChcIlRleHQtSW5wdXQgQ2FsbGJhY2sgSUQ9XCIrIGF0dHJzLm5hbWUgKyBcIiBkYXRhPVwiLCBkYXRhKTtcbiAgICAgICBmb3IgKHZhciBpIGluIGRhdGEpIHNjb3BlW2ldID0gZGF0YVtpXTsgICAgICAgICBcbiAgICAgfTtcbiAgICAgXG4gICAgIC8vIEV4cG9ydCBzb21lIGF0dHJpYnV0ZXMgd2l0aGluIGRpcmVjdGl2ZSBzY29wZSBmb3IgdGVtcGxhdGVcbiAgICAgc2NvcGUubmFtZSAgID0gYXR0cnMubmFtZTtcbiAgICAgc2NvcGUubGFiZWwxID0gYXR0cnMubGFiZWwgfHwgJ1Bhc3N3b3JkJztcbiAgICAgc2NvcGUubGFiZWwyID0gYXR0cnMubGFiZWwgfHwgJ1Bhc3N3b3JkIFZlcmlmaWNhdGlvbic7XG4gICAgIHNjb3BlLnBsYWNlMSA9IGF0dHJzLnBsYWNlaG9sZGVyMSB8fCAnVXNlciBQYXNzd29yZCc7XG4gICAgIHNjb3BlLnRpcDEgICA9IGF0dHJzLnRpcCB8fCAnQ2hvb3NlIGEgUGFzc3dvcmQnO1xuICAgICBzY29wZS5wbGFjZTIgPSBhdHRycy5wbGFjZWhvbGRlcjEgfHwgJ1Bhc3N3b3JkIFZlcmlmaWNhdGlvbic7XG4gICAgIHNjb3BlLnRpcDIgICA9IGF0dHJzLnRpcCAgICB8fCAnQ29uZmlybWUgeW91ciBQYXNzd29yZCc7XG4gICAgIHNjb3BlLm1pbmxlbiA9IGF0dHJzLm1pbmxlbiB8fCAxMDtcbiAgICAgXG4gICAgIGlmIChcInJlcXVpcmVkXCIgaW4gYXR0cnMpIHNjb3BlLnJlcXVpcmVkID0gJ3JlcXVpcmVkJztcbiAgICAgICAgIFxuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICB0ZW1wbGF0ZTogdG1wbCxcbiAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgY2FsbGJhY2sgOiAnPScsXG4gICAgICAgIH1cbiAgICB9O1xufSk7XG5cbmNvbnNvbGUubG9nIChcIklucHV0UGFzc3dvcmQgTG9hZGVkXCIpO1xufSkoKTtcbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICogXG4gKiBCdWdzOiBJbnB1dCB3aXRoIENhbGxiYWNrIFNIT1VMRCBCRSBnZXQgJ3JlcXVpcmVkJyBjbGFzc1xuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRtcGwgPSAnPGRpdiAgbmctY2xpY2s9XCJjbGlja2VkKClcIj4nICtcbiAgICAgICAgICAgICc8aSBjbGFzcz1cInt7aWNvbn19XCI+PC9pPicgK1xuICAgICAgICAgICAgJzxzcGFuPnt7bGFiZWx9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuXG4gICAgYW5ndWxhci5tb2R1bGUoJ1N1Ym1pdEJ1dHRvbicsIFtdKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgnc3VibWl0QnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFqdXN0IGljb24gb3IgdXNlIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaWNvbiA9IGF0dHJzLmljb24gfHwgJ2ZpLWZvb3QnO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5sYWJlbCA9IGF0dHJzLmxhYmVsIHx8ICdOZXh0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBsYWJlbCBhcyBjbGFzc1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzIChzY29wZS5sYWJlbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGNsaWNrZWQgaW4gaW1wb3J0ZWQgYW5kIHdoZW4gdGVtcGxhdGUgaXMgY2xpY2tlZFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIGNhbGwgY2xpY2tlZCBtZXRob2QgcGFzc2VkIGluIHBhcmFtLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdG1wbCxcbiAgICAgICAgICAgICAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICAgICAgICAgICAgICBzY29wZToge2NsaWNrZWQgOiAnPSd9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xufSkoKTtcbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICogXG4gKiBCdWdzOiBJbnB1dCB3aXRoIENhbGxiYWNrIFNIT1VMRCBCRSBnZXQgJ3JlcXVpcmVkJyBjbGFzc1xuICovXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIHRtcGxBcHBsaSA9ICc8ZGl2ICBuZy1jbGljaz1cImNsaWNrZWQoKVwiPicgK1xuICAgICAgICAgICAgJzxpbWcgbmctc3JjPVwie3tpY29ufX1cIj4nICtcbiAgICAgICAgICAgICc8c3Bhbj57e2xhYmVsfX08L3NwYW4+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcbiAgICBcbiAgICB2YXIgdG1wbE1vZGFsID0gXG4gICAgICAgICAgICAnPGIgY2xhc3M9XCJjbG9zZS1idXR0b25cIiBuZy1jbGljaz1cImNsb3NlKClcIj7DlzwvYj4nICtcbiAgICAgICAgICAgICc8aW1nIG5nLXNyYz1cInt7aWNvbn19XCI+JyArXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtb2RhbC10ZXh0XCI+QXBwbGljYXRpb24gPGI+e3tsYWJlbH19PC9iPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8dWwgY2xhc3M9XCJ2ZXJ0aWNhbCBpY29uLWxlZnQgcHJpbWFyeSBtZW51LWJhciBhcHBsaS1tZW51LXN0YXJ0XCI+JyArXG4gICAgICAgICAgICAnPGxpIGNsYXNzPXN0YXJ0LXt7cnVuc3RhdHVzfX0+PGEgbmctY2xpY2s9YWN0aW9uKFwic3RhcnRcIik+PGkgY2xhc3M9XCJmaS1jaGVja1wiPiBTdGFydDwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8bGkgY2xhc3M9c3RvcC17e3J1bnN0YXR1c319PjxhIG5nLWNsaWNrPWFjdGlvbihcInN0b3BcIik+PGkgY2xhc3M9XCJmaS14XCI+IFN0b3A8L2k+PC9hPjwvbGk+JyArXG4gICAgICAgICAgICAnPGxpPjxhIG5nLWNsaWNrPWFjdGlvbihcImluZm9cIik+PGkgY2xhc3M9XCJmaS1pbmZvXCI+IEluZm88L2k+PC9hPjwvbGk+JyArXG4gICAgICAgICAgICAnPGxpIGNsYXNzPXN0YXJ0LXt7cnVuc3RhdHVzfX0+PGEgbmctY2xpY2s9YWN0aW9uKFwidW5pbnN0YWxsXCIpPjxpIGNsYXNzPVwiZmkteFwiPiBVbmluc3RhbGw8L2k+PC9hPjwvbGk+JyArXG4gICAgICAgICAgICAnPC91bD4nICtcbiAgICAgICAgICAgICcnO1xuICAgIFxuICAgIHZhciB0bXBsRGV0YWlsID0gXG4gICAgICAgICAgICAnPGIgY2xhc3M9XCJjbG9zZS1idXR0b25cIiBuZy1jbGljaz1cImNsb3NlKClcIj7DlzwvYj4nICtcbiAgICAgICAgICAgICc8aW1nIG5nLXNyYz1cInt7aWNvbn19XCI+JyArXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJtb2RhbC10ZXh0XCI+QXBwbGljYXRpb24gPGI+e3tsYWJlbH19PC9iPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8dWwgY2xhc3M9XCJ2ZXJ0aWNhbCBpY29uLWxlZnQgYXBwbGktbWVudS1pbmZvXCI+JyArXG4gICAgICAgICAgICAnPGxpPjxpIGNsYXNzPVwiZmktcGFwZXJjbGlwXCI+IE5hbWUgOiB7e2RldGFpbC5uYW1lfX0gPC9pPjwvbGk+JyArXG4gICAgICAgICAgICAnPGxpPjxpIGNsYXNzPVwiZmktaW5mb1wiPiBEZXNjcmlwdGlvbiB7e2RldGFpbC5kZXNjcmlwdGlvbn19PC9pPjwvbGk+JyArXG4gICAgICAgICAgICAnPGxpPjxpIGNsYXNzPVwiZmktdG9yc29cIj4gQXV0aG9yIDoge3tkZXRhaWwuYXV0aG9yfX08L2k+PC9saT4nICtcbiAgICAgICAgICAgICc8L3VsPicgK1xuICAgICAgICAgICAgJyc7XG5cbiAgICBhbmd1bGFyLm1vZHVsZSgnQXBwbGlCdXR0b24nLCBbXSlcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ2FwcGxpQnV0dG9uJywgW1wiQXBwQ29uZmlnXCIsIFwiQXBwQ2FsbFwiLCBcIk1vZGFsRmFjdG9yeVwiLCBcIk5vdGlmaWNhdGlvblwiLCBcIiR0aW1lb3V0XCIsIFwiJHdpbmRvd1wiLCBcIiRsb2NhdGlvblwiLCBcInVybHF1ZXJ5XCIsIGZ1bmN0aW9uIChBcHBDb25maWcsIEFwcENhbGwsIE1vZGFsRmFjdG9yeSwgTm90aWZpY2F0aW9uLCAkdGltZW91dCwgJHdpbmRvdywgJGxvY2F0aW9uLCB1cmxxdWVyeSkge1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5ydW5zdGF0dXMgPSBcInN0b3BcIjtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucnVubW9kZSAgID0gdXJscXVlcnkucnVubW9kZSB8fCBcImF1dG9cIjtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuY2xpY2tlZCA9IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGlmeUVycm9yID0gZnVuY3Rpb24oYWN0aW9uLCBqcmVzcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lcnJvciAoe21lc3NhZ2U6IFwiRmFpbCAvYXBpL2FmbS1tYWluXCIgKyBhY3Rpb24gKyBcIj1cIiArIHNjb3BlLmxhYmVsICsgXCIgUnVuSUQ9XCIrIHNjb3BlLmFwcElELCBkZWxheTogNTAwMH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgKFwiZmFpbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzIChcInN1Y2Nlc3NcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuY2FsbGJhY2sgKHNjb3BlLmFwcElELCBhY3Rpb24sIGpyZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RpZnlTdWNjZXNzID0gZnVuY3Rpb24gKGFjdGlvbiwganJlc3ApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzIChcImZhaWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUucnVuSUQgPSBqcmVzcC5yZXNwb25zZS5ydW5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5jYWxsYmFjayAoc2NvcGUuYXBwSUQsIGFjdGlvbiwganJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb3NlTW9kQXBwID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kQXBwLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dCAoZnVuY3Rpb24oKSB7c2NvcGUubW9kQXBwLmRlc3Ryb3koKTt9LCAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9zZU1vZEluZm8gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RJbmZvLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGltZW91dCAoZnVuY3Rpb24oKSB7c2NvcGUubW9kSW5mby5kZXN0cm95KCk7fSwgMTAwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uTW9kYWwgPSBmdW5jdGlvbihhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyAoXCJNb2RhbCBBY3Rpb249JXNcIiwgYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0YXJ0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUucnVuc3RhdHVzICE9PSBcInN0b3BcIikgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKFwiYWZtLW1haW5cIiwgXCJzdGFydFwiLCB7aWQ6IHNjb3BlLmFwcElELCBtb2RlOiBzY29wZS5ydW5tb2RlfSwgZnVuY3Rpb24oanJlc3AsIGVycmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyY29kZSAhPT0gMjAwIHx8IGpyZXNwLmp0eXBlICE9PSBcImFmYi1yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yIChcInN0YXJ0XCIsIGpyZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5ydW5zdGF0dXM9XCJzdGFydFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVN1Y2Nlc3MgKGFjdGlvbiwganJlc3ApO1xuXHRcdFx0XHRcdGlmKGpyZXNwLnJlc3BvbnNlLnVyaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUud2luYXBwPSAkd2luZG93Lm9wZW4oanJlc3AucmVzcG9uc2UudXJpLnJlcGxhY2UoXCIlaFwiLCAkbG9jYXRpb24uaG9zdCgpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0b3BcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ydW5zdGF0dXMgIT09IFwic3RhcnRcIikgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBDYWxsLmdldCAoXCJhZm0tbWFpblwiLCBcInRlcm1pbmF0ZVwiLCB7cnVuaWQ6IHNjb3BlLnJ1bklEfSwgZnVuY3Rpb24oanJlc3AsIGVycmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyY29kZSAhPT0gMjAwIHx8IGpyZXNwLmp0eXBlICE9PSBcImFmYi1yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yIChcInN0b3BcIiwganJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnJ1bnN0YXR1cz1cInN0b3BcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBhIHJlbW90ZSB3aW5kb3cgYXBwIHdhcyBvcGVuIGxldCdzIGNsb3NlIGl0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLndpbmFwcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIkNsb3NpbmcgQXBwbGljYXRpb24gV2luZG93IGxhYmVsPSVzIGlkPSVzXCIsIHNjb3BlLmxhYmVsLCBzY29wZS5hcHBJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUud2luYXBwLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUud2luYXBwPWZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlTdWNjZXNzIChhY3Rpb24sIGpyZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJpbmZvXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBDYWxsLmdldCAoXCJhZm0tbWFpblwiLCBcImRldGFpbFwiLCB7aWQ6IHNjb3BlLmFwcElEfSwgZnVuY3Rpb24oanJlc3AsIGVycmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyY29kZSAhPT0gMjAwIHx8IGpyZXNwLmp0eXBlICE9PSBcImFmYi1yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yIChcImRldGFpbFwiLCBqcmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGh0dHA6Ly9mb3VuZGF0aW9uLnp1cmIuY29tL2FwcHMvZG9jcy8jIS9hbmd1bGFyLW1vZHVsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25JbjogJ3NsaWRlSW5Gcm9tVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFNjb3BlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSAgIDogY2xvc2VNb2RJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbiAgICA6IHNjb3BlLmljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCAgIDogc2NvcGUuYXBwSUQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWwgIDoganJlc3AucmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGVtcGxhdGUgOiB0bXBsRGV0YWlsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9wdXAgTW9kYWwgdG8gcmVuZGVyIGFwcGxpY2F0aW9uIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RJbmZvID0gbmV3IE1vZGFsRmFjdG9yeShjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZEluZm8uYWN0aXZhdGUgKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInVuaW5zdGFsbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLnJ1bnN0YXR1cyAhPT0gXCJzdG9wXCIpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcENhbGwuZ2V0IChcImFmbS1tYWluXCIsIFwidW5pbnN0YWxsXCIsIHtpZDogc2NvcGUuYXBwSUR9LCBmdW5jdGlvbihqcmVzcCwgZXJyY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJjb2RlICE9PSAyMDAgfHwganJlc3AuanR5cGUgIT09IFwiYWZiLXJlcGx5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RXJyb3IgKFwidW5pbnN0YWxsXCIsIGpyZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlTdWNjZXNzIChhY3Rpb24sIGpyZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIkFjdGlvbk1vZGFsIHVua25vd24gYWN0aW9uPVslc11cIiwgYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZU1vZEFwcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGh0dHA6Ly9mb3VuZGF0aW9uLnp1cmIuY29tL2FwcHMvZG9jcy8jIS9hbmd1bGFyLW1vZHVsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uSW46ICdzbGlkZUluRnJvbVRvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFNjb3BlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiAgIDogYWN0aW9uTW9kYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnN0YXR1czogc2NvcGUucnVuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSAgICA6IGNsb3NlTW9kQXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uICAgICA6IHNjb3BlLmljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgIDogc2NvcGUubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0ZW1wbGF0ZSAgOiB0bXBsTW9kYWxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07IFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9wdXAgTW9kYWwgdG8gcmVuZGVyIGFwcGxpY2F0aW9uIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZEFwcCA9IG5ldyBNb2RhbEZhY3RvcnkoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZEFwcC5hY3RpdmF0ZSAoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBleHRyYWN0IGFwcGxpY2F0aW9uIGluZm9ybWF0aW9uIGZyb20gQXBwSUQrU3RvcmVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJzLmhhbmRsZSAmJiBzY29wZS5zdG9yZSBbYXR0cnMuaGFuZGxlXS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uICA9IEFwcENvbmZpZy5wYXRocy5pY29ucyArIGF0dHJzLmhhbmRsZTsgLy9zY29wZS5zdG9yZSBbYXR0cnMuaGFuZGxlXS5uYW1lLnRvTG93ZXJDYXNlKCkgKyAnLWljby5wbmcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBzY29wZS5zdG9yZSBbYXR0cnMuaGFuZGxlXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuYXBwSUQ9IGF0dHJzLmhhbmRsZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uICA9IEFwcENvbmZpZy5wYXRocy5pY29ucyArICd3M2MtaWNvLnBuZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBhdHRycy5oYW5kbGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBsYWJlbCBhcyBjbGFzc1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzIChzY29wZS5sYWJlbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGNsaWNrZWQgaW4gaW1wb3J0ZWQgYW5kIHdoZW4gdGVtcGxhdGUgaXMgY2xpY2tlZFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIGNhbGwgY2xpY2tlZCBtZXRob2QgcGFzc2VkIGluIHBhcmFtLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdG1wbEFwcGxpLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7Y2FsbGJhY2s6ICc9Jywgc3RvcmU6ICc9J31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfV0pO1xufSkoKTtcbiIsIihmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gV0FSTklORzogbWFrZSBzdXJlIHRoYW4gYXBwL2Zyb250ZW5kL3NlcnZpY2VzL0FwcENvbmZpZy5qcyBtYXRjaCB5b3VyIHNlcnZlclxuXG4vLyBsaXN0IGFsbCByZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBwYWdlICsgY29udHJvbGVyIGlmIG5lZWRlZFxuYW5ndWxhci5tb2R1bGUoJ0Rhc2hib2FyZE1vZHVsZScsIFsnU3VibWl0QnV0dG9uJywgJ1Rva2VuUmVmcmVzaCcsICdBcHBsaUJ1dHRvbiddKVxuXG4gIC5jb250cm9sbGVyKCdEYXNoYm9hcmRDb250cm9sbGVyJywgW1wiQXBwQ2FsbFwiLCBcIk5vdGlmaWNhdGlvblwiLCBmdW5jdGlvbiAoQXBwQ2FsbCwgTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7IC8vIEkgaGF0ZSBKYXZhU2NyaXB0XG4gICAgICAgIHNjb3BlLnV1aWQgICA9XCJub25lXCI7XG4gICAgICAgIHNjb3BlLnRva2VuICA9XCJub25lXCI7XG4gICAgICAgIHNjb3BlLnNlc3Npb249XCJub25lXCI7XG4gICAgICAgIHNjb3BlLnN0YXR1cyA9XCJlcnItbm9cIjtcbiAgICAgICAgc2NvcGUuYXBwbGlJRHMgPVtdOyAvLyBhcnJheSB0byBob2xkIGFwcGxpY2F0aW9ucyBJRFxuICAgICAgICBzY29wZS5hcHBsaVN0b3JlPXt9OyAvLyBhcnJheSB0byBob2xkIGFwcGxpY2F0aW9ucyBqc29uIGRlc2NyaXB0aW9uXG5cbiAgICAgICBcbiAgICAgICAgc2NvcGUuQXBwbGlDQiA9IGZ1bmN0aW9uKGFwcGxpSUQsIGFjdGlvbiwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBBY3Rpb24gaXMgZG9uZSB3aXRoaW4gV2lkZ2V0IENvbnRyb2xsZXIgb25seSB1cGRhdGUgZGVidWcgVUkgem9uZVxuICAgICAgICAgICAgICAgIHNjb3BlLnJlcXVlc3QgID0gYWN0aW9uOyBcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJjb2RlICA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkgc2NvcGUucmVzcG9uc2UgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIE9uIGFwcCB3YXMgcmVtb3ZlZCBsZXQncyB1cGRhdGUgcnVubmFibGUgbGlzdFxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09IFwidW5pbnN0YWxsXCIpICBzY29wZS5HZXRSdW5uYWJsZXMoKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNjb3BlLkdldFJ1bm5hYmxlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiRGFzaGJvYXJkIEdldFJ1bm5hYmxlc1wiKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKFwiYWZtLW1haW5cIiwgXCJydW5uYWJsZXNcIiwgey8qcXVlcnkqL30sIGZ1bmN0aW9uKGpyZXNwLCBlcnJjb2RlKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGRlYnVnIFVJIHpvbmVcbiAgICAgICAgICAgICAgICBzY29wZS5yZXF1ZXN0ICA9IFwiL2FwaS9hZm0tbWFpbi9ydW5uYWJsZVwiOyBcbiAgICAgICAgICAgICAgICBzY29wZS5yZXNwb25zZSA9IGpyZXNwLnJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIHNjb3BlLmVycmNvZGUgID0ganJlc3AucmVxdWVzdC5zdGF0dXM7XG5cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgcmVzcG9uc2UgZnJvbSBBR0wgYXBwbGljYXRpb24gZnJhbWV3b3JrIGJpbmRlclxuICAgICAgICAgICAgICAgIGlmIChqcmVzcC5qdHlwZSAhPT0gXCJhZmItcmVwbHlcIikge1xuICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVycm9yICh7bWVzc2FnZTogXCJJbnZhbGlkIFJlc3BvbmQgdG8gL29wYS9hZm0tbWFpbi9ydW5uYWJsZSByZXNwb25zZS5kYXRhPVwiK3Jlc3BvbnNlLmRhdGEsIGRlbGF5OiA1MDAwfSk7IFxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBzdWNjZXNzXG4gICAgICAgICAgICAgICAgaWYgKGpyZXNwLnJlcXVlc3Quc3RhdHVzICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uZXJyb3IgKHttZXNzYWdlOiBcImFmbS1tYWluL3J1bm5hYmxlXCIgKyBqcmVzcC5yZXF1ZXN0LmluZm8sIGRlbGF5OiA1MDAwfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIGxvb3Agb24gcnVubmFibGUgYXBwbGljYXRpb24gdG8gcHJlcGFyZSBmb3IgZGlzcGxheVxuICAgICAgICAgICAgICAgIHZhciAgYXBwbGlJRHM9W107XG4gICAgICAgICAgICAgICAgdmFyICBydW5uYWJsZXMgPSBqcmVzcC5yZXNwb25zZS5ydW5uYWJsZXM7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaWR4PTA7IGlkeCA8IHJ1bm5hYmxlcy5sZW5ndGg7IGlkeCArKykge1xuICAgICAgICAgICAgICAgICAgICBhcHBsaUlEc1tpZHhdID0gcnVubmFibGVzIFtpZHhdLmlkO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5hcHBsaVN0b3JlIFtydW5uYWJsZXMgW2lkeF0uaWRdID0gIHJ1bm5hYmxlcyBbaWR4XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2NvcGUuYXBwbGlJRHMgPSBhcHBsaUlEczsgLy8gYXZvaWQgcGFydGlhbCB1cGRhdGUgdG8gbGltaXQgVUkgcmVmcmVzaFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzY29wZS5GaWxlVXBsb2FkZWQgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nIChcImZpbGUgVXBsb2FkZWRcIik7XG4gICAgICAgICAgICAvLyBDYW5ub3QgZGlzcGxheSBwb3N0IHJlc3VsdHMgYXMgR2V0UnVubmFibGUgd2lsbCBvdmVybG9hZCB0aGVtIGF5bmNocm9ub3VzbHlcbiAgICAgICAgICAgIHNjb3BlLnJlcXVlc3QgID0gXCIvYXBpL2FmbS1tYWluL2luc3RhbGxcIjsgXG4gICAgICAgICAgICBzY29wZS5yZXNwb25zZSA9IHJlc3BvbnNlLmhlYWRlcnM7XG4gICAgICAgICAgICBzY29wZS5lcnJjb2RlICA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gZXZlcnl0aGluZyBsb29rcyBPSyB1cGRhdGUgYXBwIGxpc3RcbiAgICAgICAgICAgIHNjb3BlLkdldFJ1bm5hYmxlcygpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2NvcGUuQXV0b1N0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiQXV0b1N0YXJ0IHJlcXVlc3RpbmcgQXBwcyBsaXN0XCIpO1xuICAgICAgICAgICAgc2NvcGUuR2V0UnVubmFibGVzKCk7XG4gICAgICAgIH07XG4gICAgICAgICAgXG4gICB9XSk7XG5cbmNvbnNvbGUubG9nIChcIkRhc2hib2FyZCBDb250cm9sbGVyIExvYWRlZFwiKTtcbn0pKCk7IFxuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqIFxuICogVXNhZ2U6XG4gKiBcbiAqICAgLy8gbW91c2UgZXZlbnQgcHJvYmFibHkgcG9pbnQgb24gaWNvbiBhbmQgbm90IG9uIGJ1dHRvbiBkaXZcbiAqICAgLi4uIG5nLWNsaWNrPVwiTG9ja0NoYW5uZWwoJGV2ZW50KVxuICAgICB2YXIgdGFyZ2V0PSBhbmd1bGFyLmVsZW1lbnQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgIHZhciBidXR0b249IEpRZW11LkZpbmRJblBhcmVudCAodGFyZ2V0LCAnZGl2Jyk7XG4gKiBcbiAqL1xuXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICAgICAgICBcbiAgICAvLyBfYWxsIG1vZHVsZXMgb25seSByZWZlcmVuY2UgZGVwZW5kZW5jaWVzXG4gICAgYW5ndWxhci5tb2R1bGUoJ0pRdWVyeUVtdScsIFtdKVxuXG4gICAgICAgICAgICAvLyBGYWN0b3J5IGlzIGEgc2luZ2xldG9uIGFuZCBzaGFyZSBpdHMgY29udGV4dCB3aXRoaW4gYWxsIGluc3RhbmNlcy5cbiAgICAgICAgICAgIC5mYWN0b3J5KCdKUWVtdScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIHZhciBGaW5kSW5QYXJlbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBzZWxlY3Rvci50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50WzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoID09PSBwYXJlbnRbMF0udGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAvLyBIVE1MRGl2RWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciAgRmluZEJ5VGFnPSBmdW5jdGlvbiAoZWxlbWVudCwgdGFnLCBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gc2VsZWN0b3IudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgICA9IHRhZy50b0xvd2VyQ2FzZSgpKyBcIk5hbWVcIjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggPT09IGNoaWxkcmVuWzBdW3R5cGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSAgLy8gSFRNTERpdkVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciAgRmluZEJ5Q2xhc3M9IGZ1bmN0aW9uIChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gc2VsZWN0b3IudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5oYXNDbGFzcyhzZWFyY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSAgLy8gSFRNTERpdkVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG15TWV0aG9kcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgRmluZEluUGFyZW50OiBGaW5kSW5QYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIEZpbmRCeVRhZzogRmluZEJ5VGFnLFxuICAgICAgICAgICAgICAgICAgICBGaW5kQnlDbGFzczogRmluZEJ5Q2xhc3NcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG15TWV0aG9kcztcbiAgICAgICAgICAgIH0pO1xuXG59KSgpOyIsInZhciBmb3VuZGF0aW9uUm91dGVzID0gW3tcIm5hbWVcIjpcIkRhc2hib2FyZFwiLFwidXJsXCI6XCIvZGFzaGJvYXJkXCIsXCJjb250cm9sbGVyXCI6XCJEYXNoYm9hcmRDb250cm9sbGVyIGFzIGN0cmxcIixcImFuaW1hdGlvbkluXCI6XCJzbGlkZUluUmlnaHRcIixcInBhdGhcIjpcInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuaHRtbFwifV07IFxuIiwiKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvLyBfYWxsIG1vZHVsZXMgb25seSByZWZlcmVuY2UgZGVwZW5kZW5jaWVzXG4gICAgYW5ndWxhci5tb2R1bGUoJ0FwcENvbmZpZycsIFtdKVxuICAgIFxuICAgICAgICAgICAgLy8gRmFjdG9yeSBpcyBhIHNpbmdsZXRvbiBhbmQgc2hhcmUgaXRzIGNvbnRleHQgd2l0aGluIGFsbCBpbnN0YW5jZXMuXG4gICAgICAgICAgICAuZmFjdG9yeSgnQXBwQ29uZmlnJywgW1widXJscXVlcnlcIiwgZnVuY3Rpb24gKHVybHF1ZXJ5KSB7XG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyAoXCJVUkw9XCIrICRsb2NhdGlvbi51cmwoKSArIFwiIFF1ZXJ5PVwiICsgbG9jYXRpb24uaHJlZisgXCIgd2luZG93PVwiICsgZG9jdW1lbnQucmVmZXJyZXIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG15Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHsgLy8gV2FybmluZyBwYXRocyBzaG91bGQgZW5kIHdpdGggL1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgOiAnaW1hZ2VzLycsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucyA6ICcvaWNvbnMvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YXRhcjogJ2ltYWdlcy9hdmF0YXJzLycsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdWRpbyA6ICdpbWFnZXMvYXVkaW8vJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpIDogJ2ltYWdlcy9hcHBsaS8nXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb246IHsgLy8gVGhvc2UgZGF0YSBhcmUgdXBkYXRlZCBieSBzZXNzaW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA6IHVybHF1ZXJ5LnRva2VuIHx8ICcxMjM0NTY3ODknLCAgLy8gdHlwaWNhbCBkZXYgaW5pdGlhbCB0b2tlblxuICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0IDogMzYwMCwgICAgICAgICAvLyB0aW1lb3V0IGlzIHVwZGF0ZWQgY2xpZW50IHNlc3NpbiBjb250ZXh0IGNyZWF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgIHBpbmdyYXRlOiAxNSwgICAgICAgICAgIC8vIFBpbmcgcmF0ZSB0byBjaGVjayBpZiBzZXJ2ZXIgaXMgc3RpbGwgYWxpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAgICA6ICcnLCAgICAgICAgICAgLy8gdXVpZCBtYXAgd2l0aCBjb29raWUgb3IgbG9uZyB0ZXJtIHNlc3Npb24gYWNjZXNzIGtleVxuICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiAgIDogJycgICAgICAgICAgICAvLyB3aWxsIGJlIHJldHVybmVkIGZyb20gYXV0aGVudGljYXRpb24gICAgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG15Q29uZmlnO1xuICAgICAgICAgICAgfV0pXG5cbiAgICAgICAgICAgLy8gRmFjdG9yeSBpcyBhIHNpbmdsZXRvbiBhbmQgc2hhcmUgaXRzIGNvbnRleHQgd2l0aGluIGFsbCBpbnN0YW5jZXMuXG4gICAgICAgICAgICAuZmFjdG9yeSgnQXBwQ2FsbCcsIFtcIiRodHRwXCIsIFwiQXBwQ29uZmlnXCIsIFwiJGxvZ1wiLCBmdW5jdGlvbiAoJGh0dHAsIEFwcENvbmZpZywgJGxvZykge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciBteUNhbGxzID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQgOiBmdW5jdGlvbihwbHVnaW4sIGFjdGlvbiwgcXVlcnksIGNicmVzcG9uc2UsIGNiZXJyb3IpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uZXJyb3IgPSBmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYmVycm9yKSBjYmVycm9yKHJlc3BvbnNlLmRhdGEsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UuY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNicmVzcG9uc2UocmVzcG9uc2UuZGF0YSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5jb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uc3VjY2VzcyA9ZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmRhdGEgfHwgIXJlc3BvbnNlLmRhdGEucmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVycm9yIChyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3Q9cmVzcG9uc2UuZGF0YS5yZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRva2VuIHdhcyB1cGRhdGVkIGtlZXAgaXQgd2l0aGluIGFwcGxpY2F0aW9uIGNhY2hlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QudG9rZW4pIEFwcENvbmZpZy5zZXNzaW9uLnRva2VuID0gcmVxdWVzdC50b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC51dWlkKSAgQXBwQ29uZmlnLnNlc3Npb24udXVpZCAgPSByZXF1ZXN0LnV1aWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QudGltZW91dCkgQXBwQ29uZmlnLnNlc3Npb24udGltZW91dCA9IHJlcXVlc3QudGltZW91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNicmVzcG9uc2UocmVzcG9uc2UuZGF0YSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5jb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXF1ZXJ5LnRva2VuKSBxdWVyeS50b2tlbiA9IEFwcENvbmZpZy5zZXNzaW9uLnRva2VuOyAvLyBhZGQgdG9rZW4gdG8gcHJvdmlkZWQgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXVlcnkucmVxaWQpIHF1ZXJ5LnJlcWlkID0gYWN0aW9uOyAvLyB1c2UgYWN0aW9uIGFzIGRlZmF1bHQgcmVxdWVzdElEXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlPSAkaHR0cC5nZXQoJy9hcGkvJyArIHBsdWdpbiArICcvJyArIGFjdGlvbiAsIHtwYXJhbXM6IHF1ZXJ5fSkudGhlbihvbnN1Y2Nlc3MsIG9uZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBteUNhbGxzO1xuICAgICAgICAgICAgfV0pO1xufSkoKTtcbiIsIihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBcbiAgICBmdW5jdGlvbiAgUGFyc2VRdWVyeVN0cmluZyAoKSB7XG4gICAgICB2YXIgcWQgPSB7fTtcbiAgICAgIGxvY2F0aW9uLnNlYXJjaC5zdWJzdHIoMSkuc3BsaXQoXCImXCIpLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgIHZhciBrID0gaXRlbS5zcGxpdChcIj1cIilbMF07XG4gICAgICAgICAgdmFyIHYgPSBkZWNvZGVVUklDb21wb25lbnQoaXRlbS5zcGxpdChcIj1cIilbMV0pOyBcbiAgICAgICAgICBpZiAoayBpbiBxZCkgcWRba10ucHVzaCh2KTsgZWxzZSBxZFtrXSA9IFt2XTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHFkO1xuICAgIH1cblxuICBhbmd1bGFyLm1vZHVsZSgnQUZCY2xpZW50JywgWyAvLyBXYXJuaW5nOiBBcHBuYW1lIHNob3VsZCBmaXQgd2l0aCBndWxwZmlsZS5qcyAmIGluZGV4Lmh0bWxcbiAgICAndWkucm91dGVyJyxcbiAgICAnbmdBbmltYXRlJyxcblxuICAgIC8vZm91bmRhdGlvblxuICAgICdmb3VuZGF0aW9uJyxcbiAgICAnZm91bmRhdGlvbi5keW5hbWljUm91dGluZycsXG4gICAgJ2ZvdW5kYXRpb24uZHluYW1pY1JvdXRpbmcuYW5pbWF0aW9ucycsXG4gICAgXG4gICAgLy8gZXh0ZXJuYWwgY29tcG9uZW50c1xuICAgICd1aS1ub3RpZmljYXRpb24nLFxuICAgIFxuICAgIC8vIEFwcGxpY2F0aW9uIENvbXBvbmVudHNcbiAgICAnQXBwQ29uZmlnJyxcbiAgICAnSlF1ZXJ5RW11JyxcbiAgICAnRGFzaGJvYXJkTW9kdWxlJyxcbiAgICAnVXBsb2FkRmlsZXMnLFxuICAgICdMaW5rQnV0dG9uJyxcbiAgICAnVG9rZW5SZWZyZXNoJyxcbiAgICAnUmFuZ2VTbGlkZXInLFxuICAgICdNb2RhbE5vdGlmaWNhdGlvbidcbiAgXSlcbiAgICAudmFsdWUgKCd1cmxxdWVyeScsIFBhcnNlUXVlcnlTdHJpbmcoKSlcbiAgICAuY29uZmlnKGNvbmZpZylcbiAgICAucnVuKHJ1bilcbiAgO1xuXG4gIGNvbmZpZy4kaW5qZWN0ID0gWyckdXJsUm91dGVyUHJvdmlkZXInLCAnJGxvY2F0aW9uUHJvdmlkZXInXTtcbiAgXG4gIGZ1bmN0aW9uIGNvbmZpZygkdXJsUHJvdmlkZXIsICRsb2NhdGlvblByb3ZpZGVyLCBBcHBDb25maWcpIHtcbiAgICAkdXJsUHJvdmlkZXIub3RoZXJ3aXNlKCcvZGFzaGJvYXJkJyk7XG5cbiAgICAvLyBodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9lcnJvci8kbG9jYXRpb24vbm9iYXNlXG4gICAgJGxvY2F0aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRydWUpLmhhc2hQcmVmaXgoJyEnKTtcbiAgICBcbiAgfVxuXG4gIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICBGYXN0Q2xpY2suYXR0YWNoKGRvY3VtZW50LmJvZHkpO1xuICB9XG4gIFxuLy8gRm9uZGF0aW9uLWFwcC50ZW1wbGF0ZSBpcyBub3QgaW5jbHVkZWQgY29ycmVjdGx5IGJ5IGd1bHAgXG4vLyBJbmNsdWRlIGhlcmUgbWlzc2luZyB0ZW1wbGF0ZXMgZnJvbSBmb3VuZGF0aW9uLWFwcHMvZGlzdC9qcy9mb3VuZGF0aW9uLWFwcHMtdGVtcGxhdGVzLmpzXG5hbmd1bGFyLm1vZHVsZSgnZm91bmRhdGlvbicpLnJ1bihbJyR0ZW1wbGF0ZUNhY2hlJywgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KCdjb21wb25lbnRzL21vZGFsL21vZGFsLmh0bWwnLFxuICAgICc8ZGl2XFxuJyArXG4gICAgJyAgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcXG4nICtcbiAgICAnICBuZy1jbGljaz1cImhpZGVPdmVybGF5KClcIj5cXG4nICtcbiAgICAnICA8YXNpZGVcXG4nICtcbiAgICAnICAgIGNsYXNzPVwibW9kYWxcIlxcbicgK1xuICAgICcgICAgbmctY2xpY2s9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCJcXG4nICtcbiAgICAnICAgIG5nLXRyYW5zY2x1ZGU+XFxuJyArXG4gICAgJyAgPC9hc2lkZT5cXG4nICtcbiAgICAnPC9kaXY+XFxuJyArXG4gICAgJycpO1xufV0pO1xuXG5jb25zb2xlLmxvZyAoXCJvcGE9QUZCY2xpZW50IExvYWRlZFwiKTtcbn0pKCk7XG4iLCIoZnVuY3Rpb24oKSB7YW5ndWxhci5tb2R1bGUoJ0FGQmNsaWVudCcpLnJ1bihbJyR0ZW1wbGF0ZUNhY2hlJywgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHskdGVtcGxhdGVDYWNoZS5wdXQoJ3BhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuaHRtbCcsXG4gICAgJzxoMz48aW1nIGNsYXNzPVwibG9nb1wiIHNyYz1cImltYWdlcy9sb2dvL3RyaXNrZWxfaW90X2J6aHgyNTAucG5nXCIgYWx0PVwiSW9ULmJ6aCBMb2dvXCIgc3R5bGU9XCJoZWlnaHQ6MTUwcHhcIj4gQXBwbGljYXRpb24gRnJhbWV3b3JrIE1hbmFnZXIgU2ltcGxlIENsaWVudDwvaDM+PGRpdiBjbGFzcz1cImJ1dHRvbi1ib3ggYm94LWNvbnRlbnRcIj48YXBwbGktYnV0dG9uIG5nLXJlcGVhdD1cImFwcGxpSUQgaW4gY3RybC5hcHBsaUlEc1wiIHN0b3JlPVwiY3RybC5hcHBsaVN0b3JlXCIgaGFuZGxlPVwie3thcHBsaUlEfX1cIiBjYWxsYmFjaz1cImN0cmwuQXBwbGlDQlwiPjwvYXBwbGktYnV0dG9uPjx1cGxvYWQtYXBwbGkgY2xhc3M9XCJpYnotcmlnaHRcIiBsYWJlbD1cIlVwbG9hZFwiIG5hbWU9XCJ3aWRnZXRcIiBpY29uPVwiZmktdXBsb2FkXCIgcG9zdHVybD1cIi9hcGkvYWZtLW1haW4vaW5zdGFsbFwiIGNhbGxiYWNrPVwiY3RybC5GaWxlVXBsb2FkZWRcIiB0aXRsZT1cIlVwbG9hZCBBR0wgQXBwXCI+PC91cGxvYWQtYXBwbGk+PC9kaXY+PGRpdiBjbGFzcz1cIm1lc3NhZ2UtYm94IGJveC1jb250ZW50IHZlcnRpY2FsIGdyaWQtZnJhbWVcIj48ZGl2IGNsYXNzPVwicmVzcG9uc2VcIj48c3BhbiBjbGFzcz1cImdyaWQtY29udGVudCBub3Njcm9sbCByZXEge3tjdHJsLnN0YXR1c319XCI+cmVxPSB7e2N0cmwucmVxdWVzdH19PC9zcGFuPiA8c3BhbiBjbGFzcz1cImdyaWQtY29udGVudCBub3Njcm9sbCByZXMge3tjdHJsLnN0YXR1c319XCI+cmVzPSB7e2N0cmwucmVzcG9uc2V9fTwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJncmlkLWNvbnRlbnQgbm9zY3JvbGwgc3RhdHVzIHt7Y3RybC5zdGF0dXN9fVwiPnN0YXR1cz0ge3tjdHJsLmVycmNvZGV9fTwvc3Bhbj48L2Rpdj48L2Rpdj48dG9rZW4tcmVmcmVzaCBhdXRvbG9nPVwidHJ1ZVwiIGNhbGxiYWNrPVwiY3RybC5BdXRvU3RhcnRcIj48L3Rva2VuLXJlZnJlc2g+Jyk7fV0pO1xufSkoKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +!function(){"use strict";function e(e){var t=[],a=[];this.getId=function(){return e.sliderid},this.getCbHandle=function(){return e.cbhandle},this.getView=function(n){return n||(n=0),e.value[n]===t[n]?a[n]:(t[n]=e.value[n],e.formatter?a[n]=e.formatter(e.value[n],e.ctrlhandle):a[n]=e.value[n],a[n])},this.updateClass=function(t,a){e.updateClass(t,a)},this.forceRefresh=function(t){e.forceRefresh(t)},this.getValue=function(t){return t||(t=0),e.value[t]},this.getRelative=function(t){return t||(t=0),e.relative[t]},this.setValue=function(t,a){a||(a=0),e.setValue(t,a)},this.setDisable=function(t){e.setDisable(t)}}var t=angular.module("RangeSlider",[]);t.directive("rangeSlider",["$log","$document","$timeout",function(t,a,n){function i(t,i,s,l){t.initWidget=function(e){e.byStep&&(t.byStep=parseInt(e.byStep)),e.notMore&&(t.notMore=parseInt(e.notMore)),e.notLess&&(t.notLess=parseInt(e.notLess)),e.id&&(t.sliderid=e.id),void 0!==e.value&&(t.value=e.value,t.forceRefresh(50))},t.forceRefresh=function(e){var a=t.value;t.value=[void 0,void 0],n(function(){t.setValue(a[0],0),t.dual&&t.setValue(a[1],1)},e)},t.updateClass=function(e,t){t?i.addClass(e):i.removeClass(e)},t.setDisable=function(e){e?(i.addClass("disable"),t.handles[0].css("visibility","hidden"),t.dual&&t.handles[1].css("visibility","hidden")):(i.removeClass("disable"),t.handles[0].css("visibility","visible"),t.dual&&t.handles[1].css("visibility","visible"))},t.normalize=function(e){var a,n=t.notMore-t.notLess,i=e*n;if(t.byStep>0){var s=(i-i%t.byStep)/t.byStep,l=i%t.byStep,o=l>=.5*t.byStep?t.byStep:0;return a=s*t.byStep+o+t.notLess}if(t.byStep<0){var r=Math.pow(10,-1*t.byStep);return a=t.notLess+parseInt(i*r)/r}return i},t.getValue=function(e,a){t.vertical?t.relative[a]=(e-t.bounds.handles[a].getBoundingClientRect().height)/(t.bounds.bar.getBoundingClientRect().height-t.bounds.handles[a].getBoundingClientRect().height):t.relative[a]=e/(t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[a].getBoundingClientRect().width);var n=t.normalize(t.relative[a]);n!==t.value[a]&&(n<t.startValue&&(n=t.startValue),n>t.stopValue&&(n=t.stopValue),t.formatter?t.viewValue=t.formatter(n,t.ctrlhandle):t.viewValue=n,t.displays[a]&&t.displays[a].html(t.viewValue),t.value[a]=n,l&&l.$setViewValue(t.viewValue),t.$apply(),n>t.startValue&&n<t.stopValue&&t.translate(e,a))},t.setStart=function(e){var a;e>t.value[0]&&(t.dual?t.setValue(e,1):t.setValue(e,0)),t.vertical?(a=t.bounds.bar.getBoundingClientRect().height*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("height",a+"px")):(a=t.bounds.bar.getBoundingClientRect().width*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("width",a+"px")),t.startValue=e},t.setStop=function(e){var a;e<t.value[0]&&(t.dual?t.setValue(e,1):t.setValue(e,0)),t.vertical?(a=t.bounds.bar.getBoundingClientRect().height*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("height",a+"px")):(a=t.bounds.bar.getBoundingClientRect().width*(e-t.notLess)/(t.notMore-t.notLess),t.stop.css({right:0,width:t.bounds.bar.getBoundingClientRect().width-a+"px"})),t.stopValue=e},t.translate=function(e,a){var n;if(t.vertical){var i=t.bounds.bar.getBoundingClientRect().height-e;if(t.handles[a].css({"-webkit-transform":"translateY("+i+"px)","-moz-transform":"translateY("+i+"px)","-ms-transform":"translateY("+i+"px)","-o-transform":"translateY("+i+"px)",transform:"translateY("+i+"px)"}),t.dual){if(t.relative[1]&&t.relative[0]){var s=(t.relative[1]-t.relative[0])*t.bounds.bar.getBoundingClientRect().height;n=t.relative[0]*t.bounds.bar.getBoundingClientRect().height,t.slider.css({bottom:n+"px",height:s+"px"})}}else t.slider.css("height",e+"px")}else if(t.handles[a].css({"-webkit-transform":"translateX("+e+"px)","-moz-transform":"translateX("+e+"px)","-ms-transform":"translateX("+e+"px)","-o-transform":"translateX("+e+"px)",transform:"translateX("+e+"px)"}),t.dual){if(t.relative[1]&&t.relative[0]){var l=(t.relative[1]-t.relative[0])*t.bounds.bar.getBoundingClientRect().width;n=t.relative[0]*t.bounds.bar.getBoundingClientRect().width,t.slider.css({left:n+"px",width:l+"px"})}}else t.slider.css("width",e+"px")},t.setValue=function(e,a){var n;e!==t.value[a]&&(void 0===e&&(e=0),e>t.notMore&&(e=t.notMore),e<t.notLess&&(e=t.notLess),t.vertical?(t.relative[a]=(e-t.notLess)/(t.notMore-t.notLess),0===a&&(n=t.relative[a]*t.bounds.bar.getBoundingClientRect().height+t.bounds.handles[a].getBoundingClientRect().height/2),1===a&&(n=t.relative[a]*t.bounds.bar.getBoundingClientRect().height)):(t.relative[a]=(e-t.notLess)/(t.notMore-t.notLess),n=t.relative[a]*(t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[a].getBoundingClientRect().width)),t.translate(n,a),t.value[a]=e,t.formatter?t.viewValue=t.formatter(e,void 0):t.viewValue=e,l&&l.$setViewValue(t.viewValue),t.displays[a]&&t.displays[a].html(t.viewValue))},t.keydown=function(e){switch(e.keyCode){case 39:case 38:t.byStep>0&&t.$apply(t.setValue(t.value[t.actif]+t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]+1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 37:case 40:t.byStep>0&&t.$apply(t.setValue(t.value[t.actif]-t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]-1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 27:t.handles[t.actif][0].blur()}},t.moveHandle=function(e,a,n){var i;t.vertical?(i=t.bounds.bar.getBoundingClientRect().bottom-n,i>t.bounds.bar.getBoundingClientRect().height&&(i=t.bounds.bar.getBoundingClientRect().height),i<t.bounds.handles[e].getBoundingClientRect().height&&(i=t.bounds.handles[e].getBoundingClientRect().height)):(i=a-t.bounds.bar.getBoundingClientRect().left,0>i&&(i=0),a+t.bounds.handles[e].getBoundingClientRect().width>t.bounds.bar.getBoundingClientRect().right&&(i=t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[e].getBoundingClientRect().width)),t.getValue(i,e),t.dual&&t.value[0]>t.value[1]&&(0===e?t.setValue(t.value[0],1):t.setValue(t.value[1],0))},t.focusCB=function(e){e?a.on("keydown",t.keydown):a.unbind("keydown",t.keydown)},t.touchBarCB=function(e){var a,n=0,i=e.changedTouches,s=t.value[n];if(e.preventDefault(),t.dual){a=t.vertical?(i[0].pageY-t.bounds.bar.getBoundingClientRect().bottom)/t.bounds.bar.getBoundingClientRect().height:(i[0].pageX-t.bounds.bar.getBoundingClientRect().left)/t.bounds.bar.getBoundingClientRect().width;var l=Math.abs(a-t.relative[0]),o=Math.abs(a-t.relative[1]);l>o&&(n=1)}t.moveHandle(n,i[0].pageX,i[0].pageY),t.callback&&s!==t.value[n]&&t.callback(t.value[n],t.ctrlhandle)},t.touchHandleCB=function(e,n){function s(e){e.preventDefault();for(var a=e.changedTouches,i=0;i<a.length;i++)t.moveHandle(n,a[i].pageX,a[i].pageY)}function l(e){a.unbind("touchmove",s),a.unbind("touchend",l),i.on("touchstart",t.touchBarCB),t.callback&&o!==t.value[n]&&t.callback(t.value[n],t.ctrlhandle)}var o=t.value[n];e.preventDefault(),a.on("touchmove",s),a.on("touchend",l),i.unbind("touchstart",t.touchBarCB)},t.handleCB=function(e,n){function i(e){t.moveHandle(n,e.clientX,e.clientY)}function l(){a.unbind("mousemove",i),a.unbind("mouseup",l),t.callback&&o!==t.value[n]&&t.callback(t.value[n],t.ctrlhandle)}if(!s.automatic){var o=t.value[n];e.preventDefault(),a.on("mousemove",i),a.on("mouseup",l),t.handles[n][0].focus(),t.actif=n}},t.find=function(e,t){var a;a=t?t[0].querySelector(e):i[0].querySelector(e);var n=angular.element(a);return n},t.initialSettings=function(e){var a;t.value=[],t.relative=[],null===t.precision&&(a=(""+t.byStep).match(/\.([\d]*)/),t.precision=a&&a[1]?a[1].length:0),i.on("touchstart",t.touchBarCB),t.handles[0].on("touchstart",function(e){t.touchHandleCB(e,0)}),t.dual&&(t.handles[1].addClass("range-slider-handle"),t.handles[1].on("touchstart",function(e){t.touchHandleCB(e,1)}),t.initvalues||t.setValue(e[1],1)),t.initvalues?t.initWidget(t.initvalues):t.setValue(e[0],0)},t.init=function(){if(t.sliderid=s.id||"slider-"+parseInt(1e3*Math.random()),t.startValue=-(1/0),t.stopValue=1/0,t.byStep=parseInt(s.byStep)||1,t.vertical=s.vertical||!1,t.dual=s.dualHandles||!1,t.trigger_input_change=!1,t.notMore=parseInt(s.notMore)||100,t.notLess=parseInt(s.notLess)||0,t.vertical&&i.addClass("vertical-range"),t.handles=[t.find(".handle-min"),t.find(".handle-max")],t.bar=i,t.slider=t.find(".range-slider-active-segment"),t.start=t.find(".ibz-range-slider-start"),t.stop=t.find(".ibz-range-slider-stop"),t.disable=s.disable||!1,t.ctrlhandle=new e(t),t.bounds={bar:i[0],handles:[t.handles[0][0],t.handles[1][0]]},"true"===s.disable&&t.setDisable(!0),s.displayTarget)switch(s.displayTarget){case!0:case"handle":t.displays=t.handles,t.handles[0].addClass("ibz-range-slider-display"),t.dual&&t.handles[1].addClass("ibz-range-slider-display");break;default:t.displays=[a.getElementById(s.displayTarget)]}else t.displays=[];if(s.initial){var n=s.initial.split(",");t.initial=[void 0!==n[0]?parseInt(n[0]):t.notLess,void 0!==n[1]?parseInt(n[1]):t.notMore]}else t.initial=[t.ngModel,t.ngModel];t.$watch("startAt",function(){t.value<t.startAt,t.startAt&&t.setStart(t.startAt)}),t.$watch("stopAt",function(){t.value>t.stopAt,t.stopAt&&t.setStop(t.stopAt)}),t.initialSettings(t.initial)},t.init(),t.$watch("inithook",function(){t.inithook&&t.inithook(t.ctrlhandle)}),t.$watch("initvalues",function(){t.initvalues&&t.initWidget(t.initvalues)}),t.$watch("ngModel",function(e){t.setValue(e,0)})}var s='<div class="ibz-range-slider range-slider" title="{{title}}"data-slider><span class="range-slider-handle handle-min" ng-mousedown="handleCB($event,0)" ng-focus="focusCB(true)" ng-blur="focusCB(false)" role="slider" tabindex="0"></span><span class="handle-max" ng-mousedown="handleCB($event,1)" ng-focus="focusCB(true)" ng-blur="focusCB(false)" role="slider" tabindex="0"></span><span class="range-slider-active-segment"></span><span class="ibz-range-slider-start" ></span> <span class="ibz-range-slider-stop"></span> <input id={{sliderid}} type="hidden"></div>';return{restrict:"E",scope:{startAt:"=",stopAt:"=",callback:"=",formatter:"=",inithook:"=",cbhandle:"=",initvalues:"=",ngModel:"="},require:"?ngModel",template:s,replace:!0,link:i}}])}(),function(){"use strict";var e='<div class="afb-monitor" ng-click="getping()"><span class="afb-refresh-token" >afb://{{hostname}}:{{httpdport}}</span><i class="{{icon}}"></i></div>';angular.module("TokenRefresh",["AppConfig","ModalNotification"]).directive("tokenRefresh",["$log","$window","$timeout","$location","Notification","AppConfig","AppCall",function(t,a,n,i,s,l,o){function r(e,r,u){e.logged=void 0,a.onbeforeunload=function(){o.get(e.plugin,"logout",{},function(){t.log("OPA exit")})},e.online=function(){r.addClass("online"),r.removeClass("offline"),e.logged=!0},e.offline=function(){r.addClass("offline"),r.removeClass("online"),e.logged=!1},e.onerror=function(){e.logged!==!1&&(s.warning({message:"AppFramework Binder Lost",delay:5e3}),e.offline()),e.status=0},e.onsuccess=function(t,a){return 200!==a||"success"!==t.request.status?(s.warning({message:"auto-connect :"+t.request.info,delay:1e4}),e.offline(),!1):(e.logged!==!0&&(s.success({message:"AppFramework Binder Connected",delay:3e3}),e.online(),e.callback&&e.callback(t)),e.status=1,!0)},e.getping=function(){o.get(e.plugin,"ping",{},function(t,a){return 200!==a||"success"!==t.request.status?(s.warning({message:t.request.info,delay:5e3}),void e.offline()):void n(e.getping,1e3*l.session.pingrate)},e.onerror)},e.refresh=function(){o.get(e.plugin,"refresh",{},function(t,a){e.onsuccess(t,a),n(e.refresh,250*l.session.timeout)},e.onerror)},e.loggin=function(){o.get(e.plugin,"connect",{token:l.session.initial},function(t,a){e.onsuccess(t,a)&&(n(e.getping,1e3*l.session.pingrate),n(e.refresh,250*l.session.timeout))},e.onerror)},e.plugin=u.plugin||"auth",e.icon=u.icon||"fi-lightbulb",e.hostname=i.host(),e.httpdport=i.port(),e.autolog=JSON.parse(u.autolog||!1),e.autolog&&e.loggin()}return{template:e,scope:{callback:"="},restrict:"E",link:r}}])}(),function(){"use strict";var e='<div class="tip-modal-popup"><i class="{{icon}}"></i><span>{{tip}}</span></span></div>';angular.module("ModalNotification",[]).directive("tipModal",["$timeout",function(t){function a(e,a,n){function i(){function a(){e.show&&e.modal.css({opacity:1,visibility:"visible"})}e.show=!0,e.timeout=t(a,e.delay)}function s(){e.show=!1,e.modal.css({opacity:0,visibility:"hidden"})}e.parent=a.parent(),e.modal=a.find("div"),e.icon=n.icon||"fi-lightbulb",e.parent.addClass("as-modal-tip"),e.parent.bind("click",s),e.parent.bind("focus",i),e.parent.bind("mouseover",i),e.parent.bind("mouseleave",s),e.parent.bind("blur",s),e.delay=n.delay||1e3}return{restrict:"E",template:e,link:a,scope:{tip:"="}}}])}(),function(){"use strict";function e(e,t,a){var n=new XMLHttpRequest,i=new FormData;n.upload.onprogress=function(t){var a=Math.round(t.lengthComputable?100*t.loaded/t.total:0);e.slider&&e.slider.setValue(a)},n.onload=function(){e.divElem.addClass("success"),e.divElem.removeClass("error");var t={status:n.status,headers:n.getAllResponseHeaders()};e.callback(t)},n.onerror=function(){e.divElem.addClass("error"),e.divElem.removeClass("success")},n.onabort=function(){e.divElem.addClass("error"),e.divElem.removeClass("success");var t={status:n.status,headers:n.getAllResponseHeaders()};e.callback(t)},this.postfile=function(e){n.open("POST",e,!0),n.send(i)};for(var s=0;s<t.length;s++)if(this.file=t[s],this.basename=this.file.name.split("/").reverse()[0],isNaN(this.file.size)||this.file.size>1024*e.maxsize)setTimeout(a,100);else{var l=new FileReader;l.readAsArrayBuffer(this.file),l.onload=a,i.append(e.name,this.file,this.file.name)}}var t='<input type="file" name="{{name}}-input" onchange="angular.element(this).scope().UpLoadFile(this.files)" accept="{{mimetype}}" style="display:none"><div class="upload-file" ng-click="imgClicked()"><i class="{{icon}}"></i> <span>{{label}}</span><range-slider ng-show="!noslider" id="{{name}}-slider" automatic=true inithook="SliderInitCB"></range-slider></div>',a='<span class="modal-text">Upload Application <b>{{appname}}</b> ?</span><div><img ng-src="{{icon}}"><submit-button icon="fi-x" label="Cancel" clicked="abandon"></submit-button><submit-button icon="fi-like" label="Install" clicked="success"></submit-button> </div>',n='<span class="modal-text">Invalid Application <b>{{appname}}</b> ?</span><div><img ng-src="{{icon}}"><submit-button icon="fi-x" label="Close" clicked="abandon"></submit-button></div>';angular.module("UploadFiles",["AppConfig","ModalNotification","RangeSlider"]).directive("uploadAppli",["AppConfig","JQemu","Notification","ModalFactory","$timeout",function(i,s,l,o,r){function u(t,s,l){if(t.inputElem=s.find("input"),t.divElem=s.find("div"),t.imgClicked=function(){t.inputElem[0].click()},t.SliderInitCB=function(e){t.slider=e},t.UpLoadFile=function(s){var u,c,d,p=function(){u.postfile(l.posturl+"?token="+i.session.token),t.modal.deactivate(),r(function(){t.modal.destroy()},1e3)},f=function(){t.modal.deactivate(),r(function(){t.modal.destroy()},1e3)},g=function(e){if(e){var i=new JSZip(e.target.result),s=i.file("icon_128.png");s?(c=window.URL.createObjectURL(new Blob([s.asArrayBuffer()],{type:"image"})),d=a):(c=t.isnotvalid,d=n)}else u.file.size>1024*t.maxsize&&(c=t.istoobig,d=n),isNaN(u.file.size)&&(c=t.isnotvalid,d=n);var l={animationIn:"slideInFromTop",contentScope:{success:p,abandon:f,icon:c,appname:u.basename},template:d};t.modal=new o(l),t.modal.activate()};u=new e(t,s,g)},t.name=l.name||"appli",t.category=l.category||"appli",t.mimetype=l.accept||".wgt",t.maxsize=l.maxsize||1e5,t.regexp=new RegExp(l.accept+".*","i"),t.icon=l.icon||"fi-upload",t.label=l.label||"Upload",l.thumbnail?t.isnotvalid=i.paths[t.category]+l.isnotvalid:t.isnotvalid=i.paths[t.category]+"w3c-widget.png",l.istoobig?t.istoobig=i.paths[t.category]+l.istoobig:t.istoobig=i.paths[t.category]+"istoobig.png",t.noslider=l.noslider||!1,!l.posturl)throw new TypeError("file-upload %s posturl=/api/xxxx/xxxx required",t.attrs)}return{restrict:"E",template:t,link:u,scope:{callback:"="}}}])}(),function(){"use strict";var e='<tip-modal tip="tip"></tip-modal><label for="{{name}}-intext">{{label}} <i ng-show="required" ng-click="ToBeDefined" class="required {{status}} fi-checkbox" title="Free Value But Mandatory Argument" alt="?"> </i></label><input type="{{type}}" id="{{name}}-intext" placeholder="{{placeholder}}" class="status-{{status}}" ng-model="value" ng-blur="validate()" ng-focus="selected()" ng-model-options="{ updateOn: \'default blur\', debounce: {default: 500, blur: 0} }"><alert data-ng-show="!valid&&errmsg">{{errmsg}}</alert>',t=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;angular.module("InputText",["JQueryEmu"]).directive("inputText",["JQemu",function(a){function n(e,n,i){e.error=!1,e.valid=!1,e.status="untouch",e.input=n.find("input"),e.required=0,"required"in i&&(e.required=1,n.addClass("required")),e.selected=function(){e.error=!1,e.errmsg=!1,e.status="touch"},e.validate=function(){e.parent.removeClass("ng-pristine"),e.value?(e.error=!1,e.value=e.value.trim(),"nospace"in i&&(e.value=e.value.replace(/\s/g,"")),"lowercase"in i&&(e.value=e.value.toLowerCase()),"minlen"in i&&e.value.length<i.minlen&&(e.status="invalid",e.errmsg=e.name+": Mininum Lengh= "+i.minlen+" Characters",e.error=!0),"email"in i&&(t.test(e.value)||(e.status="invalid",e.errmsg="invalid email address",e.error=!0))):e.required&&(e.status="invalid",e.errmsg=e.name+": Required Attribute",e.error=!0),e.error?(e.required&&e.valid&&(e.valid=!1,e.l4acounter.validated>0&&e.l4acounter.validated--),e.callback(i.name,null,e.done)):(e.required&&!e.valid&&e.l4acounter.validated++,e.status="valid",e.valid=!0,e.callback(i.name,e.value,e.done))},e.done=function(t){for(var a in t)e[a]=t[a]},e.label=i.label,e.name=i.name,e.placeholder=i.placeholder,e.type=i.type||"text",e.tip=i.tip,e.parent=a.parent(n,"FORM"),"email"in i&&(i.lowercase=!0,i.nospace=!0,i.minlen=6),e.required&&(e.l4acounter=e.parent.data("l4acounter"),e.l4acounter?e.l4acounter.required++:(e.l4acounter={required:1,validated:0},e.parent.data("l4acounter",e.l4acounter))),e.$watch("value",function(){e.value&&e.validate()})}return{restrict:"E",template:e,link:n,scope:{callback:"=",value:"="}}}])}(),function(){"use strict";var e='<input-text class="password" tip="{{tip1}}" placeholder="{{place1}}"label="{{label1}}" callback="valid1" name="{{name}}-1" value="pass1" required minlen="{{minlen}}" type="password" ></input-text><input-text class="password" tip="tip2" placeholder="{{place2}}"label="{{label2}}" callback="valid2" name="{{name}}-2" value="pass2" required minlen="{{minlen}}" type="password" > </input-text>';angular.module("InputPassword",[]).directive("inputPassword",function(){function t(e,t,a){e.valid1=function(t,a){e.firstpwd=a},e.valid2=function(t,n,i){e.firstpwd!==n?i({valid:!1,status:"invalid",errmsg:"both password should match"}):e.callback(a.name,n)},e.done=function(t){for(var a in t)e[a]=t[a]},e.name=a.name,e.label1=a.label||"Password",e.label2=a.label||"Password Verification",e.place1=a.placeholder1||"User Password",e.tip1=a.tip||"Choose a Password",e.place2=a.placeholder1||"Password Verification",e.tip2=a.tip||"Confirme your Password",e.minlen=a.minlen||10,"required"in a&&(e.required="required")}return{restrict:"E",template:e,link:t,scope:{callback:"="}}})}(),function(){"use strict";var e='<span title="Goto: {{href}}" ng-click="clicked()"><i class="{{icon}}"></i><span>{{label}}</span></span>';angular.module("LinkButton",[]).directive("linkButton",["$location",function(t){function a(e,a,n){e.clicked=function(){n.query?t.path(n.href).search(n.query):t.path(n.href)},e.icon=n.icon||"fi-link",e.label=n.label||"Jump",e.href=n.href||"/home",a.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:a,scope:{}}}])}(),function(){"use strict";var e='<div ng-click="clicked()"><i class="{{icon}}"></i><span>{{label}}</span></div>';angular.module("SubmitButton",[]).directive("submitButton",function(){function t(e,t,a){e.icon=a.icon||"fi-foot",e.label=a.label||"Next",t.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:t,scope:{clicked:"="}}})}(),function(){"use strict";var e='<div ng-click="clicked()"><img ng-src="{{icon}}"><span>{{label}}</span></div>',t='<b class="close-button" ng-click="close()">×</b><img ng-src="{{icon}}"><span class="modal-text">Application <b>{{label}}</b></span><ul class="vertical icon-left primary menu-bar appli-menu-start"><li class=start-{{runstatus}}><a ng-click=action("start")><i class="fi-check"> Start</i></a></li><li class=stop-{{runstatus}}><a ng-click=action("stop")><i class="fi-x"> Stop</i></a></li><li><a ng-click=action("info")><i class="fi-info"> Info</i></a></li><li class=start-{{runstatus}}><a ng-click=action("uninstall")><i class="fi-x"> Uninstall</i></a></li></ul>',a='<b class="close-button" ng-click="close()">×</b><img ng-src="{{icon}}"><span class="modal-text">Application <b>{{label}}</b></span><ul class="vertical icon-left appli-menu-info"><li><i class="fi-paperclip"> Name : {{detail.name}} </i></li><li><i class="fi-info"> Description {{detail.description}}</i></li><li><i class="fi-torso"> Author : {{detail.author}}</i></li></ul>';angular.module("AppliButton",[]).directive("appliButton",["AppConfig","AppCall","ModalFactory","Notification","$timeout","$window","$location","urlquery",function(n,i,s,l,o,r,u,c){function d(e,d,p){e.runstatus="stop",e.runmode=c.runmode||"auto",e.clicked=function(){var n=function(t,a){l.error({message:"Fail /api/afm-main"+t+"="+e.label+" RunID="+e.appID,delay:5e3}),d.addClass("fail"),d.removeClass("success"),e.callback(e.appID,t,a)},c=function(t,a){d.removeClass("fail"),e.runID=a.response.runid,e.callback(e.appID,t,a)},p=function(){e.modApp.deactivate(),o(function(){e.modApp.destroy()},1e3)},f=function(){e.modInfo.deactivate(),o(function(){e.modInfo.destroy()},1e3)},g=function(t){switch(t){case"start":if("stop"!==e.runstatus)return;i.get("afm-main","start",{id:e.appID,mode:e.runmode},function(a,i){return 200!==i||"afb-reply"!==a.jtype?void n("start",a):(e.runstatus="start",c(t,a),void(a.response.uri&&(e.winapp=r.open(a.response.uri.replace("%h",u.host())))))});break;case"stop":if("start"!==e.runstatus)return;i.get("afm-main","terminate",{runid:e.runID},function(a,i){return 200!==i||"afb-reply"!==a.jtype?void n("stop",a):(e.runstatus="stop",e.winapp&&(e.winapp.close(),e.winapp=!1),void c(t,a))});break;case"info":i.get("afm-main","detail",{id:e.appID},function(t,i){if(200!==i||"afb-reply"!==t.jtype)return void n("detail",t);var l={animationIn:"slideInFromTop",contentScope:{close:f,icon:e.icon,label:e.appID,detail:t.response},template:a};e.modInfo=new s(l),e.modInfo.activate()});break;case"uninstall":if("stop"!==e.runstatus)return;i.get("afm-main","uninstall",{id:e.appID},function(e,a){return 200!==a||"afb-reply"!==e.jtype?void n("uninstall",e):void c(t,e)})}p()},m={animationIn:"slideInFromTop",contentScope:{action:g,runstatus:e.runstatus,close:p,icon:e.icon,label:e.label},template:t};e.modApp=new s(m),e.modApp.activate()},p.handle&&e.store[p.handle].name?(e.icon=n.paths.icons+p.handle,e.label=e.store[p.handle].name,e.appID=p.handle):(e.icon=n.paths.icons+"w3c-ico.png",e.label=p.handle),d.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:d,scope:{callback:"=",store:"="}}}])}(),function(){"use strict";angular.module("DashboardModule",["SubmitButton","TokenRefresh","AppliButton"]).controller("DashboardController",["AppCall","Notification",function(e,t){var a=this;a.uuid="none",a.token="none",a.session="none",a.status="err-no",a.appliIDs=[],a.appliStore={},a.AppliCB=function(e,t,n){a.request=t,a.errcode=n.status,n.data&&(a.response=n.data),"uninstall"===t&&a.GetRunnables()},a.GetRunnables=function(){e.get("afm-main","runnables",{},function(e,n){if(a.request="/api/afm-main/runnable",a.response=e.response,a.errcode=e.request.status,"afb-reply"!==e.jtype)return void t.error({message:"Invalid Respond to /opa/afm-main/runnable response.data="+response.data,delay:5e3});if("success"!==e.request.status)return void t.error({message:"afm-main/runnable"+e.request.info,delay:5e3});for(var i=[],s=e.response.runnables,l=0;l<s.length;l++)i[l]=s[l].id,a.appliStore[s[l].id]=s[l];a.appliIDs=i})},a.FileUploaded=function(e){a.request="/api/afm-main/install",a.response=e.headers,a.errcode=e.status,a.GetRunnables()},a.AutoStart=function(){a.GetRunnables()}}])}(),function(){"use strict";angular.module("JQueryEmu",[]).factory("JQemu",function(){var e=function(e,t){for(var a=e,n=t.toUpperCase();a[0];){if(n===a[0].tagName)return a;a=a.parent()}},t=function(e,t,a){for(var n=a.toLowerCase(),i=t.toLowerCase()+"Name",s=e.children();s[0];){if(n===s[0][i])return s;s=s.next()}},a=function(e,t){for(var a=t.toLowerCase(),n=e.children();n[0];){if(n.hasClass(a))return n;n=n.next()}},n={FindInParent:e,FindByTag:t,FindByClass:a};return n})}();var foundationRoutes=[{name:"Dashboard",url:"/dashboard",controller:"DashboardController as ctrl",animationIn:"slideInRight",path:"pages/Dashboard/Dashboard.html"}];!function(){"use strict";angular.module("AppConfig",[]).factory("AppConfig",["urlquery",function(e){var t={paths:{image:"images/",icons:"/icons/",avatar:"images/avatars/",audio:"images/audio/",appli:"images/appli/"},session:{initial:e.token||"123456789",timeout:3600,pingrate:15,uuid:"",token:""}};return t}]).factory("AppCall",["$http","AppConfig","$log",function(e,t,a){var n={get:function(a,n,i,s,l){var o=function(e){l?l(e.data,e.status,e.config):s(e.data,e.status,e.config)},r=function(e){if(!e.data||!e.data.request)return void o(e);var a=e.data.request;a.token&&(t.session.token=a.token),a.uuid&&(t.session.uuid=a.uuid),a.timeout&&(t.session.timeout=a.timeout),s(e.data,e.status,e.config)};i.token||(i.token=t.session.token),i.reqid||(i.reqid=n);e.get("/api/"+a+"/"+n,{params:i}).then(r,o)}};return n}])}(),function(){"use strict";function e(){var e={};return location.search.substr(1).split("&").forEach(function(t){var a=t.split("=")[0],n=decodeURIComponent(t.split("=")[1]);a in e?e[a].push(n):e[a]=[n]}),e}function t(e,t,a){e.otherwise("/dashboard"),t.html5Mode(!0).hashPrefix("!")}function a(){FastClick.attach(document.body)}angular.module("AFBclient",["ui.router","ngAnimate","foundation","foundation.dynamicRouting","foundation.dynamicRouting.animations","ui-notification","AppConfig","JQueryEmu","DashboardModule","UploadFiles","LinkButton","TokenRefresh","RangeSlider","ModalNotification"]).value("urlquery",e()).config(t).run(a),t.$inject=["$urlRouterProvider","$locationProvider"],angular.module("foundation").run(["$templateCache",function(e){e.put("components/modal/modal.html",'<div\n class="modal-overlay"\n ng-click="hideOverlay()">\n <aside\n class="modal"\n ng-click="$event.stopPropagation();"\n ng-transclude>\n </aside>\n</div>\n')}])}(),function(){angular.module("AFBclient").run(["$templateCache",function(e){e.put("pages/Dashboard/Dashboard.html",'<h3><img class="logo" src="images/logo/triskel_iot_bzhx250.png" alt="IoT.bzh Logo" style="height:150px"> Application Framework Manager Simple Client</h3><div class="button-box box-content"><appli-button ng-repeat="appliID in ctrl.appliIDs" store="ctrl.appliStore" handle="{{appliID}}" callback="ctrl.AppliCB"></appli-button><upload-appli class="ibz-right" label="Upload" name="widget" icon="fi-upload" posturl="/api/afm-main/install" callback="ctrl.FileUploaded" title="Upload AGL App"></upload-appli></div><div class="message-box box-content vertical grid-frame"><div class="response"><span class="grid-content noscroll req {{ctrl.status}}">req= {{ctrl.request}}</span> <span class="grid-content noscroll res {{ctrl.status}}">res= {{ctrl.response}}</span> <span class="grid-content noscroll status {{ctrl.status}}">status= {{ctrl.errcode}}</span></div></div><token-refresh autolog="true" callback="ctrl.AutoStart"></token-refresh>')}])}(); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndpZGdldHMvUmFuZ2VTbGlkZXJzL1JhbmdlU2xpZGVyTW9kLmpzIiwid2lkZ2V0cy9Ob3RpZmljYXRpb25zL1Rva2VuUmVmcmVzaFN2Yy5qcyIsIndpZGdldHMvTm90aWZpY2F0aW9ucy9Nb2RhbE5vdGlmaWNhdGlvbi5qcyIsIndpZGdldHMvRm9ybUlucHV0L1VwbG9hZEFwcGxpLmpzIiwid2lkZ2V0cy9Gb3JtSW5wdXQvSW5wdXRUZXh0LmpzIiwid2lkZ2V0cy9Gb3JtSW5wdXQvSW5wdXRQYXNzd29yZC5qcyIsIndpZGdldHMvTmF2aWdhdGlvbi9MaW5rQnV0dG9uLmpzIiwid2lkZ2V0cy9BY3Rpb25CdXR0b25zL1N1Ym1pdEJ1dHRvbi5qcyIsIndpZGdldHMvQWN0aW9uQnV0dG9ucy9BcHBsaUJ1dHRvbi5qcyIsInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmRNb2R1bGUuanMiLCJzZXJ2aWNlcy9KUXVlcnlFbXUuanMiLCJldGMvcm91dGVzLmpzIiwiZXRjL0FwcENvbmZpZy5qcyIsImFwcC5qcyIsInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuanMiXSwibmFtZXMiOlsiUmFuZ2VTbGlkZXJIYW5kbGUiLCJzY29wZSIsImludGVybmFscyIsImV4dGVybmFscyIsInRoaXMiLCJnZXRJZCIsInNsaWRlcmlkIiwiZ2V0Q2JIYW5kbGUiLCJjYmhhbmRsZSIsImdldFZpZXciLCJoYW5kbGUiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImN0cmxoYW5kbGUiLCJ1cGRhdGVDbGFzcyIsImNsYXNzZSIsInN0YXR1cyIsImZvcmNlUmVmcmVzaCIsInRpbWVyIiwiZ2V0VmFsdWUiLCJnZXRSZWxhdGl2ZSIsInJlbGF0aXZlIiwic2V0VmFsdWUiLCJzZXREaXNhYmxlIiwiZmxhZyIsIlJhbmdlU2xpZGVyIiwiYW5ndWxhciIsIm1vZHVsZSIsImRpcmVjdGl2ZSIsIiRsb2ciLCIkZG9jdW1lbnQiLCIkdGltZW91dCIsImxpbmsiLCJlbGVtZW50IiwiYXR0cnMiLCJtb2RlbCIsImluaXRXaWRnZXQiLCJpbml0dmFsdWVzIiwiYnlTdGVwIiwicGFyc2VJbnQiLCJub3RNb3JlIiwibm90TGVzcyIsImlkIiwidW5kZWZpbmVkIiwiZHVhbCIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJkaXNhYmxlZCIsImhhbmRsZXMiLCJjc3MiLCJub3JtYWxpemUiLCJyZXN1bHQiLCJyYW5nZSIsInBvaW50IiwibW9kIiwicmVtIiwicm91bmQiLCJwb3dlciIsIk1hdGgiLCJwb3ciLCJvZmZzZXQiLCJ2ZXJ0aWNhbCIsImJvdW5kcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsImJhciIsIndpZHRoIiwibmV3dmFsdWUiLCJzdGFydFZhbHVlIiwic3RvcFZhbHVlIiwidmlld1ZhbHVlIiwiZGlzcGxheXMiLCJodG1sIiwiJHNldFZpZXdWYWx1ZSIsIiRhcHBseSIsInRyYW5zbGF0ZSIsInNldFN0YXJ0Iiwic3RhcnQiLCJzZXRTdG9wIiwic3RvcCIsInJpZ2h0Iiwidm9mZnNldCIsIi13ZWJraXQtdHJhbnNmb3JtIiwiLW1vei10cmFuc2Zvcm0iLCItbXMtdHJhbnNmb3JtIiwiLW8tdHJhbnNmb3JtIiwidHJhbnNmb3JtIiwic2xpZGVyIiwiYm90dG9tIiwibGVmdCIsImtleWRvd24iLCJlIiwia2V5Q29kZSIsImFjdGlmIiwiY2FsbGJhY2siLCJibHVyIiwibW92ZUhhbmRsZSIsImNsaWVudFgiLCJjbGllbnRZIiwiZm9jdXNDQiIsImluc2lkZSIsIm9uIiwidW5iaW5kIiwidG91Y2hCYXJDQiIsImV2ZW50IiwidG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwib2xkdmFsdWUiLCJwcmV2ZW50RGVmYXVsdCIsInBhZ2VZIiwicGFnZVgiLCJkaXN0YW5jZTAiLCJhYnMiLCJkaXN0YW5jZTEiLCJ0b3VjaEhhbmRsZUNCIiwidG91Y2hldnQiLCJ0b3VjaG1vdmUiLCJpZHgiLCJsZW5ndGgiLCJ0b3VjaGVuZCIsImhhbmRsZUNCIiwiY2xpY2tldmVudCIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJhdXRvbWF0aWMiLCJmb2N1cyIsImZpbmQiLCJzZWxlY3QiLCJlbGVtIiwiZG9tZWxlbSIsInF1ZXJ5U2VsZWN0b3IiLCJhbmdlbGVtIiwiaW5pdGlhbFNldHRpbmdzIiwiaW5pdGlhbCIsImRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdCIsInByZWNpc2lvbiIsIm1hdGNoIiwiZXZ0IiwiaW5pdCIsInJhbmRvbSIsIkluZmluaXR5IiwiZHVhbEhhbmRsZXMiLCJ0cmlnZ2VyX2lucHV0X2NoYW5nZSIsImRpc2FibGUiLCJkaXNwbGF5VGFyZ2V0IiwiZ2V0RWxlbWVudEJ5SWQiLCJzcGxpdCIsIm5nTW9kZWwiLCIkd2F0Y2giLCJzdGFydEF0Iiwic3RvcEF0IiwiaW5pdGhvb2siLCJuZXdWYWx1ZSIsInRlbXBsYXRlIiwicmVzdHJpY3QiLCJyZXF1aXJlIiwicmVwbGFjZSIsIiR3aW5kb3ciLCIkbG9jYXRpb24iLCJOb3RpZmljYXRpb24iLCJBcHBDb25maWciLCJBcHBDYWxsIiwibXltZXRob2RzIiwibG9nZ2VkIiwib25iZWZvcmV1bmxvYWQiLCJnZXQiLCJwbHVnaW4iLCJsb2ciLCJvbmxpbmUiLCJvZmZsaW5lIiwib25lcnJvciIsIndhcm5pbmciLCJtZXNzYWdlIiwiZGVsYXkiLCJvbnN1Y2Nlc3MiLCJqcmVzcCIsImVycmNvZGUiLCJyZXF1ZXN0IiwiaW5mbyIsInN1Y2Nlc3MiLCJnZXRwaW5nIiwic2Vzc2lvbiIsInBpbmdyYXRlIiwicmVmcmVzaCIsInRpbWVvdXQiLCJsb2dnaW4iLCJ0b2tlbiIsImljb24iLCJob3N0bmFtZSIsImhvc3QiLCJodHRwZHBvcnQiLCJwb3J0IiwiYXV0b2xvZyIsIkpTT04iLCJwYXJzZSIsInRtcGwiLCJkaXNwbGF5IiwiYWN0aW9uIiwic2hvdyIsIm1vZGFsIiwib3BhY2l0eSIsInZpc2liaWxpdHkiLCJjbG9zZSIsInBhcmVudCIsImJpbmQiLCJ0aXAiLCJMb2FkRmlsZVN2YyIsImZpbGVzIiwiZmlsZUNCIiwieG1sUmVxIiwiWE1MSHR0cFJlcXVlc3QiLCJ4Zm9ybSIsIkZvcm1EYXRhIiwidXBsb2FkIiwib25wcm9ncmVzcyIsInByb2dyZXNzIiwibGVuZ3RoQ29tcHV0YWJsZSIsImxvYWRlZCIsInRvdGFsIiwib25sb2FkIiwiZGl2RWxlbSIsInJlc3BvbnNlIiwiaGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsIm9uYWJvcnQiLCJwb3N0ZmlsZSIsInBvc3R1cmwiLCJvcGVuIiwic2VuZCIsImkiLCJmaWxlIiwiYmFzZW5hbWUiLCJuYW1lIiwicmV2ZXJzZSIsImlzTmFOIiwic2l6ZSIsIm1heHNpemUiLCJzZXRUaW1lb3V0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwiYXBwZW5kIiwidG1wbEFwcGxpIiwidG1wbE1vZGFsIiwidG1wbEVycm9yIiwiSlFlbXUiLCJNb2RhbEZhY3RvcnkiLCJpbnB1dEVsZW0iLCJpbWdDbGlja2VkIiwiY2xpY2siLCJTbGlkZXJJbml0Q0IiLCJVcExvYWRGaWxlIiwiYXBwaWNvbiIsImRlYWN0aXZhdGUiLCJkZXN0cm95IiwiYWJhbmRvbiIsInJlYWRlckNCIiwiemlwYXBwIiwiSlNaaXAiLCJ0YXJnZXQiLCJ0aHVtYm5haWwiLCJ3aW5kb3ciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJCbG9iIiwiYXNBcnJheUJ1ZmZlciIsInR5cGUiLCJpc25vdHZhbGlkIiwiaXN0b29iaWciLCJjb25maWciLCJhbmltYXRpb25JbiIsImNvbnRlbnRTY29wZSIsImFwcG5hbWUiLCJhY3RpdmF0ZSIsImNhdGVnb3J5IiwibWltZXR5cGUiLCJhY2NlcHQiLCJyZWdleHAiLCJSZWdFeHAiLCJsYWJlbCIsInBhdGhzIiwibm9zbGlkZXIiLCJUeXBlRXJyb3IiLCJlbWFpbHBhdGVybiIsImVycm9yIiwidmFsaWQiLCJpbnB1dCIsInJlcXVpcmVkIiwic2VsZWN0ZWQiLCJlcnJtc2ciLCJ2YWxpZGF0ZSIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsIm1pbmxlbiIsInRlc3QiLCJsNGFjb3VudGVyIiwidmFsaWRhdGVkIiwiZG9uZSIsImRhdGEiLCJwbGFjZWhvbGRlciIsImxvd2VyY2FzZSIsIm5vc3BhY2UiLCJ2YWxpZDEiLCJmaXJzdHB3ZCIsInZhbGlkMiIsImxhYmVsMSIsImxhYmVsMiIsInBsYWNlMSIsInBsYWNlaG9sZGVyMSIsInRpcDEiLCJwbGFjZTIiLCJ0aXAyIiwiY2xpY2tlZCIsInF1ZXJ5IiwicGF0aCIsImhyZWYiLCJzZWFyY2giLCJ0bXBsRGV0YWlsIiwidXJscXVlcnkiLCJydW5zdGF0dXMiLCJydW5tb2RlIiwibm90aWZ5RXJyb3IiLCJhcHBJRCIsIm5vdGlmeVN1Y2Nlc3MiLCJydW5JRCIsInJ1bmlkIiwiY2xvc2VNb2RBcHAiLCJtb2RBcHAiLCJjbG9zZU1vZEluZm8iLCJtb2RJbmZvIiwiYWN0aW9uTW9kYWwiLCJtb2RlIiwianR5cGUiLCJ1cmkiLCJ3aW5hcHAiLCJkZXRhaWwiLCJzdG9yZSIsImljb25zIiwiY29udHJvbGxlciIsInV1aWQiLCJhcHBsaUlEcyIsImFwcGxpU3RvcmUiLCJBcHBsaUNCIiwiYXBwbGlJRCIsIkdldFJ1bm5hYmxlcyIsInJ1bm5hYmxlcyIsIkZpbGVVcGxvYWRlZCIsIkF1dG9TdGFydCIsImZhY3RvcnkiLCJGaW5kSW5QYXJlbnQiLCJzZWxlY3RvciIsInRvVXBwZXJDYXNlIiwidGFnTmFtZSIsIkZpbmRCeVRhZyIsInRhZyIsImNoaWxkcmVuIiwibmV4dCIsIkZpbmRCeUNsYXNzIiwiaGFzQ2xhc3MiLCJteU1ldGhvZHMiLCJmb3VuZGF0aW9uUm91dGVzIiwidXJsIiwibXlDb25maWciLCJpbWFnZSIsImF2YXRhciIsImF1ZGlvIiwiYXBwbGkiLCIkaHR0cCIsIm15Q2FsbHMiLCJjYnJlc3BvbnNlIiwiY2JlcnJvciIsInJlcWlkIiwicGFyYW1zIiwidGhlbiIsIlBhcnNlUXVlcnlTdHJpbmciLCJxZCIsImxvY2F0aW9uIiwic3Vic3RyIiwiZm9yRWFjaCIsIml0ZW0iLCJrIiwidiIsImRlY29kZVVSSUNvbXBvbmVudCIsInB1c2giLCIkdXJsUHJvdmlkZXIiLCIkbG9jYXRpb25Qcm92aWRlciIsIm90aGVyd2lzZSIsImh0bWw1TW9kZSIsImhhc2hQcmVmaXgiLCJydW4iLCJGYXN0Q2xpY2siLCJhdHRhY2giLCJkb2N1bWVudCIsImJvZHkiLCIkaW5qZWN0IiwiJHRlbXBsYXRlQ2FjaGUiLCJwdXQiXSwibWFwcGluZ3MiOiJDQWtEQSxXQUNBLFlBSUEsU0FBQUEsR0FBQUMsR0FDQSxHQUFBQyxNQUNBQyxJQUVBQyxNQUFBQyxNQUFBLFdBQ0EsTUFBQUosR0FBQUssVUFHQUYsS0FBQUcsWUFBQSxXQUNBLE1BQUFOLEdBQUFPLFVBR0FKLEtBQUFLLFFBQUEsU0FBQUMsR0FJQSxNQUhBQSxLQUFBQSxFQUFBLEdBR0FULEVBQUFVLE1BQUFELEtBQUFSLEVBQUFRLEdBQUFQLEVBQUFPLElBR0FSLEVBQUFRLEdBQUFULEVBQUFVLE1BQUFELEdBQ0FULEVBQUFXLFVBQUFULEVBQUFPLEdBQUFULEVBQUFXLFVBQUFYLEVBQUFVLE1BQUFELEdBQUFULEVBQUFZLFlBQ0FWLEVBQUFPLEdBQUFULEVBQUFVLE1BQUFELEdBRUFQLEVBQUFPLEtBR0FOLEtBQUFVLFlBQUEsU0FBQUMsRUFBQUMsR0FDQWYsRUFBQWEsWUFBQUMsRUFBQUMsSUFHQVosS0FBQWEsYUFBQSxTQUFBQyxHQUNBakIsRUFBQWdCLGFBQUFDLElBR0FkLEtBQUFlLFNBQUEsU0FBQVQsR0FFQSxNQURBQSxLQUFBQSxFQUFBLEdBQ0FULEVBQUFVLE1BQUFELElBR0FOLEtBQUFnQixZQUFBLFNBQUFWLEdBRUEsTUFEQUEsS0FBQUEsRUFBQSxHQUNBVCxFQUFBb0IsU0FBQVgsSUFHQU4sS0FBQWtCLFNBQUEsU0FBQVgsRUFBQUQsR0FDQUEsSUFBQUEsRUFBQSxHQUNBVCxFQUFBcUIsU0FBQVgsRUFBQUQsSUFHQU4sS0FBQW1CLFdBQUEsU0FBQUMsR0FDQXZCLEVBQUFzQixXQUFBQyxJQXBEQSxHQUFBQyxHQUFBQyxRQUFBQyxPQUFBLGlCQXdEQUYsR0FBQUcsVUFBQSxlQUFB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TSxLQUNBLEdBQUFDLEtBTUEsT0FMQUMsVUFBQTVELE9BQUE2RCxPQUFBLEdBQUF2TyxNQUFBLEtBQUF3TyxRQUFBLFNBQUFDLEdBQ0EsR0FBQUMsR0FBQUQsRUFBQXpPLE1BQUEsS0FBQSxHQUNBMk8sRUFBQUMsbUJBQUFILEVBQUF6TyxNQUFBLEtBQUEsR0FDQTBPLEtBQUFMLEdBQUFBLEVBQUFLLEdBQUFHLEtBQUFGLEdBQUFOLEVBQUFLLElBQUFDLEtBRUFOLEVBZ0NBLFFBQUExRyxHQUFBbUgsRUFBQUMsRUFBQWpPLEdBQ0FnTyxFQUFBRSxVQUFBLGNBR0FELEVBQUFFLFdBQUEsR0FBQUMsV0FBQSxLQUlBLFFBQUFDLEtBQ0FDLFVBQUFDLE9BQUFDLFNBQUFDLE1BdENBL1csUUFBQUMsT0FBQSxhQUNBLFlBQ0EsWUFHQSxhQUNBLDRCQUNBLHVDQUdBLGtCQUdBLFlBQ0EsWUFDQSxrQkFDQSxjQUNBLGFBQ0EsZUFDQSxjQUNBLHNCQUVBaEIsTUFBQSxXQUFBMlcsS0FDQXpHLE9BQUFBLEdBQ0F3SCxJQUFBQSxHQUdBeEgsRUFBQTZILFNBQUEscUJBQUEscUJBZ0JBaFgsUUFBQUMsT0FBQSxjQUFBMFcsS0FBQSxpQkFBQSxTQUFBTSxHQUNBQSxFQUFBQyxJQUFBLDhCQUNBLHFMQzFEQSxXQUFBbFgsUUFBQUMsT0FBQSxhQUFBMFcsS0FBQSxpQkFBQSxTQUFBTSxHQUFBQSxFQUFBQyxJQUFBLGlDQUNBIiwiZmlsZSI6IkFGQmNsaWVudC5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqIFxuICogcmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvbW91c2VvdmVyXG4gKiBcbiAqIHVzYWdlOiBcblVzYWdlICA8cmFuZ2Utc2xpZGVyPlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICA8cmFuZ2Utc2xpZGVyXG4gICAgICBpZD1cIm15LXNsaWRlci1uYW1lXCIgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHVzZSBhcyBhbiBhcmd1bWVudCB0byBjYWxsYmFja1xuICAgICAgY2xhc3M9XCJteS1jdXN0b20tY2xhc3NcIiAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBjbGFzcyBpcyBpYnotcmFuZ2Utc2xpZGVyXG4gICAgICBwbGFjZWhvbGRlcj1cIlRyYWNrIERhdGUgU2VsZWN0aW9uXCIgICAgICAvLyBwbGFjZSBob2xkZXIgZm9yIGRhdGUgcmVhZG9ubHkgaW5wdXQgem9uZVxuXG4gICAgICA8IS0tIEZvdW5kYXRpb24gY2xhc3NlcyAtLT5cbiAgICAgIGNsYXNzPVwicmFkaXVzXCIgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIFp1cmIgZm91bmRhdGlvbiBkb2MgZm9yIGZ1cnRoZXIgaW5mby5cbiAgICAgIGNsYXNzPVwiaWJ6LWhhbmRsZS1kaXNwbGF5XCIgICAgICAgICAgICAgIC8vIGluY3JlYXNlIGhhbmRsZSB3aWR0aCB0byBob2xkIHNsaWRlciBjdXJyZW50IHZhbHVlXG5cbiAgICAgIDwhLS0gQW5ndWxhciBTY29wZSBWYXJpYWJsZXMgLS0+XG4gICAgICBjYWxsYmFjaz1cIm15Q2FsbEJhY2tcIiAgICAgICAgICAgICAgICAgICAgLy8gJHNjb3BlLm15Q2FsbEJhY2soc2xpZGVyaGFuZGxlKSBpcyBjYWxsZWQgd2hlbiBldmVyIHNsaWRlciBoYW5kbGUgYmx1clxuICAgICAgZm9ybWF0dGVyPVwiU2xpZGVyRm9ybWF0Q0JcIiAgICAgICAgICAgICAgIC8vICRzY29wZS5teUZvcm1hdHRlcih2YWx1ZSwgc2xpZGVyaWQpIHdoZW4gZXhpc3QgaXMgY2FsbCB3aGVuIGV2ZXIgc2xpZGVyIGhhbmRsZSBtb3Zlcy4gU2hvdWxkIHJldHVybiBleHRlcm5hbCBmb3JtIG9mIHNsaWRlciB2YWx1ZS5cbiAgICAgIG5nLW1vZGVsPVwieHh4eHh4XCIgICAgICAgICAgICAgICAgICAgICAgICAvLyB4eHggTXVzdCBiZSBkZWZpbmVkLCBzY3JpcHQgd2lsbCBzdG9yZSBhIG5ldyBSYW5nZXJPYmplY3Qgd2l0aGluIHByb3ZpZGVkIG5nLW1vZGVsIHZhcmlhYmxlLlxuICAgICAgc3RhcnQtYXQ9XCJTY29wZVZhclwiICAgICAgICAgICAgICAgICAgICAgIC8vIER5bmFtaWMgbGltaXRhdGlvbiB3aGVuIHNsaWRlciBpcyBjb25zdHJhaW5zIGJ5IGFuIGV4dGVybmFsIGNvbXBvbmFudCBbZXg6IGNoZWNrIGluL291dF1cbiAgICAgIHN0b3AtYXQ9XCJTY29wZVZhclwiICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVtIGJ1dCBmb3IgZW5kLlxuXG4gICAgICA8IS0tIEFuZ3VsYXIgRGlyZWN0aXZlIEF0dHJpYnV0ZXMgLS0+XG4gICAgICBub3QtbGVzcz1cImludGVnZXJcIiAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWQgc3RhcnRpbmcgdmFsdWUgZm9yIHNsaWRlciBbZGVmYXVsdCAwXVxuICAgICAgbm90LW1vcmU9XCJpbnRlZ2VyXCIgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVkIGVuZCB2YWx1ZSBmb3Igc2xpZGVycyBbZGVmYXVsdCAxMDBdXG4gICAgICBieS1zdGVwPVwiKy1pbnRlZ2VyXCIgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYnktc3RlcCBpcyA+MCB0aGVuIHNsaWRlciB1c2UgaXQgYXMgc3RlcC12YWx1ZSwgd2hlbiBuZWdhdGl2ZSB1c2UgaXQgZm9yIGRlY2ltYWwgcHJlY2lzaW9uXG4gICAgICBkaXNwbGF5LXRhcmdldD1cImhhbmRsZVwiICAgICAgICAgICAgICAgICAgLy8gZGlzcGxheSBzbGlkZXIgZXh0ZXJuYWwgZm9ybWF0ZWQgdmFsdWUgaW4gdGhlIGhhbmRsZSBbcmVxdWlyZXIgY2Fsc3M9XCJpYnotaGFuZGxlLWRpc3BsYXlcIl1cbiAgICAgIGR1YWwtaGFuZGxlcz0ndHJ1ZScgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGEgc2Vjb25kIGhhbmRsZSB0byBzbGlkZXIgZm9yIG1pbi9tYXggcmFuZ2VcbiAgICAgIGluaXRpYWw9J3ZhbHVlfFtzdGFydC9zdG9wXScgICAgICAgICAgICAgLy8gc2xpZGVyIGluaXRpYWwgdmFsdWUgW2R1YWwtaGFuZGxlc10gbWF5IGhhdmUgaW5pdGlhbCB2YWx1ZXNcbiAgIC8+PC9yYW5nZS1zbGlkZXI+XG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbnZhciBSYW5nZVNsaWRlciA9IGFuZ3VsYXIubW9kdWxlKCdSYW5nZVNsaWRlcicsW10pO1xuXG5mdW5jdGlvbiBSYW5nZVNsaWRlckhhbmRsZSAoc2NvcGUpIHtcbiAgICB2YXIgaW50ZXJuYWxzID0gW107XG4gICAgdmFyIGV4dGVybmFscyA9IFtdO1xuXG4gICAgdGhpcy5nZXRJZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2NvcGUuc2xpZGVyaWQ7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0Q2JIYW5kbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlLmNiaGFuZGxlO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFZpZXc9IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgaWYgKCFoYW5kbGUpIGhhbmRsZSA9IDA7XG5cbiAgICAgICAgLy8gaWYgdmFsdWUgZGlkIG5vdCBjaGFuZ2UgcmV0dXJuIGN1cnJlbnQgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb25cbiAgICAgICAgaWYgKHNjb3BlLnZhbHVlW2hhbmRsZV0gPT09IGludGVybmFsc1toYW5kbGVdKSByZXR1cm4gZXh0ZXJuYWxzW2hhbmRsZV07XG5cbiAgICAgICAgLy8gYnVpbGQgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gYW5kIHNhdmUgaXQgZm9yIGZ1cnRoZXIgcmVxdWVzdHNcbiAgICAgICAgaW50ZXJuYWxzW2hhbmRsZV0gPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuICAgICAgICBpZiAoc2NvcGUuZm9ybWF0dGVyKSBleHRlcm5hbHNbaGFuZGxlXSA9IHNjb3BlLmZvcm1hdHRlcihzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgZWxzZSAgZXh0ZXJuYWxzW2hhbmRsZV0gPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuXG4gICAgICAgIHJldHVybiBleHRlcm5hbHNbaGFuZGxlXTtcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVDbGFzcyA9IGZ1bmN0aW9uIChjbGFzc2UsIHN0YXR1cykge1xuICAgICAgIHNjb3BlLnVwZGF0ZUNsYXNzIChjbGFzc2UsIHN0YXR1cyk7XG4gICAgfTtcblxuICAgIHRoaXMuZm9yY2VSZWZyZXNoID0gZnVuY3Rpb24gKHRpbWVyKSB7XG4gICAgICAgc2NvcGUuZm9yY2VSZWZyZXNoKHRpbWVyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRWYWx1ZT0gZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICBpZiAoIWhhbmRsZSkgaGFuZGxlID0gMDtcbiAgICAgICAgcmV0dXJuIHNjb3BlLnZhbHVlW2hhbmRsZV07XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UmVsYXRpdmU9IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgaWYgKCFoYW5kbGUpIGhhbmRsZSA9IDA7XG4gICAgICAgIHJldHVybiBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdO1xuICAgIH07XG5cbiAgICB0aGlzLnNldFZhbHVlPSBmdW5jdGlvbiAodmFsdWUsIGhhbmRsZSkge1xuICAgICAgICBpZiAoIWhhbmRsZSkgaGFuZGxlID0gMDtcbiAgICAgICAgc2NvcGUuc2V0VmFsdWUgKHZhbHVlLCBoYW5kbGUpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldERpc2FibGU9IGZ1bmN0aW9uIChmbGFnKSB7XG4gICAgICAgIHNjb3BlLnNldERpc2FibGUoZmxhZyk7XG4gICAgfTtcbn1cblxuUmFuZ2VTbGlkZXIuZGlyZWN0aXZlKCdyYW5nZVNsaWRlcicsIFtcIiRsb2dcIiwgXCIkZG9jdW1lbnRcIiwgXCIkdGltZW91dFwiLCBmdW5jdGlvbiAoJGxvZywgJGRvY3VtZW50LCAkdGltZW91dCkge1xuXG4gICAgdmFyIHRlbXBsYXRlPSAnPGRpdiBjbGFzcz1cImliei1yYW5nZS1zbGlkZXIgcmFuZ2Utc2xpZGVyXCIgdGl0bGU9XCJ7e3RpdGxlfX1cImRhdGEtc2xpZGVyPicrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJyYW5nZS1zbGlkZXItaGFuZGxlIGhhbmRsZS1taW5cIiBuZy1tb3VzZWRvd249XCJoYW5kbGVDQigkZXZlbnQsMClcIiBuZy1mb2N1cz1cImZvY3VzQ0IodHJ1ZSlcIiBuZy1ibHVyPVwiZm9jdXNDQihmYWxzZSlcIiByb2xlPVwic2xpZGVyXCIgdGFiaW5kZXg9XCIwXCI+PC9zcGFuPicrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJoYW5kbGUtbWF4XCIgbmctbW91c2Vkb3duPVwiaGFuZGxlQ0IoJGV2ZW50LDEpXCIgbmctZm9jdXM9XCJmb2N1c0NCKHRydWUpXCIgbmctYmx1cj1cImZvY3VzQ0IoZmFsc2UpXCIgcm9sZT1cInNsaWRlclwiIHRhYmluZGV4PVwiMFwiPjwvc3Bhbj4nK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwicmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50XCI+PC9zcGFuPicrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJpYnotcmFuZ2Utc2xpZGVyLXN0YXJ0XCIgPjwvc3Bhbj4gJytcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImliei1yYW5nZS1zbGlkZXItc3RvcFwiPjwvc3Bhbj4gJytcbiAgICAgICAgICAgICAgICAgICc8aW5wdXQgaWQ9e3tzbGlkZXJpZH19IHR5cGU9XCJoaWRkZW5cIj4nK1xuICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XG5cblxuICAgIGZ1bmN0aW9uIGxpbmsgKHNjb3BlLCBlbGVtZW50LCBhdHRycywgbW9kZWwpIHtcbiAgICAgICAgLy8gZnVsbCBpbml0aWFsaXNhdGlvbiBvZiBzbGlkZXIgZnJvbSBhIHNpbmdsZSBvYmplY3RcbiAgICAgICAgc2NvcGUuaW5pdFdpZGdldCA9IGZ1bmN0aW9uIChpbml0dmFsdWVzKSB7XG5cbiAgICAgICAgICAgIGlmIChpbml0dmFsdWVzLmJ5U3RlcCkgIHNjb3BlLmJ5U3RlcCAgPSBwYXJzZUludChpbml0dmFsdWVzLmJ5U3RlcCk7XG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy5ub3RNb3JlKSBzY29wZS5ub3RNb3JlID0gcGFyc2VJbnQoaW5pdHZhbHVlcy5ub3RNb3JlKTtcbiAgICAgICAgICAgIGlmIChpbml0dmFsdWVzLm5vdExlc3MpIHNjb3BlLm5vdExlc3MgPSBwYXJzZUludChpbml0dmFsdWVzLm5vdExlc3MpO1xuICAgICAgICAgICAgaWYgKGluaXR2YWx1ZXMuaWQpICAgICAgc2NvcGUuc2xpZGVyaWQ9IGluaXR2YWx1ZXMuaWQ7XG5cbiAgICAgICAgICAgIC8vIGh1Z2VseSBidXQgaW4gc29tZSBjYXNlIERPTSBpcyBub3QgZmluaXNoIHdoZW4gd2UgdHJ5IHRvIHNldCB2YWx1ZXMgISEhXG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSAgIHtcbiAgICAgICAgICAgICAgICBzY29wZS52YWx1ZSA9IGluaXR2YWx1ZXMudmFsdWU7XG4gICAgICAgICAgICAgICAgc2NvcGUuZm9yY2VSZWZyZXNoICg1MCk7IC8vIHdhaXQgNTBtcyBmb3IgRE9NIHRvIGJlIHJlYWR5XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiByZWNvbXB1dGUgc2xpZGUgcG9zaXRpb25pbmdcbiAgICAgICAgc2NvcGUuZm9yY2VSZWZyZXNoID0gZnVuY3Rpb24gKHRpbWVyKSB7XG4gICAgICAgICAgIHZhciB2YWx1ZSA9IHNjb3BlLnZhbHVlO1xuICAgICAgICAgICBzY29wZS52YWx1ZSA9IFt1bmRlZmluZWQsdW5kZWZpbmVkXTtcbiAgICAgICAgICAgJHRpbWVvdXQgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgc2NvcGUuc2V0VmFsdWUodmFsdWVbMF0sMCk7XG4gICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkgIHNjb3BlLnNldFZhbHVlKHZhbHVlWzFdLDEpO1xuICAgICAgICAgICB9LCB0aW1lcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gaGFuZGxlciB0byBjaGFuZ2UgY2xhc3MgZnJvbSBzbGlkZXIgaGFuZGxlXG4gICAgICAgIHNjb3BlLnVwZGF0ZUNsYXNzID0gZnVuY3Rpb24gKGNsYXNzZSwgc3RhdHVzKSB7XG5cbiAgICAgICAgICAgIGlmIChzdGF0dXMpIGVsZW1lbnQuYWRkQ2xhc3MgKGNsYXNzZSk7XG4gICAgICAgICAgICBlbHNlICBlbGVtZW50LnJlbW92ZUNsYXNzIChjbGFzc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLnNldERpc2FibGUgPSBmdW5jdGlvbiAoZGlzYWJsZWQpIHtcblxuICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5hZGRDbGFzcyAoXCJkaXNhYmxlXCIpO1xuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMF0uY3NzICgndmlzaWJpbGl0eScsJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5kdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMV0uY3NzICgndmlzaWJpbGl0eScsJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcyAoXCJkaXNhYmxlXCIpO1xuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMF0uY3NzICgndmlzaWJpbGl0eScsJ3Zpc2libGUnKTtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkgc2NvcGUuaGFuZGxlc1sxXS5jc3MgKCd2aXNpYmlsaXR5JywndmlzaWJsZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUubm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3M7XG4gICAgICAgICAgICB2YXIgcG9pbnQgPSB2YWx1ZSAqIHJhbmdlO1xuXG4gICAgICAgICAgICAvLyBpZiBzdGVwIGlzIHBvc2l0aXZlIGxldCdzIHJvdW5kIHN0ZXAgYnkgc3RlcFxuICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA+ICAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vZCA9IChwb2ludCAtIChwb2ludCAlIHNjb3BlLmJ5U3RlcCkpIC8gc2NvcGUuYnlTdGVwO1xuICAgICAgICAgICAgICAgIHZhciByZW0gPSBwb2ludCAlIHNjb3BlLmJ5U3RlcDtcblxuICAgICAgICAgICAgICAgIHZhciByb3VuZCA9IChyZW0gPj0gc2NvcGUuYnlTdGVwICogMC41ID8gc2NvcGUuYnlTdGVwIDogMCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0PSAobW9kICogc2NvcGUuYnlTdGVwICsgcm91bmQpICsgc2NvcGUubm90TGVzcztcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nIChcInJhbmdlPSVkIHZhbHVlPSVkIHBvaW50PSVkIG1vZD0lZCByZW09JWQgcm91bmQ9JWQgcmVzdWx0PSVkXCIsIHJhbmdlLCB2YWx1ZSwgcG9pbnQsIG1vZCwgcmVtLCByb3VuZCwgcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHN0ZXAgaXMgbmVnYXRpdmUgcmV0dXJuIHJvdW5kIHRvIGFza2VkIGRlY2ltYWxcbiAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPCAgMCkge1xuICAgICAgICAgICAgICAgIHZhciBwb3dlciAgPSAgTWF0aC5wb3cgKDEwLChzY29wZS5ieVN0ZXAgKiAtMSkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNjb3BlLm5vdExlc3MgKyBwYXJzZUludCAocG9pbnQgKiBwb3dlcikgLyBwb3dlcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHN0ZXAgaXMgbnVsbCByZXR1cm4gZnVsbCB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgICAgIH07XG5cbiAgICAgICAgLy8gcmV0dXJuIGN1cnJlbnQgdmFsdWVcbiAgICAgICAgc2NvcGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAob2Zmc2V0LCBoYW5kbGUpIHtcbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gPSAob2Zmc2V0IC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIC8gKHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdID0gb2Zmc2V0IC8gIChzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuZXd2YWx1ZSA9IHNjb3BlLm5vcm1hbGl6ZSAoc2NvcGUucmVsYXRpdmVbaGFuZGxlXSk7XG5cblxuICAgICAgICAgICAgLy8gaWYgaW50ZXJuYWwgdmFsdWUgY2hhbmdlIHVwZGF0ZSBvciBtb2RlbFxuICAgICAgICAgICAgaWYgKG5ld3ZhbHVlICE9PSBzY29wZS52YWx1ZVtoYW5kbGVdKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld3ZhbHVlIDwgc2NvcGUuc3RhcnRWYWx1ZSkgbmV3dmFsdWU9c2NvcGUuc3RhcnRWYWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobmV3dmFsdWUgPiBzY29wZS5zdG9wVmFsdWUpICBuZXd2YWx1ZT1zY29wZS5zdG9wVmFsdWU7XG5cblxuICAgICAgICAgICAgICAgIGlmIChzY29wZS5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUudmlld1ZhbHVlID0gc2NvcGUuZm9ybWF0dGVyIChuZXd2YWx1ZSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUudmlld1ZhbHVlID0gbmV3dmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzY29wZS5kaXNwbGF5c1toYW5kbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzW2hhbmRsZV0uaHRtbCAoc2NvcGUudmlld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsXG4gICAgICAgICAgICAgICAgc2NvcGUudmFsdWVbaGFuZGxlXSA9IG5ld3ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlbCkgbW9kZWwuJHNldFZpZXdWYWx1ZSAoc2NvcGUudmlld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3dmFsdWUgPiBzY29wZS5zdGFydFZhbHVlICYmIG5ld3ZhbHVlIDwgc2NvcGUuc3RvcFZhbHVlKSBzY29wZS50cmFuc2xhdGUob2Zmc2V0LCBoYW5kbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cbiAgICAgICAgc2NvcGUuc2V0U3RhcnQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+IHNjb3BlLnZhbHVlWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5kdWFsKSBzY29wZS5zZXRWYWx1ZSAodmFsdWUsMCk7XG4gICAgICAgICAgICAgICAgZWxzZSBzY29wZS5zZXRWYWx1ZSAodmFsdWUsMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICogKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIHNjb3BlLnN0YXJ0LmNzcygnaGVpZ2h0JyxvZmZzZXQgKyAncHgnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAqICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBzY29wZS5zdGFydC5jc3MoJ3dpZHRoJyxvZmZzZXQgKyAncHgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuc3RhcnRWYWx1ZT0gdmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuc2V0U3RvcCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG9mZnNldDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHZhbHVlIDwgc2NvcGUudmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNjb3BlLmR1YWwpIHNjb3BlLnNldFZhbHVlICh2YWx1ZSwwKTtcbiAgICAgICAgICAgICAgICBlbHNlIHNjb3BlLnNldFZhbHVlICh2YWx1ZSwxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKiAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuc3RhcnQuY3NzKCdoZWlnaHQnLG9mZnNldCArICdweCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICogKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIHNjb3BlLnN0b3AuY3NzKHsncmlnaHQnOiAwLCAnd2lkdGgnOiAoc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAgLSBvZmZzZXQpICsgJ3B4J30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5zdG9wVmFsdWU9IHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsIGhhbmRsZSkge1xuICAgICAgICAgICAgdmFyIHN0YXJ0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAvLyB0YWtlIGhhbmRsZSBzaXplIGluIGFjY291bnQgdG8gY29tcHV0ZSBtaWRkbGVcbiAgICAgICAgICAgICAgICB2YXIgdm9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IC0gb2Zmc2V0O1xuXG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1toYW5kbGVdLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICctd2Via2l0LXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctbW96LXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctbXMtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVkoJyArIHZvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJy1vLXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICd0cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgnICsgdm9mZnNldCArICdweCknXG4gICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIGlmICghc2NvcGUuZHVhbCkgc2NvcGUuc2xpZGVyLmNzcygnaGVpZ2h0Jywgb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICBlbHNlIGlmIChzY29wZS5yZWxhdGl2ZVsxXSAmJiBzY29wZS5yZWxhdGl2ZVswXSkge1xuICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSAoc2NvcGUucmVsYXRpdmVbMV0gLSBzY29wZS5yZWxhdGl2ZVswXSkgKiAgc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgc3RhcnQgID0gKHNjb3BlLnJlbGF0aXZlWzBdICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICBzY29wZS5zbGlkZXIuY3NzICh7J2JvdHRvbSc6IHN0YXJ0KydweCcsJ2hlaWdodCc6IGhlaWdodCArICdweCd9KTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzW2hhbmRsZV0uY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW1vei10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWCgnICsgb2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctbXMtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW8tdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAndHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5kdWFsKSBzY29wZS5zbGlkZXIuY3NzKCd3aWR0aCcsb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcGUucmVsYXRpdmVbMV0gJiYgc2NvcGUucmVsYXRpdmVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gKHNjb3BlLnJlbGF0aXZlWzFdIC0gc2NvcGUucmVsYXRpdmVbMF0pICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gKHNjb3BlLnJlbGF0aXZlWzBdICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5zbGlkZXIuY3NzICh7J2xlZnQnOiBzdGFydCsncHgnLCd3aWR0aCc6IHdpZHRoICsgJ3B4J30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBwb3NpdGlvbiBoYW5kbGUgb24gdGhlIGJhciBkZXBlbmRpbmcgYSBnaXZlbiB2YWx1ZVxuICAgICAgICBzY29wZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSAsIGhhbmRsZSkge1xuICAgICAgICAgICAgdmFyIG9mZnNldDtcblxuICAgICAgICAgICAgLy8gaWYgdmFsdWUgZGlkIG5vdCBjaGFuZ2UgaWdub3JlXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHJldHVybjtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSAgIHZhbHVlPTA7XG4gICAgICAgICAgICBpZiAodmFsdWUgPiBzY29wZS5ub3RNb3JlKSB2YWx1ZT1zY29wZS5ub3RNb3JlO1xuICAgICAgICAgICAgaWYgKHZhbHVlIDwgc2NvcGUubm90TGVzcykgdmFsdWU9c2NvcGUubm90TGVzcztcblxuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUucmVsYXRpdmVbaGFuZGxlXSA9ICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlID09PSAwKSBvZmZzZXQgPSAoc2NvcGUucmVsYXRpdmVbaGFuZGxlXSAqIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSArIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LzI7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gMSkgb2Zmc2V0ID0gc2NvcGUucmVsYXRpdmVbaGFuZGxlXSAqIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gPSAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUucmVsYXRpdmVbaGFuZGxlXSAqICAoc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS50cmFuc2xhdGUgKG9mZnNldCxoYW5kbGUpO1xuICAgICAgICAgICAgc2NvcGUudmFsdWVbaGFuZGxlXSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUuZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBjYWxsIHRocm91Z2ggc2V0VmFsdWUgd2UgZG8gbm90IHBhc3MgY2JIYW5kbGVcbiAgICAgICAgICAgICAgICBzY29wZS52aWV3VmFsdWUgPSBzY29wZS5mb3JtYXR0ZXIgKHZhbHVlLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY29wZS52aWV3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1vZGVsKSBtb2RlbC4kc2V0Vmlld1ZhbHVlKCBzY29wZS52aWV3VmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUuZGlzcGxheXNbaGFuZGxlXSkge1xuICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzW2hhbmRsZV0uaHRtbCAoc2NvcGUudmlld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgICAgIC8vIE1pbmltYWwga2V5c3Ryb2tlIGhhbmRsaW5nIHRvIGNsb3NlIHBpY2tlciB3aXRoIEVTQyBbc2NvcGUuYWN0aWYgaXMgY3VycmVudCBoYW5kbGUgaW5kZXhdXG4gICAgICAgIHNjb3BlLmtleWRvd249ICBmdW5jdGlvbihlKXtcblxuICAgICAgICAgICAgc3dpdGNoKGUua2V5Q29kZSl7XG4gICAgICAgICAgICAgICAgY2FzZSAzOTogLy8gUmlnaHRcbiAgICAgICAgICAgICAgICBjYXNlIDM4OiAvLyB1cFxuICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA+IDApIHNjb3BlLiRhcHBseShzY29wZS5zZXRWYWx1ZSAoKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXStzY29wZS5ieVN0ZXApLCBzY29wZS5hY3RpZikpO1xuICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA8IDApIHNjb3BlLiRhcHBseShzY29wZS5zZXRWYWx1ZSAoKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSsoMSAvIE1hdGgucG93KDEwLCBzY29wZS5ieVN0ZXAqLTEpKSksc2NvcGUuYWN0aWYpKTtcbiAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjaykgIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0sIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzNzogLy8gbGVmdFxuICAgICAgICAgICAgICAgIGNhc2UgNDA6IC8vIGRvd25cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA+IDApIHNjb3BlLiRhcHBseShzY29wZS5zZXRWYWx1ZSAoKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSAtIHNjb3BlLmJ5U3RlcCksIHNjb3BlLmFjdGlmKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPCAwKSBzY29wZS4kYXBwbHkoc2NvcGUuc2V0VmFsdWUgKChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0gLSAoMSAvIE1hdGgucG93KDEwLCBzY29wZS5ieVN0ZXAqLTEpKSksc2NvcGUuYWN0aWYpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrKSAgc2NvcGUuY2FsbGJhY2sgKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjc6IC8vIGVzY1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzW3Njb3BlLmFjdGlmXVswXS5ibHVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUubW92ZUhhbmRsZSA9IGZ1bmN0aW9uIChoYW5kbGUsIGNsaWVudFgsIGNsaWVudFkpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtIGNsaWVudFk7XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0IDwgc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBjbGllbnRYIC0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKChjbGllbnRYICsgc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCkgPiBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuZ2V0VmFsdWUgIChvZmZzZXQsIGhhbmRsZSk7XG5cbiAgICAgICAgICAgIC8vIHByZXZlbnQgZHVhbCBoYW5kbGUgdG8gY3Jvc3NcbiAgICAgICAgICAgIGlmIChzY29wZS5kdWFsICYmIHNjb3BlLnZhbHVlIFswXSA+IHNjb3BlLnZhbHVlWzFdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gMCkgc2NvcGUuc2V0VmFsdWUgKHNjb3BlLnZhbHVlWzBdICwgMSk7XG4gICAgICAgICAgICAgICAgZWxzZSBzY29wZS5zZXRWYWx1ZShzY29wZS52YWx1ZVsxXSwwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgICAgIHNjb3BlLmZvY3VzQ0IgPSBmdW5jdGlvbiAoaW5zaWRlKSB7XG4gICAgICAgICAgICBpZiAoaW5zaWRlKSB7XG4gICAgICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCdrZXlkb3duJyxzY29wZS5rZXlkb3duKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgna2V5ZG93bicsc2NvcGUua2V5ZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYmFyIHdhcyB0b3VjaCBsZXQgbW92ZSBoYW5kbGUgdG8gdGhpcyBwb2ludFxuICAgICAgICBzY29wZS50b3VjaEJhckNCID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlPTA7XG4gICAgICAgICAgICB2YXIgcmVsYXRpdmU7XG4gICAgICAgICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgICAgICAgICAgdmFyIG9sZHZhbHVlID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSB0d28gaGFuZGxlcyBzZWxlY3QgY2xvc2VzdCBvbmUgZnJvbSB0b3VjaCBwb2ludFxuICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHJlbGF0aXZlID0gKHRvdWNoZXNbMF0ucGFnZVkgLSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSkgLyBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgICAgICBlbHNlIHJlbGF0aXZlPSAodG91Y2hlc1swXS5wYWdlWCAtIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkgLyBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlMCA9IE1hdGguYWJzKHJlbGF0aXZlIC0gc2NvcGUucmVsYXRpdmVbMF0pO1xuICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZTEgPSBNYXRoLmFicyhyZWxhdGl2ZSAtIHNjb3BlLnJlbGF0aXZlWzFdKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UxIDwgZGlzdGFuY2UwKSBoYW5kbGU9MTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbW92ZSBoYW5kbGUgdG8gbmV3IHBsYWNlXG4gICAgICAgICAgICBzY29wZS5tb3ZlSGFuZGxlIChoYW5kbGUsdG91Y2hlc1swXS5wYWdlWCwgdG91Y2hlc1swXS5wYWdlWSk7XG4gICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2sgJiYgb2xkdmFsdWUgIT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBoYW5kbGUgd2FzIHRvdWNoIGFuZCBkcmFnXG4gICAgICAgIHNjb3BlLnRvdWNoSGFuZGxlQ0IgPSBmdW5jdGlvbiAodG91Y2hldnQsIGhhbmRsZSkge1xuICAgICAgICAgICAgdmFyIG9sZHZhbHVlID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcblxuICAgICAgICAgICAgdG91Y2hldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICRkb2N1bWVudC5vbigndG91Y2htb3ZlJyx0b3VjaG1vdmUpO1xuICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCd0b3VjaGVuZCcgLHRvdWNoZW5kKTtcbiAgICAgICAgICAgIGVsZW1lbnQudW5iaW5kKCd0b3VjaHN0YXJ0Jywgc2NvcGUudG91Y2hCYXJDQik7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRvdWNobW92ZShldmVudCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCB0b3VjaGVzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubW92ZUhhbmRsZSAoaGFuZGxlLHRvdWNoZXNbaWR4XS5wYWdlWCwgdG91Y2hlc1tpZHhdLnBhZ2VZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRvdWNoZW5kKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCd0b3VjaG1vdmUnLHRvdWNobW92ZSk7XG4gICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCd0b3VjaGVuZCcgLHRvdWNoZW5kKTtcbiAgICAgICAgICAgICAgIGVsZW1lbnQub24oJ3RvdWNoc3RhcnQnLCBzY29wZS50b3VjaEJhckNCKTtcblxuICAgICAgICAgICAgICAgIC8vIGlmIHZhbHVlIGNoYW5nZSBub3RpZnkgYXBwbGljYXRpb24gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2sgJiYgb2xkdmFsdWUgIT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5oYW5kbGVDQiA9IGZ1bmN0aW9uIChjbGlja2V2ZW50LCBoYW5kbGUpIHtcblxuICAgICAgICAgICAgaWYgKGF0dHJzLmF1dG9tYXRpYykgcmV0dXJuO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgb2xkdmFsdWUgPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgbW91c2UgZXZlbnQgdG8gdHJhY2sgaGFuZGxlXG4gICAgICAgICAgICBjbGlja2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICRkb2N1bWVudC5vbignbW91c2Vtb3ZlJyxtb3VzZW1vdmUpO1xuICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCdtb3VzZXVwJywgbW91c2V1cCk7XG4gICAgICAgICAgICBzY29wZS5oYW5kbGVzW2hhbmRsZV1bMF0uZm9jdXMoKTtcbiAgICAgICAgICAgIHNjb3BlLmFjdGlmPWhhbmRsZTtcblxuICAgICAgICAgICAgLy8gc2xpZGVyIGhhbmRsZSBpcyBtb3ZpbmdcbiAgICAgICAgICAgIGZ1bmN0aW9uIG1vdXNlbW92ZShldmVudCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLm1vdmVIYW5kbGUgKGhhbmRsZSwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1vdXNlIGlzIHVwIGRhbnMgbGVhdmUgc2xpZGVyIHNlbmQgcmVzaXplIGV2ZW50c1xuICAgICAgICAgICAgZnVuY3Rpb24gbW91c2V1cCgpIHtcbiAgICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmUpO1xuICAgICAgICAgICAgICAgICRkb2N1bWVudC51bmJpbmQoJ21vdXNldXAnLCBtb3VzZXVwKTtcblxuICAgICAgICAgICAgICAgIC8vIGlmIHZhbHVlIGNoYW5nZSBub3RpZnkgYXBwbGljYXRpb24gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2sgJiYgb2xkdmFsdWUgIT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBzaW11bGF0ZSBqcXVlcnkgZmluZCBieSBjbGFzc2VzIGNhcGFiaWxpdGllcyBbd2FybmluZyBvbmx5IHJldHVybiAxc3QgZWxlbWVudHNdXG4gICAgICAgIHNjb3BlLmZpbmQgPSBmdW5jdGlvbiAoc2VsZWN0LCBlbGVtKSB7XG4gICAgICAgICAgICB2YXIgZG9tZWxlbTtcblxuICAgICAgICAgICAgaWYgKGVsZW0pIGRvbWVsZW0gPSBlbGVtWzBdLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0KTtcbiAgICAgICAgICAgIGVsc2UgZG9tZWxlbSA9IGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvcihzZWxlY3QpO1xuXG4gICAgICAgICAgICB2YXIgYW5nZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChkb21lbGVtKTtcbiAgICAgICAgICAgIHJldHVybiAoYW5nZWxlbSk7XG4gICAgICAgIH07XG5cblxuXG4gICAgICAgIHNjb3BlLmluaXRpYWxTZXR0aW5ncyA9IGZ1bmN0aW9uIChpbml0aWFsKSB7XG4gICAgICAgICAgICB2YXIgZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0O1xuICAgICAgICAgICAgc2NvcGUudmFsdWU9W107ICAvLyBzdG9yZSBsb3cvaGVpZ2h0IHZhbHVlIHdoZW4gdHdvIGhhbmRsZXNcbiAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlPVtdO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUucHJlY2lzaW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0ID0gKCcnICsgc2NvcGUuYnlTdGVwKS5tYXRjaCgvXFwuKFtcXGRdKikvKTtcbiAgICAgICAgICAgICAgICBzY29wZS5wcmVjaXNpb24gPSBkZWNpbWFsX3BsYWNlc19tYXRjaF9yZXN1bHQgJiYgZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0WzFdID8gZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0WzFdLmxlbmd0aCA6IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHBvc2l0aW9uIGhhbmRsZSB0byBpbml0aWFsIHZhbHVlKHMpXG4gICAgICAgICAgICBlbGVtZW50Lm9uKCd0b3VjaHN0YXJ0Jywgc2NvcGUudG91Y2hCYXJDQik7XG4gICAgICAgICAgICBzY29wZS5oYW5kbGVzWzBdLm9uKCd0b3VjaHN0YXJ0JywgZnVuY3Rpb24oZXZ0KXtzY29wZS50b3VjaEhhbmRsZUNCKGV2dCwwKTt9KTtcblxuICAgICAgICAgICAgLy8gdGhpcyBzbGlkZXIgaGFzIHR3byBoYW5kbGVzIGxvdy9oaWdodFxuICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzFdLmFkZENsYXNzKCdyYW5nZS1zbGlkZXItaGFuZGxlJyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1sxXS5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGV2dCl7c2NvcGUudG91Y2hIYW5kbGVDQihldnQsMSk7fSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5pbml0dmFsdWVzKSBzY29wZS5zZXRWYWx1ZSAoaW5pdGlhbFsxXSwxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhbiBpbml0c3RhdGUgb2JqZWN0IGFwcGx5IGl0XG4gICAgICAgICAgICBpZiAoc2NvcGUuaW5pdHZhbHVlcykgc2NvcGUuaW5pdFdpZGdldCAoc2NvcGUuaW5pdHZhbHVlcyk7XG4gICAgICAgICAgICBlbHNlICAgc2NvcGUuc2V0VmFsdWUgKGluaXRpYWxbMF0sMCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNjb3BlLnNsaWRlcmlkICAgPSBhdHRycy5pZCB8fCBcInNsaWRlci1cIiArIHBhcnNlSW50IChNYXRoLnJhbmRvbSgpICogMTAwMCk7XG4gICAgICAgICAgICBzY29wZS5zdGFydFZhbHVlID0gLUluZmluaXR5O1xuICAgICAgICAgICAgc2NvcGUuc3RvcFZhbHVlICA9IEluZmluaXR5O1xuICAgICAgICAgICAgc2NvcGUuYnlTdGVwICAgPSBwYXJzZUludChhdHRycy5ieVN0ZXApIHx8IDE7XG4gICAgICAgICAgICBzY29wZS52ZXJ0aWNhbCA9IGF0dHJzLnZlcnRpY2FsICAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5kdWFsICAgICA9IGF0dHJzLmR1YWxIYW5kbGVzfHwgZmFsc2U7XG4gICAgICAgICAgICBzY29wZS50cmlnZ2VyX2lucHV0X2NoYW5nZT0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5ub3RNb3JlICA9IHBhcnNlSW50KGF0dHJzLm5vdE1vcmUpICAgfHwgMTAwO1xuICAgICAgICAgICAgc2NvcGUubm90TGVzcyAgPSBwYXJzZUludChhdHRycy5ub3RMZXNzKSAgIHx8IDA7XG5cbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkgZWxlbWVudC5hZGRDbGFzcyhcInZlcnRpY2FsLXJhbmdlXCIpO1xuXG4gICAgICAgICAgICBzY29wZS5oYW5kbGVzPSBbc2NvcGUuZmluZCgnLmhhbmRsZS1taW4nKSwgc2NvcGUuZmluZCgnLmhhbmRsZS1tYXgnKV07XG4gICAgICAgICAgICBzY29wZS5iYXIgICAgPSBlbGVtZW50O1xuICAgICAgICAgICAgc2NvcGUuc2xpZGVyID0gc2NvcGUuZmluZCgnLnJhbmdlLXNsaWRlci1hY3RpdmUtc2VnbWVudCcpO1xuICAgICAgICAgICAgc2NvcGUuc3RhcnQgID0gc2NvcGUuZmluZCgnLmliei1yYW5nZS1zbGlkZXItc3RhcnQnKTtcbiAgICAgICAgICAgIHNjb3BlLnN0b3AgICA9IHNjb3BlLmZpbmQoJy5pYnotcmFuZ2Utc2xpZGVyLXN0b3AnKTtcbiAgICAgICAgICAgIHNjb3BlLmRpc2FibGU9IGF0dHJzLmRpc2FibGUgfHwgZmFsc2U7XG5cbiAgICAgICAgICAgIHNjb3BlLmN0cmxoYW5kbGUgPSBuZXcgUmFuZ2VTbGlkZXJIYW5kbGUgKHNjb3BlKTtcblxuICAgICAgICAgICAgLy8gcHJlcGFyZSBET00gb2JqZWN0IHBvaW50ZXIgdG8gY29tcHV0ZSBzaXplIGR5bmFtaWNhbGx5XG4gICAgICAgICAgICBzY29wZS5ib3VuZHMgPSB7XG4gICAgICAgICAgICAgICAgYmFyICAgIDogZWxlbWVudFswXSxcbiAgICAgICAgICAgICAgICBoYW5kbGVzOiBbc2NvcGUuaGFuZGxlc1swXVswXSwgc2NvcGUuaGFuZGxlc1sxXVswXV1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChhdHRycy5kaXNhYmxlID09PSAndHJ1ZScpIHNjb3BlLnNldERpc2FibGUodHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmIChhdHRycy5kaXNwbGF5VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRycy5kaXNwbGF5VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdHJ1ZSA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hhbmRsZScgOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZGlzcGxheXMgPSBzY29wZS5oYW5kbGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1swXS5hZGRDbGFzcygnaWJ6LXJhbmdlLXNsaWRlci1kaXNwbGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkgc2NvcGUuaGFuZGxlc1sxXS5hZGRDbGFzcygnaWJ6LXJhbmdlLXNsaWRlci1kaXNwbGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzID0gIFskZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKGF0dHJzLmRpc3BsYXlUYXJnZXQpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Ugc2NvcGUuZGlzcGxheXM9W107XG5cbiAgICAgICAgICAgIC8vIGV4dHJhY3QgaW5pdGlhbCB2YWx1ZXMgZnJvbSBhdHRycyBhbmQgcGFyc2UgaW50byBpbnRcbiAgICAgICAgICAgIGlmICghYXR0cnMuaW5pdGlhbCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLmluaXRpYWwgID0gW3Njb3BlLm5nTW9kZWwsIHNjb3BlLm5nTW9kZWxdOyAvLyBpbml0aWFsaXplIHRvIG1vZGVsIHZhbHVlc1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5pdGlhbCAgPSBhdHRycy5pbml0aWFsLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuaW5pdGlhbCA9IFtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFswXSAhPT0gdW5kZWZpbmVkID8gcGFyc2VJbnQgKGluaXRpYWxbMF0pIDogc2NvcGUubm90TGVzcyxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFsxXSAhPT0gdW5kZWZpbmVkID8gcGFyc2VJbnQgKGluaXRpYWxbMV0pIDogc2NvcGUubm90TW9yZVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1vbml0b3IgYW55IGNoYW5nZXMgb24gc3RhcnQvc3RvcCBkYXRlcy5cbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaCgnc3RhcnRBdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS52YWx1ZSA8IHNjb3BlLnN0YXJ0QXQgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vc2NvcGUuc2V0VmFsdWUgKHNjb3BlLnN0YXJ0QXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuc3RhcnRBdCkgc2NvcGUuc2V0U3RhcnQgKHNjb3BlLnN0YXJ0QXQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaCgnc3RvcEF0JyAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS52YWx1ZSA+IHNjb3BlLnN0b3BBdCkge1xuICAgICAgICAgICAgICAgICAgICAvL3Njb3BlLnNldFZhbHVlIChzY29wZS5zdG9wQXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuc3RvcEF0KSBzY29wZS5zZXRTdG9wIChzY29wZS5zdG9wQXQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGZpbmlzaCB3aWRnZXQgaW5pdGlhbGlzYXRpb25cbiAgICAgICAgICAgIHNjb3BlLmluaXRpYWxTZXR0aW5ncyAoc2NvcGUuaW5pdGlhbCk7XG5cbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5pbml0KCk7XG4gICAgICAgIFxuICAgICAgICAgLy8gc2xpZGVyIGlzIHJlYWR5IHByb3ZpZGUgY29udHJvbCBoYW5kbGUgdG8gYXBwbGljYXRpb24gY29udHJvbGxlclxuICAgICAgICBzY29wZS4kd2F0Y2ggKCdpbml0aG9vaycsIGZ1bmN0aW9uICgpIHsgICAgICAgICAvLyBpbml0IFZhbHVlcyBtYXkgYXJyaXZlIGxhdGVcbiAgICAgICAgICAgIGlmIChzY29wZS5pbml0aG9vaykgc2NvcGUuaW5pdGhvb2sgKHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzY29wZS4kd2F0Y2ggKCdpbml0dmFsdWVzJywgZnVuY3Rpb24gKCkgeyBcdC8vIGluaXQgVmFsdWVzIG1heSBhcnJpdmUgbGF0ZVxuICAgICAgICAgICAgaWYgKHNjb3BlLmluaXR2YWx1ZXMpIHNjb3BlLmluaXRXaWRnZXQoc2NvcGUuaW5pdHZhbHVlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHR3by13YXkgYmluZGluZyBpZiBtb2RlbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIHNjb3BlLiR3YXRjaCAoJ25nTW9kZWwnLCBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICBzY29wZS5zZXRWYWx1ZShuZXdWYWx1ZSwgMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxucmV0dXJuIHtcbiAgICByZXN0cmljdDogXCJFXCIsICAgIC8vIHJlc3RyaWN0IHRvIDxyYW5nZS1zbGlkZXI+IEhUTUwgZWxlbWVudCBuYW1lXG4gICAgc2NvcGU6IHtcbiAgICAgICAgc3RhcnRBdCAgOic9JywgIC8vIEZpcnN0IGFjY2VwdGFibGUgZGF0ZVxuICAgICAgICBzdG9wQXQgICA6Jz0nLCAgLy8gTGFzdCBhY2NlcHRhYmxlIGRhdGVcbiAgICAgICAgY2FsbGJhY2sgOic9JywgIC8vIENhbGxiYWNrIHRvIGFjdGlmIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkXG4gICAgICAgIGZvcm1hdHRlcjonPScsICAvLyBDYWxsYmFjayBmb3IgZHJhZyBldmVudCBjYWxsIGVhY2ggdGltZSBpbnRlcm5hbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIGluaXRob29rIDonPScsICAvLyBIb29rIHBvaW50IHRvIGNvbnRyb2wgc2xpZGVyIGZyb20gQVBJXG4gICAgICAgIGNiaGFuZGxlIDonPScsICAvLyBBcmd1bWVudCBhZGRlZCB0byBldmVyeSBjYWxsYmFja1xuICAgICAgICBpbml0dmFsdWVzOic9JywgICAvLyBJbml0aWFsIHZhbHVlcyBhcyBhIHNpbmdsZSBvYmplY3RcbiAgICAgICAgbmdNb2RlbDogJz0nICAgIC8vIHRoZSBtb2RlbCB2YWx1ZVxuICAgIH0sXG4gICAgcmVxdWlyZTogJz9uZ01vZGVsJyxcbiAgICB0ZW1wbGF0ZTogdGVtcGxhdGUsIC8vIGh0bWwgdGVtcGxhdGUgaXMgYnVpbGQgZnJvbSBKU1xuICAgIHJlcGxhY2U6IHRydWUsICAgICAgLy8gcmVwbGFjZSBjdXJyZW50IGRpcmVjdGl2ZSB3aXRoIHRlbXBsYXRlIHdoaWxlIGluaGVyaXRpbmcgb2YgY2xhc3NcbiAgICBsaW5rOiBsaW5rICAgICAgICAgIC8vIHBpY2thZGF0ZSBvYmplY3QncyBtZXRob2RzXG59O1xufV0pO1xuXG5jb25zb2xlLmxvZyAoXCJSYW5nZVNsaWRlciBMb2FkZWRcIik7XG5cbn0pKCk7IiwiLypcbiBhbHNhLWdhdGV3YXkgLS0gcHJvdmlkZSBhIFJFU1QvSFRUUCBpbnRlcmZhY2UgdG8gQUxTQS1NaXhlclxuXG4gQ29weXJpZ2h0IChDKSAyMDE1LCBGdWx1cCBBciBGb2xsXG5cbiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3JcbiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gYWxvbmcgd2l0aCBzY29wZSBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuXG5cbiBSZWZlcmVuY2VzOlxuXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdGVtcGxhdGUgPVxuICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYWZiLW1vbml0b3JcIiBuZy1jbGljaz1cImdldHBpbmcoKVwiPicgK1xuICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYWZiLXJlZnJlc2gtdG9rZW5cIiAgPmFmYjovL3t7aG9zdG5hbWV9fTp7e2h0dHBkcG9ydH19PC9zcGFuPicgK1xuICAgICAgICAgJzxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+JyArXG4gICAgICAgICAnPC9kaXY+JztcblxuXG4vLyBzY29wZSBtb2R1bGUgaXMgbG9hZCBzdGF0aWNhbGx5IGJlZm9yZSBhbnkgcm91dGUgaXMgY2F0aXZhdGVkXG5hbmd1bGFyLm1vZHVsZSgnVG9rZW5SZWZyZXNoJywgWydBcHBDb25maWcnLCAnTW9kYWxOb3RpZmljYXRpb24nXSlcblxuICAgIC5kaXJlY3RpdmUgKCd0b2tlblJlZnJlc2gnLCBbXCIkbG9nXCIsIFwiJHdpbmRvd1wiLCBcIiR0aW1lb3V0XCIsIFwiJGxvY2F0aW9uXCIsIFwiTm90aWZpY2F0aW9uXCIsIFwiQXBwQ29uZmlnXCIsIFwiQXBwQ2FsbFwiLCBmdW5jdGlvbigkbG9nLCAkd2luZG93LCAkdGltZW91dCwgJGxvY2F0aW9uLCBOb3RpZmljYXRpb24sIEFwcENvbmZpZywgQXBwQ2FsbCkge1xuXG4gICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgICAgICBzY29wZS5sb2dnZWQ9dW5kZWZpbmVkOyAvLyBuZWl0aGVyIHRodSBuZWl0aGVyIGZhbHNlXG4gICAgICAgIFxuICAgICAgICAkd2luZG93Lm9uYmVmb3JldW5sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKHNjb3BlLnBsdWdpbiwgXCJsb2dvdXRcIiwgey8qcXVlcnkqL30sIGZ1bmN0aW9uICgpIHsgICAgXG4gICAgICAgICAgICAkbG9nLmxvZyhcIk9QQSBleGl0XCIpOyAgICAgICAgICAgIFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgICAgICAgICAgIFxuICAgICAgICBzY29wZS5vbmxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbGVtLmFkZENsYXNzICAgIChcIm9ubGluZVwiKTtcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwib2ZmbGluZVwiKTtcbiAgICAgICAgICAgIHNjb3BlLmxvZ2dlZD10cnVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLm9mZmxpbmUgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyAgICAoXCJvZmZsaW5lXCIpO1xuICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyAoXCJvbmxpbmVcIik7XG4gICAgICAgICAgICBzY29wZS5sb2dnZWQ9ZmFsc2U7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzY29wZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoc2NvcGUubG9nZ2VkICE9PSBmYWxzZSkgIHtcbiAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24ud2FybmluZyAoe21lc3NhZ2U6IFwiQXBwRnJhbWV3b3JrIEJpbmRlciBMb3N0XCIsIGRlbGF5OiA1MDAwfSk7XG4gICAgICAgICAgICAgICAgc2NvcGUub2ZmbGluZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUuc3RhdHVzID0gMDtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNjb3BlLm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGpyZXNwLCBlcnJjb2RlKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChlcnJjb2RlICE9PSAyMDAgfHwganJlc3AucmVxdWVzdC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLndhcm5pbmcgKHttZXNzYWdlOiBcImF1dG8tY29ubmVjdCA6XCIgKyBqcmVzcC5yZXF1ZXN0LmluZm8sIGRlbGF5OiAxMDAwMH0pO1xuICAgICAgICAgICAgICAgIHNjb3BlLm9mZmxpbmUoKTsgXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoc2NvcGUubG9nZ2VkICE9PSB0cnVlKSAge1xuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5zdWNjZXNzICh7bWVzc2FnZTogXCJBcHBGcmFtZXdvcmsgQmluZGVyIENvbm5lY3RlZFwiLCBkZWxheTogMzAwMH0pO1xuICAgICAgICAgICAgICAgIHNjb3BlLm9ubGluZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjaykgc2NvcGUuY2FsbGJhY2soanJlc3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBzY29wZS5zdGF0dXMgPSAxOyAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ2hlY2sgQmluZGVyIHN0YXR1c1xuICAgICAgICBzY29wZS5nZXRwaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEFwcENhbGwuZ2V0IChzY29wZS5wbHVnaW4sIFwicGluZ1wiLCB7LypxdWVyeSovfSxmdW5jdGlvbihqcmVzcCwgZXJyY29kZSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnJjb2RlICE9PSAyMDAgfHwganJlc3AucmVxdWVzdC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi53YXJuaW5nICh7bWVzc2FnZToganJlc3AucmVxdWVzdC5pbmZvLCBkZWxheTogNTAwMH0pO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5vZmZsaW5lKCk7IFxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlc3RhcnQgYSBuZXcgdGltZXIgZm9yIG5leHQgcGluZ1xuICAgICAgICAgICAgICAgICR0aW1lb3V0IChzY29wZS5nZXRwaW5nLCBBcHBDb25maWcuc2Vzc2lvbi5waW5ncmF0ZSoxMDAwKTtcbiAgICAgICAgICAgIH0sIHNjb3BlLm9uZXJyb3IpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgQmluZGVyIHN0YXR1c1xuICAgICAgICBzY29wZS5yZWZyZXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIEFwcENhbGwuZ2V0IChzY29wZS5wbHVnaW4sIFwicmVmcmVzaFwiLCB7LypxdWVyeSovfSwgZnVuY3Rpb24oanJlc3AsIGVycmNvZGUpIHtcblxuICAgICAgICAgICAgICAgIHNjb3BlLm9uc3VjY2VzcyAoanJlc3AsIGVycmNvZGUpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIHJlc3RhcnQgYSBuZXcgdGltZXIgZm9yIG5leHQgcmVmcmVzaFxuICAgICAgICAgICAgICAgICR0aW1lb3V0IChzY29wZS5yZWZyZXNoLCBBcHBDb25maWcuc2Vzc2lvbi50aW1lb3V0ICoyNTApO1xuICAgICAgICAgICAgfSwgc2NvcGUub25lcnJvcik7ICAgICAgICAgICAgXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyBJbml0aWFsIGNvbm5lY3Rpb25cbiAgICAgICAgc2NvcGUubG9nZ2luID0gZnVuY3Rpb24oKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICBBcHBDYWxsLmdldCAoc2NvcGUucGx1Z2luLCBcImNvbm5lY3RcIiwge3Rva2VuOiBBcHBDb25maWcuc2Vzc2lvbi5pbml0aWFsfSwgZnVuY3Rpb24oanJlc3AsIGVycmNvZGUpIHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoIXNjb3BlLm9uc3VjY2VzcyAoanJlc3AsIGVycmNvZGUpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gSW50aWFsIHRva2VuIHdhcyBhY2NlcHRlZCBsZXQncyBzdGFydCBwaW5nICYgcmVmcmVzaFxuICAgICAgICAgICAgICAgICR0aW1lb3V0IChzY29wZS5nZXRwaW5nLCBBcHBDb25maWcuc2Vzc2lvbi5waW5ncmF0ZSoxMDAwKTtcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoc2NvcGUucmVmcmVzaCwgQXBwQ29uZmlnLnNlc3Npb24udGltZW91dCAqMjUwKTtcbiBcbiAgICAgICAgICAgIH0sIHNjb3BlLm9uZXJyb3IpO1xuICAgICAgICB9O1xuXG5cbiAgICAgICAgLy8gUGFyc2UgV2lkZ2V0IFBhcmFtZXRlcnNcbiAgICAgICAgc2NvcGUucGx1Z2luICAgID0gYXR0cnMucGx1Z2luIHx8IFwiYXV0aFwiO1xuICAgICAgICBzY29wZS5pY29uICAgICAgPSBhdHRycy5pY29uICAgfHwgXCJmaS1saWdodGJ1bGJcIjtcbiAgICAgICAgc2NvcGUuaG9zdG5hbWUgID0gJGxvY2F0aW9uLmhvc3QoKTtcbiAgICAgICAgc2NvcGUuaHR0cGRwb3J0ID0gJGxvY2F0aW9uLnBvcnQoKTtcbiAgICAgICAgc2NvcGUuYXV0b2xvZyAgID0gSlNPTi5wYXJzZShhdHRycy5hdXRvbG9nIHx8IGZhbHNlKTtcbiAgICAgICAgXG4gICAgICAgIC8vIGF1dG9zdGFydCBsb2cgaWYgcmVxdWVzdGVkXG4gICAgICAgIGlmIChzY29wZS5hdXRvbG9nKSBzY29wZS5sb2dnaW4oKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgY2FsbGJhY2sgOiBcIj1cIlxuICAgICAgICB9LFxuICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICBsaW5rOiBteW1ldGhvZHNcbiAgICB9O1xufV0pO1xuXG59KSgpO1xuY29uc29sZS5sb2cgKFwiVG9rZW4gUmVmcmVzaCBMb2FkZWRcIik7XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqIFxuICogcmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvbW91c2VvdmVyXG4gKiBcbiAqIHVzYWdlOiBcbiAqIFxuICogdGlwTW9kYWw6IGxpc3RlbiBldmVudCBmcm9tIGVsZW0ucGFyZW50KCkgdG8gZGlzcGxheSB0aXAtbW9kYWxcbiAqICAgICAgPGRpdiBjbGFzcz1cInh4eHhcIj5cbiAqICAgICAgICAgIDx0aXAtbW9kYWwgdGlwPXh4eHg+PC90aXAtbW9kYWw+XG4gKiAgICAgICAgICA8aW5wdXQtdGV4dCAuLi4uPjwvaW5wdXQtdGV4dD5cbiAqICAgICAgPC9kaXY+XG4gKiAgICAgIFxuICogTm90ZTogdXNlIENTUy52aXNpYmlsaXR5IHRvIGF2b2lkIGRpc3BsYXkgZmxpY2tlcmluZyBhdCBpbml0aWFsIGRpc3BsYXkuXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG1wbCA9ICc8ZGl2IGNsYXNzPVwidGlwLW1vZGFsLXBvcHVwXCI+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJ7e2ljb259fVwiPjwvaT4nICtcbiAgICAgICAgICAgICc8c3Bhbj57e3RpcH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvc3Bhbj48L2Rpdj4nIDtcblxuICAgIGFuZ3VsYXIubW9kdWxlKCdNb2RhbE5vdGlmaWNhdGlvbicsIFtdKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndGlwTW9kYWwnLCBbXCIkdGltZW91dFwiLCBmdW5jdGlvbiAoJHRpbWVvdXQpIHtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50ID0gZWxlbS5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kYWwgICAgPSBlbGVtLmZpbmQoXCJkaXZcIik7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBkZWxheSB0aXAgZGlzcGxheSB0byBhdm9pZCBibGlua2luZyB3aGVuIG1vdmluZyBtb3VzZSBmYXN0XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRpc3BsYXkgKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuc2hvdykgc2NvcGUubW9kYWwuY3NzKHtvcGFjaXR5OiAxLCB2aXNpYmlsaXR5Oid2aXNpYmxlJ30pOyAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnRpbWVvdXQgPSAkdGltZW91dChhY3Rpb24sIHNjb3BlLmRlbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2xvc2UgKCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnNob3cgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RhbC5jc3Moe29wYWNpdHk6IDAsIHZpc2liaWxpdHk6J2hpZGRlbid9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAvLyBhanVzdCBpY29uIG9yIHVzZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gID0gYXR0cnMuaWNvbiB8fCAnZmktbGlnaHRidWxiJztcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBQYXJlbnQgZWxlbWVudCB0byBnZXQgbW91c2UgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmFkZENsYXNzICgnYXMtbW9kYWwtdGlwJyk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdjbGljaycsIGNsb3NlKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmJpbmQoJ2ZvY3VzJywgZGlzcGxheSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdtb3VzZW92ZXInLCBkaXNwbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmJpbmQoJ21vdXNlbGVhdmUnLCBjbG9zZSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdibHVyJywgY2xvc2UpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuZGVsYXkgPSBhdHRycy5kZWxheSB8fCAxMDAwOyAvLyB3YWl0IDFzIGJlZm9yZSBkaXNwbGF5aW5nIHRpcFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7dGlwOiBcIj1cIn0gLy8gdGlwIG1heSBub3QgYmUgZGVmaW5lZCB3aGVuIHdpZGdldCBpcyBkaXNwbGF5XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1dKTtcbn0pKCk7XG4iLCJcbi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuLlxuICogXG4gKiBSZWZlcmVuY2U6XG4gKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9GaWxlUmVhZGVyIFxuICogICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1VzaW5nX2ZpbGVzX2Zyb21fd2ViX2FwcGxpY2F0aW9ucyNVc2luZ19oaWRkZW5fZmlsZV9pbnB1dF9lbGVtZW50c191c2luZ190aGVfY2xpY2slMjglMjlfbWV0aG9kXG4gKiAgIGh0dHBzOi8vdW5jb3JrZWRzdHVkaW9zLmNvbS9ibG9nL211bHRpcGFydGZvcm1kYXRhLWZpbGUtdXBsb2FkLXdpdGgtYW5ndWxhcmpzXG4gKiAgIGh0dHBzOi8vd3d3LnRlcmxpY2kuY29tLzIwMTUvMDUvMTYvdXBsb2FkaW5nLWZpbGVzLWxvY2FsbHkuaHRtbFxuICogICBodHRwczovL2dpdGh1Yi5jb20vbmVydmdoL2FuZ3VsYXItZmlsZS11cGxvYWQvYmxvYi9tYXN0ZXIvc3JjL3NlcnZpY2VzL0ZpbGVVcGxvYWRlci5qc1xuICogICBodHRwczovL3N0dWsuZ2l0aHViLmlvL2pzemlwL2RvY3VtZW50YXRpb24vaG93dG8vcmVhZF96aXAuaHRtbFxuICogICBodHRwOi8vb25laHVuZ3J5bWluZC5jb20vemlwLXBhcnNpbmctanN6aXAtYW5ndWxhci9cbiAqICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTM0MTkxMi9ob3ctdG8tZ28tZnJvbS1ibG9iLXRvLWFycmF5YnVmZmVyXG4gKiAgIFxuICogICBCdWdzOiB6aXAgZmlsZSBzZW50IGV2ZW4gd2hlbiBmbGFnIGFzIGludmFsaWQgXG4gKi9cblxuIFxuXG4oZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB0bXBsQXBwbGkgPSAnPGlucHV0IHR5cGU9XCJmaWxlXCIgbmFtZT1cInt7bmFtZX19LWlucHV0XCIgb25jaGFuZ2U9XCJhbmd1bGFyLmVsZW1lbnQodGhpcykuc2NvcGUoKS5VcExvYWRGaWxlKHRoaXMuZmlsZXMpXCIgYWNjZXB0PVwie3ttaW1ldHlwZX19XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj4nK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ1cGxvYWQtZmlsZVwiIG5nLWNsaWNrPVwiaW1nQ2xpY2tlZCgpXCI+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJ7e2ljb259fVwiPjwvaT4gPHNwYW4+e3tsYWJlbH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzxyYW5nZS1zbGlkZXIgbmctc2hvdz1cIiFub3NsaWRlclwiIGlkPVwie3tuYW1lfX0tc2xpZGVyXCIgYXV0b21hdGljPXRydWUgaW5pdGhvb2s9XCJTbGlkZXJJbml0Q0JcIj48L3JhbmdlLXNsaWRlcj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgIFxudmFyIHRtcGxNb2RhbCA9ICc8c3BhbiBjbGFzcz1cIm1vZGFsLXRleHRcIj5VcGxvYWQgQXBwbGljYXRpb24gPGI+e3thcHBuYW1lfX08L2I+ID88L3NwYW4+JyArXG4gICAgICAgICAgICAnPGRpdj4nK1xuICAgICAgICAgICAgJzxpbWcgbmctc3JjPVwie3tpY29ufX1cIj4nICtcbiAgICAgICAgICAgICc8c3VibWl0LWJ1dHRvbiBpY29uPVwiZmkteFwiIGxhYmVsPVwiQ2FuY2VsXCIgY2xpY2tlZD1cImFiYW5kb25cIj48L3N1Ym1pdC1idXR0b24+JytcbiAgICAgICAgICAgICc8c3VibWl0LWJ1dHRvbiBpY29uPVwiZmktbGlrZVwiIGxhYmVsPVwiSW5zdGFsbFwiIGNsaWNrZWQ9XCJzdWNjZXNzXCI+PC9zdWJtaXQtYnV0dG9uPiAnICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgIFxudmFyIHRtcGxFcnJvciA9ICc8c3BhbiBjbGFzcz1cIm1vZGFsLXRleHRcIj5JbnZhbGlkIEFwcGxpY2F0aW9uIDxiPnt7YXBwbmFtZX19PC9iPiA/PC9zcGFuPicgK1xuICAgICAgICAgICAgJzxkaXY+JytcbiAgICAgICAgICAgICc8aW1nIG5nLXNyYz1cInt7aWNvbn19XCI+JyArXG4gICAgICAgICAgICAnPHN1Ym1pdC1idXR0b24gaWNvbj1cImZpLXhcIiBsYWJlbD1cIkNsb3NlXCIgY2xpY2tlZD1cImFiYW5kb25cIj48L3N1Ym1pdC1idXR0b24+JytcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgIFxuXG4vLyBTZXJ2aWNlIENyZWF0ZSB4Zm9ybSBpbnNlcnQgZmlsZXMgaW4gYW5kIFBvc3QgaXQgdG8gdXJsXG5mdW5jdGlvbiBMb2FkRmlsZVN2YyAoc2NvcGUsIGZpbGVzLCBmaWxlQ0IpIHtcbiAgICB2YXIgeG1sUmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgdmFyIHhmb3JtICA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBzbGlkZXIgZHVyaW5nIFVwbG9hZFxuICAgIHhtbFJlcS51cGxvYWQub25wcm9ncmVzcyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUgPyBldmVudC5sb2FkZWQgKiAxMDAgLyBldmVudC50b3RhbCA6IDApO1xuICAgICAgICBpZiAoc2NvcGUuc2xpZGVyKSBzY29wZS5zbGlkZXIuc2V0VmFsdWUgKHByb2dyZXNzKTtcbiAgICB9O1xuXG4gICAgLy8gVXBsb2FkIGlzIGZpbmlzaCBsZXQncyBub3RpZnkgY29udHJvbGVyIGNhbGxiYWNrXG4gICAgeG1sUmVxLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NvcGUuZGl2RWxlbS5hZGRDbGFzcyAoXCJzdWNjZXNzXCIpO1xuICAgICAgICBzY29wZS5kaXZFbGVtLnJlbW92ZUNsYXNzIChcImVycm9yXCIpO1xuICAgICAgICB2YXIgcmVzcG9uc2UgPXtcbiAgICAgICAgICAgIHN0YXR1cyA6IHhtbFJlcS5zdGF0dXMsXG4gICAgICAgICAgICBoZWFkZXJzOiB4bWxSZXEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgXG4gICAgICAgIH07XG4gICAgICAgIHNjb3BlLmNhbGxiYWNrIChyZXNwb25zZSk7XG4gICAgfTtcblxuICAgIHhtbFJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzY29wZS5kaXZFbGVtLmFkZENsYXNzIChcImVycm9yXCIpO1xuICAgICAgICBzY29wZS5kaXZFbGVtLnJlbW92ZUNsYXNzIChcInN1Y2Nlc3NcIik7XG4gICAgfTtcblxuICAgIHhtbFJlcS5vbmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzY29wZS5kaXZFbGVtLmFkZENsYXNzIChcImVycm9yXCIpO1xuICAgICAgICBzY29wZS5kaXZFbGVtLnJlbW92ZUNsYXNzIChcInN1Y2Nlc3NcIik7XG4gICAgICAgIHZhciByZXNwb25zZSA9e1xuICAgICAgICAgICAgc3RhdHVzIDogeG1sUmVxLnN0YXR1cyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHhtbFJlcS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBcbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuY2FsbGJhY2sgKHJlc3BvbnNlKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMucG9zdGZpbGUgPSBmdW5jdGlvbihwb3N0dXJsKSB7IFxuICAgICAgICAvLyBldmVyeXRoaW5nIGxvb2tzIE9LIGxldCdzIFBvc3QgaXRcbiAgICAgICAgeG1sUmVxLm9wZW4oXCJQT1NUXCIsIHBvc3R1cmwgLCB0cnVlKTtcbiAgICAgICAgeG1sUmVxLnNlbmQoeGZvcm0pO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZmlsZSA9IGZpbGVzW2ldO1xuICAgICAgICAvLyBVbmtub3cgVHlwZSAhISEgaWYgKCF0aGlzLmZpbGUudHlwZS5tYXRjaChzY29wZS5taW1ldHlwZSkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnNvbGUubG9nIChcIlNlbGVjdGVkIGZpbGU9XCIgKyB0aGlzLmZpbGUubmFtZSArIFwiIHNpemU9XCIrIHRoaXMuZmlsZS5zaXplLzEwMjQgKyBcIiBUeXBlPVwiKyB0aGlzLmZpbGUudHlwZSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmJhc2VuYW1lPSB0aGlzLmZpbGUubmFtZS5zcGxpdCgnLycpLnJldmVyc2UoKVswXTtcblxuICAgICAgICAvLyBGaWxlIHRvIHVwbG9hZCBpcyB0b28gYmlnXG4gICAgICAgIGlmIChpc05hTih0aGlzLmZpbGUuc2l6ZSkgfHwgdGhpcy5maWxlLnNpemUgPiBzY29wZS5tYXhzaXplKjEwMjQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQgKGZpbGVDQiwxMDApOyAgLy8gT24gZXJyb3IgYXN5bmNocm9ub3VzIGNhbGxiYWNrIHdpdGhvdXQgYXJndW1lbnRcbiAgICAgICAgICAgIFxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAvLyBJZiBGaWxlIGlzIHJlYWRhYmxlIGxldCdzIHJlYWQgaXRcbiAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKHRoaXMuZmlsZSk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZmlsZUNCO1xuXG4gICAgICAgICAgICAvLyBpZiBldmVyeXRoaW5nIGlzIE9LIGxldCdzIGFkZCBmaWxlIHRvIHhmb3JtXG4gICAgICAgICAgICB4Zm9ybS5hcHBlbmQoc2NvcGUubmFtZSwgdGhpcy5maWxlLCB0aGlzLmZpbGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmFuZ3VsYXIubW9kdWxlKCdVcGxvYWRGaWxlcycsWydBcHBDb25maWcnLCAnTW9kYWxOb3RpZmljYXRpb24nLCAnUmFuZ2VTbGlkZXInXSlcblxuLmRpcmVjdGl2ZSgndXBsb2FkQXBwbGknLCBbXCJBcHBDb25maWdcIiwgXCJKUWVtdVwiLCBcIk5vdGlmaWNhdGlvblwiLCBcIk1vZGFsRmFjdG9yeVwiLCBcIiR0aW1lb3V0XCIsIGZ1bmN0aW9uKEFwcENvbmZpZywgIEpRZW11LCBOb3RpZmljYXRpb24sIE1vZGFsRmFjdG9yeSwgJHRpbWVvdXQpIHtcbiAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgIFxuICAgICAgICAvLyBnZXQgd2lkZ2V0IGltYWdlIGhhbmRsZSBmcm9tIHRlbXBsYXRlXG4gICAgICAgIHNjb3BlLmlucHV0RWxlbSAgPSBlbGVtLmZpbmQoJ2lucHV0Jyk7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0gICAgPSBlbGVtLmZpbmQoJ2RpdicpO1xuICAgICAgICBcbiAgICAgICAgLy8gSW1hZ2Ugd2FzIGNraWNrIGxldCdzIHNpbXVsYXRlIGFuIGlucHV0IChmaWxlKSBjbGlja1xuICAgICAgICBzY29wZS5pbWdDbGlja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2NvcGUuaW5wdXRFbGVtWzBdLmNsaWNrKCk7IC8vIFdhcm5pbmcgQW5ndWxhciBUcmlnZ2VyRXZlbnQgZG9lcyBub3Qgd29yayEhIVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgLy8gU2xpZGVyIGNvbnRyb2wgaGFuZGxlIHJlZ2lzdHJhdGlvbiBhZnRlciBjcmVhdGlvblxuICAgICAgICBzY29wZS5TbGlkZXJJbml0Q0I9ZnVuY3Rpb24gKHNsaWRlcikge1xuICAgICAgICAgICBzY29wZS5zbGlkZXI9IHNsaWRlcjsgXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyBVcGxvYWQgaXMgZGVsZWdhdGVkIHRvIGEgc2hhcmVkIGZ1bmN0aW9uXG4gICAgICAgIHNjb3BlLlVwTG9hZEZpbGU9ZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlOyBcbiAgICAgICAgICAgIHZhciBhcHBpY29uO1xuICAgICAgICAgICAgdmFyIHRlbXBsYXRlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgc3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgTG9va3MgT0sgbGV0J3MgUG9zdCBYZm9ybS9GaWxlXG4gICAgICAgICAgICAgICAgaGFuZGxlLnBvc3RmaWxlKGF0dHJzLnBvc3R1cmwgKyBcIj90b2tlbj1cIiArIEFwcENvbmZpZy5zZXNzaW9uLnRva2VuKTtcblxuICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoZnVuY3Rpb24oKSB7c2NvcGUubW9kYWwuZGVzdHJveSgpO30sIDEwMDApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGFiYW5kb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5tb2RhbC5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgICAgJHRpbWVvdXQgKGZ1bmN0aW9uKCkge3Njb3BlLm1vZGFsLmRlc3Ryb3koKTt9LCAxMDAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHJlYWRlckNCID0gZnVuY3Rpb24gKHVwbG9hZCkge1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRmlsZSB1cGxvYWQgZmFpbCBoYW5kbGUgZXJyb3JcbiAgICAgICAgICAgICAgICBpZiAoISB1cGxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5maWxlLnNpemUgPiBzY29wZS5tYXhzaXplKjEwMjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGljb24gPSBzY29wZS5pc3Rvb2JpZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlPSB0bXBsRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihoYW5kbGUuZmlsZS5zaXplKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwaWNvbiA9IHNjb3BlLmlzbm90dmFsaWQ7IFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU9IHRtcGxFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHppcGFwcCA9IG5ldyBKU1ppcCAodXBsb2FkLnRhcmdldC5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGh1bWJuYWlsID0gemlwYXBwLmZpbGUoXCJpY29uXzEyOC5wbmdcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaXMgd2UgaGF2ZSBhIHRodW1ibmFpbCB3aXRoaW4gbG9hZGVkIFppcGZpbGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aHVtYm5haWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIlRoaXMgaXMgbm90IGEgdmFsaWQgQXBwbGljYXRpb24gRnJhbWV3b3JrIEFQUFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGljb24gPSBzY29wZS5pc25vdHZhbGlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU9IHRtcGxFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9zY29wZS5pbWdFbGVtWzBdLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0aHVtYm5haWwuYXNBcnJheUJ1ZmZlcigpXSwge3R5cGU6IFwiaW1hZ2VcIn0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGljb24gPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdGh1bWJuYWlsLmFzQXJyYXlCdWZmZXIoKV0sIHt0eXBlOiBcImltYWdlXCJ9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRtcGxNb2RhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgaHR0cDovL2ZvdW5kYXRpb24uenVyYi5jb20vYXBwcy9kb2NzLyMhL2FuZ3VsYXItbW9kdWxlc1xuICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkluOiAnc2xpZGVJbkZyb21Ub3AnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50U2NvcGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgOiBzdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWJhbmRvbiA6IGFiYW5kb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uICAgIDogYXBwaWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcG5hbWUgOiBoYW5kbGUuYmFzZW5hbWVcbiAgICAgICAgICAgICAgICAgICAgfSwgdGVtcGxhdGUgOiB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIH07IFxuICAgICAgICAgICAgICAgIC8vIFBvcHVwIE1vZGFsIHRvIHJlbmRlciBhcHBsaWNhdGlvbiBkYXRhXG4gICAgICAgICAgICAgICAgc2NvcGUubW9kYWwgPSBuZXcgTW9kYWxGYWN0b3J5KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgc2NvcGUubW9kYWwuYWN0aXZhdGUgKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBMb2FkIGZpbGUgd2l0aGluIGJyb3dzZXIgYW5kIGlmIE9LIGNhbGwgcmVhZGVyQ0JcbiAgICAgICAgICAgIGhhbmRsZSA9IG5ldyBMb2FkRmlsZVN2YyAoc2NvcGUsIGZpbGVzLCByZWFkZXJDQik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyAoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbml0aWFsbGl6ZSBkZWZhdWx0IHZhbHVlcyBmcm9tIGF0dHJpYnV0ZXMgdmFsdWVzXG4gICAgICAgIHNjb3BlLm5hbWU9IGF0dHJzLm5hbWUgfHwgJ2FwcGxpJztcbiAgICAgICAgc2NvcGUuY2F0ZWdvcnk9IGF0dHJzLmNhdGVnb3J5ICB8fCAnYXBwbGknO1xuICAgICAgICBzY29wZS5taW1ldHlwZT0gKGF0dHJzLmFjY2VwdCB8fCAnLndndCcpO1xuICAgICAgICBzY29wZS5tYXhzaXplID0gYXR0cnMubWF4c2l6ZSB8fCAxMDAwMDA7IC8vIGRlZmF1bHQgbWF4IHNpemUgMTAwTUJcbiAgICAgICAgc2NvcGUucmVnZXhwICA9IG5ldyBSZWdFeHAgKGF0dHJzLmFjY2VwdCsgJy4qJywnaScpO1xuICAgICAgICBzY29wZS5pY29uICAgID0gYXR0cnMuaWNvbiB8fCAnZmktdXBsb2FkJztcbiAgICAgICAgc2NvcGUubGFiZWwgICA9IGF0dHJzLmxhYmVsIHx8ICdVcGxvYWQnO1xuICAgICAgICBcbiAgICAgICAgaWYgKGF0dHJzLnRodW1ibmFpbCkgc2NvcGUuaXNub3R2YWxpZD0gQXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICBhdHRycy5pc25vdHZhbGlkO1xuICAgICAgICBlbHNlICBzY29wZS5pc25vdHZhbGlkPUFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAndzNjLXdpZGdldC5wbmcnO1xuXG4gICAgICAgIGlmIChhdHRycy5pc3Rvb2JpZykgc2NvcGUuaXN0b29iaWc9IEFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAgYXR0cnMuaXN0b29iaWc7XG4gICAgICAgIGVsc2UgIHNjb3BlLmlzdG9vYmlnPUFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAnaXN0b29iaWcucG5nJztcbiAgICAgICAgc2NvcGUubm9zbGlkZXIgPSBhdHRycy5ub3NsaWRlciB8fCBmYWxzZTtcblxuICAgICAgICBpZiAoIWF0dHJzLnBvc3R1cmwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ZpbGUtdXBsb2FkICVzIHBvc3R1cmw9L2FwaS94eHh4L3h4eHggcmVxdWlyZWQnLCBzY29wZS5hdHRycyk7ICAgICAgICAgICAgXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgIHRlbXBsYXRlOiB0bXBsQXBwbGksXG4gICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAgIGNhbGxiYWNrIDogJz0nXG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxufV0pO1xuXG5jb25zb2xlLmxvZyAoXCJVcGxvYWRGaWxlIExvYWRlZFwiKTtcbn0pKCk7XG4iLCJcbi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuLlxuICovXG5cblxuXG4oZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB0bXBsID0gJzx0aXAtbW9kYWwgdGlwPVwidGlwXCI+PC90aXAtbW9kYWw+JyArXG4gICAgICAgICAgICc8bGFiZWwgZm9yPVwie3tuYW1lfX0taW50ZXh0XCI+e3tsYWJlbH19IDxpIG5nLXNob3c9XCJyZXF1aXJlZFwiIG5nLWNsaWNrPVwiVG9CZURlZmluZWRcIiAnICtcbiAgICAgICAgICAgJ2NsYXNzPVwicmVxdWlyZWQge3tzdGF0dXN9fSBmaS1jaGVja2JveFwiIHRpdGxlPVwiRnJlZSBWYWx1ZSBCdXQgTWFuZGF0b3J5IEFyZ3VtZW50XCIgYWx0PVwiP1wiPiAmbmJzcDsgPC9pPjwvbGFiZWw+JysgICAgICAgICAgXG4gICAgICAgICAgICc8aW5wdXQgJytcbiAgICAgICAgICAgJyB0eXBlPVwie3t0eXBlfX1cIiBpZD1cInt7bmFtZX19LWludGV4dFwiIHBsYWNlaG9sZGVyPVwie3twbGFjZWhvbGRlcn19XCIgIGNsYXNzPVwic3RhdHVzLXt7c3RhdHVzfX1cIicrXG4gICAgICAgICAgICcgbmctbW9kZWw9XCJ2YWx1ZVwiIG5nLWJsdXI9XCJ2YWxpZGF0ZSgpXCIgbmctZm9jdXM9XCJzZWxlY3RlZCgpXCIgJytcbiAgICAgICAgICAgJyBuZy1tb2RlbC1vcHRpb25zPVwieyB1cGRhdGVPbjogXFwnZGVmYXVsdCBibHVyXFwnLCBkZWJvdW5jZToge2RlZmF1bHQ6IDUwMCwgYmx1cjogMH0gfVwiJyArXG4gICAgICAgICAgICc+PGFsZXJ0IGRhdGEtbmctc2hvdz1cIiF2YWxpZCYmZXJybXNnXCI+e3tlcnJtc2d9fTwvYWxlcnQ+JztcblxudmFyIGVtYWlscGF0ZXJuID0gL14oKFtePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdK1xcLikrW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXXsyLH0pJC9pO1xuXG5hbmd1bGFyLm1vZHVsZSgnSW5wdXRUZXh0JyxbJ0pRdWVyeUVtdSddKVxuXG4uZGlyZWN0aXZlKCdpbnB1dFRleHQnLCBbXCJKUWVtdVwiLCBmdW5jdGlvbihKUWVtdSkge1xuICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICBcbiAgICAvLyBkZWZhdWx0IHZhbHVlIGF0IDFzdCByZW5kZXJpbmdcbiAgICBzY29wZS5lcnJvciAgPSBmYWxzZTtcbiAgICBzY29wZS52YWxpZCAgPSBmYWxzZTtcbiAgICBzY29wZS5zdGF0dXMgPSAndW50b3VjaCc7XG4gICBcbiAgICBzY29wZS5pbnB1dCA9IGVsZW0uZmluZCAoXCJpbnB1dFwiKTtcbiAgICBzY29wZS5yZXF1aXJlZCA9IDA7XG4gICAgXG4gICAgLy8gcmVxdWlyZXIgaXMgdXNlIHRvIGluY3JlbWVudCByZXF1ZXN0ZWQgY291bnRlclxuICAgIGlmIChcInJlcXVpcmVkXCIgaW4gYXR0cnMpIHtcbiAgICAgICAgc2NvcGUucmVxdWlyZWQgPSAxO1xuICAgICAgICBlbGVtLmFkZENsYXNzIChcInJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICAgICBcbiAgICAgLy8gdXNlciBlbnRlciBpbnB1dCByZXNldCBlcnJvciBzdGF0dXNcbiAgICAgc2NvcGUuc2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjb3BlLmVycm9yPWZhbHNlOyBcbiAgICAgICAgc2NvcGUuZXJybXNnPWZhbHNlOyBcbiAgICAgICAgc2NvcGUuc3RhdHVzID0gJ3RvdWNoJztcbiAgICAgfTsgICBcbiAgICAgICAgICAgIFxuICAgICBzY29wZS52YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgIFxuICAgICAgICAgLy8gZ2V0IHZhbHVlIGZyb20gaW5wdXQgZmllbGQgYnlwYXNzaW5nIEFuZ3VsYXIgbmctbW9kZWxcbiAgICAgICAgIGNvbnNvbGUubG9nIChcIkNsaWNrZWQgSW5wdXRUZXh0IG5hbWU9JXMgdmFsdWU9JXMgdmFsaWQ9JXNcIiwgc2NvcGUubmFtZSwgc2NvcGUudmFsdWUsIHNjb3BlLnZhbGlkKTsgICAgICAgIFxuXG4gICAgICAgICAvLyBmb3JtIGlzIG5vdCB1bnRvdWNoZWQgYW55bW9yZVxuICAgICAgICAgc2NvcGUucGFyZW50LnJlbW92ZUNsYXNzIChcIm5nLXByaXN0aW5lXCIpO1xuXG4gICAgICAgICAvLyBpZiB2YWx1ZSBub3QgbnVsbCBjbGVhbiB1cCBzdHJpbmdcbiAgICAgICAgIGlmIChzY29wZS52YWx1ZSkge1xuICAgICAgICAgICAgIHNjb3BlLmVycm9yPWZhbHNlOyBcbiAgICAgICAgICAgIC8vIHJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGxpbmcgc3BhY2VcbiAgICAgICAgICAgIHNjb3BlLnZhbHVlID0gc2NvcGUudmFsdWUudHJpbSgpO1xuICAgICAgICAgXG4gICAgICAgICAgICAvLyByZW1vdmUgYW55IHNwYWNlIGlzIG5vdCBhbGxvd2VkXG4gICAgICAgICAgICBpZiAoJ25vc3BhY2UnIGluIGF0dHJzKSB7XG4gICAgICAgICAgICAgICBzY29wZS52YWx1ZT1zY29wZS52YWx1ZS5yZXBsYWNlKC9cXHMvZywgJycpOyAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCdsb3dlcmNhc2UnIGluIGF0dHJzKSB7XG4gICAgICAgICAgICAgICBzY29wZS52YWx1ZSA9IHNjb3BlLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICBcbiAgICAgICAgICAgIC8vIGNoZWNrIG1pbmltdW0gbGVuZ2h0XG4gICAgICAgICAgICBpZiAoXCJtaW5sZW5cIiBpbiBhdHRycykge1xuICAgICAgICAgICAgICBpZiAoc2NvcGUudmFsdWUubGVuZ3RoIDwgYXR0cnMubWlubGVuKSB7XG4gICAgICAgICAgICAgICAgIHNjb3BlLnN0YXR1cz0naW52YWxpZCc7XG4gICAgICAgICAgICAgICAgIHNjb3BlLmVycm1zZz1zY29wZS5uYW1lICsgJzogTWluaW51bSBMZW5naD0gJyArIGF0dHJzLm1pbmxlbiArICcgQ2hhcmFjdGVycyc7XG4gICAgICAgICAgICAgICAgIHNjb3BlLmVycm9yPXRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCdlbWFpbCcgaW4gYXR0cnMpIHtcbiAgICAgICAgICAgIGlmICghZW1haWxwYXRlcm4udGVzdCAoc2NvcGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUuc3RhdHVzPSdpbnZhbGlkJztcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJtc2c9J2ludmFsaWQgZW1haWwgYWRkcmVzcyc7XG4gICAgICAgICAgICAgICAgc2NvcGUuZXJyb3I9dHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNjb3BlLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgIHNjb3BlLnN0YXR1cz0naW52YWxpZCc7XG4gICAgICAgICAgICAgICAgIHNjb3BlLmVycm1zZz1zY29wZS5uYW1lICsgJzogUmVxdWlyZWQgQXR0cmlidXRlJztcbiAgICAgICAgICAgICAgICAgc2NvcGUuZXJyb3I9dHJ1ZTsgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgLy8gSWYgbG9jYWwgY29udHJvbCBmYWlsIGxldCdzIHJlZnVzZSBpbnB1dFxuICAgICAgICAgaWYgKHNjb3BlLmVycm9yKSB7XG4gICAgICAgICAgICAgaWYgKHNjb3BlLnJlcXVpcmVkICYmIHNjb3BlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgIHNjb3BlLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgIGlmIChzY29wZS5sNGFjb3VudGVyLnZhbGlkYXRlZCA+IDApIHNjb3BlLmw0YWNvdW50ZXIudmFsaWRhdGVkIC0tO1xuICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgLy8gdXNlIGNhbGwgdG8gdXBkYXRlIGZvcm0gc2NvcGUgb24gZm9ybSBjb21wbGV0ZW5lc3NcbiAgICAgICAgICAgICBzY29wZS5jYWxsYmFjayAoYXR0cnMubmFtZSwgbnVsbCwgc2NvcGUuZG9uZSk7XG4gICAgICAgICB9IGVsc2UgeyBcbiAgICAgICAgICAgICAvLyBsb2NhbGNoZWNrIGlzIE9LIGJhY2t1cCBtYXkgbmV2ZXJ0aGVsZXNzIGNoYW5nZSBzdGF0dXMgdG8gZmFsc2VcbiAgICAgICAgICAgIGlmIChzY29wZS5yZXF1aXJlZCAgJiYgIXNjb3BlLnZhbGlkKSBzY29wZS5sNGFjb3VudGVyLnZhbGlkYXRlZCArKztcbiAgICAgICAgICAgIHNjb3BlLnN0YXR1cz0ndmFsaWQnO1xuICAgICAgICAgICAgc2NvcGUudmFsaWQ9dHJ1ZTtcbiAgICAgICAgICAgIHNjb3BlLmNhbGxiYWNrIChhdHRycy5uYW1lLCBzY29wZS52YWx1ZSwgc2NvcGUuZG9uZSk7XG4gICAgICAgICB9XG4gICAgICAgICAgXG4gICAgIH07XG4gICAgIFxuICAgICAvLyB0aGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGZyb20gY29udHJvbGxlciB0byB1cGRhdGUgd2lkZ2V0IHN0YXR1c1xuICAgICBzY29wZS5kb25lPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgY29uc29sZS5sb2cgKFwiVGV4dC1JbnB1dCBDYWxsYmFjayBJRD1cIisgYXR0cnMubmFtZSArIFwiIGRhdGE9XCIsIGRhdGEpO1xuICAgICAgIGZvciAodmFyIGkgaW4gZGF0YSkgc2NvcGVbaV0gPSBkYXRhW2ldOyAgICAgICAgIFxuICAgICB9O1xuICAgICBcbiAgICAgLy8gRXhwb3J0IHNvbWUgYXR0cmlidXRlcyB3aXRoaW4gZGlyZWN0aXZlIHNjb3BlIGZvciB0ZW1wbGF0ZVxuICAgICBzY29wZS5sYWJlbCAgICAgICA9IGF0dHJzLmxhYmVsO1xuICAgICBzY29wZS5uYW1lICAgICAgICA9IGF0dHJzLm5hbWU7XG4gICAgIHNjb3BlLnBsYWNlaG9sZGVyID0gYXR0cnMucGxhY2Vob2xkZXI7XG4gICAgIHNjb3BlLnR5cGUgICAgICAgID0gYXR0cnMudHlwZSB8fCBcInRleHRcIjtcbiAgICAgc2NvcGUudGlwICAgICAgICAgPSBhdHRycy50aXA7XG5cbiAgICAgLy8gc2VhcmNoIGZvciBmb3JtIHdpdGhpbiBwYXJlbnQgZWxlbW50c1xuICAgICBzY29wZS5wYXJlbnQgPSBKUWVtdS5wYXJlbnQgKGVsZW0sIFwiRk9STVwiKTtcblxuICAgICAvLyBlbWFpbCBlbmZvcmNlIGxvd2VyY2FzZSBhbmQgbm9zcGFjZSAgIFxuICAgICBpZiAoXCJlbWFpbFwiIGluIGF0dHJzKSB7XG4gICAgICAgIGF0dHJzLmxvd2VyY2FzZT10cnVlOyBcbiAgICAgICAgYXR0cnMubm9zcGFjZT10cnVlOyBcbiAgICAgICAgYXR0cnMubWlubGVuPTY7IFxuICAgICB9XG5cbiAgICAgaWYgKHNjb3BlLnJlcXVpcmVkKSB7XG4gICAgICAgICBzY29wZS5sNGFjb3VudGVyID0gc2NvcGUucGFyZW50LmRhdGEgKFwibDRhY291bnRlclwiKTtcbiAgICAgICAgIGlmICghc2NvcGUubDRhY291bnRlcikgeyBcbiAgICAgICAgICAgIHNjb3BlLmw0YWNvdW50ZXIgPSAge3JlcXVpcmVkOjEsIHZhbGlkYXRlZDowfTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmllbGQgXCIrc2NvcGUubmFtZStcIiBpcyByZXF1aXJlZCAoMXN0KVwiKTtcbiAgICAgICAgICAgIHNjb3BlLnBhcmVudC5kYXRhIChcImw0YWNvdW50ZXJcIiwgc2NvcGUubDRhY291bnRlcik7IFxuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZpZWxkIFwiK3Njb3BlLm5hbWUrXCIgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgICAgICAgc2NvcGUubDRhY291bnRlci5yZXF1aXJlZCArKztcbiAgICAgICAgIH1cbiAgICAgfVxuICAgICAgICAgXG4gICAgIC8vIHJlZnJlc2ggdmFsaWRhdGlvbiBlYWNoIHRpbWUgY29udHJvbGVyIHVwZGF0ZSB2YWx1ZVxuICAgICBzY29wZS4kd2F0Y2ggKCd2YWx1ZScsIGZ1bmN0aW9uKCl7XG4gICAgICAgICBpZihzY29wZS52YWx1ZSkgc2NvcGUudmFsaWRhdGUoKTsgfVxuICAgICApO1xuICAgIFxuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICB0ZW1wbGF0ZTogdG1wbCxcbiAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgY2FsbGJhY2sgOiAnPScsXG4gICAgICAgICAgICB2YWx1ZTogJz0nXG4gICAgICAgIH1cbiAgICB9O1xufV0pO1xuXG5jb25zb2xlLmxvZyAoXCJJbnB1dFRleHQgTG9hZGVkXCIpO1xufSkoKTtcbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKi9cblxuKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG1wbCA9ICc8aW5wdXQtdGV4dCAgY2xhc3M9XCJwYXNzd29yZFwiIHRpcD1cInt7dGlwMX19XCIgIHBsYWNlaG9sZGVyPVwie3twbGFjZTF9fVwiJyArXG4gICAgICAgICAgICdsYWJlbD1cInt7bGFiZWwxfX1cIiBjYWxsYmFjaz1cInZhbGlkMVwiIG5hbWU9XCJ7e25hbWV9fS0xXCIgdmFsdWU9XCJwYXNzMVwiIHJlcXVpcmVkIG1pbmxlbj1cInt7bWlubGVufX1cIiB0eXBlPVwicGFzc3dvcmRcIiA+JyArXG4gICAgICAgICAgICc8L2lucHV0LXRleHQ+JyArIFxuICAgICAgICAgICAnPGlucHV0LXRleHQgIGNsYXNzPVwicGFzc3dvcmRcIiB0aXA9XCJ0aXAyXCIgIHBsYWNlaG9sZGVyPVwie3twbGFjZTJ9fVwiJyArXG4gICAgICAgICAgICdsYWJlbD1cInt7bGFiZWwyfX1cIiBjYWxsYmFjaz1cInZhbGlkMlwiIG5hbWU9XCJ7e25hbWV9fS0yXCIgdmFsdWU9XCJwYXNzMlwiIHJlcXVpcmVkIG1pbmxlbj1cInt7bWlubGVufX1cIiB0eXBlPVwicGFzc3dvcmRcIiA+ICcrXG4gICAgICAgICAgICc8L2lucHV0LXRleHQ+JztcblxuYW5ndWxhci5tb2R1bGUoJ0lucHV0UGFzc3dvcmQnLFtdKVxuXG4uZGlyZWN0aXZlKCdpbnB1dFBhc3N3b3JkJywgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgIFxuICAgIHNjb3BlLnZhbGlkMSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICBjb25zb2xlLmxvZyAoXCJDbGlja2VkIElucHV0UGFzc3dvcmQxIG5hbWU9JXMgdmFsdWU9JXNcIiwgbmFtZSwgdmFsdWUpOyAgICAgICAgXG4gICAgICAgIHNjb3BlLmZpcnN0cHdkID0gdmFsdWU7XG4gICAgfTtcbiAgICBcbiAgICBzY29wZS52YWxpZDIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIGRvbmUpIHsgICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZyAoXCJDbGlja2VkIElucHV0UGFzc3dvcmQyIG5hbWU9JXMgdmFsdWU9JXNcIiwgbmFtZSwgdmFsdWUpOyAgICAgICAgXG4gICAgICAgIFxuICAgICAgICAvLyBpZiBib3RoIHBhc3N3ZCBlcXVhbCB0aGVuIGNhbGwgZm9ybSBDQlxuICAgICAgICBpZiAoc2NvcGUuZmlyc3Rwd2QgIT09IHZhbHVlKSB7XG4gICAgICAgICAgZG9uZSh7dmFsaWQ6IGZhbHNlLCBzdGF0dXM6ICdpbnZhbGlkJywgZXJybXNnOiBcImJvdGggcGFzc3dvcmQgc2hvdWxkIG1hdGNoXCJ9KTsgIFxuICAgICAgICB9IGVsc2UgeyAgXG4gICAgICAgICAgc2NvcGUuY2FsbGJhY2sgKGF0dHJzLm5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXG4gICAgIH07XG4gICAgIFxuICAgICAvLyB0aGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGZyb20gY29udHJvbGxlciB0byB1cGRhdGUgd2lkZ2V0IHN0YXR1c1xuICAgICBzY29wZS5kb25lPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgY29uc29sZS5sb2cgKFwiVGV4dC1JbnB1dCBDYWxsYmFjayBJRD1cIisgYXR0cnMubmFtZSArIFwiIGRhdGE9XCIsIGRhdGEpO1xuICAgICAgIGZvciAodmFyIGkgaW4gZGF0YSkgc2NvcGVbaV0gPSBkYXRhW2ldOyAgICAgICAgIFxuICAgICB9O1xuICAgICBcbiAgICAgLy8gRXhwb3J0IHNvbWUgYXR0cmlidXRlcyB3aXRoaW4gZGlyZWN0aXZlIHNjb3BlIGZvciB0ZW1wbGF0ZVxuICAgICBzY29wZS5uYW1lICAgPSBhdHRycy5uYW1lO1xuICAgICBzY29wZS5sYWJlbDEgPSBhdHRycy5sYWJlbCB8fCAnUGFzc3dvcmQnO1xuICAgICBzY29wZS5sYWJlbDIgPSBhdHRycy5sYWJlbCB8fCAnUGFzc3dvcmQgVmVyaWZpY2F0aW9uJztcbiAgICAgc2NvcGUucGxhY2UxID0gYXR0cnMucGxhY2Vob2xkZXIxIHx8ICdVc2VyIFBhc3N3b3JkJztcbiAgICAgc2NvcGUudGlwMSAgID0gYXR0cnMudGlwIHx8ICdDaG9vc2UgYSBQYXNzd29yZCc7XG4gICAgIHNjb3BlLnBsYWNlMiA9IGF0dHJzLnBsYWNlaG9sZGVyMSB8fCAnUGFzc3dvcmQgVmVyaWZpY2F0aW9uJztcbiAgICAgc2NvcGUudGlwMiAgID0gYXR0cnMudGlwICAgIHx8ICdDb25maXJtZSB5b3VyIFBhc3N3b3JkJztcbiAgICAgc2NvcGUubWlubGVuID0gYXR0cnMubWlubGVuIHx8IDEwO1xuICAgICBcbiAgICAgaWYgKFwicmVxdWlyZWRcIiBpbiBhdHRycykgc2NvcGUucmVxdWlyZWQgPSAncmVxdWlyZWQnO1xuICAgICAgICAgXG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgICBjYWxsYmFjayA6ICc9JyxcbiAgICAgICAgfVxuICAgIH07XG59KTtcblxuY29uc29sZS5sb2cgKFwiSW5wdXRQYXNzd29yZCBMb2FkZWRcIik7XG59KSgpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG1wbCA9ICc8c3BhbiB0aXRsZT1cIkdvdG86IHt7aHJlZn19XCIgbmctY2xpY2s9XCJjbGlja2VkKClcIj4nICtcbiAgICAgICAgICAgICc8aSBjbGFzcz1cInt7aWNvbn19XCI+PC9pPicgK1xuICAgICAgICAgICAgJzxzcGFuPnt7bGFiZWx9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L3NwYW4+JztcblxuXG4gICAgYW5ndWxhci5tb2R1bGUoJ0xpbmtCdXR0b24nLCBbXSlcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ2xpbmtCdXR0b24nLCBbXCIkbG9jYXRpb25cIiwgZnVuY3Rpb24gKCRsb2NhdGlvbikge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcblxuICAgICAgICAgICAgICAgICAgICBzY29wZS5jbGlja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dHJzLnF1ZXJ5KSAkbG9jYXRpb24ucGF0aChhdHRycy5ocmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgJGxvY2F0aW9uLnBhdGgoYXR0cnMuaHJlZikuc2VhcmNoKGF0dHJzLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBhanVzdCBpY29uIG9yIHVzZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gPSBhdHRycy5pY29uICAgfHwgJ2ZpLWxpbmsnO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5sYWJlbCA9IGF0dHJzLmxhYmVsIHx8ICdKdW1wJztcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaHJlZiAgPSBhdHRycy5ocmVmICB8fCAnL2hvbWUnO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGxhYmVsIGFzIGNsYXNzXG4gICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgKHNjb3BlLmxhYmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7fVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XSk7XG59KSgpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG1wbCA9ICc8ZGl2ICBuZy1jbGljaz1cImNsaWNrZWQoKVwiPicgK1xuICAgICAgICAgICAgJzxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+JyArXG4gICAgICAgICAgICAnPHNwYW4+e3tsYWJlbH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG5cbiAgICBhbmd1bGFyLm1vZHVsZSgnU3VibWl0QnV0dG9uJywgW10pXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCdzdWJtaXRCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWp1c3QgaWNvbiBvciB1c2UgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uID0gYXR0cnMuaWNvbiB8fCAnZmktZm9vdCc7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmxhYmVsID0gYXR0cnMubGFiZWwgfHwgJ05leHQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGxhYmVsIGFzIGNsYXNzXG4gICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgKHNjb3BlLmxhYmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gbm90ZTogY2xpY2tlZCBpbiBpbXBvcnRlZCBhbmQgd2hlbiB0ZW1wbGF0ZSBpcyBjbGlja2VkXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0IHdpbGwgY2FsbCBjbGlja2VkIG1ldGhvZCBwYXNzZWQgaW4gcGFyYW0uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7Y2xpY2tlZCA6ICc9J31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG59KSgpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG1wbEFwcGxpID0gJzxkaXYgIG5nLWNsaWNrPVwiY2xpY2tlZCgpXCI+JyArXG4gICAgICAgICAgICAnPGltZyBuZy1zcmM9XCJ7e2ljb259fVwiPicgK1xuICAgICAgICAgICAgJzxzcGFuPnt7bGFiZWx9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgIFxuICAgIHZhciB0bXBsTW9kYWwgPSBcbiAgICAgICAgICAgICc8YiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIG5nLWNsaWNrPVwiY2xvc2UoKVwiPsOXPC9iPicgK1xuICAgICAgICAgICAgJzxpbWcgbmctc3JjPVwie3tpY29ufX1cIj4nICtcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cIm1vZGFsLXRleHRcIj5BcHBsaWNhdGlvbiA8Yj57e2xhYmVsfX08L2I+PC9zcGFuPicgK1xuICAgICAgICAgICAgJzx1bCBjbGFzcz1cInZlcnRpY2FsIGljb24tbGVmdCBwcmltYXJ5IG1lbnUtYmFyIGFwcGxpLW1lbnUtc3RhcnRcIj4nICtcbiAgICAgICAgICAgICc8bGkgY2xhc3M9c3RhcnQte3tydW5zdGF0dXN9fT48YSBuZy1jbGljaz1hY3Rpb24oXCJzdGFydFwiKT48aSBjbGFzcz1cImZpLWNoZWNrXCI+IFN0YXJ0PC9pPjwvYT48L2xpPicgK1xuICAgICAgICAgICAgJzxsaSBjbGFzcz1zdG9wLXt7cnVuc3RhdHVzfX0+PGEgbmctY2xpY2s9YWN0aW9uKFwic3RvcFwiKT48aSBjbGFzcz1cImZpLXhcIj4gU3RvcDwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8bGk+PGEgbmctY2xpY2s9YWN0aW9uKFwiaW5mb1wiKT48aSBjbGFzcz1cImZpLWluZm9cIj4gSW5mbzwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8bGkgY2xhc3M9c3RhcnQte3tydW5zdGF0dXN9fT48YSBuZy1jbGljaz1hY3Rpb24oXCJ1bmluc3RhbGxcIik+PGkgY2xhc3M9XCJmaS14XCI+IFVuaW5zdGFsbDwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8L3VsPicgK1xuICAgICAgICAgICAgJyc7XG4gICAgXG4gICAgdmFyIHRtcGxEZXRhaWwgPSBcbiAgICAgICAgICAgICc8YiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIG5nLWNsaWNrPVwiY2xvc2UoKVwiPsOXPC9iPicgK1xuICAgICAgICAgICAgJzxpbWcgbmctc3JjPVwie3tpY29ufX1cIj4nICtcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cIm1vZGFsLXRleHRcIj5BcHBsaWNhdGlvbiA8Yj57e2xhYmVsfX08L2I+PC9zcGFuPicgK1xuICAgICAgICAgICAgJzx1bCBjbGFzcz1cInZlcnRpY2FsIGljb24tbGVmdCBhcHBsaS1tZW51LWluZm9cIj4nICtcbiAgICAgICAgICAgICc8bGk+PGkgY2xhc3M9XCJmaS1wYXBlcmNsaXBcIj4gTmFtZSA6IHt7ZGV0YWlsLm5hbWV9fSA8L2k+PC9saT4nICtcbiAgICAgICAgICAgICc8bGk+PGkgY2xhc3M9XCJmaS1pbmZvXCI+IERlc2NyaXB0aW9uIHt7ZGV0YWlsLmRlc2NyaXB0aW9ufX08L2k+PC9saT4nICtcbiAgICAgICAgICAgICc8bGk+PGkgY2xhc3M9XCJmaS10b3Jzb1wiPiBBdXRob3IgOiB7e2RldGFpbC5hdXRob3J9fTwvaT48L2xpPicgK1xuICAgICAgICAgICAgJzwvdWw+JyArXG4gICAgICAgICAgICAnJztcblxuICAgIGFuZ3VsYXIubW9kdWxlKCdBcHBsaUJ1dHRvbicsIFtdKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgnYXBwbGlCdXR0b24nLCBbXCJBcHBDb25maWdcIiwgXCJBcHBDYWxsXCIsIFwiTW9kYWxGYWN0b3J5XCIsIFwiTm90aWZpY2F0aW9uXCIsIFwiJHRpbWVvdXRcIiwgXCIkd2luZG93XCIsIFwiJGxvY2F0aW9uXCIsIFwidXJscXVlcnlcIiwgZnVuY3Rpb24gKEFwcENvbmZpZywgQXBwQ2FsbCwgTW9kYWxGYWN0b3J5LCBOb3RpZmljYXRpb24sICR0aW1lb3V0LCAkd2luZG93LCAkbG9jYXRpb24sIHVybHF1ZXJ5KSB7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnJ1bnN0YXR1cyA9IFwic3RvcFwiO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5ydW5tb2RlICAgPSB1cmxxdWVyeS5ydW5tb2RlIHx8IFwiYXV0b1wiO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5jbGlja2VkID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90aWZ5RXJyb3IgPSBmdW5jdGlvbihhY3Rpb24sIGpyZXNwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVycm9yICh7bWVzc2FnZTogXCJGYWlsIC9hcGkvYWZtLW1haW5cIiArIGFjdGlvbiArIFwiPVwiICsgc2NvcGUubGFiZWwgKyBcIiBSdW5JRD1cIisgc2NvcGUuYXBwSUQsIGRlbGF5OiA1MDAwfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyAoXCJmYWlsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwic3VjY2Vzc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5jYWxsYmFjayAoc2NvcGUuYXBwSUQsIGFjdGlvbiwganJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGlmeVN1Y2Nlc3MgPSBmdW5jdGlvbiAoYWN0aW9uLCBqcmVzcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwiZmFpbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5ydW5JRCA9IGpyZXNwLnJlc3BvbnNlLnJ1bmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmNhbGxiYWNrIChzY29wZS5hcHBJRCwgYWN0aW9uLCBqcmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xvc2VNb2RBcHAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RBcHAuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0IChmdW5jdGlvbigpIHtzY29wZS5tb2RBcHAuZGVzdHJveSgpO30sIDEwMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb3NlTW9kSW5mbyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZEluZm8uZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aW1lb3V0IChmdW5jdGlvbigpIHtzY29wZS5tb2RJbmZvLmRlc3Ryb3koKTt9LCAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3Rpb25Nb2RhbCA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIk1vZGFsIEFjdGlvbj0lc1wiLCBhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ydW5zdGF0dXMgIT09IFwic3RvcFwiKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBDYWxsLmdldCAoXCJhZm0tbWFpblwiLCBcInN0YXJ0XCIsIHtpZDogc2NvcGUuYXBwSUQsIG1vZGU6IHNjb3BlLnJ1bm1vZGV9LCBmdW5jdGlvbihqcmVzcCwgZXJyY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJjb2RlICE9PSAyMDAgfHwganJlc3AuanR5cGUgIT09IFwiYWZiLXJlcGx5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RXJyb3IgKFwic3RhcnRcIiwganJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnJ1bnN0YXR1cz1cInN0YXJ0XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5U3VjY2VzcyAoYWN0aW9uLCBqcmVzcCk7XG5cdFx0XHRcdFx0aWYoanJlc3AucmVzcG9uc2UudXJpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS53aW5hcHA9ICR3aW5kb3cub3BlbihqcmVzcC5yZXNwb25zZS51cmkucmVwbGFjZShcIiVoXCIsICRsb2NhdGlvbi5ob3N0KCkpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RvcFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLnJ1bnN0YXR1cyAhPT0gXCJzdGFydFwiKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcENhbGwuZ2V0IChcImFmbS1tYWluXCIsIFwidGVybWluYXRlXCIsIHtydW5pZDogc2NvcGUucnVuSUR9LCBmdW5jdGlvbihqcmVzcCwgZXJyY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJjb2RlICE9PSAyMDAgfHwganJlc3AuanR5cGUgIT09IFwiYWZiLXJlcGx5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RXJyb3IgKFwic3RvcFwiLCBqcmVzcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUucnVuc3RhdHVzPVwic3RvcFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGEgcmVtb3RlIHdpbmRvdyBhcHAgd2FzIG9wZW4gbGV0J3MgY2xvc2UgaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUud2luYXBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiQ2xvc2luZyBBcHBsaWNhdGlvbiBXaW5kb3cgbGFiZWw9JXMgaWQ9JXNcIiwgc2NvcGUubGFiZWwsIHNjb3BlLmFwcElEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS53aW5hcHAuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS53aW5hcHA9ZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVN1Y2Nlc3MgKGFjdGlvbiwganJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImluZm9cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcENhbGwuZ2V0IChcImFmbS1tYWluXCIsIFwiZGV0YWlsXCIsIHtpZDogc2NvcGUuYXBwSUR9LCBmdW5jdGlvbihqcmVzcCwgZXJyY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJjb2RlICE9PSAyMDAgfHwganJlc3AuanR5cGUgIT09IFwiYWZiLXJlcGx5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5RXJyb3IgKFwiZGV0YWlsXCIsIGpyZXNwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgaHR0cDovL2ZvdW5kYXRpb24uenVyYi5jb20vYXBwcy9kb2NzLyMhL2FuZ3VsYXItbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkluOiAnc2xpZGVJbkZyb21Ub3AnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50U2NvcGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlICAgOiBjbG9zZU1vZEluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uICAgIDogc2NvcGUuaWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiBzY29wZS5hcHBJRCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbCAgOiBqcmVzcC5yZXNwb25zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0ZW1wbGF0ZSA6IHRtcGxEZXRhaWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQb3B1cCBNb2RhbCB0byByZW5kZXIgYXBwbGljYXRpb24gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZEluZm8gPSBuZXcgTW9kYWxGYWN0b3J5KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kSW5mby5hY3RpdmF0ZSAoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidW5pbnN0YWxsXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUucnVuc3RhdHVzICE9PSBcInN0b3BcIikgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKFwiYWZtLW1haW5cIiwgXCJ1bmluc3RhbGxcIiwge2lkOiBzY29wZS5hcHBJRH0sIGZ1bmN0aW9uKGpyZXNwLCBlcnJjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycmNvZGUgIT09IDIwMCB8fCBqcmVzcC5qdHlwZSAhPT0gXCJhZmItcmVwbHlcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlFcnJvciAoXCJ1bmluc3RhbGxcIiwganJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVN1Y2Nlc3MgKGFjdGlvbiwganJlc3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiQWN0aW9uTW9kYWwgdW5rbm93biBhY3Rpb249WyVzXVwiLCBhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlTW9kQXBwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgaHR0cDovL2ZvdW5kYXRpb24uenVyYi5jb20vYXBwcy9kb2NzLyMhL2FuZ3VsYXItbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25JbjogJ3NsaWRlSW5Gcm9tVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50U2NvcGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uICAgOiBhY3Rpb25Nb2RhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuc3RhdHVzOiBzY29wZS5ydW5zdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlICAgIDogY2xvc2VNb2RBcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb24gICAgIDogc2NvcGUuaWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwgICAgOiBzY29wZS5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRlbXBsYXRlICA6IHRtcGxNb2RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgfTsgXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBQb3B1cCBNb2RhbCB0byByZW5kZXIgYXBwbGljYXRpb24gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kQXBwID0gbmV3IE1vZGFsRmFjdG9yeShjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kQXBwLmFjdGl2YXRlICgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgYXBwbGljYXRpb24gaW5mb3JtYXRpb24gZnJvbSBBcHBJRCtTdG9yZVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnMuaGFuZGxlICYmIHNjb3BlLnN0b3JlIFthdHRycy5oYW5kbGVdLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gID0gQXBwQ29uZmlnLnBhdGhzLmljb25zICsgYXR0cnMuaGFuZGxlOyAvL3Njb3BlLnN0b3JlIFthdHRycy5oYW5kbGVdLm5hbWUudG9Mb3dlckNhc2UoKSArICctaWNvLnBuZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5sYWJlbCA9IHNjb3BlLnN0b3JlIFthdHRycy5oYW5kbGVdLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5hcHBJRD0gYXR0cnMuaGFuZGxlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gID0gQXBwQ29uZmlnLnBhdGhzLmljb25zICsgJ3czYy1pY28ucG5nJztcbiAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5sYWJlbCA9IGF0dHJzLmhhbmRsZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGxhYmVsIGFzIGNsYXNzXG4gICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgKHNjb3BlLmxhYmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gbm90ZTogY2xpY2tlZCBpbiBpbXBvcnRlZCBhbmQgd2hlbiB0ZW1wbGF0ZSBpcyBjbGlja2VkXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0IHdpbGwgY2FsbCBjbGlja2VkIG1ldGhvZCBwYXNzZWQgaW4gcGFyYW0uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0bXBsQXBwbGksXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6IHtjYWxsYmFjazogJz0nLCBzdG9yZTogJz0nfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XSk7XG59KSgpO1xuIiwiKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBXQVJOSU5HOiBtYWtlIHN1cmUgdGhhbiBhcHAvZnJvbnRlbmQvc2VydmljZXMvQXBwQ29uZmlnLmpzIG1hdGNoIHlvdXIgc2VydmVyXG5cbi8vIGxpc3QgYWxsIHJlcGVuZGVuY2llcyB3aXRoaW4gdGhlIHBhZ2UgKyBjb250cm9sZXIgaWYgbmVlZGVkXG5hbmd1bGFyLm1vZHVsZSgnRGFzaGJvYXJkTW9kdWxlJywgWydTdWJtaXRCdXR0b24nLCAnVG9rZW5SZWZyZXNoJywgJ0FwcGxpQnV0dG9uJ10pXG5cbiAgLmNvbnRyb2xsZXIoJ0Rhc2hib2FyZENvbnRyb2xsZXInLCBbXCJBcHBDYWxsXCIsIFwiTm90aWZpY2F0aW9uXCIsIGZ1bmN0aW9uIChBcHBDYWxsLCBOb3RpZmljYXRpb24pIHtcbiAgICAgICAgdmFyIHNjb3BlID0gdGhpczsgLy8gSSBoYXRlIEphdmFTY3JpcHRcbiAgICAgICAgc2NvcGUudXVpZCAgID1cIm5vbmVcIjtcbiAgICAgICAgc2NvcGUudG9rZW4gID1cIm5vbmVcIjtcbiAgICAgICAgc2NvcGUuc2Vzc2lvbj1cIm5vbmVcIjtcbiAgICAgICAgc2NvcGUuc3RhdHVzID1cImVyci1ub1wiO1xuICAgICAgICBzY29wZS5hcHBsaUlEcyA9W107IC8vIGFycmF5IHRvIGhvbGQgYXBwbGljYXRpb25zIElEXG4gICAgICAgIHNjb3BlLmFwcGxpU3RvcmU9e307IC8vIGFycmF5IHRvIGhvbGQgYXBwbGljYXRpb25zIGpzb24gZGVzY3JpcHRpb25cblxuICAgICAgIFxuICAgICAgICBzY29wZS5BcHBsaUNCID0gZnVuY3Rpb24oYXBwbGlJRCwgYWN0aW9uLCByZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIC8vIEFjdGlvbiBpcyBkb25lIHdpdGhpbiBXaWRnZXQgQ29udHJvbGxlciBvbmx5IHVwZGF0ZSBkZWJ1ZyBVSSB6b25lXG4gICAgICAgICAgICAgICAgc2NvcGUucmVxdWVzdCAgPSBhY3Rpb247IFxuICAgICAgICAgICAgICAgIHNjb3BlLmVycmNvZGUgID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSBzY29wZS5yZXNwb25zZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gT24gYXBwIHdhcyByZW1vdmVkIGxldCdzIHVwZGF0ZSBydW5uYWJsZSBsaXN0XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJ1bmluc3RhbGxcIikgIHNjb3BlLkdldFJ1bm5hYmxlcygpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2NvcGUuR2V0UnVubmFibGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyAoXCJEYXNoYm9hcmQgR2V0UnVubmFibGVzXCIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBBcHBDYWxsLmdldCAoXCJhZm0tbWFpblwiLCBcInJ1bm5hYmxlc1wiLCB7LypxdWVyeSovfSwgZnVuY3Rpb24oanJlc3AsIGVycmNvZGUpIHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZGVidWcgVUkgem9uZVxuICAgICAgICAgICAgICAgIHNjb3BlLnJlcXVlc3QgID0gXCIvYXBpL2FmbS1tYWluL3J1bm5hYmxlXCI7IFxuICAgICAgICAgICAgICAgIHNjb3BlLnJlc3BvbnNlID0ganJlc3AucmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgc2NvcGUuZXJyY29kZSAgPSBqcmVzcC5yZXF1ZXN0LnN0YXR1cztcblxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSByZXNwb25zZSBmcm9tIEFHTCBhcHBsaWNhdGlvbiBmcmFtZXdvcmsgYmluZGVyXG4gICAgICAgICAgICAgICAgaWYgKGpyZXNwLmp0eXBlICE9PSBcImFmYi1yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uZXJyb3IgKHttZXNzYWdlOiBcIkludmFsaWQgUmVzcG9uZCB0byAvb3BhL2FmbS1tYWluL3J1bm5hYmxlIHJlc3BvbnNlLmRhdGE9XCIrcmVzcG9uc2UuZGF0YSwgZGVsYXk6IDUwMDB9KTsgXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHN1Y2Nlc3NcbiAgICAgICAgICAgICAgICBpZiAoanJlc3AucmVxdWVzdC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lcnJvciAoe21lc3NhZ2U6IFwiYWZtLW1haW4vcnVubmFibGVcIiArIGpyZXNwLnJlcXVlc3QuaW5mbywgZGVsYXk6IDUwMDB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gbG9vcCBvbiBydW5uYWJsZSBhcHBsaWNhdGlvbiB0byBwcmVwYXJlIGZvciBkaXNwbGF5XG4gICAgICAgICAgICAgICAgdmFyICBhcHBsaUlEcz1bXTtcbiAgICAgICAgICAgICAgICB2YXIgIHJ1bm5hYmxlcyA9IGpyZXNwLnJlc3BvbnNlLnJ1bm5hYmxlcztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpZHg9MDsgaWR4IDwgcnVubmFibGVzLmxlbmd0aDsgaWR4ICsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpSURzW2lkeF0gPSBydW5uYWJsZXMgW2lkeF0uaWQ7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmFwcGxpU3RvcmUgW3J1bm5hYmxlcyBbaWR4XS5pZF0gPSAgcnVubmFibGVzIFtpZHhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY29wZS5hcHBsaUlEcyA9IGFwcGxpSURzOyAvLyBhdm9pZCBwYXJ0aWFsIHVwZGF0ZSB0byBsaW1pdCBVSSByZWZyZXNoXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNjb3BlLkZpbGVVcGxvYWRlZCA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiZmlsZSBVcGxvYWRlZFwiKTtcbiAgICAgICAgICAgIC8vIENhbm5vdCBkaXNwbGF5IHBvc3QgcmVzdWx0cyBhcyBHZXRSdW5uYWJsZSB3aWxsIG92ZXJsb2FkIHRoZW0gYXluY2hyb25vdXNseVxuICAgICAgICAgICAgc2NvcGUucmVxdWVzdCAgPSBcIi9hcGkvYWZtLW1haW4vaW5zdGFsbFwiOyBcbiAgICAgICAgICAgIHNjb3BlLnJlc3BvbnNlID0gcmVzcG9uc2UuaGVhZGVycztcbiAgICAgICAgICAgIHNjb3BlLmVycmNvZGUgID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBldmVyeXRoaW5nIGxvb2tzIE9LIHVwZGF0ZSBhcHAgbGlzdFxuICAgICAgICAgICAgc2NvcGUuR2V0UnVubmFibGVzKCk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzY29wZS5BdXRvU3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyAoXCJBdXRvU3RhcnQgcmVxdWVzdGluZyBBcHBzIGxpc3RcIik7XG4gICAgICAgICAgICBzY29wZS5HZXRSdW5uYWJsZXMoKTtcbiAgICAgICAgfTtcbiAgICAgICAgICBcbiAgIH1dKTtcblxuY29uc29sZS5sb2cgKFwiRGFzaGJvYXJkIENvbnRyb2xsZXIgTG9hZGVkXCIpO1xufSkoKTsgXG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICogXG4gKiBVc2FnZTpcbiAqIFxuICogICAvLyBtb3VzZSBldmVudCBwcm9iYWJseSBwb2ludCBvbiBpY29uIGFuZCBub3Qgb24gYnV0dG9uIGRpdlxuICogICAuLi4gbmctY2xpY2s9XCJMb2NrQ2hhbm5lbCgkZXZlbnQpXG4gICAgIHZhciB0YXJnZXQ9IGFuZ3VsYXIuZWxlbWVudChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgdmFyIGJ1dHRvbj0gSlFlbXUuRmluZEluUGFyZW50ICh0YXJnZXQsICdkaXYnKTtcbiAqIFxuICovXG5cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cblxuICAgICAgICAgIFxuICAgIC8vIF9hbGwgbW9kdWxlcyBvbmx5IHJlZmVyZW5jZSBkZXBlbmRlbmNpZXNcbiAgICBhbmd1bGFyLm1vZHVsZSgnSlF1ZXJ5RW11JywgW10pXG5cbiAgICAgICAgICAgIC8vIEZhY3RvcnkgaXMgYSBzaW5nbGV0b24gYW5kIHNoYXJlIGl0cyBjb250ZXh0IHdpdGhpbiBhbGwgaW5zdGFuY2VzLlxuICAgICAgICAgICAgLmZhY3RvcnkoJ0pRZW11JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIEZpbmRJblBhcmVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaCA9IHNlbGVjdG9yLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggPT09IHBhcmVudFswXS50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gIC8vIEhUTUxEaXZFbGVtZW50IHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyICBGaW5kQnlUYWc9IGZ1bmN0aW9uIChlbGVtZW50LCB0YWcsIHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBzZWxlY3Rvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSAgID0gdGFnLnRvTG93ZXJDYXNlKCkrIFwiTmFtZVwiO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlblswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaCA9PT0gY2hpbGRyZW5bMF1bdHlwZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAvLyBIVE1MRGl2RWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyICBGaW5kQnlDbGFzcz0gZnVuY3Rpb24gKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBzZWxlY3Rvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlblswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmhhc0NsYXNzKHNlYXJjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAvLyBIVE1MRGl2RWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbXlNZXRob2RzID0ge1xuICAgICAgICAgICAgICAgICAgICBGaW5kSW5QYXJlbnQ6IEZpbmRJblBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgRmluZEJ5VGFnOiBGaW5kQnlUYWcsXG4gICAgICAgICAgICAgICAgICAgIEZpbmRCeUNsYXNzOiBGaW5kQnlDbGFzc1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbXlNZXRob2RzO1xuICAgICAgICAgICAgfSk7XG5cbn0pKCk7IiwidmFyIGZvdW5kYXRpb25Sb3V0ZXMgPSBbe1wibmFtZVwiOlwiRGFzaGJvYXJkXCIsXCJ1cmxcIjpcIi9kYXNoYm9hcmRcIixcImNvbnRyb2xsZXJcIjpcIkRhc2hib2FyZENvbnRyb2xsZXIgYXMgY3RybFwiLFwiYW5pbWF0aW9uSW5cIjpcInNsaWRlSW5SaWdodFwiLFwicGF0aFwiOlwicGFnZXMvRGFzaGJvYXJkL0Rhc2hib2FyZC5odG1sXCJ9XTsgXG4iLCIoZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8vIF9hbGwgbW9kdWxlcyBvbmx5IHJlZmVyZW5jZSBkZXBlbmRlbmNpZXNcbiAgICBhbmd1bGFyLm1vZHVsZSgnQXBwQ29uZmlnJywgW10pXG4gICAgXG4gICAgICAgICAgICAvLyBGYWN0b3J5IGlzIGEgc2luZ2xldG9uIGFuZCBzaGFyZSBpdHMgY29udGV4dCB3aXRoaW4gYWxsIGluc3RhbmNlcy5cbiAgICAgICAgICAgIC5mYWN0b3J5KCdBcHBDb25maWcnLCBbXCJ1cmxxdWVyeVwiLCBmdW5jdGlvbiAodXJscXVlcnkpIHtcblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nIChcIlVSTD1cIisgJGxvY2F0aW9uLnVybCgpICsgXCIgUXVlcnk9XCIgKyBsb2NhdGlvbi5ocmVmKyBcIiB3aW5kb3c9XCIgKyBkb2N1bWVudC5yZWZlcnJlcik7XG5cbiAgICAgICAgICAgICAgICB2YXIgbXlDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBwYXRoczogeyAvLyBXYXJuaW5nIHBhdGhzIHNob3VsZCBlbmQgd2l0aCAvXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA6ICdpbWFnZXMvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25zIDogJy9pY29ucy8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXZhdGFyOiAnaW1hZ2VzL2F2YXRhcnMvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvIDogJ2ltYWdlcy9hdWRpby8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGkgOiAnaW1hZ2VzL2FwcGxpLydcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbjogeyAvLyBUaG9zZSBkYXRhIGFyZSB1cGRhdGVkIGJ5IHNlc3Npb24gc2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsIDogdXJscXVlcnkudG9rZW4gfHwgJzEyMzQ1Njc4OScsICAvLyB0eXBpY2FsIGRldiBpbml0aWFsIHRva2VuXG4gICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgOiAzNjAwLCAgICAgICAgIC8vIHRpbWVvdXQgaXMgdXBkYXRlZCBjbGllbnQgc2Vzc2luIGNvbnRleHQgY3JlYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgcGluZ3JhdGU6IDE1LCAgICAgICAgICAgLy8gUGluZyByYXRlIHRvIGNoZWNrIGlmIHNlcnZlciBpcyBzdGlsbCBhbGl2ZVxuICAgICAgICAgICAgICAgICAgICAgICB1dWlkICAgIDogJycsICAgICAgICAgICAvLyB1dWlkIG1hcCB3aXRoIGNvb2tpZSBvciBsb25nIHRlcm0gc2Vzc2lvbiBhY2Nlc3Mga2V5XG4gICAgICAgICAgICAgICAgICAgICAgIHRva2VuICAgOiAnJyAgICAgICAgICAgIC8vIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBhdXRoZW50aWNhdGlvbiAgICBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbXlDb25maWc7XG4gICAgICAgICAgICB9XSlcblxuICAgICAgICAgICAvLyBGYWN0b3J5IGlzIGEgc2luZ2xldG9uIGFuZCBzaGFyZSBpdHMgY29udGV4dCB3aXRoaW4gYWxsIGluc3RhbmNlcy5cbiAgICAgICAgICAgIC5mYWN0b3J5KCdBcHBDYWxsJywgW1wiJGh0dHBcIiwgXCJBcHBDb25maWdcIiwgXCIkbG9nXCIsIGZ1bmN0aW9uICgkaHR0cCwgQXBwQ29uZmlnLCAkbG9nKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyIG15Q2FsbHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGdldCA6IGZ1bmN0aW9uKHBsdWdpbiwgYWN0aW9uLCBxdWVyeSwgY2JyZXNwb25zZSwgY2JlcnJvcikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb25lcnJvciA9IGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNiZXJyb3IpIGNiZXJyb3IocmVzcG9uc2UuZGF0YSwgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5jb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgY2JyZXNwb25zZShyZXNwb25zZS5kYXRhLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb25zdWNjZXNzID1mdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZGF0YSB8fCAhcmVzcG9uc2UuZGF0YS5yZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3IgKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdD1yZXNwb25zZS5kYXRhLnJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdG9rZW4gd2FzIHVwZGF0ZWQga2VlcCBpdCB3aXRoaW4gYXBwbGljYXRpb24gY2FjaGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC50b2tlbikgQXBwQ29uZmlnLnNlc3Npb24udG9rZW4gPSByZXF1ZXN0LnRva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnV1aWQpICBBcHBDb25maWcuc2Vzc2lvbi51dWlkICA9IHJlcXVlc3QudXVpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC50aW1lb3V0KSBBcHBDb25maWcuc2Vzc2lvbi50aW1lb3V0ID0gcmVxdWVzdC50aW1lb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JyZXNwb25zZShyZXNwb25zZS5kYXRhLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXVlcnkudG9rZW4pIHF1ZXJ5LnRva2VuID0gQXBwQ29uZmlnLnNlc3Npb24udG9rZW47IC8vIGFkZCB0b2tlbiB0byBwcm92aWRlZCBxdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFxdWVyeS5yZXFpZCkgcXVlcnkucmVxaWQgPSBhY3Rpb247IC8vIHVzZSBhY3Rpb24gYXMgZGVmYXVsdCByZXF1ZXN0SURcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGU9ICRodHRwLmdldCgnL2FwaS8nICsgcGx1Z2luICsgJy8nICsgYWN0aW9uICwge3BhcmFtczogcXVlcnl9KS50aGVuKG9uc3VjY2Vzcywgb25lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG15Q2FsbHM7XG4gICAgICAgICAgICB9XSk7XG59KSgpO1xuIiwiKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIFxuICAgIGZ1bmN0aW9uICBQYXJzZVF1ZXJ5U3RyaW5nICgpIHtcbiAgICAgIHZhciBxZCA9IHt9O1xuICAgICAgbG9jYXRpb24uc2VhcmNoLnN1YnN0cigxKS5zcGxpdChcIiZcIikuZm9yRWFjaChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgdmFyIGsgPSBpdGVtLnNwbGl0KFwiPVwiKVswXTtcbiAgICAgICAgICB2YXIgdiA9IGRlY29kZVVSSUNvbXBvbmVudChpdGVtLnNwbGl0KFwiPVwiKVsxXSk7IFxuICAgICAgICAgIGlmIChrIGluIHFkKSBxZFtrXS5wdXNoKHYpOyBlbHNlIHFkW2tdID0gW3ZdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcWQ7XG4gICAgfVxuXG4gIGFuZ3VsYXIubW9kdWxlKCdBRkJjbGllbnQnLCBbIC8vIFdhcm5pbmc6IEFwcG5hbWUgc2hvdWxkIGZpdCB3aXRoIGd1bHBmaWxlLmpzICYgaW5kZXguaHRtbFxuICAgICd1aS5yb3V0ZXInLFxuICAgICduZ0FuaW1hdGUnLFxuXG4gICAgLy9mb3VuZGF0aW9uXG4gICAgJ2ZvdW5kYXRpb24nLFxuICAgICdmb3VuZGF0aW9uLmR5bmFtaWNSb3V0aW5nJyxcbiAgICAnZm91bmRhdGlvbi5keW5hbWljUm91dGluZy5hbmltYXRpb25zJyxcbiAgICBcbiAgICAvLyBleHRlcm5hbCBjb21wb25lbnRzXG4gICAgJ3VpLW5vdGlmaWNhdGlvbicsXG4gICAgXG4gICAgLy8gQXBwbGljYXRpb24gQ29tcG9uZW50c1xuICAgICdBcHBDb25maWcnLFxuICAgICdKUXVlcnlFbXUnLFxuICAgICdEYXNoYm9hcmRNb2R1bGUnLFxuICAgICdVcGxvYWRGaWxlcycsXG4gICAgJ0xpbmtCdXR0b24nLFxuICAgICdUb2tlblJlZnJlc2gnLFxuICAgICdSYW5nZVNsaWRlcicsXG4gICAgJ01vZGFsTm90aWZpY2F0aW9uJ1xuICBdKVxuICAgIC52YWx1ZSAoJ3VybHF1ZXJ5JywgUGFyc2VRdWVyeVN0cmluZygpKVxuICAgIC5jb25maWcoY29uZmlnKVxuICAgIC5ydW4ocnVuKVxuICA7XG5cbiAgY29uZmlnLiRpbmplY3QgPSBbJyR1cmxSb3V0ZXJQcm92aWRlcicsICckbG9jYXRpb25Qcm92aWRlciddO1xuICBcbiAgZnVuY3Rpb24gY29uZmlnKCR1cmxQcm92aWRlciwgJGxvY2F0aW9uUHJvdmlkZXIsIEFwcENvbmZpZykge1xuICAgICR1cmxQcm92aWRlci5vdGhlcndpc2UoJy9kYXNoYm9hcmQnKTtcblxuICAgIC8vIGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2Vycm9yLyRsb2NhdGlvbi9ub2Jhc2VcbiAgICAkbG9jYXRpb25Qcm92aWRlci5odG1sNU1vZGUodHJ1ZSkuaGFzaFByZWZpeCgnIScpO1xuICAgIFxuICB9XG5cbiAgZnVuY3Rpb24gcnVuKCkge1xuICAgIEZhc3RDbGljay5hdHRhY2goZG9jdW1lbnQuYm9keSk7XG4gIH1cbiAgXG4vLyBGb25kYXRpb24tYXBwLnRlbXBsYXRlIGlzIG5vdCBpbmNsdWRlZCBjb3JyZWN0bHkgYnkgZ3VscCBcbi8vIEluY2x1ZGUgaGVyZSBtaXNzaW5nIHRlbXBsYXRlcyBmcm9tIGZvdW5kYXRpb24tYXBwcy9kaXN0L2pzL2ZvdW5kYXRpb24tYXBwcy10ZW1wbGF0ZXMuanNcbmFuZ3VsYXIubW9kdWxlKCdmb3VuZGF0aW9uJykucnVuKFsnJHRlbXBsYXRlQ2FjaGUnLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkge1xuICAkdGVtcGxhdGVDYWNoZS5wdXQoJ2NvbXBvbmVudHMvbW9kYWwvbW9kYWwuaHRtbCcsXG4gICAgJzxkaXZcXG4nICtcbiAgICAnICBjbGFzcz1cIm1vZGFsLW92ZXJsYXlcIlxcbicgK1xuICAgICcgIG5nLWNsaWNrPVwiaGlkZU92ZXJsYXkoKVwiPlxcbicgK1xuICAgICcgIDxhc2lkZVxcbicgK1xuICAgICcgICAgY2xhc3M9XCJtb2RhbFwiXFxuJyArXG4gICAgJyAgICBuZy1jbGljaz1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIlxcbicgK1xuICAgICcgICAgbmctdHJhbnNjbHVkZT5cXG4nICtcbiAgICAnICA8L2FzaWRlPlxcbicgK1xuICAgICc8L2Rpdj5cXG4nICtcbiAgICAnJyk7XG59XSk7XG5cbmNvbnNvbGUubG9nIChcIm9wYT1BRkJjbGllbnQgTG9hZGVkXCIpO1xufSkoKTtcbiIsIihmdW5jdGlvbigpIHthbmd1bGFyLm1vZHVsZSgnQUZCY2xpZW50JykucnVuKFsnJHRlbXBsYXRlQ2FjaGUnLCBmdW5jdGlvbigkdGVtcGxhdGVDYWNoZSkgeyR0ZW1wbGF0ZUNhY2hlLnB1dCgncGFnZXMvRGFzaGJvYXJkL0Rhc2hib2FyZC5odG1sJyxcbiAgICAnPGgzPjxpbWcgY2xhc3M9XCJsb2dvXCIgc3JjPVwiaW1hZ2VzL2xvZ28vdHJpc2tlbF9pb3RfYnpoeDI1MC5wbmdcIiBhbHQ9XCJJb1QuYnpoIExvZ29cIiBzdHlsZT1cImhlaWdodDoxNTBweFwiPiBBcHBsaWNhdGlvbiBGcmFtZXdvcmsgTWFuYWdlciBTaW1wbGUgQ2xpZW50PC9oMz48ZGl2IGNsYXNzPVwiYnV0dG9uLWJveCBib3gtY29udGVudFwiPjxhcHBsaS1idXR0b24gbmctcmVwZWF0PVwiYXBwbGlJRCBpbiBjdHJsLmFwcGxpSURzXCIgc3RvcmU9XCJjdHJsLmFwcGxpU3RvcmVcIiBoYW5kbGU9XCJ7e2FwcGxpSUR9fVwiIGNhbGxiYWNrPVwiY3RybC5BcHBsaUNCXCI+PC9hcHBsaS1idXR0b24+PHVwbG9hZC1hcHBsaSBjbGFzcz1cImliei1yaWdodFwiIGxhYmVsPVwiVXBsb2FkXCIgbmFtZT1cIndpZGdldFwiIGljb249XCJmaS11cGxvYWRcIiBwb3N0dXJsPVwiL2FwaS9hZm0tbWFpbi9pbnN0YWxsXCIgY2FsbGJhY2s9XCJjdHJsLkZpbGVVcGxvYWRlZFwiIHRpdGxlPVwiVXBsb2FkIEFHTCBBcHBcIj48L3VwbG9hZC1hcHBsaT48L2Rpdj48ZGl2IGNsYXNzPVwibWVzc2FnZS1ib3ggYm94LWNvbnRlbnQgdmVydGljYWwgZ3JpZC1mcmFtZVwiPjxkaXYgY2xhc3M9XCJyZXNwb25zZVwiPjxzcGFuIGNsYXNzPVwiZ3JpZC1jb250ZW50IG5vc2Nyb2xsIHJlcSB7e2N0cmwuc3RhdHVzfX1cIj5yZXE9IHt7Y3RybC5yZXF1ZXN0fX08L3NwYW4+IDxzcGFuIGNsYXNzPVwiZ3JpZC1jb250ZW50IG5vc2Nyb2xsIHJlcyB7e2N0cmwuc3RhdHVzfX1cIj5yZXM9IHt7Y3RybC5yZXNwb25zZX19PC9zcGFuPiA8c3BhbiBjbGFzcz1cImdyaWQtY29udGVudCBub3Njcm9sbCBzdGF0dXMge3tjdHJsLnN0YXR1c319XCI+c3RhdHVzPSB7e2N0cmwuZXJyY29kZX19PC9zcGFuPjwvZGl2PjwvZGl2Pjx0b2tlbi1yZWZyZXNoIGF1dG9sb2c9XCJ0cnVlXCIgY2FsbGJhY2s9XCJjdHJsLkF1dG9TdGFydFwiPjwvdG9rZW4tcmVmcmVzaD4nKTt9XSk7XG59KSgpO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 |