// ==UserScript==
// @name Eldarya Enhancements
// @namespace https://gitlab.com/NatoBoram/eldarya-enhancements
// @license GPL-3.0-or-later
// @version 1.1.0
// @author Nato Boram
// @description Enhances the user experience of Eldarya.
// @icon https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/avatar.png
// @supportURL https://gitlab.com/NatoBoram/Eldarya-Face-Downloader/issues
//
// @match https://www.eldarya.com.br/*
// @match https://www.eldarya.de/*
// @match https://www.eldarya.es/*
// @match https://www.eldarya.hu/*
// @match https://www.eldarya.it/*
// @match https://www.eldarya.pl/*
// @match https://www.eldarya.ru/*
// @match https://www.eldarya.com/*
// @match https://www.eldarya.fr/*
//
// @grant none
// ==/UserScript==
(()=>{var e={329:(e,t)=>{!function(e){var t=/\S/,n=/\"/g,a=/\n/g,i=/\r/g,o=/\\/g,r=/\u2028/,s=/\u2029/;function c(e){return e.trim?e.trim():e.replace(/^\s*|\s*$/g,"")}function l(e,t,n){if(t.charAt(n)!=e.charAt(0))return!1;for(var a=1,i=e.length;a<i;a++)if(t.charAt(n+a)!=e.charAt(a))return!1;return!0}e.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},e.scan=function(n,a){var i,o=n.length,r=0,s=null,u=null,d="",m=[],p=!1,f=0,g=0,h="{{",b="}}";function y(){d.length>0&&(m.push({tag:"_t",text:new String(d)}),d="")}function v(n,a){if(y(),n&&function(){for(var n=!0,a=g;a<m.length;a++)if(!(n=e.tags[m[a].tag]<e.tags._v||"_t"==m[a].tag&&null===m[a].text.match(t)))return!1;return n}())for(var i,o=g;o<m.length;o++)m[o].text&&((i=m[o+1])&&">"==i.tag&&(i.indent=m[o].text.toString()),m.splice(o,1));else a||m.push({tag:"\n"});p=!1,g=m.length}function w(e,t){var n="="+b,a=e.indexOf(n,t),i=c(e.substring(e.indexOf("=",t)+1,a)).split(" ");return h=i[0],b=i[i.length-1],a+n.length-1}for(a&&(a=a.split(" "),h=a[0],b=a[1]),f=0;f<o;f++)0==r?l(h,n,f)?(--f,y(),r=1):"\n"==n.charAt(f)?v(p):d+=n.charAt(f):1==r?(f+=h.length-1,"="==(s=(u=e.tags[n.charAt(f+1)])?n.charAt(f+1):"_v")?(f=w(n,f),r=0):(u&&f++,r=2),p=f):l(b,n,f)?(m.push({tag:s,n:c(d),otag:h,ctag:b,i:"/"==s?p-h.length:f+b.length}),d="",f+=b.length-1,r=0,"{"==s&&("}}"==b?f++:"}"===(i=m[m.length-1]).n.substr(i.n.length-1)&&(i.n=i.n.substring(0,i.n.length-1)))):d+=n.charAt(f);return v(p,!0),m};var u={_t:!0,"\n":!0,$:!0,"/":!0};function d(t,n,a,i){var o,r=[],s=null,c=null;for(o=a[a.length-1];t.length>0;){if(c=t.shift(),o&&"<"==o.tag&&!(c.tag in u))throw new Error("Illegal content in < super tag.");if(e.tags[c.tag]<=e.tags.$||m(c,i))a.push(c),c.nodes=d(t,c.tag,a,i);else{if("/"==c.tag){if(0===a.length)throw new Error("Closing tag without opener: /"+c.n);if(s=a.pop(),c.n!=s.n&&!p(c.n,s.n,i))throw new Error("Nesting error: "+s.n+" vs. "+c.n);return s.end=c.i,r}"\n"==c.tag&&(c.last=0==t.length||"\n"==t[0].tag)}r.push(c)}if(a.length>0)throw new Error("missing closing tag: "+a.pop().n);return r}function m(e,t){for(var n=0,a=t.length;n<a;n++)if(t[n].o==e.n)return e.tag="#",!0}function p(e,t,n){for(var a=0,i=n.length;a<i;a++)if(n[a].c==e&&n[a].o==t)return!0}function f(e){var t=[];for(var n in e.partials)t.push('"'+h(n)+'":{name:"'+h(e.partials[n].name)+'", '+f(e.partials[n])+"}");return"partials: {"+t.join(",")+"}, subs: "+function(e){var t=[];for(var n in e)t.push('"'+h(n)+'": function(c,p,t,i) {'+e[n]+"}");return"{ "+t.join(",")+" }"}(e.subs)}e.stringify=function(t,n,a){return"{code: function (c,p,i) { "+e.wrapMain(t.code)+" },"+f(t)+"}"};var g=0;function h(e){return e.replace(o,"\\\\").replace(n,'\\"').replace(a,"\\n").replace(i,"\\r").replace(r,"\\u2028").replace(s,"\\u2029")}function b(e){return~e.indexOf(".")?"d":"f"}function y(e,t){var n="<"+(t.prefix||"")+e.n+g++;return t.partials[n]={name:e.n,partials:{}},t.code+='t.b(t.rp("'+h(n)+'",c,p,"'+(e.indent||"")+'"));',n}function v(e,t){t.code+="t.b(t.t(t."+b(e.n)+'("'+h(e.n)+'",c,p,0)));'}function w(e){return"t.b("+e+");"}e.generate=function(t,n,a){g=0;var i={code:"",subs:{},partials:{}};return e.walk(t,i),a.asString?this.stringify(i,n,a):this.makeTemplate(i,n,a)},e.wrapMain=function(e){return'var t=this;t.b(i=i||"");'+e+"return t.fl();"},e.template=e.Template,e.makeTemplate=function(e,t,n){var a=this.makePartials(e);return a.code=new Function("c","p","i",this.wrapMain(e.code)),new this.template(a,t,this,n)},e.makePartials=function(e){var t,n={subs:{},partials:e.partials,name:e.name};for(t in n.partials)n.partials[t]=this.makePartials(n.partials[t]);for(t in e.subs)n.subs[t]=new Function("c","p","t","i",e.subs[t]);return n},e.codegen={"#":function(t,n){n.code+="if(t.s(t."+b(t.n)+'("'+h(t.n)+'",c,p,1),c,p,0,'+t.i+","+t.end+',"'+t.otag+" "+t.ctag+'")){t.rs(c,p,function(c,p,t){',e.walk(t.nodes,n),n.code+="});c.pop();}"},"^":function(t,n){n.code+="if(!t.s(t."+b(t.n)+'("'+h(t.n)+'",c,p,1),c,p,1,0,0,"")){',e.walk(t.nodes,n),n.code+="};"},">":y,"<":function(t,n){var a={partials:{},code:"",subs:{},inPartial:!0};e.walk(t.nodes,a);var i=n.partials[y(t,n)];i.subs=a.subs,i.partials=a.partials},$:function(t,n){var a={subs:{},code:"",partials:n.partials,prefix:t.n};e.walk(t.nodes,a),n.subs[t.n]=a.code,n.inPartial||(n.code+='t.sub("'+h(t.n)+'",c,p,i);')},"\n":function(e,t){t.code+=w('"\\n"'+(e.last?"":" + i"))},_v:function(e,t){t.code+="t.b(t.v(t."+b(e.n)+'("'+h(e.n)+'",c,p,0)));'},_t:function(e,t){t.code+=w('"'+h(e.text)+'"')},"{":v,"&":v},e.walk=function(t,n){for(var a,i=0,o=t.length;i<o;i++)(a=e.codegen[t[i].tag])&&a(t[i],n);return n},e.parse=function(e,t,n){return d(e,0,[],(n=n||{}).sectionTags||[])},e.cache={},e.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join("||")},e.compile=function(t,n){n=n||{};var a=e.cacheKey(t,n),i=this.cache[a];if(i){var o=i.partials;for(var r in o)delete o[r].instance;return i}return i=this.generate(this.parse(this.scan(t,n.delimiters),t,n),t,n),this.cache[a]=i}}(t)},508:(e,t,n)=>{var a=n(329);a.Template=n(14).Template,a.template=a.Template,e.exports=a},14:(e,t)=>{!function(e){function t(e,t,n){var a;return t&&"object"==typeof t&&(void 0!==t[e]?a=t[e]:n&&t.get&&"function"==typeof t.get&&(a=t.get(e))),a}e.Template=function(e,t,n,a){e=e||{},this.r=e.code||this.r,this.c=n,this.options=a||{},this.text=t||"",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=""},e.Template.prototype={r:function(e,t,n){return""},v:function(e){return e=c(e),s.test(e)?e.replace(n,"&").replace(a,"<").replace(i,">").replace(o,"'").replace(r,"""):e},t:c,render:function(e,t,n){return this.ri([e],t||{},n)},ri:function(e,t,n){return this.r(e,t,n)},ep:function(e,t){var n=this.partials[e],a=t[n.name];if(n.instance&&n.base==a)return n.instance;if("string"==typeof a){if(!this.c)throw new Error("No compiler available.");a=this.c.compile(a,this.options)}if(!a)return null;if(this.partials[e].base=a,n.subs){for(key in t.stackText||(t.stackText={}),n.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);a=function(e,t,n,a,i,o){function r(){}function s(){}var c;r.prototype=e,s.prototype=e.subs;var l=new r;for(c in l.subs=new s,l.subsText={},l.buf="",a=a||{},l.stackSubs=a,l.subsText=o,t)a[c]||(a[c]=t[c]);for(c in a)l.subs[c]=a[c];for(c in i=i||{},l.stackPartials=i,n)i[c]||(i[c]=n[c]);for(c in i)l.partials[c]=i[c];return l}(a,n.subs,n.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=a,a},rp:function(e,t,n,a){var i=this.ep(e,n);return i?i.ri(t,n,a):""},rs:function(e,t,n){var a=e[e.length-1];if(l(a))for(var i=0;i<a.length;i++)e.push(a[i]),n(e,t,this),e.pop();else n(e,t,this)},s:function(e,t,n,a,i,o,r){var s;return(!l(e)||0!==e.length)&&("function"==typeof e&&(e=this.ms(e,t,n,a,i,o,r)),s=!!e,!a&&s&&t&&t.push("object"==typeof e?e:t[t.length-1]),s)},d:function(e,n,a,i){var o,r=e.split("."),s=this.f(r[0],n,a,i),c=this.options.modelGet,u=null;if("."===e&&l(n[n.length-2]))s=n[n.length-1];else for(var d=1;d<r.length;d++)void 0!==(o=t(r[d],s,c))?(u=s,s=o):s="";return!(i&&!s)&&(i||"function"!=typeof s||(n.push(u),s=this.mv(s,n,a),n.pop()),s)},f:function(e,n,a,i){for(var o=!1,r=!1,s=this.options.modelGet,c=n.length-1;c>=0;c--)if(void 0!==(o=t(e,n[c],s))){r=!0;break}return r?(i||"function"!=typeof o||(o=this.mv(o,n,a)),o):!i&&""},ls:function(e,t,n,a,i){var o=this.options.delimiters;return this.options.delimiters=i,this.b(this.ct(c(e.call(t,a)),t,n)),this.options.delimiters=o,!1},ct:function(e,t,n){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(e,this.options).render(t,n)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf="",e},ms:function(e,t,n,a,i,o,r){var s,c=t[t.length-1],l=e.call(c);return"function"==typeof l?!!a||(s=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(l,c,n,s.substring(i,o),r)):l},mv:function(e,t,n){var a=t[t.length-1],i=e.call(a);return"function"==typeof i?this.ct(c(i.call(a)),a,n):i},sub:function(e,t,n,a){var i=this.subs[e];i&&(this.activeSub=e,i(t,n,this,a),this.activeSub=!1)}};var n=/&/g,a=/</g,i=/>/g,o=/\'/g,r=/\"/g,s=/[&<>\"\']/;function c(e){return String(null==e?"":e)}var l=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}}(t)},454:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<div id="marketplace-itemDetail-info-autobuy" style="text-align: center; margin: 20px auto"><div class="nl-button">Add to wishlist</div></div>'),a.fl()},partials:{},subs:{}})},827:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b("<h1>Add to wishlist</h1><p>How many maanas do you wish to offer to acquire this item?</p>"),a.fl()},partials:{},subs:{}})},949:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<button id="auto-explore-button" class="nl-button '),a.s(a.f("active",e,t,1),e,t,0,61,67,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('" data-id="'),a.b(a.v(a.f("locationId",e,t,0))),a.b('" data-mapid="'),a.b(a.v(a.f("regionId",e,t,0))),a.b('">Auto explore</button>'),a.fl()},partials:{},subs:{}})},469:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<a id="'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="carousel-news carousel-ee" href="" style="background-image: url('),a.b(a.v(a.f("backgroundImage",e,t,0))),a.b(')"><div><h4>'),a.b(a.v(a.f("h4",e,t,0))),a.b("</h4><h5>"),a.b(a.v(a.f("h5",e,t,0))),a.b("</h5><p>"),a.b(a.v(a.f("p",e,t,0))),a.b("</p></div></a>"),a.fl()},partials:{},subs:{}})},731:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b("<h1>Change price</h1><p>How many maanas do you wish to offer to acquire this item?</p>"),a.fl()},partials:{},subs:{}})},900:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<button id="'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="nl-button favorites-action-ee">'),a.b(a.v(a.f("text",e,t,0))),a.b("</button>"),a.fl()},partials:{},subs:{}})},293:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<a id="home-'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="home-content-tile home-content-small home-content-small-ee" href="'),a.b(a.v(a.f("href",e,t,0))),a.b('" style="background-image: url('),a.b(a.v(a.f("backgroundImage",e,t,0))),a.b(');"><h4>'),a.b(a.v(a.f("h4",e,t,0))),a.b("</h4></a>"),a.fl()},partials:{},subs:{}})},431:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<li class="main-menu-'),a.b(a.v(a.f("class",e,t,0))),a.b(' main-menu-ee"><a href="'),a.b(a.v(a.f("href",e,t,0))),a.b('">'),a.b(a.v(a.f("text",e,t,0))),a.b("</a></li>"),a.fl()},partials:{},subs:{}})},444:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<li id="'),a.b(a.v(a.f("id",e,t,0))),a.b('" class="profile-contact-action-ee"><span class="nl-button nl-button-sm"><div class="action-description">'),a.b(a.v(a.f("actionDescription",e,t,0))),a.b("</div></span></li>"),a.fl()},partials:{},subs:{}})},657:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<div class="account-misc-bloc account-ee-bloc bloc"><h2 class="section-title">Enhancements</h2><ul class="account-misc-actions"><li id="ee-debug-enabled" class="nl-button nl-button-sm '),a.s(a.f("debug",e,t,1),e,t,0,194,200,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('" title="Enables or disables logging.">Debug</li><li id="ee-minigames-enabled" class="nl-button nl-button-sm '),a.s(a.f("minigames",e,t,1),e,t,0,333,339,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('">Minigames</li><li id="ee-explorations-enabled" class="nl-button nl-button-sm '),a.s(a.f("explorations",e,t,1),e,t,0,449,455,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('">Explorations</li><li id="ee-market-enabled" class="nl-button nl-button-sm '),a.s(a.f("market",e,t,1),e,t,0,559,565,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b("active")})),e.pop()),a.b('">Market</li></ul></div>'),a.fl()},partials:{},subs:{}})},333:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b('<a id="wishlist-button" class="nl-button">Wishlist</a>'),a.fl()},partials:{},subs:{}})},952:(e,t,n)=>{var a=n(508);e.exports=new a.Template({code:function(e,t,n){var a=this;return a.b(n=n||""),a.b("<style>table {"),a.b("\n"+n),a.b(" text-align: center;"),a.b("\n"+n),a.b(" width: 100%;"),a.b("\n"+n),a.b(" }"),a.b("\n"),a.b("\n"+n),a.b(" .action-picto {"),a.b("\n"+n),a.b(" height: 50px;"),a.b("\n"+n),a.b(" width: 50px;"),a.b("\n"+n),a.b(" cursor: pointer;"),a.b("\n"+n),a.b(" }"),a.b("\n"),a.b("\n"+n),a.b(" .action-picto:hover:not(.disabled),"),a.b("\n"+n),a.b(" .edit-price:hover {"),a.b("\n"+n),a.b(" animation: button-bounce 300ms linear forwards;"),a.b("\n"+n),a.b(" filter: brightness(1.05) contrast(1.1);"),a.b("\n"+n),a.b(" }"),a.b("\n"),a.b("\n"+n),a.b(" .edit-price {"),a.b("\n"+n),a.b(" cursor: pointer;"),a.b("\n"+n),a.b(" }"),a.b("\n"),a.b("\n"+n),a.b(" img.disabled {"),a.b("\n"+n),a.b(" filter: grayscale(1);"),a.b("\n"+n),a.b(" }"),a.b("\n"),a.b("\n"+n),a.b(" .item-icon {"),a.b("\n"+n),a.b(" width: 100px;"),a.b("\n"+n),a.b(" height: 100px;"),a.b("\n"+n),a.b(" }</style><table><thead><tr><th>Icon</th><th>Name</th><th>Price</th><th>Status</th><th>Actions</th></tr></thead><tbody> "),a.s(a.f("wishlist",e,t,1),e,t,0,577,1275,"{{ }}")&&(a.rs(e,t,(function(e,t,n){n.b(' <tr class="marketplace-abstract" data-wearableitemid="'),n.b(n.v(n.f("wearableitemid",e,t,0))),n.b('"><td><img class="item-icon" src="'),n.b(n.v(n.f("icon",e,t,0))),n.b('" alt="'),n.b(n.v(n.f("name",e,t,0))),n.b('"></td><td><div class="abstract-name">'),n.b(n.v(n.f("name",e,t,0))),n.b('</div></td><td><div class="edit-price" title="Change price"><span class="price-item">'),n.b(n.v(n.f("price",e,t,0))),n.b('</span><span class="maana-icon" alt="maanas"></span></div></td><td><p class="error">'),n.b(n.v(n.f("error",e,t,0))),n.b('</p></td><td><img class="action-picto reset-item-status '),n.s(n.f("error",e,t,1),e,t,1,0,0,"")||n.b("disabled"),n.b('" src="/static/img/new-layout/wardrobe/reset-btn.png" title="Reset the error status" alt="Reset"> <img class="action-picto delete-wishlist-item" src="/static/img/new-layout/wardrobe/delete.png" title="Remove from the wishlist" alt="Delete"></td></tr> ')})),e.pop()),a.b(" </tbody></table>"),a.fl()},partials:{},subs:{}})}},t={};function n(a){var i=t[a];if(void 0!==i)return i.exports;var o=t[a]={exports:{}};return e[a](o,o.exports,n),o.exports}(()=>{"use strict";var e,t,a,i,o,r,s,c,l,u;!function(e){e[e.millisecond=1]="millisecond",e[e.second=1e3]="second",e[e.minute=6e4]="minute",e[e.hour=36e5]="hour",e[e.day=864e5]="day",e[e.week=6048e5]="week"}(e||(e={})),function(e){e.autoExploreLocations="autoExploreLocations",e.debug="debug",e.explorations="explorations",e.market="market",e.minigames="minigames",e.wishlist="wishlist"}(t||(t={}));class d{static localStorage=localStorage;constructor(){}static get autoExploreLocations(){return this.getItem(t.autoExploreLocations,[])}static set autoExploreLocations(e){this.setItem(t.autoExploreLocations,e)}static get debug(){return this.getItem(t.debug,!1)}static set debug(e){this.setItem(t.debug,e)}static get explorations(){return this.getItem(t.explorations,!1)}static set explorations(e){this.setItem(t.explorations,e)}static get market(){return this.getItem(t.market,!1)}static set market(e){this.setItem(t.market,e)}static get minigames(){return this.getItem(t.minigames,!1)}static set minigames(e){this.setItem(t.minigames,e)}static get settings(){return{autoExploreLocations:this.autoExploreLocations,debug:this.debug,explorations:this.explorations,market:this.market,minigames:this.minigames,wishlist:this.wishlist}}static set settings(e){this.autoExploreLocations=e.autoExploreLocations,this.explorations=e.explorations,this.market=e.market,this.minigames=e.minigames}static get wishlist(){return this.getItem(t.wishlist,[])}static set wishlist(e){this.setItem(t.wishlist,e)}static getItem(e,t){return JSON.parse(this.localStorage.getItem(e)??JSON.stringify(t))??t}static setItem(e,t){this.localStorage.setItem(e,JSON.stringify(t))}}class m{static console=console;constructor(){}static get debugging(){return d.debug}static debug(e,...t){this.debugging&&this.console.debug(e,...t)}static error(e,...t){this.debugging&&this.console.error(e,...t)}static info(e,...t){this.debugging&&this.console.info(e,...t)}static log(e,...t){this.debugging&&this.console.log(e,...t)}static warn(e,...t){this.debugging&&this.console.warn(e,...t)}}!function(e){e.action="action",e.explorationsDone="explorationsDone",e.meta="meta",e.minigamesDone="minigamesDone",e.selectedLocation="selectedLocation",e.takeover="takeover",e.wishlist="wishlist"}(a||(a={}));class p{static sessionStorage=sessionStorage;constructor(){}static get action(){return this.getItem(a.action,null)}static set action(e){this.setItem(a.action,e)}static get explorationsDone(){return this.getItem(a.explorationsDone,!1)}static set explorationsDone(e){this.setItem(a.explorationsDone,e)}static get meta(){return this.getItem(a.meta,null)}static set meta(e){this.setItem(a.meta,e)}static get minigamesDone(){return this.getItem(a.minigamesDone,!1)}static set minigamesDone(e){this.setItem(a.minigamesDone,e)}static get selectedLocation(){return this.getItem(a.selectedLocation,null)}static set selectedLocation(e){this.setItem(a.selectedLocation,e)}static get takeover(){return this.getItem(a.takeover,!1)}static set takeover(e){this.setItem(a.takeover,e)}static get wishlist(){return this.getItem(a.wishlist,[])}static set wishlist(e){this.setItem(a.wishlist,e)}static getItem(e,t){return JSON.parse(this.sessionStorage.getItem(e)??JSON.stringify(t))??t}static setItem(e,t){this.sessionStorage.setItem(e,JSON.stringify(t))}}function f(e){const t=e.querySelector(".abstract-name")?.innerText,n=e.querySelector(".abstract-icon img")?.src,a=e.querySelector(".price-item[data-bids]")?.dataset,i=e.querySelector(".price-item:not([data-bids])")?.dataset;return n&&t?{...e.dataset,icon:n,name:t,buyNowPrice:i,currentPrice:a}:null}async function g(e){return new Promise((t=>{const n=setInterval((()=>{const a=document.querySelector(e);if(!a)return;clearInterval(n);const i=document.createEvent("MouseEvent");i.initEvent("mouseover"),a.dispatchEvent(i),setTimeout((()=>{a.click(),t(a)}),800)}),800)}))}!function(e){e.All="",e[e.Underwear=1]="Underwear",e[e.Skins=2]="Skins",e[e.Tattoos=20]="Tattoos",e[e.Mouths=21]="Mouths",e[e.Eyes=3]="Eyes",e[e.Hair=4]="Hair",e[e.Socks=5]="Socks",e[e.Shoes=6]="Shoes",e[e.Pants=7]="Pants",e[e.HandAccessories=8]="HandAccessories",e[e.Tops=9]="Tops",e[e.Coats=10]="Coats",e[e.Gloves=11]="Gloves",e[e.Necklaces=12]="Necklaces",e[e.Dresses=13]="Dresses",e[e.Hats=14]="Hats",e[e.FaceAccessories=15]="FaceAccessories",e[e.Funds=16]="Funds",e[e.Belts=18]="Belts",e[e.Atmospheres=19]="Atmospheres"}(i||(i={})),function(e){e.all="",e.food="food",e.alchemy="alchemy",e.utility="utility",e.tame="tame"}(o||(o={})),function(e){e.all="",e[e.food=1]="food",e.alchemy="Consumable",e[e.utility=3]="utility",e[e.tame=4]="tame"}(r||(r={})),function(e){e.any="",e[e.light=1]="light",e[e.obsidian=2]="obsidian",e[e.absynthe=3]="absynthe",e[e.shadow=4]="shadow"}(s||(s={})),function(e){e.all="",e.common="common",e.rare="rare",e.Epic="epic",e.legendary="legendary",e.event="event"}(c||(c={})),function(e){e.All="",e.Bag="Bag",e.Consumable="Consumable",e.EggItem="EggItem",e.PlayerWearableItem="PlayerWearableItem",e.QuestItem="QuestItem"}(l||(l={})),function(e){e.daily="daily",e.minigames="minigames",e.explorations="explorations",e.auctions="auctions",e.buy="buy",e.wait="wait"}(u||(u={}));class h{}const b=new class extends h{key=u.buy;get currentMaana(){return Number(document.querySelector("#currency-maana")?.dataset.maana)}condition(){return d.market&&Boolean(d.wishlist.length)}async perform(){if(!location.pathname.startsWith("/marketplace"))return await g(".main-menu-marketplace a"),!0;for(const e of d.wishlist){if(e.error){m.warn(`Skipped "${e.name}"`,e);continue}m.info(`Searching for "${e.name}"`,e);let t=8;e:for(let n=1;8===t;n++){const a=await this.search(e,n);t=a.length,m.log(`Found ${t} results`,a);const i=a.filter((t=>t.icon===e.icon&&t.buyNowPrice&&Number(t.buyNowPrice.price)<=e.price&&Number(t.buyNowPrice.price)<=this.currentMaana));for(const e of i){if(!await this.buy(e))break e;m.info(`Bought "${e.name}" for ${Number(e.buyNowPrice?.price)} maanas.`,e),$.flavrNotif(`Bought <strong>${e.name}</strong> for <strong class="price-item">${Number(e.buyNowPrice?.price)}</strong> <span class="maana-icon" alt="maanas"></span>.`)}}}return!1}async buy(e){const t=await async function(e){return new Promise((t=>{$.post("/marketplace/buy",{id:e},(e=>{p.meta=e.meta,t(e),"success"===e.result||$.flavrNotif(e.data)}),"json")}))}(Number(e.itemid));return"success"!==t.result&&this.setError(e.wearableitemid,t.data),"success"===t.result}async search(e,t=1){const n=document.querySelector("#filter-itemName");n&&(n.value=e.name);const a=document.querySelector(".marketplace-search-items");return a?(a.innerHTML=await async function(e){return e={type:l.All,bodyLocation:i.All,category:r.all,rarity:c.all,price:"",guard:s.any,page:1,name:"",...e},new Promise((t=>{$.get("/marketplace/ajax_search",{...e,from:8*(e.page-1),to:8},t)}))}({name:e.name,page:t}),Array.from(a.querySelectorAll(".marketplace-search-item")).map(f).filter((e=>null!==e))):[]}setError(e,t){const n=d.wishlist,a=n.findIndex((t=>t.wearableitemid===e)),i=n[a];i&&(i.error=t,d.wishlist=[...n.slice(void 0,a),i,...n.slice(a+1,void 0)])}},y=new class{key=u.daily;condition(){const e=document.getElementById("daily-gift-container");return!!e&&"none"!==getComputedStyle(e).display}async perform(){const e=document.getElementById("daily-gift-container");return!(!e||"none"===getComputedStyle(e).display||(e.click(),await g(".first-connexion .flavr-button.default"),P(),1))}};async function v(e){return new Promise((t=>{$.post("/pet/changeRegion",{newRegionId:e},(e=>{p.meta=e.meta,t(e),"success"===e.result?(currentRegion=e.data.currentRegion,pendingTreasureHuntLocation=void 0===e.data.pendingTreasureHuntLocation?null:e.data.pendingTreasureHuntLocation,timeLeftExploration=void 0===e.data.timeLeftExploration?null:e.data.timeLeftExploration):$.flavrNotif(e.data)}))}))}var w,x;!function(e){e.error="error",e.success="success"}(w||(w={})),function(e){e[e.idle=0]="idle",e[e.result=1]="result",e[e.capture=2]="capture",e[e.pending=3]="pending"}(x||(x={}));const k=new class extends h{key=u.explorations;get globals(){return{currentRegion,pendingTreasureHuntLocation,timeLeftExploration}}condition(){return d.explorations&&!p.explorationsDone&&!!d.autoExploreLocations.length}async perform(){if("/pet"!==location.pathname)return await g(".main-menu-pet a"),!0;switch(this.getExplorationStatus()){case x.idle:return(await this.startExploration()).selected||(p.explorationsDone=!0),!1;case x.pending:return await this.waitExploration()&&this.perform();case x.result:return await this.endExploration(),this.perform();case x.capture:return await this.endCapture(),this.perform();default:return!1}}async clickExplore(){return g("#explore-button")}async clickLocation(e){return g(`.map-location[data-id="${e.location.id}"]`)}clickRegion(e){const t=document.querySelector(`.minimap[data-mapid="${e.region.id}"]`);return t?(t.click(),t):(d.autoExploreLocations=d.autoExploreLocations.filter((t=>t.region.id!==e.region.toString())),p.selectedLocation=null,location.reload(),null)}async clickSeason(){return g("#crystal-images-container")}async endCapture(){try{new Audio("/static/event/2021/music/sounds/mission-complete.mp3").play()}catch(e){}await g("#open-capture-interface"),await g("#capture-button"),await g("#close-result")}async endExploration(){return g("#close-result")}getCurrentSeason(){return Array.from(document.querySelector("body")?.classList??[]).find((e=>e.startsWith("season-")))?.replace("season-","")??null}getExplorationStatus(){return document.querySelector("#open-capture-interface")||document.querySelector("#capture-interface-outer.active")?x.capture:document.querySelector("#pending-map-location-data-outer.active")||document.querySelector("#map-container.pending")?x.pending:document.querySelector("#treasure-hunt-result-overlay.active")?x.result:x.idle}getLowestEnergyLocation(){return d.autoExploreLocations.reduce(((e,t)=>Number(t.location.energyRequired)<Number(e.location.energyRequired)?t:e))}getSelectedLocation(){let e=p.selectedLocation;return e||(e=this.selectLocation(),p.selectedLocation=e),e}selectLocation(){const e=d.autoExploreLocations.filter((e=>Number(e.location.energyRequired)<=petEnergy)),t=this.getLowestEnergyLocation(),n=e.filter((e=>petEnergy-Number(e.location.energyRequired)>=Number(t.location.energyRequired)));if(n.length)return n[Math.floor(Math.random()*n.length)]??null;const a=e.filter((e=>Number(e.location.energyRequired)===petEnergy));return a.length?a[Math.floor(Math.random()*a.length)]??null:e[Math.floor(Math.random()*e.length)]??null}async startExploration(){const e=this.getSelectedLocation();return e?(m.info("Exploring",e),e.region.season&&this.getCurrentSeason()!==e.region.season?(await this.clickSeason(),{exploring:!1,selected:e}):(this.clickRegion(e),await this.clickLocation(e),await this.clickExplore(),p.selectedLocation=null,{exploring:!0,selected:e})):{exploring:!1,selected:e}}async waitExploration(t){document.querySelector(`.minimap[data-mapid="${t?.region.id??currentRegion.id}"]`)?.click();let n=3*e.second;if(t)n+=t.location.timeToExplore*e.minute;else if(timeLeftExploration&&timeLeftExploration>0)n+=timeLeftExploration*e.second;else if(!pendingTreasureHuntLocation&&document.querySelector("#map-container.pending")){const t=await async function(){return new Promise((e=>{$.post("/pet/explorationResults",(t=>{p.meta=t.meta,e(t),"success"===t.result||$.flavrNotif(t.data)}))}))}();return t.result===w.success&&(!!t.data.results.find((e=>"capture"===e.type))&&(await async function(){return new Promise((e=>{$.post("/pet/capture/end",(t=>{p.meta=t.meta,e(t),"success"===t.result||$.flavrNotif(t.data)}))}))}(),m.error("Reloading because the exploration is in another region.",this.globals),await new Promise((t=>setTimeout(t,e.minute))),location.reload(),!0))}return!(n>10*e.minute||(m.log(`Waiting for the exploration to end in ${Math.ceil(n/e.second)} seconds...`,this.globals),await new Promise((e=>setTimeout(e,n))),await v(Number(t?.region.id??currentRegion.id)),this.getExplorationStatus()===x.pending&&timeLeftExploration&&timeLeftExploration<0&&(m.info("Reloading because the timer is desynchronised.",this.globals),await new Promise((t=>setTimeout(t,e.second))),location.reload()),0))}},S={name:"Flappy",scoreMin:180,scoreMax:200,delayMin:6e4,delayMax:7e4,buttonSelector:'.minigame-start [href="/minigames/bubbltemple"] .nl-button'},E={name:"Hatchlings",scoreMin:18,scoreMax:20,delayMin:3e4,delayMax:3e4,buttonSelector:'.minigame-start [href="/minigames/cocooninpick"] .nl-button'},L={name:"Peggle",scoreMin:9,scoreMax:10,delayMin:1e4,delayMax:2e4,buttonSelector:'.minigame-start [href="/minigames/gembomb"] .nl-button'};async function I(e){await new Promise((e=>{const t=setInterval((()=>{const n=document.querySelectorAll(".minigames-rules .flavr-button");if(n.length){clearInterval(t);for(const e of n)e.classList.add("disabled");e(!0)}}),250)}));const t=await async function(e){return new Promise(((t,n)=>{"undefined"!=typeof Recaptcha?Recaptcha.execute(`minigameStart${e.name}`,(a=>{q(e,a).then(t).catch(n)})):q(e).then(t).catch(n)}))}(e);$.flavrNotif(`Playing <strong>${e.name}</strong>...`);const n=t.data,a=T(e.scoreMin,e.scoreMax),i=function(e,t){e=e.toString(),t=t.toString();let n="";for(let a=0;a<e.length;++a){let i=e[a];for(let e=0;e<t.length;++e)i=String.fromCharCode(i.charCodeAt(0)^t.charCodeAt(e));n+=i}return encodeURIComponent(n)}(n,a.toString());await new Promise((t=>setTimeout(t,T(e.delayMin,e.delayMax)))),await A(e,n,a),await new Promise((e=>setTimeout(e,T(1e3,3e3)))),await async function(e,t,n){return new Promise((a=>{"undefined"!=typeof Recaptcha?Recaptcha.execute("minigameSave"+n,(i=>{N(e,t,n,i).then(a)})):N(e,t,n).then(a)}))}(i,a,e.name.toLowerCase()),await new Promise((e=>setTimeout(e,T(1e3,3e3))))}function T(e,t){return Math.floor(Math.random()*(t-e+1)+e)}async function q(e,t){return new Promise(((n,a)=>{$.ajax({url:"/minigames/ajax_startGame",type:"post",dataType:"json",data:t?{game:e.name.toLowerCase(),recaptchaToken:t}:{game:e.name.toLowerCase()},success:e=>{n(e)},error:()=>{a()}})}))}async function A(e,t,n){return new Promise((a=>{$.post("/minigames/ajax_getPrizes",{game:e.name.toLowerCase(),score:n},(t=>{a(t),"success"===t.result?$.flavrNotif(`Played <strong>${e.name}</strong> for <strong class="price-item">${t.data.maana}</strong> <span class="maana-icon" alt="maanas"></span>.`):$.flavrNotif(t.data)}),"json").fail((()=>setTimeout((()=>{a(A(e,t,n))}),T(1e3,3e3))))}))}async function N(e,t,n,a){return new Promise((i=>{const o=decodeURIComponent(e);$.ajax({type:"post",url:"/minigames/ajax_saveScore",data:a?{token:o,score:t,game:n,recaptchaToken:a}:{token:o,score:t,game:n},success:()=>{i()},error:()=>setTimeout((()=>{i(N(e,t,n))}),T(1e3,3e3))})}))}function M(){p.takeover&&B()}function P(){p.action=null,p.explorationsDone=!1,p.minigamesDone=!1,p.selectedLocation=null,p.wishlist=[]}async function B(){if(!p.takeover)return;y.condition()&&await y.perform();const e=C.find((e=>e.key===p.action));return e?(m.info("Action:",e.key),e.condition()&&await e.perform()?void 0:(_(),void B())):(_(),void B())}const C=[new class{key=u.minigames;condition(){return d.minigames&&!p.minigamesDone}async perform(){switch(location.pathname){case"/minigames":{const e=this.openMinigame(L)||this.openMinigame(S)||this.openMinigame(E);return e||(p.minigamesDone=!0,document.querySelector('.minigames-rules [rel="btn-cancel"]')?.click()),e}case"/minigames/gembomb":await async function(){return I(L)}();break;case"/minigames/bubbltemple":await async function(){return I(S)}();break;case"/minigames/cocooninpick":await async function(){return I(E)}();break;default:return await g(".main-menu-minigames a"),!0}return await g(".main-menu-minigames a"),!0}openMinigame(e){const t=document.querySelector(e.buttonSelector);return!!t&&(t.click(),!0)}},k,b,new class extends h{key=u.wait;condition(){return!0}async perform(){return m.log("Waiting for 10 minutes..."),new Promise((e=>setTimeout((()=>{e(!1)}),6e5)))}}];function _(){const e=C.findIndex((e=>e.key===p.action))+1;return p.action=C[e>=C.length?0:e].key}function D(e,t="outfit"){const n=Sacha.Avatar.avatars[e];if(!n)return;const a=function(e){return e.children.map((e=>{const t=e.getItem();return{id:t._id,group:t._group,name:t._name,image:t._image,type:t._type,categoryId:t._categoryId,hiddenCategories:Object.values(t._hiddenCategories),animationData:t._animationData,locked:t._locked}}))}(n),i="data:text/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(a,null,"\t")),o=document.createElement("a");o.setAttribute("href",i),o.setAttribute("download",`${t}.json`),o.click()}function R(){D("#appearance-preview")}function j(){const e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("accept","application/json"),e.click(),e.addEventListener("input",(e=>{if(!e.target)return;const t=e.target.files;if(!t)return;const n=t[0];n&&n.text().then((async e=>{if(!e)return;const t=JSON.parse(e),n=Sacha.Avatar.avatars["#appearance-preview"];if(!n)return;$.flavrNotif("Importing outfit. Please wait...");const a=new Set;for(const e of t)a.add(e.type);await Promise.all(Array.from(a.values()).map((async e=>async function(e){return new Promise((t=>{const n=$("#appearance-items-category-"+e);n.hasClass("active")?t():n.length<=0?$.post("/player/openCategory/"+e,(e=>{$(e).hide().appendTo("#appearance-items")})).always((()=>{t()})):t()}))}(e))));const i=new Set;for(const e of t)document.querySelector(`[data-group="${e.group}"]`)&&i.add(e.group);await Promise.all(Array.from(i.values()).map((async e=>async function(e){return new Promise((t=>{const n=$("#appearance-items-group-"+e.toString());n.hasClass("active")?t():n.length<=0?$.get("/player/openGroup/"+e.toString(),(e=>{$(e).hide().appendTo("#appearance-items")})).always((()=>{t()})):t()}))}(e))));const o=[];for(const e of t){const t=availableItems[e.id];t&&o.push(t)}!function(){const e=Sacha.Avatar.avatars["#appearance-preview"];if(e)for(let t=e.children.length-1;t>=0;t--){const n=e.children[t];if(!n)continue;const a=n.getItem();Sacha.Avatar.removeItemFromAllAvatars(a)&&$(`#appearance-item-${a._id}`).removeClass("selected")}}(),n.addItems(o),initializeSelectedItems(),initializeHiddenCategories(),$.flavrNotif("Imported outfit!")}))}))}function H(e,t){const n=e.toDataURL("image/png"),a=document.createElement("a");a.setAttribute("href",n),a.setAttribute("download",`${t}.png`),a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a)}function O(){const e=document.querySelector("#avatar-menu-container canvas");e?H(e,"face"):console.warn("Couldn't find the guardian's face.")}function F(){const e=document.querySelector("#home-avatar-player canvas");e?H(e,J()??"guardian"):console.warn("Couldn't find the guardian.")}function G(){const e=document.querySelector("#appearance-preview canvas");e?H(e,J()??"guardian"):console.warn("Couldn't find the guardian.")}function J(){return document.querySelector("#avatar-menu-container-outer>p")?.textContent??null}let W;function U(){W?.disconnect(),W=null;const e=document.getElementById("appearance-items");e&&(W=new MutationObserver(U),W.observe(e,{childList:!0}),function(){const e=document.getElementById("favorites-actions");if(!e||document.querySelector(".favorites-action-ee"))return;const t=n(900),a={id:"import-outfit",text:"Import"},i={id:"export-outfit",text:"Export"},o={id:"download-outfit",text:"Download"};e.insertAdjacentHTML("beforeend",t.render(a)+t.render(i)+t.render(o)),document.getElementById(a.id)?.addEventListener("click",j),document.getElementById(i.id)?.addEventListener("click",R),document.getElementById(o.id)?.addEventListener("click",G)}())}const z={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_beemoov_annoyances.png",h4:"Beemoov Annoyances",href:"https://gitlab.com/NatoBoram/Beemoov-Annoyances",id:"carousel-beemoov-annoyances",p:"Block some of Eldarya's annoyances."},K={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_face.png",id:"carousel-download-face",h4:"Download your face!",p:"Click here to download your guardian's face."},Q={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_guardian.png",id:"carousel-download-guardian",h4:"Download your guardian!",p:"Click here to download your guardian."},V={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_eldarya_enhancements.png",h4:"Eldarya Enhancements",href:"https://gitlab.com/NatoBoram/eldarya-enhancements",id:"carousel-eldarya-enhancements",p:"Enhances the user experience of Eldarya."},X={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_takeover.png",id:"carousel-takeover",h4:"Takeover",p:"Give up this tab to perform automated actions."};function Y(e){const t=e.querySelector("h4");t&&(t.innerText=(p.takeover?"Disable":"Enable")+" Takeover")}let Z,ee;function te(){for(const e of document.querySelectorAll(".marketplace-abstract"))e.addEventListener("click",(()=>{new MutationObserver(((t,n)=>{const a=f(e);a&&ne(a,n)})).observe(document.getElementById("marketplace-zoom"),{childList:!0})}))}function ne(e,t){const a=document.querySelector("#marketplace-itemDetail");if(!a)return;t?.disconnect(),document.getElementById("marketplace-itemDetail-info-autobuy")?.remove();const i=n(454);a.insertAdjacentHTML("beforeend",i.render({})),a.querySelector("#marketplace-itemDetail-info-autobuy")?.addEventListener("click",(()=>{!function(e){const t=n(827);$.flavr({content:t.render({}),buttons:{close:{style:"close"},save:{action:()=>{const t=Number(document.querySelector(".flavr-prompt")?.value.trim());if(!t||t<=0)return $.flavrNotif("This is not a valid price."),!1;const n=d.wishlist.filter((t=>t.icon!==e.icon));return n.push({...e,price:t}),d.wishlist=n,!0}}},dialog:"prompt",prompt:{value:""},onBuild:e=>{e.addClass("new-layout-popup")}})}(e)}))}function ae(){if(ee?.disconnect(),ee=null,"/pet"!==location.pathname)return;const e=document.querySelector(".page-main-container");e&&(ee=new MutationObserver(ae),ee.observe(e,{attributes:!0}),function(){const e=d.autoExploreLocations;for(const t of document.querySelectorAll(".map-location[data-id]")){const n=Number(t.getAttribute("data-id"));n&&(se(e,t),t.addEventListener("click",(()=>{new MutationObserver(((e,t)=>{ie(n,t)})).observe(document.getElementById("map-location-preview"),{attributes:!0})})))}}())}function ie(e,t){const a=document.querySelector("#buttons-container");if(!a)return;t?.disconnect();const i={locationId:e,active:d.autoExploreLocations.some((t=>t.location.id===e.toString())),regionId:Number(document.querySelector(".minimap.current[data-mapid]")?.getAttribute("data-mapid"))};a.querySelector("#auto-explore-button")?.remove();const o=n(949);a.insertAdjacentHTML("beforeend",o.render(i)),a.querySelector("#auto-explore-button")?.addEventListener("click",(()=>{(async function(e){if(e.active){const t=d.autoExploreLocations.filter((t=>t.location.id!==e.locationId.toString()));return d.autoExploreLocations=t,void ie(e.locationId)}const t=await oe(e.regionId,e.locationId);if(!t)return;const n=d.autoExploreLocations;n.push(t),d.autoExploreLocations=n,ie(e.locationId)})(i).then(re)})),async function(e){const t=await oe(e.regionId,e.locationId);t&&petEnergy<Number(t.location.energyRequired)&&document.getElementById("explore-button")?.classList.add("disabled")}(i)}async function oe(e,t){const n=await async function(e){if(e.toString()===currentRegion.id)return currentRegion;const t=await v(e);return t.result===w.success?t.data.currentRegion:null}(e);if(!n)return null;const a=n.locations.find((e=>e.id===t.toString()));return a?{location:a,region:n}:null}function re(){const e=d.autoExploreLocations;for(const t of document.querySelectorAll(".map-location[data-id]"))se(e,t)}function se(e,t){const n=t.getAttribute("data-id");n&&(t.style.backgroundImage=e.some((e=>e.location.id===n))?"url(/static/img/new-layout/pet/icons/picto_map_explo.png)":"url(/static/img/new-layout/pet/icons/picto_map.png)")}function ce(){const e=document.querySelector("#main-section .section-title"),t=Object.keys(Sacha.Avatar.avatars).filter((e=>e.startsWith("#playerProfileAvatar")));for(const n of t)D(n,e?.textContent?.trim())}function le(){const e=document.querySelector("#account-right div");if(!e||e.querySelector(".account-ee-bloc"))return;const t=n(657);e.insertAdjacentHTML("beforeend",t.render(d.settings)),document.getElementById("ee-debug-enabled")?.addEventListener("click",(()=>{d.debug=!d.debug,ue()})),document.getElementById("ee-minigames-enabled")?.addEventListener("click",(()=>{d.minigames=!d.minigames,ue()})),document.getElementById("ee-explorations-enabled")?.addEventListener("click",(()=>{d.explorations=!d.explorations,ue()})),document.getElementById("ee-market-enabled")?.addEventListener("click",(()=>{d.market=!d.market,ue()}))}function ue(){document.querySelector(".account-ee-bloc")?.remove(),le()}function de(){const e=document.getElementById("marketplace-menu");if(!e)return;if(!e.querySelector("#wishlist-button"))for(const t of e.querySelectorAll("a"))t.addEventListener("click",(()=>{pageLoad(t.href,void 0,void 0,void 0,!0)}));e.querySelector("#wishlist-button")?.remove();const t=n(333);e.insertAdjacentHTML("beforeend",t.render({}));const a=e.querySelector("#wishlist-button");a?.addEventListener("click",(()=>{me(a)}))}function me(e){const t=document.querySelector(".marketplace-assistance");t&&(t.textContent="On this page, you can organize your wishlist and check the status of your wished items."),document.querySelector("#marketplace-menu .active")?.classList.remove("active"),e.classList.add("active");const a=document.getElementById("marketplace-filters");a&&(a.innerHTML="");const i=n(952),o=document.querySelector(".marketplace-container")??document.getElementById("marketplace-active-auctions")??document.getElementById("marketplace-itemsForSale");if(!o)return;const r={wishlist:d.wishlist};o.innerHTML=i.render(r);for(const t of o.querySelectorAll("tr")){const n=t.dataset.wearableitemid;if(!n)continue;const a=t.querySelector(".reset-item-status");a&&a.addEventListener("click",(()=>{pe(n),me(e)}));const i=t.querySelector(".delete-wishlist-item");i&&i.addEventListener("click",(()=>{fe(n),me(e)}));const o=t.querySelector(".edit-price");o&&o.addEventListener("click",(()=>{ge(n).then((()=>{me(e)}))}))}}function pe(e){const t=d.wishlist,n=t.findIndex((t=>t.wearableitemid===e)),a=t[n];a&&(delete a.error,d.wishlist=[...t.slice(void 0,n),a,...t.slice(n+1,void 0)])}function fe(e){d.wishlist=d.wishlist.filter((t=>t.wearableitemid!==e))}async function ge(e){const t=n(731),a=d.wishlist,i=a.findIndex((t=>t.wearableitemid===e)),o=a[i];if(o)return new Promise((e=>{$.flavr({content:t.render({}),dialog:"prompt",prompt:{value:o.price.toString()},buttons:{close:{style:"close",action:()=>(e(),!0)},save:{action:()=>{const t=Number(document.querySelector(".flavr-prompt")?.value.trim());return!t||t<=0?($.flavrNotif("This is not a valid price."),!1):(o.price=t,d.wishlist=[...a.slice(void 0,i),o,...a.slice(i+1,void 0)],e(),!0)}}},onBuild:e=>{e.addClass("new-layout-popup")}})}))}function he(){!function(){const e=document.getElementById("menu-inner-right");if(!e||e.querySelector(".main-menu-ee"))return;e.querySelector(".main-menu-bank")?.remove();const t=n(431);e.insertAdjacentHTML("beforeend",t.render({class:"forum",href:"/forum",text:"Forum"}))}(),function(){const e=document.querySelector("#carousel-inner");if(!e||document.querySelector(".carousel-ee"))return;const t=n(469),a=[V,...d.minigames||d.explorations||d.market?[X]:[],Q,K,z];e.insertAdjacentHTML("beforeend",a.map((e=>t.render(e))).join("\n"));for(const t of a){if(!t.href)continue;const n=e.querySelector(`#${t.id}`);n&&n.addEventListener("click",(()=>{n.classList.contains("active")&&open(t.href,"_blank")}))}document.getElementById(K.id)?.addEventListener("click",O),document.getElementById(Q.id)?.addEventListener("click",F);const i=document.getElementById(X.id);i?.addEventListener("click",(()=>{P(),p.takeover=!p.takeover,p.takeover?$.flavrNotif("Takeover mode enabled. Please do not interact with this tab."):$.flavrNotif("Takeover mode disabled."),B(),Y(i)})),i&&Y(i)}(),function(){const e=document.getElementById("home-content-smalls");if(!e||e.querySelector(".home-content-small-ee"))return;document.getElementById("home-bank")?.remove();const t=n(293);e.insertAdjacentHTML("beforeend",t.render({backgroundImage:"/assets/img/minigames/treasurehunt/a48bbc4e4849745ebe6dbcf5313eb3f0.jpg",h4:"Forum",href:"/forum",id:"forum"}))}(),U(),function(){const e=document.getElementById("profile-contact-actions");if(!e||document.querySelector(".profile-contact-action-ee"))return;const t=n(444),a={id:"profile-contact-action-export",actionDescription:"Export outfit"};e.insertAdjacentHTML("beforeend",t.render(a)),document.getElementById(a.id)?.addEventListener("click",ce)}(),le(),ae(),function(){if(Z?.disconnect(),Z=null,"/marketplace"!==location.pathname)return;const e=document.querySelector(".marketplace-search-items");e&&(Z=new MutationObserver(te),Z.observe(e,{childList:!0}),te())}(),de(),setTimeout((()=>{document.querySelector(".music-hidden-voice")?.click()}),e.second)}window.addEventListener("load",(()=>{document.querySelector(".music-hidden-voice")?.click()})),new MutationObserver((function(){he(),M()})).observe(document.getElementById("container"),{childList:!0}),he(),console.log("Eldarya Enhancements loaded."),M()})()})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL25vZGVfbW9kdWxlcy8ucG5wbS9ob2dhbi5qc0AzLjAuMi9ub2RlX21vZHVsZXMvaG9nYW4uanMvbGliL2NvbXBpbGVyLmpzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hvZ2FuLmpzQDMuMC4yL25vZGVfbW9kdWxlcy9ob2dhbi5qcy9saWIvaG9nYW4uanMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9ub2RlX21vZHVsZXMvLnBucG0vaG9nYW4uanNAMy4wLjIvbm9kZV9tb2R1bGVzL2hvZ2FuLmpzL2xpYi90ZW1wbGF0ZS5qcyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2ci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2F1dG9fZXhwbG9yZV9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9jYXJvdXNlbF9uZXdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvY2hhbmdlX3ByaWNlX2ZsYXZyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvZmF2b3JpdGVzX2FjdGlvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2hvbWVfY29udGVudF9zbWFsbC5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL21haW5fbWVudS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3Byb2ZpbGVfY29udGFjdF9hY3Rpb24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9zZXR0aW5ncy5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X2J1dHRvbi5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X3NldHRpbmdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvZHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL2JvZHlfbG9jYXRpb24uZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9jYXRlZ29yeS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL2d1YXJkLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvcmFyaXR5LmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvdHlwZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2UudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvY29uc29sZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsaWNrLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvYnV5X2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2J1eS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2FqYXhfc2VhcmNoLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvZGFpbHlfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvY2hhbmdlX3JlZ2lvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcGkvcmVzdWx0LmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvZXhwbG9yYXRpb25fc3RhdHVzLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9leHBsb3JhdGlvbl9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9leHBsb3JhdGlvbl9yZXN1bHRzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvY2FwdHVyZV9lbmQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWluaWdhbWVzL2ZsYXBweS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvaGF0Y2hsaW5ncy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvcGVnZ2xlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9lbWlsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9icmFpbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL21pbmlnYW1lX2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL3dhaXRfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL291dGZpdC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcHBlYXJhbmNlL2Zhdm9yaXRlc19hY3Rpb25zLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Rvd25sb2FkLWNhbnZhcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9hcHBlYXJhbmNlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2JlZW1vb3ZfYW5ub3lhbmNlcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9mYWNlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2d1YXJkaWFuLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2VsZGFyeWFfZW5oYW5jZW1lbnRzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX3Rha2VvdmVyLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2Nhcm91c2VsLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL21hcmtldC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9wZXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvcHJvZmlsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9zZXR0aW5ncy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS93aXNobGlzdC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYWluLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL21lbnUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvaG9tZV9jb250ZW50LnRzIl0sIm5hbWVzIjpbIkhvZ2FuIiwicklzV2hpdGVzcGFjZSIsInJRdW90Iiwick5ld2xpbmUiLCJyQ3IiLCJyU2xhc2giLCJyTGluZVNlcCIsInJQYXJhZ3JhcGhTZXAiLCJ0cmltIiwicyIsInJlcGxhY2UiLCJ0YWdDaGFuZ2UiLCJ0YWciLCJ0ZXh0IiwiaW5kZXgiLCJjaGFyQXQiLCJpIiwibCIsImxlbmd0aCIsInRhZ3MiLCJzY2FuIiwiZGVsaW1pdGVycyIsInRva2VuIiwibGVuIiwic3RhdGUiLCJ0YWdUeXBlIiwiYnVmIiwidG9rZW5zIiwic2VlblRhZyIsImxpbmVTdGFydCIsIm90YWciLCJjdGFnIiwiYWRkQnVmIiwicHVzaCIsIlN0cmluZyIsImZpbHRlckxpbmUiLCJoYXZlU2VlblRhZyIsIm5vTmV3TGluZSIsImlzQWxsV2hpdGVzcGFjZSIsImoiLCJtYXRjaCIsImxpbmVJc1doaXRlc3BhY2UiLCJuZXh0IiwiaW5kZW50IiwidG9TdHJpbmciLCJzcGxpY2UiLCJjaGFuZ2VEZWxpbWl0ZXJzIiwiY2xvc2UiLCJjbG9zZUluZGV4IiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInNwbGl0IiwibiIsInN1YnN0ciIsImFsbG93ZWRJblN1cGVyIiwiYnVpbGRUcmVlIiwia2luZCIsInN0YWNrIiwiY3VzdG9tVGFncyIsInRhaWwiLCJpbnN0cnVjdGlvbnMiLCJvcGVuZXIiLCJzaGlmdCIsIkVycm9yIiwiaXNPcGVuZXIiLCJub2RlcyIsInBvcCIsImlzQ2xvc2VyIiwiZW5kIiwibGFzdCIsIm8iLCJvcGVuIiwiYyIsInN0cmluZ2lmeVBhcnRpYWxzIiwiY29kZU9iaiIsInBhcnRpYWxzIiwia2V5IiwiZXNjIiwibmFtZSIsImpvaW4iLCJvYmoiLCJpdGVtcyIsInN0cmluZ2lmeVN1YnN0aXR1dGlvbnMiLCJzdWJzIiwic3RyaW5naWZ5Iiwib3B0aW9ucyIsIndyYXBNYWluIiwiY29kZSIsInNlcmlhbE5vIiwiY2hvb3NlTWV0aG9kIiwiY3JlYXRlUGFydGlhbCIsIm5vZGUiLCJjb250ZXh0Iiwic3ltIiwicHJlZml4IiwidHJpcGxlU3RhY2hlIiwid3JpdGUiLCJnZW5lcmF0ZSIsInRyZWUiLCJ3YWxrIiwiYXNTdHJpbmciLCJ0aGlzIiwibWFrZVRlbXBsYXRlIiwidGVtcGxhdGUiLCJUZW1wbGF0ZSIsIm1ha2VQYXJ0aWFscyIsIkZ1bmN0aW9uIiwiY29kZWdlbiIsImN0eCIsImluUGFydGlhbCIsIm5vZGVsaXN0IiwiZnVuYyIsInBhcnNlIiwic2VjdGlvblRhZ3MiLCJjYWNoZSIsImNhY2hlS2V5IiwiZGlzYWJsZUxhbWJkYSIsIm1vZGVsR2V0IiwiY29tcGlsZSIsImluc3RhbmNlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImZpbmRJblNjb3BlIiwic2NvcGUiLCJkb01vZGVsR2V0IiwidmFsIiwidW5kZWZpbmVkIiwiZ2V0IiwiY29tcGlsZXIiLCJyIiwicHJvdG90eXBlIiwidiIsInN0ciIsImNvZXJjZVRvU3RyaW5nIiwiaENoYXJzIiwidGVzdCIsInJBbXAiLCJyTHQiLCJyR3QiLCJyQXBvcyIsInQiLCJyZW5kZXIiLCJyaSIsImVwIiwic3ltYm9sIiwicGFydGlhbCIsImJhc2UiLCJzdGFja1RleHQiLCJhY3RpdmVTdWIiLCJzdGFja1N1YnMiLCJzdGFja1BhcnRpYWxzIiwiUGFydGlhbFRlbXBsYXRlIiwiU3Vic3RpdHV0aW9ucyIsInN1YnNUZXh0IiwiY3JlYXRlU3BlY2lhbGl6ZWRQYXJ0aWFsIiwicnAiLCJycyIsInNlY3Rpb24iLCJpc0FycmF5IiwiaW52ZXJ0ZWQiLCJzdGFydCIsInBhc3MiLCJtcyIsImQiLCJyZXR1cm5Gb3VuZCIsImZvdW5kIiwibmFtZXMiLCJmIiwiY3giLCJtdiIsImxzIiwib2xkVGFncyIsImIiLCJjdCIsImNhbGwiLCJmbCIsInRleHRTb3VyY2UiLCJyZXN1bHQiLCJzdWIiLCJBcnJheSIsImEiLCJPYmplY3QiLCJIIiwicCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJEdXJhdGlvblVuaXQiLCJMb2NhbFN0b3JhZ2VLZXkiLCJTZXNzaW9uU3RvcmFnZUtleSIsIkJvZHlMb2NhdGlvbiIsIkNhdGVnb3J5U3RyaW5nIiwiQ2F0ZWdvcnlOdW1iZXIiLCJHdWFyZCIsIlJhcml0eSIsIlR5cGUiLCJUYWtlb3ZlckFjdGlvbiIsIkxvY2FsU3RvcmFnZSIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJhdXRvRXhwbG9yZUxvY2F0aW9ucyIsImxvY2F0aW9ucyIsInNldEl0ZW0iLCJkZWJ1ZyIsImVuYWJsZWQiLCJleHBsb3JhdGlvbnMiLCJtYXJrZXQiLCJtaW5pZ2FtZXMiLCJ3aXNobGlzdCIsInNldHRpbmdzIiwiZmFsbGJhY2siLCJKU09OIiwidmFsdWUiLCJDb25zb2xlIiwiY29uc29sZSIsIm1lc3NhZ2UiLCJvcHRpb25hbFBhcmFtcyIsImRlYnVnZ2luZyIsImVycm9yIiwiaW5mbyIsImxvZyIsIndhcm4iLCJTZXNzaW9uU3RvcmFnZSIsInNlc3Npb25TdG9yYWdlIiwiYWN0aW9uIiwiZXhwbG9yYXRpb25zRG9uZSIsImRvbmUiLCJtZXRhIiwibWluaWdhbWVzRG9uZSIsInNlbGVjdGVkTG9jYXRpb24iLCJzZWxlY3RlZCIsInRha2VvdmVyIiwiZ2V0SXRlbURldGFpbHMiLCJsaSIsInF1ZXJ5U2VsZWN0b3IiLCJpbm5lclRleHQiLCJzcmMiLCJjdXJyZW50UHJpY2UiLCJkYXRhc2V0IiwiYnV5Tm93UHJpY2UiLCJpY29uIiwiYXN5bmMiLCJjbGljayIsInNlbGVjdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiZWxlbWVudCIsImRvY3VtZW50IiwiY2xlYXJJbnRlcnZhbCIsIm1vdXNlRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImRpc3BhdGNoRXZlbnQiLCJzZXRUaW1lb3V0IiwiQWN0aW9uIiwiYnV5IiwiTnVtYmVyIiwibWFhbmEiLCJjb25kaXRpb24iLCJCb29sZWFuIiwibG9jYXRpb24iLCJwYXRobmFtZSIsInN0YXJ0c1dpdGgiLCJ3aXNoZWQiLCJhbW91bnQiLCJmb3JwYWdlIiwicGFnZSIsInJlc3VsdHMiLCJzZWFyY2giLCJ3YW50ZWQiLCJmaWx0ZXIiLCJwcmljZSIsImN1cnJlbnRNYWFuYSIsIiQiLCJmbGF2ck5vdGlmIiwianNvbiIsIml0ZW1JZCIsInBvc3QiLCJpZCIsImRhdGEiLCJpdGVtaWQiLCJzZXRFcnJvciIsIndlYXJhYmxlaXRlbWlkIiwiZmlsdGVySXRlbU5hbWUiLCJtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zIiwiaW5uZXJIVE1MIiwidHlwZSIsIkFsbCIsImJvZHlMb2NhdGlvbiIsImNhdGVnb3J5IiwiYWxsIiwicmFyaXR5IiwiZ3VhcmQiLCJhbnkiLCJmcm9tIiwidG8iLCJhamF4U2VhcmNoIiwicXVlcnlTZWxlY3RvckFsbCIsIm1hcCIsIml0ZW0iLCJmaW5kSW5kZXgiLCJlbnRyeSIsInNsaWNlIiwiZGFpbHkiLCJkYWlseUdpZnRDb250YWluZXIiLCJnZXRFbGVtZW50QnlJZCIsImdldENvbXB1dGVkU3R5bGUiLCJkaXNwbGF5IiwicmVzZXRUYWtlb3ZlciIsImNoYW5nZVJlZ2lvbiIsIm5ld1JlZ2lvbklkIiwiY3VycmVudFJlZ2lvbiIsInBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiIsInRpbWVMZWZ0RXhwbG9yYXRpb24iLCJSZXN1bHQiLCJFeHBsb3JhdGlvblN0YXR1cyIsImdldEV4cGxvcmF0aW9uU3RhdHVzIiwiaWRsZSIsInN0YXJ0RXhwbG9yYXRpb24iLCJwZW5kaW5nIiwid2FpdEV4cGxvcmF0aW9uIiwicGVyZm9ybSIsImVuZEV4cGxvcmF0aW9uIiwiY2FwdHVyZSIsImVuZENhcHR1cmUiLCJjbGlja1JlZ2lvbiIsImRpdiIsInJlZ2lvbiIsInNhdmVkIiwicmVsb2FkIiwiQXVkaW8iLCJwbGF5IiwiZSIsImdldEN1cnJlbnRTZWFzb24iLCJjbGFzc0xpc3QiLCJmaW5kIiwiZ2V0TG93ZXN0RW5lcmd5TG9jYXRpb24iLCJyZWR1Y2UiLCJsb3dlc3QiLCJwbGFjZSIsImVuZXJneVJlcXVpcmVkIiwiZ2V0U2VsZWN0ZWRMb2NhdGlvbiIsInNlbGVjdExvY2F0aW9uIiwiYWZmb3JkYWJsZSIsInBldEVuZXJneSIsIm1pbmltdW1FbmVyZ3kiLCJub3REZWFkRW5kIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwic2FtZUVuZXJneSIsInNlYXNvbiIsImNsaWNrU2Vhc29uIiwiZXhwbG9yaW5nIiwiY2xpY2tMb2NhdGlvbiIsImNsaWNrRXhwbG9yZSIsInNlY29uZCIsInRpbWVUb0V4cGxvcmUiLCJtaW51dGUiLCJleHBsb3JhdGlvblJlc3VsdHMiLCJzdWNjZXNzIiwiY2FwdHVyZUVuZCIsImdsb2JhbHMiLCJjZWlsIiwiZmxhcHB5Iiwic2NvcmVNaW4iLCJzY29yZU1heCIsImRlbGF5TWluIiwiZGVsYXlNYXgiLCJidXR0b25TZWxlY3RvciIsImhhdGNobGluZ3MiLCJwZWdnbGUiLCJtaW5pZ2FtZSIsImJ1dHRvbnMiLCJidXR0b24iLCJhZGQiLCJyZWplY3QiLCJSZWNhcHRjaGEiLCJleGVjdXRlIiwic3RhcnRHYW1lIiwidGhlbiIsImNhdGNoIiwiZ2FtZVRva2VuIiwic2NvcmUiLCJyYW5kb21JbnQiLCJlbmNfdG9rZW4iLCJ4b3IiLCJ0bXAiLCJmcm9tQ2hhckNvZGUiLCJjaGFyQ29kZUF0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwieG9yRW5jb2RlIiwiZ2V0UHJpemVzIiwiZ2FtZSIsInJlY2FwdGNoYVRva2VuIiwic2F2ZVNjb3JlIiwic2VuZCIsInRvTG93ZXJDYXNlIiwibWluIiwibWF4IiwiYWpheCIsInVybCIsImRhdGFUeXBlIiwiZmFpbCIsImRlY29kZVVSSUNvbXBvbmVudCIsImxvYWRUYWtlb3ZlciIsImFjdGlvbnMiLCJjaGFuZ2VBY3Rpb24iLCJwbGF5aW5nIiwib3Blbk1pbmlnYW1lIiwicGxheVBlZ2dsZSIsInBsYXlGbGFwcHkiLCJwbGF5SGF0Y2hsaW5ncyIsIndhaXQiLCJleHBvcnRPdXRmaXQiLCJhdmF0YXIiLCJTYWNoYSIsIkF2YXRhciIsImF2YXRhcnMiLCJvdXRmaXQiLCJjaGlsZHJlbiIsImNoaWxkIiwiX2lkIiwiZ3JvdXAiLCJfZ3JvdXAiLCJfbmFtZSIsImltYWdlIiwiX2ltYWdlIiwiX3R5cGUiLCJjYXRlZ29yeUlkIiwiX2NhdGVnb3J5SWQiLCJoaWRkZW5DYXRlZ29yaWVzIiwidmFsdWVzIiwiX2hpZGRlbkNhdGVnb3JpZXMiLCJhbmltYXRpb25EYXRhIiwiX2FuaW1hdGlvbkRhdGEiLCJsb2NrZWQiLCJfbG9ja2VkIiwiZ2V0SXRlbXNUb1NhdmUiLCJocmVmIiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImV4cG9ydFByZXZpZXciLCJpbXBvcnRPdXRmaXQiLCJpbnB1dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsInRhcmdldCIsImZpbGVzIiwiZmlsZSIsImNhdGVnb3JpZXMiLCJTZXQiLCJjbG90aGluZyIsImNhdGVnb3J5Q29udGFpbmVyIiwiaGFzQ2xhc3MiLCJ2aWV3IiwiaGlkZSIsImFwcGVuZFRvIiwiYWx3YXlzIiwib3BlbkNhdGVnb3J5IiwiZ3JvdXBzIiwib3Blbkdyb3VwIiwid29ybkl0ZW1zIiwiYXZhaWxhYmxlSXRlbXMiLCJpdGVtUmVuZGVyIiwicmVtb3ZlSXRlbUZyb21BbGxBdmF0YXJzIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmVDbG90aGVzIiwiYWRkSXRlbXMiLCJpbml0aWFsaXplU2VsZWN0ZWRJdGVtcyIsImluaXRpYWxpemVIaWRkZW5DYXRlZ29yaWVzIiwiZG93bmxvYWRDYW52YXMiLCJjYW52YXMiLCJ0b0RhdGFVUkwiLCJzdHlsZSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiZG93bmxvYWRGYWNlIiwiZG93bmxvYWRHdWFyZGlhbiIsImdldE5hbWUiLCJkb3dubG9hZEFwcGVhcmFuY2UiLCJ0ZXh0Q29udGVudCIsIm9ic2VydmVyIiwibG9hZEFwcGVhcmFuY2UiLCJkaXNjb25uZWN0IiwiYXBwZWFyYW5jZUl0ZW1zIiwiTXV0YXRpb25PYnNlcnZlciIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJhY3Rpb25UZW1wbGF0ZSIsImltcG9ydEFjdGlvbiIsImV4cG9ydEFjdGlvbiIsImRvd25sb2FkQWN0aW9uIiwiaW5zZXJ0QWRqYWNlbnRIVE1MIiwibG9hZEZhdm9yaXRlc0FjdGlvbnMiLCJjYXJvdXNlbEJlZW1vb3ZBbm5veWFuY2VzIiwiYmFja2dyb3VuZEltYWdlIiwiaDQiLCJjYXJvdXNlbERvd25sb2FkRmFjZSIsImNhcm91c2VsRG93bmxvYWRHdWFyZGlhbiIsImNhcm91c2VsRUUiLCJjYXJvdXNlbFRha2VvdmVyIiwidGFrZW92ZXJUaXRsZSIsInRha2VvdmVyQW5jaG9yIiwidGFrZW92ZXJINCIsIm1hcmtldE9ic2VydmVyIiwicGV0T2JzZXJ2ZXIiLCJsb2FkV2lzaGxpc3QiLCJfIiwibWFya2V0RW50cnkiLCJhZGRXaXNoaXN0QnV0dG9uIiwiYnV0dG9uc0NvbnRhaW5lciIsInJlbW92ZSIsImJ1dHRvblRlbXBsYXRlIiwiZmxhdnIiLCJjb250ZW50Iiwic2F2ZSIsIndpc2hsaXN0RW50cnkiLCJkaWFsb2ciLCJwcm9tcHQiLCJvbkJ1aWxkIiwiJGNvbnRhaW5lciIsImFkZENsYXNzIiwiYWRkVG9XaXNobGlzdEZsYXZyIiwibG9hZFBldCIsIm1haW5Db250YWluZXIiLCJhdHRyaWJ1dGVzIiwibG9jYXRpb25JZCIsImdldEF0dHJpYnV0ZSIsImxvYWRQaWN0b01hcCIsImFkZEF1dG9FeHBsb3JlQnV0dG9uIiwibG9hZEV4cGxvcmF0aW9ucyIsImFjdGl2ZSIsInNvbWUiLCJyZWdpb25JZCIsImF1dG9FeHBsb3JlVGVtcGxhdGUiLCJmaWx0ZXJlZExvY2F0aW9ucyIsIm5ld0F1dG9FeHBsb3JlIiwiZ2V0QXV0b0V4cGxvcmVFbnRyeSIsIm5ld0xvY2F0aW9ucyIsImF1dG9FeHBsb3JlIiwibG9hZFBpY3RvTWFwcyIsImRpc2FibGVFeHBsb3JlIiwiZ2V0UmVnaW9uIiwibWFwTG9jYXRpb24iLCJleHBvcnRQcm9maWxlIiwidGl0bGUiLCJrZXlzIiwibG9hZFNldHRpbmdzIiwiYWNjb3VudFJpZ2h0Iiwic2V0dGluZ3NUZW1wbGF0ZSIsInJlbG9hZFNldHRpbmdzIiwibWFya2V0cGxhY2VNZW51IiwicGFnZUxvYWQiLCJ3aXNobGlzdEJ1dHRvblRlbXBsYXRlIiwid2lzaGxpc3RCdXR0b24iLCJpbnNlcnRXaXNobGlzdCIsImFzc2lzdGFuY2UiLCJmaWx0ZXJzIiwid2lzaGxpc3RUZW1wbGF0ZSIsImNvbnRhaW5lciIsIndpc2hsaXN0Q29udGV4dCIsInRyIiwicmVzZXQiLCJyZXNldFN0YXR1cyIsImRlbGV0ZUJ1dHRvbiIsImRlbGV0ZUl0ZW0iLCJlZGl0UHJpY2UiLCJjaGFuZ2VQcmljZSIsImxvYWRVSSIsIm1lbnVJbm5lclJpZ2h0IiwibWVudVRlbXBsYXRlIiwiY2xhc3MiLCJsb2FkTWVudSIsImNhcm91c2VsSW5uZXIiLCJjb250ZXh0cyIsImJhbm5lciIsImNhcm91c2VsIiwiY29udGFpbnMiLCJsb2FkQ2Fyb3VzZWwiLCJob21lQ29udGVudFNtYWxscyIsInNtYWxsVGVtcGxhdGUiLCJsb2FkSG9tZUNvbnRlbnQiLCJwcm9maWxlQ29udGFjdEFjdGlvbnMiLCJwcm9maWxlQWN0aW9uRXhwb3J0IiwiYWN0aW9uRGVzY3JpcHRpb24iLCJsb2FkUHJvZmlsZSIsInNlYXJjaEl0ZW1zIiwibG9hZE1hcmtldCIsIndpbmRvdyJdLCJtYXBwaW5ncyI6IjBCQWVBLFNBQVdBLEdBR1QsSUFBSUMsRUFBZ0IsS0FDaEJDLEVBQVEsTUFDUkMsRUFBWSxNQUNaQyxFQUFNLE1BQ05DLEVBQVMsTUFDVEMsRUFBVyxTQUNYQyxFQUFnQixTQStJcEIsU0FBU0MsRUFBS0MsR0FDWixPQUFJQSxFQUFFRCxLQUNHQyxFQUFFRCxPQUdKQyxFQUFFQyxRQUFRLGFBQWMsSUFHakMsU0FBU0MsRUFBVUMsRUFBS0MsRUFBTUMsR0FDNUIsR0FBSUQsRUFBS0UsT0FBT0QsSUFBVUYs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Q0wsTUFBTW9HLEVBQXdCalYsU0FBUzBELGVBQ3JDLDJCQUVGLElBQ0d1UixHQUNEalYsU0FBU2YsY0FBYyw4QkFFdkIsT0FHRixNQUFNckksRUFBcUIsRUFBUSxLQUM3QnNlLEVBQTRDLENBQ2hEblQsR0FBSSxnQ0FDSm9ULGtCQUFtQixpQkFJckJGLEVBQXNCMUYsbUJBQ3BCLFlBQ0EzWSxFQUFTc0MsT0FBT2djLElBSWxCbFYsU0FDRzBELGVBQWV3UixFQUFvQm5ULEtBQ2xDdUssaUJBQWlCLFFBQVNxRyxJR045QnlDLEdBQ0F0QyxLQUNBeEIsS0xuQkssV0FJTCxHQUhBbkIsR0FBZ0JyQixhQUNoQnFCLEVBQWlCLEtBRVMsaUJBQXRCdFAsU0FBU0MsU0FBNkIsT0FJMUMsTUFBTXVVLEVBQWNyVixTQUFTZixjQUMzQiw2QkFFR29XLElBRUxsRixFQUFpQixJQUFJbkIsaUJBQWlCcUIsSUFDdENGLEVBQWVsQixRQUFRb0csRUFBYSxDQUNsQ25HLFdBQVcsSUFHYm1CLE1LRUFpRixHQUNBLEtBRUFoVixZQUFXLEtBQ1ROLFNBQVNmLGNBQWdDLHdCQUF3QlEsVUFDaEV2RCxFQUFhMkssUUFHbEIwTyxPQUFPakosaUJBQWlCLFFBQVEsS0FDOUJ0TSxTQUFTZixjQUFnQyx3QkFBd0JRLFdBR25FLElBQUl1UCxrQkF6QkosV0FDRW1GLEtBQ0FySyxPQXVCeUJtRixRQUFjalAsU0FBUzBELGVBQWUsYUFBYyxDQUM3RXdMLFdBQVcsSUFHYmlGLEtBQ0F0VyxRQUFRTSxJQUFJLGdDQUNaMkwsSyIsImZpbGUiOiJlbGRhcnlhLWVuaGFuY2VtZW50cy51c2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqICBDb3B5cmlnaHQgMjAxMSBUd2l0dGVyLCBJbmMuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4oZnVuY3Rpb24gKEhvZ2FuKSB7XG4gIC8vIFNldHVwIHJlZ2V4ICBhc3NpZ25tZW50c1xuICAvLyByZW1vdmUgd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gTXVzdGFjaGUgc3BlY1xuICB2YXIgcklzV2hpdGVzcGFjZSA9IC9cXFMvLFxuICAgICAgclF1b3QgPSAvXFxcIi9nLFxuICAgICAgck5ld2xpbmUgPSAgL1xcbi9nLFxuICAgICAgckNyID0gL1xcci9nLFxuICAgICAgclNsYXNoID0gL1xcXFwvZyxcbiAgICAgIHJMaW5lU2VwID0gL1xcdTIwMjgvLFxuICAgICAgclBhcmFncmFwaFNlcCA9IC9cXHUyMDI5LztcblxuICBIb2dhbi50YWdzID0ge1xuICAgICcjJzogMSwgJ14nOiAyLCAnPCc6IDMsICckJzogNCxcbiAgICAnLyc6IDUsICchJzogNiwgJz4nOiA3LCAnPSc6IDgsICdfdic6IDksXG4gICAgJ3snOiAxMCwgJyYnOiAxMSwgJ190JzogMTJcbiAgfTtcblxuICBIb2dhbi5zY2FuID0gZnVuY3Rpb24gc2Nhbih0ZXh0LCBkZWxpbWl0ZXJzKSB7XG4gICAgdmFyIGxlbiA9IHRleHQubGVuZ3RoLFxuICAgICAgICBJTl9URVhUID0gMCxcbiAgICAgICAgSU5fVEFHX1RZUEUgPSAxLFxuICAgICAgICBJTl9UQUcgPSAyLFxuICAgICAgICBzdGF0ZSA9IElOX1RFWFQsXG4gICAgICAgIHRhZ1R5cGUgPSBudWxsLFxuICAgICAgICB0YWcgPSBudWxsLFxuICAgICAgICBidWYgPSAnJyxcbiAgICAgICAgdG9rZW5zID0gW10sXG4gICAgICAgIHNlZW5UYWcgPSBmYWxzZSxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIGxpbmVTdGFydCA9IDAsXG4gICAgICAgIG90YWcgPSAne3snLFxuICAgICAgICBjdGFnID0gJ319JztcblxuICAgIGZ1bmN0aW9uIGFkZEJ1ZigpIHtcbiAgICAgIGlmIChidWYubGVuZ3RoID4gMCkge1xuICAgICAgICB0b2tlbnMucHVzaCh7dGFnOiAnX3QnLCB0ZXh0OiBuZXcgU3RyaW5nKGJ1Zil9KTtcbiAgICAgICAgYnVmID0gJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZUlzV2hpdGVzcGFjZSgpIHtcbiAgICAgIHZhciBpc0FsbFdoaXRlc3BhY2UgPSB0cnVlO1xuICAgICAgZm9yICh2YXIgaiA9IGxpbmVTdGFydDsgaiA8IHRva2Vucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpc0FsbFdoaXRlc3BhY2UgPVxuICAgICAgICAgIChIb2dhbi50YWdzW3Rva2Vuc1tqXS50YWddIDwgSG9nYW4udGFnc1snX3YnXSkgfHxcbiAgICAgICAgICAodG9rZW5zW2pdLnRhZyA9PSAnX3QnICYmIHRva2Vuc1tqXS50ZXh0Lm1hdGNoKHJJc1doaXRlc3BhY2UpID09PSBudWxsKTtcbiAgICAgICAgaWYgKCFpc0FsbFdoaXRlc3BhY2UpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlzQWxsV2hpdGVzcGFjZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJMaW5lKGhhdmVTZWVuVGFnLCBub05ld0xpbmUpIHtcbiAgICAgIGFkZEJ1ZigpO1xuXG4gICAgICBpZiAoaGF2ZVNlZW5UYWcgJiYgbGluZUlzV2hpdGVzcGFjZSgpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBsaW5lU3RhcnQsIG5leHQ7IGogPCB0b2tlbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBpZiAodG9rZW5zW2pdLnRleHQpIHtcbiAgICAgICAgICAgIGlmICgobmV4dCA9IHRva2Vuc1tqKzFdKSAmJiBuZXh0LnRhZyA9PSAnPicpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IGluZGVudCB0byB0b2tlbiB2YWx1ZVxuICAgICAgICAgICAgICBuZXh0LmluZGVudCA9IHRva2Vuc1tqXS50ZXh0LnRvU3RyaW5nKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoaiwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFub05ld0xpbmUpIHtcbiAgICAgICAgdG9rZW5zLnB1c2goe3RhZzonXFxuJ30pO1xuICAgICAgfVxuXG4gICAgICBzZWVuVGFnID0gZmFsc2U7XG4gICAgICBsaW5lU3RhcnQgPSB0b2tlbnMubGVuZ3RoO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoYW5nZURlbGltaXRlcnModGV4dCwgaW5kZXgpIHtcbiAgICAgIHZhciBjbG9zZSA9ICc9JyArIGN0YWcsXG4gICAgICAgICAgY2xvc2VJbmRleCA9IHRleHQuaW5kZXhPZihjbG9zZSwgaW5kZXgpLFxuICAgICAgICAgIGRlbGltaXRlcnMgPSB0cmltKFxuICAgICAgICAgICAgdGV4dC5zdWJzdHJpbmcodGV4dC5pbmRleE9mKCc9JywgaW5kZXgpICsgMSwgY2xvc2VJbmRleClcbiAgICAgICAgICApLnNwbGl0KCcgJyk7XG5cbiAgICAgIG90YWcgPSBkZWxpbWl0ZXJzWzBdO1xuICAgICAgY3RhZyA9IGRlbGltaXRlcnNbZGVsaW1pdGVycy5sZW5ndGggLSAxXTtcblxuICAgICAgcmV0dXJuIGNsb3NlSW5kZXggKyBjbG9zZS5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIGlmIChkZWxpbWl0ZXJzKSB7XG4gICAgICBkZWxpbWl0ZXJzID0gZGVsaW1pdGVycy5zcGxpdCgnICcpO1xuICAgICAgb3RhZyA9IGRlbGltaXRlcnNbMF07XG4gICAgICBjdGFnID0gZGVsaW1pdGVyc1sxXTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChzdGF0ZSA9PSBJTl9URVhUKSB7XG4gICAgICAgIGlmICh0YWdDaGFuZ2Uob3RhZywgdGV4dCwgaSkpIHtcbiAgICAgICAgICAtLWk7XG4gICAgICAgICAgYWRkQnVmKCk7XG4gICAgICAgICAgc3RhdGUgPSBJTl9UQUdfVFlQRTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGV4dC5jaGFyQXQoaSkgPT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGZpbHRlckxpbmUoc2VlblRhZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZiArPSB0ZXh0LmNoYXJBdChpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gSU5fVEFHX1RZUEUpIHtcbiAgICAgICAgaSArPSBvdGFnLmxlbmd0aCAtIDE7XG4gICAgICAgIHRhZyA9IEhvZ2FuLnRhZ3NbdGV4dC5jaGFyQXQoaSArIDEpXTtcbiAgICAgICAgdGFnVHlwZSA9IHRhZyA/IHRleHQuY2hhckF0KGkgKyAxKSA6ICdfdic7XG4gICAgICAgIGlmICh0YWdUeXBlID09ICc9Jykge1xuICAgICAgICAgIGkgPSBjaGFuZ2VEZWxpbWl0ZXJzKHRleHQsIGkpO1xuICAgICAgICAgIHN0YXRlID0gSU5fVEVYVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGFnKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlID0gSU5fVEFHO1xuICAgICAgICB9XG4gICAgICAgIHNlZW5UYWcgPSBpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRhZ0NoYW5nZShjdGFnLCB0ZXh0LCBpKSkge1xuICAgICAgICAgIHRva2Vucy5wdXNoKHt0YWc6IHRhZ1R5cGUsIG46IHRyaW0oYnVmKSwgb3RhZzogb3RhZywgY3RhZzogY3RhZyxcbiAgICAgICAgICAgICAgICAgICAgICAgaTogKHRhZ1R5cGUgPT0gJy8nKSA/IHNlZW5UYWcgLSBvdGFnLmxlbmd0aCA6IGkgKyBjdGFnLmxlbmd0aH0pO1xuICAgICAgICAgIGJ1ZiA9ICcnO1xuICAgICAgICAgIGkgKz0gY3RhZy5sZW5ndGggLSAxO1xuICAgICAgICAgIHN0YXRlID0gSU5fVEVYVDtcbiAgICAgICAgICBpZiAodGFnVHlwZSA9PSAneycpIHtcbiAgICAgICAgICAgIGlmIChjdGFnID09ICd9fScpIHtcbiAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2xlYW5UcmlwbGVTdGFjaGUodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZiArPSB0ZXh0LmNoYXJBdChpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZpbHRlckxpbmUoc2VlblRhZywgdHJ1ZSk7XG5cbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW5UcmlwbGVTdGFjaGUodG9rZW4pIHtcbiAgICBpZiAodG9rZW4ubi5zdWJzdHIodG9rZW4ubi5sZW5ndGggLSAxKSA9PT0gJ30nKSB7XG4gICAgICB0b2tlbi5uID0gdG9rZW4ubi5zdWJzdHJpbmcoMCwgdG9rZW4ubi5sZW5ndGggLSAxKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cmltKHMpIHtcbiAgICBpZiAocy50cmltKSB7XG4gICAgICByZXR1cm4gcy50cmltKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvXlxccyp8XFxzKiQvZywgJycpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGFnQ2hhbmdlKHRhZywgdGV4dCwgaW5kZXgpIHtcbiAgICBpZiAodGV4dC5jaGFyQXQoaW5kZXgpICE9IHRhZy5jaGFyQXQoMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMSwgbCA9IHRhZy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh0ZXh0LmNoYXJBdChpbmRleCArIGkpICE9IHRhZy5jaGFyQXQoaSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gdGhlIHRhZ3MgYWxsb3dlZCBpbnNpZGUgc3VwZXIgdGVtcGxhdGVzXG4gIHZhciBhbGxvd2VkSW5TdXBlciA9IHsnX3QnOiB0cnVlLCAnXFxuJzogdHJ1ZSwgJyQnOiB0cnVlLCAnLyc6IHRydWV9O1xuXG4gIGZ1bmN0aW9uIGJ1aWxkVHJlZSh0b2tlbnMsIGtpbmQsIHN0YWNrLCBjdXN0b21UYWdzKSB7XG4gICAgdmFyIGluc3RydWN0aW9ucyA9IFtdLFxuICAgICAgICBvcGVuZXIgPSBudWxsLFxuICAgICAgICB0YWlsID0gbnVsbCxcbiAgICAgICAgdG9rZW4gPSBudWxsO1xuXG4gICAgdGFpbCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgd2hpbGUgKHRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgICB0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXG4gICAgICBpZiAodGFpbCAmJiB0YWlsLnRhZyA9PSAnPCcgJiYgISh0b2tlbi50YWcgaW4gYWxsb3dlZEluU3VwZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBjb250ZW50IGluIDwgc3VwZXIgdGFnLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoSG9nYW4udGFnc1t0b2tlbi50YWddIDw9IEhvZ2FuLnRhZ3NbJyQnXSB8fCBpc09wZW5lcih0b2tlbiwgY3VzdG9tVGFncykpIHtcbiAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7XG4gICAgICAgIHRva2VuLm5vZGVzID0gYnVpbGRUcmVlKHRva2VucywgdG9rZW4udGFnLCBzdGFjaywgY3VzdG9tVGFncyk7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLnRhZyA9PSAnLycpIHtcbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2xvc2luZyB0YWcgd2l0aG91dCBvcGVuZXI6IC8nICsgdG9rZW4ubik7XG4gICAgICAgIH1cbiAgICAgICAgb3BlbmVyID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGlmICh0b2tlbi5uICE9IG9wZW5lci5uICYmICFpc0Nsb3Nlcih0b2tlbi5uLCBvcGVuZXIubiwgY3VzdG9tVGFncykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05lc3RpbmcgZXJyb3I6ICcgKyBvcGVuZXIubiArICcgdnMuICcgKyB0b2tlbi5uKTtcbiAgICAgICAgfVxuICAgICAgICBvcGVuZXIuZW5kID0gdG9rZW4uaTtcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udGFnID09ICdcXG4nKSB7XG4gICAgICAgIHRva2VuLmxhc3QgPSAodG9rZW5zLmxlbmd0aCA9PSAwKSB8fCAodG9rZW5zWzBdLnRhZyA9PSAnXFxuJyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RydWN0aW9ucy5wdXNoKHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNsb3NpbmcgdGFnOiAnICsgc3RhY2sucG9wKCkubik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RydWN0aW9ucztcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzT3BlbmVyKHRva2VuLCB0YWdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHRhZ3NbaV0ubyA9PSB0b2tlbi5uKSB7XG4gICAgICAgIHRva2VuLnRhZyA9ICcjJztcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNDbG9zZXIoY2xvc2UsIG9wZW4sIHRhZ3MpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAodGFnc1tpXS5jID09IGNsb3NlICYmIHRhZ3NbaV0ubyA9PSBvcGVuKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ2lmeVN1YnN0aXR1dGlvbnMob2JqKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaXRlbXMucHVzaCgnXCInICsgZXNjKGtleSkgKyAnXCI6IGZ1bmN0aW9uKGMscCx0LGkpIHsnICsgb2JqW2tleV0gKyAnfScpO1xuICAgIH1cbiAgICByZXR1cm4gXCJ7IFwiICsgaXRlbXMuam9pbihcIixcIikgKyBcIiB9XCI7XG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdpZnlQYXJ0aWFscyhjb2RlT2JqKSB7XG4gICAgdmFyIHBhcnRpYWxzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIGNvZGVPYmoucGFydGlhbHMpIHtcbiAgICAgIHBhcnRpYWxzLnB1c2goJ1wiJyArIGVzYyhrZXkpICsgJ1wiOntuYW1lOlwiJyArIGVzYyhjb2RlT2JqLnBhcnRpYWxzW2tleV0ubmFtZSkgKyAnXCIsICcgKyBzdHJpbmdpZnlQYXJ0aWFscyhjb2RlT2JqLnBhcnRpYWxzW2tleV0pICsgXCJ9XCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJwYXJ0aWFsczoge1wiICsgcGFydGlhbHMuam9pbihcIixcIikgKyBcIn0sIHN1YnM6IFwiICsgc3RyaW5naWZ5U3Vic3RpdHV0aW9ucyhjb2RlT2JqLnN1YnMpO1xuICB9XG5cbiAgSG9nYW4uc3RyaW5naWZ5ID0gZnVuY3Rpb24oY29kZU9iaiwgdGV4dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBcIntjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgXCIgKyBIb2dhbi53cmFwTWFpbihjb2RlT2JqLmNvZGUpICsgXCIgfSxcIiArIHN0cmluZ2lmeVBhcnRpYWxzKGNvZGVPYmopICsgIFwifVwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbE5vID0gMDtcbiAgSG9nYW4uZ2VuZXJhdGUgPSBmdW5jdGlvbih0cmVlLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgc2VyaWFsTm8gPSAwO1xuICAgIHZhciBjb250ZXh0ID0geyBjb2RlOiAnJywgc3Viczoge30sIHBhcnRpYWxzOiB7fSB9O1xuICAgIEhvZ2FuLndhbGsodHJlZSwgY29udGV4dCk7XG5cbiAgICBpZiAob3B0aW9ucy5hc1N0cmluZykge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5KGNvbnRleHQsIHRleHQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1ha2VUZW1wbGF0ZShjb250ZXh0LCB0ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIEhvZ2FuLndyYXBNYWluID0gZnVuY3Rpb24oY29kZSkge1xuICAgIHJldHVybiAndmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTsnICsgY29kZSArICdyZXR1cm4gdC5mbCgpOyc7XG4gIH1cblxuICBIb2dhbi50ZW1wbGF0ZSA9IEhvZ2FuLlRlbXBsYXRlO1xuXG4gIEhvZ2FuLm1ha2VUZW1wbGF0ZSA9IGZ1bmN0aW9uKGNvZGVPYmosIHRleHQsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLm1ha2VQYXJ0aWFscyhjb2RlT2JqKTtcbiAgICB0ZW1wbGF0ZS5jb2RlID0gbmV3IEZ1bmN0aW9uKCdjJywgJ3AnLCAnaScsIHRoaXMud3JhcE1haW4oY29kZU9iai5jb2RlKSk7XG4gICAgcmV0dXJuIG5ldyB0aGlzLnRlbXBsYXRlKHRlbXBsYXRlLCB0ZXh0LCB0aGlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIEhvZ2FuLm1ha2VQYXJ0aWFscyA9IGZ1bmN0aW9uKGNvZGVPYmopIHtcbiAgICB2YXIga2V5LCB0ZW1wbGF0ZSA9IHtzdWJzOiB7fSwgcGFydGlhbHM6IGNvZGVPYmoucGFydGlhbHMsIG5hbWU6IGNvZGVPYmoubmFtZX07XG4gICAgZm9yIChrZXkgaW4gdGVtcGxhdGUucGFydGlhbHMpIHtcbiAgICAgIHRlbXBsYXRlLnBhcnRpYWxzW2tleV0gPSB0aGlzLm1ha2VQYXJ0aWFscyh0ZW1wbGF0ZS5wYXJ0aWFsc1trZXldKTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gY29kZU9iai5zdWJzKSB7XG4gICAgICB0ZW1wbGF0ZS5zdWJzW2tleV0gPSBuZXcgRnVuY3Rpb24oJ2MnLCAncCcsICd0JywgJ2knLCBjb2RlT2JqLnN1YnNba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzYyhzKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZShyU2xhc2gsICdcXFxcXFxcXCcpXG4gICAgICAgICAgICAucmVwbGFjZShyUXVvdCwgJ1xcXFxcXFwiJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJOZXdsaW5lLCAnXFxcXG4nKVxuICAgICAgICAgICAgLnJlcGxhY2UockNyLCAnXFxcXHInKVxuICAgICAgICAgICAgLnJlcGxhY2UockxpbmVTZXAsICdcXFxcdTIwMjgnKVxuICAgICAgICAgICAgLnJlcGxhY2UoclBhcmFncmFwaFNlcCwgJ1xcXFx1MjAyOScpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hvb3NlTWV0aG9kKHMpIHtcbiAgICByZXR1cm4gKH5zLmluZGV4T2YoJy4nKSkgPyAnZCcgOiAnZic7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKG5vZGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcHJlZml4ID0gXCI8XCIgKyAoY29udGV4dC5wcmVmaXggfHwgXCJcIik7XG4gICAgdmFyIHN5bSA9IHByZWZpeCArIG5vZGUubiArIHNlcmlhbE5vKys7XG4gICAgY29udGV4dC5wYXJ0aWFsc1tzeW1dID0ge25hbWU6IG5vZGUubiwgcGFydGlhbHM6IHt9fTtcbiAgICBjb250ZXh0LmNvZGUgKz0gJ3QuYih0LnJwKFwiJyArICBlc2Moc3ltKSArICdcIixjLHAsXCInICsgKG5vZGUuaW5kZW50IHx8ICcnKSArICdcIikpOyc7XG4gICAgcmV0dXJuIHN5bTtcbiAgfVxuXG4gIEhvZ2FuLmNvZGVnZW4gPSB7XG4gICAgJyMnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ2lmKHQucyh0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDEpLCcgK1xuICAgICAgICAgICAgICAgICAgICAgICdjLHAsMCwnICsgbm9kZS5pICsgJywnICsgbm9kZS5lbmQgKyAnLFwiJyArIG5vZGUub3RhZyArIFwiIFwiICsgbm9kZS5jdGFnICsgJ1wiKSl7JyArXG4gICAgICAgICAgICAgICAgICAgICAgJ3QucnMoYyxwLCcgKyAnZnVuY3Rpb24oYyxwLHQpeyc7XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGNvbnRleHQpO1xuICAgICAgY29udGV4dC5jb2RlICs9ICd9KTtjLnBvcCgpO30nO1xuICAgIH0sXG5cbiAgICAnXic6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSAnaWYoIXQucyh0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDEpLGMscCwxLDAsMCxcIlwiKSl7JztcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY29udGV4dCk7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ307JztcbiAgICB9LFxuXG4gICAgJz4nOiBjcmVhdGVQYXJ0aWFsLFxuICAgICc8JzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgdmFyIGN0eCA9IHtwYXJ0aWFsczoge30sIGNvZGU6ICcnLCBzdWJzOiB7fSwgaW5QYXJ0aWFsOiB0cnVlfTtcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY3R4KTtcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IGNvbnRleHQucGFydGlhbHNbY3JlYXRlUGFydGlhbChub2RlLCBjb250ZXh0KV07XG4gICAgICB0ZW1wbGF0ZS5zdWJzID0gY3R4LnN1YnM7XG4gICAgICB0ZW1wbGF0ZS5wYXJ0aWFscyA9IGN0eC5wYXJ0aWFscztcbiAgICB9LFxuXG4gICAgJyQnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgY3R4ID0ge3N1YnM6IHt9LCBjb2RlOiAnJywgcGFydGlhbHM6IGNvbnRleHQucGFydGlhbHMsIHByZWZpeDogbm9kZS5ufTtcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY3R4KTtcbiAgICAgIGNvbnRleHQuc3Vic1tub2RlLm5dID0gY3R4LmNvZGU7XG4gICAgICBpZiAoIWNvbnRleHQuaW5QYXJ0aWFsKSB7XG4gICAgICAgIGNvbnRleHQuY29kZSArPSAndC5zdWIoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLGkpOyc7XG4gICAgICB9XG4gICAgfSxcblxuICAgICdcXG4nOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gd3JpdGUoJ1wiXFxcXG5cIicgKyAobm9kZS5sYXN0ID8gJycgOiAnICsgaScpKTtcbiAgICB9LFxuXG4gICAgJ192JzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9ICd0LmIodC52KHQuJyArIGNob29zZU1ldGhvZChub2RlLm4pICsgJyhcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsMCkpKTsnO1xuICAgIH0sXG5cbiAgICAnX3QnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gd3JpdGUoJ1wiJyArIGVzYyhub2RlLnRleHQpICsgJ1wiJyk7XG4gICAgfSxcblxuICAgICd7JzogdHJpcGxlU3RhY2hlLFxuXG4gICAgJyYnOiB0cmlwbGVTdGFjaGVcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaXBsZVN0YWNoZShub2RlLCBjb250ZXh0KSB7XG4gICAgY29udGV4dC5jb2RlICs9ICd0LmIodC50KHQuJyArIGNob29zZU1ldGhvZChub2RlLm4pICsgJyhcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsMCkpKTsnO1xuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGUocykge1xuICAgIHJldHVybiAndC5iKCcgKyBzICsgJyk7JztcbiAgfVxuXG4gIEhvZ2FuLndhbGsgPSBmdW5jdGlvbihub2RlbGlzdCwgY29udGV4dCkge1xuICAgIHZhciBmdW5jO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZWxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmdW5jID0gSG9nYW4uY29kZWdlbltub2RlbGlzdFtpXS50YWddO1xuICAgICAgZnVuYyAmJiBmdW5jKG5vZGVsaXN0W2ldLCBjb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBIb2dhbi5wYXJzZSA9IGZ1bmN0aW9uKHRva2VucywgdGV4dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHJldHVybiBidWlsZFRyZWUodG9rZW5zLCAnJywgW10sIG9wdGlvbnMuc2VjdGlvblRhZ3MgfHwgW10pO1xuICB9XG5cbiAgSG9nYW4uY2FjaGUgPSB7fTtcblxuICBIb2dhbi5jYWNoZUtleSA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gW3RleHQsICEhb3B0aW9ucy5hc1N0cmluZywgISFvcHRpb25zLmRpc2FibGVMYW1iZGEsIG9wdGlvbnMuZGVsaW1pdGVycywgISFvcHRpb25zLm1vZGVsR2V0XS5qb2luKCd8fCcpO1xuICB9XG5cbiAgSG9nYW4uY29tcGlsZSA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIga2V5ID0gSG9nYW4uY2FjaGVLZXkodGV4dCwgb3B0aW9ucyk7XG4gICAgdmFyIHRlbXBsYXRlID0gdGhpcy5jYWNoZVtrZXldO1xuXG4gICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICB2YXIgcGFydGlhbHMgPSB0ZW1wbGF0ZS5wYXJ0aWFscztcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gcGFydGlhbHMpIHtcbiAgICAgICAgZGVsZXRlIHBhcnRpYWxzW25hbWVdLmluc3RhbmNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH1cblxuICAgIHRlbXBsYXRlID0gdGhpcy5nZW5lcmF0ZSh0aGlzLnBhcnNlKHRoaXMuc2Nhbih0ZXh0LCBvcHRpb25zLmRlbGltaXRlcnMpLCB0ZXh0LCBvcHRpb25zKSwgdGV4dCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVba2V5XSA9IHRlbXBsYXRlO1xuICB9XG59KSh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcgPyBleHBvcnRzIDogSG9nYW4pO1xuIiwiLypcbiAqICBDb3B5cmlnaHQgMjAxMSBUd2l0dGVyLCBJbmMuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBUaGlzIGZpbGUgaXMgZm9yIHVzZSB3aXRoIE5vZGUuanMuIFNlZSBkaXN0LyBmb3IgYnJvd3NlciBmaWxlcy5cblxudmFyIEhvZ2FuID0gcmVxdWlyZSgnLi9jb21waWxlcicpO1xuSG9nYW4uVGVtcGxhdGUgPSByZXF1aXJlKCcuL3RlbXBsYXRlJykuVGVtcGxhdGU7XG5Ib2dhbi50ZW1wbGF0ZSA9IEhvZ2FuLlRlbXBsYXRlO1xubW9kdWxlLmV4cG9ydHMgPSBIb2dhbjtcbiIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMTEgVHdpdHRlciwgSW5jLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIEhvZ2FuID0ge307XG5cbihmdW5jdGlvbiAoSG9nYW4pIHtcbiAgSG9nYW4uVGVtcGxhdGUgPSBmdW5jdGlvbiAoY29kZU9iaiwgdGV4dCwgY29tcGlsZXIsIG9wdGlvbnMpIHtcbiAgICBjb2RlT2JqID0gY29kZU9iaiB8fCB7fTtcbiAgICB0aGlzLnIgPSBjb2RlT2JqLmNvZGUgfHwgdGhpcy5yO1xuICAgIHRoaXMuYyA9IGNvbXBpbGVyO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy50ZXh0ID0gdGV4dCB8fCAnJztcbiAgICB0aGlzLnBhcnRpYWxzID0gY29kZU9iai5wYXJ0aWFscyB8fCB7fTtcbiAgICB0aGlzLnN1YnMgPSBjb2RlT2JqLnN1YnMgfHwge307XG4gICAgdGhpcy5idWYgPSAnJztcbiAgfVxuXG4gIEhvZ2FuLlRlbXBsYXRlLnByb3RvdHlwZSA9IHtcbiAgICAvLyByZW5kZXI6IHJlcGxhY2VkIGJ5IGdlbmVyYXRlZCBjb2RlLlxuICAgIHI6IGZ1bmN0aW9uIChjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7IHJldHVybiAnJzsgfSxcblxuICAgIC8vIHZhcmlhYmxlIGVzY2FwaW5nXG4gICAgdjogaG9nYW5Fc2NhcGUsXG5cbiAgICAvLyB0cmlwbGUgc3RhY2hlXG4gICAgdDogY29lcmNlVG9TdHJpbmcsXG5cbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yaShbY29udGV4dF0sIHBhcnRpYWxzIHx8IHt9LCBpbmRlbnQpO1xuICAgIH0sXG5cbiAgICAvLyByZW5kZXIgaW50ZXJuYWwgLS0gYSBob29rIGZvciBvdmVycmlkZXMgdGhhdCBjYXRjaGVzIHBhcnRpYWxzIHRvb1xuICAgIHJpOiBmdW5jdGlvbiAoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucihjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KTtcbiAgICB9LFxuXG4gICAgLy8gZW5zdXJlUGFydGlhbFxuICAgIGVwOiBmdW5jdGlvbihzeW1ib2wsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgcGFydGlhbCA9IHRoaXMucGFydGlhbHNbc3ltYm9sXTtcblxuICAgICAgLy8gY2hlY2sgdG8gc2VlIHRoYXQgaWYgd2UndmUgaW5zdGFudGlhdGVkIHRoaXMgcGFydGlhbCBiZWZvcmVcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IHBhcnRpYWxzW3BhcnRpYWwubmFtZV07XG4gICAgICBpZiAocGFydGlhbC5pbnN0YW5jZSAmJiBwYXJ0aWFsLmJhc2UgPT0gdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIHBhcnRpYWwuaW5zdGFuY2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKCF0aGlzLmMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21waWxlciBhdmFpbGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRlbXBsYXRlID0gdGhpcy5jLmNvbXBpbGUodGVtcGxhdGUsIHRoaXMub3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIHVzZSB0aGlzIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHBhcnRpYWxzIGRpY3Rpb25hcnkgaGFzIGNoYW5nZWRcbiAgICAgIHRoaXMucGFydGlhbHNbc3ltYm9sXS5iYXNlID0gdGVtcGxhdGU7XG5cbiAgICAgIGlmIChwYXJ0aWFsLnN1YnMpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGNvbnNpZGVyIHBhcmVudCB0ZW1wbGF0ZSBub3dcbiAgICAgICAgaWYgKCFwYXJ0aWFscy5zdGFja1RleHQpIHBhcnRpYWxzLnN0YWNrVGV4dCA9IHt9O1xuICAgICAgICBmb3IgKGtleSBpbiBwYXJ0aWFsLnN1YnMpIHtcbiAgICAgICAgICBpZiAoIXBhcnRpYWxzLnN0YWNrVGV4dFtrZXldKSB7XG4gICAgICAgICAgICBwYXJ0aWFscy5zdGFja1RleHRba2V5XSA9ICh0aGlzLmFjdGl2ZVN1YiAhPT0gdW5kZWZpbmVkICYmIHBhcnRpYWxzLnN0YWNrVGV4dFt0aGlzLmFjdGl2ZVN1Yl0pID8gcGFydGlhbHMuc3RhY2tUZXh0W3RoaXMuYWN0aXZlU3ViXSA6IHRoaXMudGV4dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGUgPSBjcmVhdGVTcGVjaWFsaXplZFBhcnRpYWwodGVtcGxhdGUsIHBhcnRpYWwuc3VicywgcGFydGlhbC5wYXJ0aWFscyxcbiAgICAgICAgICB0aGlzLnN0YWNrU3VicywgdGhpcy5zdGFja1BhcnRpYWxzLCBwYXJ0aWFscy5zdGFja1RleHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXJ0aWFsc1tzeW1ib2xdLmluc3RhbmNlID0gdGVtcGxhdGU7XG5cbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9LFxuXG4gICAgLy8gdHJpZXMgdG8gZmluZCBhIHBhcnRpYWwgaW4gdGhlIGN1cnJlbnQgc2NvcGUgYW5kIHJlbmRlciBpdFxuICAgIHJwOiBmdW5jdGlvbihzeW1ib2wsIGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHZhciBwYXJ0aWFsID0gdGhpcy5lcChzeW1ib2wsIHBhcnRpYWxzKTtcbiAgICAgIGlmICghcGFydGlhbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0aWFsLnJpKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpO1xuICAgIH0sXG5cbiAgICAvLyByZW5kZXIgYSBzZWN0aW9uXG4gICAgcnM6IGZ1bmN0aW9uKGNvbnRleHQsIHBhcnRpYWxzLCBzZWN0aW9uKSB7XG4gICAgICB2YXIgdGFpbCA9IGNvbnRleHRbY29udGV4dC5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKCFpc0FycmF5KHRhaWwpKSB7XG4gICAgICAgIHNlY3Rpb24oY29udGV4dCwgcGFydGlhbHMsIHRoaXMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFpbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb250ZXh0LnB1c2godGFpbFtpXSk7XG4gICAgICAgIHNlY3Rpb24oY29udGV4dCwgcGFydGlhbHMsIHRoaXMpO1xuICAgICAgICBjb250ZXh0LnBvcCgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtYXliZSBzdGFydCBhIHNlY3Rpb25cbiAgICBzOiBmdW5jdGlvbih2YWwsIGN0eCwgcGFydGlhbHMsIGludmVydGVkLCBzdGFydCwgZW5kLCB0YWdzKSB7XG4gICAgICB2YXIgcGFzcztcblxuICAgICAgaWYgKGlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWwgPSB0aGlzLm1zKHZhbCwgY3R4LCBwYXJ0aWFscywgaW52ZXJ0ZWQsIHN0YXJ0LCBlbmQsIHRhZ3MpO1xuICAgICAgfVxuXG4gICAgICBwYXNzID0gISF2YWw7XG5cbiAgICAgIGlmICghaW52ZXJ0ZWQgJiYgcGFzcyAmJiBjdHgpIHtcbiAgICAgICAgY3R4LnB1c2goKHR5cGVvZiB2YWwgPT0gJ29iamVjdCcpID8gdmFsIDogY3R4W2N0eC5sZW5ndGggLSAxXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXNzO1xuICAgIH0sXG5cbiAgICAvLyBmaW5kIHZhbHVlcyB3aXRoIGRvdHRlZCBuYW1lc1xuICAgIGQ6IGZ1bmN0aW9uKGtleSwgY3R4LCBwYXJ0aWFscywgcmV0dXJuRm91bmQpIHtcbiAgICAgIHZhciBmb3VuZCxcbiAgICAgICAgICBuYW1lcyA9IGtleS5zcGxpdCgnLicpLFxuICAgICAgICAgIHZhbCA9IHRoaXMuZihuYW1lc1swXSwgY3R4LCBwYXJ0aWFscywgcmV0dXJuRm91bmQpLFxuICAgICAgICAgIGRvTW9kZWxHZXQgPSB0aGlzLm9wdGlvbnMubW9kZWxHZXQsXG4gICAgICAgICAgY3ggPSBudWxsO1xuXG4gICAgICBpZiAoa2V5ID09PSAnLicgJiYgaXNBcnJheShjdHhbY3R4Lmxlbmd0aCAtIDJdKSkge1xuICAgICAgICB2YWwgPSBjdHhbY3R4Lmxlbmd0aCAtIDFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvdW5kID0gZmluZEluU2NvcGUobmFtZXNbaV0sIHZhbCwgZG9Nb2RlbEdldCk7XG4gICAgICAgICAgaWYgKGZvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGN4ID0gdmFsO1xuICAgICAgICAgICAgdmFsID0gZm91bmQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRm91bmQgJiYgIXZhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmV0dXJuRm91bmQgJiYgdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN0eC5wdXNoKGN4KTtcbiAgICAgICAgdmFsID0gdGhpcy5tdih2YWwsIGN0eCwgcGFydGlhbHMpO1xuICAgICAgICBjdHgucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIC8vIGZpbmQgdmFsdWVzIHdpdGggbm9ybWFsIG5hbWVzXG4gICAgZjogZnVuY3Rpb24oa2V5LCBjdHgsIHBhcnRpYWxzLCByZXR1cm5Gb3VuZCkge1xuICAgICAgdmFyIHZhbCA9IGZhbHNlLFxuICAgICAgICAgIHYgPSBudWxsLFxuICAgICAgICAgIGZvdW5kID0gZmFsc2UsXG4gICAgICAgICAgZG9Nb2RlbEdldCA9IHRoaXMub3B0aW9ucy5tb2RlbEdldDtcblxuICAgICAgZm9yICh2YXIgaSA9IGN0eC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICB2ID0gY3R4W2ldO1xuICAgICAgICB2YWwgPSBmaW5kSW5TY29wZShrZXksIHYsIGRvTW9kZWxHZXQpO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICByZXR1cm4gKHJldHVybkZvdW5kKSA/IGZhbHNlIDogXCJcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXR1cm5Gb3VuZCAmJiB0eXBlb2YgdmFsID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsID0gdGhpcy5tdih2YWwsIGN0eCwgcGFydGlhbHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICAvLyBoaWdoZXIgb3JkZXIgdGVtcGxhdGVzXG4gICAgbHM6IGZ1bmN0aW9uKGZ1bmMsIGN4LCBwYXJ0aWFscywgdGV4dCwgdGFncykge1xuICAgICAgdmFyIG9sZFRhZ3MgPSB0aGlzLm9wdGlvbnMuZGVsaW1pdGVycztcblxuICAgICAgdGhpcy5vcHRpb25zLmRlbGltaXRlcnMgPSB0YWdzO1xuICAgICAgdGhpcy5iKHRoaXMuY3QoY29lcmNlVG9TdHJpbmcoZnVuYy5jYWxsKGN4LCB0ZXh0KSksIGN4LCBwYXJ0aWFscykpO1xuICAgICAgdGhpcy5vcHRpb25zLmRlbGltaXRlcnMgPSBvbGRUYWdzO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIC8vIGNvbXBpbGUgdGV4dFxuICAgIGN0OiBmdW5jdGlvbih0ZXh0LCBjeCwgcGFydGlhbHMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZUxhbWJkYSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xhbWJkYSBmZWF0dXJlcyBkaXNhYmxlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmMuY29tcGlsZSh0ZXh0LCB0aGlzLm9wdGlvbnMpLnJlbmRlcihjeCwgcGFydGlhbHMpO1xuICAgIH0sXG5cbiAgICAvLyB0ZW1wbGF0ZSByZXN1bHQgYnVmZmVyaW5nXG4gICAgYjogZnVuY3Rpb24ocykgeyB0aGlzLmJ1ZiArPSBzOyB9LFxuXG4gICAgZmw6IGZ1bmN0aW9uKCkgeyB2YXIgciA9IHRoaXMuYnVmOyB0aGlzLmJ1ZiA9ICcnOyByZXR1cm4gcjsgfSxcblxuICAgIC8vIG1ldGhvZCByZXBsYWNlIHNlY3Rpb25cbiAgICBtczogZnVuY3Rpb24oZnVuYywgY3R4LCBwYXJ0aWFscywgaW52ZXJ0ZWQsIHN0YXJ0LCBlbmQsIHRhZ3MpIHtcbiAgICAgIHZhciB0ZXh0U291cmNlLFxuICAgICAgICAgIGN4ID0gY3R4W2N0eC5sZW5ndGggLSAxXSxcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmNhbGwoY3gpO1xuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChpbnZlcnRlZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHRTb3VyY2UgPSAodGhpcy5hY3RpdmVTdWIgJiYgdGhpcy5zdWJzVGV4dCAmJiB0aGlzLnN1YnNUZXh0W3RoaXMuYWN0aXZlU3ViXSkgPyB0aGlzLnN1YnNUZXh0W3RoaXMuYWN0aXZlU3ViXSA6IHRoaXMudGV4dDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5scyhyZXN1bHQsIGN4LCBwYXJ0aWFscywgdGV4dFNvdXJjZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCksIHRhZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIC8vIG1ldGhvZCByZXBsYWNlIHZhcmlhYmxlXG4gICAgbXY6IGZ1bmN0aW9uKGZ1bmMsIGN0eCwgcGFydGlhbHMpIHtcbiAgICAgIHZhciBjeCA9IGN0eFtjdHgubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgcmVzdWx0ID0gZnVuYy5jYWxsKGN4KTtcblxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdGhpcy5jdChjb2VyY2VUb1N0cmluZyhyZXN1bHQuY2FsbChjeCkpLCBjeCwgcGFydGlhbHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBzdWI6IGZ1bmN0aW9uKG5hbWUsIGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHZhciBmID0gdGhpcy5zdWJzW25hbWVdO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTdWIgPSBuYW1lO1xuICAgICAgICBmKGNvbnRleHQsIHBhcnRpYWxzLCB0aGlzLCBpbmRlbnQpO1xuICAgICAgICB0aGlzLmFjdGl2ZVN1YiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICB9O1xuXG4gIC8vRmluZCBhIGtleSBpbiBhbiBvYmplY3RcbiAgZnVuY3Rpb24gZmluZEluU2NvcGUoa2V5LCBzY29wZSwgZG9Nb2RlbEdldCkge1xuICAgIHZhciB2YWw7XG5cbiAgICBpZiAoc2NvcGUgJiYgdHlwZW9mIHNjb3BlID09ICdvYmplY3QnKSB7XG5cbiAgICAgIGlmIChzY29wZVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsID0gc2NvcGVba2V5XTtcblxuICAgICAgLy8gdHJ5IGxvb2t1cCB3aXRoIGdldCBmb3IgYmFja2JvbmUgb3Igc2ltaWxhciBtb2RlbCBkYXRhXG4gICAgICB9IGVsc2UgaWYgKGRvTW9kZWxHZXQgJiYgc2NvcGUuZ2V0ICYmIHR5cGVvZiBzY29wZS5nZXQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWwgPSBzY29wZS5nZXQoa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3BlY2lhbGl6ZWRQYXJ0aWFsKGluc3RhbmNlLCBzdWJzLCBwYXJ0aWFscywgc3RhY2tTdWJzLCBzdGFja1BhcnRpYWxzLCBzdGFja1RleHQpIHtcbiAgICBmdW5jdGlvbiBQYXJ0aWFsVGVtcGxhdGUoKSB7fTtcbiAgICBQYXJ0aWFsVGVtcGxhdGUucHJvdG90eXBlID0gaW5zdGFuY2U7XG4gICAgZnVuY3Rpb24gU3Vic3RpdHV0aW9ucygpIHt9O1xuICAgIFN1YnN0aXR1dGlvbnMucHJvdG90eXBlID0gaW5zdGFuY2Uuc3VicztcbiAgICB2YXIga2V5O1xuICAgIHZhciBwYXJ0aWFsID0gbmV3IFBhcnRpYWxUZW1wbGF0ZSgpO1xuICAgIHBhcnRpYWwuc3VicyA9IG5ldyBTdWJzdGl0dXRpb25zKCk7XG4gICAgcGFydGlhbC5zdWJzVGV4dCA9IHt9OyAgLy9oZWhlLiBzdWJzdGV4dC5cbiAgICBwYXJ0aWFsLmJ1ZiA9ICcnO1xuXG4gICAgc3RhY2tTdWJzID0gc3RhY2tTdWJzIHx8IHt9O1xuICAgIHBhcnRpYWwuc3RhY2tTdWJzID0gc3RhY2tTdWJzO1xuICAgIHBhcnRpYWwuc3Vic1RleHQgPSBzdGFja1RleHQ7XG4gICAgZm9yIChrZXkgaW4gc3Vicykge1xuICAgICAgaWYgKCFzdGFja1N1YnNba2V5XSkgc3RhY2tTdWJzW2tleV0gPSBzdWJzW2tleV07XG4gICAgfVxuICAgIGZvciAoa2V5IGluIHN0YWNrU3Vicykge1xuICAgICAgcGFydGlhbC5zdWJzW2tleV0gPSBzdGFja1N1YnNba2V5XTtcbiAgICB9XG5cbiAgICBzdGFja1BhcnRpYWxzID0gc3RhY2tQYXJ0aWFscyB8fCB7fTtcbiAgICBwYXJ0aWFsLnN0YWNrUGFydGlhbHMgPSBzdGFja1BhcnRpYWxzO1xuICAgIGZvciAoa2V5IGluIHBhcnRpYWxzKSB7XG4gICAgICBpZiAoIXN0YWNrUGFydGlhbHNba2V5XSkgc3RhY2tQYXJ0aWFsc1trZXldID0gcGFydGlhbHNba2V5XTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gc3RhY2tQYXJ0aWFscykge1xuICAgICAgcGFydGlhbC5wYXJ0aWFsc1trZXldID0gc3RhY2tQYXJ0aWFsc1trZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0aWFsO1xuICB9XG5cbiAgdmFyIHJBbXAgPSAvJi9nLFxuICAgICAgckx0ID0gLzwvZyxcbiAgICAgIHJHdCA9IC8+L2csXG4gICAgICByQXBvcyA9IC9cXCcvZyxcbiAgICAgIHJRdW90ID0gL1xcXCIvZyxcbiAgICAgIGhDaGFycyA9IC9bJjw+XFxcIlxcJ10vO1xuXG4gIGZ1bmN0aW9uIGNvZXJjZVRvU3RyaW5nKHZhbCkge1xuICAgIHJldHVybiBTdHJpbmcoKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgPyAnJyA6IHZhbCk7XG4gIH1cblxuICBmdW5jdGlvbiBob2dhbkVzY2FwZShzdHIpIHtcbiAgICBzdHIgPSBjb2VyY2VUb1N0cmluZyhzdHIpO1xuICAgIHJldHVybiBoQ2hhcnMudGVzdChzdHIpID9cbiAgICAgIHN0clxuICAgICAgICAucmVwbGFjZShyQW1wLCAnJmFtcDsnKVxuICAgICAgICAucmVwbGFjZShyTHQsICcmbHQ7JylcbiAgICAgICAgLnJlcGxhY2Uockd0LCAnJmd0OycpXG4gICAgICAgIC5yZXBsYWNlKHJBcG9zLCAnJiMzOTsnKVxuICAgICAgICAucmVwbGFjZShyUXVvdCwgJyZxdW90OycpIDpcbiAgICAgIHN0cjtcbiAgfVxuXG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxufSkodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnID8gZXhwb3J0cyA6IEhvZ2FuKTtcbiIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdiBpZD1cXFwibWFya2V0cGxhY2UtaXRlbURldGFpbC1pbmZvLWF1dG9idXlcXFwiIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogMjBweCBhdXRvXFxcIj48ZGl2IGNsYXNzPVxcXCJubC1idXR0b25cXFwiPkFkZCB0byB3aXNobGlzdDwvZGl2PjwvZGl2PlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aDE+QWRkIHRvIHdpc2hsaXN0PC9oMT48cD5Ib3cgbWFueSBtYWFuYXMgZG8geW91IHdpc2ggdG8gb2ZmZXIgdG8gYWNxdWlyZSB0aGlzIGl0ZW0/PC9wPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YnV0dG9uIGlkPVxcXCJhdXRvLWV4cGxvcmUtYnV0dG9uXFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIFwiKTtpZih0LnModC5mKFwiYWN0aXZlXCIsYyxwLDEpLGMscCwwLDYxLDY3LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIiBkYXRhLWlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJsb2NhdGlvbklkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBkYXRhLW1hcGlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJyZWdpb25JZFwiLGMscCwwKSkpO3QuYihcIlxcXCI+QXV0byBleHBsb3JlPC9idXR0b24+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxhIGlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgY2xhc3M9XFxcImNhcm91c2VsLW5ld3MgY2Fyb3VzZWwtZWVcXFwiIGhyZWY9XFxcIlxcXCIgc3R5bGU9XFxcImJhY2tncm91bmQtaW1hZ2U6IHVybChcIik7dC5iKHQudih0LmYoXCJiYWNrZ3JvdW5kSW1hZ2VcIixjLHAsMCkpKTt0LmIoXCIpXFxcIj48ZGl2PjxoND5cIik7dC5iKHQudih0LmYoXCJoNFwiLGMscCwwKSkpO3QuYihcIjwvaDQ+PGg1PlwiKTt0LmIodC52KHQuZihcImg1XCIsYyxwLDApKSk7dC5iKFwiPC9oNT48cD5cIik7dC5iKHQudih0LmYoXCJwXCIsYyxwLDApKSk7dC5iKFwiPC9wPjwvZGl2PjwvYT5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGgxPkNoYW5nZSBwcmljZTwvaDE+PHA+SG93IG1hbnkgbWFhbmFzIGRvIHlvdSB3aXNoIHRvIG9mZmVyIHRvIGFjcXVpcmUgdGhpcyBpdGVtPzwvcD5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGJ1dHRvbiBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gZmF2b3JpdGVzLWFjdGlvbi1lZVxcXCI+XCIpO3QuYih0LnYodC5mKFwidGV4dFwiLGMscCwwKSkpO3QuYihcIjwvYnV0dG9uPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YSBpZD1cXFwiaG9tZS1cIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgY2xhc3M9XFxcImhvbWUtY29udGVudC10aWxlIGhvbWUtY29udGVudC1zbWFsbCBob21lLWNvbnRlbnQtc21hbGwtZWVcXFwiIGhyZWY9XFxcIlwiKTt0LmIodC52KHQuZihcImhyZWZcIixjLHAsMCkpKTt0LmIoXCJcXFwiIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIpO3QuYih0LnYodC5mKFwiYmFja2dyb3VuZEltYWdlXCIsYyxwLDApKSk7dC5iKFwiKTtcXFwiPjxoND5cIik7dC5iKHQudih0LmYoXCJoNFwiLGMscCwwKSkpO3QuYihcIjwvaDQ+PC9hPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGkgY2xhc3M9XFxcIm1haW4tbWVudS1cIik7dC5iKHQudih0LmYoXCJjbGFzc1wiLGMscCwwKSkpO3QuYihcIiBtYWluLW1lbnUtZWVcXFwiPjxhIGhyZWY9XFxcIlwiKTt0LmIodC52KHQuZihcImhyZWZcIixjLHAsMCkpKTt0LmIoXCJcXFwiPlwiKTt0LmIodC52KHQuZihcInRleHRcIixjLHAsMCkpKTt0LmIoXCI8L2E+PC9saT5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGxpIGlkPVxcXCJcIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgY2xhc3M9XFxcInByb2ZpbGUtY29udGFjdC1hY3Rpb24tZWVcXFwiPjxzcGFuIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtXFxcIj48ZGl2IGNsYXNzPVxcXCJhY3Rpb24tZGVzY3JpcHRpb25cXFwiPlwiKTt0LmIodC52KHQuZihcImFjdGlvbkRlc2NyaXB0aW9uXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+PC9zcGFuPjwvbGk+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXYgY2xhc3M9XFxcImFjY291bnQtbWlzYy1ibG9jIGFjY291bnQtZWUtYmxvYyBibG9jXFxcIj48aDIgY2xhc3M9XFxcInNlY3Rpb24tdGl0bGVcXFwiPkVuaGFuY2VtZW50czwvaDI+PHVsIGNsYXNzPVxcXCJhY2NvdW50LW1pc2MtYWN0aW9uc1xcXCI+PGxpIGlkPVxcXCJlZS1kZWJ1Zy1lbmFibGVkXFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcImRlYnVnXCIsYyxwLDEpLGMscCwwLDE5NCwyMDAsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiIHRpdGxlPVxcXCJFbmFibGVzIG9yIGRpc2FibGVzIGxvZ2dpbmcuXFxcIj5EZWJ1ZzwvbGk+PGxpIGlkPVxcXCJlZS1taW5pZ2FtZXMtZW5hYmxlZFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gXCIpO2lmKHQucyh0LmYoXCJtaW5pZ2FtZXNcIixjLHAsMSksYyxwLDAsMzMzLDMzOSxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCI+TWluaWdhbWVzPC9saT48bGkgaWQ9XFxcImVlLWV4cGxvcmF0aW9ucy1lbmFibGVkXFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcImV4cGxvcmF0aW9uc1wiLGMscCwxKSxjLHAsMCw0NDksNDU1LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIj5FeHBsb3JhdGlvbnM8L2xpPjxsaSBpZD1cXFwiZWUtbWFya2V0LWVuYWJsZWRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwibWFya2V0XCIsYyxwLDEpLGMscCwwLDU1OSw1NjUsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiPk1hcmtldDwvbGk+PC91bD48L2Rpdj5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGEgaWQ9XFxcIndpc2hsaXN0LWJ1dHRvblxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvblxcXCI+V2lzaGxpc3Q8L2E+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxzdHlsZT50YWJsZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHRleHQtYWxpZ246IGNlbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDEwMCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmFjdGlvbi1waWN0byB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogNTBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDUwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGN1cnNvcjogcG9pbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuYWN0aW9uLXBpY3RvOmhvdmVyOm5vdCguZGlzYWJsZWQpLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgLmVkaXQtcHJpY2U6aG92ZXIge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBhbmltYXRpb246IGJ1dHRvbi1ib3VuY2UgMzAwbXMgbGluZWFyIGZvcndhcmRzO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wNSkgY29udHJhc3QoMS4xKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuZWRpdC1wcmljZSB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGN1cnNvcjogcG9pbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICBpbWcuZGlzYWJsZWQge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuaXRlbS1pY29uIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgd2lkdGg6IDEwMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDEwMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfTwvc3R5bGU+PHRhYmxlPjx0aGVhZD48dHI+PHRoPkljb248L3RoPjx0aD5OYW1lPC90aD48dGg+UHJpY2U8L3RoPjx0aD5TdGF0dXM8L3RoPjx0aD5BY3Rpb25zPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5PiBcIik7aWYodC5zKHQuZihcIndpc2hsaXN0XCIsYyxwLDEpLGMscCwwLDU3NywxMjc1LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgPHRyIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgZGF0YS13ZWFyYWJsZWl0ZW1pZD1cXFwiXCIpO3QuYih0LnYodC5mKFwid2VhcmFibGVpdGVtaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiPjx0ZD48aW1nIGNsYXNzPVxcXCJpdGVtLWljb25cXFwiIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCIgYWx0PVxcXCJcIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiXFxcIj48L3RkPjx0ZD48ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+PC90ZD48dGQ+PGRpdiBjbGFzcz1cXFwiZWRpdC1wcmljZVxcXCIgdGl0bGU9XFxcIkNoYW5nZSBwcmljZVxcXCI+PHNwYW4gY2xhc3M9XFxcInByaWNlLWl0ZW1cXFwiPlwiKTt0LmIodC52KHQuZihcInByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIiBhbHQ9XFxcIm1hYW5hc1xcXCI+PC9zcGFuPjwvZGl2PjwvdGQ+PHRkPjxwIGNsYXNzPVxcXCJlcnJvclxcXCI+XCIpO3QuYih0LnYodC5mKFwiZXJyb3JcIixjLHAsMCkpKTt0LmIoXCI8L3A+PC90ZD48dGQ+PGltZyBjbGFzcz1cXFwiYWN0aW9uLXBpY3RvIHJlc2V0LWl0ZW0tc3RhdHVzIFwiKTtpZighdC5zKHQuZihcImVycm9yXCIsYyxwLDEpLGMscCwxLDAsMCxcIlwiKSl7dC5iKFwiZGlzYWJsZWRcIik7fTt0LmIoXCJcXFwiIHNyYz1cXFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC93YXJkcm9iZS9yZXNldC1idG4ucG5nXFxcIiB0aXRsZT1cXFwiUmVzZXQgdGhlIGVycm9yIHN0YXR1c1xcXCIgYWx0PVxcXCJSZXNldFxcXCI+IDxpbWcgY2xhc3M9XFxcImFjdGlvbi1waWN0byBkZWxldGUtd2lzaGxpc3QtaXRlbVxcXCIgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L3dhcmRyb2JlL2RlbGV0ZS5wbmdcXFwiIHRpdGxlPVxcXCJSZW1vdmUgZnJvbSB0aGUgd2lzaGxpc3RcXFwiIGFsdD1cXFwiRGVsZXRlXFxcIj48L3RkPjwvdHI+IFwiKTt9KTtjLnBvcCgpO310LmIoXCIgPC90Ym9keT48L3RhYmxlPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsImV4cG9ydCBlbnVtIER1cmF0aW9uVW5pdCB7XG4gIG1pbGxpc2Vjb25kID0gMSxcbiAgc2Vjb25kID0gMTAwMCAqIG1pbGxpc2Vjb25kLFxuICBtaW51dGUgPSA2MCAqIHNlY29uZCxcbiAgaG91ciA9IDYwICogbWludXRlLFxuICBkYXkgPSAyNCAqIGhvdXIsXG4gIHdlZWsgPSA3ICogZGF5LFxufVxuXG5leHBvcnQgY2xhc3MgRHVyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSB2YWx1ZTogbnVtYmVyLCByZWFkb25seSB1bml0OiBEdXJhdGlvblVuaXQpIHt9XG5cbiAgZGl2aWRlKGR1cmF0aW9uOiBEdXJhdGlvbik6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgLyBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXG4gIH1cblxuICBtaW51cyhkdXJhdGlvbjogRHVyYXRpb24pOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlIC0gZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxuICB9XG5cbiAgbXVsdGlwbHkoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24odGhpcy52YWx1ZSAqIGR1cmF0aW9uLnRvKHRoaXMudW5pdCkudmFsdWUsIHRoaXMudW5pdClcbiAgfVxuXG4gIHBsdXMoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24odGhpcy52YWx1ZSArIGR1cmF0aW9uLnRvKHRoaXMudW5pdCkudmFsdWUsIHRoaXMudW5pdClcbiAgfVxuXG4gIHRvKHVuaXQ6IER1cmF0aW9uVW5pdCk6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKCh0aGlzLnZhbHVlICogdGhpcy51bml0KSAvIHVuaXQsIHVuaXQpXG4gIH1cbn1cbiIsImV4cG9ydCBlbnVtIExvY2FsU3RvcmFnZUtleSB7XG4gIGF1dG9FeHBsb3JlTG9jYXRpb25zID0gXCJhdXRvRXhwbG9yZUxvY2F0aW9uc1wiLFxuICBkZWJ1ZyA9IFwiZGVidWdcIixcbiAgZXhwbG9yYXRpb25zID0gXCJleHBsb3JhdGlvbnNcIixcbiAgbWFya2V0ID0gXCJtYXJrZXRcIixcbiAgbWluaWdhbWVzID0gXCJtaW5pZ2FtZXNcIixcbiAgd2lzaGxpc3QgPSBcIndpc2hsaXN0XCIsXG59XG4iLCJleHBvcnQgZW51bSBTZXNzaW9uU3RvcmFnZUtleSB7XG4gIGFjdGlvbiA9IFwiYWN0aW9uXCIsXG4gIGV4cGxvcmF0aW9uc0RvbmUgPSBcImV4cGxvcmF0aW9uc0RvbmVcIixcbiAgbWV0YSA9IFwibWV0YVwiLFxuICBtaW5pZ2FtZXNEb25lID0gXCJtaW5pZ2FtZXNEb25lXCIsXG4gIHNlbGVjdGVkTG9jYXRpb24gPSBcInNlbGVjdGVkTG9jYXRpb25cIixcbiAgdGFrZW92ZXIgPSBcInRha2VvdmVyXCIsXG4gIHdpc2hsaXN0ID0gXCJ3aXNobGlzdFwiLFxufVxuIiwiZXhwb3J0IGVudW0gQm9keUxvY2F0aW9uIHtcbiAgQWxsID0gXCJcIixcbiAgVW5kZXJ3ZWFyID0gMSxcbiAgU2tpbnMgPSAyLFxuICBUYXR0b29zID0gMjAsXG4gIE1vdXRocyA9IDIxLFxuICBFeWVzID0gMyxcbiAgSGFpciA9IDQsXG4gIFNvY2tzID0gNSxcbiAgU2hvZXMgPSA2LFxuICBQYW50cyA9IDcsXG4gIEhhbmRBY2Nlc3NvcmllcyA9IDgsXG4gIFRvcHMgPSA5LFxuICBDb2F0cyA9IDEwLFxuICBHbG92ZXMgPSAxMSxcbiAgTmVja2xhY2VzID0gMTIsXG4gIERyZXNzZXMgPSAxMyxcbiAgSGF0cyA9IDE0LFxuICBGYWNlQWNjZXNzb3JpZXMgPSAxNSxcbiAgRnVuZHMgPSAxNixcbiAgQmVsdHMgPSAxOCxcbiAgQXRtb3NwaGVyZXMgPSAxOSxcbn1cbiIsImltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi90eXBlLmVudW1cIlxuXG5leHBvcnQgZW51bSBDYXRlZ29yeVN0cmluZyB7XG4gIGFsbCA9IFwiXCIsXG4gIGZvb2QgPSBcImZvb2RcIixcbiAgYWxjaGVteSA9IFwiYWxjaGVteVwiLFxuICB1dGlsaXR5ID0gXCJ1dGlsaXR5XCIsXG4gIHRhbWUgPSBcInRhbWVcIixcbn1cblxuZXhwb3J0IGVudW0gQ2F0ZWdvcnlOdW1iZXIge1xuICBhbGwgPSBDYXRlZ29yeVN0cmluZy5hbGwsXG4gIGZvb2QgPSAxLFxuICBhbGNoZW15ID0gVHlwZS5Db25zdW1hYmxlLFxuICB1dGlsaXR5ID0gMyxcbiAgdGFtZSA9IDQsXG59XG4iLCJleHBvcnQgZW51bSBHdWFyZCB7XG4gIGFueSA9IFwiXCIsXG4gIGxpZ2h0ID0gMSxcbiAgb2JzaWRpYW4sXG4gIGFic3ludGhlLFxuICBzaGFkb3csXG59XG4iLCJleHBvcnQgZW51bSBSYXJpdHkge1xuICBhbGwgPSBcIlwiLFxuICBjb21tb24gPSBcImNvbW1vblwiLFxuICByYXJlID0gXCJyYXJlXCIsXG4gIEVwaWMgPSBcImVwaWNcIixcbiAgbGVnZW5kYXJ5ID0gXCJsZWdlbmRhcnlcIixcbiAgZXZlbnQgPSBcImV2ZW50XCIsXG59XG4iLCJleHBvcnQgZW51bSBUeXBlIHtcbiAgQWxsID0gXCJcIixcbiAgQmFnID0gXCJCYWdcIixcbiAgQ29uc3VtYWJsZSA9IFwiQ29uc3VtYWJsZVwiLFxuICBFZ2dJdGVtID0gXCJFZ2dJdGVtXCIsXG4gIFBsYXllcldlYXJhYmxlSXRlbSA9IFwiUGxheWVyV2VhcmFibGVJdGVtXCIsXG4gIFF1ZXN0SXRlbSA9IFwiUXVlc3RJdGVtXCIsXG59XG4iLCJleHBvcnQgZW51bSBUYWtlb3ZlckFjdGlvbiB7XG4gIGRhaWx5ID0gXCJkYWlseVwiLFxuICBtaW5pZ2FtZXMgPSBcIm1pbmlnYW1lc1wiLFxuICBleHBsb3JhdGlvbnMgPSBcImV4cGxvcmF0aW9uc1wiLFxuICBhdWN0aW9ucyA9IFwiYXVjdGlvbnNcIixcbiAgYnV5ID0gXCJidXlcIixcbiAgLy8gc2VsbCxcbiAgd2FpdCA9IFwid2FpdFwiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBTZXR0aW5ncyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9zZXR0aW5nc1wiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlS2V5IH0gZnJvbSBcIi4vbG9jYWxfc3RvcmFnZS5lbnVtXCJcbmltcG9ydCB0eXBlIHsgV2lzaGVkSXRlbSB9IGZyb20gXCIuL3dpc2hlZF9pdGVtXCJcblxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHN0YXRpYyBnZXQgYXV0b0V4cGxvcmVMb2NhdGlvbnMoKTogQXV0b0V4cGxvcmVMb2NhdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPEF1dG9FeHBsb3JlTG9jYXRpb25bXT4oXG4gICAgICBMb2NhbFN0b3JhZ2VLZXkuYXV0b0V4cGxvcmVMb2NhdGlvbnMsXG4gICAgICBbXVxuICAgIClcbiAgfVxuXG4gIHN0YXRpYyBzZXQgYXV0b0V4cGxvcmVMb2NhdGlvbnMobG9jYXRpb25zOiBBdXRvRXhwbG9yZUxvY2F0aW9uW10pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LmF1dG9FeHBsb3JlTG9jYXRpb25zLCBsb2NhdGlvbnMpXG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlYnVnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5LmRlYnVnLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgZGVidWcoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuZGVidWcsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IGV4cGxvcmF0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPGJvb2xlYW4+KExvY2FsU3RvcmFnZUtleS5leHBsb3JhdGlvbnMsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBleHBsb3JhdGlvbnMoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zLCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCBtYXJrZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxib29sZWFuPihMb2NhbFN0b3JhZ2VLZXkubWFya2V0LCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWFya2V0KGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5Lm1hcmtldCwgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWluaWdhbWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5Lm1pbmlnYW1lcywgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IG1pbmlnYW1lcyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5taW5pZ2FtZXMsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHNldHRpbmdzKCk6IFNldHRpbmdzIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXV0b0V4cGxvcmVMb2NhdGlvbnM6IHRoaXMuYXV0b0V4cGxvcmVMb2NhdGlvbnMsXG4gICAgICBkZWJ1ZzogdGhpcy5kZWJ1ZyxcbiAgICAgIGV4cGxvcmF0aW9uczogdGhpcy5leHBsb3JhdGlvbnMsXG4gICAgICBtYXJrZXQ6IHRoaXMubWFya2V0LFxuICAgICAgbWluaWdhbWVzOiB0aGlzLm1pbmlnYW1lcyxcbiAgICAgIHdpc2hsaXN0OiB0aGlzLndpc2hsaXN0LFxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBzZXQgc2V0dGluZ3Moc2V0dGluZ3M6IFNldHRpbmdzKSB7XG4gICAgdGhpcy5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IHNldHRpbmdzLmF1dG9FeHBsb3JlTG9jYXRpb25zXG4gICAgdGhpcy5leHBsb3JhdGlvbnMgPSBzZXR0aW5ncy5leHBsb3JhdGlvbnNcbiAgICB0aGlzLm1hcmtldCA9IHNldHRpbmdzLm1hcmtldFxuICAgIHRoaXMubWluaWdhbWVzID0gc2V0dGluZ3MubWluaWdhbWVzXG4gIH1cblxuICBzdGF0aWMgZ2V0IHdpc2hsaXN0KCk6IFdpc2hlZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxXaXNoZWRJdGVtW10+KExvY2FsU3RvcmFnZUtleS53aXNobGlzdCwgW10pXG4gIH1cblxuICBzdGF0aWMgc2V0IHdpc2hsaXN0KGxvY2F0aW9uczogV2lzaGVkSXRlbVtdKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS53aXNobGlzdCwgbG9jYXRpb25zKVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SXRlbTxUPihrZXk6IExvY2FsU3RvcmFnZUtleSwgZmFsbGJhY2s6IFQpOiBUIHtcbiAgICByZXR1cm4gPFQ+KFxuICAgICAgKEpTT04ucGFyc2UodGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpID8/IEpTT04uc3RyaW5naWZ5KGZhbGxiYWNrKSkgPz9cbiAgICAgICAgZmFsbGJhY2spXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2V0SXRlbTxUPihrZXk6IExvY2FsU3RvcmFnZUtleSwgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICB9XG59XG4iLCJpbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG5leHBvcnQgY2xhc3MgQ29uc29sZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGNvbnNvbGUgPSBjb25zb2xlXG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0IGRlYnVnZ2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTG9jYWxTdG9yYWdlLmRlYnVnXG4gIH1cblxuICBzdGF0aWMgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG5cbiAgc3RhdGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5lcnJvcihtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyBpbmZvKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG5cbiAgc3RhdGljIGxvZyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cbiAgICB0aGlzLmNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG5cbiAgc3RhdGljIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLndhcm4obWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgTWV0YSB9IGZyb20gXCIuLi9hcGkvbWV0YVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2Uvd2lzaGVkX2l0ZW1cIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VLZXkgfSBmcm9tIFwiLi9zZXNzaW9uX3N0b3JhZ2UuZW51bVwiXG5pbXBvcnQgdHlwZSB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4vdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuXG5leHBvcnQgY2xhc3MgU2Vzc2lvblN0b3JhZ2Uge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBzZXNzaW9uU3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlXG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc3RhdGljIGdldCBhY3Rpb24oKTogVGFrZW92ZXJBY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmFjdGlvbiwgbnVsbClcbiAgfVxuXG4gIHN0YXRpYyBzZXQgYWN0aW9uKGFjdGlvbjogVGFrZW92ZXJBY3Rpb24gfCBudWxsKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmFjdGlvbiwgYWN0aW9uKVxuICB9XG5cbiAgc3RhdGljIGdldCBleHBsb3JhdGlvbnNEb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zRG9uZSwgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IGV4cGxvcmF0aW9uc0RvbmUoZG9uZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5leHBsb3JhdGlvbnNEb25lLCBkb25lKVxuICB9XG5cbiAgc3RhdGljIGdldCBtZXRhKCk6IE1ldGEgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1ldGEsIG51bGwpXG4gIH1cblxuICBzdGF0aWMgc2V0IG1ldGEobWV0YTogTWV0YSB8IG51bGwpIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkubWV0YSwgbWV0YSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWluaWdhbWVzRG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1pbmlnYW1lc0RvbmUsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBtaW5pZ2FtZXNEb25lKGRvbmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkubWluaWdhbWVzRG9uZSwgZG9uZSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VsZWN0ZWRMb2NhdGlvbigpOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5zZWxlY3RlZExvY2F0aW9uLCBudWxsKVxuICB9XG5cbiAgc3RhdGljIHNldCBzZWxlY3RlZExvY2F0aW9uKHNlbGVjdGVkOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCkge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5zZWxlY3RlZExvY2F0aW9uLCBzZWxlY3RlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGFrZW92ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS50YWtlb3ZlciwgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IHRha2VvdmVyKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkudGFrZW92ZXIsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHdpc2hsaXN0KCk6IFdpc2hlZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS53aXNobGlzdCwgW10pXG4gIH1cblxuICBzdGF0aWMgc2V0IHdpc2hsaXN0KHdpc2hsaXN0OiBXaXNoZWRJdGVtW10pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkud2lzaGxpc3QsIHdpc2hsaXN0KVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SXRlbTxUPihrZXk6IFNlc3Npb25TdG9yYWdlS2V5LCBmYWxsYmFjazogVCk6IFQge1xuICAgIHJldHVybiA8VD4oXG4gICAgICAoSlNPTi5wYXJzZShcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gSlNPTi5zdHJpbmdpZnkoZmFsbGJhY2spXG4gICAgICApID8/IGZhbGxiYWNrKVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHNldEl0ZW08VD4oa2V5OiBTZXNzaW9uU3RvcmFnZUtleSwgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgQnV5Tm93UHJpY2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2J1eV9ub3dfcHJpY2VcIlxuaW1wb3J0IHR5cGUgeyBDdXJyZW50UHJpY2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2N1cnJlbnRfcHJpY2VcIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB0eXBlIHsgTWFya2V0RW50cnlEYXRhU2V0IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9tYXJrZXRfZW50cnlfZGF0YV9zZXRcIlxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURldGFpbHMobGk6IEhUTUxMSUVsZW1lbnQpOiBNYXJrZXRFbnRyeSB8IG51bGwge1xuICBjb25zdCBuYW1lID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIuYWJzdHJhY3QtbmFtZVwiKT8uaW5uZXJUZXh0XG4gIGNvbnN0IHNyYyA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIuYWJzdHJhY3QtaWNvbiBpbWdcIik/LnNyY1xuXG4gIGNvbnN0IGN1cnJlbnRQcmljZSA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXG4gICAgXCIucHJpY2UtaXRlbVtkYXRhLWJpZHNdXCJcbiAgKT8uZGF0YXNldCBhcyB1bmtub3duIGFzIEN1cnJlbnRQcmljZVxuXG4gIGNvbnN0IGJ1eU5vd1ByaWNlID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcbiAgICBcIi5wcmljZS1pdGVtOm5vdChbZGF0YS1iaWRzXSlcIlxuICApPy5kYXRhc2V0IGFzIHVua25vd24gYXMgQnV5Tm93UHJpY2VcblxuICBpZiAoIXNyYyB8fCAhbmFtZSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4ge1xuICAgIC4uLihsaS5kYXRhc2V0IGFzIHVua25vd24gYXMgTWFya2V0RW50cnlEYXRhU2V0KSxcbiAgICBpY29uOiBzcmMsXG4gICAgbmFtZSxcbiAgICBidXlOb3dQcmljZSxcbiAgICBjdXJyZW50UHJpY2UsXG4gIH1cbn1cbiIsImV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbGljazxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KFxuICBzZWxlY3Rvcjogc3RyaW5nXG4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8VD4oc2VsZWN0b3IpXG4gICAgICBpZiAoIWVsZW1lbnQpIHJldHVyblxuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbClcblxuICAgICAgLy8gU29tZSBlbGVtZW50cyBkb24ndCBoYXZlIHRoZWlyIGNsaWNrIGhhbmRsZXJzIHJlYWR5IHVudGlsIHRoZXkncmVcbiAgICAgIC8vIGhvdmVyZWQuXG4gICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJNb3VzZUV2ZW50XCIpXG4gICAgICBtb3VzZUV2ZW50LmluaXRFdmVudChcIm1vdXNlb3ZlclwiKVxuICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50LmNsaWNrKClcbiAgICAgICAgcmVzb2x2ZShlbGVtZW50KVxuICAgICAgfSwgODAwKVxuICAgIH0sIDgwMClcbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFjdGlvbiB7XG4gIC8qKiBLZXkgYnkgd2hpY2ggdGhlIGBTZXNzaW9uU3RvcmFnZWAgY2FuIHJlZmVyZW5jZSB0aGlzIGFjdGlvbi4gKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkga2V5OiBUYWtlb3ZlckFjdGlvblxuXG4gIC8qKiBEZXRlcm1pbmVzIGlmIHRoaXMgYWN0aW9uIGNhbiBiZSBwZXJmb3JtZWQgZHVyaW5nIGEgdGFrZW92ZXIuICovXG4gIGFic3RyYWN0IGNvbmRpdGlvbigpOiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3Rpb24gYW5kIHJldHVybnMgYHRydWVgIHRoZSBicmFpbiBjYW4gY29udGludWUgd2l0aCBhbm90aGVyXG4gICAqIGFjdGlvbiBvciBgZmFsc2VgIGlmIHRoaXMgYWN0aW9uIGlzbid0IGZpbmlzaGVkIGV4ZWN1dGluZy5cbiAgICovXG4gIGFic3RyYWN0IHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPlxufVxuIiwiaW1wb3J0IHsgYWpheFNlYXJjaCB9IGZyb20gXCIuLi8uLi9hamF4L2FqYXhfc2VhcmNoXCJcbmltcG9ydCB7IGJ1eSB9IGZyb20gXCIuLi8uLi9hamF4L2J1eVwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS93aXNoZWRfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4uLy4uL21hcmtldHBsYWNlL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB7IGdldEl0ZW1EZXRhaWxzIH0gZnJvbSBcIi4uLy4uL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzXCJcbmltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuXG5jbGFzcyBCdXlBY3Rpb24gZXh0ZW5kcyBBY3Rpb24ge1xuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi5idXlcblxuICBwcml2YXRlIGdldCBjdXJyZW50TWFhbmEoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTnVtYmVyKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQW5jaG9yRWxlbWVudD4oXCIjY3VycmVuY3ktbWFhbmFcIik/LmRhdGFzZXRcbiAgICAgICAgLm1hYW5hXG4gICAgKVxuICB9XG5cbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UubWFya2V0ICYmIEJvb2xlYW4oTG9jYWxTdG9yYWdlLndpc2hsaXN0Lmxlbmd0aClcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCFsb2NhdGlvbi5wYXRobmFtZS5zdGFydHNXaXRoKFwiL21hcmtldHBsYWNlXCIpKSB7XG4gICAgICBhd2FpdCBjbGljazxIVE1MQW5jaG9yRWxlbWVudD4oXCIubWFpbi1tZW51LW1hcmtldHBsYWNlIGFcIilcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB3aXNoZWQgb2YgTG9jYWxTdG9yYWdlLndpc2hsaXN0KSB7XG4gICAgICAvLyBDbG90aGVzIG1pZ2h0IGJlIGEgc3BlY2lhbCBleGNlcHRpb24uIElmIHRoZXkgYXJlLCB0aGVuIGNoZWNrIGZvclxuICAgICAgLy8gYHdpc2hlZC50eXBlID09PSBUeXBlLlBsYXllcldlYXJhYmxlSXRlbWAuXG4gICAgICBpZiAod2lzaGVkLmVycm9yKSB7XG4gICAgICAgIENvbnNvbGUud2FybihgU2tpcHBlZCBcIiR7d2lzaGVkLm5hbWV9XCJgLCB3aXNoZWQpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBDb25zb2xlLmluZm8oYFNlYXJjaGluZyBmb3IgXCIke3dpc2hlZC5uYW1lfVwiYCwgd2lzaGVkKVxuXG4gICAgICBsZXQgYW1vdW50ID0gOFxuICAgICAgZm9ycGFnZTogZm9yIChsZXQgcGFnZSA9IDE7IGFtb3VudCA9PT0gODsgcGFnZSsrKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLnNlYXJjaCh3aXNoZWQsIHBhZ2UpXG4gICAgICAgIGFtb3VudCA9IHJlc3VsdHMubGVuZ3RoXG4gICAgICAgIENvbnNvbGUubG9nKGBGb3VuZCAke2Ftb3VudH0gcmVzdWx0c2AsIHJlc3VsdHMpXG5cbiAgICAgICAgY29uc3Qgd2FudGVkID0gcmVzdWx0cy5maWx0ZXIoXG4gICAgICAgICAgcmVzdWx0ID0+XG4gICAgICAgICAgICByZXN1bHQuaWNvbiA9PT0gd2lzaGVkLmljb24gJiZcbiAgICAgICAgICAgIHJlc3VsdC5idXlOb3dQcmljZSAmJlxuICAgICAgICAgICAgTnVtYmVyKHJlc3VsdC5idXlOb3dQcmljZS5wcmljZSkgPD0gd2lzaGVkLnByaWNlICYmXG4gICAgICAgICAgICBOdW1iZXIocmVzdWx0LmJ1eU5vd1ByaWNlLnByaWNlKSA8PSB0aGlzLmN1cnJlbnRNYWFuYVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHdhbnRlZCkge1xuICAgICAgICAgIGlmICghKGF3YWl0IHRoaXMuYnV5KHJlc3VsdCkpKSBicmVhayBmb3JwYWdlXG5cbiAgICAgICAgICBDb25zb2xlLmluZm8oXG4gICAgICAgICAgICBgQm91Z2h0IFwiJHtyZXN1bHQubmFtZX1cIiBmb3IgJHtOdW1iZXIoXG4gICAgICAgICAgICAgIHJlc3VsdC5idXlOb3dQcmljZT8ucHJpY2VcbiAgICAgICAgICAgICl9IG1hYW5hcy5gLFxuICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgKVxuXG4gICAgICAgICAgJC5mbGF2ck5vdGlmKFxuICAgICAgICAgICAgYEJvdWdodCA8c3Ryb25nPiR7XG4gICAgICAgICAgICAgIHJlc3VsdC5uYW1lXG4gICAgICAgICAgICB9PC9zdHJvbmc+IGZvciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7TnVtYmVyKFxuICAgICAgICAgICAgICByZXN1bHQuYnV5Tm93UHJpY2U/LnByaWNlXG4gICAgICAgICAgICApfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnV5KHJlc3VsdDogTWFya2V0RW50cnkpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBqc29uID0gYXdhaXQgYnV5KE51bWJlcihyZXN1bHQuaXRlbWlkKSlcbiAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgdGhpcy5zZXRFcnJvcihyZXN1bHQud2VhcmFibGVpdGVtaWQsIGpzb24uZGF0YSlcbiAgICByZXR1cm4ganNvbi5yZXN1bHQgPT09IFwic3VjY2Vzc1wiXG4gIH1cblxuICAvKiogU2VhcmNoIGZvciBhIHdpc2hlZCBpdGVtIG9uIGEgc3BlY2lmaWMgcGFnZSB1c2luZyB0aGUgaXRlbSdzIG5hbWUuICovXG4gIHByaXZhdGUgYXN5bmMgc2VhcmNoKHdpc2hlZDogV2lzaGVkSXRlbSwgcGFnZSA9IDEpOiBQcm9taXNlPE1hcmtldEVudHJ5W10+IHtcbiAgICBjb25zdCBmaWx0ZXJJdGVtTmFtZSA9XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiI2ZpbHRlci1pdGVtTmFtZVwiKVxuICAgIGlmIChmaWx0ZXJJdGVtTmFtZSkgZmlsdGVySXRlbU5hbWUudmFsdWUgPSB3aXNoZWQubmFtZVxuXG4gICAgY29uc3QgbWFya2V0cGxhY2VTZWFyY2hJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFVMaXN0RWxlbWVudD4oXG4gICAgICBcIi5tYXJrZXRwbGFjZS1zZWFyY2gtaXRlbXNcIlxuICAgIClcbiAgICBpZiAoIW1hcmtldHBsYWNlU2VhcmNoSXRlbXMpIHJldHVybiBbXVxuICAgIG1hcmtldHBsYWNlU2VhcmNoSXRlbXMuaW5uZXJIVE1MID0gYXdhaXQgYWpheFNlYXJjaCh7XG4gICAgICBuYW1lOiB3aXNoZWQubmFtZSxcbiAgICAgIHBhZ2UsXG4gICAgfSlcblxuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgbWFya2V0cGxhY2VTZWFyY2hJdGVtcy5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgICAgICBcIi5tYXJrZXRwbGFjZS1zZWFyY2gtaXRlbVwiXG4gICAgICApXG4gICAgKVxuICAgICAgLm1hcChnZXRJdGVtRGV0YWlscylcbiAgICAgIC5maWx0ZXI8TWFya2V0RW50cnk+KChpdGVtKTogaXRlbSBpcyBNYXJrZXRFbnRyeSA9PiBpdGVtICE9PSBudWxsKVxuICB9XG5cbiAgLyoqIFNldCB0aGUgYFdpc2hlZEl0ZW0uZXJyb3JgIHByb3BlcnR5IHdpdGhvdXQgcmVvcmRlcmluZyB0aGUgd2lzaGxpc3QuICovXG4gIHByaXZhdGUgc2V0RXJyb3Iod2VhcmFibGVpdGVtaWQ6IHN0cmluZywgZXJyb3I6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gICAgY29uc3QgaW5kZXggPSB3aXNobGlzdC5maW5kSW5kZXgoXG4gICAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgPT09IHdlYXJhYmxlaXRlbWlkXG4gICAgKVxuICAgIGNvbnN0IGVudHJ5ID0gd2lzaGxpc3RbaW5kZXhdXG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgICBlbnRyeS5lcnJvciA9IGVycm9yXG4gICAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xuICAgICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXG4gICAgICBlbnRyeSxcbiAgICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcbiAgICBdXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEJ1eUFjdGlvbigpXG4iLCJpbXBvcnQgdHlwZSB7IFBhY2tldCB9IGZyb20gXCIuLi9hcGkvcGFja2V0XCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnV5KGl0ZW1JZDogbnVtYmVyKTogUHJvbWlzZTxQYWNrZXQ8XCJcIj4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvbWFya2V0cGxhY2UvYnV5XCIsXG4gICAgICB7IGlkOiBpdGVtSWQgfSxcbiAgICAgIChqc29uOiBQYWNrZXQ8XCJcIj4pOiB2b2lkID0+IHtcbiAgICAgICAgU2Vzc2lvblN0b3JhZ2UubWV0YSA9IGpzb24ubWV0YVxuICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImpzb25cIlxuICAgIClcbiAgfSlcbn1cbiIsImltcG9ydCB7IEJvZHlMb2NhdGlvbiB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9ib2R5X2xvY2F0aW9uLmVudW1cIlxuaW1wb3J0IHsgQ2F0ZWdvcnlOdW1iZXIgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvY2F0ZWdvcnkuZW51bVwiXG5pbXBvcnQgeyBHdWFyZCB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9ndWFyZC5lbnVtXCJcbmltcG9ydCB7IFJhcml0eSB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9yYXJpdHkuZW51bVwiXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL3R5cGUuZW51bVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhamF4U2VhcmNoKGRhdGE6IHtcbiAgdHlwZT86IFR5cGVcbiAgYm9keUxvY2F0aW9uPzogQm9keUxvY2F0aW9uXG4gIGNhdGVnb3J5PzogQ2F0ZWdvcnlOdW1iZXJcbiAgcmFyaXR5PzogUmFyaXR5XG4gIHByaWNlPzogbnVtYmVyIHwgXCJcIlxuICBndWFyZD86IEd1YXJkXG4gIC8qKiBQYWdlIG51bWJlciwgaW5kZXhlZCBieSAxICovXG4gIHBhZ2U6IG51bWJlclxuICBuYW1lPzogc3RyaW5nXG59KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgZGF0YSA9IHtcbiAgICAuLi57XG4gICAgICB0eXBlOiBUeXBlLkFsbCxcbiAgICAgIGJvZHlMb2NhdGlvbjogQm9keUxvY2F0aW9uLkFsbCxcbiAgICAgIGNhdGVnb3J5OiBDYXRlZ29yeU51bWJlci5hbGwsXG4gICAgICByYXJpdHk6IFJhcml0eS5hbGwsXG4gICAgICBwcmljZTogXCJcIixcbiAgICAgIGd1YXJkOiBHdWFyZC5hbnksXG4gICAgICBwYWdlOiAxLFxuICAgICAgbmFtZTogXCJcIixcbiAgICB9LFxuICAgIC4uLmRhdGEsXG4gIH1cblxuICBjb25zdCBJVEVNU19QRVJfUEFHRSA9IDhcblxuICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHZvaWQgJC5nZXQoXG4gICAgICBcIi9tYXJrZXRwbGFjZS9hamF4X3NlYXJjaFwiLFxuICAgICAge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBmcm9tOiAoZGF0YS5wYWdlIC0gMSkgKiBJVEVNU19QRVJfUEFHRSxcbiAgICAgICAgdG86IElURU1TX1BFUl9QQUdFLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmVcbiAgICApXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgcmVzZXRUYWtlb3ZlciB9IGZyb20gXCIuLi9icmFpblwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5cbmNsYXNzIERhaWx5QWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24uZGFpbHlcblxuICAvKiogQ2hlY2tzIGlmIHRoZSBkYWlseSBtYWFuYSBnaWZ0IGlmIHRoZXJlLiAqL1xuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGFpbHlHaWZ0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYWlseS1naWZ0LWNvbnRhaW5lclwiKVxuICAgIHJldHVybiAoXG4gICAgICAhIWRhaWx5R2lmdENvbnRhaW5lciAmJlxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkYWlseUdpZnRDb250YWluZXIpLmRpc3BsYXkgIT09IFwibm9uZVwiXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrIG9uIHRoZSBkYWlseSBtYWFuYSBnaWZ0LlxuICAgKiBAcmV0dXJucyBgZmFsc2VgLiBUaGlzIGFjdGlvbiBkb2VzIG5vdCBwZXJmb3JtIG1lYW5pbmdmdWwgYWN0aW9ucyBvbiB0aGVcbiAgICogcGFnZS5cbiAgICovXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZGFpbHlHaWZ0Q29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkYWlseS1naWZ0LWNvbnRhaW5lclwiKVxuICAgIGlmIChcbiAgICAgICFkYWlseUdpZnRDb250YWluZXIgfHxcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZGFpbHlHaWZ0Q29udGFpbmVyKS5kaXNwbGF5ID09PSBcIm5vbmVcIlxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgZGFpbHlHaWZ0Q29udGFpbmVyLmNsaWNrKClcbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIuZmlyc3QtY29ubmV4aW9uIC5mbGF2ci1idXR0b24uZGVmYXVsdFwiKVxuXG4gICAgcmVzZXRUYWtlb3ZlcigpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IERhaWx5QWN0aW9uKClcbiIsImltcG9ydCB0eXBlIHsgQ2hhbmdlUmVnaW9uRGF0YSB9IGZyb20gXCIuLi9hcGkvY2hhbmdlX3JlZ2lvbl9kYXRhXCJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGFuZ2VSZWdpb24oXG4gIG5ld1JlZ2lvbklkOiBudW1iZXJcbik6IFByb21pc2U8UGFja2V0PENoYW5nZVJlZ2lvbkRhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8Q2hhbmdlUmVnaW9uRGF0YT4+KChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9wZXQvY2hhbmdlUmVnaW9uXCIsXG4gICAgICB7IG5ld1JlZ2lvbklkIH0sXG4gICAgICAoanNvbjogUGFja2V0PENoYW5nZVJlZ2lvbkRhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIFNlc3Npb25TdG9yYWdlLm1ldGEgPSBqc29uLm1ldGFcbiAgICAgICAgcmVzb2x2ZShqc29uKVxuXG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAkLmZsYXZyTm90aWYoanNvbi5kYXRhKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFJlZ2lvbiA9IGpzb24uZGF0YS5jdXJyZW50UmVnaW9uXG5cbiAgICAgICAgcGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uID1cbiAgICAgICAgICB0eXBlb2YganNvbi5kYXRhLnBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IGpzb24uZGF0YS5wZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb25cblxuICAgICAgICB0aW1lTGVmdEV4cGxvcmF0aW9uID1cbiAgICAgICAgICB0eXBlb2YganNvbi5kYXRhLnRpbWVMZWZ0RXhwbG9yYXRpb24gPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgOiBqc29uLmRhdGEudGltZUxlZnRFeHBsb3JhdGlvblxuICAgICAgfVxuICAgIClcbiAgfSlcbn1cbiIsImV4cG9ydCBlbnVtIFJlc3VsdCB7XG4gIGVycm9yID0gXCJlcnJvclwiLFxuICBzdWNjZXNzID0gXCJzdWNjZXNzXCIsXG59XG4iLCJleHBvcnQgZW51bSBFeHBsb3JhdGlvblN0YXR1cyB7XG4gIGlkbGUsXG4gIHJlc3VsdCxcbiAgY2FwdHVyZSxcbiAgcGVuZGluZyxcbn1cbiIsImltcG9ydCB7IGNhcHR1cmVFbmQgfSBmcm9tIFwiLi4vLi4vYWpheC9jYXB0dXJlX2VuZFwiXG5pbXBvcnQgeyBjaGFuZ2VSZWdpb24gfSBmcm9tIFwiLi4vLi4vYWpheC9jaGFuZ2VfcmVnaW9uXCJcbmltcG9ydCB7IGV4cGxvcmF0aW9uUmVzdWx0cyB9IGZyb20gXCIuLi8uLi9hamF4L2V4cGxvcmF0aW9uX3Jlc3VsdHNcIlxuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4uLy4uL2FwaS9yZXN1bHQuZW51bVwiXG5pbXBvcnQgeyBDb25zb2xlIH0gZnJvbSBcIi4uLy4uL2NvbnNvbGVcIlxuaW1wb3J0IHsgRHVyYXRpb25Vbml0IH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCJcbmltcG9ydCB0eXBlIHsgTWFwUmVnaW9uLCBTZWFzb24gfSBmcm9tIFwiLi4vLi4vZWxkYXJ5YS9jdXJyZW50X3JlZ2lvblwiXG5pbXBvcnQgdHlwZSB7IFBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiB9IGZyb20gXCIuLi8uLi9lbGRhcnlhL3RyZWFzdXJlXCJcbmltcG9ydCB0eXBlIHsgQXV0b0V4cGxvcmVMb2NhdGlvbiB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2F1dG9fZXhwbG9yZV9sb2NhdGlvblwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IGNsaWNrIH0gZnJvbSBcIi4uL2NsaWNrXCJcbmltcG9ydCB7IEV4cGxvcmF0aW9uU3RhdHVzIH0gZnJvbSBcIi4uL2V4cGxvcmF0aW9uX3N0YXR1cy5lbnVtXCJcbmltcG9ydCB0eXBlIHsgU3RhcnRFeHBsb3JhdGlvbiB9IGZyb20gXCIuLi9zdGFydF9leHBsb3JhdGlvblwiXG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi9hY3Rpb25cIlxuXG5jbGFzcyBFeHBsb3JhdGlvbkFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLmV4cGxvcmF0aW9uc1xuXG4gIHByaXZhdGUgZ2V0IGdsb2JhbHMoKToge1xuICAgIGN1cnJlbnRSZWdpb246IE1hcFJlZ2lvblxuICAgIHBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbjogUGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uIHwgbnVsbFxuICAgIHRpbWVMZWZ0RXhwbG9yYXRpb246IG51bWJlciB8IG51bGxcbiAgfSB7XG4gICAgcmV0dXJuIHsgY3VycmVudFJlZ2lvbiwgcGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uLCB0aW1lTGVmdEV4cGxvcmF0aW9uIH1cbiAgfVxuXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9ucyAmJlxuICAgICAgIVNlc3Npb25TdG9yYWdlLmV4cGxvcmF0aW9uc0RvbmUgJiZcbiAgICAgICEhTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLmxlbmd0aFxuICAgIClcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9wZXRcIikge1xuICAgICAgYXdhaXQgY2xpY2s8SFRNTEFuY2hvckVsZW1lbnQ+KFwiLm1haW4tbWVudS1wZXQgYVwiKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHRoaXMuZ2V0RXhwbG9yYXRpb25TdGF0dXMoKSkge1xuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5pZGxlOlxuICAgICAgICBpZiAoIShhd2FpdCB0aGlzLnN0YXJ0RXhwbG9yYXRpb24oKSkuc2VsZWN0ZWQpXG4gICAgICAgICAgU2Vzc2lvblN0b3JhZ2UuZXhwbG9yYXRpb25zRG9uZSA9IHRydWVcbiAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGNhc2UgRXhwbG9yYXRpb25TdGF0dXMucGVuZGluZzpcbiAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLndhaXRFeHBsb3JhdGlvbigpKSAmJiB0aGlzLnBlcmZvcm0oKVxuXG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLnJlc3VsdDpcbiAgICAgICAgYXdhaXQgdGhpcy5lbmRFeHBsb3JhdGlvbigpXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm0oKVxuXG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLmNhcHR1cmU6XG4gICAgICAgIGF3YWl0IHRoaXMuZW5kQ2FwdHVyZSgpXG4gICAgICAgIHJldHVybiB0aGlzLnBlcmZvcm0oKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsaWNrRXhwbG9yZSgpOiBQcm9taXNlPEhUTUxCdXR0b25FbGVtZW50PiB7XG4gICAgcmV0dXJuIGNsaWNrKFwiI2V4cGxvcmUtYnV0dG9uXCIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsaWNrTG9jYXRpb24oXG4gICAgc2VsZWN0ZWQ6IEF1dG9FeHBsb3JlTG9jYXRpb25cbiAgKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICAgIHJldHVybiBjbGljazxIVE1MRGl2RWxlbWVudD4oXG4gICAgICBgLm1hcC1sb2NhdGlvbltkYXRhLWlkPVwiJHtzZWxlY3RlZC5sb2NhdGlvbi5pZH1cIl1gXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjbGlja1JlZ2lvbihzZWxlY3RlZDogQXV0b0V4cGxvcmVMb2NhdGlvbik6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgZGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICBgLm1pbmltYXBbZGF0YS1tYXBpZD1cIiR7c2VsZWN0ZWQucmVnaW9uLmlkfVwiXWBcbiAgICApXG5cbiAgICBpZiAoIWRpdikge1xuICAgICAgLy8gQ2xlYXJpbmcgaW52YWxpZCByZWdpb25zIGlzIHVzZWZ1bCB0byByZW1vdmUgZmluaXNoZWQgZXZlbnRzLlxuICAgICAgTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zID1cbiAgICAgICAgTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLmZpbHRlcihcbiAgICAgICAgICBzYXZlZCA9PiBzYXZlZC5yZWdpb24uaWQgIT09IHNlbGVjdGVkLnJlZ2lvbi50b1N0cmluZygpXG4gICAgICAgIClcblxuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGxcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGRpdi5jbGljaygpXG4gICAgcmV0dXJuIGRpdlxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjbGlja1NlYXNvbigpOiBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2s8SFRNTEltYWdlRWxlbWVudD4oXCIjY3J5c3RhbC1pbWFnZXMtY29udGFpbmVyXCIpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuZENhcHR1cmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHZvaWQgbmV3IEF1ZGlvKFxuICAgICAgICBcIi9zdGF0aWMvZXZlbnQvMjAyMS9tdXNpYy9zb3VuZHMvbWlzc2lvbi1jb21wbGV0ZS5tcDNcIlxuICAgICAgKS5wbGF5KClcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG5cbiAgICBhd2FpdCBjbGljazxIVE1MQnV0dG9uRWxlbWVudD4oXCIjb3Blbi1jYXB0dXJlLWludGVyZmFjZVwiKVxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIiNjYXB0dXJlLWJ1dHRvblwiKVxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIiNjbG9zZS1yZXN1bHRcIilcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5kRXhwbG9yYXRpb24oKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICAgIHJldHVybiBjbGljayhcIiNjbG9zZS1yZXN1bHRcIilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFNlYXNvbigpOiBTZWFzb24ge1xuICAgIHJldHVybiA8U2Vhc29uPihBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpPy5jbGFzc0xpc3QgPz8gW10pXG4gICAgICAuZmluZChjID0+IGMuc3RhcnRzV2l0aChcInNlYXNvbi1cIikpXG4gICAgICA/LnJlcGxhY2UoXCJzZWFzb24tXCIsIFwiXCIpID8/IG51bGwpXG4gIH1cblxuICBwcml2YXRlIGdldEV4cGxvcmF0aW9uU3RhdHVzKCk6IEV4cGxvcmF0aW9uU3RhdHVzIHtcbiAgICBpZiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI29wZW4tY2FwdHVyZS1pbnRlcmZhY2VcIikgfHxcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2FwdHVyZS1pbnRlcmZhY2Utb3V0ZXIuYWN0aXZlXCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gRXhwbG9yYXRpb25TdGF0dXMuY2FwdHVyZVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI3BlbmRpbmctbWFwLWxvY2F0aW9uLWRhdGEtb3V0ZXIuYWN0aXZlXCIpIHx8XG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21hcC1jb250YWluZXIucGVuZGluZ1wiKVxuICAgICkge1xuICAgICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLnBlbmRpbmdcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdHJlYXN1cmUtaHVudC1yZXN1bHQtb3ZlcmxheS5hY3RpdmVcIikpXG4gICAgICByZXR1cm4gRXhwbG9yYXRpb25TdGF0dXMucmVzdWx0XG4gICAgcmV0dXJuIEV4cGxvcmF0aW9uU3RhdHVzLmlkbGVcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG93ZXN0RW5lcmd5TG9jYXRpb24oKTogQXV0b0V4cGxvcmVMb2NhdGlvbiB7XG4gICAgcmV0dXJuIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5yZWR1Y2UoKGxvd2VzdCwgcGxhY2UpID0+XG4gICAgICBOdW1iZXIocGxhY2UubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpIDxcbiAgICAgIE51bWJlcihsb3dlc3QubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpXG4gICAgICAgID8gcGxhY2VcbiAgICAgICAgOiBsb3dlc3RcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkTG9jYXRpb24oKTogQXV0b0V4cGxvcmVMb2NhdGlvbiB8IG51bGwge1xuICAgIGxldCBzZWxlY3RlZCA9IFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb25cbiAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0TG9jYXRpb24oKVxuICAgICAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IHNlbGVjdGVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdGVkXG4gIH1cblxuICBwcml2YXRlIHNlbGVjdExvY2F0aW9uKCk6IEF1dG9FeHBsb3JlTG9jYXRpb24gfCBudWxsIHtcbiAgICBjb25zdCBhZmZvcmRhYmxlID0gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLmZpbHRlcihcbiAgICAgIHNhdmVkID0+IE51bWJlcihzYXZlZC5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPD0gcGV0RW5lcmd5XG4gICAgKVxuXG4gICAgY29uc3QgbWluaW11bUVuZXJneSA9IHRoaXMuZ2V0TG93ZXN0RW5lcmd5TG9jYXRpb24oKVxuICAgIGNvbnN0IG5vdERlYWRFbmQgPSBhZmZvcmRhYmxlLmZpbHRlcihcbiAgICAgIHBsYWNlID0+XG4gICAgICAgIHBldEVuZXJneSAtIE51bWJlcihwbGFjZS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPj1cbiAgICAgICAgTnVtYmVyKG1pbmltdW1FbmVyZ3kubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpXG4gICAgKVxuICAgIGlmIChub3REZWFkRW5kLmxlbmd0aClcbiAgICAgIHJldHVybiBub3REZWFkRW5kW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG5vdERlYWRFbmQubGVuZ3RoKV0gPz8gbnVsbFxuXG4gICAgY29uc3Qgc2FtZUVuZXJneSA9IGFmZm9yZGFibGUuZmlsdGVyKFxuICAgICAgcGxhY2UgPT4gTnVtYmVyKHBsYWNlLmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSA9PT0gcGV0RW5lcmd5XG4gICAgKVxuICAgIGlmIChzYW1lRW5lcmd5Lmxlbmd0aClcbiAgICAgIHJldHVybiBzYW1lRW5lcmd5W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNhbWVFbmVyZ3kubGVuZ3RoKV0gPz8gbnVsbFxuXG4gICAgcmV0dXJuIGFmZm9yZGFibGVbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogYWZmb3JkYWJsZS5sZW5ndGgpXSA/PyBudWxsXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0RXhwbG9yYXRpb24oKTogUHJvbWlzZTxTdGFydEV4cGxvcmF0aW9uPiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkTG9jYXRpb24oKVxuICAgIGlmICghc2VsZWN0ZWQpIHJldHVybiB7IGV4cGxvcmluZzogZmFsc2UsIHNlbGVjdGVkIH1cbiAgICBDb25zb2xlLmluZm8oXCJFeHBsb3JpbmdcIiwgc2VsZWN0ZWQpXG5cbiAgICAvLyBHbyB0byBzZWFzb25cbiAgICBpZiAoXG4gICAgICBzZWxlY3RlZC5yZWdpb24uc2Vhc29uICYmXG4gICAgICB0aGlzLmdldEN1cnJlbnRTZWFzb24oKSAhPT0gc2VsZWN0ZWQucmVnaW9uLnNlYXNvblxuICAgICkge1xuICAgICAgYXdhaXQgdGhpcy5jbGlja1NlYXNvbigpXG4gICAgICByZXR1cm4geyBleHBsb3Jpbmc6IGZhbHNlLCBzZWxlY3RlZCB9XG4gICAgfVxuXG4gICAgLy8gR28gdG8gcmVnaW9uXG4gICAgdGhpcy5jbGlja1JlZ2lvbihzZWxlY3RlZClcblxuICAgIC8vIEdvIHRvIGxvY2F0aW9uXG4gICAgYXdhaXQgdGhpcy5jbGlja0xvY2F0aW9uKHNlbGVjdGVkKVxuICAgIGF3YWl0IHRoaXMuY2xpY2tFeHBsb3JlKClcblxuICAgIFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb24gPSBudWxsXG4gICAgcmV0dXJuIHsgZXhwbG9yaW5nOiB0cnVlLCBzZWxlY3RlZCB9XG4gIH1cblxuICAvKipcbiAgICogV2FpdCBmb3IgdXAgdG8gMTAgbWludXRlcy5cbiAgICogQHJldHVybnMgd2hldGhlciB0aGUgZXhwbG9yYXRpb24gaXMgZmluaXNoZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRFeHBsb3JhdGlvbihcbiAgICBzZWxlY3RlZD86IEF1dG9FeHBsb3JlTG9jYXRpb25cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgICAgYC5taW5pbWFwW2RhdGEtbWFwaWQ9XCIke3NlbGVjdGVkPy5yZWdpb24uaWQgPz8gY3VycmVudFJlZ2lvbi5pZH1cIl1gXG4gICAgICApXG4gICAgICA/LmNsaWNrKClcblxuICAgIGxldCBtcyA9IDMgKiBEdXJhdGlvblVuaXQuc2Vjb25kXG4gICAgaWYgKHNlbGVjdGVkKSBtcyArPSBzZWxlY3RlZC5sb2NhdGlvbi50aW1lVG9FeHBsb3JlICogRHVyYXRpb25Vbml0Lm1pbnV0ZVxuICAgIGVsc2UgaWYgKHRpbWVMZWZ0RXhwbG9yYXRpb24gJiYgdGltZUxlZnRFeHBsb3JhdGlvbiA+IDApXG4gICAgICBtcyArPSB0aW1lTGVmdEV4cGxvcmF0aW9uICogRHVyYXRpb25Vbml0LnNlY29uZFxuICAgIGVsc2UgaWYgKFxuICAgICAgIXBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvbiAmJlxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNtYXAtY29udGFpbmVyLnBlbmRpbmdcIilcbiAgICApIHtcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBleHBsb3JhdGlvblJlc3VsdHMoKVxuICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBSZXN1bHQuc3VjY2VzcykgcmV0dXJuIGZhbHNlXG5cbiAgICAgIGNvbnN0IGNhcHR1cmUgPSBqc29uLmRhdGEucmVzdWx0cy5maW5kKFxuICAgICAgICByZXN1bHQgPT4gcmVzdWx0LnR5cGUgPT09IFwiY2FwdHVyZVwiXG4gICAgICApXG4gICAgICBpZiAoIWNhcHR1cmUpIHJldHVybiBmYWxzZVxuICAgICAgYXdhaXQgY2FwdHVyZUVuZCgpXG5cbiAgICAgIC8vIFJlbG9hZGluZyBpcyB0aGUgb25seSBwb3NzaWJsZSBhY3Rpb24gaWYgdGhlIGV4cGxvcmF0aW9uIGZpbmlzaGVkIGluIGFcbiAgICAgIC8vIGRpZmZlcmVudCByZWdpb24uXG4gICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICBcIlJlbG9hZGluZyBiZWNhdXNlIHRoZSBleHBsb3JhdGlvbiBpcyBpbiBhbm90aGVyIHJlZ2lvbi5cIixcbiAgICAgICAgdGhpcy5nbG9iYWxzXG4gICAgICApXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgRHVyYXRpb25Vbml0Lm1pbnV0ZSkpXG4gICAgICBsb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAobXMgPiAxMCAqIER1cmF0aW9uVW5pdC5taW51dGUpIHJldHVybiBmYWxzZVxuXG4gICAgQ29uc29sZS5sb2coXG4gICAgICBgV2FpdGluZyBmb3IgdGhlIGV4cGxvcmF0aW9uIHRvIGVuZCBpbiAke01hdGguY2VpbChcbiAgICAgICAgbXMgLyBEdXJhdGlvblVuaXQuc2Vjb25kXG4gICAgICApfSBzZWNvbmRzLi4uYCxcbiAgICAgIHRoaXMuZ2xvYmFsc1xuICAgIClcbiAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKVxuICAgIGF3YWl0IGNoYW5nZVJlZ2lvbihOdW1iZXIoc2VsZWN0ZWQ/LnJlZ2lvbi5pZCA/PyBjdXJyZW50UmVnaW9uLmlkKSlcblxuICAgIGlmIChcbiAgICAgIHRoaXMuZ2V0RXhwbG9yYXRpb25TdGF0dXMoKSA9PT0gRXhwbG9yYXRpb25TdGF0dXMucGVuZGluZyAmJlxuICAgICAgdGltZUxlZnRFeHBsb3JhdGlvbiAmJlxuICAgICAgdGltZUxlZnRFeHBsb3JhdGlvbiA8IDBcbiAgICApIHtcbiAgICAgIENvbnNvbGUuaW5mbyhcbiAgICAgICAgXCJSZWxvYWRpbmcgYmVjYXVzZSB0aGUgdGltZXIgaXMgZGVzeW5jaHJvbmlzZWQuXCIsXG4gICAgICAgIHRoaXMuZ2xvYmFsc1xuICAgICAgKVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIER1cmF0aW9uVW5pdC5zZWNvbmQpKVxuICAgICAgbG9jYXRpb24ucmVsb2FkKClcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBFeHBsb3JhdGlvbkFjdGlvbigpXG4iLCJpbXBvcnQgdHlwZSB7IEV4cGxvcmF0aW9uUmVzdWx0c0RhdGEgfSBmcm9tIFwiLi4vYXBpL2V4cGxvcmF0aW9uX3Jlc3VsdHNfZGF0YVwiXG5pbXBvcnQgdHlwZSB7IFBhY2tldCB9IGZyb20gXCIuLi9hcGkvcGFja2V0XCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhwbG9yYXRpb25SZXN1bHRzKCk6IFByb21pc2U8XG4gIFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPlxuPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4+KChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9wZXQvZXhwbG9yYXRpb25SZXN1bHRzXCIsXG4gICAgICAoanNvbjogUGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIFNlc3Npb25TdG9yYWdlLm1ldGEgPSBqc29uLm1ldGFcbiAgICAgICAgcmVzb2x2ZShqc29uKVxuXG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAkLmZsYXZyTm90aWYoanNvbi5kYXRhKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBFeHBsb3JhdGlvblJlc3VsdHNEYXRhIH0gZnJvbSBcIi4uL2FwaS9leHBsb3JhdGlvbl9yZXN1bHRzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNhcHR1cmVFbmQoKTogUHJvbWlzZTxQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIHZvaWQgJC5wb3N0KFxuICAgICAgXCIvcGV0L2NhcHR1cmUvZW5kXCIsXG4gICAgICAoanNvbjogUGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgIFNlc3Npb25TdG9yYWdlLm1ldGEgPSBqc29uLm1ldGFcbiAgICAgICAgcmVzb2x2ZShqc29uKVxuXG4gICAgICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAkLmZsYXZyTm90aWYoanNvbi5kYXRhKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcblxuZXhwb3J0IGNvbnN0IGZsYXBweTogTWluaWdhbWUgPSB7XG4gIG5hbWU6IFwiRmxhcHB5XCIsXG4gIHNjb3JlTWluOiAxODAsXG4gIHNjb3JlTWF4OiAyMDAsXG4gIGRlbGF5TWluOiA2MF8wMDAsXG4gIGRlbGF5TWF4OiA3MF8wMDAsXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9idWJibHRlbXBsZVwiXSAubmwtYnV0dG9uJyxcbn1cbiIsImltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi9taW5pZ2FtZVwiXG5cbmV4cG9ydCBjb25zdCBoYXRjaGxpbmdzOiBNaW5pZ2FtZSA9IHtcbiAgbmFtZTogXCJIYXRjaGxpbmdzXCIsXG4gIHNjb3JlTWluOiAxOCxcbiAgc2NvcmVNYXg6IDIwLFxuICBkZWxheU1pbjogMzBfMDAwLFxuICBkZWxheU1heDogMzBfMDAwLFxuICBidXR0b25TZWxlY3RvcjogJy5taW5pZ2FtZS1zdGFydCBbaHJlZj1cIi9taW5pZ2FtZXMvY29jb29uaW5waWNrXCJdIC5ubC1idXR0b24nLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcblxuZXhwb3J0IGNvbnN0IHBlZ2dsZTogTWluaWdhbWUgPSB7XG4gIG5hbWU6IFwiUGVnZ2xlXCIsXG4gIHNjb3JlTWluOiA5LFxuICBzY29yZU1heDogMTAsXG4gIGRlbGF5TWluOiAxMF8wMDAsXG4gIGRlbGF5TWF4OiAyMF8wMDAsXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9nZW1ib21iXCJdIC5ubC1idXR0b24nLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBHZXRQcml6ZXNEYXRhIH0gZnJvbSBcIi4uL2FwaS9nZXRfcHJpemVzX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgdHlwZSB7IFN0YXJ0R2FtZURhdGEgfSBmcm9tIFwiLi4vYXBpL3N0YXJ0X2dhbWVfZGF0YVwiXG5pbXBvcnQgXCIuLi9lbGRhcnlhL2pxdWVyeVwiXG5pbXBvcnQgeyBmbGFwcHkgfSBmcm9tIFwiLi9mbGFwcHlcIlxuaW1wb3J0IHsgaGF0Y2hsaW5ncyB9IGZyb20gXCIuL2hhdGNobGluZ3NcIlxuaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcbmltcG9ydCB7IHBlZ2dsZSB9IGZyb20gXCIuL3BlZ2dsZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwbGF5UGVnZ2xlKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gcGxheShwZWdnbGUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwbGF5RmxhcHB5KCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gcGxheShmbGFwcHkpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwbGF5SGF0Y2hsaW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHBsYXkoaGF0Y2hsaW5ncylcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGxheShtaW5pZ2FtZTogTWluaWdhbWUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gRGlzYWJsZSBidXR0b25zXG4gIGF3YWl0IG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEJ1dHRvbkVsZW1lbnQ+KFxuICAgICAgICBcIi5taW5pZ2FtZXMtcnVsZXMgLmZsYXZyLWJ1dHRvblwiXG4gICAgICApXG5cbiAgICAgIGlmIChidXR0b25zLmxlbmd0aCkge1xuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIGJ1dHRvbnMpIHtcbiAgICAgICAgICBidXR0b24uY2xhc3NMaXN0LmFkZChcImRpc2FibGVkXCIpXG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICB9XG4gICAgfSwgMjUwKVxuICB9KVxuXG4gIGNvbnN0IGpzb24gPSBhd2FpdCBleGVjdXRlKG1pbmlnYW1lKVxuICAkLmZsYXZyTm90aWYoYFBsYXlpbmcgPHN0cm9uZz4ke21pbmlnYW1lLm5hbWV9PC9zdHJvbmc+Li4uYClcblxuICBjb25zdCBnYW1lVG9rZW4gPSBqc29uLmRhdGFcbiAgY29uc3Qgc2NvcmUgPSByYW5kb21JbnQobWluaWdhbWUuc2NvcmVNaW4sIG1pbmlnYW1lLnNjb3JlTWF4KVxuICBjb25zdCBlbmNfdG9rZW4gPSB4b3JFbmNvZGUoZ2FtZVRva2VuLCBzY29yZS50b1N0cmluZygpKVxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCByYW5kb21JbnQobWluaWdhbWUuZGVsYXlNaW4sIG1pbmlnYW1lLmRlbGF5TWF4KSlcbiAgKVxuXG4gIGF3YWl0IGdldFByaXplcyhtaW5pZ2FtZSwgZ2FtZVRva2VuLCBzY29yZSlcbiAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHJhbmRvbUludCgxMDAwLCAzMDAwKSkpXG5cbiAgYXdhaXQgc2VuZChlbmNfdG9rZW4sIHNjb3JlLCBtaW5pZ2FtZS5uYW1lLnRvTG93ZXJDYXNlKCkpXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCByYW5kb21JbnQoMTAwMCwgMzAwMCkpKVxufVxuXG5mdW5jdGlvbiByYW5kb21JbnQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSArIG1pbilcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZShtaW5pZ2FtZTogTWluaWdhbWUpOiBQcm9taXNlPFBhY2tldDxTdGFydEdhbWVEYXRhPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBSZWNhcHRjaGEgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIFJlY2FwdGNoYS5leGVjdXRlKFxuICAgICAgICBgbWluaWdhbWVTdGFydCR7bWluaWdhbWUubmFtZX1gLFxuICAgICAgICAodG9rZW4pOiB2b2lkID0+XG4gICAgICAgICAgdm9pZCBzdGFydEdhbWUobWluaWdhbWUsIHRva2VuKS50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdClcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCBzdGFydEdhbWUobWluaWdhbWUpLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KVxuICAgIH1cbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RhcnRHYW1lKFxuICBtaW5pZ2FtZTogTWluaWdhbWUsXG4gIHJlY2FwdGNoYVRva2VuPzogc3RyaW5nXG4pOiBQcm9taXNlPFBhY2tldDxTdGFydEdhbWVEYXRhPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PihcbiAgICAocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgICAgdm9pZCAkLmFqYXgoe1xuICAgICAgICB1cmw6IFwiL21pbmlnYW1lcy9hamF4X3N0YXJ0R2FtZVwiLFxuICAgICAgICB0eXBlOiBcInBvc3RcIixcbiAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxuICAgICAgICBkYXRhOiByZWNhcHRjaGFUb2tlblxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBnYW1lOiBtaW5pZ2FtZS5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHJlY2FwdGNoYVRva2VuOiByZWNhcHRjaGFUb2tlbixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgZ2FtZTogbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgc3VjY2VzczogKGpzb246IFBhY2tldDxTdGFydEdhbWVEYXRhPik6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlc29sdmUoanNvbilcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICByZWplY3QoKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgKVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRQcml6ZXMoXG4gIG1pbmlnYW1lOiBNaW5pZ2FtZSxcbiAgZ2FtZVRva2VuOiBzdHJpbmcsXG4gIHNjb3JlOiBudW1iZXJcbik6IFByb21pc2U8UGFja2V0PEdldFByaXplc0RhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8R2V0UHJpemVzRGF0YT4+KFxuICAgIChyZXNvbHZlKTogdm9pZCA9PlxuICAgICAgdm9pZCAkLnBvc3QoXG4gICAgICAgIFwiL21pbmlnYW1lcy9hamF4X2dldFByaXplc1wiLFxuICAgICAgICB7IGdhbWU6IG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSwgc2NvcmU6IHNjb3JlIH0sXG4gICAgICAgIChqc29uOiBQYWNrZXQ8R2V0UHJpemVzRGF0YT4pOiB2b2lkID0+IHtcbiAgICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgICBpZiAoanNvbi5yZXN1bHQgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgJC5mbGF2ck5vdGlmKFxuICAgICAgICAgICAgICBgUGxheWVkIDxzdHJvbmc+JHttaW5pZ2FtZS5uYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke2pzb24uZGF0YS5tYWFuYX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPi5gXG4gICAgICAgICAgICApXG4gICAgICAgICAgZWxzZSAkLmZsYXZyTm90aWYoanNvbi5kYXRhKVxuICAgICAgICB9LFxuICAgICAgICBcImpzb25cIlxuICAgICAgKS5mYWlsKCgpID0+XG4gICAgICAgIHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlc29sdmUoZ2V0UHJpemVzKG1pbmlnYW1lLCBnYW1lVG9rZW4sIHNjb3JlKSlcbiAgICAgICAgfSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKVxuICAgICAgKVxuICApXG59XG5cbi8qKlxuICogU8OpY3VyaXNhdGlvbiBkZSBsJ2Vudm9pIGR1IHNjb3JlXG4gKiBCYXPDqSBzdXIgbCdlbmNvZGFnZSBYT1IgOiBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1hPUl9jaXBoZXJcbiAqIEVmZmVjdHVlIHVuIFhPUiBiaXQgw6AgYml0IGVudHJlIHVuZSBjaGFpbmUgZXQgdW5lIGNsw6lcbiAqL1xuZnVuY3Rpb24geG9yRW5jb2RlKHN0cjogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEFzc3VyZSBxdWUgbGVzIGRldXggcGFyYW3DqHRyZXMgc29pZW50IGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVcbiAgc3RyID0gc3RyLnRvU3RyaW5nKClcbiAga2V5ID0ga2V5LnRvU3RyaW5nKClcblxuICAvKiogRW5jb2RhZ2UgWE9SICovXG4gIGxldCB4b3IgPSBcIlwiXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IHRtcCA9IHN0cltpXVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwga2V5Lmxlbmd0aDsgKytqKSB7XG4gICAgICB0bXAgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRtcCEuY2hhckNvZGVBdCgwKSBeIGtleS5jaGFyQ29kZUF0KGopKVxuICAgIH1cbiAgICB4b3IgKz0gdG1wXG4gIH1cblxuICAvLyBSZW52b2llIGxlIHLDqXN1bHRhdCBlbiBlbmNvZGFudCBsZXMgY2FyYWN0w6hyZXMgc3DDqWNpYXV4IHBvdXZhbnQgcG9zZXIgcHJvYmzDqG1lIChcXG4gcGFyIGV4ZW1wbGUpXG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoeG9yKVxufVxuXG5hc3luYyBmdW5jdGlvbiBzZW5kKFxuICBlbmNfdG9rZW46IHN0cmluZyxcbiAgc2NvcmU6IG51bWJlcixcbiAgZ2FtZTogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGlmICh0eXBlb2YgUmVjYXB0Y2hhICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBSZWNhcHRjaGEuZXhlY3V0ZShcbiAgICAgICAgXCJtaW5pZ2FtZVNhdmVcIiArIGdhbWUsXG4gICAgICAgIChyZWNhcHRjaGFUb2tlbik6IHZvaWQgPT5cbiAgICAgICAgICB2b2lkIHNhdmVTY29yZShlbmNfdG9rZW4sIHNjb3JlLCBnYW1lLCByZWNhcHRjaGFUb2tlbikudGhlbihyZXNvbHZlKVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIHNhdmVTY29yZShlbmNfdG9rZW4sIHNjb3JlLCBnYW1lKS50aGVuKHJlc29sdmUpXG4gICAgfVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlU2NvcmUoXG4gIGVuY190b2tlbjogc3RyaW5nLFxuICBzY29yZTogbnVtYmVyLFxuICBnYW1lOiBzdHJpbmcsXG4gIHJlY2FwdGNoYVRva2VuPzogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IHRva2VuID0gZGVjb2RlVVJJQ29tcG9uZW50KGVuY190b2tlbilcblxuICAgIHZvaWQgJC5hamF4KHtcbiAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgdXJsOiBcIi9taW5pZ2FtZXMvYWpheF9zYXZlU2NvcmVcIixcbiAgICAgIGRhdGE6IHJlY2FwdGNoYVRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICAgICAgc2NvcmU6IHNjb3JlLFxuICAgICAgICAgICAgZ2FtZTogZ2FtZSxcbiAgICAgICAgICAgIHJlY2FwdGNoYVRva2VuOiByZWNhcHRjaGFUb2tlbixcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICAgICAgc2NvcmU6IHNjb3JlLFxuICAgICAgICAgICAgZ2FtZTogZ2FtZSxcbiAgICAgICAgICB9LFxuICAgICAgc3VjY2VzczogKCk6IHZvaWQgPT4ge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShzYXZlU2NvcmUoZW5jX3Rva2VuLCBzY29yZSwgZ2FtZSkpXG4gICAgICAgIH0sIHJhbmRvbUludCgxMDAwLCAzMDAwKSksXG4gICAgfSlcbiAgfSlcbn1cbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vY29uc29sZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIi4vY2xhc3Nlcy9hY3Rpb25cIlxuaW1wb3J0IGJ1eUFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL2J1eV9hY3Rpb25cIlxuaW1wb3J0IGRhaWx5QWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvZGFpbHlfYWN0aW9uXCJcbmltcG9ydCBleHBsb3JhdGlvbkFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL2V4cGxvcmF0aW9uX2FjdGlvblwiXG5pbXBvcnQgbWluaWdhbWVBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9taW5pZ2FtZV9hY3Rpb25cIlxuaW1wb3J0IHdhaXRBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy93YWl0X2FjdGlvblwiXG5cbi8qKiBBdXRvbWF0ZWQgZW50cnkgcG9pbnQgb2YgdGhlIHRha2VvdmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRUYWtlb3ZlcigpOiB2b2lkIHtcbiAgaWYgKFNlc3Npb25TdG9yYWdlLnRha2VvdmVyKSB2b2lkIHRha2VvdmVyKClcbn1cblxuLyoqIE1hbnVhbCBlbnRyeSBwb2ludCBvZiB0aGUgdGFrZW92ZXIuICovXG5leHBvcnQgZnVuY3Rpb24gdG9nZ2xlVGFrZW92ZXIoKTogdm9pZCB7XG4gIHJlc2V0VGFrZW92ZXIoKVxuXG4gIFNlc3Npb25TdG9yYWdlLnRha2VvdmVyID0gIVNlc3Npb25TdG9yYWdlLnRha2VvdmVyXG4gIGlmIChTZXNzaW9uU3RvcmFnZS50YWtlb3ZlcilcbiAgICAkLmZsYXZyTm90aWYoXCJUYWtlb3ZlciBtb2RlIGVuYWJsZWQuIFBsZWFzZSBkbyBub3QgaW50ZXJhY3Qgd2l0aCB0aGlzIHRhYi5cIilcbiAgZWxzZSAkLmZsYXZyTm90aWYoXCJUYWtlb3ZlciBtb2RlIGRpc2FibGVkLlwiKVxuXG4gIHZvaWQgdGFrZW92ZXIoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRUYWtlb3ZlcigpOiB2b2lkIHtcbiAgU2Vzc2lvblN0b3JhZ2UuYWN0aW9uID0gbnVsbFxuICBTZXNzaW9uU3RvcmFnZS5leHBsb3JhdGlvbnNEb25lID0gZmFsc2VcbiAgU2Vzc2lvblN0b3JhZ2UubWluaWdhbWVzRG9uZSA9IGZhbHNlXG4gIFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb24gPSBudWxsXG4gIFNlc3Npb25TdG9yYWdlLndpc2hsaXN0ID0gW11cbn1cblxuYXN5bmMgZnVuY3Rpb24gdGFrZW92ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIpIHJldHVyblxuICBpZiAoZGFpbHlBY3Rpb24uY29uZGl0aW9uKCkpIGF3YWl0IGRhaWx5QWN0aW9uLnBlcmZvcm0oKVxuXG4gIGNvbnN0IGFjdGlvbiA9IGFjdGlvbnMuZmluZChhY3Rpb24gPT4gYWN0aW9uLmtleSA9PT0gU2Vzc2lvblN0b3JhZ2UuYWN0aW9uKVxuICBpZiAoIWFjdGlvbikge1xuICAgIGNoYW5nZUFjdGlvbigpXG4gICAgdm9pZCB0YWtlb3ZlcigpXG4gICAgcmV0dXJuXG4gIH1cblxuICBDb25zb2xlLmluZm8oXCJBY3Rpb246XCIsIGFjdGlvbi5rZXkpXG5cbiAgaWYgKGFjdGlvbi5jb25kaXRpb24oKSAmJiAoYXdhaXQgYWN0aW9uLnBlcmZvcm0oKSkpIHJldHVyblxuICBlbHNlIHtcbiAgICBjaGFuZ2VBY3Rpb24oKVxuICAgIHZvaWQgdGFrZW92ZXIoKVxuICAgIHJldHVyblxuICB9XG59XG5cbmNvbnN0IGFjdGlvbnM6IEFjdGlvbltdID0gW1xuICBtaW5pZ2FtZUFjdGlvbixcbiAgZXhwbG9yYXRpb25BY3Rpb24sXG4gIGJ1eUFjdGlvbixcbiAgd2FpdEFjdGlvbixcbl1cblxuZnVuY3Rpb24gY2hhbmdlQWN0aW9uKCk6IFRha2VvdmVyQWN0aW9uIHtcbiAgY29uc3QgbmV4dCA9XG4gICAgYWN0aW9ucy5maW5kSW5kZXgoYWN0aW9uID0+IGFjdGlvbi5rZXkgPT09IFNlc3Npb25TdG9yYWdlLmFjdGlvbikgKyAxXG5cbiAgcmV0dXJuIChTZXNzaW9uU3RvcmFnZS5hY3Rpb24gPVxuICAgIGFjdGlvbnNbbmV4dCA+PSBhY3Rpb25zLmxlbmd0aCA/IDAgOiBuZXh0XSEua2V5KVxufVxuIiwiaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgeyBwbGF5RmxhcHB5LCBwbGF5SGF0Y2hsaW5ncywgcGxheVBlZ2dsZSB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvZW1pbGVcIlxuaW1wb3J0IHsgZmxhcHB5IH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9mbGFwcHlcIlxuaW1wb3J0IHsgaGF0Y2hsaW5ncyB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvaGF0Y2hsaW5nc1wiXG5pbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9taW5pZ2FtZVwiXG5pbXBvcnQgeyBwZWdnbGUgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL3BlZ2dsZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5cbmNsYXNzIE1pbmlnYW1lQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24ubWluaWdhbWVzXG5cbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UubWluaWdhbWVzICYmICFTZXNzaW9uU3RvcmFnZS5taW5pZ2FtZXNEb25lXG4gIH1cblxuICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgbWluaWdhbWVzIHNob3VsZCBiZSBwbGF5ZWQgcmlnaHQgbm93LlxuICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSBtaW5pZ2FtZXMgYXJlIGN1cnJlbnRseSBiZWluZyBwbGF5ZWQuXG4gICAqL1xuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHN3aXRjaCAobG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzXCI6IHtcbiAgICAgICAgY29uc3QgcGxheWluZyA9XG4gICAgICAgICAgdGhpcy5vcGVuTWluaWdhbWUocGVnZ2xlKSB8fFxuICAgICAgICAgIHRoaXMub3Blbk1pbmlnYW1lKGZsYXBweSkgfHxcbiAgICAgICAgICB0aGlzLm9wZW5NaW5pZ2FtZShoYXRjaGxpbmdzKVxuXG4gICAgICAgIGlmICghcGxheWluZykge1xuICAgICAgICAgIFNlc3Npb25TdG9yYWdlLm1pbmlnYW1lc0RvbmUgPSB0cnVlXG4gICAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxCdXR0b25FbGVtZW50PihcbiAgICAgICAgICAgICAgJy5taW5pZ2FtZXMtcnVsZXMgW3JlbD1cImJ0bi1jYW5jZWxcIl0nXG4gICAgICAgICAgICApXG4gICAgICAgICAgICA/LmNsaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwbGF5aW5nXG4gICAgICB9XG5cbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzL2dlbWJvbWJcIjpcbiAgICAgICAgYXdhaXQgcGxheVBlZ2dsZSgpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzL2J1YmJsdGVtcGxlXCI6XG4gICAgICAgIGF3YWl0IHBsYXlGbGFwcHkoKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiL21pbmlnYW1lcy9jb2Nvb25pbnBpY2tcIjpcbiAgICAgICAgYXdhaXQgcGxheUhhdGNobGluZ3MoKVxuICAgICAgICBicmVha1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhd2FpdCBjbGljazxIVE1MQW5jaG9yRWxlbWVudD4oXCIubWFpbi1tZW51LW1pbmlnYW1lcyBhXCIpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgYXdhaXQgY2xpY2s8SFRNTEFuY2hvckVsZW1lbnQ+KFwiLm1haW4tbWVudS1taW5pZ2FtZXMgYVwiKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKiogQ2xpY2sgb24gYSBtaW5pZ2FtZSdzIGxpbmsuIEByZXR1cm5zIHdoZXRoZXIgdGhlIG1pbmlnYW1lIHdhcyBvcGVuZWQuICovXG4gIHByaXZhdGUgb3Blbk1pbmlnYW1lKG1pbmlnYW1lOiBNaW5pZ2FtZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MU3BhbkVsZW1lbnQ+KFxuICAgICAgbWluaWdhbWUuYnV0dG9uU2VsZWN0b3JcbiAgICApXG4gICAgaWYgKCFzdGFydCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgc3RhcnQuY2xpY2soKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IE1pbmlnYW1lQWN0aW9uKClcbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vLi4vY29uc29sZVwiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgV2FpdEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLndhaXRcblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgQ29uc29sZS5sb2coYFdhaXRpbmcgZm9yIDEwIG1pbnV0ZXMuLi5gKVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSwgMTAgKiA2MCAqIDEwMDApXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXYWl0QWN0aW9uKClcbiIsImltcG9ydCB0eXBlIHsgUGFyc2FibGVJdGVtIH0gZnJvbSBcIi4vYXBwZWFyYW5jZS9pbnRlcmZhY2VzL3BhcnNhYmxlX2l0ZW1cIlxuaW1wb3J0IHR5cGUgeyBBdmF0YXIgfSBmcm9tIFwiLi9lbGRhcnlhL2F2YXRhclwiXG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRPdXRmaXQoc2VsZWN0b3I6IHN0cmluZywgbmFtZSA9IFwib3V0Zml0XCIpOiB2b2lkIHtcbiAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbc2VsZWN0b3JdXG4gIGlmICghYXZhdGFyKSByZXR1cm5cblxuICBjb25zdCBvdXRmaXQgPSBnZXRJdGVtc1RvU2F2ZShhdmF0YXIpXG5cbiAgY29uc3QgaHJlZiA9XG4gICAgXCJkYXRhOnRleHQvanNvbjtjaGFyc2V0PXV0Zi04LFwiICtcbiAgICBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkob3V0Zml0LCBudWxsLCBcIlxcdFwiKSlcblxuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcbiAgYS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGhyZWYpXG4gIGEuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgYCR7bmFtZX0uanNvbmApXG4gIGEuY2xpY2soKVxufVxuXG5mdW5jdGlvbiBnZXRJdGVtc1RvU2F2ZShhdmF0YXI6IEF2YXRhcik6IFBhcnNhYmxlSXRlbVtdIHtcbiAgcmV0dXJuIGF2YXRhci5jaGlsZHJlbi5tYXAoY2hpbGQgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSBjaGlsZC5nZXRJdGVtKClcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGl0ZW0uX2lkLFxuICAgICAgZ3JvdXA6IGl0ZW0uX2dyb3VwLFxuICAgICAgbmFtZTogaXRlbS5fbmFtZSxcbiAgICAgIGltYWdlOiBpdGVtLl9pbWFnZSxcbiAgICAgIHR5cGU6IGl0ZW0uX3R5cGUsXG4gICAgICBjYXRlZ29yeUlkOiBpdGVtLl9jYXRlZ29yeUlkLFxuICAgICAgaGlkZGVuQ2F0ZWdvcmllczogT2JqZWN0LnZhbHVlcyhpdGVtLl9oaWRkZW5DYXRlZ29yaWVzKSxcbiAgICAgIGFuaW1hdGlvbkRhdGE6IGl0ZW0uX2FuaW1hdGlvbkRhdGEsXG4gICAgICBsb2NrZWQ6IGl0ZW0uX2xvY2tlZCxcbiAgICB9XG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IEl0ZW0gfSBmcm9tIFwiLi4vZWxkYXJ5YS9pdGVtXCJcbmltcG9ydCB7IGV4cG9ydE91dGZpdCB9IGZyb20gXCIuLi9vdXRmaXRcIlxuaW1wb3J0IHR5cGUgeyBQYXJzYWJsZUl0ZW0gfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3BhcnNhYmxlX2l0ZW1cIlxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0UHJldmlldygpOiB2b2lkIHtcbiAgZXhwb3J0T3V0Zml0KFwiI2FwcGVhcmFuY2UtcHJldmlld1wiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW1wb3J0T3V0Zml0KCk6IHZvaWQge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKVxuICBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiZmlsZVwiKVxuICBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJhY2NlcHRcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpXG4gIGlucHV0LmNsaWNrKClcblxuICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZXZlbnQgPT4ge1xuICAgIGlmICghZXZlbnQudGFyZ2V0KSByZXR1cm5cbiAgICBjb25zdCBmaWxlcyA9ICg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cbiAgICB2b2lkIGZpbGUudGV4dCgpLnRoZW4oYXN5bmMgdmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IG91dGZpdDogUGFyc2FibGVJdGVtW10gPSBKU09OLnBhcnNlKHZhbHVlKVxuICAgICAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gICAgICBpZiAoIWF2YXRhcikgcmV0dXJuXG5cbiAgICAgICQuZmxhdnJOb3RpZihcIkltcG9ydGluZyBvdXRmaXQuIFBsZWFzZSB3YWl0Li4uXCIpXG5cbiAgICAgIC8vIEdldCBhbGwgY2F0ZWdvcmllc1xuICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gICAgICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdCkge1xuICAgICAgICBjYXRlZ29yaWVzLmFkZChjbG90aGluZy50eXBlKVxuICAgICAgfVxuXG4gICAgICAvLyBPcGVuIGFsbCBjYXRlZ29yaWVzXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgQXJyYXkuZnJvbShjYXRlZ29yaWVzLnZhbHVlcygpKS5tYXAoYXN5bmMgY2F0ZWdvcnkgPT5cbiAgICAgICAgICBvcGVuQ2F0ZWdvcnkoY2F0ZWdvcnkpXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICAgLy8gR2V0IGFsbCBncm91cHNcbiAgICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBTZXQ8bnVtYmVyPigpXG4gICAgICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdCkge1xuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtZ3JvdXA9XCIke2Nsb3RoaW5nLmdyb3VwfVwiXWApKVxuICAgICAgICAgIGdyb3Vwcy5hZGQoY2xvdGhpbmcuZ3JvdXApXG4gICAgICB9XG5cbiAgICAgIC8vIE9wZW4gYWxsIGdyb3Vwc1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKS5tYXAoYXN5bmMgZ3JvdXAgPT4gb3Blbkdyb3VwKGdyb3VwKSlcbiAgICAgIClcblxuICAgICAgLy8gR2V0IHRoZSBpdGVtcyBmcm9tIGBhdmFpbGFibGVJdGVtc2BcbiAgICAgIGNvbnN0IHdvcm5JdGVtczogSXRlbVtdID0gW11cbiAgICAgIGZvciAoY29uc3QgY2xvdGhpbmcgb2Ygb3V0Zml0KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBhdmFpbGFibGVJdGVtc1tjbG90aGluZy5pZF1cbiAgICAgICAgaWYgKGl0ZW0pIHdvcm5JdGVtcy5wdXNoKGl0ZW0pXG4gICAgICB9XG5cbiAgICAgIHJlbW92ZUNsb3RoZXMoKVxuICAgICAgYXZhdGFyLmFkZEl0ZW1zKHdvcm5JdGVtcylcbiAgICAgIGluaXRpYWxpemVTZWxlY3RlZEl0ZW1zKClcbiAgICAgIGluaXRpYWxpemVIaWRkZW5DYXRlZ29yaWVzKClcblxuICAgICAgJC5mbGF2ck5vdGlmKFwiSW1wb3J0ZWQgb3V0Zml0IVwiKVxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNsb3RoZXMoKTogdm9pZCB7XG4gIGNvbnN0IGF2YXRhciA9IFNhY2hhLkF2YXRhci5hdmF0YXJzW1wiI2FwcGVhcmFuY2UtcHJldmlld1wiXVxuICBpZiAoIWF2YXRhcikgcmV0dXJuXG5cbiAgZm9yIChsZXQgaSA9IGF2YXRhci5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IGl0ZW1SZW5kZXIgPSBhdmF0YXIuY2hpbGRyZW5baV1cbiAgICBpZiAoIWl0ZW1SZW5kZXIpIGNvbnRpbnVlXG5cbiAgICBjb25zdCBpdGVtID0gaXRlbVJlbmRlci5nZXRJdGVtKClcbiAgICBpZiAoU2FjaGEuQXZhdGFyLnJlbW92ZUl0ZW1Gcm9tQWxsQXZhdGFycyhpdGVtKSkge1xuICAgICAgJChgI2FwcGVhcmFuY2UtaXRlbS0ke2l0ZW0uX2lkfWApLnJlbW92ZUNsYXNzKFwic2VsZWN0ZWRcIilcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gb3Blbkdyb3VwKGdyb3VwOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGNhdGVnb3J5Q29udGFpbmVyID0gJChcIiNhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLVwiICsgZ3JvdXAudG9TdHJpbmcoKSlcbiAgICBpZiAoY2F0ZWdvcnlDb250YWluZXIuaGFzQ2xhc3MoXCJhY3RpdmVcIikpIHtcbiAgICAgIHJlc29sdmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNhdGVnb3J5Q29udGFpbmVyLmxlbmd0aCA8PSAwKSB7XG4gICAgICB2b2lkICQuZ2V0KFxuICAgICAgICBcIi9wbGF5ZXIvb3Blbkdyb3VwL1wiICsgZ3JvdXAudG9TdHJpbmcoKSxcbiAgICAgICAgKHZpZXc6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgICAgICQodmlldykuaGlkZSgpLmFwcGVuZFRvKFwiI2FwcGVhcmFuY2UtaXRlbXNcIilcbiAgICAgICAgfVxuICAgICAgKS5hbHdheXMoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc29sdmUoKVxuICAgIH1cbiAgfSlcbn1cblxuYXN5bmMgZnVuY3Rpb24gb3BlbkNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgIGNvbnN0IGNhdGVnb3J5Q29udGFpbmVyID0gJChcIiNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LVwiICsgY2F0ZWdvcnkpXG4gICAgaWYgKGNhdGVnb3J5Q29udGFpbmVyLmhhc0NsYXNzKFwiYWN0aXZlXCIpKSB7XG4gICAgICByZXNvbHZlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjYXRlZ29yeUNvbnRhaW5lci5sZW5ndGggPD0gMCkge1xuICAgICAgdm9pZCAkLnBvc3QoXCIvcGxheWVyL29wZW5DYXRlZ29yeS9cIiArIGNhdGVnb3J5LCAodmlldzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAgICQodmlldykuaGlkZSgpLmFwcGVuZFRvKFwiI2FwcGVhcmFuY2UtaXRlbXNcIilcbiAgICAgIH0pLmFsd2F5cygoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZSgpXG4gICAgfVxuICB9KVxufVxuIiwiZnVuY3Rpb24gZG93bmxvYWRDYW52YXMoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgbmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIC8vIE1ha2UgaXQgYW4gaW1hZ2VcbiAgY29uc3QgaW1hZ2UgPSBjYW52YXMudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpXG5cbiAgLy8gQ3JlYXRlIGEgbGlua1xuICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIilcbiAgYS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGltYWdlKVxuICBhLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGAke25hbWV9LnBuZ2ApXG5cbiAgLy8gUGxhY2UgaXQgb24gdGhlIGJvZHlcbiAgYS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKVxuXG4gIC8vIFN0YXJ0IHRoZSBkb3dubG9hZFxuICBhLmNsaWNrKClcblxuICAvLyBSZW1vdmUgdGhlIGxpbmtcbiAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRGYWNlKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNhdmF0YXItbWVudS1jb250YWluZXIgY2FudmFzXCJcbiAgKVxuICBpZiAoIWNhbnZhcykge1xuICAgIGNvbnNvbGUud2FybihcIkNvdWxkbid0IGZpbmQgdGhlIGd1YXJkaWFuJ3MgZmFjZS5cIilcbiAgICByZXR1cm5cbiAgfVxuXG4gIGRvd25sb2FkQ2FudmFzKGNhbnZhcywgXCJmYWNlXCIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEd1YXJkaWFuKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNob21lLWF2YXRhci1wbGF5ZXIgY2FudmFzXCJcbiAgKVxuICBpZiAoIWNhbnZhcykge1xuICAgIGNvbnNvbGUud2FybihcIkNvdWxkbid0IGZpbmQgdGhlIGd1YXJkaWFuLlwiKVxuICAgIHJldHVyblxuICB9XG5cbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCBnZXROYW1lKCkgPz8gXCJndWFyZGlhblwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRBcHBlYXJhbmNlKCk6IHZvaWQge1xuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNhcHBlYXJhbmNlLXByZXZpZXcgY2FudmFzXCJcbiAgKVxuICBpZiAoIWNhbnZhcykge1xuICAgIGNvbnNvbGUud2FybihcIkNvdWxkbid0IGZpbmQgdGhlIGd1YXJkaWFuLlwiKVxuICAgIHJldHVyblxuICB9XG5cbiAgZG93bmxvYWRDYW52YXMoY2FudmFzLCBnZXROYW1lKCkgPz8gXCJndWFyZGlhblwiKVxufVxuXG5mdW5jdGlvbiBnZXROYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gKFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyLW91dGVyPnBcIik/LnRleHRDb250ZW50ID8/XG4gICAgbnVsbFxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGV4cG9ydFByZXZpZXcsIGltcG9ydE91dGZpdCB9IGZyb20gXCIuLi9hcHBlYXJhbmNlL2Zhdm9yaXRlc19hY3Rpb25zXCJcbmltcG9ydCB7IGRvd25sb2FkQXBwZWFyYW5jZSB9IGZyb20gXCIuLi9kb3dubG9hZC1jYW52YXNcIlxuaW1wb3J0IHR5cGUgeyBGYXZvcml0ZXNBY3Rpb24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvZmF2b3JpdGVzX2FjdGlvblwiXG5cbmxldCBvYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlciB8IG51bGxcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBcHBlYXJhbmNlKCk6IHZvaWQge1xuICBvYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gIG9ic2VydmVyID0gbnVsbFxuXG4gIGNvbnN0IGFwcGVhcmFuY2VJdGVtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwZWFyYW5jZS1pdGVtc1wiKVxuICBpZiAoIWFwcGVhcmFuY2VJdGVtcykgcmV0dXJuXG5cbiAgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihsb2FkQXBwZWFyYW5jZSlcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShhcHBlYXJhbmNlSXRlbXMsIHtcbiAgICBjaGlsZExpc3Q6IHRydWUsXG4gIH0pXG5cbiAgbG9hZEZhdm9yaXRlc0FjdGlvbnMoKVxufVxuXG5mdW5jdGlvbiBsb2FkRmF2b3JpdGVzQWN0aW9ucygpOiB2b2lkIHtcbiAgY29uc3QgYWN0aW9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZmF2b3JpdGVzLWFjdGlvbnNcIilcbiAgaWYgKCFhY3Rpb25zIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZmF2b3JpdGVzLWFjdGlvbi1lZVwiKSkgcmV0dXJuXG5cbiAgY29uc3QgYWN0aW9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2Zhdm9yaXRlc19hY3Rpb24uaHRtbFwiKVxuXG4gIGNvbnN0IGltcG9ydEFjdGlvbjogRmF2b3JpdGVzQWN0aW9uID0ge1xuICAgIGlkOiBcImltcG9ydC1vdXRmaXRcIixcbiAgICB0ZXh0OiBcIkltcG9ydFwiLFxuICB9XG4gIGNvbnN0IGV4cG9ydEFjdGlvbjogRmF2b3JpdGVzQWN0aW9uID0ge1xuICAgIGlkOiBcImV4cG9ydC1vdXRmaXRcIixcbiAgICB0ZXh0OiBcIkV4cG9ydFwiLFxuICB9XG4gIGNvbnN0IGRvd25sb2FkQWN0aW9uOiBGYXZvcml0ZXNBY3Rpb24gPSB7XG4gICAgaWQ6IFwiZG93bmxvYWQtb3V0Zml0XCIsXG4gICAgdGV4dDogXCJEb3dubG9hZFwiLFxuICB9XG5cbiAgYWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoaW1wb3J0QWN0aW9uKSArXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZXhwb3J0QWN0aW9uKSArXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZG93bmxvYWRBY3Rpb24pXG4gIClcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChpbXBvcnRBY3Rpb24uaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaW1wb3J0T3V0Zml0KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGV4cG9ydEFjdGlvbi5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBleHBvcnRQcmV2aWV3KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGRvd25sb2FkQWN0aW9uLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkQXBwZWFyYW5jZSlcbn1cbiIsImltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlczogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfYmVlbW9vdl9hbm5veWFuY2VzLnBuZ1wiLFxuICBoNDogXCJCZWVtb292IEFubm95YW5jZXNcIixcbiAgaHJlZjogXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL0JlZW1vb3YtQW5ub3lhbmNlc1wiLFxuICBpZDogXCJjYXJvdXNlbC1iZWVtb292LWFubm95YW5jZXNcIixcbiAgcDogXCJCbG9jayBzb21lIG9mIEVsZGFyeWEncyBhbm5veWFuY2VzLlwiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXG5cbmV4cG9ydCBjb25zdCBjYXJvdXNlbERvd25sb2FkRmFjZTogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZS5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZmFjZVwiLFxuICBoNDogXCJEb3dubG9hZCB5b3VyIGZhY2UhXCIsXG4gIHA6IFwiQ2xpY2sgaGVyZSB0byBkb3dubG9hZCB5b3VyIGd1YXJkaWFuJ3MgZmFjZS5cIixcbn1cbiIsImltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuOiBDYXJvdXNlbE5ld3MgPSB7XG4gIGJhY2tncm91bmRJbWFnZTpcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhbi5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZ3VhcmRpYW5cIixcbiAgaDQ6IFwiRG93bmxvYWQgeW91ciBndWFyZGlhbiFcIixcbiAgcDogXCJDbGljayBoZXJlIHRvIGRvd25sb2FkIHlvdXIgZ3VhcmRpYW4uXCIsXG59XG4iLCJpbXBvcnQgdHlwZSB7IENhcm91c2VsTmV3cyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9jYXJvdXNlbF9uZXdzXCJcblxuZXhwb3J0IGNvbnN0IGNhcm91c2VsRUU6IENhcm91c2VsTmV3cyA9IHtcbiAgYmFja2dyb3VuZEltYWdlOlxuICAgIFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2Nhcm91c2VsX2VsZGFyeWFfZW5oYW5jZW1lbnRzLnBuZ1wiLFxuICBoNDogXCJFbGRhcnlhIEVuaGFuY2VtZW50c1wiLFxuICBocmVmOiBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHNcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZWxkYXJ5YS1lbmhhbmNlbWVudHNcIixcbiAgcDogXCJFbmhhbmNlcyB0aGUgdXNlciBleHBlcmllbmNlIG9mIEVsZGFyeWEuXCIsXG59XG4iLCJpbXBvcnQgdHlwZSB7IENhcm91c2VsTmV3cyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9jYXJvdXNlbF9uZXdzXCJcblxuZXhwb3J0IGNvbnN0IGNhcm91c2VsVGFrZW92ZXI6IENhcm91c2VsTmV3cyA9IHtcbiAgYmFja2dyb3VuZEltYWdlOlxuICAgIFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2Nhcm91c2VsX3Rha2VvdmVyLnBuZ1wiLFxuICBpZDogXCJjYXJvdXNlbC10YWtlb3ZlclwiLFxuICBoNDogXCJUYWtlb3ZlclwiLFxuICBwOiBcIkdpdmUgdXAgdGhpcyB0YWIgdG8gcGVyZm9ybSBhdXRvbWF0ZWQgYWN0aW9ucy5cIixcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlcyB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9iZWVtb292X2Fubm95YW5jZXNcIlxuaW1wb3J0IHsgY2Fyb3VzZWxEb3dubG9hZEZhY2UgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZVwiXG5pbXBvcnQgeyBjYXJvdXNlbERvd25sb2FkR3VhcmRpYW4gfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfZG93bmxvYWRfZ3VhcmRpYW5cIlxuaW1wb3J0IHsgY2Fyb3VzZWxFRSB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9lbGRhcnlhX2VuaGFuY2VtZW50c1wiXG5pbXBvcnQgeyBjYXJvdXNlbFRha2VvdmVyIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX3Rha2VvdmVyXCJcbmltcG9ydCB7IGRvd25sb2FkRmFjZSwgZG93bmxvYWRHdWFyZGlhbiB9IGZyb20gXCIuLi9kb3dubG9hZC1jYW52YXNcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB7IHRvZ2dsZVRha2VvdmVyIH0gZnJvbSBcIi4uL3Rha2VvdmVyL2JyYWluXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRDYXJvdXNlbCgpOiB2b2lkIHtcbiAgY29uc3QgY2Fyb3VzZWxJbm5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjY2Fyb3VzZWwtaW5uZXJcIilcbiAgaWYgKCFjYXJvdXNlbElubmVyIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2Fyb3VzZWwtZWVcIikpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIEltcG9ydCBjYXJvdXNlbCB0ZW1wbGF0ZVxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvY2Fyb3VzZWxfbmV3cy5odG1sXCIpXG5cbiAgY29uc3QgY29udGV4dHMgPSBbXG4gICAgLy8gSW50cm9cbiAgICBjYXJvdXNlbEVFLFxuXG4gICAgLy8gRmVhdHVyZXNcbiAgICAuLi4oTG9jYWxTdG9yYWdlLm1pbmlnYW1lcyB8fFxuICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnMgfHxcbiAgICBMb2NhbFN0b3JhZ2UubWFya2V0XG4gICAgICA/IFtjYXJvdXNlbFRha2VvdmVyXVxuICAgICAgOiBbXSksXG4gICAgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuLFxuICAgIGNhcm91c2VsRG93bmxvYWRGYWNlLFxuXG4gICAgLy8gQWRzXG4gICAgY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlcyxcbiAgXVxuXG4gIC8vIEFkZCBlbnRyaWVzIHRvIHRoZSBjYXJvdXNlbFxuICBjYXJvdXNlbElubmVyLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIGNvbnRleHRzLm1hcChiYW5uZXIgPT4gdGVtcGxhdGUucmVuZGVyKGJhbm5lcikpLmpvaW4oXCJcXG5cIilcbiAgKVxuXG4gIC8vIEFkZCBsaW5rc1xuICBmb3IgKGNvbnN0IGNhcm91c2VsIG9mIGNvbnRleHRzKSB7XG4gICAgaWYgKCFjYXJvdXNlbC5ocmVmKSBjb250aW51ZVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGNhcm91c2VsSW5uZXIucXVlcnlTZWxlY3RvcihgIyR7Y2Fyb3VzZWwuaWR9YClcbiAgICBpZiAoIWVsZW1lbnQpIGNvbnRpbnVlXG5cbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIG9wZW4oY2Fyb3VzZWwuaHJlZiwgXCJfYmxhbmtcIilcbiAgICB9KVxuICB9XG5cbiAgLy8gQWRkIGNsaWNrIGV2ZW50c1xuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGNhcm91c2VsRG93bmxvYWRGYWNlLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkRmFjZSlcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChjYXJvdXNlbERvd25sb2FkR3VhcmRpYW4uaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZG93bmxvYWRHdWFyZGlhbilcblxuICBjb25zdCB0YWtlb3ZlckFuY2hvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNhcm91c2VsVGFrZW92ZXIuaWQpXG4gIHRha2VvdmVyQW5jaG9yPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIHRvZ2dsZVRha2VvdmVyKClcbiAgICB0YWtlb3ZlclRpdGxlKHRha2VvdmVyQW5jaG9yKVxuICB9KVxuXG4gIGlmICh0YWtlb3ZlckFuY2hvcikgdGFrZW92ZXJUaXRsZSh0YWtlb3ZlckFuY2hvcilcbn1cblxuZnVuY3Rpb24gdGFrZW92ZXJUaXRsZSh0YWtlb3ZlckFuY2hvcjogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgdGFrZW92ZXJINCA9IHRha2VvdmVyQW5jaG9yLnF1ZXJ5U2VsZWN0b3IoXCJoNFwiKVxuICBpZiAodGFrZW92ZXJINCkge1xuICAgIHRha2VvdmVySDQuaW5uZXJUZXh0ID0gYCR7XG4gICAgICBTZXNzaW9uU3RvcmFnZS50YWtlb3ZlciA/IFwiRGlzYWJsZVwiIDogXCJFbmFibGVcIlxuICAgIH0gVGFrZW92ZXJgXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB7IGdldEl0ZW1EZXRhaWxzIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzXCJcblxubGV0IG1hcmtldE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbFxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1hcmtldCgpOiB2b2lkIHtcbiAgbWFya2V0T2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuICBtYXJrZXRPYnNlcnZlciA9IG51bGxcblxuICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL21hcmtldHBsYWNlXCIpIHJldHVyblxuXG4gIC8vIGAubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1zYCBpcyB0aGUgY29udGFpbmVyIHdob3NlIEhUTUwgY29udGVudCBpcyBiZWluZ1xuICAvLyByZXBsYWNlZCBvbiBldmVyeSBhY3Rpb24uXG4gIGNvbnN0IHNlYXJjaEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MVUxpc3RFbGVtZW50PihcbiAgICBcIi5tYXJrZXRwbGFjZS1zZWFyY2gtaXRlbXNcIlxuICApXG4gIGlmICghc2VhcmNoSXRlbXMpIHJldHVyblxuXG4gIG1hcmtldE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZFdpc2hsaXN0KVxuICBtYXJrZXRPYnNlcnZlci5vYnNlcnZlKHNlYXJjaEl0ZW1zLCB7XG4gICAgY2hpbGRMaXN0OiB0cnVlLFxuICB9KVxuXG4gIGxvYWRXaXNobGlzdCgpXG59XG5cbmZ1bmN0aW9uIGxvYWRXaXNobGlzdCgpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBsaSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwiLm1hcmtldHBsYWNlLWFic3RyYWN0XCJcbiAgKSkge1xuICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgICAgKF86IE11dGF0aW9uUmVjb3JkW10sIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgY29uc3QgbWFya2V0RW50cnkgPSBnZXRJdGVtRGV0YWlscyhsaSlcbiAgICAgICAgICBpZiAoIW1hcmtldEVudHJ5KSByZXR1cm5cblxuICAgICAgICAgIGFkZFdpc2hpc3RCdXR0b24obWFya2V0RW50cnksIG9ic2VydmVyKVxuICAgICAgICB9XG4gICAgICApLm9ic2VydmUoPE5vZGU+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS16b29tXCIpLCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRXaXNoaXN0QnV0dG9uKFxuICBtYXJrZXRFbnRyeTogTWFya2V0RW50cnksXG4gIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlclxuKTogdm9pZCB7XG4gIGNvbnN0IGJ1dHRvbnNDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIiNtYXJrZXRwbGFjZS1pdGVtRGV0YWlsXCJcbiAgKVxuICBpZiAoIWJ1dHRvbnNDb250YWluZXIpIHJldHVyblxuICBvYnNlcnZlcj8uZGlzY29ubmVjdCgpXG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWluZm8tYXV0b2J1eVwiKT8ucmVtb3ZlKClcbiAgY29uc3QgYnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2F1dG9fYnV5X2J1dHRvbi5odG1sXCIpXG4gIGJ1dHRvbnNDb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlZW5kXCIsIGJ1dHRvblRlbXBsYXRlLnJlbmRlcih7fSkpXG5cbiAgYnV0dG9uc0NvbnRhaW5lclxuICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcIiNtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWluZm8tYXV0b2J1eVwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGFkZFRvV2lzaGxpc3RGbGF2cihtYXJrZXRFbnRyeSlcbiAgICB9KVxufVxuXG5mdW5jdGlvbiBhZGRUb1dpc2hsaXN0RmxhdnIobWFya2V0RW50cnk6IE1hcmtldEVudHJ5KTogdm9pZCB7XG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2ci5odG1sXCIpXG5cbiAgJC5mbGF2cih7XG4gICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHt9KSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbG9zZTogeyBzdHlsZTogXCJjbG9zZVwiIH0sXG4gICAgICBzYXZlOiB7XG4gICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHByaWNlID0gTnVtYmVyKFxuICAgICAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpXG4gICAgICAgICAgICAgID8udmFsdWUudHJpbSgpXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmICghcHJpY2UgfHwgcHJpY2UgPD0gMCkge1xuICAgICAgICAgICAgJC5mbGF2ck5vdGlmKFwiVGhpcyBpcyBub3QgYSB2YWxpZCBwcmljZS5cIilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0LmZpbHRlcihcbiAgICAgICAgICAgIHdpc2hsaXN0RW50cnkgPT4gd2lzaGxpc3RFbnRyeS5pY29uICE9PSBtYXJrZXRFbnRyeS5pY29uXG4gICAgICAgICAgKVxuICAgICAgICAgIHdpc2hsaXN0LnB1c2goe1xuICAgICAgICAgICAgLi4ubWFya2V0RW50cnksXG4gICAgICAgICAgICBwcmljZSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IHdpc2hsaXN0XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkaWFsb2c6IFwicHJvbXB0XCIsXG4gICAgcHJvbXB0OiB7XG4gICAgICB2YWx1ZTogXCJcIixcbiAgICB9LFxuICAgIG9uQnVpbGQ6ICRjb250YWluZXIgPT4ge1xuICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcbiAgICB9LFxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBjaGFuZ2VSZWdpb24gfSBmcm9tIFwiLi4vYWpheC9jaGFuZ2VfcmVnaW9uXCJcbmltcG9ydCB7IFJlc3VsdCB9IGZyb20gXCIuLi9hcGkvcmVzdWx0LmVudW1cIlxuaW1wb3J0IHR5cGUgeyBNYXBSZWdpb24gfSBmcm9tIFwiLi4vZWxkYXJ5YS9jdXJyZW50X3JlZ2lvblwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlQnV0dG9uIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2F1dG9fZXhwbG9yZV9idXR0b25cIlxuXG5sZXQgcGV0T2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGV0KCk6IHZvaWQge1xuICBwZXRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gIHBldE9ic2VydmVyID0gbnVsbFxuXG4gIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvcGV0XCIpIHJldHVyblxuXG4gIC8vIGAucGFnZS1tYWluLWNvbnRhaW5lcmAgY2hhbmdlcyBiYWNrZ3JvdW5kIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudGx5XG4gIC8vIHNlbGVjdGVkIHJlZ2lvbi5cbiAgY29uc3QgbWFpbkNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLnBhZ2UtbWFpbi1jb250YWluZXJcIlxuICApXG4gIGlmICghbWFpbkNvbnRhaW5lcikgcmV0dXJuXG5cbiAgcGV0T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihsb2FkUGV0KVxuICBwZXRPYnNlcnZlci5vYnNlcnZlKG1haW5Db250YWluZXIsIHtcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICB9KVxuXG4gIGxvYWRFeHBsb3JhdGlvbnMoKVxufVxuXG5mdW5jdGlvbiBsb2FkRXhwbG9yYXRpb25zKCk6IHZvaWQge1xuICBjb25zdCBhdXRvRXhwbG9yZUxvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuXG4gIGZvciAoY29uc3QgZGl2IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLm1hcC1sb2NhdGlvbltkYXRhLWlkXVwiXG4gICkpIHtcbiAgICBjb25zdCBsb2NhdGlvbklkID0gTnVtYmVyKGRpdi5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpKVxuICAgIGlmICghbG9jYXRpb25JZCkgY29udGludWVcblxuICAgIGxvYWRQaWN0b01hcChhdXRvRXhwbG9yZUxvY2F0aW9ucywgZGl2KVxuXG4gICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgICAgKF86IE11dGF0aW9uUmVjb3JkW10sIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgYWRkQXV0b0V4cGxvcmVCdXR0b24obG9jYXRpb25JZCwgb2JzZXJ2ZXIpXG4gICAgICAgIH1cbiAgICAgICkub2JzZXJ2ZSg8Tm9kZT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcC1sb2NhdGlvbi1wcmV2aWV3XCIpLCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQXV0b0V4cGxvcmVCdXR0b24oXG4gIGxvY2F0aW9uSWQ6IG51bWJlcixcbiAgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjYnV0dG9ucy1jb250YWluZXJcIilcbiAgaWYgKCFidXR0b25zQ29udGFpbmVyKSByZXR1cm5cbiAgb2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuXG4gIC8vIFBhcmFtZXRlcnMgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgdGVtcGxhdGVcbiAgY29uc3QgY29udGV4dDogQXV0b0V4cGxvcmVCdXR0b24gPSB7XG4gICAgbG9jYXRpb25JZCxcbiAgICBhY3RpdmU6IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5zb21lKFxuICAgICAgc2F2ZWQgPT4gc2F2ZWQubG9jYXRpb24uaWQgPT09IGxvY2F0aW9uSWQudG9TdHJpbmcoKVxuICAgICksXG4gICAgcmVnaW9uSWQ6IE51bWJlcihcbiAgICAgIGRvY3VtZW50XG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKFwiLm1pbmltYXAuY3VycmVudFtkYXRhLW1hcGlkXVwiKVxuICAgICAgICA/LmdldEF0dHJpYnV0ZShcImRhdGEtbWFwaWRcIilcbiAgICApLFxuICB9XG5cbiAgLy8gQWRkIHRoZSBhdXRvIGV4cGxvcmUgYnV0dG9uXG4gIGJ1dHRvbnNDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNhdXRvLWV4cGxvcmUtYnV0dG9uXCIpPy5yZW1vdmUoKVxuICBjb25zdCBhdXRvRXhwbG9yZVRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2V4cGxvcmVfYnV0dG9uLmh0bWxcIilcbiAgYnV0dG9uc0NvbnRhaW5lci5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBhdXRvRXhwbG9yZVRlbXBsYXRlLnJlbmRlcihjb250ZXh0KVxuICApXG5cbiAgLy8gQmluZCBgYXV0b0V4cGxvcmVgIGFuZCBgbG9hZFBpY3RvTWFwc2BcbiAgYnV0dG9uc0NvbnRhaW5lclxuICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxCdXR0b25FbGVtZW50PihcIiNhdXRvLWV4cGxvcmUtYnV0dG9uXCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgdm9pZCBhdXRvRXhwbG9yZShjb250ZXh0KS50aGVuKGxvYWRQaWN0b01hcHMpXG4gICAgfSlcblxuICB2b2lkIGRpc2FibGVFeHBsb3JlKGNvbnRleHQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2FibGVFeHBsb3JlKGNvbnRleHQ6IEF1dG9FeHBsb3JlQnV0dG9uKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGVudHJ5ID0gYXdhaXQgZ2V0QXV0b0V4cGxvcmVFbnRyeShjb250ZXh0LnJlZ2lvbklkLCBjb250ZXh0LmxvY2F0aW9uSWQpXG4gIGlmICghZW50cnkpIHJldHVyblxuXG4gIGlmIChwZXRFbmVyZ3kgPCBOdW1iZXIoZW50cnkubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpKVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhwbG9yZS1idXR0b25cIik/LmNsYXNzTGlzdC5hZGQoXCJkaXNhYmxlZFwiKVxufVxuXG5hc3luYyBmdW5jdGlvbiBhdXRvRXhwbG9yZShjb250ZXh0OiBBdXRvRXhwbG9yZUJ1dHRvbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoY29udGV4dC5hY3RpdmUpIHtcbiAgICBjb25zdCBmaWx0ZXJlZExvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXG4gICAgICBzYXZlZCA9PiBzYXZlZC5sb2NhdGlvbi5pZCAhPT0gY29udGV4dC5sb2NhdGlvbklkLnRvU3RyaW5nKClcbiAgICApXG4gICAgTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zID0gZmlsdGVyZWRMb2NhdGlvbnNcbiAgICBhZGRBdXRvRXhwbG9yZUJ1dHRvbihjb250ZXh0LmxvY2F0aW9uSWQpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBuZXdBdXRvRXhwbG9yZSA9IGF3YWl0IGdldEF1dG9FeHBsb3JlRW50cnkoXG4gICAgY29udGV4dC5yZWdpb25JZCxcbiAgICBjb250ZXh0LmxvY2F0aW9uSWRcbiAgKVxuICBpZiAoIW5ld0F1dG9FeHBsb3JlKSByZXR1cm5cblxuICBjb25zdCBuZXdMb2NhdGlvbnMgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnNcbiAgbmV3TG9jYXRpb25zLnB1c2gobmV3QXV0b0V4cGxvcmUpXG4gIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IG5ld0xvY2F0aW9uc1xuICBhZGRBdXRvRXhwbG9yZUJ1dHRvbihjb250ZXh0LmxvY2F0aW9uSWQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEF1dG9FeHBsb3JlRW50cnkoXG4gIHJlZ2lvbklkOiBudW1iZXIsXG4gIGxvY2F0aW9uSWQ6IG51bWJlclxuKTogUHJvbWlzZTxBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbD4ge1xuICBjb25zdCByZWdpb24gPSBhd2FpdCBnZXRSZWdpb24ocmVnaW9uSWQpXG4gIGlmICghcmVnaW9uKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGxvY2F0aW9uID0gcmVnaW9uLmxvY2F0aW9ucy5maW5kKFxuICAgIGxvY2F0aW9uID0+IGxvY2F0aW9uLmlkID09PSBsb2NhdGlvbklkLnRvU3RyaW5nKClcbiAgKVxuICBpZiAoIWxvY2F0aW9uKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb24sXG4gICAgcmVnaW9uLFxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlZ2lvbihpZDogbnVtYmVyKTogUHJvbWlzZTxNYXBSZWdpb24gfCBudWxsPiB7XG4gIGlmIChpZC50b1N0cmluZygpID09PSBjdXJyZW50UmVnaW9uLmlkKSByZXR1cm4gY3VycmVudFJlZ2lvblxuXG4gIGNvbnN0IGpzb24gPSBhd2FpdCBjaGFuZ2VSZWdpb24oaWQpXG4gIGlmIChqc29uLnJlc3VsdCA9PT0gUmVzdWx0LnN1Y2Nlc3MpIHJldHVybiBqc29uLmRhdGEuY3VycmVudFJlZ2lvblxuXG4gIHJldHVybiBudWxsXG59XG5cbi8vIFBpY3RvIG1hcFxuXG5mdW5jdGlvbiBsb2FkUGljdG9NYXBzKCk6IHZvaWQge1xuICBjb25zdCBhdXRvRXhwbG9yZUxvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuICBmb3IgKGNvbnN0IGRpdiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIi5tYXAtbG9jYXRpb25bZGF0YS1pZF1cIlxuICApKSB7XG4gICAgbG9hZFBpY3RvTWFwKGF1dG9FeHBsb3JlTG9jYXRpb25zLCBkaXYpXG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZFBpY3RvTWFwKFxuICBhdXRvRXhwbG9yZUxvY2F0aW9uczogQXV0b0V4cGxvcmVMb2NhdGlvbltdLFxuICBkaXY6IEhUTUxEaXZFbGVtZW50XG4pOiB2b2lkIHtcbiAgY29uc3QgbWFwTG9jYXRpb24gPSBkaXYuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZFwiKVxuICBpZiAoIW1hcExvY2F0aW9uKSByZXR1cm5cblxuICBkaXYuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYXV0b0V4cGxvcmVMb2NhdGlvbnMuc29tZShcbiAgICBzYXZlZCA9PiBzYXZlZC5sb2NhdGlvbi5pZCA9PT0gbWFwTG9jYXRpb25cbiAgKVxuICAgID8gXCJ1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC9wZXQvaWNvbnMvcGljdG9fbWFwX2V4cGxvLnBuZylcIlxuICAgIDogXCJ1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC9wZXQvaWNvbnMvcGljdG9fbWFwLnBuZylcIlxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBleHBvcnRPdXRmaXQgfSBmcm9tIFwiLi4vb3V0Zml0XCJcbmltcG9ydCB0eXBlIHsgUHJvZmlsZUNvbnRhY3RBY3Rpb24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvcHJvZmlsZV9jb250YWN0X2FjdGlvblwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvZmlsZSgpOiB2b2lkIHtcbiAgY29uc3QgcHJvZmlsZUNvbnRhY3RBY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgXCJwcm9maWxlLWNvbnRhY3QtYWN0aW9uc1wiXG4gIClcbiAgaWYgKFxuICAgICFwcm9maWxlQ29udGFjdEFjdGlvbnMgfHxcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnByb2ZpbGUtY29udGFjdC1hY3Rpb24tZWVcIilcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvcHJvZmlsZV9jb250YWN0X2FjdGlvbi5odG1sXCIpXG4gIGNvbnN0IHByb2ZpbGVBY3Rpb25FeHBvcnQ6IFByb2ZpbGVDb250YWN0QWN0aW9uID0ge1xuICAgIGlkOiBcInByb2ZpbGUtY29udGFjdC1hY3Rpb24tZXhwb3J0XCIsXG4gICAgYWN0aW9uRGVzY3JpcHRpb246IFwiRXhwb3J0IG91dGZpdFwiLFxuICB9XG5cbiAgLy8gQWRkIGVudHJpZXNcbiAgcHJvZmlsZUNvbnRhY3RBY3Rpb25zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcihwcm9maWxlQWN0aW9uRXhwb3J0KVxuICApXG5cbiAgLy8gQWRkIGNsaWNrIGV2ZW50c1xuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChwcm9maWxlQWN0aW9uRXhwb3J0LmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGV4cG9ydFByb2ZpbGUpXG59XG5cbmZ1bmN0aW9uIGV4cG9ydFByb2ZpbGUoKTogdm9pZCB7XG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSGVhZGluZ0VsZW1lbnQ+KFxuICAgIFwiI21haW4tc2VjdGlvbiAuc2VjdGlvbi10aXRsZVwiXG4gIClcblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoU2FjaGEuQXZhdGFyLmF2YXRhcnMpLmZpbHRlcihrZXkgPT5cbiAgICBrZXkuc3RhcnRzV2l0aChcIiNwbGF5ZXJQcm9maWxlQXZhdGFyXCIpXG4gIClcblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgZXhwb3J0T3V0Zml0KGtleSwgdGl0bGU/LnRleHRDb250ZW50Py50cmltKCkpXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkU2V0dGluZ3MoKTogdm9pZCB7XG4gIGNvbnN0IGFjY291bnRSaWdodCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYWNjb3VudC1yaWdodCBkaXZcIilcbiAgaWYgKCFhY2NvdW50UmlnaHQgfHwgYWNjb3VudFJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIuYWNjb3VudC1lZS1ibG9jXCIpKSByZXR1cm5cblxuICBjb25zdCBzZXR0aW5nc1RlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9zZXR0aW5ncy5odG1sXCIpXG5cbiAgYWNjb3VudFJpZ2h0Lmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHNldHRpbmdzVGVtcGxhdGUucmVuZGVyKExvY2FsU3RvcmFnZS5zZXR0aW5ncylcbiAgKVxuXG4gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZWUtZGVidWctZW5hYmxlZFwiKT8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICBMb2NhbFN0b3JhZ2UuZGVidWcgPSAhTG9jYWxTdG9yYWdlLmRlYnVnXG4gICAgcmVsb2FkU2V0dGluZ3MoKVxuICB9KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKFwiZWUtbWluaWdhbWVzLWVuYWJsZWRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBMb2NhbFN0b3JhZ2UubWluaWdhbWVzID0gIUxvY2FsU3RvcmFnZS5taW5pZ2FtZXNcbiAgICAgIHJlbG9hZFNldHRpbmdzKClcbiAgICB9KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKFwiZWUtZXhwbG9yYXRpb25zLWVuYWJsZWRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBMb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25zID0gIUxvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnNcbiAgICAgIHJlbG9hZFNldHRpbmdzKClcbiAgICB9KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKFwiZWUtbWFya2V0LWVuYWJsZWRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBMb2NhbFN0b3JhZ2UubWFya2V0ID0gIUxvY2FsU3RvcmFnZS5tYXJrZXRcbiAgICAgIHJlbG9hZFNldHRpbmdzKClcbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZWxvYWRTZXR0aW5ncygpOiB2b2lkIHtcbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIuYWNjb3VudC1lZS1ibG9jXCIpPy5yZW1vdmUoKVxuICBsb2FkU2V0dGluZ3MoKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgV2lzaGxpc3RTZXR0aW5ncyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy93aXNobGlzdF9zZXR0aW5nc1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkV2lzaGxpc3QoKTogdm9pZCB7XG4gIGNvbnN0IG1hcmtldHBsYWNlTWVudSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtbWVudVwiKVxuICBpZiAoIW1hcmtldHBsYWNlTWVudSkgcmV0dXJuXG5cbiAgaWYgKCFtYXJrZXRwbGFjZU1lbnUucXVlcnlTZWxlY3RvcihcIiN3aXNobGlzdC1idXR0b25cIikpIHtcbiAgICBmb3IgKGNvbnN0IGEgb2YgbWFya2V0cGxhY2VNZW51LnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpKSB7XG4gICAgICBhLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHBhZ2VMb2FkKGEuaHJlZiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgbWFya2V0cGxhY2VNZW51LnF1ZXJ5U2VsZWN0b3IoXCIjd2lzaGxpc3QtYnV0dG9uXCIpPy5yZW1vdmUoKVxuICBjb25zdCB3aXNobGlzdEJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC93aXNobGlzdF9idXR0b24uaHRtbFwiKVxuICBtYXJrZXRwbGFjZU1lbnUuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgd2lzaGxpc3RCdXR0b25UZW1wbGF0ZS5yZW5kZXIoe30pXG4gIClcblxuICBjb25zdCB3aXNobGlzdEJ1dHRvbiA9XG4gICAgbWFya2V0cGxhY2VNZW51LnF1ZXJ5U2VsZWN0b3I8SFRNTEFuY2hvckVsZW1lbnQ+KFwiI3dpc2hsaXN0LWJ1dHRvblwiKVxuICB3aXNobGlzdEJ1dHRvbj8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICBpbnNlcnRXaXNobGlzdCh3aXNobGlzdEJ1dHRvbilcbiAgfSlcbn1cblxuZnVuY3Rpb24gaW5zZXJ0V2lzaGxpc3QoYnV0dG9uOiBIVE1MQW5jaG9yRWxlbWVudCk6IHZvaWQge1xuICAvLyBBc3Npc3RhbmNlXG4gIGNvbnN0IGFzc2lzdGFuY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLm1hcmtldHBsYWNlLWFzc2lzdGFuY2VcIilcbiAgaWYgKGFzc2lzdGFuY2UpXG4gICAgYXNzaXN0YW5jZS50ZXh0Q29udGVudCA9XG4gICAgICBcIk9uIHRoaXMgcGFnZSwgeW91IGNhbiBvcmdhbml6ZSB5b3VyIHdpc2hsaXN0IGFuZCBjaGVjayB0aGUgc3RhdHVzIG9mIHlvdXIgd2lzaGVkIGl0ZW1zLlwiXG5cbiAgLy8gTWVudVxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiI21hcmtldHBsYWNlLW1lbnUgLmFjdGl2ZVwiKVxuICAgID8uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuICBidXR0b24uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKVxuXG4gIC8vIEZpbHRlcnNcbiAgY29uc3QgZmlsdGVycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtZmlsdGVyc1wiKVxuICBpZiAoZmlsdGVycykgZmlsdGVycy5pbm5lckhUTUwgPSBcIlwiXG5cbiAgLy8gQ29udGVudFxuICBjb25zdCB3aXNobGlzdFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC93aXNobGlzdF9zZXR0aW5ncy5odG1sXCIpXG4gIGNvbnN0IGNvbnRhaW5lciA9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tYXJrZXRwbGFjZS1jb250YWluZXJcIikgPz9cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLWFjdGl2ZS1hdWN0aW9uc1wiKSA/P1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtaXRlbXNGb3JTYWxlXCIpXG4gIGlmICghY29udGFpbmVyKSByZXR1cm5cblxuICBjb25zdCB3aXNobGlzdENvbnRleHQ6IFdpc2hsaXN0U2V0dGluZ3MgPSB7XG4gICAgd2lzaGxpc3Q6IExvY2FsU3RvcmFnZS53aXNobGlzdCxcbiAgfVxuICBjb250YWluZXIuaW5uZXJIVE1MID0gd2lzaGxpc3RUZW1wbGF0ZS5yZW5kZXIod2lzaGxpc3RDb250ZXh0KVxuXG4gIC8vIEJ1dHRvbnNcbiAgZm9yIChjb25zdCB0ciBvZiBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcInRyXCIpKSB7XG4gICAgY29uc3Qgd2VhcmFibGVpdGVtaWQgPSB0ci5kYXRhc2V0LndlYXJhYmxlaXRlbWlkXG4gICAgaWYgKCF3ZWFyYWJsZWl0ZW1pZCkgY29udGludWVcblxuICAgIC8vIFJlc2V0IHN0YXR1c1xuICAgIGNvbnN0IHJlc2V0ID0gdHIucXVlcnlTZWxlY3RvcihcIi5yZXNldC1pdGVtLXN0YXR1c1wiKVxuICAgIGlmIChyZXNldClcbiAgICAgIHJlc2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHJlc2V0U3RhdHVzKHdlYXJhYmxlaXRlbWlkKVxuICAgICAgICBpbnNlcnRXaXNobGlzdChidXR0b24pXG4gICAgICB9KVxuXG4gICAgLy8gRGVsZXRlIGl0ZW0gZnJvbSB3aXNobGlzdFxuICAgIGNvbnN0IGRlbGV0ZUJ1dHRvbiA9IHRyLnF1ZXJ5U2VsZWN0b3IoXCIuZGVsZXRlLXdpc2hsaXN0LWl0ZW1cIilcbiAgICBpZiAoZGVsZXRlQnV0dG9uKVxuICAgICAgZGVsZXRlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGRlbGV0ZUl0ZW0od2VhcmFibGVpdGVtaWQpXG4gICAgICAgIGluc2VydFdpc2hsaXN0KGJ1dHRvbilcbiAgICAgIH0pXG5cbiAgICAvLyBDaGFuZ2UgcHJpY2VcbiAgICBjb25zdCBlZGl0UHJpY2UgPSB0ci5xdWVyeVNlbGVjdG9yKFwiLmVkaXQtcHJpY2VcIilcbiAgICBpZiAoZWRpdFByaWNlKVxuICAgICAgZWRpdFByaWNlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHZvaWQgY2hhbmdlUHJpY2Uod2VhcmFibGVpdGVtaWQpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGluc2VydFdpc2hsaXN0KGJ1dHRvbilcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRTdGF0dXMod2VhcmFibGVpdGVtaWQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgPT09IHdlYXJhYmxlaXRlbWlkXG4gIClcbiAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgZGVsZXRlIGVudHJ5LmVycm9yXG4gIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IFtcbiAgICAuLi53aXNobGlzdC5zbGljZSh1bmRlZmluZWQsIGluZGV4KSxcbiAgICBlbnRyeSxcbiAgICAuLi53aXNobGlzdC5zbGljZShpbmRleCArIDEsIHVuZGVmaW5lZCksXG4gIF1cbn1cblxuZnVuY3Rpb24gZGVsZXRlSXRlbSh3ZWFyYWJsZWl0ZW1pZDogc3RyaW5nKTogdm9pZCB7XG4gIExvY2FsU3RvcmFnZS53aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdC5maWx0ZXIoXG4gICAgaXRlbSA9PiBpdGVtLndlYXJhYmxlaXRlbWlkICE9PSB3ZWFyYWJsZWl0ZW1pZFxuICApXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoYW5nZVByaWNlKHdlYXJhYmxlaXRlbWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2NoYW5nZV9wcmljZV9mbGF2ci5odG1sXCIpXG5cbiAgY29uc3Qgd2lzaGxpc3QgPSBMb2NhbFN0b3JhZ2Uud2lzaGxpc3RcbiAgY29uc3QgaW5kZXggPSB3aXNobGlzdC5maW5kSW5kZXgoXG4gICAgaXRlbSA9PiBpdGVtLndlYXJhYmxlaXRlbWlkID09PSB3ZWFyYWJsZWl0ZW1pZFxuICApXG4gIGNvbnN0IGVudHJ5ID0gd2lzaGxpc3RbaW5kZXhdXG4gIGlmICghZW50cnkpIHJldHVyblxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAkLmZsYXZyKHtcbiAgICAgIGNvbnRlbnQ6IHRlbXBsYXRlLnJlbmRlcih7fSksXG4gICAgICBkaWFsb2c6IFwicHJvbXB0XCIsXG4gICAgICBwcm9tcHQ6IHtcbiAgICAgICAgdmFsdWU6IGVudHJ5LnByaWNlLnRvU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBjbG9zZToge1xuICAgICAgICAgIHN0eWxlOiBcImNsb3NlXCIsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKClcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2F2ZToge1xuICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJpY2UgPSBOdW1iZXIoXG4gICAgICAgICAgICAgIGRvY3VtZW50XG4gICAgICAgICAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpXG4gICAgICAgICAgICAgICAgPy52YWx1ZS50cmltKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmICghcHJpY2UgfHwgcHJpY2UgPD0gMCkge1xuICAgICAgICAgICAgICAkLmZsYXZyTm90aWYoXCJUaGlzIGlzIG5vdCBhIHZhbGlkIHByaWNlLlwiKVxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZW50cnkucHJpY2UgPSBwcmljZVxuICAgICAgICAgICAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xuICAgICAgICAgICAgICAuLi53aXNobGlzdC5zbGljZSh1bmRlZmluZWQsIGluZGV4KSxcbiAgICAgICAgICAgICAgZW50cnksXG4gICAgICAgICAgICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcbiAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XG4gICAgICAgICRjb250YWluZXIuYWRkQ2xhc3MoXCJuZXctbGF5b3V0LXBvcHVwXCIpXG4gICAgICB9LFxuICAgIH0pXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBEdXJhdGlvblVuaXQgfSBmcm9tIFwiLi9kdXJhdGlvblwiXG5pbXBvcnQgeyBsb2FkVGFrZW92ZXIgfSBmcm9tIFwiLi90YWtlb3Zlci9icmFpblwiXG5pbXBvcnQgeyBsb2FkQXBwZWFyYW5jZSB9IGZyb20gXCIuL3VpL2FwcGVhcmFuY2VcIlxuaW1wb3J0IHsgbG9hZENhcm91c2VsIH0gZnJvbSBcIi4vdWkvY2Fyb3VzZWxcIlxuaW1wb3J0IHsgbG9hZEhvbWVDb250ZW50IH0gZnJvbSBcIi4vdWkvaG9tZV9jb250ZW50XCJcbmltcG9ydCB7IGxvYWRNYXJrZXQgfSBmcm9tIFwiLi91aS9tYXJrZXRcIlxuaW1wb3J0IHsgbG9hZE1lbnUgfSBmcm9tIFwiLi91aS9tZW51XCJcbmltcG9ydCB7IGxvYWRQZXQgfSBmcm9tIFwiLi91aS9wZXRcIlxuaW1wb3J0IHsgbG9hZFByb2ZpbGUgfSBmcm9tIFwiLi91aS9wcm9maWxlXCJcbmltcG9ydCB7IGxvYWRTZXR0aW5ncyB9IGZyb20gXCIuL3VpL3NldHRpbmdzXCJcbmltcG9ydCB7IGxvYWRXaXNobGlzdCB9IGZyb20gXCIuL3VpL3dpc2hsaXN0XCJcblxuLy8gbG9hZEpTKFwiaHR0cHM6Ly91bnBrZy5jb20vaG9nYW4uanMvZGlzdC90ZW1wbGF0ZS0zLjAuMi5taW4uanNcIiwgdHJ1ZSk7XG5cbmZ1bmN0aW9uIGxvYWQoKTogdm9pZCB7XG4gIGxvYWRVSSgpXG4gIGxvYWRUYWtlb3ZlcigpXG59XG5cbmZ1bmN0aW9uIGxvYWRVSSgpOiB2b2lkIHtcbiAgbG9hZE1lbnUoKVxuICBsb2FkQ2Fyb3VzZWwoKVxuICBsb2FkSG9tZUNvbnRlbnQoKVxuICBsb2FkQXBwZWFyYW5jZSgpXG4gIGxvYWRQcm9maWxlKClcbiAgbG9hZFNldHRpbmdzKClcbiAgbG9hZFBldCgpXG4gIGxvYWRNYXJrZXQoKVxuICBsb2FkV2lzaGxpc3QoKVxuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIubXVzaWMtaGlkZGVuLXZvaWNlXCIpPy5jbGljaygpXG4gIH0sIER1cmF0aW9uVW5pdC5zZWNvbmQpXG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIubXVzaWMtaGlkZGVuLXZvaWNlXCIpPy5jbGljaygpXG59KVxuXG5uZXcgTXV0YXRpb25PYnNlcnZlcihsb2FkKS5vYnNlcnZlKDxOb2RlPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29udGFpbmVyXCIpLCB7XG4gIGNoaWxkTGlzdDogdHJ1ZSxcbn0pXG5cbmxvYWRVSSgpXG5jb25zb2xlLmxvZyhcIkVsZGFyeWEgRW5oYW5jZW1lbnRzIGxvYWRlZC5cIilcbmxvYWRUYWtlb3ZlcigpXG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB0eXBlIHsgTWFpbk1lbnUgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvbWFpbl9tZW51XCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRNZW51KCk6IHZvaWQge1xuICBjb25zdCBtZW51SW5uZXJSaWdodCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWVudS1pbm5lci1yaWdodFwiKVxuICBpZiAoIW1lbnVJbm5lclJpZ2h0IHx8IG1lbnVJbm5lclJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIubWFpbi1tZW51LWVlXCIpKSByZXR1cm5cblxuICAvLyBSZW1vdmUgYmFua1xuICBtZW51SW5uZXJSaWdodC5xdWVyeVNlbGVjdG9yKFwiLm1haW4tbWVudS1iYW5rXCIpPy5yZW1vdmUoKVxuXG4gIC8vIEFkZCBGb3J1bVxuICBjb25zdCBtZW51VGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL21haW5fbWVudS5odG1sXCIpXG4gIGNvbnN0IG1haW5NZW51Rm9ydW06IE1haW5NZW51ID0ge1xuICAgIGNsYXNzOiBcImZvcnVtXCIsXG4gICAgaHJlZjogXCIvZm9ydW1cIixcbiAgICB0ZXh0OiBcIkZvcnVtXCIsXG4gIH1cblxuICBtZW51SW5uZXJSaWdodC5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBtZW51VGVtcGxhdGUucmVuZGVyKG1haW5NZW51Rm9ydW0pXG4gIClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHR5cGUgeyBIb21lQ29udGVudFNtYWxsIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2hvbWVfY29udGVudF9zbWFsbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkSG9tZUNvbnRlbnQoKTogdm9pZCB7XG4gIGNvbnN0IGhvbWVDb250ZW50U21hbGxzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJob21lLWNvbnRlbnQtc21hbGxzXCIpXG4gIGlmIChcbiAgICAhaG9tZUNvbnRlbnRTbWFsbHMgfHxcbiAgICBob21lQ29udGVudFNtYWxscy5xdWVyeVNlbGVjdG9yKFwiLmhvbWUtY29udGVudC1zbWFsbC1lZVwiKVxuICApXG4gICAgcmV0dXJuXG5cbiAgLy8gUmVtb3ZlIGJhbmtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJob21lLWJhbmtcIik/LnJlbW92ZSgpXG5cbiAgLy8gQWRkIGZvcnVtXG4gIGNvbnN0IHNtYWxsVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2hvbWVfY29udGVudF9zbWFsbC5odG1sXCIpXG4gIGNvbnN0IHNtYWxsQ29udGVudDogSG9tZUNvbnRlbnRTbWFsbCA9IHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgICBcIi9hc3NldHMvaW1nL21pbmlnYW1lcy90cmVhc3VyZWh1bnQvYTQ4YmJjNGU0ODQ5NzQ1ZWJlNmRiY2Y1MzEzZWIzZjAuanBnXCIsXG4gICAgaDQ6IFwiRm9ydW1cIixcbiAgICBocmVmOiBcIi9mb3J1bVwiLFxuICAgIGlkOiBcImZvcnVtXCIsXG4gIH1cblxuICBob21lQ29udGVudFNtYWxscy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBzbWFsbFRlbXBsYXRlLnJlbmRlcihzbWFsbENvbnRlbnQpXG4gIClcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=